diff --git a/lib/modules.nix b/lib/modules.nix index 38d6ac8cd91..559697b3d57 100644 --- a/lib/modules.nix +++ b/lib/modules.nix @@ -151,8 +151,8 @@ rec { filterModules = modulesPath: { disabled, modules }: let moduleKey = m: if isString m then toString modulesPath + "/" + m else toString m; - disabledKeys = listToAttrs (map (k: nameValuePair (moduleKey k) null) disabled); - keyFilter = filter (attrs: ! disabledKeys ? ${attrs.key}); + disabledKeys = map moduleKey disabled; + keyFilter = filter (attrs: ! elem attrs.key disabledKeys); in map (attrs: attrs.module) (builtins.genericClosure { startSet = keyFilter modules; operator = attrs: keyFilter attrs.modules; diff --git a/lib/tests/modules.sh b/lib/tests/modules.sh index 2997fb1ada1..79d90670fb5 100755 --- a/lib/tests/modules.sh +++ b/lib/tests/modules.sh @@ -12,7 +12,7 @@ evalConfig() { local attr=$1 shift; local script="import ./default.nix { modules = [ $@ ];}" - nix-instantiate --timeout 1 -E "$script" -A "$attr" --eval-only --show-trace + nix-instantiate --timeout 1 -E "$script" -A "$attr" --eval-only --show-trace --read-write-mode } reportFailure() { @@ -183,6 +183,9 @@ checkConfigOutput "true" config.enable ./disable-recursive/{main.nix,disable-foo checkConfigOutput "true" config.enable ./disable-recursive/{main.nix,disable-bar.nix} checkConfigError 'The option .* defined in .* does not exist' config.enable ./disable-recursive/{main.nix,disable-foo.nix,disable-bar.nix} +# Check that imports can depend on derivations +checkConfigOutput "true" config.enable ./import-from-store.nix + cat < $out" ]; + }; +in { + + imports = [ + "${drv}" + ./declare-enable.nix + ./define-enable.nix + ]; + +}