dotfiles/lib/default.nix

50 lines
1.5 KiB
Nix

{ lib, ... }:
lib.makeExtensible (_: rec {
mkDate = longDate: lib.concatStringsSep "-" [
(builtins.substring 0 4 longDate)
(builtins.substring 4 2 longDate)
(builtins.substring 6 2 longDate)
];
mkVersionSrc = src: "unstable-" + builtins.substring 0 7 src.rev;
mkVersionInput = input:
let
date = mkDate (input.lastModifiedDate or "19700101");
rev = input.shortRev or "dirty";
in
"unstable-${date}_${rev}";
mapModules = f: dir:
let
filterModules = name: type:
let
isPublic = !(lib.hasPrefix "_" name);
isSomething = type != null;
isModule =
let
path = "${toString dir}/${name}";
isDefault = type == "directory" && builtins.pathExists "${path}/default.nix";
isFile = type == "regular" && lib.hasSuffix ".nix" name && name != "default.nix";
in
isDefault || isFile;
in
isPublic && isSomething && isModule;
modulesInDir = lib.filterAttrs filterModules (builtins.readDir dir);
mkModule = name: _:
let
path = "${toString dir}/${name}";
normalizedName =
if name == "default.nix"
then name
else lib.removeSuffix ".nix" name;
in
lib.nameValuePair normalizedName (f path);
in
lib.mapAttrs' mkModule modulesInDir;
mapModules' = f: dir: lib.attrValues (mapModules f dir);
listModules = mapModules' (path: path);
})