(use-package modus-themes :ensure t) (use-package ef-themes :ensure t) (setq modus-themes-mode-line '(accented borderless padded) modus-themes-region '(bg-only) modus-themes-bold-constructs t modus-themes-italic-constructs t modus-themes-paren-match '(bold intense) modus-themes-headings (quote ((1 . (rainbow variable-pitch 1.3)) (2 . (rainbow 1.1)) (t . (rainbow)))) modus-themes-org-blocks 'tinted ) (use-package dbus) (defun mf/set-theme-from-dbus-value (value) "Set the appropiate theme according to the color-scheme setting value." (message "value is %s" value) (if (equal value '1) (progn (message "Switch to dark theme") (modus-themes-select 'modus-vivendi-tinted)) (progn (message "Switch to light theme") (modus-themes-select 'modus-operandi-tinted)))) (defun mf/color-scheme-changed (path var value) "DBus handler to detect when the color-scheme has changed." (when (and (string-equal path "org.freedesktop.appearance") (string-equal var "color-scheme")) (mf/set-theme-from-dbus-value (car value)) )) ;; Register for future changes (dbus-register-signal :session "org.freedesktop.portal.Desktop" "/org/freedesktop/portal/desktop" "org.freedesktop.portal.Settings" "SettingChanged" #'mf/color-scheme-changed) ;; Request the current color-scheme (dbus-call-method-asynchronously :session "org.freedesktop.portal.Desktop" "/org/freedesktop/portal/desktop" "org.freedesktop.portal.Settings" "Read" (lambda (value) (mf/set-theme-from-dbus-value (caar value))) "org.freedesktop.appearance" "color-scheme" )