nixos/home/emacs/default.nix

177 lines
4.3 KiB
Nix
Raw Normal View History

{
config,
pkgs,
fonts,
...
}: {
imports = [../shell/default.nix];
services.emacs = {
enable = true;
package = config.programs.emacs.finalPackage;
defaultEditor = true;
client.enable = true;
socketActivation.enable = true;
startWithUserSession = false;
};
programs.emacs = {
# Clone emacs config from https://git.xenia.me.uk/pixelifytica/emacs.git
# git clone https://git.xenia.me.uk/pixelifytica/emacs.git ~/.emacs.d
enable = true;
package = pkgs.emacs29-pgtk;
extraConfig = let
fixed-font-family = "${fonts.monospace.name}";
variable-font-family = "${fonts.sansSerif.name}";
font-height = builtins.toString (builtins.floor (builtins.mul fonts.sizes.applications 10));
custom-theme-name = "nix";
custom-theme = pkgs.writeTextFile {
name = "custom-emacs-theme";
destination = "/${custom-theme-name}-theme.el";
text = ''
(deftheme ${custom-theme-name}
"Use Nix customised fonts for main faces")
(custom-theme-set-variables
'${custom-theme-name}
'(menu-bar-mode nil))
(custom-theme-set-faces
'${custom-theme-name}
'(default ((t (:family "${fixed-font-family}" :height ${font-height}))))
'(fixed-pitch ((t (:family "${fixed-font-family}"))))
'(fixed-pitch-serif ((t (:family "${fixed-font-family}"))))
'(variable-pitch ((t (:family "${variable-font-family}")))))
(provide-theme '${custom-theme-name})
'';
};
custom-theme-hash = builtins.hashFile "sha256" "${custom-theme}/${custom-theme-name}-theme.el";
in ''
(add-to-list 'custom-theme-load-path "${custom-theme}")
(add-to-list 'custom-safe-themes "${custom-theme-hash}")
(load-theme '${custom-theme-name})
'';
extraPackages = epkgs:
with epkgs; [
2024-07-07 07:17:05 +01:00
# Tree-sitter grammars, not a real Emacs package
treesit-grammars.with-all-grammars
2024-07-11 16:32:40 +01:00
# Maildir utils with linked Emacs package
mu4e
2024-07-07 07:17:05 +01:00
# Theme
base16-theme
# UI
all-the-icons
nerd-icons
nerd-icons-completion
nerd-icons-corfu
nerd-icons-dired
nerd-icons-ibuffer
2024-07-11 07:11:59 +01:00
minions
2024-07-07 07:17:05 +01:00
ligature
page-break-lines
helpful
which-key
ace-window
link-hint
diff-hl
# Completion
2024-07-11 16:32:40 +01:00
vertico
orderless
marginalia
2024-07-07 07:17:05 +01:00
cape
2024-07-11 16:32:40 +01:00
corfu
corfu-terminal
2024-07-07 07:17:05 +01:00
consult
consult-eglot
consult-flyspell
embark
embark-consult
flyspell-correct
2024-07-11 16:32:40 +01:00
tempel
2024-07-07 07:17:05 +01:00
# IDE
treesit-auto
2024-07-11 16:32:40 +01:00
magit
forge
2024-07-07 07:17:05 +01:00
flymake-popon
flymake-shellcheck
flymake-yamllint
flymake-eslint
apheleia
envrc
rainbow-delimiters
aggressive-indent
python-docstring
nix-mode
lua-mode
2024-07-11 16:32:40 +01:00
# Writing
2024-07-07 07:17:05 +01:00
org-roam
org-noter
citar
citar-embark
markdown-mode
pandoc-mode
auctex
2024-07-11 16:32:40 +01:00
htmlize
# Other
2024-07-11 16:35:03 +01:00
password-store
2024-07-11 16:32:40 +01:00
emms
2024-07-07 07:17:05 +01:00
bbdb
ement
elfeed
elfeed-org
];
};
home.packages = with pkgs; [
# Emacs requirements
imagemagick
languagetool
wordnet
graphviz # For org-roam graph
mp3info # For EMMS
# Language-specific requirements
sqlite
pandoc
ghostscript
poppler_utils
# Customised LaTeX install
(texlive.combine
{inherit (pkgs.texlive) scheme-medium dvisvgm dvipng wrapfig amsmath ulem hyperref capt-of;})
python3Packages.pygments
# Development tools
## Code screenshots
silicon
## Linters
shellcheck
yamllint
nodePackages.eslint
## Formatters
alejandra
shfmt
ruff
black
isort
stylua
nodePackages.prettier
## Language servers
nil # Nix lsp
lua-language-server
nodePackages.pyright
nodePackages.typescript-language-server
## Interpreters
(python3.withPackages
(ps: with ps; [tkinter numpy scipy xarray matplotlib]))
(luajit.withPackages
(ps: [(ps.callPackage ./luarocks/scilua.nix {})]))
];
xdg.configFile = {
"ruff/pyproject.toml".source = ./ruff.toml;
"pypoetry/config.toml".source = ./pypoetry.toml;
};
}