#!/usr/bin/env sh

# Unfortunately it's not easy to directly use Polybar colour values in this
# script so I have to redefine some of my colours here. See the link below for
# more details:
# https://github.com/polybar/polybar/wiki/Formatting#format-tags-inside-polybar-config
color=#bf616a

configs_path="/PATH/TO/CONF/FILES"
connected_interface=$(networkctl | grep -P "\d+ .* wireguard routable" -o | cut -d" " -f2)

connect() {
    selected_config=$(ls $configs_path/*.conf | xargs basename -a -s .conf | dmenu)
    [[ $selected_config ]] && sudo wg-quick up "$configs_path"/"$selected_config".conf
}

disconnect() {
    # Normally we should have a single connected interface but technically
    # there's nothing stopping us from having multiple active intgerfaces so
    # let's do this in a loop:
    for connected_config in $(networkctl | grep -P "\d+ .* wireguard routable" -o | cut -d" " -f2)
    do
        sudo wg-quick down $configs_path/"$connected_config".conf
    done
}

toggle() {
    if [[ $connected_interface ]]
    then
        disconnect
    else
        connect
    fi
}

print() {
    if [[ $connected_interface ]]
    then
        echo %{u"$color"}%{+u}%{T4}%{F"$color"}%{T-}%{F-} "$connected_interface"
    else
        echo %{u"$color"}%{+u}%{T4}%{F"$color"}%{T-}%{F-} 
    fi
}

case "$1" in
    --connect)
        connect
        ;;
    --disconnect)
        disconnect
        ;;
    --toggle)
        toggle
        ;;
    *)
        print
        ;;
esac
