1
0
Fork 0

Add smt keymap for tv44 (MiniVan)

This commit is contained in:
Stephen Tudor 2017-02-09 15:37:23 -05:00
parent d537120eab
commit b6730285b4
5 changed files with 415 additions and 0 deletions

View file

@ -0,0 +1,21 @@
# Build Options
# change to "no" to disable the options, or define them in the Makefile in
# the appropriate keymap folder that will get included automatically
#
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = no # Console for debug(+400)
COMMAND_ENABLE = yes # Commands for debug and configuration
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
include ../../../../Makefile
endif

View file

@ -0,0 +1,36 @@
#ifndef CONFIG_USER_H
#define CONFIG_USER_H
#include "../../config.h"
/**
*TV44 keymap definition macro
*/
#define KEYMAP_TV44( \
K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, \
K13, K14, K15, K16, K17, K18, K19, K20, K21, K22, K23, K24, \
K25, K26, K27, K28, K29, K30, K31, K32, K33, K34, K35, K36, \
K37, K38, K39, K40, K41, K42, K43, K44 \
) { \
{ K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, }, \
{ K13, K14, K15, K16, K17, K18, K19, K20, K21, K22, K23, K24, }, \
{ K25, K26, K27, K28, K29, K30, K31, K32, K33, K34, K35, K36, }, \
{ K37, K38, K39, K40, KC_NO, KC_NO, KC_NO, K41, K42, K43, KC_NO, K44 } \
}
/**
*TV45 keymap definition macro (arrows layout)
*/
#define KEYMAP_TV45( \
K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, \
K13, K14, K15, K16, K17, K18, K19, K20, K21, K22, K23, K24, \
K25, K26, K27, K28, K29, K30, K31, K32, K33, K34, K35, K36, \
K37, K38, K39, K40, K41, K42, K43, K44, K45 \
) { \
{ K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, }, \
{ K13, K14, K15, K16, K17, K18, K19, K20, K21, K22, K23, K24, }, \
{ K25, K26, K27, K28, K29, K30, K31, K32, K33, K34, K35, K36, }, \
{ K37, K38, K39, K40, KC_NO, KC_NO, KC_NO, K41, K42, K43, K44, K45 } \
}
#endif

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View file

