From 9fe03c724e6bea3c090e778268af7cd0aa5dc0ce Mon Sep 17 00:00:00 2001 From: Thierry Pouplier Date: Tue, 5 May 2026 01:38:07 +0000 Subject: [PATCH] feat: WireGuard VPN integration - Add wg-up/wg-down/wg-status aliases to zshrc - Add Super+Ctrl+V / Super+Ctrl+Shift+V keybinds to Hyprland - Add Waybar custom module showing VPN status + traffic - Add wireguard-status.sh script --- hypr/.config/hypr/hyprland.conf | 4 +++ waybar/.config/waybar/config.jsonc | 12 ++++++- .../waybar/scripts/wireguard-status.sh | 31 +++++++++++++++++++ zsh/.zshrc | 5 +++ 4 files changed, 51 insertions(+), 1 deletion(-) create mode 100755 waybar/.config/waybar/scripts/wireguard-status.sh diff --git a/hypr/.config/hypr/hyprland.conf b/hypr/.config/hypr/hyprland.conf index 8a57593..49d56e9 100644 --- a/hypr/.config/hypr/hyprland.conf +++ b/hypr/.config/hypr/hyprland.conf @@ -317,6 +317,10 @@ bindl = , XF86AudioPause, exec, playerctl play-pause bindl = , XF86AudioPlay, exec, playerctl play-pause bindl = , XF86AudioPrev, exec, playerctl previous +# WireGuard VPN toggle +bind = $mainMod CTRL, V, exec, sudo wg-quick up ~/ExoKortex/1-Soma/2-Areas/IT/work-laptop.conf +bind = $mainMod CTRL SHIFT, V, exec, sudo wg-quick down work-laptop + # Emacs-everywhere bind = $mainMod, W, exec, emacsclient --eval '(thanos/type)' windowrule { diff --git a/waybar/.config/waybar/config.jsonc b/waybar/.config/waybar/config.jsonc index 22cf676..6b7ca36 100644 --- a/waybar/.config/waybar/config.jsonc +++ b/waybar/.config/waybar/config.jsonc @@ -28,7 +28,17 @@ "pulseaudio", "bluetooth", "network", + "custom/wireguard", "battery", "custom/exit" - ] + ], + + // Custom modules + "custom/wireguard": { + "exec": "~/.config/waybar/scripts/wireguard-status.sh", + "interval": 10, + "return-type": "json" + }, + + // Exit button } diff --git a/waybar/.config/waybar/scripts/wireguard-status.sh b/waybar/.config/waybar/scripts/wireguard-status.sh new file mode 100755 index 0000000..e01dfa0 --- /dev/null +++ b/waybar/.config/waybar/scripts/wireguard-status.sh @@ -0,0 +1,31 @@ +#!/bin/bash +# Waybar WireGuard status module +# Checks if the wireguard interface is up by looking at /sys/class/net/ + +INTERFACE="work-laptop" + +if [ -d "/sys/class/net/$INTERFACE" ]; then + # Interface exists - get transfer stats + RX=$(cat /sys/class/net/$INTERFACE/statistics/rx_bytes 2>/dev/null || echo 0) + TX=$(cat /sys/class/net/$INTERFACE/statistics/tx_bytes 2>/dev/null || echo 0) + + # Human readable + if [ $RX -gt 1048576 ]; then + RX_STR="$(echo $RX | awk '{printf "%.1f", $1/1048576}')M" + elif [ $RX -gt 1024 ]; then + RX_STR="$(echo $RX | awk '{printf "%.1f", $1/1024}')K" + else + RX_STR="${RX}B" + fi + if [ $TX -gt 1048576 ]; then + TX_STR="$(echo $TX | awk '{printf "%.1f", $1/1048576}')M" + elif [ $TX -gt 1024 ]; then + TX_STR="$(echo $TX | awk '{printf "%.1f", $1/1024}')K" + else + TX_STR="${TX}B" + fi + + echo "{\"text\": \"šŸ”’ $RX_STR/$TX_STR\", \"class\": \"connected\", \"tooltip\": \"WireGuard: connected ($INTERFACE)\nā–¼ $RX_STR ā–² $TX_STR\"}" +else + echo "{\"text\": \"šŸ”“\", \"class\": \"disconnected\", \"tooltip\": \"WireGuard: disconnected\"}" +fi diff --git a/zsh/.zshrc b/zsh/.zshrc index 742eaeb..1dfce4c 100644 --- a/zsh/.zshrc +++ b/zsh/.zshrc @@ -62,6 +62,11 @@ alias dpa="docker ps -a" alias dl="docker ps -l -q" alias dx="docker exec -it" +# WireGuard VPN +alias wg-up="sudo wg-quick up ~/ExoKortex/1-Soma/2-Areas/IT/work-laptop.conf" +alias wg-down="sudo wg-quick down work-laptop" +alias wg-status="sudo wg show" + # Cd alias ..="cd .." alias ...="cd ../.." -- 2.49.1