Skip to content

Commit

Permalink
Kintwin controller for kinesis keyboard, split layout (qmk#21614)
Browse files Browse the repository at this point in the history
Co-authored-by: Ryan <[email protected]>
  • Loading branch information
2 people authored and autoferrit committed Dec 6, 2023
1 parent 421f84d commit 0b56076
Show file tree
Hide file tree
Showing 29 changed files with 566 additions and 23 deletions.
3 changes: 3 additions & 0 deletions keyboards/kinesis/alvicstep/alvicstep.c
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later

#include "alvicstep.h"

// begin section origin https://github.com/alvicstep/tmk_keyboard
Expand Down
3 changes: 3 additions & 0 deletions keyboards/kinesis/alvicstep/alvicstep.h
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later

#pragma once

#include "quantum.h"
Expand Down
3 changes: 3 additions & 0 deletions keyboards/kinesis/alvicstep/config.h
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later

#pragma once

/* key matrix size */
Expand Down
10 changes: 10 additions & 0 deletions keyboards/kinesis/alvicstep/info.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,16 @@
"pid": "0x6060",
"device_version": "0.0.1"
},
"features": {
"bootmagic": true,
"console": false,
"command": false,
"mousekey": true,
"extrakey": true,
"nkro": true,
"audio": false,
"backlight": false
},
"processor": "at90usb1286",
"bootloader": "halfkay",
"layouts": {
Expand Down
135 changes: 135 additions & 0 deletions keyboards/kinesis/keymaps/alvicstep/keymap.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
// Copyright 2023 Alex Stepanov (@alvicstep)
// SPDX-License-Identifier: GPL-2.0-or-later

#include QMK_KEYBOARD_H

enum layer_names {
_BASE, // default layer
_KEYPAD, // arrow keys, shifted symbols, HOME, END, PGUP, PGDN, FKeys, CTRL(TAB)
_NUMPAD // numpad keys
};

/* ,------------------------------------------------------------------------------------------------------------------------.
* | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | | F9 | F10 | F11 | F12 |PSCR|SLCK|PAUS|KPAD|BOOT|
* |--------+------+------+------+-------+------+--------------------------------+------+------+------+------+------+--------|
* | -_ | 1! | 2@ | 3# | 4$ | 5% | | 6^ | 7& | 8* | 9( | 0) | =+ |
* |--------+------+------+------+-------+------| +------+------+------+------+------+--------|
* | Tab | Q | W | E | R | T | | Y | U | I | O | P | \| |
* |--------+------+------+------+-------+------| |------+------+------+------+------+--------|
* | Del | A | S | D | F | G | | H | J | K | L | ;: | '" |
* |--------+------+------+------+-------+------| |------+------+------+------+------+--------|
* | Shift | Z | X | C | V | B | | N | M | ,. | .> | /? |Sht/Ent |
* `--------+------+------+------+-------+------- `------+------+------+------+------+--------'
* | `~ | Gui | Esc |MO(Num)| | [{ | ]} | | |
* `----------------------------' `---------------------------'
* ,---------------. ,---------------.
* |Alt+Tab| Alt | | Alt |TO(Num)|
* ,------|------ |-------| |-------+-------+------.
* | | | Shift | | Shift | | |
* | BkSp | KPAD |-------| |------ | KPAD | Space|
* | | | Ctrl | | Ctrl | | |
* `----------------------' `----------------------'
*/

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT(
KC_ESC,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_PSCR,KC_SCRL,KC_PAUS,TO(_KEYPAD),QK_BOOT,
KC_MINS,KC_1,KC_2,KC_3,KC_4,KC_5, KC_6,KC_7,KC_8,KC_9,KC_0,KC_EQL,
KC_TAB,KC_Q,KC_W,KC_E,KC_R,KC_T, KC_Y,KC_U,KC_I,KC_O,KC_P,KC_BSLS,
KC_DEL,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,SC_SENT,
KC_GRV,KC_LGUI,KC_ESC,MO(_NUMPAD), KC_LBRC,KC_RBRC,KC_NO,KC_NO,
LALT(KC_TAB),KC_LALT, KC_RALT,TO(_NUMPAD),
KC_LSFT, KC_RSFT,
KC_BSPC,MO(_KEYPAD),KC_LCTL, KC_RCTL,MO(_KEYPAD),KC_SPC
),
/* ,------------------------------------------------------------------------------------------------------------------------.
* | | | | | | | | | | | | | | | | | TO(BASE) | |
* |--------+------+------+------+------+------+---------------------------------+------+------+------+------+------+--------|
* | _ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | + |
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
* | | F1 | F2 | F3 | F4 | F5 | | | Home | Up | End | | | |
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
* | | F6 | F7 | F8 | F9 | F10 | | Pgup | Lft | Dwn | Rgt | : | " |
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
* | CapsLk | | | | F11 | F12 | | Pgdn | | < | > | ? | |
* `--------+------+------+------+------+------' `------+------+------+------+------+--------'
* | ~ | INS | | | | { | } | | |
* `---------------------------' `---------------------------'
* ,--------------. ,--------------------.
* |Ctl+Tab| | | | | |
* ,------|------ |------| |------+------+------.
* | | |Shift | |Shift | | |
* | | |------| |------| | |
* | | | Ctrl | | Ctrl | | |
* `-------------- ------' `--------------------'
*/
[_KEYPAD] = LAYOUT(
KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO, KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,TO(_BASE),KC_NO,
KC_UNDS,KC_EXLM,KC_AT,KC_HASH,KC_DLR,KC_PERC, KC_CIRC,KC_AMPR,KC_ASTR,KC_LPRN,KC_RPRN,KC_PLUS,
KC_NO,KC_F1,KC_F2,KC_F3,KC_F4,KC_F5, KC_NO,KC_HOME,KC_UP,KC_END,KC_NO,KC_PIPE,
KC_CAPS,KC_F6,KC_F7,KC_F8,KC_F9,KC_F10, KC_PGUP,KC_LEFT,KC_DOWN,KC_RGHT,KC_COLN,KC_DQUO,
KC_NO,KC_NO,KC_NO,KC_NO,KC_F11,KC_F12, KC_PGDN,KC_NO,KC_LT,KC_GT,KC_QUES,KC_NO,
KC_TILD,KC_INS,KC_NO,KC_NO, KC_LCBR,KC_RCBR,KC_NO,KC_NO,
LCTL(KC_TAB),KC_NO, KC_NO,KC_NO,
KC_LSFT, KC_RSFT,
KC_NO,KC_NO,KC_LCTL, KC_RCTL,KC_NO,KC_NO
),
/*,--------+------+------+------+------+------+ +------+------+------+------+------+--------.
* | | | | | | | | | Base | = | / | * | |
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
* | | | | | | | | | 7 | 8 | 9 | - | |
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
* | Del | | | | | | | | 4 | 5 | 6 | + | |
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
* | BkSp | | | | | | | | 1 | 2 | 3 |Enter | Enter |
* `--------+------+------+------+------+------' `------+------+------+------+------+--------'
* | | | | | | . |Enter | | |
* `---------------------------' `---------------------------'
* ,-------------. ,-------------.
* | | | | | Base |
* ,------|------|------| |------+------+------.
* | | | | | | | |
* | BkSp | |------| |------| | 0 |
* | | | | | | | |
* `--------------------' `--------------------'
*/

[_NUMPAD] = LAYOUT(
KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO, KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,
KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO, KC_NO,TO(_BASE),KC_EQL,KC_SLSH,KC_ASTR,KC_NO,
KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO, KC_NO,KC_7,KC_8,KC_9,KC_MINS,KC_NO,
KC_DEL,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO, KC_NO,KC_4,KC_5,KC_6,KC_PLUS,KC_NO,
KC_BSPC,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO, KC_NO,KC_1,KC_2,KC_3,KC_ENT,KC_ENT,
KC_NO,KC_NO,KC_NO,KC_NO, KC_DOT,KC_ENT,KC_NO,KC_NO,
KC_NO,KC_NO, KC_NO,TO(_BASE),
KC_NO, KC_NO,
KC_BSPC,KC_NO,KC_NO, KC_NO,KC_NO,KC_0
)
};

