summaryrefslogtreecommitdiff
path: root/init.el
diff options
context:
space:
mode:
authorAndrew Guschin <guschin@altlinux.org>2024-11-26 20:34:25 +0400
committerAndrew Guschin <guschin@altlinux.org>2024-11-26 20:34:25 +0400
commit581d99339a522675b7bfc619e84ccf33340535d2 (patch)
tree6d8422e2b5299277e7115a4d0af0c40f4bc3057e /init.el
parent48abb4c18b78f96d66c39531bfc6c28983797849 (diff)
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.
Diffstat (limited to 'init.el')
-rw-r--r--init.el25
1 files changed, 24 insertions, 1 deletions
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)))
+