appendOverlays: preserve splicing on empty overlay list (#501313)

This commit is contained in:
Jonas Chevalier
2026-04-07 14:19:48 +00:00
committed by GitHub
2 changed files with 22 additions and 1 deletions

View File

@@ -64,4 +64,22 @@ lib.recurseIntoAttrs {
assert lib.all (p: p.stdenv.buildPlatform == p.stdenv.hostPlatform) pkgsLocal;
assert lib.all (p: p.stdenv.buildPlatform != p.stdenv.hostPlatform) pkgsCross;
pkgs.emptyFile;
# appendOverlays must preserve splicing so that cross-compilation
# works in NixOS modules (which go through appendOverlays via nixpkgs.nix).
appendOverlaysPreservesSplicing =
let
cross = nixpkgsFun {
localSystem = {
system = "x86_64-linux";
};
crossSystem = {
system = "aarch64-linux";
};
};
appended = cross.appendOverlays [ ];
in
assert cross.makeWrapper ? __spliced;
assert appended.makeWrapper ? __spliced;
pkgs.emptyFile;
}

View File

@@ -272,7 +272,10 @@ let
# in one go when calling Nixpkgs, for performance and simplicity.
appendOverlays =
extraOverlays:
if extraOverlays == [ ] then self else nixpkgsFun { overlays = args.overlays ++ extraOverlays; };
if extraOverlays == [ ] then
self.__splicedPackages
else
nixpkgsFun { overlays = args.overlays ++ extraOverlays; };
# NOTE: each call to extend causes a full nixpkgs rebuild, adding ~130MB
# of allocations. DO NOT USE THIS IN NIXPKGS.