# After making changes to code or tables call org-babel-tangle (C-c C-v t). #+Title: Miryoku ZMK Babel [[https://raw.githubusercontent.com/manna-harbour/miryoku/master/data/logos/miryoku-roa-32.png]] * Layers ** Base (~BASE~) *** Tap #+NAME: colemakdhm | Q | W | F | P | B | J | L | U | Y | ' | | A | R | S | T | G | M | N | E | I | O | | Z | X | C | D | V | K | H | , | DOT | / | | U_NP | U_NP | ESC | SPC | TAB | ENT | BSPC | DEL | U_NP | U_NP | *** Hold #+NAME: hold | RESET | DF(TAP) | | | | | | | DF(TAP) | RESET | | LGUI | LALT | LCTL | LSFT | | | LSFT | LCTL | LALT | LGUI | | MBO | ALGR | | | | | | | ALGR | MBO | | U_NP | U_NP | MEDR | NAVR | MOUR | NSSL | NSL | FUNL | U_NP | U_NP | ** Navigation (~NAVR~) #+NAME: navr | U_RDO | U_PST | U_CPY | U_CUT | U_UND | | CAPS | LEFT | DOWN | UP | RGHT | | INS | HOME | PGDN | PGUP | END | | ENT | BSPC | DEL | U_NP | U_NP | ** Mouse (~MOUR~) #+NAME: mour | | | | | | | | MS_L | MS_D | MS_U | MS_R | | U_MT | WH_L | WH_D | WH_U | WH_R | | BTN1 | BTN3 | BTN2 | U_NP | U_NP | *** Mouse Buttons Overlay (~MBO~) #+NAME: mbo | U_RDO | U_PST | U_CPY | U_CUT | U_UND | U_RDO | U_PST | U_CPY | U_CUT | U_UND | | LGUI | LALT | LCTL | LSFT | | | LSFT | LCTL | LALT | LGUI | | | | | | | | | | | | | U_NP | U_NP | BTN2 | BTN3 | BTN1 | BTN1 | BTN3 | BTN2 | U_NP | U_NP | ** Media (~MEDR~) BT control is on the bottom row, and USB / BT output toggle on the home row inner index. #+NAME: medr | RGB_TOG | RGB_MOD | RGB_HUI | RGB_SAI | RGB_VAI | | &out OUT_TOG | MPRV | VOLD | VOLU | MNXT | | &bt BT_CLR | &bt BT_SEL 0 | &bt BT_SEL 1 | &bt BT_SEL 2 | &bt BT_SEL 3 | | MSTP | MPLY | MUTE | U_NP | U_NP | ** Numerals and Symbols (~NSL~) #+NAME: nsl | [ | 7 | 8 | 9 | ] | | ; | 4 | 5 | 6 | = | | ` | 1 | 2 | 3 | \ | | U_NP | U_NP | DOT | 0 | MINS | ** Shifted Numerals and Symbols (~NSSL~) #+NAME: nssl | { | & | * | ( | } | | : | $ | % | ^ | + | | ~ | ! | @ | # | PIPE | | U_NP | U_NP | ( | ) | _ | ** Function and System (~FUNL~) #+NAME: funl | F12 | F7 | F8 | F9 | PSCR | | F11 | F4 | F5 | F6 | SLCK | | F10 | F1 | F2 | F3 | PAUS | | U_NP | U_NP | APP | SPC | TAB | ** Alternative Layouts To select, translate the ~=~ to ~_~ and add a ~#define~ to your keymap file before the includes, e.g. for ~MIRYOKU_ALPHAS=QWERTY~ add ~#define MIRYOKU_ALPHAS_QWERTY~. *** Base Layer Alphas **** Colemak ~MIRYOKU_ALPHAS=COLEMAK~ #+NAME: colemak | Q | W | F | P | G | J | L | U | Y | ' | | A | R | S | T | D | H | N | E | I | O | | Z | X | C | V | B | K | M | , | DOT | / | | U_NP | U_NP | ESC | SPC | TAB | ENT | BSPC | DEL | U_NP | U_NP | **** Colemak Mod-DH ~MIRYOKU_ALPHAS=COLEMAKDH~ #+NAME: colemakdh | Q | W | F | P | B | J | L | U | Y | ' | | A | R | S | T | G | K | N | E | I | O | | Z | X | C | D | V | M | H | , | DOT | / | | U_NP | U_NP | ESC | SPC | TAB | ENT | BSPC | DEL | U_NP | U_NP | **** Dvorak ~MIRYOKU_ALPHAS=DVORAK~ #+NAME: dvorak | ' | , | DOT | P | Y | F | G | C | R | L | | A | O | E | U | I | D | H | T | N | S | | / | Q | J | K | X | B | M | W | V | Z | | U_NP | U_NP | ESC | SPC | TAB | ENT | BSPC | DEL | U_NP | U_NP | **** Halmak ~MIRYOKU_ALPHAS=HALMAK~ #+NAME: halmak | W | L | R | B | Z | ' | Q | U | D | J | | S | H | N | T | , | DOT | A | E | O | I | | F | M | V | C | / | G | P | X | K | Y | | U_NP | U_NP | ESC | SPC | TAB | ENT | BSPC | DEL | U_NP | U_NP | **** Workman ~MIRYOKU_ALPHAS=WORKMAN~ #+NAME: workman | Q | D | R | W | B | J | F | U | P | ' | | A | S | H | T | G | Y | N | E | O | I | | Z | X | M | C | V | K | L | , | DOT | / | | U_NP | U_NP | ESC | SPC | TAB | ENT | BSPC | DEL | U_NP | U_NP | **** QWERTY ~MIRYOKU_ALPHAS=QWERTY~ #+NAME: qwerty | Q | W | E | R | T | Y | U | I | O | P | | A | S | D | F | G | H | J | K | L | ' | | Z | X | C | V | B | N | M | , | DOT | / | | U_NP | U_NP | ESC | SPC | TAB | ENT | BSPC | DEL | U_NP | U_NP | *** vi-Style Navigation ~MIRYOKU_NAV=VI~ **** Navigation (NAVR) #+NAME: navr-vi | U_RDO | U_PST | U_CPY | U_CUT | U_UND | | LEFT | DOWN | UP | RGHT | CAPS | | HOME | PGDN | PGUP | END | INS | | ENT | BSPC | DEL | U_NP | U_NP | **** Mouse (MOUR) #+NAME: mour-vi | | | | | | | MS_L | MS_D | MS_U | MS_R | | | WH_L | WH_D | WH_U | WH_R | | | BTN1 | BTN3 | BTN2 | U_NP | U_NP | **** Media (MEDR) #+NAME: medr-vi | RGB_MOD | RGB_HUI | RGB_SAI | RGB_VAI | RGB_TOG | | MPRV | VOLD | VOLU | MNXT | &out OUT_TOG | | &bt BT_SEL 0 | &bt BT_SEL 1 | &bt BT_SEL 2 | &bt BT_SEL 3 | &bt BT_CLR | | MSTP | MPLY | MUTE | U_NP | U_NP | *** Navigation Layer Clipboard Keys **** Default #+NAME: clipboard | U_RDO | AGIN | | U_PST | S(KC_INS) | | U_CPY | C(KC_INS) | | U_CUT | S(KC_DEL) | | U_UND | UNDO | **** Fun Cluster ~MIRYOKU_CLIPBOARD=FUN~ #+NAME: clipboard-fun | U_RDO | AGIN | | U_PST | PSTE | | U_CPY | COPY | | U_CUT | CUT | | U_UND | UNDO | **** Mac ~MIRYOKU_CLIPBOARD=MAC~ #+NAME: clipboard-mac | U_RDO | SCMD(KC_Z) | | U_PST | LCMD(KC_V) | | U_CPY | LCMD(KC_C) | | U_CUT | LCMD(KC_X) | | U_UND | LCMD(KC_Z) | **** Windows ~MIRYOKU_CLIPBOARD=WIN~ #+NAME: clipboard-win | U_RDO | C(KC_Y) | | U_PST | C(KC_V) | | U_CPY | C(KC_C) | | U_CUT | C(KC_X) | | U_UND | C(KC_Z) | ** COMMENT Templates #+NAME: tem | | | | | | | | | | | |------+------+------+------+------+------+------+------+------+------| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | U_NP | U_NP | | | | | | | U_NP | U_NP | #+NAME: temr | | | | | | |------+------+------+------+------| | | | | | | | | | | | | | | | | | | | ENT | BSPC | DEL | U_NP | U_NP | #+NAME: teml | | | | | | |------+------+------+------+------| | | | | | | | | | | | | | | | | | | | U_NP | U_NP | ESC | SPC | TAB | * Code Generation ** Table Conversion Scripts *** table-map-taphold #+NAME: table-map-taphold #+BEGIN_SRC python :var tap_table=colemakdhm :var hold_table=hold :var symbol_names_table=symbol-names :var mods_table=mods :var nonkp_table=nonkp :var layers_table=layers :var keycode_translation_table=keycode-translation :tangle no :results verbatim width = 14 mods_dict = dict.fromkeys(mods_table[0]) nonkp_tuple = tuple(nonkp_table[0]) layers_dict = dict.fromkeys(layers_table[0]) symbol_names_dict = {} for symbol, name, shifted_symbol, shifted_name in symbol_names_table: symbol_names_dict[symbol] = name symbol_names_dict[shifted_symbol] = shifted_name keycode_translation_dict = {} for standard, local in keycode_translation_table: if local != '': keycode_translation_dict[standard] = local results = '' for tap_row, hold_row in zip(tap_table, hold_table): for tap, hold in zip(tap_row, hold_row): if tap == '': code = 'U_NU' elif tap in symbol_names_dict: code = symbol_names_dict[tap] else: code = tap if code in keycode_translation_dict: code = keycode_translation_dict[code] if hold in mods_dict: if hold in keycode_translation_dict: hold = keycode_translation_dict[hold] code = '&hm ' + str(hold) + ' ' + code elif hold in layers_dict: code = '< ' + str(hold) + ' ' + code elif not str(code).startswith(nonkp_tuple): code = '&kp ' + str(code) results += (code + ', ').ljust(width) results = results.rstrip(' ') + '\n' results = results.rstrip('\n, ') return results #+END_SRC #+RESULTS: table-map-taphold : &kp Q, &kp W, &kp F, &kp P, &kp B, &kp J, &kp L, &kp U, &kp Y, &kp SQT, : &hm LGUI A, &hm LALT R, &hm LCTRL S, &hm LSHFT T, &kp G, &kp M, &hm LSHFT N, &hm LCTRL E, &hm LALT I, &hm LGUI O, : &kp Z, &hm RALT X, &kp C, &kp D, &kp V, &kp K, &kp H, &kp COMMA, &hm RALT DOT, &kp SLASH, : U_NP, U_NP, < MEDR ESC, < NAVR SPC, < MOUR TAB, < NSSL RET, < NSL BSPC, < FUNL DEL, U_NP, U_NP *** table-map-half #+NAME: table-map-half #+BEGIN_SRC python :var hold_table=hold :var mode="r" :var half_table=navr :var symbol_names_table=symbol-names :var mods_table=mods :var nonkp_table=nonkp :var shift="false" :var layers_table=layers :var keycode_translation_table=keycode-translation :tangle no :results verbatim width = 13 mods_dict = dict.fromkeys(mods_table[0]) layers_dict = dict.fromkeys(layers_table[0]) nonkp_tuple = tuple(nonkp_table[0]) symbol_names_dict = {} shifted_symbol_names_dict = {} for symbol, name, shifted_symbol, shifted_name in symbol_names_table: symbol_names_dict[symbol] = name symbol_names_dict[shifted_symbol] = shifted_name shifted_symbol_names_dict[symbol] = shifted_name keycode_translation_dict = {} for standard, local in keycode_translation_table: if local != '': keycode_translation_dict[standard] = local length = len(half_table[0]) results = '' for half_row, hold_row in zip(half_table, hold_table): hold_row_l, hold_row_r = hold_row[:length], hold_row[length:] for lr, hold_row_lr in ('l', hold_row_l), ('r', hold_row_r): if lr == mode: for half in half_row: if half == '': code = 'U_NU' elif shift == "true" and half in shifted_symbol_names_dict: code = shifted_symbol_names_dict[half] elif half in symbol_names_dict: code = symbol_names_dict[half] else: code = half if code in keycode_translation_dict: code = keycode_translation_dict[code] if not str(code).startswith(nonkp_tuple): code = '&kp ' + str(code) results += (str(code) + ', ').ljust(width) else: for hold in hold_row_lr: if hold in mods_dict: if hold in keycode_translation_dict: hold = keycode_translation_dict[hold] code = '&kp ' + str(hold) else: if hold in keycode_translation_dict: hold = keycode_translation_dict[hold] if hold == '' or hold in layers_dict: code = 'U_NA' elif str(hold).startswith(nonkp_tuple): code = hold else: code = '&kp ' + str(hold) results += (str(code) + ', ').ljust(width) results = results.rstrip(' ') + '\n' results = results.rstrip('\n, ') return results #+END_SRC #+RESULTS: table-map-half : &bootloader, U_NA, U_NA, U_NA, U_NA, &kp K_AGAIN, &kp K_UNDO, &kp K_CUT, &kp K_COPY, &kp K_PASTE, : &kp LGUI, &kp LALT, &kp LCTRL, &kp LSHFT, U_NA, &kp CAPS, &kp LEFT, &kp DOWN, &kp UP, &kp RIGHT, : U_NA, &kp RALT, U_NA, U_NA, U_NA, &kp INS, &kp HOME, &kp PG_DN, &kp PG_UP, &kp END, : U_NP, U_NP, U_NA, U_NA, U_NA, &kp RET, &kp BSPC, &kp DEL, U_NP, U_NP *** table-map-full #+NAME: table-map-full #+BEGIN_SRC python :var table=mbo :var fill="&trans" :var symbol_names_table=symbol-names :var nonkp_table=nonkp :var keycode_translation_table=keycode-translation :tangle no :results verbatim width = 10 symbol_names_dict = {} nonkp_tuple = tuple(nonkp_table[0]) for symbol, name, shifted_symbol, shifted_name in symbol_names_table: symbol_names_dict[symbol] = name symbol_names_dict[shifted_symbol] = shifted_name keycode_translation_dict = {} for standard, local in keycode_translation_table: if local != '': keycode_translation_dict[standard] = local results = '' for row in table: for key in row: if key == '': code = fill elif key in symbol_names_dict: code = symbol_names_dict[key] else: code = key if code in keycode_translation_dict: code = keycode_translation_dict[code] if not str(code).startswith(nonkp_tuple): code = '&kp ' + str(code) results += (code + ', ').ljust(width) results = results.rstrip(' ') + '\n' results = results.rstrip('\n, ') return results #+END_SRC #+RESULTS: table-map-full : &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, &trans, : U_NP, U_NP, &trans, &trans, &trans, U_NU, U_NU, U_NU, U_NP, U_NP *** table-layer-defines #+NAME: table-layer-defines #+BEGIN_SRC python :var layers_table=layers :tangle no width = 5 layers_list = layers_table[0] results = '' i = 0 for layer in layers_list: results += '#define ' + ( layer + ' ').ljust(width) + str(i) + '\n' i += 1 return results #+END_SRC #+RESULTS: table-layer-defines : #define BASE 0 : #define MBO 1 : #define NAVR 2 : #define MOUR 3 : #define MEDR 4 : #define NSL 5 : #define NSSL 6 : #define FUNL 7 *** table-keycode-mappings #+NAME: table-keycode-mappings #+BEGIN_SRC python :var table=clipboard :var symbol_names_table=symbol-names :var nonkp_table=nonkp :var keycode_translation_table=keycode-translation :tangle no nonkp_tuple = tuple(nonkp_table[0]) symbol_names_dict = {} for symbol, name, shifted_symbol, shifted_name in symbol_names_table: symbol_names_dict[symbol] = name symbol_names_dict[shifted_symbol] = shifted_name results = '' keycode_translation_dict = {} for standard, local in keycode_translation_table: if local != '': keycode_translation_dict[standard] = local for f,t in table: if t == '': code = 'U_NU' elif t in symbol_names_dict: code = symbol_names_dict[t] else: code = t if code in keycode_translation_dict: code = keycode_translation_dict[code] if not str(code).startswith(nonkp_tuple): code = '&kp ' + str(code) results += '#define ' + f + ' ' + code + '\n' return results #+END_SRC #+RESULTS: table-keycode-mappings : #define U_RDO &kp K_AGAIN : #define U_PST &kp LS(INS) : #define U_CPY &kp LC(INS) : #define U_CUT &kp S(DEL) : #define U_UND &kp K_UNDO ** Data *** layers #+NAME: layers | BASE | TAP | MBO | NAVR | MOUR | MEDR | NSL | NSSL | FUNL | *** symbol-names Symbol, name, and shifted symbol mappings for use in tables. #+NAME: symbol-names | ` | GRV | ~ | TILD | | "-" | MINS | _ | UNDS | | = | EQL | + | PLUS | | [ | LBRC | { | LCBR | | ] | RBRC | } | RCBR | | \ | BSLS | PIPE | PIPE | | ; | SCLN | : | COLN | | ' | QUOT | DQUO | DQUO | | , | COMM | < | LT | | "." | DOT | > | GT | | / | SLSH | ? | QUES | | 1 | 1 | ! | EXLM | | 2 | 2 | @ | AT | | 3 | 3 | # | HASH | | 4 | 4 | $ | DLR | | 5 | 5 | % | PERC | | 6 | 6 | ^ | CIRC | | 7 | 7 | & | AMPR | | 8 | 8 | * | ASTR | | 9 | 9 | ( | LPRN | | 0 | 0 | ) | RPRN | *** mods Modifiers usable in hold table. Need to have the same name for ~KC_~ and ~_T~ versions. #+NAME: mods | LSFT | LCTL | LALT | LGUI | ALGR | *** nonkp Keycodes that match any of these prefixes will not have ~KC_~ automatically prepended. #+NAME: nonkp | U_ | & | *** keycode-translation standard keycode to implementation equivalent #+NAME: keycode-translation | 0 | NUM_0 | | 1 | NUM_1 | | 2 | NUM_2 | | 3 | NUM_3 | | 4 | NUM_4 | | 5 | NUM_5 | | 6 | NUM_6 | | 7 | NUM_7 | | 8 | NUM_8 | | 9 | NUM_9 | | AGIN | K_AGAIN | | ALGR | RALT | | AMPR | AMPS | | APP | K_APP | | ASTR | ASTRK | | AT | AT | | BSLS | BSLH | | BSPC | BSPC | | BTN1 | KP_N5 | | BTN2 | U_NU | | BTN3 | U_NU | | CAPS | | | CIRC | CRRT | | COLN | COLON | | COMM | COMMA | | COPY | K_COPY | | CUT | K_CUT | | DEL | | | DLR | DLLR | | DOT | | | DOWN | | | DQUO | DQT | | END | | | ENT | RET | | EQL | | | ESC | | | EXLM | EXCL | | F1 | | | F10 | | | F11 | | | F12 | | | F2 | | | F3 | | | F4 | | | F5 | | | F6 | | | F7 | | | F8 | | | F9 | | | GRV | GRAVE | | GT | | | HASH | | | HOME | | | INS | | | LALT | | | LBRC | LBKT | | LCBR | LBRC | | LCTL | LCTRL | | LEFT | | | LGUI | | | LPRN | LPAR | | LSFT | LSHFT | | LT | | | MINS | MINUS | | MNXT | C_NEXT | | MPLY | C_PP | | MPRV | C_PREV | | MS_D | KP_N2 | | MS_L | KP_N4 | | MS_R | KP_N6 | | MSTP | C_STOP | | MS_U | KP_N8 | | MUTE | C_MUTE | | PAUS | PAUSE_BREAK | | PERC | PRCT | | PGDN | PG_DN | | PGUP | PG_UP | | PIPE | | | PLUS | | | PSCR | PSCRN | | PSTE | K_PASTE | | QUES | QMARK | | QUOT | SQT | | RBRC | RBKT | | RCBR | RBRC | | RESET | &bootloader | | RGB_HUI | &rgb_ug RGB_HUI | | RGB_MOD | &rgb_ug RGB_EFF | | RGB_SAI | &rgb_ug RGB_SAI | | RGB_TOG | &rgb_ug RGB_TOG | | RGB_VAI | &rgb_ug RGB_BRI | | RGHT | RIGHT | | RPRN | RPAR | | SCLN | SEMI | | SLCK | | | SLSH | SLASH | | SPC | | | TAB | | | TILD | TILDE | | UNDO | K_UNDO | | UNDS | UNDER | | UP | | | VOLD | C_VOL_DN | | VOLU | C_VOL_UP | | WH_D | U_NU | | WH_L | U_NU | | WH_R | U_NU | | WH_U | U_NU | | S(KC_INS) | LS(INS) | | C(KC_INS) | LC(INS) | | S(KC_DEL) | LS(DEL) | | SCMD(KC_Z) | LS(LG(Z)) | | LCMD(KC_V) | LG(V) | | LCMD(KC_C) | LG(C) | | LCMD(KC_X) | LG(X) | | LCMD(KC_Z) | LG(Z) | | C(KC_Y) | LC(Y) | | C(KC_V) | LC(V) | | C(KC_C) | LC(C) | | C(KC_X) | LC(X) | | C(KC_Z) | LC(Z) | | DF(TAP) | &tog TAP | | U_MT | LS(LNLCK) | ** [[miryoku.dtsi]] #+BEGIN_SRC C :noweb yes :padline no :tangle miryoku.dtsi // https://github.com/manna-harbour/miryoku-zmk/ // -*- buffer-read-only: t -*- #include #include #include #include #include #include "config.h" <> #define U_NP &none // key is not present #define U_NA &none // present but not available for use #define U_NU &none // available but not used #if defined MIRYOKU_CLIPBOARD_FUN <> #elif defined MIRYOKU_CLIPBOARD_MAC <> #elif defined MIRYOKU_CLIPBOARD_WIN <> #else <> #endif / { behaviors { hm: homerow_mods { compatible = "zmk,behavior-hold-tap"; label = "HOMEROW_MODS"; #binding-cells = <2>; tapping_term_ms = <200>; flavor = "tap-preferred"; bindings = <&kp>, <&kp>; }; }; }; / { keymap { compatible = "zmk,keymap"; BASE_layer { bindings = < #if defined MIRYOKU_ALPHAS_COLEMAK MIRYOKU_MAPPING( <> ) #elif defined MIRYOKU_ALPHAS_COLEMAKDH MIRYOKU_MAPPING( <> ) #elif defined MIRYOKU_ALPHAS_DVORAK MIRYOKU_MAPPING( <> ) #elif defined MIRYOKU_ALPHAS_HALMAK MIRYOKU_MAPPING( <> ) #elif defined MIRYOKU_ALPHAS_WORKMAN MIRYOKU_MAPPING( <> ) #elif defined MIRYOKU_ALPHAS_QWERTY MIRYOKU_MAPPING( <> ) #else MIRYOKU_MAPPING( <> ) #endif >; }; TAP_layer { bindings = < #if defined MIRYOKU_ALPHAS_COLEMAK MIRYOKU_MAPPING_TAP( <> ) #elif defined MIRYOKU_ALPHAS_COLEMAKDH MIRYOKU_MAPPING_TAP( <> ) #elif defined MIRYOKU_ALPHAS_DVORAK MIRYOKU_MAPPING_TAP( <> ) #elif defined MIRYOKU_ALPHAS_HALMAK MIRYOKU_MAPPING_TAP( <> ) #elif defined MIRYOKU_ALPHAS_WORKMAN MIRYOKU_MAPPING_TAP( <> ) #elif defined MIRYOKU_ALPHAS_QWERTY MIRYOKU_MAPPING_TAP( <> ) #else MIRYOKU_MAPPING_TAP( <> ) #endif >; }; MBO_layer { bindings = < MIRYOKU_MAPPING( <> ) >; }; NAVR_layer { bindings = < #if defined MIRYOKU_NAV_VI MIRYOKU_MAPPING( <> ) #else MIRYOKU_MAPPING( <> ) #endif >; }; MOUR_layer { bindings = < #if defined MIRYOKU_NAV_VI MIRYOKU_MAPPING( <> ) #else MIRYOKU_MAPPING( <> ) #endif >; }; MEDR_layer { bindings = < #if defined MIRYOKU_NAV_VI MIRYOKU_MAPPING( <> ) #else MIRYOKU_MAPPING( <> ) #endif >; }; NSL_layer { bindings = < MIRYOKU_MAPPING( <> ) >; }; NSSL_layer { bindings = < MIRYOKU_MAPPING( <> ) >; }; FUNL_layer { bindings = < MIRYOKU_MAPPING( <> ) >; }; }; }; #if defined (MIRYOKU_COMBO_TPS_ENABLE) && defined (MIRYOKU_COMBO_TPSL) && defined (MIRYOKU_COMBO_TPSR) / { combos { compatible = "zmk,combos"; combo_tpsl_BASE { timeout-ms = <200>; key-positions = ; bindings = << MEDR ESC>; layers = ; }; combo_tpsr_BASE { timeout-ms = <200>; key-positions = ; bindings = << FUNL DEL>; layers = ; }; combo_tpsr_MBO { timeout-ms = <200>; key-positions = ; bindings = ; layers = ; }; combo_tpsr_NAVR { timeout-ms = <200>; key-positions = ; bindings = <&kp DEL>; layers = ; }; combo_tpsr_MOUR { timeout-ms = <200>; key-positions = ; bindings = ; layers = ; }; combo_tpsr_MEDR { timeout-ms = <200>; key-positions = ; bindings = <&kp K_MUTE>; layers = ; }; combo_tpsl_NSL { timeout-ms = <200>; key-positions = ; bindings = <&kp DOT>; layers = ; }; combo_tpsl_NSSL { timeout-ms = <200>; key-positions = ; bindings = <&kp LPAR>; layers = ; }; combo_tpsl_FUNL { timeout-ms = <200>; key-positions = ; bindings = <&kp K_APP>; layers = ; }; }; }; #endif #+END_SRC