[Keyboard] Fix up SplitKB keyboards (#13511)

This commit is contained in:
Drashna Jaelre
2021-07-25 18:18:39 -07:00
committed by GitHub
parent d908970522
commit 4bb595f94b
110 changed files with 1010 additions and 312 deletions

View File

@@ -0,0 +1,172 @@
# plattfot's keymap for [Kyria](https://github.com/splitkb/kyria)
![Keyboard](https://i.imgur.com/mcefoHnh.jpg)
Designed to be ease of use when programming, typing in both English
and Swedish and navigating around in a tiling window manager, in my
case [sway](https://swaywm.org/). Uses the two rotary encoders (lower
left/right thumb row) as two palm buttons.
This keymap avoids [Mod-tap](https://docs.qmk.fm/#/mod_tap) as they do
not work for me. [Kyria](https://github.com/splitkb/kyria) has enough
thumb keys to make it work without them.
The symbols are split into two layers, one for each hand. Then the
layers are activated by the opposite thumb. Found that having all
symbols on one layer then have one thumb activate them made it awkward
to press keys with the index finger on the same hand.
Custom feature I call the close tap (Clotap) key, I based on a code
snippet from a
[reddit post](https://www.reddit.com/r/olkb/comments/citkbx/double_key_press_modifier_qmkwould_work_like/ev9cue8).
When pressed, it will insert the closing equivivalent key and press
`←` (left arrow). For example tapping Clotap then press `(` will
result in the keypresses `()←`, if pressing `"` will result in `""←`,
if pressing `)` will result in `)←(`. Really nice to have when
programming, it is editor agnostic and saves me two keypresses (need
to press NAV+j for `←`). It also removes the need for having specific
macros for these as I had before.
# Base Layer: Default
```
// ,-------------------------------------------. ,-------------------------------------------.
// | Esc | Q | W | E | R | T | | Y | U | I | O | P | Del |
// |--------+------+------+------+------+------| |------+------+------+------+------+--------|
// | Tab | A | S | D | F | G | | H | J | K | L | ; | ' |
// |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
// | LShift | Z | X | C | V | B | Lead | RAISE| | LOWER|BSpace| N | M | , | . | / | RShift |
// `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
// | MPlay| GUI | LCtrl| Space| LALT | | RCtrl| Enter| NAV | RALT |Scroll|
// | | | | | | | | | | | Lock |
// `----------------------------------' `----------------------------------'
```
Setup for using the
[EurKey](https://eurkey.steffen.bruentjen.eu/layout.html) layout. As
it's annoying to have to toggle us and swedish layout which shifts
symbols around.
AltGr is used to access the extra keys in the
[EurKey](https://eurkey.steffen.bruentjen.eu/layout.html) layout.
## Notable features on this layer
Left rotary encoder
- Press: play/pause
- Rotate: Volume control
Right rotary encoder
- Press: Scroll lock
- Rotate: Page up/Page down. Used mouse scrolling at first. But
scrolling only works in the window where the mouse pointer
is. Which kind of defeated the purpose of having the scroll
on the keyboard, as I still needed to move my hand to the
mouse and then I could just use the scroll on the mouse.
[Leader key](https://docs.qmk.fm/#/feature_leader_key) is mainly used
for jumping between workspaces. Otherwise I would need to use both
hands everytime I need to switch. With the leader key I can jump
between 1-5 with just the left hand.
# Lower Layer: Left symbols/Right function keys
```
// ,-------------------------------------------. ,-------------------------------------------.
// | | ! | @ | # | $ | % | | F6 | F7 | F8 | F9 | F10 | |
// |--------+------+------+------+------+------| |------+------+------+------+------+--------|
// | | | | _ | \ | - | + | | F12 | | | | | |
// |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
// | | ° | : | ( | ) | × | |ADJUST| | | |CLOTAP| | | | | |
// `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
// | | | | | | | | | | | |
// | | | | | | | | | | | |
// `----------------------------------' `----------------------------------'
```
Symbols for the left hand, function keys for the right hand.
I had the function keys at the bottom on the navigation layer. But it
was annoying when typing version strings. Hitting f1-5+f11 involved
both hands. And it turned out that my keybinding for closing a window
(Super+Shift+c) and rebooting my machine (Super+Shift+f3) ended up on
the same physical keys.
Splitting them up like this allows me to hit all the function keys
with just one hand and I wont accidentally reboot my machine when
trying to close a window.
## Notable features on this layer
Left rotary encoder
- Rotate: Skip next/previous song
Clotap on the right hand.
Has two Eurkey specific symbols `°` and `×` on the left hand.
# Raise Layer: Left function/Right symbols + state keys
```
// ,-------------------------------------------. ,-------------------------------------------.
// | | F1 | F2 | F3 | F4 | F5 | | ^ | & | * | ~ | ? | |
// |--------+------+------+------+------+------| |------+------+------+------+------+--------|
// | | | | | | F11 | | = | { | } | [ | ] | ` |
// |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
// | | | | | |CLOTAP| | | |ADJUST| | … | " | < | > | / |CapsLock|
// `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
// | Mute | | | | | | | | | |Insert|
// | | | | | | | | | | | |
// `----------------------------------' `----------------------------------'
```
Function keys for the left hand, symbols for the right hand.
This layer also includes caps lock and insert.
## Notable features on this layer
Left rotary encoder
- Press: mute
Right rotary encoder
- Press: Toggle insert mode
- Rotate: Scrolling between workspaces in `sway`.
Clotap on the left hand.
# Navigation Layer: Number keys, navigation
```
//
// ,-------------------------------------------. ,-------------------------------------------.
// | | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | |
// |--------+------+------+------+------+------| |------+------+------+------+------+--------|
// | | | | | | | | | Left | Up | Down | Right| |
// |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
// | | | | | | | | | | | | | | | | | |
// `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
// | | | | | | | | | | | |
// | | | | | | | | | | | |
// `----------------------------------' `----------------------------------'
```
Access to the number and the arrow keys. Got use to the number row
after using [ErgoDox](https://www.ergodox.io/) keyboards for a few
years. Do not feel I need a numpad layer, which seems to be quite
common with small keyboards like this.
# Adjust Layer: RGB
```
//
// ,-------------------------------------------. ,-------------------------------------------.
// | | | | | | | | | | | | | |
// |--------+------+------+------+------+------| |------+------+------+------+------+--------|
// | | TOG | SAI | HUI | VAI | MOD | | | | | | | |
// |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
// | | | SAD | HUD | VAD | RMOD | | | | | | | | | | | |
// `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
// | | | | | | | | | | | |
// | | | | | | | | | | | |
// `----------------------------------' `----------------------------------'
```
Right now it only contains adjustment to the underglow. Activated by
holding down `RAISE` and `LOWER` at the same time.

View File

@@ -0,0 +1,44 @@
/* Copyright 2019 Thomas Baart <thomas@splitkb.com>
* Copyright 2020-2021 Fredrik Salomonsson <plattfot@gmail.com>
*
* 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
#ifdef OLED_DRIVER_ENABLE
#define OLED_DISPLAY_128X64
#endif
#ifdef RGBLIGHT_ENABLE
#define RGBLIGHT_ANIMATIONS
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
#endif
#define ENCODER_DIRECTION_FLIP
// Fixing the skipping with the EC11K encoder
#define ENCODER_RESOLUTION 2
#define EE_HANDS
// The Leader key allows to flexibly assign macros to key sequences.
#define LEADER_PER_KEY_TIMING
#define LEADER_TIMEOUT 350
// Remove the delay for the OSL keys. Not using any other tap keys.
// Otherwise TAPPING_TERM_PER_KEY would be the way to go.
#define TAPPING_TERM 0

View File

@@ -0,0 +1,480 @@
/* Copyright 2020-2021 Fredrik Salomonsson <plattfot@gmail.com>
*
* 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
#include "version.h"
enum custom_keycodes {
PLACEHOLDER = SAFE_RANGE, // can always be here
// New keys
CLO_TAP, // Close the next key press
};
// Close tap feature based on a post from drashna
// https://www.reddit.com/r/olkb/comments/citkbx/double_key_press_modifier_qmkwould_work_like/ev9cue8/
// Will insert the closing equivalent key and move the cursor inside.
// For example clo_tap and then ( will result in (|), where | is the
// cursor. For " it will be "|" as the close equivalent key is the
// same key.
enum close_tap_modes {
CLO_DISABLED = 0b000,
CLO_PRESSED = 0b001, // Close tap key is pressed
CLO_ACTIVE = 0b010, // Close tap next keypress
CLO_USED = 0b100, // Turn off when close tap key is released
};
#define CLO_RELEASE(flag) flag & ~CLO_PRESSED
static enum close_tap_modes close_tap_it = CLO_DISABLED;
enum layers {
_DEFAULT,
_LOWER,
_RAISE,
_NAV,
_ADJUST,
};
#define MO_ADJT MO(_ADJUST)
#define L_RAISE OSL(_RAISE)
#define L_LOWER OSL(_LOWER)
#define L_NAV MO(_NAV)
#define EU_TDOT RSA(KC_SLSH)
#define EU_CDOT RALT(KC_EQUAL)
#define EU_DEG RALT(KC_SCLN)
// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
* Base Layer: Default
*
* ,-------------------------------------------. ,-------------------------------------------.
* | Esc | Q | W | E | R | T | | Y | U | I | O | P | Del |
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
* | Tab | A | S | D | F | G | | H | J | K | L | ; | ' |
* |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
* | LShift | Z | X | C | V | B | Lead | RAISE| | LOWER|BSpace| N | M | , | . | / | RShift |
* `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
* | MPlay| GUI | LCtrl| Space| LALT | | RCtrl| Enter| NAV | RALT |Scroll|
* | | | | | | | | | | | Lock |
* `----------------------------------' `----------------------------------'
*/
[_DEFAULT] = LAYOUT(
KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL,
KC_TAB, 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_LEAD, L_RAISE, L_LOWER, KC_BSPC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_MPLY,KC_LGUI,KC_LCTL, KC_SPACE, KC_LALT, KC_RCTL, KC_ENT, L_NAV, KC_RALT, KC_SLCK
),
/*
* Lower Layer: Left symbols
*
* ,-------------------------------------------. ,-------------------------------------------.
* | | ! | @ | # | $ | % | | F6 | F7 | F8 | F9 | F10 | |
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
* | | | | _ | \ | - | + | | F12 | | | | | |
* |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
* | | ° | : | ( | ) | × | |ADJUST| | | |CLOTAP| | | | | |
* `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
* | | | | | | | | | | | |
* | | | | | | | | | | | |
* `----------------------------------' `----------------------------------'
*/
[_LOWER] = LAYOUT(
_______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
_______, KC_PIPE, KC_UNDS, KC_BSLS, KC_MINS, KC_PLUS, KC_F12, _______, _______, _______, _______, _______,
_______, EU_DEG, KC_COLN, KC_LPRN, KC_RPRN, EU_CDOT, _______, MO_ADJT, _______, _______, CLO_TAP, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
/*
* Raise Layer: Right symbols + state
*
* ,-------------------------------------------. ,-------------------------------------------.
* | | F1 | F2 | F3 | F4 | F5 | | ^ | & | * | ~ | ? | |
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
* | | | | | | F11 | | = | { | } | [ | ] | ` |
* |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
* | | | | | |CLOTAP| | | |ADJUST| | … | " | < | > | / |CapsLock|
* `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
* | Mute | | | | | | | | | |Insert|
* | | | | | | | | | | | |
* `----------------------------------' `----------------------------------'
*/
[_RAISE] = LAYOUT(
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_CIRC, KC_AMPR, KC_ASTR, KC_TILDE,KC_QUES, _______,
_______, _______, _______, _______, _______, KC_F11, KC_EQUAL,KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_GRV,
_______, _______, _______, _______, _______, CLO_TAP, _______, _______, MO_ADJT, _______, EU_TDOT, KC_DQUO, KC_LT, KC_GT, _______, KC_CAPS,
KC_MUTE, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS
),
/*
* Navigation Layer: Number/Function keys, navigation
*
* ,-------------------------------------------. ,-------------------------------------------.
* | | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | |
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
* | | | | | | | | | Left | Up | Down | Right| |
* |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
* | | | | | | | | | | | | | | | | | |
* `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
* | | | | | | | | | | | |
* | | | | | | | | | | | |
* `----------------------------------' `----------------------------------'
*/
[_NAV] = LAYOUT(
_______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
_______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
/*
* Adjust Layer: RGB
*
* ,-------------------------------------------. ,-------------------------------------------.
* | | | | | | | | | | | | | |
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
* | | TOG | SAI | HUI | VAI | MOD | | | | | | | |
* |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
* | | | SAD | HUD | VAD | RMOD | | | | | | | | | | | |
* `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
* | | | | | | | | | | | |
* | | | | | | | | | | | |
* `----------------------------------' `----------------------------------'
*/
[_ADJUST] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_TOG, RGB_SAI, RGB_HUI, RGB_VAI, RGB_MOD, _______, _______, _______, _______, _______, _______,
_______, _______, RGB_SAD, RGB_HUD, RGB_VAD, RGB_RMOD,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
// /*
// * Layer template
// *
// * ,-------------------------------------------. ,-------------------------------------------.
// * | | | | | | | | | | | | | |
// * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
// * | | | | | | | | | | | | | |
// * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
// * | | | | | | | | | | | | | | | | | |
// * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
// * | | | | | | | | | | | |
// * | | | | | | | | | | | |
// * `----------------------------------' `----------------------------------'
// */
// [_LAYERINDEX] = LAYOUT(
// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
// ),
};
// clang-format on
/* void keyboard_post_init_user(void) { */
/* rgblight_setrgb(51, 135, 204); */
/* } */
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (record->event.pressed) {
switch (keycode) {
case CLO_TAP:
close_tap_it = close_tap_it & CLO_ACTIVE?
CLO_USED:
CLO_ACTIVE|CLO_PRESSED;
return false;
case KC_LEAD:
close_tap_it = CLO_DISABLED;
return true;
}
} else if (close_tap_it & CLO_ACTIVE &&
keycode != CLO_TAP &&
keycode != OSL(_RAISE) &&
keycode != OSL(_LOWER) &&
keycode != MO(_NAV)) {
close_tap_it = close_tap_it & CLO_PRESSED?
close_tap_it | CLO_USED:
CLO_DISABLED;
switch(keycode)
{
case KC_LPRN:
tap_code16(KC_RPRN);
tap_code16(KC_LEFT);
break;
case KC_RPRN:
tap_code16(KC_LEFT);
tap_code16(KC_LPRN);
break;
case KC_LCBR:
tap_code16(KC_RCBR);
tap_code16(KC_LEFT);
break;
case KC_RCBR:
tap_code16(KC_LEFT);
tap_code16(KC_LCBR);
break;
case KC_LBRC:
tap_code16(KC_RBRC);
tap_code16(KC_LEFT);
break;
case KC_RBRC:
tap_code16(KC_LEFT);
tap_code16(KC_LBRC);
break;
case KC_LT:
tap_code16(KC_GT);
tap_code16(KC_LEFT);
break;
case KC_GT:
tap_code16(KC_LEFT);
tap_code16(KC_LT);
break;
default:
tap_code16(keycode);
tap_code16(KC_LEFT);
break;
}
} else {
switch (keycode) {
case CLO_TAP:
close_tap_it = close_tap_it & CLO_USED?
CLO_DISABLED:
CLO_RELEASE(close_tap_it);
}
}
return true;
}
//layer_state_t layer_state_set_user(layer_state_t state) { return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST); }
#ifdef OLED_DRIVER_ENABLE
oled_rotation_t oled_init_user(oled_rotation_t rotation) { return OLED_ROTATION_180; }
// clang-format off
static void render_qmk_logo(void) {
static const char PROGMEM qmk_logo[] = {
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,0};
oled_write_P(qmk_logo, false);
}
// clang-format on
static void render_static_info(void) {
render_qmk_logo();
oled_write_P(PSTR("Kyria rev1.0\n"), false);
oled_write_P(PSTR("Keymap: plattfot v2\n"), false);
}
static void render_status(void) {
// QMK Logo and version information
render_qmk_logo();
oled_write_P(PSTR("Kyria rev1.0\n"), false);
oled_write_P(PSTR("v" QMK_VERSION "\n"), false);
// Host Keyboard Layer Status
oled_write_P(PSTR("Layer: "), false);
switch (get_highest_layer(layer_state)) {
case _DEFAULT:
oled_write_P(PSTR("base\n"), false);
break;
case _LOWER:
oled_write_P(PSTR("<-sym/fun->\n"), false);
break;
case _RAISE:
oled_write_P(PSTR("<-fun/sym->\n"), false);
break;
case _NAV:
oled_write_P(PSTR("num/nav\n"), false);
break;
case _ADJUST:
oled_write_P(PSTR("adjust\n"), false);
break;
default:
oled_write_P(PSTR("undefined\n"), false);
}
// Host Keyboard LED Status and Double tap
led_t led_state = host_keyboard_led_state();
if (led_state.num_lock) {
oled_write_P(PSTR("NUMLCK "), false);
} else if (close_tap_it) {
oled_write_P(PSTR("Close "), false);
} else {
oled_write_P(PSTR(" "), false);
}
if (led_state.caps_lock) {
oled_write_P(PSTR("CAPLCK "), false);
} else if (close_tap_it) {
oled_write_P(PSTR("Tap "), false);
} else {
oled_write_P(PSTR(" "), false);
}
oled_write_P(led_state.scroll_lock ? PSTR("SCRLCK ") : PSTR(" "), false);
}
void oled_task_user(void) {
if (is_keyboard_master()) {
render_status(); // Renders the current keyboard state (layer, lock, caps, scroll, etc)
} else {
render_static_info();
}
}
#endif
#ifdef ENCODER_ENABLE
bool encoder_update_user(uint8_t index, bool clockwise) {
if (index == 0) {
switch (get_highest_layer(layer_state)) {
case _LOWER:
// Skip/Prev song
if (clockwise) {
tap_code(KC_MNXT);
clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED);
} else {
tap_code(KC_MPRV);
clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED);
}
break;
case _NAV:
// Brightness control
if (clockwise) {
tap_code(KC_BRIU);
clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED);
} else {
tap_code(KC_BRID);
clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED);
}
break;
default:
// Volume control
if (clockwise) {
tap_code(KC_VOLU);
clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED);
} else {
tap_code(KC_VOLD);
clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED);
}
break;
}
} else if (index == 1) {
switch (get_highest_layer(layer_state)) {
case _RAISE:
// Scroll through the workspaces
if (clockwise) {
tap_code16(G(KC_GT));
clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED);
} else {
tap_code16(G(KC_LT));
clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED);
}
break;
default:
// Scrolling
if (clockwise) {
tap_code(KC_PGDN);
clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED);
} else {
tap_code(KC_PGUP);
clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED);
}
break;
}
}
return true;
}
#endif
LEADER_EXTERNS();
void matrix_scan_user(void) {
LEADER_DICTIONARY() {
leading = false;
leader_end();
// Sway navigation
SEQ_ONE_KEY(KC_Q) { // Jump to workspace 1
SEND_STRING(SS_LGUI("1"));
}
SEQ_ONE_KEY(KC_W) { // Jump to workspace 2
SEND_STRING(SS_LGUI("2"));
}
SEQ_ONE_KEY(KC_E) { // Jump to workspace 3
SEND_STRING(SS_LGUI("3"));
}
SEQ_ONE_KEY(KC_R) { // Jump to workspace 4
SEND_STRING(SS_LGUI("4"));
}
SEQ_ONE_KEY(KC_T) { // Jump to workspace 5
SEND_STRING(SS_LGUI("5"));
}
SEQ_ONE_KEY(KC_Y) { // Jump to workspace 6
SEND_STRING(SS_LGUI("6"));
}
SEQ_ONE_KEY(KC_U) { // Jump to workspace 7
SEND_STRING(SS_LGUI("7"));
}
SEQ_ONE_KEY(KC_I) { // Jump to workspace 8
SEND_STRING(SS_LGUI("8"));
}
SEQ_ONE_KEY(KC_O) { // Jump to workspace 9
SEND_STRING(SS_LGUI("9"));
}
SEQ_ONE_KEY(KC_P) { // Jump to workspace 0
SEND_STRING(SS_LGUI("0"));
}
SEQ_ONE_KEY(KC_G) { // View scratch pad
SEND_STRING(SS_LGUI("-"));
}
// Sway move window
SEQ_TWO_KEYS(KC_M, KC_Q) { // Move to workspace 1
SEND_STRING(SS_LSFT(SS_LGUI("1")));
}
SEQ_TWO_KEYS(KC_M, KC_W) { // Move to workspace 2
SEND_STRING(SS_LSFT(SS_LGUI("2")));
}
SEQ_TWO_KEYS(KC_M, KC_E) { // Move to workspace 3
SEND_STRING(SS_LSFT(SS_LGUI("3")));
}
SEQ_TWO_KEYS(KC_M, KC_R) { // Move to workspace 4
SEND_STRING(SS_LSFT(SS_LGUI("4")));
}
SEQ_TWO_KEYS(KC_M, KC_T) { // Move to workspace 5
SEND_STRING(SS_LSFT(SS_LGUI("5")));
}
SEQ_TWO_KEYS(KC_M, KC_Y) { // Move to workspace 6
SEND_STRING(SS_LSFT(SS_LGUI("6")));
}
SEQ_TWO_KEYS(KC_M, KC_U) { // Move to workspace 7
SEND_STRING(SS_LSFT(SS_LGUI("7")));
}
SEQ_TWO_KEYS(KC_M, KC_I) { // Move to workspace 8
SEND_STRING(SS_LSFT(SS_LGUI("8")));
}
SEQ_TWO_KEYS(KC_M, KC_O) { // Move to workspace 9
SEND_STRING(SS_LSFT(SS_LGUI("9")));
}
SEQ_TWO_KEYS(KC_M, KC_P) { // Move to workspace 0
SEND_STRING(SS_LSFT(SS_LGUI("0")));
}
SEQ_TWO_KEYS(KC_M, KC_G) { // Move to scratch pad
SEND_STRING(SS_LSFT(SS_LGUI("-")));
}
}
}

View File

@@ -0,0 +1,5 @@
OLED_DRIVER_ENABLE = yes # Enables the use of OLED displays
ENCODER_ENABLE = yes # Enables the use of one or more encoders
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
LEADER_ENABLE = yes # Enable the Leader Key feature
MOUSEKEY_ENABLE = no # Disable mouse, need to save space.