Add nixosSubmodule option type

Since NixOS modules expect special arguments, use a hack to provide them
This commit is contained in:
Shea Levy 2014-02-11 14:21:34 -05:00
parent 2deb26bd4a
commit ca1c5cfa8f
2 changed files with 21 additions and 1 deletions

View file

@ -195,6 +195,25 @@ rec {
args = { name = ""; }; }).options;
};
nixosSubmodule = nixos: args: mkOptionType rec {
name = "submodule containing a NixOS config";
check = x: isAttrs x || isFunction x;
merge = loc: defs:
let
coerce = def: if isFunction def then def else { config = def; };
in (import (nixos + "/lib/eval-config.nix") (args // {
modules = (args.modules or []) ++
map (def: { _file = def.file; imports = [(coerce def.value)]; }) defs;
prefix = loc;
})).config;
getSubOptions = prefix: (import (nixos + "/lib/eval-config.nix") (args // {
modules = (args.modules or []);
inherit prefix;
})).options;
};
# Obsolete alternative to configOf. It takes its option
# declarations from the options attribute of containing option
# declaration.

View file

@ -15,6 +15,7 @@ with pkgs.lib;
};
systemd.containers = mkOption {
# !!! Should probably use nixosSubmodule here
type = types.attrsOf (types.submodule (
{ config, options, name, ... }:
{
@ -134,4 +135,4 @@ with pkgs.lib;
}) config.systemd.containers;
};
}
}