116 lines
3.5 KiB
Bash
116 lines
3.5 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
# rofi config without entry so to make select from available options only
|
|
rofiprompt=theme/passmenu.rasi
|
|
# normal rofi menu
|
|
rofidmenu=theme/passmenu.rasi
|
|
# rofi config for password
|
|
rofipass=theme/passmenu.rasi
|
|
|
|
# Power Status
|
|
flag=$(cat /sys/class/net/wl*/flags)
|
|
|
|
if [ "$flag" = "0x1003" ]; then
|
|
power="On"
|
|
else
|
|
power="Off"
|
|
fi
|
|
|
|
# Connection Status
|
|
state=$(cat /sys/class/net/wl*/operstate)
|
|
|
|
if [ "$state" = "up" ]; then
|
|
status=$(nmcli | grep "^wlp" | sed 's/\ connected\ to/Connected to/' | cut -d ':' -f2)
|
|
else
|
|
status="Disconnected"
|
|
fi
|
|
|
|
# ┌─┐┌─┐┬ ┬┌─┐┬─┐
|
|
# ├─┘│ ││││├┤ ├┬┘
|
|
# ┴ └─┘└┴┘└─┘┴└─
|
|
|
|
powertoggle=$( [ "$flag" = "0x1003" ] && echo "Power Off" || echo "Power On" )
|
|
|
|
powerswitch() {
|
|
if [ "$powertoggle" = "Power Off" ]; then
|
|
nmcli radio wifi off
|
|
elif [ "$powertoggle" = "Power On" ]; then
|
|
nmcli radio wifi on
|
|
fi
|
|
}
|
|
|
|
# ┌─┐┌─┐┌┐┌┌┐┌┌─┐┌─┐┌┬┐
|
|
# │ │ │││││││├┤ │ │
|
|
# └─┘└─┘┘└┘┘└┘└─┘└─┘ ┴
|
|
|
|
connections() {
|
|
list=$(nmcli --fields "SECURITY,SSID" device wifi list | tail -n +2 | sed "s/ */ /g" | sed -E "s/WPA*.?//g" | sed "s/^--//g" | sed "s/ //g")
|
|
networks=$(printf "$list" | rofi -theme $rofiprompt -dmenu -i -hover-select -p "Select Wifi Network
|
|
$status")
|
|
wifi=$( echo "$networks" | sed "s/ //g" | sed "s/ //g" | xargs)
|
|
[ -z "$networks" ] && exit
|
|
nopass="No Password"
|
|
pass=$(printf "$nopass\nCancel" | rofi -theme $rofipass -dmenu -i -hover-select -password -p "Wifi Password")
|
|
|
|
if [ "$pass" = "" ]; then
|
|
exit
|
|
elif [ "$pass" = "$nopass" ]; then
|
|
nmcli dev wifi con "$wifi" && printf "exit" | rofi -theme $rofiprompt -dmenu -only-match -i -p "Successfully Connected to $wifi" && exit
|
|
elif [ "$pass" = "Cancel" ]; then
|
|
exit
|
|
else
|
|
nmcli dev wifi con "$wifi" password "$pass" && printf "exit" | rofi -theme $rofiprompt -dmenu -i -only-match -p "Successfully Connected to $wifi" && exit
|
|
fi
|
|
|
|
printf "exit" | rofi -theme $rofiprompt -dmenu -i -p -only-match "Failed to Connect $wifi" && exit
|
|
}
|
|
|
|
|
|
# ┌┬┐┌─┐┌┐┌┬ ┬┌─┐┬
|
|
# │││├─┤││││ │├─┤│
|
|
# ┴ ┴┴ ┴┘└┘└─┘┴ ┴┴─┘
|
|
|
|
manual() {
|
|
|
|
wifi=$(rofi -theme $rofidmenu -dmenu -i -p "Enter Wifi Name")
|
|
|
|
[ -z "$wifi" ] && exit
|
|
nopass="Run Without Password"
|
|
pass=$(printf "$nopass\nCancel" | rofi -theme $rofipass -dmenu -i -password -p "Wifi Password")
|
|
|
|
if [ "$pass" = "" ]; then
|
|
exit
|
|
elif [ "$pass" = "$nopass" ]; then
|
|
nmcli dev wifi con "$wifi" && printf "exit" | rofi -theme $rofiprompt -dmenu -i -only-match -p "Successfully Connected to $wifi" && exit
|
|
elif [ "$pass" = "Cancel" ]; then
|
|
exit
|
|
else
|
|
nmcli dev wifi con "$wifi" password "$pass" && printf "exit" | rofi -theme $rofiprompt -dmenu -i -only-match -p "Successfully Connected to $wifi" && exit
|
|
fi
|
|
|
|
printf "exit" | rofi -theme $rofiprompt -dmenu -only-match -i -p "Failed to Connect $wifi" && exit
|
|
}
|
|
|
|
# ┌─┐┌─┐┌┬┐┬┌─┐┌┐┌┌─┐
|
|
# │ │├─┘ │ ││ ││││└─┐
|
|
# └─┘┴ ┴ ┴└─┘┘└┘└─┘
|
|
|
|
options="$powertoggle\nConnections\nConnect Manually"
|
|
|
|
rofiwifi=$(printf "$options" | rofi -theme $rofiprompt -dmenu -i -hover-select -p "Wifi
|
|
Powered: $power
|
|
Status: $status")
|
|
|
|
case $rofiwifi in
|
|
$powertoggle)
|
|
powerswitch
|
|
;;
|
|
Connections)
|
|
notify-send "Scanning"
|
|
connections
|
|
;;
|
|
"Connect Manually")
|
|
manual
|
|
esac 2>/dev/null
|
|
|