Merge pull request #6 from t4corun/mousecombo

Implementing Combos for Mouse Buttons
This commit is contained in:
Victor 2024-04-20 15:49:42 -05:00 committed by GitHub
commit ce8766d68f
Failed to generate hash of commit
24 changed files with 419 additions and 310 deletions

162
README.md
View file

@ -2,10 +2,29 @@
My userspace for building QMK firmware via GitHub Actions. This does not require a local build environment where files are placed within keyboard subfolders. My userspace for building QMK firmware via GitHub Actions. This does not require a local build environment where files are placed within keyboard subfolders.
The custom layout optimizes for programming (SQL, Powershell, C) and minimizes holds for comfort. It started from [Manna Harbor Miryoku](https://github.com/manna-harbour/miryoku) and took heavy influence from [Jonas Hietala T-34](https://www.jonashietala.se/series/t-34/) ## Layout
The custom layout optimizes for programming (SQL, Powershell, C) and minimizes holds for comfort. It started from [Manna Harbor Miryoku](https://github.com/manna-harbour/miryoku) and took heavy influence from [Jonas Hietala T-34](https://www.jonashietala.se/series/t-34/). The keymap designed for split 3x5, two thumbs keys, dual encoders, and combined with a Ploopy Nano trackball mouse. Design themes:
- Releasing all keys always brings you back to base layer
- Keeping certain keys consistent on all layers for better muscle memory
- Numbers and function keys are positioned similarly
- Symbols important for powershell / writing are positioned under stronger fingers
- Game keymap that doesn't require massive game key bind changes. Tested on Resident Evil 4 Remake
Notes:
- Outside thumb keys are encoder clicks. Some keyboards may have extra thumb keys
- Pressing Pointer DPI and Drag Scroll Toggle will enter bootlaoder on Ploopy Nano
![image](my_keymap.png)
## Features ## Features
### Build Non-Tree Keyboards
- Extended the [qmk/.github](https://github.com/qmk/.github) userspace build actions to build non-tree qmk keyboards (e.g. Barbellboards Rollow). This works by copying keyboard definitions from the userspace to the qmk_firmware keyboards folder in the container. The list of keyboards to copy are defined in `qmk_nontree.json`
### Layout Wrapper Macros ### Layout Wrapper Macros
A single keymap layout can be shared with multiple keyboards by using C preprocessor macros. These macros are referenced in the keyboard JSON files, and the build process will expand them into a transient keymap.c file during compile time. A single keymap layout can be shared with multiple keyboards by using C preprocessor macros. These macros are referenced in the keyboard JSON files, and the build process will expand them into a transient keymap.c file during compile time.
@ -58,12 +77,6 @@ Enables trackball functionality on certain boards (e.g., Ploopy Nano and Bastard
Note: `MOUSEKEY_ENABLE` do not need to be enabled in tandem with this to get the mouse buttons. Note: `MOUSEKEY_ENABLE` do not need to be enabled in tandem with this to get the mouse buttons.
### Mouse Keys
Enables mouse emulation for all boards. Required when using the Ploopy Nano as that has no mouse buttons.
Hold `a` to enter `_MOUSE` layer. Use right side directional pad (e.g. IJKL) to move the cursor and left side thumb keys for basic mouse clicking.
### RGB Matrix ### RGB Matrix
Taste the rainbow for boards with RGB LEDs and large MCU memory footprints. Enables RGB lighting effects and layer/host status indicators. Review the keyboard files to identify the key position for each LED and update the preprocessor definitions in `config\rgbmatrix_config.h` Taste the rainbow for boards with RGB LEDs and large MCU memory footprints. Enables RGB lighting effects and layer/host status indicators. Review the keyboard files to identify the key position for each LED and update the preprocessor definitions in `config\rgbmatrix_config.h`
@ -76,140 +89,7 @@ Enables keyboard status visualization. Shows currently selected layer, active mo
### Combos ### Combos
Enables simultaneous pressing of key combinations to get another. Handy when there are not enough keys on the keyboard Enables simultaneous pressing of key combinations to get another. Handy when there are not enough keys on the keyboard. Primarily used to implement mouse buttons and make important keys (enter, backspace, etc) available on base layer
**Note** Framework is present but disabled during redesign
## Layout
This is the keymap designed for split 3x5 layout, two thumb keys on each side, and dual encoders. Emphasis on:
- Releasing all keys always brings you back to base layer
- Outside thumb keys are encoder clicks
- Keeping certain keys consistent on all layers for better muscle memory
- Numbers and function keys are positioned similarly
- Symbols important for powershell / writing are positioned under stronger fingers
- Game keymap that doesn't require massive game key bind changes. Tested on Resident Evil 4 Remake
Additional keys may be mapped if present. Check each keyboard's `keymap.c` for more information
```text
╭──────┬──────┬──────┬──────┬──────╮ ╭──────┬──────┬──────┬──────┬──────╮
│ q │ w │ e │ r │ t │ │ y │ u │ i │ o │ p │
├──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┤
│ a mou│ s │ d │ f │ g │ qwerty │ h │ j │ k │ l │ ' " │
├──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┤
│ z │ x │ c │ v │ b │ │ n │ m │ , ( │ . ) │ - _ │
╰──────┴──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┴──────╯
enc: mwheel │ │ num │ mou │ │ spc │ nav │ mute │ enc: volume
╰──────┴──────┴──────╯ ╰──────┴──────┴──────╯
╭──────┬──────┬──────┬──────┬──────╮ ╭──────┬──────┬──────┬──────┬──────╮
│ q │ w │ f │ p │ b │ │ j │ l │ u │ y │ o │
├──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┤
│ a mou│ r │ s │ t │ g │ colemak │ m │ n │ e │ i │ ' " │
├──────┼──────┼──────┼──────┼──────┤ dh ├──────┼──────┼──────┼──────┼──────┤
│ z │ x │ c │ d │ v │ │ k │ h │ , ( │ . ) │ - _ │
╰──────┴──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┴──────╯
enc: mwheel │ │ num │ mou │ │ spc │ nav │ mute │ enc: volume
╰──────┴──────┴──────╯ ╰──────┴──────┴──────╯
Notes:
- swapped o and repeat on this keymap to keep repeat key in the same position across layers
╭──────┬──────┬──────┬──────┬──────╮ ╭──────┬──────┬──────┬──────┬──────╮
│ tab │ q │ w │ e │ r │ │ │ │ │ │ │
├──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┤
│ gnum │ a │ s │ d │ f │ game │ │ │ │ │ │
├──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┤
│ z │ x │ c │ v │ b │ │ │ │ │ │ │
╰──────┴──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┴──────╯
enc: mwheel │ │ shft │ spc │ │ spc │ nav │ mute │ enc: volume
╰──────┴──────┴──────╯ ╰──────┴──────┴──────╯
╭──────┬──────┬──────┬──────┬──────╮ ╭──────┬──────┬──────┬──────┬──────╮
│ esc │ home │ up │ end │ pgup │ │ ins │ │ app │ │ cfg │
├──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┤
│ │ left │ down │ rght │ pgdn │ nav │ bksp │ shft │ ctrl │ alt │ gui │
├──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┤
│ undo │ cut │ copy │ pste │ redo │ │ del │ tab │ vol- │ vol+ │ mute │
╰──────┴──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┴──────┴──────╯
enc: zoom │ zrst │ num │ ent │ │ │ nav │ │ enc: none
╰──────┴──────┴──────╯ ╰──────┴──────┴──────╯
Notes:
- zrst - Ctrl + 0 to Zoom Reset
╭──────┬──────┬──────┬──────┬──────╮ ╭──────┬──────┬──────┬──────┬──────╮
│ esc │ snip │ file │ func │ ` ~ │ │ ent │ 7 │ 8 │ 9 │ tab │
├──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┤
│ gui │ alt │ ctrl │ shft │ ; : │ numbers │ bksp │ 4 │ 5 │ 6 │ . │
├──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┤
│ undo │ cut │ copy │ pste │ redo │ │ del │ 1 │ 2 │ 3 │ - _ │
╰──────┴──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┴──────╯
enc: none │ │ sym │ │ │ spc │ 0 nav│ │ enc: ← →
╰──────┴──────┴──────╯ ╰──────┴──────┴──────╯
╭──────┬──────┬──────┬──────┬──────╮ ╭──────┬──────┬──────┬──────┬──────╮
│ esc │ │ @ │ $ │ ` ~ │ │ = + │ # │ * │ │ " "" │
├──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┤
& │ { {} │ } │ | │ ; : │ symbols │ bksp │ ? │ [ [] │ ] │ ' '' │
├──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┤
│ % ^ │ < <> │ > │ \ │ ! │ │ del │ / │ , () │ . ) │ - _ │
╰──────┴──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┴──────╯
enc: none │ │ sym │ │ │ │ nav │ │ enc: none
╰──────┴──────┴──────╯ ╰──────┴──────┴──────╯
Notes:
- tri layer: Activate th the symbol layer by holding down symbol and navigation
╭──────┬──────┬──────┬──────┬──────╮ ╭──────┬──────┬──────┬──────┬──────╮
│ mply2│ mrec2│ │ func │ │ │ pscr │ F7 │ F8 │ F9 │ F10 │
├──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┤
│ │ │ │ │ scrl │ func │ caps │ F4 │ F5 │ F6 │ F11 │
├──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┤
│ │ │ │ │ │ │ paus │ F1 │ F2 │ F3 │ F12 │
╰──────┴──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┴──────╯
enc: none │ │ sym │ │ │ mply1│ mrec1│ │ enc: ↑ ↓
╰──────┴──────┴──────╯ ╰──────┴──────┴──────╯
╭──────┬──────┬──────┬──────┬──────╮ ╭──────┬──────┬──────┬──────┬──────╮
│ │ btn5 │ btn4 │ btn3 │ │ │ whup │ │ mouu │ │ │
├──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┤
│ mou │ alt │ ctrl │ shft │ │ mouse │ whdn │ moul │ moud │ mour │ │
├──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┤
│ │ │ │ drgs │ snip │ │ sdpi │ pdpi │ │ │ │
╰──────┴──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┴──────╯
enc:mwheel │ │ btn1 │ btn2 │ │ │ │ │ enc: none
╰──────┴──────┴──────╯ ╰──────┴──────┴──────╯
Notes:
- drgs on non Charybdis Nano boards will trigger drag scrolling on Ploopy Nano
- pdpi on non Charybdis Nano boards will cycle Ploopy Nano DPI settings
- both together will enter bootlaoder on Ploopy Nano
╭──────┬──────┬──────┬──────┬──────╮ ╭──────┬──────┬──────┬──────┬──────╮
│ │ esc │ ` │ g │ t │ │ │ │ │ │ │
├──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┤
│ gnum │ 1 │ 2 │ 3 │ 4 │ game │ │ │ │ │ │
├──────┼──────┼──────┼──────┼──────┤ num ├──────┼──────┼──────┼──────┼──────┤
│ │ 5 │ 6 │ 7 │ 8 │ │ │ │ │ │ │
╰──────┴──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┴──────╯
end: mwheel │ │ alt │ ctr │ │ │ nav │ mute │ enc: volume
╰──────┴──────┴──────╯ ╰──────┴──────┴──────╯
╭──────┬──────┬──────┬──────┬──────╮ ╭──────┬──────┬──────┬──────┬──────╮
│ │ │ │ │ │ │ eeclr│ rboot│ boot │ │ cfg │
├──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┤
│rgbtog│rgbMod│ │ │ │ config │ blyr │ shft │ ctrl │ alt │ gui │
├──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┤
│ hue+ │ sat+ │ vib+ │ spd+ │ │ │ │ │ │ │ │
╰──────┴──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┴──────╯
enc: none │ │ │ │ │ │ nav │ │ enc: none
╰──────┴──────┴──────╯ ╰──────┴──────┴──────╯
notes:
- blyr - toggles between the three base layers: qwerty, colemakdh, game
## Target Keyboards ## Target Keyboards

View file

@ -26,8 +26,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_NUMBER] = ROLLOW(LAYER_NUMBER), [_NUMBER] = ROLLOW(LAYER_NUMBER),
[_SYMBOL] = ROLLOW(LAYER_SYMBOL), [_SYMBOL] = ROLLOW(LAYER_SYMBOL),
[_FUNCTION] = ROLLOW(LAYER_FUNCTION), [_FUNCTION] = ROLLOW(LAYER_FUNCTION),
[_MOUSE] = ROLLOW(LAYER_MOUSE),
[_GAME_NUM] = ROLLOW(LAYER_GAME_NUM),
[_CONFIG] = ROLLOW(LAYER_CONFIG) [_CONFIG] = ROLLOW(LAYER_CONFIG)
}; };
@ -44,8 +42,6 @@ const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[_NUMBER] = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(KC_RGHT, KC_LEFT) }, [_NUMBER] = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(KC_RGHT, KC_LEFT) },
[_SYMBOL] = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(___x___, ___x___) }, [_SYMBOL] = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(___x___, ___x___) },
[_FUNCTION] = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(KC_DOWN, KC_UP ) }, [_FUNCTION] = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(KC_DOWN, KC_UP ) },
[_MOUSE] = { ENCODER_CCW_CW(TR_MWHD, TR_MWHU), ENCODER_CCW_CW(___x___, ___x___) },
[_GAME_NUM] = { ENCODER_CCW_CW(TR_MWHD, TR_MWHU), ENCODER_CCW_CW(KC_VOLU, KC_VOLD) },
[_CONFIG] = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(___x___, ___x___) }, [_CONFIG] = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(___x___, ___x___) },
}; };

