diff --git a/pkgs/pkgs-lib/default.nix b/pkgs/pkgs-lib/default.nix index 113dcebf8c68b..422128a033c2a 100644 --- a/pkgs/pkgs-lib/default.nix +++ b/pkgs/pkgs-lib/default.nix @@ -7,5 +7,35 @@ formats = import ./formats.nix { inherit lib pkgs; }; + + /* + Return attribute set of packages from overlay + + Type: callOverlay :: (pkgs -> pkgs -> attrs) -> attrs + + Example: + callOverlay (final: prev: { a = 42; }) + => { a = 42 } + */ + callOverlay = overlay: + let + newPkgs = overlay newPkgs pkgs // { + pkgs = newPkgs; + callPackage = pkgs.lib.callPackageWith newPkgs; + }; + in + overlay newPkgs pkgs; + + /* + Return attribute set of packages from overlays + + Type: callOverlays :: [pkgs -> pkgs -> attrs] -> attrs + + Example: + callOverlays [(final: prev: { a = 42; }) (final: prev: { b = 123; })] + => { a = 42; b = 123; } + */ + callOverlays = overlays: + pkgs.callOverlay (lib.composeManyExtensions overlays); } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 08e69df5d53e3..821ef4f75cbfb 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -969,7 +969,7 @@ with pkgs; writers = callPackage ../build-support/writers {}; # lib functions depending on pkgs - inherit (import ../pkgs-lib { inherit lib pkgs; }) formats; + inherit (import ../pkgs-lib { inherit lib pkgs; }) formats callOverlay callOverlays; testers = callPackage ../build-support/testers {};