From 0cfd7c260c2f478caa409ad69b5833fc73550674 Mon Sep 17 00:00:00 2001 From: alexion Date: Sat, 26 Sep 2026 22:58:30 -0400 Subject: [PATCH] refactor(dotfiles): share Nix file discovery --- src/dotfiles/default.nix | 2 +- src/dotfiles/guests.nix | 15 ++++++--------- src/dotfiles/registry.nix | 18 ++++++------------ src/skills/style/nix/rules/general.md | 12 ++++++++++++ 4 files changed, 25 insertions(+), 22 deletions(-) create mode 100644 src/skills/style/nix/rules/general.md diff --git a/src/dotfiles/default.nix b/src/dotfiles/default.nix index 245364c..2a53e2a 100644 --- a/src/dotfiles/default.nix +++ b/src/dotfiles/default.nix @@ -17,7 +17,7 @@ let util = import ./util.nix { inherit lib; }; registry = import ./registry.nix { - inherit lib; + inherit lib util; hosts = self.nixosConfigurations; root = root + "/registry"; }; diff --git a/src/dotfiles/guests.nix b/src/dotfiles/guests.nix index 4085661..896ff97 100644 --- a/src/dotfiles/guests.nix +++ b/src/dotfiles/guests.nix @@ -8,6 +8,7 @@ util, }: let + files = util.collectNixFiles root; mkGuest = name: { config, lib, ... }: @@ -167,22 +168,22 @@ let config = lib.mkIf cfg.enable { assertions = let - hasDirectorySettings = mount: mount.owner != null || mount.group != null || mount.mode != null; - hasCompleteDirectorySettings = - mount: mount.owner != null && mount.group != null && mount.mode != null; - hasOneSource = mount: (mount.directory != null) != (mount.file != null); mountsWithInvalidSource = lib.attrNames ( lib.filterAttrs (_: mount: !hasOneSource mount) cfg.mounts ); + hasOneSource = mount: (mount.directory != null) != (mount.file != null); fileMountsWithHostSettings = lib.attrNames ( lib.filterAttrs (_: mount: mount.file != null && hasDirectorySettings mount) cfg.mounts ); + hasDirectorySettings = mount: mount.owner != null || mount.group != null || mount.mode != null; directoryMountsWithPartialHostSettings = lib.attrNames ( lib.filterAttrs ( _: mount: mount.directory != null && hasDirectorySettings mount && !hasCompleteDirectorySettings mount ) cfg.mounts ); + hasCompleteDirectorySettings = + mount: mount.owner != null && mount.group != null && mount.mode != null; in [ { @@ -275,11 +276,7 @@ let }; }; - files = util.collectNixFiles root; - guestFiles = lib.filterAttrs (file: type: type == "regular" && lib.hasSuffix ".nix" file) ( - builtins.readDir root - ); - names = map (file: lib.removeSuffix ".nix" file) (lib.attrNames guestFiles); + names = map (path: lib.removeSuffix ".nix" (builtins.baseNameOf path)) files; in { imports = files ++ map mkGuest names; diff --git a/src/dotfiles/registry.nix b/src/dotfiles/registry.nix index 8d6c2e0..6950765 100644 --- a/src/dotfiles/registry.nix +++ b/src/dotfiles/registry.nix @@ -2,20 +2,14 @@ hosts, lib, root, + util, }: let - definitions = - lib.mapAttrs' - ( - name: _type: - let - path = root + "/${name}"; - in - lib.nameValuePair (registryName name) (mkRegistry path) - ) - ( - lib.filterAttrs (name: type: type == "regular" && lib.hasSuffix ".nix" name) (builtins.readDir root) - ); + definitions = lib.listToAttrs ( + map (path: lib.nameValuePair (registryName (builtins.baseNameOf path)) (mkRegistry path)) ( + util.collectNixFiles root + ) + ); registryName = fileName: lib.removeSuffix ".nix" fileName; diff --git a/src/skills/style/nix/rules/general.md b/src/skills/style/nix/rules/general.md new file mode 100644 index 0000000..3b51109 --- /dev/null +++ b/src/skills/style/nix/rules/general.md @@ -0,0 +1,12 @@ +## Discover Nix files + +### Rule + +Use `util.collectNixFiles` to discover Nix files. +Do not use `builtins.readDir` with a `.nix` suffix filter for this purpose. +Pass `util` to Nix functions that need the helper. + +### Rationale + +`util.collectNixFiles` centralizes recursive discovery of Nix files. +Repository Nix code uses one implementation.