From 445145d5b9a33a9ded5a6928c52ddaeb862a8a8e Mon Sep 17 00:00:00 2001 From: Chuck Date: Tue, 17 Sep 2019 17:36:48 -0700 Subject: Support aggregate types attrsOf and listOf --- nixos/modules/installer/tools/nixos-option/nixos-option.cc | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/nixos/modules/installer/tools/nixos-option/nixos-option.cc b/nixos/modules/installer/tools/nixos-option/nixos-option.cc index 778b7e32617..c0c9ec0e5b4 100644 --- a/nixos/modules/installer/tools/nixos-option/nixos-option.cc +++ b/nixos/modules/installer/tools/nixos-option/nixos-option.cc @@ -475,6 +475,11 @@ bool optionTypeIs(Context & ctx, Value & v, const std::string & soughtType) } } +bool isAggregateOptionType(Context & ctx, Value & v) +{ + return optionTypeIs(ctx, v, "attrsOf") || optionTypeIs(ctx, v, "listOf") || optionTypeIs(ctx, v, "loaOf"); +} + MakeError(OptionPathError, EvalError); Value getSubOptions(Context & ctx, Value & option) @@ -507,7 +512,7 @@ Value findAlongOptionPath(Context & ctx, const std::string & path) if (isOption(ctx, v) && optionTypeIs(ctx, v, "submodule")) { v = getSubOptions(ctx, v); } - if (isOption(ctx, v) && optionTypeIs(ctx, v, "loaOf") && !lastAttribute) { + if (isOption(ctx, v) && isAggregateOptionType(ctx, v) && !lastAttribute) { v = getSubOptions(ctx, v); // Note that we've consumed attr, but didn't actually use it. This is the path component that's looked // up in the list or attribute set that doesn't name an option -- the "root" in "users.users.root.name". -- cgit 1.4.1