-
Notifications
You must be signed in to change notification settings - Fork 1
/
umport.nix
52 lines (52 loc) · 1.4 KB
/
umport.nix
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
{lib, ...}: let
umport = inputs @ {
path ? null,
paths ? [],
include ? [],
exclude ? [],
recursive ? true,
}:
with lib;
with fileset; let
excludedFiles = filter (path: pathIsRegularFile path) exclude;
excludedDirs = filter (path: pathIsDirectory path) exclude;
isExcluded = path:
if elem path excludedFiles
then true
else (filter (excludedDir: lib.path.hasPrefix excludedDir path) excludedDirs) != [];
in
unique (
(
filter
(file: pathIsRegularFile file && hasSuffix ".nix" (builtins.toString file) && !isExcluded file)
(concatMap (
_path:
if recursive
then toList _path
else
mapAttrsToList (
name: type:
_path
+ (
if type == "directory"
then "/${name}/default.nix"
else "/${name}"
)
)
(builtins.readDir _path)
)
(unique (
if path == null
then paths
else [path] ++ paths
)))
)
++ (
if recursive
then concatMap (path: toList path) (unique include)
else unique include
)
);
in {
inherit umport;
}