feat: improve emacs gc and performance

This commit is contained in:
Swarsel 2024-11-04 01:07:33 +01:00
parent 8782cd7491
commit 202b723e1f
Signed by: swarsel
GPG key ID: 26A54C31F2A4FD84
3 changed files with 116 additions and 59 deletions

View file

@ -9829,24 +9829,27 @@ In the end, we need to restore those values to values that will work during norm
Also packed into the hook function is the line =(fset 'epg-wait-for-status 'ignore)=. This line is needed at the end of the configuration in order to allow for my Yubikey to be used to encrypt and decrypt =.gpg= files. Without it, Emacs will just hang forever and basically crash. Also packed into the hook function is the line =(fset 'epg-wait-for-status 'ignore)=. This line is needed at the end of the configuration in order to allow for my Yubikey to be used to encrypt and decrypt =.gpg= files. Without it, Emacs will just hang forever and basically crash.
#+begin_src emacs-lisp :tangle programs/emacs/early-init.el :mkdirp yes #+begin_src emacs-lisp :tangle programs/emacs/early-init.el :mkdirp yes
(defvar swarsel-file-name-handler-alist file-name-handler-alist) (defvar swarsel-file-name-handler-alist file-name-handler-alist)
(defvar swarsel-vc-handled-backends vc-handled-backends) (defvar swarsel-vc-handled-backends vc-handled-backends)
(setq gc-cons-threshold most-positive-fixnum (setq gc-cons-threshold most-positive-fixnum
gc-cons-percentage 0.6 gc-cons-percentage 0.6
file-name-handler-alist nil file-name-handler-alist nil
vc-handled-backends nil) vc-handled-backends nil)
(add-hook 'emacs-startup-hook (add-hook 'emacs-startup-hook
(lambda () (lambda ()
(progn (progn
;; (setq gc-cons-threshold (* 1000 1000 8) ;; (setq gc-cons-threshold (* 1000 1000 8)
(setq gc-cons-threshold #x40000000 ;; (setq gc-cons-threshold #x40000000
gc-cons-percentage 0.1 (setq gc-cons-threshold (* 32 1024 1024)
file-name-handler-alist swarsel-file-name-handler-alist gc-cons-percentage 0.1
vc-handled-backends swarsel-vc-handled-backends) jit-lock-defer-time 0.05
(fset 'epg-wait-for-status 'ignore) read-process-output-max (* 1024 1024)
))) file-name-handler-alist swarsel-file-name-handler-alist
vc-handled-backends swarsel-vc-handled-backends)
(fset 'epg-wait-for-status 'ignore)
)))
#+end_src #+end_src
*** Setup frames *** Setup frames
@ -10451,6 +10454,23 @@ This formats the org code block at =point= in accordance to the =nixpkgs-fmt= fo
(call-interactively 'nixpkgs-fmt-region))))) (call-interactively 'nixpkgs-fmt-region)))))
#+end_src #+end_src
**** Disable garbace collection while minibuffer is active
#+begin_src emacs-lisp
(defun swarsel/minibuffer-setup-hook ()
(setq gc-cons-threshold most-positive-fixnum))
(defun swarsel/minibuffer-exit-hook ()
(setq gc-cons-threshold (* 32 1024 1024)))
(add-hook 'minibuffer-setup-hook #'swarsel/minibuffer-setup-hook)
(add-hook 'minibuffer-exit-hook #'swarsel/minibuffer-exit-hook)
#+end_src
*** Custom Keybindings *** Custom Keybindings
:PROPERTIES: :PROPERTIES:
:CUSTOM_ID: h:2b827c27-0de7-45ed-9d9e-6c511e2c6bb5 :CUSTOM_ID: h:2b827c27-0de7-45ed-9d9e-6c511e2c6bb5
@ -10568,8 +10588,14 @@ I also define some keybinds to some combinations directly. Those are used mostly
"<DUMMY-m>" 'swarsel/last-buffer "<DUMMY-m>" 'swarsel/last-buffer
"M-\\" 'indent-region "M-\\" 'indent-region
"C-<f9>" 'my-python-shell-run "C-<f9>" 'my-python-shell-run
"<Paste>" 'yank
"<Cut>" 'kill-region
"<Copy>" 'kill-ring-save
"<undo>" 'evil-undo
"<redo>" 'evil-redo
) )
#+end_src #+end_src
*** Directory setup / File structure *** Directory setup / File structure
:PROPERTIES: :PROPERTIES:
@ -10688,49 +10714,56 @@ Here I set up some things that are too minor to put under other categories.
#+begin_src emacs-lisp #+begin_src emacs-lisp
;; use UTF-8 everywhere ;; use UTF-8 everywhere
(set-language-environment "UTF-8") (set-language-environment "UTF-8")
(profiler-start 'cpu) (profiler-start 'cpu)
;; set default font size ;; set default font size
(defvar swarsel/default-font-size 130) (defvar swarsel/default-font-size 130)
(setq swarsel-standard-font "FiraCode Nerd Font Mono" (setq swarsel-standard-font "FiraCode Nerd Font Mono"
swarsel-alt-font "FiraCode Nerd Font Mono") swarsel-alt-font "FiraCode Nerd Font Mono")
;; (defalias 'yes-or-no-p 'y-or-n-p) ;; (defalias 'yes-or-no-p 'y-or-n-p)
;;(setq-default show-trailing-whitespace t) ;;(setq-default show-trailing-whitespace t)
(add-hook 'before-save-hook 'delete-trailing-whitespace) (add-hook 'before-save-hook 'delete-trailing-whitespace)
(global-hl-line-mode 1) (global-hl-line-mode 1)
;; (setq redisplay-dont-pause t) ;; obsolete ;; (setq redisplay-dont-pause t) ;; obsolete
(setq blink-cursor-mode nil) ;; blink-cursor is an unexpected source of slowdown (setq blink-cursor-mode nil) ;; blink-cursor is an unexpected source of slowdown
(global-subword-mode 1) ; Iterate through CamelCase words (global-subword-mode 1) ; Iterate through CamelCase words
(setq blink-matching-paren nil) ;; this makes the cursor jump around annoyingly (setq blink-matching-paren nil) ;; this makes the cursor jump around annoyingly
(delete-selection-mode 1) (delete-selection-mode 1)
(setq vc-follow-symlinks t) (setq vc-follow-symlinks t)
(setq require-final-newline t) (setq require-final-newline t)
(winner-mode 1) (winner-mode 1)
(setq load-prefer-newer t) (setq load-prefer-newer t)
(setq-default bidi-paragraph-direction 'left-to-right) (setq-default bidi-paragraph-direction 'left-to-right
(setq bidi-inhibit-bpa t) bidi-display-reordering 'left-to-right
(global-so-long-mode) bidi-inhibit-bpa t)
(setq undo-limit 80000000 (global-so-long-mode)
evil-want-fine-undo t (setq process-adaptive-read-buffering nil) ;; not sure if this is a good idea
auto-save-default t (setq fast-but-imprecise-scrolling t
password-cache-expiry nil redisplay-skip-fontification-on-input t
) inhibit-compacting-font-caches t)
(setq browse-url-browser-function 'browse-url-firefox) (setq idle-update-delay 1.0
;; disable a keybind that does more harm than good which-func-update-delay 1.0)
(global-set-key [remap suspend-frame] (setq undo-limit 80000000
(lambda () evil-want-fine-undo t
(interactive) auto-save-default t
(message "This keybinding is disabled (was 'suspend-frame')"))) password-cache-expiry nil
)
(setq browse-url-browser-function 'browse-url-firefox)
;; disable a keybind that does more harm than good
(global-set-key [remap suspend-frame]
(lambda ()
(interactive)
(message "This keybinding is disabled (was 'suspend-frame')")))
(setq visible-bell nil) (setq visible-bell nil)
(setq initial-major-mode 'fundamental-mode (setq initial-major-mode 'fundamental-mode
initial-scratch-message nil) initial-scratch-message nil)
(add-hook 'prog-mode-hook 'display-line-numbers-mode) (add-hook 'prog-mode-hook 'display-line-numbers-mode)
;; (add-hook 'text-mode-hook 'display-line-numbers-mode) ;; (add-hook 'text-mode-hook 'display-line-numbers-mode)
;; (global-visual-line-mode 1) ;; (global-visual-line-mode 1)
#+end_src #+end_src

