tvl-depot/users/sterni/emacs/default.nix
sterni e4d87b1fd2 feat(sterni/emacs): load org-tracker from mutable path in home dir
Packaging this seemed a little tricky due to some quirks of the code,
but it's best to solve that whenever it's actually in depot. For now I
break it often enough that it's useful to be able to edit its source
quickly.

Still missing some necessary configuration which I'll probably steal
from grfn next week or so.

Change-Id: I1300807f7b1bc39ddb9f792c2ee500f4dd72d002
Reviewed-on: https://cl.tvl.fyi/c/depot/+/5676
Autosubmit: sterni <sternenseemann@systemli.org>
Tested-by: BuildkiteCI
Reviewed-by: sterni <sternenseemann@systemli.org>
2022-05-26 11:50:11 +00:00

93 lines
2.7 KiB
Nix

{ depot, pkgs, ... }:
let
inherit (pkgs.emacsNativeComp.pkgs) withPackages;
emacs = withPackages (epkgs: [
epkgs.bqn-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.direnv
epkgs.melpaPackages.dockerfile-mode
epkgs.melpaPackages.editorconfig
epkgs.melpaPackages.elfeed
epkgs.melpaPackages.evil
epkgs.melpaPackages.evil-collection
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.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.tvlPackages.tvl
epkgs.urweb-mode
# TODO(sterni): until org-tracker is part of depot
epkgs.ivy
epkgs.dash
epkgs.s
epkgs.jiralib2
]);
configDirectory = pkgs.symlinkJoin {
name = "emacs.d";
paths = [
./.
(pkgs.writeTextFile {
name = "injected-emacs.d";
destination = "/nix-inject.el";
text = ''
;; bqn-mode
(setq bqn-interpreter-path "${pkgs.cbqn}/bin/BQN")
;; 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")
;; 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"))
(provide 'nix-inject)
'';
})
];
postBuild = ''
rm "$out/default.nix"
'';
};
in
# sadly we can't give an init-file via the command line
(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"
'';
})