summaryrefslogtreecommitdiff
path: root/theme.el
diff options
context:
space:
mode:
Diffstat (limited to 'theme.el')
-rw-r--r--theme.el36
1 files changed, 36 insertions, 0 deletions
diff --git a/theme.el b/theme.el
new file mode 100644
index 0000000..514687f
--- /dev/null
+++ b/theme.el
@@ -0,0 +1,36 @@
+;;; theme.el -*- lexical-binding: t; -*-
+
+;; Utility to set light & dark theme that follows system
+;; This has only been tested on Gnome 48 and depends on gsettings
+
+(use-package catppuccin-theme)
+
+(defun set-color-scheme ()
+ (set-theme
+ (string-trim
+ (shell-command-to-string "gsettings get org.gnome.desktop.interface color-scheme"))))
+
+(defun set-theme (scheme)
+ (setq catppuccin-flavor (cond ((string-equal scheme "\'default\'") 'latte)
+ ((string-equal scheme "\'prefer-light\'") 'latte)
+ ((string-equal scheme "\'prefer-dark\'") 'mocha)))
+ (load-theme 'catppuccin :no-confirm))
+
+(defun monitor-theme-changes ()
+ "Listen to gnome theme changes and run set the correct flavor"
+ (let ((process (make-process
+ :name "gsettings-monitor"
+ :command '("gsettings" "monitor" "org.gnome.desktop.interface" "color-scheme")
+ :filter (lambda (_ output)
+ (when (string-match-p "color-scheme" output)
+ (set-color-scheme))))))
+ ;; Kill on exit without user prompt
+ (set-process-query-on-exit-flag process nil)))
+
+;; Initialize settings
+(set-color-scheme)
+(monitor-theme-changes)
+
+(provide 'theme)
+
+;;; theme.el ends here