layer_state_t layer_state_set_user(layer_state_t state) {
//set LEDs which are triggered by a layer change
#ifdef LED_COMPOSE_PIN
writePin(LED_COMPOSE_PIN, !layer_state_cmp(state, _KEYPAD));
#endif

#ifdef LED_NUM_LOCK_PIN
writePin(LED_NUM_LOCK_PIN, !layer_state_cmp(state, _NUMPAD));
#endif

return state;
};

bool led_update_user(led_t led_state) {
#ifdef LED_CAPS_LOCK_PIN
writePin(LED_CAPS_LOCK_PIN, !led_state.caps_lock);
#endif

#ifdef LED_SCROLL_LOCK_PIN
writePin(LED_SCROLL_LOCK_PIN, !led_state.scroll_lock);
#endif

//disable default processing of LEDs
return false;
}
105 changes: 105 additions & 0 deletions keyboards/kinesis/keymaps/alvicstep/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
## Custom Layout
Kinesis Contoured family of keyboards belong to a relatively small group of keyboards that utilize thumb clusters. The keycap profiles of thumb cluster keys make it easy to press multiple keys simultaneously by a thumb finger. Co-locating CTRL, SHIFT and KEYPAD modifiers in the thumb cluster gives truly unique capabilities to these keyboards.

