Skip to content

Instantly share code, notes, and snippets.

@bgkendall
Last active November 11, 2023 19:36
Show Gist options
  • Save bgkendall/230a78e5288cc6550cb7aa46293340c7 to your computer and use it in GitHub Desktop.
Save bgkendall/230a78e5288cc6550cb7aa46293340c7 to your computer and use it in GitHub Desktop.
Vial configuration for Gherkin (10×3) with three extra keys and an encoder.
{
"version": 1,
"uid": 4919955219667236387,
"layout": [
[
[
"TD(2)",
"TD(3)",
"KC_D",
"KC_P",
"KC_F",
"KC_J"
],
[
"KC_L",
"KC_O",
"KC_Y",
"KC_BSPACE",
"LCTL_T(KC_A)",
"LALT_T(KC_R)"
],
[
"LGUI_T(KC_S)",
"LSFT_T(KC_T)",
"KC_G",
"KC_M",
"RSFT_T(KC_N)",
"RGUI_T(KC_E)"
],
[
"RALT_T(KC_I)",
"RCTL_T(KC_U)",
"LSFT_T(KC_Z)",
"KC_X",
"KC_C",
"KC_V"
],
[
"KC_B",
"KC_K",
"KC_H",
"TD(0)",
"TD(1)",
"KC_ESCAPE"
],
[
"LT3(KC_SPACE)",
-1,
"LT4(KC_ENTER)",
-1,
-1,
"LT2(KC_TAB)"
],
[
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO"
]
],
[
[
"KC_Q",
"KC_W",
"KC_E",
"KC_R",
"KC_T",
"KC_Y"
],
[
"KC_U",
"KC_I",
"KC_O",
"KC_P",
"KC_A",
"KC_S"
],
[
"KC_D",
"KC_F",
"KC_G",
"KC_H",
"KC_J",
"KC_K"
],
[
"KC_L",
"KC_BSPACE",
"LSFT_T(KC_Z)",
"KC_X",
"KC_C",
"KC_V"
],
[
"KC_B",
"KC_N",
"KC_M",
"TD(0)",
"TD(1)",
"KC_ESCAPE"
],
[
"LT3(KC_SPACE)",
-1,
"LT4(KC_ENTER)",
-1,
-1,
"LGUI_T(KC_TAB)"
],
[
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO",
"KC_NO"
]
],
[
[
"USER02",
"USER03",
"KC_F3",
"RALT(KC_RBRACKET)",
"KC_F5",
"KC_F6"
],
[
"LSFT(KC_7)",
"LSFT(KC_8)",
"SGUI(KC_Z)",
"KC_F10",
"RALT(KC_LBRACKET)",
"0x162f"
],
[
"LGUI(KC_S)",
"0x1630",
"LSFT(KC_2)",
"0x162d",
"RALT(KC_MINUS)",
"RALT(KC_SCOLON)"
],
[
"LSFT(KC_BSLASH)",
"LSFT(KC_6)",
"LGUI(KC_Z)",
"LGUI(KC_X)",
"LGUI(KC_C)",
"LGUI(KC_V)"
],
[
"USER01",
"KC_GRAVE",
"LSFT(KC_3)",
"RALT_T(KC_BSLASH)",
"RSFT_T(KC_SLASH)",
"KC_CAPSLOCK"
],
[
"KC_TRNS",
-1,
"MO(5)",
-1,
-1,
"KC_TRNS"
],
[
"KC_NO",
"KC_NO",
"KC_NO",
"KC_J",
"KC_NO",
"KC_NO"
]
],
[
[
"KC_TAB",
"C_S(KC_TAB)",
"KC_UP",
"LCTL(KC_TAB)",
"KC_HOME",
"KC_PGUP"
],
[
"LSFT(KC_GRAVE)",
"KC_0",
"USER00",
"KC_EQUAL",
"KC_GRAVE",
"KC_LEFT"
],
[
"KC_DOWN",
"KC_RIGHT",
"KC_END",
"KC_PGDOWN",
"KC_RSHIFT",
"KC_RGUI"
],
[
"KC_RALT",
"RCTL_T(KC_MINUS)",
"LSFT_T(KC_2)",
"KC_4",
"OSM(MOD_LCTL|MOD_LALT|MOD_LGUI)",
"KC_BTN3"
],
[
"LSFT_T(KC_LBRACKET)",
"RSFT_T(KC_RBRACKET)",
"KC_SLASH",
"KC_NO",
"KC_NO",
"USER10"
],
[
"KC_TRNS",
-1,
"KC_ENTER",
-1,
-1,
"KC_LGUI"
],
[
"KC_NO",
"KC_NO",
"KC_NO",
"KC_C",
"KC_NO",
"KC_NO"
]
],
[
[
"LSFT(KC_QUOTE)",
"KC_KP_7",
"KC_KP_8",
"KC_KP_9",
"KC_KP_MINUS",
"LSFT(KC_5)"
],
[
"LSFT(KC_7)",
"KC_KP_ASTERISK",
"KC_KP_SLASH",
"KC_TRNS",
"KC_QUOTE",
"KC_KP_4"
],
[
"KC_KP_5",
"KC_KP_6",
"KC_KP_PLUS",
"KC_LBRACKET",
"LSFT(KC_GRAVE)",
"LSFT(KC_4)"
],
[
"LSFT(KC_BSLASH)",
"USER05",
"LT6(KC_KP_EQUAL)",
"KC_KP_1",
"KC_KP_2",
"KC_KP_3"
],
[
"KC_KP_DOT",
"LSFT(KC_COMMA)",
"LSFT(KC_3)",
"LSFT(KC_SLASH)",
"LSFT(KC_1)",
"KC_TRNS"
],
[
"KC_KP_ENTER",
-1,
"KC_TRNS",
-1,
-1,
"LT5(KC_KP_0)"
],
[
"KC_NO",
"KC_NO",
"KC_NO",
"KC_G",
"KC_NO",
"KC_NO"
]
],
[
[
"KC_F1",
"KC_F2",
"KC_F3",
"KC_F4",
"KC_F5",
"KC_F6"
],
[
"KC_F7",
"KC_F8",
"KC_F9",
"RESET",
"DF(0)",
"DF(1)"
],
[
"KC_SLEP",
"KC_BRIU",
"0x1a21",
"KC_MUTE",
"KC_VOLU",
"KC_F10"
],
[
"KC_F11",
"KC_F12",
"M0",
"M1",
"0x1d43",
"KC_BRID"
],
[
"KC_NO",
"KC_CAPSLOCK",
"KC_VOLD",
"KC_NO",
"KC_NO",
"BL_TOGG"
],
[
"BL_TOGG",
-1,
"KC_TRNS",
-1,
-1,
"KC_TRNS"
],
[
"KC_NO",
"KC_NO",
"KC_NO",
"KC_M",
"KC_NO",
"KC_NO"
]
],
[
[
"KC_NUMLOCK",
"KC_7",
"KC_8",
"KC_9",
"KC_KP_SLASH",
"KC_TRNS"
],
[
"KC_TRNS",
"KC_TRNS",
"KC_TRNS",
"KC_DELETE",
"LGUI(KC_QUOTE)",
"KC_4"
],
[
"KC_5",
"KC_6",
"KC_KP_ASTERISK",
"KC_RBRACKET",
"KC_TRNS",
"KC_TRNS"
],
[
"KC_TRNS",
"KC_TRNS",
"KC_TRNS",
"KC_1",
"KC_2",
"KC_3"
],
[
"KC_DOT",
"LSFT(KC_DOT)",
"KC_TRNS",
"LSFT(KC_LBRACKET)",
"LSFT(KC_RBRACKET)",
"KC_TRNS"
],
[
"KC_TRNS",
-1,
"KC_TRNS",
-1,
-1,
"KC_0"
],
[
"KC_NO",
"KC_NO",
"KC_NO",
"KC_S",
"KC_NO",
"KC_NO"
]
]
],
"encoder_layout": [
[
[
"USER06",
"USER07"
]
],
[
[
"USER06",
"USER07"
]
],
[
[
"USER08",
"USER09"
]
],
[
[
"KC_PGDOWN",
"KC_PGUP"
]
],
[
[
"KC_TRNS",
"KC_TRNS"
]
],
[
[
"BL_DEC",
"BL_INC"
]
],
[
[
"KC_TRNS",
"KC_TRNS"
]
]
],
"layout_options": 5,
"macro": [
[],
[],
[],
[
[
"text",
"../"
]
],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[]
],
"vial_protocol": 6,
"via_protocol": 9,
"tap_dance": [
[
"KC_COMMA",
"LSFT(KC_SLASH)",
"KC_SCOLON",
"KC_COMMA",
160
],
[
"KC_DOT",
"LSFT(KC_1)",
"LSFT(KC_SCOLON)",
"M3",
160
],
[
"KC_Q",
"KC_Q",
"KC_QUOTE",
"KC_QUOTE",
175
],
[
"KC_W",
"KC_W",
"LSFT(KC_QUOTE)",
"LSFT(KC_QUOTE)",
175
]
],
"combo": [
[
"TD(2)",
"TD(3)",
"KC_NO",
"KC_NO",
"KC_ESCAPE"
],
[
"KC_Y",
"KC_BSPACE",
"KC_NO",
"KC_NO",
"KC_MINUS"
],
[
"LSFT_T(KC_Z)",
"KC_X",
"KC_NO",
"KC_NO",
"0x7c73"
],
[
"TD(0)",
"TD(1)",
"KC_NO",
"KC_NO",
"KC_EQUAL"
]
],
"key_override": [
{
"trigger": "KC_BSPACE",
"replacement": "KC_DELETE",
"layers": 65535,
"trigger_mods": 2,
"negative_mod_mask": 0,
"suppressed_mods": 2,
"options": 135
},
{
"trigger": "LGUI_T(KC_S)",
"replacement": "LSFT(KC_4)",
"layers": 1,
"trigger_mods": 64,
"negative_mod_mask": 11,
"suppressed_mods": 64,
"options": 135
},
{
"trigger": "LCTL_T(KC_A)",
"replacement": "LSFT(KC_2)",
"layers": 1,
"trigger_mods": 64,
"negative_mod_mask": 11,
"suppressed_mods": 64,
"options": 135
},
{
"trigger": "TD(0)",
"replacement": "LSFT(KC_9)",
"layers": 1,
"trigger_mods": 34,
"negative_mod_mask": 17,
"suppressed_mods": 0,
"options": 135
},
{
"trigger": "TD(1)",
"replacement": "LSFT(KC_0)",
"layers": 1,
"trigger_mods": 34,
"negative_mod_mask": 17,
"suppressed_mods": 0,
"options": 135
},
{
"trigger": "TD(0)",
"replacement": "KC_LBRACKET",
"layers": 1,
"trigger_mods": 17,
"negative_mod_mask": 68,
"suppressed_mods": 17,
"options": 135
},
{
"trigger": "TD(1)",
"replacement": "KC_RBRACKET",
"layers": 1,
"trigger_mods": 17,
"negative_mod_mask": 68,
"suppressed_mods": 17,
"options": 135
},
{
"trigger": "TD(0)",
"replacement": "LSFT(KC_COMMA)",
"layers": 1,
"trigger_mods": 4,
"negative_mod_mask": 1,
"suppressed_mods": 4,
"options": 135
},
{
"trigger": "TD(1)",
"replacement": "LSFT(KC_DOT)",
"layers": 1,
"trigger_mods": 4,
"negative_mod_mask": 17,
"suppressed_mods": 4,
"options": 135
}
],
"settings": {}
}
@bgkendall
Copy link
Author

