nixos/home/emacs/default.nix
Evie Litherland-Smith 3e0a4bb725 Install libsecret to desktop by default, needed for mbsync
Move alacritty opacity and decoration settings to sway only. Remove
Emacs opacity by default, todo maybe add to sway only somehow...
2024-07-10 08:36:28 +01:00

188 lines
4.4 KiB
Nix

{
config,
pkgs,
fonts,
...
}: {
imports = [
../shell/default.nix
./python/default.nix
./lua/default.nix
./javascript/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; [
# Tree-sitter grammars, not a real Emacs package
treesit-grammars.with-all-grammars
# Theme
base16-theme
# UI
all-the-icons
nerd-icons
nerd-icons-completion
nerd-icons-corfu
nerd-icons-dired
nerd-icons-ibuffer
diminish
ligature
page-break-lines
helpful
which-key
ace-window
link-hint
diff-hl
# Completion
cape
consult
consult-eglot
consult-flyspell
corfu
corfu-terminal
embark
embark-consult
marginalia
orderless
vertico
# Templates
tempel
license-templates
gitignore-templates
# spell-checking
flyspell-correct
# password-store
pass
password-store
# IDE
treesit-auto
flymake-popon
flymake-shellcheck
flymake-yamllint
flymake-eslint
apheleia
envrc
rainbow-delimiters
aggressive-indent
python-docstring
nix-mode
lua-mode
# Media
emms
# org-mode
org-roam
org-noter
# org-cite
citar
citar-embark
# org-mode HTML export
htmlize
# Projects
magit
forge
treemacs
treemacs-nerd-icons
# Writing
markdown-mode
pandoc-mode
auctex
auctex-latexmk
latex-preview-pane
# Contacts
mu4e
bbdb
ement
# RSS feeds
elfeed
elfeed-org
elfeed-tube
];
};
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
];
}