View file

@ -0,0 +1,60 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_split_3x6_3(
//,-----------------------------------------------------. ,-----------------------------------------------------.
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ESC,
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
KC_LGUI, MO(1), KC_SPC, KC_ENT, MO(2), KC_RALT
//`--------------------------' `--------------------------'
),
[1] = LAYOUT_split_3x6_3(
//,-----------------------------------------------------. ,-----------------------------------------------------.
KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
KC_LCTL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP,KC_RIGHT, XXXXXXX, XXXXXXX,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
KC_LGUI, _______, KC_SPC, KC_ENT, MO(3), KC_RALT
//`--------------------------' `--------------------------'
),
[2] = LAYOUT_split_3x6_3(
//,-----------------------------------------------------. ,-----------------------------------------------------.
KC_TAB, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
KC_LCTL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, KC_GRV,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, KC_TILD,
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
KC_LGUI, MO(3), KC_SPC, KC_ENT, _______, KC_RALT
//`--------------------------' `--------------------------'
),
[3] = LAYOUT_split_3x6_3(
//,-----------------------------------------------------. ,-----------------------------------------------------.
QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
KC_LGUI, _______, KC_SPC, KC_ENT, _______, KC_RALT
//`--------------------------' `--------------------------'
)
};
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[0] = { ENCODER_CCW_CW(KC_RGHT, KC_LEFT), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
[1] = { ENCODER_CCW_CW(XXXXXXX, XXXXXXX), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
[2] = { ENCODER_CCW_CW(KC_UP, KC_DOWN), ENCODER_CCW_CW(XXXXXXX, XXXXXXX) },
[3] = { ENCODER_CCW_CW(XXXXXXX, XXXXXXX), ENCODER_CCW_CW(XXXXXXX, XXXXXXX) }
};

View file

@ -0,0 +1 @@
VIA_ENABLE = yes

View file

@ -15,10 +15,6 @@ The current build guide is [available here](https://github.com/barbellboards/Rol
Make example for this keyboard (after setting up your build environment): Make example for this keyboard (after setting up your build environment):
```bash ```bash
# This board definition is currently not part of QMK Firmware
# Copy the keyboard definition into your forked/cloned QMK_HOME folder
cp /d/Repo/qmk_userspace/keyboards/barbellboards /d/Repo/qmk_firmware/keyboards/ -R
make barbellboards/rollow:default make barbellboards/rollow:default
# or # or
qmk compile -kb barbellboards/rollow -km default qmk compile -kb barbellboards/rollow -km default

View file

@ -106,13 +106,42 @@ static void oled_render_keylog(void) {
__attribute__((weak)) void oled_render_logo(void) { __attribute__((weak)) void oled_render_logo(void) {
// clang-format off // clang-format off
static const char PROGMEM crkbd_logo[] = { static const char PROGMEM rollow_logo[] = {
0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80,
0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00, 0xe0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0}; 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00,
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, 0xf0, 0xe0, 0x00, 0x00, 0xf0, 0xf0, 0x00,
0x00, 0x80, 0x80, 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, 0xff, 0xff,
0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xe0, 0xe0, 0x80, 0x80, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xff, 0xff, 0xff, 0xff, 0x7c, 0x00, 0x00, 0xf0, 0xf8, 0xf8,
0xf8, 0x3c, 0xfc, 0xf8, 0xf8, 0xf0, 0xe0, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xe0, 0xf0, 0xf8, 0xf8, 0xfc, 0x3c, 0xf8, 0xf8, 0xf8, 0xf0,
0xc0, 0x08, 0xf8, 0xf8, 0xf8, 0xf8, 0x00, 0xf8, 0xf8, 0xf8, 0xf8, 0xe0, 0xe0, 0xf8, 0xf8, 0xf8,
0xf8, 0x00, 0x00, 0x80, 0x80, 0xe0, 0xe0, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xff, 0xff,
0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x07, 0x07, 0x01, 0x01, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0xff, 0xff, 0xff,
0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0xff,
0x7f, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x01, 0x01, 0x07, 0x07, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x07, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x01, 0x01, 0x03,
0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x03,
0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01,
0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x07, 0x00, 0x00, 0x0f, 0x0f, 0x00,
0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// clang-format on // clang-format on
oled_write_P(crkbd_logo, false); oled_write_P(rollow_logo, false);
} }
bool oled_task_kb(void) { bool oled_task_kb(void) {

View file

@ -26,8 +26,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_NUMBER] = CNANO(LAYER_NUMBER), [_NUMBER] = CNANO(LAYER_NUMBER),
[_SYMBOL] = CNANO(LAYER_SYMBOL), [_SYMBOL] = CNANO(LAYER_SYMBOL),
[_FUNCTION] = CNANO(LAYER_FUNCTION), [_FUNCTION] = CNANO(LAYER_FUNCTION),
[_MOUSE] = CNANO(LAYER_MOUSE),
[_GAME_NUM] = CNANO(LAYER_GAME_NUM),
[_CONFIG] = CNANO(LAYER_CONFIG) [_CONFIG] = CNANO(LAYER_CONFIG)
}; };

View file

@ -26,8 +26,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_NUMBER] = SWOOP(LAYER_NUMBER), [_NUMBER] = SWOOP(LAYER_NUMBER),
[_SYMBOL] = SWOOP(LAYER_SYMBOL), [_SYMBOL] = SWOOP(LAYER_SYMBOL),
[_FUNCTION] = SWOOP(LAYER_FUNCTION), [_FUNCTION] = SWOOP(LAYER_FUNCTION),
[_MOUSE] = SWOOP(LAYER_MOUSE),
[_GAME_NUM] = SWOOP(LAYER_GAME_NUM),
[_CONFIG] = SWOOP(LAYER_CONFIG) [_CONFIG] = SWOOP(LAYER_CONFIG)
}; };
@ -45,8 +43,6 @@ const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[_NUMBER] = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(KC_RGHT, KC_LEFT) }, [_NUMBER] = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(KC_RGHT, KC_LEFT) },
[_SYMBOL] = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(___x___, ___x___) }, [_SYMBOL] = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(___x___, ___x___) },
[_FUNCTION] = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(KC_DOWN, KC_UP ) }, [_FUNCTION] = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(KC_DOWN, KC_UP ) },
[_MOUSE] = { ENCODER_CCW_CW(TR_MWHD, TR_MWHU), ENCODER_CCW_CW(___x___, ___x___) },
[_GAME_NUM] = { ENCODER_CCW_CW(TR_MWHD, TR_MWHU), ENCODER_CCW_CW(KC_VOLU, KC_VOLD) },
[_CONFIG] = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(___x___, ___x___) }, [_CONFIG] = { ENCODER_CCW_CW(___x___, ___x___), ENCODER_CCW_CW(___x___, ___x___) },
}; };

