diff --git a/keyboards/Kazhan_split/keyboard.ncl b/keyboards/Kazhan_split/keyboard.ncl new file mode 100644 index 0000000..f7c4dc1 --- /dev/null +++ b/keyboards/Kazhan_split/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/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 new file mode 100644 index 0000000..0f5cafc --- /dev/null +++ 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..671ad68 --- /dev/null +++ b/keyboards/Kazhan_split/keymaps/shared/keymap.ncl @@ -0,0 +1,134 @@ +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.map (fun { index, value } => tap.reg.kc."%{value}" & 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 +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..0ca5685 --- /dev/null +++ b/keyboards/Kazhan_split/keymaps/shared/layouts.ncl @@ -0,0 +1,118 @@ +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 = "QWERTYUIOQQSDFGHJKLAQXCVM,.P", + thumbs = [kc.ESC, kc.SPC, kc.N, kc.ENT], + + 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, + }, + }, +} 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, + }, + }, +}