let
  # The warning is in a top-level let binding so it is only printed once.
  minimalModulesWarning = warn "lib.nixos.evalModules is experimental and subject to change. See nixos/lib/default.nix" null;
  inherit (nonExtendedLib) warn;
  nonExtendedLib = import ../../lib;
in
{ # Optional. Allows an extended `lib` to be used instead of the regular Nixpkgs lib.
  lib ? nonExtendedLib,

  # Feature flags allow you to opt in to unfinished code. These may change some
  # behavior or disable warnings.
  featureFlags ? {},

  # This file itself is rather new, so we accept unknown parameters to be forward
  # compatible. This is generally not recommended, because typos go undetected.
  ...
}:
let
  seqIf = cond: if cond then builtins.seq else a: b: b;
  # If cond, force `a` before returning any attr
  seqAttrsIf = cond: a: lib.mapAttrs (_: v: seqIf cond a v);

  eval-config-minimal = import ./eval-config-minimal.nix { inherit lib; };

  testing-lib = import ./testing/default.nix { inherit lib; };
in
/*
  This attribute set appears as lib.nixos in the flake, or can be imported
  using a binding like `nixosLib = import (nixpkgs + "/nixos/lib") { }`.
*/
{
  inherit (seqAttrsIf (!featureFlags?minimalModules) minimalModulesWarning eval-config-minimal)
    evalModules
    ;

  inherit (testing-lib)
    evalTest
    runTest
    ;

}
