        ,@(cl-loop for (module . submodule) in (doom-module-pairs)
                   for module-path = (doom-module-path module submodule)
                   collect `(load! init ,module-path t) into inits
-                  collect `(require! ,module ,submodule nil t) into configs
+                  collect `(load! config ,module-path t) into configs
                   finally return (append inits configs))
 
        (when (display-graphic-p)

                   (error-message-string ex))))))))

(defmacro featurep! (module &optional submodule flag)
  "A convenience macro wrapper for `doom-module-loaded-p'. It is evaluated at
compile-time/macro-expansion time."
  (unless submodule
    (let* ((path (or load-file-name byte-compile-current-file))

MODULE is a keyword, SUBMODULE is a symbol. e.g. :lang 'emacs-lisp.

Used by `require!' and `depends-on!'."
  (let ((key (cons module submodule)))
    (puthash key
             (or (doom-enlist flags)
                 (gethash key doom-modules)
                 '(t))
             doom-modules)))

(defun doom-module-pairs ()
  "Returns `doom-modules' as a list of (MODULE . SUBMODULE) cons cells. The list
