A WireGuard VPN tray icon built for Omarchy.
Drop your WireGuard configs into the configs/ folder and manage connections from the system tray. Tested with ProtonVPN — should work with any WireGuard provider (Mullvad, self-hosted, etc.).
Click a server to connect, switch between them on the fly. On startup, it automatically reconnects to your last used server. The tray icon updates in real time — full shield when connected, empty when not — with desktop notifications on state changes.
- Click to connect — pick a server from the menu, switch anytime
- Auto-connect — automatically reconnects to your last used server on startup
- Live status — icon and tooltip update every 3 seconds without flickering
- Desktop notifications — get notified on connect, disconnect, and connection drops
- Smart detection — distinguishes between connected, stale, no-network, and disconnected states
- Hot-reload configs — drop in or remove
.conffiles and the menu updates automatically - Clean server names —
wg-us-42.confshows up as "US", not the raw filename
- Omarchy (or any Linux desktop with a system tray)
- Python 3
python-gobjectlibayatana-appindicator3wireguard-tools
sudo pacman -S python-gobject libayatana-appindicator wireguard-tools1. Clone the repo
git clone https://github.com/remigius-labs/Omarchy-vpn.git
cd Omarchy-vpn2. Add your WireGuard configs
Drop .conf files into the configs/ folder:
configs/
wg-us-42.conf → shows as "US"
wg-de-15.conf → shows as "DE"
wg-jp-03.conf → shows as "JP"
The wg prefix and trailing numbers are stripped automatically. You can add or remove configs at any time — the menu picks up changes within a few seconds.
3. Allow passwordless sudo for WireGuard commands
sudo visudoAdd (replace yourusername):
yourusername ALL=(ALL) NOPASSWD: /usr/bin/wg, /usr/bin/wg-quick, /usr/bin/ip
4. Run it
python3 omarchy-vpn.py &To start it with Omarchy, add it to your Hyprland autostart.
Click the tray icon to open the menu:
- Server list — click any server to connect. The active server is marked with ✓ (or ⚠ if stale)
- Disconnect — tears down the active tunnel
- Open configs folder — opens
configs/so you can add or remove servers
The app polls sudo wg show every 3 seconds:
| Status | Meaning | Icon |
|---|---|---|
| Connected | Tunnel up, recent handshake (< 3 min) | Full shield |
| Stale | Tunnel up, no recent handshake | Empty shield |
| No network | Tunnel up, server unreachable | Empty shield |
| Disconnected | No active tunnel | Empty shield |
Make sure your Waybar config includes the tray module:
"modules-right": ["tray", "clock"],
"tray": {
"spacing": 8
}MIT


