eval.nix: Enable config merging for meta.nixpkgs on 21.11+

Ref: #74 #15
This commit is contained in:
Zhaofeng Li 2022-06-03 23:51:32 -07:00
parent 1cd3aa6401
commit b5629dca83
2 changed files with 11 additions and 6 deletions

View file

@ -118,19 +118,21 @@ let
# Here we need to merge the configurations in meta.nixpkgs # Here we need to merge the configurations in meta.nixpkgs
# and in machine config. # and in machine config.
nixpkgsModule = { config, lib, ... }: { nixpkgsModule = { config, lib, ... }: let
hasTypedConfig = lib.versionAtLeast lib.version "22.11pre";
in {
nixpkgs.overlays = lib.mkBefore npkgs.overlays; nixpkgs.overlays = lib.mkBefore npkgs.overlays;
nixpkgs.config = lib.mkOptionDefault npkgs.config; nixpkgs.config = if hasTypedConfig then lib.mkBefore npkgs.config else lib.mkOptionDefault npkgs.config;
# The merging of nixpkgs.config seems to be broken.
# Let's warn the user if not all config attributes set in
# meta.nixpkgs are overridden.
warnings = let warnings = let
# Before 22.11, most config keys were untyped thus the merging
# was broken. Let's warn the user if not all config attributes
# set in meta.nixpkgs are overridden.
metaKeys = attrNames npkgs.config; metaKeys = attrNames npkgs.config;
nodeKeys = [ "doCheckByDefault" "warnings" "allowAliases" ] ++ (attrNames config.nixpkgs.config); nodeKeys = [ "doCheckByDefault" "warnings" "allowAliases" ] ++ (attrNames config.nixpkgs.config);
remainingKeys = filter (k: ! elem k nodeKeys) metaKeys; remainingKeys = filter (k: ! elem k nodeKeys) metaKeys;
in in
lib.optional (length remainingKeys != 0) lib.optional (!hasTypedConfig && length remainingKeys != 0)
"The following Nixpkgs configuration keys set in meta.nixpkgs will be ignored: ${toString remainingKeys}"; "The following Nixpkgs configuration keys set in meta.nixpkgs will be ignored: ${toString remainingKeys}";
}; };
in evalConfig { in evalConfig {

View file

@ -407,6 +407,9 @@ fn test_nixpkgs_config_meta_nixpkgs() {
}; };
}; };
test = { pkgs, ... }: { test = { pkgs, ... }: {
nixpkgs.config = {
allowAliases = false;
};
boot.isContainer = assert pkgs.config.allowUnfree; true; boot.isContainer = assert pkgs.config.allowUnfree; true;
}; };
} }