// Copyright 2022 Philip Gaber (@qhga) // SPDX-License-Identifier: GPL-2.0-or-later #include QMK_KEYBOARD_H extern keymap_config_t keymap_config; enum layer_names { _LAYER0, _LAYER1, _LAYER2, _LAYER3, }; #define OS_LSFT OSM(MOD_LSFT) #define LAYOUT_wrapper( ... ) LAYOUT(__VA_ARGS__) const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /*********************************************************************************** * DEFAULT ***********************************************************************************/ // R1 (9) #define ___HSTG___F5___F9___HCM___MOUSE__ KC_BSLS, KC_F5, KC_F9, KC_EQL #define _TO3___PLAY___VOUP___VODO___MUTE_ TO(_LAYER3), KC_MPLY, KC_MUTE, KC_VOLU, KC_VOLD // R2 (14) #define __ESC__1_____2_____3_____4_____5__PLS__ QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_RBRC #define __MIN__6_____7_____8_____9_____0__QST__ KC_SLSH, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS // R3 (14) #define __TAB__Q_____W_____E_____R_____T_RIBR3_ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, RALT(KC_8) #define _LFBR3_Z_____U_____I_____O_____P___UE__ RALT(KC_9), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC // R4 (14) #define __ESC__A_____S_____D_____F_____G_RIBR1_ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, S(KC_8) #define _LFBR1_H_____J_____K_____L_____OE__AE__ S(KC_9), KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT // R5 (14) #define _SHFT__Y_____X_____C_____V_____B_RIBR2_ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, RALT(KC_7) #define _LFBR2_N_____M____COM___DOT___MIN__SHFT RALT(KC_0), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT // R6 (14) #define ______________BOTTOM_LEFT______________ KC_LALT, KC_NUBS, KC_LCTL, MO(_LAYER1), KC_LGUI, KC_LCTL, KC_RALT #define ______________BOTTOM_RIGHT_____________ KC_ENT, KC_SPC, KC_BSPC, MO(_LAYER2), KC_NO, KC_PSCR, OSM(MOD_LSFT) [_LAYER0] = LAYOUT_wrapper( ___HSTG___F5___F9___HCM___MOUSE__, _TO3___PLAY___VOUP___VODO___MUTE_, __ESC__1_____2_____3_____4_____5__PLS__, __MIN__6_____7_____8_____9_____0__QST__, __TAB__Q_____W_____E_____R_____T_RIBR3_, _LFBR3_Z_____U_____I_____O_____P___UE__, __ESC__A_____S_____D_____F_____G_RIBR1_, _LFBR1_H_____J_____K_____L_____OE__AE__, _SHFT__Y_____X_____C_____V_____B_RIBR2_, _LFBR2_N_____M____COM___DOT___MIN__SHFT, ______________BOTTOM_LEFT______________, ______________BOTTOM_RIGHT_____________ ), /*********************************************************************************** * LAYER 1 ***********************************************************************************/ // R1 (9) #define ____________LAYER1_L1____________ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS #define ____________LAYER1_R1____________ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT // R2 (14) #define _______________LAYER1_L2_______________ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO #define _______________LAYER1_R2_______________ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS // R3 (14) #define _______________LAYER1_L3_______________ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO #define _______________LAYER1_R3_______________ KC_NO, KC_NO, KC_LBRC, KC_NO, KC_SCLN, KC_NO, KC_BSLS // R4 (14) #define _______________LAYER1_L4_______________ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO #define _______________LAYER1_R4_______________ KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_NO, KC_SLSH // R5 (14) #define _______________LAYER1_L5_______________ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO #define _______________LAYER1_R5_______________ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, QK_BOOT, KC_NO // R6 (14) #define _______________LAYER1_L6_______________ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS #define _______________LAYER1_R6_______________ KC_TRNS, KC_TRNS, KC_DEL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS [_LAYER1] = LAYOUT_wrapper( ____________LAYER1_L1____________, ____________LAYER1_R1____________, _______________LAYER1_L2_______________, _______________LAYER1_R2_______________, _______________LAYER1_L3_______________, _______________LAYER1_R3_______________, _______________LAYER1_L4_______________, _______________LAYER1_R4_______________, _______________LAYER1_L5_______________, _______________LAYER1_R5_______________, _______________LAYER1_L6_______________, _______________LAYER1_R6_______________ ), /*********************************************************************************** * LAYER 2 ***********************************************************************************/ // R1 (9) #define ____________LAYER2_L1____________ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS #define ____________LAYER2_R1____________ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT // R2 (14) #define _______________LAYER2_L2_______________ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS #define _______________LAYER2_R2_______________ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS // R3 (14) #define _______________LAYER2_L3_______________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6 #define _______________LAYER2_R3_______________ KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSLS // R4 (14) #define _______________LAYER2_L4_______________ KC_TRNS, KC_QUOT, KC_MINS, KC_MS_BTN4, KC_MS_BTN5, KC_NO, KC_NO #define _______________LAYER2_R4_______________ KC_NO, KC_MS_LEFT, KC_MS_DOWN, KC_MS_UP, KC_MS_RIGHT, KC_NO, KC_SLSH // R5 (14) #define _______________LAYER2_L5_______________ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO #define _______________LAYER2_R5_______________ KC_NO, KC_MS_BTN1, KC_MS_BTN2, KC_NO, KC_NO, KC_NO, KC_NO // R6 (14) #define _______________LAYER2_L6_______________ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS #define _______________LAYER2_R6_______________ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS [_LAYER2] = LAYOUT_wrapper( ____________LAYER2_L1____________, ____________LAYER2_R1____________, _______________LAYER2_L2_______________, _______________LAYER2_R2_______________, _______________LAYER2_L3_______________, _______________LAYER2_R3_______________, _______________LAYER2_L4_______________, _______________LAYER2_R4_______________, _______________LAYER2_L5_______________, _______________LAYER2_R5_______________, _______________LAYER2_L6_______________, _______________LAYER2_R6_______________ ), /*********************************************************************************** * LAYER 3 ***********************************************************************************/ // R1 (9) #define ____________LAYER3_L1____________ KC_F1, KC_F2, KC_F3, KC_F4 #define ____________LAYER3_R1____________ TO(_LAYER0), KC_NO, KC_NO, KC_NO, KC_DEL // R2 (14) #define _______________LAYER3_L2_______________ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6 #define _______________LAYER3_R2_______________ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO // R3 (14) #define _______________LAYER3_L3_______________ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y #define _______________LAYER3_R3_______________ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO // R4 (14) #define _______________LAYER3_L4_______________ KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H #define _______________LAYER3_R4_______________ KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_NO, KC_NO // R5 (14) #define _______________LAYER3_L5_______________ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N #define _______________LAYER3_R5_______________ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_UP, KC_NO // R6 (14) #define _______________LAYER3_L6_______________ KC_LCTL, KC_LALT, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_TRNS #define _______________LAYER3_R6_______________ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT [_LAYER3] = LAYOUT_wrapper( ____________LAYER3_L1____________, ____________LAYER3_R1____________, _______________LAYER3_L2_______________, _______________LAYER3_R2_______________, _______________LAYER3_L3_______________, _______________LAYER3_R3_______________, _______________LAYER3_L4_______________, _______________LAYER3_R4_______________, _______________LAYER3_L5_______________, _______________LAYER3_R5_______________, _______________LAYER3_L6_______________, _______________LAYER3_R6_______________ ), }; #ifdef OLED_ENABLE static void render_logo(void) { static const char PROGMEM raw_logo[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 192, 192, 224, 240, 240, 248, 248, 252, 252, 254, 254, 252, 252, 248, 248, 240, 224, 224, 192, 192, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 224, 240, 240, 248, 248, 252, 252, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 254, 252, 252, 120, 56, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 7, 7, 15, 31, 31, 63, 63, 127, 127, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 127, 63, 63, 31, 31, 143, 143, 135, 131, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 129, 131, 195, 195, 227, 241, 241, 248, 248, 252, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 254, 254, 252, 252, 248, 240, 240, 224, 224, 192, 192, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 24, 60, 60, 126, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 127, 127, 63, 63, 31, 31, 14, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 7, 15, 15, 31, 31, 63, 63, 127, 255, 255, 255, 127, 63, 63, 31, 31, 15, 15, 7, 3, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; oled_write_raw_P(raw_logo, sizeof(raw_logo)); } bool oled_task_user(void) { #ifdef CONSOLE_ENABLE /* uprintf("oled_task_user\n"); */ #endif if (is_keyboard_master()) { oled_write_P(PSTR("\n "), false); switch(get_highest_layer(layer_state)) { case _LAYER0: oled_write_P(PSTR("Default\n"),false); break; case _LAYER1: oled_write_P(PSTR("Lower\n"),false); break; case _LAYER2: oled_write_P(PSTR("Upper\n"),false); break; case _LAYER3: oled_write_P(PSTR("Gaming\n"),false); break; } } else { render_logo(); } return false; } #endif void keyboard_post_init_user(void) { oled_init(OLED_ROTATION_180); // debug_enable=true; // debug_matrix=true; // debug_keyboard=true; // debug_mouse=true; }