NovelKeys x Kalih Big Switch Case and Software

I got 3 NovelKeys x Kalih Big Switches as a gift some time ago and decided to finally put them together. I made a single version and a dual version, and then made my kids try playing Geometry Dash on it.

Tip: If you want to save your ears, don’t buy the clicky version for a game like Geometry Dash.

GitHub Repository: https://github.com/detach8/bigswitch

Single Switch

The Single Switch case is made out of a one-piece 3D printed frame, with the PCB mounted at the bottom.

3D print

Parts to buy

  • PCBBig Switch PCB (keeb.io)
  • Pro Micro (ATmega32U4) – buy separately and solder it to the PCB yourself
  • Screws: 4x M2x10

Assembly

  1. Slot the PCB from the bottom and screw it into place using 4x M2x10 screws.
  2. Install the switch from the top (spot-solder the pins, or use a spacer if they’re loose and you’d rather not solder).

Double Switch

The Double Switch case is made out of a two-piece 3D printed construction, with the PCB sandwiched in between the two – to be precise, it is mounted on top of the bottom frame.

3D print

Parts to buy

  • PCBTukey 1×2 Big Switch Macropad (keeb.io)
  • Pro Micro (ATmega32U4) – buy separately and solder it to the PCB yourself
  • Screws for PCB: 8x M3x6 + 8x M3x3 heat-set inserts
  • Screws for Case: 5x M3x10 + 5x M3x4 heat-set inserts

Assembly

  1. Affix the 8 M3x3 heat-set inserts on the bottom case for the PCB. It should match the 8 screw holes of the PCB.
  2. Screw the PCB onto the bottom case. (The PCB sits on top.)
  3. Affix the 5 M3x4 heat-set inserts on the top case for the mating screws.
  4. Screw the top and bottom cases together.
  5. Install the switches from the top (spot-solder the pins, or use a spacer if they’re loose and you’d rather not solder).

Spacers for loose switch pins

I made two thin shims for contact pins because they were rather loose – especially the double switch (Keeb.io Tukey 1×2 Macropad) PCB.

Stuffing one of these into the contact slots would help hold the pin snug without solder — useful if you don’t want to solder the switches in. Two variants are available: 0.6mm (marked “6”) and 0.8mm (marked “8”).

That said, spot-soldering the switch pins is recommended. It’s a more reliable, permanent connection than a friction-fit spacer.

Software

I originally wrote simple, hardcoded code using Arduino IDE, but decided to explore QMK (and later VIA) since I’ve never done that before.

Both run on a promicro (ATmega32U4, Caterina bootloader) and managed to get VIA support built in.

1. Flash the firmware

Prebuilt firmware (the via keymap) is already in firmware/ — most people can just flash this and skip straight to configuring it with VIA. No build environment needed for this step.

  1. Install QMK Toolbox.
  2. Open QMK Toolbox and load the .hex file for your board:
  3. Put the board into its bootloader (Pro Micro / Caterina):
    • Briefly short the GND and RST pins on the Pro Micro twice in quick succession (within about a second).
    • The onboard LED will pulse/fade to indicate bootloader mode, and a new serial port will appear briefly.
  4. Click Flash in QMK Toolbox as soon as the board enters bootloader mode.
  5. Wait for “Flash complete” in the log, then unplug/replug the board.

Prefer the command line? With the board in bootloader mode:

2. Configure with VIA

These boards aren’t in VIA’s official keyboard registry, so you load their definitions manually via VIA’s Design tab:

  1. Go to https://www.usevia.app/.
  2. Open Settings (gear icon) → enable Show Design tab. A new paint brush icon appears.
  3. Open Design (paint brush icon) → Load Draft Definition and select the JSON matching your board:
  4. Plug in the flashed keyboard. VIA should detect it automatically by its VID/PID and switch to the Configure tab.
  5. Click each key in the layout diagram and assign a new keycode from the panel on the right. Changes apply instantly.

The rest of this section is only for building your own firmware from source (custom keycodes, layers, or hardware changes).

3. Install QMK MSYS

Tip: Skip this and the next section if the prebuilt firmware and VIA remapping above already do what you need — you don’t need a build environment just to flash and remap keys.

Warning: VIA compatibility requires QMK 0.25.x. As of this writing (September 2026), VIA only understands keymap format version 8. QMK moved to keymap version 9 after the 0.25.x release line, and current VIA builds do not support it — a firmware built from a newer QMK will not be recognized by VIA (it’ll complain that the keymap version is unsupported). If you’re building your own firmware for use with VIA, make sure your qmk_firmware checkout is pinned to a 0.25.x.

QMK MSYS is the all-in-one Windows build environment for QMK (bundles the toolchain, Git, and the qmk CLI). On macOS/Linux, use the regular QMK CLI setup instead.

  1. Download the latest installer from msys.qmk.fm (or the qmk_distro-msys releases page).
  2. Run the installer and launch QMK MSYS from the Start menu.
  3. Clone QMK and set up your build environment:qmk setupAccept the defaults.This clones qmk_firmware into your home directory and installs the AVR/ARM toolchains.
  4. Checkout a VIA-compatible release.The previous step checks out the latest master, which is on keymap version 9 and will produce firmware VIA can’t configure. Check out a 0.25.x tag instead:cd ~/qmk_firmware git fetch –tags git checkout 0.25.22 # or the latest 0.25.x tag qmk git-submodule
  5. Confirm everything is working:qmk doctor
  6. Copy this repository’s keyboards/tzlee folder into your QMK keyboards/ folder so QMK can find it:cp -r keyboards/tzlee ~/qmk_firmware/keyboards/tzleeFrom here on, all qmk/make commands are run from inside your qmk_firmware checkout (you can cd ~/qmk_firmware in the QMK MSYS terminal).

4. Modify the QMK defs and build/flash your own version

Everything about a board lives under keyboards/tzlee/<board>/.

  • Change the keymap (what each key sends): edit keyboards/tzlee/<board>/keymaps/via/keymap.c (keeps VIA support), or keyboards/tzlee/<board>/keymaps/default/keymap.c (no VIA). Add more layers, tap dance, macros, etc. as with any QMK keymap.
  • Change hardware definitions (matrix pins, VID/PID, diode direction): edit keyboards/tzlee/<board>/keyboard.json. If you change the VID/PID or the matrix layout, update the matching file in via/ to match, so VIA can still recognize the board and map its keys correctly.
  • Add a new keymap of your own instead of editing via/default in place:qmk new-keymap -kb tzlee/bigswitch_single

Build and flash (from inside qmk_firmware, board plugged in and in bootloader mode):

# Build only
qmk compile -kb tzlee/bigswitch_single -km via

# Build and flash in one step
qmk flash -kb tzlee/bigswitch_single -km via

Swap bigswitch_single for bigswitch_double, and via for the name of any keymap you created. The resulting .hex is written to the qmk_firmware root (or the location qmk compile reports) — copy it into firmware/ here if you want to keep it alongside the prebuilt ones.