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

183 lines
13 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;
// 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;
}