Emil Miler

VimGolf Station

VimGolf is a challenge game where the goal is to edit a given piece of text into a desired final form using as few keystrokes as possible in Vim. Some time ago, I built a rough portable station using a Raspberry Pi and a spare monitor. It was initially used to play VimGolf at the SUSE Prague office and later repurposed for public events. It uses a custom VimGolf menu script and Ansible playbooks to make configuring your own VimGolf station easy.

The project source files can be found at https://github.com/realcharmer/vimgolf-station.

Vim Keyboard Photohraph taken by Alexandre Vicenzi at LinuxDays 2025

Hardware

The entire system is designed to be portable, therefore it’s built around a Raspberry Pi mounted directly to a monitor, along with a power strip and dedicated power adapter. It’s paired with a custom-made keyboard, courtesy of Hody.

Raspberry Pi

Software & System Configuration

I’ve chosen Void Linux as the base because it’s light, simple, has stellar Raspberry Pi support and because I just felt like it. The only manual configuration needed is to install python3 (for Ansible), setup avahi, sshd and import public ssh keys. When the system is ready, Ansible takes care of the rest.

ansible-playbook setup.yaml

The playbook does a few things:

VimGolf itself runs in a containter to ensure a clean runtime for VimGolf itself and to also prevent the user from accesing the host system.

After the system boots up, it starts a greetd service, which is configured to autologin the vimgolf user and execute vimgolf.sh as the default application. The script is also restarted automatically when the user manages to kill it.

vimgolf.sh

vimgolf.sh does the following:

The script has to be configured in vimgolf/configuration by specifying challenge codes from vimgolf.com along with custom challenge names and user key, for example:

USER_KEY="..."
declare -A CHALLENGES=(
    ["1"]="9v0061478032000000000212|hello-world-vimgolf"
    ["2"]="9v006289c03700000000021f|Many duplicates"
    ["3"]="9v006283b31d00000000021d|Delete swap"
    ["4"]="9v006621a9a900000000026b|New teacher"
)

Make sure to run the Ansible playbook again when changing the configuration, as it has to be copied to the VimGolf station.

VimGolf Photohraph taken by Alexandre Vicenzi at LinuxDays 2025

2026-04-13 · Emil Miler