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:
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user