My bilingual (German/English) layout for the MoErgo Glove80, as a ZMK config.
The keymap lives in config/glove80.keymap, with a matching config/glove80.json that can be imported back into the MoErgo Layout Editor.
- Alphas: almost 1:1 Aptmak Blue, the mirrored variant of aptmak:
E on the left thumb,
a o i non the left home row,k h t s ron the right. The bilingual idea comes from My Bilingual Layout. - Technical base: TailorKey v5.2 Bilateral by @moosy, inspired by Sunaku's Glorious Engrammer.
Taken from it:
- home row mods (GACS) with bilateral combinations enforcement
- the Typing layer
- the Cursor, Symbol, Mouse, Magic and Gaming layers
- the combos
- My own changes:
ü ö äon the inner index finger column,ßtop left (all via EurKEY /RA())yon the outer right of the home row,;on the outer left`and'bottom left,zandvmoved to the bottom right/ - =and[ ]in the bottom row- Cursor layer on its own left thumb key, so E is a plain key
- an Aerospace layer (hold Esc), a numpad layer with regular digits (hold Tab) and a Meh combo
- Autoshift layer and the left-thumb combos removed
- Umlauts and ß require the EurKEY OS layout. Without it, those keys only send
AltGr+letter. - Ctrl shortcuts in the Cursor and Mouse layers (
Ctl+C/V/X/Z…) are intentional, so the keyboard works on Windows and Linux without any changes. On macOS, the modifier keys are remapped in System Settings.
Tools are managed with mise (see mise.toml):
mise installmise run drawThis uses keymap-drawer to render keymap-drawer/glove80.svg from the keymap.
Colors, labels and the selected layers are configured in keymap-drawer/config.yaml. The SVG follows light/dark mode automatically.
On GitHub, the draw.yml workflow re-renders and commits the SVG whenever the keymap changes.
config/glove80.json is the same layout in Layout Editor format (import requires Local Backup and Restore in the editor settings).
Every change goes into both files, and mise run check verifies they match (CI runs it too).
To edit in the editor instead: import the JSON, make changes, export both JSON and .keymap, and replace the two files in config/.
Locally (needs Docker, e.g. via colima start):
mise run build # builds against moergo-sc/zmk@main
mise run build v26.09 # or against a specific tag/branchThe Docker image is built straight from the MoErgo template repo, so no build files live here.
The result is glove80.uf2 in the repo root (ignored by git).
GitHub Actions: the build.yml workflow builds on every push and uploads glove80.uf2 as an artifact.
Both halves are flashed one after the other with the same glove80.uf2:
- Enter the bootloader: hold
Magicand pressBooton the same half (see the Magic layer above). - The half shows up as a USB drive,
GLV80LHBOOTorGLV80RHBOOT. - Copy
glove80.uf2onto the drive. The half restarts automatically.
See the Glove80 User Guide for details.
| Path | Contents |
|---|---|
config/glove80.keymap |
keymap (ZMK devicetree) |
config/glove80.json |
same layout for the Layout Editor |
config/glove80.conf |
Kconfig, e.g. CONFIG_ZMK_POINTING=y for mouse emulation |
config/default.nix |
Nix build used by CI and Docker (from the MoErgo template) |
keymap-drawer/ |
visualization: config and SVG |
mise.toml |
tools and tasks (draw, build, check) |
scripts/check-sync.py |
checks keymap and JSON are in sync |
.github/workflows/ |
build.yml (firmware), draw.yml (SVG) |
Based on the moergo-sc/glove80-zmk-config template (MIT).