diff --git a/keyboards/draculad/keymaps/struckmb/config.h b/keyboards/draculad/keymaps/struckmb/config.h new file mode 100644 index 00000000..7b4886f0 --- /dev/null +++ b/keyboards/draculad/keymaps/struckmb/config.h @@ -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 . +*/ + +// 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 diff --git a/keyboards/draculad/keymaps/struckmb/keymap.c b/keyboards/draculad/keymaps/struckmb/keymap.c new file mode 100644 index 00000000..f4a6b6b8 --- /dev/null +++ b/keyboards/draculad/keymaps/struckmb/keymap.c @@ -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 . +*/ + +#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 diff --git a/keyboards/draculad/keymaps/struckmb/rules.mk b/keyboards/draculad/keymaps/struckmb/rules.mk new file mode 100644 index 00000000..7b8a3407 --- /dev/null +++ b/keyboards/draculad/keymaps/struckmb/rules.mk @@ -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 diff --git a/qmk.json b/qmk.json index 71874cb3..47446f12 100644 --- a/qmk.json +++ b/qmk.json @@ -1,7 +1,8 @@ { "userspace_version": "1.1", "build_targets": [ - ["cantor", "struckmb"], ["bastardkb/charybdis/3x6/v2/splinky_3", "struckmb"] + ["cantor", "struckmb"], + ["draculad", "struckmb"], ] } diff --git a/users/struckmb/struckmb.h b/users/struckmb/struckmb.h index d1ae92b0..f2cde9f1 100644 --- a/users/struckmb/struckmb.h +++ b/users/struckmb/struckmb.h @@ -45,6 +45,7 @@ enum userspace_layers { LAYER_POINTER, #endif // MOUSEKEY_ENABLE LAYER_ATTIC, + LAYER_X }; // Custom macro keycode ranges @@ -68,11 +69,11 @@ enum userspace_custom_keycodes { #ifdef MOUSEKEY_ENABLE MS_CSB1, #endif // MOUSEKEY_ENABLE -#ifdef ENCODER_ENABLE +#ifdef X__ENCODER_ENABLE // Encoder button(s) BS_ENC0, BS_ENC1, -#endif // ENCODER_ENABLE +#endif // X__ENCODER_ENABLE // use for keymap specific codes KEYMAP_SAFE_RANGE }; @@ -126,6 +127,7 @@ enum userspace_custom_keycodes { #else # define MS(kc) kc #endif +#define LX(kc) LT(LAYER_X, kc) // one shot modifier shortcuts #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 // thumbs #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_3_ _0R4_2_, KC_DEL +#define _0R4_3_ _0R4_2_, QK_REP /* THUMBS for base layers */ #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 /* 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_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 _QL2_5_ SY_L(DE_A), __HRM__QL2_4_ +# define __QR2_1_ DE_ODIA + +# 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 _QR1_5_ DE_Z, DE_U, DE_I, DE_O, DE_P -# define _QR2_5_ _HRM_QR2_4_, SY_R(DE_ODIA) +# define _QR1_5_ __QR1_4_, __QR1_1_ +# 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 _QL1_6_ _BASE_L_1_, _QL1_5_ -# define _QL2_6_ _BASE_L_2_, DE_A, __HRM__QL2_4_ +# define _QL1_6_ _BASE_L_1_, __QL1_1_, __QL1_4_ +# define _QL2_6_ _BASE_L_2_, __QL2_1_, __HRM__QL2_4_ # define _QL3_6_ _BASE_L_3_, _QL3_5_ # 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 _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_L_X_ _QL1_5_, __QR1_4_, DE_UDIA, _QL2_5_, _HRM_QR2_4_, DE_ADIA, _QL3_5_, _QR3_5_ #endif // QWERTY_ENABLE #ifdef BONE_ENABLE