@ -0,0 +1,232 @@
#include "tv44.h"
#include "action_layer.h"
#include "eeconfig.h"
extern keymap_config_t keymap_config;
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers.
#define _QWERTY 0
#define _COLEMAK 1
#define _DVORAK 2
#define _LOWER 3
#define _RAISE 4
#define _ADJUST 16
// Keycodes
enum planck_keycodes {
QWERTY = SAFE_RANGE,
COLEMAK,
DVORAK,
LOWER,
RAISE,
BACKLIT
};
// Fillers to make layering more clear
#define _______ KC_TRNS
#define XXXXXXX KC_NO
// Custom macros
#define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl
#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift
#define HPR_TAB ALL_T(KC_TAB) // Tap for Tab, hold for Hyper
#define ALT_GRV ALT_T(KC_GRV) // Tap for Backtick, hold for Alt
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Qwerty
*
* ,---------+------+------+------+------+------+------+------+------+------+------+---------.
* |Hyper/Tab| Q | W | E | R | T | Y | U | I | O | P | Bksp |
* |---------`------`------`------`------`------`------`------`------`------`------`---------|
* | Ctrl/Esc | A | S | D | F | G | H | J | K | L | ; | ' |
* |----------`------`------`------`------`------`------`------`------`------`------`--------|
* | Shift | Z | X | C | V | B | N | M | , | . | / |Sft/Ent|
* |-----------`------`------`------`------`-----'-------`------`------`------`------`-------|
* | Alt/` | GUI | Lower | Space | Space | Raise | GUI | Alt | Ctrl |
* `-------+---------+--------+-----^^^------+-----^^^------+---------+------+------+-------'
*/
[_QWERTY] = KEYMAP_TV45(
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC ,
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
CTL_ESC , 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, SFT_ENT ,
/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
ALT_GRV , KC_LGUI , LOWER , KC_SPC , KC_SPC , RAISE , KC_RGUI, KC_RALT, KC_RCTL ),
/*`---------+---------------+---------+-------^^^------+-------^^^-------+----------+--------+--------+--------------'*/
/* Colemak
* ,---------+------+------+------+------+------+------+------+------+------+------+---------.
* |Hyper/Tab| Q | W | F | P | G | J | L | U | Y | ; | Bksp |
* |---------`------`------`------`------`------`------`------`------`------`------`---------|
* | Ctrl/Esc | A | R | S | T | D | H | N | E | I | O | ' |
* |----------`------`------`------`------`------`------`------`------`------`------`--------|
* | Shift | Z | X | C | V | B | K | M | , | . | / |Sft/Ent|
* |-----------`------`------`------`------`-----'-------`------`------`------`------`-------|
* | Alt/` | GUI | Lower | Space | Space | Raise | GUI | Alt | Ctrl |
* `-------+---------+--------+-----^^^------+-----^^^------+---------+------+------+-------'
*/
[_COLEMAK] = KEYMAP_TV45(
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
HPR_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC ,
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
CTL_ESC , KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT ,
/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
KC_LSFT , KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT ,
/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
ALT_GRV , KC_LGUI , LOWER , KC_SPC , KC_SPC , RAISE , KC_RGUI, KC_RALT, KC_RCTL ),
/*`---------+---------------+---------+-------^^^------+-------^^^-------+----------+--------+--------+--------------'*/
/* Dvorak
* ,---------+------+------+------+------+------+------+------+------+------+------+---------.
* |Hyper/Tab| ' | , | . | P | Y | F | G | C | R | L | Bksp |
* |---------`------`------`------`------`------`------`------`------`------`------`---------|
* | Ctrl/Esc | A | O | E | U | I | D | H | T | N | S | - |
* |----------`------`------`------`------`------`------`------`------`------`------`--------|
* | Shift | ; | Q | J | K | X | B | M | W | V | Z |Sft/Ent|
* |-----------`------`------`------`------`-----'-------`------`------`------`------`-------|
* | Alt/` | GUI | Lower | Space | Space | Raise | GUI | Alt | Ctrl |
* `-------+---------+--------+-----^^^------+-----^^^------+---------+------+------+-------'
*/
[_DVORAK] = KEYMAP_TV45(
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
HPR_TAB,KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC ,
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
CTL_ESC , KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS ,
/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
KC_LSFT , KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_ENT ,
/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
ALT_GRV , KC_LGUI , LOWER , KC_SPC , KC_SPC , RAISE , KC_RGUI, KC_RALT, KC_RCTL ),
/*`---------+---------------+---------+-------^^^------+-------^^^-------+----------+--------+--------+--------------'*/
/* Lower
* ,---------+------+------+------+------+------+------+------+------+------+------+---------.
* | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del |
* |---------`------`------`------`------`------`------`------`------`------`------`---------|
* | $ | 4 | 5 | 6 | . | + | * | 4 | 5 | 6 | . | PageUp |
* |----------`------`------`------`------`------`------`------`------`------`------`--------|
* | = | 7 | 8 | 9 | 0 | - | / | 1 | 2 | 3 | Up |PageDn |
* |-----------`------`------`------`------`-----'-------`------`------`------`------`-------|
* | Brite | | | Home | End | | Left | Down | Right |
* `-------+---------+--------+-----^^^------+-----^^^------+---------+------+------+-------'
*/
[_LOWER] = KEYMAP_TV45(
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
KC_0 , KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL ,
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
KC_DLR , KC_4, KC_5, KC_6, KC_DOT, KC_PLUS, KC_ASTR, KC_4, KC_5, KC_6, KC_DOT, KC_PGUP ,
/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
KC_EQL , KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_SLSH, KC_1, KC_2, KC_3, KC_UP, KC_PGDN ,
/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
BACKLIT , _______ , _______ , KC_HOME , KC_END , _______ , KC_LEFT, KC_DOWN, KC_RGHT ),
/*`---------+---------------+---------+-------^^^------+-------^^^-------+----------+--------+--------+--------------'*/
/* Raise
* ,---------+------+------+------+------+------+------+------+------+------+------+---------.
* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del |
* |---------`------`------`------`------`------`------`------`------`------`------`---------|
* | F1 | F2 | F3 | F4 | F5 | F6 | _ | ? | + | { | } | |
* |----------`------`------`------`------`------`------`------`------`------`------`--------|
* | F7 | F8 | F9 | F10 | F11 | F12 | - | / | = | [ | ] | |
* |-----------`------`------`------`------`-----'-------`------`------`------`------`-------|
* | Brite | | | Play | Next | | Mute | Vol- | Vol+ |
* `-------+---------+--------+-----^^^------+-----^^^------+---------+------+------+-------'
*/
[_RAISE] = KEYMAP_TV45(
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
KC_TILD,KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL ,
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_QUES, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE ,
/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MINS, KC_SLSH, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS ,
/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
BACKLIT , _______ , _______ , KC_MPLY , KC_MNXT , _______ , KC_MUTE, KC_VOLD, KC_VOLU ),
/*`---------+---------------+---------+-------^^^------+-------^^^-------+----------+--------+--------+--------------'*/
/* Adjust (Lower + Raise)
* ,---------+------+------+------+------+------+------+------+------+------+------+---------.
* | | Reset| | | | | | | | | | Del |
* |---------`------`------`------`------`------`------`------`------`------`------`---------|
* | | | | | |AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
* |----------`------`------`------`------`------`------`------`------`------`------`--------|
* | | | | | | | | | | | | |
* |-----------`------`------`------`------`-----'-------`------`------`------`------`-------|
* | | | | | | | | | |
* `-------+---------+--------+-----^^^------+-----^^^------+---------+------+------+-------'
*/
[_ADJUST] = KEYMAP_TV45(
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
_______, RESET , _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL ,
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
_______ ,_______, _______, _______, _______, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______ ,
/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
_______ ,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
_______ , _______ , _______ , _______ , _______ , _______ , _______, _______, _______ ),
/*`---------+---------------+---------+-------^^^------+-------^^^-------+----------+--------+--------+--------------'*/
};
void persistant_default_layer_set(uint16_t default_layer) {
eeconfig_update_default_layer(default_layer);
default_layer_set(default_layer);
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case QWERTY:
if (record->event.pressed) {
persistant_default_layer_set(1UL<<_QWERTY);
}
return false;
break;
case COLEMAK:
if (record->event.pressed) {
persistant_default_layer_set(1UL<<_COLEMAK);
}
return false;
break;
case DVORAK:
if (record->event.pressed) {
persistant_default_layer_set(1UL<<_DVORAK);
}
return false;
break;
case LOWER:
if (record->event.pressed) {
layer_on(_LOWER);
update_tri_layer(_LOWER, _RAISE, _ADJUST);
} else {
layer_off(_LOWER);
update_tri_layer(_LOWER, _RAISE, _ADJUST);
}
return false;
break;
case RAISE:
if (record->event.pressed) {
layer_on(_RAISE);
update_tri_layer(_LOWER, _RAISE, _ADJUST);
} else {
layer_off(_RAISE);
update_tri_layer(_LOWER, _RAISE, _ADJUST);
}
return false;
break;
case BACKLIT:
if (record->event.pressed) {
register_code(KC_RSFT);
#ifdef BACKLIGHT_ENABLE
backlight_step();
#endif
} else {
unregister_code(KC_RSFT);
}
return false;
break;
}
return true;
}

