{ lib, ... }:
with lib; let
  modules' = dir: filterAttrs (name: type: (hasSuffix ".nix" name) || (type == "directory"))
    (builtins.readDir dir);
  modules = dir: mapAttrs' (name: _: nameValuePair (removeSuffix ".nix" name) (import (dir + "/${name}")))
    (modules' dir);
in
(modules ./modules)