forked from pub-solar/os
ae0746a5a4
`reqImport` in particular, is useful for easily importing an entire directory of nix files into an attribute set.
52 lines
907 B
Nix
52 lines
907 B
Nix
{ lib, ... }:
|
|
let
|
|
inherit (builtins)
|
|
attrNames
|
|
isAttrs
|
|
readDir
|
|
;
|
|
|
|
|
|
inherit (lib)
|
|
filterAttrs
|
|
hasSuffix
|
|
mapAttrs'
|
|
nameValuePair
|
|
removeSuffix
|
|
;
|
|
|
|
in
|
|
rec {
|
|
# mapFilterAttrs ::
|
|
# (name -> value -> bool )
|
|
# (name -> value -> { name = any; value = any; })
|
|
# attrs
|
|
mapFilterAttrs = seive: f: attrs:
|
|
filterAttrs seive (mapAttrs' f attrs);
|
|
|
|
vimport = path: name: import (path + "/${name}");
|
|
|
|
reqImport = {
|
|
dir,
|
|
_import ? base: vimport dir (base + ".nix")
|
|
}:
|
|
mapFilterAttrs
|
|
(_: v: v != null)
|
|
(
|
|
n: v:
|
|
if
|
|
n != "default.nix"
|
|
&& hasSuffix ".nix" n
|
|
&& v == "regular"
|
|
|
|
then let
|
|
name = removeSuffix ".nix" n;
|
|
in
|
|
nameValuePair (name) (_import name)
|
|
|
|
else
|
|
nameValuePair ("") (null)
|
|
)
|
|
(readDir dir);
|
|
}
|