31 lines
985 B
Nix
31 lines
985 B
Nix
{ stdenv, lib, execline, writeTextFile }:
|
|
|
|
{ name, description, initialize, daemon, daemonArgs, instanceName, pidFile
|
|
, foregroundProcess, foregroundProcessArgs, path, environment, directory, umask
|
|
, nice, user, dependencies, credentials, overrides, postInstall }:
|
|
|
|
let
|
|
util = import ../util { inherit lib; };
|
|
|
|
generator = import ./preserves-generator.nix { inherit lib; };
|
|
toPreserves = generator.toPreserves { };
|
|
|
|
escapeArgs = args:
|
|
lib.concatMapStringsSep " "
|
|
(arg: ''"${lib.replaceStrings [ ''"'' ] [ ''\"'' ] (toString arg)}"'') args;
|
|
|
|
processSpec = {
|
|
argv = "${daemon} ${toString daemonArgs}";
|
|
env = environment;
|
|
} // (lib.attrsets.optionalAttrs (directory != null) { dir = directory; });
|
|
|
|
in writeTextFile {
|
|
name = "services-${name}";
|
|
destination = "/services/${name}.pr";
|
|
text = ''
|
|
<metadata <daemon ${name}> { description: "${description}" }>
|
|
<require-service <daemon ${name}>>
|
|
<daemon ${name} ${toPreserves processSpec}>
|
|
'';
|
|
}
|