31 lines
897 B
Nix
31 lines
897 B
Nix
{ lib, ... }:
|
|
with lib;
|
|
let
|
|
# Recursively constructs an attrset of a given folder, recursing on directories, value of attrs is the filetype
|
|
getDir =
|
|
dir:
|
|
mapAttrs (file: type: if type == "directory" then getDir "${dir}/${file}" else type) (
|
|
builtins.readDir dir
|
|
);
|
|
|
|
# Collects all files of a directory as a list of strings of paths
|
|
files =
|
|
dir: collect isString (mapAttrsRecursive (path: type: concatStringsSep "/" path) (getDir dir));
|
|
|
|
# Filters out directories that don't end with .nix or are this file or the flake, also makes the strings absolute
|
|
validFiles =
|
|
dir:
|
|
map (file: ./. + "/${file}") (
|
|
filter (
|
|
file:
|
|
hasSuffix ".nix" file
|
|
&& file != "default.nix"
|
|
&& file != "flake.nix"
|
|
&& !hasPrefix "hosts" file
|
|
&& !hasPrefix "disko" file
|
|
) (files dir)
|
|
);
|
|
in
|
|
{
|
|
imports = validFiles ./.;
|
|
}
|