DEC 30, 2024

building the temper, a low profile ergo mech keyboard

or, a first foray into open-source hardware

If you know anything about me, it will not surprise you to learn that I have been tangentially interested in mechanical keyboards for a while now. [1] I finally ended up (kind of unintentionally) building one—here she is!

isn't she pretty?

Anyway, here’s how it happened.

“look, how hard could it possibly be?”

Sometime during the summer, I committed to getting a new mechanical keyboard.[2] I wanted it to be

A quick internet search revealed that there are a whole host of options for split ergonomic keyboards. But all the keyboards I was looking at were not exactly products in stores? They were more…uh, GitHub repositories? That had “gerber files” and sometimes a “bill of materials” and maybe a “build guide”? Huh. And then life got a little busier, so I filed it away in the back of my head. I wasn’t in any rush; I’d just find out how to buy one of these sometime later.

Fast forward to a couple weeks later, and I was constantly hearing from this sneaky voice in my head—a lot of “why don’t you just do it?” and “you’re an engineer, come on!” and some “look, how hard could it possibly be?”. For reference: at this point, I had tried soldering…erm…twice? Maybe three times? Honestly, I’m not sure where the unwarranted confidence came from.[3]
But surprising absolutely nobody, I gave in to temptation. I decided that I would build the temper, a 36-key wireless split ortholinear keyboard.[4]

buying parts and stuff

After deciding to go with the temper, I had to buy all the parts. Luckily, the bill of materials provided on the temper README is quite detailed. I followed it as exactly as I could, purchasing everything from four vendors: JLCPCB, Chosfox, DigiKey, and Typeractive. This went much smoother than expected—it turns out that it is indeed legal to just buy things.[5]

Again, not a surprise, but I am the kind of person that appreciates a good spreadsheet, so…behold! Here’s everything that I bought.

bill of materials

item vendor items per unit order quantity unit cost (USD) total cost (USD)
PCB JLCPCB 5 1 1.58 7.90
Kailh Choc v1 switch (brown) Chosfox 10 4 4.80 19.2
Kailh Choc hotswap socket Chosfox 10 4 1.45 5.8
Kailh Choc v1 1u keycap Chosfox 10 4 3.50 14
Kailh Choc v1 1.5u keycap Chosfox 2 1 1.65 1.65
Alps SSSS8 mini SPDT switch DigiKey 1 4 1.25 5
Panasonic EVQPU mini tactile switch DigiKey 1 4 0.38 1.52
Diodes Inc. 1n4148w SMD diode DigiKey 10 5 0.067 3.35
nice!nano Typeractive 1 2 25 50
LiPo battery Typeractive 1 2 3 6
Mill-Max socket & pin set Typeractive 1 2 6.5 13
total 129.52

I should note that the table includes some extra diodes and switches[6] (~\$4), but I didn’t include the extra nice!nano and mill-max socket/pin set that I ended up buying (~$32). I also didn’t include shipping, taxes, or customs fees in the costs (too much work).

Anyway, after making my spreadsheet, I ordered all the parts and promptly started wiggling with excitement.

In a week or so, all the parts had arrived.

i've always wanted to make one of these exploded parts views! apparently, this is called knolling.

(I will not discuss in detail the amount of pure joy I experienced while laying everything out.)

putting it all together

Once I had all the parts, I just had to put it together. The plan went something like this:

  1. solder jumpers
  2. solder diodes, hotswap sockets, and reset/power switches
  3. socket microcontroller
  4. solder battery
  5. put on switches, keycaps, and feet

soldering the jumpers

Soldering the jumpers was pretty straightforward; I just followed the instructions on the temper README. I did do a practice run on one of the extra PCBs (minimum order at JLCPCB is 5, and I only needed 2), which was honestly quite helpful.

before.
after!

diodes, et. al.

Successfully soldering the jumpers gave me quite a bit of confidence, which was immediately taken down a notch once I saw how small the diodes were.

smd diodes are really small. and there happen to be 36 of them.

I was also a little scared because I knew from circuits classes (and burning countless LEDs) that the direction of a diode is very important. But I found this lovely guide that explained the general strategy for soldering on the diodes, as well as the direction that they should be placed. The main takeaway was that you want to start by putting a little solder on one pad, heat that pad and place the diode, and then handle the other side.

success!
Soldering on all 36 of the diodes took a while (and a lot of squinting to make sure they were oriented correctly), but I'm happy to report that I soldered all of them without losing a single one!

Next up were the hotswap sockets. They were a little confusing, but the PCB very conveniently had markings that made it impossible to do it wrong.

you can see how the outline matches the shape of the socket—you couldn't get it wrong even if you wanted to.
After that, I was on a roll. The reset and power switches were also small, but nothing crazy compared to the diodes.
small, but doable.

The one annoying thing was that there were now four pads instead of two, which made lining things up a little harder. But I was able to get them soldered on nicely, using the same strategy as before (start with a blob of solder on one of the pads).

before!
added a blob of solder.
we did it!

socketing microcontroller

Now past the halfway point, the next thing to do was to socket the nice!nanos. Basically, I needed to solder sockets to the PCB and pins to the nice!nanos so that I could plug and unplug them easily. This is technically optional—you could just solder the microcontroller directly to the PCB. But boy, was I glad that I did (foreshadowing alert!).

