#!/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 {:light {:emacs "doom-oksolar-light" :gnome "Adwaita" :kitty "Doom OKsolar Light"} :dark {:emacs "doom-opera" :gnome "Adwaita-dark" :kitty "Default"}}) (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 [next-scheme (next-theme) next-themes (next-scheme themes) gnome-theme (:gnome next-themes)] ;; 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-scheme))) (sh "gsettings" "set" "org.gnome.desktop.wm.preferences" "theme" gnome-theme) (run! #(sh "emacsclient" "--socket-name" % "--eval" (str "(load-theme '" (:emacs next-themes) ")")) (map str (fs/list-dir (fs/file (System/getenv "XDG_RUNTIME_DIR") "emacs")))) (sh "kitty" "+kitten" "themes" "--reload-in=all" (:kitty next-themes)) nil) false)