View file

@ -26,8 +26,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_NUMBER] = CRKBD(LAYER_NUMBER), [_NUMBER] = CRKBD(LAYER_NUMBER),
[_SYMBOL] = CRKBD(LAYER_SYMBOL), [_SYMBOL] = CRKBD(LAYER_SYMBOL),
[_FUNCTION] = CRKBD(LAYER_FUNCTION), [_FUNCTION] = CRKBD(LAYER_FUNCTION),
[_MOUSE] = CRKBD(LAYER_MOUSE),
[_GAME_NUM] = CRKBD(LAYER_GAME_NUM),
[_CONFIG] = CRKBD(LAYER_CONFIG) [_CONFIG] = CRKBD(LAYER_CONFIG)
}; };

View file

View file

View file

View file

View file

@ -26,8 +26,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_NUMBER] = PLANCK(LAYER_NUMBER), [_NUMBER] = PLANCK(LAYER_NUMBER),
[_SYMBOL] = PLANCK(LAYER_SYMBOL), [_SYMBOL] = PLANCK(LAYER_SYMBOL),
[_FUNCTION] = PLANCK(LAYER_FUNCTION), [_FUNCTION] = PLANCK(LAYER_FUNCTION),
[_MOUSE] = PLANCK(LAYER_MOUSE),
[_GAME_NUM] = PLANCK(LAYER_GAME_NUM),
[_CONFIG] = PLANCK(LAYER_CONFIG) [_CONFIG] = PLANCK(LAYER_CONFIG)
}; };

