{ lib, ... }: with lib; let hostname-from-file = filename: builtins.replaceStrings [".nix"] [""] filename; is-nix-file = filename: type: (builtins.match ".+\.nix$" filename) != null; is-regular-file = filename: type: type == "regular" || type == "link"; host-files = host-path: attrNames (filterAttrs is-nix-file (filterAttrs is-regular-file (builtins.readDir host-path))); hosts = host-path: map hostname-from-file (host-files host-path); in { base-host-config = host-path: let load-host-file = hostname: import (host-path + "/${hostname}.nix"); in genAttrs (hosts host-path) (hostname: load-host-file hostname); host-list = host-path: hosts host-path; }