overlay: make finalNix depend on the nix version being used by a package

This should address both of the following (were 35 is more general and
36 a specific case)

- lix-project/nixos-module#35
- lix-project/nixos-module#36
This commit is contained in:
Fabián Heredia Montiel 2024-09-25 19:46:13 -06:00
parent b0e6f35950
commit b3457b78ac

View file

@ -62,8 +62,22 @@ let
overlay = overlay =
lib.genAttrs overridelist_upstream ( lib.genAttrs overridelist_upstream (
name: if (lib.functionArgs prev.${name}.override ? "nix") then prev.${name}.override { name:
nix = final.nixVersions.stable_upstream; if (lib.functionArgs prev.${name}.override ? "nix") then
let
# Get the two common inputs of a derivation/package.
inputs = prev.${name}.buildInputs ++ prev.${name}.nativeBuildInputs;
nixDependency = lib.findFirst
(drv: (drv.pname or "") == "nix")
prev.nixVersions.stable_upstream # default to stable nix if nix is not an input
inputs;
nixMajor = lib.versions.major nixDependency.version;
nixMinor = lib.versions.minor nixDependency.version;
nixAttr = "nix_${nixMajor}_${nixMinor}";
finalNix = final.nixVersions.${nixAttr};
in
prev.${name}.override {
nix = finalNix;
} else prev.${name} } else prev.${name}
) // { ) // {
lix-overlay-present = 1; lix-overlay-present = 1;