From 06620a8e41d3a1c9eaa0c410f5c24a96b810dd02 Mon Sep 17 00:00:00 2001 From: anntnzrb Date: Wed, 8 Oct 2025 23:41:21 -0500 Subject: [PATCH] feat: add fs.get-directories-with-default helper to eliminate duplicate directory filtering --- snowfall-lib/fs/default.nix | 14 ++++++++++++++ snowfall-lib/home/default.nix | 3 +-- snowfall-lib/system/default.nix | 3 +-- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/snowfall-lib/fs/default.nix b/snowfall-lib/fs/default.nix index 73c2a6e..f39a5f9 100644 --- a/snowfall-lib/fs/default.nix +++ b/snowfall-lib/fs/default.nix @@ -99,6 +99,20 @@ in in mapAttrsToList (name: kind: "${path}/${name}") filtered-entries; + ## Get directories containing default.nix at a given path. + ## Example Usage: + ## ```nix + ## get-directories-with-default ./systems/x86_64-linux + ## ``` + ## Result: + ## ```nix + ## [ "./systems/x86_64-linux/my-host" ] + ## ``` + #@ Path -> [Path] + get-directories-with-default = + path: + builtins.filter (dir: pathExists "${dir}/default.nix") (get-directories path); + ## Get files at a given path. ## Example Usage: ## ```nix diff --git a/snowfall-lib/home/default.nix b/snowfall-lib/home/default.nix index a4c76d4..50f0a1c 100644 --- a/snowfall-lib/home/default.nix +++ b/snowfall-lib/home/default.nix @@ -179,8 +179,7 @@ in get-target-homes-metadata = target: let - homes = snowfall-lib.fs.get-directories target; - existing-homes = builtins.filter (home: builtins.pathExists "${home}/default.nix") homes; + existing-homes = snowfall-lib.fs.get-directories-with-default target; create-home-metadata = path: let diff --git a/snowfall-lib/system/default.nix b/snowfall-lib/system/default.nix index 620b21b..919e9a9 100644 --- a/snowfall-lib/system/default.nix +++ b/snowfall-lib/system/default.nix @@ -106,8 +106,7 @@ in get-target-systems-metadata = target: let - systems = snowfall-lib.fs.get-directories target; - existing-systems = builtins.filter (system: builtins.pathExists "${system}/default.nix") systems; + existing-systems = snowfall-lib.fs.get-directories-with-default target; create-system-metadata = path: { path = "${path}/default.nix"; # We are building flake outputs based on file contents. Nix doesn't like this