services/emacs: add option to set emacsclient
as the default editor (#2545)
* services/emacs: add `defaultEditor` option Sets `emacsclient` as the default editor using the `EDITOR` environment variable.
This commit is contained in:
parent
05d655146b
commit
f3be3cda6a
|
@ -80,6 +80,16 @@ in {
|
|||
socketActivation = {
|
||||
enable = mkEnableOption "systemd socket activation for the Emacs service";
|
||||
};
|
||||
|
||||
defaultEditor = mkOption rec {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
example = !default;
|
||||
description = ''
|
||||
Whether to configure <command>emacsclient</command> as the default
|
||||
editor using the <envar>EDITOR</envar> environment variable.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable (mkMerge [
|
||||
|
@ -139,7 +149,16 @@ in {
|
|||
Install = { WantedBy = [ "default.target" ]; };
|
||||
};
|
||||
|
||||
home.packages = optional cfg.client.enable (hiPrio clientDesktopItem);
|
||||
home = {
|
||||
packages = optional cfg.client.enable (hiPrio clientDesktopItem);
|
||||
|
||||
sessionVariables = mkIf cfg.defaultEditor {
|
||||
EDITOR = getBin (pkgs.writeShellScript "editor" ''
|
||||
exec ${
|
||||
getBin cfg.package
|
||||
}/bin/emacsclient "''${@:---create-frame}"'');
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
(mkIf cfg.socketActivation.enable {
|
||||
|
|
|
@ -3,4 +3,5 @@
|
|||
emacs-service-28 = ./emacs-service-28.nix;
|
||||
emacs-socket-27 = ./emacs-socket-27.nix;
|
||||
emacs-socket-28 = ./emacs-socket-28.nix;
|
||||
emacs-default-editor = ./emacs-default-editor.nix;
|
||||
}
|
||||
|
|
24
tests/modules/services/emacs/emacs-default-editor.nix
Normal file
24
tests/modules/services/emacs/emacs-default-editor.nix
Normal file
|
@ -0,0 +1,24 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
{
|
||||
nixpkgs.overlays = [
|
||||
(self: super: {
|
||||
# Use `cat` instead of `echo` to prevent arguments from being
|
||||
# interpreted as an option.
|
||||
emacs = pkgs.writeShellScriptBin "emacsclient"
|
||||
''${pkgs.coreutils}/bin/cat <<< "$*"'';
|
||||
})
|
||||
];
|
||||
|
||||
services.emacs = {
|
||||
defaultEditor = true;
|
||||
enable = true;
|
||||
};
|
||||
|
||||
nmt.script = "source ${
|
||||
pkgs.substituteAll {
|
||||
inherit (pkgs) coreutils;
|
||||
src = ./emacs-default-editor.sh;
|
||||
}
|
||||
}";
|
||||
}
|
18
tests/modules/services/emacs/emacs-default-editor.sh
Normal file
18
tests/modules/services/emacs/emacs-default-editor.sh
Normal file
|
@ -0,0 +1,18 @@
|
|||
set +u
|
||||
source $TESTED/home-path/etc/profile.d/hm-session-vars.sh
|
||||
set -u
|
||||
|
||||
check_arguments () {
|
||||
if [ "$1" != "$2" ]; then
|
||||
@coreutils@/bin/cat <<- EOF
|
||||
Expected arguments:
|
||||
$1
|
||||
but got:
|
||||
$2
|
||||
EOF
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
check_arguments "--create-frame" "$($EDITOR)"
|
||||
check_arguments "foo bar baz" "$($EDITOR foo bar baz)"
|
Loading…
Reference in a new issue