#!/usr/bin/env bash ivpn_status_output () { ivpn status } ivpn_connected () { ivpn status | grep -q '^VPN.*: CONNECTED' } toggle_status () { if ivpn_connected; then ivpn disconnect else ivpn connect -f fi } case $1 in --status) status_output="$(ivpn_status_output)" if echo "$status_output" | grep -q '^VPN.*: CONNECTED'; then # Line after "VPN : CONNECTED" holds server + location, # e.g. "de.gw.ivpn.net [de3.gw.ivpn.net], Frankfurt (DE), Germany" server_line=$(echo "$status_output" | awk '/^VPN.*CONNECTED/{getline; sub(/^[ \t]+/, ""); print}') protocol=$(echo "$status_output" | awk -F': ' '/^[ \t]*Protocol/{print $2}') server_ip=$(echo "$status_output" | awk -F': ' '/^[ \t]*Server IP/{print $2}') endpoint="${server_line%%,*} (${protocol})" location="${server_line#*, } (${server_ip})" echo "{\"text\":\"\",\"class\":\"connected\",\"alt\":\"connected\", \"tooltip\": \"${endpoint}\\n${location}\"}" else echo "{\"text\":\"\",\"class\":\"disconnected\",\"alt\":\"disconnected\", \"tooltip\": \"VPN is not active.\"}" fi ;; --toggle) toggle_status ;; esac