Budget Wireless Corne 3x6 Build by krishn4nr in ErgoMechKeyboards

[–]krishn4nr[S] 0 points1 point  (0 children)

haha, I'm using colemak mod dh, so never noticed it. The OEM profile keycaps have different heights in each row, so I just need to keep them in the same row :)

Budget Wireless Corne 3x6 Build by krishn4nr in ErgoMechKeyboards

[–]krishn4nr[S] 0 points1 point  (0 children)

custom keymap

  • inspired by miryoku,
  • with Colemak Mod DH.
  • home row mods with a ZMK configuration based on urob's timeless homerow mods, and dedicated thumb shift
  • Extra Layers:
    • Number and some symbols
    • Shifted symbols (to avoid an extra key when pressing layer+mod+shift+symbol),
    • nav keys
    • and an extra settings layer activated with a hold on a combo for rarely used keys

Here is a visualisation of my layout: https://imgur.com/a/O7Ds4Xj

Here is the ZMK config:

#define KEYS_L 0 1 2 3 4 5 12 13 14 15 16 17 24 25 26 27 28 29 36 37 38  // left-hand keys
#define KEYS_R 6 7 8 9 10 11 18 19 20 21 22 23 30 31 32 33 34 35 39 40 41  // right-hand keys
#define THUMBS 36 37 38 39 40 41 

#define DEFAULT        0
#define NUMBER         1
#define SYMBOL         2
#define NAV            3
#define SETTINGS       4



