Skip to content

Commit

Permalink
Version 5 (2023-05-30)
Browse files Browse the repository at this point in the history
  • Loading branch information
sunaku committed Sep 19, 2023
1 parent 10038eb commit cb42e24
Show file tree
Hide file tree
Showing 5 changed files with 64 additions and 84 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ See [interactive layer map][6] for overview and documentation.

## Keymaps 🗺️

- for Engrammer layout: https://my.glove80.com/#/layout/user/e453017b-2315-4d2b-89c4-4c4921a59005
- for Arno's Engram 2.0: https://my.glove80.com/#/layout/user/fc3636d0-efc8-40d9-9b91-b66386ba2b01
- for Engrammer layout: https://my.glove80.com/#/layout/user/3981b394-786e-467b-9aa2-07c6c5fbb731
- for Arno's Engram 2.0: https://my.glove80.com/#/layout/user/bada94d0-701c-43d5-818e-c1c532abeb98

## Installing 🪄

Expand Down
14 changes: 14 additions & 0 deletions engram.dtsi
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,20 @@ behaviors {
bindings = <&kp>, <&kp>;
};

// enable key-repeat for layer-tap keys (Miryoku's thumb cluster keys)
// https://github.com/zmkfirmware/zmk/issues/288#issuecomment-770871538
// https://github.com/zmkfirmware/zmk/blob/main/app/dts/behaviors/layer_tap.dtsi
// https://discord.com/channels/877392805654306816/937645688244826154/1113213032957489154
qlt: behavior_layer_tap {
compatible = "zmk,behavior-hold-tap";
label = "LAYER_TAP";
#binding-cells = <2>;
flavor = "tap-preferred";
tapping-term-ms = <200>;
quick-tap-ms = <200>; // this is what's added!
bindings = <&mo>, <&kp>;
};

