diff options
Diffstat (limited to 'accounts/gkleen@skadhi/emacs/default.nix')
| -rw-r--r-- | accounts/gkleen@skadhi/emacs/default.nix | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/accounts/gkleen@skadhi/emacs/default.nix b/accounts/gkleen@skadhi/emacs/default.nix new file mode 100644 index 00000000..4cf6b0b9 --- /dev/null +++ b/accounts/gkleen@skadhi/emacs/default.nix | |||
| @@ -0,0 +1,67 @@ | |||
| 1 | { pkgs, lib, config, sources, ... }: | ||
| 2 | let | ||
| 3 | editor = pkgs.symlinkJoin { | ||
| 4 | name = "${config.services.emacs.package.name}-editor"; | ||
| 5 | buildInputs = with pkgs; [ makeWrapper ]; | ||
| 6 | paths = [ config.services.emacs.package ]; | ||
| 7 | postBuild = '' | ||
| 8 | wrapProgram $out/bin/emacsclient \ | ||
| 9 | --inherit-argv0 \ | ||
| 10 | --add-flags ${lib.escapeShellArg (lib.escapeShellArgs config.services.emacs.client.arguments)} | ||
| 11 | ''; | ||
| 12 | }; | ||
| 13 | in { | ||
| 14 | config = { | ||
| 15 | home.persistence."/persistent".directories = [ | ||
| 16 | ".local/state/emacs/saves" ".local/state/emacs/undo" | ||
| 17 | ]; | ||
| 18 | |||
| 19 | programs.emacs = { | ||
| 20 | enable = true; | ||
| 21 | package = pkgs.emacs-pgtk; | ||
| 22 | extraPackages = epkgs: with epkgs; [ | ||
| 23 | evil evil-dvorak undo-tree magit haskell-tng-mode nix-mode | ||
| 24 | yaml-mode json-mode shakespeare-mode smart-mode-line | ||
| 25 | highlight-parentheses highlight-symbol ag sass-mode | ||
| 26 | lua-mode fira-code-mode use-package wanderlust # notmuch | ||
| 27 | git-gutter scratch edit-server mediawiki editorconfig | ||
| 28 | typescript-mode markdown-mode nftables-mode rustic | ||
| 29 | lsp-mode lsp-ui direnv company projectile | ||
| 30 | tomorrow-night-paradise-theme | ||
| 31 | treesit-grammars.with-all-grammars magit-delta scad-mode | ||
| 32 | typst-ts-mode | ||
| 33 | ]; | ||
| 34 | overrides = self: super: { | ||
| 35 | tomorrow-night-paradise-theme = super.trivialBuild { | ||
| 36 | inherit (sources.tomorrow-night-paradise-theme) pname version src; | ||
| 37 | }; | ||
| 38 | scratch = pkgs.stdenv.mkDerivation { | ||
| 39 | inherit (sources.emacs-scratch_el) pname version src; | ||
| 40 | |||
| 41 | phases = [ "unpackPhase" "installPhase" ]; | ||
| 42 | |||
| 43 | installPhase = '' | ||
| 44 | install -Dt $out/share/emacs/site-lisp scratch.el | ||
| 45 | ''; | ||
| 46 | }; | ||
| 47 | }; | ||
| 48 | }; | ||
| 49 | xdg.configFile."emacs/init.el".source = pkgs.substitute { | ||
| 50 | src = ./emacs.el; | ||
| 51 | substitutions = [ | ||
| 52 | "--subst-var-by" "ksshaskpass" (lib.getExe pkgs.kdePackages.ksshaskpass) | ||
| 53 | ]; | ||
| 54 | }; | ||
| 55 | |||
| 56 | home.sessionVariables.EDITOR = lib.getExe' editor "emacsclient"; | ||
| 57 | |||
| 58 | services.emacs = { | ||
| 59 | enable = true; | ||
| 60 | socketActivation.enable = true; | ||
| 61 | client = { | ||
| 62 | enable = true; | ||
| 63 | arguments = lib.mkForce ["--create-frame" "--alternate-editor" (lib.getExe config.services.emacs.package)]; | ||
| 64 | }; | ||
| 65 | }; | ||
| 66 | }; | ||
| 67 | } | ||
