about summary refs log tree commit diff
path: root/tools
diff options
context:
space:
mode:
authorVincent Ambo <tazjin@google.com>2019-12-16T23·55+0000
committerVincent Ambo <tazjin@google.com>2019-12-16T23·57+0000
commit05168b9a3c8209d900df632e9fc57f7e744e07a4 (patch)
tree53e298bbfdc124475cf5956deffa381e64de0a74 /tools
parent43f07099a7adad1b8401b5a591bb418a0860239b (diff)
feat(emacs): Add 'withLocalEmacs' override function
This function makes it possible to build an Emacs instance that,
instead of launching an Emacs built by Nix, configures an Emacs
already present on the system to use the packages built by Nix.

This **requires** that the versions of the two Emacsen (i.e. the one
used by Nix to build and the one used to run the packages) are kept in
sync, otherwise byte-code incompatibilities may lead to undefined
behaviour.
Diffstat (limited to 'tools')
-rw-r--r--tools/emacs/default.nix12
1 files changed, 12 insertions, 0 deletions
diff --git a/tools/emacs/default.nix b/tools/emacs/default.nix
index 5ab790c2aea3..54bd0d80eafe 100644
--- a/tools/emacs/default.nix
+++ b/tools/emacs/default.nix
@@ -101,4 +101,16 @@ in lib.fix(self: l: f: third_party.writeShellScriptBin "tazjins-emacs" ''
     # Call withLocalConfig with the path to a *folder* containing a
     # `local.el` which provides local system configuration.
     withLocalConfig = confDir: self confDir f;
+
+    # Build a derivation that uses the specified local Emacs (i.e.
+    # built outside of Nix) instead
+    withLocalEmacs = emacsBin: third_party.writeShellScriptBin "tazjins-emacs" ''
+      exec ${emacsBin} \
+        --debug-init \
+        --no-site-file \
+        --no-init-file \
+        --directory ${(tazjinsEmacs f).deps}/share/emacs/site-lisp \
+        --directory ${./config} ${if l != null then "--directory ${l}" else ""} \
+        --eval "(require 'init)" $@
+    '';
   }) null identity