A simple Polybar script to display and control WireGuard VPNs.
- Displays the currently connected configuration,
- Defines
--connect,--disconnect, and--toggleswitches that can be mapped to different mouse clicks.
dmenuso that you can select a WireGuard config from a menu when connecting. This can be replaced by something like rofi or removed altogether by hard-coding a config in the script. You can find my version ofdmenuhere.networkctlto query currently connected interface without needing sudo. I used to usewgfor this butwgneeds sudo access and calling it in a loop generated a lot of warnings and logs.- Material design icons for the
icon.
wg-quickbinary needs sudo access to run which isn't great news for scripting. I have therefore added a specific rule to my/etc/sudoers(viavisudo) to make them password-less:
INSERT_YOUR_USERNAME ALL = (root) NOPASSWD: /usr/bin/wg-quick
-
Edit the
configs_pathvariable in the script to point it to where your WireGuard configs live. If they're in/etc/wireguardyou might have to make sure permissions of that directory allows listing the files inside it. I believe by default that directory is only accessible by root. -
If you're keeping the default icon from Material font, make sure the font is configured correctly in Polybar and the script. Note that the Polybar font indexing is off by 1. The unmodified script expects the following in the Polybar:
font-3 = Material Icons:style=Regular:size=15
- Add a module to Polybar. For example:
[module/wireguard]
type = custom/script
exec = /PATH/TO/wireguard-polybar
tail = false
interval = 1
click-left = /PATH/TO/wireguard-polybar --toggle &