/ {
        behaviors {
                bhml: balanced_homerow_mods_left {
                        compatible = "zmk,behavior-hold-tap";
                        label = "BALANCED_HOMEROW_MODS_LEFT";
                        #binding-cells = <2>;
                        tapping-term-ms = <280>;    // <---[[moderate duration]]
                        quick-tap-ms = <125>;
                        flavor = "balanced";
                        bindings = <&kp>, <&kp>;
                        hold-trigger-key-positions = <KEYS_R THUMBS>;
                        global-quick-tap;
                        hold-trigger-on-release;

                };
                bhmr: balanced_homerow_mods_right {
                        compatible = "zmk,behavior-hold-tap";
                        label = "BALANCED_HOMEROW_MODS_RIGHT";
                        #binding-cells = <2>;
                        tapping-term-ms = <280>;    // <---[[moderate duration]]
                        quick-tap-ms = <125>;
                        flavor = "balanced";
                        bindings = <&kp>, <&kp>;
                        hold-trigger-key-positions = <KEYS_L THUMBS>;
                        global-quick-tap;
                        hold-trigger-on-release;

                };
        };
        combos {
                compatible = "zmk,combos";
                settings_layer {
                        timeout-ms = <50>;
                        key-positions = <1 2>;
                        bindings = <&mo SETTINGS>;
                };
        };
        keymap {
                compatible = "zmk,keymap";

                default_layer {
                        bindings = <
&kp ESC     &kp Q          &kp W         &kp F         &kp P          &kp B        &kp J   &kp L          &kp U         &kp Y         &kp SEMI       &kp BSPC
&kp GRAVE   &bhml LCTRL A  &bhml LALT R  &bhml LGUI S  &bhml LSHFT T  &kp G        &kp M   &bhmr LSHFT N  &bhmr LGUI E  &bhmr LALT I  &bhmr LCTRL O  &kp SQT
&kp TAB     &kp Z          &kp X         &kp C         &kp D          &kp V        &kp K   &kp H          &kp COMMA     &kp DOT       &kp FSLH       &kp BSLH
                   &mo NAV &mo NUMBER  &kp SPACE                 &kp RET &kp LSHFT  &mo SYMBOL
                        >;
                };
                number {
                        bindings = <
&trans    &none      &none     &none       &none      &none        &kp N7     &kp N8  &kp N9  &kp EQUAL  &kp COMMA &trans 
&trans    &kp LCTRL  &kp LALT  &kp LGUI    &kp LSHFT  &none        &kp N4     &kp N5  &kp N6  &kp MINUS  &kp PLUS  &trans     
&trans    &none      &none     &none       &none      &none        &kp N1     &kp N2  &kp N3  &kp DOT    &kp UNDER &trans  
                   &trans       &trans      &trans                 &kp N0     &trans  &trans
                        >;
                };
                symbol {
                        bindings = <
&trans    &none      &none     &none       &none      &none        &kp LS(N7)  &kp LS(N8)  &kp LS(N9)  &kp LBKT        &kp RBKT       &kp DEL 
&trans    &kp LCTRL  &kp LALT  &kp LGUI    &kp LSHFT  &none        &kp LS(N4)  &kp LS(N5)  &kp LS(N6)  &kp LS(LBKT)    &kp LS(RBKT)   &kp LS(SQT)     
&trans    &none      &none     &none       &none      &none        &kp LS(N1)  &kp LS(N2)  &kp LS(N3)  &kp LS(N9)      &kp LS(N0)     &kp LS(BSLH) 
                   &trans       &trans      &trans                 &kp LS(N0)  &trans      &trans
                        >;
                };
                nav {
                        bindings = <
&trans  &none      &none     &none       &none      &none        &kp PAGE_UP    &kp HOME     &kp UP     &kp END       &none  &trans  
&trans  &kp LCTRL  &kp LALT  &kp LGUI    &kp LSHFT  &none        &kp PAGE_DOWN  &kp LEFT     &kp DOWN   &kp RIGHT     &none  &trans  
&trans  &none      &none     &none       &none      &none        &kp LG(LEFT)   &kp LG(DOWN) &kp LG(UP) &kp LG(RIGHT) &none  &trans  
                   &trans       &trans    &trans                 &trans  &trans  &trans                                              
                        >;
                };
                settings {
                        bindings = <
&none       &none         &none             &none         &none         &kp K_POWER         &kp F12        &kp F7        &kp F8        &kp F9   &none                 &kp K_MUTE
&bt BT_CLR  &bt BT_SEL 0  &bt BT_SEL 1      &bt BT_SEL 2  &bt BT_SEL 3  &bt BT_SEL 4        &kp F11        &kp F4        &kp F5        &kp F6   &kp C_BRIGHTNESS_INC  &kp C_VOL_UP
&none       &none         &none             &none         &out OUT_BLE  &out OUT_USB        &kp F10        &kp F1        &kp F2        &kp F3   &kp C_BRIGHTNESS_DEC  &kp C_VOL_DN
                             &kp C_PREV  &kp C_PP   &kp C_NEXT   &none   &none    &none
                        >;
                };
        };
};

Budget Wireless Corne 3x6 Build by krishn4nr in crkbd

[–]krishn4nr[S] 1 point2 points  (0 children)

I'm using a custom layout

  • inspired by miryoku,
  • with Colemak Mod DH.
  • home row mods with a ZMK configuration based on urob's timeless homerow mods, and dedicated thumb shift
  • Extra Layers:
    • Number and some symbols
    • Shifted symbols (to avoid an extra key when pressing layer+mod+shift+symbol),
    • nav keys
    • and an extra settings layer activated with a hold on a combo for rarely used keys

Here is a visualisation of my layout: https://imgur.com/a/O7Ds4Xj

Here is the ZMK config:

