diff --git a/modules/services/emacs.nix b/modules/services/emacs.nix index b8ca9f02d..96c86ee78 100644 --- a/modules/services/emacs.nix +++ b/modules/services/emacs.nix @@ -35,7 +35,8 @@ let # Match the default socket path for the Emacs version so emacsclient continues # to work without wrapping it. - socketPath = "%t/emacs/server"; + socketDir = "%t/emacs"; + socketPath = "${socketDir}/server"; in { meta.maintainers = [ maintainers.tadfisher ]; @@ -112,6 +113,13 @@ in { SuccessExitStatus = 15; Restart = "on-failure"; + } // optionalAttrs (cfg.socketActivation.enable) { + # Use read-only directory permissions to prevent emacs from + # deleting systemd's socket file before exiting. + ExecStartPost = + "${pkgs.coreutils}/bin/chmod --changes -w ${socketDir}"; + ExecStopPost = + "${pkgs.coreutils}/bin/chmod --changes +w ${socketDir}"; }; } // optionalAttrs (!cfg.socketActivation.enable) { Install = { WantedBy = [ "default.target" ]; }; diff --git a/tests/modules/services/emacs/emacs-socket-27.nix b/tests/modules/services/emacs/emacs-socket-27.nix index 22619937d..0fd1be1be 100644 --- a/tests/modules/services/emacs/emacs-socket-27.nix +++ b/tests/modules/services/emacs/emacs-socket-27.nix @@ -31,7 +31,7 @@ in { assertFileContent home-files/.config/systemd/user/emacs.service \ ${ pkgs.substituteAll { - inherit (pkgs) runtimeShell; + inherit (pkgs) runtimeShell coreutils; src = ./emacs-socket-emacs.service; } } diff --git a/tests/modules/services/emacs/emacs-socket-28.nix b/tests/modules/services/emacs/emacs-socket-28.nix index f04d93cbe..d2c04239c 100644 --- a/tests/modules/services/emacs/emacs-socket-28.nix +++ b/tests/modules/services/emacs/emacs-socket-28.nix @@ -31,7 +31,7 @@ in { assertFileContent home-files/.config/systemd/user/emacs.service \ ${ pkgs.substituteAll { - inherit (pkgs) runtimeShell; + inherit (pkgs) runtimeShell coreutils; src = ./emacs-socket-emacs.service; } } diff --git a/tests/modules/services/emacs/emacs-socket-emacs.service b/tests/modules/services/emacs/emacs-socket-emacs.service index 52d446cf4..a3687ead3 100644 --- a/tests/modules/services/emacs/emacs-socket-emacs.service +++ b/tests/modules/services/emacs/emacs-socket-emacs.service @@ -1,5 +1,7 @@ [Service] ExecStart=@runtimeShell@ -l -c "@emacs@/bin/emacs --fg-daemon='%t/emacs/server'" +ExecStartPost=@coreutils@/bin/chmod --changes -w %t/emacs +ExecStopPost=@coreutils@/bin/chmod --changes +w %t/emacs Restart=on-failure SuccessExitStatus=15 Type=notify