#!/usr/bin/env bash # Check for VPN connections using nmcli device show # Initialize variables vpn_status="" vpn_tooltip="" vpn_class="disconnected" vpn_count=0 # Get all VPN devices and their details while IFS= read -r device; do if [ -n "$device" ]; then # Get device type and connection device_info=$(nmcli device show "$device" 2>/dev/null) connection=$(echo "$device_info" | grep "GENERAL.CONNECTION:" | awk -F: '{print $2}' | xargs) device_type=$(echo "$device_info" | grep "GENERAL.TYPE:" | awk -F: '{print $2}' | xargs) ip_addr=$(echo "$device_info" | grep "IP4.ADDRESS" | head -1 | awk -F: '{print $2}' | xargs) if [ -n "$connection" ] && [ "$connection" != "--" ]; then ((vpn_count++)) # Determine VPN type if [[ "$device" == wg* ]]; then vpn_type="WG" vpn_icon="🔒" elif [[ "$device" == tun* ]]; then vpn_type="OVPN" vpn_icon="🔒" else vpn_type="VPN" vpn_icon="🔒" fi # Build status text if [ -z "$vpn_status" ]; then vpn_status="$vpn_icon $vpn_type" vpn_tooltip="$vpn_type: $connection" else vpn_status="$vpn_status | $vpn_icon $vpn_type" vpn_tooltip="$vpn_tooltip\n$vpn_type: $connection" fi # Add IP if available if [ -n "$ip_addr" ]; then vpn_tooltip="$vpn_tooltip\nIP: $ip_addr" fi # Set class based on first VPN type found if [ "$vpn_class" = "disconnected" ]; then if [[ "$device" == wg* ]]; then vpn_class="connected-wg" elif [[ "$device" == tun* ]]; then vpn_class="connected-ovpn" else vpn_class="connected" fi fi fi fi done < <(nmcli -t -f DEVICE device status | grep -E '^(tun|wg)' | cut -d: -f1) # If no VPN found, show empty if [ $vpn_count -eq 0 ]; then echo "{\"text\":\"\", \"tooltip\":\"No VPN connected\", \"class\":\"disconnected\"}" else echo "{\"text\":\"$vpn_status\", \"tooltip\":\"$vpn_tooltip\", \"class\":\"$vpn_class\"}" fi