{ self, pkgs, lib, ... }: let packages = epkgs: with epkgs; [ aidermacs # pair programming in Emacs with Aider cape cargo consult consult-denote corfu denote denote-journal denote-markdown denote-org denote-silo denote-sequence diminish direnv docker docker-compose-mode dockerfile-mode exec-path-from-shell git-link go-mode gotest hcl-mode jq-mode json-mode json-reformat magit marginalia markdown-mode nix-mode orderless protobuf-mode rg rust-mode terraform-mode toml-mode tree-sitter tree-sitter-langs treesit-grammars.with-all-grammars vertico yaml-mode yasnippet yasnippet-capf ]; emacsFiles = [ "early-init.el" "init.el" "site-lisp/init-base.el" "site-lisp/init-completion.el" "site-lisp/init-eshell.el" "site-lisp/init-programming.el" "site-lisp/init-text.el" "site-lisp/init-ui.el" ]; mkEmacsFile = file: { ".config/emacs/${file}" = { source = "${self}/home/programs/emacs/${file}"; }; }; in { home.file = lib.mkMerge (map mkEmacsFile emacsFiles); programs.emacs = { enable = true; extraPackages = packages; # FIXME: https://github.com/NixOS/nixpkgs/issues/395169 package = pkgs.emacs.override { withNativeCompilation = false; }; }; home.packages = with pkgs; [ aspell aspellDicts.en aspellDicts.en-science aspellDicts.en-computers ]; home.sessionVariables = { EDITOR = "${pkgs.emacs}/bin/emacsclient -a="; ASPELL_CONF = "dict-dir ${pkgs.aspellDicts.en}/lib/aspell"; }; }