1
0
Fork 0

[Keymap] plattfot - Keymap updates for Kyria (#13449)

- Major change in the keymap to work with EurKey. Which relaxes some
  constraints it had before when it had to take in consideration two
  layouts.

  With this the parenthesis can be moved to a better location instead
  of being in the top right corner.

  This also allows esc, del and rctrl to be moved to the base layer.

  Only downside is that ctrl+lalt needed to be removed and instead
  AltGr takes it's place. Add rctrl on right thumb cluster to
  compensate for this which need some reorganization on the thumb
  cluster.

- Split the symbol and function keys layer into two layers, one for
  each hand. Make it easier to press symbols and function keys.

- Add some symbols specific for the EurKey layout.

- Change from running C-<tab> S-C-<tab> to page up/down for the right
  rotary. As holding ctrl and using page up/down works the same in
  firefox. Which allows the rotary to be useful for other things.

- Move scroll lock and insert to right rotary.

- Introducing close tap (CLO_TAP), which is a combination of the
  double tap feature and my macros. E.g. pressing CLO_TAP and ( will
  generate ()←. Which removes the need of the macros and makes it more
  useful than DBL_TAP as it now saves me some keypresses. CLO_TAP exist
  on both the left and right hand layers to make it easy to use.

- Use text for the secondary oled, firmware is too big after rebasing
  on upstream master.

- Update image in the readme to reflect my new layout.
This commit is contained in:
Fredrik Salomonsson 2021-07-10 22:37:28 -07:00 committed by GitHub
parent 2c6cff4cb7
commit 0a8accae06
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 241 additions and 190 deletions

View file

@ -1,6 +1,6 @@
# plattfot's keymap for [Kyria](https://github.com/splitkb/kyria)
![Keyboard](https://i.imgur.com/Pvsm973l.jpg)
![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
@ -11,28 +11,44 @@ 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
```
// ,-------------------------------------------. ,-------------------------------------------.
// | ` | Q | W | E | R | T | | Y | U | I | O | P | Å |
// |--------+------+------+------+------+------| |------+------+------+------+------+--------|
// | Tab | A | S | D | F | G | | H | J | K | L | ; : | ' " |
// |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
// | LShift | Z | X | C | V | B | Lead | RAISE| | LOWER|DBLTAP| N | M | , < | . > | / ? | RShift |
// `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
// | MPlay| GUI | LCtrl| Space| LALT | | Enter|BSpace| NAV | LCTL+|Worksp|
// | | | | | | | | | | LALT |toggle|
// `----------------------------------' `----------------------------------'
// ,-------------------------------------------. ,-------------------------------------------.
// | 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 typing in both English and Swedish (hence the Å in the top
right corner, which is just [ on an US layout).
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.
Modifiers are mostly on the left hand, to make it comfortable when
require keyboard and mouse. For example working in a DCC (Digital
Content Creation tool) like [Houdini](https://www.sidefx.com/) and
[Maya](https://www.autodesk.com/products/maya/overview).
AltGr is used to access the extra keys in the
[EurKey](https://eurkey.steffen.bruentjen.eu/layout.html) layout.
## Notable features on this layer
@ -41,9 +57,7 @@ Left rotary encoder
- Rotate: Volume control
Right rotary encoder
- Press: Call keybinding that toggles between two recent workspaces.
For [sway](https://swaywm.org/) that is `workspace
back_and_forth`
- 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
@ -53,103 +67,92 @@ Right rotary encoder
[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. The right rotary encoder also
helps jumping back and forth between two workspaces by just pressing
down my right palm.
between 1-5 with just the left hand.
The double tap key, which 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 repeat the next key twice. Reason for this is
that I found it a bit awkward to hold down the lower key when I need
to type a symbol twice. Which happens a lot when programming or
running commands on the command line. Does not save me any key presses
but more comfortable to type double keys, for example `--` and `&&`.
# Lower Layer: Symbols
# Lower Layer: Left symbols/Right function keys
```
//
// ,-------------------------------------------. ,-------------------------------------------.
// | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | |
// |--------+------+------+------+------+------| |------+------+------+------+------+--------|
// | | | | _ | \ | - | + | | = | { | } | [ | ] | '' |
// |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
// | | [] | {} | () | <> | | | | | | | | | < | > | ? | |
// `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
// | Mute | | | | | | | | | | |
// | | | | | | | | | | | |
// `----------------------------------' `----------------------------------'
// ,-------------------------------------------. ,-------------------------------------------.
// | | ! | @ | # | $ | % | | F6 | F7 | F8 | F9 | F10 | |
// |--------+------+------+------+------+------| |------+------+------+------+------+--------|
// | | | | _ | \ | - | + | | F12 | | | | | |
// |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
// | | ° | : | ( | ) | × | |ADJUST| | | |CLOTAP| | | | | |
// `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
// | | | | | | | | | | | |
// | | | | | | | | | | | |
// `----------------------------------' `----------------------------------'
```
Contains most of the symbols, only exceptions are those that are
already on the default US base layer i.e. quotes, punctuation and
forward slash.
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
- Rotate: Skip next/previous song
The left letter bottom row contains macros to quickly type the
different types of brackets and move the cursor to be inside. For
example lower+c will type `()←`, where `←` is pressing the left arrow.
Same principle for the `''` macro. Really nice to have when
programming, and it is editor agnostic.
# Raise Layer: Function keys
```
// ,-------------------------------------------. ,-------------------------------------------.
// | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | |
// |--------+------+------+------+------+------| |------+------+------+------+------+--------|
// | | | | | | F11 | | F12 | | | | | |
// |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
// | | | | | | |ScLock| | | | Ins | | | | | |CapsLock|
// `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
// | | | | | | | | | | RAlt | |
// | | | | | | | | | | | |
// `----------------------------------' `----------------------------------'
```
Access to the functional keys, which I mostly use to run `emacs`
compilation mode.
This layer also includes key that changes the state, like insert and
caps lock.
Scroll Lock is used to toggle between English and Swedish.
## Notable features on this layer
Right rotary encoder
- Press: Right Alt, rarely use this, but it is needed for the Swedish
layout to type some symbols. But I find I mostly switch back
to the English layout if I need to type symbols. Might change
this in the future.
- Rotate: Moving between tabs in the browser, as described in this
[blog post](https://docs.splitkb.com/hc/en-us/articles/360010513760-How-can-I-use-a-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 | |
// |--------+------+------+------+------+------| |------+------+------+------+------+--------|
// | | | ESC | DEL | | | | | Left | Up | Down | Right| |
// | | | | | | | | | Left | Up | Down | Right| |
// |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
// | | | | | | | | | | | | | | | | | |
// `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
// | | | | | | | | | | RCtrl| |
// | | | | | | | | | | | |
// | | | | | | | | | | | |
// `----------------------------------' `----------------------------------'
```
Access to the number as well as the arrow keys. Got use to the number
row after using [ErgoDox](https://www.ergodox.io/) keyboards for a few
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.
Esc and Delete is also on this layer as they are easy to reach and they
only need to be chord with the modifiers.
# Adjust Layer: RGB
```
//
@ -165,4 +168,5 @@ only need to be chord with the modifiers.
// `----------------------------------' `----------------------------------'
```
Right now it only contains adjustment to the underglow.
Right now it only contains adjustment to the underglow. Activated by
holding down `RAISE` and `LOWER` at the same time.

View file

@ -1,4 +1,5 @@
/* 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
@ -37,4 +38,7 @@
#define LEADER_PER_KEY_TIMING
#define LEADER_TIMEOUT 350
#define TAPPING_TERM 200
// 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

@ -1,4 +1,4 @@
/* Copyright 2020 Fredrik Salomonsson <plattfot@gmail.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
@ -18,19 +18,26 @@
enum custom_keycodes {
PLACEHOLDER = SAFE_RANGE, // can always be here
// Macros, where | is the cursor
M_LRBRC, // [|]
M_LRCBR, // {|}
M_LRPRN, // (|)
M_LRABR, // <|>
M_DQUOT, // '|'
// New keys
DBL_TAP, // Repeat next key
CLO_TAP, // Close the next key press
};
// Double Tap feature based on post from drashna
// 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/
static bool double_tap_it = false;
// 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,
@ -40,89 +47,97 @@ enum layers {
_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
*
* ,-------------------------------------------. ,-------------------------------------------.
* | ` | Q | W | E | R | T | | Y | U | I | O | P | Å |
* | Esc | Q | W | E | R | T | | Y | U | I | O | P | Del |
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
* | Tab | A | S | D | F | G | | H | J | K | L | ; : | ' " |
* | Tab | A | S | D | F | G | | H | J | K | L | ; | ' |
* |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
* | LShift | Z | X | C | V | B | Lead | RAISE| | LOWER|DBLTAP| N | M | , < | . > | / ? | RShift |
* | LShift | Z | X | C | V | B | Lead | RAISE| | LOWER|BSpace| N | M | , | . | / | RShift |
* `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
* | MPlay| GUI | LCtrl| Space| LALT | | Enter|BSpace| NAV |LCTL+ |Worksp|
* | | | | | | | | | |LALT |toggle|
* | MPlay| GUI | LCtrl| Space| LALT | | RCtrl| Enter| NAV | RALT |Scroll|
* | | | | | | | | | | | Lock |
* `----------------------------------' `----------------------------------'
*/
[_DEFAULT] = LAYOUT(
KC_GRV, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
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, OSL(_RAISE), OSL(_LOWER), DBL_TAP, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_MPLY, KC_LGUI, KC_LCTL, KC_SPACE, KC_LALT, KC_ENT, KC_BSPC, MO(_NAV), LCTL(KC_LALT), LGUI(KC_B)
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: Symbols
* Lower Layer: Left symbols
*
* ,-------------------------------------------. ,-------------------------------------------.
* | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | |
* | | ! | @ | # | $ | % | | F6 | F7 | F8 | F9 | F10 | |
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
* | | | | _ | \ | - | + | | = | { | } | [ | ] | '' |
* | | | | _ | \ | - | + | | F12 | | | | | |
* |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
* | | [] | {} | () | <> | | | | | | | | | < | > | ? | |
* | | ° | : | ( | ) | × | |ADJUST| | | |CLOTAP| | | | | |
* `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
* | Mute | | | | | | | | | | |
* | | | | | | | | | | | |
* | | | | | | | | | | | |
* `----------------------------------' `----------------------------------'
*/
[_LOWER] = LAYOUT(
KC_TILDE,KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
_______, KC_PIPE, KC_UNDS, KC_BSLS, KC_MINS, KC_PLUS, KC_EQUAL,KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, M_DQUOT,
_______, M_LRBRC, M_LRCBR, M_LRPRN, M_LRABR, _______, _______, _______, _______, _______, _______, _______, KC_LT, KC_GT, KC_QUES, _______,
KC_MUTE, _______, _______, _______, _______, _______, _______, _______, _______, _______
_______, 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: Function keys
* Raise Layer: Right symbols + state
*
* ,-------------------------------------------. ,-------------------------------------------.
* | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | |
* | | F1 | F2 | F3 | F4 | F5 | | ^ | & | * | ~ | ? | |
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
* | | | | | | F11 | | F12 | | | | | |
* | | | | | | F11 | | = | { | } | [ | ] | ` |
* |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
* | | | | | | |ScLock| | | | Ins | | | | | |CapsLock|
* | | | | | |CLOTAP| | | |ADJUST| | | " | < | > | / |CapsLock|
* `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
* | | | | | | | | | | RAlt | |
* | Mute | | | | | | | | | |Insert|
* | | | | | | | | | | | |
* `----------------------------------' `----------------------------------'
*/
[_RAISE] = LAYOUT(
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
_______, _______, _______, _______, _______, KC_F11, KC_F12, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, KC_SLCK, _______, _______, KC_INS, _______, _______, _______, _______, _______, KC_CAPS,
_______, _______, _______, _______, _______, _______, _______, _______, KC_RALT, _______
_______, 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 keys, navigation, modification
* Navigation Layer: Number/Function keys, navigation
*
* ,-------------------------------------------. ,-------------------------------------------.
* | | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | |
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
* | | | Esc | Del | | | | | Left | Up | Down | Right| |
* | | | | | | | | | Left | Up | Down | Right| |
* |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
* | | | | | | | | | | | | | | | | | |
* `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
* | | | | | | | | | | RCtrl| |
* | | | | | | | | | | | |
* | | | | | | | | | | | |
* `----------------------------------' `----------------------------------'
*/
[_NAV] = LAYOUT(
_______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
_______, _______, KC_ESC, KC_DEL, _______, _______, _______, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT, _______,
_______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, KC_RCTL, _______
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
/*
* Adjust Layer: RGB
@ -173,67 +188,81 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (record->event.pressed) {
switch (keycode) {
case M_LRPRN:
// Double tap gets messed up with macros, turning it off
double_tap_it = false;
SEND_STRING("()" SS_TAP(X_LEFT));
return false;
case M_LRCBR:
double_tap_it = false;
SEND_STRING("{}" SS_TAP(X_LEFT));
return false;
case M_LRBRC:
double_tap_it = false;
SEND_STRING("[]" SS_TAP(X_LEFT));
return false;
case M_LRABR:
double_tap_it = false;
SEND_STRING("<>" SS_TAP(X_LEFT));
return false;
case M_DQUOT:
double_tap_it = false;
SEND_STRING("''" SS_TAP(X_LEFT));
return false;
case DBL_TAP:
double_tap_it = !double_tap_it;
case CLO_TAP:
close_tap_it = close_tap_it & CLO_ACTIVE?
CLO_USED:
CLO_ACTIVE|CLO_PRESSED;
return false;
case KC_LEAD:
double_tap_it = false;
close_tap_it = CLO_DISABLED;
return true;
}
} else if (double_tap_it &&
keycode != DBL_TAP &&
} else if (close_tap_it & CLO_ACTIVE &&
keycode != CLO_TAP &&
keycode != OSL(_RAISE) &&
keycode != OSL(_LOWER) &&
keycode != MO(_NAV)) {
double_tap_it = false;
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); }
//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_kyria_logo(void) {
static const char PROGMEM kyria_logo[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,128,192,224,240,112,120, 56, 60, 28, 30, 14, 14, 14, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 14, 14, 14, 30, 28, 60, 56,120,112,240,224,192,128,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,192,224,240,124, 62, 31, 15, 7, 3, 1,128,192,224,240,120, 56, 60, 28, 30, 14, 14, 7, 7,135,231,127, 31,255,255, 31,127,231,135, 7, 7, 14, 14, 30, 28, 60, 56,120,240,224,192,128, 1, 3, 7, 15, 31, 62,124,240,224,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0,240,252,255, 31, 7, 1, 0, 0,192,240,252,254,255,247,243,177,176, 48, 48, 48, 48, 48, 48, 48,120,254,135, 1, 0, 0,255,255, 0, 0, 1,135,254,120, 48, 48, 48, 48, 48, 48, 48,176,177,243,247,255,254,252,240,192, 0, 0, 1, 7, 31,255,252,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0,255,255,255, 0, 0, 0, 0, 0,254,255,255, 1, 1, 7, 30,120,225,129,131,131,134,134,140,140,152,152,177,183,254,248,224,255,255,224,248,254,183,177,152,152,140,140,134,134,131,131,129,225,120, 30, 7, 1, 1,255,255,254, 0, 0, 0, 0, 0,255,255,255, 0, 0, 0, 0,255,255, 0, 0,192,192, 48, 48, 0, 0,240,240, 0, 0, 0, 0, 0, 0,240,240, 0, 0,240,240,192,192, 48, 48, 48, 48,192,192, 0, 0, 48, 48,243,243, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48,192,192, 0, 0, 0, 0, 0,
0, 0, 0,255,255,255, 0, 0, 0, 0, 0,127,255,255,128,128,224,120, 30,135,129,193,193, 97, 97, 49, 49, 25, 25,141,237,127, 31, 7,255,255, 7, 31,127,237,141, 25, 25, 49, 49, 97, 97,193,193,129,135, 30,120,224,128,128,255,255,127, 0, 0, 0, 0, 0,255,255,255, 0, 0, 0, 0, 63, 63, 3, 3, 12, 12, 48, 48, 0, 0, 0, 0, 51, 51, 51, 51, 51, 51, 15, 15, 0, 0, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 63, 63, 48, 48, 0, 0, 12, 12, 51, 51, 51, 51, 51, 51, 63, 63, 0, 0, 0, 0, 0,
0, 0, 0, 0, 15, 63,255,248,224,128, 0, 0, 3, 15, 63,127,255,239,207,141, 13, 12, 12, 12, 12, 12, 12, 12, 30,127,225,128, 0, 0,255,255, 0, 0,128,225,127, 30, 12, 12, 12, 12, 12, 12, 12, 13,141,207,239,255,127, 63, 15, 3, 0, 0,128,224,248,255, 63, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 3, 7, 15, 62,124,248,240,224,192,128, 1, 3, 7, 15, 30, 28, 60, 56,120,112,112,224,224,225,231,254,248,255,255,248,254,231,225,224,224,112,112,120, 56, 60, 28, 30, 15, 7, 3, 1,128,192,224,240,248,124, 62, 15, 7, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 7, 15, 14, 30, 28, 60, 56,120,112,112,112,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,112,112,112,120, 56, 60, 28, 30, 14, 15, 7, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
oled_write_raw_P(kyria_logo, sizeof(kyria_logo));
}
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,
@ -243,6 +272,11 @@ static void render_qmk_logo(void) {
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
@ -254,16 +288,16 @@ static void render_status(void) {
oled_write_P(PSTR("Layer: "), false);
switch (get_highest_layer(layer_state)) {
case _DEFAULT:
oled_write_P(PSTR("plattfot\n"), false);
oled_write_P(PSTR("base\n"), false);
break;
case _LOWER:
oled_write_P(PSTR("symbols\n"), false);
oled_write_P(PSTR("<-sym/fun->\n"), false);
break;
case _RAISE:
oled_write_P(PSTR("function keys\n"), false);
oled_write_P(PSTR("<-fun/sym->\n"), false);
break;
case _NAV:
oled_write_P(PSTR("numbers/navi\n"), false);
oled_write_P(PSTR("num/nav\n"), false);
break;
case _ADJUST:
oled_write_P(PSTR("adjust\n"), false);
@ -276,15 +310,15 @@ static void render_status(void) {
led_t led_state = host_keyboard_led_state();
if (led_state.num_lock) {
oled_write_P(PSTR("NUMLCK "), false);
} else if (double_tap_it) {
oled_write_P(PSTR("Double "), 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 (double_tap_it) {
} else if (close_tap_it) {
oled_write_P(PSTR("Tap "), false);
} else {
oled_write_P(PSTR(" "), false);
@ -297,7 +331,7 @@ void oled_task_user(void) {
if (is_keyboard_master()) {
render_status(); // Renders the current keyboard state (layer, lock, caps, scroll, etc)
} else {
render_kyria_logo();
render_static_info();
}
}
#endif
@ -316,6 +350,16 @@ bool encoder_update_user(uint8_t index, bool clockwise) {
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) {
@ -330,13 +374,12 @@ bool encoder_update_user(uint8_t index, bool clockwise) {
} else if (index == 1) {
switch (get_highest_layer(layer_state)) {
case _RAISE:
// Credit to Thomas Baart for this
// See https://docs.splitkb.com/hc/en-us/articles/360010513760-How-can-I-use-a-rotary-encoder-
// Scroll through the workspaces
if (clockwise) {
tap_code16(C(KC_TAB));
tap_code16(G(KC_GT));
clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED);
} else {
tap_code16(S(C(KC_TAB)));
tap_code16(G(KC_LT));
clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED);
}
break;