#!/bin/sh # toggle VPN down_not_master () { git -C "$HOME/programs/config_local_arch" branch | awk '!/pp/{print ($1=="*")?$2:$1}' | while read -r v; do nmcli connection down "wg_$v" done } wg_aa_restore_default () { # case seems faster than pipe to grep maybe because case is shell built-in, so I use case # if nmcli -t --fields device,state device | grep -q '^wg_aa:connected$'; then ...; fi case "$(nmcli -t --fields device,state device)" in # stop aa wireguard+swgp server that listen from insp wiregurad+swgp client, start aa wg+swgp connect to ca # use /usr/bin/alacritty instead of /home/xyz/.local/bin/alacritty so script can wait until alacritty exit to run other codes following *wg_aa:connected*) /usr/bin/alacritty -T aa --hold -e sh -c 'echo "Wait for aa sudo prompt and enter password, then manually close this window:"; ssh -t aawg "sudo systemctl stop wg-quick@wg0 && sudo systemctl start wg-quick@wg_ca"';; esac } # no toggle wg_master, I want wg_master to always on by default if ! [ "$1" ] || [ "$1" = master ]; then wg_aa_restore_default down_not_master nmcli connection up wg_master notify-send -u critical 'VPN disabled' exit fi if nmcli -t --fields device,state device | grep -q "^wg_$1:connected$"; then wg_aa_restore_default down_not_master nmcli connection up wg_master notify-send -u critical "$1 VPN disabled" else if [ "$1" = aa ]; then /usr/bin/alacritty -T aa --hold -e sh -c 'echo "Wait for aa sudo prompt and enter password, then manually close this window"; ssh -t aawg "sudo systemctl stop wg-quick@wg_ca && sudo systemctl start wg-quick@wg0"' fi down_not_master nmcli connection down wg_master nmcli connection up "wg_$1" notify-send "$1 VPN enabled" fi