I saw the FAK firmware that @semickolon wrote / shared here, and thought it’d be fun to try to write firmware for.
Nickel is one of these “JSON + functions” languages.
I found it pretty fun to write declarations for the keymaps. I’ve shared my code at https://github.com/rgoulter/fak but here are some things I thought were neat:
-
Using multiline strings to declare the alphas layer (and then mapping this to keycodes) is very tidy: in ncl/layouts.ncl
-
Supporting different layouts for a keyboard, e.g. ncl/keyboards/rgoulter/ch552-44/layouts.ncl, so the CH552-44 can have a split 3x5-3 keymap.
-
Using tap-dance to allow for ‘tap’/‘home row mods’ alphas, e.g. ncl/keymaps/ch552-48/default/keymap.ncl
The PCB design files (and other useful files, like plate files, 3DP case files, etc.) can be found at https://github.com/rgoulter/keyboard-labs (there’s also a design which uses the CH552T directly).
It might not be “hand-shaped”, but the use of layers (and tap-dance/home-row mods) will minimize hand-movement, which is another way to approach ergonomics.
Yeah, minimizing hand movement, and reducing use of the pinky fingers, and letting the thumbs use at least 2-3 keys each are all things that improve comfort.
https://kinesis-ergo.com/solutions/keyboard-risk-factors/
It only fulfills point 4 I think, but it does look like it might not be in line with the rules on the sidebar, so it will probably get removed (admittedly I don’t know if posts need to be manually approved here, so I’m not sure about this).
It’s technically a unibody split (notice that t and y are 2u apart) so that qualifies it as ergonomic according to the sidebar if I’m interpreting it correctly
I thought it might fall into the non-split ortholinear category, but that makes sense once you pointed it out.