{ lib }: dir: let inherit (builtins) readDir attrNames filter match pathExists; inherit (lib) concatLists hasPrefix; entries = readDir dir; names = attrNames entries; validName = name: !(hasPrefix "_" name); recurse = name: let type = entries.${name}; path = dir + "/${name}"; in if !validName name then [ ] else if type == "directory" then importTree path else if type == "regular" && name != "default.nix" && match ".*\\.nix" name != null then [ path ] else [ ]; importTree = d: let dEntries = readDir d; dNames = attrNames dEntries; in concatLists (map (name: let type = dEntries.${name}; path = d + "/${name}"; in if !validName name then [ ] else if type == "directory" then importTree path else if type == "regular" && name != "import-tree.nix" && name != "flake.nix" && name != "flake.lock" && match ".*\\.nix" name != null then [ path ] else [ ] ) dNames); in importTree dir