From 0afc547def7dfb02039f06d37a8dc88d100ddffa Mon Sep 17 00:00:00 2001 From: Barrett Ruth Date: Mon, 2 Mar 2026 12:08:35 -0500 Subject: [PATCH] fix(scripts): add for refresh --- home/modules/ui.nix | 3 ++ scripts/ctl | 93 +++++++++++++++++++++++++-------------------- 2 files changed, 54 insertions(+), 42 deletions(-) diff --git a/home/modules/ui.nix b/home/modules/ui.nix index a027386..170fc0e 100644 --- a/home/modules/ui.nix +++ b/home/modules/ui.nix @@ -357,6 +357,9 @@ in [dmenu] mode=text exit-immediately-if-empty=no + + [key-bindings] + custom-1=Control+r ''; xdg.configFile."fuzzel/themes/midnight.ini".text = mkFuzzelTheme config.palettes.midnight; xdg.configFile."fuzzel/themes/daylight.ini".text = mkFuzzelTheme config.palettes.daylight; diff --git a/scripts/ctl b/scripts/ctl index 6c1e82a..d907b72 100755 --- a/scripts/ctl +++ b/scripts/ctl @@ -142,49 +142,58 @@ wifi) 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; } - iwctl station "$station" scan 2>/dev/null - sleep 1 - networks=$(iwctl station "$station" get-networks 2>/dev/null | \ - sed 's/\x1b\[[0-9;]*[a-zA-Z]//g' | \ - awk 'NR>4 && /\S/ && !/^[[:space:]]*-/' | \ - sed 's/^[[:space:]>]*//' | \ - awk '{ - sub(/[[:space:]]*$/, "") - i = index($0, " ") - if (i > 0) { - ssid = substr($0, 1, i - 1) - rest = substr($0, i) - sub(/^[[:space:]]*/, "", rest) - j = index(rest, " ") - if (j > 0) { - security = substr(rest, 1, j - 1) - signal = substr(rest, j) - sub(/^[[:space:]]*/, "", signal) - sub(/[[:space:]]*$/, "", signal) - } else { - security = rest - signal = "" + while :; do + iwctl station "$station" scan 2>/dev/null + sleep 1 + 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:]>]*/, "") + sub(/[[:space:]]*$/, "") + i = index($0, " ") + if (i > 0) { + ssid = substr($0, 1, i - 1) + rest = substr($0, i) + sub(/^[[:space:]]*/, "", rest) + j = index(rest, " ") + if (j > 0) { + security = substr(rest, 1, j - 1) + signal = substr(rest, j) + sub(/^[[:space:]]*/, "", signal) + sub(/[[:space:]]*$/, "", signal) + } else { + security = rest + signal = "" + } + sub(/[[:space:]]*$/, "", ssid) + sub(/[[:space:]]*$/, "", security) + printf "%s\t%s\t%s\t%s\n", ssid, security, signal, active } - sub(/[[:space:]]*$/, "", ssid) - sub(/[[:space:]]*$/, "", security) - printf "%s\t%s\t%s\n", ssid, security, signal - } - }') - [ -z "$networks" ] && exit 0 - w1=$(printf '%s\n' "$networks" | awk -F'\t' 'BEGIN{m=12}{l=length($1);if(l>m)m=l}END{print m}') - w2=$(printf '%s\n' "$networks" | awk -F'\t' 'BEGIN{m=8}{l=length($2);if(l>m)m=l}END{print m}') - w3=$(printf '%s\n' "$networks" | awk -F'\t' 'BEGIN{m=6}{l=length($3);if(l>m)m=l}END{print m}') - fw=$((w1 + 4 + w2 + 4 + w3 + 10)) - sep=$(awk -v n="$fw" 'BEGIN{for(i=0;im)m=l}END{print m}') + w2=$(printf '%s\n' "$networks" | awk -F'\t' 'BEGIN{m=8}{l=length($2);if(l>m)m=l}END{print m}') + w3=$(printf '%s\n' "$networks" | awk -F'\t' 'BEGIN{m=6}{l=length($3);if(l>m)m=l}END{print m}') + fw=$((w1 + 4 + w2 + 4 + w3 + 14)) + sep=$(awk -v n="$fw" '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 \ + --font="monospace:size=12" --width="$fw") + rc=$? + [ "$rc" = 10 ] && continue + [ -z "$ssid" ] && exit 0 + break + done known=$(iwctl known-networks list 2>/dev/null | sed 's/\x1b\[[0-9;]*[a-zA-Z]//g') if printf '%s' "$known" | grep -qF "$ssid"; then iwctl station "$station" connect "$ssid"