Skip to content

Keyboards

K3 Pro

A few months ago I got my first keyboard that supports custom firmware, the Keychron K3 Pro and it’s really good. The layout is nice and has a function row unlike the K7, it was a little annoying having to do shift-fn-grave to type tildes along with some IDE binds like fn-shift-6 for refactoring.

Out of the box the RGB on the K3 pro sucks, the (otherwise high quality) keycaps it comes with are opaque and have a wide base which blocks out the light, also the maximum brightness is ridiculously low.

Thankfully you can buy a separate set of translucent ABS keycaps which shine through much better, and do some QMK firmware tweaks to increase the maximum current. The default CKLED2001_CURRENT_TUNE is set to 0x14, or about 8% so I boosted it to 0x34 or about 20%.

Keycaps

As any perfectly sane person with a lot of time would do, I sanded off the top all the keycaps by hand (ft. Dash!):

20230421_015107.jpg

It looks soooooooooooooooooooooooooooooo pretty.

Unicode

Another cool thing I did with the keyboard is implement the agda emacs input mode on the hardware itself, no pynput or AHK involved. This is extremely useful for writing proofs outside of emacs or an editor with TeX.

It has some cool features which are not possible with built-in composition:

  • Ability to type most unicode characters that are useful for programming in Agda
  • Most of the ergonomics of the emacs input mode
  • Supports Windows (WinCompose) / Mac / Linux, see QMK’s Unicode Support docs
  • OS auto-detection mostly stolen from u/kapij which was merged into main but didn’t roll into Keychron’s fork until recently
  • Finish query with enter key or pressing unmapped character
  • Cycling with left and right arrow keys
  • History with up and down arrow keys
  • Print query with F1 (works with history for a reverse-query)
  • Backlight hints for navigation (blue is a tree and green is a leaf)
  • Sticky prefix with F2, this allows you to lock in a prefix like ^ (superscript) and holding down \ for ¹²³⁴⁵⁶ᵃᵈᶠᵍʰʲ, or even MI (bold italics) 𝒕𝒐 𝒒𝒖𝒊𝒄𝒌𝒍𝒚 𝒕𝒚𝒑𝒆 𝒄𝒖𝒓𝒔𝒆𝒅 𝒕𝒆𝒙𝒕 𝒍𝒊𝒌𝒆 𝒕𝒉𝒊𝒔

This was done with over a thousand lines of QMK C code and a Dart script to convert the word to codepoint multimap to a flat tree data structure.


Created April 28, 2023
Updated May 10, 2023