💥 Rethink core hook order & naming

- doom-post-init-hook was renamed doom-init-modules-hook
- doom-init-hook was renamed doom-before-init-modules-hook
- doom-init-modules-hook now runs before the user's config.el is run
- Moved doom-init-ui-hook to run later (on window-setup-hook rather than
  emacs-startup-hook).

Yield a modest improvement in startup times.
This commit is contained in:
Henrik Lissner 2019-03-04 20:35:47 -05:00
parent 843b29a4b5
commit 05303c0fdb
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395
9 changed files with 55 additions and 46 deletions

View file

@ -51,19 +51,19 @@ non-nil."
(doom--current-flags (plist-get plist :flags))) (doom--current-flags (plist-get plist :flags)))
(load! "init" (plist-get plist :path) t))) (load! "init" (plist-get plist :path) t)))
doom-modules) doom-modules)
(run-hook-wrapped 'doom-init-hook #'doom-try-run-hook) (run-hook-wrapped 'doom-before-init-modules-hook #'doom-try-run-hook)
(unless noninteractive (unless noninteractive
(maphash (lambda (key plist) (maphash (lambda (key plist)
(let ((doom--current-module key) (let ((doom--current-module key)
(doom--current-flags (plist-get plist :flags))) (doom--current-flags (plist-get plist :flags)))
(load! "config" (plist-get plist :path) t))) (load! "config" (plist-get plist :path) t)))
doom-modules) doom-modules)
(run-hook-wrapped 'doom-init-modules-hook #'doom-try-run-hook)
(load! "config" doom-private-dir t) (load! "config" doom-private-dir t)
(unless custom-file (unless custom-file
(setq custom-file (concat doom-local-dir "custom.el"))) (setq custom-file (concat doom-local-dir "custom.el")))
(when (stringp custom-file) (when (stringp custom-file)
(load custom-file t t t)) (load custom-file t t t)))))
(run-hook-wrapped 'doom-post-init-hook #'doom-try-run-hook))))
;; ;;
@ -294,12 +294,13 @@ The overall load order of Doom is as follows:
~/.emacs.d/core/core.el ~/.emacs.d/core/core.el
$DOOMDIR/init.el $DOOMDIR/init.el
{$DOOMDIR,~/.emacs.d}/modules/*/*/init.el {$DOOMDIR,~/.emacs.d}/modules/*/*/init.el
`doom-init-hook' `doom-before-init-modules-hook'
{$DOOMDIR,~/.emacs.d}/modules/*/*/config.el {$DOOMDIR,~/.emacs.d}/modules/*/*/config.el
`doom-init-modules-hook'
$DOOMDIR/config.el $DOOMDIR/config.el
`after-init-hook' `after-init-hook'
`emacs-startup-hook' `emacs-startup-hook'
`doom-post-init-hook' (at end of `emacs-startup-hook') `window-setup-hook'
Module load order is determined by your `doom!' block. See `doom-modules-dirs' Module load order is determined by your `doom!' block. See `doom-modules-dirs'
for a list of all recognized module trees. Order defines precedence (from most for a list of all recognized module trees. Order defines precedence (from most

View file

@ -32,7 +32,7 @@
;; Fix the clipboard in terminal or daemon Emacs (non-GUI) ;; Fix the clipboard in terminal or daemon Emacs (non-GUI)
(when (or (daemonp) (not (display-graphic-p))) (when (or (daemonp) (not (display-graphic-p)))
(add-hook 'doom-post-init-hook #'osx-clipboard-mode)) (add-hook 'doom-init-modules-hook #'osx-clipboard-mode))
(when (or (daemonp) (display-graphic-p)) (when (or (daemonp) (display-graphic-p))
;; Syncs ns frame parameters with theme (and fixes mismatching text ;; Syncs ns frame parameters with theme (and fixes mismatching text

View file

@ -492,14 +492,13 @@ frame's window-system, the theme will be reloaded.")
(condition-case e (condition-case e
(progn (progn
(cond (doom-font (cond (doom-font
;; We avoid `set-frame-font' for performance reasons.
;; Manipulating `default-frame-alist' is effective enough.
(add-to-list (add-to-list
'default-frame-alist 'default-frame-alist
(cons 'font (cons 'font
(cond ((stringp doom-font) doom-font) (cond ((stringp doom-font) doom-font)
((fontp doom-font) (font-xlfd-name doom-font)) ((fontp doom-font) (font-xlfd-name doom-font))
((signal 'wrong-type-argument (list '(fontp stringp) doom-font))))))) ((signal 'wrong-type-argument (list '(fontp stringp) doom-font))))))
(set-frame-font doom-font t t))
((display-graphic-p) ((display-graphic-p)
(setq doom-font (face-attribute 'default :font)))) (setq doom-font (face-attribute 'default :font))))
(when doom-serif-font (when doom-serif-font
@ -544,28 +543,34 @@ frame's window-system, the theme will be reloaded.")
(setq doom-last-window-system nil) (setq doom-last-window-system nil)
(doom|reload-theme-in-frame (selected-frame)))) (doom|reload-theme-in-frame (selected-frame))))
;; fonts
(add-hook 'doom-init-ui-hook #'doom|init-fonts)
;; themes
(unless (daemonp)
(add-hook 'doom-init-ui-hook #'doom|init-theme))
(add-hook 'after-make-frame-functions #'doom|reload-theme-in-frame-maybe)
(add-hook 'after-delete-frame-functions #'doom|reload-theme-maybe)
;; ;;
;;; Bootstrap ;;; Bootstrap
(defun doom|init-ui () (defun doom|init-ui ()
"Initialize Doom's user interface by applying all its advice and hooks." "Initialize Doom's user interface by applying all its advice and hooks."
(run-hook-wrapped 'doom-init-ui-hook #'doom-try-run-hook)
(add-to-list 'kill-buffer-query-functions #'doom|protect-fallback-buffer nil 'eq) (add-to-list 'kill-buffer-query-functions #'doom|protect-fallback-buffer nil 'eq)
(add-to-list 'kill-buffer-query-functions #'doom|protect-visible-buffer nil 'eq) (add-to-list 'kill-buffer-query-functions #'doom|protect-visible-buffer nil 'eq)
(add-hook 'after-change-major-mode-hook #'doom|highlight-non-default-indentation) (add-hook 'after-change-major-mode-hook #'doom|highlight-non-default-indentation)
(run-hook-wrapped 'doom-init-ui-hook #'doom-try-run-hook))
(add-hook 'after-make-frame-functions #'doom|reload-theme-in-frame-maybe)
(add-hook 'after-delete-frame-functions #'doom|reload-theme-maybe)
;; Set up `doom-enter-buffer-hook', `doom-exit-buffer-hook',
;; `doom-enter-window-hook' and `doom-exit-window-hook'
(doom-init-switch-hooks))
;; Set fonts
(add-hook 'doom-init-ui-hook #'doom|init-fonts)
;; Apply themes
(unless (daemonp)
(add-hook 'doom-init-ui-hook #'doom|init-theme))
;; Run `doom-load-theme-hook'
(advice-add #'load-theme :after #'doom*load-theme-hooks) (advice-add #'load-theme :after #'doom*load-theme-hooks)
(add-hook 'emacs-startup-hook #'doom|init-switch-hooks) ;; Run `doom-init-ui-hook'
(add-hook 'emacs-startup-hook #'doom|init-ui) (add-hook 'window-setup-hook #'doom|init-ui)
;; ;;

View file

@ -113,14 +113,13 @@ Doom was setup, which can cause problems.")
;; ;;
;; Custom hooks ;; Custom hooks
(defvar doom-init-hook nil (defvar doom-before-init-modules-hook nil
"Hooks run after all init.el files are loaded, including your private and all "A list of hooks to run before Doom's modules' config.el files are loaded, but
module init.el files, but before their config.el files are loaded.") after their init.el files are loaded.")
(defvar doom-post-init-hook nil (defvar doom-init-modules-hook nil
"A list of hooks run when Doom is fully initialized. Fires near the end of "A list of hooks to run after Doom's modules' config.el files have loaded.
`emacs-startup-hook', as late as possible. Guaranteed to run after everything This includes the user's private module in `doom-private-dir'.")
else (except for `window-setup-hook').")
(defvar doom-reload-hook nil (defvar doom-reload-hook nil
"A list of hooks to run when `doom/reload' is called.") "A list of hooks to run when `doom/reload' is called.")
@ -303,7 +302,7 @@ If this is a daemon session, load them all immediately instead."
nil #'doom-load-packages-incrementally nil #'doom-load-packages-incrementally
(cdr doom-incremental-packages) t)))) (cdr doom-incremental-packages) t))))
(add-hook 'emacs-startup-hook #'doom|load-packages-incrementally) (add-hook 'window-setup-hook #'doom|load-packages-incrementally)
;; ;;
@ -399,12 +398,14 @@ The overall load order of Doom is as follows:
~/.emacs.d/core/core.el ~/.emacs.d/core/core.el
~/.doom.d/init.el ~/.doom.d/init.el
Module init.el files Module init.el files
`doom-init-hook' `doom-before-init-modules-hook'
Module config.el files Module config.el files
~/.doom.d/config.el ~/.doom.d/config.el
`doom-post-init-hook' `doom-init-modules-hook'
`after-init-hook' `after-init-hook'
`emacs-startup-hook' `emacs-startup-hook'
`doom-init-ui-hook'
`window-setup-hook'
Module load order is determined by your `doom!' block. See `doom-modules-dirs' Module load order is determined by your `doom!' block. See `doom-modules-dirs'
for a list of all recognized module trees. Order defines precedence (from most for a list of all recognized module trees. Order defines precedence (from most
@ -438,7 +439,7 @@ to least)."
(require 'core-os) (require 'core-os)
(when (or force-load-core-p (not noninteractive)) (when (or force-load-core-p (not noninteractive))
(add-hook 'emacs-startup-hook #'doom|display-benchmark) (add-hook 'window-setup-hook #'doom|display-benchmark)
(require 'core-ui) (require 'core-ui)
(require 'core-editor) (require 'core-editor)

View file

@ -14,7 +14,9 @@ line with a linewise comment.")
(defvar evil-want-Y-yank-to-eol t) (defvar evil-want-Y-yank-to-eol t)
(def-package! evil (def-package! evil
:init :hook (doom-init-modules . evil-mode)
:demand t
:preface
(setq evil-want-visual-char-semi-exclusive t (setq evil-want-visual-char-semi-exclusive t
evil-magic t evil-magic t
evil-echo-state t evil-echo-state t
@ -37,18 +39,16 @@ line with a linewise comment.")
evil-want-keybinding (not (featurep! +everywhere))) evil-want-keybinding (not (featurep! +everywhere)))
:config :config
(load! "+commands")
(add-hook 'doom-post-init-hook #'evil-mode)
(evil-select-search-module 'evil-search-module 'evil-search) (evil-select-search-module 'evil-search-module 'evil-search)
(put 'evil-define-key* 'lisp-indent-function 'defun) (put 'evil-define-key* 'lisp-indent-function 'defun)
;; Done in a hook to ensure the popup rules load as late as possible
(defun +evil|init-popup-rules () (defun +evil|init-popup-rules ()
(set-popup-rules! (set-popup-rules!
'(("^\\*evil-registers" :size 0.3) '(("^\\*evil-registers" :size 0.3)
("^\\*Command Line" :size 8)))) ("^\\*Command Line" :size 8))))
(add-hook 'doom-post-init-hook #'+evil|init-popup-rules) (add-hook 'doom-init-modules-hook #'+evil|init-popup-rules)
;; Change the cursor color in emacs mode ;; Change the cursor color in emacs mode
(defvar +evil--default-cursor-color (defvar +evil--default-cursor-color
@ -157,7 +157,10 @@ line with a linewise comment.")
;; `evil-collection' ;; `evil-collection'
(when (featurep! +everywhere) (when (featurep! +everywhere)
(load! "+everywhere"))) (load! "+everywhere"))
;; Custom evil ex commands
(load! "+commands"))
;; ;;

