From 81b8a44e400569717385556c17b34eb9d14410c5 Mon Sep 17 00:00:00 2001 From: Daiderd Jordan Date: Mon, 7 Nov 2016 21:00:23 +0100 Subject: [PATCH] add /Library/LaunchDaemons to system --- config.nix | 2 +- modules/launchd/default.nix | 99 ++++++++++++++++++++----------------- modules/system/default.nix | 3 ++ 3 files changed, 59 insertions(+), 45 deletions(-) diff --git a/config.nix b/config.nix index ab0d5361..0eeed67a 100644 --- a/config.nix +++ b/config.nix @@ -86,7 +86,7 @@ let nixdarwin-rebuild () { case $1 in - 'build') nix-build --no-out-link '' -A nixdarwin.toplevel ;; + 'build') nix-build --no-out-link '' -A nixdarwin.toplevel --show-trace ;; 'repl') nix-repl "$HOME/.nixpkgs/config.nix" ;; 'shell') nix-shell '' -p nixdarwin.toplevel --run "${pkgs.lnl.zsh}/bin/zsh -l" ;; 'switch') nix-env -f '' -iA nixdarwin.toplevel && nix-shell '' -A nixdarwin.toplevel --run 'sudo $out/activate' && exec ${pkgs.lnl.zsh}/bin/zsh -l ;; diff --git a/modules/launchd/default.nix b/modules/launchd/default.nix index cb5e4d9e..dccddd0d 100644 --- a/modules/launchd/default.nix +++ b/modules/launchd/default.nix @@ -13,8 +13,8 @@ let { config, name, ... }: { options = { plist = mkOption { - type = types.path; internal = true; + type = types.path; description = "The generated plist."; }; @@ -35,55 +35,56 @@ let config = { serviceConfig.Label = mkDefault "org.nixos.${name}"; - plist = pkgs.writeText "${config.serviceConfig.Label}.plist" '' + plist = pkgs.writeText "${config.serviceConfig.Label}.plist" ('' - ${xmlMapAttr xmlString "Label" config.serviceConfig.Label} - ${xmlMapAttr xmlBool "Disabled" config.serviceConfig.Disabled} - ${xmlMapAttr xmlString "UserName" config.serviceConfig.UserName} - ${xmlMapAttr xmlString "GroupName" config.serviceConfig.GroupName} - ${xmlMapAttr (xmlMapAttrs xmlBool) "inetdCompatibility" config.serviceConfig.inetdCompatibility} - ${xmlMapAttr (xmlMap xmlString) "LimitLoadToHosts" config.serviceConfig.LimitLoadToHosts} - ${xmlMapAttr (xmlMap xmlString) "LimitLoadFromHosts" config.serviceConfig.LimitLoadFromHosts} - ${xmlMapAttr xmlString "LimitLoadToSessionType" config.serviceConfig.LimitLoadToSessionType} - ${xmlMapAttr xmlString "Program" config.serviceConfig.Program} - ${xmlMapAttr (xmlMap xmlString) "ProgramArguments" config.serviceConfig.ProgramArguments} - ${xmlMapAttr xmlBool "EnableGlobbing" config.serviceConfig.EnableGlobbing} - ${xmlMapAttr xmlBool "EnableTransactions" config.serviceConfig.EnableTransactions} - ${xmlMapAttr xmlBool "OnDemand" config.serviceConfig.OnDemand} - ${xmlMapAttr xmlBool "KeepAlive" config.serviceConfig.KeepAlive} - ${xmlMapAttr xmlBool "RunAtLoad" config.serviceConfig.RunAtLoad} - ${xmlMapAttr xmlString "RootDirectory" config.serviceConfig.RootDirectory} - ${xmlMapAttr xmlString "WorkingDirectory" config.serviceConfig.WorkingDirectory} - ${xmlMapAttr (xmlMapAttrs xmlString) "EnvironmentVariables" config.serviceConfig.EnvironmentVariables} - ${xmlMapAttr xmlInt "Umask" config.serviceConfig.Umask} - ${xmlMapAttr xmlInt "TimeOut" config.serviceConfig.TimeOut} - ${xmlMapAttr xmlInt "ExitTimeOut" config.serviceConfig.ExitTimeOut} - ${xmlMapAttr xmlInt "ThrottleInterval" config.serviceConfig.ThrottleInterval} - ${xmlMapAttr xmlBool "InitGroups" config.serviceConfig.InitGroups} - ${xmlMapAttr (xmlMap xmlString) "WatchPaths" config.serviceConfig.WatchPaths} - ${xmlMapAttr (xmlMap xmlString) "QueueDirectories" config.serviceConfig.QueueDirectories} - ${xmlMapAttr xmlBool "StartOnMount" config.serviceConfig.StartOnMount} - ${xmlMapAttr xmlInt "StartInterval" config.serviceConfig.StartInterval} - ${xmlMapAttr (xmlMapAttrs xmlInt) "StartCalendarInterval" config.serviceConfig.StartCalendarInterval} - ${xmlMapAttr xmlString "StandardInPath" config.serviceConfig.StandardInPath} - ${xmlMapAttr xmlString "StandardOutPath" config.serviceConfig.StandardOutPath} - ${xmlMapAttr xmlString "StandardErrorPath" config.serviceConfig.StandardErrorPath} - ${xmlMapAttr xmlBool "Debug" config.serviceConfig.Debug} - ${xmlMapAttr xmlBool "WaitForDebugger" config.serviceConfig.WaitForDebugger} - ${xmlMapAttr (xmlMapAttrs xmlInt) "SoftResourceLimits" config.serviceConfig.SoftResourceLimits} - ${xmlMapAttr (xmlMapAttrs xmlInt) "HardResourceLimits" config.serviceConfig.HardResourceLimits} - ${xmlMapAttr xmlInt "Nice" config.serviceConfig.Nice} - ${xmlMapAttr xmlString "ProcessType" config.serviceConfig.ProcessType} - ${xmlMapAttr xmlBool "AbandonProcessGroup" config.serviceConfig.AbandonProcessGroup} - ${xmlMapAttr xmlBool "LowPriorityIO" config.serviceConfig.LowPriorityIO} - ${xmlMapAttr xmlBool "LaunchOnlyOnce" config.serviceConfig.LaunchOnlyOnce} - ${xmlMapAttr (xmlMapAttrs xmlBool) "MachServices" config.serviceConfig.MachServices} + '' + xmlMapAttr xmlString "Label" config.serviceConfig.Label + + xmlMapAttr xmlBool "Disabled" config.serviceConfig.Disabled + + xmlMapAttr xmlString "UserName" config.serviceConfig.UserName + + xmlMapAttr xmlString "GroupName" config.serviceConfig.GroupName + + xmlMapAttr (xmlMapAttrs xmlBool) "inetdCompatibility" config.serviceConfig.inetdCompatibility + + xmlMapAttr (xmlMap xmlString) "LimitLoadToHosts" config.serviceConfig.LimitLoadToHosts + + xmlMapAttr (xmlMap xmlString) "LimitLoadFromHosts" config.serviceConfig.LimitLoadFromHosts + + xmlMapAttr xmlString "LimitLoadToSessionType" config.serviceConfig.LimitLoadToSessionType + + xmlMapAttr xmlString "Program" config.serviceConfig.Program + + xmlMapAttr (xmlMap xmlString) "ProgramArguments" config.serviceConfig.ProgramArguments + + xmlMapAttr xmlBool "EnableGlobbing" config.serviceConfig.EnableGlobbing + + xmlMapAttr xmlBool "EnableTransactions" config.serviceConfig.EnableTransactions + + xmlMapAttr xmlBool "OnDemand" config.serviceConfig.OnDemand + + xmlMapAttr xmlBool "KeepAlive" config.serviceConfig.KeepAlive + + xmlMapAttr xmlBool "RunAtLoad" config.serviceConfig.RunAtLoad + + xmlMapAttr xmlString "RootDirectory" config.serviceConfig.RootDirectory + + xmlMapAttr xmlString "WorkingDirectory" config.serviceConfig.WorkingDirectory + + xmlMapAttr (xmlMapAttrs xmlString) "EnvironmentVariables" config.serviceConfig.EnvironmentVariables + + xmlMapAttr xmlInt "Umask" config.serviceConfig.Umask + + xmlMapAttr xmlInt "TimeOut" config.serviceConfig.TimeOut + + xmlMapAttr xmlInt "ExitTimeOut" config.serviceConfig.ExitTimeOut + + xmlMapAttr xmlInt "ThrottleInterval" config.serviceConfig.ThrottleInterval + + xmlMapAttr xmlBool "InitGroups" config.serviceConfig.InitGroups + + xmlMapAttr (xmlMap xmlString) "WatchPaths" config.serviceConfig.WatchPaths + + xmlMapAttr (xmlMap xmlString) "QueueDirectories" config.serviceConfig.QueueDirectories + + xmlMapAttr xmlBool "StartOnMount" config.serviceConfig.StartOnMount + + xmlMapAttr xmlInt "StartInterval" config.serviceConfig.StartInterval + + xmlMapAttr (xmlMapAttrs xmlInt) "StartCalendarInterval" config.serviceConfig.StartCalendarInterval + + xmlMapAttr xmlString "StandardInPath" config.serviceConfig.StandardInPath + + xmlMapAttr xmlString "StandardOutPath" config.serviceConfig.StandardOutPath + + xmlMapAttr xmlString "StandardErrorPath" config.serviceConfig.StandardErrorPath + + xmlMapAttr xmlBool "Debug" config.serviceConfig.Debug + + xmlMapAttr xmlBool "WaitForDebugger" config.serviceConfig.WaitForDebugger + + xmlMapAttr (xmlMapAttrs xmlInt) "SoftResourceLimits" config.serviceConfig.SoftResourceLimits + + xmlMapAttr (xmlMapAttrs xmlInt) "HardResourceLimits" config.serviceConfig.HardResourceLimits + + xmlMapAttr xmlInt "Nice" config.serviceConfig.Nice + + xmlMapAttr xmlString "ProcessType" config.serviceConfig.ProcessType + + xmlMapAttr xmlBool "AbandonProcessGroup" config.serviceConfig.AbandonProcessGroup + + xmlMapAttr xmlBool "LowPriorityIO" config.serviceConfig.LowPriorityIO + + xmlMapAttr xmlBool "LaunchOnlyOnce" config.serviceConfig.LaunchOnlyOnce + + xmlMapAttr (xmlMapAttrs xmlBool) "MachServices" config.serviceConfig.MachServices + + '' - ''; + ''); }; }; @@ -112,6 +113,16 @@ in { config = { + system.build.launchd = pkgs.stdenvNoCC.mkDerivation { + name = "launchd-library"; + preferLocalBuild = true; + + buildCommand = '' + mkdir -p $out/Library/LaunchDaemons + ln -s ${cfg.daemons.nix-daemon.plist} $out/Library/LaunchDaemons/${cfg.daemons.nix-daemon.serviceConfig.Label}.plist + ''; + }; + system.activationScripts.launchd.text = '' # Set up launchd services in /Library/LaunchAgents, /Library/LaunchDaemons and ~/Library/LaunchAgents echo "setting up launchd services..." diff --git a/modules/system/default.nix b/modules/system/default.nix index 9435f922..7689e42e 100644 --- a/modules/system/default.nix +++ b/modules/system/default.nix @@ -49,6 +49,9 @@ in ln -s ${cfg.build.etc}/etc $out/etc ln -s ${cfg.path} $out/sw + mkdir -p $out/Library + ln -s ${cfg.build.launchd}/Library/LaunchDaemons $out/Library/LaunchDaemons + echo "$activationScript" > $out/activate substituteInPlace $out/activate --subst-var out chmod u+x $out/activate