/* * Copyright (c) 2020 The ZMK Contributors * * SPDX-License-Identifier: MIT */ #include #include /***************************************** * ARTSEY website : https://www.artsey.io * Primary reference : https://www.artsey.io/_FILES/images/ARTSEY.jpg *****************************************/ /***************************************** * Setting up ARTSEY chording * - Please note: A/E key positions should be on your INDEX finger * - The online reference is for right handed use * - When using the ARTSEY layout left handed you'll want to ensure your keypositions are flipped along the Y axis * - Update/adjust the key positions using your boards keymap * - See below for additional details * - Adjust your boards keymap layers... * - To have the SAME layers defined as this keymap * - Take the commented layers from below and place the values into your boards keymap in 'the right spots' * - YOU MUST SET THE FOLLOWING CONFIG VALUES FOR THIS SETUP TO WORK PROPERLY * - CONFIG_ZMK_COMBO_MAX_COMBOS_PER_KEY=16 * - CONFIG_ZMK_COMBO_MAX_LAYER_FILTERS_PER_COMBO=16 * - CONFIG_ZMK_COMBO_MAX_KEYS_PER_COMBO=8 * - CONFIG_ZMK_COMBO_MAX_PRESSED_COMBOS=8 *****************************************/ /***************************************** * Define key positions used for chording * These definitions are used to define the various ARTSEY chords (combos) * * Please see the documentation on "combos" for details on how to find the proper key positions * * Default key positions are for a generic 4x2 keyboard and should NOT be used outright * DEFINE these definitions in your boards keymap BEFORE including artsey.dtsi *****************************************/ // ARTS Row // #define KEY_A 0 // #define KEY_R 1 // #define KEY_T 2 // #define KEY_S 3 // EYIO Row // #define KEY_E 4 // #define KEY_Y 5 // #define KEY_I 6 // #define KEY_O 7 /***************************************** * Layer IDs used by the ARTSEY keymap * Do NOT change these and do NOT change the order of the layers as shown below *****************************************/ #define LAYER_ID_BASE 0 #define LAYER_ID_NUMBERS 1 #define LAYER_ID_SYMBOLS 2 #define LAYER_ID_PARENTHETICALS 3 #define LAYER_ID_NAVIGATION 4 #define LAYER_ID_MOUSE 5 /***************************************** * Define how long it takes for the chords/holds to 'time out' * See documentation on "combos" for more detail *****************************************/ #define TIMEOUT_CHORD 125 #define TIMEOUT_LAYER_HOLD 250 /***************************************** * Standard ARTSEY chord definitions * These should NOT be changed and are global in scope *****************************************/ / { combos { compatible = "zmk,combos"; chord_b { layers = ; timeout-ms = ; key-positions = ; bindings = <&kp B>; }; chord_m { layers = ; timeout-ms = ; key-positions = ; bindings = <&kp M>; }; chord_c { layers = ; timeout-ms = ; key-positions = ; bindings = <&kp C>; }; chord_n { layers = ; timeout-ms = ; key-positions = ; bindings = <&kp N>; }; chord_d { layers = ; timeout-ms = ; key-positions = ; bindings = <&kp D>; }; chord_p { layers = ; timeout-ms = ; key-positions = ; bindings = <&kp P>; }; chord_f { layers = ; timeout-ms = ; key-positions = ; bindings = <&kp F>; }; chord_q { layers = ; timeout-ms = ; key-positions = ; bindings = <&kp Q>; }; chord_g { layers = ; timeout-ms = ; key-positions = ; bindings = <&kp G>; }; chord_u { layers = ; timeout-ms = ; key-positions = ; bindings = <&kp U>; }; chord_h { layers = ; timeout-ms = ; key-positions = ; bindings = <&kp H>; }; chord_v { layers = ; timeout-ms = ; key-positions = ; bindings = <&kp V>; }; chord_j { layers = ; timeout-ms = ; key-positions = ; bindings = <&kp J>; }; chord_w { layers = ; timeout-ms = ; key-positions = ; bindings = <&kp W>; }; chord_k { layers = ; timeout-ms = ; key-positions = ; bindings = <&kp K>; }; chord_x { layers = ; timeout-ms = ; key-positions = ; bindings = <&kp X>; }; chord_l { layers = ; timeout-ms = ; key-positions = ; bindings = <&kp L>; }; chord_z { layers = ; timeout-ms = ; key-positions = ; bindings = <&kp Z>; }; chord_enter { timeout-ms = ; key-positions = ; bindings = <&kp ENTER>; }; chord_esc { timeout-ms = ; key-positions = ; bindings = <&kp ESC>; }; chord_single_quote { timeout-ms = ; key-positions = ; bindings = <&kp SQT>; }; chord_tab { timeout-ms = ; key-positions = ; bindings = <&kp TAB>; }; chord_dot { timeout-ms = ; key-positions = ; bindings = <&kp PERIOD>; }; chord_control { timeout-ms = ; key-positions = ; bindings = <&kp LCTRL>; }; chord_comma { timeout-ms = ; key-positions = ; bindings = <&kp COMMA>; }; chord_gui { timeout-ms = ; key-positions = ; bindings = <&kp LGUI>; }; chord_slash { timeout-ms = ; key-positions = ; bindings = <&kp SLASH>; }; chord_alt { timeout-ms = ; key-positions = ; bindings = <&kp LALT>; }; chord_backspace { timeout-ms = ; key-positions = ; bindings = <&kp BACKSPACE>; }; chord_shift { timeout-ms = ; key-positions = ; bindings = <&kp LSHFT>; }; chord_space { timeout-ms = ; key-positions = ; bindings = <&kp SPACE>; }; /* Needs to be fixed / changed to caps */ //chord_shift_lock { timeout-ms = ; key-positions = ; bindings = <&none>; }; chord_seven { layers = ; timeout-ms = ; key-positions = ; bindings = <&kp N7>; }; chord_eight { layers = ; timeout-ms = ; key-positions = ; bindings = <&kp N8>; }; chord_nine { layers = ; timeout-ms = ; key-positions = ; bindings = <&kp N9>; }; chord_zero { layers = ; timeout-ms = ; key-positions = ; bindings = <&kp N0>; }; /* TODO: Setup/Enable once Mouse Keys feature(s) are added to ZMK */ //chord_mouse { timeout-ms = ; key-positions = ; bindings = <&none>; }; }; }; /***************************************** * Standard ARTSEY layer activation definitions * These should NOT be changed and are global in scope *****************************************/ / { behaviors { layer_base_none: layer_base_none { compatible = "zmk,behavior-hold-tap"; label = "layer_base_none"; #binding-cells = <2>; tapping_term_ms = ; flavor = "hold-preferred"; bindings = <&to>, <&none>; }; layer_base_kp: layer_base_kp { compatible = "zmk,behavior-hold-tap"; label = "layer_base_kp"; #binding-cells = <2>; tapping_term_ms = ; flavor = "tap-preferred"; bindings = <&to>, <&kp>; }; layer_numbers_none: layer_numbers_none { compatible = "zmk,behavior-hold-tap"; label = "layer_numbers_none"; #binding-cells = <2>; tapping_term_ms = ; flavor = "hold-preferred"; bindings = <&to>, <&none>; }; layer_numbers_kp: layer_numbers_kp { compatible = "zmk,behavior-hold-tap"; label = "layer_numbers_kp"; #binding-cells = <2>; tapping_term_ms = ; flavor = "tap-preferred"; bindings = <&to>, <&kp>; }; layer_symbols_none: layer_symbols_none { compatible = "zmk,behavior-hold-tap"; label = "layer_symbols_none"; #binding-cells = <2>; tapping_term_ms = ; flavor = "hold-preferred"; bindings = <&to>, <&none>; }; layer_symbols_kp: layer_symbols_kp { compatible = "zmk,behavior-hold-tap"; label = "layer_symbols_kp"; #binding-cells = <2>; tapping_term_ms = ; flavor = "tap-preferred"; bindings = <&to>, <&kp>; }; layer_parentheticals_none: layer_parentheticals_none { compatible = "zmk,behavior-hold-tap"; label = "layer_parentheticals_none"; #binding-cells = <2>; tapping_term_ms = ; flavor = "hold-preferred"; bindings = <&to>, <&none>; }; layer_parentheticals_kp: layer_parentheticals_kp { compatible = "zmk,behavior-hold-tap"; label = "layer_parentheticals_kp"; #binding-cells = <2>; tapping_term_ms = ; flavor = "tap-preferred"; bindings = <&to>, <&kp>; }; layer_navigation_none: layer_navigation_none { compatible = "zmk,behavior-hold-tap"; label = "layer_navigation_none"; #binding-cells = <2>; tapping_term_ms = ; flavor = "hold-preferred"; bindings = <&to>, <&none>; }; layer_navigation_kp: layer_navigation_kp { compatible = "zmk,behavior-hold-tap"; label = "layer_navigation_kp"; #binding-cells = <2>; tapping_term_ms = ; flavor = "tap-preferred"; bindings = <&to>, <&kp>; }; layer_mouse_none: layer_mouse_none { compatible = "zmk,behavior-hold-tap"; label = "layer_mouse_none"; #binding-cells = <2>; tapping_term_ms = ; flavor = "hold-preferred"; bindings = <&tog>, <&none>; }; layer_mouse_kp: layer_mouse_kp { compatible = "zmk,behavior-hold-tap"; label = "layer_mouse_kp"; #binding-cells = <2>; tapping_term_ms = ; flavor = "tap-preferred"; bindings = <&tog>, <&kp>; }; }; }; /***************************************** * Standard ARTSEY layer definitions * These SHOULD BE CHANGED and adjusted according to your boards transform * Use "&none" to fill in gaps * This section is commented to avoid conflicts with downstream board definitions *****************************************/ // / { // keymap { // compatible = "zmk,keymap"; // base { // label = "Base"; // bindings = < // &layer_parentheticals_kp LAYER_ID_PARENTHETICALS A &kp R &kp T &layer_numbers_kp LAYER_ID_NUMBERS S // &layer_symbols_kp LAYER_ID_SYMBOLS E &kp Y &kp I &layer_navigation_kp LAYER_ID_NAVIGATION O // >; // }; // numbers { // label = "Numbers"; // bindings = < /* TODO: NEED TO SETUP Fn LEADER KEY(S) */ // &layer_parentheticals_kp LAYER_ID_PARENTHETICALS N1 &kp N2 &kp N3 &layer_base_none LAYER_ID_BASE 0 // &layer_symbols_kp LAYER_ID_SYMBOLS N4 &kp N5 &kp N6 &layer_navigation_none LAYER_ID_NAVIGATION 0 // >; // }; // symbols { // label = "Symbols"; // bindings = < // &layer_parentheticals_none LAYER_ID_PARENTHETICALS 0 &kp BSLH &kp SEMI &layer_numbers_kp LAYER_ID_NUMBERS GRAVE // &layer_base_none LAYER_ID_BASE 0 &kp MINUS &kp EQUAL &layer_navigation_none LAYER_ID_NAVIGATION 0 // >; // }; // parentheticals { // label = "Paren"; // bindings = < // &layer_base_none LAYER_ID_BASE 0 &kp LPAR &kp RPAR &layer_numbers_kp LAYER_ID_NUMBERS LBRC // &layer_symbols_none LAYER_ID_SYMBOLS 0 &kp LBKT &kp RBKT &layer_navigation_kp LAYER_ID_NAVIGATION RBRC // >; // }; // navigation { // label = "Nav"; // bindings = < // &layer_parentheticals_kp LAYER_ID_PARENTHETICALS HOME &kp UP &kp END &layer_numbers_none LAYER_ID_NUMBERS 0 // &layer_symbols_kp LAYER_ID_SYMBOLS LEFT &kp DOWN &kp RIGHT &layer_base_none LAYER_ID_BASE 0 // >; // }; // mouse { /* TODO: Not implemented yet, needs mouse keys in upstream */ // label = "Mouse"; // bindings = < // &none &none &none &none // &none &none &none &none // >; // }; // };