mirror of
https://github.com/nix-community/home-manager
synced 2024-11-26 21:19:45 +01:00
emacs: optionally start service with the session
Add services.emacs.startWithUserSession boolean to indicate that Emacs must be started with the systemd user session. This is true by default unless socket activation is also true. In the past, the user had to choose between socket activation (to get the Emacs service started when the user uses emacsclient) and immediate start with the user session. When choosing immediate start over socket activation and if the Emacs service is stopped at some point, using emacsclient would start a new Emacs daemon but the service would still be turned off. This situation would prevent `home-manager switch` from completing successfully because it wouldn't be able to start the Emacs service as Emacs is already running. This new setting makes it possible to have both socket activation and immediate start at the same time. In this scenario, Emacs is started with the user session and, after the Emacs service is stopped, using emacsclient starts the service again. This new settings also makes it possible to have neither socket activation nor immediate start.
This commit is contained in:
parent
586ac1fd58
commit
931653b99f
3 changed files with 41 additions and 1 deletions
|
@ -81,6 +81,17 @@ in {
|
||||||
enable = mkEnableOption "systemd socket activation for the Emacs service";
|
enable = mkEnableOption "systemd socket activation for the Emacs service";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
startWithUserSession = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = !cfg.socketActivation.enable;
|
||||||
|
defaultText =
|
||||||
|
literalExpression "!config.services.emacs.socketActivation.enable";
|
||||||
|
example = true;
|
||||||
|
description = ''
|
||||||
|
Whether to launch Emacs service with the systemd user session.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
defaultEditor = mkOption rec {
|
defaultEditor = mkOption rec {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = false;
|
default = false;
|
||||||
|
@ -145,7 +156,7 @@ in {
|
||||||
ExecStopPost =
|
ExecStopPost =
|
||||||
"${pkgs.coreutils}/bin/chmod --changes +w ${socketDir}";
|
"${pkgs.coreutils}/bin/chmod --changes +w ${socketDir}";
|
||||||
};
|
};
|
||||||
} // optionalAttrs (!cfg.socketActivation.enable) {
|
} // optionalAttrs (cfg.startWithUserSession) {
|
||||||
Install = { WantedBy = [ "default.target" ]; };
|
Install = { WantedBy = [ "default.target" ]; };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -4,4 +4,6 @@
|
||||||
emacs-socket-27 = ./emacs-socket-27.nix;
|
emacs-socket-27 = ./emacs-socket-27.nix;
|
||||||
emacs-socket-28 = ./emacs-socket-28.nix;
|
emacs-socket-28 = ./emacs-socket-28.nix;
|
||||||
emacs-default-editor = ./emacs-default-editor.nix;
|
emacs-default-editor = ./emacs-default-editor.nix;
|
||||||
|
emacs-socket-and-startWithUserSession =
|
||||||
|
./emacs-socket-and-startWithUserSession.nix;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
{ lib, pkgs, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
{
|
||||||
|
services.emacs = {
|
||||||
|
enable = true;
|
||||||
|
socketActivation.enable = true;
|
||||||
|
startWithUserSession = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
nixpkgs.overlays = [
|
||||||
|
(self: super: rec {
|
||||||
|
emacs = pkgs.writeShellScriptBin "dummy-emacs-28.0.5" "" // {
|
||||||
|
outPath = "@emacs@";
|
||||||
|
};
|
||||||
|
emacsPackagesFor = _:
|
||||||
|
makeScope super.newScope (_: { emacsWithPackages = _: emacs; });
|
||||||
|
})
|
||||||
|
];
|
||||||
|
|
||||||
|
nmt.script = ''
|
||||||
|
assertFileContains \
|
||||||
|
home-files/.config/systemd/user/emacs.service \
|
||||||
|
"WantedBy=default.target"
|
||||||
|
'';
|
||||||
|
}
|
Loading…
Reference in a new issue