From 0f3dfc94ef9f70cdb800e0cf8e22ec9d3a0a3c70 Mon Sep 17 00:00:00 2001 From: schotts-fired Date: Wed, 29 Sep 2021 15:07:38 +0200 Subject: [PATCH] services.emacs: add option `extraOptions` This is to allow adding command-line arguments to the Emacs daemon. Previously only the Emacs client could be started with custom arguments. --- modules/services/emacs.nix | 11 ++++++++++- tests/modules/services/emacs/emacs-service-27.nix | 1 + tests/modules/services/emacs/emacs-service-28.nix | 1 + .../services/emacs/emacs-service-emacs.service | 2 +- tests/modules/services/emacs/emacs-socket-27.nix | 1 + tests/modules/services/emacs/emacs-socket-28.nix | 1 + .../modules/services/emacs/emacs-socket-emacs.service | 2 +- 7 files changed, 16 insertions(+), 3 deletions(-) diff --git a/modules/services/emacs.nix b/modules/services/emacs.nix index fecb19f49..f2568ee72 100644 --- a/modules/services/emacs.nix +++ b/modules/services/emacs.nix @@ -54,6 +54,15 @@ in { description = "The Emacs package to use."; }; + extraOptions = mkOption { + type = with types; listOf str; + default = [ ]; + example = [ "-f" "exwm-enable" ]; + description = '' + Extra command-line arguments to pass to emacs. + ''; + }; + client = { enable = mkEnableOption "generation of Emacs client desktop file"; arguments = mkOption { @@ -111,7 +120,7 @@ in { # when using socket activation. optionalString cfg.socketActivation.enable "=${escapeShellArg socketPath}" - }"''; + } ${escapeShellArgs cfg.extraOptions}"''; # Emacs will exit with status 15 after having received SIGTERM, which # is the default "KillSignal" value systemd uses to stop services. diff --git a/tests/modules/services/emacs/emacs-service-27.nix b/tests/modules/services/emacs/emacs-service-27.nix index fa5f9f62b..6bc99ced4 100644 --- a/tests/modules/services/emacs/emacs-service-27.nix +++ b/tests/modules/services/emacs/emacs-service-27.nix @@ -17,6 +17,7 @@ with lib; programs.emacs.enable = true; services.emacs.enable = true; services.emacs.client.enable = true; + services.emacs.extraOptions = [ "-f" "exwm-enable" ]; nmt.script = '' assertPathNotExists home-files/.config/systemd/user/emacs.socket diff --git a/tests/modules/services/emacs/emacs-service-28.nix b/tests/modules/services/emacs/emacs-service-28.nix index 092cd1453..febfe8288 100644 --- a/tests/modules/services/emacs/emacs-service-28.nix +++ b/tests/modules/services/emacs/emacs-service-28.nix @@ -17,6 +17,7 @@ with lib; programs.emacs.enable = true; services.emacs.enable = true; services.emacs.client.enable = true; + services.emacs.extraOptions = [ "-f" "exwm-enable" ]; nmt.script = '' assertPathNotExists home-files/.config/systemd/user/emacs.socket diff --git a/tests/modules/services/emacs/emacs-service-emacs.service b/tests/modules/services/emacs/emacs-service-emacs.service index 00b0c8eb2..64120f4c0 100644 --- a/tests/modules/services/emacs/emacs-service-emacs.service +++ b/tests/modules/services/emacs/emacs-service-emacs.service @@ -2,7 +2,7 @@ WantedBy=default.target [Service] -ExecStart=@runtimeShell@ -l -c "@emacs@/bin/emacs --fg-daemon" +ExecStart=@runtimeShell@ -l -c "@emacs@/bin/emacs --fg-daemon '-f' 'exwm-enable'" Restart=on-failure SuccessExitStatus=15 Type=notify diff --git a/tests/modules/services/emacs/emacs-socket-27.nix b/tests/modules/services/emacs/emacs-socket-27.nix index 0fd1be1be..b3b71e027 100644 --- a/tests/modules/services/emacs/emacs-socket-27.nix +++ b/tests/modules/services/emacs/emacs-socket-27.nix @@ -19,6 +19,7 @@ in { programs.emacs.enable = true; services.emacs.enable = true; services.emacs.client.enable = true; + services.emacs.extraOptions = [ "-f" "exwm-enable" ]; services.emacs.socketActivation.enable = true; nmt.script = '' diff --git a/tests/modules/services/emacs/emacs-socket-28.nix b/tests/modules/services/emacs/emacs-socket-28.nix index d2c04239c..911066656 100644 --- a/tests/modules/services/emacs/emacs-socket-28.nix +++ b/tests/modules/services/emacs/emacs-socket-28.nix @@ -19,6 +19,7 @@ in { programs.emacs.enable = true; services.emacs.enable = true; services.emacs.client.enable = true; + services.emacs.extraOptions = [ "-f" "exwm-enable" ]; services.emacs.socketActivation.enable = true; nmt.script = '' diff --git a/tests/modules/services/emacs/emacs-socket-emacs.service b/tests/modules/services/emacs/emacs-socket-emacs.service index a3687ead3..b44694d39 100644 --- a/tests/modules/services/emacs/emacs-socket-emacs.service +++ b/tests/modules/services/emacs/emacs-socket-emacs.service @@ -1,5 +1,5 @@ [Service] -ExecStart=@runtimeShell@ -l -c "@emacs@/bin/emacs --fg-daemon='%t/emacs/server'" +ExecStart=@runtimeShell@ -l -c "@emacs@/bin/emacs --fg-daemon='%t/emacs/server' '-f' 'exwm-enable'" ExecStartPost=@coreutils@/bin/chmod --changes -w %t/emacs ExecStopPost=@coreutils@/bin/chmod --changes +w %t/emacs Restart=on-failure