lib/modules: Improve error when a configuration is imported

This is appears to be a fairly common mistake for beginners who want
to build larger things from the system configurations, such as NixOps
networks, etc. Further explanation seems appropriate.

Changed files
+14
lib
+1
lib/modules.nix
···
};
result = withWarnings {
+
_type = "configuration";
options = checked options;
config = checked (removeAttrs config [ "_module" ]);
_module = checked (config._module);
+1
lib/tests/modules.sh
···
# _type check
checkConfigError 'Could not load a value as a module, because it is of type "flake", in file .*/module-imports-_type-check.nix' config.ok.config ./module-imports-_type-check.nix
checkConfigOutput '^true$' "$@" config.enable ./declare-enable.nix ./define-enable-with-top-level-mkIf.nix
+
checkConfigError 'Could not load a value as a module, because it is of type "configuration", in file .*/import-configuration.nix' config ./import-configuration.nix
# doRename works when `warnings` does not exist.
checkConfigOutput '^1234$' config.c.d.e ./doRename-basic.nix
+12
lib/tests/modules/import-configuration.nix
···
+
{ lib, ... }:
+
let
+
myconf = lib.evalModules { modules = [ { } ]; };
+
in
+
{
+
imports = [
+
# We can't do this. A configuration is not equal to its set of a modules.
+
# Equating those would lead to a mess, as specialArgs, anonymous modules
+
# that can't be deduplicated, and possibly more come into play.
+
myconf
+
];
+
}