Eyelash Corne with Boken and Twilight switches

Posted

Tweaking Switch Weight for Home Row Mods

Using Home Row mods was always a challenge for me. When trying Home Row Mods on QMK-based keyboards, the problem was always timing and chords. Sadly, chords are an all-or-nothing feature unless you invest in building custom functions in the firmware, something I have yet to get into.

However, the story on ZMK keyboards is very different. The behaviours in ZMK allow for greater flexibility with keyboard setup, albeit with increased complexity, at least for those just starting out.

Equipped with a new Corne-J/Eyelash from PandaKB, I set out to finally master using Home Row mods. The promise of improved ergonomics was all too alluring.

The behaviour:

// LEFT                        JOYSTICK           RIGHT
// 0  1  2  3  4  5               6               7  8  9  10 11 12
// 13 14 15 16 17 18           19 20 21           22 23 24 25 26 27
// 28 29 30 31 32 33           34 35              36 37 38 39 40 41
//          41 42 43                              44 45 46

// Home row mods — hold triggers only when a key on the OPPOSITE half is pressed
hml: homerow_mods_left {
	compatible = "zmk,behavior-hold-tap";
	#binding-cells = <2>;
	flavor = "balanced";
	tapping-term-ms = <220>;
	quick-tap-ms = <150>;
	require-prior-idle-ms = <120>;
	bindings = <&kp>, <&kp>;
	hold-trigger-key-positions = <7 8 9 10 11 12 22 23 24 25 26 27 36 37 38 39 40 41 44 45 46>;
	hold-trigger-on-release;
};

hmr: homerow_mods_right {
	compatible = "zmk,behavior-hold-tap";
	#binding-cells = <2>;
	flavor = "balanced";
	tapping-term-ms = <220>;
	quick-tap-ms = <150>;
	require-prior-idle-ms = <120>;
	bindings = <&kp>, <&kp>;
	hold-trigger-key-positions = <0 1 2 3 4 5 13 14 15 16 17 18 28 29 30 31 32 33 41 42 43>;
	hold-trigger-on-release;
};

Nothing fancy. The above approach follows standard ZMK guidelines. But unlike QMK, this behaviour can be applied only to select keys, the Home Row mods. For Layer Toggle, I can keep the other config, which uses a hold-preferred behaviour on the thumb cluster.

&lt {
	quick-tap-ms = <200>;
	tapping-term-ms = <150>;
	flavor = "hold-preferred";
};

The last obstacle was accidental presses. I know that the split keyboard community raves about Sunset Choc V1 switches, but I personally cannot stand them for longer typing or programming sessions. Not to mention that, together with Red Pro or Choc Browns, they share the same LEGO-like sound (I love how EIGA appropriately captured this in his video).

So the only options for me were either Twilight or Bokeh silent switches. And silent they are. They are smooth and pillowy, only a tad scratchy, but untrained ears will not pick it up.

The problem?


Twilight switches are too light for Home Row mods. With Twilights, it is impossible for me to keep my fingers hovering over the home row without accidental activations.

At the same time, Bokeh switches, being heavier, prevent activation, but they put a bit too much effort on my pinkies and others.

The solution is simple. I put Bokeh switches on the keys where I park my fingers. Everything else is Twilight for smooth, easy presses.

Right side of Eyelash Corne with Bokeh and Twilight Choc V1 switches.

And thus, the perfect keyboard is born. For me, at least. For now.

Jarek Rozanski
Jarek Rozanski
@jarek@its23.eu

Hi, I am Jarek, a seasoned Software Engineer with extensive experience in developing complex systems like search engines, web applications, and electronic trading platforms. I currently run my own consulting firm, Input Objects, and privacy-first web analytics, Wide Angle Analytics. When acting as a Functional Programmer, I primarily code in Scala but also have a strong interest in OCaml and F#. On a daily basis, I use various programming languages, including Java, C#, JavaScript, TypeScript, and Go.

This account is attached to my WordPress instance. My main Mastodon account is @jarekrozanski@mastodon.social

39 posts
8 followers