about summary refs log tree commit diff
path: root/modules/emacs/default.nix
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--modules/emacs/default.nix107
1 files changed, 47 insertions, 60 deletions
diff --git a/modules/emacs/default.nix b/modules/emacs/default.nix
index 71bc24c..e546ddd 100644
--- a/modules/emacs/default.nix
+++ b/modules/emacs/default.nix
@@ -5,17 +5,16 @@
   pkgs,
   ...
 }:
-with lib;
 let
   cfg = config.nixfiles.modules.emacs;
 in
 {
-  options.nixfiles.modules.emacs.enable = mkEnableOption "GNU Emacs";
+  options.nixfiles.modules.emacs.enable = lib.mkEnableOption "GNU Emacs";
 
-  config = mkIf cfg.enable {
+  config = lib.mkIf cfg.enable {
     secrets.authinfo = {
       file = "${inputs.self}/secrets/authinfo";
-      owner = my.username;
+      owner = lib.my.username;
     };
 
     nixfiles.modules = {
@@ -40,7 +39,7 @@ in
       stylix.targets.emacs.enable = false;
 
       xdg.configFile =
-        mapAttrs
+        lib.mapAttrs
           (
             _: value:
             value
@@ -50,7 +49,7 @@ in
                 export DOOMDIR="''${XDG_CONFIG_HOME:-$HOME/.config}/doom"
 
                 if [[ ! -d "$EMACSDIR/.git" ]]; then
-                  ${getExe git.package} clone --depth=1 --branch=master \
+                  ${lib.getExe git.package} clone --depth=1 --branch=master \
                     "https://github.com/doomemacs/doomemacs" "$EMACSDIR"
                 fi
 
@@ -74,7 +73,7 @@ in
             "doom/init.el".source = ./doom/init.el;
             "doom/packages.el".source = ./doom/packages.el;
             "doom/config.el" = {
-              text = concatLines [
+              text = lib.concatLines [
                 (
                   let
                     extraBins = with pkgs; [
@@ -85,6 +84,9 @@ in
                         ]
                       )) # :checkers (spell +aspell)
                       asmfmt # :editor format
+                      shirepyright # :lang (python +lsp)
+                      bash-language-server # :lang (sh +lsp)
+                      cabal-install # :lang haskell
                       cargo # :lang rust
                       clang-tools # :lang (cc +lsp) :editor format
                       cmake-format # :lang cc :editor format
@@ -95,6 +97,7 @@ in
                       dockerfile-language-server-nodejs # :tools (docker +lsp)
                       dockfmt # :tools docker :editor format
                       editorconfig-core-c # :tools editorconfig
+                      eslint # :lang (json +lsp)
                       fd # doom!
                       gcc # :lang cc
                       gdb # :tools debugger
@@ -111,11 +114,9 @@ in
                       gotools # :lang go
                       graphviz # :lang (org +roam2) :lang plantuml
                       gzip # :tools tree-sitter
+                      haskell-language-server # :lang (haskell +lsp)
                       haskellPackages.cabal-fmt # :lang haskell :editor format
-                      haskellPackages.cabal-install # :lang haskell
-                      haskellPackages.haskell-language-server # :lang (haskell +lsp)
                       haskellPackages.hoogle # :lang haskell
-                      haskellPackages.ormolu # :lang haskell :editor format
                       html-tidy # :lang web :editor format
                       jdk # :lang java :lang plantuml :checkers grammar
                       languagetool # :checkers grammar
@@ -124,24 +125,14 @@ in
                       nixd # :lang (nix +lsp)
                       nixfmt # :lang nix :editor format
                       nls # :lang (nickel +lsp)
-                      nodePackages.bash-language-server # :lang (sh +lsp)
-                      # nodePackages.eslint # :lang (json +lsp)
                       nodePackages.js-beautify # :lang web
                       nodePackages.prettier # :editor format
-                      nodePackages.stylelint # :lang web
                       nodejs # :tools debugger
+                      ormolu # :lang haskell :editor format
                       pandoc # :lang org markdown latex
                       pinentry-emacs # doom!
-                      pipenv # :lang python
-                      poetry # :lang python
                       pre-commit # :tools magit
-                      pyright # :lang python :editor format
                       python3 # :lang python
-                      python3Packages.black # :lang python :editor format
-                      python3Packages.isort # :lang python :editor format
-                      python3Packages.nose2 # :lang python
-                      python3Packages.pyflakes # :lang python :editor format
-                      python3Packages.pytest # :lang python
                       ripgrep # doom!
                       rust-analyzer # :lang (rust +lsp)
                       rustc # :lang rust
@@ -150,10 +141,14 @@ in
                       shfmt # :lang sh :editor format
                       sops
                       sqlite # :lang (org +roam2) :tools lookup
+                      stylelint # :lang web
                       terraform-ls # :tools (terraform +lsp)
                       texlab # lang (tex +lsp)
                       texlive.combined.scheme-full # :lang org tex
+                      tinymist
+                      typst
                       unzip # :tools debugger
+                      uv # :lang python
                       vscode-langservers-extracted # :lang (json +lsp) (web +lsp)
                       wordnet # :tools (lookup +dictionary +offline)
                       yaml-language-server # :lang (yaml +lsp)
@@ -163,14 +158,14 @@ in
                   ''
                     ;; Integrate packages which are required by various modules
                     ;; without polluting the user's profile.
-                    (setq exec-path (append exec-path '(${concatMapStringsSep " " (x: ''"${x}/bin"'') extraBins})))
-                    (setenv "PATH" (concat (getenv "PATH") ":${concatMapStringsSep ":" (x: "${x}/bin") extraBins}"))
+                    (setq exec-path (append exec-path '(${lib.concatMapStringsSep " " (x: ''"${x}/bin"'') extraBins})))
+                    (setenv "PATH" (concat (getenv "PATH") ":${lib.concatMapStringsSep ":" (x: "${x}/bin") extraBins}"))
 
                     (appendq! auth-sources '(("${config.secrets.authinfo.path}")))
 
-                    ;; HACK Explicitly load specific Emacs packages from Nixpkgs.
-                    ;; For some reason providing them as "extraPackages" doesn't
-                    ;; work.
+                    ;; HACK Explicitly load specific Emacs packages from
+                    ;; Nixpkgs. For some reason providing them as
+                    ;; "extraPackages" doesn't work.
                     (add-to-list 'load-path "${pkgs.mu.mu4e}/share/emacs/site-lisp/mu4e")
                     (add-to-list 'load-path "${pkgs.emacsPackages.vterm}/share/emacs/site-lisp/elpa/vterm-${pkgs.emacsPackages.vterm.version}")
                     (load "${
@@ -189,17 +184,17 @@ in
                     (setq parinfer-rust-library "${pkgs.parinfer-rust-emacs}/lib/libparinfer_rust.so")
 
                     ;; :lang (org +roam2) :email mu4e
-                    (setq emacsql-sqlite-executable "${getExe pkgs.emacsql-sqlite}")
+                    (setq emacsql-sqlite-executable "${lib.getExe pkgs.emacsql-sqlite}")
 
                     ;; :lang plantuml
                     (setq plantuml-jar-path "${pkgs.plantuml}/lib/plantuml.jar"
-                          plantuml-executable-path "${getExe' pkgs.plantuml "plantuml"}"
+                          plantuml-executable-path "${lib.getExe' pkgs.plantuml "plantuml"}"
                           org-plantuml-jar-path plantuml-jar-path
                           org-plantuml-executable-path plantuml-executable-path)
 
                     ;; :app irc
-                    (setq circe-default-nick "${my.username}"
-                          circe-default-realname "${my.email}"
+                    (setq circe-default-nick "${lib.my.username}"
+                          circe-default-realname "${lib.my.email}"
                           circe-default-user circe-default-nick)
                   ''
                 )
@@ -210,37 +205,29 @@ in
                         doom-emoji-font "${emoji.name}-${toString sizes.terminal}")
                 '')
                 (
-                  with config.hm.accounts.email;
                   let
                     mu4eAccounts =
-                      let
-                        muAccounts = filter (a: a.mu.enable) (attrValues accounts);
-                      in
-                      concatMapStringsSep "\n" (
-                        a:
-                        with a;
-                        let
-                          personalAddresses = concatMapStringsSep " " (v: ''"${v}"'') aliases;
-                        in
-                        ''
-                          (set-email-account! "${name}"
-                            '((user-full-name           . "${realName}")
-                              (user-mail-address        . "${address}")
-                              (mu4e-inbox-folder        . "/${name}/${folders.inbox}")
-                              (mu4e-sent-folder         . "/${name}/${folders.sent}")
-                              (mu4e-drafts-folder       . "/${name}/${folders.drafts}")
-                              (mu4e-trash-folder        . "/${name}/${folders.trash}")
-                              (mu4e-refile-folder       . "/${name}/Archive")
-                              ${optionalString (signature.showSignature != "none")
-                                ''(mu4e-compose-signature   . "${replaceStrings [ "\n" ] [ "\\n" ] signature.text}")''
-                              }
-                              (+mu4e-personal-addresses . (${personalAddresses})))
-                            t)
-                        ''
-                      ) muAccounts;
+                      config.hm.accounts.email.accounts
+                      |> lib.attrValues
+                      |> lib.filter (x: x.mu.enable)
+                      |> lib.concatMapStringsSep "\n" (a: ''
+                        (set-email-account! "${a.name}"
+                          '((user-full-name           . "${a.realName}")
+                            (user-mail-address        . "${a.address}")
+                            (mu4e-inbox-folder        . "/${a.name}/${a.folders.inbox}")
+                            (mu4e-sent-folder         . "/${a.name}/${a.folders.sent}")
+                            (mu4e-drafts-folder       . "/${a.name}/${a.folders.drafts}")
+                            (mu4e-trash-folder        . "/${a.name}/${a.folders.trash}")
+                            (mu4e-refile-folder       . "/${a.name}/Archive")
+                            ${lib.optionalString (a.signature.showSignature != "none")
+                              ''(mu4e-compose-signature   . "${lib.replaceStrings [ "\n" ] [ "\\n" ] a.signature.text}")''
+                            }
+                            (+mu4e-personal-addresses . (${lib.concatMapStringsSep " " (x: ''"${x}"'') a.aliases})))
+                          t)
+                      '');
                   in
                   ''
-                    (setq mu4e-root-maildir "${maildirBasePath}")
+                    (setq mu4e-root-maildir "${config.hm.accounts.email.maildirBasePath}")
 
                     ${mu4eAccounts}
                   ''
@@ -256,12 +243,12 @@ in
           package = pkgs.emacs29-pgtk;
         };
 
-        bash.initExtra = mkAfter ''
+        bash.initExtra = lib.mkAfter ''
           export PATH="$PATH:$XDG_CONFIG_HOME/emacs/bin"
 
-          # https://github.com/akermu/emacs-libvterm
+          # https://github.com/akermu/emacs-libvterm?tab=readme-ov-file#shell-side-configuration
           if [[ "$INSIDE_EMACS" = vterm ]] && [[ -n "$EMACS_VTERM_PATH" ]] && [[ -f "$EMACS_VTERM_PATH/etc/emacs-vterm-bash.sh" ]]; then
-              source "$EMACS_VTERM_PATH/etc/emacs-vterm-bash.sh"
+            source "$EMACS_VTERM_PATH/etc/emacs-vterm-bash.sh"
           fi
 
           # Not sourced from inside Emacs for some reason. Maybe it's not

Consider giving Nix/NixOS a try! <3