- body remixed from this: https://www.printables.com/model/1020389-wireless-corne-chocoflan-minimal-keyboard-case
Use Keyboard Layout Helper to inspect and tune layers visually: https://projects.maxistar.me/keyboard_helper/
config/: ZMK config for a split Corne on nice!nano (keymap, macros, Bluetooth bindings, west manifest).body/: printable/parametric case and plate models for the Chocoflan remix (scad, stl, step, 3mf).build.yaml: build matrix for CI (left/right halves onnice_nano_v2).zephyr/module.yml: declares the repo as a ZMK module, including the Corney shield root and the custom GATT features.docs/gatt-layer-exposition.md: UUIDs, data format, and build notes for the BLE layer characteristic.docs/keyboard-helper-ble-v1.md: implementation, security, queue, and build notes for the versioned Keyboard Helper event extension.
git clone https://github.com/maxistar/corney.git
cd corney- Zephyr SDK and
westalready installed (ZMK setup guide)
- From the repo root, pull ZMK:
west init -l config && west update. - Build each half (outputs land in
build/<side>/zephyr/zmk.uf2):- Left (enhanced):
west build -p -s zmk/app -d build/left -b nice_nano_v2 -- -DSHIELD=corney_left -DZMK_CONFIG=$PWD/config -DZMK_EXTRA_MODULES=$PWD -DCONFIG_ZMK_KEYBOARD_HELPER_EXTENSION=y - Right:
west build -p -s zmk/app -d build/right -b nice_nano_v2 -- -DSHIELD=corney_right -DZMK_CONFIG=$PWD/config -DZMK_EXTRA_MODULES=$PWD
- Left (enhanced):
- Copy the corresponding UF2 to each nice!nano over USB bootloader.
The default Bluetooth device name is Corney. To override it, pass
CONFIG_ZMK_KEYBOARD_NAME when building the left half.
Local build examples:
- Left (enhanced):
west build -p -s zmk/app -d build/left -b nice_nano_v2 -- -DSHIELD=corney_left -DZMK_CONFIG=$PWD/config -DZMK_EXTRA_MODULES=$PWD -DCONFIG_ZMK_KEYBOARD_HELPER_EXTENSION=y -DCONFIG_ZMK_KEYBOARD_NAME=\"CorneyMX\" - Right:
west build -p -s zmk/app -d build/right -b nice_nano_v2 -- -DSHIELD=corney_right -DZMK_CONFIG=$PWD/config -DZMK_EXTRA_MODULES=$PWD
Do not apply the custom name override to the right half. The left half is the central, host-paired side, and the right half should be built with its default configuration.
Omit CONFIG_ZMK_KEYBOARD_HELPER_EXTENSION=y only when intentionally building the legacy central
image without the Keyboard Helper service.
The left/central half supports a Cirque Pinnacle trackpad over the Pro Micro I2C pins. The current
wiring uses address 0x2a and does not connect the trackpad's data-ready (DR) signal. There is no
OLED in this configuration.
Because DR is absent, the Corney module reads the sensor status every 8 ms while the keyboard is
active. The firmware reports relative pointer movement, the sensor's primary tap, and relative
wheel packets through ZMK's input listener. I2C and the polling driver are enabled only in
corney_left builds.
Continuous polling costs additional battery power. During system suspend the polling work stops; trackpad touch alone cannot wake the controller without DR. Press a key or use another configured wake source, after which the sensor is reinitialized and polling resumes.
GitHub Actions is the primary CI/CD pipeline. It runs portable protocol/metadata tests, native ZMK integration tests, and builds enhanced, legacy-only, minimal extension, peripheral, and settings-reset firmware artifacts. A manual workflow run can override the Bluetooth name for the left/central image only.
The GitLab CI configuration is retained as an equivalent alternative for a future GitLab mirror. Local Bluetooth name overrides remain a CMake option so the right/peripheral image cannot accidentally receive a host-facing name.

