Kyles Sofle

Published: 3 October 2026

This is my Eyelash Sofle, a wireless split keyboard with a knob on the left half, a joystick on the right and a nice!view screen on each. I wrote its ZMK config and the code behind both screens.

Exported from the Blender scene behind the renders, which uses the seller's 3D files of the case.

The screens

The left screen shows the batteries, layer, Bluetooth slots and held modifiers, and a clock. An app on my Mac fills the rest with Claude Code’s usage limits and the latest GitHub Actions result for the three repos I’ve used Claude Code in most recently. From half an hour before a meeting, the meeting takes the repos’ place. The right screen shows the keys on whichever layer I’m holding.

Both screens drawn into the board: the left with the time, Claude usage and CI, the right with the keyboard's name over a drawing of the board

macOS lets any app send a keyboard the same report that sets Caps Lock and Num Lock, so the app sends its data through the lights macOS doesn’t use, two bits at a time with a checksum. Windows blocks that, so the Windows version, in Rust, writes to a second HID interface on the left half instead.

Tetris

Hold SYSTEM and tap T, and the right screen plays Tetris with the joystick. The best score survives restarts.

A game of Tetris on the right screen