Skip to main content Skip to navigation
Back to Projects

Lily58 HolyKeebs QMK Fork

QMK Split Board With Modular Dual Pointer Support

CQMKVialGitHub Actions
Lily58 HolyKeebs QMK Fork

Overview

I love split boards and pointing modules, but the Holykeebs QMK tree lagged behind on Vial support. So I forked it, integrated Vial cleanly, kept all of Holykeebs’ pointer drivers (trackball, touchpad, trackpoint), and layered on automation: CI builds, release artifacts, keymap diagrams, and versioned tags. The result is a keyboard firmware that just works for Lily58 (and friends), with real-time configuration and zero drama.


Problem

  • Holykeebs’ excellent pointer stack lived on an older QMK base → no modern Vial.
  • New users had to compile locally, pick flags, and hope nothing broke.
  • Release management was manual and fragile.

Solution

A maintained fork that backports and wires Vial into the Holykeebs tree while preserving device support, plus a production-style delivery pipeline.

What I built

  • Vial core integration (protocol, keycodes, defs, .vil) with VIA compatibility kept intact.
  • Automated GitHub Actions: build all variants, attach artifacts to releases, generate keymap diagrams, changelog on tag.
  • Memory footprint tuning for RP2040 targets (Vial + pointers without blowing flash).
  • Build script for common combos (dual devices, left/right halves, debug vs release).
  • Prebuilt firmware so non-devs can drag-and-drop .uf2 and go.

Features

  • Full Vial (real-time config, no reflashing)
  • Holykeebs pointing devices
    • Pimoroni RGB trackball
    • Azoteq IQS5xx TPS43 touchpad
    • PS/2 trackpoint
    • Dual-pointer configs
  • VIA compatible (for folks who prefer VIA)
  • Automated builds & releases (Actions)
  • Keymap diagram autogeneration
  • Debug + standard firmware flavors

Architecture

LayerWhat it does
QMK forkHolykeebs drivers + Vial backport + memory optimizations
Build systemMake targets + build.py options for side/device variants
CI/CDGitHub Actions: build matrix → artifacts → release tagging
DocsRepo README + Holykeebs docs links + usage recipes

Developer UX (why this matters)

  • One-click firmware: grab the right .uf2 from Releases and flash both halves.
  • Real-time tuning: open Vial → edit layers, macros, pointer settings live.
  • Predictable releases: tag vX.Y.Z → CI builds everything and publishes.
  • Portable: no local toolchain unless you’re hacking internals.

Impact

  • Made advanced pointer + split setups accessible to non-compilers.
  • Reduced “it doesn’t detect in Vial” support churn by shipping the correct images.
  • Standardized release hygiene for a niche but passionate hardware community.

Reflection

Firmware should be pleasant. This project treats keyboard firmware like a real product: reproducible builds, versioned releases, crisp docs, and room to tinker. It’s also a fun intersection of embedded constraints, UX, and CI discipline.


Tech Stack

QMK (forked), Vial, VIA, RP2040 targets, GitHub Actions, Python build scripts