diff --git a/core/core-modules.el b/core/core-modules.el index 5a4bbeae1..0b9c2cf83 100644 --- a/core/core-modules.el +++ b/core/core-modules.el @@ -51,19 +51,19 @@ non-nil." (doom--current-flags (plist-get plist :flags))) (load! "init" (plist-get plist :path) t))) 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 (maphash (lambda (key plist) (let ((doom--current-module key) (doom--current-flags (plist-get plist :flags))) (load! "config" (plist-get plist :path) t))) doom-modules) + (run-hook-wrapped 'doom-init-modules-hook #'doom-try-run-hook) (load! "config" doom-private-dir t) (unless custom-file (setq custom-file (concat doom-local-dir "custom.el"))) (when (stringp custom-file) - (load custom-file t t t)) - (run-hook-wrapped 'doom-post-init-hook #'doom-try-run-hook)))) + (load custom-file t t t))))) ;; @@ -294,12 +294,13 @@ The overall load order of Doom is as follows: ~/.emacs.d/core/core.el $DOOMDIR/init.el {$DOOMDIR,~/.emacs.d}/modules/*/*/init.el - `doom-init-hook' + `doom-before-init-modules-hook' {$DOOMDIR,~/.emacs.d}/modules/*/*/config.el + `doom-init-modules-hook' $DOOMDIR/config.el `after-init-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' for a list of all recognized module trees. Order defines precedence (from most diff --git a/core/core-os.el b/core/core-os.el index 52825051c..ff024fd6f 100644 --- a/core/core-os.el +++ b/core/core-os.el @@ -32,7 +32,7 @@ ;; Fix the clipboard in terminal or daemon Emacs (non-GUI) (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)) ;; Syncs ns frame parameters with theme (and fixes mismatching text diff --git a/core/core-ui.el b/core/core-ui.el index 1c8924ab2..416f51cd0 100644 --- a/core/core-ui.el +++ b/core/core-ui.el @@ -492,14 +492,13 @@ frame's window-system, the theme will be reloaded.") (condition-case e (progn (cond (doom-font - ;; We avoid `set-frame-font' for performance reasons. - ;; Manipulating `default-frame-alist' is effective enough. (add-to-list 'default-frame-alist (cons 'font (cond ((stringp doom-font) 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) (setq doom-font (face-attribute 'default :font)))) (when doom-serif-font @@ -544,28 +543,34 @@ frame's window-system, the theme will be reloaded.") (setq doom-last-window-system nil) (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 (defun doom|init-ui () "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-visible-buffer nil 'eq) (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) -(add-hook 'emacs-startup-hook #'doom|init-switch-hooks) -(add-hook 'emacs-startup-hook #'doom|init-ui) +;; Run `doom-init-ui-hook' +(add-hook 'window-setup-hook #'doom|init-ui) ;; diff --git a/core/core.el b/core/core.el index 005c650ce..9ec60a803 100644 --- a/core/core.el +++ b/core/core.el @@ -113,14 +113,13 @@ Doom was setup, which can cause problems.") ;; ;; Custom hooks -(defvar doom-init-hook nil - "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-before-init-modules-hook nil + "A list of hooks to run before Doom's modules' config.el files are loaded, but +after their init.el files are loaded.") -(defvar doom-post-init-hook nil - "A list of hooks run when Doom is fully initialized. Fires near the end of -`emacs-startup-hook', as late as possible. Guaranteed to run after everything -else (except for `window-setup-hook').") +(defvar doom-init-modules-hook nil + "A list of hooks to run after Doom's modules' config.el files have loaded. +This includes the user's private module in `doom-private-dir'.") (defvar doom-reload-hook nil "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 (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 ~/.doom.d/init.el Module init.el files - `doom-init-hook' + `doom-before-init-modules-hook' Module config.el files ~/.doom.d/config.el - `doom-post-init-hook' + `doom-init-modules-hook' `after-init-hook' `emacs-startup-hook' + `doom-init-ui-hook' + `window-setup-hook' 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 @@ -438,7 +439,7 @@ to least)." (require 'core-os) (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-editor) diff --git a/modules/feature/evil/config.el b/modules/feature/evil/config.el index d8fea29b5..13fff59ba 100644 --- a/modules/feature/evil/config.el +++ b/modules/feature/evil/config.el @@ -14,7 +14,9 @@ line with a linewise comment.") (defvar evil-want-Y-yank-to-eol t) (def-package! evil - :init + :hook (doom-init-modules . evil-mode) + :demand t + :preface (setq evil-want-visual-char-semi-exclusive t evil-magic t evil-echo-state t @@ -37,18 +39,16 @@ line with a linewise comment.") evil-want-keybinding (not (featurep! +everywhere))) :config - (load! "+commands") - - (add-hook 'doom-post-init-hook #'evil-mode) (evil-select-search-module 'evil-search-module 'evil-search) (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 () (set-popup-rules! '(("^\\*evil-registers" :size 0.3) ("^\\*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 (defvar +evil--default-cursor-color @@ -157,7 +157,10 @@ line with a linewise comment.") ;; `evil-collection' (when (featurep! +everywhere) - (load! "+everywhere"))) + (load! "+everywhere")) + + ;; Custom evil ex commands + (load! "+commands")) ;; diff --git a/modules/feature/workspaces/config.el b/modules/feature/workspaces/config.el index 7bc243468..cc261bfa0 100644 --- a/modules/feature/workspaces/config.el +++ b/modules/feature/workspaces/config.el @@ -77,7 +77,7 @@ Uses `+workspaces-main' to determine the name of the main workspace." (display-buffer-in-side-window 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 (setq persp-autokill-buffer-on-remove 'kill-weak persp-nil-hidden t diff --git a/modules/tools/wakatime/autoload.el b/modules/tools/wakatime/autoload.el index 4e9a81da7..73aaae385 100644 --- a/modules/tools/wakatime/autoload.el +++ b/modules/tools/wakatime/autoload.el @@ -7,7 +7,7 @@ "If non-nil, obfuscate files and only show what projects you're working on.") ;;;###autoload -(add-hook 'doom-post-init-hook #'+wakatime|delayed-autostart) +(add-hook 'doom-init-modules-hook #'+wakatime|delayed-autostart) ;;;###autoload (defun +wakatime/setup () diff --git a/modules/ui/modeline/config.el b/modules/ui/modeline/config.el index 3d15cf08d..57ccbfff8 100644 --- a/modules/ui/modeline/config.el +++ b/modules/ui/modeline/config.el @@ -3,13 +3,13 @@ ;; TODO Add themes (default, minimal, spacemacs, etc) (def-package! doom-modeline - :hook (doom-post-init . doom-modeline-mode) - :preface + :hook (after-init . doom-modeline-mode) + :init ;; prevent flash of unstyled modeline at startup (setq-default mode-line-format nil) ;; We display project info in the modeline ourselves (setq projectile-dynamic-mode-line nil) - :init + ;; Set these early so they don't trigger variable watchers (setq doom-modeline-bar-width 3 doom-modeline-github nil doom-modeline-mu4e nil @@ -18,14 +18,13 @@ doom-modeline-minor-modes nil doom-modeline-major-mode-icon nil 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 #'column-number-mode) ; cursor column in modeline - :config (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-dashboard-mode-hook #'doom-modeline-set-project-modeline) ;; Show indentation style in modeline. I'm not using diff --git a/modules/ui/unicode/autoload.el b/modules/ui/unicode/autoload.el index 1af675c04..0be6bd27e 100644 --- a/modules/ui/unicode/autoload.el +++ b/modules/ui/unicode/autoload.el @@ -1,7 +1,7 @@ ;;; ui/unicode/autoload.el -*- lexical-binding: t; -*- ;;;###autoload -(add-hook 'doom-post-init-hook #'+unicode|init-fonts) +(add-hook 'doom-init-ui-hook #'+unicode|init-fonts) ;;;###autoload (defun +unicode|init-fonts ()