100
keymap-drawer.yml Normal file
View file

@ -0,0 +1,100 @@
layout:
qmk_keyboard: bluebell/swoop
qmk_layout: LAYOUT_split_3x5_3
layers:
base_QWERTY:
- [Q, W, E, R, T, Y, U, I ,O, P]
- [A, S, D, F, G, H, J, K ,L, {h: "\"", t: "'"}]
- [Z, X, C, V, B, N, M, {h: "(", t: ","} , {h: ")", t: "."}, {h: "_", t: "-"}]
- {type: ghost}
- NUM
- Shift
- Space
- NAV
- {t: Mute, type: ghost}
base_COLEMAK_DH:
- [Q, W, F, P, B, J, L, U ,Y, {h: "\"", t: "'"}]
- [A, R, S, T, G, M, N, E ,I, O]
- [Z, X, C, D, V, K, H, {h: "(", t: ","} , {h: ")", t: "."}, {h: "_", t: "-"}]
- {type: ghost}
- NUM
- Shift
- Space
- NAV
- {t: Mute, type: ghost}
base_GAME:
- [Tab, Q, W, E, R, T, "7", "8" ,"9", Esc]
- [Ctrl, A, S, D, F, G, "4", "5" ,"6", "`"]
- [Z, X, C, V, B, Alt, "1", "2" ,"3", Combo Toggle]
- {t: Enter, type: ghost}
- Shift
- Space
- Space
- {h: "NAV", t: "0"}
- {t: Mute, type: ghost}
NAV:
- [Escape, Home, ▲, End, Page Up, Insert, Caps Lock, Scroll Lock, null, null ]
- [null, ◄, ▼, ►, Page Down, null, Shift, Ctrl, Alt, Gui ]
- [Undo, Cut, Copy, Paste, Redo, null, App, Vol-, Vol+, Mute ]
- {t: Zoom Reset, type: ghost}
- NUM
- Enter
- null
- {type: held}
- {t: Mute, type: ghost}
NUM:
- [null, Win Snip, Win File, null, {h: "~", t: "`"}, null, "7", "8" ,"9", null ]
- [Gui, Alt, Ctrl, Shift, {h: ":", t: ";"}, null, "4", "5" ,"6", "."]
- [Undo, Cut, Copy, Paste, Redo, null, "1", "2" ,"3", {h: "_", t: "-"}]
- {type: ghost}
- {type: held}
- null
- Space
- {h: "NAV", t: "0"}
- {type: ghost}
SYM:
- [null, null, "@", "$", {h: "~", t: "`"}, {h: "+", t: "="}, "#", "*", null, {h: "\"\"", t: "\""}]
- ["&", {h: "{}", t: "{"}, "}", "|", {h: ":", t: ";"}, null, "?", {h: "[]", t: "]"}, "]", {h: "''", t: "'"}]
- [{h: "^", t: "%"}, {h: "<>", t: "<"}, ">", "\\", "!", null, "/", {h: "()", t: ","}, {h: ")", t: "."}, {h: "_", t: "-"}]
- {type: ghost}
- {type: held}
- null
- null
- {type: held}
- {type: ghost}
FUNCTION:
- [null, null, Mouse Up, null, Mouse Wheel Up, Print Screen, F7, F8, F9, F10]
- [null, Mouse Left, Mouse Down, Mouse Right, Mouse Wheel Down, Num Lock, F4, F5, F6, F11]
- [Pointer DPI, Sniper DPI, null, Drag Scroll Toggle, Sniper Toggle, Pause Break, F1, F2, F3, F12]
- {type: ghost}
- {type: held}
- {type: held}
- Macro Play
- Macro Record
- {type: ghost}
CONFIG:
- [null, null, null, null, null, Clear EEPROM, Reboot, Boot Loader, null, null]
- [RGB Toggle, RGB Mode, null, null, null, Base Layer Toggle, Shift, Ctrl, Alt, Gui]
- [RGB Hue, RGB Sat, RGB Vib, RGB Spd, null, null, null, null, null, null ]
- {type: ghost}
- null
- null
- {type: held}
- {type: held}
- {type: ghost}
combos:
- { p: [1, 2], k: Esc, l: [base_QWERTY] }
- { p: [2, 3], k: MB4, l: [base_QWERTY] }
- { p: [3, 4], k: MB5, l: [base_QWERTY] }
- { p: [12, 13], k: MB1, l: [base_QWERTY] }
- { p: [13, 14], k: MB3, l: [base_QWERTY] }
- { p: [11, 12], k: DrgScr Tog, l: [base_QWERTY] }
- { p: [26, 27], k: Tab, l: [base_QWERTY] }
- { p: [21, 22], k: Enter, l: [base_QWERTY] }
- { p: [22, 23], k: MB2, l: [base_QWERTY] }
- { p: [7, 8], k: Bksp, l: [base_QWERTY] }
- { p: [6, 7], k: Del, l: [base_QWERTY] }
- { p: [31, 32], k: FUNC, l: [base_QWERTY], align: top }
- { p: [33, 34], k: CONFIG, l: [base_QWERTY], align: top }
draw_config:
small_pad: 6

BIN
my_keymap.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 KiB

8
qmk_clone.json Normal file
View file

@ -0,0 +1,8 @@
{
"clone_targets": [
{
"repository": "https://github.com/app-gitKaiwho/qmk-config-klor/",
"tree": "main"
}
]
}

View file

