Trying to find the optimal layout for the Midge Keyboard.

Please note this uses the Urob fork of ZMK.

  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
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#include <behaviors.dtsi>
#include <dt-bindings/zmk/keys.h>
#include <dt-bindings/zmk/bt.h>
#include <dt-bindings/zmk/outputs.h>
#include <dt-bindings/zmk/mouse.h>
#include "../zmk-nodefree-config/helper.h"
#include "../zmk-nodefree-config/keypos_def/keypos_34keys.h"

#define DEFAULT   0
#define LOWER     1
#define RAISE     2
#define NUM_PAD   3
#define EXTRAS    4
#define MOUSE     5
#define FUNC      6
#define BLUETOOTH 7
#define ENTERFIX  8

#define KEYS_L LT0 LT1 LT2 LT3 LT4 LM0 LM1 LM2 LM3 LM4 LB0 LB1 LB2 LB3 LB4  // left-hand keys
#define KEYS_R RT0 RT1 RT2 RT3 RT4 RM0 RM1 RM2 RM3 RM4 RB0 RB1 RB2 RB3 RB4  // right-hand keys
#define THUMBS LH1 LH0 RH0 RH1

/* left-hand HRMs */
ZMK_BEHAVIOR(hml, hold_tap,
  flavor = "balanced";
  tapping-term-ms = <280>;
  quick-tap-ms = <175>; // repeat on tap-into-hold
  global-quick-tap-ms = <150>; // requires PR #1387
  bindings = <&kp>, <&kp>;
  hold-trigger-key-positions = <KEYS_R THUMBS>;
  hold-trigger-on-release; // requires PR #1423
)

/* right-hand HRMs */
ZMK_BEHAVIOR(hmr, hold_tap,
  flavor = "balanced";
  tapping-term-ms = <280>;
  quick-tap-ms = <175>; // repeat on tap-into-hold
  global-quick-tap-ms = <150>; // requires PR #1387
  bindings = <&kp>, <&kp>;
  hold-trigger-key-positions = <KEYS_L THUMBS>;
  hold-trigger-on-release; // requires PR #1423
)

#undef COMBO_TERM
#define COMBO_TERM 40
ZMK_COMBO(enter1,   &kp ENTER,  RH0 RM4, 0)
ZMK_COMBO(enter2,   &kp ENTER,  RH0 RH1, 0)

ZMK_COMBO(comboSingleQuote, &kp SINGLE_QUOTE,  RT1 RT2, 0)
ZMK_COMBO(comboDoubleQuote, &kp DOUBLE_QUOTES,  RT2 RT3, 0)
ZMK_COMBO(tilde,   &kp TILDE,  RB2 RB3, 0)

ZMK_COMBO(undo,       &kp LC(Z),  LM4 LB3, 0)
ZMK_COMBO(copy,       &kp LC(C),  LB3 LB2, 0)
ZMK_COMBO(paste,      &kp LC(V),  LB2 LB1, 0)

&lt {
  tapping-term-ms = <280>;
  quick-tap-ms = <175>; // repeat on tap-into-hold
  flavor = "balanced";
  // retro-tap;
};

&mt {
  tapping-term-ms = <280>;
  quick-tap-ms = <175>; // repeat on tap-into-hold
  flavor = "balanced";
  // retro-tap;
};


ZMK_LAYER(default_layer,
  &kp Q         &kp W         &kp F         &kp P           &kp B                   &kp J             &kp L           &kp U         &kp Y         &kp SEMI
	&kp A         &hml LGUI R   &hml LCTRL S  &hml LSHIFT T   &kp G                   &kp M             &hmr RSHIFT N   &hmr RCTRL E  &hmr RGUI I   &lt ENTERFIX O
  &kp Z         &kp X         &lt MOUSE C   &lt NUM_PAD D   &kp V                   &kp K             &kp H           &kp COMMA     &kp DOT       &kp SLASH
                                            &mt LALT TAB    &lt LOWER BSPC          &lt RAISE SPACE   &mt RALT GRAVE
)

