// Copyright 2022 Philip Gaber (@qhga) // SPDX-License-Identifier: GPL-2.0-or-later #include QMK_KEYBOARD_H extern keymap_config_t keymap_config; // Defines names for use in layer keycodes and the keymap enum layer_names { _LAYER0, _LAYER1, _LAYER2, _LAYER3, }; enum custom_keycodes { PLACEHOLDER = SAFE_RANGE, // can always be here }; #define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__) #define OS_LSFT OSM(MOD_LSFT) /* #define OS_LGUI OSM(MOD_LGUI) */ /* #define OS_LALT OSM(MOD_LALT) */ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /*********************************************************************************** * DEFAULT - _LAYER0 ***********************************************************************************/ // R1 (10) #define ___HASH___F5___F9___NONE___QUOT__ KC_BSLS, KC_F5, KC_F9, KC_NO, KC_EQL #define _TO3___PLAY___MUTE___VOUP___VOLD_ 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_DEL, KC_PSCR, OSM(MOD_LSFT) [_LAYER0] = LAYOUT_wrapper(___HASH___F5___F9___NONE___QUOT__, _TO3___PLAY___MUTE___VOUP___VOLD_, __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_____________), /*********************************************************************************** * LOWER - _LAYER1 ***********************************************************************************/ // R1 (10) #define ____________LAYER1_L1____________ QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS #define ____________LAYER1_R1____________ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS // 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_______________), /*********************************************************************************** * UPPER - _LAYER2 ***********************************************************************************/ // R1 (10) #define ____________LAYER2_L1____________ KC_TRNS, 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_______________), /*********************************************************************************** * Gaming - _LAYER3 ***********************************************************************************/ // R1 (10) #define ____________LAYER3_L1____________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5 #define ____________LAYER3_R1____________ TO(_LAYER0), KC_NO, KC_NO, KC_TRNS, 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_______________), }; void matrix_scan_user(void) { #ifdef CONSOLE_ENABLE /* uprintf("matrix_scan_user\n"); */ #endif } #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 { // Center logo on second screen oled_set_cursor(6, 0); render_logo(); } return false; } #endif void keyboard_post_init_user(void) { oled_init(OLED_ROTATION_180); /* render_logo(); */ // Customise these values to desired behaviour /* debug_enable=true; */ /* debug_matrix=true; */ /* debug_keyboard=true; */ // debug_mouse=true; }