View file

@ -0,0 +1,126 @@
# smt's TV44 keymap
This keymap is based on a combination of my Planck keymap and [jeebak's TV44 layout](https://github.com/qmk/qmk_firmware/tree/master/keyboards/tv44/keymaps/jeebak). I removed the macros and TouchCursor/MouseCursor layers, because I'm just not ready for that level of mind-mapping.
I had been using something close to the default Minivan layout, but after spending a bit of time with the Planck and Preonic, I decided it would be better for me to try to standardize to some degree, where possible.
Also, it's worth noting that my Minivan is one with the "arrows" layout, which has a 45th key, so I had to define a new KEYMAP_TV45 macro in config.h. In spite of this, the 45-key Minivan is still technically considered a "TV44" as far as I know.
![smt's TV44 keymap](keyboard-layout-minivan.png)
## Notable features (most of which can be found in my or jeebak's respective keymap file):
1. **Shift/Enter**
I use both the left and right shift keys when I type. When I want to modify a key with shift, I hold shift with the hand opposite the one typing the key. In the default keymap, Enter is where shift would be on a standard keyboard layout. Oh, muscle memory.
Thankfully, QMK supports [mod-tap](https://github.com/jackhumbert/qmk_firmware/wiki#fun-with-modifier-keys) keys, and this allows me to set the Enter key to send a modifier (MOD_LSFT) when held, and KC_ENT when tapped. Awesome!
2. **Hyper/Tab**
This key modifies with "Hyper" (see [Brett Terpstra's post](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/) on this) when held, and outputs the code for Tab when tapped. On the Mac, I use KeyboardMaestro to remap my hyper-keys to do a lot of crazy things.
3. **Ctrl/Escape**
I set up another mod-tap, this time for the Escape key that would act as a Control modifier when held.
4. **Alt/Backtick**
I don't currently have LEDs on most of my keyboards, and I certainly don't want LED controls on the base layer of a 40%.
So, why use backtick in the lower left corner? I use it as my tmux prefix key, so I need to type it more frequently than most people. Putting it on the base layer works well for my use case, and it's consistent with where I place it in my Planck and Preonic keymaps.
I also like Alt in that position, so it works well as yet another mod-tap key.
## Layers
### Qwerty
```
,---------+------+------+------+------+------+------+------+------+------+------+---------.
|Hyper/Tab| Q | W | E | R | T | Y | U | I | O | P | Bksp |
|---------`------`------`------`------`------`------`------`------`------`------`---------|
| Ctrl/Esc | A | S | D | F | G | H | J | K | L | ; | ' |
|----------`------`------`------`------`------`------`------`------`------`------`--------|
| Shift | Z | X | C | V | B | N | M | , | . | / |Sft/Ent|
|-----------`------`------`------`------`-----'-------`------`------`------`------`-------|
| Alt/` | GUI | Lower | Space | Space | Raise | GUI | Alt | Ctrl |
`-------+---------+--------+-----^^^------+-----^^^------+---------+------+------+-------'
```
### Colemak
```
,---------+------+------+------+------+------+------+------+------+------+------+---------.
|Hyper/Tab| Q | W | F | P | G | J | L | U | Y | ; | Bksp |
|---------`------`------`------`------`------`------`------`------`------`------`---------|
| Ctrl/Esc | A | R | S | T | D | H | N | E | I | O | ' |
|----------`------`------`------`------`------`------`------`------`------`------`--------|
| Shift | Z | X | C | V | B | K | M | , | . | / |Sft/Ent|
|-----------`------`------`------`------`-----'-------`------`------`------`------`-------|
| Alt/` | GUI | Lower | Space | Space | Raise | GUI | Alt | Ctrl |
`-------+---------+--------+-----^^^------+-----^^^------+---------+------+------+-------'
```
### Dvorak
```
,---------+------+------+------+------+------+------+------+------+------+------+---------.
|Hyper/Tab| ' | , | . | P | Y | F | G | C | R | L | Bksp |
|---------`------`------`------`------`------`------`------`------`------`------`---------|
| Ctrl/Esc | A | O | E | U | I | D | H | T | N | S | - |
|----------`------`------`------`------`------`------`------`------`------`------`--------|
| Shift | ; | Q | J | K | X | B | M | W | V | Z |Sft/Ent|
|-----------`------`------`------`------`-----'-------`------`------`------`------`-------|
| Alt/` | GUI | Lower | Space | Space | Raise | GUI | Alt | Ctrl |
`-------+---------+--------+-----^^^------+-----^^^------+---------+------+------+-------'
```
### Lower
This is where I put the number row, two numpad clusters, common arithmetic operators, and cursorkeys: Arrow cluster, Home/End, Page Up/Page Down. `0` and `$` are also placed on the left side for convenient access to beginning-of-line and end-of-line Vim commands. BRITE has been moved here from the base layer.
```
,---------+------+------+------+------+------+------+------+------+------+------+---------.
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del |
|---------`------`------`------`------`------`------`------`------`------`------`---------|
| $ | 4 | 5 | 6 | . | + | * | 4 | 5 | 6 | . | PageUp |
|----------`------`------`------`------`------`------`------`------`------`------`--------|
| = | 7 | 8 | 9 | 0 | - | / | 1 | 2 | 3 | Up |PageDn |
|-----------`------`------`------`------`-----'-------`------`------`------`------`-------|
| Brite | | | Home | End | | Left | Down | Right |
`-------+---------+--------+-----^^^------+-----^^^------+---------+------+------+-------'
```
### Raise
As a developer, it makes the most sense for me to group all the commonly-used symbols that don't fit on the main layer. In particular, having the dual-column of parens-braces-brackets helps me keep them straight. I've dropped basic media controls onto this layer as well.
```
,---------+------+------+------+------+------+------+------+------+------+------+---------.
| ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del |
|---------`------`------`------`------`------`------`------`------`------`------`---------|
| F1 | F2 | F3 | F4 | F5 | F6 | _ | ? | + | { | } | | |
|----------`------`------`------`------`------`------`------`------`------`------`--------|
| F7 | F8 | F9 | F10 | F11 | F12 | - | / | = | [ | ] | \ |
|-----------`------`------`------`------`-----'-------`------`------`------`------`-------|
| Brite | | | Play | Next | | Mute | Vol- | Vol+ |
`-------+---------+--------+-----^^^------+-----^^^------+---------+------+------+-------'
```
### Adjust (Lower + Raise)
Utility layer. There isn't much here; it's mainly for swapping the default keymap between Qwerty and Dvorak, or putting the keyboard into flash mode via the Reset key.
```
,---------+------+------+------+------+------+------+------+------+------+------+---------.
| | Reset| | | | | | | | | | Del |
|---------`------`------`------`------`------`------`------`------`------`------`---------|
| | | | | |AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
|----------`------`------`------`------`------`------`------`------`------`------`--------|
| | | | | | | | | | | | |
|-----------`------`------`------`------`-----'-------`------`------`------`------`-------|
| | | | | | | | | |
`-------+---------+--------+-----^^^------+-----^^^------+---------+------+------+-------'
```