bgkendall commented Aug 9, 2022

NOTE 1: While the Gherkin has 3 rows of 10 columns physically, the matrix is laid out as 5 rows of 6 columns*. The first physical row will be 0,0; 0,1; 0,2; 0,3; 0,4; 0,5; 1,0; 1,1; 1,2; 1,3. The second row starts 1,4; 1,5; 2,0; etc.

* I don’t know why its not 6 rows of 5 columns as it would make the electrical to physical mapping so much easier to visualise!

@bgkendall
Copy link
Author

bgkendall commented Aug 9, 2022

NOTE 2: The bottom row is wired to the nearest column. This means that the leftmost key is actually wired to the last column.

So, in the first layer the layout looks like this:

      [
        "LT3(KC_SPACE)",
        -1,
        "LT4(KC_ENTER)",
        -1,
        -1,
        "LT2(KC_TAB)"
      ]

But physically the keys are:

+---------+------------------+---------+
| LT2/Tab |    LT4/Space     | LT3/Ent.|
+---------+------------------+---------+

@bgkendall
Copy link
Author

NOTE 3: Some relevant settings:

#define IGNORE_MOD_TAP_INTERRUPT
#define NO_AUTO_SHIFT_ALPHA
#define AUTO_SHIFT_TIMEOUT TAPPING_TERM
#define AUTO_SHIFT_NO_SETUP
#define BOTH_SHIFTS_TURNS_ON_CAPS_WORD

