Flake for my NixOS devices
at stylus-try 24 lines 899 B view raw
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