2025-06-27 20:55:29 +02:00

199 lines
14 KiB
C

// 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;
}