add ymmw, toggle_displays.clj
This commit is contained in:
parent
e6af9de435
commit
18ff2a0636
2 changed files with 88 additions and 0 deletions
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*))
|
||||||
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