doomemacs/early-init.el
Henrik Lissner b656e68bc3
Move startup optimization to early-init
Also load early-init from init if early-init-file isn't bound. This
improves startup a modest 3-5% for Emacs 27 users.
2018-06-16 11:38:19 +02:00

48 lines
2.1 KiB
EmacsLisp

;;; early-init.el -*- lexical-binding: t; -*-
;; Emacs HEAD (27+) introduces early-init.el, which is run before init.el,
;; before package and UI initialization happens. We can use this opportunity to
;; cull parts of the startup process early and optimize Emacs startup ASAP.
(unless noninteractive
(defvar doom--file-name-handler-alist
file-name-handler-alist)
(unless after-init-time
;; A big contributor to long startup times is the garbage collector, so we
;; up its memory threshold, temporarily and reset it later in
;; `doom|finalize'.
(setq gc-cons-threshold 402653184
gc-cons-percentage 1.0
;; consulted on every `require', `load' and various file reading
;; functions. You get a minor speed up by nooping this.
file-name-handler-alist nil))
(defun doom|finalize ()
"Resets garbage collection settings to reasonable defaults (if you don't do
this, you'll get stuttering and random freezes) and resets
`file-name-handler-alist'."
(setq file-name-handler-alist doom--file-name-handler-alist
gc-cons-threshold 16777216
gc-cons-percentage 0.15))
(add-hook 'emacs-startup-hook #'doom|finalize)
(add-hook 'doom-reload-hook #'doom|finalize))
;; Ensure Doom is always running out of this file's directory
(setq user-emacs-directory (file-name-directory load-file-name)
;; In noninteractive sessions, we hope that non-byte-compiled files will
;; take precedence over byte-compiled ones, however, if you're getting odd
;; recursive load errors, it may help to set this to nil.
load-prefer-newer noninteractive
;; Package initialize occurs automatically, before `user-init-file' is
;; loaded, but after `early-init-file'. Doom handles package
;; initialization, so we must prevent Emacs from doing it early!
package-enable-at-startup nil)
;; Prevent the glimpse of un-styled Emacs by setting these early.
(if (fboundp 'tool-bar-mode) (tool-bar-mode -1))
(if (fboundp 'menu-bar-mode) (menu-bar-mode -1))
(if (fboundp 'scroll-bar-mode) (scroll-bar-mode -1))
;; TODO Once Emacs 27 hits stable, perhaps replace init.el with early-init.el