View file

@ -10,8 +10,11 @@
(lambda () (lambda ()
(progn (progn
;; (setq gc-cons-threshold (* 1000 1000 8) ;; (setq gc-cons-threshold (* 1000 1000 8)
(setq gc-cons-threshold #x40000000 ;; (setq gc-cons-threshold #x40000000
(setq gc-cons-threshold (* 32 1024 1024)
gc-cons-percentage 0.1 gc-cons-percentage 0.1
jit-lock-defer-time 0.05
read-process-output-max (* 1024 1024)
file-name-handler-alist swarsel-file-name-handler-alist file-name-handler-alist swarsel-file-name-handler-alist
vc-handled-backends swarsel-vc-handled-backends) vc-handled-backends swarsel-vc-handled-backends)
(fset 'epg-wait-for-status 'ignore) (fset 'epg-wait-for-status 'ignore)

View file

@ -292,6 +292,15 @@ create a new one."
(org-babel-mark-block) (org-babel-mark-block)
(call-interactively 'nixpkgs-fmt-region))))) (call-interactively 'nixpkgs-fmt-region)))))
(defun swarsel/minibuffer-setup-hook ()
(setq gc-cons-threshold most-positive-fixnum))
(defun swarsel/minibuffer-exit-hook ()
(setq gc-cons-threshold (* 32 1024 1024)))
(add-hook 'minibuffer-setup-hook #'swarsel/minibuffer-setup-hook)
(add-hook 'minibuffer-exit-hook #'swarsel/minibuffer-exit-hook)
;; Make ESC quit prompts ;; Make ESC quit prompts
(global-set-key (kbd "<escape>") 'keyboard-escape-quit) (global-set-key (kbd "<escape>") 'keyboard-escape-quit)
@ -398,6 +407,11 @@ create a new one."
"<DUMMY-m>" 'swarsel/last-buffer "<DUMMY-m>" 'swarsel/last-buffer
"M-\\" 'indent-region "M-\\" 'indent-region
"C-<f9>" 'my-python-shell-run "C-<f9>" 'my-python-shell-run
"<Paste>" 'yank
"<Cut>" 'kill-region
"<Copy>" 'kill-ring-save
"<undo>" 'evil-undo
"<redo>" 'evil-redo
) )
;; set Nextcloud directory for journals etc. ;; set Nextcloud directory for journals etc.
@ -481,9 +495,16 @@ create a new one."
(setq require-final-newline t) (setq require-final-newline t)
(winner-mode 1) (winner-mode 1)
(setq load-prefer-newer t) (setq load-prefer-newer t)
(setq-default bidi-paragraph-direction 'left-to-right) (setq-default bidi-paragraph-direction 'left-to-right
(setq bidi-inhibit-bpa t) bidi-display-reordering 'left-to-right
bidi-inhibit-bpa t)
(global-so-long-mode) (global-so-long-mode)
(setq process-adaptive-read-buffering nil) ;; not sure if this is a good idea
(setq fast-but-imprecise-scrolling t
redisplay-skip-fontification-on-input t
inhibit-compacting-font-caches t)
(setq idle-update-delay 1.0
which-func-update-delay 1.0)
(setq undo-limit 80000000 (setq undo-limit 80000000
evil-want-fine-undo t evil-want-fine-undo t
auto-save-default t auto-save-default t