devos/lib/utils.nix

42 lines
1.2 KiB
Nix
Raw Normal View History

{ lib, ... }:
let
inherit (builtins) attrNames isAttrs readDir listToAttrs;
2020-01-04 06:06:31 +01:00
inherit (lib) filterAttrs hasSuffix mapAttrs' nameValuePair removeSuffix;
# mapFilterAttrs ::
# (name -> value -> bool )
# (name -> value -> { name = any; value = any; })
# attrs
2020-01-04 06:06:31 +01:00
mapFilterAttrs = seive: f: attrs: filterAttrs seive (mapAttrs' f attrs);
# Generate an attribute set by mapping a function over a list of values.
genAttrs' = values: f: listToAttrs (map f values);
2020-07-31 06:17:28 +02:00
in
{
inherit mapFilterAttrs genAttrs';
2020-01-04 06:06:31 +01:00
recImport = { dir, _import ? base: import "${dir}/${base}.nix" }:
2020-07-31 06:17:28 +02:00
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);
# Convert a list to file paths to attribute set
# that has the filenames stripped of nix extension as keys
# and imported content of the file as value.
pathsToImportedAttrs = paths:
genAttrs' paths (path: {
name = removeSuffix ".nix" (baseNameOf path);
value = import path;
});
}