@ -9,27 +9,30 @@ Explore these (there are way more)
*/ */
//Clear variables we plan to use that might be set elsewhere //Clear variables we plan to use that might be set elsewhere
#undef COMBO_ONLY_FROM_LAYER
#undef EXTRA_SHORT_COMBOS
#undef COMBO_TERM #undef COMBO_TERM
#undef COMBO_TERM_PER_COMBO #undef COMBO_TERM_PER_COMBO
#undef COMBO_MUST_TAP_PER_COMBO
#undef EXTRA_SHORT_COMBOS
#undef COMBO_ONLY_FROM_LAYER
#undef COMBO_HOLD_TERM #undef COMBO_HOLD_TERM
#undef COMBO_MUST_HOLD_PER_COMBO #undef COMBO_MUST_HOLD_PER_COMBO
#undef COMBO_MUST_TAP_PER_COMBO
#undef COMBO_MUST_PRESS_IN_ORDER_PER_COMBO #undef COMBO_MUST_PRESS_IN_ORDER_PER_COMBO
#undef COMBO_SHOULD_TRIGGER
//Set common configuration for all keyboards //Set common configuration for all keyboards
#define COMBO_TERM 50 #define COMBO_ONLY_FROM_LAYER 0 //this will always setup combos based off of QWERTY layout
#define COMBO_TERM_PER_COMBO
#define COMBO_MUST_TAP_PER_COMBO
#define EXTRA_SHORT_COMBOS #define EXTRA_SHORT_COMBOS
#define COMBO_ONLY_FROM_LAYER 0 //this will always setup combos based off of QWERTY
#define COMBO_TERM 35
#define COMBO_TERM_PER_COMBO
#define COMBO_HOLD_TERM TAPPING_TERM #define COMBO_HOLD_TERM TAPPING_TERM
#define COMBO_MUST_HOLD_PER_COMBO #define COMBO_MUST_HOLD_PER_COMBO
#define COMBO_MUST_TAP_PER_COMBO
#define COMBO_MUST_PRESS_IN_ORDER_PER_COMBO #define COMBO_MUST_PRESS_IN_ORDER_PER_COMBO
#define COMBO_SHOULD_TRIGGER

View file

@ -1,65 +1,5 @@
#include "combo.h" #include "combo.h"
//only need to make it for the qwerty layer
//const uint16_t PROGMEM dragtog_combo[] = {TR_COMM, TR_DOT, COMBO_END};
//const uint16_t PROGMEM sniptog_combo[] = {KC_M, TR_DOT, COMBO_END};
//const uint16_t PROGMEM moubtn4_combo[] = {KC_SPC, NAV, COMBO_END};
combo_t key_combos[COMBO_LENGTH] = {
/*
#if defined(POINTING_DEVICE_ENABLE)
[DRAGTOGGLE] = COMBO(dragtog_combo, DRG_TOG),
[SNIPERTOGGLE] = COMBO(sniptog_combo, SNP_TOG),
#else
[DRAGTOGGLE] = COMBO(dragtog_combo, ___x___),
[SNIPERTOGGLE] = COMBO(sniptog_combo, ___x___),
#endif //POINTING_DEVICE_ENABLE
#if defined(MOUSELAYER_ENABLE)
[MOUSEBUTTON4] = COMBO(moubtn4_combo, KC_BTN4)
#else
[MOUSEBUTTON4] = COMBO(moubtn4_combo, ___x___)
#endif //MOUSELAYER_ENABLE
*/
};
bool get_combo_must_hold(uint16_t index, combo_t *combo) {
switch (index) {
default:
return false;
}
}
bool get_combo_must_tap(uint16_t index, combo_t *combo) {
switch (index) {
/*
case DRAGTOGGLE:
case SNIPERTOGGLE:
case MOUSEBUTTON4:
return true;
*/
default:
return false;
}
}
bool get_combo_must_press_in_order(uint16_t combo_index, combo_t *combo) {
switch (combo_index) {
/* List combos here that you want to only activate if their keys
* are pressed in the same order as they are defined in the combo's key
* array. */
default:
return false;
}
}
uint16_t get_combo_term(uint16_t index, combo_t *combo) { uint16_t get_combo_term(uint16_t index, combo_t *combo) {
// or with combo index, i.e. its name from enum. // or with combo index, i.e. its name from enum.
switch (index) { switch (index) {
@ -73,3 +13,85 @@ uint16_t get_combo_term(uint16_t index, combo_t *combo) {
} }
} }
bool get_combo_must_tap(uint16_t index, combo_t *combo) {
switch (index) {
#if defined(MOUSEKEY_ENABLE)
case MOUSE_BUTTON3:
case MOUSE_BUTTON4:
case MOUSE_BUTTON5:
case MOUSE_DRGTOG:
#endif //MOUSEKEY_ENABLE
case KEY_ESC:
case KEY_ENT:
case KEY_TAB:
return true;
default:
return false;
}
}
bool get_combo_must_hold(uint16_t index, combo_t *combo) {
switch (index) {
case LYR_CONFIG:
case LYR_FUNCTION:
return true;
default:
return false;
}
}
bool get_combo_must_press_in_order(uint16_t combo_index, combo_t *combo) {
switch (combo_index) {
/* List combos here that you want to only activate if their keys
* are pressed in the same order as they are defined in the combo's key
* array.
*
* return false means they do not have to be pressed in order
* */
default:
return false;
}
}
bool combo_should_trigger(uint16_t combo_index, combo_t *combo, uint16_t keycode, keyrecord_t *record) {
// disable all combos on config layer
if ( get_highest_layer(layer_state) == _CONFIG ) {
return false;
}
switch (combo_index) {
case KEY_ESC:
case KEY_ENT:
case KEY_TAB:
if ( get_highest_layer(layer_state) == _NAVIGATION ||
get_highest_layer(layer_state) == _SYMBOL ) {
return false;
}
break;
case MOUSE_BUTTON1:
case MOUSE_BUTTON2:
case MOUSE_BUTTON3:
case MOUSE_BUTTON4:
case MOUSE_BUTTON5:
case MOUSE_DRGTOG:
if ( get_highest_layer(layer_state) == _NAVIGATION ||
get_highest_layer(layer_state) == _NUMBER ||
get_highest_layer(layer_state) == _SYMBOL ) {
return false;
}
break;
}
return true;
}

View file

@ -2,11 +2,77 @@
#include "t4corun.h" #include "t4corun.h"
enum combos { enum combos {
//DRAGTOGGLE,
//SNIPERTOGGLE, // left hand combos
//MOUSEBUTTON4, #if defined(MOUSEKEY_ENABLE)
MOUSE_BUTTON1,
MOUSE_BUTTON2,
MOUSE_BUTTON3,
MOUSE_BUTTON4,
MOUSE_BUTTON5,
MOUSE_DRGTOG,
#endif //MOUSEKEY_ENABLE
KEY_ESC,
KEY_ENT,
LYR_FUNCTION,
// right hand combos
KEY_TAB,
KEY_DEL,
KEY_BSPC,
LYR_CONFIG,
COMBO_LENGTH COMBO_LENGTH
}; };
// left hand combos
#if defined(MOUSEKEY_ENABLE)
const uint16_t PROGMEM mou_btn1_combo[] = { KC_D, KC_F, COMBO_END };
const uint16_t PROGMEM mou_btn2_combo[] = { KC_C, KC_V, COMBO_END };
const uint16_t PROGMEM mou_btn3_combo[] = { KC_F, KC_G, COMBO_END };
const uint16_t PROGMEM mou_btn4_combo[] = { KC_E, KC_R, COMBO_END };
const uint16_t PROGMEM mou_btn5_combo[] = { KC_R, KC_T, COMBO_END };
const uint16_t PROGMEM mou_drg_combo[] = { KC_S, KC_D, COMBO_END };
#endif //MOUSEKEY_ENABLE
const uint16_t PROGMEM key_esc_combo[] = { KC_W, KC_E, COMBO_END };
const uint16_t PROGMEM key_ent_combo[] = { KC_X, KC_C, COMBO_END };
const uint16_t PROGMEM lyr_fun_combo[] = { NUM, TR_LSFT, COMBO_END };
// right hand combos
const uint16_t PROGMEM key_tab_combo[] = { KC_M, TR_COMM, COMBO_END };
const uint16_t PROGMEM key_del_combo[] = { KC_U, KC_I, COMBO_END };
const uint16_t PROGMEM key_bspc_combo[] = { KC_I, KC_O, COMBO_END };
const uint16_t PROGMEM lyr_cfg_combo[] = { KC_SPC, NAV, COMBO_END };
combo_t key_combos[COMBO_LENGTH] = {
// left hand combos
#if defined(MOUSEKEY_ENABLE)
[MOUSE_BUTTON1] = COMBO(mou_btn1_combo, TR_BTN1),
[MOUSE_BUTTON2] = COMBO(mou_btn2_combo, TR_BTN2),
[MOUSE_BUTTON3] = COMBO(mou_btn3_combo, TR_BTN3),
[MOUSE_BUTTON4] = COMBO(mou_btn4_combo, TR_BTN4),
[MOUSE_BUTTON5] = COMBO(mou_btn5_combo, TR_BTN5),
[MOUSE_DRGTOG] = COMBO(mou_drg_combo, TR_DRGS),
#endif //MOUSEKEY_ENABLE
[KEY_ESC] = COMBO(key_esc_combo, KC_ESC),
[KEY_ENT] = COMBO(key_ent_combo, KC_ENT),
[LYR_FUNCTION] = COMBO(lyr_fun_combo, FUNC),
// right hand combos
[KEY_TAB] = COMBO(key_tab_combo, KC_TAB),
[KEY_DEL] = COMBO(key_del_combo, KC_DEL),
[KEY_BSPC] = COMBO(key_bspc_combo, KC_BSPC),
[LYR_CONFIG] = COMBO(lyr_cfg_combo, CONFIG)
};
//their documentation is so confusing because you don't use COMBO_LEN defining the actions //their documentation is so confusing because you don't use COMBO_LEN defining the actions
uint16_t COMBO_LEN = COMBO_LENGTH; uint16_t COMBO_LEN = COMBO_LENGTH;

View file

@ -37,12 +37,7 @@ void render_layer_state(void) {
oled_write_P(PSTR(OLED_RENDER_LAYER_NAVIGATION), get_highest_layer(layer_state) == _NAVIGATION); oled_write_P(PSTR(OLED_RENDER_LAYER_NAVIGATION), get_highest_layer(layer_state) == _NAVIGATION);
oled_write_P(PSTR(OLED_RENDER_LAYER_NUMBER), get_highest_layer(layer_state) == _NUMBER); oled_write_P(PSTR(OLED_RENDER_LAYER_NUMBER), get_highest_layer(layer_state) == _NUMBER);
oled_write_P(PSTR(OLED_RENDER_LAYER_SYMBOL), get_highest_layer(layer_state) == _SYMBOL); oled_write_P(PSTR(OLED_RENDER_LAYER_SYMBOL), get_highest_layer(layer_state) == _SYMBOL);
oled_write_P(PSTR(OLED_RENDER_LAYER_FUNCTION), get_highest_layer(layer_state) == _FUNCTION);
#if defined(MOUSEKEY_ENABLE)
oled_write_P(PSTR(OLED_RENDER_LAYER_MOUSE), get_highest_layer(layer_state) == _MOUSE);
#endif //MOUSEKEY_ENABLE
oled_write_P(PSTR(OLED_RENDER_LAYER_GAME_NUM), get_highest_layer(layer_state) == _GAME_NUM);
oled_write_P(PSTR(OLED_RENDER_LAYER_CONFIG), get_highest_layer(layer_state) == _CONFIG); oled_write_P(PSTR(OLED_RENDER_LAYER_CONFIG), get_highest_layer(layer_state) == _CONFIG);
} }

