Skip to content

Commit 571dd72

Browse files
committed
refactor(nix): use balanced attrset merges
Replace directory-derived attrset merge folds with mergeAttrsList so dynamic generated maps do not repeatedly copy the growing accumulator during evaluation.
1 parent 5132adb commit 571dd72

3 files changed

Lines changed: 18 additions & 14 deletions

File tree

flake/dev/devshells.nix

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,6 @@
4141
};
4242
in
4343
{
44-
devShells = lib.foldl' (acc: name: acc // buildShell name) dotnetShells shellNames;
44+
devShells = lib.attrsets.mergeAttrsList ([ dotnetShells ] ++ map buildShell shellNames);
4545
};
4646
}

lib/file/default.nix

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ let
2626

2727
listNamesMatching' = predicate: dirPath: lib.filter predicate (listNames' dirPath);
2828

29-
mergeAttrs' = attrsList: lib.foldl' (acc: attrs: acc // attrs) { } attrsList;
29+
mergeAttrs' = lib.attrsets.mergeAttrsList;
3030
in
3131
{
3232
/**
@@ -329,7 +329,7 @@ in
329329
path = systemPath + "/${hostname}";
330330
});
331331
in
332-
builtins.foldl' (acc: system: acc // generateSystemConfigs system) { } systemArchs;
332+
mergeAttrs' (map generateSystemConfigs systemArchs);
333333

334334
/**
335335
Filter systems for NixOS (Linux).
@@ -402,5 +402,5 @@ in
402402
in
403403
genAttrs userAtHosts parseUserAtHost;
404404
in
405-
builtins.foldl' (acc: system: acc // generateHomeConfigs system) { } systemArchs;
405+
mergeAttrs' (map generateHomeConfigs systemArchs);
406406
}

packages/wallpapers/package.nix

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -35,16 +35,20 @@ let
3535
if lib.length splitName > 1 then lib.concatStringsSep "." (lib.init splitName) else baseName;
3636

3737
names = map getFileNameWithoutExtension images;
38-
wallpapers = lib.foldl (
39-
acc: image:
40-
let
41-
# fileName = builtins.baseNameOf image;
42-
# Get the basename of the file and then take the name before the file extension.
43-
# eg. mywallpaper.png -> mywallpaper
44-
name = getFileNameWithoutExtension image;
45-
in
46-
acc // { "${name}" = mkWallpaper name (./assets + "/${image}"); }
47-
) { } images;
38+
wallpapers = lib.attrsets.mergeAttrsList (
39+
map (
40+
image:
41+
let
42+
# fileName = builtins.baseNameOf image;
43+
# Get the basename of the file and then take the name before the file extension.
44+
# eg. mywallpaper.png -> mywallpaper
45+
name = getFileNameWithoutExtension image;
46+
in
47+
{
48+
"${name}" = mkWallpaper name (./assets + "/${image}");
49+
}
50+
) images
51+
);
4852
installTarget = "$out/share/wallpapers";
4953
in
5054
stdenvNoCC.mkDerivation {

0 commit comments

Comments
 (0)