summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--init.el4
-rw-r--r--theme.el36
3 files changed, 41 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index 75ca6e1..291b6e1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,4 @@
!.gitignore
!init.el
+!theme.el \ No newline at end of file
diff --git a/init.el b/init.el
index 92ffdbe..05a00df 100644
--- a/init.el
+++ b/init.el
@@ -27,3 +27,7 @@
;; Magit
(use-package magit)
+;; Catppuccin theme
+;; (require 'theme)
+(load "~/.emacs.d/theme.el")
+
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