View file

@ -7,7 +7,7 @@
#define OLED_RENDER_MODS_NAME "Mods:" #define OLED_RENDER_MODS_NAME "Mods:"
#define OLED_RENDER_LAYOUT_NAME "Lyout" #define OLED_RENDER_LAYOUT_NAME "Lyout"
#define OLED_RENDER_LAYOUT_QWERTY " QRTY" #define OLED_RENDER_LAYOUT_QWERTY " qrty"
#define OLED_RENDER_LAYOUT_COLEMAK_DH " cmDH" #define OLED_RENDER_LAYOUT_COLEMAK_DH " cmDH"
#define OLED_RENDER_LAYOUT_GAME " Game" #define OLED_RENDER_LAYOUT_GAME " Game"
@ -16,13 +16,9 @@
#define OLED_RENDER_LAYER_NUMBER " Num " #define OLED_RENDER_LAYER_NUMBER " Num "
#define OLED_RENDER_LAYER_NAVIGATION " Nav " #define OLED_RENDER_LAYER_NAVIGATION " Nav "
#define OLED_RENDER_LAYER_SYMBOL " Sym " #define OLED_RENDER_LAYER_SYMBOL " Sym "
#define OLED_RENDER_LAYER_GAME_NUM " gNum" #define OLED_RENDER_LAYER_FUNCTION " Fun "
#define OLED_RENDER_LAYER_CONFIG " Cfg " #define OLED_RENDER_LAYER_CONFIG " Cfg "
#if defined(MOUSEKEY_ENABLE)
# define OLED_RENDER_LAYER_MOUSE " Mou "
#endif //MOUSEKEY_ENABLE
void render_crkbd_logo(void); void render_crkbd_logo(void);
void render_default_layer_state(void); void render_default_layer_state(void);
void render_layer_state(void); void render_layer_state(void);

View file

@ -18,7 +18,6 @@ UNICODE_ENABLE ?= no
SPACE_CADET_ENABLE ?= no SPACE_CADET_ENABLE ?= no
GRAVE_ESC_ENABLE ?= no GRAVE_ESC_ENABLE ?= no
COMBO_ENABLE ?= no
DYNAMIC_MACRO_ENABLE ?= yes DYNAMIC_MACRO_ENABLE ?= yes
RGB_MATRIX_ENABLE ?= no RGB_MATRIX_ENABLE ?= no
RGBLIGHT_ENABLE ?= no RGBLIGHT_ENABLE ?= no
@ -32,7 +31,7 @@ EXTRAKEY_ENABLE = yes
AUDIO_ENABLE = no AUDIO_ENABLE = no
CAPS_WORD_ENABLE = yes CAPS_WORD_ENABLE = yes
MOUSEKEY_ENABLE = yes MOUSEKEY_ENABLE = yes
COMBO_ENABLE = yes
# --------------------------------------------------------- # ---------------------------------------------------------
# include my code that will be common across all my keyboards # include my code that will be common across all my keyboards
@ -49,7 +48,6 @@ ifeq ($(strip $(CAPS_WORD_ENABLE)), yes)
SRC += features/capsword.c SRC += features/capsword.c
endif endif
ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes) ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes)
SRC += features/rgbmatrix.c SRC += features/rgbmatrix.c
endif endif
@ -58,12 +56,10 @@ ifeq ($(strip $(RGB_MATRIX_ENABLE)), ws2812)
SRC += features/rgbmatrix.c SRC += features/rgbmatrix.c
endif endif
ifeq ($(strip $(MOUSEKEY_ENABLE)), yes) ifeq ($(strip $(MOUSEKEY_ENABLE)), yes)
SRC += features/mouse.c SRC += features/mouse.c
endif endif
ifeq ($(strip $(OLED_ENABLE)), yes) ifeq ($(strip $(OLED_ENABLE)), yes)
SRC += features/oled.c SRC += features/oled.c
endif endif

View file

