nixos-lib/lib/attrsets.nix

38 lines
931 B
Nix

{lib, myLib, ...}:
with lib;
rec {
getPriority = x:
if isAttrs x && (attrByPath [ "_type" ] "" x) == "override" then
getAttr "priority" x
else
lib.modules.defaultOverridePriority
;
comparePriority = a: b: (getPriority a) - (getPriority b);
mergeAttrsRecursiveWithPriority = a: b:
let
_prio = comparePriority a b;
in
if _prio == 0 then
_mergeAttrsRecursive mergeAttrsRecursiveWithPriority a b
else if _prio > 0 then
a
else
b
;
mergeAttrsRecursive = a: b: _mergeAttrsRecursive _mergeAttrsRecursive a b;
_mergeAttrsRecursive = self: a: b: foldAttrs (item: acc:
if (isNull acc) then
item
else if (isList item) then
if isList acc then
acc ++ item
else [ acc ] ++ item
else if (isString item) then
acc + item
else if (isAttrs item) then
self acc item
else item
) null [ b a ];
}