summaryrefslogtreecommitdiff
path: root/modules/launchd/default.nix
diff options
context:
space:
mode:
authorDaiderd Jordan <daiderd@gmail.com>2016-11-07 21:00:23 +0100
committerDaiderd Jordan <daiderd@gmail.com>2016-11-07 21:00:23 +0100
commit81b8a44e400569717385556c17b34eb9d14410c5 (patch)
tree893a6bc5629de4fe736e3a680c8ddd1cbc92af01 /modules/launchd/default.nix
parentf6513722522999e7ce5a144df5fda591cf214dcb (diff)
add /Library/LaunchDaemons to system
Diffstat (limited to 'modules/launchd/default.nix')
-rw-r--r--modules/launchd/default.nix99
1 files changed, 55 insertions, 44 deletions
diff --git a/modules/launchd/default.nix b/modules/launchd/default.nix
index cb5e4d9..dccddd0 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" (''
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
- ${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
+ + ''
</dict>
</plist>
- '';
+ '');
};
};
@@ -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..."