#!/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-solarized-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))) "switch" (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)))) (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)