Skip to content

emacsomancer/volemad

Repository files navigation

Volemad - a quick systray interface to Mullvad’s WireGuard servers, written in Common Lisp

./icons/volemad-logo_small.png

Note 1

Migrated from https://gitlab.com/emacsomancer/volemad

Note 2

The newer versions of the official Mullvad client seem to show up properly in the systray and connect quickly, so there is probably no longer a need for this application. (Though at some point I might try to re-write it to use the Mullvad daemon directly rather than having a separate daemon to talk to Wireguard.)

Additional (2022-May-2022):

On some OSes which didn’t have native official Mullvad packages, I’ve been using NixOS’s Mullvad package. Unfortunately, on Guix System, while using NixOS’s Mullvad package works more-or-less, it has problems with DNS lookup (which I don’t quite understand). Volemad works on Guix though, so that’s my current solution on my Guix machine. Requires installing the following Guix packages:

  • sbcl
  • sbcl-cl+ssl
  • yad
  • curl
  • wireguard-tools

You’ll also want most likely to run Mullvad’s Wireguard installer which additionally requires:

  • jq
  • openresolv

The daemon should be run as root/with sudo. The binaries will be installed in /usr/local/bin, which is not, by default, in Guix’s $PATH.

Description

‘VOLEMAD is an application for quickly interacting with Mullvad’s WireGuard servers, written in Common Lisp.

There currently are three ‘versions’ of Volemad:

  • volemad-cli - a commandline interface
  • volemad / volemad-yad - an implementation using a GTK3 front-end (via yad)
  • volemad-argos - a plugin for Argos (for GNOME Shell extensions), BitBar-‘compatible’, depends on volemad-cli [Nb.: Unfortunately Argos appears to be currently broken in the latest GNOME Shell]

All three ‘versions’ depend on volemad-daemon, a simple daemon written in portable shell script, intended to be run as a system daemon.

Backstory: Volemad was written after increasing frustration with the official Mullvad Electron app which began not showing up in the systray on my system. A happy side effect: this app is much faster than the Electron app, and has a different feature set than the official app.

Features

  • connect, disconnect, and change servers extremely quickly (much faster than with the official app)
  • get a quick report on your apparent current location
  • automatically reconnects to a different server in the same selected region (city, country, or global) if server is reported as blacklisted
  • systray icon (in the graphical versions) indicates whether currently connected to a Mullvad server or not

./screenshots/volemad-overview.png

./screenshots/close-up-of-connected-popup.png

./screenshots/close-up-of-disconnected-popup.png

Installation instructions

How to install volemad-cli

  • have a Mullvad account
  • install sbcl
  • libnotify (/ libnotify-bin on Debian/Ubuntu) is required if you want pop-up notifications for location
  • install WireGuard and other requirements and run Mullvad’s configuration script as detailed at https://mullvad.net/en/help/wireguard-and-mullvad-vpn/
  • cd into volemad-cli
  • run make
  • then sudo make install
  • then enable the appropriate system daemon (see below)

How to install volemad(-yad)

  • have a Mullvad account
  • install sbcl
  • install WireGuard and other requirements and run Mullvad’s configuration script as detailed at https://mullvad.net/en/help/wireguard-and-mullvad-vpn/
  • install yad and libnotify (/ libnotify-bin on Debian/Ubuntu)
  • cd into volemad-yad
  • run make
  • then run sudo make install
  • then enable the system daemon (see below)
  • launch the Volemad frontend by running volemad as your ordinary user

How to install volemad-argos

  • have a Mullvad account
  • install volemad-cli as detailed above
  • install the Argos GNOME extension (again, Nb.: Argos seems to be broken on the lastest GNOME Shell)
  • cd into volemad-argos
  • run make
  • then run sudo make install
  • then cp /usr/local/share/volemad-argos/volemad-argos ~/.config/argos/

Enable the Volemad daemon [required for all operation/versions]

  • if your init/daemon-manager is runit (e.g. on Void Linux):
    • run sudo set-up-daemon-runit.sh
  • if your init/daemon-manager is systemd (e.g. on Debian/Ubuntu/Arch/etc.):
    • run sudo set-up-daemon-systemd.sh
  • if your init/daemon-manger is something else:
    • tell me the appropriate way of setting up a root daemon for your init/daemon-manager
    • and, as a stop-gap, run sudo volemad-daemon from a terminal or have root launch on it on boot (e.g. in /etc/rc.local)

How to use it

How to interact with volemad(-yad)

  • right-click on systray icon for a drop-down menu allowing interaction with WireGuard connection, then left-click on:
    • “DISCONNECT” to disconnect
    • “QUIT” to quit
    • “RANDOM server” to connect to a random Mullvad WireGuard server
    • COUNTRY name to connect to a random server in $COUNTRY
    • CITY name to connect to random server in $CITY
  • left-click on systray icon to (if you have libnotify) get a pop-up notification with your current apparent IP location information (via ipapi)
  • hover over the systray icon for information about the current Mullvad server (if connected)
  • icon reports status:
    • dark bluish icon indicates connection to Mullvad
    • red icon indicates no connection to Mullvad

./screenshots/volemad-code.png

How to interact with the commandline volemad-cli

  • flags:
    • -d = disconnect VPN
    • -r = connect to a random Mullvad relays
    • -l = show a pop-up notification with apparent location information
    • -b = force a fresh rebuild of Volemad’s database of Mullvad relays
    • -p = connect to a relay in a specified country
    • -s = connect to a relay in a specified city (requires -p as well)
  • the first four flags are mutually exclusive and take no argument
  • -p and -s both require arguments (and -s requires -p)
  • examples:
    • disconnect from VPN:
volemad -d
  • connect to a relay in Finland:
volemad -p 'Finland'
  • connect to a relay in Salt Lake City, Utah, USA:
volemad -p 'USA' -s 'Salt Lake City, UT'

How to interact with volemad-argos

  • similar to interaction with volemad(-yad); but, Nb.: I have not been able to properly test due to current GNOME Shell breakage of the Argos extension.

About

Common Lisp interface for Mullvad's Wireguard servers, with various frontends (cli, yad, argos)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published