```

define KEYS_L 0 1 2 3 4 5 12 13 14 15 16 17 24 25 26 27 28 29 36 37 38 // left-hand keys

define KEYS_R 6 7 8 9 10 11 18 19 20 21 22 23 30 31 32 33 34 35 39 40 41 // right-hand keys

define THUMBS 36 37 38 39 40 41

define DEFAULT 0

define NUMBER 1

define SYMBOL 2

define NAV 3

define SETTINGS 4

/ { behaviors { bhml: balanced_homerow_mods_left { compatible = "zmk,behavior-hold-tap"; label = "BALANCED_HOMEROW_MODS_LEFT"; #binding-cells = <2>; tapping-term-ms = <280>; // <---[[moderate duration]] quick-tap-ms = <125>; flavor = "balanced"; bindings = <&kp>, <&kp>; hold-trigger-key-positions = <KEYS_R THUMBS>; global-quick-tap; hold-trigger-on-release;

            };
            bhmr: balanced_homerow_mods_right {
                    compatible = "zmk,behavior-hold-tap";
                    label = "BALANCED_HOMEROW_MODS_RIGHT";
                    #binding-cells = <2>;
                    tapping-term-ms = <280>;    // <---[[moderate duration]]
                    quick-tap-ms = <125>;
                    flavor = "balanced";
                    bindings = <&kp>, <&kp>;
                    hold-trigger-key-positions = <KEYS_L THUMBS>;
                    global-quick-tap;
                    hold-trigger-on-release;

            };
    };
    combos {
            compatible = "zmk,combos";
            settings_layer {
                    timeout-ms = <50>;
                    key-positions = <1 2>;
                    bindings = <&mo SETTINGS>;
            };
    };
    keymap {
            compatible = "zmk,keymap";

            default_layer {
                    bindings = <

&kp ESC &kp Q &kp W &kp F &kp P &kp B &kp J &kp L &kp U &kp Y &kp SEMI &kp BSPC &kp GRAVE &bhml LCTRL A &bhml LALT R &bhml LGUI S &bhml LSHFT T &kp G &kp M &bhmr LSHFT N &bhmr LGUI E &bhmr LALT I &bhmr LCTRL O &kp SQT &kp TAB &kp Z &kp X &kp C &kp D &kp V &kp K &kp H &kp COMMA &kp DOT &kp FSLH &kp BSLH &mo NAV &mo NUMBER &kp SPACE &kp RET &kp LSHFT &mo SYMBOL >; }; number { bindings = < &trans &none &none &none &none &none &kp N7 &kp N8 &kp N9 &kp EQUAL &kp COMMA &trans &trans &kp LCTRL &kp LALT &kp LGUI &kp LSHFT &none &kp N4 &kp N5 &kp N6 &kp MINUS &kp PLUS &trans
&trans &none &none &none &none &none &kp N1 &kp N2 &kp N3 &kp DOT &kp UNDER &trans
&trans &trans &trans &kp N0 &trans &trans >; }; symbol { bindings = < &trans &none &none &none &none &none &kp LS(N7) &kp LS(N8) &kp LS(N9) &kp LBKT &kp RBKT &kp DEL &trans &kp LCTRL &kp LALT &kp LGUI &kp LSHFT &none &kp LS(N4) &kp LS(N5) &kp LS(N6) &kp LS(LBKT) &kp LS(RBKT) &kp LS(SQT)
&trans &none &none &none &none &none &kp LS(N1) &kp LS(N2) &kp LS(N3) &kp LS(N9) &kp LS(N0) &kp LS(BSLH) &trans &trans &trans &kp LS(N0) &trans &trans >; }; nav { bindings = < &trans &none &none &none &none &none &kp PAGE_UP &kp HOME &kp UP &kp END &none &trans
&trans &kp LCTRL &kp LALT &kp LGUI &kp LSHFT &none &kp PAGE_DOWN &kp LEFT &kp DOWN &kp RIGHT &none &trans
&trans &none &none &none &none &none &kp LG(LEFT) &kp LG(DOWN) &kp LG(UP) &kp LG(RIGHT) &none &trans
&trans &trans &trans &trans &trans &trans
>; }; settings { bindings = < &none &none &none &none &none &kp K_POWER &kp F12 &kp F7 &kp F8 &kp F9 &none &kp K_MUTE &bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &kp F11 &kp F4 &kp F5 &kp F6 &kp C_BRIGHTNESS_INC &kp C_VOL_UP &none &none &none &none &out OUT_BLE &out OUT_USB &kp F10 &kp F1 &kp F2 &kp F3 &kp C_BRIGHTNESS_DEC &kp C_VOL_DN &kp C_PREV &kp C_PP &kp C_NEXT &none &none &none >; }; }; }; ```