View file

@ -77,7 +77,7 @@ Uses `+workspaces-main' to determine the name of the main workspace."
(display-buffer-in-side-window (display-buffer-in-side-window
warnings '((window-height . shrink-window-if-larger-than-buffer))))))))))) warnings '((window-height . shrink-window-if-larger-than-buffer)))))))))))
(add-hook 'doom-post-init-hook #'+workspaces|init t) (add-hook 'doom-init-modules-hook #'+workspaces|init t)
:config :config
(setq persp-autokill-buffer-on-remove 'kill-weak (setq persp-autokill-buffer-on-remove 'kill-weak
persp-nil-hidden t persp-nil-hidden t

View file

@ -7,7 +7,7 @@
"If non-nil, obfuscate files and only show what projects you're working on.") "If non-nil, obfuscate files and only show what projects you're working on.")
;;;###autoload ;;;###autoload
(add-hook 'doom-post-init-hook #'+wakatime|delayed-autostart) (add-hook 'doom-init-modules-hook #'+wakatime|delayed-autostart)
;;;###autoload ;;;###autoload
(defun +wakatime/setup () (defun +wakatime/setup ()

View file

@ -3,13 +3,13 @@
;; TODO Add themes (default, minimal, spacemacs, etc) ;; TODO Add themes (default, minimal, spacemacs, etc)
(def-package! doom-modeline (def-package! doom-modeline
:hook (doom-post-init . doom-modeline-mode) :hook (after-init . doom-modeline-mode)
:preface :init
;; prevent flash of unstyled modeline at startup ;; prevent flash of unstyled modeline at startup
(setq-default mode-line-format nil) (setq-default mode-line-format nil)
;; We display project info in the modeline ourselves ;; We display project info in the modeline ourselves
(setq projectile-dynamic-mode-line nil) (setq projectile-dynamic-mode-line nil)
:init ;; Set these early so they don't trigger variable watchers
(setq doom-modeline-bar-width 3 (setq doom-modeline-bar-width 3
doom-modeline-github nil doom-modeline-github nil
doom-modeline-mu4e nil doom-modeline-mu4e nil
@ -18,14 +18,13 @@
doom-modeline-minor-modes nil doom-modeline-minor-modes nil
doom-modeline-major-mode-icon nil doom-modeline-major-mode-icon nil
doom-modeline-buffer-file-name-style 'relative-from-project) doom-modeline-buffer-file-name-style 'relative-from-project)
:config
(add-hook 'doom-modeline-mode-hook #'size-indication-mode) ; filesize in modeline (add-hook 'doom-modeline-mode-hook #'size-indication-mode) ; filesize in modeline
(add-hook 'doom-modeline-mode-hook #'column-number-mode) ; cursor column in modeline (add-hook 'doom-modeline-mode-hook #'column-number-mode) ; cursor column in modeline
:config
(add-hook 'doom-big-font-mode-hook #'+modeline|resize-for-big-font) (add-hook 'doom-big-font-mode-hook #'+modeline|resize-for-big-font)
(add-hook 'doom-load-theme-hook #'doom-modeline-refresh-bars) (add-hook 'doom-load-theme-hook #'doom-modeline-refresh-bars)
(add-hook '+doom-dashboard-mode-hook #'doom-modeline-set-project-modeline) (add-hook '+doom-dashboard-mode-hook #'doom-modeline-set-project-modeline)
;; Show indentation style in modeline. I'm not using ;; Show indentation style in modeline. I'm not using

View file

@ -1,7 +1,7 @@
;;; ui/unicode/autoload.el -*- lexical-binding: t; -*- ;;; ui/unicode/autoload.el -*- lexical-binding: t; -*-
;;;###autoload ;;;###autoload
(add-hook 'doom-post-init-hook #'+unicode|init-fonts) (add-hook 'doom-init-ui-hook #'+unicode|init-fonts)
;;;###autoload ;;;###autoload
(defun +unicode|init-fonts () (defun +unicode|init-fonts ()