{ 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))
