forked from DGNum/liminix
add config.system.callService
this is like pkgs.callService except that it passes config.system.service as a param so that the service being defined can invoke other services if this proves to be a good idea, all uses of pkgs.callService should be changed to use it instead
This commit is contained in:
parent
af52aafc84
commit
fad0a47b75
1 changed files with 29 additions and 0 deletions
|
@ -29,6 +29,10 @@ in {
|
||||||
services = mkOption {
|
services = mkOption {
|
||||||
type = types.attrsOf type_service;
|
type = types.attrsOf type_service;
|
||||||
};
|
};
|
||||||
|
system.callService = mkOption {
|
||||||
|
type = types.functionTo (types.functionTo types.anything);
|
||||||
|
};
|
||||||
|
|
||||||
filesystem = mkOption {
|
filesystem = mkOption {
|
||||||
type = types.anything;
|
type = types.anything;
|
||||||
description = ''
|
description = ''
|
||||||
|
@ -111,6 +115,31 @@ in {
|
||||||
"fw_devlink=off"
|
"fw_devlink=off"
|
||||||
] ++ lib.optional (config.rootOptions != null) "rootflags=${config.rootOptions}";
|
] ++ lib.optional (config.rootOptions != null) "rootflags=${config.rootOptions}";
|
||||||
|
|
||||||
|
system.callService = path : parameters :
|
||||||
|
let
|
||||||
|
typeChecked = caller: type: value:
|
||||||
|
let
|
||||||
|
inherit (lib) types mergeDefinitions;
|
||||||
|
defs = [{ file = caller; inherit value; }];
|
||||||
|
type' = types.submodule { options = type; };
|
||||||
|
in (mergeDefinitions [] type' defs).mergedValue;
|
||||||
|
cp = lib.callPackageWith(pkgs // { svc = config.system.service; });
|
||||||
|
pkg = cp path {};
|
||||||
|
checkTypes = t : p : typeChecked (builtins.toString path) t p;
|
||||||
|
in {
|
||||||
|
inherit parameters;
|
||||||
|
build = { dependencies ? [], ... } @ args :
|
||||||
|
let
|
||||||
|
s = pkg (checkTypes parameters
|
||||||
|
(builtins.removeAttrs args ["dependencies"]));
|
||||||
|
in s.overrideAttrs (o: {
|
||||||
|
dependencies = (builtins.map (d: d.name) dependencies) ++ o.dependencies;
|
||||||
|
buildInputs = dependencies ++ o.buildInputs;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
users.root = {
|
users.root = {
|
||||||
uid = 0; gid= 0; gecos = "Root of all evaluation";
|
uid = 0; gid= 0; gecos = "Root of all evaluation";
|
||||||
dir = "/home/root/";
|
dir = "/home/root/";
|
||||||
|
|
Loading…
Reference in a new issue