{ config, pkgs, lib, ... }: let pkgsUnstable = if pkgs.stdenv.isDarwin then import {} else import {}; 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; }; home.sessionVariables = { EDITOR = "${editorScript}/bin/edit"; }; home.file.".emacs.d" = { recursive = true; source = ../emacs/.emacs.d; }; home.file.".local/share/applications/emacsclient.desktop".source = desktopApplicationFile; }