             (if (package-installed-p package)
                 (message "✓ Installed %s" package)
               (error "✕ Couldn't install %s" package)))
-          (message "Installing core packages...done")))))
+          (message "Installing core packages...done"))))
+    ;; autoloads file
+    (unless (quiet! (load doom-autoload-file 'noerror 'nomessage 'nosuffix))
+      (unless noninteractive
+        (error "No autoloads file! Run make autoloads"))))
   ;; initialize Doom core
-  (require 'core-lib)
   (require 'core-os)
-  (unless doom-init-p
+  (unless (or doom-init-p noninteractive)
     ;; Cache important packages.el state
     (doom|refresh-cache))
   (unless noninteractive

    (with-temp-file doom-packages-file
      (insert ";;; -*- lexical-binding:t -*-\n"
              ";; This file was autogenerated by `doom|refresh-cache', DO NOT EDIT!\n")
      (prin1 `(setq Info-directory-list ',Info-directory-list
                    doom-disabled-packages ',doom-disabled-packages
                    package-activated-list ',package-activated-list)
             (current-buffer)))))

    (require 'cl-lib)
    (require 'map))
  (cl-pushnew doom-core-dir load-path :test #'string=)
  (require 'core-lib)
  (when (or force-p (not doom-init-p))
    ;; packages.el cache
    (when (and force-p (file-exists-p doom-packages-file))
      (message "Deleting packages.el cache")
      (delete-file doom-packages-file))
    (unless (load doom-packages-file 'noerror 'nomessage 'nosuffix)
      ;; Ensure core folders exist, otherwise we get errors
