Refactor startup process, hooks, doom-initialize & doom!
+ Brings back doom-pre-init-hook and doom-post-init-hook hooks. + Extracts autoload file loading logic into doom-initialize-autoloads function.
This commit is contained in:
parent
17d5721102
commit
6f5e710d98
2 changed files with 60 additions and 30 deletions
|
@ -78,9 +78,6 @@ missing) and shouldn't be deleted.")
|
||||||
everyone in the universe and their dog, causing errors that make babies cry. No
|
everyone in the universe and their dog, causing errors that make babies cry. No
|
||||||
one wants that.")
|
one wants that.")
|
||||||
|
|
||||||
(defvar doom-reload-hook nil
|
|
||||||
"A list of hooks to run when `doom/reload-load-path' is called.")
|
|
||||||
|
|
||||||
(defvar doom-site-load-path load-path
|
(defvar doom-site-load-path load-path
|
||||||
"The starting load-path, before it is altered by `doom-initialize'.")
|
"The starting load-path, before it is altered by `doom-initialize'.")
|
||||||
|
|
||||||
|
@ -91,6 +88,9 @@ one wants that.")
|
||||||
"Where to cache `load-path', `Info-directory-list', `doom-disabled-packages'
|
"Where to cache `load-path', `Info-directory-list', `doom-disabled-packages'
|
||||||
and `auto-mode-alist'.")
|
and `auto-mode-alist'.")
|
||||||
|
|
||||||
|
(defvar doom-reload-hook nil
|
||||||
|
"A list of hooks to run when `doom//reload-load-path' is called.")
|
||||||
|
|
||||||
(defvar doom--current-module nil)
|
(defvar doom--current-module nil)
|
||||||
(defvar doom--refreshed-p nil)
|
(defvar doom--refreshed-p nil)
|
||||||
(defvar doom--stage 'init)
|
(defvar doom--stage 'init)
|
||||||
|
@ -181,8 +181,18 @@ If RETURN-P, return the message as a string instead of displaying it."
|
||||||
(or doom-init-time
|
(or doom-init-time
|
||||||
(setq doom-init-time (float-time (time-subtract (current-time) before-init-time))))))
|
(setq doom-init-time (float-time (time-subtract (current-time) before-init-time))))))
|
||||||
|
|
||||||
(add-hook 'emacs-startup-hook #'doom|display-benchmark)
|
(defun doom|post-init ()
|
||||||
(add-hook 'doom-reload-hook #'doom|display-benchmark)
|
"Run `doom-post-init-hook'. That's all."
|
||||||
|
(run-hooks 'doom-post-init-hook))
|
||||||
|
|
||||||
|
(defun doom|run-all-startup-hooks ()
|
||||||
|
"Run all startup Emacs hooks. Meant to follow running Emacs in a vanilla
|
||||||
|
session, with a different init.el, like so:
|
||||||
|
|
||||||
|
emacs -Q -l init.el -f doom|run-all-startup-hooks"
|
||||||
|
(run-hooks 'after-init-hook 'delayed-warnings-hook
|
||||||
|
'emacs-startup-hook 'term-setup-hook
|
||||||
|
'window-setup-hook))
|
||||||
|
|
||||||
|
|
||||||
;;
|
;;
|
||||||
|
@ -232,34 +242,41 @@ FORCE-P is non-nil, do it anyway.
|
||||||
(if (package-installed-p package)
|
(if (package-installed-p package)
|
||||||
(message "✓ Installed %s" package)
|
(message "✓ Installed %s" package)
|
||||||
(error "✕ Couldn't install %s" package)))
|
(error "✕ Couldn't install %s" package)))
|
||||||
(message "Installing core packages...done"))))
|
(message "Installing core packages...done")))
|
||||||
|
(unless noninteractive
|
||||||
|
(add-hook 'doom-pre-init-hook #'doom|refresh-cache)))
|
||||||
;; autoloads file
|
;; autoloads file
|
||||||
(condition-case-unless-debug e
|
(doom-initialize-autoloads))
|
||||||
(unless
|
|
||||||
(let (byte-compile-warnings)
|
|
||||||
(load (substring doom-autoload-file 0 -3) 'noerror 'nomessage))
|
|
||||||
(error "No autoloads file! Run make autoloads"))
|
|
||||||
(error
|
|
||||||
(funcall (if noninteractive #'warn #'error)
|
|
||||||
"Autoload file error: %s -> %s" (car e) (error-message-string e))))
|
|
||||||
(add-to-list 'load-path doom-core-dir))
|
|
||||||
;; initialize Doom core
|
;; initialize Doom core
|
||||||
(require 'core-os)
|
|
||||||
(unless noninteractive
|
(unless noninteractive
|
||||||
(unless doom-init-p
|
|
||||||
;; Cache important packages.el state
|
|
||||||
(doom|refresh-cache))
|
|
||||||
(require 'core-ui)
|
(require 'core-ui)
|
||||||
(require 'core-editor)
|
(require 'core-editor)
|
||||||
(require 'core-projects)
|
(require 'core-projects)
|
||||||
(require 'core-keybinds))
|
(require 'core-keybinds))
|
||||||
|
;; bootstrap Doom
|
||||||
|
(unless doom-init-p
|
||||||
|
(unless noninteractive
|
||||||
|
(add-hook! 'doom-reload-hook
|
||||||
|
#'(doom|refresh-cache doom|display-benchmark))
|
||||||
|
(add-hook! 'emacs-startup-hook
|
||||||
|
#'(doom|post-init doom|display-benchmark)))
|
||||||
|
(run-hooks 'doom-pre-init-hook)
|
||||||
|
(when doom-private-dir
|
||||||
|
(load (concat doom-private-dir "init") t t)))
|
||||||
(setq doom-init-p t))
|
(setq doom-init-p t))
|
||||||
|
|
||||||
(defun doom-initialize-autoloads ()
|
(defun doom-initialize-autoloads ()
|
||||||
"Ensures that `doom-autoload-file' exists and is loaded. Otherwise run
|
"Tries to load `doom-autoload-file', otherwise throws an error (unless in a
|
||||||
`doom//reload-autoloads' to generate it. Used from Doom's Makefile."
|
noninteractive session)."
|
||||||
(unless (file-exists-p doom-autoload-file)
|
(unless
|
||||||
(quiet! (doom//reload-autoloads))))
|
(condition-case-unless-debug e
|
||||||
|
(load (substring doom-autoload-file 0 -3) 'noerror 'nomessage)
|
||||||
|
(error
|
||||||
|
(funcall (if noninteractive #'warn #'error)
|
||||||
|
"Autoload error: %s -> %s"
|
||||||
|
(car e) (error-message-string e))))
|
||||||
|
(unless noninteractive
|
||||||
|
(error "No autoloads file! Run make autoloads"))))
|
||||||
|
|
||||||
(defun doom-initialize-packages (&optional force-p)
|
(defun doom-initialize-packages (&optional force-p)
|
||||||
"Ensures that `doom-packages', `packages-alist' and `quelpa-cache' are
|
"Ensures that `doom-packages', `packages-alist' and `quelpa-cache' are
|
||||||
|
@ -448,11 +465,13 @@ MODULES is an malformed plist of modules to load."
|
||||||
`(let (file-name-handler-alist)
|
`(let (file-name-handler-alist)
|
||||||
(setq doom-modules ',doom-modules)
|
(setq doom-modules ',doom-modules)
|
||||||
,@(nreverse init-forms)
|
,@(nreverse init-forms)
|
||||||
|
(run-hooks 'doom-init-hook)
|
||||||
(unless noninteractive
|
(unless noninteractive
|
||||||
(let ((doom--stage 'config))
|
(let ((doom--stage 'config))
|
||||||
,@(nreverse config-forms)
|
,@(nreverse config-forms)
|
||||||
(when doom-private-dir
|
(when doom-private-dir
|
||||||
(load ,(concat doom-private-dir "config") t t)))))))
|
(load ,(concat doom-private-dir "config")
|
||||||
|
t (not doom-debug-mode))))))))
|
||||||
|
|
||||||
(defmacro def-package! (name &rest plist)
|
(defmacro def-package! (name &rest plist)
|
||||||
"A thin wrapper around `use-package'."
|
"A thin wrapper around `use-package'."
|
||||||
|
|
23
core/core.el
23
core/core.el
|
@ -107,8 +107,18 @@ XDG directory conventions if ~/.config/doom exists.")
|
||||||
|
|
||||||
;; Custom init hooks; clearer than `after-init-hook', `emacs-startup-hook', and
|
;; Custom init hooks; clearer than `after-init-hook', `emacs-startup-hook', and
|
||||||
;; `window-setup-hook'.
|
;; `window-setup-hook'.
|
||||||
|
(defvar doom-pre-init-hook nil
|
||||||
|
"Hooks run after Doom is first initialized; after Doom's core files are
|
||||||
|
loaded, but before your private init.el file or anything else is loaded.")
|
||||||
|
|
||||||
(defvar doom-init-hook nil
|
(defvar doom-init-hook nil
|
||||||
"A list of hooks run when DOOM is initialized.")
|
"Hooks run after all init.el files are loaded, including your private and all
|
||||||
|
module init.el files, but before their config.el files are loaded.")
|
||||||
|
|
||||||
|
(defvar doom-post-init-hook nil
|
||||||
|
"A list of hooks run when Doom is fully initialized. Fires at the end of
|
||||||
|
`emacs-startup-hook', as late as possible. Guaranteed to run after everything
|
||||||
|
else (except for `window-setup-hook').")
|
||||||
|
|
||||||
|
|
||||||
;;
|
;;
|
||||||
|
@ -156,7 +166,7 @@ with functions that require it (like modeline segments)."
|
||||||
|
|
||||||
|
|
||||||
;;
|
;;
|
||||||
;; Bootstrap
|
;; Optimize startup
|
||||||
;;
|
;;
|
||||||
|
|
||||||
(defvar doom--file-name-handler-alist file-name-handler-alist)
|
(defvar doom--file-name-handler-alist file-name-handler-alist)
|
||||||
|
@ -173,11 +183,12 @@ with functions that require it (like modeline segments)."
|
||||||
"Resets garbage collection settings to reasonable defaults (if you don't do
|
"Resets garbage collection settings to reasonable defaults (if you don't do
|
||||||
this, you'll get stuttering and random freezes) and resets
|
this, you'll get stuttering and random freezes) and resets
|
||||||
`file-name-handler-alist'."
|
`file-name-handler-alist'."
|
||||||
(unless noninteractive
|
|
||||||
(run-hooks 'doom-init-hook))
|
|
||||||
(setq file-name-handler-alist doom--file-name-handler-alist
|
(setq file-name-handler-alist doom--file-name-handler-alist
|
||||||
gc-cons-threshold 16777216
|
gc-cons-threshold 8388608
|
||||||
gc-cons-percentage 0.15))
|
gc-cons-percentage 0.1))
|
||||||
|
|
||||||
|
(add-hook 'emacs-startup-hook #'doom|finalize)
|
||||||
|
(add-hook 'doom-reload-hook #'doom|finalize)
|
||||||
|
|
||||||
|
|
||||||
;;
|
;;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue