💥 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:
parent
843b29a4b5
commit
05303c0fdb
9 changed files with 55 additions and 46 deletions
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
||||||
;;
|
;;
|
||||||
|
|
23
core/core.el
23
core/core.el
|
@ -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)
|
||||||
|
|
|
@ -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"))
|
||||||
|
|
||||||
|
|
||||||
;;
|
;;
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 ()
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 ()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue