rework lib and some general changes
This commit is contained in:
parent
48b7ab9fab
commit
af804c63f8
11 changed files with 152 additions and 121 deletions
|
@ -1,27 +1,43 @@
|
|||
{ lib, ... }:
|
||||
|
||||
let
|
||||
inherit (builtins) attrValues readDir pathExists;
|
||||
inherit (lib) id filterAttrs hasPrefix hasSuffix nameValuePair removeSuffix mapAttrs' trace fix fold isAttrs;
|
||||
{
|
||||
lib,
|
||||
self,
|
||||
...
|
||||
}: let
|
||||
inherit (builtins) attrValues readDir pathExists concatLists;
|
||||
inherit (lib.attrsets) mapAttrsToList filterAttrs nameValuePair;
|
||||
inherit (lib.strings) hasPrefix hasSuffix removeSuffix;
|
||||
inherit (lib.trivial) id;
|
||||
inherit (self.attrs) mapFilterAttrs;
|
||||
in rec {
|
||||
mapModules' = dir: fn: dirfn:
|
||||
filterAttrs
|
||||
(name: type: type != null && !(hasPrefix "_" name))
|
||||
(mapAttrs'
|
||||
(name: type:
|
||||
let path = "${toString dir}/${name}"; in
|
||||
if type == "directory"
|
||||
then nameValuePair name (dirfn path)
|
||||
else if
|
||||
type == "regular" &&
|
||||
name != "default.nix" &&
|
||||
hasSuffix ".nix" name
|
||||
then nameValuePair (removeSuffix ".nix" name) (fn path)
|
||||
else nameValuePair "" null
|
||||
)
|
||||
(readDir dir));
|
||||
mapModules = dir: fn:
|
||||
mapFilterAttrs (n: v: v != null && !(hasPrefix "_" n)) (n: v: let
|
||||
path = "${toString dir}/${n}";
|
||||
in
|
||||
if v == "directory" && pathExists "${path}/default.nix"
|
||||
then nameValuePair n (fn path)
|
||||
else if v == "regular" && n != "default.nix" && hasSuffix ".nix" n
|
||||
then nameValuePair (removeSuffix ".nix" n) (fn path)
|
||||
else nameValuePair "" null) (readDir dir);
|
||||
|
||||
mapModules = dir: fn: mapModules' dir fn (path: if pathExists "${path}/default.nix" then fn path else null);
|
||||
mapModulesRec = dir: fn: mapModules' dir fn (path: mapModulesRec path fn);
|
||||
mapModulesRec' = dir: fn: fix (f: attrs: fold (x: xs: (if isAttrs x then f x else [x]) ++ xs) [] (attrValues attrs)) (mapModulesRec dir fn);
|
||||
mapModules' = dir: fn: attrValues (mapModules dir fn);
|
||||
|
||||
mapModulesRec = dir: fn:
|
||||
mapFilterAttrs (n: v: v != null && !(hasPrefix "_" n)) (n: v: let
|
||||
path = "${toString dir}/${n}";
|
||||
in
|
||||
if v == "directory"
|
||||
then nameValuePair n (mapModulesRec path fn)
|
||||
else if v == "regular" && n != "default.nix" && hasSuffix ".nix" n
|
||||
then nameValuePair (removeSuffix ".nix" n) (fn path)
|
||||
else nameValuePair "" null) (readDir dir);
|
||||
|
||||
mapModulesRec' = dir: fn: let
|
||||
dirs =
|
||||
mapAttrsToList (k: _: "${dir}/${k}")
|
||||
(filterAttrs (n: v: v == "directory" && !(hasPrefix "_" n))
|
||||
(readDir dir));
|
||||
files = attrValues (mapModules dir id);
|
||||
paths = files ++ concatLists (map (d: mapModulesRec' d id) dirs);
|
||||
in
|
||||
map fn paths;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue