playground/toggle_theme

65 lines
1.8 KiB
Clojure
Executable file

#!/usr/bin/env bb
(ns toggle-theme
"Script to toggle between light and dark themes. Inspired by
https://github.com/pedrocr/dotfiles/blob/master/.config/sway/envsetup."
(:require [clojure.java.shell :refer [sh]]
[babashka.fs :as fs]))
(def themes
{:emacs
{:dark "doom-opera"
:light "doom-oksolar-light"}
:gnome
{:dark "Adwaita-dark"
:light "Adwaita"}})
(def theme-preferences
["gtk"
"icon"
"cursor"])
(defn current-theme
[]
(if (re-find #"dark" (->> (sh "gsettings" "get" "org.gnome.desktop.interface" "color-scheme")
:out))
:dark
:light))
(defn next-theme
[]
(if (= :dark (current-theme))
:light
:dark))
(case (some->> *command-line-args*
first)
"get" (println (name (current-theme)))
"toggle"
(let [switch-to (next-theme)
gnome-theme ((:gnome themes) switch-to)]
;; https://askubuntu.com/questions/1464937/inconsistent-dark-theme-for-gtk-apps-on-23-04
;;
;; $ gsettings get org.gnome.desktop.interface color-scheme
;; 'prefer-dark'
;; $ gsettings get org.gnome.desktop.interface gtk-theme
;; 'Yaru-dark'
;; $ gsettings get org.gnome.desktop.wm.preferences theme
;; 'Yaru-dark'
;; [["org.gnome.desktop.interface" "gtk-theme"]
;; ["org.gnome.desktop.wm.preferences" "theme"]]
(run!
#(sh "gsettings" "set" "org.gnome.desktop.interface" (str % "-theme") gnome-theme)
theme-preferences)
(sh "gsettings" "set" "org.gnome.desktop.interface" "color-scheme" (str "prefer-" (name (next-theme))))
(sh "gsettings" "set" "org.gnome.desktop.wm.preferences" "theme" gnome-theme)
(run!
#(sh "emacsclient" "--socket-name" % "--eval" (str "(load-theme '" ((:emacs themes) switch-to) ")"))
(map str (fs/list-dir (fs/file (System/getenv "XDG_RUNTIME_DIR") "emacs"))))
nil)
false)