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

223 lines
12 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 {
_DVORAK,
_SPECIAL,
_GAMING,
};
enum custom_keycodes {
PLACEHOLDER = SAFE_RANGE, // can always be here
UM_PARN,
UM_CURL,
UM_BRAC,
UM_SPAM,
};
#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__)
#define ____ _______
#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] = {
/***************************************************************************
* DVORAK
***************************************************************************/
// R1 (10)
#define D_FN1__FN2__FN3__FN4__FN5_ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5
#define D_FN6__FN7__FN8__FN9__FN0_ TO(_GAMING), KC_F8, KC_F10, KC_F12, ____
// R2 (14)
#define _1_____2_____3_____4_____5 KC_1, KC_2, KC_3, KC_4, KC_5, KC_DEL
#define _6_____7_____8_____9_____0 KC_DEL, KC_6, KC_7, KC_8, KC_9, KC_0
// R3 (14)
#define QUOT__COMM__DOT____P_____Y KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_DEL
#define _F_____G_____C_____R_____L KC_DEL, KC_F, KC_G, KC_C, KC_R, KC_L
// R4 (14)
#define _A_____O_____E_____U_____I KC_A, KC_O, KC_E, KC_U, KC_I, UM_PARN
#define _D_____H_____T_____N_____S KC_COLN, KC_D, KC_H, KC_T, KC_N, KC_S
// R5 (14)
#define _EQL___Q_____J_____K_____X KC_EQL, KC_Q, KC_J, KC_K, KC_X, UM_PARN
#define _B_____M_____W_____V_____Z UM_BRAC, KC_B, KC_M, KC_W, KC_V, KC_Z
// R6 (14)
#define _______BOTTOM_LEFT________ KC_LCTL, KC_LSFT, KC_LALT, OSL(_SPECIAL), KC_MINS, KC_BSPC, KC_ENT
#define _______BOTTOM_RIGHT_______ OS_LSFT, KC_SPC, KC_SCLN, ____, ____, ____, KC_LALT
[_DVORAK] =
LAYOUT_wrapper(
D_FN1__FN2__FN3__FN4__FN5_, D_FN6__FN7__FN8__FN9__FN0_,
KC_GRAVE,_1_____2_____3_____4_____5, _6_____7_____8_____9_____0, UM_CURL,
KC_TAB, QUOT__COMM__DOT____P_____Y, _F_____G_____C_____R_____L, KC_BSLS,
KC_ESC, _A_____O_____E_____U_____I, _D_____H_____T_____N_____S, KC_SLASH,
KC_LGUI, _EQL___Q_____J_____K_____X, _B_____M_____W_____V_____Z, KC_LCTL,
_______BOTTOM_LEFT________, _______BOTTOM_RIGHT_______
),
/***************************************************************************
* SPECIAL
***************************************************************************/
#define ________SPECIAL_L0________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6
#define ________SPECIAL_L1________ ____, ____, ____, ____, ____, ____
#define ________SPECIAL_L2________ RALT(KC_Q), RALT(KC_P), RALT(KC_5), RALT(KC_Y), RALT(KC_S), ____
#define ________SPECIAL_L3________ ____, ____, ____, ____, ____, ____
#define ________SPECIAL_R0________ KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12
#define ________SPECIAL_R1________ ____, ____, ____, KC_UP, ____, ____
#define ________SPECIAL_R2________ ____, ____, KC_LEFT, KC_DOWN, KC_RIGHT, ____
#define ________SPECIAL_R3________ ____, ____, ____, ____, ____, QK_BOOT
[_SPECIAL]=
LAYOUT_wrapper(
D_FN1__FN2__FN3__FN4__FN5_, D_FN6__FN7__FN8__FN9__FN0_,
KC_GRAVE,________SPECIAL_L0________, ________SPECIAL_R0________, UM_CURL,
KC_TAB, ________SPECIAL_L1________, ________SPECIAL_R1________, KC_BSLS,
KC_ESC, ________SPECIAL_L2________, ________SPECIAL_R2________, KC_SLASH,
KC_LGUI, ________SPECIAL_L3________, ________SPECIAL_R3________, KC_LCTL,
_______BOTTOM_LEFT________, _______BOTTOM_RIGHT_______
),
/***************************************************************************
* GAMING
***************************************************************************/
#define G_FN1__FN2__FN3__FN4__FN5_ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5
#define G_FN6__FN7__FN8__FN9__FN0_ TO(_DVORAK), KC_F8, KC_F10, KC_F12, ____
#define _Q_____W_____E_____R_____T KC_Q, KC_W, KC_E, KC_R, KC_T, ____
#define _A_____S_____D_____F_____G KC_A, KC_S, KC_D, KC_F, KC_G, ____
#define _Z_____X_____C_____V_____B KC_Z, KC_X, KC_C, KC_V, KC_B, ____
#define _Y_____U_____I_____O_____P ____, KC_Y, KC_U, KC_I, KC_O, KC_P
#define _H_____J_____K_____L__SCLN ____, KC_H, KC_J, KC_K, KC_L, KC_SCLN
#define _N_____M____COMM__DOT___UP ____, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP
#define ____GAMING_BOTTOM_LEFT____ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_SPC, KC_ENT
#define ____GAMING_BOTTOM_RIGHT___ OS_LSFT, KC_SPC, KC_BSPC, UM_SPAM, KC_LEFT, KC_DOWN, KC_RIGHT
[_GAMING] =
LAYOUT_wrapper(
G_FN1__FN2__FN3__FN4__FN5_, G_FN6__FN7__FN8__FN9__FN0_,
KC_ESC, _1_____2_____3_____4_____5, _6_____7_____8_____9_____0, UM_CURL,
KC_TAB, _Q_____W_____E_____R_____T, _Y_____U_____I_____O_____P, KC_BSLS,
KC_LSFT,_A_____S_____D_____F_____G, _H_____J_____K_____L__SCLN, KC_SLASH,
KC_LSFT,_Z_____X_____C_____V_____B, _N_____M____COMM__DOT___UP, KC_LCTL,
____GAMING_BOTTOM_LEFT____, ____GAMING_BOTTOM_RIGHT___
),
};
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()) {
const char *layer_names[3]; // or { "DVORAK", "SPECIAL", "GAMING" };
layer_names[_DVORAK] = "DVORAK";
layer_names[_SPECIAL] = "SPECIAL";
layer_names[_GAMING] = "GAMING";
render_logo();
// Align right
size_t layer = get_highest_layer(layer_state);
oled_set_cursor(oled_max_chars() - 1 - strlen(layer_names[layer]), 1);
oled_write(layer_names[layer], false);
} 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;
}
bool RLFW = false;
bool RLBO = false;
uint8_t mods;
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
mods = get_mods();
switch (keycode) {
case UM_SPAM:
if (record->event.pressed) {
SEND_STRING("k"SS_DELAY(80)"k");
}
return false;
break;
case UM_CURL:
if (record->event.pressed) {
if (mods & MOD_MASK_SHIFT) {
SEND_STRING("}");
} else {
SEND_STRING("{");
}
set_mods(mods);
}
return false;
break;
case UM_BRAC:
if (record->event.pressed) {
if (mods & MOD_MASK_SHIFT) {
// Otherwise shift makes bracket into curly bracket
del_mods(MOD_MASK_SHIFT);
SEND_STRING("]");
} else {
SEND_STRING("[");
}
set_mods(mods);
}
return false;
break;
case UM_PARN:
if (record->event.pressed) {
if (mods & MOD_MASK_SHIFT) {
SEND_STRING(")");
} else {
SEND_STRING("(");
}
set_mods(mods);
}
return false;
break;
default:
return true;
}
}