diff --git a/config/hypr/hyprland.conf b/config/hypr/hyprland.conf index dfce739..910cccc 100644 --- a/config/hypr/hyprland.conf +++ b/config/hypr/hyprland.conf @@ -191,7 +191,4 @@ windowrule = match:class ^(xdg-desktop-portal-hyprland)$, size monitor_w * 0.5 m windowrule = match:class ^(org.pulseaudio.pavucontrol)$, float on windowrule = match:class ^(org.pulseaudio.pavucontrol)$, size 600 450 -windowrule = match:class ^(iwgtk)$, float on -windowrule = match:class ^(iwgtk)$, size 400 500 - windowrule = match:class ^([Ss]ioyek)$, tile on diff --git a/home/modules/ui.nix b/home/modules/ui.nix index e9ad63d..a027386 100644 --- a/home/modules/ui.nix +++ b/home/modules/ui.nix @@ -92,7 +92,6 @@ in gsettings-desktop-schemas (python3.withPackages (ps: [ ps.pillow ])) pavucontrol - iwgtk ]; programs.waybar = { @@ -194,7 +193,7 @@ in tooltip-format-wifi = "SSID: {essid}\nSignal: {signalStrength}%\nDownload: {bandwidthDownBits}\nUpload: {bandwidthUpBits}\nIP: {ipaddr}"; tooltip-format-ethernet = "Interface: {ifname}\nIP: {ipaddr}/{cidr}\nDownload: {bandwidthDownBits}\nUpload: {bandwidthUpBits}"; tooltip-format-disconnected = "Wireless LAN disconnected"; - on-click = "pgrep iwgtk && pkill iwgtk || iwgtk"; + on-click = "ctl wifi pick"; }; battery = { diff --git a/scripts/ctl b/scripts/ctl index a0e4179..88f7b91 100755 --- a/scripts/ctl +++ b/scripts/ctl @@ -136,6 +136,42 @@ volume) fi notify-send -a ctl -t 2500 -r 5556 "$icon $bar" ;; +wifi) + case "$2" in + 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; } + 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/' | \ + sed 's/^[[:space:]>]*//' | \ + sed 's/[[:space:]]\{3,\}.*//' | \ + sed 's/[[:space:]]*$//' | \ + grep -v '^-') + [ -z "$networks" ] && exit 0 + count=$(printf '%s\n' "$networks" | wc -l) + ssid=$(printf '%s\n' "$networks" | fuzzel --dmenu --prompt="wifi: " --no-icons --lines="$count") + [ -z "$ssid" ] && exit 0 + 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" + elif iwctl station "$station" get-networks 2>/dev/null | sed 's/\x1b\[[0-9;]*[a-zA-Z]//g' | grep -F "$ssid" | grep -qi "open"; then + iwctl station "$station" connect "$ssid" + else + pass=$(printf '' | fuzzel --dmenu --prompt="passphrase: " --no-icons --password --lines=0) + [ -z "$pass" ] && exit 0 + iwctl station "$station" connect "$ssid" --passphrase "$pass" + fi + ;; + *) + echo "Usage: ctl wifi {pick}" >&2 + exit 1 + ;; + esac + ;; media) if pgrep -x wf-recorder >/dev/null 2>&1; then pkill -INT wf-recorder @@ -375,7 +411,7 @@ idle) fi ;; *) - echo "Usage: ctl {screenshot|keyboard|audio|brightness|volume|media|wallpaper|power|idle}" >&2 + echo "Usage: ctl {screenshot|keyboard|audio|wifi|brightness|volume|media|wallpaper|power|idle}" >&2 exit 1 ;; esac