48 lines
2.0 KiB
EmacsLisp
48 lines
2.0 KiB
EmacsLisp
;;; early-init.el --- Pre-init: GC ceiling and frame chrome -*- lexical-binding: t; -*-
|
|
|
|
;;; Commentary:
|
|
;; Runs before package.el initialises and before the first frame is drawn, so
|
|
;; it is the only place two things can take effect:
|
|
;; 1. Raising the GC ceiling, so the whole startup (package load + init.el)
|
|
;; runs without garbage-collection pauses.
|
|
;; 2. Removing the menu/tool/scroll bars via `default-frame-alist', so they
|
|
;; are never drawn — toggling the minor modes in init.el instead draws
|
|
;; them and then removes them, a visible flicker on launch.
|
|
;;
|
|
;; Nothing here may depend on a package: none are loaded yet.
|
|
;;
|
|
;; IMPORTANT: the GC bump below is only half the pair. Restore a working value
|
|
;; once startup is done by adding this to init.el:
|
|
;;
|
|
;; (add-hook 'emacs-startup-hook
|
|
;; (lambda () (setq gc-cons-threshold (* 16 1024 1024))))
|
|
;;
|
|
;; Without it, GC never runs again and Emacs slowly eats memory.
|
|
|
|
;;; Code:
|
|
|
|
(startup-redirect-eln-cache (expand-file-name "var/eln-cache/" user-emacs-directory))
|
|
(setq package-user-dir (expand-file-name "var/elpa/" user-emacs-directory))
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;; Garbage Collection
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;; Hold GC off for the whole startup; init.el lowers it back on
|
|
;; `emacs-startup-hook' (see the Commentary above).
|
|
|
|
(setq gc-cons-threshold most-positive-fixnum)
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;; Frame Chrome (no flicker)
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;; Disable the bars before the first frame exists.
|
|
|
|
(push '(menu-bar-lines . 0) default-frame-alist)
|
|
(push '(tool-bar-lines . 0) default-frame-alist)
|
|
(push '(vertical-scroll-bars) default-frame-alist)
|
|
|
|
;; Don't resize the frame when the UI/fonts change during startup.
|
|
(setq frame-inhibit-implied-resize t)
|
|
|
|
;;; early-init.el ends here
|