summary refs log tree commit diff stats
path: root/user/modules/emacs.nix
diff options
context:
space:
mode:
Diffstat (limited to 'user/modules/emacs.nix')
-rw-r--r--user/modules/emacs.nix48
1 files changed, 46 insertions, 2 deletions
diff --git a/user/modules/emacs.nix b/user/modules/emacs.nix
index 82a22b52..6860627e 100644
--- a/user/modules/emacs.nix
+++ b/user/modules/emacs.nix
@@ -1,9 +1,53 @@
-{ config, pkgs, ... }:
+{ config, pkgs, lib, ... }:
 
+let
+  pkgsUnstable = if pkgs.stdenv.isDarwin then import <nixpkgs-unstable> {} else import <nixos-unstable> {};
+  emacsPackage = import ../packages/emacs.nix {
+    pkgs = pkgs.unstable;
+    emacs = pkgs.unstable.emacs;
+  };
+
+  editorScript = pkgs.writeScriptBin "edit" ''
+    #!${pkgs.runtimeShell}
+    if [ -z "$1" ]; then
+      exec ${emacsPackage}/bin/emacsclient --create-frame --alternate-editor ${emacsPackage}/bin/emacs
+    else
+      exec ${emacsPackage}/bin/emacsclient --alternate-editor ${emacsPackage}/bin/emacs "$@"
+    fi
+  '';
+  desktopApplicationFile = pkgs.writeTextFile {
+    name = "emacsclient.desktop";
+    destination = "/share/applications/emacsclient.desktop";
+    text = ''
+      [Desktop Entry]
+      Name=Emacsclient
+      GenericName=Text Editor
+      Comment=Edit text
+      MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++;
+      Exec=${editorScript}/bin/edit %F
+      Icon=emacs
+      Type=Application
+      Terminal=false
+      Categories=Development;TextEditor;
+      StartupWMClass=Emacs
+      Keywords=Text;Editor;
+    '';
+  };
+in
 {
+  home.packages = [
+    emacsPackage
+    editorScript
+  ];
+  nixpkgs.config.packageOverrides = {
+    myEmacs = emacsPackage;
+  };
+  systemd.user.sessionVariables = {
+    EDITOR = lib.mkOverride 900 "${editorScript}/bin/edit";
+  };
   home.file.".emacs.d" = {
     recursive = true;
     source = ../emacs/.emacs.d;
   };
-  home.file.".local/share/applications/emacsclient.desktop".source = ../emacs/.local/share/applications/emacsclient.desktop;
+  home.file.".local/share/applications/emacsclient.desktop".source = desktopApplicationFile;
 }