atrium-network
A small Rust program for wifi, wired, and VPN management. It talks D-Bus to wpa_supplicant (fi.w1.wpa_supplicant1), reads addresses from dhcpcd, and drives openvpn as a child process. No NetworkManager, no libnm.
Modes
| Invocation | What |
|---|---|
atrium-network bar | Print the bar glyph and exit |
atrium-network bar --watch | Print the glyph on every state change |
atrium-network status | Multi-line status text for a tooltip |
atrium-network | The GTK4 window, centered and floating |
atrium-network --bar-edge top --bar-margin 22 | The window anchored to a bar edge via layer-shell |
The window shows wifi, address, wired, and connectivity status; scans and connects with password entry; lists and forgets saved networks; starts and stops VPN profiles.
Requirements
- wpa_supplicant running with
-u(D-Bus interface). Void’s runit service readsOPTSfrom/etc/sv/wpa_supplicant/conf. - Your user in
wheel, and the wheel-group D-Bus policy present as a drop-in at/etc/dbus-1/system.d/wpa_supplicant-wheel.conf. Without it wifi works but the app sees only “no interface”: an access-denied error swallowed by D-Bus. - The wifi interface is discovered through
/sys/class/net/*/wireless/; nothing is hardcoded. - VPN profiles are
~/.config/openvpn/*.ovpn, started asdoas openvpn --config <file>, so/etc/doas.confneedspermit nopass <user> cmd openvpn.
In the bar
atrium-shell’s Network widget runs bar and status together every few seconds and launches the anchored window on click. The shell stays a thin launcher on purpose: connection management belongs in a real program.
Emergency path
Without any of this, from a TTY:
wpa_cli scan && wpa_cli scan_results
wpa_cli add_network # returns an id, say 0
wpa_cli set_network 0 ssid '"Name"'
wpa_cli set_network 0 psk '"password"'
wpa_cli enable_network 0
wpa_cli save_config
dhcpcd assigns an address as soon as the link is up.