From 547d40ff466f7111a7296981498323902f083e9e Mon Sep 17 00:00:00 2001 From: "Rune Juhl (Atea)" Date: Sat, 14 Sep 2024 04:16:51 +0200 Subject: [PATCH 1/7] brightness control, inhibit sleep, install fonts --- brightness_control | 43 +++++++++++++++++++++++++++++++++++++++++++ inhibit_sleep | 26 ++++++++++++++++++++++++++ install-atea-fonts.sh | 18 ++++++++++++++++++ 3 files changed, 87 insertions(+) create mode 100755 brightness_control create mode 100755 inhibit_sleep create mode 100755 install-atea-fonts.sh diff --git a/brightness_control b/brightness_control new file mode 100755 index 0000000..82d38d2 --- /dev/null +++ b/brightness_control @@ -0,0 +1,43 @@ +#!/usr/bin/env bb +(ns brightness-control + "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]] + [clojure.string] + [clojure.math :as math])) + +(def devices + (->> (sh "brightnessctl" "--class" "backlight" "--list") + :out + clojure.string/split-lines + (drop 1) + (partition-by #(re-find #"^Device" %)) + (partition 2) + (reduce (fn [acc [[sd] [scb smb]]] + (assoc acc + (keyword (last (re-find #"^Device '(.+?)'" sd))) + + {:current (Integer. (last (re-find #"Current brightness: (\d+)" scb))) + :max (Integer. (last (re-find #"Max brightness: (\d+)" smb)))} + )) + {}) + )) + +(case (some->> *command-line-args* + first) + "get" (println (name (current-theme))) + + "switch" + (let [switch-to (next-theme) + gnome-theme ((:gnome themes) switch-to)] + (run! + #(sh "gsettings" "set" "org.gnome.desktop.interface" (str % "-theme") gnome-theme) + theme-preferences) + + (sh "emacsclient" "-e" (str "(load-theme '" ((:emacs themes) switch-to) ")")) + nil)) + + +(let [steps 20 + tau (/ Math/PI 2)] + (map (fn [n] (* (math/sin n) 100)) (range 0 tau (/ tau steps)))) diff --git a/inhibit_sleep b/inhibit_sleep new file mode 100755 index 0000000..45d8a0a --- /dev/null +++ b/inhibit_sleep @@ -0,0 +1,26 @@ +#!/usr/bin/env bb +(ns inhibit-sleep + (:require [clojure.java.shell :refer [sh]])) + + +(defn has-lock? [] + (->> (sh "systemd-inhibit") + :out + (clojure.string/split-lines) + (filter #(re-find #"inhibit-sleep" %)) + seq)) + +(case (some->> *command-line-args* + first) + "get" (if (boolean (has-lock?)) + "inhibited" + "normal") + + "toggle" + (if (has-lock?) + nil + (apply sh (clojure.string/split + "systemd-inhibit \ + --what=handle-lid-switch:sleep \ + --why=':inhibit-sleep' \ + --mode=block cat" #"\s+")))) diff --git a/install-atea-fonts.sh b/install-atea-fonts.sh new file mode 100755 index 0000000..1d09d1c --- /dev/null +++ b/install-atea-fonts.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash + +set -euo pipefail + +command -v woff2_decompress + +tmp="$(mktemp -d)" +pushd "${tmp}" +for style in Light Regular Medium Bold; do + f="Inter-${style}.woff2" + wget "https://www.atea.dk/fonts/${f}" + woff2_decompress "${f}" +done + +mv ./*.ttf ~/.local/share/fonts +fc-cache -f -v +popd +rm "${tmp}" From ba5efb8223028a328dc5a13096baaa3e3914854b Mon Sep 17 00:00:00 2001 From: "Rune Juhl (Atea)" Date: Mon, 2 Dec 2024 10:44:30 +0100 Subject: [PATCH 2/7] [toggle_themes] add Kitty support --- toggle_theme | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/toggle_theme b/toggle_theme index 51f847c..a937b34 100755 --- a/toggle_theme +++ b/toggle_theme @@ -6,12 +6,13 @@ [babashka.fs :as fs])) (def themes - {:emacs - {:dark "doom-opera" - :light "doom-oksolar-light"} - :gnome - {:dark "Adwaita-dark" - :light "Adwaita"}}) + {:light {:emacs "doom-oksolar-light" + :gnome "Adwaita" + :kitty "doom-oksolar-light"} + + :dark {:emacs "doom-opera" + :gnome "Adwaita-dark" + :kitty "Solarized Darcula"}}) (def theme-preferences ["gtk" @@ -36,8 +37,9 @@ "get" (println (name (current-theme))) "toggle" - (let [switch-to (next-theme) - gnome-theme ((:gnome themes) switch-to)] + (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 @@ -50,16 +52,16 @@ ;; [["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.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 themes) switch-to) ")")) + #(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) From b0d9b2c7178d1adb0d12ce8ae32fb605b8421a49 Mon Sep 17 00:00:00 2001 From: "Rune Juhl (Atea)" Date: Mon, 2 Dec 2024 11:43:12 +0100 Subject: [PATCH 3/7] [colorpicker] add colorpicker --- colorpicker | 5 +++++ 1 file changed, 5 insertions(+) create mode 100755 colorpicker diff --git a/colorpicker b/colorpicker new file mode 100755 index 0000000..1f79cb4 --- /dev/null +++ b/colorpicker @@ -0,0 +1,5 @@ +#!/bin/sh +# +# https://unix.stackexchange.com/a/523805 + +grim -g "$(slurp -p)" -t ppm - | convert - -format '%[pixel:p{0,0}]' txt:- From 4c1d73153288e2f41a5ff039fa74fb635f3e0231 Mon Sep 17 00:00:00 2001 From: Rune Juhl Jacobsen Date: Tue, 28 Jan 2025 23:44:25 +0100 Subject: [PATCH 4/7] add Intel platform_profile toggle script --- platform_profile | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100755 platform_profile diff --git a/platform_profile b/platform_profile new file mode 100755 index 0000000..22cebd8 --- /dev/null +++ b/platform_profile @@ -0,0 +1,14 @@ +#!/usr/bin/env bash +set -euo pipefail +set -x + +case "${1}" in + get) + head -c1 /sys/firmware/acpi/platform_profile | tr '[:lower:]' '[:upper:]' + ;; + toggle) + current="$(cat /sys/firmware/acpi/platform_profile)" + choices="$(cat /sys/firmware/acpi/platform_profile_choices)" + next="$(echo "${choices} ${choices}" | tr \ \\n | grep -A1 "${current}" | tail -n+2 | head -n1)" + echo "${next}" | sudo tee /sys/firmware/acpi/platform_profile +esac From e0068dacee8ba87138e71a8c9f42f1e11f696102 Mon Sep 17 00:00:00 2001 From: Rune Juhl Jacobsen Date: Mon, 28 Apr 2025 10:14:17 +0200 Subject: [PATCH 5/7] [platform_profile] remove debugging --- platform_profile | 1 - 1 file changed, 1 deletion(-) diff --git a/platform_profile b/platform_profile index 22cebd8..de7d6fc 100755 --- a/platform_profile +++ b/platform_profile @@ -1,6 +1,5 @@ #!/usr/bin/env bash set -euo pipefail -set -x case "${1}" in get) From e6af9de435260080e212622196b7c5b8bba11dc9 Mon Sep 17 00:00:00 2001 From: Rune Juhl Jacobsen Date: Mon, 28 Apr 2025 10:14:34 +0200 Subject: [PATCH 6/7] [toggle_theme] change theme preference --- toggle_theme | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/toggle_theme b/toggle_theme index a937b34..f308e16 100755 --- a/toggle_theme +++ b/toggle_theme @@ -8,11 +8,11 @@ (def themes {:light {:emacs "doom-oksolar-light" :gnome "Adwaita" - :kitty "doom-oksolar-light"} + :kitty "Doom OKsolar Light"} :dark {:emacs "doom-opera" :gnome "Adwaita-dark" - :kitty "Solarized Darcula"}}) + :kitty "Default"}}) (def theme-preferences ["gtk" From 18ff2a0636900c72679d9e68b3c683e4476c967e Mon Sep 17 00:00:00 2001 From: Rune Juhl Jacobsen Date: Mon, 28 Apr 2025 10:15:15 +0200 Subject: [PATCH 7/7] add ymmw, toggle_displays.clj --- toggle_displays.clj | 54 +++++++++++++++++++++++++++++++++++++++++++++ ymmw | 34 ++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100755 toggle_displays.clj create mode 100644 ymmw diff --git a/toggle_displays.clj b/toggle_displays.clj new file mode 100755 index 0000000..c12a079 --- /dev/null +++ b/toggle_displays.clj @@ -0,0 +1,54 @@ +#!/usr/bin/env -S bb +(ns toggle-displays + (:require [clojure.edn :as edn] + [clojure.java.io :as io] + [clojure.java.shell :refer [sh]] + [babashka.fs :as fs])) + +(def state-file + (fs/path + (System/getenv "XDG_RUNTIME_DIR") + (str (fs/file-name (or (System/getProperty "babashka.file") *file*)) ".state"))) + +(defn get-state! + [] + (if (fs/exists? state-file) + (some->> + (->> state-file + fs/unixify + io/reader + java.io.PushbackReader. + edn/read)) + (some->> + (sh "journalctl" "--user" "--unit" "kanshi.service" "--reverse" "--lines" "1") + ;; {:exit 0, :out "Mar 06 07:39:48 aegir kanshi[3318847]: configuration for profile 'kvm-1' applied\n", :err ""} + :out + (re-find #"configuration for profile '(.+?)' applied") + (second) + (keyword)))) + +(defn save-state! + [state] + (spit (fs/unixify state-file) state)) + +(defn apply-state! + [state] + (sh "kanshictl" "switch" (name state))) + +(defn next-state + [state] + (let [modes (apply concat (repeat 2 [:kvm-left + :kvm-right + :single]))] + (nth modes (inc (.indexOf modes state))))) + +(defn -main + [& [toggle?]] + (when toggle? + (let [state (get-state!) + state* (next-state state)] + (apply-state! state*) + (save-state! state*)))) + +(when (= *file* (System/getProperty "babashka.file")) + (apply -main *command-line-args*)) diff --git a/ymmw b/ymmw new file mode 100644 index 0000000..2f9f85f --- /dev/null +++ b/ymmw @@ -0,0 +1,34 @@ +#!/usr/bin/env python3 +"""Re-format YAML passed on stdin or read from any arguments.""" + +import yaml +import sys + + +# https://stackoverflow.com/a/72265455 +def str_presenter(dumper, data): + if len(data.splitlines()) > 1 or "\n" in data: + text_list = [line.rstrip() for line in data.splitlines()] + fixed_data = "\n".join(text_list) + return dumper.represent_scalar("tag:yaml.org,2002:str", fixed_data, style="|") + return dumper.represent_scalar("tag:yaml.org,2002:str", data) + + +yaml.add_representer(str, str_presenter) + + +def ymmw(files): + if not files: + files=[sys.stdin] + + for f in files: + try: + print(f) + print(yaml.dump(yaml.load(open(f) if not f == sys.stdin else f, Loader=yaml.FullLoader)), end='') + except OSError as ex: + sys.exit(f"""ERROR: Couldn't read input from stdin, or couldn't write output to stdout. Exiting. + +{ex}""") + +if __name__ == '__main__': + ymmw(sys.argv[1:])