diff options
Diffstat (limited to 'users/sterni/emacs/default.nix')
-rw-r--r-- | users/sterni/emacs/default.nix | 99 |
1 files changed, 70 insertions, 29 deletions
diff --git a/users/sterni/emacs/default.nix b/users/sterni/emacs/default.nix index 0a03c15586..9d057fef63 100644 --- a/users/sterni/emacs/default.nix +++ b/users/sterni/emacs/default.nix @@ -1,37 +1,56 @@ -{ depot, pkgs, ... }: +{ depot, pkgs, lib, ... }: let - inherit (pkgs.emacsGcc.pkgs) withPackages; + inherit (pkgs.stdenv.hostPlatform) is64bit; - emacs = withPackages (epkgs: [ - # basic setup - epkgs.elpaPackages.undo-tree - epkgs.melpaPackages.evil - epkgs.melpaPackages.evil-collection - epkgs.melpaPackages.use-package - # languages + # Wrap chktex(1) with the flags we want because the chktex flycheck checker + # ignores tex-chktex-extra-flags and has no other way to set flags. I did + # not want to mess around with chktexrc because that seems to involve copying + # around a lot of rules (that would need to be updated?). + # + # Warning 8 is about correct dash length. This is really annoying because it'll + # light up everywhere if you use typographically correct dashes in German text. + chktexLessWarnings = pkgs.writeShellScript "chktex-less-warnings" '' + exec chktex -n8 "$@" + ''; + + emacs = (pkgs.emacsPackagesFor pkgs.emacs29-pgtk).withPackages (epkgs: [ epkgs.bqn-mode - epkgs.elpaPackages.ada-mode + #epkgs.elpaPackages.ada-mode + epkgs.elpaPackages.rainbow-mode + epkgs.elpaPackages.undo-tree + epkgs.elpaPackages.which-key epkgs.melpaPackages.adoc-mode + epkgs.melpaPackages.cmake-mode + epkgs.melpaPackages.deft + epkgs.melpaPackages.direnv epkgs.melpaPackages.dockerfile-mode + epkgs.melpaPackages.editorconfig + epkgs.melpaPackages.elfeed + epkgs.melpaPackages.evil + epkgs.melpaPackages.evil-collection + epkgs.melpaPackages.flycheck epkgs.melpaPackages.haskell-mode + epkgs.melpaPackages.hl-todo epkgs.melpaPackages.jq-mode - epkgs.melpaPackages.languagetool + epkgs.melpaPackages.lsp-haskell + epkgs.melpaPackages.lsp-mode + epkgs.melpaPackages.lsp-ui + epkgs.melpaPackages.magit epkgs.melpaPackages.markdown-mode + epkgs.melpaPackages.meson-mode epkgs.melpaPackages.nix-mode + epkgs.melpaPackages.org-clock-csv + epkgs.melpaPackages.paredit + epkgs.melpaPackages.rainbow-delimiters epkgs.melpaPackages.sly + epkgs.melpaPackages.use-package epkgs.melpaPackages.yaml-mode epkgs.rust-mode - epkgs.urweb-mode - # misc - epkgs.melpaPackages.hl-todo - epkgs.melpaPackages.paredit - epkgs.elpaPackages.rainbow-mode - epkgs.melpaPackages.rainbow-delimiters - # beyond text editing - epkgs.melpaPackages.elfeed - epkgs.melpaPackages.magit epkgs.tvlPackages.tvl + epkgs.urweb-mode + ] ++ lib.optionals is64bit [ + epkgs.melpaPackages.languagetool ]); configDirectory = pkgs.symlinkJoin { @@ -41,15 +60,31 @@ let (pkgs.writeTextFile { name = "injected-emacs.d"; destination = "/nix-inject.el"; - text = '' - ;; bqn-mode - (setq bqn-interpreter-path "${pkgs.cbqn}/bin/BQN") + text = + # Java doesn't seem to be available for non 64bit platforms in nixpkgs + # CBQN doesn't seem to support i686 at least + lib.optionalString is64bit '' + ;; bqn-mode + (setq bqn-interpreter-path "${pkgs.cbqn}/bin/BQN") - ;; languagetool - (setq languagetool-java-bin "${pkgs.jre}/bin/java") - (setq languagetool-language-tool-jar "${pkgs.languagetool}/share/languagetool-commandline.jar") + ;; languagetool + (setq languagetool-java-bin "${pkgs.jre}/bin/java" + languagetool-console-command "${pkgs.languagetool}/share/languagetool-commandline.jar" + languagetool-server-command "${pkgs.languagetool}/share/languagetool-server.jar") + '' + '' - (provide 'nix-inject) + ;; use bash instead of fish from SHELL for some things, as it plays + ;; nicer with TERM=dumb, as I don't need/want vterm anyways. + ;; We want it to source /etc/profile for some extra setup that + ;; kicks in if TERM=dumb, meaning we can't use dash/sh mode. + (setq shell-file-name "${pkgs.bash}/bin/bash" + explicit-bash-args '("-l")) + + ;; chktex wrapper that disables warnings I don't want + (setq flycheck-tex-chktex-executable "${chktexLessWarnings}") + (setq tex-chktex-program "${chktexLessWarnings}") + + (provide 'nix-inject) ''; }) ]; @@ -60,10 +95,16 @@ let in # sadly we can't give an init-file via the command line -pkgs.writeShellScriptBin "emacs" '' +(pkgs.writeShellScriptBin "emacs" '' exec ${emacs}/bin/emacs \ --no-init-file \ --directory ${configDirectory} \ --eval "(require 'init)" \ "$@" -'' +'').overrideAttrs (super: { + buildCommand = '' + ${super.buildCommand} + + ln -s "${emacs}/bin/emacsclient" "$out/bin/emacsclient" + ''; +}) |