diff --git a/lib/default.nix b/lib/default.nix index 988c2a5..da1b552 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -13,4 +13,34 @@ lib.makeExtensible (self: rec { rev = input.shortRev or "dirty"; in "unstable-${date}_${rev}"; + + mapModules = f: dir: + let + filter = name: type: + let + isPublic = !(lib.hasPrefix "_" name); + isSomething = type != null; + isModule = + let + path = "${toString dir}/${name}"; + isDefault = type == "directory" && builtins.pathExists "${path}/default.nix"; + isFile = type == "regular" && lib.hasSuffix ".nix" name && name != "default.nix"; + in + isDefault || isFile; + in + isPublic && isSomething && isModule; + + mkModule = name: _: + let + path = "${toString dir}/${name}"; + normalizedName = + if name == "default.nix" + then name + else lib.removeSuffix ".nix" name; + in + lib.nameValuePair normalizedName (f path); + in + lib.mapAttrs' mkModule (lib.filterAttrs filter (builtins.readDir dir)); + + mapModules' = f: dir: lib.attrValues (mapModules f dir); })