Compare commits
6 commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 18ff2a0636 | |||
| e6af9de435 | |||
| e0068dacee | |||
| 4c1d731532 | |||
|
|
b0d9b2c717 | ||
|
|
ba5efb8223 |
8 changed files with 119 additions and 98 deletions
|
|
@ -1,43 +0,0 @@
|
||||||
#!/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))))
|
|
||||||
5
colorpicker
Executable file
5
colorpicker
Executable file
|
|
@ -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:-
|
||||||
|
|
@ -1,26 +0,0 @@
|
||||||
#!/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+"))))
|
|
||||||
|
|
@ -1,18 +0,0 @@
|
||||||
#!/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}"
|
|
||||||
13
platform_profile
Executable file
13
platform_profile
Executable file
|
|
@ -0,0 +1,13 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
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
|
||||||
54
toggle_displays.clj
Executable file
54
toggle_displays.clj
Executable file
|
|
@ -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*))
|
||||||
24
toggle_theme
24
toggle_theme
|
|
@ -6,12 +6,13 @@
|
||||||
[babashka.fs :as fs]))
|
[babashka.fs :as fs]))
|
||||||
|
|
||||||
(def themes
|
(def themes
|
||||||
{:emacs
|
{:light {:emacs "doom-oksolar-light"
|
||||||
{:dark "doom-opera"
|
:gnome "Adwaita"
|
||||||
:light "doom-oksolar-light"}
|
:kitty "Doom OKsolar Light"}
|
||||||
:gnome
|
|
||||||
{:dark "Adwaita-dark"
|
:dark {:emacs "doom-opera"
|
||||||
:light "Adwaita"}})
|
:gnome "Adwaita-dark"
|
||||||
|
:kitty "Default"}})
|
||||||
|
|
||||||
(def theme-preferences
|
(def theme-preferences
|
||||||
["gtk"
|
["gtk"
|
||||||
|
|
@ -36,8 +37,9 @@
|
||||||
"get" (println (name (current-theme)))
|
"get" (println (name (current-theme)))
|
||||||
|
|
||||||
"toggle"
|
"toggle"
|
||||||
(let [switch-to (next-theme)
|
(let [next-scheme (next-theme)
|
||||||
gnome-theme ((:gnome themes) switch-to)]
|
next-themes (next-scheme themes)
|
||||||
|
gnome-theme (:gnome next-themes)]
|
||||||
;; https://askubuntu.com/questions/1464937/inconsistent-dark-theme-for-gtk-apps-on-23-04
|
;; https://askubuntu.com/questions/1464937/inconsistent-dark-theme-for-gtk-apps-on-23-04
|
||||||
;;
|
;;
|
||||||
;; $ gsettings get org.gnome.desktop.interface color-scheme
|
;; $ gsettings get org.gnome.desktop.interface color-scheme
|
||||||
|
|
@ -50,16 +52,16 @@
|
||||||
;; [["org.gnome.desktop.interface" "gtk-theme"]
|
;; [["org.gnome.desktop.interface" "gtk-theme"]
|
||||||
;; ["org.gnome.desktop.wm.preferences" "theme"]]
|
;; ["org.gnome.desktop.wm.preferences" "theme"]]
|
||||||
|
|
||||||
|
|
||||||
(run!
|
(run!
|
||||||
#(sh "gsettings" "set" "org.gnome.desktop.interface" (str % "-theme") gnome-theme)
|
#(sh "gsettings" "set" "org.gnome.desktop.interface" (str % "-theme") gnome-theme)
|
||||||
theme-preferences)
|
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)
|
(sh "gsettings" "set" "org.gnome.desktop.wm.preferences" "theme" gnome-theme)
|
||||||
|
|
||||||
(run!
|
(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"))))
|
(map str (fs/list-dir (fs/file (System/getenv "XDG_RUNTIME_DIR") "emacs"))))
|
||||||
|
(sh "kitty" "+kitten" "themes" "--reload-in=all" (:kitty next-themes))
|
||||||
nil)
|
nil)
|
||||||
|
|
||||||
false)
|
false)
|
||||||
|
|
|
||||||
34
ymmw
Normal file
34
ymmw
Normal file
|
|
@ -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:])
|
||||||
Loading…
Add table
Add a link
Reference in a new issue