2023-04-14 11:42:50 +02:00
# include QMK_KEYBOARD_H
# include <string.h>
# define MILLISECONDS_IN_SECOND 1000
// These are just to make it neater to use builtin HSV values in the keymap
# define RED {HSV_RED}
# define CORAL {HSV_CORAL}
# define ORANGE {HSV_ORANGE}
# define GOLDEN {HSV_GOLDENROD}
# define GOLD {HSV_GOLD}
# define YELLOW {HSV_YELLOW}
# define CHART {HSV_CHARTREUSE}
# define GREEN {HSV_GREEN}
# define SPRING {HSV_SPRINGGREEN}
# define TURQ {HSV_TURQUOISE}
# define TEAL {HSV_TEAL}
# define CYAN {HSV_CYAN}
# define AZURE {HSV_AZURE}
# define BLUE {HSV_BLUE}
# define PURPLE {HSV_PURPLE}
# define MAGENT {HSV_MAGENTA}
# define PINK {HSV_PINK}
//========================================================== CONFIGURABLE DEFAULTS ==========================================================
# define RGB_DEFAULT_TIME_OUT 30
# define RGB_FAST_MODE_TIME_OUT 3
# define RGB_TIME_OUT_MAX 600
# define RGB_TIME_OUT_MIN 10
# define RGB_TIME_OUT_STEP 10
extern rgb_config_t rgb_matrix_config ;
bool disable_layer_color ;
bool rgb_enabled_flag ; // Current LED state flag. If false then LED is off.
bool rgb_time_out_enable ; // Idle LED toggle enable. If false then LED will not turn off after idle timeout.
bool rgb_time_out_fast_mode_enabled ; // Enable flag for RGB timeout fast mode
bool rgb_time_out_user_value ; // This holds the toggle value set by user with ROUT_TG. It's necessary as RGB_TOG changes timeout enable.
uint16_t rgb_time_out_seconds ; // Idle LED timeout value, in seconds not milliseconds
uint16_t rgb_time_out_saved_seconds ; // The saved user config for RGB timeout period
led_flags_t rgb_time_out_saved_flag ; // Store LED flag before timeout so it can be restored when LED is turned on again.
enum layout_names {
_KL = 0 , // Keys Layout: The main keyboard layout that has all the characters
_FL , // Function Layout: The function key activated layout with default functions and some added ones
_ML , // Mouse Layout: Mouse Keys and mouse movement
_GL , // GIT Layout: GIT shortcuts and macros
_VL , // VIM Layout: VIM shorcuts and macros
_YL , // Yakuake Layout: Yakuake drop-down terminal shortcuts and macros
_EL , // KDE Layout: Shortcuts for KDE desktop using default KDE shortcuts settings
} ;
enum tapdance_keycodes {
TD_LGUI_ML = 0 , // Tap dance key to switch to mouse layer _ML
TD_APP_YL ,
TD_CTRL_TERM , // Tap dance key to open terminal on LCTRL double press
} ;
enum ctrl_keycodes {
U_T_AUTO = SAFE_RANGE , // USB Extra Port Toggle Auto Detect / Always Active
U_T_AGCR , // USB Toggle Automatic GCR control
DBG_TOG , // DEBUG Toggle On / Off
DBG_MTRX , // DEBUG Toggle Matrix Prints
DBG_KBD , // DEBUG Toggle Keyboard Prints
DBG_MOU , // DEBUG Toggle Mouse Prints
MD_BOOT , // Restart into bootloader after hold timeout
SEL_CPY , // Select Copy. Select the word cursor is pointed at and copy, using double mouse click and ctrl+c
ROUT_TG , // Timeout Toggle. Toggle idle LED time out on or off
ROUT_VI , // Timeout Value Increase. Increase idle time out before LED disabled
ROUT_VD , // Timeout Value Decrease. Decrease idle time out before LED disabled
ROUT_FM , // RGB timeout fast mode toggle
COPY_ALL , // Copy all text using ctrl(a+c)
TERMINAL , // CTRL+ALT+T
} ;
enum string_macro_keycodes {
// The start of this enum should always be equal to end of ctrl_keycodes + 1
G_INIT = TERMINAL + 1 , // git init
G_CLONE , // git clone
G_CONF , // git config --global
G_ADD , // git add
G_DIFF , // git diff
G_RESET , // git reset
G_REBAS , // git rebase
G_BRANH , // git branch
G_CHECK , // git checkout
G_MERGE , // git merge
G_REMTE , // git remote add
G_FETCH , // git fetch
G_PULL , // git pull
G_PUSH , // git push
G_COMM , // git commit
G_STAT , // git status
G_LOG , // git log
} ;
2019-12-05 10:03:03 +01:00
static uint16_t idle_timer ; // Idle LED timeout timer
static uint8_t idle_second_counter ; // Idle LED seconds counter, counts seconds not milliseconds
2020-01-15 06:34:41 +01:00
static uint8_t key_event_counter ; // This counter is used to check if any keys are being held
2019-12-05 10:03:03 +01:00
2020-01-15 06:34:41 +01:00
static const char * sendstring_commands [ ] = {
" git init " ,
" git clone " ,
" git config --global " ,
" git add " ,
" git diff " ,
" git reset " ,
" git rebase " ,
" git branch -b \" " ,
" git checkout " ,
" git merge " ,
" git remote add " ,
" git fetch " ,
" git pull " ,
" git push " ,
" git commit " ,
" git status " ,
" git log " ,
2019-12-05 10:03:03 +01:00
} ;
//Associate our tap dance key with its functionality
2022-12-14 21:40:25 +01:00
tap_dance_action_t tap_dance_actions [ ] = {
2020-01-15 06:34:41 +01:00
[ TD_LGUI_ML ] = ACTION_TAP_DANCE_LAYER_TOGGLE ( KC_LGUI , _ML ) ,
[ TD_APP_YL ] = ACTION_TAP_DANCE_LAYER_TOGGLE ( KC_APP , _YL ) ,
2022-10-16 15:14:40 +02:00
[ TD_CTRL_TERM ] = ACTION_TAP_DANCE_DOUBLE ( KC_LCTL , LCA ( KC_T ) ) ,
2019-12-05 10:03:03 +01:00
} ;
const uint16_t PROGMEM keymaps [ ] [ MATRIX_ROWS ] [ MATRIX_COLS ] = {
/*
[ DEFAULT ] = LAYOUT (
2022-10-15 23:29:43 +02:00
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_PSCR , KC_SCRL , KC_PAUS ,
2020-01-15 06:34:41 +01:00
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_INS , KC_HOME , KC_PGUP ,
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_DEL , KC_END , KC_PGDN ,
2019-12-05 10:03:03 +01:00
KC_CAPS , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN , KC_QUOT , KC_ENT ,
2020-01-15 06:34:41 +01:00
KC_LSFT , KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM , KC_DOT , KC_SLSH , KC_RSFT , KC_UP ,
KC_LCTL , KC_LGUI , KC_LALT , KC_SPC , KC_RALT , MO ( 1 ) , KC_APP , KC_RCTL , KC_LEFT , KC_DOWN , KC_RGHT
2019-12-05 10:03:03 +01:00
) ,
*/
[ _KL ] = LAYOUT (
2022-10-15 23:29:43 +02:00
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_PSCR , KC_SCRL , KC_PAUS ,
2020-01-15 06:34:41 +01:00
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_INS , KC_HOME , KC_PGUP ,
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_DEL , KC_END , KC_PGDN ,
KC_CAPS , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN , KC_QUOT , KC_ENT ,
2022-10-27 12:19:16 +02:00
KC_LSFT , KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM , KC_DOT , KC_SLSH , SC_SENT , KC_UP ,
2020-01-15 06:34:41 +01:00
TD ( TD_CTRL_TERM ) , TD ( TD_LGUI_ML ) , KC_LALT , KC_SPC , KC_RALT , TT ( _FL ) , TD ( TD_APP_YL ) , KC_RCTL , KC_LEFT , KC_DOWN , KC_RGHT
2019-12-05 10:03:03 +01:00
) ,
[ _FL ] = LAYOUT (
2022-09-30 05:42:42 +02:00
_______ , DM_PLY1 , DM_PLY2 , _______ , _______ , DM_REC1 , DM_REC2 , _______ , _______ , DM_RSTP , _______ , KC_WAKE , KC_SLEP , KC_MUTE , _______ , _______ ,
2020-01-15 06:34:41 +01:00
_______ , _______ , TG ( _ML ) , TG ( _GL ) , TG ( _VL ) , TG ( _YL ) , _______ , _______ , _______ , ROUT_FM , ROUT_TG , ROUT_VD , ROUT_VI , _______ , KC_MSTP , KC_MPLY , KC_VOLU ,
RGB_M_P , RGB_SPD , RGB_VAI , RGB_SPI , RGB_HUI , RGB_SAI , _______ , U_T_AUTO , U_T_AGCR , _______ , _______ , _______ , _______ , _______ , KC_MPRV , KC_MNXT , KC_VOLD ,
2019-12-05 10:03:03 +01:00
_______ , RGB_RMOD , RGB_VAD , RGB_MOD , RGB_HUD , RGB_SAD , _______ , _______ , _______ , _______ , _______ , _______ , _______ ,
2020-01-15 06:34:41 +01:00
_______ , RGB_TOG , _______ , COPY_ALL , _______ , MD_BOOT , NK_TOGG , _______ , _______ , _______ , _______ , _______ , KC_BRIU ,
_______ , _______ , _______ , _______ , _______ , TG ( _FL ) , _______ , _______ , _______ , KC_BRID , _______
2019-12-05 10:03:03 +01:00
) ,
[ _ML ] = LAYOUT (
2020-01-15 06:34:41 +01:00
_______ , KC_ACL0 , KC_ACL1 , KC_ACL2 , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ ,
_______ , KC_BTN4 , KC_BTN3 , KC_BTN5 , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ ,
_______ , KC_BTN1 , KC_MS_U , KC_BTN2 , KC_WH_U , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ ,
_______ , KC_MS_L , KC_MS_D , KC_MS_R , KC_WH_D , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ ,
_______ , _______ , _______ , SEL_CPY , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , KC_MS_U ,
_______ , TG ( _ML ) , _______ , _______ , _______ , TG ( _ML ) , _______ , _______ , KC_MS_L , KC_MS_D , KC_MS_R
) ,
[ _GL ] = LAYOUT (
_______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ ,
_______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ ,
_______ , _______ , _______ , _______ , G_REMTE , G_RESET , G_REBAS , _______ , G_INIT , _______ , G_PULL , G_PUSH , _______ , _______ , _______ , _______ , _______ ,
_______ , G_ADD , G_STAT , G_DIFF , G_FETCH , _______ , _______ , _______ , _______ , G_LOG , _______ , _______ , _______ ,
_______ , G_CONF , G_CHECK , G_CLONE , G_COMM , G_BRANH , _______ , G_MERGE , _______ , _______ , _______ , _______ , _______ ,
_______ , _______ , _______ , _______ , _______ , TG ( _GL ) , _______ , _______ , _______ , _______ , _______
) ,
// This layout doesn't have custom keycodes for now, just custom LED config
[ _VL ] = LAYOUT (
2022-10-15 23:29:43 +02:00
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_PSCR , KC_SCRL , KC_PAUS ,
2020-01-15 06:34:41 +01:00
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_INS , KC_HOME , KC_PGUP ,
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_DEL , KC_END , KC_PGDN ,
KC_CAPS , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN , KC_QUOT , KC_ENT ,
2022-10-27 12:19:16 +02:00
KC_LSFT , KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM , KC_DOT , KC_SLSH , SC_SENT , KC_UP ,
2020-01-15 06:34:41 +01:00
KC_LCTL , KC_LGUI , KC_LALT , KC_SPC , KC_RALT , TG ( _VL ) , KC_APP , KC_RCTL , KC_LEFT , KC_DOWN , KC_RGHT
) ,
// Works with https://github.com/ash0x0/config/blob/master/yakuake.shortcuts
[ _YL ] = LAYOUT (
KC_ESC , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO ,
KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_NO , KC_NO , KC_NO , KC_NO , KC_HOME , KC_PGUP ,
KC_NO , KC_Q , KC_NO , KC_E , KC_NO , KC_T , KC_NO , KC_NO , KC_I , KC_NO , KC_P , KC_NO , KC_RBRC , KC_BSLS , KC_NO , KC_END , KC_PGDN ,
KC_NO , KC_A , KC_NO , KC_D , KC_NO , KC_G , KC_NO , KC_J , KC_K , KC_L , KC_SCLN , KC_NO , KC_NO ,
KC_NO , KC_Z , KC_X , KC_NO , KC_NO , KC_NO , KC_NO , KC_M , KC_COMM , KC_DOT , KC_NO , KC_NO , KC_UP ,
KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , TG ( _YL ) , KC_NO , KC_NO , KC_LEFT , KC_DOWN , KC_RGHT
2019-12-05 10:03:03 +01:00
) ,
/*
[ X ] = LAYOUT (
2020-01-15 06:34:41 +01:00
_______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ ,
_______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ ,
_______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ ,
2019-12-05 10:03:03 +01:00
_______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ ,
2020-01-15 06:34:41 +01:00
_______ , _______ , _______ , _______ , _______ , _______ , TG_NKRO , _______ , _______ , _______ , _______ , _______ , _______ ,
_______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______
2019-12-05 10:03:03 +01:00
) ,
[ RGB ] = LAYOUT (
ESC : 0 , F1 : 1 , F2 : 2 , F3 : 3 , F4 : 4 , F5 : 5 , F6 : 6 , F7 : 7 , F8 : 8 , F9 : 9 , F10 : 10 , F11 : 11 , F12 : 12 , PSCR : 13 , SLCK : 14 , PAUS : 15 ,
GRV : 16 , 1 : 17 , 2 : 18 , 3 : 19 , 4 : 20 , 5 : 21 , 6 : 22 , 7 : 23 , 8 : 24 , 9 : 25 , 0 : 26 , MINS : 27 , EQL : 28 , BSPC : 29 , INS : 30 , HOME : 31 , PGUP : 32 ,
TAB : 33 , Q : 34 , W : 35 , E : 36 , R : 37 , T : 38 , Y : 39 , U : 40 , I : 41 , O : 42 , P : 43 , LBRC : 44 , RBRC : 45 , BSLS : 46 , DEL : 47 , END : 48 , PGDN : 49 ,
CAPS : 50 , A : 51 , S : 52 , D : 53 , F : 54 , G : 55 , H : 56 , J : 57 , K : 58 , L : 59 , SCLN : 60 , QUOT : 61 , ENT : 62 ,
LSFT : 63 , Z : 64 , X : 65 , C : 66 , V : 67 , B : 68 , N : 69 , M : 70 , COMM : 71 , DOT : 72 , SLSH : 73 , RSFT : 74 , UP : 75 ,
LCTL : 76 , LGUI : 77 , LALT : 78 , SPC : 79 , RALT : 80 , Fn : 81 , APP : 82 , RCTL : 83 , LEFT : 84 , DOWN : 85 , RGHT : 86
) ,
[ MATRIX ] = LAYOUT (
0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 ,
16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30 , 31 , 32 ,
33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 , 41 , 42 , 43 , 44 , 45 , 46 , 47 , 48 , 49 ,
50 , 51 , 52 , 53 , 54 , 55 , 56 , 57 , 58 , 59 , 60 , 61 , 62 ,
63 , 64 , 65 , 66 , 67 , 68 , 69 , 70 , 71 , 72 , 73 , 74 , 75 ,
76 , 77 , 78 , 79 , 80 , 81 , 82 , 83 , 84 , 85 , 86
) ,
*/
} ;
2020-01-15 06:34:41 +01:00
# ifdef _______
# undef _______
# define _______ {0, 0, 0}
2022-09-23 14:46:23 +02:00
const uint8_t PROGMEM ledmap [ ] [ RGB_MATRIX_LED_COUNT ] [ 3 ] = {
2020-01-15 06:34:41 +01:00
[ _FL ] = {
_______ , CORAL , CORAL , _______ , _______ , CORAL , CORAL , _______ , _______ , CORAL , _______ , YELLOW , YELLOW , TEAL , GOLD , GOLD ,
_______ , _______ , PINK , PINK , PINK , PINK , _______ , _______ , _______ , GREEN , GREEN , GREEN , GREEN , _______ , TEAL , TEAL , TEAL ,
ORANGE , ORANGE , ORANGE , ORANGE , ORANGE , ORANGE , _______ , AZURE , AZURE , _______ , _______ , _______ , _______ , _______ , TEAL , TEAL , TEAL ,
_______ , ORANGE , ORANGE , ORANGE , ORANGE , ORANGE , _______ , _______ , _______ , _______ , _______ , _______ , _______ ,
_______ , ORANGE , _______ , CORAL , _______ , AZURE , AZURE , _______ , _______ , _______ , _______ , AZURE , SPRING ,
_______ , _______ , _______ , _______ , _______ , PINK , _______ , AZURE , _______ , SPRING , _______
} ,
[ _ML ] = {
_______ , GOLD , GOLD , GOLD , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ ,
_______ , MAGENT , MAGENT , MAGENT , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ ,
_______ , MAGENT , GOLD , MAGENT , GOLD , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ ,
_______ , GOLD , GOLD , GOLD , GOLD , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ ,
_______ , _______ , _______ , CORAL , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , GOLD ,
_______ , PINK , _______ , _______ , _______ , PINK , _______ , _______ , GOLD , GOLD , GOLD
} ,
[ _GL ] = {
_______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ ,
_______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ ,
_______ , _______ , _______ , _______ , BLUE , AZURE , AZURE , _______ , CYAN , _______ , TURQ , PURPLE , _______ , _______ , _______ , _______ , _______ ,
_______ , CORAL , GREEN , GREEN , TURQ , _______ , _______ , _______ , _______ , GREEN , _______ , _______ , _______ ,
_______ , CYAN , CHART , TURQ , ORANGE , CHART , _______ , CHART , _______ , _______ , _______ , _______ , _______ ,
_______ , _______ , _______ , _______ , _______ , PINK , _______ , _______ , _______ , _______ , _______
} ,
[ _VL ] = {
PURPLE , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ ,
_______ , _______ , _______ , TURQ , _______ , _______ , _______ , _______ , TURQ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ ,
_______ , AZURE , AZURE , AZURE , PURPLE , _______ , BLUE , PURPLE , PURPLE , PURPLE , BLUE , _______ , _______ , _______ , _______ , _______ , _______ ,
_______ , PURPLE , _______ , BLUE , _______ , GOLD , GOLDEN , GOLDEN , GOLDEN , GOLDEN , _______ , _______ , _______ ,
_______ , _______ , BLUE , BLUE , _______ , _______ , TURQ , _______ , _______ , _______ , TURQ , _______ , _______ ,
_______ , _______ , _______ , _______ , _______ , PINK , _______ , _______ , _______ , _______ , _______
} ,
[ _YL ] = {
RED , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ ,
CHART , BLUE , BLUE , BLUE , BLUE , BLUE , BLUE , BLUE , BLUE , BLUE , BLUE , _______ , _______ , _______ , _______ , PURPLE , PURPLE ,
_______ , RED , _______ , BLUE , _______ , GOLD , _______ , _______ , GREEN , _______ , MAGENT , _______ , GOLD , GOLD , _______ , PURPLE , PURPLE ,
_______ , BLUE , _______ , BLUE , _______ , MAGENT , _______ , GREEN , GREEN , GREEN , MAGENT , _______ , _______ ,
_______ , ORANGE , ORANGE , _______ , _______ , _______ , _______ , RED , MAGENT , MAGENT , _______ , _______ , GREEN ,
_______ , _______ , _______ , _______ , _______ , PINK , _______ , _______ , BLUE , GREEN , BLUE
} ,
} ;
# undef _______
# define _______ KC_TRNS
# endif
2019-12-05 10:03:03 +01:00
// Runs just one time when the keyboard initializes.
void matrix_init_user ( void ) {
// Enable or disable debugging
debug_enable = true ;
debug_matrix = true ;
debug_keyboard = true ;
debug_mouse = true ;
2020-01-15 06:34:41 +01:00
idle_second_counter = 0 ; // Counter for number of seconds keyboard has been idle.
key_event_counter = 0 ; // Counter to determine if keys are being held, neutral at 0.
rgb_time_out_seconds = RGB_DEFAULT_TIME_OUT ; // RGB timeout initialized to its default configure in keymap.h
rgb_time_out_enable = false ; // Disable RGB timeout by default. Enable using toggle key.
rgb_time_out_user_value = false ; // Has to have the same initial value as rgb_time_out_enable.
rgb_enabled_flag = true ; // Initially, keyboard RGB is enabled. Change to false config.h initializes RGB disabled.
rgb_time_out_fast_mode_enabled = false ; // RGB timeout fast mode disabled initially.
rgb_time_out_saved_flag = rgb_matrix_get_flags ( ) ; // Save RGB matrix state for when keyboard comes back from ide.
2019-12-05 10:03:03 +01:00
} ;
2020-01-15 06:34:41 +01:00
void keyboard_post_init_user ( void ) {
rgb_matrix_enable ( ) ;
}
2019-12-05 10:03:03 +01:00
// Runs constantly in the background, in a loop.
void matrix_scan_user ( void ) {
if ( rgb_time_out_enable & & rgb_enabled_flag ) {
2020-01-15 06:34:41 +01:00
// If the key event counter is not zero then some key was pressed down but not released, thus reset the timeout counter.
if ( key_event_counter ) {
idle_second_counter = 0 ;
} else if ( timer_elapsed ( idle_timer ) > MILLISECONDS_IN_SECOND ) {
2019-12-05 10:03:03 +01:00
idle_second_counter + + ;
idle_timer = timer_read ( ) ;
}
if ( idle_second_counter > = rgb_time_out_seconds ) {
rgb_time_out_saved_flag = rgb_matrix_get_flags ( ) ;
rgb_matrix_set_flags ( LED_FLAG_NONE ) ;
rgb_matrix_disable_noeeprom ( ) ;
rgb_enabled_flag = false ;
idle_second_counter = 0 ;
}
}
} ;
bool process_record_user ( uint16_t keycode , keyrecord_t * record ) {
static uint32_t key_timer ;
2020-01-15 06:34:41 +01:00
// Increment key event counter for every press and decrement for every release.
if ( record - > event . pressed ) {
key_event_counter + + ;
} else {
key_event_counter - - ;
}
2019-12-05 10:03:03 +01:00
if ( rgb_time_out_enable ) {
idle_timer = timer_read ( ) ;
// Reset the seconds counter. Without this, something like press> leave x seconds> press, would be x seconds on the effective counter not 0 as it should.
idle_second_counter = 0 ;
if ( ! rgb_enabled_flag ) {
rgb_matrix_enable_noeeprom ( ) ;
rgb_matrix_set_flags ( rgb_time_out_saved_flag ) ;
rgb_enabled_flag = true ;
}
}
switch ( keycode ) {
case U_T_AUTO :
if ( record - > event . pressed & & MODS_SHIFT & & MODS_CTRL ) {
TOGGLE_FLAG_AND_PRINT ( usb_extra_manual , " USB extra port manual mode " ) ;
}
return false ;
case U_T_AGCR :
if ( record - > event . pressed & & MODS_SHIFT & & MODS_CTRL ) {
TOGGLE_FLAG_AND_PRINT ( usb_gcr_auto , " USB GCR auto mode " ) ;
}
return false ;
case MD_BOOT :
if ( record - > event . pressed ) {
key_timer = timer_read32 ( ) ;
} else {
if ( timer_elapsed32 ( key_timer ) > = 500 ) {
reset_keyboard ( ) ;
}
}
return false ;
2020-01-15 06:34:41 +01:00
}
if ( record - > event . pressed ) {
// The Yakuake config uses LGUI+Ctrl+Shift+<keycode>. KC_NO used for undesired key, all mapped ones get mods.
if ( get_highest_layer ( layer_state ) = = _YL & & keycode ! = TG ( _YL ) ) {
tap_code16 ( C ( G ( S ( keycode ) ) ) ) ;
return false ;
}
switch ( keycode ) {
case DBG_TOG :
TOGGLE_FLAG_AND_PRINT ( debug_enable , " Debug mode " ) ;
return false ;
case DBG_MTRX :
TOGGLE_FLAG_AND_PRINT ( debug_matrix , " Debug matrix " ) ;
return false ;
case DBG_KBD :
TOGGLE_FLAG_AND_PRINT ( debug_keyboard , " Debug keyboard " ) ;
return false ;
case DBG_MOU :
TOGGLE_FLAG_AND_PRINT ( debug_mouse , " Debug mouse " ) ;
return false ;
case RGB_TOG :
2019-12-05 10:03:03 +01:00
rgb_time_out_enable = rgb_time_out_user_value ;
switch ( rgb_matrix_get_flags ( ) ) {
case LED_FLAG_ALL : {
rgb_matrix_set_flags ( LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER ) ;
rgb_matrix_set_color_all ( 0 , 0 , 0 ) ;
}
break ;
case LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER : {
rgb_matrix_set_flags ( LED_FLAG_UNDERGLOW ) ;
rgb_matrix_set_color_all ( 0 , 0 , 0 ) ;
}
break ;
case LED_FLAG_UNDERGLOW : {
// This line is for LED idle timer. It disables the toggle so you can turn off LED completely if you like
rgb_time_out_enable = false ;
rgb_matrix_set_flags ( LED_FLAG_NONE ) ;
rgb_matrix_disable_noeeprom ( ) ;
}
break ;
default : {
rgb_matrix_set_flags ( LED_FLAG_ALL ) ;
rgb_matrix_enable_noeeprom ( ) ;
}
break ;
}
2020-01-15 06:34:41 +01:00
return false ;
// ======================================================== CUSTOM KEYCOADS BELOW ========================================================
case COPY_ALL :
2019-12-05 10:03:03 +01:00
// Selects all and text and copy
2022-10-17 14:45:23 +02:00
SEND_STRING ( SS_LCTL ( " ac " ) ) ;
2020-01-15 06:34:41 +01:00
return false ;
case SEL_CPY :
// Select word under cursor and copy. Double mouse click then ctrl+c
2019-12-05 10:03:03 +01:00
tap_code16 ( KC_BTN1 ) ;
tap_code16 ( KC_BTN1 ) ;
tap_code16 ( C ( KC_C ) ) ;
2020-01-15 06:34:41 +01:00
return false ;
case ROUT_TG :
// Toggle idle LED timeout on or off
2019-12-05 10:03:03 +01:00
rgb_time_out_enable = ! rgb_time_out_enable ;
rgb_time_out_user_value = rgb_time_out_enable ;
2020-01-15 06:34:41 +01:00
return false ;
case ROUT_VI :
// Increase idle LED timeout value in seconds
2019-12-05 10:03:03 +01:00
// Only increase if current value is lower than RGB_TIME_OUT_MAX. Don't care what value the result will be
// Modity RGB_TIME_OUT_STEP for bigger or smaller increments
if ( ! rgb_time_out_fast_mode_enabled & & rgb_time_out_seconds < = RGB_TIME_OUT_MAX ) {
rgb_time_out_seconds + = RGB_TIME_OUT_STEP ;
}
2020-01-15 06:34:41 +01:00
return false ;
case ROUT_VD :
2019-12-05 10:03:03 +01:00
// Decrease idle LED timeout value in seconds
// Only decrease if current value is higher than minimum value and the result is larger than zero
// Modity RGB_TIME_OUT_STEP for bigger or smaller decrements
if ( ! rgb_time_out_fast_mode_enabled & & rgb_time_out_seconds > RGB_TIME_OUT_MIN ) {
rgb_time_out_seconds - = RGB_TIME_OUT_STEP ;
}
2020-01-15 06:34:41 +01:00
return false ;
case ROUT_FM :
2019-12-05 10:03:03 +01:00
if ( rgb_time_out_fast_mode_enabled ) {
rgb_time_out_seconds = rgb_time_out_saved_seconds ;
} else {
rgb_time_out_saved_seconds = rgb_time_out_seconds ;
rgb_time_out_seconds = RGB_FAST_MODE_TIME_OUT ;
}
rgb_time_out_fast_mode_enabled = ! rgb_time_out_fast_mode_enabled ;
2020-01-15 06:34:41 +01:00
return false ;
case G_INIT . . . G_LOG :
send_string_with_delay ( sendstring_commands [ keycode - G_INIT ] , 5 ) ;
return false ;
}
2019-12-05 10:03:03 +01:00
}
2020-01-15 06:34:41 +01:00
return true ;
2019-12-05 10:03:03 +01:00
}
2020-01-15 06:34:41 +01:00
void set_layer_color ( int layer ) {
if ( layer = = 0 ) { return ; }
2022-09-23 14:46:23 +02:00
for ( int i = 0 ; i < RGB_MATRIX_LED_COUNT ; i + + ) {
2020-01-15 06:34:41 +01:00
HSV hsv = {
. h = pgm_read_byte ( & ledmap [ layer ] [ i ] [ 0 ] ) ,
. s = pgm_read_byte ( & ledmap [ layer ] [ i ] [ 1 ] ) ,
. v = pgm_read_byte ( & ledmap [ layer ] [ i ] [ 2 ] ) ,
} ;
if ( hsv . h | | hsv . s | | hsv . v ) {
RGB rgb = hsv_to_rgb ( hsv ) ;
float f = ( float ) rgb_matrix_config . hsv . v / UINT8_MAX ;
rgb_matrix_set_color ( i , f * rgb . r , f * rgb . g , f * rgb . b ) ;
} else if ( layer ! = 1 ) {
// Only deactivate non-defined key LEDs at layers other than FN. Because at FN we have RGB adjustments and need to see them live.
// If the values are all false then it's a transparent key and deactivate LED at this layer
rgb_matrix_set_color ( i , 0 , 0 , 0 ) ;
}
}
}
2019-12-05 10:03:03 +01:00
2022-10-05 00:24:22 +02:00
bool rgb_matrix_indicators_user ( void ) {
2021-07-31 17:28:09 +02:00
if ( disable_layer_color | |
2020-01-15 06:34:41 +01:00
rgb_matrix_get_flags ( ) = = LED_FLAG_NONE | |
rgb_matrix_get_flags ( ) = = LED_FLAG_UNDERGLOW ) {
return ;
}
set_layer_color ( get_highest_layer ( layer_state ) ) ;
2022-10-05 00:24:22 +02:00
return false ;
2020-01-15 06:34:41 +01:00
}
2019-12-05 10:03:03 +01:00
2020-01-15 06:34:41 +01:00
/* This is a test function for Raw HID, which is currently not implemented for this keyboard */
/**
void raw_hid_receive ( uint8_t * data , uint8_t length ) {
uint8_t response [ RAW_EPSIZE ] ;
memset ( response + 1 , ' C ' , 1 ) ;
memset ( response + 2 , ' T ' , 1 ) ;
memset ( response + 3 , ' R ' , 1 ) ;
memset ( response + 4 , ' L ' , 1 ) ;
raw_hid_send ( data , length ) ;
2019-12-05 10:03:03 +01:00
}
2020-01-15 06:34:41 +01:00
*/