From 25b821a4fd1a444e78cb1260598421f586be2e49 Mon Sep 17 00:00:00 2001 From: Barrett Ruth Date: Tue, 3 Mar 2026 00:42:25 -0500 Subject: [PATCH] ci: format --- config/nvim/lua/plugins/dev.lua | 40 ++- config/nvim/lua/plugins/git.lua | 3 +- hosts/xps15/configuration.nix | 12 +- scripts/ctl | 81 +++-- scripts/mux | 8 +- scripts/pipes | 551 ++++++++++++++++---------------- scripts/theme | 7 +- scripts/x | 3 +- 8 files changed, 374 insertions(+), 331 deletions(-) diff --git a/config/nvim/lua/plugins/dev.lua b/config/nvim/lua/plugins/dev.lua index c4fc3cf..22f88b0 100644 --- a/config/nvim/lua/plugins/dev.lua +++ b/config/nvim/lua/plugins/dev.lua @@ -226,12 +226,16 @@ return { enabled_languages = { 'cpp', 'python' }, default_language = 'cpp', overrides = { - cpp = { template = '~/.config/nix/config/cp/template_single.cc' }, + cpp = { + template = '~/.config/nix/config/cp/template_single.cc', + }, }, }, cses = { overrides = { - cpp = { template = '~/.config/nix/config/cp/template_single.cc' }, + cpp = { + template = '~/.config/nix/config/cp/template_single.cc', + }, }, }, }, @@ -242,24 +246,39 @@ return { hooks = { setup = { contest = function(state) - local dir = vim.fn.fnamemodify(state.get_source_file(state.get_language()), ':h') + local dir = vim.fn.fnamemodify( + state.get_source_file(state.get_language()), + ':h' + ) local path = dir .. '/.clang-format' if vim.fn.filereadable(path) == 0 then - vim.fn.system({ 'cp', vim.fn.expand('~/.config/nix/config/cp/.clang-format'), path }) + vim.fn.system({ + 'cp', + vim.fn.expand( + '~/.config/nix/config/cp/.clang-format' + ), + path, + }) end end, code = function(_) - vim.opt_local.foldlevel = 0 + vim.opt_local.foldlevel = 0 vim.opt_local.foldmethod = 'marker' vim.opt_local.foldmarker = '{{{,}}}' - vim.opt_local.foldtext = '' + vim.opt_local.foldtext = '' vim.diagnostic.enable(false) end, }, on = { - enter = function(_) vim.opt_local.winbar = '' end, - run = function(_) require('config.lsp').format() end, - debug = function(_) require('config.lsp').format() end, + enter = function(_) + vim.opt_local.winbar = '' + end, + run = function(_) + require('config.lsp').format() + end, + debug = function(_) + require('config.lsp').format() + end, }, }, filename = function(_, _, problem_id) @@ -267,6 +286,9 @@ return { end, } end, + after = function() + vim.cmd.packadd('fzf-lua') + end, }, { 'barrettruth/preview.nvim', diff --git a/config/nvim/lua/plugins/git.lua b/config/nvim/lua/plugins/git.lua index 7423dd5..824bf7b 100644 --- a/config/nvim/lua/plugins/git.lua +++ b/config/nvim/lua/plugins/git.lua @@ -10,7 +10,8 @@ end vim.api.nvim_create_autocmd('VimEnter', { once = true, callback = function() - vim.o.statusline = ' %{v:lua._fugitive_stl()}' .. vim.o.statusline:sub(2) + vim.o.statusline = ' %{v:lua._fugitive_stl()}' + .. vim.o.statusline:sub(2) end, }) diff --git a/hosts/xps15/configuration.nix b/hosts/xps15/configuration.nix index 4d29069..2724ec7 100644 --- a/hosts/xps15/configuration.nix +++ b/hosts/xps15/configuration.nix @@ -32,11 +32,13 @@ in configurationLimit = 5; gfxmodeEfi = "1920x1200,auto"; fontSize = 36; - mirroredBoots = [{ - path = "/boot"; - efiSysMountPoint = "/efi"; - devices = [ "nodev" ]; - }]; + mirroredBoots = [ + { + path = "/boot"; + efiSysMountPoint = "/efi"; + devices = [ "nodev" ]; + } + ]; }; boot.loader.efi.canTouchEfiVariables = true; boot.loader.efi.efiSysMountPoint = "/efi"; diff --git a/scripts/ctl b/scripts/ctl index cea9267..36938c6 100755 --- a/scripts/ctl +++ b/scripts/ctl @@ -16,7 +16,7 @@ screenshot) file="$dir/$(openssl rand -hex 10)-$(date +'%Y-%m-%d_%H-%M-%S').png" if [ "${XDG_SESSION_TYPE:-}" = "wayland" ]; then require grim slurp wl-copy - grim -g "$(slurp)" "$file" && wl-copy < "$file" + grim -g "$(slurp)" "$file" && wl-copy <"$file" else require maim xclip maim -s "$file" && xclip -selection clipboard -t image/png -i "$file" & @@ -48,13 +48,13 @@ keyboard) colemak) current="Colemak" ;; *) current="QWERTY" ;; esac - choice=$(printf 'QWERTY\nDvorak\nColemak' | \ + choice=$(printf 'QWERTY\nDvorak\nColemak' | awk -v cur="$current" '{ - prefix = ($0 == cur) ? " > " : " " + prefix = ($0 == cur) ? " > " : " " printf "%s%s\t%s\n", prefix, $0, $0 - }' | \ - fuzzel --dmenu --prompt="kbd: " --no-icons --lines=3 \ - --with-nth=1 --accept-nth=2 --width=24) + }' | + fuzzel --dmenu --prompt="kbd: " --no-icons --lines=3 \ + --with-nth=1 --accept-nth=2 --font="monospace:size=12" --width=23) [ -z "$choice" ] && exit 0 case "$choice" in QWERTY) variant="" ;; @@ -76,7 +76,7 @@ keyboard) audio) require wpctl pw-dump jq fuzzel case "$2" in - sink|source) + sink | source) if [ "$2" = sink ]; then class="Audio/Sink" prompt="sink: " @@ -106,11 +106,11 @@ audio) active_prefix=$(printf " >%$((pad - 3))s" "") header=$(printf "%s%s\n%s%s" "$indent" "Device name" "$indent" "$sep") count=$(printf '%s\n' "$rows" | wc -l) - choice=$(printf '%s\n' "$rows" | \ + choice=$(printf '%s\n' "$rows" | awk -F'\t' -v w1="$w1" -v indent="$indent" -v active_prefix="$active_prefix" '{ prefix = ($3 == ">") ? active_prefix : indent printf "%s%-*s\t%s\n", prefix, w1, $2, $1 - }' | \ + }' | fuzzel --dmenu --prompt="$prompt" --no-icons --lines="$count" \ --with-nth=1 --accept-nth=2 \ --mesg="$header" --mesg-mode=expand \ @@ -130,14 +130,25 @@ brightness) case "$2" in up) brightnessctl set "$BRIGHT_STEP"%+ ;; down) brightnessctl set "$BRIGHT_STEP"%- ;; - *) echo "Usage: ctl brightness {up|down}" >&2; exit 1 ;; + *) + echo "Usage: ctl brightness {up|down}" >&2 + exit 1 + ;; esac pct=$(awk -v cur="$(brightnessctl get)" -v max="$(brightnessctl max)" 'BEGIN { printf "%d", cur * 100 / max }') filled=$((pct / 5)) empty=$((20 - filled)) bar="" - i=0; while [ "$i" -lt "$filled" ]; do bar="${bar}━"; i=$((i + 1)); done - i=0; while [ "$i" -lt "$empty" ]; do bar="${bar}─"; i=$((i + 1)); done + i=0 + while [ "$i" -lt "$filled" ]; do + bar="${bar}━" + i=$((i + 1)) + done + i=0 + while [ "$i" -lt "$empty" ]; do + bar="${bar}─" + i=$((i + 1)) + done notify-send -a ctl -t 2500 -r 5555 "󰃠 $bar" ;; volume) @@ -149,14 +160,25 @@ volume) up) wpctl set-volume "$SINK" "${VOL_STEP}%+" --limit 1.0 ;; down) wpctl set-volume "$SINK" "${VOL_STEP}%-" ;; toggle) wpctl set-mute "$SINK" toggle ;; - *) echo "Usage: ctl volume {up|down|toggle}" >&2; exit 1 ;; + *) + echo "Usage: ctl volume {up|down|toggle}" >&2 + exit 1 + ;; esac vol=$(get_vol) filled=$((vol / 5)) empty=$((20 - filled)) bar="" - i=0; while [ "$i" -lt "$filled" ]; do bar="${bar}━"; i=$((i + 1)); done - i=0; while [ "$i" -lt "$empty" ]; do bar="${bar}─"; i=$((i + 1)); done + i=0 + while [ "$i" -lt "$filled" ]; do + bar="${bar}━" + i=$((i + 1)) + done + i=0 + while [ "$i" -lt "$empty" ]; do + bar="${bar}─" + i=$((i + 1)) + done if wpctl get-volume "$SINK" | grep -q MUTED; then icon="󰖁" elif [ "$vol" -le 33 ]; then @@ -173,11 +195,14 @@ wifi) pick) require fuzzel station=$(iwctl device list 2>/dev/null | sed 's/\x1b\[[0-9;]*[a-zA-Z]//g' | awk '/station/{print $1}') - [ -z "$station" ] && { echo "ctl: no wifi device found" >&2; exit 1; } + [ -z "$station" ] && { + echo "ctl: no wifi device found" >&2 + exit 1 + } while :; do - networks=$(iwctl station "$station" get-networks 2>/dev/null | \ - sed 's/\x1b\[[0-9;]*[a-zA-Z]//g' | \ - awk 'NR>4 && /\S/ && !/^[[:space:]]*-/' | \ + networks=$(iwctl station "$station" get-networks 2>/dev/null | + sed 's/\x1b\[[0-9;]*[a-zA-Z]//g' | + awk 'NR>4 && /\S/ && !/^[[:space:]]*-/' | awk '{ active = ($0 ~ /^[[:space:]]*>/) ? ">" : "" sub(/^[[:space:]>]*/, "") @@ -210,11 +235,11 @@ wifi) sep=$(awk -v n="$((w1 + w2 + w3 + 8))" 'BEGIN{for(i=0;i " : " " printf "%s%-*s %-*s %s\t%s\n", prefix, w1, $1, w2, $2, $3, $1 - }' | \ + }' | fuzzel --dmenu --prompt="wifi: " --no-icons --lines="$count" \ --with-nth=1 --accept-nth=2 \ --mesg="$header" --mesg-mode=expand \ @@ -266,33 +291,33 @@ media) case "$chosen" in "$cap_desktop") file="$ss_dir/$(date +'%Y-%m-%d_%H-%M-%S').png" - grim "$file" && wl-copy < "$file" && echo "$file" && notify-send -a ctl -t 2500 "Screenshot saved to ~${file#"$HOME"}" + grim "$file" && wl-copy <"$file" && echo "$file" && notify-send -a ctl -t 2500 "Screenshot saved to ~${file#"$HOME"}" ;; "$cap_area") file="$ss_dir/$(date +'%Y-%m-%d_%H-%M-%S').png" - grim -g "$(slurp)" "$file" && wl-copy < "$file" && echo "$file" && notify-send -a ctl -t 2500 "Screenshot saved to ~${file#"$HOME"}" + grim -g "$(slurp)" "$file" && wl-copy <"$file" && echo "$file" && notify-send -a ctl -t 2500 "Screenshot saved to ~${file#"$HOME"}" ;; "$cap_window") geom=$(hyprctl activewindow -j | jq -r '"\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"') file="$ss_dir/$(date +'%Y-%m-%d_%H-%M-%S').png" - grim -g "$geom" "$file" && wl-copy < "$file" && echo "$file" && notify-send -a ctl -t 2500 "Screenshot saved to ~${file#"$HOME"}" + grim -g "$geom" "$file" && wl-copy <"$file" && echo "$file" && notify-send -a ctl -t 2500 "Screenshot saved to ~${file#"$HOME"}" ;; "$rec_desktop") file="$rec_dir/$(date +'%Y-%m-%d_%H-%M-%S').mp4" - echo "$file" > "${XDG_RUNTIME_DIR:-/tmp}/ctl-recording" + echo "$file" >"${XDG_RUNTIME_DIR:-/tmp}/ctl-recording" notify-send -a ctl -t 2500 "Recording started" wf-recorder -f "$file" & ;; "$rec_area") file="$rec_dir/$(date +'%Y-%m-%d_%H-%M-%S').mp4" - echo "$file" > "${XDG_RUNTIME_DIR:-/tmp}/ctl-recording" + echo "$file" >"${XDG_RUNTIME_DIR:-/tmp}/ctl-recording" notify-send -a ctl -t 2500 "Recording started" wf-recorder -g "$(slurp)" -f "$file" & ;; "$rec_window") geom=$(hyprctl activewindow -j | jq -r '"\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"') file="$rec_dir/$(date +'%Y-%m-%d_%H-%M-%S').mp4" - echo "$file" > "${XDG_RUNTIME_DIR:-/tmp}/ctl-recording" + echo "$file" >"${XDG_RUNTIME_DIR:-/tmp}/ctl-recording" notify-send -a ctl -t 2500 "Recording started" wf-recorder -g "$geom" -f "$file" & ;; @@ -306,7 +331,7 @@ media) ;; wallpaper) require python - python - "$2" << 'PYTHON' + python - "$2" <<'PYTHON' import os import random import subprocess diff --git a/scripts/mux b/scripts/mux index 36733e2..983ea05 100755 --- a/scripts/mux +++ b/scripts/mux @@ -14,8 +14,8 @@ require tmux get_scope() { _path=$(tmux display-message -p '#{pane_current_path}') case "$_path" in - "$HOME") printf '~' ;; - *) basename "$_path" ;; + "$HOME") printf '~' ;; + *) basename "$_path" ;; esac } @@ -61,7 +61,7 @@ pick_pane() { sel=$({ printf 'target\tcommand\tpath\n' tmux list-panes -a -F '#{window_index}.#{pane_index}:#{session_name} #{pane_current_command} #{pane_current_path}' | - sed "s|$HOME|~|g" + sed "s|$HOME|~|g" } | column -t -s "$(printf '\t')" | fzf --reverse --header-lines 1 --prompt 'select-pane> ') sel="${sel%% *}" @@ -73,7 +73,7 @@ target_pane() { sel=$({ printf 'target\tcommand\tpath\n' tmux list-panes -a -F '#{window_index}.#{pane_index}:#{session_name} #{pane_current_command} #{pane_current_path}' | - sed "s|$HOME|~|g" + sed "s|$HOME|~|g" } | column -t -s "$(printf '\t')" | fzf --reverse --header-lines 1 --prompt "$1> ") sel="${sel%% *}" diff --git a/scripts/pipes b/scripts/pipes index 49899b5..afd6408 100755 --- a/scripts/pipes +++ b/scripts/pipes @@ -24,16 +24,15 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. - VERSION=1.3.0 -M=32768 # Bash RANDOM maximum + 1 -p=1 # number of pipes -f=75 # frame rate -s=13 # probability of straight fitting -r=2000 # characters limit -t=0 # iteration counter for -r character limit -w=80 # terminal size +M=32768 # Bash RANDOM maximum + 1 +p=1 # number of pipes +f=75 # frame rate +s=13 # probability of straight fitting +r=2000 # characters limit +t=0 # iteration counter for -r character limit +w=80 # terminal size h=24 # ab -> sets[][idx] = a*4 + b @@ -41,48 +40,47 @@ h=24 # 00 means going up , then going up -> ┃ # 12 means going right, then going down -> ┓ sets=( - "┃┏ ┓┛━┓ ┗┃┛┗ ┏━" - "│╭ ╮╯─╮ ╰│╯╰ ╭─" - "│┌ ┐┘─┐ └│┘└ ┌─" - "║╔ ╗╝═╗ ╚║╝╚ ╔═" - "|+ ++-+ +|++ +-" - "|/ \/-\ \|/\ /-" - ".. .... .... .." - ".o oo.o o.oo o." - "-\ /\|/ /-\/ \|" # railway - "╿┍ ┑┚╼┒ ┕╽┙┖ ┎╾" # knobby pipe - "████▀▀███▀█▀▀██▀" + "┃┏ ┓┛━┓ ┗┃┛┗ ┏━" + "│╭ ╮╯─╮ ╰│╯╰ ╭─" + "│┌ ┐┘─┐ └│┘└ ┌─" + "║╔ ╗╝═╗ ╚║╝╚ ╔═" + "|+ ++-+ +|++ +-" + "|/ \/-\ \|/\ /-" + ".. .... .... .." + ".o oo.o o.oo o." + "-\ /\|/ /-\/ \|" # railway + "╿┍ ┑┚╼┒ ┕╽┙┖ ┎╾" # knobby pipe + "████▀▀███▀█▀▀██▀" ) -SETS=() # rearranged all pipe chars into individul elements for easier access +SETS=() # rearranged all pipe chars into individul elements for easier access # pipes' -x=() # current position +x=() # current position y=() -l=() # current directions - # 0: up, 1: right, 2: down, 3: left -n=() # new directions -v=() # current types -c=() # current escape codes +l=() # current directions +# 0: up, 1: right, 2: down, 3: left +n=() # new directions +v=() # current types +c=() # current escape codes # selected pipes' -V=() # types (indexes to sets[]) -C=() # color indices for tput setaf -VN=0 # number of selected types -CN=0 # number of selected colors -E=() # pre-generated escape codes from BOLD, NOCOLOR, and C +V=() # types (indexes to sets[]) +C=() # color indices for tput setaf +VN=0 # number of selected types +CN=0 # number of selected colors +E=() # pre-generated escape codes from BOLD, NOCOLOR, and C # switches -RNDSTART=0 # randomize starting position and direction +RNDSTART=0 # randomize starting position and direction BOLD=1 NOCOLOR=0 -KEEPCT=0 # keep pipe color and type - +KEEPCT=0 # keep pipe color and type # print help message in 72-char width print_help() { - local cgap - printf -v cgap '%*s' $((15 - ${#COLORS})) '' - cat <= 0 - is_N() { - [[ -n $1 && -z ${1//[0-9]} ]] - } + # test if $1 is a natural number in decimal, an integer >= 0 + is_N() { + [[ -n $1 && -z ${1//[0-9]/} ]] + } + # test if $1 is a hexadecimal string + is_hex() { + [[ -n $1 && -z ${1//[0-9A-Fa-f]/} ]] + } - # test if $1 is a hexadecimal string - is_hex() { - [[ -n $1 && -z ${1//[0-9A-Fa-f]} ]] - } + # print error message for invalid argument to standard error, this + # - mimics getopts error message + # - use all positional parameters as error message + # - has a newline appended + # $arg and $OPTARG are the option name and argument set by getopts. + pearg() { + printf "%s: -$arg invalid argument -- $OPTARG; %s\n" "$0" "$*" >&2 + } - - # print error message for invalid argument to standard error, this - # - mimics getopts error message - # - use all positional parameters as error message - # - has a newline appended - # $arg and $OPTARG are the option name and argument set by getopts. - pearg() { - printf "%s: -$arg invalid argument -- $OPTARG; %s\n" "$0" "$*" >&2 - } - - - OPTIND=1 - while getopts "p:t:c:f:s:r:RBCKhv" arg; do + OPTIND=1 + while getopts "p:t:c:f:s:r:RBCKhv" arg; do case $arg in - p) - if is_N "$OPTARG" && ((OPTARG > 0)); then - p=$OPTARG - else - pearg 'must be an integer and greater than 0' - return 1 - fi - ;; - t) - if [[ "$OPTARG" = c???????????????? ]]; then - V+=(${#sets[@]}) - sets+=("${OPTARG:1}") - elif is_N "$OPTARG" && ((OPTARG < ${#sets[@]})); then - V+=($OPTARG) - else - pearg 'must be an integer and from 0 to' \ - "$((${#sets[@]} - 1)); or a custom type" - return 1 - fi - ;; - c) - if [[ $OPTARG == '#'* ]]; then - if ! is_hex "${OPTARG:1}"; then - pearg 'unrecognized hexadecimal string' - return 1 - fi - if ((16$OPTARG >= COLORS)); then - pearg 'hexadecimal must be from #0 to' \ - "#$(printf '%X' $((COLORS - 1)))" - return 1 - fi - C+=($((16$OPTARG))) - elif is_N "$OPTARG" && ((OPTARG < COLORS)); then - C+=($OPTARG) - else - pearg "must be an integer and from 0 to $((COLORS - 1));" \ - 'or a hexadecimal string with # prefix' - return 1 - fi - ;; - f) - if is_N "$OPTARG" && ((OPTARG >= 20 && OPTARG <= 100)); then - f=$OPTARG - else - pearg 'must be an integer and from 20 to 100' - return 1 - fi - ;; - s) - if is_N "$OPTARG" && ((OPTARG >= 5 && OPTARG <= 15)); then - s=$OPTARG - else - pearg 'must be an integer and from 5 to 15' - return 1 - fi - ;; - r) - if is_N "$OPTARG"; then - r=$OPTARG - else - pearg 'must be a non-negative integer' - return 1 - fi - ;; - R) RNDSTART=1;; - B) BOLD=0;; - C) NOCOLOR=1;; - K) KEEPCT=1;; - h) - print_help - exit 0 - ;; - v) echo "$(basename -- "$0") $VERSION" - exit 0 - ;; - *) - return 1 - esac - done - - shift $((OPTIND - 1)) - if (($#)); then - printf "$0: illegal arguments -- $*; no arguments allowed\n" >&2 + p) + if is_N "$OPTARG" && ((OPTARG > 0)); then + p=$OPTARG + else + pearg 'must be an integer and greater than 0' return 1 - fi -} + fi + ;; + t) + if [[ "$OPTARG" = c???????????????? ]]; then + V+=(${#sets[@]}) + sets+=("${OPTARG:1}") + elif is_N "$OPTARG" && ((OPTARG < ${#sets[@]})); then + V+=($OPTARG) + else + pearg 'must be an integer and from 0 to' \ + "$((${#sets[@]} - 1)); or a custom type" + return 1 + fi + ;; + c) + if [[ $OPTARG == '#'* ]]; then + if ! is_hex "${OPTARG:1}"; then + pearg 'unrecognized hexadecimal string' + return 1 + fi + if ((16$OPTARG >= COLORS)); then + pearg 'hexadecimal must be from #0 to' \ + "#$(printf '%X' $((COLORS - 1)))" + return 1 + fi + C+=($((16$OPTARG))) + elif is_N "$OPTARG" && ((OPTARG < COLORS)); then + C+=($OPTARG) + else + pearg "must be an integer and from 0 to $((COLORS - 1));" \ + 'or a hexadecimal string with # prefix' + return 1 + fi + ;; + f) + if is_N "$OPTARG" && ((OPTARG >= 20 && OPTARG <= 100)); then + f=$OPTARG + else + pearg 'must be an integer and from 20 to 100' + return 1 + fi + ;; + s) + if is_N "$OPTARG" && ((OPTARG >= 5 && OPTARG <= 15)); then + s=$OPTARG + else + pearg 'must be an integer and from 5 to 15' + return 1 + fi + ;; + r) + if is_N "$OPTARG"; then + r=$OPTARG + else + pearg 'must be a non-negative integer' + return 1 + fi + ;; + R) RNDSTART=1 ;; + B) BOLD=0 ;; + C) NOCOLOR=1 ;; + K) KEEPCT=1 ;; + h) + print_help + exit 0 + ;; + v) + echo "$(basename -- "$0") $VERSION" + exit 0 + ;; + *) + return 1 + ;; + esac + done + shift $((OPTIND - 1)) + if (($#)); then + printf "$0: illegal arguments -- $*; no arguments allowed\n" >&2 + return 1 + fi +} cleanup() { - # clear out standard input - read -t 0.001 && cat /dev/null + # clear out standard input + read -t 0.001 && cat /dev/null - tput reset # fix for konsole, see pipeseroni/pipes.sh#43 - tput rmcup - tput cnorm - stty echo - printf "$SGR0" - exit 0 + tput reset # fix for konsole, see pipeseroni/pipes.sh#43 + tput rmcup + tput cnorm + stty echo + printf "$SGR0" + exit 0 } - resize() { - w=$(tput cols) h=$(tput lines) + w=$(tput cols) h=$(tput lines) } - init_pipes() { - # +_CP_init_pipes - local i + # +_CP_init_pipes + local i - ci=$((KEEPCT ? 0 : CN * RANDOM / M)) - vi=$((KEEPCT ? 0 : VN * RANDOM / M)) - for ((i = 0; i < p; i++)); do - (( - n[i] = 0, - l[i] = RNDSTART ? RANDOM % 4 : 0, - x[i] = RNDSTART ? w * RANDOM / M : w / 2, - y[i] = RNDSTART ? h * RANDOM / M : h / 2, - v[i] = V[vi] - )) - c[i]=${E[ci]} - ((ci = (ci + 1) % CN, vi = (vi + 1) % VN)) - done - # -_CP_init_pipes + ci=$((KEEPCT ? 0 : CN * RANDOM / M)) + vi=$((KEEPCT ? 0 : VN * RANDOM / M)) + for ((i = 0; i < p; i++)); do + ((\ + n[i] = 0, \ + l[i] = RNDSTART ? RANDOM % 4 : 0, \ + x[i] = RNDSTART ? w * RANDOM / M : w / 2, \ + y[i] = RNDSTART ? h * RANDOM / M : h / 2, \ + v[i] = V[vi])) + + c[i]=${E[ci]} + ((ci = (ci + 1) % CN, vi = (vi + 1) % VN)) + done + # -_CP_init_pipes } - init_screen() { - stty -echo - tput smcup - tput civis - tput clear - trap cleanup HUP TERM + stty -echo + tput smcup + tput civis + tput clear + trap cleanup HUP TERM - resize - trap resize SIGWINCH + resize + trap resize SIGWINCH } - main() { - # simple pre-check of TERM, tput's error message should be enough - tput -T "$TERM" sgr0 >/dev/null || return $? + # simple pre-check of TERM, tput's error message should be enough + tput -T "$TERM" sgr0 >/dev/null || return $? - # +_CP_init_termcap_vars - COLORS=$(tput colors) # COLORS - 1 == maximum color index for -c argument - SGR0=$(tput sgr0) - SGR_BOLD=$(tput bold) - # -_CP_init_termcap_vars + # +_CP_init_termcap_vars + COLORS=$(tput colors) # COLORS - 1 == maximum color index for -c argument + SGR0=$(tput sgr0) + SGR_BOLD=$(tput bold) + # -_CP_init_termcap_vars - parse "$@" || return $? + parse "$@" || return $? - # +_CP_init_VC - # set default values if not by options - ((${#V[@]})) || V=(0) - VN=${#V[@]} - ((${#C[@]})) || C=(1 2 3 4 5 6 7 0) - CN=${#C[@]} - # -_CP_init_VC + # +_CP_init_VC + # set default values if not by options + ((${#V[@]})) || V=(0) + VN=${#V[@]} + ((${#C[@]})) || C=(1 2 3 4 5 6 7 0) + CN=${#C[@]} + # -_CP_init_VC - # +_CP_init_E - # generate E[] based on BOLD (SGR_BOLD), NOCOLOR, and C for each element in - # C, a corresponding element in E[] = - # SGR0 - # + SGR_BOLD, if BOLD - # + tput setaf C, if !NOCOLOR - local i - for ((i = 0; i < CN; i++)) { - E[i]=$SGR0 - ((BOLD)) && E[i]+=$SGR_BOLD - ((NOCOLOR)) || E[i]+=$(tput setaf ${C[i]}) - } - # -_CP_init_E + # +_CP_init_E + # generate E[] based on BOLD (SGR_BOLD), NOCOLOR, and C for each element in + # C, a corresponding element in E[] = + # SGR0 + # + SGR_BOLD, if BOLD + # + tput setaf C, if !NOCOLOR + local i + for ((i = 0; i < CN; i++)); do + E[i]=$SGR0 + ((BOLD)) && E[i]+=$SGR_BOLD + ((NOCOLOR)) || E[i]+=$(tput setaf ${C[i]}) + done + # -_CP_init_E - # +_CP_init_SETS - local i j - for ((i = 0; i < ${#sets[@]}; i++)) { - for ((j = 0; j < 16; j++)) { - SETS+=("${sets[i]:j:1}") - } - } - unset i j - # -_CP_init_SETS - - init_screen - init_pipes - - # any key press exits the loop and this script - trap 'break 2' INT - - local i - while REPLY=; do - read -t 0.0$((1000 / f)) -n 1 2>/dev/null - case "$REPLY" in - P) ((s = s < 15 ? s + 1 : s));; - O) ((s = s > 3 ? s - 1 : s));; - F) ((f = f < 100 ? f + 1 : f));; - D) ((f = f > 20 ? f - 1 : f));; - B) ((BOLD = (BOLD + 1) % 2));; - C) ((NOCOLOR = (NOCOLOR + 1) % 2));; - K) ((KEEPCT = (KEEPCT + 1) % 2));; - ?) break;; - esac - for ((i = 0; i < p; i++)); do - # New position: - # l[] direction = 0: up, 1: right, 2: down, 3: left - # +_CP_newpos - ((l[i] % 2)) && ((x[i] += -l[i] + 2, 1)) || ((y[i] += l[i] - 1)) - # -_CP_newpos - - # Loop on edges (change color on loop): - # +_CP_warp - ((!KEEPCT && (x[i] >= w || x[i] < 0 || y[i] >= h || y[i] < 0))) \ - && { c[i]=${E[CN * RANDOM / M]}; ((v[i] = V[VN * RANDOM / M])); } - ((x[i] = (x[i] + w) % w, - y[i] = (y[i] + h) % h)) - # -_CP_warp - - # new turning direction: - # $((s - 1)) in $s, going straight, therefore n[i] == l[i]; - # and 1 in $s that pipe makes a right or left turn - # - # s * RANDOM / M - 1 == 0 - # n[i] == -1 - # => n[i] == l[i] + 1 or l[i] - 1 - # +_CP_newdir - (( - n[i] = s * RANDOM / M - 1, - n[i] = n[i] >= 0 ? l[i] : l[i] + (2 * (RANDOM % 2) - 1), - n[i] = (n[i] + 4) % 4 - )) - # -_CP_newdir - - # Print: - # +_CP_print - printf '\e[%d;%dH%s%s' \ - $((y[i] + 1)) $((x[i] + 1)) ${c[i]} \ - "${SETS[v[i] * 16 + l[i] * 4 + n[i]]}" - # -_CP_print - l[i]=${n[i]} - done - ((r > 0 && t * p >= r)) && tput reset && tput civis && t=0 || ((t++)) + # +_CP_init_SETS + local i j + for ((i = 0; i < ${#sets[@]}; i++)); do + for ((j = 0; j < 16; j++)); do + SETS+=("${sets[i]:j:1}") done + done + unset i j + # -_CP_init_SETS - cleanup + init_screen + init_pipes + + # any key press exits the loop and this script + trap 'break 2' INT + + local i + while REPLY=; do + read -t 0.0$((1000 / f)) -n 1 2>/dev/null + case "$REPLY" in + P) ((s = s < 15 ? s + 1 : s)) ;; + O) ((s = s > 3 ? s - 1 : s)) ;; + F) ((f = f < 100 ? f + 1 : f)) ;; + D) ((f = f > 20 ? f - 1 : f)) ;; + B) ((BOLD = (BOLD + 1) % 2)) ;; + C) ((NOCOLOR = (NOCOLOR + 1) % 2)) ;; + K) ((KEEPCT = (KEEPCT + 1) % 2)) ;; + ?) break ;; + esac + for ((i = 0; i < p; i++)); do + # New position: + # l[] direction = 0: up, 1: right, 2: down, 3: left + # +_CP_newpos + ((l[i] % 2)) && ((x[i] += -l[i] + 2, 1)) || ((y[i] += l[i] - 1)) + # -_CP_newpos + + # Loop on edges (change color on loop): + # +_CP_warp + ((!KEEPCT && (x[i] >= w || x[i] < 0 || y[i] >= h || y[i] < 0))) && + { + c[i]=${E[CN * RANDOM / M]} + ((v[i] = V[VN * RANDOM / M])) + } + ((x[i] = (x[i] + w) % w, \ + y[i] = (y[i] + h) % h)) + # -_CP_warp + + # new turning direction: + # $((s - 1)) in $s, going straight, therefore n[i] == l[i]; + # and 1 in $s that pipe makes a right or left turn + # + # s * RANDOM / M - 1 == 0 + # n[i] == -1 + # => n[i] == l[i] + 1 or l[i] - 1 + # +_CP_newdir + ((\ + n[i] = s * RANDOM / M - 1, \ + n[i] = n[i] >= 0 ? l[i] : l[i] + (2 * (RANDOM % 2) - 1), \ + n[i] = (n[i] + 4) % 4)) + + # -_CP_newdir + + # Print: + # +_CP_print + printf '\e[%d;%dH%s%s' \ + $((y[i] + 1)) $((x[i] + 1)) ${c[i]} \ + "${SETS[v[i] * 16 + l[i] * 4 + n[i]]}" + # -_CP_print + l[i]=${n[i]} + done + ((r > 0 && t * p >= r)) && tput reset && tput civis && t=0 || ((t++)) + done + + cleanup } - # when being sourced, $0 == bash, only invoke main when they are the same -[[ "$0" != "$BASH_SOURCE" ]] || main "$@" +[[ "$0" != "$BASH_SOURCE" ]] || main "$@" diff --git a/scripts/theme b/scripts/theme index ba26db0..fa01435 100755 --- a/scripts/theme +++ b/scripts/theme @@ -51,7 +51,7 @@ echo "$themes" | grep -Fxq "$theme" || exit 1 state_dir="${XDG_STATE_HOME:-$HOME/.local/state}" mkdir -p "$state_dir" -printf '%s\n' "$theme" > "$state_dir/theme" +printf '%s\n' "$theme" >"$state_dir/theme" export THEME="$theme" case "$(uname)" in @@ -81,7 +81,6 @@ Linux) pkill -USR2 waybar } - hypr_themes="$cfg/hypr/themes" [ -f "$hypr_themes/$theme.conf" ] && { ln -sf "$hypr_themes/$theme.conf" "$hypr_themes/theme.conf" @@ -132,8 +131,8 @@ if command -v claude >/dev/null 2>&1 && command -v jq >/dev/null 2>&1; then daylight) claude_theme='light' ;; esac [ -f "$CLAUDE_CONFIG" ] && { - jq ".theme=\"$claude_theme\"" "$CLAUDE_CONFIG" > "$CLAUDE_CONFIG.tmp" && - mv "$CLAUDE_CONFIG.tmp" "$CLAUDE_CONFIG" + jq ".theme=\"$claude_theme\"" "$CLAUDE_CONFIG" >"$CLAUDE_CONFIG.tmp" && + mv "$CLAUDE_CONFIG.tmp" "$CLAUDE_CONFIG" } fi diff --git a/scripts/x b/scripts/x index f1afd98..f16667f 100755 --- a/scripts/x +++ b/scripts/x @@ -15,7 +15,8 @@ require() { done } -cmd="$1"; shift +cmd="$1" +shift case "$cmd" in setup)