diff options
author | Adam Joseph <adam@westernsemico.com> | 2023-08-14 02:47:59 +0300 |
---|---|---|
committer | Artturin <Artturin@artturin.com> | 2023-08-14 02:50:32 +0300 |
commit | a1fdbae706c846f01c31bbe02cb8246fa348b480 (patch) | |
tree | a6b5eca09c67592a15c211cfc3f3d25f225166f5 | |
parent | b5f77af42cf760e6d4b44015c6e7bb36938e56ab (diff) | |
download | nixpkgs-a1fdbae706c846f01c31bbe02cb8246fa348b480.tar nixpkgs-a1fdbae706c846f01c31bbe02cb8246fa348b480.tar.gz nixpkgs-a1fdbae706c846f01c31bbe02cb8246fa348b480.tar.bz2 nixpkgs-a1fdbae706c846f01c31bbe02cb8246fa348b480.tar.lz nixpkgs-a1fdbae706c846f01c31bbe02cb8246fa348b480.tar.xz nixpkgs-a1fdbae706c846f01c31bbe02cb8246fa348b480.tar.zst nixpkgs-a1fdbae706c846f01c31bbe02cb8246fa348b480.zip |
lib.customisation: add uncurried form of makeScopeWithSplicing
Deeply-curried functions are pretty error-prone in untyped languages like Nix. This is a particularly bad case because `top-level/splice.nix` *also* declares a makeScopeWithSplicing, but it takes *two fewer arguments*. Let's add a version that uses attrset-passing form, to provide some minimal level of sanity-checking. This also provides defaults for keep and extra (these are often unneeded by the user).
-rw-r--r-- | lib/customisation.nix | 29 | ||||
-rw-r--r-- | lib/default.nix | 2 | ||||
-rw-r--r-- | pkgs/top-level/splice.nix | 1 |
3 files changed, 23 insertions, 9 deletions
diff --git a/lib/customisation.nix b/lib/customisation.nix index a9281b1ab69..6dbe8f472f9 100644 --- a/lib/customisation.nix +++ b/lib/customisation.nix @@ -277,9 +277,24 @@ rec { }; 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; @@ -295,13 +310,11 @@ rec { 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; diff --git a/lib/default.nix b/lib/default.nix index 73b8ad87154..1958d93aaf5 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -112,7 +112,7 @@ let 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 diff --git a/pkgs/top-level/splice.nix b/pkgs/top-level/splice.nix index 51fd6f420e8..9ac0fe2200f 100644 --- a/pkgs/top-level/splice.nix +++ b/pkgs/top-level/splice.nix @@ -145,6 +145,7 @@ in # 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: |