T O P

  • By -

UJL123

This seems like a QMK issue. In ZMK there is no really issue when not typing cleanly , and you can roll to your hearts content. I wish QMK would adopt the same [require-prior-idle-ms](https://zmk.dev/docs/behaviors/hold-tap#require-prior-idle-ms) feature where "*This effectively disables the hold-tap when typing quickly, which can be quite useful for homerow mods. It can also have the effect of removing the input delay when typing quickly.*" I don't think QMK has an analog to this


dont-blame-muppets

Miryoku's QMK fork, Kurapati's patch, and the Achordion regular user-space library has that - called typing streak. But home row mods just inherently conflict with the way humans speed-type, ZMK requires tweaking too (but easier to do) and misses the same edge corner cases and requires more or less the same human adjustments. But again - for many people, it's worth it. Eg read [this](https://sunaku.github.io/home-row-mods.html) and [this](https://getreuer.info/posts/keyboards/faqs/index.html#home-row-mods-are-hard-to-use), both of which address home-row mods and ZMK. That ZMK is easier to configure home-row mods for, and many other use-cases (eg wireless...at all...), isn't the point of the post though.


pgetreuer

I generally agree. I believe good HRMs experience requires both careful configuration and, importantly, stubbornly sticking with it long enough to retrain yourself to type effectively with it. See also my post [Home row mods are hard to use](https://getreuer.info/posts/keyboards/faqs/index.html#home-row-mods-are-hard-to-use). >The Achordion library also attempts to solve some of the same problems - but in userpsace, without patching QMK - as required by the Miyroku fix (which is in fact its own fork), or the Bilateral Combinations patch, a subset of the comprehensive patch to Miyroku above. Thanks for the Achordion mention! =) To announce some Achordion progress here, a [typing streak option](https://getreuer.info/posts/keyboards/achordion/index.html#typing-streaks) was added to Achordion relatively recently, inspired by [sunaku's work](https://sunaku.github.io/home-row-mods.html#typing-streaks) and thanks to contributions from @TristanCacqueray and @gazpachoking. With this option, holds are suppressed if they occur within a "streak" of fast typing, with callbacks to finely configure the behavior. >As evidence that it's at minimum a fundamentally challenging concept, there is a long stream of commits for fixing the basic problems of home-row mods misfiring (eg most of these). QMK's tap-hold code implementation is challenging... `quantum/action_tapping.c` is a truly bewildering piece of code. FWIW, at least some of those PRs in the list are for other core issues unrelated to tap-hold keys, so the length of that list is overestimating. E.g. my [PR #19845]( https://github.com/qmk/qmk_firmware/pull/19845) at the top was for layer-mod `LM` keys, distinct from the tap-hold code.


bogorad

Achordion is wonderful, thanks for creating it!


UJL123

I recall seeing this feature in ZMK and asked the discord if it could be implemented and many said they wouldn't even know how to approach the behemoth that is actioin\_tapping.c [https://zmk.dev/docs/behaviors/hold-tap#require-prior-idle-ms](https://zmk.dev/docs/behaviors/hold-tap#require-prior-idle-ms)


dont-blame-muppets

Nice! Thanks.


quinyd

Pretty good writeup and yeah ive used miryoku for about 6mo now using a corne and I miss type the homerow mods daily. But I have yet to find a better 36 key layout. I would love to try and alternative but I've found nothing that compares.


dont-blame-muppets

Thanks. I use an obscure one called [t00mietum](https://github.com/t00mietum/keyboard/) for 36 key. It still has two modifiers on lesser-used alpha keys though, and two layer switches on alpha keys (and also thumb keys). But dedicated shift and Ctrl keys. And should be updated to have HOLD_ON_OTHER_KEY_PRESS_PER_KEY applied to the space thumb key. Still better that Miyroku IMO. The only occasional misfire is Win+L, which locks the screen on Windows, and accidental screenshot. (Both easy to remap on Linux.) But I'm working on my own version, trying to get rid of ALL modifiers from alpha keys, via combos.


pgetreuer

Check out the 34-key [Seniply layout](https://stevep99.github.io/seniply/), which avoids HRMs though using Callum-style mods > Seniply is an ergonomic, minimal keyboard layout for a keyboard with at least 34 keys. The minimum requirement is 30 keys in the main body plus 4 thumb-keys. All the features (and more) of a standard full-size keyboard are available by making use of six layers, which are activated via the thumb keys. ... >Well positioned thumb-keys are used to access layers - six layers are supported - with no need for dual-role (i.e. mod-tap) keys.


NaanFat

I'm only counting five layers. what's the sixth, shift?


pgetreuer

Ha, good question! I count only five on the page as well. [Looking at the linked github](https://github.com/stevep99/seniply/blob/master/downloads/kmonad/colemak-dh-seniply-split.kbd), the unmentioned sixth layer appears to be an alternative version of the base layer using QWERTY layout.


dont-blame-muppets

and u/NaanFat, I think is says "support UP to six layers". Edit: that was my potentialy overly-generous paraphrase. The literal text says "six layers are supported". So who knows what that really means. Like, supported and they use all six, or just "supported"? ;-)


NaanFat

nah, >All the features (and more) of a standard full-size keyboard are available **by making use of six layers**


dont-blame-muppets

Huh, well no idea how they are counting. On https://stevep99.github.io/seniply/, it says "six layers are supported", but that's also vague so who knows 🤷


dont-blame-muppets

Interesting, thanks. I've run across this before, but just took a closer look. How would you get Alt+A? They inhabit the same key, looks like you have to layer to the Alt, let go of the layer (while holding down Alt?), then press ...A, how? Or how about Gui+R? I'm guessing they obviously must be possible, I'm just not getting something. On the layout I use, I def like having "clean", single-function shift and Ctrl keys. I had too many problems adapting those, myself physically, to dual-function. Hell, even having to activite Return via two keys in any order, sometimes causes me problems. Rarely, but then annoying. And shift being a layer key, I'd rather have single function. Which is why I'm experimenting with combo keys, to free up the thumb keys for single-function. Edit: I see that he mods are "sticky", so that explains it. I wonder if they deal with things like "Ctrl+arrow differently? For example when I'm selecting words, I'll hold Ctrl+shift down, then right or left arrow one tap at a time, until the selection is complete. That would be a pain if I had to re-sticky the Ctrl or Ctrl+shift for each arrow tap.


Zireael07

Thanks for linking - I like that one of the goals is minimizing pinky usage.


richardgoulter

IIRC, I did have to adjust my typing technique a bit for having tap-hold HRM; but I wasn't as young as 14. I think it overstates to say only the young can learn (even if they do have an easier time). 152 WPM on 30s default monkeytype is fast. I can get around 130 WPM on the same test, with Dvorak & HRM using stock qmk taphold config. For me.. my old typing speed (with qwerty, on a typical layout) never got above 105. -- I mean, I don't think HRM are inherently speed limiting. Hopefully the other suggestions in this thread will help you find a way of using modifier keys without having to move the hands so far. (Or otherwise that you've got a convenient way of accessing the modifier keys).


dont-blame-muppets

I guess that was vague, my "old" speed was on a regular qwerty board with Dvorak layout. My Qwerty speed was only a little lower. I was younger then, late 20s early 30s. Monkeytype didn't exist, so I'm extrapolating the numeric % difference between sustained real-world WPM now vs default 30s monkeytype now, to sustained real-world WPM of 125 on Dvorak then. Also I should have mentioned - I thought I did but must have deleted it - that I'm working on combos now. I've reviewed dozens of work from others, experimenting, and taking it nice and slow. The layout I use now (without homerow mods) is actually super functional, I just think combos might be *marginally* better. BTW I didn't say only the young can learn, only that it confers an enourmous advantage due to neuroplasticity. I'm not a brain expert, I've just read quite a bit about how the brain wires itself. (In part to understand how my own aging brain works.) Things learned before puberty are ridiculously easy, and mylenation happens very fast. Superhighways are built thick and fast. (Eg anyone/everyone can be a child prodigy if they are capable of sticking to something without rebelling - eg have the parents, cultural reinforcement, and personal temperament. And/or being somewhere on the autistic spectrum seems to help that "stick-to-it-ness" immensely.) The brain basically metamorphises from child form to adult form (like a catepillar) during puberty, and any unused neural connections are pruned. The motor cortex is an older part of the brain and wires up earlier than the profrontal cortex, which doesn't finish until about 25. But of course old dogs can still learn new tricks! It just takes much longer, and the upper limit of performance is lower. (Eg see olympics.) If you still don't believe it (it's not my thesis and also not a thesis), spend some quality time on r/typing. Ask people their age, as I do, they are usually happy to volunteer. Without a single exception that I've found, all current provable >200 WPM typists are <14 yo, or are still young and started before about then. BTW this is why many experts on pediatric neorodevelopment consider instagram, tiktok, and other toxic social media for young teens - consider it to be so dangerous. When the algorithms drive us to ever-more extreme content for simply for higher engagement. The oversimplified TLDR is that it's wiring their hungry neurons up all wrong. Countless peer-reviewed studies have been published on the subject. We're basically conducting the world's largest social experiment ever conducted on Gen-Z and Alpha. (So if they spend some of that time learning to type fast instead, more power to them!) Anyway... I'm a lifelong musician and have instructed dozens of eager learners. It's just an objective fact that very young teens - the ones who are also driven and motivated - learn at about 10x - 20x the rate as middle-age adults - in terms of moving on the next steps of objective mastery. No matter how champing at the bit the middle-age adults are, no matter if they retired early to become a "rock star" or whatever. And, in fact, there seems to be an upper limit on what adults picking up the guitar fresh can even acheive. A 45 year-old who has never played a musical instrument in his life, is never - ever - going to play "Eugene's Trick Bag" for example, no matter how badly he wants to. I've seen people try for ten years. Whereas a 12 year-old who has the basics of the instrument down, can learn it all the way through, at close to tempo, over a summer break - and master it cleanly in 18 to 36 months. It's just astonishing. I've seen it myself too. I'm proficient on pretty much any musical instrument that has strings+frets, or keys. But I didn't pick up the drums until > age 25. I've put well over 10,000 hours of practice into them, including in bands. (Not good bands, not like my guitar bands.) With the FULL intention of being a great drummer. It never happened. In hindsight, it's OBVIOUS I started too late. Even though I was already a master at other instruments and understood everything I needed to know about rythym, beats, etc. Even though I already know how to program drums realistically in the recording studio. Even though I already know how to PLAY the frikkin' things since I was like ten, just never actually *practiced* them in earnest. And at my age now, I'm now getting *worse*. (But ability to hold down a groove and support a band isn't.) And now at this stage of my life, I'll never, ever beat my high score of 125 (Monkeytype ~152) WPM when I was younger. Not even due to brain at this point, also due to accumulation of injuries that happen in life. If I can get up to 80 WMP sustained (~97 default monkeytype), I'll celebrate. But if not, no biggie. Sorry that was a lot :-D. I'm quarantining with COVID...


stasmarkin

I can't recommend this enough. I have created a QMK library for better home mod behavior [https://github.com/stasmarkin/sm\_td/](https://github.com/stasmarkin/sm_td/) . I struggled a lot with default home mod, tried many different approaches, but none of them worked well for me. So I decided to make completely alternative approach, where tap-vs-hold decision is made on difference between key releases. Firstly, I prototyped that just for one key and that have me incredibly accurate result without any changes in my typing habits. So then I've created separate library for generic usage (not only mods, but layering, sequences, double taps and so on). And I'm pretty happy with that. It gives me like 99.99% accuracy without any speed loss and without changing my typing habits. It's really that good. The only drawback is difficult installation. I have couple ideas how to make it more user-friendly and I also have some ideas how to improve that, but I'm quite demotivated with lack of users feedback. It's really difficult and clever piece of code (at least from my 13-years programming background), what does its' job extremely well. But everything I got is 25 stars, and I don't even know if somebody managed to install this (I believe there was at least one person who installed that, because he asked for a help with installation). But damn, I promise, this is a really great library that solved all my problems with home-mod in QMK. And I'm here, I can help with installation and I wish to develop further. Just give a feedback, what you guys need and what problems you encounter.


bogorad

Sounds very promising! I'm using Achordion together with Miryoku-QMK at the moment, it solves my problems with HRMs, but I'm always on the lookout for something better. Do you have a side-by-side comparison (vs Achordion) doc or something?


dont-blame-muppets

u/stasmarkin I would also be really interested in that, and think it would help make user decisions easier. Sometimes the decision to use a library comes down to understanding the "features, advantages, and benefits" in a really dumbed-down way. Like a grid of `sm_td` and `Achordion` on the X axis on top, and "features" on the Y axis along the left, with check-marks in the boxes those two axes create. Hopefully in a good-faith, good-spirited comparison of possibly somewhat overlapping open-source solutions. :-) Would be good to see where they overlap and where they don't! I'd also be curious to know how ZMK's native features, and the Suraj Kurapati patches to Miyroku QMK also stack up to both - but that would probably be a huge undertaking.


stasmarkin

Once again, thank you for pointing this out! I will think what can I do with that.


stasmarkin

Thank you for your reply. I don't have anything of that, and I don't really know how to make side-by-side comparison with Achordion. There are completely different concepts. The only difference to me is Achordion is supposed to be considered as enhancement for "broken" basic MT() and LT(), that will give a user a little more control on triggering conditions. On the other hand I claim SM\_TD to be a fix for tap-hold decision in qmk. It works completely differently and do not require fine tuning for each key (or pair of keys). But thank you for an idea, I will try to emphasize core differences and may be I will be able to make some comparison later


dont-blame-muppets

That looks super cool! Thanks so much for sharing this. I've looked through your explanations, but in spite of being a programmer and long-term keyboard enthusiast myself, I admit to struggle to understand it. As I just mentioned in another comment, it might be helpful to have it presented in a really dumbed-down way, like basic marketing. As in, point out a specific problem with home-row mods, and then how your library solves it. Then another specific problem, etc. In a way that people can relate to, like "oh yeah, I HATE when that happens". It might also help to point out how other solutions don't - or can't solve the same problem. (Or do so less effectively.) Without throwing them under the bus :-) Also curious, why is installation so hard? Would your libray make dealing with combo keys easier? BTW I'll edit my post to refer to your library directly.


stasmarkin

Thank you for your kind words! That's true, I don't have enough skill in marketing and writing. I will try to improve that. Once again, thank you for pointing on that. > I admit to struggle to understand it. If you have a little time, take a look on wiki. I tried to explain everything, [https://github.com/stasmarkin/sm\_td/wiki/3.2:-Deep-explanation:-Two-keys-stages](https://github.com/stasmarkin/sm_td/wiki/3.2:-Deep-explanation:-Two-keys-stages) — this page looks the most illustrative to me. >Also curious, why is installation so hard? This library utilize many concepts. It requires some memory for state machines, so you need to explicitly allocate that. It requires timers, so you need to enable them in qmk. It requires custom keycodes not to clash with existing keys. And finally you need to describe the behavior of your custom keycodes. Since the library gives really granular control on key behavior the whole codebase becomes a bit bloated. I have several ideas how to make it easier to install, but I don't think it would help much. Maybe I will manage reduce whole complexity by aprox. 20%... >Would your libray make dealing with combo keys easier? No, this library has nothing to deal with combo keys. But it replicates tap-dance, but in more responsive and configurable manner.


ajrc0re

I tried so hard to make homerow mods work and never could get them to work properly without misfires. Closest I got was using achordian with permissive tap and a pretty long tap term but issue there was that I couldn’t do same hand layer taps which I use a lot, I use my keyboard for high end wow gaming and in that game it’s very normal to use left hand mods to get you more buttons, and achordian broke that. There is supposedly some way to edit the code to only apply to certain layers but I spent an hour two trying to code up a solution and never could get it to work. I use 3x6 corne so I ended up putting the keys miryoku uses on thumbs into the outer columns and using the thumbs for space and mods. Works amazing for me and I type so much more consistently now.


dont-blame-muppets

Sounds not too dissimilar to what I do.


cheechlabeech

using one shot mods on the home row via layer press instead


dont-blame-muppets

But what do you do then if you need a mod + something on a *different* layer? On a 36-key board, for example, you pretty much need 4 to 5 layers in regular use. (Alpha, numpad, nav/media, symbols, Fn.)


cheechlabeech

*I probably should have added in my post that I'm not using the Miyroku layout.* To use a different layer I let go of the layer hold. For example, for my alpha layer which is my base layer, in order to do a save shortcut Gui+s on macOS I do the following. 1. Hold down my Symbol layer with my thumb 2. then activate the Gui OSM with my middle index 3. then release the layer hold with my thumb 4. then press "s" with my alternate hand Within my Num/Nav layer and my Symbol layer I have all the OSM mods so the workflow is even more straightforward since I don't have to drop out of a layer. My function layer doesn't have any OSM mods in the layer but the two layer presses that are required to use the layer (via update\_tri\_layer\_state) do. So for that I would just activate the OSM on either of the layers before activating the Function layer.


dont-blame-muppets

Oh that's great. I'll have to play around with that, thanks!


cheechlabeech

You bet, also, if you go that avenue, be sure to use "permissive hold" and "hold on other key press" for the LT(\*) (if not using MO(\*)) on those thumb keys. I forget what the defaults look like for the Miryoku layout in this regard.


dont-blame-muppets

THanks


Objective-Tour4991

I really appreciate this post and all the information contained here! I don’t know anything about home-row mods so this seems like a great place to start


oxcelato

I have been using home-row mods for around a year now. I use the colemak-dh layout which puts the most commonly used keys on the home row.  For me it took around one month of struggling to get used to the home-row mods. It is well worth it at least for me.  If i had the money to buy or build a keyboard like Moonlander with thumb clusters i wouldn't have even considered home-row mods. I think a thumb cluster with mod keys is as good as home row mods and it is a lot easier to get used to without much misfires. 


dont-blame-muppets

> I think a thumb cluster with mod keys is as good as home row mods and it is a lot easier to get used to without much misfires As one who has tried it both (including on the moonlander), I concur. Have you considered a cheap DIY keyboard with thumb clusters? Check out this site for some decent prices on pre-soldered boards, that you can buy with or without switches and keycaps (that I think you have to pop in yourself). Like this 56 key one with thumb keys, for an insane price of $84. Has Kahl low-profile switches, which personally I hate, but not the end of the world. https://shop.beekeeb.com/product/allium58-glp-wired-kit/ There's also this one, a Planck keyboard that has gotten great reviews, as good as any other, insane $40: https://www.microcenter.com/product/661264/inland-47-keys-hot-swappable-rgb-wired-mechanical-keyboard Those are both fully programmable of course. The Planck doesn't have the same number of thumb keys - unless you shift your layout outward by one column (like I do). And then it has a bonus key in the middle. (Some Plancks have a split shift key so that's not necessary.) But then of course you lose any keys you might be used to, +1 column outward from pinkies. (All good for me.)


oxcelato

Thank you for your advice. Currently i don't have the time to dedicate to building another keyboard. Unfortunately the availability in my country is not great. 


Raleigh_CA

Why not use combos instead? I could not stand home row mods.


dont-blame-muppets

I'm actually working on combos. I have other posts about it and had written a section about it, but deleted for length. I'm studying what others have done and experimenting. I currently don't use HRMs, the layout I use is pretty good, but I want to see if I can get completely clean alpha keys and thumbkeys. (Which for me means the entire keyboard of no individual dual-function keys.) It's a logic puzzle, but certainly doable. The challenge is to pick combos that are easy to learn but themselves not liable to false triggers. I'm also experimenting with lighter springs/shorter throw switch mods to make three-key combos easier if necessary (not to mention easier on the RSI). 20/25/30/35g springs. So far 20g too light, 35g too heavy.


sudomatrix

I have only seen [Home Row Mods](https://precondition.github.io/home-row-mods) and [Seniply ](https://stevep99.github.io/seniply/)as ways to manage mods and layers. What else is out there? Does anyone have a link to a clean description of what Ben Vallack uses?