Merge pull request #245957 from amjoseph-nixpkgs/pr/lib/customization/makeScopeWithSplicing2

Artturi bde196dd 7267429a

Changed files
+81 -80
lib
pkgs
desktops
development
interpreters
libraries
qt-5
qt-6
games
steam
os-specific
bsd
freebsd
netbsd
top-level
+21 -8
lib/customisation.nix
···
};
in self;
+
/* backward compatibility with old uncurried form; deprecated */
+
makeScopeWithSplicing =
+
splicePackages: newScope: otherSplices: keep: extra: f:
+
makeScopeWithSplicing' {
+
inherit splicePackages newScope otherSplices keep extra f;
+
};
+
/* Like the above, but aims to support cross compilation. It's still ugly, but
hopefully it helps a little bit. */
-
makeScopeWithSplicing = splicePackages: newScope: otherSplices: keep: extra: f:
+
makeScopeWithSplicing' =
+
{ splicePackages
+
, newScope
+
}:
+
{ otherSplices
+
, keep ? (_self: {})
+
, extra ? (_spliced0: {})
+
, f
+
}:
let
spliced0 = splicePackages {
pkgsBuildBuild = otherSplices.selfBuildBuild;
···
callPackage = newScope spliced; # == self.newScope {};
# N.B. the other stages of the package set spliced in are *not*
# overridden.
-
overrideScope = g: makeScopeWithSplicing
-
splicePackages
-
newScope
-
otherSplices
-
keep
-
extra
-
(lib.fixedPoints.extends g f);
+
overrideScope = g: (makeScopeWithSplicing'
+
{ inherit splicePackages newScope; }
+
{ inherit otherSplices keep extra;
+
f = lib.fixedPoints.extends g f;
+
});
packages = f;
};
in self;
+1 -1
lib/default.nix
···
noDepEntry fullDepEntry packEntry stringAfter;
inherit (self.customisation) overrideDerivation makeOverridable
callPackageWith callPackagesWith extendDerivation hydraJob
-
makeScope makeScopeWithSplicing;
+
makeScope makeScopeWithSplicing makeScopeWithSplicing';
inherit (self.derivations) lazyDerivation;
inherit (self.meta) addMetaAttrs dontDistribute setName updateName
appendToName mapDerivationAttrset setPrio lowPrio lowPrioSet hiPrio
+6 -12
pkgs/desktops/xfce/default.nix
···
, lib
, pkgs
, generateSplicesForMkScope
-
, makeScopeWithSplicing
+
, makeScopeWithSplicing'
}:
-
let
-
keep = _self: { };
-
extra = _spliced0: { };
-
-
in
-
makeScopeWithSplicing
-
(generateSplicesForMkScope "xfce")
-
keep
-
extra
-
(self:
+
makeScopeWithSplicing' {
+
otherSplices = generateSplicesForMkScope "xfce";
+
f = (self:
let
inherit (self) callPackage;
in
···
thunar-bare = self.thunar.override { thunarPlugins = [ ]; }; # added 2019-11-04
xfce4-hardware-monitor-plugin = throw "xfce.xfce4-hardware-monitor-plugin has been removed: abandoned by upstream and does not build"; # added 2023-01-15
-
})
+
});
+
}
+5 -8
pkgs/development/interpreters/lua-5/default.nix
···
# - imports lua-packages.nix
# - adds spliced package sets to the package set
# - applies overrides from `packageOverrides`
-
({ lua, overrides, callPackage, makeScopeWithSplicing }: let
+
({ lua, overrides, callPackage, makeScopeWithSplicing' }: let
luaPackagesFun = callPackage ../../../top-level/lua-packages.nix {
lua = self;
};
···
selfHostHost = luaOnHostForHost.pkgs;
selfTargetTarget = luaOnTargetForTarget.pkgs or {};
};
-
keep = self: { };
-
extra = spliced0: {};
extensions = lib.composeManyExtensions [
generatedPackages
overriddenPackages
overrides
];
-
in makeScopeWithSplicing
-
otherSplices
-
keep
-
extra
-
(lib.extends extensions luaPackagesFun))
+
in makeScopeWithSplicing' {
+
inherit otherSplices;
+
f = lib.extends extensions luaPackagesFun;
+
})
{
overrides = packageOverrides;
lua = self;
+5 -8
pkgs/development/interpreters/perl/default.nix
···
# Function that when called
# - imports perl-packages.nix
# - adds spliced package sets to the package set
-
({ stdenv, pkgs, perl, callPackage, makeScopeWithSplicing }: let
+
({ stdenv, pkgs, perl, callPackage, makeScopeWithSplicing' }: let
perlPackagesFun = callPackage ../../../top-level/perl-packages.nix {
# allow 'perlPackages.override { pkgs = pkgs // { imagemagick = imagemagickBig; }; }' like in python3Packages
# most perl packages aren't called with callPackage so it's not possible to override their arguments individually
···
selfHostHost = perlOnHostForHost.pkgs;
selfTargetTarget = perlOnTargetForTarget.pkgs or {};
};
-
keep = self: { };
-
extra = spliced0: {};
-
in makeScopeWithSplicing
-
otherSplices
-
keep
-
extra
-
perlPackagesFun)
+
in makeScopeWithSplicing' {
+
inherit otherSplices;
+
f = perlPackagesFun;
+
})
{
perl = self;
};
+1 -1
pkgs/development/interpreters/python/default.nix
···
, db
, lib
, libffiBoot
-
, makeScopeWithSplicing
+
, makeScopeWithSplicing'
, pythonPackagesExtensions
, stdenv
}@args:
+5 -8
pkgs/development/interpreters/python/passthrufun.nix
···
-
{ lib, stdenv, callPackage, pythonPackagesExtensions, config, makeScopeWithSplicing, ... }:
+
{ lib, stdenv, callPackage, pythonPackagesExtensions, config, makeScopeWithSplicing', ... }:
{ implementation
, libPrefix
···
};
hooks = import ./hooks/default.nix;
keep = lib.extends hooks pythonPackagesFun;
-
extra = _: {};
optionalExtensions = cond: as: lib.optionals cond as;
pythonExtension = import ../../../top-level/python-packages.nix;
python2Extension = import ../../../top-level/python2-packages.nix;
···
overrides
]);
aliases = self: super: lib.optionalAttrs config.allowAliases (import ../../../top-level/python-aliases.nix lib self super);
-
in makeScopeWithSplicing
-
otherSplices
-
keep
-
extra
-
(lib.extends (lib.composeExtensions aliases extensions) keep))
-
{
+
in makeScopeWithSplicing' {
+
inherit otherSplices keep;
+
f = lib.extends (lib.composeExtensions aliases extensions) keep;
+
}) {
overrides = packageOverrides;
python = self;
});
+5 -2
pkgs/development/libraries/qt-5/5.15/default.nix
···
*/
-
{ makeScopeWithSplicing, generateSplicesForMkScope
+
{ makeScopeWithSplicing', generateSplicesForMkScope
, lib, stdenv, fetchurl, fetchgit, fetchpatch, fetchFromGitHub, makeSetupHook, makeWrapper
, bison, cups ? null, harfbuzz, libGL, perl, python3
, gstreamer, gst-plugins-base, gtk3, dconf
···
} ../hooks/wrap-qt-apps-hook.sh;
};
-
in makeScopeWithSplicing (generateSplicesForMkScope "qt5") (_: {}) (_: {}) addPackages
+
in makeScopeWithSplicing' {
+
otherSplices = generateSplicesForMkScope "qt5";
+
f = addPackages;
+
}
+1 -1
pkgs/development/libraries/qt-6/default.nix
···
} ./hooks/qmake-hook.sh;
};
-
# TODO(@Artturin): convert to makeScopeWithSplicing
+
# TODO(@Artturin): convert to makeScopeWithSplicing'
# simple example of how to do that in 5568a4d25ca406809530420996d57e0876ca1a01
self = lib.makeScope newScope addPackages;
in
+5 -4
pkgs/games/steam/default.nix
···
-
{ makeScopeWithSplicing, generateSplicesForMkScope
+
{ makeScopeWithSplicing', generateSplicesForMkScope
, stdenv, buildFHSEnv, pkgsi686Linux, glxinfo
}:
···
steamcmd = callPackage ./steamcmd.nix { };
};
-
keep = self: { };
-
extra = spliced0: { };
-
in makeScopeWithSplicing (generateSplicesForMkScope "steamPackages") keep extra steamPackagesFun
+
in makeScopeWithSplicing' {
+
otherSplices = generateSplicesForMkScope "steamPackages";
+
f = steamPackagesFun;
+
}
+6 -7
pkgs/os-specific/bsd/freebsd/default.nix
···
{ stdenv, lib, stdenvNoCC
-
, makeScopeWithSplicing, generateSplicesForMkScope
+
, makeScopeWithSplicing', generateSplicesForMkScope
, buildPackages
, bsdSetupHook, makeSetupHook
, fetchgit, fetchzip, coreutils, groff, mandoc, byacc, flex, which, m4, gawk, substituteAll, runtimeShell
···
done
'';
-
in makeScopeWithSplicing
-
(generateSplicesForMkScope "freebsd")
-
(_: {})
-
(_: {})
-
(self: let
+
in makeScopeWithSplicing' {
+
otherSplices = generateSplicesForMkScope "freebsd";
+
f = (self: let
inherit (self) mkDerivation;
in {
inherit freebsdSrc;
···
'';
});
-
})
+
});
+
}
+7 -8
pkgs/os-specific/bsd/netbsd/default.nix
···
{ stdenv, lib, stdenvNoCC
-
, makeScopeWithSplicing, generateSplicesForMkScope
+
, makeScopeWithSplicing', generateSplicesForMkScope
, buildPackages
, bsdSetupHook, makeSetupHook, fetchcvs, groff, mandoc, byacc, flex
, zlib
···
else "no"}"
];
-
in makeScopeWithSplicing
-
(generateSplicesForMkScope "netbsd")
-
(_: {})
-
(_: {})
-
(self: let
+
in makeScopeWithSplicing' {
+
otherSplices = generateSplicesForMkScope "netbsd";
+
f = (self: let
inherit (self) mkDerivation;
in {
# Why do we have splicing and yet do `nativeBuildInputs = with self; ...`?
#
-
# We use `makeScopeWithSplicing` because this should be used for all
+
# We use `makeScopeWithSplicing'` because this should be used for all
# nested package sets which support cross, so the inner `callPackage` works
# correctly. But for the inline packages we don't bother to use
# `callPackage`.
···
# END MISCELLANEOUS
-
})
+
});
+
}
+5 -9
pkgs/top-level/all-packages.nix
···
qt5 = recurseIntoAttrs (makeOverridable
(import ../development/libraries/qt-5/5.15) {
inherit (__splicedPackages)
-
makeScopeWithSplicing generateSplicesForMkScope lib fetchurl fetchpatch fetchgit fetchFromGitHub makeSetupHook makeWrapper
+
makeScopeWithSplicing' generateSplicesForMkScope lib fetchurl fetchpatch fetchgit fetchFromGitHub makeSetupHook makeWrapper
bison cups dconf harfbuzz libGL perl gtk3 python3
darwin buildPackages;
inherit (__splicedPackages.gst_all_1) gstreamer gst-plugins-base;
···
xorg = let
-
keep = _self: { };
-
extra = _spliced0: { };
-
# Use `lib.callPackageWith __splicedPackages` rather than plain `callPackage`
# so as not to have the newly bound xorg items already in scope, which would
# have created a cycle.
···
generatedPackages = lib.callPackageWith __splicedPackages ../servers/x11/xorg/default.nix { };
-
xorgPackages = makeScopeWithSplicing
-
(generateSplicesForMkScope "xorg")
-
keep
-
extra
-
(lib.extends overrides generatedPackages);
+
xorgPackages = makeScopeWithSplicing' {
+
otherSplices = generateSplicesForMkScope "xorg";
+
f = lib.extends overrides generatedPackages;
+
};
in recurseIntoAttrs xorgPackages;
+7 -3
pkgs/top-level/darwin-packages.nix
···
{ lib
, buildPackages, pkgs, targetPackages
-
, generateSplicesForMkScope, makeScopeWithSplicing
+
, generateSplicesForMkScope, makeScopeWithSplicing'
, stdenv
, preLibcCrossHeaders
, config
···
(stdenv.targetPlatform.config + "-");
in
-
makeScopeWithSplicing (generateSplicesForMkScope "darwin") (_: {}) (spliced: spliced.apple_sdk.frameworks) (self: let
+
makeScopeWithSplicing' {
+
otherSplices = generateSplicesForMkScope "darwin";
+
extra = spliced: spliced.apple_sdk.frameworks;
+
f = (self: let
inherit (self) mkDerivation callPackage;
# Must use pkgs.callPackage to avoid infinite recursion.
···
} // lib.optionalAttrs config.allowAliases {
builder = throw "'darwin.builder' has been changed and renamed to 'darwin.linux-builder'. The default ssh port is now 31022. Please update your configuration or override the port back to 22. See https://nixos.org/manual/nixpkgs/unstable/#sec-darwin-builder"; # added 2023-07-06
-
})
+
});
+
}
+1
pkgs/top-level/splice.nix
···
# prefill 2 fields of the function for convenience
makeScopeWithSplicing = lib.makeScopeWithSplicing splicePackages pkgs.newScope;
+
makeScopeWithSplicing' = lib.makeScopeWithSplicing' { inherit splicePackages; inherit (pkgs) newScope; };
# generate 'otherSplices' for 'makeScopeWithSplicing'
generateSplicesForMkScope = attr: