242 lines
13 KiB
C
242 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 {
|
||
|
_DVORAK,
|
||
|
_SPECIAL,
|
||
|
_FUNCTION,
|
||
|
_GAMING,
|
||
|
};
|
||
|
|
||
|
enum custom_keycodes {
|
||
|
PLACEHOLDER = SAFE_RANGE, // can always be here
|
||
|
UM_PARN,
|
||
|
UM_CURL,
|
||
|
UM_BRAC
|
||
|
};
|
||
|
|
||
|
#define OS_LSFT OSM(MOD_LSFT)
|
||
|
|
||
|
#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__)
|
||
|
|
||
|
#define ____ _______
|
||
|
#define OS_LSFT OSM(MOD_LSFT)
|
||
|
|
||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||
|
|
||
|
/***************************************************************************
|
||
|
* DVORAK
|
||
|
***************************************************************************/
|
||
|
// R1 (9)
|
||
|
#define _____FN1__FN2__FN3__FN4___ ____, KC_MS_BTN3, KC_MS_BTN1, KC_MS_BTN2
|
||
|
#define _____FN5__FN6__FN7__FN8___ KC_5, KC_6, KC_7, QK_BOOT
|
||
|
// 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 UM_BRAC, 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_LGUI, OSL(_SPECIAL), KC_MINS, KC_BSPC, KC_ENT
|
||
|
#define _______BOTTOM_RIGHT_______ OS_LSFT, KC_SPC, KC_SCLN, OSL(_FUNCTION),____, ____, ____
|
||
|
|
||
|
[_DVORAK] =
|
||
|
LAYOUT_wrapper(
|
||
|
_____FN1__FN2__FN3__FN4___, TO(_GAMING),_____FN5__FN6__FN7__FN8___,
|
||
|
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_LALT, _EQL___Q_____J_____K_____X, _B_____M_____W_____V_____Z, KC_LCTL,
|
||
|
_______BOTTOM_LEFT________, _______BOTTOM_RIGHT_______
|
||
|
),
|
||
|
/***************************************************************************
|
||
|
* SPECIAL
|
||
|
***************************************************************************/
|
||
|
|
||
|
#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_R1________ ____, ____, ____, KC_UP, ____, ____
|
||
|
#define ________SPECIAL_R2________ ____, ____, KC_LEFT, KC_DOWN, KC_RIGHT, ____
|
||
|
#define ________SPECIAL_R3________ ____, ____, ____, ____, ____, QK_BOOT
|
||
|
|
||
|
[_SPECIAL]=
|
||
|
LAYOUT_wrapper(
|
||
|
_____FN1__FN2__FN3__FN4___, ____,_____FN5__FN6__FN7__FN8___,
|
||
|
KC_GRAVE,_1_____2_____3_____4_____5, _6_____7_____8_____9_____0, UM_CURL,
|
||
|
KC_TAB, ________SPECIAL_L1________, ________SPECIAL_R1________, KC_BSLS,
|
||
|
KC_ESC, ________SPECIAL_L2________, ________SPECIAL_R2________, KC_SLASH,
|
||
|
KC_LALT, ________SPECIAL_L3________, ________SPECIAL_R3________, KC_LCTL,
|
||
|
_______BOTTOM_LEFT________, _______BOTTOM_RIGHT_______
|
||
|
),
|
||
|
|
||
|
/***************************************************************************
|
||
|
* FUNCTION
|
||
|
***************************************************************************/
|
||
|
#define _________FUNC_L0__________ ____, ____, ____, ____, ____, ____
|
||
|
#define _________FUNC_L1__________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6
|
||
|
#define _________FUNC_L2__________ ____, ____, ____, ____, ____, ____
|
||
|
#define _________FUNC_L3__________ ____, ____, ____, ____, ____, ____
|
||
|
|
||
|
#define _________FUNC_R0__________ ____, ____, ____, ____, ____, ____
|
||
|
#define _________FUNC_R1__________ KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12
|
||
|
#define _________FUNC_R2__________ ____, ____, ____, ____, ____, ____
|
||
|
#define _________FUNC_R3__________ ____, ____, ____, ____, ____, ____
|
||
|
|
||
|
[_FUNCTION] =
|
||
|
LAYOUT_wrapper(
|
||
|
_____FN1__FN2__FN3__FN4___, ____,_____FN5__FN6__FN7__FN8___,
|
||
|
KC_GRAVE,_________FUNC_L0__________, _________FUNC_R0__________, UM_CURL,
|
||
|
KC_TAB, _________FUNC_L1__________, _________FUNC_R1__________, KC_BSLS,
|
||
|
KC_ESC, _________FUNC_L2__________, _________FUNC_R2__________, KC_SLASH,
|
||
|
KC_LALT, _________FUNC_L3__________, _________FUNC_R3__________, KC_LCTL,
|
||
|
_______BOTTOM_LEFT________, _______BOTTOM_RIGHT_______
|
||
|
),
|
||
|
|
||
|
|
||
|
/***************************************************************************
|
||
|
* GAMING
|
||
|
***************************************************************************/
|
||
|
#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___SLSH ____, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH
|
||
|
#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_SCLN, ____, ____, ____, ____
|
||
|
|
||
|
[_GAMING] =
|
||
|
LAYOUT_wrapper(
|
||
|
_____FN1__FN2__FN3__FN4___, TO(_DVORAK),_____FN5__FN6__FN7__FN8___,
|
||
|
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___SLSH, KC_LCTL,
|
||
|
____GAMING_BOTTOM_LEFT____, _______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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||
|
0, 0, 0, 0, 0, 0,192,240,248,252, 60, 30, 30, 30, 30, 30,190,252,252,120, 0, 0, 30,254,254,254,192,224,224,240,240,120,124,124,124,252,252,248,248,240,224, 0, 0, 0, 0, 0,192,224,240,248,248,124,124, 60, 60,120,248,252,254,254,252, 0, 0, 0,254,254,248,248,252,126, 62, 62, 30, 30, 30, 60, 60,252,248,248,240,128, 0, 0,252,252,240,240,240,252,124, 62, 62, 30, 30, 30, 30, 30, 62,254,254,252,240,192, 2, 6, 62,254,252,248,224,192, 0, 0, 2, 2, 6, 6, 6, 14, 14,238,254,254,252, 56, 0, 0,
|
||
|
0, 0, 0, 0, 0, 7, 31, 63, 63,127,124,240,224,224,224,193,193,129, 0, 0, 0, 0, 0,255,255,255, 63, 15, 3, 1, 0, 0, 0, 0, 0, 0, 1,255,255,255,255, 0, 0, 0,252,255,255,255, 7, 3, 0, 0, 0, 0, 0, 0, 3,255,255,255,255, 0, 0, 0,255,255,255,255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,231,255,255,252, 0,255,255,255,255,255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,255,255,255,255,248, 0, 0, 0, 3, 31, 63,255,255,252,240,224,128,192,240,252,255,127, 15, 7, 0, 0, 0, 0,
|
||
|
0, 0,128,192,128,128, 0, 0, 0, 0, 0, 0, 1, 3, 7,159,255,255,254,248, 0, 0,254,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255, 0, 0, 0,255,255,255,255,240,192,128,128,128,192,192,240,248,255,255,255,255, 0, 0, 0,255,255,255,255,224,192,192,192,128,128,128,192,224,240,252,255,255,127, 31, 0,255,255,255,255,255,248,192,128,128,128,128,128,128,224,248,255,255,255,127, 63, 7, 0, 0, 0, 0, 0, 0, 1, 31,255,255,255,255,255,255, 31, 3, 0, 0, 0, 0, 0, 0, 0,
|
||
|
0, 0, 1, 3, 7, 7, 15, 14, 30, 30, 30, 30, 30, 30, 30, 31, 15, 7, 3, 0, 16, 24, 31, 15, 15, 7, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 24, 31, 31, 15, 7, 0, 0, 0, 0, 3, 7, 15, 15, 31, 31, 31, 31, 31, 15, 15, 7, 7, 7, 15, 31, 28, 24, 0,255,255,255,255, 15, 15, 15, 15, 15, 15, 15, 15, 7, 7, 3, 3, 1, 0, 0, 0,255,255,255,255, 7, 7, 7, 15, 15, 15, 15, 15, 15, 7, 7, 7, 7, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,248,255,255, 63, 15, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||
|
0, 0, 0, 0, 0, 0, 0,192, 96, 32, 48, 24, 8, 8, 8, 8, 24,240, 96, 0, 0, 0, 0, 0, 0, 0,224, 48, 24, 8, 8, 8, 8,200,120, 0, 0, 0, 0, 0, 0, 0, 0,192, 96, 48, 16, 48, 32,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,192,224,248,252,255,255, 31, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||
|
0, 0, 16, 56, 84, 16, 16, 19, 30, 12, 12, 12, 14, 10, 10, 11, 25, 17, 16, 16, 16, 24, 8, 8, 8, 8, 9, 11, 14, 6, 6, 6, 15, 9, 8, 24, 16, 16, 16, 16, 16, 24, 8, 15, 12, 28, 52, 38, 35, 33, 48, 16, 16, 16, 16, 16, 16, 16, 24, 24, 28, 28, 30, 30, 31, 31, 31, 15, 15, 6, 0, 0, 0, 0, 0, 16, 24, 24, 28, 28, 28, 30, 30, 30, 31, 15, 15, 15, 6, 0, 0, 0, 0, 0, 0, 8, 12, 12, 12, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 7, 3, 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(" "), false);
|
||
|
|
||
|
switch(get_highest_layer(layer_state)) {
|
||
|
case _DVORAK:
|
||
|
oled_write_P(PSTR("DVORAK <3\n"), false);
|
||
|
break;
|
||
|
case _GAMING:
|
||
|
oled_write_P(PSTR("GAMING <3\n"), false);
|
||
|
break;
|
||
|
case _SPECIAL:
|
||
|
oled_write_P(PSTR("SPECIAL\n"), false);
|
||
|
break;
|
||
|
case _FUNCTION:
|
||
|
oled_write_P(PSTR("FUNCTION\n"), false);
|
||
|
break;
|
||
|
default:
|
||
|
oled_write_P(PSTR("UNDEFINED S.O.S\n"), false);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
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_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;
|
||
|
}
|
||
|
}
|