diff --git a/lib/customisation.nix b/lib/customisation.nix index dfdb64cbf3e2..ce00e364ba76 100644 --- a/lib/customisation.nix +++ b/lib/customisation.nix @@ -631,9 +631,12 @@ rec { makeScope = newScope: f: let - self = f self // { - newScope = scope: newScope (self // scope); + self = { callPackage = self.newScope { }; + } + // f self + // { + newScope = scope: newScope (self // scope); overrideScope = g: makeScope newScope (extends g f); packages = f; }; diff --git a/lib/tests/misc.nix b/lib/tests/misc.nix index d4bdc344deb9..1a69d7dfb484 100644 --- a/lib/tests/misc.nix +++ b/lib/tests/misc.nix @@ -4789,6 +4789,58 @@ runTests { }; }; + # Check that makeScope provides a default callPackage + testMakeScopeDefaultCallPackage = + let + scope = lib.makeScope lib.callPackageWith (self: { + foo = self.callPackage ({ }: "foo-value") { }; + }); + in + { + expr = scope.foo; + expected = "foo-value"; + }; + + # Check that callPackage can be overridden by the scope function + testMakeScopeOverrideCallPackage = + let + customCallPackage = + _self: fn: args: + (fn args) + "-custom"; + scope = lib.makeScope lib.callPackageWith (self: { + callPackage = customCallPackage self; + foo = self.callPackage ({ }: "foo-value") { }; + }); + in + { + expr = scope.foo; + expected = "foo-value-custom"; + }; + + # Check that overriding callPackage persists through overrideScope + testMakeScopeOverrideCallPackagePersistsThroughOverrideScope = + let + customCallPackage = + _self: fn: args: + (fn args) + "-custom"; + scope = lib.makeScope lib.callPackageWith (self: { + callPackage = customCallPackage self; + foo = self.callPackage ({ }: "foo-value") { }; + }); + overridden = scope.overrideScope ( + _final: _prev: { + bar = scope.callPackage ({ }: "bar-value") { }; + } + ); + in + { + expr = { inherit (overridden) foo bar; }; + expected = { + foo = "foo-value-custom"; + bar = "bar-value-custom"; + }; + }; + testFilesystemResolveDefaultNixFile1 = { expr = lib.filesystem.resolveDefaultNix ./foo.nix; expected = ./foo.nix; diff --git a/pkgs/top-level/octave-packages.nix b/pkgs/top-level/octave-packages.nix index e440e979d5ce..acb164f047d0 100644 --- a/pkgs/top-level/octave-packages.nix +++ b/pkgs/top-level/octave-packages.nix @@ -56,7 +56,7 @@ makeScope newScope ( in { - inherit callPackage buildOctavePackage computeRequiredOctavePackages; + inherit buildOctavePackage computeRequiredOctavePackages; inherit (callPackage ../development/interpreters/octave/hooks { }) writeRequiredOctavePackagesHook