Flake for my NixOS devices
1{lib, ...}: let
2 allNodesOf = nodeType: dir: lib.attrNames (lib.filterAttrs (_n: v: v == nodeType) dir);
3 allRoles = builtins.readDir ./.;
4 allNixFiles = dir:
5 lib.pipe (builtins.readDir dir) [
6 (allNodesOf "regular")
7 (builtins.filter (s: s != "default.nix"))
8 (builtins.filter (lib.hasSuffix ".nix"))
9 ];
10
11 # Flat Roles: roles that are normal .nix file in nixosModules/
12 rolesFiles = builtins.map (lib.removeSuffix ".nix") (allNixFiles ./.);
13 flatRoles = lib.genAttrs rolesFiles (p: ./. + "/${p}.nix");
14
15 # Nested Roles: roles that are a folder containing a number of .nix files
16 rolesDirs = allNodesOf "directory" allRoles;
17 createNestedRole = dir: let
18 nixFiles = allNixFiles (./. + "/${dir}");
19 in {
20 imports = builtins.map (f: ./. + "/${dir}" + "/${f}") nixFiles;
21 };
22 nestedRoles = lib.genAttrs rolesDirs createNestedRole;
23in
24 flatRoles // nestedRoles