From: Andre Ramnitz Date: Thu, 29 Aug 2024 00:42:35 +0000 (+0200) Subject: local: wofi-wifi-menu.sh X-Git-Tag: v0.2~107 X-Git-Url: https://git.ramnitz.eu/?a=commitdiff_plain;h=58f34c7d37f54ed617e4b5633e05369876e66e9d;p=dotfiles.git local: wofi-wifi-menu.sh adapt wofi-wifi-menu.sh to fuzzel --- diff --git a/local/dot-local/bin/fuzzel-wifi-menu.sh b/local/dot-local/bin/fuzzel-wifi-menu.sh new file mode 100755 index 00000000..73fdc7b6 --- /dev/null +++ b/local/dot-local/bin/fuzzel-wifi-menu.sh @@ -0,0 +1,139 @@ +#!/bin/bash +# original upstream: https://gitlab.com/podobu/fuzzel --config ~/.config/fuzzel/fuzzel-centered.ini-wifi-menu + + +if [ $1 ]; then + echo -en "\ +Usage: $(basename $0) [argument] + + Displays a fuzzel --config ~/.config/fuzzel/fuzzel-centered.ini menu to select a Wi-Fi network. + If at least one argument is given, it displays this help. + + Nerd Fonts icons are used. A font can be downloaded at: + https://www.nerdfonts.com/ + + Dependencies: networkManager, fuzzel --config ~/.config/fuzzel/fuzzel-centered.ini. +" + exit +fi + +ask-password () { + show_message=${1:-"Show password"} + hide_message=${2:-"Hide password"} + middle_message=${3:-} + cancel_message=${4:-"Cancel"} + last_mesagge=${5:-} + wifi_password="" + until [[ "$wifi_password" =~ ^[^󰛑󰛐] && -n $wifi_password ]]; do + if [[ "$wifi_password" =~ ^󰛑 ]]; then + wifi_password=$(echo -e "󰛐 ${show_message}${middle_message}\n ${cancel_message}$last_mesagge" | fuzzel --config ~/.config/fuzzel/fuzzel-centered.ini --dmenu --password --prompt "Password:") + else + wifi_password=$(echo -e "󰛑 ${hide_message}${middle_message}\n ${cancel_message}$last_mesagge" | fuzzel --config ~/.config/fuzzel/fuzzel-centered.ini --dmenu --prompt "Password:") + fi + done + echo "$wifi_password" +} + +get-prelist () { + connection_state=$(nmcli --colors no --get-values WIFI general) + disable_message="󰖪 Disable Wi-Fi" + enable_message="󰖩 Enable Wi-Fi" + hidden_message="󰛐 Connect to a hidden network" + forget_message=" Forget Connection" + + if [ "$connection_state" = "enabled" ]; then + echo -e "$disable_message\n$hidden_message\n$forget_message\n" + elif [ "$connection_state" = "disabled" ]; then + echo -e "$enable_message\n$forget_message" + fi +} + +connect-hidden () { + wifi_hidden=$(echo | fuzzel --config ~/.config/fuzzel/fuzzel-centered.ini --dmenu --prompt "Network name") + + if [ -z $wifi_hidden ]; then + exit + fi + + wifi_password=$(ask-password "" "" "\n Without password") + + if [[ "$wifi_password" =~ ^ ]]; then + wifi_password="" + elif [[ "$wifi_password" =~ ^ ]]; then + exit + fi + + nmcli device wifi connect "$wifi_hidden" hidden yes password "$wifi_password" +} + +forget-connection () { + chosen=$(echo "$(nmcli --colors no --get-values TYPE,NAME connection show)" | awk -F ':' '$1 == "802-11-wireless" {print "󰑩 " $2}' | fuzzel --config ~/.config/fuzzel/fuzzel-centered.ini --dmenu --prompt "Conexión a olvidar:") + + if [ -z "$chosen" ]; then + exit + fi + + chosen=${chosen:3} + sure=$(echo -e " Yes\n No" | fuzzel --config ~/.config/fuzzel/fuzzel-centered.ini --dmenu --prompt "Forget ${chosen}?") + + if [[ "$sure" =~ ^ ]]; then + nmcli connection delete id $chosen + fi +} + +connect-wifi () { + wifi_security=${1:0:1} + wifi_ssid=${1:3} + + if [ $(echo "$(nmcli --colors no --get-values NAME connection show)" | grep --word-regexp "$wifi_ssid") ]; then + nmcli connection up id "$wifi_ssid" + else + if [[ "$wifi_security" =~ ^[󰤪󰤤󰤡] ]]; then + wifi_password=$(ask-password) + if [[ "$wifi_password" =~ ^ ]]; then + exit + fi + fi + nmcli device wifi connect "$wifi_ssid" password "$wifi_password" + fi +} + +wifi_list=$(nmcli --colors no --get-values SECURITY,SIGNAL,SSID,IN-USE device wifi list --rescan auto | awk -F ':' ' +$3 { +if ($1 ~ /^WPA/) + if ($2 > 80) + sub($1, "󰤪") + else if ($2 > 60) + sub($1, "󰤤") + else + sub($1, "󰤡") +else if ($1 == "") + if ($2 > 80) + sub($1, "󰤨") + else if ($2 > 60) + sub($1, "󰤢") + else + sub($1, "󰤟") +if ($4 == "*") + sub($1, "") +print $1 " " $3 +} +') + +chosen=$(echo -e "$(get-prelist)${wifi_list:+\n}$wifi_list" | fuzzel --config ~/.config/fuzzel/fuzzel-centered.ini --dmenu --prompt "Wi-Fi SSID:") + +if [ -z "$chosen" ]; then + exit +elif [[ "$chosen" =~ ^󰖩 ]]; then + nmcli radio wifi on +elif [[ "$chosen" =~ ^󰖪 ]]; then + nmcli radio wifi off +elif [[ "$chosen" =~ ^󰛐 ]]; then + connect-hidden +elif [[ "$chosen" =~ ^ ]]; then + forget-connection +elif [[ "$chosen" =~ ^ ]]; then + nmcli connection down id "${chosen:3}" +else + connect-wifi "$chosen" +fi diff --git a/local/dot-local/bin/wofi-wifi-menu.sh b/local/dot-local/bin/wofi-wifi-menu.sh new file mode 100755 index 00000000..6aaee8a0 --- /dev/null +++ b/local/dot-local/bin/wofi-wifi-menu.sh @@ -0,0 +1,139 @@ +#!/bin/bash +# original upstream: https://gitlab.com/podobu/wofi-wifi-menu + + +if [ $1 ]; then + echo -en "\ +Usage: $(basename $0) [argument] + + Displays a wofi menu to select a Wi-Fi network. + If at least one argument is given, it displays this help. + + Nerd Fonts icons are used. A font can be downloaded at: + https://www.nerdfonts.com/ + + Dependencies: networkManager, wofi. +" + exit +fi + +ask-password () { + show_message=${1:-"Show password"} + hide_message=${2:-"Hide password"} + middle_message=${3:-} + cancel_message=${4:-"Cancel"} + last_mesagge=${5:-} + wifi_password="" + until [[ "$wifi_password" =~ ^[^󰛑󰛐] && -n $wifi_password ]]; do + if [[ "$wifi_password" =~ ^󰛑 ]]; then + wifi_password=$(echo -e "󰛐 ${show_message}${middle_message}\n ${cancel_message}$last_mesagge" | wofi --dmenu --password --prompt "Password:") + else + wifi_password=$(echo -e "󰛑 ${hide_message}${middle_message}\n ${cancel_message}$last_mesagge" | wofi --dmenu --prompt "Password:") + fi + done + echo "$wifi_password" +} + +get-prelist () { + connection_state=$(nmcli --colors no --get-values WIFI general) + disable_message="󰖪 Disable Wi-Fi" + enable_message="󰖩 Enable Wi-Fi" + hidden_message="󰛐 Connect to a hidden network" + forget_message=" Forget Connection" + + if [ "$connection_state" = "enabled" ]; then + echo -e "$disable_message\n$hidden_message\n$forget_message\n" + elif [ "$connection_state" = "disabled" ]; then + echo -e "$enable_message\n$forget_message" + fi +} + +connect-hidden () { + wifi_hidden=$(echo | wofi --dmenu --prompt "Network name") + + if [ -z $wifi_hidden ]; then + exit + fi + + wifi_password=$(ask-password "" "" "\n Without password") + + if [[ "$wifi_password" =~ ^ ]]; then + wifi_password="" + elif [[ "$wifi_password" =~ ^ ]]; then + exit + fi + + nmcli device wifi connect "$wifi_hidden" hidden yes password "$wifi_password" +} + +forget-connection () { + chosen=$(echo "$(nmcli --colors no --get-values TYPE,NAME connection show)" | awk -F ':' '$1 == "802-11-wireless" {print "󰑩 " $2}' | wofi --dmenu --insensitive --prompt "Conexión a olvidar:") + + if [ -z "$chosen" ]; then + exit + fi + + chosen=${chosen:3} + sure=$(echo -e " Yes\n No" | wofi --dmenu --insensitive --prompt "Forget ${chosen}?") + + if [[ "$sure" =~ ^ ]]; then + nmcli connection delete id $chosen + fi +} + +connect-wifi () { + wifi_security=${1:0:1} + wifi_ssid=${1:3} + + if [ $(echo "$(nmcli --colors no --get-values NAME connection show)" | grep --word-regexp "$wifi_ssid") ]; then + nmcli connection up id "$wifi_ssid" + else + if [[ "$wifi_security" =~ ^[󰤪󰤤󰤡] ]]; then + wifi_password=$(ask-password) + if [[ "$wifi_password" =~ ^ ]]; then + exit + fi + fi + nmcli device wifi connect "$wifi_ssid" password "$wifi_password" + fi +} + +wifi_list=$(nmcli --colors no --get-values SECURITY,SIGNAL,SSID,IN-USE device wifi list --rescan auto | awk -F ':' ' +$3 { +if ($1 ~ /^WPA/) + if ($2 > 80) + sub($1, "󰤪") + else if ($2 > 60) + sub($1, "󰤤") + else + sub($1, "󰤡") +else if ($1 == "") + if ($2 > 80) + sub($1, "󰤨") + else if ($2 > 60) + sub($1, "󰤢") + else + sub($1, "󰤟") +if ($4 == "*") + sub($1, "") +print $1 " " $3 +} +') + +chosen=$(echo -e "$(get-prelist)${wifi_list:+\n}$wifi_list" | wofi --dmenu --insensitive --prompt "Wi-Fi SSID:") + +if [ -z "$chosen" ]; then + exit +elif [[ "$chosen" =~ ^󰖩 ]]; then + nmcli radio wifi on +elif [[ "$chosen" =~ ^󰖪 ]]; then + nmcli radio wifi off +elif [[ "$chosen" =~ ^󰛐 ]]; then + connect-hidden +elif [[ "$chosen" =~ ^ ]]; then + forget-connection +elif [[ "$chosen" =~ ^ ]]; then + nmcli connection down id "${chosen:3}" +else + connect-wifi "$chosen" +fi