From c549ee4f9737f66ae92751f284a5726812e8814b Mon Sep 17 00:00:00 2001 From: Evie Litherland-Smith Date: Tue, 24 Oct 2023 09:56:35 +0100 Subject: [PATCH] Run emacs as a system daemon Move emacs package definition (with emacsPackages) to system/emacs.nix Keep user config in home-manager as emacs service is installed as user service Remove extra expressions (formatters, lsp_servers) and bring back into default.nix Move config/ directory contents up one level --- home/emacs/default.nix | 122 +++++------------- home/emacs/{config => }/elfeed.org | 0 home/emacs/formatters.nix | 18 --- home/emacs/{config => }/init.el | 0 home/emacs/lsp_servers.nix | 20 --- .../modules/custom-email-config.el | 0 .../modules/custom-feed-config.el | 0 .../{config => }/modules/custom-ide-config.el | 0 .../modules/custom-ligatures-config.el | 0 .../modules/custom-project-config.el | 0 home/emacs/tree-sitter.nix | 86 ------------ home/hyprland/config.nix | 2 +- system/desktop.nix | 2 +- system/emacs.nix | 80 ++++++++++++ 14 files changed, 117 insertions(+), 213 deletions(-) rename home/emacs/{config => }/elfeed.org (100%) delete mode 100644 home/emacs/formatters.nix rename home/emacs/{config => }/init.el (100%) delete mode 100644 home/emacs/lsp_servers.nix rename home/emacs/{config => }/modules/custom-email-config.el (100%) rename home/emacs/{config => }/modules/custom-feed-config.el (100%) rename home/emacs/{config => }/modules/custom-ide-config.el (100%) rename home/emacs/{config => }/modules/custom-ligatures-config.el (100%) rename home/emacs/{config => }/modules/custom-project-config.el (100%) delete mode 100644 home/emacs/tree-sitter.nix create mode 100644 system/emacs.nix diff --git a/home/emacs/default.nix b/home/emacs/default.nix index f39fae2f..673b9b82 100644 --- a/home/emacs/default.nix +++ b/home/emacs/default.nix @@ -1,13 +1,11 @@ { config, pkgs, crafted-emacs, ... }: { - imports = [ ./formatters.nix ./lsp_servers.nix ]; stylix.targets.emacs.enable = false; xdg.configFile = { - emacs = { - source = ./config; - recursive = true; - }; + "emacs/init.el".source = ./init.el; + "emacs/elfeed.org".source = ./elfeed.org; + "emacs/modules".source = ./modules; "emacs/crafted-emacs".source = crafted-emacs; }; services.git-sync = { @@ -17,98 +15,48 @@ uri = "git+https://git.xenia.me.uk/xenia/Org.git"; }; }; - programs.emacs = { - enable = true; - package = with pkgs; - ((emacsPackagesFor emacs29-pgtk).emacsWithPackages (epkgs: - with epkgs; [ - # Theme - doom-themes - - # completion-packages - cape - consult - corfu - corfu-terminal - embark - embark-consult - marginalia - orderless - vertico - - # ide-packages - editorconfig - aggressive-indent - ibuffer-project - # custom - treesit-grammars.with-all-grammars - treesit-auto - apheleia - direnv - nix-mode - rust-mode - - # org-packages - denote - org-appear - - # ui-packages - all-the-icons - elisp-demos - helpful - - # workspaces-packages - tabspaces - - # writing-packages - markdown-mode - pandoc-mode - auctex - auctex-latexmk - - # email-packages - notmuch - notmuch-indicator - - # feed-packages - elfeed - elfeed-org - elfeed-webkit - elfeed-tube - elfeed-tube-mpv - - # Additional packages - which-key - magit - vterm - ])); - }; home = { packages = with pkgs; [ - # Emacs dependencies - coreutils - gnutls - ripgrep - cmake - fd - imagemagick - zstd - graphviz - zip - unzip - # Language-specific requirements - (aspellWithDicts (ds: with ds; [ en en-computers en-science ])) - languagetool - wordnet - findutils sqlite pandoc gfortran rustup texlive.combined.scheme-medium python3 + + # Linters nodePackages.stylelint + + # Formatters + nixfmt + beautysh + black + isort + nodePackages.fixjson + fprettify + shellharden + shfmt + stylua + python3Packages.mdformat + html-tidy + nodePackages.js-beautify + + # LSP Servers + nixd + fortls + shellcheck + marksman + luajitPackages.lua-lsp + texlab + nodePackages.pyright + nodePackages.yaml-language-server + nodePackages.bash-language-server + nodePackages.javascript-typescript-langserver + nodePackages.vscode-html-languageserver-bin + nodePackages.vscode-css-languageserver-bin + nodePackages.vscode-json-languageserver-bin + nodePackages.dockerfile-language-server-nodejs ]; }; } diff --git a/home/emacs/config/elfeed.org b/home/emacs/elfeed.org similarity index 100% rename from home/emacs/config/elfeed.org rename to home/emacs/elfeed.org diff --git a/home/emacs/formatters.nix b/home/emacs/formatters.nix deleted file mode 100644 index 7c5d38eb..00000000 --- a/home/emacs/formatters.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ config, lib, pkgs, ... }: - -{ - home.packages = with pkgs; [ - nixfmt - beautysh - black - isort - nodePackages.fixjson - fprettify - shellharden - shfmt - stylua - python3Packages.mdformat - html-tidy - nodePackages.js-beautify - ]; -} diff --git a/home/emacs/config/init.el b/home/emacs/init.el similarity index 100% rename from home/emacs/config/init.el rename to home/emacs/init.el diff --git a/home/emacs/lsp_servers.nix b/home/emacs/lsp_servers.nix deleted file mode 100644 index c05be723..00000000 --- a/home/emacs/lsp_servers.nix +++ /dev/null @@ -1,20 +0,0 @@ -{ config, lib, pkgs, ... }: - -{ - home.packages = with pkgs; [ - nixd - fortls - shellcheck - marksman - luajitPackages.lua-lsp - texlab - nodePackages.pyright - nodePackages.yaml-language-server - nodePackages.bash-language-server - nodePackages.javascript-typescript-langserver - nodePackages.vscode-html-languageserver-bin - nodePackages.vscode-css-languageserver-bin - nodePackages.vscode-json-languageserver-bin - nodePackages.dockerfile-language-server-nodejs - ]; -} diff --git a/home/emacs/config/modules/custom-email-config.el b/home/emacs/modules/custom-email-config.el similarity index 100% rename from home/emacs/config/modules/custom-email-config.el rename to home/emacs/modules/custom-email-config.el diff --git a/home/emacs/config/modules/custom-feed-config.el b/home/emacs/modules/custom-feed-config.el similarity index 100% rename from home/emacs/config/modules/custom-feed-config.el rename to home/emacs/modules/custom-feed-config.el diff --git a/home/emacs/config/modules/custom-ide-config.el b/home/emacs/modules/custom-ide-config.el similarity index 100% rename from home/emacs/config/modules/custom-ide-config.el rename to home/emacs/modules/custom-ide-config.el diff --git a/home/emacs/config/modules/custom-ligatures-config.el b/home/emacs/modules/custom-ligatures-config.el similarity index 100% rename from home/emacs/config/modules/custom-ligatures-config.el rename to home/emacs/modules/custom-ligatures-config.el diff --git a/home/emacs/config/modules/custom-project-config.el b/home/emacs/modules/custom-project-config.el similarity index 100% rename from home/emacs/config/modules/custom-project-config.el rename to home/emacs/modules/custom-project-config.el diff --git a/home/emacs/tree-sitter.nix b/home/emacs/tree-sitter.nix deleted file mode 100644 index de949337..00000000 --- a/home/emacs/tree-sitter.nix +++ /dev/null @@ -1,86 +0,0 @@ -{ config, lib, pkgs, ... }: -# Usage: -# pkgs.tree-sitter.withPlugins (p: [ p.tree-sitter-c p.tree-sitter-java ... ]) -# -# or for all grammars: -# pkgs.tree-sitter.withPlugins (_: allGrammars) -# which is equivalent to -# pkgs.tree-sitter.withPlugins (p: builtins.attrValues p) -{ - home.packages = [ - (pkgs.tree-sitter.withPlugins (p: - with p; [ - tree-sitter-bash - tree-sitter-bibtex - tree-sitter-css - tree-sitter-dockerfile - tree-sitter-elisp - tree-sitter-fortran - tree-sitter-html - tree-sitter-javascript - tree-sitter-json - tree-sitter-latex - tree-sitter-llvm - tree-sitter-lua - tree-sitter-make - tree-sitter-markdown - tree-sitter-nix - tree-sitter-python - tree-sitter-regex - tree-sitter-rst - tree-sitter-rust - tree-sitter-scss - tree-sitter-toml - tree-sitter-typescript - tree-sitter-yaml - ])) - ]; - xdg.configFile."tree-sitter/config.json".text = builtins.toJSON { - parser-directories = [ ]; - theme = { - "type.builtin" = { - color = 23; - bold = true; - }; - variable.parameter = { underline = true; }; - comment = { - color = 245; - italic = true; - }; - constructor = 136; - "string.special" = 30; - variable.builtin = { bold = true; }; - "constant.builtin" = { - bold = true; - color = 94; - }; - "function.builtin" = { - color = 26; - bold = true; - }; - function = 26; - attribute = { - color = 124; - italic = true; - }; - constant = 94; - punctuation.delimiter = 239; - type = 23; - operator = { - bold = true; - color = 239; - }; - punctuation.bracket = 239; - keyword = 56; - string = 28; - property = 124; - number = { - bold = true; - color = 94; - }; - embedded = null; - module = 136; - tag = 18; - }; - }; -} diff --git a/home/hyprland/config.nix b/home/hyprland/config.nix index a57747ae..302903ec 100644 --- a/home/hyprland/config.nix +++ b/home/hyprland/config.nix @@ -107,7 +107,7 @@ in '' # Common program shortcuts bind = SUPER, Space, exec, pkill anyrun || anyrun - bind = SUPER, E, exec, emacs + bind = SUPER, E, exec, emacsclient -c -a "alacritty -e nano" bind = SUPER, Return, exec, alacritty bind = SUPER SHIFT, Return, exec, [float] alacritty diff --git a/system/desktop.nix b/system/desktop.nix index c09a91ce..295c921e 100644 --- a/system/desktop.nix +++ b/system/desktop.nix @@ -1,7 +1,7 @@ { config, lib, pkgs, ... }: { - imports = [ ./default.nix ./firefox.nix ]; + imports = [ ./default.nix ./emacs.nix ./firefox.nix ]; environment.systemPackages = with pkgs; [ dex mesa diff --git a/system/emacs.nix b/system/emacs.nix new file mode 100644 index 00000000..0c48fe0b --- /dev/null +++ b/system/emacs.nix @@ -0,0 +1,80 @@ +{ config, lib, pkgs, ... }: + +{ + environment.systemPackages = with pkgs; [ + coreutils + fd + ripgrep + imagemagick + languagetool + wordnet + (aspellWithDicts (ds: with ds; [ en en-computers en-science ])) + ]; + services.emacs = { + enable = true; + install = true; + package = with pkgs; + ((emacsPackagesFor emacs29-pgtk).emacsWithPackages (epkgs: + with epkgs; [ + # Theme + doom-themes + + # completion-packages + cape + consult + corfu + corfu-terminal + embark + embark-consult + marginalia + orderless + vertico + + # ide-packages + editorconfig + aggressive-indent + ibuffer-project + # custom + treesit-grammars.with-all-grammars + treesit-auto + apheleia + direnv + nix-mode + rust-mode + + # org-packages + denote + org-appear + + # ui-packages + all-the-icons + elisp-demos + helpful + + # workspaces-packages + tabspaces + + # writing-packages + markdown-mode + pandoc-mode + auctex + auctex-latexmk + + # email-packages + notmuch + notmuch-indicator + + # feed-packages + elfeed + elfeed-org + elfeed-webkit + elfeed-tube + elfeed-tube-mpv + + # Additional packages + which-key + magit + vterm + ])); + }; +}