BTW, not sure if you’re aware of my Mantis keyboard design. It was inspired by the same hexagonal key caps but has since evolved to my own 3D printed sculpted hexagonal key profile, which is a lot more comfortable for typing: https://github.com/fxkuehl/mantis
My v0.1 prototype resembled your keyboard. But your PCB is much prettier. And I haven’t designed anything with an integrated controller. Kudos! I bet this is not your first PCB design.
I’m guessing your layout uses 2 keys for each pinky, 5 for each index finger and 2 for each thumb.
Nice. The world needs more hex keyboards!
Awesome! Thank you for sharing. I want to to try and use PCB assembly for the next version of my keyboard. I’ll bookmark this post for information and inspiration.
I had similar problems with a Cantor build, and I have pretty small hands. I think the problem was not necessarily the key spacing, but the flat key profile that makes it harder to feel the key positions and easier to press two keys at once. MX keys typically have larger gaps between the key tops, which makes orientation easier for me. Interestingly I also have no problem with chiclet keys on my laptop with 3mm gaps between keys.
I was hoping to try LDSA key caps to fix this, but they never came back in stock before I moved on from my Cantor. There are other sculpted key cap options to try. E.g. https://lowprokb.ca/collections/keycaps/products/ddc-choc-pbt-blank-keycaps, https://www.asymplex.xyz/product/cs-chicago-stenographer-profile or https://3dkeycap.com/products/klp-choc-keycap-set-low-profile-ergonomic-sculpted-keycaps.
I used to have two Type Matrix boards long time ago. It got me into thinking about more ergonomic layouts and taught me first Dvorak and later Colemak. I agree with others’ comments about poor longevity. I also find that it’s not a very ergonomic layout in hindsight.
Learning how to clone this layout in a custom mechanical keyboard is like jumping into the deep end. There may be other ways. E.g. get an XD75 or ID75 and make a layout that’s “close enough”. That takes PCB design and lots of firmware hacking out of the equation. But you’d still learn about different switches, layers, thumb keys, maybe home-row-mods if you want and ease you into more possibilities of firmware hacking. You may find a more ergonomic or efficient layout than the Type Matrix that way, as well.
The keycaps are my own design, 3D printed at JLC. Their footprint matches these: https://fkcaps.com/keycaps/hex. They were the original inspiration for this layout and I used them on early prototypes.
I made a short demo video. Sorry about the bad audio: https://youtu.be/Rh3bqSVHcbg
Pink switches are very light. I bottom out pretty hard, so they’re probably wasted on me. It makes a nice percussive sound in the wooden case, though. But I do find them quite usable with these sculpted keys. I didn’t like them on a Cantor with MBK key caps as it was too easy to actuate two keys at once by accident.
For me, Pro Red is probably the sweet spot for light linear switches.
I was not considering the press point. I was using the center of each key.
In a column staggered layout I’m calling the distance between the centers of adjacent keys in the same column the row spacing. The column spacing is the distance of imaginary lines drawn along adjacent columns (through the key centres). I measure the shortest possible distance, which is at a right angle to those lines.
In a row staggered point of view it’s the other way around.
The different spacing comes from the hexagonal key shape. If you think of it as row staggered, the keys have 21.5mm horizontal (column) spacing and 18.6mm vertical (row) spacing. Rotate your point of view by 30° and this flips to a column staggered layout. Now the columns are spaced 18.6mm and rows are 21.5mm apart.
Square keys don’t have the same hexagonal symmetry. When you look at it as row staggered, it’s normal MX spacing, 19x19mm. When you look at it as column staggered, you need to do some trigonometry. The column angle is atan(0.5) = 26.6°. the column spacing is 19mm × cos(26.6°). The row spacing is from Pythagoras sqrt(19^2 + (19/2)^2).
Yeah, I wasn’t really happy with the height and sharp edge of the taller keys. The latest version flattens that a bit. It still has the lower half a spherical dish facing the key well, but flattens out above that. This makes it more versatile as a thumb key as well.
https://github.com/fxkuehl/mantis/raw/main/assets/mantis-v0.3-leds.jpg
https://github.com/fxkuehl/mantis/blob/main/keycap/keycap-v3-28.stl
That’s a cool find. I had not heard of the Klacker BS. The exact spacing and hand angle will be slightly different but pretty close. Column-staggered hexagonal keys give you 18.6mm between columns and 21.5 between rows with a 30° angle. 0.5u row-staggered MX keys with 19mm spacing give you about 17mm between columns and 21.2mm between rows at 26.6°. Also the resulting column-stagger is not exactly 0.5u but about 0.45u.
Klacker BS doesn’t eliminate the top inner index finger key. Moving that to the pinkies like Mantis does, would bring the hands 1u closer together.
Thank you for the reference. I just watched the movie for the first time. I mean I was going for an organic looking shape with these keycaps, but maybe I succeeded a bit more than I intended. I should make a “special” version for Halloween.
The title picture and the first picture in my post both show them installed. Here is a direct link to the title picture.
Disclaimer: I haven’t used a keywell keyboard.
Does the keywell cause the use of different muscles and finger joints to press keys? On a flat keyboard, key strokes seem to move the whole finger from the knuckle. If a keywell results in a curling or stretching motion of the fingers to actuate the keys, that would use different muscles and move different joints.
Another thing would be whether you’re using wrist rests differently.
I’ve done something like that with a multmatrix transformation. There is an example of doing a skew transformation like that in the OpenSCAD user manual. This works with any 3D shape, not just extrusions. So you could transform a cube into a parallelepiped.
IME, to use git effectively, and make sense of the man-pages, you have to know a lot of the internals of how git works. I found it helpful to read “Git from the bottom up” when I had to start using it professionally: https://jwiegley.github.io/git-from-the-bottom-up/
With the right key mapping the hex grid naturally leads to hand rotation and column stagger. It also takes “1u distance from home” literally because there are no diagonal keys for the index fingers and pinkies that are 1.4u away. It allows keys to rotate in 60° steps rather than 90° steps. That allows for some interesting ways to exploit tilted key cap profiles.
I may ask the opposite: why squares? That’s just as arbitrary, if you think about it. I learned typing on a mechanical typewriter that had round keys.
I wrote a SW a while ago that does an automated optimization of keyboard layouts for a given body of text. It only optimizes the base layer. Since I did this with small/custom keyboards in mind, it only considers the core 3x10 keys. You’d still need to create other layers for numbers, symbols, etc. Even with all the automation, it’s still hard to make a good layout. It depends a lot on the text you use to train it, and on the set of criteria you’re trying to optimize (heat map, rolls, same-finger bigrams, hand alternation, minimal finger movement, etc.). It also generates many layouts, so choosing one can be daunting. I added a ranking system that should make it easier.
The project is dormant at the moment. I never quite got to the point where I was ready to commit to actually learning one of the auto-generated layouts. I want to pick it up again at some point, write some documentation and make an “optimal” layout for my Mantis keyboard. The code is on github: https://github.com/fxkuehl/kuehlmak
The “half-swept” version of Sweep does that already: https://github.com/davidphilipbarr/Sweep/tree/main/Sweep half-swept
The easiest way to make the board flippable if to mount the controller upside-down on one side. Half-swept uses solder jumpers for all the pads of the controller footprint, which does basically the same thing as flipping the controller.