nit: reformat early-init

This commit is contained in:
Henrik Lissner
2024-10-22 16:23:48 -04:00
parent 9ae7aa1122
commit c23b6fa5db

View File

@ -26,15 +26,23 @@
;; ;;
;;; Code: ;;; Code:
;; PERF: Garbage collection is a big contributor to startup times. This fends it (let (file-name-handler-alist)
;; off, but will be reset later by `gcmh-mode' (or in doom-cli.el, if in a ;; PERF: Garbage collection is a big contributor to startup times. This fends
;; noninteractive session). Not resetting it later causes stuttering/freezes. ;; it off, but will be reset later by `gcmh-mode'. Not resetting it later
(setq gc-cons-threshold most-positive-fixnum) ;; causes stuttering/freezes.
(if noninteractive
;; PERF: Deferring the GC in non-interactive sessions isn't as important,
;; but still yields a notable benefit. Still, avoid setting it to high
;; here, as runaway memory usage is a real risk in longer sessions.
(setq gc-cons-threshold 134217728 ; 128mb
;; Backported from 29 (see emacs-mirror/emacs@73a384a98698)
gc-cons-percentage 1.0)
(setq gc-cons-threshold most-positive-fixnum))
;; PERF: Don't use precious startup time checking mtime on elisp bytecode. ;; PERF: Don't use precious startup time checking mtime on elisp bytecode.
;; Ensuring correctness is 'doom sync's job, not the interactive session's. ;; Ensuring correctness is 'doom sync's job, not the interactive session's.
;; Still, stale byte-code will cause *heavy* losses in startup efficiency, but ;; Still, stale byte-code will cause *heavy* losses in startup efficiency,
;; performance is unimportant when Emacs is in an error state. ;; but performance is unimportant when Emacs is in an error state.
(setq load-prefer-newer noninteractive) (setq load-prefer-newer noninteractive)
;; UX: Respect DEBUG envvar as an alternative to --debug-init, and to make ;; UX: Respect DEBUG envvar as an alternative to --debug-init, and to make
@ -43,15 +51,6 @@
(setq init-file-debug t (setq init-file-debug t
debug-on-error t)) debug-on-error t))
;;
;;; Bootstrap
(or
;; PERF: `file-name-handler-alist' is consulted often. Unsetting it offers a
;; notable saving in startup time. This is just a stopgap though; this
;; optimization is continued more comprehensively in lisp/doom.el.
(let (file-name-handler-alist)
(let (;; FIX: Unset `command-line-args' in noninteractive sessions, to (let (;; FIX: Unset `command-line-args' in noninteractive sessions, to
;; ensure upstream switches aren't misinterpreted. ;; ensure upstream switches aren't misinterpreted.
(command-line-args (unless noninteractive command-line-args)) (command-line-args (unless noninteractive command-line-args))
@ -78,9 +77,9 @@
;; FIX: Discard the switch to prevent "invalid option" errors later. ;; FIX: Discard the switch to prevent "invalid option" errors later.
(push (cons "--profile" (lambda (_) (pop argv))) command-switch-alist) (push (cons "--profile" (lambda (_) (pop argv))) command-switch-alist)
;; Running 'doom sync' or 'doom profile sync' (re)generates a light ;; Running 'doom sync' or 'doom profile sync' (re)generates a light
;; profile loader in $XDG_DATA_HOME/doom/profiles.X.el (or ;; profile loader in $EMACSDIR/profiles/load.el (or $DOOMPROFILELOADFILE),
;; $DOOMPROFILELOADFILE), after reading `doom-profile-load-path'. This ;; after reading `doom-profile-load-path'. This loader requires
;; loader requires `$DOOMPROFILE' be set to function. ;; `$DOOMPROFILE' be set to function.
(setenv "DOOMPROFILE" profile) (setenv "DOOMPROFILE" profile)
(or (load (let ((windows? (memq system-type '(ms-dos windows-nt cygwin)))) (or (load (let ((windows? (memq system-type '(ms-dos windows-nt cygwin))))
(expand-file-name (expand-file-name
@ -97,20 +96,20 @@
;; PERF: When `load'ing or `require'ing files, each permutation of ;; PERF: When `load'ing or `require'ing files, each permutation of
;; `load-suffixes' and `load-file-rep-suffixes' (then `load-suffixes' + ;; `load-suffixes' and `load-file-rep-suffixes' (then `load-suffixes' +
;; `load-file-rep-suffixes') is used to locate the file. Each permutation ;; `load-file-rep-suffixes') is used to locate the file. Each permutation
;; amounts to at least one file op, which is normally very fast, but can ;; amounts to at least one file op, which is normally very fast, but can add
;; add up over the hundreds/thousands of files Emacs loads. ;; up over the hundreds/thousands of files Emacs loads.
;; ;;
;; To reduce that burden -- and since Doom doesn't load any dynamic modules ;; To reduce that burden -- and since Doom doesn't load any dynamic modules
;; this early -- I remove `.so' from `load-suffixes' and pass the ;; this early -- I remove `.so' from `load-suffixes' and pass the
;; `must-suffix' arg to `load'. See the docs of `load' for details. ;; `must-suffix' arg to `load'. See the docs of `load' for details.
(if (let ((load-suffixes '(".elc" ".el")) (if (let ((load-suffixes '(".elc" ".el"))
(doom-file (expand-file-name "lisp/doom" user-emacs-directory))) (doom (expand-file-name "lisp/doom" user-emacs-directory)))
;; I avoid `load's NOERROR argument because it suppresses other, ;; I avoid `load's NOERROR argument because it suppresses other,
;; legitimate errors (like permission or IO errors), which gets ;; legitimate errors (like permission or IO errors), which gets
;; incorrectly interpreted as "this is not a Doom config". ;; incorrectly interpreted as "this is not a Doom config".
(if (file-exists-p (concat doom-file ".el")) (if (file-exists-p (concat doom ".el"))
;; Load the heart of Doom Emacs. ;; Load the heart of Doom Emacs.
(load doom-file nil (not init-file-debug) nil 'must-suffix) (load doom nil (not init-file-debug) nil 'must-suffix)
;; Failing that, assume we're loading a non-Doom config... ;; Failing that, assume we're loading a non-Doom config...
;; HACK: `startup--load-user-init-file' resolves $EMACSDIR from a ;; HACK: `startup--load-user-init-file' resolves $EMACSDIR from a
;; lexical (and so, not-trivially-modifiable) ;; lexical (and so, not-trivially-modifiable)
@ -124,8 +123,8 @@
;; effective (benefits `expand-file-name'). BTW: Emacs resets ;; effective (benefits `expand-file-name'). BTW: Emacs resets
;; `user-init-file' and `early-init-file' after this file is loaded. ;; `user-init-file' and `early-init-file' after this file is loaded.
(setq user-init-file (expand-file-name "early-init" user-emacs-directory)) (setq user-init-file (expand-file-name "early-init" user-emacs-directory))
;; COMPAT: I make no assumptions about the config we're going to ;; COMPAT: I make no assumptions about the config we're going to load,
;; load, so undo this file's global side-effects. ;; so undo this file's global side-effects.
(setq load-prefer-newer t) (setq load-prefer-newer t)
;; PERF: But make an exception for `gc-cons-threshold', which I think ;; PERF: But make an exception for `gc-cons-threshold', which I think
;; all Emacs users and configs will benefit from. Still, setting it ;; all Emacs users and configs will benefit from. Still, setting it
@ -135,9 +134,9 @@
(setq gc-cons-threshold (* 16 1024 1024)) (setq gc-cons-threshold (* 16 1024 1024))
nil)) nil))
;; ...Otherwise, we're loading a Doom config, so continue as normal. ;; ...Otherwise, we're loading a Doom config, so continue as normal.
(doom-require (if noninteractive 'doom-cli 'doom-start)))) (doom-require (if noninteractive 'doom-cli 'doom-start))
;; If we're here, the user wants to load another config/profile (that may or
;; Then continue on to the config/profile we want to load. ;; may not be a Doom config).
(load user-init-file 'noerror (not init-file-debug) nil 'must-suffix)) (load user-init-file 'noerror (not init-file-debug) nil 'must-suffix)))
;;; early-init.el ends here ;;; early-init.el ends here