Anyway, there’s a guide linked in the README, which I followed.[7] The big idea is to solder while the pins, sockets, and nice!nano are in place (to make sure everything will fit), but to use a bit of painter’s tape to prevent solder from leaking through and sticking everything together.

lots of pins.

Sticking the pins through the tape was quite painful—they kept slipping through my tweezers, and I didn’t have any pliers. I found it worked best to take a flat object and gently press down on the pin, but it inevitably came with some casualties.

fallen warriors. may they rest in peace.
After the pins were placed, it was smooth sailing to finish up the job.

battery!

The last thing to solder was the battery, which was simple but nerve-wracking. I’m always afraid of blowing things up when working with batteries, so there was a lot of double-checking—red wire to +, black wire to -, make sure they don’t touch, etc. I wrapped up the ends in masking tape like the README recommended, and slotted the battery in between the microcontroller sockets.

i lowkey forgot to take pictures when soldering the battery (oops), so have a picture of one of my plants instead (one half of the keyboard is there in the background).

finishing touches and a little debugging

Once everything was soldered, I just needed to plug in the switches and the keycaps. I took a little care to make sure I wasn’t bending the switch pins, but other than that, simple and easy!

microcontroller socketed, battery soldered, and switches installed!
keycaps!

Once these were in, I tested each of the keys to make sure the connections were solid. A couple of them didn’t work, but the fix was easy—I just had to redo some obviously bad solder joints.

I also cut up some…I think they’re called cabinet bumper pads? to use as ad hoc keyboard feet. I found that this was surprisingly effective at preventing the keyboard from sliding around (though you want to place them so the keyboard doesn’t tilt over when hitting keys at the edges).

i think it's funny that this works so well.

And then the assembly was all done!

omg
omgomg
omgomgomg

on layouts and firmware

Once the physical form of the keyboard was complete, it was time to get its brains up and running. The temper README mentions that it was added to Mirokyu ZMK as an outboard, which I assumed meant that all my problems had already been solved. There was only one small issue, which was that I had no clue what it meant to be added to Mirokyu ZMK as an outboard.

So there were three things to figure out—what is Mirokyu, what is ZMK, and what does it mean to be added as an outboard?

Actually, I had come across Miryoku in the early stages of picking out the keyboard that I wanted. The thing that took me a bit to realize is that Mirokyu is a keyboard layout, just like QWERTY or Dvorak. In particular, Mirokyu is a layout for 36-key keyboards, designed for the tiny number of keys and optimized for ergonomics.

On the other hand, ZMK is firmware—it’s the software on your keyboard that talks to your computer. Putting that together, it should make sense that Mirokyu ZMK is the implementation of the Mirokyu layout for ZMK—it’s actual software that lets you use the Mirokyu layout on keyboards that use ZMK.

As such, Mirokyu ZMK needs to know something about the physical keyboard you want to build firmware for, and that’s where being “added as an outboard” comes in. It means the creator of the temper had already done the necessary configuration for you to use the Mirokyu layout on the temper.

In short, all my problems had already been solved.

Anyway, after figuring this all out, I built the firmware using GitHub Actions. There was a little bit of fiddling—I wanted to use QWERTY[8] and increase the Bluetooth transmission power,[9] which took me a second to figure out.[10]

But now it works like a charm!

final thoughts and opinions

The keyboard is great. I can feel the difference in ergonomics, especially when using keyboard shortcuts—no more crazy pinky chording! (I am definitely a home row mod afficionado.) It’s also nice to be able to have my hands a little further apart. I didn’t think it would make that big of a difference, but I can feel it when I get back on a regular keyboard.

There is still a little to get used to. For example, I don’t type quite as fast as I can on a regular keyboard. But it only took a week or two until I was typing fast enough, and I don’t think it’s that big of a deal at this point. I’d say the actual worst part is that I’m not fully accustomed to where the symbols are (which makes writing LaTeX a pain in the ass).

Past the keyboard itself, this project gave me a new appreciation for open-source hardware. Open-source hardware allows people to build things, to get this intimate sense of ownership that only comes from contributing to the existence of a thing. I got to be the person that my keyboard real. I picked out its switches and keycaps, I soldered and debugged it; I added these goofy cabinet bumper feet. I got to make something is truly mine.


  1. I am a programmer, gamer, and former engineering student with a history of repetitive strain issues, lol. ↩︎

  2. I can neither confirm nor deny the whether r/MechanicalKeyboards had any impact on this decision. ↩︎

  3. But I’m glad it was there. It probably helped that I didn’t know too much; had I known how tiny SMD diodes are, I might have given up before I even started. ↩︎

  4. Some others I considered were the Ferris, Corne, Sofle, and chocofi. ↩︎

  5. the wonders of capitalism! also, my lawyer would like me to mention that it is not legal to buy all things. just most things. the legal ones. ↩︎

  6. They’re small, cheap, and easy to lose or damage. ↩︎

  7. I used Mill-Max pins and sockets. ↩︎

  8. For now…maybe I will change my mind. But that’s an adventure for another time. ↩︎

  9. This fixed some connection issues I was having. ↩︎

  10. Set board to nice_nano_v2, shield to temper_left, alphas to QWERTY, and kconfig to CONFIG_BT_CTLR_TX_PWR_PLUS_8=y. Then build. Do it again for temper_right. It seems obvious in hindsight that you need to build two different UF2 files, once for each half, but it wasn’t exactly obvious at the time. ↩︎