aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/modules.nix3
-rwxr-xr-xlib/tests/modules.sh2
2 files changed, 4 insertions, 1 deletions
diff --git a/lib/modules.nix b/lib/modules.nix
index daffe5224ab2..1d2c4a1acbb5 100644
--- a/lib/modules.nix
+++ b/lib/modules.nix
@@ -104,7 +104,8 @@ rec {
file = def.file;
value = setAttrByPath def.prefix def.value;
}) merged.unmatchedDefns;
- in declaredConfig._module.freeformType.merge prefix defs;
+ in if defs == [] then {}
+ else declaredConfig._module.freeformType.merge prefix defs;
in if declaredConfig._module.freeformType == null then declaredConfig
# Because all definitions that had an associated option ended in
diff --git a/lib/tests/modules.sh b/lib/tests/modules.sh
index 848b10e17f67..943deebe3c09 100755
--- a/lib/tests/modules.sh
+++ b/lib/tests/modules.sh
@@ -213,6 +213,8 @@ checkConfigError 'The option value .* in .* is not of type .*' \
## Freeform modules
# Assigning without a declared option should work
checkConfigOutput 24 config.value ./freeform-attrsOf.nix ./define-value-string.nix
+# No freeform assigments shouldn't make it error
+checkConfigOutput '{ }' config ./freeform-attrsOf.nix
# but only if the type matches
checkConfigError 'The option value .* in .* is not of type .*' config.value ./freeform-attrsOf.nix ./define-value-list.nix
# and properties should be applied