mirror of
https://github.com/dcarrillo/dotfiles.git
synced 2024-12-23 07:18:00 +00:00
63 lines
1.3 KiB
Bash
Executable File
63 lines
1.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
#
|
|
# nmcli connection switching from a rofi menu.
|
|
# When a network is selected its status is switched from UP to DOWN or vice versa.
|
|
#
|
|
# WARNING, connection name can't contain a # or | symbol
|
|
#
|
|
|
|
ROFI="rofi -dmenu
|
|
-sep #
|
|
-i -p Network:
|
|
-theme orange
|
|
-location 3
|
|
-yoffset +45
|
|
-xoffset -80
|
|
-width 30
|
|
"
|
|
|
|
build_rofi_menu()
|
|
{
|
|
while read -r line
|
|
do
|
|
name="$(echo "$line" | cut -d':' -f1)"
|
|
dtype="$(echo "$line" | cut -d':' -f2)"
|
|
device="$(echo "$line" | cut -d':' -f3)"
|
|
|
|
[ -z "$device" ] && status= || status=
|
|
dtype=${dtype##*-}
|
|
option=$(printf '%-35s | %-15s | %s\n' "$name" "$dtype" $status)
|
|
|
|
menu="$menu # $option"
|
|
done < <(nmcli -c no --terse -f NAME,TYPE,DEVICE connection show)
|
|
|
|
echo "$menu" | cut -c 3-
|
|
}
|
|
|
|
switch_connections()
|
|
{
|
|
name="$1"
|
|
status=$2
|
|
|
|
if [ "$status" = "" ]; then
|
|
nmcli connection down "$name"
|
|
else
|
|
nmcli connection up "$name"
|
|
fi
|
|
}
|
|
|
|
main()
|
|
{
|
|
menu=$(build_rofi_menu)
|
|
choice=$(echo "$menu" | $ROFI)
|
|
[ "$?" -ne 0 ] && return 1
|
|
|
|
name=$(echo "$choice" | cut -d '|' -f 1 | awk '{$1=$1;print}')
|
|
stat=$(echo "$choice" | cut -d '|' -f 3 | awk '{$1=$1;print}')
|
|
|
|
switch_connections "$name" "$stat"
|
|
}
|
|
|
|
main
|