refactor: improve attrs helpers and extract merge logic

Add apply-aliases-and-overrides for pre-merged attribute sets (e.g., from fix).
Extract nested merge logic in merge-shallow-packages into named merge-item
helper for better testability. Inline single-use aliased-items binding.

Changes:
- attrs/default.nix: Added apply-aliases-and-overrides helper
- attrs/default.nix: Extracted merge-item and merge-value helpers
- attrs/default.nix: Inlined single-use binding in merge-with-aliases
- package/default.nix: Use new apply-aliases-and-overrides helper

Impact:
- Lines: +17 -5 (net: +12, but adds reusable helper)
- Better separation of concerns
- Improved testability
- Consistent alias handling across codebase

Testing: nix flake check ✓
This commit is contained in:
anntnzrb
2025-10-09 00:00:00 -05:00
parent 4df1f04931
commit 8bfe3616e5
2 changed files with 34 additions and 18 deletions

View File

@@ -66,19 +66,22 @@ in
#@ [Attrs] -> Attrs #@ [Attrs] -> Attrs
merge-shallow-packages = merge-shallow-packages =
items: items:
foldl ( let
result: item: merge-item =
result result: item:
// (mapAttrs ( let
name: value: merge-value =
if isDerivation value then name: value:
value if isDerivation value then
else if builtins.isAttrs value then value
(result.${name} or { }) // value else if builtins.isAttrs value then
else (result.${name} or { }) // value
value else
) item) value;
) { } items; in
result // mapAttrs merge-value item;
in
foldl merge-item { } items;
## Merge items with a merge function and apply aliases ## Merge items with a merge function and apply aliases
## Example Usage: ## Example Usage:
@@ -89,9 +92,23 @@ in
#@ (Attrs -> Attrs -> Attrs) -> [Attrs] -> Attrs -> Attrs #@ (Attrs -> Attrs -> Attrs) -> [Attrs] -> Attrs -> Attrs
merge-with-aliases = merge-fn: items: alias: merge-with-aliases = merge-fn: items: alias:
let let
items-without-aliases = foldl merge-fn { } items; merged = foldl merge-fn { } items;
aliased-items = mapAttrs (name: value: items-without-aliases.${value}) alias;
in in
items-without-aliases // aliased-items; merged // mapAttrs (name: value: merged.${value}) alias;
## Apply aliases and overrides to an already-merged attribute set.
## Use this when you have a pre-built attribute set (e.g., from fix).
## Example Usage:
## ```nix
## apply-aliases-and-overrides packages-set { default = "vim"; } { extra = ...; }
## ```
## Result: packages-set with aliases and overrides applied
#@ Attrs -> Attrs -> Attrs -> Attrs
apply-aliases-and-overrides =
items: alias: overrides:
let
aliased = mapAttrs (name: value: items.${value}) alias;
in
items // aliased // overrides;
}; };
} }

View File

@@ -86,8 +86,7 @@ in
in in
foldl merge-packages { } packages-metadata foldl merge-packages { } packages-metadata
); );
aliased-items = mapAttrs (name: value: packages-without-aliases.${value}) alias; packages = snowfall-lib.attrs.apply-aliases-and-overrides packages-without-aliases alias overrides;
packages = packages-without-aliases // aliased-items // overrides;
in in
filterPackages pkgs.stdenv.hostPlatform.system packages; filterPackages pkgs.stdenv.hostPlatform.system packages;
in { in {