A personal, open-source QMK keymap + tooling for the NuPhy Air75 V2 (ANSI), focused on a
Windows + Blender workflow. Built against NuPhy's QMK fork (branch nuphy-keyboards).
- MCU: STM32F072 ·
stm32-dfubootloader · 128 KB flash (~67 KB used) - Build target:
nuphy/air75_v2/ansikeymapsinuphy_v0 - License: GPL-2.0-or-later (derives from QMK, which is GPLv2)
- 8 layers, Windows-first. RGB-Matrix per-key category lighting + a per-layer Esc indicator (each overlay layer tints Esc a unique hue, so you always know — and can see — when a layer is locked).
- Blender numpad on layer 6 (
KC_P1–KC_P0,KC_PDOT) — Blender uses numpad digits as view shortcuts (1/3/7 = front/side/top, 5 = ortho/persp, 0 = camera,.= frame selected). - Combos (firmware-level, survive VIA edits):
[+]→ Alt+F4,+.+/→ toggle-lock the numpad layer (tap once to lock for modeling, again to release)
- VIA enabled for live remapping + backup/restore (see below).
| Layer | Role | Notes |
|---|---|---|
| 0 / 1 | Mac base / Mac Fn | only active in Mac mode (physical OS dial); unusable as overlays in Windows |
| 2 | Windows base (default) | VIA-synced |
| 3 | Fn + layer switches | media keys, MO(4/5/6/7) |
| 4 | Nav cluster | |
| 5 | RGB / sidelight controls | hand-managed (SIDE_MOD, RGB_*) |
| 6 | Blender numpad | VIA-synced; toggle-lock via the ,+.+/ combo |
| 7 | Bluetooth / RF / system | hand-managed (LNK_BLE*, LNK_RF, DEV_RESET, BAT_SHOW) |
The OS dial sets the base layer in firmware: Windows ⇒ default layer 2, Mac ⇒ default layer 0. Because layers 0/1 sit below the Windows base, they can't be used as Windows overlays — that's why custom keys placed there don't work without flipping the physical switch.
- Layers 2 (base) and 6 (numpad) are VIA-synced — their source of truth is a VIA layout export.
- Layers 3, 4, 5, 7 are hand-managed in C (they hold custom keycodes like
SIDE_MOD,LNK_BLE*). Do not sync these from VIA — the converter turns custom keycodes intoKC_NO.
Requires the NuPhy QMK fork at ../qmk_firmware and a qmk venv (../venv). From this folder:
bash build.sh # copies sources into the keymap tree and runs `qmk compile`Output: firmware/nuphy_air75_v2_ansi_sinuphy_v0.bin.
The board flashes natively on Windows via QMK Toolbox (stm32-dfu): enter bootloader, open the
.bin in QMK Toolbox, Flash. (Building is done in WSL; no native toolchain needed.)
NuPhy isn't in the public VIA registry, so load the draft definition once:
- Open https://usevia.app → Settings → enable Show Design tab.
- Design tab → Load Draft Definition → pick
via/nuphy-air75-v2-via3.json(V3 definition, VID0x19F5/ PID0x3246). - Configure now connects to the board for live editing.
- Backup = export a layout JSON; restore = import it. The latest export lives in
via/and on the Desktop, and is the source of truth for the synced layers.
# Preview only (no writes):
python3 via_json_to_keymap.py --input /path/to/export.layout.json --layers 2,6 --validate-only
# Apply (auto-backs up keymap.c first):
python3 via_json_to_keymap.py --input /path/to/export.layout.json --layers 6Maps VIA's flat 6×17 matrix → LAYOUT_ansi_84 using the fork's keyboard.json. Only sync
VIA-owned layers (2, 6) — never 3/4/5/7.
docs/VIA_TWEAKS.md— sync-safe tweaks (home-row mods, Space layer-tap, app launchers).docs/HARDWARE_ENCODER.md,docs/HARDWARE_OLED.md— internal hardware-mod specs.
Derived from QMK Firmware and NuPhy's QMK fork — both GPL-2.0. Keymap, lighting, tooling © the sinuphy author, GPL-2.0-or-later.