Untitled

 avatar
unknown
plain_text
a year ago
33 kB
18
Indexable
#include <behaviors.dtsi>
#include <dt-bindings/zmk/keys.h>
#if CONFIG_WIRELESS
    #include <dt-bindings/zmk/bt.h>
    #define _BT_SEL_KEYS_ &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_CLR
#else
    #define _BT_SEL_KEYS_ &trans &trans &trans &trans &trans
#endif

#include "../zmk-nodefree-config/helper.h"
#include "../zmk-nodefree-config/international_chars/greek.dtsi"
#include "../zmk-nodefree-config/international_chars/german.dtsi"

#define DEF 0
#define NAV 1
#define FN 2
#define NUM 3
#define SYS 4
#define UC 5
#define SYM 6
// #define MOUSE 7


#include "combos.dtsi"  // requires layer aliases
// #include "mouse.dtsi"
#include "extra_keys.h"

#define XXX &none
#define ___ &trans

/* Global settings */

#define QUICK_TAP_MS 175

&sk {  // sticky-key config
    release-after-ms = <900>;  // release after 0.6s
    quick-release;             // no double capitalization when rolling keys
};

&sl {  // sticky-layer config
    ignore-modifiers;          // allow chording sticky mods & layers
};

&lt {  // layer-tap config
    flavor = "balanced";
    tapping-term-ms = <200>;
    quick-tap-ms = <QUICK_TAP_MS>;
};

ZMK_CONDITIONAL_LAYER(FN NUM, SYS)  // FN + NUM --> SYS


/* Homerow mods */

#define KEYS_L LT0 LT1 LT2 LT3 LT4 LM0 LM1 LM2 LM3 LM4 LB0 LB1 LB2 LB3 LB4  // left hand
#define KEYS_R RT0 RT1 RT2 RT3 RT4 RM0 RM1 RM2 RM3 RM4 RB0 RB1 RB2 RB3 RB4  // right hand
#define THUMBS LH2 LH1 LH0 RH0 RH1 RH2                                      // thumbs

#define MAKE_HRM(NAME, HOLD, TAP, TRIGGER_POS) \
    ZMK_BEHAVIOR(NAME, hold_tap, \
        flavor = "balanced"; \
        tapping-term-ms = <280>; \
        quick-tap-ms = <QUICK_TAP_MS>; \
        require-prior-idle-ms = <150>; \
        bindings = <HOLD>, <TAP>; \
        hold-trigger-key-positions = <TRIGGER_POS>; \
        hold-trigger-on-release; \
    )
MAKE_HRM(hml, &kp, &kp, KEYS_R THUMBS)  // left-hand HRMs
MAKE_HRM(hmr, &kp, &kp, KEYS_L THUMBS)  // right-hand HRMs

MAKE_HRM(hml_repeat, &kp, &key_repeat, KEYS_R THUMBS)  // used for HRM-combo
MAKE_HRM(hmr_lpar_lt, &kp, &lpar_lt, KEYS_R THUMBS)    // "    "   "   "
MAKE_HRM(hmr_rpar_gt, &kp, &rpar_gt, KEYS_R THUMBS)    // "    "   "   "

/* Nav cluster */

// long-tap action on hold, short-tap action on all interrupts
#define MT_CORE \
    flavor = "tap-preferred"; \
    tapping-term-ms = <220>; \
    quick-tap-ms = <220>; \
    hold-trigger-key-positions = <0>;

&mt { MT_CORE };
ZMK_BEHAVIOR(mt_home, hold_tap, bindings = <&masked_home>, <&kp>; MT_CORE)
ZMK_BEHAVIOR(mt_end,  hold_tap,  bindings = <&masked_end>, <&kp>; MT_CORE)

#define NAV_LEFT  &mt_home 0   LEFT    // tap: left  | long-tap: beginning of line
#define NAV_RIGHT &mt_end 0    RIGHT   // tap: right | long-tap: end       of line
#define NAV_UP    &mt LC(HOME) UP      // tap: up    | long-tap: beginning of document
#define NAV_DOWN  &mt LC(END)  DOWN    // tap: down  | long-tap: end       of document
#define NAV_BSPC  &mt LC(BSPC) BSPC    // tap: bspc  | long-tap: delete word backward
#define NAV_DEL   &mt LC(DEL)  DEL     // tap: del   | long-tap: delete word forward

// mask CTRL when holding left/right to avoid accidental jumps to beginning/end of document
#define MASK_MODS(NAME, MODS, BINDING) \
    ZMK_BEHAVIOR(NAME, mod_morph, \
        bindings = <BINDING>, <BINDING>; \
        mods = <MODS>; \
    )
MASK_MODS(masked_home, (MOD_LCTL), &kp HOME)
MASK_MODS(masked_end,  (MOD_LCTL), &kp END)

/* Caps-word, num-word and smart-mouse */

// tap: sticky-shift | shift + tap/ double-tap: caps-word | hold: shift
ZMK_BEHAVIOR(smart_shft, mod_morph,
    bindings = <&sk LSHFT>, <&caps_word>;
    mods = <(MOD_LSFT)>;
)
&caps_word {  // mods deactivate caps-word, requires PR #1451
    /delete-property/ ignore-modifiers;
};

// tap: num-word | double-tap: sticky num-layer | hold: num-layer
#define SMART_NUM &smart_num NUM 0
ZMK_BEHAVIOR(smart_num, hold_tap,
    flavor = "balanced";
    tapping-term-ms = <200>;
    quick-tap-ms = <QUICK_TAP_MS>;
    bindings = <&mo>, <&num_dance>;
)
ZMK_BEHAVIOR(num_dance, tap_dance,
    tapping-term-ms = <200>;
    bindings = <&num_word>, <&sl NUM>;  // reverse this for sticky-num on single tap
)
&num_word {  // num-word, requires PR #1451
    layers = <NUM>;
    continue-list = <BSPC DEL DOT COMMA PLUS MINUS STAR FSLH EQUAL>;
};

// smart-mouse, requires PR #1366
// ZMK_BEHAVIOR(smart_mouse, tri_state,
//    bindings = <&tog MOUSE>, <&none>, <&tog MOUSE>;
//    ignored-key-positions = <LT1 LT3 RT0 RT1 RT2 RT3 RT4 RM1 RM2 RM3 RB1 RB2 RB3 RH0 RH1>;
//    ignored-layers = <MOUSE>;
// )

/* Custom behaviors */

// Alt+Tab swapper, requires PR #1366
ZMK_BEHAVIOR(window_swapper, tri_state,
    bindings = <&kt LALT>, <&kp TAB>, <&kt LALT>;
    ignored-key-positions = <LT2>;
)

ZMK_BEHAVIOR(kt_la_gui, macro,
    wait-ms = <0>;
    tap-ms = <5>;
    bindings = <&kt LALT>, <&kt LGUI>;
)

// App tab swapper
ZMK_BEHAVIOR(tab_swapper, tri_state,
    bindings = <&kt_la_gui>, <&kp RIGHT>, <&kt_la_gui>;
    ignored-key-positions = <LB2>, <LB3>, <LB4>;
)

// Sticky layer + sticky shift (workaround for issue #1421)
ZMK_BEHAVIOR(sls, sticky_key,
    release-after-ms = <1000>;
    bindings = <&uc_shift>;
    ignore-modifiers;
)
ZMK_BEHAVIOR(uc_shift, macro,
    wait-ms = <0>;
    tap-ms = <1>;
    bindings = <&macro_press &mo UC &kp LSHFT>
             , <&macro_pause_for_release>
             , <&macro_release &mo UC &kp LSHFT>;
)