ZMK_LAYER(lower,
  &caps_word    &kp K_VOL_DN  &kp K_MUTE        &kp K_VOL_UP      &mo BLUETOOTH           &none             &kp HOME        &none             &kp END       &none
	&kp ESC       &kp LGUI      &kp LCTRL         &kp LSHIFT        &none                   &none             &kp LEFT        &kp UP            &kp RIGHT     &kp ENTER
	&kp ESC       &none         &none             &none             &mo FUNC                &none             &kp PG_UP       &kp DOWN          &kp PG_DN     &kp TILDE
				                                        &kp DEL           &trans                  &kp MINUS         &kp ENTER
)

ZMK_LAYER(raise,
	&kp EXCL     &kp AT        &kp HASH      &kp DOLLAR     &kp PERCENT                 &kp CARET       &kp AMPERSAND     &kp LEFT_PARENTHESIS  &kp RIGHT_PARENTHESIS   &kp ASTERISK
	&kp DOT      &kp LT        &kp SLASH     &kp GT         &none                       &kp MINUS       &kp PLUS          &kp LEFT_BRACE        &kp RIGHT_BRACE         &kp ENTER
	&none        &kp TILDE     &none         &kp COLON      &none                       &kp PIPE        &kp EQUAL         &kp LEFT_BRACKET      &kp RIGHT_BRACKET       &kp BACKSLASH
	                                         &trans         &kp UNDERSCORE              &trans          &kp ENTER
)

ZMK_LAYER(num_pad,
  &none         &none         &none           &none         &none                     &kp KP_DIVIDE   &kp KP_N7       &kp KP_N8     &kp KP_N9     &kp KP_MINUS
 	&none         &trans        &trans          &trans        &none                     &kp KP_MULTIPLY &kp KP_N4       &kp KP_N5     &kp KP_N6     &kp KP_PLUS
 	&none         &kp CAPSLOCK  &kp KP_NUMLOCK  &trans        &none                     &kp KP_COMMA    &kp KP_N1       &kp KP_N2     &kp KP_N3     &kp KP_EQUAL
 	                                            &trans        &trans                    &kp KP_N0       &kp KP_DOT
)

ZMK_LAYER(extras,
  &none         &none         &none           &none         &none              &none           &none           &none         &none         &none
  &none         &none         &none           &none         &none              &none           &none           &none         &none         &none
  &none         &none         &none           &none         &none              &none           &none           &none         &none         &none
                                              &trans        &trans             &none           &trans
)

ZMK_LAYER(mouse,
  &none         &none         &none           &none         &none              &none           &none                &none                   &none                     &none
  &none         &none         &none           &none         &none              &none           &mmv MOVE_HOR(-1500) &mmv MOVE_VERT(-1500)   &mmv MOVE_HOR(1500)       &none
  &none         &none         &none           &none         &none              &none           &mkp LCLK            &mmv MOVE_VERT(1500)    &mkp RCLK                 &none
                                              &trans        &trans             &trans          &trans
)

ZMK_LAYER(func,
  &none         &none         &none           &none         &none              &kp F10         &kp F7         &kp F8       &kp F9       &kp F13
  &none         &none         &none           &none         &none              &kp F11         &kp F4         &kp F5       &kp F6       &kp F14
  &none         &none         &none           &none         &none              &kp F12         &kp F1         &kp F2       &kp F3       &kp F15
                                              &trans        &trans             &trans          &trans
)

ZMK_LAYER(bluetooth,
  &bootloader   &none         &none           &none         &none              &out OUT_BLE  &out OUT_USB  &none          &none         &none
  &none         &none         &none           &none         &none              &bt BT_CLR    &bt BT_SEL 4  &bt BT_SEL 5   &none         &none
  &sys_reset    &none         &none           &none         &none              &none         &bt BT_SEL 1  &bt BT_SEL 2   &bt BT_SEL 3  &none
                                              &trans        &trans             &bt BT_SEL 0  &trans
)

ZMK_LAYER(enterfix,
  &trans         &trans         &trans           &trans         &trans              &trans         &trans         &trans       &trans       &trans
  &trans         &trans         &trans           &trans         &trans              &trans         &trans         &trans       &trans       &trans
  &trans         &trans         &trans           &trans         &trans              &trans         &trans         &trans       &trans       &none
                                                 &trans         &trans              &kp ENTER      &trans
)