@bgkendall
Copy link
Author

bgkendall commented Nov 11, 2023

NOTE 4: Description of some of the non-obvious stuff:

  • Home row mods — CAGS
  • Combos — pair in each corner, clockwise from top-left (Q + W):
    • Escape
    • -
    • =
    • Caps Word.
  • Tap Dances (tap tap and hold☟):
    • Q Q'
    • W W"
    • , ,;
    • ,☟ → ?
    • . .:
    • .☟ → !
    • . .☟ → “../”
  • Key Overrides:
    • Shift + BackspaceDelete
    • Right Alt (I) + S$
    • Right Alt + A@
    • Shift + ,(
    • Shift + .)
    • Control + ,[
    • Control + .]
    • Shift + Control + ,{
    • Shift + Control + .}
    • Left Alt + ,<
    • Left Alt + .>
  • User keys:
    • 00 — sends “000” (unused)
    • 01 — with modifier keys send variations on my name, email, etc.
    • 02, 03 — hold Command and sends Backtick and Tab respectively (i.e., switches windows). Command is released when the layer returns to the default.
    • 04 — unused
    • 05 — locks the current layer until tapped again
    • 06, 07 — left/right. Pressing USER10 will flip to up/down. Pressing USER10 again flips back to left/right.
    • 08, 09 — up/down. Pressing USER10 will flip to left/right. Pressing USER10 again flips back to up/down.
    • 10 — flips the axis of 06/07 and 08/09

@bgkendall
Copy link
Author

bgkendall commented Nov 11, 2023

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment