Building Handwired Dactyl Manuform Keyboard

In this guide, I’ll walk you through every step of building my Dactyl Manuform keyboard, from soldering diodes to flashing firmware. This was my very first keyboard build, so I didn’t go fancy with customization or aesthetics (I didn’t even use a bottom plate, as I’ll explain in the Post-Mortem Analysis section).

If you don’t have soldering experience yet, don’t worry you will by the end of this... Just be prepared to dedicate a weekend to it. Hopefully, this guide will make things smoother for you than it was for me.


Why the Dactyl Manuform?

Honestly, I didn’t have a deep reason. Out of all the ergonomic split keyboard builds, this one looked the coolest and felt most ergonomic because of curved keywell design.


Size and Layout

I chose the 5x6 layout with 6 thumb keys.

If you’re considering building similiar keyboard, I recommend printing a low-quality and low infill prototype first. That way, you can get a feel for hand placement and size before committing.

Also, if you’ve never used QMK, ZMK or other keyboard firmware and layers before (like me), you probably don’t need all the keys you see on your laptop keyboard. Layers replace that.


Materials

Here’s what I used:

  • Key switches: 100-pack (only needed 68, i thought i would melt and destroy them while trying to solder tiny diodes but no switch died in this process!).

  • Keycaps: Salvaged from an old keyboard. Finding the right set for this layout is tricky, so I didn’t bother. If you do buy new ones, make sure they’re the same height profile. Update: Later i printed red keycaps for some of the keys.

  • 1N4148 diodes: One per switch, plus a few extras if you mess up.

  • Arduino Pro Micro: One for each half. I avoided USB-C version since I read they can be problematic because they are only usb 2 actually; stuck with the cheap micro-USB ones and for the right one i soldered usb c female breakout.

  • TRS or TRRS jack + cable: To connect the two halves. I went with a 3.5mm headphone jack for simplicity, you can choose any connector as long as you have at least 3 pins. TRS seemed easier to solder and manage than rj9.

  • Wires: 24 AWG for rows/columns, plus jumper wires for Arduino connections. Jumpers make debugging and in case of failure replacing arduino easier.


Building the Keyboard

Step 1: Bending Diodes

Before soldering, bend all your diodes. Make a little loop on the anode side (the side without the black stripe), snip off the excess, and repeat for every key.


 

Step 2: Choosing Wiring Direction

You’ll need to pick either Row-to-Column or Column-to-Row.

Row2Col:

Row wire (R0) → ┌─┐ │ │ switch └┬┘ │ o───|>|───o → Column wire (C0)

Col2Row:

Column wire (C0) → o───|>|───o ^ │ ┌─┐ │ │ switch └┬┘ │ Row wire (R0)

I went with Col2Row. Functionally, it doesn’t matter as long as you follow the direction on each key and set the firmware correctly.

Step 3: Wiring & Securing

  • Solder anode side to switches, cathode side to columns/rows.

  • Tape off areas where columns and rows might short.

  • Use hot glue to secure switches in the body.

Step 4: Connecting Halves

Wire the 3.5mm jacks, just make sure the pin order matches on both sides.

Step 5: Arduino Connections

Solder one jumper per row and column, then connect them to your Arduino pins.


Firmware & Testing 


1- Install QMK:
python3 -m pip install --user qmk qmk setup

2 - Choose your keymap or create one
qmk new-keymap -kb handwired/dactyl_manuform/5x6_68 
 
Open keyboard.json and check:
matrix_pins: row/column pin assignments.
serial_pin: TRS connector pin.


diode_direction: set to COL2ROW or ROW2COL. Edit config.h and add:
#define EE_HANDS 
#define SPLIT_USB_DETECT 
#define SPLIT_WATCHDOG_ENABLE



3 - Flash firmware:

qmk flash -kb handwired/dactyl_manuform/5x6_68 -km dakdak -bl avrdude-split-left


Reset the Arduino by bridging RST and GND. (Everytime you want to flash new keymap you are gonna need to do that so i added buttons for reset)

Repeat for the right half with -bl avrdude-split-right.

Tip for Fedora users: 
You may need to set udevadm rules to give permission to write microcontroller
or after each reset you can give temporarily:

sudo chmod 666 /dev/ttyACM0

When you want to edit layouts and flash new ones
- You can edit through qmk configuratior web ui.
- Download keyboard.json
- Convert json to c:
    qmk json2c keyboard.json > keymap.c
- Compile:
    qmk compile -kb your_keyboard -km your_keymap
- Flash:
    qmk flash -kb your_keyboard -km your_keymap
 
If you dont want to write your keyboard and keymap everytime you can define qmk config like so
qmk config user.keymap=
qmk config user.keyboard=
 
QMK documentation is your friend.


Post-Mortem Analysis

After a week of use and ’m typing this post on the keyboard right now 

  • Too many keys. With layers, I could choose smaller layout but i was afraid of loosing left side keys, i thought it would be pretty hard to get used to ergonomic keyboards if all the secondary keys are placed in thumb cluster like ctrl, shift and alt.
  • Still adjusting. It works fine, but it’s not the “perfect” typing experience I imagined. 
  • Switches are not that great, i picked up outemu brown switches from aliexpress. It feels upgrade over a natural ergonomic 4000 keyboards membrane but i think i need the "click" feeling but still quiet. I am considering of trying kailh choc's.
  • I forgot to add screws for base plate in configurator so i had to use double sided tape to shut bottom. Do not forget this. also there is cosmos generator which is more advanced; i used old dactyl generator from ryan. 
  • Use hot glue to secure switches and make sure they are well secured, after you create a mess like me its hard to glue when all the wires are dangling inside.
  • Depending on your desk and chair you may need wrist rests tho people say your hands should float when typing, not rest. I am not sure yet because of my chair is so low and this build has some height.  
  • I added some foam to sides thinking it would make it quiter, i doubt it made a difference.