### "alvicstep" Layout
The **alvicstep** layout is optimized for software development on a Windows machine. It is a result of many years of daily usage. It is a great starting point for your own design.

#### Layout Features
- 3 layers: default layer, keypad layer, numpad layer
- keypad layer allows for 2 finger operation using **arrow** keys together with
- **CTRL** and/or **SHIFT** modifiers OR
- **HOME/END** keys OR
- **PAGEUP/PAGEDOWN** keys.
- two finger operations can be achieved by holding up to 3 modifier keys (KEYPAD/SHIFT/CTRL) with a thumb finger and using index/middle/ring finger by pressing keywell keys. For example, you can fully control caret position and text selection of:
- each letter
- each word
- from a current caret position to the beginning of the line
- from a current caret position to the end of the line
- multiple lines
- multiple pages
- with little practice you will be able to string together different key combinations. For example, executing `KEYPAD + O` and then `KEYPAD + SHIFT + U` selects the whole line of text with barely any finger movement. The best part is that it works in any text editor!
- keypad layer allows accessing **F1-F12** and **ESC** keys by moving only a single finger away from the home row, making it very fast and convenient
- **KEYPAD** key can be used to access US ANSI Shifted Symbols instead of pressing a SHIFT key. This gives you two advantages: it makes KEYPAD key a "go to" key which is used in almost all operations unrelated to typing of letters. To understand the second advantage, compare pressing `SHIFT + 0` and `KEYPAD + 0` using the right hand
- **NUMPAD** "momentary" modifier key can be used to quickly switch to a numeric pad while typing alphanumeric strings. In a stock Kinesis firmware you would have to switch to KEYPAD layer and then press NUMLOCK key which makes it unusable for this task
- **NUMPAD** key in the right thumb cluster can be used to switch to a numeric pad for long numeric sequences

#### Layout Layers

