{ inputs, lib, pkgs, ... }:

  let
    inherit (lib.attrsets) attrValues;
    inherit (lib.fixedPoints) makeExtensible;
    inherit (lib.lists) foldr;
    inherit (modules) mapModules;

    modules = import ./modules.nix {
      inherit lib;
      self.attrs = import ./attrs.nix {
        inherit lib;
        self = {};
      };
    };
    mylib =
      makeExtensible (self:
        mapModules ./. (file: import file {inherit self lib pkgs inputs;}));
  in 
    mylib.extend (self: super: foldr (a: b: a // b) {} (attrValues super))
