On my mission to a leaner computer I’ve been slowly replacing system tray applets with less-bloated Polybar modules. Most of what I need is already covered by Polybar’s official modules or their community-contributed repository but it’s easy and fun to add new ones. Here’s my first one.
“wireguard-polybar”: A simple script/module to display and control WireGuard VPNs.
With no arguments the script displays the currently-connected configuration. It also provides
--toggle switches that can be mapped to different mouse clicks. When connecting, it uses dmenu so that you can select a WireGuard configuration from the list of available ones.
Some network managers like Netctl and NetworkManager have built-in support for managing WireGuard interfaces. I don’t use either so under the hood the script directly calls
wg-quick to set things up. Unfortunately these binaries need sudo access to run which isn’t great news for scripting. I therefore had to add a specific rule to my
/etc/sudoers to make them password-less:
YOUR_USERNAME ALL = (root) NOPASSWD: /usr/bin/wg,/usr/bin/wg-quick
(Obviously you don’t want to do this for a user who doesn’t already have sudo access! WireGuard let’s you to add hooks for various events which could let a non-sudo user run arbitrary code.)
Finally, adding a module to Polybar configuration is pretty straightforward . For example:
[module/wireguard] type = custom/script exec = /PATH/TO/wireguard_polybar tail = false interval = 1 click-left = /PATH/TO/wireguard_polybar --toggle &