#!/bin/bash # wifi-menu.sh — wofi-based WiFi network picker using nmcli # Lists available networks, connects on selection. # # wofi needs WAYLAND_DISPLAY (it IS a Wayland client itself, so it can # usually find the socket, but on a non-standard socket it's safer to # be explicit). Source restore-wayland-env.sh at the top. # shellcheck source=restore-wayland-env.sh source "$HOME/.config/sway/restore-wayland-env.sh" # Get list of networks: SSID, signal, security SELECTED=$(nmcli -t -f SSID,SIGNAL,SECURITY device wifi list --rescan yes 2>/dev/null | \ grep -v '^$' | \ sort -t: -k2 -nr | \ awk -F: '{ sig = $2 + 0 if (sig > 75) bars = "████" else if (sig > 50) bars = "███░" else if (sig > 25) bars = "██░░" else bars = "█░░░" sec = ($3 != "" && $3 != "--") ? " 󰌾" : "" printf "%s %s%s\n", bars, $1, sec }' | \ wofi --dmenu --insensitive --prompt "WiFi" -W 400 -H 500 2>/dev/null) # Exit if nothing selected [ -z "$SELECTED" ] && exit 0 # Extract SSID (everything after the signal bars + spaces) SSID=$(echo "$SELECTED" | sed 's/^[█░ ]* //; s/ 🔒$//') # Connect. No -t flag → mako's default-timeout (5000ms) controls the duration. # Earlier used -t 3000/-t 5000; the inconsistency meant the user could # blink and miss the success notification. Let mako config drive the value. nmcli device wifi connect "$SSID" 2>&1 | grep -q "successfully" && \ notify-send "WiFi" "Connected to $SSID" || \ notify-send "WiFi" "Failed to connect to $SSID"