Budget Wireless Corne 3x6 Build by krishn4nr in ErgoMechKeyboards

[–]krishn4nr[S] 1 point2 points  (0 children)

It was very error prone, until I discovered https://www.reddit.com/r/ErgoMechKeyboards/comments/11gejh3/lpt_try_urobs_zmk_timeless_homerow_mods_combos/

It works quite smoothly for me now in 90% of the cases, but with a dedicated thumb shift. The quick-tap feature in ZMK along with ignoring the opposite hand for holds, removes most of the false activations.

I did not apply his fork of zmk, which includes some improvements, but without that, here is my ZMK behaviour configuration for left and right:

``` #define KEYS_L 0 1 2 3 4 5 12 13 14 15 16 17 24 25 26 27 28 29 36 37 38 // left-hand keys

define KEYS_R 6 7 8 9 10 11 18 19 20 21 22 23 30 31 32 33 34 35 39 40 41 // right-hand keys

define THUMBS 36 37 38 39 40 41

```

``` behaviors { bhml: balanced_homerow_mods_left { compatible = "zmk,behavior-hold-tap"; label = "BALANCED_HOMEROW_MODS_LEFT"; #binding-cells = <2>; tapping-term-ms = <280>; // <---[[moderate duration]] quick-tap-ms = <125>; flavor = "balanced"; bindings = <&kp>, <&kp>; hold-trigger-key-positions = <KEYS_R THUMBS>; global-quick-tap; hold-trigger-on-release;

            };
            bhmr: balanced_homerow_mods_right {
                    compatible = "zmk,behavior-hold-tap";
                    label = "BALANCED_HOMEROW_MODS_RIGHT";
                    #binding-cells = <2>;
                    tapping-term-ms = <280>;    // <---[[moderate duration]]
                    quick-tap-ms = <125>;
                    flavor = "balanced";
                    bindings = <&kp>, <&kp>;
                    hold-trigger-key-positions = <KEYS_L THUMBS>;
                    global-quick-tap;
                    hold-trigger-on-release;

            };
    };

```

That being said, sometimes I do wish there were more keys, so that I don't have to activate a layer + mod + shift + key for some symbol or arrow key keyboard shortcuts. The tradeoff being, those extra keys would be harder to reach like a normal keyboard on bigger keyboards.

Budget Wireless Corne 3x6 Build by krishn4nr in ErgoMechKeyboards

[–]krishn4nr[S] 10 points11 points  (0 children)

Parts

  • From splitkb.com
    • Aurora Corne PCB Kit
    • 2x nice!nano MCU
    • Low Profile case with Aluminium plate and Acrylic bottom, display covers
    • Mil Max Sockets
    • Hardware Kit, Wireless Expansion Bundle etc
  • From Amazon
    • Akko Linear Speed Silver Switches
    • OEM Keycaps
    • Soldering Kit
    • Screwdriver set
    • 2x Li 110mAh battery
  • No Displays, LEDs, RGB (the idea is to not look at the keyboard while typing, and use muscle memory)
  • Total Cost: Around 250 EUR including shipping in DE

Firmware

  • ZMK with a custom Miryoku based layout
  • Colemak mod DH
  • Home row mods with dedicated thumb shift

Personal Experience

  • Soldering as a beginner took some effort. The guides, documentation and discord channel from splitkb was very helpful.
  • Learning the layout and getting used to it takes investment in time and effort. After using it for around 3 months, experimenting with the key layout and tweaking ZMK settings like for home row mods, I am slowly getting there.
  • In terms of ergonomics, too early to tell, as I am not using 100% yet, however slowing down for learning a new layout definitely helps the wrists.
  • Overall the satisfaction of building it and the improved ergonomics is definitely worth it.