aithings/overlays/lib.nix
2024-02-24 19:18:13 +01:00

40 lines
1.3 KiB
Nix

lib: _: {
overlays = {
runOverlay = do: final: prev: do {
inherit final prev;
util = {
callPackageOrTuple = input:
if lib.isList input then
assert lib.length input == 2; let
pkg = lib.head input;
args = lib.last input;
in final.callPackage pkg args
else
final.callPackage input { };
};
};
callManyPackages = packages: lib.overlays.runOverlay ({ util, ... }:
let
packages' = lib.listToAttrs (map (x: lib.nameValuePair (baseNameOf x) x) packages);
in
lib.mapAttrs (lib.const util.callPackageOrTuple) packages'
);
applyOverlays = packageSet: overlays: let
combinedOverlay = lib.composeManyExtensions overlays;
in
# regular extensible package set
if packageSet ? extend then
packageSet.extend combinedOverlay
# makeScope-style package set, this case needs to be handled before makeScopeWithSplicing
else if packageSet ? overrideScope' then
packageSet.overrideScope' combinedOverlay
# makeScopeWithSplicing-style package set
else if packageSet ? overrideScope then
packageSet.overrideScope combinedOverlay
else
throw "don't know how to extend the given package set";
};
}