Add BM40 and corne

This commit is contained in:
Manuel Galle 2024-11-25 07:48:52 +00:00
parent 35edec2998
commit fdb7806a3c
11 changed files with 1407 additions and 2 deletions

View file

@ -0,0 +1,99 @@
/**
* Utilities for QMK oled animations
*
* Copyright (c) Marek Piechut
* MIT License
*/
#pragma once
//-------- CONFIGURATION START --------
#ifndef ANIM_RENDER_WPM
#define ANIM_RENDER_WPM true
#endif
#ifndef FAST_TYPE_WPM
#define FAST_TYPE_WPM 45 //Switch to fast animation when over words per minute
#endif
#ifndef ANIM_INVERT
#define ANIM_INVERT false //Invert animation color and background
#endif
#ifndef ANIM_BG
#define ANIM_BG 0x00
#endif
#ifndef ANIM_FRAME_TIME
#define ANIM_FRAME_TIME 250
#endif
//-------- CONFIGURATION END--------
#define ANIM_WPM_WIDTH 22
#define OLED_ROWS OLED_DISPLAY_HEIGHT / 4
static void oled_render_wpm(void) {
static char wpm_str[4];
sprintf(wpm_str, "%03d", get_current_wpm());
oled_set_cursor(0, 1);
oled_write_P(PSTR("WPM"), false);
oled_set_cursor(0, 2);
oled_write(wpm_str, false);
}
static void oled_render_anim_frame(const char **fast_frames, const char **slow_frames, uint8_t frames_len) {
static uint32_t anim_timer = 0;
static uint8_t current_frame = 0;
static int16_t frame_offset = ANIM_RENDER_WPM ? ANIM_WPM_WIDTH : 0;
static int8_t step = 8;
const uint8_t speed = get_current_wpm();
if (timer_elapsed32(anim_timer) > ANIM_FRAME_TIME && speed > 0) {
oled_set_cursor(0, 0);
anim_timer = timer_read32();
const bool is_fast = speed > FAST_TYPE_WPM;
const char *frame = is_fast ? fast_frames[current_frame] : slow_frames[current_frame];
const int8_t bg = ANIM_BG;
uint8_t frame_start_offset = ANIM_RENDER_WPM ? ANIM_WPM_WIDTH : 0;
current_frame = (current_frame + 1) % frames_len;
for(int offset = 0; offset <= OLED_MATRIX_SIZE; offset++) {
uint16_t col = offset % OLED_DISPLAY_WIDTH;
if(col < frame_start_offset) {
continue;
} else if (col < frame_offset || col > frame_offset + ANIM_FRAME_WIDTH) {
oled_write_raw_byte((ANIM_INVERT ? ~bg : bg), offset);
} else if (col <= OLED_DISPLAY_WIDTH) {
uint8_t row = offset / OLED_DISPLAY_WIDTH;
int frame_data_offset = ANIM_FRAME_WIDTH * row + col - frame_offset;
uint8_t col_data = pgm_read_byte(frame + frame_data_offset);
oled_write_raw_byte(ANIM_INVERT ? ~col_data : col_data, offset );
}
}
#ifdef ANIM_SCROLL
if(is_fast) {
#ifdef ANIM_BOUNCE
if(frame_offset + ANIM_FRAME_WIDTH > OLED_DISPLAY_WIDTH || frame_offset < frame_start_offset) {
step = -step;
}
#endif
frame_offset += step;
if(frame_offset >= OLED_DISPLAY_WIDTH) {
frame_offset = frame_start_offset - ANIM_FRAME_WIDTH + step;
}
} else if (frame_offset > (OLED_DISPLAY_WIDTH - ANIM_FRAME_WIDTH) || frame_offset < frame_start_offset) {
frame_offset = frame_start_offset;
}
#endif
}
if(ANIM_RENDER_WPM) {
oled_render_wpm();
}
}

View file

@ -0,0 +1,79 @@
/*
This is the c configuration file for the keymap
Copyright 2012 Jun Wako <wakojun@gmail.com>
Copyright 2015 Jack Humbert
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
/* Select hand configuration */
#define MASTER_LEFT
#define SPLIT_WPM_ENABLE
#define TAPPING_FORCE_HOLD
#define TAPPING_TERM 200
#define BOTH_SHIFTS_TURNS_ON_CAPS_WORD
#define COMBO_COUNT 4
#define OLED_FONT_H "keyboards/crkbd/lib/glcdfont.c"
// size optimisations
// #define NO_DEBUG
#define NO_ACTION_MACRO
#define NO_ACTION_FUNCTION
#define NO_ACTION_ONESHOT
#ifndef NO_DEBUG
#define NO_DEBUG
#endif // !NO_DEBUG
#if !defined(NO_PRINT) && !defined(CONSOLE_ENABLE)
#define NO_PRINT
#endif // !NO_PRINT
#ifdef RGB_MATRIX_ENABLE
# define RGB_MATRIX_SPLIT \
{ 27, 27 }
# define SPLIT_TRANSPORT_MIRROR
# undef ENABLE_RGB_MATRIX_ALPHAS_MODS
# undef ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
# undef ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
# undef ENABLE_RGB_MATRIX_BREATHING
# undef ENABLE_RGB_MATRIX_BAND_SAT
# undef ENABLE_RGB_MATRIX_BAND_VAL
# undef ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
# undef ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
# undef ENABLE_RGB_MATRIX_CYCLE_ALL
# undef ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
# undef ENABLE_RGB_MATRIX_CYCLE_SPIRAL
# undef ENABLE_RGB_MATRIX_RAINDROPS
# undef ENABLE_RGB_MATRIX_HUE_BREATHING
# undef ENABLE_RGB_MATRIX_PIXEL_FRACTAL
# undef ENABLE_RGB_MATRIX_TYPING_HEATMAP
# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE
# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
# undef ENABLE_RGB_MATRIX_SPLASH
# undef ENABLE_RGB_MATRIX_SOLID_SPLASH
#endif

View file

@ -0,0 +1,415 @@
/*
Copyright 2019 @foostan
Copyright 2020 Drashna Jaelre <@drashna>
Copyright 2021 Arda Kilicdagi <GH: @ardakilic, TW: @ardadev>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
// animation vars
#define ANIM_INVERT false
#define ANIM_RENDER_WPM true
#define FAST_TYPE_WPM 60 //Switch to fast animation when over words per minute
//custom codes
#define CTL_A LCTL_T(KC_A)
#define ALT_S LALT_T(KC_S)
#define CMD_D LGUI_T(KC_D)
#define SFT_F LSFT_T(KC_F)
#define CTL_QUOTE RCTL_T(KC_QUOT)
#define ALT_L RALT_T(KC_L)
#define CMD_K RGUI_T(KC_K)
#define SFT_J RSFT_T(KC_J)
#define XXX KC_NO
#define HMRW S(G(KC_SPACE))
#define ALF A(KC_SPACE)
#define MEDI_ESC LT(_MEDIA, KC_ESC)
#define NAV_SPC LT(_NAV, KC_SPC)
#define TIL_TAB LT(_TILNAV, KC_TAB)
#define SYM_ENT LT(_SYM, KC_ENT)
#define NUM_BSP LT(_NUM, KC_BSPC)
#define FUN_DEL LT(_FUN, KC_DEL)
#define SAVE G(KC_S)
#define PASTE TD(TD_ALFRED_PASTE)
#define COPY G(KC_C)
#define CUT G(KC_X)
#define UNDO G(KC_Z)
#define MOV_WES A(KC_F16)
#define MOV_SOU A(KC_F15)
#define MOV_NOR A(KC_F14)
#define MOV_EAS A(KC_F13)
#define FUL_FLO TD(TD_FULL_FLOAT)
#define MVW_1 S(A(KC_1))
#define MVW_2 S(A(KC_2))
#define MVW_3 S(A(KC_3))
#define MVW_4 S(A(KC_4))
#define MVW_5 S(A(KC_5))
#define MVW_6 S(A(KC_6))
#define MVW_7 S(A(KC_7))
#define MVW_8 S(A(KC_8))
#define MVW_9 S(A(KC_9))
#define FCW_1 C(KC_1)
#define FCW_2 C(KC_2)
#define FCW_3 C(KC_3)
#define FCW_4 C(KC_4)
#define FCW_5 C(KC_5)
#define FCW_6 C(KC_6)
#define FCW_7 C(KC_7)
#define FCW_8 C(KC_8)
#define FCW_9 C(KC_9)
#define MVW_LEF G(A(KC_F16))
#define MVW_RIG G(A(KC_F13))
#define FCS_MV1 TD(TD_MVW_1)
#define FCS_MV2 TD(TD_MVW_2)
#define FCS_MV3 TD(TD_MVW_3)
#define FCS_MV4 TD(TD_MVW_4)
#define FCS_MV5 TD(TD_MVW_5)
#define FCS_MV6 TD(TD_MVW_6)
#define FCS_MV7 TD(TD_MVW_7)
#define FCS_MV8 TD(TD_MVW_8)
#define FCS_MV9 TD(TD_MVW_9)
// Layers
enum {
_QWERTY,
_MEDIA,
_NAV,
_TILNAV,
_SYM,
_NUM,
_FUN
};
enum {
TD_ALFRED_PASTE, TD_SCREEN, TD_FULL_FLOAT, TD_MVW_1, TD_MVW_2, TD_MVW_3, TD_MVW_4, TD_MVW_5, TD_MVW_6, TD_MVW_7, TD_MVW_8, TD_MVW_9
};
enum custom_keycodes {
CURLIES = SAFE_RANGE,
SQUARES,
BRACKETS
};
enum combos {
IO_DASH,
KL_COLON,
SD_ALF,
WE_HMRW
};
const uint16_t PROGMEM io_combo[] = {KC_I, KC_O, COMBO_END};
const uint16_t PROGMEM kl_combo[] = {RGUI_T(KC_K), RALT_T(KC_L), COMBO_END};
const uint16_t PROGMEM sd_combo[] = {LALT_T(KC_S), LGUI_T(KC_D), COMBO_END};
const uint16_t PROGMEM we_combo[] = {KC_W, KC_E, COMBO_END};
combo_t key_combos[] = {
[IO_DASH] = COMBO(io_combo, KC_MINUS),
[KL_COLON] = COMBO(kl_combo, KC_SEMICOLON),
[SD_ALF] = COMBO(sd_combo, ALF),
[WE_HMRW] = COMBO(we_combo, HMRW)
};
tap_dance_action_t tap_dance_actions[] = {
[TD_ALFRED_PASTE] = ACTION_TAP_DANCE_DOUBLE( G(KC_V) , C(G(A(KC_V))) ),
[TD_SCREEN] = ACTION_TAP_DANCE_DOUBLE( S(G(KC_4)) , S(G(C(KC_4))) ),
[TD_FULL_FLOAT] = ACTION_TAP_DANCE_DOUBLE( A(KC_F18), C(A(KC_F18))),
[TD_MVW_1] = ACTION_TAP_DANCE_DOUBLE(FCW_1, MVW_1),
[TD_MVW_2] = ACTION_TAP_DANCE_DOUBLE(FCW_2, MVW_2),
[TD_MVW_3] = ACTION_TAP_DANCE_DOUBLE(FCW_3, MVW_3),
[TD_MVW_4] = ACTION_TAP_DANCE_DOUBLE(FCW_4, MVW_4),
[TD_MVW_5] = ACTION_TAP_DANCE_DOUBLE(FCW_5, MVW_5),
[TD_MVW_6] = ACTION_TAP_DANCE_DOUBLE(FCW_6, MVW_6),
[TD_MVW_7] = ACTION_TAP_DANCE_DOUBLE(FCW_7, MVW_7),
[TD_MVW_8] = ACTION_TAP_DANCE_DOUBLE(FCW_8, MVW_8),
[TD_MVW_9] = ACTION_TAP_DANCE_DOUBLE(FCW_9, MVW_9),
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
* BASE LAYER
[_QWERTY] = LAYOUT_wrapper( \
//,-----------------------------------------------------. ,----------------------------------------------------.
| hmrw | Q | W | E | R | T | | Y | U | I | O | P | Alfr |
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+-------|
| ------ | A | S | D | F | G | | H | J | K | L | ' | ; |
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+-------|
| SftCaps| Z | X | C | V | B | | N | M | , | . | / | ----- |
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+-------|
,-----------------------, ,-----------------------.
|Med/Esc|Nav/Spc|Til/Tab| |Sym/Ent|Num/Bsp|Fun/Del|
/|-------+-------+-------' +-------+-------+-------|\
),
*/
[_QWERTY] = LAYOUT_split_3x6_3(
XXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, XXX,
_______, CTL_A, ALT_S, CMD_D, SFT_F, KC_G, KC_H, SFT_J, CMD_K, ALT_L, CTL_QUOTE, XXX,
TD(TD_SCREEN), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______, /*KC_ENT*/
MEDI_ESC, NAV_SPC, TIL_TAB, SYM_ENT, NUM_BSP, FUN_DEL
),
/*
* Media LAYER
[_MEDIA] = LAYOUT_wrapper( \
//,-----------------------------------------------------. ,-----------------------------------------------------.
| BOOT | ------ | ------ | ------ | ------ | ------ | | ------ | RGBTOG | RGBMOD | RGBHUI | RGBSAI | RGBVAI |
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+------- |
| ------ |KC_LCTL |KC_LALT |KC_LGUI |KC_LSFT | ------ | | ------ |KC_MPRV |KC_VOLD |KC_VOLU |KC_MNXT | ------ |
//|------yy--+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
| ------ |KC_ALGR | ------ | ------ | ------ | ------ | | ------ | ------ | ------ |KC_BRMD |KC_BRMU | ------ |
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
,-----------------------, ,-----------------------.
| | | | |KC_MSTP|KC_MPLY|KC_MUTE|
/|-------+-------+-------' +-------+-------+-------|\
),
*/
[_MEDIA] = LAYOUT_split_3x6_3(
QK_BOOT, _______, _______, _______, _______, _______, _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI,
_______, KC_LCTL, KC_LALT, KC_LGUI, KC_LSFT, _______, _______, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT, _______,
_______, KC_ALGR, _______, _______, _______, _______, _______, _______, _______, KC_BRMD, KC_BRMU, _______,
_______, _______, _______, KC_MSTP, KC_MPLY, KC_MUTE
),
/*
* NAVIGATION LAYER
[_TPL] = LAYOUT_wrapper( \
//,-----------------------------------------------------. ,----------------------------------------------------.
| ------ | Save |AlfPaste| Copy | Cut | Undo | | Save |AlfPaste| Copy | Cut | Undo | ----- |
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+-------|
| ------ |KC_LCTL |KC_LALT |KC_LGUI |KC_LSFT | ------ | |KC_CAPS |KC_LEFT |KC_DOWN | KC_UP |KC_RGHT | ----- |
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+-------|
| ------ |KC_ALGR | ------ | ------ | ------ | ------ | | KC_INS |KC_HOME |KC_PGDN |KC_PGUP | KC_END | ----- |
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+-------|
,-----------------------, ,-----------------------.
| | | | | KC_ENT|KC_BSPC| KC_DEL|
/|-------+-------+-------' +-------+-------+-------|\
),
*/
[_NAV] = LAYOUT_split_3x6_3(
_______, SAVE, PASTE, COPY, CUT, UNDO, SAVE, PASTE, COPY, CUT, UNDO, _______,
_______, KC_LCTL, KC_LALT, KC_LGUI, KC_LSFT, _______, KC_CAPS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______,
_______, _______, _______, _______, _______, _______, KC_INS, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______,
_______, _______, _______, KC_ENT, KC_BSPC, KC_DEL
),
/*
* TILLING LAYER
Set to custom skhd shortcuts via yabai
[_TILNAV] = LAYOUT_wrapper( \
//,-----------------------------------------------------. ,----------------------------------------------------.
| ------ | Save |AlfPaste| Copy | Cut | Undo | | ------ | ------ | YA_BLN | YA_FUL | YA_ROT | ----- |
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+-------|
| ------ |KC_LCTL |KC_LALT |KC_LGUI |KC_LSFT | ------ | | ------ |YA_LEFT |YA_DOWN | YA_UP |YA_RGHT | ----- |
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+-------|
| ------ |KC_ALGR | ------ | ------ | ------ | ------ | | ------ | ------ | ------ | ------ | ------ | ----- |
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+-------|
,-----------------------, ,-----------------------.
| | | | | | | |
/|-------+-------+-------' +-------+-------+-------|\
),
*/
[_TILNAV] = LAYOUT_split_3x6_3(
_______, KC_NO, FCS_MV7, FCS_MV8, FCS_MV9, KC_NO, _______, _______, A(KC_F19), FUL_FLO, A(KC_F17), _______,
_______, MVW_LEF, FCS_MV4, FCS_MV5, FCS_MV6, MVW_RIG, _______, MOV_WES, MOV_SOU, MOV_NOR, MOV_EAS, _______,
_______, KC_NO, FCS_MV1, FCS_MV2, FCS_MV3, XXX, _______, _______, _______, _______, _______, _______,
_______, _______, _______, KC_LCTL, KC_LSFT, _______
),
/*
* SYMBOL LAYER
*
[_SYM] = LAYOUT_wrapper( \
//,-----------------------------------------------------. ,----------------------------------------------------.
| | PIPE | & | * | \ | [] | | | | | | | Bksp |
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+-------|
| | : | $ | % | ^ | () | | | SHIFT | CMD | ALT | CTRL | |
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+-------|
| | ~ | ! | @ | # | {} | | | | | | | |
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+-------|
,-----------------------, ,-----------------------.
| ; | - | _ | | | | |
/|-------+-------+-------' +-------+-------+-------|\
),
*/
[_SYM] = LAYOUT_split_3x6_3(
_______, KC_PIPE, KC_AMPR, KC_ASTR, KC_BSLS, SQUARES, _______, _______, _______, _______, _______, KC_BSPC,
_______, KC_COLN, KC_DLR, KC_PERC, KC_CIRC, BRACKETS, _______, KC_LSFT, KC_LGUI, KC_LALT, KC_LCTL, _______,
_______, KC_TILD, KC_EXLM, KC_AT, KC_HASH, CURLIES, _______, _______, _______, _______, _______, _______,
KC_SCLN, KC_PMNS, KC_UNDS, _______, _______, _______
),
/*
* NUMBER LAYER
[_TPL] = LAYOUT_wrapper( \
//,-----------------------------------------------------. ,----------------------------------------------------.
| | = | 7 | 8 | 9 | * | | | | | | | Bksp |
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+-------|
| | : | 4 | 5 | 6 | - | | | SHIFT | CMD | ALT | CTRL | |
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+-------|
| | / | 1 | 2 | 3 | + | | | | | | | |
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+-------|
,-----------------------, ,-----------------------.
| . | 0 | , | | | | |
/|-------+-------+-------' +-------+-------+-------|\
),
*/
[_NUM] = LAYOUT_split_3x6_3(
_______, KC_EQL, KC_7, KC_8, KC_9, KC_PAST, _______, _______, _______, _______, KC_BSPC, KC_BSPC,
_______, KC_COLN, KC_4, KC_5, KC_6, KC_PMNS, _______, KC_LSFT, KC_LGUI, KC_LALT, KC_LCTL, _______,
_______, KC_SLSH, KC_1, KC_2, KC_3, KC_PPLS, _______, _______, _______, _______, _______, _______,
KC_DOT, KC_0, KC_COMM, _______, _______, _______
),
/*
* FUN LAYER
[_TPL] = LAYOUT_wrapper( \
//,-----------------------------------------------------. ,----------------------------------------------------.
| | F12 | F7 | F8 | F9 |PRNTSCRN| | | | | | |QK_BOOT|
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+-------|
| | F11 | F4 | F5 | F6 | | | | SHIFT | CMD | ALT | CTRL | |
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+-------|
| | F10 | F1 | F2 | F3 | PAUSE | | | | | | | |
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+-------|
,-----------------------, ,-----------------------.
| ESC | SPACE | TAB | | | | |
/|-------+-------+-------' +-------+-------+-------|\
),
*/
[_FUN] = LAYOUT_split_3x6_3(
_______, KC_F12, KC_F7, KC_F8, KC_F9, KC_PSCR, _______, _______, _______, _______, _______, QK_BOOT,
_______, KC_F11, KC_F4, KC_F5, KC_F6, _______, _______, KC_LSFT, KC_LGUI, KC_LALT, KC_LCTL, _______,
_______, KC_F10, KC_F1, KC_F2, KC_F3, KC_PAUS, _______, _______, _______, _______, _______, _______,
KC_ESC, KC_SPC, KC_TAB, _______, _______, _______
)
};
#ifdef OLED_ENABLE
#include "mario.c"
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
if (!is_keyboard_master()) {
return OLED_ROTATION_180; // flips the display 180 degrees if offhand
}
return rotation;
}
void oled_render_layer_state(void) {
oled_write_P(PSTR("Layer: "), false);
switch (get_highest_layer(layer_state)) {
case _QWERTY:
oled_write_ln_P(PSTR("Default"), false);
break;
case _MEDIA:
oled_write_ln_P(PSTR("Media"), false);
break;
case _TILNAV:
oled_write_ln_P(PSTR("Tilnav"), false);
break;
case _NAV:
oled_write_ln_P(PSTR("Nav"), false);
break;
case _NUM:
oled_write_ln_P(PSTR("Num"), false);
break;
case _SYM:
oled_write_ln_P(PSTR("Sym"), false);
break;
case _FUN:
// case _ADJUST|_LOWER:
// case _ADJUST|_RAISE:
// case _ADJUST|_LOWER|_RAISE:
// case _ADJUST|_LOWER|_RAISE|_SPACE:
// case _ADJUST|_LOWER|_RAISE|_SPACE|_NUMPAD|_SODA:
oled_write_ln_P(PSTR("Fun"), false);
break;
default:
oled_write_ln_P(PSTR("?????"), false);
}
}
void render_bootmagic_status(bool status) {
/* Show Ctrl-Gui Swap options */
static const char PROGMEM logo[][2][3] = {
{{0x97, 0x98, 0}, {0xb7, 0xb8, 0}},
{{0x95, 0x96, 0}, {0xb5, 0xb6, 0}},
};
if (status) {
oled_write_ln_P(logo[0][0], false);
oled_write_ln_P(logo[0][1], false);
} else {
oled_write_ln_P(logo[1][0], false);
oled_write_ln_P(logo[1][1], false);
}
}
bool oled_task_user(void) {
if (is_keyboard_master()) {
oled_render_layer_state();
} else {
oled_render_anim();
}
return false;
}
#endif // OLED_DRIVER_ENABLE
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch(keycode) {
case CURLIES:
if (record->event.pressed) {
SEND_STRING("{}");
tap_code(KC_LEFT);
}
return false;
case BRACKETS:
if (record->event.pressed) {
SEND_STRING("()");
tap_code(KC_LEFT);
}
return false;
case SQUARES:
if (record->event.pressed) {
SEND_STRING("[]");
tap_code(KC_LEFT);
}
return false;
}
return true;
}

View file

@ -0,0 +1,211 @@
/**
* Big daemon animation with slow and fast typing mode
* Thanks to Pixel Frog for the art: https://pixelfrog-assets.itch.io
*
* ROTATION:
* OLED_ROTATION_0
*
* Copyright (c) Marek Piechut
* MIT License
*/
#pragma once
#define ANIM_SCROLL true
#define ANIM_FRAME_WIDTH 32
#define ANIM_SIZE 288
#define ANIM_BOUNCE true
#include "animation-utils.c"
static void oled_render_anim(void) {
// 'Idle 01', 72x32px
static const char mario_turn_right [] PROGMEM = {
// 'mario_turn_right', 32x32px
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xe0, 0x70, 0x38, 0xb8, 0x98, 0x90, 0x90,
0x10, 0x50, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xb0, 0xe0, 0xdc, 0xbf, 0x39, 0xd0, 0xd2, 0xdf, 0x8f, 0x19, 0x9f, 0xb9,
0xbf, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x31, 0x7b, 0xfb, 0xf1, 0x60, 0x01, 0x03, 0x03, 0x05, 0xc4, 0x67, 0x1f,
0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x1e, 0x1c, 0x1c, 0x0c, 0x06, 0x01, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// 'Idle 02', 72x32px
static const char mario_idle_right1 [] PROGMEM = {
// 'mario_idle_right1', 32x32px
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xe0, 0x70, 0x30, 0xb8, 0x98, 0x98, 0x98, 0xb0, 0x20,
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x8e, 0x9e, 0x98, 0x30, 0x7b, 0x6f, 0x67, 0x4c, 0x4f, 0x1c, 0x1c,
0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0e, 0x1f, 0x13, 0x0d, 0x1e, 0x1e, 0x1e, 0x2d, 0x33, 0x0e, 0x0c, 0x30,
0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0c, 0x08, 0x08, 0x08, 0x04, 0x02, 0x04, 0x00, 0x0c, 0x0e,
0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// 'Idle 03', 72x32px
static const char mario_idle_right2 [] PROGMEM = {
// 'mario_idle_right2', 32x32px
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xe0, 0x70, 0x30, 0xb8, 0x98, 0x98, 0x98, 0x30, 0x20,
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x1e, 0x18, 0xb0, 0xbb, 0x6f, 0x67, 0x4c, 0x5f, 0x1c, 0x1c,
0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x07, 0x0f, 0x2f, 0x26, 0x19, 0x3c, 0x3c,
0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x0c, 0x08, 0x08, 0x08, 0x04, 0x02, 0x04, 0x00, 0x0c, 0x0e, 0x07,
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// 'Idle 04', 72x32px
static const char mario_turn_left [] PROGMEM = {
// 'mario_turn_left', 32x32px
0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0xb0, 0x90, 0x98, 0xb8, 0x38, 0x70, 0xe0, 0xc0, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x98, 0xbf, 0xb9, 0x9f, 0x19, 0x8f, 0xdf, 0xd2, 0xd0, 0x39, 0xbf, 0xdc,
0xe0, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x1b, 0x67, 0x87, 0x04, 0x05, 0x03, 0x03, 0x01, 0x60, 0xf1, 0xfb,
0x7b, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x06, 0x0c, 0x1c, 0x1c, 0x1e, 0x0c,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// 'Idle 05', 72x32px
static const char mario_idle_left1 [] PROGMEM = {
// 'mario_idle_left1', 32x32px
0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0xb0, 0x98, 0x98, 0x98, 0xb8, 0x30, 0x70, 0xe0, 0xc0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x1c, 0x1c, 0x4f, 0x4c, 0x67, 0x6f, 0x7b, 0x30, 0x98, 0x9e,
0x8e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x30, 0x0c, 0x0e, 0x33, 0x2d, 0x1e, 0x1e, 0x1e, 0x0d, 0x13,
0x1f, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x0e, 0x0c, 0x00, 0x04, 0x02, 0x04, 0x08, 0x08, 0x08, 0x0c,
0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// 'Idle 06', 72x32px
static const char mario_idle_left2 [] PROGMEM = {
// 'mario_idle_left2', 32x32px
0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x30, 0x98, 0x98, 0x98, 0xb8, 0x30, 0x70, 0xe0, 0xc0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x1c, 0x1c, 0x5f, 0x4c, 0x67, 0x6f, 0xbb, 0xb0, 0x18, 0x1e,
0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x19, 0x26, 0x2f, 0x0f, 0x07, 0x07, 0x03, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x0e, 0x0c, 0x00, 0x04, 0x02, 0x04, 0x08, 0x08, 0x08,
0x0c, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// 'Run 01', 72x32px
// static const char crab_run_01 [] PROGMEM = {
// // 'mario_turn_right', 32x32px
// 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xe0, 0x70, 0x38, 0xb8, 0x98, 0x90, 0x90,
// 0x10, 0x50, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
// 0x00, 0x00, 0x00, 0x00, 0xb0, 0xe0, 0xdc, 0xbf, 0x39, 0xd0, 0xd2, 0xdf, 0x8f, 0x19, 0x9f, 0xb9,
// 0xbf, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
// 0x00, 0x00, 0x00, 0x00, 0x31, 0x7b, 0xfb, 0xf1, 0x60, 0x01, 0x03, 0x03, 0x05, 0xc4, 0x67, 0x1f,
// 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
// 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x1e, 0x1c, 0x1c, 0x0c, 0x06, 0x01, 0x01, 0x00, 0x00,
// 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
// };
// 'Run 02', 72x32px
static const char mario_run_right1 [] PROGMEM = {
// 'mario_run_right1', 32x32px
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x60, 0x70, 0xb0, 0xb8, 0x98, 0x98, 0x98, 0xb0,
0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x1e, 0x98, 0xb0, 0x3b, 0x6f, 0x67, 0x4c, 0x4f, 0x5c, 0x1f,
0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x06, 0x06, 0x06, 0x0e, 0xcd, 0x43, 0x0f, 0x07, 0x86, 0x80, 0xb1, 0x37, 0x06, 0x04,
0xd1, 0xe3, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00,
0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// 'Run 03', 72x32px
static const char mario_run_right2 [] PROGMEM = {
// 'mario_run_right2', 32x32px
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x60, 0x70, 0xb0, 0xb8, 0x98, 0x98, 0x98, 0xb0,
0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x1e, 0x98, 0xb0, 0x3b, 0x6f, 0x67, 0x4c, 0x4f, 0x5c, 0x1f,
0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x06, 0x06, 0x06, 0x0e, 0x0d, 0x03, 0x0f, 0x07, 0x06, 0x00, 0x31, 0x37, 0x06, 0x04,
0x31, 0x33, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0c, 0x08, 0x08, 0x08, 0x04, 0x02, 0x04, 0x00, 0x0c,
0x0e, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// 'Run 04', 72x32px
// static const char crab_run_04 [] PROGMEM = {
// // 'mario_turn_left', 32x32px
// 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0xb0, 0x90, 0x98, 0xb8, 0x38, 0x70, 0xe0, 0xc0, 0x00, 0x00,
// 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
// 0x00, 0x00, 0x00, 0x00, 0x98, 0xbf, 0xb9, 0x9f, 0x19, 0x8f, 0xdf, 0xd2, 0xd0, 0x39, 0xbf, 0xdc,
// 0xe0, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
// 0x00, 0x00, 0x00, 0x00, 0x01, 0x1b, 0x67, 0x87, 0x04, 0x05, 0x03, 0x03, 0x01, 0x60, 0xf1, 0xfb,
// 0x7b, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
// 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x06, 0x0c, 0x1c, 0x1c, 0x1e, 0x0c,
// 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
// };
// 'Run 05', 72x32px
static const char mario_run_left1 [] PROGMEM = {
// 'mario_run_left1', 32x32px
0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x60, 0x30, 0x30, 0x30, 0x70, 0x60, 0xe0, 0xc0, 0x80, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3f, 0xb9, 0x9f, 0x99, 0xcf, 0xdf, 0x76, 0x60, 0x31, 0x3c,
0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xc6, 0xc6, 0xa2, 0x08, 0x0c, 0x6e, 0x62, 0x00, 0x0c, 0x0e, 0x1f, 0x87, 0x9a,
0x1c, 0x0c, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x03, 0x07, 0x07, 0x00, 0x02, 0x01, 0x01, 0x01, 0x02, 0x04, 0x04, 0x00, 0x0f,
0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// 'Run 06', 72x32px
static const char mario_run_left2 [] PROGMEM = {
// 'mario_run_left2', 32x32px
0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0xb0, 0x98, 0x98, 0x98, 0xb8, 0xb0, 0x70, 0x60, 0xc0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x1f, 0x5c, 0x4f, 0x4c, 0x67, 0x6f, 0x3b, 0xb0, 0x98, 0x1e,
0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x03, 0x33, 0x31, 0x04, 0x06, 0x37, 0x31, 0x00, 0x06, 0x07, 0x0f, 0x03, 0x0d,
0x0e, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x03, 0x07, 0x0e, 0x0c, 0x00, 0x04, 0x02, 0x04, 0x08, 0x08, 0x08, 0x0c, 0x07,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
static const char* SLOW_TYPE_FRAMES [] = {
mario_turn_right,
mario_idle_right1,
mario_idle_right2,
mario_idle_right1,
mario_idle_right2,
mario_idle_right1,
mario_idle_right2,
mario_idle_right1,
mario_idle_right2,
mario_turn_left,
mario_idle_left1,
mario_idle_left2,
mario_idle_left1,
mario_idle_left2,
mario_idle_left1,
mario_idle_left2,
mario_idle_left1,
mario_idle_left2,
};
static const char* FAST_TYPE_FRAMES [] = {
mario_turn_right,
mario_run_right1,
mario_run_right2,
mario_run_right1,
mario_run_right2,
mario_run_right1,
mario_run_right2,
mario_run_right1,
mario_run_right2,
mario_turn_left,
mario_run_left1,
mario_run_left2,
mario_run_left1,
mario_run_left2,
mario_run_left1,
mario_run_left2,
mario_run_left1,
mario_run_left2,
};
oled_render_anim_frame(FAST_TYPE_FRAMES, SLOW_TYPE_FRAMES, 18);
}

View file

@ -0,0 +1,20 @@
OLED_ENABLE = yes
EXTRAKEY_ENABLE = yes # for media keys
TAP_DANCE_ENABLE = yes
BOOTMAGIC_ENABLE = yes
CAPS_WORD_ENABLE = yes
RGBLIGHT_ENABLE = no
RGB_MATRIX_ENABLE = yes
COMBO_ENABLE = yes
# bongo cat
WPM_ENABLE = yes
# bongo cat
# Size optimisations
CONSOLE_ENABLE = no
COMMAND_ENABLE = no
LTO_ENABLE = yes
SPACE_CADET_ENABLE = no
GRAVE_ESCAPE_ENABLE = no
MOUSEKEY_ENABLE = no
# Size optimisations END

View file

@ -0,0 +1,83 @@
#pragma once
/* Copyright 2021 Gabriel Bustamante Toledo
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
// default but used in macros
#undef TAPPING_TERM
#define TAPPING_TERM 200
// Prevent normal rollover on alphas from accidentally triggering mods.
// Enable rapid switch from tap to hold, disables double tap hold auto-repeat.
#define TAPPING_FORCE_HOLD
#define COMBO_COUNT 4
// Auto Shift
#define NO_AUTO_SHIFT_ALPHA
#define AUTO_SHIFT_TIMEOUT TAPPING_TERM
#define AUTO_SHIFT_NO_SETUP
// Mouse key speed and acceleration.
#undef MOUSEKEY_DELAY
#define MOUSEKEY_DELAY 0
#undef MOUSEKEY_INTERVAL
#define MOUSEKEY_INTERVAL 16
#undef MOUSEKEY_WHEEL_DELAY
#define MOUSEKEY_WHEEL_DELAY 0
#undef MOUSEKEY_MAX_SPEED
#define MOUSEKEY_MAX_SPEED 6
#undef MOUSEKEY_TIME_TO_MAX
#define MOUSEKEY_TIME_TO_MAX 64
#define RGBLIGHT_LAYERS
#define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF
#define RGBLIGHT_EFFECT_BREATHING
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
#define RGBLIGHT_EFFECT_SNAKE
#define RGBLIGHT_EFFECT_KNIGHT
#define RGBLIGHT_EFFECT_CHRISTMAS
#define RGBLIGHT_EFFECT_STATIC_GRADIENT
#define RGBLIGHT_EFFECT_RGB_TEST
#define RGBLIGHT_EFFECT_ALTERNATING
#define RGBLIGHT_EFFECT_TWINKLE
#define BOTH_SHIFTS_TURNS_ON_CAPS_WORD
#ifdef RGB_MATRIX_ENABLE
# undef ENABLE_RGB_MATRIX_ALPHAS_MODS
# undef ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
# undef ENABLE_RGB_MATRIX_BREATHING
# undef ENABLE_RGB_MATRIX_BAND_SAT
# undef ENABLE_RGB_MATRIX_BAND_VAL
# undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
# undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
# undef ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
# undef ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
# undef ENABLE_RGB_MATRIX_CYCLE_ALL
# undef ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
# undef ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
# undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN
# undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
# undef ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
# undef ENABLE_RGB_MATRIX_CYCLE_SPIRAL
# undef ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
# undef RGB_MATRIX_STARTUP_MODE
# define RGBLIGHT_HUE_STEP 20
#endif

View file

@ -0,0 +1,123 @@
/* Copyright 2021 Gabriel Bustamante Toledo
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
enum layers { BASE2, MEDIA, NAV, TILNAV, SYM, NUM, FUN };
enum {
TD_ALFRED_PASTE, TD_SCREEN, TD_WINDOW_RIGHT, TD_WINDOW_LEFT, TD_CURLIES, TD_BRACKS, TD_BRACKS_NORMAL
};
tap_dance_action_t tap_dance_actions[] = {
[TD_WINDOW_LEFT] = ACTION_TAP_DANCE_DOUBLE( A(G(KC_LEFT)) , G(A(C(KC_LEFT))) ),
[TD_WINDOW_RIGHT] = ACTION_TAP_DANCE_DOUBLE( A(G(KC_RIGHT)) , G(A(C(KC_RIGHT))) ),
[TD_CURLIES] = ACTION_TAP_DANCE_DOUBLE( KC_LCBR , KC_RCBR ),
[TD_BRACKS] = ACTION_TAP_DANCE_DOUBLE( KC_LBRC , KC_RBRC ),
[TD_BRACKS_NORMAL] = ACTION_TAP_DANCE_DOUBLE( KC_LPRN , KC_RPRN ),
[TD_ALFRED_PASTE] = ACTION_TAP_DANCE_DOUBLE( G(KC_V) , G(A(KC_V)) ),
[TD_SCREEN] = ACTION_TAP_DANCE_DOUBLE( S(G(KC_4)) , S(G(C(KC_4))) ),
};
void set_color(int r, int g, int b){
rgb_matrix_set_color(5, r, g, b);
rgb_matrix_set_color(6, r, g, b);
rgb_matrix_set_color(17, r, g, b);
rgb_matrix_set_color(18, r, g, b);
rgb_matrix_set_color(29, r, g, b);
rgb_matrix_set_color(30, r, g, b);
rgb_matrix_set_color(41, r, g, b);
}
// void rgb_matrix_indicators_user(void) {
// switch (get_highest_layer(layer_state)) {
// case BASE2:
// set_color(128, 64, 0);
// break;
// case MEDIA:
// set_color(50, 10, 20);
// break;
// case NAV:
// set_color(0, 40, 50);
// break;
// case TILNAV:
// set_color(0, 0, 50);
// break;
// case SYM:
// set_color(0, 50, 1.9);
// break;
// case NUM:
// set_color(10, 0, 50);
// break;
// case FUN:
// set_color(50, 0, 0);
// break;
// }
// }
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[BASE2] = LAYOUT_planck_mit(
KC_Q, KC_W, KC_E, KC_R, KC_T, TG(BASE2), KC_NO, KC_Y, KC_U, KC_I, KC_O, KC_P,
LCTL_T(KC_A), LALT_T(KC_S), LGUI_T(KC_D), LSFT_T(KC_F), KC_G, KC_NO, KC_NO, KC_H, RSFT_T(KC_J), LGUI_T(KC_K), LALT_T(KC_L), LCTL_T(KC_QUOT),
KC_Z, KC_X, KC_C, KC_V, KC_B, KC_NO, KC_NO, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,
TD(TD_SCREEN), KC_NO, LT(MEDIA, KC_ESC), LT(NAV, KC_SPC), LT(TILNAV, KC_TAB), A(KC_SPC), LT(SYM, KC_ENT), LT(NUM, KC_BSPC), LT(FUN, KC_DEL), TD(TD_WINDOW_LEFT), TD(TD_WINDOW_RIGHT)
),
[MEDIA] = LAYOUT_planck_mit(
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI,
KC_LCTL, KC_LALT, KC_LGUI, KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT,
KC_NO, KC_ALGR, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_BRMD, KC_BRMU, KC_NO,
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MSTP, KC_MPLY, KC_MUTE, KC_NO, KC_NO
),
[NAV] = LAYOUT_planck_mit(
G(KC_S), TD(TD_ALFRED_PASTE), G(KC_C), G(KC_X), G(KC_Z), KC_NO, KC_NO, G(KC_S), TD(TD_ALFRED_PASTE), G(KC_C), G(KC_X), G(KC_Z),
KC_LCTL, KC_LALT, KC_LGUI, KC_LSFT, KC_NO, KC_NO, KC_NO, KC_CAPS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
KC_NO, KC_ALGR, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_INS, KC_HOME, KC_PGDN, KC_PGUP, KC_END,
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_ENT, KC_BSPC, KC_DEL, KC_NO, KC_NO
),
[TILNAV] = LAYOUT_planck_mit(
G(KC_S), TD(TD_ALFRED_PASTE), G(KC_C), G(KC_X), G(KC_Z),KC_NO, KC_NO, KC_NO, KC_NO, A(KC_F19), A(KC_F18), A(KC_F17),
KC_LCTL, KC_LALT, KC_LGUI, KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, A(KC_F16), A(KC_F15), A(KC_F14), A(KC_F13),
KC_NO, KC_ALGR, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_BTN1, KC_BTN3, KC_BTN2, KC_NO, KC_NO
),
[SYM] = LAYOUT_planck_mit(
KC_PIPE, KC_AMPR, KC_ASTR, KC_BSLS, TD(TD_BRACKS), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_BSPC,
KC_COLN, KC_DLR, KC_PERC, KC_CIRC, TD(TD_BRACKS_NORMAL), KC_NO, KC_NO, KC_NO, KC_LSFT, KC_LGUI, KC_LALT, KC_LCTL,
KC_TILD, KC_EXLM, KC_AT, KC_HASH, TD(TD_CURLIES), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_ALGR, KC_NO,
KC_NO, KC_NO, KC_SCLN, KC_PMNS, KC_UNDS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
),
[NUM] = LAYOUT_planck_mit(
KC_EQL, KC_7, KC_8, KC_9, KC_PAST, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_BSPC,
KC_COLN, KC_4, KC_5, KC_6, KC_PMNS, KC_NO, KC_NO, KC_NO, KC_LSFT, KC_LGUI, KC_LALT, KC_LCTL,
KC_SLSH, KC_1, KC_2, KC_3, KC_PPLS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_ALGR, KC_NO,
KC_NO, KC_NO, KC_DOT, KC_0, KC_COMM, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
),
[FUN] = LAYOUT_planck_mit(
KC_F12, KC_F7, KC_F8, KC_F9, KC_PSCR, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, QK_BOOT,
KC_F11, KC_F4, KC_F5, KC_F6, KC_NO, KC_NO, KC_NO, KC_NO, KC_LSFT, KC_LGUI, KC_LALT, KC_LCTL,
KC_F10, KC_F1, KC_F2, KC_F3, KC_PAUS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_ALGR, KC_NO,
KC_NO, KC_NO, KC_APP, KC_SPC, KC_TAB, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
)
};

View file

@ -0,0 +1,6 @@
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
AUTO_SHIFT_ENABLE = yes # Auto Shift
TAP_DANCE_ENABLE = yes
BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
CAPS_WORD_ENABLE = yes

View file

@ -1,4 +1,7 @@
{
"userspace_version": "1.0",
"build_targets": []
"userspace_version": "1.1",
"build_targets": [
["kprepublic/bm40hsrgb/rev1", "mgallecom"],
["crkbd/r2g", "mgallecom"]
]
}

View file

366
users/mgallecom/mgallecom.h Normal file
View file

@ -0,0 +1,366 @@
/*
Copyright 2024 Brian Grant <@btgrant-76>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef USERSPACE
#define USERSPACE
#include "quantum.h"
enum layer_names {
_BASE,
_NRM,
_SYM,
_NUM,
_NAV,
_FUN,
_MSE,
_ADD
};
#define _MED _SYM
enum custom_keycodes {
SCRN2CLP = SAFE_RANGE, // macOS take screenshot to the clip board
SCRN2FL, // macOS take screenshot to a file
QUO_INST,
UP_DIR,//:../
LOG_OUT,
CAPWD_TG,
NEW_SAFE_RANGE
};
// Tap Dance declarations
enum {
TD_F1,
TD_F2,
TD_F6,
TD_F9,
TD_F12,
TD_DOT,
TD_ZERO,
TD_TWO,
TD_THREE,
TD_QUOT,
TD_DASH,
TD_GRV
};
/* Aliases */
#define HOLD XXXXXXX //:(hold)
/** Layer Keys **/
#define TAB_FUN LT(_FUN, KC_TAB) //:Tab/FUN
#define TAB_MSE LT(_MSE, KC_TAB) //:Tab/MSE
#define BS_NUM LT(_NUM, KC_BSPC) //:BS/NUM
#define ESC_SYM LT(_SYM, KC_ESC) //:Esc/SYM
#define ESC_MSE LT(_MSE, KC_ESC) //:Esc/MSE
#define ESC_FUN LT(_FUN, KC_ESC) //:Esc/FUN
#define ENT_MSE LT(_MSE, KC_ENT) //:Ent/MSE
#define ENT_SYM LT(_SYM, KC_ENT) //:Ent/SYM
#define SPC_NAV LT(_NAV, KC_SPC) //:Spc/NAV
#define DEL_MED LT(_MED, KC_DEL) //:Del/MED
#define DEL_MSE LT(_MSE, KC_DEL) //:Del/MSE
#define LPRN_MSE LT(_MSE, KC_LPRN)
/** Mod Tap Aliases **/
/*** Home Row Mods ***/
#define A_CTL LCTL_T(KC_A) //:A/Ctl
#define A_WIN LGUI_T(KC_A) //:A/WIN
#define S_ALT LALT_T(KC_S) //:S/Alt
#define D_GUI LGUI_T(KC_D) //:D/Cmd
#define D_CTL LCTL_T(KC_D) //:D/CTL
#define F_SFT LSFT_T(KC_F) //:F/Sft
#define J_SFT RSFT_T(KC_J) //:J/Sft
#define K_GUI RGUI_T(KC_K) //:K/Cmd
#define K_CTL RCTL_T(KC_K) //:K/CTL
#define L_ALT RALT_T(KC_L) //:L/Alt
#define SCLN_CTL RCTL_T(KC_SCLN) //:;_:/Ctl
#define SCLN_WIN RGUI_T(KC_SCLN) //:;_:/WIN
#define HRM_L KC_LCTL, KC_LALT, KC_LGUI, KC_LSFT //:Ctl||Opt||GUI||Sft
#define HRM_R KC_RSFT, KC_RGUI, KC_RALT, KC_RCTL //:Sft||GUI||Opt||Ctl
#define HRM_LWIN KC_LGUI, KC_LALT,KC_LCTL, KC_LSFT //:WIN||Opt||Ctl||Sft
#define HRM_RWIN KC_RSFT, KC_RCTL, KC_RALT, KC_RGUI //:Sft||Ctl||Opt||WIN
/*** Others ***/
#define ENT_SFT RSFT_T(KC_ENT) //:Ent/Sft
#define SLS_HYPR HYPR_T(KC_SLSH) //:/_?/Hypr
#define Z_HYPR HYPR_T(KC_Z) //:Z/Hypr
#define B_MEH MEH_T(KC_B) //:B/Meh
#define N_MEH MEH_T(KC_N) //:N/Meh
/*** Thumb keys ***/
#define DEL_GUI LGUI_T(KC_DEL) //:Del/Cmd
#define SPC_MEH MEH_T(KC_SPC)
/*** Shortcuts ***/
#define CUT LGUI(KC_X)
#define COPY LGUI(KC_C)
#define PASTE LGUI(KC_V)
#define UNDO LGUI(KC_Z)
#define REDO LSG(KC_Z)
#define CLIPBOARD_R REDO, PASTE, COPY, CUT, UNDO //:Redo||Paste||Copy||Cut||Undo
#define CLIPBOARD_L UNDO, CUT, COPY, PASTE, REDO //:Undo||Cut||Copy||Paste||Redo
/*** macOS navigation ***/
#define MISS_CTL LCTL(KC_UP)
#define LEFT_SPC LCTL(KC_LEFT)
#define RGHT_SPC LCTL(KC_RIGHT)
/*** Other shortcuts ***/
#define BACK LCMD(KC_LBRC) //:Back
#define FWD LCMD(KC_RBRC) //:Forward
#define TAB_LFT LSG(KC_LBRC) //:Tab_Lft
#define TAB_RGT LSG(KC_RBRC) //:Tab_Rght
#define Z_MUTE HYPR(KC_SPC) //:Zoom_Mute
#ifdef TAP_DANCE_ENABLE
// Tap Dances
#define F1_TD TD(TD_F1) //:F1
#define F2_TD TD(TD_F2) //:F2
#define F6_TD TD(TD_F6) //:F6
#define F9_TD TD(TD_F9) //:F9
#define F12_TD TD(TD_F12) //:F12
#define DOT_TD TD(TD_DOT) //:.
#define ZERO_TD TD(TD_ZERO) //:0
#define TWO_TD TD(TD_TWO) //:2
#define THREE_TD TD(TD_THREE) //:3
#define QUOT_TD TD(TD_QUOT) //:'_"
#define DASH_TD TD(TD_DASH) //:-__
#define GRV_TD TD(TD_GRV) //:`_~
#else
#define F1_TD KC_F1
#define F2_TD KC_F2
#define F6_TD KC_F6
#define F9_TD KC_F9
#define F12_TD KC_F12
#define DOT_TD KC_DOT
#define ZERO_TD KC_0
#define TWO_TD KC_2
#define THREE_TD KC_3
#define QUOT_TD KC_QUOT
#define DASH_TD KC_MINS
#define GRV_TD KC_GRV
#endif // TAP_DANCE_ENABLE
/* portable keymaps */
/** 10u **/
/*** base ***/
/* ╭────────┬────────┬────────┬────────┬────────╮ */
/* │ Q │ W │ E │ R │ T │ */
#define ___5BASE_1_L___ KC_Q, KC_W, KC_E, KC_R, KC_T
/* ├────────┼────────┼────────┼────────┼────────┤ */
/* │ A/Ctl │ S/Alt │ D/Cmd │ F/Sft │ G │ */
#define ___5BASE_2_L___ A_CTL, S_ALT, D_GUI, F_SFT, KC_G
/* ├────────┼────────┼────────┼────────┼────────┤ */
/* │ Z/Hypr │ X │ C │ V │ B/Meh │ */
#define ___5BASE_3_L___ Z_HYPR, KC_X, KC_C, KC_V, B_MEH
/* ╰────────┴────────┼────────┼────────┼────────┤ */
/* │ Tab/FUN│ BS/NUM │ Esc/MSE│ */
#define ___BASE_THUMB_L___ TAB_FUN, BS_NUM, ESC_MSE
/* ╰────────┴────────┴────────╯ */
/* ╭────────┬────────┬────────┬────────┬────────╮ */
/* │ Y │ U │ I │ O │ P │ */
#define ___5BASE_1_R___ KC_Y, KC_U, KC_I, KC_O, KC_P
/* ├────────┼────────┼────────┼────────┼────────┤ */
/* │ H │ J/Sft │ K/Cmd │ L/Alt │ ; :/Ctl│ */
#define ___5BASE_2_R___ KC_H, J_SFT, K_GUI, L_ALT, SCLN_CTL
/* ├────────┼────────┼────────┼────────┼────────┤ */
/* │ N/Meh │ M │ , < │ . > │/ ?/Hypr│ */
#define ___5BASE_3_R___ N_MEH, KC_M, KC_COMM, KC_DOT, SLS_HYPR
/* ├────────┼────────┼────────┼────────┴────────╯ */
/* │Ent/MSE │Spc/NAV │ Del/MED│ */
#define ___BASE_THUMB_R___ ENT_MSE, SPC_NAV, DEL_MED
/* ╰────────┴────────┴────────╯ */
/*** number ***/
/* ╭────────┬────────┬────────┬────────┬────────╮ */
/* │ Undo │ Cut │ Copy │ Paste │ Redo │ */
#define ___5NUM_1_L___ CLIPBOARD_L
/* ├────────┼────────┼────────┼────────┼────────┤ */
/* │ Ctl │ S/Alt │ Cmd │ Shift │Capwd TG│ */
#define ___5NUM_2_L___ KC_LCTL, S_ALT, KC_LGUI, KC_LSFT, CAPWD_TG
/* ├────────┼────────┼────────┼────────┼────────┤ */
/* │ Esc │ --- │ Leader │ Space │ BS │ */
#define ___5NUM_3_L___ KC_ESC, XXXXXXX, QK_LEAD, KC_SPC, KC_BSPC
/* ╰────────┴────────┼────────┼────────┼────────┤ */
/* │ Del │ (hold) │ BS │ */
#define ___NUM_THUMB_L___ KC_DEL, HOLD, KC_BSPC
/* ╰────────┴────────┴────────╯ */
/* ╭────────┬────────┬────────┬────────┬────────╮ */
/* │ [ { │ 7 │ 8 │ 9 │ ] } │ */
#define ___5NUM_1_R___ KC_LBRC, KC_7, KC_8, KC_9, KC_RBRC
/* ├────────┼────────┼────────┼────────┼────────┤ */
/* │ = + │ 4 │ 5 │ 6 │ ' " │ */
// TODO maybe try moving the quote hold to a different key?
#define ___5NUM_2_R___ KC_EQL, KC_4, KC_5, KC_6, QUOT_TD
/* ├────────┼────────┼────────┼────────┼────────┤ */
/* │ \ | │ 1 │ 2 │ 3 │ ` ~ │ */
#define ___5NUM_3_R___ KC_BSLS, KC_1, TWO_TD, THREE_TD, GRV_TD
/* ├────────┼────────┼────────┼────────┴────────╯ */
/* │ - _ │ 0 │ . │ */
#define ___NUM_THUMB_R___ KC_MINS, ZERO_TD, DOT_TD
/* ╰────────┴────────┴────────╯ */
/*** symbol ***/
/* ╭────────┬────────┬────────┬────────┬────────╮ */
/* │ --- │ --- │ --- │ --- │ --- │ */
#define ___5SYM_1_L___ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
/* ├────────┼────────┼────────┼────────┼────────┤ */
/* │ Med <==│ Vol Dn │ Vol Up │ Med==> │RGB Spd+│ */
#define ___5SYM_2_L___ KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT, RGB_SPI
/* ├────────┼────────┼────────┼────────┼────────┤ */
/* │ RGB tog│RGB mod+│RGB hue+│RGB sat+│RGB brt+│ */
#define ___5SYM_3_L___ RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI
/* ╰────────┴────────┼────────┼────────┼────────┤ */
/* │ Mute │Ply/Paus│ Stop │ */
#define ___SYM_THUMB_L___ KC_MUTE, KC_MPLY, KC_MSTP
/* ╰────────┴────────┴────────╯ */
/* ╭────────┬────────┬────────┬────────┬────────╮ */
/* │ { │ & │ * │ ) │ } │ */
#define ___5SYM_1_R___ KC_LCBR, KC_AMPR, KC_ASTR, KC_LPRN, KC_RCBR
/* ├────────┼────────┼────────┼────────┼────────┤ */
/* │ + │ $ │ % │ ^ │ " │ */
#define ___5SYM_2_R___ KC_PLUS, KC_DLR, KC_PERC, KC_CIRC, KC_DQT
/* ├────────┼────────┼────────┼────────┼────────┤ */
/* │ | │ ! │ @ │ # │ ~ │ */
#define ___5SYM_3_R___ KC_PIPE, KC_EXLM, KC_AT, KC_HASH, KC_TILD
/* ├────────┼────────┼────────┼────────┴────────╯ */
/* │ _ │ ( │ (hold) │ */
#define ___SYM_THUMB_R___ KC_UNDS, LPRN_MSE, HOLD
/* ╰────────┴────────┴────────╯ */
/*** navigation ***/
/* ╭────────┬────────┬────────┬────────┬────────╮ */
/* │ Tab Lft│ Back │ Forward│Tab Rght│ ../ │ */
#define ___5NAV_1_L___ TAB_LFT, BACK, FWD, TAB_RGT, UP_DIR
/* ├────────┼────────┼────────┼────────┼────────┤ */
/* │ Ctl │ Alt │ Cmd │ Shft │ --- │ */
#define ___5NAV_2_L___ HRM_L, XXXXXXX
/* ├────────┼────────┼────────┼────────┼────────┤ */
/* │ --- │ --- │ --- │ --- │ --- │ */
#define ___5NAV_3_L___ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
/* ╰────────┴────────┼────────┼────────┼────────┤ */
/* │ Del/Cmd│ Bs │ Ent │ */
#define ___NAV_THUMB_L___ DEL_GUI, KC_BSPC, KC_ENT
/* ╰────────┴────────┴────────╯ */
/* ╭────────┬────────┬────────┬────────┬────────╮ */
/* │ Redo │ Paste │ Copy │ Cut │ Undo │ */
#define ___5NAV_1_R___ CLIPBOARD_R
/* ├────────┼────────┼────────┼────────┼────────┤ */
/* │ Left │ Down │ Up │ Right │ Caps │ */
#define ___5NAV_2_R___ KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_CAPS
/* ├────────┼────────┼────────┼────────┼────────┤ */
/* │ Home │ PgDn │ PgUp │ End │ Ent │ */
#define ___5NAV_3_R___ KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_ENT
/* ├────────┼────────┼────────┼────────┴────────╯ */
/* │ --- │ (hold) │ --- │ */
#define ___NAV_THUMB_R___ XXXXXXX, HOLD, XXXXXXX
/* ╰────────┴────────┴────────╯ */
/*** function ***/
/* ╭────────┬────────┬────────┬────────┬────────╮ */
/* │ Log Out│ --- │Scrn2Clp│ Scrn2Fl│ --- │ */
#define ___5FUN_1_L___ LOG_OUT, XXXXXXX, SCRN2CLP, SCRN2FL, XXXXXXX
/* ├────────┼────────┼────────┼────────┼────────┤ */
/* │ Ctl │ Alt │ Cmd │ Shft │ScrnBrt+│ */
#define ___5FUN_2_L___ HRM_L, KC_BRIU
/* ├────────┼────────┼────────┼────────┼────────┤ */
/* │ --- │ --- │ --- │ --- │ScrnBrt-│ */
#define ___5FUN_3_L___ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_BRID
/* ╰────────┴────────┼────────┼────────┼────────┤ */
/* │ (hold) │ MSE │ Tab │ */
#define ___FUN_THUMB_L___ HOLD, MO(_MSE), XXXXXXX
/* ╰────────┴────────┴────────╯ */
/* ╭────────┬────────┬────────┬────────┬────────╮ */
/* │ --- │ F7 │ F8 │ F9 │ F12 │ */
#define ___5FUN_1_R___ XXXXXXX, KC_F7, KC_F8, F9_TD, F12_TD
/* ├────────┼────────┼────────┼────────┼────────┤ */
/* │ --- │ F4 │ F5 │ F6 │ F11 │ */
#define ___5FUN_2_R___ XXXXXXX, KC_F4, KC_F5, F6_TD, KC_F11
/* ├────────┼────────┼────────┼────────┼────────┤ */
/* │ --- │ F1 │ F2 │ F3 │ F10 │ */
#define ___5FUN_3_R___ XXXXXXX, F1_TD, F2_TD, KC_F3, KC_F10
/* ├────────┼────────┼────────┼────────┴────────╯ */
/* │ --- │ ADD │ --- │ */
#define ___FUN_THUMB_R___ XXXXXXX, MO(_ADD), XXXXXXX
/* ╰────────┴────────┴────────╯ */
/*** mouse ***/
/* ╭────────┬────────┬────────┬────────┬────────╮ */
/* │ Undo │ Cut │ Copy │ Paste │ Redo │ */
#define ___5MSE_1_L___ CLIPBOARD_L
/* ├────────┼────────┼────────┼────────┼────────┤ */
/* │Button 5│Button 3│Button 1│Button 2│ Wheel D│ */
#define ___5MSE_2_L___ KC_BTN5, KC_BTN3, KC_BTN1, KC_BTN2, XXXXXXX // KC_WH_D
/* ├────────┼────────┼────────┼────────┼────────┤ */
/* │ Esc │ Ctl │ Alt │ Cmd │ Shft │ */
#define ___5MSE_3_L___ KC_ESC, HRM_L // KC_WH_U // TODO how much am I using wheel up/down? If I shifted HRM over to the right, I could put Esc on Z like the default layer
/* ╰────────┴────────┼────────┼────────┼────────┤ */
/* │ --- │ (hold) │ (hold) │ */
#define ___MSE_THUMB_L___ XXXXXXX, HOLD, HOLD
/* ╰────────┴────────┴────────╯ */
/* ╭────────┬────────┬────────┬────────┬────────╮ */
/* │ --- │MseSpd 0│MseSpd 1│MseSpd 2│ --- │ */
#define ___5MSE_1_R___ XXXXXXX, KC_ACL0, KC_ACL1, KC_ACL2, XXXXXXX
/* ├────────┼────────┼────────┼────────┼────────┤ */
/* │ Mouse L│ Mouse D│ Mouse U│ Mouse R│ --- │ */
#define ___5MSE_2_R___ KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, XXXXXXX
/* ├────────┼────────┼────────┼────────┼────────┤ */
/* │ Wheel L│ Wheel U│ Wheel D│ Wheel R│ --- │ */
// wheel up/down are swapped intentionally so the actual directions are synced
// relative to "natural scrolling"
#define ___5MSE_3_R___ KC_WH_L, KC_WH_U, KC_WH_D, KC_WH_R, XXXXXXX
/* ├────────┼────────┼────────┼────────┴────────╯ */
/* │ (hold) │ (hold) │ --- │ */
#define ___MSE_THUMB_R___ HOLD, HOLD, XXXXXXX
/* ╰────────┴────────┴────────╯ */
/*** additional features ***/
/* ╭────────┬────────┬────────┬────────┬────────╮ */
/* │ Bootldr│ --- │ --- │DF: BASE│DF: NRM │ */
#define ___5ADD_1_L___ QK_BOOT, XXXXXXX, XXXXXXX, DF(_BASE), DF(_NRM)
/* ├────────┼────────┼────────┼────────┼────────┤ */
/* │ --- │DynTpRpt│ DynTpDn│ DynTpUp│ --- │ */
#define ___5ADD_2_L___ XXXXXXX, DT_PRNT, DT_DOWN, DT_UP, XXXXXXX
/* ├────────┼────────┼────────┼────────┼────────┤ */
/* │ --- │ ASftRpt│ ASft Dn│ ASft Up│ --- │ */
#define ___5ADD_3_L___ XXXXXXX, AS_RPT, AS_DOWN, AS_UP, XXXXXXX
/* ╰────────┴────────┼────────┼────────┼────────┤ */
/* │ --- │ --- │ --- │ */
#define ___ADD_THUMB_L___ XXXXXXX, XXXXXXX, XXXXXXX
/* ╰────────┴────────┴────────╯ */
/* ╭────────┬────────┬────────┬────────┬────────╮ */
/* │ Redo │ Paste │ Copy │ Cut │ Undo │ */
#define ___5ADD_1_R___ CLIPBOARD_R
/* ├────────┼────────┼────────┼────────┼────────┤ */
/* │ --- │ --- │ --- │ --- │ --- │ */
#define ___5ADD_2_R___ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
/* ├────────┼────────┼────────┼────────┼────────┤ */
/* │ --- │ --- │ --- │ --- │ --- │ */
#define ___5ADD_3_R___ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
/* ├────────┼────────┼────────┼────────┴────────╯ */
/* │ --- │ (hold) │ --- │ */
#define ___ADD_THUMB_R___ XXXXXXX, XXXXXXX, XXXXXXX
/* ╰────────┴────────┴────────╯ */