@ -12,8 +12,6 @@ enum layers {
_NUMBER, _NUMBER,
_SYMBOL, _SYMBOL,
_FUNCTION, _FUNCTION,
_MOUSE,
_GAME_NUM,
_CONFIG _CONFIG
}; };
@ -46,9 +44,8 @@ enum keycodes {
#define NAV MO(_NAVIGATION) #define NAV MO(_NAVIGATION)
#define NAV_0 LT(_NAVIGATION, KC_0) #define NAV_0 LT(_NAVIGATION, KC_0)
#define NUM MO(_NUMBER) #define NUM MO(_NUMBER)
#define CONFIG MO(_CONFIG)
#define FUNC MO(_FUNCTION) #define FUNC MO(_FUNCTION)
#define GAMENUM MO(_GAME_NUM) #define CONFIG MO(_CONFIG)
// Windows Shortcuts // Windows Shortcuts
#define SC_COPY LCTL(KC_C) #define SC_COPY LCTL(KC_C)
@ -59,7 +56,7 @@ enum keycodes {
#define SC_SNIP LGUI(LSFT(KC_S)) #define SC_SNIP LGUI(LSFT(KC_S))
#define SC_FILE LGUI(KC_E) #define SC_FILE LGUI(KC_E)
// Zoom // Zoom for encoders
#define ZOOMIN LCTL(LSFT(KC_EQL)) #define ZOOMIN LCTL(LSFT(KC_EQL))
#define ZOOMOUT LCTL(KC_MINS) #define ZOOMOUT LCTL(KC_MINS)
#define ZOOMRST LCTL(KC_0) #define ZOOMRST LCTL(KC_0)
@ -98,7 +95,6 @@ enum keycodes {
#if defined(MOUSEKEY_ENABLE) #if defined(MOUSEKEY_ENABLE)
# define TR_MOUA LT(_MOUSE, KC_A)
# define TR_MOUU KC_MS_U # define TR_MOUU KC_MS_U
# define TR_MOUD KC_MS_D # define TR_MOUD KC_MS_D
@ -114,12 +110,10 @@ enum keycodes {
# define TR_BTN4 KC_BTN4 # define TR_BTN4 KC_BTN4
# define TR_BTN5 KC_BTN5 # define TR_BTN5 KC_BTN5
# define TR_NUM1 LT(_NUMBER, KC_BTN1)
# if defined(KEYBOARD_bastardkb_charybdis_3x5) # if defined(KEYBOARD_bastardkb_charybdis_3x5)
//these codes are defined in charybdis.h //these codes are defined in charybdis.h
# define TR_SNIP SNIPING # define TR_SNIP SNIPING
# define TR_DRGS DRGSCRL # define TR_DRGS DRG_TOG
# define TR_SDPI S_D_MOD //sniping dpi # define TR_SDPI S_D_MOD //sniping dpi
# define TR_PDPI DPI_MOD //pointer dpi # define TR_PDPI DPI_MOD //pointer dpi
# else # else
@ -130,7 +124,6 @@ enum keycodes {
# endif //KEYBOARD_bastardkb_charybdis_3x5 # endif //KEYBOARD_bastardkb_charybdis_3x5
#else #else
# define TR_MOUA KC_A
# define TR_MOUU ___x___ # define TR_MOUU ___x___
# define TR_MOUD ___x___ # define TR_MOUD ___x___
@ -151,7 +144,6 @@ enum keycodes {
# define TR_SDPI ___x___ # define TR_SDPI ___x___
# define TR_PDPI ___x___ # define TR_PDPI ___x___
# define TR_NUM1 MO(_NUMBER)
#endif //MOUSEKEY_ENABLE #endif //MOUSEKEY_ENABLE
@ -197,85 +189,64 @@ enum keycodes {
#define _SCAG_MODS________________________ TR_LSFT, TR_LCTL, TR_LALT, TR_LGUI #define _SCAG_MODS________________________ TR_LSFT, TR_LCTL, TR_LALT, TR_LGUI
#define _UCCPR_L___________________________________ SC_UNDO, SC_CUT, SC_COPY, SC_PAST, SC_REDO #define _UCCPR_L___________________________________ SC_UNDO, SC_CUT, SC_COPY, SC_PAST, SC_REDO
#define _BASE_L4_________________ ___x___, TR_NUM1, TR_LSFT #define _BASE_L4_________________ ___x___, NUM, TR_LSFT
#define _BASE_R4_________________ KC_SPC, NAV, KC_MUTE #define _BASE_R4_________________ KC_SPC, NAV, KC_MUTE
#define _LAYER_TRANS_____________ ___x___, _______, ___x___ #define _LAYER_TRANS_____________ ___x___, _______, ___x___
//___x___, ___x___, ___x___, ___x___, ___x___, ___x___, ___x___, ___x___, ___x___, ___x___, //___x___, ___x___, ___x___, ___x___, ___x___, ___x___, ___x___, ___x___, ___x___, ___x___,
#define BASETEST \
KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, \
KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, \
KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, \
KC_TAB, KC_ESC, KC_LSFT, KC_SPC, KC_ENT, KC_MUTE
#define LAYER_QWERTY \ #define LAYER_QWERTY \
KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, \ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, \
TR_MOUA, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, TR_QUOT, \ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, TR_QUOT, \
KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, TR_COMM, TR_DOT, TR_MINS, \ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, TR_COMM, TR_DOT, TR_MINS, \
_BASE_L4_________________, _BASE_R4_________________ _BASE_L4_________________, _BASE_R4_________________
#define LAYER_COLEMAK_DH \ #define LAYER_COLEMAK_DH \
KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, TR_QUOT, \ KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, TR_QUOT, \
TR_MOUA, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O, \ KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O, \
KC_Z, KC_X, KC_C, KC_D, KC_V, KC_K, KC_H, TR_COMM, TR_DOT, TR_MINS, \ KC_Z, KC_X, KC_C, KC_D, KC_V, KC_K, KC_H, TR_COMM, TR_DOT, TR_MINS, \
_BASE_L4_________________, _BASE_R4_________________ _BASE_L4_________________, _BASE_R4_________________
#define LAYER_GAME \ #define LAYER_GAME \
KC_TAB, KC_Q, KC_W, KC_E, KC_R, _NONE_5____________________________________, \ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_7, KC_8, KC_9, KC_ESC, \
GAMENUM, KC_A, KC_S, KC_D, KC_F, _NONE_5____________________________________, \ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_4, KC_5, KC_6, KC_GRV, \
KC_Z, KC_X, KC_C, KC_V, KC_B, _NONE_5____________________________________, \ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LALT, KC_1, KC_2, KC_3, CM_TOGG, \
___x___, KC_LSFT, KC_SPC, _BASE_R4_________________ KC_ENT, KC_LSFT, KC_SPC, KC_SPC, NAV_0, KC_MUTE
#define LAYER_NAVIGATION \ #define LAYER_NAVIGATION \
KC_ESC, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_INS, ___x___, KC_APP, ___x___, CONFIG, \ KC_ESC, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_INS, KC_CAPS, KC_SCRL, ___x___, ___x___, \
___x___, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_BSPC, _SCAG_MODS________________________, \ ___x___, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, ___x___, _SCAG_MODS________________________, \
_UCCPR_L___________________________________, KC_DEL, KC_TAB, KC_VOLD, KC_VOLU, KC_MUTE, \ _UCCPR_L___________________________________, ___x___, KC_APP, KC_VOLD, KC_VOLU, KC_MUTE, \
ZOOMRST, NUM, KC_ENT, _LAYER_TRANS_____________ ZOOMRST, _______, KC_ENT, _LAYER_TRANS_____________
#define LAYER_NUMBER \ #define LAYER_NUMBER \
KC_ESC, SC_SNIP, SC_FILE, FUNC, TR_GRV, KC_ENT, KC_7, KC_8, KC_9, KC_TAB, \ ___x___, SC_SNIP, SC_FILE, ___x___, TR_GRV, ___x___, KC_7, KC_8, KC_9, ___x___, \
_GACS_MODS________________________, TR_SCLN, KC_BSPC, KC_4, KC_5, KC_6, KC_DOT, \ _GACS_MODS________________________, TR_SCLN, ___x___, KC_4, KC_5, KC_6, KC_DOT, \
_UCCPR_L___________________________________, KC_DEL, KC_1, KC_2, KC_3, TR_MINS, \ _UCCPR_L___________________________________, ___x___, KC_1, KC_2, KC_3, TR_MINS, \
_LAYER_TRANS_____________, KC_SPC, NAV_0, ___x___ _LAYER_TRANS_____________, KC_SPC, NAV_0, ___x___
#define LAYER_SYMBOL \ #define LAYER_SYMBOL \
KC_ESC, ___x___, KC_AT, KC_DLR, TR_GRV, TR_EQL, KC_HASH, KC_ASTR, ___x___, TR_DQUO, \ ___x___, ___x___, KC_AT, KC_DLR, TR_GRV, TR_EQL, KC_HASH, KC_ASTR, ___x___, TR_DQUO, \
KC_AMPR, TR_LCBR, KC_RCBR, KC_PIPE, TR_SCLN, KC_BSPC, KC_QUES, TR_LBRC, KC_RBRC, TR_SQUO, \ KC_AMPR, TR_LCBR, KC_RCBR, KC_PIPE, TR_SCLN, ___x___, KC_QUES, TR_LBRC, KC_RBRC, TR_SQUO, \
TR_PERC, TR_LABK, KC_RABK, KC_BSLS, KC_EXLM, KC_DEL, KC_SLSH, TR_LPRN, TR_DOT, TR_MINS, \ TR_PERC, TR_LABK, KC_RABK, KC_BSLS, KC_EXLM, ___x___, KC_SLSH, TR_LPRN, TR_DOT, TR_MINS, \
_LAYER_TRANS_____________, _LAYER_TRANS_____________ _LAYER_TRANS_____________, _LAYER_TRANS_____________
#define LAYER_FUNCTION \ #define LAYER_FUNCTION \
TR_DMP2, TR_DMR2, ___x___, _______, KC_SCRL, KC_PSCR, KC_F7, KC_F8, KC_F9, KC_F10, \ ___x___, ___x___, TR_MOUU, ___x___, TR_MWHU, KC_PSCR, KC_F7, KC_F8, KC_F9, KC_F10, \
_NONE_5____________________________________, KC_CAPS, KC_F4, KC_F5, KC_F6, KC_F11, \ ___x___, TR_MOUL, TR_MOUD, TR_MOUR, TR_MWHD, KC_NUM, KC_F4, KC_F5, KC_F6, KC_F11, \
_NONE_5____________________________________, KC_PAUS, KC_F1, KC_F2, KC_F3, KC_F12, \ TR_PDPI, TR_SDPI, ___x___, TR_DRGS, TR_SNIP, KC_PAUS, KC_F1, KC_F2, KC_F3, KC_F12, \
_LAYER_TRANS_____________, TR_DMP1, TR_DMR1, ___x___ _LAYER_TRANS_____________, TR_DMP1, TR_DMR1, ___x___
#define LAYER_MOUSE \
___x___, TR_BTN5, TR_BTN4, TR_BTN3, ___x___, TR_MWHU, ___x___, TR_MOUU, ___x___, ___x___, \
_______, _GACS_MOUSE_MODS_________, ___x___, TR_MWHD, TR_MOUL, TR_MOUD, TR_MOUR, ___x___, \
_NONE_3__________________, TR_DRGS, TR_SNIP, TR_SDPI, TR_PDPI, ___x___, ___x___, ___x___, \
___x___, TR_BTN1, TR_BTN2, _NONE_3__________________
#define LAYER_GAME_NUM \
___x___, KC_ESC, KC_TILD, KC_G, KC_T, _NONE_5____________________________________, \
_______, KC_1, KC_2, KC_3, KC_4, _NONE_5____________________________________, \
___x___, KC_5, KC_6, KC_7, KC_8, _NONE_5____________________________________, \
___x___, KC_LALT, KC_LCTL, _LAYER_TRANS_____________
#define LAYER_CONFIG \ #define LAYER_CONFIG \
_NONE_5____________________________________, EE_CLR, QK_RBT, QK_BOOT, ___x___, _______, \ _NONE_5____________________________________, EE_CLR, QK_RBT, QK_BOOT, ___x___, ___x___, \
TR_RTOG, TR_RMOD, _NONE_3__________________, BASELYR, _SCAG_MODS________________________, \ TR_RTOG, TR_RMOD, _NONE_3__________________, BASELYR, _SCAG_MODS________________________, \
TR_RHUI, TR_RSAI, TR_RVAI, TR_RSPI, ___x___, _NONE_5____________________________________, \ TR_RHUI, TR_RSAI, TR_RVAI, TR_RSPI, ___x___, _NONE_5____________________________________, \
_NONE_3__________________, _LAYER_TRANS_____________ _NONE_3__________________, _NONE_3__________________