1 #include QMK_KEYBOARD_H
4 U_T_AUTO
= SAFE_RANGE
, //USB Extra Port Toggle Auto Detect / Always Active
5 U_T_AGCR
, //USB Toggle Automatic GCR control
6 DBG_TOG
, //DEBUG Toggle On / Off
7 DBG_MTRX
, //DEBUG Toggle Matrix Prints
8 DBG_KBD
, //DEBUG Toggle Keyboard Prints
9 DBG_MOU
, //DEBUG Toggle Mouse Prints
10 MD_BOOT
, //Restart into bootloader after hold timeout
11 HK_COSL
, //Clear held-down keys
14 #define TG_NKRO MAGIC_TOGGLE_NKRO //Toggle 6KRO / NKRO mode
15 #define CTL_ESC LCTL_T(KC_ESC)
16 #define TP_LSFT OSM(MOD_LSFT)
17 #define TP_RSFT OSM(MOD_RSFT)
18 #define TP_LALT OSM(MOD_LALT)
19 #define TP_RALT OSM(MOD_RALT)
20 #define KC_YBAI LCTL(KC_SPC)
21 #define GUI_SPC LGUI_T(KC_SPC)
22 #define KC_SPOT LGUI(KC_SPC)
24 //TODO default layer vim-like binds that work with WM, i to type??? this leads
25 //to layers of vim modes - what's the best way to deal with that?
26 //also need to deal with shift not working for other mods, add to shift layer
29 //TODO tap/toggle for layers
31 keymap_config_t keymap_config
;
33 const uint16_t PROGMEM keymaps
[][MATRIX_ROWS
][MATRIX_COLS
] = {
35 KC_GRV
, KC_1
, KC_2
, KC_3
, KC_4
, KC_5
, KC_6
, KC_7
, KC_8
, KC_9
, KC_0
, KC_MINS
, KC_EQL
, KC_BSPC
, KC_SPOT
,
36 KC_TAB
, KC_Q
, KC_W
, KC_E
, KC_R
, KC_T
, KC_Y
, KC_U
, KC_I
, KC_O
, KC_P
, KC_LBRC
, KC_RBRC
, KC_BSLS
, KC_HOME
,
37 CTL_ESC
, KC_A
, KC_S
, KC_D
, KC_F
, KC_G
, KC_H
, KC_J
, KC_K
, KC_L
, KC_SCLN
, KC_QUOT
, KC_ENT
, KC_MUTE
,
38 TP_LSFT
, KC_Z
, KC_X
, KC_C
, KC_V
, KC_B
, KC_N
, KC_M
, KC_COMM
, KC_DOT
, KC_SLSH
, KC_RSFT
, KC_VOLU
, KC_MPLY
,
39 TP_LALT
, TG(2), KC_YBAI
, GUI_SPC
, TP_RALT
, TG(1), KC_MRWD
, KC_VOLD
, KC_MFFD
42 KC_ESC
, KC_F1
, KC_F2
, KC_F3
, KC_F4
, KC_F5
, KC_F6
, KC_F7
, KC_F8
, KC_F9
, KC_F10
, KC_F11
, KC_F12
, _______
, KC_DEL
,
43 _______
, RGB_SPD
, RGB_VAI
, RGB_SPI
, RGB_HUI
, RGB_SAI
, _______
, U_T_AUTO
,U_T_AGCR
,_______
, KC_PSCR
, KC_SLCK
, KC_PAUS
, _______
, KC_HOME
,
44 _______
, RGB_RMOD
,RGB_VAD
, RGB_MOD
, RGB_HUD
, RGB_SAD
, _______
, KC_MRWD
, KC_MFFD
, _______
, _______
, _______
, _______
, KC_PGUP
,
45 _______
, RGB_TOG
, _______
, _______
, _______
, MD_BOOT
, TG_NKRO
, DBG_TOG
, _______
, _______
, _______
, _______
, KC_UP
, KC_PGDN
,
46 _______
, _______
, _______
, HK_COSL
, _______
, TG(1), KC_LEFT
, KC_DOWN
, KC_RGHT
50 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
51 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
52 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
53 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
54 _______, _______, _______, _______, _______, _______, _______, _______, _______
59 // Runs just one time when the keyboard initializes.
60 void matrix_init_user(void) {
63 // Runs constantly in the background, in a loop.
64 void matrix_scan_user(void) {
67 #define MODS_SHIFT (get_mods() & MOD_MASK_SHIFT)
68 #define MODS_CTRL (get_mods() & MOD_MASK_CTRL)
69 #define MODS_ALT (get_mods() & MOD_MASK_ALT)
71 bool process_record_user(uint16_t keycode
, keyrecord_t
*record
) {
72 static uint32_t key_timer
;
77 reset_oneshot_layer();
80 if (record
->event
.pressed
&& MODS_SHIFT
&& MODS_CTRL
) {
81 TOGGLE_FLAG_AND_PRINT(usb_extra_manual
, "USB extra port manual mode");
85 if (record
->event
.pressed
&& MODS_SHIFT
&& MODS_CTRL
) {
86 TOGGLE_FLAG_AND_PRINT(usb_gcr_auto
, "USB GCR auto mode");
90 if (record
->event
.pressed
) {
91 TOGGLE_FLAG_AND_PRINT(debug_enable
, "Debug mode");
95 if (record
->event
.pressed
) {
96 TOGGLE_FLAG_AND_PRINT(debug_matrix
, "Debug matrix");
100 if (record
->event
.pressed
) {
101 TOGGLE_FLAG_AND_PRINT(debug_keyboard
, "Debug keyboard");
105 if (record
->event
.pressed
) {
106 TOGGLE_FLAG_AND_PRINT(debug_mouse
, "Debug mouse");
110 if (record
->event
.pressed
) {
111 key_timer
= timer_read32();
113 if (timer_elapsed32(key_timer
) >= 500) {
119 if (record
->event
.pressed
) {
120 switch (rgb_matrix_get_flags()) {
122 rgb_matrix_set_flags(LED_FLAG_KEYLIGHT
);
123 rgb_matrix_set_color_all(0, 0, 0);
126 case LED_FLAG_KEYLIGHT
: {
127 rgb_matrix_set_flags(LED_FLAG_UNDERGLOW
);
128 rgb_matrix_set_color_all(0, 0, 0);
131 case LED_FLAG_UNDERGLOW
: {
132 rgb_matrix_set_flags(LED_FLAG_NONE
);
133 rgb_matrix_disable_noeeprom();
137 rgb_matrix_set_flags(LED_FLAG_ALL
);
138 rgb_matrix_enable_noeeprom();
145 return true; //Process all other keycodes normally