From a4d0277b1b511414048b0c5ddb7a918d14feb838 Mon Sep 17 00:00:00 2001 From: tikinson Date: Fri, 14 Feb 2025 01:07:27 +0100 Subject: [PATCH 1/6] start --- keyboards/Kazhan/keyboard.ncl | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 keyboards/Kazhan/keyboard.ncl diff --git a/keyboards/Kazhan/keyboard.ncl b/keyboards/Kazhan/keyboard.ncl new file mode 100644 index 0000000..3561647 --- /dev/null +++ b/keyboards/Kazhan/keyboard.ncl @@ -0,0 +1,29 @@ +let { CH552T, .. } = import "fak/mcus.ncl" in +let {ColToRowKey, RowToColKey} = import "fak/keyboard.ncl" in + +let side_central = { + mcu = CH552T, + matrix = { + + }, + split.channel = CH552T.features.uart_12_13, +} in + +let side_periph = { + mcu = CH552T, + matrix = { + + }, + split.channel = CH552T.features.uart_30_31, + keys = + let C = ColToRowKey in + let R = RowToColKey in + [ + + ] + +} in + +side_central & { + +} \ No newline at end of file From 58a4bfc418844fbbb0fc472fc25ab6c1deba6dc6 Mon Sep 17 00:00:00 2001 From: tikinson Date: Fri, 14 Feb 2025 12:50:03 +0100 Subject: [PATCH 2/6] keyboard config file --- keyboards/Kazhan/keyboard.ncl | 29 ------------- keyboards/Kazhan_split/keyboard.ncl | 48 ++++++++++++++++++++++ keyboards/Kazhan_split/keymaps/default.ncl | 0 3 files changed, 48 insertions(+), 29 deletions(-) delete mode 100644 keyboards/Kazhan/keyboard.ncl create mode 100644 keyboards/Kazhan_split/keyboard.ncl create mode 100644 keyboards/Kazhan_split/keymaps/default.ncl diff --git a/keyboards/Kazhan/keyboard.ncl b/keyboards/Kazhan/keyboard.ncl deleted file mode 100644 index 3561647..0000000 --- a/keyboards/Kazhan/keyboard.ncl +++ /dev/null @@ -1,29 +0,0 @@ -let { CH552T, .. } = import "fak/mcus.ncl" in -let {ColToRowKey, RowToColKey} = import "fak/keyboard.ncl" in - -let side_central = { - mcu = CH552T, - matrix = { - - }, - split.channel = CH552T.features.uart_12_13, -} in - -let side_periph = { - mcu = CH552T, - matrix = { - - }, - split.channel = CH552T.features.uart_30_31, - keys = - let C = ColToRowKey in - let R = RowToColKey in - [ - - ] - -} in - -side_central & { - -} \ No newline at end of file diff --git a/keyboards/Kazhan_split/keyboard.ncl b/keyboards/Kazhan_split/keyboard.ncl new file mode 100644 index 0000000..aea7556 --- /dev/null +++ b/keyboards/Kazhan_split/keyboard.ncl @@ -0,0 +1,48 @@ +let { CH552T, .. } = import "fak/mcus.ncl" in +let {ColToRowKey, RowToColKey} = import "fak/keyboard.ncl" in + +let side_central = { + mcu = CH552T, + matrix = { + cols = [16, 17], + rows = [32, 15, 12, 13] + }, + split.channel = CH552T.features.uart_30_31, +} in + +let side_periph = { + mcu = CH552T, + matrix = { + cols = [16, 17], + rows = [32, 15, 12, 13] + }, + split.channel = CH552T.features.uart_30_31, + keys = + let C = ColToRowKey in + let R = RowToColKey in + [ + C 0 0, R 0 1, C 0 2, R 0 3, R 3 3, + C 1 0, R 1 1, C 1 2, R 1 3, R 2 3, + C 2 0, R 2 1, C 2 2, C 3 2, + C 3 0, R 3 1, + ], +} in + +side_central & { + usb_dev = { + vendor_id = 21681 #0x54B1 + product_id = 1, + product_ver = 46193 #0xB471 Kazhan means bat ^^ + }, + split.peripheral = side_periph, + keys = + let C = ColToRowKey in + let R = RowToColKey in + let S = PeripheralSideKey in + [ + C 3 0, C 0 0, R 0 1, C 0 2, R 0 3, S 0, S 1, S 2, S 3, S 4, + C 2 0, C 1 0, R 1 1, C 1 2, R 1 3, S 5, S 6, S 7, S 8, S 9, + R 3 1, R 2 1, C 2 2, R 2 3, S 10, S 11, S 12, S 13, + C 3 2, R 3 3, S 14, S 15 + ], +} \ No newline at end of file diff --git a/keyboards/Kazhan_split/keymaps/default.ncl b/keyboards/Kazhan_split/keymaps/default.ncl new file mode 100644 index 0000000..e69de29 From a87e8abdd4fbd083f058f05fe19b286d32c77ad9 Mon Sep 17 00:00:00 2001 From: tikinson Date: Fri, 14 Feb 2025 18:08:24 +0100 Subject: [PATCH 3/6] tryin to imitate zilpzalp --- keyboards/Kazhan_split/keyboard.ncl | 13 +- keyboards/Kazhan_split/keymaps/aptmak.ncl | 1 + keyboards/Kazhan_split/keymaps/colemak.ncl | 1 + keyboards/Kazhan_split/keymaps/default.ncl | 1 + keyboards/Kazhan_split/keymaps/qwerty.ncl | 1 + .../Kazhan_split/keymaps/shared/config.ncl | 5 + .../Kazhan_split/keymaps/shared/keymap.ncl | 140 ++++++++++++++++++ .../Kazhan_split/keymaps/shared/layouts.ncl | 132 +++++++++++++++++ 8 files changed, 288 insertions(+), 6 deletions(-) create mode 100644 keyboards/Kazhan_split/keymaps/aptmak.ncl create mode 100644 keyboards/Kazhan_split/keymaps/colemak.ncl create mode 100644 keyboards/Kazhan_split/keymaps/qwerty.ncl create mode 100644 keyboards/Kazhan_split/keymaps/shared/config.ncl create mode 100644 keyboards/Kazhan_split/keymaps/shared/keymap.ncl create mode 100644 keyboards/Kazhan_split/keymaps/shared/layouts.ncl diff --git a/keyboards/Kazhan_split/keyboard.ncl b/keyboards/Kazhan_split/keyboard.ncl index aea7556..40c6061 100644 --- a/keyboards/Kazhan_split/keyboard.ncl +++ b/keyboards/Kazhan_split/keyboard.ncl @@ -1,11 +1,11 @@ +let {ColToRowKey, RowToColKey, PeripheralSideKey, ..} = import "fak/keyboard.ncl" in let { CH552T, .. } = import "fak/mcus.ncl" in -let {ColToRowKey, RowToColKey} = import "fak/keyboard.ncl" in let side_central = { mcu = CH552T, matrix = { cols = [16, 17], - rows = [32, 15, 12, 13] + rows = [32, 15, 12, 13], }, split.channel = CH552T.features.uart_30_31, } in @@ -30,19 +30,20 @@ let side_periph = { side_central & { usb_dev = { - vendor_id = 21681 #0x54B1 - product_id = 1, - product_ver = 46193 #0xB471 Kazhan means bat ^^ + vendor_id = 21681, #0x54B1 + product_id = 2, + product_ver = 46193, #0xB471 Kazhan means bat ^^ }, split.peripheral = side_periph, keys = let C = ColToRowKey in let R = RowToColKey in let S = PeripheralSideKey in + [ C 3 0, C 0 0, R 0 1, C 0 2, R 0 3, S 0, S 1, S 2, S 3, S 4, C 2 0, C 1 0, R 1 1, C 1 2, R 1 3, S 5, S 6, S 7, S 8, S 9, R 3 1, R 2 1, C 2 2, R 2 3, S 10, S 11, S 12, S 13, - C 3 2, R 3 3, S 14, S 15 + C 3 2, R 3 3, S 14, S 15, ], } \ No newline at end of file diff --git a/keyboards/Kazhan_split/keymaps/aptmak.ncl b/keyboards/Kazhan_split/keymaps/aptmak.ncl new file mode 100644 index 0000000..1f5c5c9 --- /dev/null +++ b/keyboards/Kazhan_split/keymaps/aptmak.ncl @@ -0,0 +1 @@ +(import "shared/keymap.ncl") "aptmak" \ No newline at end of file diff --git a/keyboards/Kazhan_split/keymaps/colemak.ncl b/keyboards/Kazhan_split/keymaps/colemak.ncl new file mode 100644 index 0000000..2161d3e --- /dev/null +++ b/keyboards/Kazhan_split/keymaps/colemak.ncl @@ -0,0 +1 @@ +(import "shared/keymap.ncl") "colemak" \ No newline at end of file diff --git a/keyboards/Kazhan_split/keymaps/default.ncl b/keyboards/Kazhan_split/keymaps/default.ncl index e69de29..0f5cafc 100644 --- a/keyboards/Kazhan_split/keymaps/default.ncl +++ b/keyboards/Kazhan_split/keymaps/default.ncl @@ -0,0 +1 @@ +import "qwerty.ncl" \ No newline at end of file diff --git a/keyboards/Kazhan_split/keymaps/qwerty.ncl b/keyboards/Kazhan_split/keymaps/qwerty.ncl new file mode 100644 index 0000000..13d2fbe --- /dev/null +++ b/keyboards/Kazhan_split/keymaps/qwerty.ncl @@ -0,0 +1 @@ +(import "shared/keymap.ncl") "qwerty" \ No newline at end of file diff --git a/keyboards/Kazhan_split/keymaps/shared/config.ncl b/keyboards/Kazhan_split/keymaps/shared/config.ncl new file mode 100644 index 0000000..9bc7373 --- /dev/null +++ b/keyboards/Kazhan_split/keymaps/shared/config.ncl @@ -0,0 +1,5 @@ +let { zilpzalp_combo_timeout_ms, .. } = import "lib/example.ncl" in + +{ + combo_timeout_ms = zilpzalp_combo_timeout_ms, +} diff --git a/keyboards/Kazhan_split/keymaps/shared/keymap.ncl b/keyboards/Kazhan_split/keymaps/shared/keymap.ncl new file mode 100644 index 0000000..48a48fe --- /dev/null +++ b/keyboards/Kazhan_split/keymaps/shared/keymap.ncl @@ -0,0 +1,140 @@ +fun layout_name => + +let { tap, hold, td, combo, .. } = import "fak/keycode.ncl" in +let util = import "fak/util_functions.ncl" in + +let config = import "config.ncl" in +let layout = (import "layouts.ncl")."%{layout_name}" in +let kustom_keys = layout.kustom_keys in + +let ki = { + hp = { decision = 'hold, trigger_on = 'press }, + tp = { decision = 'tap, trigger_on = 'press }, + hr = { decision = 'hold, trigger_on = 'release }, + tr = { decision = 'tap, trigger_on = 'release }, + xx = { decision = 'none }, +} in + +let combos = layout.combos in + +let virtual_keys' = + combos |> std.array.map (fun c => + combo.make config.combo_timeout_ms (std.array.split_at 1 c).right) +in + +let physical_key_count = 32 in +let virtual_key_count = std.array.length virtual_keys' in +let key_count = physical_key_count + virtual_key_count in + +let rec get_side_of_key_idx = fun key_idx => + if key_idx < physical_key_count then + let right_indices = [4, 5, 6, 7, 12, 13, 14, 15, 20, 21, 22, 23, 26, 27] in + if std.array.elem key_idx right_indices then 'right else 'left + else + let c = std.array.at (key_idx - physical_key_count) combos in + let unique_sides = (std.array.split_at 1 c).right + |> std.array.map get_side_of_key_idx + |> util.array.unique in + if std.array.length unique_sides > 1 then + 'both + else + std.array.first unique_sides +in + +let make_hrm = fun key_idx => + let hrm_mods = + let md = hold.reg.mod + in [ + md.lctl, md.lalt, md.lgui, md.lsft, md.ralt, + md.ralt, md.rsft, md.rgui, md.lalt, md.rctl, + ] in + + let hrm_key_indices = [ + 16, 8, 9, 10, 11, + 12, 13, 14, 15, 23, + ] in + + let htb_hrm_base = { + timeout_ms = 200, + quick_tap_ms = 150, + quick_tap_interrupt_ms = 500, + global_quick_tap_ms = 100, + } in + + let htb_hrm = fun side => htb_hrm_base & { + key_interrupts = + let hrm_key_indices_on_side = hrm_key_indices |> + std.array.filter (fun i => get_side_of_key_idx i == side) in + + std.array.generate (fun key_idx => + let side_of_key_idx = get_side_of_key_idx key_idx in + if side_of_key_idx == 'both then + ki.xx + else if side_of_key_idx != side then + ki.hr + else if std.array.elem key_idx hrm_key_indices_on_side then + ki.tr + else + ki.tp + ) key_count + } in + + if std.array.elem key_idx hrm_key_indices then + let mod_idx = util.array.index_of key_idx hrm_key_indices in + let mod = std.array.at mod_idx hrm_mods in + let side = get_side_of_key_idx key_idx in + mod & hold.reg.behavior (htb_hrm side) + else + {} +in + +let XXXX = tap.none & hold.none in +let virtual_base = combos |> std.array.map std.array.first in +let virtual_filler = combos |> std.array.map (fun c => XXXX) in +let excluded_indexes = [0, 9, 10, 19] in + + + +let layer_default = + let base_keycodes = layout.base_layout + |> std.string.characters + |> util.array.enumerate + |> std.array.filter (fun x => + let index = x.index in + !(std.array.elem index excluded_indexes) + ) + |> std.array.map (fun { index, value } => tap.reg.kc."%{value}" & make_hrm index) + in + + + let my_special_keycodes = kustom_keys + |> std.array.map (fun { index, binding } => binding & make_hrm index) + in + + let thumb_keycodes = + let htb_thumb = { + timeout_ms = 200, + quick_tap_ms = 150, + quick_tap_interrupt_ms = 500, + key_interrupts = std.array.replicate key_count ki.hr, + } in + + layout.thumbs + |> util.array.enumerate + |> std.array.map (fun { index, value } => + value + & hold.reg.layer (index + 1) + & hold.reg.behavior htb_thumb) + in + + base_keycodes @ thumb_keycodes @ virtual_base @ my_special_keycodes +in + +{ + virtual_keys = virtual_keys', + layers = [layer_default] @ ( + ["NUM", "NAV", "SYM", "FUN"] + |> std.array.map (fun name => layout.layers."%{name}") + |> std.array.map (fun layer => layer @ virtual_filler) + ) +} diff --git a/keyboards/Kazhan_split/keymaps/shared/layouts.ncl b/keyboards/Kazhan_split/keymaps/shared/layouts.ncl new file mode 100644 index 0000000..a62d757 --- /dev/null +++ b/keyboards/Kazhan_split/keymaps/shared/layouts.ncl @@ -0,0 +1,132 @@ +let { tap, hold, .. } = import "fak/keycode.ncl" in +let util = import "fak/util_functions.ncl" in + +let kc = tap.reg.kc in +let ks = tap.reg.ks in +let md = hold.reg.mod in +let tm = tap.reg.mod in +let me = tap.custom.media in +let mou = tap.custom.mouse in +let XXXX = tap.none & hold.none in + +let shared_layers = { + NUM0 = [ + XXXX, XXXX, XXXX, XXXX, XXXX, ks.PLUS, kc.N7, kc.N8, kc.N9, XXXX, + XXXX, md.lalt, md.lgui, md.lsft, XXXX, kc.MINS, kc.N4, kc.N5, kc.N6, XXXX, + md.lctl, XXXX, XXXX, XXXX, kc.N1, kc.N2, kc.N3, kc.SLSH, + XXXX, XXXX, kc.E, kc.N0, + ], + NAV0 = [ + mou.WH_U,XXXX, XXXX, XXXX, me.MUTE, XXXX, kc.BSPC, kc.DEL, kc.INS, me.VOLU, + mou.WH_D,md.lalt, md.lgui, md.lsft, XXXX, kc.LEFT, kc.DOWN, kc.UP, kc.RGHT, me.VOLD, + md.lctl, XXXX, XXXX, XXXX, kc.HOME, XXXX, kc.END, kc.TAB, + XXXX, XXXX, XXXX, XXXX, + ], + NUM1 = [ + XXXX,kc.N9, kc.N8, kc.N7, ks.ASTR, ks.PLUS, kc.N7, kc.N8, kc.N9, XXXX, + XXXX,kc.N6, kc.N5, kc.N4, kc.SLSH, kc.MINS, kc.N4, kc.N5, kc.N6, XXXX, + kc.N0, kc.N3, kc.N2, kc.N1, kc.N1, kc.N2, kc.N3, kc.DOT, + XXXX, XXXX, kc.E, kc.N0, + ], + NAV1 = [ + mou.WH_U,kc.INS, kc.UP, kc.BSPC, me.MUTE, XXXX, kc.BSPC, kc.DEL, kc.INS, me.VOLU, + mou.WH_D,kc.LEFT, kc.DOWN, kc.RGHT, XXXX, kc.LEFT, kc.DOWN, kc.UP, kc.RGHT, me.VOLD, + md.lctl, kc.HOME, kc.PGDN, kc.END, kc.HOME, kc.PGUP, kc.END, kc.TAB, + XXXX, XXXX, XXXX, XXXX, + ], + SYM = [ + XXXX,kc.GRV, ks.DQUO, kc.DOT, kc.LBRC, kc.RBRC, kc.BSLS, ks.PIPE, kc.SLSH, XXXX, + XXXX,ks.AT, ks.HASH, ks.DLR, ks.LPRN, ks.RPRN, ks.AMPR, ks.ASTR, ks.PERC, XXXX, + ks.EXLM, ks.TILD, kc.QUOT, ks.UNDS, kc.MINS, ks.PLUS, kc.EQL, kc.TAB, + ks.LCBR, ks.RCBR, XXXX, XXXX, + ], + FUN = [ + XXXX,XXXX, XXXX, XXXX, XXXX, kc.F12, kc.F7, kc.F8, kc.F9, XXXX, + XXXX,XXXX, XXXX, XXXX, XXXX, kc.F11, kc.F4, kc.F5, kc.F6, XXXX, + XXXX, XXXX, XXXX, XXXX, kc.F1, kc.F2, kc.F3, kc.F10, + XXXX, XXXX, XXXX, XXXX, + ], +} in + +let both_side_combos = [ + [kc.CAPS, 0, 7], + # Caps word combo here once supported + #[CW, 10, 13], +] in + + + + +{ + qwerty = { + base_layout = "WERTYUIOSDFGHJKLAXCVM,.P", + thumbs = [kc.ESC, kc.SPC, kc.N, kc.ENT], + #kustom_keys = [kc.ESC, kc.SPC, kc.N, kc.ENT], + + custom_keys = [ + { index = 0, binding = tap.reg.kc.ESC }, # W -> ESC + { index = 7, binding = tap.reg.kc.TAB }, # O -> TAB + { index = 9, binding = tap.reg.kc.BACKSPACE }, # S -> BACKSPACE + { index = 16, binding = tap.reg.kc.ENTER } # L -> ENTER + ], + + + + + combos = [ + # Left + [kc.Q, 0, 1], + [kc.Z, 17, 18], [kc.B, 18, 19], + # Right + [kc.QUOT, 5, 6], [kc.SCLN, 6, 7], + [kc.MINS, 20, 21], [kc.SLSH, 21, 22], + ] @ both_side_combos, + layers = { + NUM = shared_layers.NUM0, + NAV = shared_layers.NAV0, + SYM = shared_layers.SYM, + FUN = shared_layers.FUN, + } + }, + + colemak = { + base_layout = "WFPKJLUYRSTGMNEIAXCDH,.O", + thumbs = [kc.ESC, kc.SPC, kc.ENT, kc.BSPC], + combos = [ + # Left + [kc.Q, 0, 1], [kc.B, 1, 2], + [kc.Z, 17, 18], [kc.V, 18, 19], + # Right + [kc.QUOT, 5, 6], [kc.SCLN, 6, 7], + [kc.MINS, 20, 21], [kc.SLSH, 21, 22], + ] @ both_side_combos, + layers = { + NUM = shared_layers.NUM0, + NAV = shared_layers.NAV0, + SYM = shared_layers.SYM, + FUN = shared_layers.FUN, + } + }, + + aptmak = { + base_layout = "WFPBJLUYSTHKXNAIRCGDM,.O", + thumbs = [kc.QUOT, kc.SPC, kc.E, kc.ENT], + combos = [ + # Left + [kc.V, 0, 1], [kc.Q, 1, 2], + [ks.LCBR, 0, 8], [kc.LBRC, 1, 9], [ks.LPRN, 2, 10], [ks.LABK, 3, 11], + [kc.Z, 17, 18], [kc.ESC, 18, 19], + # Right + [tm.lctl & kc.BSPC, 5, 7], + [kc.BSPC, 5, 6], [kc.DEL, 6, 7], + [ks.RABK, 4, 12], [ks.RPRN, 5, 13], [kc.RBRC, 6, 14], [ks.RCBR, 7, 15], + [kc.MINS, 20, 21], [kc.SLSH, 21, 22], + ] @ both_side_combos, + layers = { + NUM = shared_layers.NUM1, + NAV = shared_layers.NAV1, + SYM = shared_layers.SYM, + FUN = shared_layers.FUN, + }, + }, +} From e2f2eb9be97d490f05856105bfca6b98ec882574 Mon Sep 17 00:00:00 2001 From: tikinson Date: Sat, 15 Feb 2025 00:51:33 +0100 Subject: [PATCH 4/6] idx corrections --- keyboards/Kazhan_split/keyboard.ncl | 7 +++---- .../Kazhan_split/keymaps/shared/keymap.ncl | 6 +++--- .../Kazhan_split/keymaps/shared/layouts.ncl | 18 +++++++++--------- 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/keyboards/Kazhan_split/keyboard.ncl b/keyboards/Kazhan_split/keyboard.ncl index 40c6061..c2bcc3a 100644 --- a/keyboards/Kazhan_split/keyboard.ncl +++ b/keyboards/Kazhan_split/keyboard.ncl @@ -1,11 +1,11 @@ -let {ColToRowKey, RowToColKey, PeripheralSideKey, ..} = import "fak/keyboard.ncl" in +let { RowToColKey, ColToRowKey, PeripheralSideKey, .. } = import "fak/keyboard.ncl" in let { CH552T, .. } = import "fak/mcus.ncl" in let side_central = { mcu = CH552T, matrix = { cols = [16, 17], - rows = [32, 15, 12, 13], + rows = [32, 15, 12, 13] }, split.channel = CH552T.features.uart_30_31, } in @@ -32,14 +32,13 @@ side_central & { usb_dev = { vendor_id = 21681, #0x54B1 product_id = 2, - product_ver = 46193, #0xB471 Kazhan means bat ^^ + product_ver = 46193, #0xB471 kazhan means bat ^^ }, split.peripheral = side_periph, keys = let C = ColToRowKey in let R = RowToColKey in let S = PeripheralSideKey in - [ C 3 0, C 0 0, R 0 1, C 0 2, R 0 3, S 0, S 1, S 2, S 3, S 4, C 2 0, C 1 0, R 1 1, C 1 2, R 1 3, S 5, S 6, S 7, S 8, S 9, diff --git a/keyboards/Kazhan_split/keymaps/shared/keymap.ncl b/keyboards/Kazhan_split/keymaps/shared/keymap.ncl index 48a48fe..a5423c9 100644 --- a/keyboards/Kazhan_split/keymaps/shared/keymap.ncl +++ b/keyboards/Kazhan_split/keymaps/shared/keymap.ncl @@ -28,7 +28,7 @@ let key_count = physical_key_count + virtual_key_count in let rec get_side_of_key_idx = fun key_idx => if key_idx < physical_key_count then - let right_indices = [4, 5, 6, 7, 12, 13, 14, 15, 20, 21, 22, 23, 26, 27] in + let right_indices = [4, 5, 6, 7, 12, 13, 14, 15, 20, 21, 22, 23, 28, 29, 30, 31] in if std.array.elem key_idx right_indices then 'right else 'left else let c = std.array.at (key_idx - physical_key_count) combos in @@ -50,8 +50,8 @@ let make_hrm = fun key_idx => ] in let hrm_key_indices = [ - 16, 8, 9, 10, 11, - 12, 13, 14, 15, 23, + 25, 8, 9, 10, 11, + 30, 13, 14, 15, 23, ] in let htb_hrm_base = { diff --git a/keyboards/Kazhan_split/keymaps/shared/layouts.ncl b/keyboards/Kazhan_split/keymaps/shared/layouts.ncl index a62d757..7aba1fc 100644 --- a/keyboards/Kazhan_split/keymaps/shared/layouts.ncl +++ b/keyboards/Kazhan_split/keymaps/shared/layouts.ncl @@ -49,7 +49,7 @@ let shared_layers = { } in let both_side_combos = [ - [kc.CAPS, 0, 7], + [kc.CAPS, 1, 6], # Caps word combo here once supported #[CW, 10, 13], ] in @@ -61,21 +61,21 @@ let both_side_combos = [ qwerty = { base_layout = "WERTYUIOSDFGHJKLAXCVM,.P", thumbs = [kc.ESC, kc.SPC, kc.N, kc.ENT], - #kustom_keys = [kc.ESC, kc.SPC, kc.N, kc.ENT], + kustom_keys = [kc.ESC, kc.SPC, kc.N, kc.ENT], - custom_keys = [ - { index = 0, binding = tap.reg.kc.ESC }, # W -> ESC - { index = 7, binding = tap.reg.kc.TAB }, # O -> TAB - { index = 9, binding = tap.reg.kc.BACKSPACE }, # S -> BACKSPACE - { index = 16, binding = tap.reg.kc.ENTER } # L -> ENTER - ], + #kustom_keys = [ + # { index = 0, binding = tap.reg.kc.ESC }, # W -> ESC + # { index = 7, binding = tap.reg.kc.TAB }, # O -> TAB + # { index = 9, binding = tap.reg.kc.BACKSPACE }, # S -> BACKSPACE + # { index = 16, binding = tap.reg.kc.ENTER } # L -> ENTER + #], combos = [ # Left - [kc.Q, 0, 1], + [kc.Q, 1, 2], [kc.Z, 17, 18], [kc.B, 18, 19], # Right [kc.QUOT, 5, 6], [kc.SCLN, 6, 7], From b16147692b00a80105e15876ae07645391febd1c Mon Sep 17 00:00:00 2001 From: tikinson Date: Sun, 16 Feb 2025 22:14:37 +0100 Subject: [PATCH 5/6] matrix corrections --- keyboards/Kazhan_split/keyboard.ncl | 24 +++---- .../Kazhan_split/keymaps/shared/keymap.ncl | 2 +- .../Kazhan_split/keymaps/shared/layouts.ncl | 71 +++++++++---------- 3 files changed, 45 insertions(+), 52 deletions(-) diff --git a/keyboards/Kazhan_split/keyboard.ncl b/keyboards/Kazhan_split/keyboard.ncl index c2bcc3a..f7c4dc1 100644 --- a/keyboards/Kazhan_split/keyboard.ncl +++ b/keyboards/Kazhan_split/keyboard.ncl @@ -4,8 +4,8 @@ let { CH552T, .. } = import "fak/mcus.ncl" in let side_central = { mcu = CH552T, matrix = { - cols = [16, 17], - rows = [32, 15, 12, 13] + rows = [32, 15, 12, 13], + cols = [16, 17] }, split.channel = CH552T.features.uart_30_31, } in @@ -13,18 +13,18 @@ let side_central = { let side_periph = { mcu = CH552T, matrix = { - cols = [16, 17], - rows = [32, 15, 12, 13] + rows = [32, 15, 12, 13], + cols = [16, 17] }, split.channel = CH552T.features.uart_30_31, keys = let C = ColToRowKey in let R = RowToColKey in [ - C 0 0, R 0 1, C 0 2, R 0 3, R 3 3, - C 1 0, R 1 1, C 1 2, R 1 3, R 2 3, - C 2 0, R 2 1, C 2 2, C 3 2, - C 3 0, R 3 1, + C 0 0, R 0 0, C 1 0, R 1 0, R 1 3, + C 0 1, R 0 1, C 1 1, R 1 1, R 1 2, + C 0 2, R 0 2, C 1 2, C 1 3, + C 0 3, R 0 3, ], } in @@ -40,9 +40,9 @@ side_central & { let R = RowToColKey in let S = PeripheralSideKey in [ - C 3 0, C 0 0, R 0 1, C 0 2, R 0 3, S 0, S 1, S 2, S 3, S 4, - C 2 0, C 1 0, R 1 1, C 1 2, R 1 3, S 5, S 6, S 7, S 8, S 9, - R 3 1, R 2 1, C 2 2, R 2 3, S 10, S 11, S 12, S 13, - C 3 2, R 3 3, S 14, S 15, + C 0 3, C 0 0, R 0 0, C 1 0, R 1 0, S 0, S 1, S 2, S 3, S 4, + C 0 2, C 0 1, R 0 1, C 1 1, R 1 1, S 5, S 6, S 7, S 8, S 9, + R 0 3, R 0 2, C 1 2, R 1 2, S 10, S 11, S 12, S 13, + C 1 3, R 1 3, S 14, S 15, ], } \ No newline at end of file diff --git a/keyboards/Kazhan_split/keymaps/shared/keymap.ncl b/keyboards/Kazhan_split/keymaps/shared/keymap.ncl index a5423c9..cf23aa5 100644 --- a/keyboards/Kazhan_split/keymaps/shared/keymap.ncl +++ b/keyboards/Kazhan_split/keymaps/shared/keymap.ncl @@ -51,7 +51,7 @@ let make_hrm = fun key_idx => let hrm_key_indices = [ 25, 8, 9, 10, 11, - 30, 13, 14, 15, 23, + 30, 13, 14, 15, 12, ] in let htb_hrm_base = { diff --git a/keyboards/Kazhan_split/keymaps/shared/layouts.ncl b/keyboards/Kazhan_split/keymaps/shared/layouts.ncl index 7aba1fc..fcafcb3 100644 --- a/keyboards/Kazhan_split/keymaps/shared/layouts.ncl +++ b/keyboards/Kazhan_split/keymaps/shared/layouts.ncl @@ -11,68 +11,61 @@ let XXXX = tap.none & hold.none in let shared_layers = { NUM0 = [ - XXXX, XXXX, XXXX, XXXX, XXXX, ks.PLUS, kc.N7, kc.N8, kc.N9, XXXX, - XXXX, md.lalt, md.lgui, md.lsft, XXXX, kc.MINS, kc.N4, kc.N5, kc.N6, XXXX, - md.lctl, XXXX, XXXX, XXXX, kc.N1, kc.N2, kc.N3, kc.SLSH, - XXXX, XXXX, kc.E, kc.N0, + XXXX, XXXX, XXXX, XXXX, XXXX, ks.PLUS, kc.N7, kc.N8, kc.N9, XXXX, + XXXX, md.lalt, md.lgui, md.lsft, XXXX, kc.MINS, kc.N4, kc.N5, kc.N6, XXXX, + md.lctl, XXXX, XXXX, XXXX, kc.N1, kc.N2, kc.N3, kc.SLSH, + XXXX, XXXX, kc.E, kc.N0, ], NAV0 = [ - mou.WH_U,XXXX, XXXX, XXXX, me.MUTE, XXXX, kc.BSPC, kc.DEL, kc.INS, me.VOLU, - mou.WH_D,md.lalt, md.lgui, md.lsft, XXXX, kc.LEFT, kc.DOWN, kc.UP, kc.RGHT, me.VOLD, - md.lctl, XXXX, XXXX, XXXX, kc.HOME, XXXX, kc.END, kc.TAB, - XXXX, XXXX, XXXX, XXXX, + mou.WH_U, XXXX, XXXX, XXXX, me.MUTE, XXXX, kc.BSPC, kc.DEL, kc.INS, me.VOLU, + mou.WH_D, md.lalt, md.lgui, md.lsft, XXXX, kc.LEFT, kc.DOWN, kc.UP, kc.RGHT, me.VOLD, + md.lctl, XXXX, XXXX, XXXX, kc.HOME, XXXX, kc.END, kc.TAB, + XXXX, XXXX, XXXX, XXXX, ], NUM1 = [ - XXXX,kc.N9, kc.N8, kc.N7, ks.ASTR, ks.PLUS, kc.N7, kc.N8, kc.N9, XXXX, - XXXX,kc.N6, kc.N5, kc.N4, kc.SLSH, kc.MINS, kc.N4, kc.N5, kc.N6, XXXX, - kc.N0, kc.N3, kc.N2, kc.N1, kc.N1, kc.N2, kc.N3, kc.DOT, - XXXX, XXXX, kc.E, kc.N0, + XXXX, kc.N9, kc.N8, kc.N7, ks.ASTR, ks.PLUS, kc.N7, kc.N8, kc.N9, XXXX, + XXXX, kc.N6, kc.N5, kc.N4, kc.SLSH, kc.MINS, kc.N4, kc.N5, kc.N6, XXXX, + kc.N0, kc.N3, kc.N2, kc.N1, kc.N1, kc.N2, kc.N3, kc.DOT, + XXXX, XXXX, kc.E, kc.N0, ], NAV1 = [ - mou.WH_U,kc.INS, kc.UP, kc.BSPC, me.MUTE, XXXX, kc.BSPC, kc.DEL, kc.INS, me.VOLU, - mou.WH_D,kc.LEFT, kc.DOWN, kc.RGHT, XXXX, kc.LEFT, kc.DOWN, kc.UP, kc.RGHT, me.VOLD, - md.lctl, kc.HOME, kc.PGDN, kc.END, kc.HOME, kc.PGUP, kc.END, kc.TAB, - XXXX, XXXX, XXXX, XXXX, + mou.WH_U, kc.INS, kc.UP, kc.BSPC, me.MUTE, XXXX, kc.BSPC, kc.DEL, kc.INS, me.VOLU, + mou.WH_D, kc.LEFT, kc.DOWN, kc.RGHT, XXXX, kc.LEFT, kc.DOWN, kc.UP, kc.RGHT, me.VOLD, + md.lctl, kc.HOME, kc.PGDN, kc.END, kc.HOME, kc.PGUP, kc.END, kc.TAB, + XXXX, XXXX, XXXX, XXXX, ], SYM = [ - XXXX,kc.GRV, ks.DQUO, kc.DOT, kc.LBRC, kc.RBRC, kc.BSLS, ks.PIPE, kc.SLSH, XXXX, - XXXX,ks.AT, ks.HASH, ks.DLR, ks.LPRN, ks.RPRN, ks.AMPR, ks.ASTR, ks.PERC, XXXX, - ks.EXLM, ks.TILD, kc.QUOT, ks.UNDS, kc.MINS, ks.PLUS, kc.EQL, kc.TAB, - ks.LCBR, ks.RCBR, XXXX, XXXX, + XXXX, kc.GRV, ks.DQUO, kc.DOT, kc.LBRC, kc.RBRC, kc.BSLS, ks.PIPE, kc.SLSH, XXXX, + XXXX, ks.AT, ks.HASH, ks.DLR, ks.LPRN, ks.RPRN, ks.AMPR, ks.ASTR, ks.PERC, XXXX, + ks.EXLM, ks.TILD, kc.QUOT, ks.UNDS, kc.MINS, ks.PLUS, kc.EQL, kc.TAB, + ks.LCBR, ks.RCBR, XXXX, XXXX, ], FUN = [ - XXXX,XXXX, XXXX, XXXX, XXXX, kc.F12, kc.F7, kc.F8, kc.F9, XXXX, - XXXX,XXXX, XXXX, XXXX, XXXX, kc.F11, kc.F4, kc.F5, kc.F6, XXXX, - XXXX, XXXX, XXXX, XXXX, kc.F1, kc.F2, kc.F3, kc.F10, - XXXX, XXXX, XXXX, XXXX, + XXXX, XXXX, XXXX, XXXX, XXXX, kc.F12, kc.F7, kc.F8, kc.F9, XXXX, + XXXX, XXXX, XXXX, XXXX, XXXX, kc.F11, kc.F4, kc.F5, kc.F6, XXXX, + XXXX, XXXX, XXXX, XXXX, kc.F1, kc.F2, kc.F3, kc.F10, + XXXX, XXXX, XXXX, XXXX, ], } in let both_side_combos = [ - [kc.CAPS, 1, 6], + [kc.CAPS, 1, 7], # Caps word combo here once supported #[CW, 10, 13], ] in - - - { qwerty = { base_layout = "WERTYUIOSDFGHJKLAXCVM,.P", thumbs = [kc.ESC, kc.SPC, kc.N, kc.ENT], - kustom_keys = [kc.ESC, kc.SPC, kc.N, kc.ENT], + #kustom_keys = [kc.ESC, kc.SPC, kc.N, kc.ENT], - #kustom_keys = [ - # { index = 0, binding = tap.reg.kc.ESC }, # W -> ESC - # { index = 7, binding = tap.reg.kc.TAB }, # O -> TAB - # { index = 9, binding = tap.reg.kc.BACKSPACE }, # S -> BACKSPACE - # { index = 16, binding = tap.reg.kc.ENTER } # L -> ENTER - #], - - - - + kustom_keys = [ + { index = 0, binding = tap.reg.kc.ESC }, # W -> ESC + { index = 9, binding = tap.reg.kc.TAB }, # O -> TAB + { index = 10, binding = tap.reg.kc.BACKSPACE }, # S -> BACKSPACE + { index = 19, binding = tap.reg.kc.ENTER } # L -> ENTER + ], combos = [ # Left [kc.Q, 1, 2], From af2372e4d826626ac24fbcfe6fe7bbcdd78d615f Mon Sep 17 00:00:00 2001 From: tikinson Date: Mon, 17 Feb 2025 09:23:09 +0100 Subject: [PATCH 6/6] experiment with no extra exception, more keys for default layer --- .../Kazhan_split/keymaps/shared/keymap.ncl | 12 +- .../Kazhan_split/keymaps/shared/layouts.ncl | 11 +- keyboards/Kazhan_split_simple/keyboard.ncl | 48 ++++++ .../Kazhan_split_simple/keymaps/config.ncl | 5 + .../Kazhan_split_simple/keymaps/keymap.ncl | 140 ++++++++++++++++++ .../Kazhan_split_simple/keymaps/layouts.ncl | 125 ++++++++++++++++ 6 files changed, 323 insertions(+), 18 deletions(-) create mode 100644 keyboards/Kazhan_split_simple/keyboard.ncl create mode 100644 keyboards/Kazhan_split_simple/keymaps/config.ncl create mode 100644 keyboards/Kazhan_split_simple/keymaps/keymap.ncl create mode 100644 keyboards/Kazhan_split_simple/keymaps/layouts.ncl diff --git a/keyboards/Kazhan_split/keymaps/shared/keymap.ncl b/keyboards/Kazhan_split/keymaps/shared/keymap.ncl index cf23aa5..671ad68 100644 --- a/keyboards/Kazhan_split/keymaps/shared/keymap.ncl +++ b/keyboards/Kazhan_split/keymaps/shared/keymap.ncl @@ -99,17 +99,11 @@ let layer_default = let base_keycodes = layout.base_layout |> std.string.characters |> util.array.enumerate - |> std.array.filter (fun x => - let index = x.index in - !(std.array.elem index excluded_indexes) - ) + |> std.array.map (fun { index, value } => tap.reg.kc."%{value}" & make_hrm index) in - let my_special_keycodes = kustom_keys - |> std.array.map (fun { index, binding } => binding & make_hrm index) - in let thumb_keycodes = let htb_thumb = { @@ -126,8 +120,8 @@ let layer_default = & hold.reg.layer (index + 1) & hold.reg.behavior htb_thumb) in - - base_keycodes @ thumb_keycodes @ virtual_base @ my_special_keycodes + + base_keycodes @ thumb_keycodes @ virtual_base in { diff --git a/keyboards/Kazhan_split/keymaps/shared/layouts.ncl b/keyboards/Kazhan_split/keymaps/shared/layouts.ncl index fcafcb3..0ca5685 100644 --- a/keyboards/Kazhan_split/keymaps/shared/layouts.ncl +++ b/keyboards/Kazhan_split/keymaps/shared/layouts.ncl @@ -56,16 +56,9 @@ let both_side_combos = [ { qwerty = { - base_layout = "WERTYUIOSDFGHJKLAXCVM,.P", + base_layout = "QWERTYUIOQQSDFGHJKLAQXCVM,.P", thumbs = [kc.ESC, kc.SPC, kc.N, kc.ENT], - #kustom_keys = [kc.ESC, kc.SPC, kc.N, kc.ENT], - - kustom_keys = [ - { index = 0, binding = tap.reg.kc.ESC }, # W -> ESC - { index = 9, binding = tap.reg.kc.TAB }, # O -> TAB - { index = 10, binding = tap.reg.kc.BACKSPACE }, # S -> BACKSPACE - { index = 19, binding = tap.reg.kc.ENTER } # L -> ENTER - ], + combos = [ # Left [kc.Q, 1, 2], diff --git a/keyboards/Kazhan_split_simple/keyboard.ncl b/keyboards/Kazhan_split_simple/keyboard.ncl new file mode 100644 index 0000000..f7c4dc1 --- /dev/null +++ b/keyboards/Kazhan_split_simple/keyboard.ncl @@ -0,0 +1,48 @@ +let { RowToColKey, ColToRowKey, PeripheralSideKey, .. } = import "fak/keyboard.ncl" in +let { CH552T, .. } = import "fak/mcus.ncl" in + +let side_central = { + mcu = CH552T, + matrix = { + rows = [32, 15, 12, 13], + cols = [16, 17] + }, + split.channel = CH552T.features.uart_30_31, +} in + +let side_periph = { + mcu = CH552T, + matrix = { + rows = [32, 15, 12, 13], + cols = [16, 17] + }, + split.channel = CH552T.features.uart_30_31, + keys = + let C = ColToRowKey in + let R = RowToColKey in + [ + C 0 0, R 0 0, C 1 0, R 1 0, R 1 3, + C 0 1, R 0 1, C 1 1, R 1 1, R 1 2, + C 0 2, R 0 2, C 1 2, C 1 3, + C 0 3, R 0 3, + ], +} in + +side_central & { + usb_dev = { + vendor_id = 21681, #0x54B1 + product_id = 2, + product_ver = 46193, #0xB471 kazhan means bat ^^ + }, + split.peripheral = side_periph, + keys = + let C = ColToRowKey in + let R = RowToColKey in + let S = PeripheralSideKey in + [ + C 0 3, C 0 0, R 0 0, C 1 0, R 1 0, S 0, S 1, S 2, S 3, S 4, + C 0 2, C 0 1, R 0 1, C 1 1, R 1 1, S 5, S 6, S 7, S 8, S 9, + R 0 3, R 0 2, C 1 2, R 1 2, S 10, S 11, S 12, S 13, + C 1 3, R 1 3, S 14, S 15, + ], +} \ No newline at end of file diff --git a/keyboards/Kazhan_split_simple/keymaps/config.ncl b/keyboards/Kazhan_split_simple/keymaps/config.ncl new file mode 100644 index 0000000..9bc7373 --- /dev/null +++ b/keyboards/Kazhan_split_simple/keymaps/config.ncl @@ -0,0 +1,5 @@ +let { zilpzalp_combo_timeout_ms, .. } = import "lib/example.ncl" in + +{ + combo_timeout_ms = zilpzalp_combo_timeout_ms, +} diff --git a/keyboards/Kazhan_split_simple/keymaps/keymap.ncl b/keyboards/Kazhan_split_simple/keymaps/keymap.ncl new file mode 100644 index 0000000..17cab08 --- /dev/null +++ b/keyboards/Kazhan_split_simple/keymaps/keymap.ncl @@ -0,0 +1,140 @@ +fun layout_name => + +let { tap, hold, td, combo, .. } = import "fak/keycode.ncl" in +let util = import "fak/util_functions.ncl" in + +let config = import "config.ncl" in +let layout = (import "layouts.ncl")."%{layout_name}" in +let kustom_keys = layout.kustom_keys in + +let ki = { + hp = { decision = 'hold, trigger_on = 'press }, + tp = { decision = 'tap, trigger_on = 'press }, + hr = { decision = 'hold, trigger_on = 'release }, + tr = { decision = 'tap, trigger_on = 'release }, + xx = { decision = 'none }, +} in + +let combos = layout.combos in + +let virtual_keys' = + combos |> std.array.map (fun c => + combo.make config.combo_timeout_ms (std.array.split_at 1 c).right) +in + +let physical_key_count = 32 in +let virtual_key_count = std.array.length virtual_keys' in +let key_count = physical_key_count + virtual_key_count in + +let rec get_side_of_key_idx = fun key_idx => + if key_idx < physical_key_count then + let right_indices = [4, 5, 6, 7, 12, 13, 14, 15, 20, 21, 22, 23, 28, 29, 30, 31] in + if std.array.elem key_idx right_indices then 'right else 'left + else + let c = std.array.at (key_idx - physical_key_count) combos in + let unique_sides = (std.array.split_at 1 c).right + |> std.array.map get_side_of_key_idx + |> util.array.unique in + if std.array.length unique_sides > 1 then + 'both + else + std.array.first unique_sides +in + +let make_hrm = fun key_idx => + let hrm_mods = + let md = hold.reg.mod + in [ + md.lctl, md.lalt, md.lgui, md.lsft, md.ralt, + md.ralt, md.rsft, md.rgui, md.lalt, md.rctl, + ] in + + let hrm_key_indices = [ + 25, 8, 9, 10, 11, + 30, 13, 14, 15, 12, + ] in + + let htb_hrm_base = { + timeout_ms = 200, + quick_tap_ms = 150, + quick_tap_interrupt_ms = 500, + global_quick_tap_ms = 100, + } in + + let htb_hrm = fun side => htb_hrm_base & { + key_interrupts = + let hrm_key_indices_on_side = hrm_key_indices |> + std.array.filter (fun i => get_side_of_key_idx i == side) in + + std.array.generate (fun key_idx => + let side_of_key_idx = get_side_of_key_idx key_idx in + if side_of_key_idx == 'both then + ki.xx + else if side_of_key_idx != side then + ki.hr + else if std.array.elem key_idx hrm_key_indices_on_side then + ki.tr + else + ki.tp + ) key_count + } in + + if std.array.elem key_idx hrm_key_indices then + let mod_idx = util.array.index_of key_idx hrm_key_indices in + let mod = std.array.at mod_idx hrm_mods in + let side = get_side_of_key_idx key_idx in + mod & hold.reg.behavior (htb_hrm side) + else + {} +in + +let XXXX = tap.none & hold.none in +let virtual_base = combos |> std.array.map std.array.first in +let virtual_filler = combos |> std.array.map (fun c => XXXX) in +let excluded_indexes = [0, 9, 10, 19] in + + + +let layer_default = + let base_keycodes = layout.base_layout + |> std.string.characters + |> util.array.enumerate + |> std.array.filter (fun x => + let index = x.index in + !(std.array.elem index excluded_indexes) + ) + |> std.array.map (fun { index, value } => tap.reg.kc."%{value}" & make_hrm index) + in + + + let my_special_keycodes = kustom_keys + |> std.array.map (fun { index, binding } => binding & make_hrm index) + in + + let thumb_keycodes = + let htb_thumb = { + timeout_ms = 200, + quick_tap_ms = 150, + quick_tap_interrupt_ms = 500, + key_interrupts = std.array.replicate key_count ki.hr, + } in + + layout.thumbs + |> util.array.enumerate + |> std.array.map (fun { index, value } => + value + & hold.reg.layer (index + 1) + & hold.reg.behavior htb_thumb) + in + + base_keycodes @ thumb_keycodes @ virtual_base @ my_special_keycodes +in + +{ + virtual_keys = virtual_keys', + layers = [layer_default] @ ( + ["NUM", "NAV", "SYM", "FUN"] + |> std.array.map (fun name => layout.layers."%{name}") + |> std.array.map (fun layer => layer @ virtual_filler) + ) +} diff --git a/keyboards/Kazhan_split_simple/keymaps/layouts.ncl b/keyboards/Kazhan_split_simple/keymaps/layouts.ncl new file mode 100644 index 0000000..fcafcb3 --- /dev/null +++ b/keyboards/Kazhan_split_simple/keymaps/layouts.ncl @@ -0,0 +1,125 @@ +let { tap, hold, .. } = import "fak/keycode.ncl" in +let util = import "fak/util_functions.ncl" in + +let kc = tap.reg.kc in +let ks = tap.reg.ks in +let md = hold.reg.mod in +let tm = tap.reg.mod in +let me = tap.custom.media in +let mou = tap.custom.mouse in +let XXXX = tap.none & hold.none in + +let shared_layers = { + NUM0 = [ + XXXX, XXXX, XXXX, XXXX, XXXX, ks.PLUS, kc.N7, kc.N8, kc.N9, XXXX, + XXXX, md.lalt, md.lgui, md.lsft, XXXX, kc.MINS, kc.N4, kc.N5, kc.N6, XXXX, + md.lctl, XXXX, XXXX, XXXX, kc.N1, kc.N2, kc.N3, kc.SLSH, + XXXX, XXXX, kc.E, kc.N0, + ], + NAV0 = [ + mou.WH_U, XXXX, XXXX, XXXX, me.MUTE, XXXX, kc.BSPC, kc.DEL, kc.INS, me.VOLU, + mou.WH_D, md.lalt, md.lgui, md.lsft, XXXX, kc.LEFT, kc.DOWN, kc.UP, kc.RGHT, me.VOLD, + md.lctl, XXXX, XXXX, XXXX, kc.HOME, XXXX, kc.END, kc.TAB, + XXXX, XXXX, XXXX, XXXX, + ], + NUM1 = [ + XXXX, kc.N9, kc.N8, kc.N7, ks.ASTR, ks.PLUS, kc.N7, kc.N8, kc.N9, XXXX, + XXXX, kc.N6, kc.N5, kc.N4, kc.SLSH, kc.MINS, kc.N4, kc.N5, kc.N6, XXXX, + kc.N0, kc.N3, kc.N2, kc.N1, kc.N1, kc.N2, kc.N3, kc.DOT, + XXXX, XXXX, kc.E, kc.N0, + ], + NAV1 = [ + mou.WH_U, kc.INS, kc.UP, kc.BSPC, me.MUTE, XXXX, kc.BSPC, kc.DEL, kc.INS, me.VOLU, + mou.WH_D, kc.LEFT, kc.DOWN, kc.RGHT, XXXX, kc.LEFT, kc.DOWN, kc.UP, kc.RGHT, me.VOLD, + md.lctl, kc.HOME, kc.PGDN, kc.END, kc.HOME, kc.PGUP, kc.END, kc.TAB, + XXXX, XXXX, XXXX, XXXX, + ], + SYM = [ + XXXX, kc.GRV, ks.DQUO, kc.DOT, kc.LBRC, kc.RBRC, kc.BSLS, ks.PIPE, kc.SLSH, XXXX, + XXXX, ks.AT, ks.HASH, ks.DLR, ks.LPRN, ks.RPRN, ks.AMPR, ks.ASTR, ks.PERC, XXXX, + ks.EXLM, ks.TILD, kc.QUOT, ks.UNDS, kc.MINS, ks.PLUS, kc.EQL, kc.TAB, + ks.LCBR, ks.RCBR, XXXX, XXXX, + ], + FUN = [ + XXXX, XXXX, XXXX, XXXX, XXXX, kc.F12, kc.F7, kc.F8, kc.F9, XXXX, + XXXX, XXXX, XXXX, XXXX, XXXX, kc.F11, kc.F4, kc.F5, kc.F6, XXXX, + XXXX, XXXX, XXXX, XXXX, kc.F1, kc.F2, kc.F3, kc.F10, + XXXX, XXXX, XXXX, XXXX, + ], +} in + +let both_side_combos = [ + [kc.CAPS, 1, 7], + # Caps word combo here once supported + #[CW, 10, 13], +] in + +{ + qwerty = { + base_layout = "WERTYUIOSDFGHJKLAXCVM,.P", + thumbs = [kc.ESC, kc.SPC, kc.N, kc.ENT], + #kustom_keys = [kc.ESC, kc.SPC, kc.N, kc.ENT], + + kustom_keys = [ + { index = 0, binding = tap.reg.kc.ESC }, # W -> ESC + { index = 9, binding = tap.reg.kc.TAB }, # O -> TAB + { index = 10, binding = tap.reg.kc.BACKSPACE }, # S -> BACKSPACE + { index = 19, binding = tap.reg.kc.ENTER } # L -> ENTER + ], + combos = [ + # Left + [kc.Q, 1, 2], + [kc.Z, 17, 18], [kc.B, 18, 19], + # Right + [kc.QUOT, 5, 6], [kc.SCLN, 6, 7], + [kc.MINS, 20, 21], [kc.SLSH, 21, 22], + ] @ both_side_combos, + layers = { + NUM = shared_layers.NUM0, + NAV = shared_layers.NAV0, + SYM = shared_layers.SYM, + FUN = shared_layers.FUN, + } + }, + + colemak = { + base_layout = "WFPKJLUYRSTGMNEIAXCDH,.O", + thumbs = [kc.ESC, kc.SPC, kc.ENT, kc.BSPC], + combos = [ + # Left + [kc.Q, 0, 1], [kc.B, 1, 2], + [kc.Z, 17, 18], [kc.V, 18, 19], + # Right + [kc.QUOT, 5, 6], [kc.SCLN, 6, 7], + [kc.MINS, 20, 21], [kc.SLSH, 21, 22], + ] @ both_side_combos, + layers = { + NUM = shared_layers.NUM0, + NAV = shared_layers.NAV0, + SYM = shared_layers.SYM, + FUN = shared_layers.FUN, + } + }, + + aptmak = { + base_layout = "WFPBJLUYSTHKXNAIRCGDM,.O", + thumbs = [kc.QUOT, kc.SPC, kc.E, kc.ENT], + combos = [ + # Left + [kc.V, 0, 1], [kc.Q, 1, 2], + [ks.LCBR, 0, 8], [kc.LBRC, 1, 9], [ks.LPRN, 2, 10], [ks.LABK, 3, 11], + [kc.Z, 17, 18], [kc.ESC, 18, 19], + # Right + [tm.lctl & kc.BSPC, 5, 7], + [kc.BSPC, 5, 6], [kc.DEL, 6, 7], + [ks.RABK, 4, 12], [ks.RPRN, 5, 13], [kc.RBRC, 6, 14], [ks.RCBR, 7, 15], + [kc.MINS, 20, 21], [kc.SLSH, 21, 22], + ] @ both_side_combos, + layers = { + NUM = shared_layers.NUM1, + NAV = shared_layers.NAV1, + SYM = shared_layers.SYM, + FUN = shared_layers.FUN, + }, + }, +}