57 lines
2.2 KiB
Org Mode
57 lines
2.2 KiB
Org Mode
#+TITLE: Auto change emacs theme
|
|
#+AUTHOR: Yann Esposito
|
|
#+EMAIL: yann@esposito.host
|
|
#+DATE: [2020-09-22 Tue]
|
|
#+KEYWORDS: emacs
|
|
#+DESCRIPTION: A small snippet to automatically change theme in emacs.
|
|
#+OPTIONS: auto-id:t
|
|
|
|
One thing I kind of like is the ability to change emacs theme depending of
|
|
the hour.
|
|
There are two possibilities.
|
|
One would be to sync with the sun using the current location.
|
|
There is an emacs package for that.
|
|
It's called [[https://github.com/hadronzoo/theme-changer][theme-changer]] which at the time of writing those lines is
|
|
asking for a new maintainer.
|
|
This theme changer is very elegant because like macOS use the location to
|
|
determine if it is day or night.
|
|
But I wanted to have more themes from morning to night:
|
|
|
|
1. early morning: deep yellow (gruvbox-light),
|
|
2. morning: light yellow (solarized-light),
|
|
3. day: grey/blueish during the day (nord-light),
|
|
4. evening: deep yellow again (gruvbox-light)
|
|
5. night: dark theme (oceanic-next)
|
|
6. sleep time: neon-like (laserwave)
|
|
|
|
And also, I wanted that to follow my working hours and not really the sun.
|
|
I might change my mind and use the code of theme-changer to follow the
|
|
curve of the sun.
|
|
But for now, just using straight hours should be good enough.
|
|
So here is my piece of code I added to my doom-emacs =config.el=:
|
|
|
|
#+BEGIN_SRC emacs-lisp
|
|
(defun y/auto-update-theme ()
|
|
"depending on time use different theme"
|
|
;; very early => gruvbox-light, solarized-light, nord-light
|
|
(let* ((hour (nth 2 (decode-time (current-time))))
|
|
(theme (cond ((<= 7 hour 8) 'doom-gruvbox-light)
|
|
((= 9 hour) 'doom-solarized-light)
|
|
((<= 10 hour 16) 'doom-nord-light)
|
|
((<= 17 hour 18) 'doom-gruvbox-light)
|
|
((<= 19 hour 22) 'doom-oceanic-next)
|
|
(t 'doom-laserwave))))
|
|
(when (not (equal doom-theme theme))
|
|
(setq doom-theme theme)
|
|
(load-theme doom-theme)
|
|
;; run that function again next hour
|
|
(run-at-time (format "%02d:%02d" (+ hour 1) 0) nil 'y/update-time))))
|
|
|
|
(y/auto-update-theme)
|
|
#+END_SRC
|
|
|
|
I'm still playing with it.
|
|
So there still might be a bug.
|
|
Use at your own risk.
|
|
Happy hacking to all of you.
|