// reuse basic mod-morph scheme
#define SIMPLE_MORPH(NAME, MOD, BINDING1, BINDING2) \
    ZMK_BEHAVIOR(NAME, mod_morph, \
        mods = <(MOD_L ## MOD|MOD_R ## MOD)>; \
        bindings = <BINDING1>, <BINDING2>; \
    )

// tap: comma | shift + tap: semicolon | ctrl + shift + tap: <
SIMPLE_MORPH(comma_morph, SFT, &kp COMMA, &comma_inner_morph)
SIMPLE_MORPH(comma_inner_morph, CTL, &kp SEMICOLON, &kp LESS_THAN)

// tap: dot | shift + tap: colon | ctrl + shift + tap: >
SIMPLE_MORPH(dot_morph, SFT, &kp DOT, &dot_inner_morph)
SIMPLE_MORPH(dot_inner_morph, CTL, &kp COLON, &kp GREATER_THAN)

// tap: left/right parenthesis | shft + tap: less-than/greater-than
SIMPLE_MORPH(lpar_lt, SFT, &kp LPAR, &kp LT)
SIMPLE_MORPH(rpar_gt, SFT, &kp RPAR, &kp GT)

// tap: space | shift + tap: dot -> space -> sticky shift | hold: activate layer
ZMK_BEHAVIOR(lt_spc, hold_tap,
    flavor = "balanced";
    tapping-term-ms = <200>;
    quick-tap-ms = <QUICK_TAP_MS>;
    bindings = <&mo>, <&spc_morph>;
)
SIMPLE_MORPH(spc_morph, SFT, &kp SPACE, &dot_spc)
ZMK_BEHAVIOR(dot_spc, macro,
    wait-ms = <0>;
    tap-ms = <5>;
    bindings = <&kp DOT &kp SPACE &sk LSHFT>;
)

// tap: backspace | lshft + tap: delete | rshft + tap: shift-delete
ZMK_BEHAVIOR(bs_del, mod_morph,
    bindings = <&kp BSPC>, <&kp DEL>;
    mods = <(MOD_LSFT|MOD_RSFT)>;
    keep-mods = <MOD_RSFT>;
)

// tap: copy | double-tap: cut
ZMK_BEHAVIOR(copy_cut, tap_dance,
    tapping-term-ms = <200>;
    bindings = <&kp LC(INS)>, <&kp LC(X)>;
)

ZMK_BEHAVIOR(nav_5_down, macro,
    wait-ms = <5>;
    tap-ms = <3>;   
    bindings = <&kp DOWN>, <&kp DOWN>, <&kp DOWN>, <&kp DOWN>, <&kp DOWN>;
)
ZMK_BEHAVIOR(nav_5_up, macro,
    wait-ms = <5>;
    tap-ms = <3>;
    bindings = <&kp UP>, <&kp UP>, <&kp UP>, <&kp UP>, <&kp UP>;
)
SIMPLE_MORPH(qnav_down, ALT, &kp DOWN, &nav_5_down)
SIMPLE_MORPH(qnav_up, ALT, &kp UP, &nav_5_up)

// TODO: fix. still not working
ZMK_BEHAVIOR(nav_close, macro,
    wait-ms = <20>;
    tap-ms = <5>;
    bindings = <&kt_la_gui>, <&kp LC(W)>, <&kt_la_gui>;
)
ZMK_BEHAVIOR(nav_recent_tab, macro,
    wait-ms = <20>;
    tap-ms = <5>;
    bindings = <&kt_la_gui>, <&kp LC(LS(T))>, <&kt_la_gui>;
)
// TODO: Nav toggle on return kp
// TODO: change smart shift to sticky caps lock

// misc aliases
#define CANCEL      &kp K_CANCEL             // cancel caps-word, num-word and smart-mouse
#define DSK_PREV    &hmr RSHFT LG(LC(LEFT))  // previous desktop
#define DSK_NEXT    &hmr LALT LG(LC(RIGHT))  // next     desktop
#define PIN_WIN     &kp LG(LC(LS(Q)))        // pin window across desktops
#define PIN_APP     &kp LG(LC(LS(A)))        // pin application across desktops
#define DSK_MGR     &kp LA(GRAVE)            // desktop manager
#define VOL_DOWN    &hmr LCTRL C_VOL_DN



#define BACK       &kp LG(LBKT)  // back
#define FORWARD    &kp LG(RBKT)  // forward

/* Keymap */


ZMK_LAYER(base,
//╭──────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭──────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭──────╮
 &kp TAB     &kp Q         &kp W         &kp F        &kp P         &kp G           X_MT     &kp J         &kp L         &kp U         &kp Y         &kp COLON        X_RT
//├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤
    X_LM     &hml LGUI A &hml LALT R    &hml LCTRL S  &hml LSHFT T   &kp D           X_MM     &kp H         &hmr RSHFT N  &hmr RCTRL E   &hmr RALT I  &hmr RGUI O   &kp BSPC
//├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤
    X_LB     &kp Z        &kp X        &kp C         &kp V         &kp B           X_MB     &kp K         &kp M         &comma_morph   &dot_morph    &kp FSLH        X_RB
//╰──────╯ ╰─────────────┼─────────────┴─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┴───────────────────────────╯ ╰──────╯
                                         &lt FN ESC   &lt_spc NAV 0  &kp SPACE     X_MH            &kp RETURN   &lt NUM BSPC  &smart_shft
//                                     ╰─────────────┴─────────────┴─────────────╯ ╰──────╯ ╰─────────────┴─────────────┴─────────────╯
)

ZMK_LAYER(nav,
//╭──────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭──────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭──────╮
    &kp TAB    &kp N1        &kp N2        &kp N3        &kp N4        &kp N5                   &kp N6         &kp N7       &kp N8         &kp N9       &kp N0      &kp BSPC
//├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤
    X_LM    &kp LESS_THAN &kp GREATER_THAN  &kp MINUS  &kp PLUS       &kp COMMA      X_MM           &kp DOT   &kp LEFT        &kp DOWN     &kp UP      &kp RIGHT      &kp COLON
//├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤
X_LB     BACK          FORWARD       &kp LEFT      &tab_swapper  &window_swapper            X_MB    &kp LS(TAB)  &kp TAB    &kp PG_DN     &kp PG_UP      ___             X_RB
//├──────┤ ╰─────────────┼─────────────┴─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┴───────────────────────────╯ ├──────┤
    X_LH                                               ___           ___             X_MH     &kp RETURN    NAV_BSPC                                                  X_RH
//╰──────╯                                           ╰─────────────┴─────────────╯ ╰──────╯ ╰─────────────┴─────────────╯                                           ╰──────╯
)

ZMK_LAYER(fn,
//╭──────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭──────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭──────╮
    X_LT     &kp F12       &kp F7        &kp F8        &kp F9        ___             X_MT     ___           ___           ___           ___           ___             X_RT
//├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤
    X_LM     &hml LCTRL F11 &hml LALT F4  &hml LGUI F5 &hml LSHFT F6 ___             X_MM     ___           &kp C_PREV    VOL_DOWN      &kp C_VOL_UP  &kp C_NEXT      X_RM
//├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤
    X_LB     &kp F10       &kp F1        &kp F2        &kp F3        ___             X_MB     PIN_APP       PIN_WIN       DSK_MGR       ___           ___             X_RB
//├──────┤ ╰─────────────┼─────────────┴─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┴───────────────────────────╯ ├──────┤
    X_LH                                               ___           ___             X_MH     &kp C_MUTE    &kp C_PP                                                  X_RH
//╰──────╯                                           ╰─────────────┴─────────────╯ ╰──────╯ ╰─────────────┴─────────────╯                                           ╰──────╯
)

ZMK_LAYER(num,
//╭──────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭──────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭──────╮
    &kp  TAB  &kp EXCL       &kp AT       &kp HASH      &kp DLLR       &kp PRCNT     X_MT        &kp CARET    &kp AMPS      &kp ASTRK    &kp UNDER     &kp BSLH     &kp BSPC
//├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤
    &kp LCTRL &kp SEMI     &kp EQUAL   &kp LPAR      &kp RPAR      &kp LBKT          X_MM        &kp RBKT     &kp LBRC      &kp RBRC    &kp DOUBLE_QUOTES &kp SINGLE_QUOTE  &kp GRAVE
//├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤
   &kp LSHFT &kp COLON      CANCEL           &kp MINUS     &kp PLUS       NAV_DEL       X_MB        &kp MINUS     &kp PLUS      &kp LBRC      &kp RBRC      &kp PIPE     &kp TILDE
//├──────┤ ╰─────────────┼─────────────┴─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┴───────────────────────────╯ ├──────┤
    X_LH                                               &kp UNDER     ___             X_MH     ___           ___                                                       X_RH
//╰──────╯                                           ╰─────────────┴─────────────╯ ╰──────╯ ╰─────────────┴─────────────╯                                           ╰──────╯
)

ZMK_LAYER(sys,
//╭──────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭──────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭──────╮
    X_LT                                _BT_SEL_KEYS_                                X_MT     ___           ___           ___           ___           ___             X_RT
//├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤
    X_LM     ___           ___           ___           ___           &bootloader     X_MM     &bootloader   ___           ___           ___           ___             X_RM
//├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤
    X_LB     ___           ___           ___           ___           &sys_reset      X_MB     &sys_reset    ___           ___           ___           ___             X_RB
//├──────┤ ╰─────────────┼─────────────┴─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┴───────────────────────────╯ ├──────┤
    X_LH                                               ___           ___             X_MH     ___           ___                                                       X_RH
//╰──────╯                                           ╰─────────────┴─────────────╯ ╰──────╯ ╰─────────────┴─────────────╯                                           ╰──────╯
)

ZMK_LAYER(uc,
//╭──────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭──────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭──────╮
    X_LT     ___           &el_omega     &el_phi       &el_pi        &el_beta        X_MT     ___           &el_lambda    &el_upsilon   &el_psi       &de_eszett      X_RT
//├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤
    X_LM     &el_alpha     &el_rho       &el_sigma     &el_tau       &el_gamma       X_MM     &el_mu        &el_nu        &el_epsilon   &el_iota      &el_omikron     X_RM
//├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤
    X_LB     &el_zeta      &el_xi        &el_chi       &el_delta     &el_theta       X_MB     &el_kappa     &el_eta       &de_ae        &de_oe        &de_ue          X_RB
//├──────┤ ╰─────────────┼─────────────┴─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┴───────────────────────────╯ ├──────┤
    X_LH                                               ___           ___             X_MH     ___           ___                                                       X_RH
//╰──────╯                                           ╰─────────────┴─────────────╯ ╰──────╯ ╰───────────────────────────╯                                           ╰──────╯
)

ZMK_LAYER(sym,
//╭──────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭──────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭──────╮
    X_LT     &kp LG(Q)     &kp LG(W)     &kp LG(LS(T)) &kp LG(T)     &kp F1          X_MT     ___           &kp STAR      &kp FSLH      &kp TILDE     &kp GRAVE       X_RT
//├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤
    X_LM   &hml LCTRL EXCL &hml LALT AT &hml LGUI HASH &hml LSHFT DLLR &kp F2        X_MM     ___           &hmr RSHFT AMPS &hmr RGUI PIPE  &hmr RALT PLUS &hmr RCTRL MINUS X_RM
//├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤
    X_LB     &kp RG(F)     &kp RG(S)     &kp RG(Z)     &kp RG(RS(Z)) &kp F3          X_MB     ___           &kp CARET     &kp PRCNT     &kp BSLH      &kp FSLH        X_RB
//├──────┤ ╰─────────────┼─────────────┴─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┴───────────────────────────╯ ├──────┤
    X_LH                                               ___           ___             X_MH     &kp RETURN    &kp BSPC                                                  X_RH
//╰──────╯                                           ╰─────────────┴─────────────╯ ╰──────╯ ╰─────────────┴─────────────╯                                           ╰──────╯
)

// Not compiling for some reason
// ZMK_LAYER(mouse,
//╭──────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭──────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭──────╮
//    X_LT     ___           ___           ___           ___           ___             X_MT     U_WH_L        U_WH_D        U_MS_U         U_WH_U       U_WH_R          X_RT
//├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤
//    X_LM     ___           ___           ___           ___           ___             X_MM     ___           U_MS_L        U_MS_D         U_MS_R       ___             X_RM
//├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤
//    X_LB     ___           ___           ___           ___           ___             X_MB     ___           &mkp MB4      &mkp MCLK      &mkp MB5     ___             X_RB
//├──────┤ ╰─────────────┼─────────────┴─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┴───────────────────────────╯ ├──────┤
//    X_LH                                               ___           ___             X_MH     &mkp LCLK     &mkp RCLK                                                 X_RH
//╰──────╯                                           ╰─────────────┴─────────────╯ ╰──────╯ ╰─────────────┴─────────────╯                                           ╰──────╯
//)

/* vim: set ft=c tw=174: */
Editor is loading...
Leave a Comment