feat: upgrade overlays to support merging namespaces
This commit is contained in:
parent
8141ee43d8
commit
2bc7d5fab3
5 changed files with 251 additions and 110 deletions
|
|
@ -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;
|
||||
};
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue