Add draculad keyboard and some 3x5 tweaks

This commit is contained in:
Björn Struckmeier 2025-01-19 16:33:46 +01:00
commit 4607d8ea55
5 changed files with 207 additions and 12 deletions

View file

@ -0,0 +1,33 @@
/*
Copyright 2021 @mangoiv
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/>.
*/
// comment that out if your trackball is on the left side
#define TRACKBALL_RIGHT
#ifdef TRACKBALL_RIGHT
# define PIMORONI_TRACKBALL_INVERT_X
# define PIMORONI_TRACKBALL_INVERT_Y
#endif // TRACKBALL_RIGHT
#define POINTING_DEVICE_ROTATION_90
#define QWERTY_ENABLE
// #define BONE_ENABLE
#ifdef COMBO_ENABLE
# define EXTRA_SHORT_COMBOS
// # define COMBO_SHOULD_TRIGGER
#endif // COMBO_ENABLE

View file

@ -0,0 +1,144 @@
/*
Copyright 2021 @mangoiv
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 "struckmb.h"
#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
#ifdef QWERTY_ENABLE
[LAYER_QWERTY] = LAYOUT_wrapper(_QWERTY_3x5_, KC_MUTE, KC_MUTE, _0L4_3_, KC_BTN1, SFT_SPC, LT(LAYER_RAISE, RSE_BSP)),
[LAYER_X] = LAYOUT_wrapper(_QWERTY_L_X_, KC_MUTE, KC_MUTE, _0L4_3_, KC_BTN1, SFT_SPC, LT(LAYER_RAISE, RSE_BSP)),
#endif // ifdef QWERTY_ENABLE
#ifdef BONE_ENABLE
[LAYER_BONE] = LAYOUT_wrapper(_BONE_3x5_, KC_MUTE, KC_MUTE, _0L4_3_, KC_BTN1, SFT_SPC, LT(LAYER_RAISE, RSE_BSP)),
#endif // ifdef BONE_ENABLE
#ifdef COLEMAK_DH_ENABLE
[LAYER_COLEMAK_DH] = LAYOUT_wrapper(_COLEMAK_DH_3x5_, KC_MUTE, KC_MUTE, _0L4_3_, KC_BTN1, SFT_SPC, LT(LAYER_RAISE, RSE_BSP)),
#endif /* ifdef COLEMAK_DH_ENABLE */
[LAYER_SYMBL] = LAYOUT_wrapper(_SYMBL_3x5_, KC_MUTE, KC_MUTE, _SL4_3_, KC_BTN1, SFT_SPC, KC_RALT),
[LAYER_LOWER] = LAYOUT_wrapper(_LOWER_3x5_, KC_MUTE, KC_MUTE, _LL4_3_, KC_BTN1, SFT_SPC, ATT(KC_BSPC)),
[LAYER_RAISE] = LAYOUT_wrapper(_RAISE_3x5_, KC_MUTE, KC_MUTE, _RL4_3_, KC_BTN1, RSFT_T(KC_VOLU), KC_TRNS),
[LAYER_ATTIC] = LAYOUT_wrapper(_ATTIC_3x5_, KC_MUTE, KC_MUTE, _AL4_3_, KC_BTN1, RSFT_T(KC_BRIU), KC_TRNS),
};
#ifdef OLED_ENABLE
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
if (is_keyboard_master()) {
if (is_keyboard_left()) {
return OLED_ROTATION_270;
} else {
return OLED_ROTATION_90;
}
} else {
return OLED_ROTATION_0;
}
}
#endif
#ifdef X__OLED_ENABLE
static void render_logo(void) {
static const char PROGMEM drac_logo[] = {// drac_logo, 128x64px
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x0c, 0x18, 0x78, 0xf0, 0xf0, 0xe0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x07, 0x3e, 0xfc, 0xf0, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0x60, 0x30, 0x30, 0x30, 0x00, 0x00, 0xe0, 0xe0, 0x30, 0x30, 0x30, 0x30, 0x30, 0xe0, 0xe0, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x70, 0x30, 0x30, 0x30, 0x70, 0xe0, 0xc0, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x80, 0xe0, 0xf8, 0xf0, 0x80, 0xc0, 0xe0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfc, 0xf8, 0xe0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc0, 0xe0, 0x7c, 0x3f, 0x0f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xf8, 0xcc, 0x8c, 0x84, 0x86, 0x86, 0xc6, 0xff, 0xff, 0x80, 0x80, 0x00, 0x3f, 0x7f, 0xe0, 0xc0, 0x80, 0x80, 0x80, 0xc0, 0xf0, 0x71, 0x00, 0x00, 0x1f, 0xff, 0xff, 0x80, 0x80, 0x80, 0x80, 0xc0, 0xf8, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x03, 0x03, 0x07, 0x0f, 0x0f, 0x0f, 0x1f, 0x7f, 0x7f, 0x3e, 0x3e, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf8, 0xf8, 0xfc, 0xfc, 0xfe, 0xfe, 0x7e, 0x7c, 0x78, 0xe0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xc0, 0xc0, 0x60, 0x60, 0x60, 0x60, 0x60, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xe0, 0x60, 0x60, 0x60, 0xc0, 0xc0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x0f, 0x3e, 0x7c, 0xfc, 0xf8, 0xf8, 0xf8, 0xf8, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf8, 0xf8, 0xf8, 0xfc, 0xfc, 0xfc, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x3f, 0x1f, 0x0f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xf1, 0x99, 0x18, 0x08, 0x0c, 0x0c, 0x8c, 0xff, 0xff, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc1, 0x80, 0x00, 0x00, 0x00,
0x80, 0xc3, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x07, 0x0f, 0x0f, 0x0f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x0f, 0x0f, 0x07, 0x07, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x03, 0x03, 0x03, 0x00, 0x00, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
oled_write_raw_P(drac_logo, sizeof(drac_logo));
}
static void render_status(void) {
oled_write_P(PSTR("This is\n~~~~~~~~~\nDracu\nLad\n~~~~~~~~~\nv1.0\n~~~~~~~~~\n"), false);
uint8_t n = get_current_wpm();
char wpm_counter[4];
wpm_counter[3] = '\0';
wpm_counter[2] = '0' + n % 10;
wpm_counter[1] = (n /= 10) % 10 ? '0' + (n) % 10 : (n / 10) % 10 ? '0' : ' ';
wpm_counter[0] = n / 10 ? '0' + n / 10 : ' ';
oled_write_P(PSTR("WPM:"), false);
oled_write(wpm_counter, false);
led_t led_state = host_keyboard_led_state();
oled_write_P(PSTR("\nCaps: "), false);
oled_write_P(led_state.caps_lock ? PSTR("on ") : PSTR("off"), false);
oled_write_P(PSTR("\n"), false);
// switch (get_highest_layer(layer_state)) {
// case _BASE:
// oled_write_P(PSTR("Base "), false);
// break;
// case _NUM:
// oled_write_P(PSTR("Numbers"), false);
// break;
// case _SYMB:
// oled_write_P(PSTR("Symbols"), false);
// break;
// case _ADJ:
// oled_write_P(PSTR("Adjust "), false);
// break;
// case _MUS:
// oled_write_P(PSTR("Mouse "), false);
// break;
// default:
// oled_write_P(PSTR("Unkn "), false);
// break;
// }
}
bool oled_task_user(void) {
if (is_keyboard_master()) {
render_status(); // Renders the current keyboard state (layer, lock, caps, scroll, etc)
} else {
render_logo();
}
return false;
}
#endif
#ifdef ENCODER_ENABLE
bool encoder_update_user(uint8_t index, bool clockwise) {
if (index == 0) {
// Volume control
tap_code(clockwise ? KC_VOLU : KC_VOLD);
}
// Page up/Page down
tap_code(clockwise ? KC_PGUP : KC_PGDN);
return true;
}
#endif
#ifdef X__COMBO_ENABLE
# ifdef QWERTY_ENABLE
const uint16_t PROGMEM combo_qwerty_ue[] = {DE_Q, DE_P, COMBO_END};
const uint16_t PROGMEM combo_qwerty_ae[] = {DE_Q, DE_OE, COMBO_END};
combo_t key_combos[] = {
COMBO(combo_qwerty_ue, DE_UDIA),
COMBO(combo_qwerty_ae, DE_ADIA),
};
# endif // QWERTY_ENABLE
# ifdef COMBO_SHOULD_TRIGGER
bool combo_should_trigger(uint16_t combo_index, combo_t *combo, uint16_t keycode, keyrecord_t *record) {
# ifdef QWERTY_ENABLE
/* Trigger qwerty umlaut combos only on qwerty layer */
return layer_state_is(LAYER_QWERTY);
# endif // QWERTY_ENABLE
};
# endif // COMBO_SHOULD_TRIGGER
#endif // COMBO_ENABLE

View file

@ -0,0 +1,7 @@
# only uncomment on the side you have your trackball on
POINTING_DEVICE_ENABLE = yes
POINTING_DEVICE_DRIVER = pimoroni_trackball
QUANTUM_LIB_SRC += i2c_master.c
OLED_DRIVER_ENABLE = yes
MOUSEKEY_ENABLE = no

View file

@ -1,7 +1,8 @@
{ {
"userspace_version": "1.1", "userspace_version": "1.1",
"build_targets": [ "build_targets": [
["cantor", "struckmb"],
["bastardkb/charybdis/3x6/v2/splinky_3", "struckmb"] ["bastardkb/charybdis/3x6/v2/splinky_3", "struckmb"]
["cantor", "struckmb"],
["draculad", "struckmb"],
] ]
} }

View file

@ -45,6 +45,7 @@ enum userspace_layers {
LAYER_POINTER, LAYER_POINTER,
#endif // MOUSEKEY_ENABLE #endif // MOUSEKEY_ENABLE
LAYER_ATTIC, LAYER_ATTIC,
LAYER_X
}; };
// Custom macro keycode ranges // Custom macro keycode ranges
@ -68,11 +69,11 @@ enum userspace_custom_keycodes {
#ifdef MOUSEKEY_ENABLE #ifdef MOUSEKEY_ENABLE
MS_CSB1, MS_CSB1,
#endif // MOUSEKEY_ENABLE #endif // MOUSEKEY_ENABLE
#ifdef ENCODER_ENABLE #ifdef X__ENCODER_ENABLE
// Encoder button(s) // Encoder button(s)
BS_ENC0, BS_ENC0,
BS_ENC1, BS_ENC1,
#endif // ENCODER_ENABLE #endif // X__ENCODER_ENABLE
// use for keymap specific codes // use for keymap specific codes
KEYMAP_SAFE_RANGE KEYMAP_SAFE_RANGE
}; };
@ -126,6 +127,7 @@ enum userspace_custom_keycodes {
#else #else
# define MS(kc) kc # define MS(kc) kc
#endif #endif
#define LX(kc) LT(LAYER_X, kc)
// one shot modifier shortcuts // one shot modifier shortcuts
#define OSM_ALT OSM(MOD_LALT) #define OSM_ALT OSM(MOD_LALT)
@ -187,9 +189,9 @@ void symR_reset(tap_dance_state_t *state, void *user_data);
#define _ADD_R_3_ KC_RGUI #define _ADD_R_3_ KC_RGUI
// thumbs // thumbs
#define _0L4_2_ SFT_ENT, LOW_TAB #define _0L4_2_ SFT_ENT, LOW_TAB
#define _0L4_3_ QK_REP, _0L4_2_ #define _0L4_3_ KC_ESC, _0L4_2_
#define _0R4_2_ RSE_BSP, SFT_SPC #define _0R4_2_ RSE_BSP, SFT_SPC
#define _0R4_3_ _0R4_2_, KC_DEL #define _0R4_3_ _0R4_2_, QK_REP
/* THUMBS for base layers */ /* THUMBS for base layers */
#define _THUMBS_3_2_ _0L4_3_, _0R4_2_ #define _THUMBS_3_2_ _0L4_3_, _0R4_2_
@ -197,24 +199,32 @@ void symR_reset(tap_dance_state_t *state, void *user_data);
#ifdef QWERTY_ENABLE #ifdef QWERTY_ENABLE
/* QWERTY layout */ /* QWERTY layout */
# define __QL1_1_ DE_Q
# define __QL1_4_ DE_W, DE_E, DE_R, DE_T
# define __QR1_4_ DE_Z, DE_U, DE_I, DE_O
# define __QR1_1_ DE_P
# define __QL2_1_ DE_A
# define __HRM__QL2_4_ HRML(DE_S, DE_D, DE_F), DE_G # define __HRM__QL2_4_ HRML(DE_S, DE_D, DE_F), DE_G
# define _HRM_QR2_4_ DE_H, HRMR(DE_J, DE_K, DE_L) # define _HRM_QR2_4_ DE_H, HRMR(DE_J, DE_K, DE_L)
# define _QL1_5_ DE_Q, DE_W, DE_E, DE_R, DE_T # define __QR2_1_ DE_ODIA
# define _QL2_5_ SY_L(DE_A), __HRM__QL2_4_
# define _QL1_5_ LX(__QL1_1_), __QL1_4_
# define _QL2_5_ SY_L(__QL2_1_), __HRM__QL2_4_
# define _QL3_5_ MS(DE_Y), DE_X, DE_C, DE_V, DE_B # define _QL3_5_ MS(DE_Y), DE_X, DE_C, DE_V, DE_B
# define _QR1_5_ DE_Z, DE_U, DE_I, DE_O, DE_P # define _QR1_5_ __QR1_4_, __QR1_1_
# define _QR2_5_ _HRM_QR2_4_, SY_R(DE_ODIA) # define _QR2_5_ _HRM_QR2_4_, SY_R(__QR2_1_)
# define _QR3_5_ DE_N, DE_M, DE_COMM, DE_DOT, MS(DE_SS) # define _QR3_5_ DE_N, DE_M, DE_COMM, DE_DOT, MS(DE_SS)
// //
# define _QL1_6_ _BASE_L_1_, _QL1_5_ # define _QL1_6_ _BASE_L_1_, __QL1_1_, __QL1_4_
# define _QL2_6_ _BASE_L_2_, DE_A, __HRM__QL2_4_ # define _QL2_6_ _BASE_L_2_, __QL2_1_, __HRM__QL2_4_
# define _QL3_6_ _BASE_L_3_, _QL3_5_ # define _QL3_6_ _BASE_L_3_, _QL3_5_
# define _QR1_6_ _QR1_5_, _BASE_R_1_(DE_UDIA) # define _QR1_6_ _QR1_5_, _BASE_R_1_(DE_UDIA)
# define _QR2_6_ _HRM_QR2_4_, DE_ODIA, _BASE_R_2_(DE_ADIA) # define _QR2_6_ _HRM_QR2_4_, __QR2_1_, _BASE_R_2_(DE_ADIA)
# define _QR3_6_ _QR3_5_, _BASE_R_3_(KC_ENT) # define _QR3_6_ _QR3_5_, _BASE_R_3_(KC_ENT)
// //
# define _QWERTY_3x5_ _QL1_5_, _QR1_5_, _QL2_5_, _QR2_5_, _QL3_5_, _QR3_5_ # define _QWERTY_3x5_ _QL1_5_, _QR1_5_, _QL2_5_, _QR2_5_, _QL3_5_, _QR3_5_
# define _QWERTY_3x6_ _QL1_6_, _QR1_6_, _QL2_6_, _QR2_6_, _QL3_6_, _QR3_6_ # define _QWERTY_3x6_ _QL1_6_, _QR1_6_, _QL2_6_, _QR2_6_, _QL3_6_, _QR3_6_
# define _QWERTY_L_X_ _QL1_5_, __QR1_4_, DE_UDIA, _QL2_5_, _HRM_QR2_4_, DE_ADIA, _QL3_5_, _QR3_5_
#endif // QWERTY_ENABLE #endif // QWERTY_ENABLE
#ifdef BONE_ENABLE #ifdef BONE_ENABLE