![](https://i.imgur.com/86LCI3zh.jpg)
![](https://i.imgur.com/Gv4WBw7h.jpg)
![](https://i.imgur.com/gKXMUI2h.jpg)

#### Notes
- MO(1) - switch to **KEYPAD** layer while key is being pressed
- MO(2) - switch to **NUMPAD** layer while key is being pressed
- TO(0) - switch to **BASE** layer
- TO(2) - switch to **NUMPAD** layer
- Rsft(Enter) - acts as an ENTER key when pressed and released. Acts as a SHIFT modifier in combination with other keys
- Bt - enter bootloader mode
- Alt(Tab) - toggle between last two active applications
- Ctrl(Tab) - toggle between last two active tabs


### Differences From Stock
- **{}[]** keys are moved to the left side of the keywell to be easily accessible
- **-** and **+** keys are switched
- **CAPS LOCK** key is moved to **KEYPAD** layer and is mapped to **DELETE** on **BASE** layer

### Shortcuts


|Shortcut | Control Caret |
|---------------------|---------------------------------------|
|`KEYPAD + J` | move caret one character left |
|`KEYPAD + L` | move caret one character right |
|`KEYPAD + I` | move caret one line up |
|`KEYPAD + K` | move caret one line down |
|`KEYPAD + CTRL + J` | move caret one word to the left |
|`KEYPAD + CTRL + L` | move caret one word to the right |
|`KEYPAD + U` | move caret to the start of the line |
|`KEYPAD + O` | move caret to the end of the line |
|`KEYPAD + H` | move caret one page up |
|`KEYPAD + N` | move caret one page down |


|Shortcut | Scroll Lock |
|---------------------|---------------------------------------|
|`KEYPAD + CTRL + I` | scroll page up |
|`KEYPAD + CTRL + K` | scroll page down |


|Shortcut | Select Text |
|-----------------------------|-------------------------------|
|`KEYPAD + CTRL + SHIFT + J` | select one word to the left |
|`KEYPAD + CTRL + SHIFT + L` | select one word to the right |
|`KEYPAD + CTRL + SHIFT + I` | select one line up |
|`KEYPAD + CTRL + SHIFT + K` | select one line down |
|`KEYPAD + SHIFT + H` | select one page up |
|`KEYPAD + SHIFT + N` | select one page down |
|`KEYPAD + CTRL + SHIFT + U` | select from beginning of the file up to the caret position |
|`KEYPAD + CTRL + SHIFT + O` | select from caret position to the end of the file |


|Shortcut | US ANSI Shifted Symbols |
|---------------------|---------------------------------------|
|`KEYPAD + -` | _ |
|`KEYPAD + 1` | ! |
|`KEYPAD + 2` | @ |
|`KEYPAD + 3` | # |
|`KEYPAD + 4` | $ |
|`KEYPAD + 5` | % |
|`KEYPAD + 6` | ^ |
|`KEYPAD + 7` | & |
|`KEYPAD + 8` | * |
|`KEYPAD + 9` | ( |
|`KEYPAD + 0` | ) |
|`KEYPAD + =` | + |
|`KEYPAD + \` | \| |
|`KEYPAD + '` | " |
|`KEYPAD + ;` | : |
|`KEYPAD + /` | ? |
|`KEYPAD + [` | { |
|`KEYPAD + ]` | } |
|`KEYPAD + ,` | < |
|`KEYPAD + .` | > |
|`KEYPAD + BACKTICK` | ~ |
3 changes: 3 additions & 0 deletions keyboards/kinesis/keymaps/default/keymap.c
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later

#include QMK_KEYBOARD_H

#define QWERTY 0 // Base qwerty
Expand Down
3 changes: 3 additions & 0 deletions keyboards/kinesis/keymaps/dvorak/keymap.c
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later

#include QMK_KEYBOARD_H

#define _DVORAK 0 // Base Dvorak layer
Expand Down
3 changes: 3 additions & 0 deletions keyboards/kinesis/keymaps/dvorak_nguyenvietyen/keymap.c
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later

#include QMK_KEYBOARD_H

#define DVORAK_MAC_MODE 0 // Base Dvorak in Kinesis's Mac Mode with (Cmd, Option, Ctrl, Cmd) thumbkeys
Expand Down
3 changes: 3 additions & 0 deletions keyboards/kinesis/keymaps/insertsnideremarks/keymap.c
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later

#include QMK_KEYBOARD_H

extern keymap_config_t keymap_config;
Expand Down
3 changes: 3 additions & 0 deletions keyboards/kinesis/keymaps/tuesdayjohn/keymap.c
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later

#include QMK_KEYBOARD_H

extern keymap_config_t keymap_config;
Expand Down
3 changes: 3 additions & 0 deletions keyboards/kinesis/keymaps/tw1t611/keymap.c
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later

#include QMK_KEYBOARD_H
#include "keymap_german.h"

Expand Down
3 changes: 3 additions & 0 deletions keyboards/kinesis/keymaps/xyverz/keymap.c
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later

#include QMK_KEYBOARD_H

enum layer_names {
Expand Down
10 changes: 10 additions & 0 deletions keyboards/kinesis/kint2pp/info.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,16 @@
"device_version": "0.0.2",
"max_power": 100
},
"features": {
"bootmagic": true,
"console": false,
"command": false,
"mousekey": true,
"extrakey": true,
"nkro": true,
"audio": false,
"backlight": false
},
"build": {
"debounce_type": "sym_eager_pk"
},
Expand Down
10 changes: 10 additions & 0 deletions keyboards/kinesis/kint36/info.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,16 @@
"device_version": "0.0.1",
"max_power": 100
},
"features": {
"bootmagic": true,
"console": false,
"command": false,
"mousekey": true,
"extrakey": true,
"nkro": true,
"audio": false,
"backlight": false
},
"build": {
"debounce_type": "sym_eager_pk"
},
Expand Down
10 changes: 10 additions & 0 deletions keyboards/kinesis/kint41/info.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,16 @@
"device_version": "0.0.1",
"max_power": 100
},
"features": {
"bootmagic": true,
"console": false,
"command": false,
"mousekey": true,
"extrakey": true,
"nkro": true,
"audio": false,
"backlight": false
},
"build": {
"debounce_type": "sym_eager_pk"
},
Expand Down
Loading

0 comments on commit 0b56076

Please sign in to comment.