launchd: restore gui domain defaults
User-domain agents are not rediscovered from the user LaunchAgents directory after reboot. Let built-in agents inherit the GUI default while keeping explicit user-domain configuration available.
This commit is contained in:
parent
6dc9e081ba
commit
165228b0ef
47 changed files with 11 additions and 83 deletions
|
|
@ -16,9 +16,9 @@ This release has the following notable changes:
|
|||
|
||||
- On Darwin, Home Manager launchd agents now support
|
||||
[](#opt-launchd.agents._name_.domain) to choose either the user's GUI or
|
||||
background launchd domain. Background services provided by Home Manager now
|
||||
use the user domain, which allows activations from contexts such as SSH
|
||||
sessions without requiring an active graphical login session.
|
||||
background launchd domain. Agents use the GUI domain by default. Set the
|
||||
domain to `user` for agents that should run without an active graphical login
|
||||
session.
|
||||
|
||||
## State Version Changes {#sec-release-26.11-state-version-changes}
|
||||
|
||||
|
|
|
|||
|
|
@ -6,10 +6,8 @@
|
|||
message = ''
|
||||
|
||||
Home Manager launchd agents now support the
|
||||
`launchd.agents.<name>.domain` option. Background services provided by Home
|
||||
Manager use the user launchd domain by default, so they can be managed from
|
||||
SSH and other non-graphical sessions. Set
|
||||
`launchd.agents.<name>.domain = "gui"` for agents that need the graphical
|
||||
session.
|
||||
`launchd.agents.<name>.domain` option. Agents use the GUI launchd domain by
|
||||
default. Set `launchd.agents.<name>.domain = "user"` for agents that should
|
||||
run without an active graphical login session.
|
||||
'';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -303,7 +303,6 @@ in
|
|||
|
||||
launchd.agents.atuin-daemon = {
|
||||
enable = true;
|
||||
domain = lib.mkDefault "user";
|
||||
config = {
|
||||
ProgramArguments = [ (lib.getExe cfg.package) ] ++ daemonArgs;
|
||||
EnvironmentVariables = lib.optionalAttrs (daemonCfg.logLevel != null) {
|
||||
|
|
|
|||
|
|
@ -609,7 +609,6 @@ in
|
|||
{
|
||||
"git-maintenance-hourly" = {
|
||||
enable = true;
|
||||
domain = lib.mkDefault "user";
|
||||
config = {
|
||||
ProgramArguments = baseArguments ++ [ "--schedule=hourly" ];
|
||||
StartCalendarInterval = map (hour: {
|
||||
|
|
@ -620,7 +619,6 @@ in
|
|||
};
|
||||
"git-maintenance-daily" = {
|
||||
enable = true;
|
||||
domain = lib.mkDefault "user";
|
||||
config = {
|
||||
ProgramArguments = baseArguments ++ [ "--schedule=daily" ];
|
||||
StartCalendarInterval = map (weekday: {
|
||||
|
|
@ -632,7 +630,6 @@ in
|
|||
};
|
||||
"git-maintenance-weekly" = {
|
||||
enable = true;
|
||||
domain = lib.mkDefault "user";
|
||||
config = {
|
||||
ProgramArguments = baseArguments ++ [ "--schedule=weekly" ];
|
||||
StartCalendarInterval = [
|
||||
|
|
|
|||
|
|
@ -151,7 +151,6 @@ in
|
|||
|
||||
launchd.agents.nh-clean = lib.mkIf cfg.clean.enable {
|
||||
enable = true;
|
||||
domain = lib.mkDefault "user";
|
||||
config = {
|
||||
ProgramArguments = [
|
||||
"${lib.getExe cfg.package}"
|
||||
|
|
|
|||
|
|
@ -631,7 +631,6 @@ in
|
|||
launchd.agents = mkIf webCfg.enable {
|
||||
opencode-web = {
|
||||
enable = true;
|
||||
domain = lib.mkDefault "user";
|
||||
config = {
|
||||
ProgramArguments =
|
||||
let
|
||||
|
|
|
|||
|
|
@ -160,7 +160,6 @@ let
|
|||
in
|
||||
{
|
||||
enable = true;
|
||||
domain = lib.mkDefault "user";
|
||||
config = {
|
||||
ProgramArguments = [
|
||||
(lib.getExe rcloneSidecarWrapper)
|
||||
|
|
@ -620,7 +619,6 @@ in
|
|||
mkLaunchdConfigService = lib.mkIf (cfg.remotes != { }) {
|
||||
rclone-config = {
|
||||
enable = true;
|
||||
domain = lib.mkDefault "user";
|
||||
config = {
|
||||
ProgramArguments = [ (lib.getExe rcloneConfigScript) ];
|
||||
RunAtLoad = true;
|
||||
|
|
|
|||
|
|
@ -87,7 +87,6 @@ in
|
|||
|
||||
launchd.agents.borgmatic = {
|
||||
enable = true;
|
||||
domain = lib.mkDefault "user";
|
||||
config = {
|
||||
ProgramArguments = [
|
||||
(lib.getExe programConfig.package)
|
||||
|
|
|
|||
|
|
@ -265,7 +265,6 @@ in
|
|||
name: profile:
|
||||
lib.nameValuePair "colima-${name}" {
|
||||
enable = true;
|
||||
domain = lib.mkDefault "user";
|
||||
config = {
|
||||
ProgramArguments = [
|
||||
"${lib.getExe cfg.package}"
|
||||
|
|
|
|||
|
|
@ -218,7 +218,6 @@ in
|
|||
|
||||
launchd.agents.emacs = {
|
||||
enable = true;
|
||||
domain = lib.mkDefault (if cfg.startWithUserSession == "graphical" then "gui" else "user");
|
||||
config = {
|
||||
ProgramArguments = [
|
||||
"${cfg.package}/bin/emacs"
|
||||
|
|
|
|||
|
|
@ -60,7 +60,6 @@ in
|
|||
|
||||
launchd.agents.exo = {
|
||||
enable = true;
|
||||
domain = lib.mkDefault "user";
|
||||
config = {
|
||||
ProgramArguments = [ (lib.getExe cfg.package) ] ++ cfg.extraArgs;
|
||||
EnvironmentVariables = cfg.environmentVariables;
|
||||
|
|
|
|||
|
|
@ -108,7 +108,6 @@ in
|
|||
launchd.agents = services (
|
||||
_name: repo: {
|
||||
enable = true;
|
||||
domain = lib.mkDefault "user";
|
||||
config = {
|
||||
StartInterval = repo.interval;
|
||||
ProcessType = "Background";
|
||||
|
|
|
|||
|
|
@ -87,7 +87,6 @@ in
|
|||
|
||||
launchd.agents.glance = mkIf (cfg.package != null) {
|
||||
enable = true;
|
||||
domain = lib.mkDefault "user";
|
||||
config = {
|
||||
ProgramArguments = [
|
||||
(getExe cfg.package)
|
||||
|
|
|
|||
|
|
@ -105,7 +105,6 @@ in
|
|||
|
||||
launchd.agents.home-manager-auto-expire = {
|
||||
enable = true;
|
||||
domain = lib.mkDefault "user";
|
||||
config = {
|
||||
ProgramArguments = [ (toString script) ];
|
||||
ProcessType = "Background";
|
||||
|
|
|
|||
|
|
@ -65,7 +65,6 @@ let
|
|||
name = "imapnotify-${name}";
|
||||
value = {
|
||||
enable = true;
|
||||
domain = lib.mkDefault "user";
|
||||
config = {
|
||||
# Use the nix store path for config to ensure service restarts when it changes
|
||||
ProgramArguments = [
|
||||
|
|
|
|||
|
|
@ -254,7 +254,6 @@ in
|
|||
|
||||
launchd.agents.mpd = {
|
||||
enable = true;
|
||||
domain = lib.mkDefault "user";
|
||||
config = {
|
||||
ProgramArguments = [
|
||||
(lib.getExe cfg.package)
|
||||
|
|
|
|||
|
|
@ -121,7 +121,6 @@ in
|
|||
|
||||
launchd.agents.nix-gc = {
|
||||
enable = true;
|
||||
domain = lib.mkDefault "user";
|
||||
config = {
|
||||
ProgramArguments = [
|
||||
"${nixPackage}/bin/nix-collect-garbage"
|
||||
|
|
|
|||
|
|
@ -107,7 +107,6 @@ in
|
|||
|
||||
launchd.agents.ollama = {
|
||||
enable = true;
|
||||
domain = lib.mkDefault "user";
|
||||
config = {
|
||||
ProgramArguments = [
|
||||
"${lib.getExe ollamaPackage}"
|
||||
|
|
|
|||
|
|
@ -311,7 +311,6 @@ in
|
|||
name: machine:
|
||||
nameValuePair "podman-machine-${name}" {
|
||||
enable = true;
|
||||
domain = lib.mkDefault "user";
|
||||
config = {
|
||||
ProgramArguments = [ "${mkWatchdogScript name machine}" ];
|
||||
KeepAlive = {
|
||||
|
|
|
|||
|
|
@ -57,7 +57,6 @@ in
|
|||
|
||||
launchd.agents.pueued = lib.mkIf (cfg.package != null) {
|
||||
enable = true;
|
||||
domain = lib.mkDefault "user";
|
||||
|
||||
config = {
|
||||
ProgramArguments = [
|
||||
|
|
|
|||
|
|
@ -105,7 +105,6 @@ in
|
|||
|
||||
launchd.agents.ssh-agent = {
|
||||
enable = true;
|
||||
domain = lib.mkDefault "user";
|
||||
config = {
|
||||
ProgramArguments = [
|
||||
(lib.getExe pkgs.bash)
|
||||
|
|
|
|||
|
|
@ -943,7 +943,6 @@ in
|
|||
launchd.agents = {
|
||||
syncthing = {
|
||||
enable = true;
|
||||
domain = lib.mkDefault "user";
|
||||
config = {
|
||||
ProgramArguments = [
|
||||
"${pkgs.writers.writeBash "syncthing-wrapper" ''
|
||||
|
|
|
|||
|
|
@ -62,7 +62,6 @@ in
|
|||
|
||||
launchd.agents.tldr-update = {
|
||||
enable = true;
|
||||
domain = lib.mkDefault "user";
|
||||
config = {
|
||||
ProgramArguments = [
|
||||
(lib.getExe cfg.package)
|
||||
|
|
|
|||
|
|
@ -4,8 +4,6 @@
|
|||
<dict>
|
||||
<key>Label</key>
|
||||
<string>org.nix-community.home.git-maintenance-daily</string>
|
||||
<key>LimitLoadToSessionType</key>
|
||||
<string>Background</string>
|
||||
<key>ProgramArguments</key>
|
||||
<array>
|
||||
<string>/bin/sh</string>
|
||||
|
|
|
|||
|
|
@ -4,8 +4,6 @@
|
|||
<dict>
|
||||
<key>Label</key>
|
||||
<string>org.nix-community.home.git-maintenance-hourly</string>
|
||||
<key>LimitLoadToSessionType</key>
|
||||
<string>Background</string>
|
||||
<key>ProgramArguments</key>
|
||||
<array>
|
||||
<string>/bin/sh</string>
|
||||
|
|
|
|||
|
|
@ -4,8 +4,6 @@
|
|||
<dict>
|
||||
<key>Label</key>
|
||||
<string>org.nix-community.home.git-maintenance-weekly</string>
|
||||
<key>LimitLoadToSessionType</key>
|
||||
<string>Background</string>
|
||||
<key>ProgramArguments</key>
|
||||
<array>
|
||||
<string>/bin/sh</string>
|
||||
|
|
|
|||
|
|
@ -4,8 +4,6 @@
|
|||
<dict>
|
||||
<key>Label</key>
|
||||
<string>org.nix-community.home.nh-clean</string>
|
||||
<key>LimitLoadToSessionType</key>
|
||||
<string>Background</string>
|
||||
<key>ProgramArguments</key>
|
||||
<array>
|
||||
<string>/bin/sh</string>
|
||||
|
|
|
|||
|
|
@ -11,8 +11,6 @@
|
|||
</dict>
|
||||
<key>Label</key>
|
||||
<string>org.nix-community.home.opencode-web</string>
|
||||
<key>LimitLoadToSessionType</key>
|
||||
<string>Background</string>
|
||||
<key>ProcessType</key>
|
||||
<string>Background</string>
|
||||
<key>ProgramArguments</key>
|
||||
|
|
|
|||
|
|
@ -11,8 +11,6 @@
|
|||
</dict>
|
||||
<key>Label</key>
|
||||
<string>org.nix-community.home.opencode-web</string>
|
||||
<key>LimitLoadToSessionType</key>
|
||||
<string>Background</string>
|
||||
<key>ProcessType</key>
|
||||
<string>Background</string>
|
||||
<key>ProgramArguments</key>
|
||||
|
|
|
|||
|
|
@ -4,8 +4,6 @@
|
|||
<dict>
|
||||
<key>Label</key>
|
||||
<string>org.nix-community.home.borgmatic</string>
|
||||
<key>LimitLoadToSessionType</key>
|
||||
<string>Background</string>
|
||||
<key>ProcessType</key>
|
||||
<string>Background</string>
|
||||
<key>ProgramArguments</key>
|
||||
|
|
|
|||
|
|
@ -22,8 +22,6 @@
|
|||
</dict>
|
||||
<key>Label</key>
|
||||
<string>org.nix-community.home.colima-default</string>
|
||||
<key>LimitLoadToSessionType</key>
|
||||
<string>Background</string>
|
||||
<key>ProgramArguments</key>
|
||||
<array>
|
||||
<string>/bin/sh</string>
|
||||
|
|
|
|||
|
|
@ -18,8 +18,6 @@
|
|||
</dict>
|
||||
<key>Label</key>
|
||||
<string>org.nix-community.home.colima-default</string>
|
||||
<key>LimitLoadToSessionType</key>
|
||||
<string>Background</string>
|
||||
<key>ProgramArguments</key>
|
||||
<array>
|
||||
<string>/bin/sh</string>
|
||||
|
|
|
|||
|
|
@ -11,8 +11,6 @@
|
|||
</dict>
|
||||
<key>Label</key>
|
||||
<string>org.nix-community.home.emacs</string>
|
||||
<key>LimitLoadToSessionType</key>
|
||||
<string>Background</string>
|
||||
<key>ProgramArguments</key>
|
||||
<array>
|
||||
<string>/bin/sh</string>
|
||||
|
|
|
|||
|
|
@ -4,8 +4,6 @@
|
|||
<dict>
|
||||
<key>Label</key>
|
||||
<string>org.nix-community.home.git-sync-test</string>
|
||||
<key>LimitLoadToSessionType</key>
|
||||
<string>Background</string>
|
||||
<key>ProcessType</key>
|
||||
<string>Background</string>
|
||||
<key>ProgramArguments</key>
|
||||
|
|
|
|||
|
|
@ -18,12 +18,10 @@
|
|||
serviceFile=$(normalizeStorePaths $serviceFile)
|
||||
assertFileExists "$serviceFile"
|
||||
assertFileContent "$serviceFile" ${./glance.plist}
|
||||
assertFileContains "$serviceFile" '<key>LimitLoadToSessionType</key>'
|
||||
assertFileContains "$serviceFile" '<string>Background</string>'
|
||||
|
||||
domainFile=LaunchAgentDomains/org.nix-community.home.glance.domain
|
||||
assertFileContent "$domainFile" ${builtins.toFile "expected-domain" "user\n"}
|
||||
assertFileContains activate 'domain="user/$(id -u)"'
|
||||
assertFileContent "$domainFile" ${builtins.toFile "expected-domain" "gui\n"}
|
||||
assertFileContains activate 'domain="gui/$(id -u)"'
|
||||
assertFileContains activate 'launchctl kickstart -k "$domain/org.nix-community.home.glance"'
|
||||
'')
|
||||
];
|
||||
|
|
|
|||
|
|
@ -2,13 +2,13 @@
|
|||
|
||||
{
|
||||
services.glance.enable = true;
|
||||
launchd.agents.glance.domain = "gui";
|
||||
launchd.agents.glance.domain = "user";
|
||||
|
||||
nmt.script = lib.mkIf pkgs.stdenv.hostPlatform.isDarwin ''
|
||||
domainFile=LaunchAgentDomains/org.nix-community.home.glance.domain
|
||||
assertFileExists "$domainFile"
|
||||
assertFileContent "$domainFile" ${builtins.toFile "expected-domain" "gui\n"}
|
||||
assertFileContains activate 'domain="gui/$(id -u)"'
|
||||
assertFileContent "$domainFile" ${builtins.toFile "expected-domain" "user\n"}
|
||||
assertFileContains activate 'domain="user/$(id -u)"'
|
||||
assertFileContains activate 'launchctl kickstart -k "$domain/org.nix-community.home.glance"'
|
||||
'';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,8 +6,6 @@
|
|||
<true/>
|
||||
<key>Label</key>
|
||||
<string>org.nix-community.home.glance</string>
|
||||
<key>LimitLoadToSessionType</key>
|
||||
<string>Background</string>
|
||||
<key>ProgramArguments</key>
|
||||
<array>
|
||||
<string>/bin/sh</string>
|
||||
|
|
|
|||
|
|
@ -4,8 +4,6 @@
|
|||
<dict>
|
||||
<key>Label</key>
|
||||
<string>org.nix-community.home.home-manager-auto-expire</string>
|
||||
<key>LimitLoadToSessionType</key>
|
||||
<string>Background</string>
|
||||
<key>ProcessType</key>
|
||||
<string>Background</string>
|
||||
<key>ProgramArguments</key>
|
||||
|
|
|
|||
|
|
@ -13,8 +13,6 @@
|
|||
<true/>
|
||||
<key>Label</key>
|
||||
<string>org.nix-community.home.imapnotify-hm-example.com</string>
|
||||
<key>LimitLoadToSessionType</key>
|
||||
<string>Background</string>
|
||||
<key>ProcessType</key>
|
||||
<string>Background</string>
|
||||
<key>ProgramArguments</key>
|
||||
|
|
|
|||
|
|
@ -4,8 +4,6 @@
|
|||
<dict>
|
||||
<key>Label</key>
|
||||
<string>org.nix-community.home.nix-gc</string>
|
||||
<key>LimitLoadToSessionType</key>
|
||||
<string>Background</string>
|
||||
<key>ProgramArguments</key>
|
||||
<array>
|
||||
<string>/bin/sh</string>
|
||||
|
|
|
|||
|
|
@ -20,8 +20,6 @@
|
|||
</dict>
|
||||
<key>Label</key>
|
||||
<string>org.nix-community.home.ollama</string>
|
||||
<key>LimitLoadToSessionType</key>
|
||||
<string>Background</string>
|
||||
<key>ProcessType</key>
|
||||
<string>Background</string>
|
||||
<key>ProgramArguments</key>
|
||||
|
|
|
|||
|
|
@ -11,8 +11,6 @@
|
|||
</dict>
|
||||
<key>Label</key>
|
||||
<string>org.nix-community.home.podman-machine-podman-machine-default</string>
|
||||
<key>LimitLoadToSessionType</key>
|
||||
<string>Background</string>
|
||||
<key>ProcessType</key>
|
||||
<string>Background</string>
|
||||
<key>ProgramArguments</key>
|
||||
|
|
|
|||
|
|
@ -11,8 +11,6 @@
|
|||
</dict>
|
||||
<key>Label</key>
|
||||
<string>org.nix-community.home.podman-machine-dev-machine</string>
|
||||
<key>LimitLoadToSessionType</key>
|
||||
<string>Background</string>
|
||||
<key>ProcessType</key>
|
||||
<string>Background</string>
|
||||
<key>ProgramArguments</key>
|
||||
|
|
|
|||
|
|
@ -11,8 +11,6 @@
|
|||
</dict>
|
||||
<key>Label</key>
|
||||
<string>org.nix-community.home.ssh-agent</string>
|
||||
<key>LimitLoadToSessionType</key>
|
||||
<string>Background</string>
|
||||
<key>ProcessType</key>
|
||||
<string>Background</string>
|
||||
<key>ProgramArguments</key>
|
||||
|
|
|
|||
|
|
@ -11,8 +11,6 @@
|
|||
</dict>
|
||||
<key>Label</key>
|
||||
<string>org.nix-community.home.ssh-agent</string>
|
||||
<key>LimitLoadToSessionType</key>
|
||||
<string>Background</string>
|
||||
<key>ProcessType</key>
|
||||
<string>Background</string>
|
||||
<key>ProgramArguments</key>
|
||||
|
|
|
|||
|
|
@ -11,8 +11,6 @@
|
|||
</dict>
|
||||
<key>Label</key>
|
||||
<string>org.nix-community.home.ssh-agent</string>
|
||||
<key>LimitLoadToSessionType</key>
|
||||
<string>Background</string>
|
||||
<key>ProcessType</key>
|
||||
<string>Background</string>
|
||||
<key>ProgramArguments</key>
|
||||
|
|
|
|||
|
|
@ -11,8 +11,6 @@
|
|||
</dict>
|
||||
<key>Label</key>
|
||||
<string>org.nix-community.home.syncthing</string>
|
||||
<key>LimitLoadToSessionType</key>
|
||||
<string>Background</string>
|
||||
<key>ProcessType</key>
|
||||
<string>Background</string>
|
||||
<key>ProgramArguments</key>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue