feat: upgrade overlays to support merging namespaces

This commit is contained in:
Jake Hamilton 2022-10-11 01:08:13 -07:00
parent 8141ee43d8
commit 2bc7d5fab3
No known key found for this signature in database
GPG key ID: 9762169A1B35EA68
5 changed files with 251 additions and 110 deletions

View file

@ -7,10 +7,12 @@ let
inherit (core-inputs.nixpkgs.lib)
assertMsg
mapAttrsToList
mapAttrs
flatten
fold
foldl
recursiveUpdate
mergeAttrs;
mergeAttrs
isDerivation;
in
{
attrs = {
@ -25,12 +27,33 @@ in
# Type: [Attrs] -> Attrs
# Usage: merge-deep [{ x = 1; } { x = 2; }]
# result: { x = 2; }
merge-deep = fold recursiveUpdate { };
merge-deep = foldl recursiveUpdate { };
# Merge the root of a list of attribute sets.
# Type: [Attrs] -> Attrs
# Usage: merge-shallow [{ x = 1; } { x = 2; }]
# result: { x = 2; }
merge-shallow = fold mergeAttrs { };
merge-shallow = foldl mergeAttrs { };
# Merge shallow for packages, but allow one deeper layer of attribute sets.
# Type: [Attrs] -> Attrs
# Usage: merge-shallow-packages [ { inherit (pkgs) vim; some.value = true; } { some.value = false; } ]
# result: { vim = ...; some.value = false; }
merge-shallow-packages = items:
foldl
(result: item:
result // (mapAttrs
(name: value:
if isDerivation value then
value
else if builtins.isAttrs value then
(result.${name} or { }) // value
else
value
)
item)
)
{ }
items;
};
}