{ pkgs , lib ? pkgs.lib , modules ? [] , extraArgs ? {} , specialArgs ? {} , check ? true , prefix ? [] }: let extraArgs_ = extraArgs; pkgs_ = pkgs; baseModules = map import (lib.findFiles ".*\\.nix" ./modules ); pkgsModule = rec { _file = ./modules.nix; key = _file; config = { _module.args.pkgs = lib.mkIf (pkgs_ != null) (lib.mkForce pkgs_); }; }; in rec { # Merge the option definitions in all modules, # forming the full system configuration. inherit (lib.evalModules { inherit prefix; inherit check; modules = modules ++ baseModules ++ [ pkgsModule ]; args = extraArgs; inherit specialArgs; #specialArgs = { modulesPath = config/modules.nix; } // specialArgs; }) config options; # These are the extra arguments passed to every module. # In particular, Nixpkgs is passed through the "pkgs" argument. extraArgs = extraArgs_ // { inherit modules; inherit baseModules; }; inherit (config._module.args) pkgs; }