fix(waybar): VPN tooltip names the active VPN(s)
The shield's tooltip said only 'VPN active' — with both NM VPNs and Tailscale feeding the same indicator, a forgotten tailscaled read as 'the icon is stuck after disconnecting'. List the active NM VPN/WireGuard connection names and/or 'Tailscale' in the tooltip. Verified on hardware (TuringMachine): script exercised with Tailscale up → tooltip 'VPN: Tailscale'; tailscale down → empty output (self-hide). NM name path is the same awk the nomarchy-vpn picker uses. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -107,15 +107,20 @@ let
|
|||||||
|
|
||||||
# VPN indicator — shows a shield when a NetworkManager VPN/WireGuard
|
# VPN indicator — shows a shield when a NetworkManager VPN/WireGuard
|
||||||
# connection is active OR Tailscale is up; prints nothing otherwise so the
|
# connection is active OR Tailscale is up; prints nothing otherwise so the
|
||||||
# module self-hides (like nightlight/updates). Click opens the VPN submenu.
|
# module self-hides (like nightlight/updates). The tooltip names each
|
||||||
|
# active VPN (NM connection names, "Tailscale") — without it a forgotten
|
||||||
|
# tailscaled reads as "the icon is stuck". Click opens the VPN submenu.
|
||||||
vpnStatus = pkgs.writeShellScriptBin "nomarchy-vpn-status" ''
|
vpnStatus = pkgs.writeShellScriptBin "nomarchy-vpn-status" ''
|
||||||
active=$(nmcli -t -f TYPE connection show --active 2>/dev/null | grep -Exm1 'vpn|wireguard')
|
names=$(nmcli -t -f NAME,TYPE connection show --active 2>/dev/null \
|
||||||
|
| awk -F: '$2=="vpn"||$2=="wireguard"{print $1}')
|
||||||
ts=""
|
ts=""
|
||||||
if command -v tailscale >/dev/null 2>&1; then
|
if command -v tailscale >/dev/null 2>&1; then
|
||||||
[ "$(tailscale status --json 2>/dev/null | jq -r '.BackendState // empty')" = Running ] && ts=1
|
[ "$(tailscale status --json 2>/dev/null | jq -r '.BackendState // empty')" = Running ] && ts=Tailscale
|
||||||
fi
|
fi
|
||||||
[ -n "$active" ] || [ -n "$ts" ] || exit 0
|
[ -n "$names$ts" ] || exit 0
|
||||||
printf '{"text":"","tooltip":"VPN active (click to manage)","class":"on"}\n'
|
list=$(printf '%s\n' "$names" "$ts" | grep -v '^$' | paste -sd ', ' -)
|
||||||
|
tip=$(printf 'VPN: %s\n(click to manage)' "$list" | jq -Rs 'rtrimstr("\n")')
|
||||||
|
printf '{"text":"","tooltip":%s,"class":"on"}\n' "$tip"
|
||||||
'';
|
'';
|
||||||
|
|
||||||
# Health warning — self-gates: prints nothing while nomarchy-doctor
|
# Health warning — self-gates: prints nothing while nomarchy-doctor
|
||||||
|
|||||||
Reference in New Issue
Block a user