//
// Custom shifted pairs for the Engram layout
// https://engram.dev/
Expand Down
58 changes: 17 additions & 41 deletions engram.json
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
{
"keyboard": "glove80",
"uuid": "",
"date": 1685434078,
"date": 1685487957,
"creator": "",
"parent_uuid": "fc3636d0-efc8-40d9-9b91-b66386ba2b01",
"parent_uuid": "bada94d0-701c-43d5-818e-c1c532abeb98",
"firmware_api_version": "1",
"title": "Sunaku's Layout v4 (Engram)",
"notes": "ZMK port of https://sunaku.github.io/ergohaven-remnant-keyboard.html but featuring the official Engram layout https://engram.dev/\n\nNotes:\n- Mouse layer is empty since ZMK doesn't yet support mouse keys.\n- Sticky toggle for Miryoku layers isn't yet available due to ZMK limitation: https://github.com/zmkfirmware/zmk/issues/1299\n- Pascal Getreuer's famous \"Select Word\" macro for QMK isn't yet available for ZMK, so I've approximated it with separate select/extend word/line actions using ZMK macros. See also https://getreuer.info/posts/keyboards/select-word/index.html\n\nChanges (since v3):\n- Don't mirror lower thumb key on nearest upper one anymore.\n- Put arrow keys on nearest upper thumb keys for convenience.\n- Increase quick-tap-ms to 175ms to avoid same-hand misfires.\n- Symbol layer: prevent &trans for unused keys on left hand.\n- Symbol layer: put *.* on upper thumb keys for piano swipe.\n- Symbol layer: add easier ~/ on Glove80 (corners too hard).",
"title": "Sunaku's Layout v5 (Engram)",
"notes": "ZMK port of https://sunaku.github.io/ergohaven-remnant-keyboard.html but featuring the official Engram layout https://engram.dev/\n\nNotes:\n- Mouse layer is empty since ZMK doesn't yet support mouse keys.\n- Sticky toggle for Miryoku layers isn't yet available due to ZMK limitation: https://github.com/zmkfirmware/zmk/issues/1299\n- Pascal Getreuer's famous \"Select Word\" macro for QMK isn't yet available for ZMK, so I've approximated it with separate select/extend word/line actions using ZMK macros. See also https://getreuer.info/posts/keyboards/select-word/index.html\n\nChanges (since v4):\n- Enable key-repeat (via tap+hold) for &lt thumb keys that activate Miryoku layers. Thanks to @bravekarma for guidance on this solution https://discord.com/channels/877392805654306816/937645688244826154/1113213032957489154",
"tags": [
"sunaku",
"engram",
Expand Down Expand Up @@ -626,79 +626,55 @@
]
},
{
"value": "&lt",
"value": "Custom",
"params": [
{
"value": 3,
"params": []
},
{
"value": "BSPC",
"value": "&qlt 3 BACKSPACE",
"params": []
}
]
},
{
"value": "&lt",
"value": "Custom",
"params": [
{
"value": 4,
"params": []
},
{
"value": "DEL",
"value": "&qlt 4 DELETE",
"params": []
}
]
},
{
"value": "&lt",
"value": "Custom",
"params": [
{
"value": 5,
"params": []
},
{
"value": "ESC",
"value": "&qlt 5 ESC",
"params": []
}
]
},
{
"value": "&lt",
"value": "Custom",
"params": [
{
"value": 8,
"params": []
},
{
"value": "RET",
"value": "&qlt 8 ENTER",
"params": []
}
]
},
{
"value": "&lt",
"value": "Custom",
"params": [
{
"value": 7,
"params": []
},
{
"value": "TAB",
"value": "&qlt 7 TAB",
"params": []
}
]
},
{
"value": "&lt",
"value": "Custom",
"params": [
{
"value": 6,
"params": []
},
{
"value": "SPACE",
"value": "&qlt 6 SPACE",
"params": []
}
]
Expand Down Expand Up @@ -5118,6 +5094,6 @@
}
]
],
"custom_defined_behaviors": "behaviors {\n\n //\n // Home row mods support for natural typing\n // https://sunaku.github.io/home-row-mods.html\n //\n gqt: global-quick-tap {\n compatible = \"zmk,behavior-hold-tap\";\n label = \"GLOBAL_QUICK_TAP\";\n #binding-cells = <2>;\n flavor = \"tap-preferred\";\n tapping-term-ms = <200>;\n quick-tap-ms = <175>;\n global-quick-tap;\n bindings = <&kp>, <&kp>;\n };\n\n //\n // Custom shifted pairs for the Engram layout\n // https://engram.dev/\n //\n one: one_and_pipe {\n compatible = \"zmk,behavior-mod-morph\";\n label = \"ONE_AND_PIPE\";\n #binding-cells = <0>;\n bindings = <&kp N1>, <&kp PIPE>;\n mods = <(MOD_LSFT|MOD_RSFT)>;\n };\n two: two_and_equal {\n compatible = \"zmk,behavior-mod-morph\";\n label = \"TWO_AND_EQUAL\";\n #binding-cells = <0>;\n bindings = <&kp N2>, <&kp EQUAL>;\n mods = <(MOD_LSFT|MOD_RSFT)>;\n };\n three: three_and_tilde {\n compatible = \"zmk,behavior-mod-morph\";\n label = \"THREE_AND_TILDE\";\n #binding-cells = <0>;\n bindings = <&kp N3>, <&kp TILDE>;\n mods = <(MOD_LSFT|MOD_RSFT)>;\n };\n four: four_and_plus {\n compatible = \"zmk,behavior-mod-morph\";\n label = \"FOUR_AND_PLUS\";\n #binding-cells = <0>;\n bindings = <&kp N4>, <&kp PLUS>;\n mods = <(MOD_LSFT|MOD_RSFT)>;\n };\n five: five_and_less_than {\n compatible = \"zmk,behavior-mod-morph\";\n label = \"FIVE_AND_LESS_THAN\";\n #binding-cells = <0>;\n bindings = <&kp N5>, <&kp LESS_THAN>;\n mods = <(MOD_LSFT|MOD_RSFT)>;\n };\n six: six_and_greater_than {\n compatible = \"zmk,behavior-mod-morph\";\n label = \"SIX_AND_GREATER_THAN\";\n #binding-cells = <0>;\n bindings = <&kp N6>, <&kp GREATER_THAN>;\n mods = <(MOD_LSFT|MOD_RSFT)>;\n };\n seven: seven_and_caret {\n compatible = \"zmk,behavior-mod-morph\";\n label = \"SEVEN_AND_CARET\";\n #binding-cells = <0>;\n bindings = <&kp N7>, <&kp CARET>;\n mods = <(MOD_LSFT|MOD_RSFT)>;\n };\n eight: eight_and_ampersand {\n compatible = \"zmk,behavior-mod-morph\";\n label = \"EIGHT_AND_AMPERSAND\";\n #binding-cells = <0>;\n bindings = <&kp N8>, <&kp AMPERSAND>;\n mods = <(MOD_LSFT|MOD_RSFT)>;\n };\n nine: nine_and_percent {\n compatible = \"zmk,behavior-mod-morph\";\n label = \"NINE_AND_PERCENT\";\n #binding-cells = <0>;\n bindings = <&kp N9>, <&kp PERCENT>;\n mods = <(MOD_LSFT|MOD_RSFT)>;\n };\n zero: zero_and_asterisk {\n compatible = \"zmk,behavior-mod-morph\";\n label = \"ZERO_AND_ASTERISK\";\n #binding-cells = <0>;\n bindings = <&kp N0>, <&kp ASTERISK>;\n mods = <(MOD_LSFT|MOD_RSFT)>;\n };\n apos: apostrophe_and_left_parenthesis {\n compatible = \"zmk,behavior-mod-morph\";\n label = \"APOSTROPHE_AND_LEFT_PARENTHESIS\";\n #binding-cells = <0>;\n bindings = <&kp APOSTROPHE>, <&kp LEFT_PARENTHESIS>;\n mods = <(MOD_LSFT|MOD_RSFT)>;\n };\n dquote: double_quotes_and_right_parenthesis {\n compatible = \"zmk,behavior-mod-morph\";\n label = \"DOUBLE_QUOTES_AND_RIGHT_PARENTHESIS\";\n #binding-cells = <0>;\n bindings = <&kp DOUBLE_QUOTES>, <&kp RIGHT_PARENTHESIS>;\n mods = <(MOD_LSFT|MOD_RSFT)>;\n };\n comma: comma_and_semicolon {\n compatible = \"zmk,behavior-mod-morph\";\n label = \"COMMA_AND_SEMICOLON\";\n #binding-cells = <0>;\n bindings = <&kp COMMA>, <&kp SEMICOLON>;\n mods = <(MOD_LSFT|MOD_RSFT)>;\n };\n period: period_and_colon {\n compatible = \"zmk,behavior-mod-morph\";\n label = \"PERIOD_AND_COLON\";\n #binding-cells = <0>;\n bindings = <&kp PERIOD>, <&kp COLON>;\n mods = <(MOD_LSFT|MOD_RSFT)>;\n };\n question: question_and_exclamation {\n compatible = \"zmk,behavior-mod-morph\";\n label = \"QUESTION_AND_EXCLAMATION\";\n #binding-cells = <0>;\n bindings = <&kp QUESTION>, <&kp EXCLAMATION>;\n mods = <(MOD_LSFT|MOD_RSFT)>;\n };\n hash: hash_and_dollar {\n compatible = \"zmk,behavior-mod-morph\";\n label = \"HASH_AND_DOLLAR\";\n #binding-cells = <0>;\n bindings = <&kp HASH>, <&kp DOLLAR>;\n mods = <(MOD_LSFT|MOD_RSFT)>;\n };\n at: at_and_grave {\n compatible = \"zmk,behavior-mod-morph\";\n label = \"AT_AND_GRAVE\";\n #binding-cells = <0>;\n bindings = <&kp AT>, <&kp GRAVE>;\n mods = <(MOD_LSFT|MOD_RSFT)>;\n };\n slash: slash_and_backslash {\n compatible = \"zmk,behavior-mod-morph\";\n label = \"SLASH_AND_BACKSLASH\";\n #binding-cells = <0>;\n bindings = <&kp SLASH>, <&kp BACKSLASH>;\n mods = <(MOD_LSFT|MOD_RSFT)>;\n };\n\n};\n\nmacros {\n\n //\n // Approximation of Pascal Getreuer's SelectWord feature in QMK\n // https://getreuer.info/posts/keyboards/select-word/index.html\n //\n select_word: select_word {\n compatible = \"zmk,behavior-macro\";\n label = \"select_word\";\n #binding-cells = <0>;\n tap-ms = <0>;\n wait-ms = <0>;\n bindings\n = <&macro_tap &kp LC(RIGHT)>\n , <&macro_wait_time 1> // let cursor move to the next word!\n , <&macro_tap &kp LC(LEFT) &kp LC(LS(RIGHT))>\n ;\n };\n extend_word: extend_word {\n compatible = \"zmk,behavior-macro\";\n label = \"extend_word\";\n #binding-cells = <0>;\n tap-ms = <0>;\n wait-ms = <0>;\n bindings\n = <&macro_tap &kp LC(LS(RIGHT))>\n ;\n };\n select_line: select_line {\n compatible = \"zmk,behavior-macro\";\n label = \"select_line\";\n #binding-cells = <0>;\n tap-ms = <0>;\n wait-ms = <0>;\n bindings\n = <&macro_tap &kp HOME &kp LS(END)>\n ;\n };\n extend_line: extend_line {\n compatible = \"zmk,behavior-macro\";\n label = \"extend_line\";\n #binding-cells = <0>;\n tap-ms = <0>;\n wait-ms = <0>;\n bindings\n = <&macro_tap &kp LS(DOWN) &kp LS(END)>\n ;\n };\n\n};",
"custom_defined_behaviors": "behaviors {\n\n //\n // Home row mods support for natural typing\n // https://sunaku.github.io/home-row-mods.html\n //\n gqt: global-quick-tap {\n compatible = \"zmk,behavior-hold-tap\";\n label = \"GLOBAL_QUICK_TAP\";\n #binding-cells = <2>;\n flavor = \"tap-preferred\";\n tapping-term-ms = <200>;\n quick-tap-ms = <175>;\n global-quick-tap;\n bindings = <&kp>, <&kp>;\n };\n\n // enable key-repeat for layer-tap keys (Miryoku's thumb cluster keys)\n // https://github.com/zmkfirmware/zmk/issues/288#issuecomment-770871538\n // https://github.com/zmkfirmware/zmk/blob/main/app/dts/behaviors/layer_tap.dtsi\n // https://discord.com/channels/877392805654306816/937645688244826154/1113213032957489154\n qlt: behavior_layer_tap {\n compatible = \"zmk,behavior-hold-tap\";\n label = \"LAYER_TAP\";\n #binding-cells = <2>;\n flavor = \"tap-preferred\";\n tapping-term-ms = <200>;\n quick-tap-ms = <200>; // this is what's added!\n bindings = <&mo>, <&kp>;\n };\n\n //\n // Custom shifted pairs for the Engram layout\n // https://engram.dev/\n //\n one: one_and_pipe {\n compatible = \"zmk,behavior-mod-morph\";\n label = \"ONE_AND_PIPE\";\n #binding-cells = <0>;\n bindings = <&kp N1>, <&kp PIPE>;\n mods = <(MOD_LSFT|MOD_RSFT)>;\n };\n two: two_and_equal {\n compatible = \"zmk,behavior-mod-morph\";\n label = \"TWO_AND_EQUAL\";\n #binding-cells = <0>;\n bindings = <&kp N2>, <&kp EQUAL>;\n mods = <(MOD_LSFT|MOD_RSFT)>;\n };\n three: three_and_tilde {\n compatible = \"zmk,behavior-mod-morph\";\n label = \"THREE_AND_TILDE\";\n #binding-cells = <0>;\n bindings = <&kp N3>, <&kp TILDE>;\n mods = <(MOD_LSFT|MOD_RSFT)>;\n };\n four: four_and_plus {\n compatible = \"zmk,behavior-mod-morph\";\n label = \"FOUR_AND_PLUS\";\n #binding-cells = <0>;\n bindings = <&kp N4>, <&kp PLUS>;\n mods = <(MOD_LSFT|MOD_RSFT)>;\n };\n five: five_and_less_than {\n compatible = \"zmk,behavior-mod-morph\";\n label = \"FIVE_AND_LESS_THAN\";\n #binding-cells = <0>;\n bindings = <&kp N5>, <&kp LESS_THAN>;\n mods = <(MOD_LSFT|MOD_RSFT)>;\n };\n six: six_and_greater_than {\n compatible = \"zmk,behavior-mod-morph\";\n label = \"SIX_AND_GREATER_THAN\";\n #binding-cells = <0>;\n bindings = <&kp N6>, <&kp GREATER_THAN>;\n mods = <(MOD_LSFT|MOD_RSFT)>;\n };\n seven: seven_and_caret {\n compatible = \"zmk,behavior-mod-morph\";\n label = \"SEVEN_AND_CARET\";\n #binding-cells = <0>;\n bindings = <&kp N7>, <&kp CARET>;\n mods = <(MOD_LSFT|MOD_RSFT)>;\n };\n eight: eight_and_ampersand {\n compatible = \"zmk,behavior-mod-morph\";\n label = \"EIGHT_AND_AMPERSAND\";\n #binding-cells = <0>;\n bindings = <&kp N8>, <&kp AMPERSAND>;\n mods = <(MOD_LSFT|MOD_RSFT)>;\n };\n nine: nine_and_percent {\n compatible = \"zmk,behavior-mod-morph\";\n label = \"NINE_AND_PERCENT\";\n #binding-cells = <0>;\n bindings = <&kp N9>, <&kp PERCENT>;\n mods = <(MOD_LSFT|MOD_RSFT)>;\n };\n zero: zero_and_asterisk {\n compatible = \"zmk,behavior-mod-morph\";\n label = \"ZERO_AND_ASTERISK\";\n #binding-cells = <0>;\n bindings = <&kp N0>, <&kp ASTERISK>;\n mods = <(MOD_LSFT|MOD_RSFT)>;\n };\n apos: apostrophe_and_left_parenthesis {\n compatible = \"zmk,behavior-mod-morph\";\n label = \"APOSTROPHE_AND_LEFT_PARENTHESIS\";\n #binding-cells = <0>;\n bindings = <&kp APOSTROPHE>, <&kp LEFT_PARENTHESIS>;\n mods = <(MOD_LSFT|MOD_RSFT)>;\n };\n dquote: double_quotes_and_right_parenthesis {\n compatible = \"zmk,behavior-mod-morph\";\n label = \"DOUBLE_QUOTES_AND_RIGHT_PARENTHESIS\";\n #binding-cells = <0>;\n bindings = <&kp DOUBLE_QUOTES>, <&kp RIGHT_PARENTHESIS>;\n mods = <(MOD_LSFT|MOD_RSFT)>;\n };\n comma: comma_and_semicolon {\n compatible = \"zmk,behavior-mod-morph\";\n label = \"COMMA_AND_SEMICOLON\";\n #binding-cells = <0>;\n bindings = <&kp COMMA>, <&kp SEMICOLON>;\n mods = <(MOD_LSFT|MOD_RSFT)>;\n };\n period: period_and_colon {\n compatible = \"zmk,behavior-mod-morph\";\n label = \"PERIOD_AND_COLON\";\n #binding-cells = <0>;\n bindings = <&kp PERIOD>, <&kp COLON>;\n mods = <(MOD_LSFT|MOD_RSFT)>;\n };\n question: question_and_exclamation {\n compatible = \"zmk,behavior-mod-morph\";\n label = \"QUESTION_AND_EXCLAMATION\";\n #binding-cells = <0>;\n bindings = <&kp QUESTION>, <&kp EXCLAMATION>;\n mods = <(MOD_LSFT|MOD_RSFT)>;\n };\n hash: hash_and_dollar {\n compatible = \"zmk,behavior-mod-morph\";\n label = \"HASH_AND_DOLLAR\";\n #binding-cells = <0>;\n bindings = <&kp HASH>, <&kp DOLLAR>;\n mods = <(MOD_LSFT|MOD_RSFT)>;\n };\n at: at_and_grave {\n compatible = \"zmk,behavior-mod-morph\";\n label = \"AT_AND_GRAVE\";\n #binding-cells = <0>;\n bindings = <&kp AT>, <&kp GRAVE>;\n mods = <(MOD_LSFT|MOD_RSFT)>;\n };\n slash: slash_and_backslash {\n compatible = \"zmk,behavior-mod-morph\";\n label = \"SLASH_AND_BACKSLASH\";\n #binding-cells = <0>;\n bindings = <&kp SLASH>, <&kp BACKSLASH>;\n mods = <(MOD_LSFT|MOD_RSFT)>;\n };\n\n};\n\nmacros {\n\n //\n // Approximation of Pascal Getreuer's SelectWord feature in QMK\n // https://getreuer.info/posts/keyboards/select-word/index.html\n //\n select_word: select_word {\n compatible = \"zmk,behavior-macro\";\n label = \"select_word\";\n #binding-cells = <0>;\n tap-ms = <0>;\n wait-ms = <0>;\n bindings\n = <&macro_tap &kp LC(RIGHT)>\n , <&macro_wait_time 1> // let cursor move to the next word!\n , <&macro_tap &kp LC(LEFT) &kp LC(LS(RIGHT))>\n ;\n };\n extend_word: extend_word {\n compatible = \"zmk,behavior-macro\";\n label = \"extend_word\";\n #binding-cells = <0>;\n tap-ms = <0>;\n wait-ms = <0>;\n bindings\n = <&macro_tap &kp LC(LS(RIGHT))>\n ;\n };\n select_line: select_line {\n compatible = \"zmk,behavior-macro\";\n label = \"select_line\";\n #binding-cells = <0>;\n tap-ms = <0>;\n wait-ms = <0>;\n bindings\n = <&macro_tap &kp HOME &kp LS(END)>\n ;\n };\n extend_line: extend_line {\n compatible = \"zmk,behavior-macro\";\n label = \"extend_line\";\n #binding-cells = <0>;\n tap-ms = <0>;\n wait-ms = <0>;\n bindings\n = <&macro_tap &kp LS(DOWN) &kp LS(END)>\n ;\n };\n\n};",
"config_parameters": []
}
14 changes: 14 additions & 0 deletions engrammer.dtsi
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,20 @@ behaviors {
bindings = <&kp>, <&kp>;
};

// enable key-repeat for layer-tap keys (Miryoku's thumb cluster keys)
// https://github.com/zmkfirmware/zmk/issues/288#issuecomment-770871538
// https://github.com/zmkfirmware/zmk/blob/main/app/dts/behaviors/layer_tap.dtsi
// https://discord.com/channels/877392805654306816/937645688244826154/1113213032957489154
qlt: behavior_layer_tap {
compatible = "zmk,behavior-hold-tap";
label = "LAYER_TAP";
#binding-cells = <2>;
flavor = "tap-preferred";
tapping-term-ms = <200>;
quick-tap-ms = <200>; // this is what's added!
bindings = <&mo>, <&kp>;
};

};

macros {
Expand Down
Loading

0 comments on commit cb42e24

Please sign in to comment.