{ lib, ... }: with lib; { base-host-config = host-path: 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 = attrNames (filterAttrs is-nix-file (filterAttrs is-regular-file (builtins.readDir host-path))); hosts = map hostname-from-file host-files; load-host-file = hostname: import (host-path + "/${hostname}.nix"); in genAttrs hosts (hostname: load-host-file hostname); }