Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions checkmate.nix
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,11 @@ in
./tree/modules/hello-world/mod.nix
];
};

leafs."test loads from hidden directory but excludes sub-hidden" = {
expr = lit.leafs ./tree/a/b/_c;
expected = [ ./tree/a/b/_c/d/e.nix ];
};
};

}
Expand Down
52 changes: 50 additions & 2 deletions default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,10 @@ let
};

leafs =
lib: root:
lib:
let
treeFiles = t: (t.withLib lib).files;

listFilesRecursive =
x:
if isImportTree x then
Expand All @@ -40,19 +41,66 @@ let
lib.filesystem.listFilesRecursive x
else
[ x ];

nixFilter = andNot (lib.hasInfix "/_") (lib.hasSuffix ".nix");

initialFilter = if initf != null then initf else nixFilter;

pathFilter = compose (and filterf initialFilter) toString;

otherFilter = and filterf (if initf != null then initf else (_: true));

filter = x: if isPathLike x then pathFilter x else otherFilter x;

isFileRelative =
root:
{ file, rel }:
if file != null && lib.hasPrefix root file then
{
file = null;
rel = lib.removePrefix root file;
}
else
{ inherit file rel; };
getFileRelative = { file, rel }: if rel == null then file else rel;

makeRelative =
roots:
lib.pipe roots [
(lib.lists.flatten)
(builtins.filter isDirectory)
(builtins.map builtins.toString)
(builtins.map isFileRelative)
(fx: fx ++ [ getFileRelative ])
(
fx: file:
lib.pipe {
file = builtins.toString file;
rel = null;
} fx
)
];

rootRelative =
roots:
let
mkRel = makeRelative roots;
in
x: if isPathLike x then mkRel x else x;
in
root:
lib.pipe
[ paths root ]
[
(lib.lists.flatten)
(map listFilesRecursive)
(lib.lists.flatten)
(builtins.filter filter)
(builtins.filter (
compose filter (rootRelative [
paths
root
])
))
(map mapf)
];

Expand Down
1 change: 1 addition & 0 deletions tree/a/b/_c/d/_f.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
true