# Dev profile: compilers, language servers, dev CLIs, and Emacs. Opt-in per machine. # # Deliberately username-agnostic (enzo uses hwebs, kusanagi uses henz), so this # file sets NO users.users.*: dev tools go to environment.systemPackages. { pkgs, ... }: { environment.systemPackages = with pkgs; [ zig prettier (aspellWithDicts ( dicts: with dicts; [ en en-computers en-science ] )) # toolchains / build gcc pkg-config gnumake autoconf automake libtool cargo nodejs guile direnv gdb # language servers / formatters lua-language-server nil clang-tools marksman gopls ruff basedpyright zls nixfmt ]; services.emacs = { enable = true; package = let emacs = pkgs.emacs-pgtk.overrideAttrs (old: { postInstall = (old.postInstall or "") + '' # I only want the client version rm -f $out/share/applications/emacs.desktop ''; }); in (pkgs.emacsPackagesFor emacs).withPackages (epkgs: [ # NB: no g.tree-sitter-zig -- nixpkgs builds it from maxxnino/tree-sitter-zig, # but zig-ts-mode requires the tree-sitter-grammars/tree-sitter-zig variant # (different node names). The zig grammar is installed instead via # `C-u M-x zig-ts-install-grammars' into ~/.config/emacs/tree-sitter/. (epkgs.treesit-grammars.with-grammars (g: [ g.tree-sitter-nix g.tree-sitter-javascript ])) epkgs.vterm ]); }; }