From 581d99339a522675b7bfc619e84ccf33340535d2 Mon Sep 17 00:00:00 2001 From: Andrew Guschin Date: Tue, 26 Nov 2024 20:34:25 +0400 Subject: speed up startup by using org tangle only when config.org changed To determine if config is changed, we can calculate its current md5 and compare it with previous one. If file with previous checksum doesn't exist, then we should bootstrap config anyway, so this will invoke tangle. In most cases, Emacs starts with the same config, so this is a nice optimization. --- init.el | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/init.el b/init.el index f12efca..0e00c6b 100644 --- a/init.el +++ b/init.el @@ -1 +1,24 @@ -(org-babel-load-file (expand-file-name "config.org" user-emacs-directory)) +;; Set up benchmark-init of initialization early inside init.el to correctly benchmark load time +(when (package-installed-p 'benchmark-init) + (require 'benchmark-init) + (add-hook 'after-init-hook 'benchmark-init/deactivate)) + +(setq checksum-path (expand-file-name ".config-checksum" user-emacs-directory)) +(setq config-path (expand-file-name "config.org" user-emacs-directory)) +(setq config-untangled-path (expand-file-name "config.el" user-emacs-directory)) + +;; Since config is residing inside one file, I can calculate its checksum and tangle config.org only +;; when it was changed. This way loading is significantly faster. +(setq new-checksum (car (split-string (shell-command-to-string (concat "md5sum --zero " config-path))))) +(setq saved-checksum "") +(when (file-exists-p checksum-path) + (setq saved-checksum (with-temp-buffer + (insert-file-contents checksum-path) + (buffer-string)))) +(if (string-equal new-checksum saved-checksum) + (load-file config-untangled-path) + (progn + (write-region new-checksum nil checksum-path) + (setq org-modules '(org-id ol-info org-protocol)) + (org-babel-load-file config-path))) + -- cgit v1.2.3