diff --git a/lib/default.nix b/lib/default.nix index a9367f8..aa298b3 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -1,2 +1,29 @@ lib: { + hylonix = { + recursiveMerge = + let + f = + x: y: + if y == null then + x + else if builtins.typeOf x != builtins.typeOf y then + y + else if builtins.typeOf x == "set" then + builtins.listToAttrs ( + builtins.map (name: { + inherit name; + value = f (x.${name} or null) (y.${name} or null); + }) (builtins.attrNames y ++ builtins.attrNames x) + ) + else if builtins.typeOf x == "list" then + x ++ y + else + y; + in + f; + + recursiveMergeAll = builtins.foldl' lib.hylonix.recursiveMerge null; + }; + + inherit (lib.hylonix) recursiveMerge recursiveMergeAll; }