nix-processmgmt/nixproc/backends/s6-rc/build-s6-rc-env.nix

50 lines
1.2 KiB
Nix

{ pkgs ? import <nixpkgs> { inherit system; }
, system ? builtins.currentSystem
, stateDir ? "/var"
, runtimeDir ? "${stateDir}/run"
, logDir ? "${stateDir}/log"
, cacheDir ? "${stateDir}/cache"
, spoolDir ? "${stateDir}/spool"
, lockDir ? "${stateDir}/lock"
, libDir ? "${stateDir}/lib"
, tmpDir ? (if stateDir == "/var" then "/tmp" else "${stateDir}/tmp")
, forceDisableUserChange ? false
, callingUser ? null
, callingGroup ? null
, extraParams ? {}
, exprFile ? null
, defaultBundleName ? "default"
}@args:
let
processesFun = import exprFile;
processesFormalArgs = builtins.functionArgs processesFun;
processesArgs = builtins.intersectAttrs processesFormalArgs (args // {
processManager = "s6-rc";
} // extraParams);
processes = if exprFile == null then {} else processesFun processesArgs;
createServiceBundle = import ./create-service-bundle.nix {
inherit (pkgs) stdenv lib;
};
processesList = map (processName:
let
process = builtins.getAttr processName processes;
in
process.pkg
) (builtins.attrNames processes);
defaultBundle = createServiceBundle {
name = defaultBundleName;
contents = processesList;
};
in
pkgs.buildEnv {
name = "s6-rc";
paths = [ defaultBundle ] ++ processesList;
}