From bf5772bd8adfb844eb339c3e9d054bfde8ce955c Mon Sep 17 00:00:00 2001 From: Ophestra Date: Sat, 7 Jun 2025 04:29:32 +0900 Subject: nix: deduplicate home-manager merging This becomes a problem when extraHomeConfig defines nixos module options. Signed-off-by: Ophestra --- nixos.nix | 62 +++++++++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 43 insertions(+), 19 deletions(-) (limited to 'nixos.nix') diff --git a/nixos.nix b/nixos.nix index 307355b2..25eb777a 100644 --- a/nixos.nix +++ b/nixos.nix @@ -9,6 +9,7 @@ packages: let inherit (lib) lists + attrsets mkMerge mkIf mapAttrs @@ -231,25 +232,48 @@ in { useUserPackages = false; # prevent users.users entries from being added - users = mkMerge ( - foldlAttrs ( - acc: _: fid: - acc - ++ foldlAttrs ( - acc': _: app: - acc' - ++ [ - { - ${getsubname fid app.identity} = mkMerge [ - cfg.extraHomeConfig - app.extraConfig - { home.packages = app.packages; } - ]; - } - ] - ) [ { ${getsubname fid 0} = cfg.extraHomeConfig; } ] cfg.apps - ) [ privPackages ] cfg.users - ); + users = + mkMerge + (foldlAttrs + ( + acc: _: fid: + foldlAttrs + ( + acc: _: app: + ( + let + key = getsubname fid app.identity; + in + { + usernames = acc.usernames // { + ${key} = true; + }; + merge = acc.merge ++ [ + { + ${key} = mkMerge ( + [ + app.extraConfig + { home.packages = app.packages; } + ] + ++ lib.optional (!attrsets.hasAttrByPath [ key ] acc.usernames) cfg.extraHomeConfig + ); + } + ]; + } + ) + ) + { + inherit (acc) usernames; + merge = acc.merge ++ [ { ${getsubname fid 0} = cfg.extraHomeConfig; } ]; + } + cfg.apps + ) + { + usernames = { }; + merge = [ privPackages ]; + } + cfg.users + ).merge; }; users = -- cgit v1.3.1