/* Copyright 2019 @foostan Copyright 2020 Drashna Jaelre <@drashna> This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include QMK_KEYBOARD_H #include "rgb_matrix.h" #define CUSTOM_SAFE_RANGE SAFE_RANGE #include "lang_shift/include.h" #define L_ENG 0 #define L_GAME 1 #define L_RU 2 #define L_MEDIA 3 #define L_NAV 4 #define L_MOUSE 5 #define L_SYM 6 #define L_NUM 7 #define L_FUN 8 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [L_ENG] = LAYOUT_split_3x6_3_ex2( // top row (левая половина) /* 00 */ KC_ESC, /* matrix [0,0] */ /* 01 */ G(KC_ESC), /* matrix [0,1] */ /* 02 */ KC_NO, /* matrix [0,2] */ /* 03 */ KC_X, /* matrix [0,3] */ /* 04 */ KC_Q, /* matrix [0,4] */ /* 05 */ KC_NO, /* matrix [0,5] */ /* 06 */ DF(L_GAME), /* matrix [0,6] */ // top row (правая половина) /* 07 */ KC_NO, /* matrix [4,6] */ /* 08 */ KC_J, /* matrix [4,5] */ /* 09 */ KC_D, /* matrix [4,4] */ /* 10 */ KC_L, /* matrix [4,3] */ /* 11 */ KC_K, /* matrix [4,2] */ /* 12 */ KC_C, /* matrix [4,1] */ /* 13 */ KC_NO, /* matrix [4,0] */ // home row (левая половина) /* 14 */ KC_F, /* matrix [1,0] */ /* 15 */ LWIN_T(KC_S), /* matrix [1,1] */ /* 16 */ ALT_T(KC_E), /* matrix [1,2] */ /* 17 */ CTL_T(KC_O), /* matrix [1,3] */ /* 18 */ SFT_T(KC_A), /* matrix [1,4] */ /* 19 */ KC_NO, /* matrix [1,5] */ /* 20 */ KC_NO, /* matrix [1,6] */ // home row (правая половина) /* 21 */ KC_NO, /* matrix [5,6] */ /* 22 */ KC_G, /* matrix [5,5] */ /* 23 */ SFT_T(KC_T), /* matrix [5,4] */ /* 24 */ CTL_T(KC_N), /* matrix [5,3] */ /* 25 */ ALT_T(KC_V), /* matrix [5,2] */ /* 26 */ LWIN_T(KC_H), /* matrix [5,1] */ /* 27 */ ONCE_SHIFT, /* matrix [5,0] */ // mid row (левая половина) /* 28 */ KC_NO, /* matrix [2,0] */ /* 29 */ KC_W, /* matrix [2,1] */ /* 30 */ KC_U, /* matrix [2,2] */ /* 31 */ KC_Y, /* matrix [2,3] */ /* 32 */ KC_I, /* matrix [2,4] */ /* 33 */ KC_NO, /* matrix [2,5] */ // mid row (правая половина) /* 34 */ KC_B, /* matrix [6,5] */ /* 35 */ KC_M, /* matrix [6,4] */ /* 36 */ KC_R, /* matrix [6,3] */ /* 37 */ KC_P, /* matrix [6,2] */ /* 38 */ KC_Z, /* matrix [6,1] */ /* 39 */ LA_CHNG, /* matrix [6,0] */ // thumb cluster (левая 3, правая 3) /* 40 */ LT(L_MEDIA, KC_ENT), /* matrix [3,3] */ /* 41 */ LT(L_MOUSE, KC_BSPC), /* matrix [3,4] */ /* 42 */ MO(L_NAV), /* matrix [3,5] */ /* 43 */ MO(L_SYM), /* matrix [7,5] */ /* 44 */ LT(L_FUN, KC_SPC), /* matrix [7,4] */ /* 45 */ MO(L_NUM) /* matrix [7,3] */ ), [L_RU] = LAYOUT_split_3x6_3_ex2( // top row (левая половина) /* 00 */ KC_ESC, /* matrix [0,0] */ /* 01 */ KC_O, /* matrix [0,1] */ /* 02 */ KC_QUOT, /* matrix [0,2] */ /* 03 */ KC_Z, /* matrix [0,3] */ /* 04 */ KC_S, /* matrix [0,4] */ /* 05 */ KC_RBRC, /* matrix [0,5] */ /* 06 */ KC_NO, /* matrix [0,6] */ // top row (правая половина) /* 07 */ KC_NO, /* matrix [4,6] */ /* 08 */ KC_Q, /* matrix [4,5] */ /* 09 */ KC_L, /* matrix [4,4] */ /* 10 */ KC_K, /* matrix [4,3] */ /* 11 */ KC_R, /* matrix [4,2] */ /* 12 */ KC_W, /* matrix [4,1] */ /* 13 */ KC_SCLN, /* matrix [4,0] */ // home row (левая половина) /* 14 */ KC_A, /* matrix [1,0] */ /* 15 */ LWIN_T(KC_C), /* matrix [1,1] */ /* 16 */ ALT_T(KC_T), /* matrix [1,2] */ /* 17 */ CTL_T(KC_J), /* matrix [1,3] */ /* 18 */ SFT_T(KC_F), /* matrix [1,4] */ /* 19 */ KC_M, /* matrix [1,5] */ /* 20 */ KC_NO, /* matrix [1,6] */ // home row (правая половина) /* 21 */ KC_NO, /* matrix [5,6] */ /* 22 */ KC_U, /* matrix [5,5] */ /* 23 */ SFT_T(KC_N), /* matrix [5,4] */ /* 24 */ CTL_T(KC_Y), /* matrix [5,3] */ /* 25 */ ALT_T(KC_D), /* matrix [5,2] */ /* 26 */ LWIN_T(KC_LBRC), /* matrix [5,1] */ /* 27 */ KC_X, /* matrix [5,0] */ // mid row (левая половина) /* 28 */ LA_CHNG, /* matrix [2,0] */ /* 29 */ KC_I, /* matrix [2,1] */ /* 30 */ KC_DOT, /* matrix [2,2] */ /* 31 */ KC_E, /* matrix [2,3] */ /* 32 */ KC_B, /* matrix [2,4] */ /* 33 */ KC_GRV, /* matrix [2,5] */ // mid row (правая половина) /* 34 */ KC_COMM, /* matrix [6,5] */ /* 35 */ KC_V, /* matrix [6,4] */ /* 36 */ KC_H, /* matrix [6,3] */ /* 37 */ KC_G, /* matrix [6,2] */ /* 38 */ KC_P, /* matrix [6,1] */ /* 39 */ KC_NO, /* matrix [6,0] */ // thumb cluster (левая 3, правая 3) /* 40 */ LT(L_MEDIA, KC_ENT), /* matrix [3,3] */ /* 41 */ LT(L_MOUSE, KC_BSPC), /* matrix [3,4] */ /* 42 */ MO(L_NAV), /* matrix [3,5] */ /* 43 */ MO(L_SYM), /* matrix [7,5] */ /* 44 */ LT(L_FUN, KC_SPC), /* matrix [7,4] */ /* 45 */ MO(L_NUM) /* matrix [7,3] */ ), [L_MEDIA] = LAYOUT_split_3x6_3_ex2( // top row (левая половина) /* 00 */ KC_NO, /* matrix [0,0] */ /* 01 */ KC_RWIN, /* matrix [0,1] */ /* 02 */ KC_RALT, /* matrix [0,2] */ /* 03 */ KC_RCTL, /* matrix [0,3] */ /* 04 */ KC_RSFT, /* matrix [0,4] */ /* 05 */ KC_NO, /* matrix [0,5] */ /* 06 */ KC_NO, /* matrix [0,6] */ // top row (правая половина) /* 07 */ KC_NO, /* matrix [4,6] */ /* 08 */ NK_ON, /* matrix [4,5] */ /* 09 */ KC_VOLD, /* matrix [4,4] */ /* 10 */ KC_VOLU, /* matrix [4,3] */ /* 11 */ LA_SYNC, /* matrix [4,2] */ /* 12 */ RGB_TOG, /* matrix [4,1] */ /* 13 */ KC_NO, /* matrix [4,0] */ // home row (левая половина) /* 14 */ KC_NO, /* matrix [1,0] */ /* 15 */ KC_LWIN, /* matrix [1,1] */ /* 16 */ KC_LALT, /* matrix [1,2] */ /* 17 */ KC_LCTL, /* matrix [1,3] */ /* 18 */ KC_LSFT, /* matrix [1,4] */ /* 19 */ KC_NO, /* matrix [1,5] */ /* 20 */ KC_NO, /* matrix [1,6] */ // home row (правая половина) /* 21 */ KC_NO, /* matrix [5,6] */ /* 22 */ NK_TOGG, /* matrix [5,5] */ /* 23 */ KC_MPLY, /* matrix [5,4] */ /* 24 */ KC_MPRV, /* matrix [5,3] */ /* 25 */ KC_MNXT, /* matrix [5,2] */ /* 26 */ KC_MUTE, /* matrix [5,1] */ /* 27 */ KC_NO, /* matrix [5,0] */ // mid row (левая половина) /* 28 */ KC_NO, /* matrix [2,0] */ /* 29 */ KC_RWIN, /* matrix [2,1] */ /* 30 */ KC_RALT, /* matrix [2,2] */ /* 31 */ KC_RCTL, /* matrix [2,3] */ /* 32 */ KC_RSFT, /* matrix [2,4] */ /* 33 */ KC_NO, /* matrix [2,5] */ // mid row (правая половина) /* 34 */ NK_OFF, /* matrix [6,5] */ /* 35 */ LA_CAPS, /* matrix [6,4] */ /* 36 */ LA_ALSH, /* matrix [6,3] */ /* 37 */ LA_CTSH, /* matrix [6,2] */ /* 38 */ LA_WISP, /* matrix [6,1] */ /* 39 */ KC_NO, /* matrix [6,0] */ // thumb cluster (левая 3, правая 3) /* 40 */ KC_NO, /* matrix [3,3] */ /* 41 */ KC_NO, /* matrix [3,4] */ /* 42 */ KC_NO, /* matrix [3,5] */ /* 43 */ KC_NO, /* matrix [7,5] */ /* 44 */ KC_NO, /* matrix [7,4] */ /* 45 */ KC_NO /* matrix [7,3] */ ), [L_NAV] = LAYOUT_split_3x6_3_ex2( // top row (левая половина) /* 00 */ KC_NO, /* matrix [0,0] */ /* 01 */ KC_NO, /* matrix [0,1] */ /* 02 */ KC_NO, /* matrix [0,2] */ /* 03 */ KC_NO, /* matrix [0,3] */ /* 04 */ KC_NO, /* matrix [0,4] */ /* 05 */ KC_NO, /* matrix [0,5] */ /* 06 */ KC_NO, /* matrix [0,6] */ // top row (правая половина) /* 07 */ KC_NO, /* matrix [4,6] */ /* 08 */ C(KC_Y), /* matrix [4,5] */ /* 09 */ C(KC_V), /* matrix [4,4] */ /* 10 */ C(KC_C), /* matrix [4,3] */ /* 11 */ C(KC_X), /* matrix [4,2] */ /* 12 */ C(KC_Z), /* matrix [4,1] */ /* 13 */ C(KC_S), /* matrix [4,0] */ // home row (левая половина) /* 14 */ KC_NO, /* matrix [1,0] */ /* 15 */ KC_LWIN, /* matrix [1,1] */ /* 16 */ KC_LALT, /* matrix [1,2] */ /* 17 */ KC_LCTL, /* matrix [1,3] */ /* 18 */ KC_LSFT, /* matrix [1,4] */ /* 19 */ KC_NO, /* matrix [1,5] */ /* 20 */ KC_NO, /* matrix [1,6] */ // home row (правая половина) /* 21 */ KC_NO, /* matrix [5,6] */ /* 22 */ KC_CAPS, /* matrix [5,5] */ /* 23 */ KC_LEFT, /* matrix [5,4] */ /* 24 */ KC_DOWN, /* matrix [5,3] */ /* 25 */ KC_UP, /* matrix [5,2] */ /* 26 */ KC_RGHT, /* matrix [5,1] */ /* 27 */ KC_TAB, /* matrix [5,0] */ // mid row (левая половина) /* 28 */ KC_NO, /* matrix [2,0] */ /* 29 */ KC_NO, /* matrix [2,1] */ /* 30 */ KC_NO, /* matrix [2,2] */ /* 31 */ KC_NO, /* matrix [2,3] */ /* 32 */ KC_NO, /* matrix [2,4] */ /* 33 */ KC_NO, /* matrix [2,5] */ // mid row (правая половина) /* 34 */ KC_INS, /* matrix [6,5] */ /* 35 */ KC_HOME, /* matrix [6,4] */ /* 36 */ KC_PGDN, /* matrix [6,3] */ /* 37 */ KC_PGUP, /* matrix [6,2] */ /* 38 */ KC_END, /* matrix [6,1] */ /* 39 */ KC_DEL, /* matrix [6,0] */ // thumb cluster (левая 3, правая 3) /* 40 */ KC_NO, /* matrix [3,3] */ /* 41 */ KC_NO, /* matrix [3,4] */ /* 42 */ KC_NO, /* matrix [3,5] */ /* 43 */ KC_NO, /* matrix [7,5] */ /* 44 */ KC_NO, /* matrix [7,4] */ /* 45 */ KC_NO /* matrix [7,3] */ ), [L_MOUSE] = LAYOUT_split_3x6_3_ex2( // top row (левая половина) /* 00 */ KC_NO, /* matrix [0,0] */ /* 01 */ KC_BTN5, /* matrix [0,1] */ /* 02 */ KC_BTN1, /* matrix [0,2] */ /* 03 */ KC_BTN3, /* matrix [0,3] */ /* 04 */ KC_BTN2, /* matrix [0,4] */ /* 05 */ KC_NO, /* matrix [0,5] */ /* 06 */ KC_NO, /* matrix [0,6] */ // top row (правая половина) /* 07 */ KC_NO, /* matrix [4,6] */ /* 08 */ C(KC_Y), /* matrix [4,5] */ /* 09 */ C(KC_V), /* matrix [4,4] */ /* 10 */ C(KC_C), /* matrix [4,3] */ /* 11 */ C(KC_X), /* matrix [4,2] */ /* 12 */ C(KC_Z), /* matrix [4,1] */ /* 13 */ C(KC_S), /* matrix [4,0] */ // home row (левая половина) /* 14 */ KC_NO, /* matrix [1,0] */ /* 15 */ KC_LWIN, /* matrix [1,1] */ /* 16 */ KC_LALT, /* matrix [1,2] */ /* 17 */ KC_LCTL, /* matrix [1,3] */ /* 18 */ KC_LSFT, /* matrix [1,4] */ /* 19 */ KC_NO, /* matrix [1,5] */ /* 20 */ KC_NO, /* matrix [1,6] */ // home row (правая половина) /* 21 */ KC_NO, /* matrix [5,6] */ /* 22 */ KC_CAPS, /* matrix [5,5] */ /* 23 */ KC_MS_L, /* matrix [5,4] */ /* 24 */ KC_MS_D, /* matrix [5,3] */ /* 25 */ KC_MS_U, /* matrix [5,2] */ /* 26 */ KC_MS_R, /* matrix [5,1] */ /* 27 */ KC_TAB, /* matrix [5,0] */ // mid row (левая половина) /* 28 */ KC_NO, /* matrix [2,0] */ /* 29 */ KC_BTN4, /* matrix [2,1] */ /* 30 */ KC_ACL2, /* matrix [2,2] */ /* 31 */ KC_ACL1, /* matrix [2,3] */ /* 32 */ KC_ACL0, /* matrix [2,4] */ /* 33 */ KC_NO, /* matrix [2,5] */ // mid row (правая половина) /* 34 */ KC_INS, /* matrix [6,5] */ /* 35 */ KC_WH_L, /* matrix [6,4] */ /* 36 */ KC_WH_D, /* matrix [6,3] */ /* 37 */ KC_WH_U, /* matrix [6,2] */ /* 38 */ KC_WH_R, /* matrix [6,1] */ /* 39 */ KC_DEL, /* matrix [6,0] */ // thumb cluster (левая 3, правая 3) /* 40 */ KC_NO, /* matrix [3,3] */ /* 41 */ KC_NO, /* matrix [3,4] */ /* 42 */ KC_NO, /* matrix [3,5] */ /* 43 */ KC_BTN1, /* matrix [7,5] */ /* 44 */ KC_BTN3, /* matrix [7,4] */ /* 45 */ KC_BTN2 /* matrix [7,3] */ ), [L_SYM] = LAYOUT_split_3x6_3_ex2( // top row (левая половина) /* 00 */ KC_NO, /* matrix [0,0] */ /* 01 */ EN_AT, /* matrix [0,1] */ /* 02 */ EN_HASH, /* matrix [0,2] */ /* 03 */ ONCE_SHIFT, /* matrix [0,3] */ /* 04 */ AG_DOT, /* matrix [0,4] */ /* 05 */ EN_CIRC, /* matrix [0,5] */ /* 06 */ KC_NO, /* matrix [0,6] */ // top row (правая половина) /* 07 */ KC_NO, /* matrix [4,6] */ /* 08 */ EN_AMPR, /* matrix [4,5] */ /* 09 */ AG_ASTR, /* matrix [4,4] */ /* 10 */ AG_MINS, /* matrix [4,3] */ /* 11 */ AG_EQL, /* matrix [4,2] */ /* 12 */ AG_PLUS, /* matrix [4,1] */ /* 13 */ KC_NO, /* matrix [4,0] */ // home row (левая половина) /* 14 */ AG_COMM, /* matrix [1,0] */ /* 15 */ AG_EXCL, /* matrix [1,1] */ /* 16 */ AG_QUES, /* matrix [1,2] */ /* 17 */ COMMA_SPACE, /* matrix [1,3] */ /* 18 */ SMART_DOT, /* matrix [1,4] */ /* 19 */ AG_PERC, /* matrix [1,5] */ /* 20 */ KC_NO, /* matrix [1,6] */ // home row (правая половина) /* 21 */ KC_NO, /* matrix [5,6] */ /* 22 */ EN_PIPE, /* matrix [5,5] */ /* 23 */ AG_LPRN, /* matrix [5,4] */ /* 24 */ EN_LCBR, /* matrix [5,3] */ /* 25 */ EN_LBRC, /* matrix [5,2] */ /* 26 */ EN_LT, /* matrix [5,1] */ /* 27 */ EN_GRV, /* matrix [5,0] */ // mid row (левая половина) /* 28 */ CW_TOGG, /* matrix [2,0] */ /* 29 */ EN_SLSH, /* matrix [2,1] */ /* 30 */ RU_NUME, /* matrix [2,2] */ /* 31 */ AG_DQUO, /* matrix [2,3] */ /* 32 */ EN_QUOT, /* matrix [2,4] */ /* 33 */ EN_DLR, /* matrix [2,5] */ // mid row (правая половина) /* 34 */ AG_BSLS, /* matrix [6,5] */ /* 35 */ AG_RPRN, /* matrix [6,4] */ /* 36 */ EN_RCBR, /* matrix [6,3] */ /* 37 */ EN_RBRC, /* matrix [6,2] */ /* 38 */ EN_GT, /* matrix [6,1] */ /* 39 */ EN_TILD, /* matrix [6,0] */ // thumb cluster (левая 3, правая 3) /* 40 */ AG_UNDS, /* matrix [3,3] */ /* 41 */ AG_COLN, /* matrix [3,4] */ /* 42 */ AG_SCLN, /* matrix [3,5] */ /* 43 */ KC_NO, /* matrix [7,5] */ /* 44 */ KC_NO, /* matrix [7,4] */ /* 45 */ KC_NO /* matrix [7,3] */ ), [L_NUM] = LAYOUT_split_3x6_3_ex2( // top row (левая половина) /* 00 */ KC_NO, /* matrix [0,0] */ /* 01 */ KC_NO, /* matrix [0,1] */ /* 02 */ AG_1, /* matrix [0,2] */ /* 03 */ AG_2, /* matrix [0,3] */ /* 04 */ AG_3, /* matrix [0,4] */ /* 05 */ KC_NO, /* matrix [0,5] */ /* 06 */ KC_NO, /* matrix [0,6] */ // top row (правая половина) /* 07 */ KC_NO, /* matrix [4,6] */ /* 08 */ KC_NO, /* matrix [4,5] */ /* 09 */ KC_NO, /* matrix [4,4] */ /* 10 */ KC_NO, /* matrix [4,3] */ /* 11 */ KC_NO, /* matrix [4,2] */ /* 12 */ KC_NO, /* matrix [4,1] */ /* 13 */ KC_NO, /* matrix [4,0] */ // home row (левая половина) /* 14 */ KC_NO, /* matrix [1,0] */ /* 15 */ AG_0, /* matrix [1,1] */ /* 16 */ AG_4, /* matrix [1,2] */ /* 17 */ AG_5, /* matrix [1,3] */ /* 18 */ AG_6, /* matrix [1,4] */ /* 19 */ KC_NO, /* matrix [1,5] */ /* 20 */ KC_NO, /* matrix [1,6] */ // home row (правая половина) /* 21 */ KC_NO, /* matrix [5,6] */ /* 22 */ KC_NO, /* matrix [5,5] */ /* 23 */ KC_LSFT, /* matrix [5,4] */ /* 24 */ KC_LCTL, /* matrix [5,3] */ /* 25 */ KC_LALT, /* matrix [5,2] */ /* 26 */ KC_LWIN, /* matrix [5,1] */ /* 27 */ KC_NO, /* matrix [5,0] */ // mid row (левая половина) /* 28 */ KC_NO, /* matrix [2,0] */ /* 29 */ KC_PSCR, /* matrix [2,1] */ /* 30 */ AG_7, /* matrix [2,2] */ /* 31 */ AG_8, /* matrix [2,3] */ /* 32 */ AG_9, /* matrix [2,4] */ /* 33 */ KC_NO, /* matrix [2,5] */ // mid row (правая половина) /* 34 */ KC_NO, /* matrix [6,5] */ /* 35 */ KC_NO, /* matrix [6,4] */ /* 36 */ KC_NO, /* matrix [6,3] */ /* 37 */ KC_NO, /* matrix [6,2] */ /* 38 */ KC_NO, /* matrix [6,1] */ /* 39 */ KC_NO, /* matrix [6,0] */ // thumb cluster (левая 3, правая 3) /* 40 */ KC_ENT, /* matrix [3,3] */ /* 41 */ KC_BSPC, /* matrix [3,4] */ /* 42 */ KC_NO, /* matrix [3,5] */ /* 43 */ KC_NO, /* matrix [7,5] */ /* 44 */ KC_NO, /* matrix [7,4] */ /* 45 */ KC_NO /* matrix [7,3] */ ), [L_FUN] = LAYOUT_split_3x6_3_ex2( // top row (левая половина) /* 00 */ KC_NO, /* matrix [0,0] */ /* 01 */ KC_F10, /* matrix [0,1] */ /* 02 */ KC_F1, /* matrix [0,2] */ /* 03 */ KC_F2, /* matrix [0,3] */ /* 04 */ KC_F3, /* matrix [0,4] */ /* 05 */ KC_NO, /* matrix [0,5] */ /* 06 */ KC_NO, /* matrix [0,6] */ // top row (правая половина) /* 07 */ KC_NO, /* matrix [4,6] */ /* 08 */ KC_NO, /* matrix [4,5] */ /* 09 */ KC_NO, /* matrix [4,4] */ /* 10 */ KC_NO, /* matrix [4,3] */ /* 11 */ KC_NO, /* matrix [4,2] */ /* 12 */ KC_NO, /* matrix [4,1] */ /* 13 */ KC_NO, /* matrix [4,0] */ // home row (левая половина) /* 14 */ KC_NO, /* matrix [1,0] */ /* 15 */ KC_F11, /* matrix [1,1] */ /* 16 */ KC_F4, /* matrix [1,2] */ /* 17 */ KC_F5, /* matrix [1,3] */ /* 18 */ KC_F6, /* matrix [1,4] */ /* 19 */ KC_NO, /* matrix [1,5] */ /* 20 */ KC_NO, /* matrix [1,6] */ // home row (правая половина) /* 21 */ KC_NO, /* matrix [5,6] */ /* 22 */ KC_NO, /* matrix [5,5] */ /* 23 */ KC_LSFT, /* matrix [5,4] */ /* 24 */ KC_LCTL, /* matrix [5,3] */ /* 25 */ KC_LALT, /* matrix [5,2] */ /* 26 */ KC_LWIN, /* matrix [5,1] */ /* 27 */ KC_NO, /* matrix [5,0] */ // mid row (левая половина) /* 28 */ KC_NO, /* matrix [2,0] */ /* 29 */ KC_F12, /* matrix [2,1] */ /* 30 */ KC_F7, /* matrix [2,2] */ /* 31 */ KC_F8, /* matrix [2,3] */ /* 32 */ KC_F9, /* matrix [2,4] */ /* 33 */ KC_NO, /* matrix [2,5] */ // mid row (правая половина) /* 34 */ KC_NO, /* matrix [6,5] */ /* 35 */ KC_NO, /* matrix [6,4] */ /* 36 */ KC_NO, /* matrix [6,3] */ /* 37 */ KC_NO, /* matrix [6,2] */ /* 38 */ KC_NO, /* matrix [6,1] */ /* 39 */ KC_NO, /* matrix [6,0] */ // thumb cluster (левая 3, правая 3) /* 40 */ KC_NO, /* matrix [3,3] */ /* 41 */ KC_NO, /* matrix [3,4] */ /* 42 */ KC_NO, /* matrix [3,5] */ /* 43 */ KC_NO, /* matrix [7,5] */ /* 44 */ KC_NO, /* matrix [7,4] */ /* 45 */ KC_NO /* matrix [7,3] */ ), [L_GAME] = LAYOUT_split_3x6_3_ex2( // top row (левая половина) /* 00 */ KC_TAB, /* matrix [0,0] */ /* 01 */ KC_T, /* matrix [0,1] */ /* 02 */ KC_Q, /* matrix [0,2] */ /* 03 */ KC_W, /* matrix [0,3] */ /* 04 */ KC_E, /* matrix [0,4] */ /* 05 */ KC_R, /* matrix [0,5] */ /* 06 */ KC_ENT, /* matrix [0,6] */ // top row (правая половина) /* 07 */ KC_NO, /* matrix [4,6] */ /* 08 */ KC_Y, /* matrix [4,5] */ /* 09 */ KC_U, /* matrix [4,4] */ /* 10 */ KC_I, /* matrix [4,3] */ /* 11 */ KC_O, /* matrix [4,2] */ /* 12 */ KC_P, /* matrix [4,1] */ /* 13 */ DF(L_ENG), /* matrix [4,0] */ // home row (левая половина) /* 14 */ KC_LSFT, /* matrix [1,0] */ /* 15 */ KC_G, /* matrix [1,1] */ /* 16 */ KC_A, /* matrix [1,2] */ /* 17 */ KC_S, /* matrix [1,3] */ /* 18 */ KC_D, /* matrix [1,4] */ /* 19 */ KC_F, /* matrix [1,5] */ /* 20 */ KC_ESC, /* matrix [1,6] */ // home row (правая половина) /* 21 */ KC_NO, /* matrix [5,6] */ /* 22 */ KC_H, /* matrix [5,5] */ /* 23 */ KC_J, /* matrix [5,4] */ /* 24 */ KC_UP, /* matrix [5,3] */ /* 25 */ KC_K, /* matrix [5,2] */ /* 26 */ KC_L, /* matrix [5,1] */ /* 27 */ KC_GRV, /* matrix [5,0] */ // mid row (левая половина) /* 28 */ KC_LCTL, /* matrix [2,0] */ /* 29 */ KC_B, /* matrix [2,1] */ /* 30 */ KC_Z, /* matrix [2,2] */ /* 31 */ KC_X, /* matrix [2,3] */ /* 32 */ KC_C, /* matrix [2,4] */ /* 33 */ KC_V, /* matrix [2,5] */ // mid row (правая половина) /* 34 */ KC_N, /* matrix [6,5] */ /* 35 */ KC_LEFT, /* matrix [6,4] */ /* 36 */ KC_DOWN, /* matrix [6,3] */ /* 37 */ KC_RGHT, /* matrix [6,2] */ /* 38 */ KC_M, /* matrix [6,1] */ /* 39 */ KC_SLSH, /* matrix [6,0] */ // thumb cluster (левая 3, правая 3) /* 40 */ KC_LALT, /* matrix [3,3] */ /* 41 */ KC_SPC, /* matrix [3,4] */ /* 42 */ MO(L_NUM), /* matrix [3,5] */ /* 43 */ KC_H, /* matrix [7,5] */ /* 44 */ KC_SPC, /* matrix [7,4] */ /* 45 */ MO(L_FUN) /* matrix [7,3] */ ) }; bool shift_on_next_key = false; // Обработка нажатий? bool process_record_user(uint16_t keycode, keyrecord_t *record) { // В конце должно быть true, чтоб символ напечатался. // lang_shift if (!lang_shift_process_record(keycode, record)) return false; // Одиночный шифт от GPT4. Oдиночный шифт lang_shift не нравится. Мой шифт не умеет работать с кастом кейкодами lang_shift if (keycode == ONCE_SHIFT && record->event.pressed) { shift_on_next_key = true; return false; } if (shift_on_next_key && record->event.pressed) { register_code(KC_LSFT); register_code(keycode); unregister_code(keycode); unregister_code(KC_LSFT); shift_on_next_key = false; return false; } // Умная точка if (keycode == SMART_DOT && record->event.pressed) { lang_shift_tap_key(AG_DOT); register_code(KC_SPC); unregister_code(KC_SPC); shift_on_next_key = true; return false; } // Запятая + пробел if (keycode == COMMA_SPACE && record->event.pressed) { lang_shift_tap_key(AG_COMM); register_code(KC_SPC); unregister_code(KC_SPC); return false; } return true; // Если условия выше не сработали, то отправить символ как есть }; void user_timer(void) { lang_shift_user_timer(); }; // Lighting Layers bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { // https://github.com/qmk/qmk_firmware/blob/master/quantum/color.h hsv_t hsv = {255, 255, 255}; // Определяем цвет слоя в HSV switch (get_highest_layer(layer_state | default_layer_state)) { case L_ENG: hsv = (hsv_t){HSV_PINK}; break; // PINK case L_RU: hsv = (hsv_t){HSV_PURPLE}; break; // PURPLE case L_MEDIA: hsv = (hsv_t){HSV_MAGENTA}; break; // MAGENTA case L_NAV: hsv = (hsv_t){HSV_CYAN}; break; // CYAN case L_MOUSE: hsv = (hsv_t){HSV_YELLOW}; break; // YELLOW case L_SYM: hsv = (hsv_t){HSV_GREEN}; break; // GREEN case L_NUM: hsv = (hsv_t){HSV_BLUE}; break; // BLUE case L_FUN: hsv = (hsv_t){HSV_RED}; break; // RED case L_GAME: hsv = (hsv_t){HSV_ORANGE}; break; // ORANGE default: hsv = (hsv_t){HSV_WHITE}; break; // WHITE } // Ограничиваем яркость глобальной настройкой if (hsv.v > rgb_matrix_get_val()) { hsv.v = rgb_matrix_get_val(); } // Конвертируем HSV в RGB rgb_t rgb = hsv_to_rgb(hsv); // Применяем цвет ко всем светодиодам for (uint8_t i = led_min; i < led_max; i++) { rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); } return false; } void matrix_scan_user(void) { user_timer(); } bool caps_word_press_user(uint16_t keycode) { switch (keycode) { // Keycodes that continue Caps Word, with shift applied. case KC_A ... KC_Z: case KC_MINS: case KC_QUOT: case KC_RBRC: case KC_SCLN: case KC_COMM: case KC_GRV: case KC_LBRC: case KC_DOT: add_weak_mods(MOD_BIT(KC_LSFT)); // Apply shift to next key. return true; // Keycodes that continue Caps Word, without shifting. case KC_1 ... KC_0: case KC_BSPC: case KC_DEL: case KC_UNDS: return true; default: return false; // Deactivate Caps Word. } }