aboutsummaryrefslogtreecommitdiff
path: root/modules/homeModules/emacs/early-init.el
diff options
context:
space:
mode:
authorspl3g <notspl3g@duck.com>2026-03-18 18:01:41 +0300
committerspl3g <notspl3g@duck.com>2026-03-18 18:01:59 +0300
commit03648b3d9f177227df40129bed22558f6924b91c (patch)
tree8a22eda142beeafd9002a8d5901ba9428a77ad52 /modules/homeModules/emacs/early-init.el
parentdc19a2b583b3ab50d8e36ff0a90ca633495f675f (diff)
so.. v2 i guess
Diffstat (limited to 'modules/homeModules/emacs/early-init.el')
-rw-r--r--modules/homeModules/emacs/early-init.el171
1 files changed, 171 insertions, 0 deletions
diff --git a/modules/homeModules/emacs/early-init.el b/modules/homeModules/emacs/early-init.el
new file mode 100644
index 0000000..c6334f5
--- /dev/null
+++ b/modules/homeModules/emacs/early-init.el
@@ -0,0 +1,171 @@
+;;;; Optimisations from https://github.com/jamescherti/minimal-emacs.d
+
+;;; Garbage collection
+(setq gc-cons-threshold most-positive-fixnum)
+
+(add-hook 'emacs-startup-hook
+ (lambda ()
+ (setq gc-cons-threshold (* 16 1024 1024))))
+
+;;; Performance
+
+;; Prefer loading newer compiled files
+(setq load-prefer-newer t)
+
+;; Increase how much is read from processes in a single chunk (default is 4kb).
+(setq read-process-output-max (* 1024 1024)) ; 512kb
+
+;; Disable warnings from the legacy advice API. They aren't useful.
+(setq ad-redefinition-action 'accept)
+
+(setq warning-suppress-types '((lexical-binding)))
+
+;; Don't ping things that look like domain names.
+(setq ffap-machine-p-known 'reject)
+
+;; By default, Emacs "updates" its ui more often than it needs to
+(setq idle-update-delay 1.0)
+
+;; Font compacting can be very resource-intensive, especially when rendering
+;; icon fonts on Windows. This will increase memory usage.
+(setq inhibit-compacting-font-caches t)
+
+(unless (daemonp)
+ (unless noninteractive
+ (progn
+ ;; Disable mode-line-format during init
+ (defun minimal-emacs--reset-inhibited-vars-h ()
+ (setq-default inhibit-redisplay nil
+ ;; Inhibiting `message' only prevents redraws and
+ inhibit-message nil)
+ (redraw-frame))
+
+ (defvar minimal-emacs--default-mode-line-format mode-line-format
+ "Default value of `mode-line-format'.")
+ (setq-default mode-line-format nil)
+
+ (defun minimal-emacs--startup-load-user-init-file (fn &rest args)
+ "Advice for startup--load-user-init-file to reset mode-line-format."
+ (let (init)
+ (unwind-protect
+ (progn
+ (apply fn args) ; Start up as normal
+ (setq init t))
+ (unless init
+ ;; If we don't undo inhibit-{message, redisplay} and there's an
+ ;; error, we'll see nothing but a blank Emacs frame.
+ (minimal-emacs--reset-inhibited-vars-h))
+ (unless (default-toplevel-value 'mode-line-format)
+ (setq-default mode-line-format
+ minimal-emacs--default-mode-line-format)))))
+
+ (advice-add 'startup--load-user-init-file :around
+ #'minimal-emacs--startup-load-user-init-file))
+
+ ;; Without this, Emacs will try to resize itself to a specific column size
+ (setq frame-inhibit-implied-resize t)
+
+ ;; A second, case-insensitive pass over `auto-mode-alist' is time wasted.
+ ;; No second pass of case-insensitive search over auto-mode-alist.
+ (setq auto-mode-case-fold nil)
+
+ ;; Reduce *Message* noise at startup. An empty scratch buffer (or the
+ ;; dashboard) is more than enough, and faster to display.
+ (setq inhibit-startup-screen t
+ inhibit-startup-echo-area-message user-login-name)
+ (setq initial-buffer-choice nil
+ inhibit-startup-buffer-menu t
+ inhibit-x-resources t)
+
+ ;; Disable bidirectional text scanning for a modest performance boost.
+ (setq-default bidi-display-reordering 'left-to-right
+ bidi-paragraph-direction 'left-to-right)
+
+ ;; Give up some bidirectional functionality for slightly faster re-display.
+ (setq bidi-inhibit-bpa t)
+
+ ;; Remove "For information about GNU Emacs..." message at startup
+ (advice-add #'display-startup-echo-area-message :override #'ignore)
+
+ ;; Suppress the vanilla startup screen completely. We've disabled it with
+ ;; `inhibit-startup-screen', but it would still initialize anyway.
+ (advice-add #'display-startup-screen :override #'ignore)
+
+ ;; Shave seconds off startup time by starting the scratch buffer in
+ ;; `fundamental-mode'
+ (setq initial-major-mode 'fundamental-mode
+ initial-scratch-message nil)))
+
+;;; Native compilation and Byte compilation
+
+(if (and (featurep 'native-compile)
+ (fboundp 'native-comp-available-p)
+ (native-comp-available-p))
+ ;; Activate `native-compile'
+ (setq native-comp-jit-compilation t
+ package-native-compile t)
+ ;; Deactivate the `native-compile' feature if it is not available
+ (setq features (delq 'native-compile features)))
+
+;; Suppress compiler warnings and don't inundate users with their popups.
+(setq native-comp-async-report-warnings-errors 'silent)
+
+;;; UI elements
+
+;; Disable startup screens and messages
+(setq inhibit-splash-screen t)
+
+
+(push '(menu-bar-lines . 0) default-frame-alist)
+(unless (memq window-system '(mac ns))
+ (setq menu-bar-mode nil))
+
+(unless (daemonp)
+ (unless noninteractive
+ (when (fboundp 'tool-bar-setup)
+ ;; Temporarily override the tool-bar-setup function to prevent it from
+ ;; running during the initial stages of startup
+ (advice-add #'tool-bar-setup :override #'ignore)
+ (define-advice startup--load-user-init-file
+ (:before (&rest _) minimal-emacs-setup-toolbar)
+ (advice-remove #'tool-bar-setup #'ignore)
+ (tool-bar-setup)))))
+
+(push '(tool-bar-lines . 0) default-frame-alist)
+(setq tool-bar-mode nil)
+
+(push '(vertical-scroll-bars) default-frame-alist)
+(push '(horizontal-scroll-bars) default-frame-alist)
+(setq scroll-bar-mode nil)
+(when (fboundp 'horizontal-scroll-bar-mode)
+ (horizontal-scroll-bar-mode -1))
+
+(when (bound-and-true-p tooltip-mode)
+ (tooltip-mode -1))
+
+;; Disable GUIs because they are inconsistent across systems, desktop
+;; environments, and themes, and they don't match the look of Emacs.
+(setq use-file-dialog nil)
+(setq use-dialog-box nil)
+
+;; Allow for shorter responses: "y" for yes and "n" for no.
+(if (boundp 'use-short-answers)
+ (setq use-short-answers t)
+ (advice-add #'yes-or-no-p :override #'y-or-n-p))
+(defalias #'view-hello-file #'ignore) ; Never show the hello file
+
+;;; And that's mine
+
+(setq package-enable-at-startup nil)
+(setq-default pgtk-wait-for-event-timeout 0)
+
+(let ((mono-spaced-font "FiraCode Nerd Font")
+ (proportionately-spaced-font "Inconsonata"))
+ (set-face-attribute 'default nil :family mono-spaced-font :height 110 :weight 'medium)
+ (set-face-attribute 'fixed-pitch nil :family mono-spaced-font :height 1.0)
+ (set-face-attribute 'variable-pitch nil :family proportionately-spaced-font :height 1.0)
+ (set-face-attribute 'italic nil :underline nil))
+
+
+(provide 'early-init)
+;;; early-init.el ends here