Merge pull request #990 from replicaJunction/master

Update replicaJunction keymap
This commit is contained in:
Jack Humbert 2017-01-08 21:10:42 -05:00 committed by GitHub
commit d8b445b03b
12 changed files with 536 additions and 22 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 89 KiB

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 90 KiB

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 73 KiB

View file

@ -1,7 +1,7 @@
/*
* Keyboard: Atreus
* Keymap: replicaJunction
* Version: 0.3
* Version: 0.4
*
* This keymap is designed to complement my Ergodox keyboard layout, found in keyboards/ergodox_ez.
* The Atreus keyboard is a 40% board whose design was heavily influenced by the Ergodox. I now
@ -42,51 +42,157 @@
#define KX_PAST LCTL(KC_V)
#define KX_UNDO LCTL(KC_Z)
#define _USER 0 // User macro
; // This doesn't do anything. It's just for VSCode because its syntax highlighting is weird for the above #define statements.
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
* Colemak-ModDH
*
* ,----------------------------------. ,----------------------------------.
* | Q | W | F | P | B | | J | L | U | Y | ; |
* +------+------+------+------+------| +------+------+------+------+------|
* | A | R | S | T | G | | M | N | E | I | O |
* +------+------+------+------+------| +------+------+------+------+------|
* |Z Shft| X | C | D | V | ,------. ,------. | K | H | , | . |/ Shft|
* +------+------+------+------+------| | Ctrl | | Alt | +------+------+------+------+------|
* | Esc | Gui | Tab | _FN | Bksp | | Del | | Enter| |Sp/_NU| _EX | - | ' | = |
* `----------------------------------' `------' `------' `----------------------------------'
*
*/
[_CO] = KEYMAP(
KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_SCLN,
KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O,
SFT_T(KC_Z), KC_X, KC_C, KC_D, KC_V, KC_K, KC_H, KC_COMM, KC_DOT, SFT_T(KC_SLSH),
KC_ESC, KC_LGUI, KC_TAB, KC_LALT, KC_BSPC, CTL_T(KC_DEL), ALT_T(KC_ENT), LT(_NU, KC_SPC), MO(_EX), KC_MINS, KC_QUOT, KC_EQL
KC_ESC, KC_LGUI, KC_TAB, MO(_FN), KC_BSPC, CTL_T(KC_DEL), ALT_T(KC_ENT), LT(_NU, KC_SPC), MO(_EX), KC_MINS, KC_QUOT, KC_EQL
),
/*
* QWERTY
*
* ,----------------------------------. ,----------------------------------.
* | Q | W | E | R | T | | Y | U | I | O | P |
* +------+------+------+------+------| +------+------+------+------+------|
* | A | S | D | F | G | | H | J | K | L | ; |
* +------+------+------+------+------| +------+------+------+------+------|
* |Z Shft| X | C | V | B | ,------. ,------. | N | M | , | . |/ Shft|
* +------+------+------+------+------| | Ctrl | | Alt | +------+------+------+------+------|
* | Esc | Gui | Tab | _FN | Bksp | | Del | | Enter| |Sp/_NU| _EX | - | ' | = |
* `----------------------------------' `------' `------' `----------------------------------'
*
*/
[_QW] = KEYMAP( /* Qwerty */
KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,
SFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, SFT_T(KC_SLSH),
KC_ESC, KC_LGUI, KC_TAB, KC_LALT, KC_BSPC, CTL_T(KC_DEL), ALT_T(KC_ENT), LT(_NU, KC_SPC), MO(_EX), KC_MINS, KC_QUOT, KC_EQL
KC_ESC, KC_LGUI, KC_TAB, MO(_FN), KC_BSPC, CTL_T(KC_DEL), ALT_T(KC_ENT), LT(_NU, KC_SPC), MO(_EX), KC_MINS, KC_QUOT, KC_EQL
),
/*
* Extend
*
* Ctrl+` is a keyboard shortcut for the program ConEmu, which brings up a dropdown console window.
*
* Also note that some dual-role keys are overridden here with their modifiers
*
* ,----------------------------------. ,----------------------------------.
* | | | | |Ctrl `| | PgUp | Home | Up | End | Del |
* +------+------+------+------+------| +------+------+------+------+------|
* | Gui | Shift| Alt | Ctrl | | | PgDn | Left | Down | Right| Bksp |
* +------+------+------+------+------| +------+------+------+------+------|
* | Shift| Cut | Copy | | Paste| ,------. ,------. | | ^Tab | Tab | |Insert|
* +------+------+------+------+------| | Del | | Enter| +------+------+------+------+------|
* | | | | | | | | | | | Space|XXXXXX| | |PrntSc|
* `----------------------------------' `------' `------' `----------------------------------'
*
*/
[_EX] = KEYMAP( /* Extend */
KC_CAPS, _______, _______, _______, _______, KC_PGUP, KC_HOME, KC_UP, KC_END, KC_DEL,
_______, KC_LGUI, KC_LALT, KC_LCTL, _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_BSPC,
_______, KX_CUT, KX_COPY, _______, KX_PAST, _______, KC_TAB, KCX_LST, _______, KC_INSERT,
_______, _______, _______, _______, _______, _______, _______, KC_SPC, _______, _______, _______, KC_PSCR
_______, _______, _______, _______, LCTL(KC_GRV), KC_PGUP, KC_HOME, KC_UP, KC_END, KC_DEL,
KC_LGUI, KC_LSFT, KC_LALT, KC_LCTL, _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_BSPC,
KC_LSFT, KX_CUT, KX_COPY, _______, KX_PAST, _______, KCX_LST, KC_TAB, _______, KC_INS,
_______, _______, _______, _______, _______, KC_DEL, KC_ENT, KC_SPC, _______, _______, _______, KC_PSCR
),
/*
* Numbers and symbols
*
* ,----------------------------------. ,----------------------------------.
* | ! | @ | { | } | & | | / | 7 | 8 | 9 | * |
* +------+------+------+------+------| +------+------+------+------+------|
* | # | $ | ( | ) | ~ | | | | 4 | 5 | 6 | - |
* +------+------+------+------+------| +------+------+------+------+------|
* | % | ^ | [ | ] | ` | ,------. ,------. | \ | 1 | 2 | 3 | + |
* +------+------+------+------+------| | | | | +------+------+------+------+------|
* | | _GA | | | | | | | | |XXXXXX| 0 | . | = | |
* `----------------------------------' `------' `------' `----------------------------------'
*
*/
[_NU] = KEYMAP( /* Numbers and symbols */
KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_AMPR, KC_SLSH, KC_7, KC_8, KC_9, KC_ASTR,
KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_TILD, KC_PIPE, KC_4, KC_5, KC_6, KC_MINS,
KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_GRV, KC_BSLS, KC_1, KC_2, KC_3, KC_PLUS,
_______, TG(_GA), _______, MO(_FN), _______, _______, _______, _______, KC_0, KC_DOT, KC_EQL, _______
_______, TG(_GA), _______, _______, _______, _______, _______, _______, KC_0, KC_DOT, KC_EQL, _______
),
/*
* Functions
*
* ,----------------------------------. ,----------------------------------.
* | Caps | F9 | F10 | F11 | F12 | | _USER|Whl Up| MUp |Whl Dn| |
* +------+------+------+------+------| +------+------+------+------+------|
* | | F5 | F6 | F7 | F8 | | Vol ^| MLeft| MDown|MRight| |
* +------+------+------+------+------| +------+------+------+------+------|
* | | F1 | F2 | F3 | F4 | ,------. ,------. | Vol v| | | | |
* +------+------+------+------+------| | | |RClick| +------+------+------+------+------|
* | | | |XXXXXX| | | | | | |LClick|MClick| _CO | _GA | RESET|
* `----------------------------------' `------' `------' `----------------------------------'
*
*/
[_FN] = KEYMAP( /* Functions */
KC_DEL, KC_HOME, KC_UP, KC_END, KC_PGUP, _______, KC_F7, KC_F8, KC_F9, KC_F10,
KC_BSPC, KC_LEFT, KC_DOWN, KC_RGHT, KC_DOWN, _______, KC_F4, KC_F5, KC_F6, KC_F11,
_______, KC_VOLU, KC_MUTE, KC_VOLD, KC_MPLY, _______, KC_F1, KC_F2, KC_F3, KC_F12,
_______, _______, _______, _______, KC_MSTP, _______, _______, _______, KC_NO, DF(_CO), DF(_QW), RESET
KC_CAPS, KC_F9, KC_F10, KC_F11, KC_F12, M(_USER),KC_WH_U, KC_MS_U, KC_WH_D, _______,
_______, KC_F5, KC_F6, KC_F7, KC_F8, KC_VOLU, KC_MS_L, KC_MS_D, KC_MS_R, _______,
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_VOLD, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, KC_BTN2, KC_BTN1, KC_BTN3, DF(_CO), DF(_QW), RESET
),
/*
* Gaming
*
* ,----------------------------------. ,----------------------------------.
* | | | | | | | |Whl Up| MUp |Whl Dn| |
* +------+------+------+------+------| +------+------+------+------+------|
* | | | | | | | | MLeft| MDown|MRight| |
* +------+------+------+------+------| +------+------+------+------+------|
* | Z | | | | | ,------. ,------. | | | | | |
* +------+------+------+------+------| | Bksp | |RClick| +------+------+------+------+------|
* | | _GA | | Shift| Space| | | | | |LClick|MClick| | | |
* `----------------------------------' `------' `------' `----------------------------------'
*
*/
[_GA] = KEYMAP( /* Gaming */
_______, _______, _______, _______, _______, _______, KC_WH_U, KC_MS_U, KC_WH_D, _______,
_______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______,
KC_Z, _______, _______, _______, _______, KC_BTN3, _______, KC_MS_D, _______, _______,
_______, TG(_GA), _______, KC_LSFT, KC_SPC, KC_BSPC, KC_BTN2, KC_BTN1, _______, _______, _______, _______
KC_Z, _______, _______, _______, _______, _______, _______, KC_MS_D, _______, _______,
_______, TG(_GA), _______, KC_LSFT, KC_SPC, KC_BSPC, KC_BTN2, KC_BTN1, KC_BTN3, _______, _______, _______
)};
/*
* Template
*
* ,----------------------------------. ,----------------------------------.
* | | | | | | | | | | | |
* +------+------+------+------+------| +------+------+------+------+------|
* | | | | | | | | | | | |
* +------+------+------+------+------| +------+------+------+------+------|
* | | | | | | ,------. ,------. | | | | | |
* +------+------+------+------+------| | | | | +------+------+------+------+------|
* | | | | | | | | | | | | | | | |
* `----------------------------------' `------' `------' `----------------------------------'
*
*/
const uint16_t PROGMEM fn_actions[] = {
};
@ -95,7 +201,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
switch(id) {
case 0:
case _USER:
if (record->event.pressed) {
register_code(KC_RSFT);
} else {

View file

@ -10,13 +10,15 @@ I won't claim that this layout is perfect for everyone. It does make several sig
## Base Layer ##
![Atreus base layout](atreus-replica-base-colemakdh.png)
![Atreus base layout](atreus-replica-base.png)
The letters on this layout are arranged in the [Colemak Mod-DH layout](https://colemakmods.github.io/mod-dh/).
Note that there are four dual-purpose keys: Shift (Backspace), Ctrl (Delete), Alt (Enter), and Space (Number layer). In QMK, these dual-role keys can be made to hold their primary key by double-tapping the key and holding on the second tap. For example, if I wanted to insert a long string of Spaces, I would tap the Space key, then tap it again and hold. A single press and hold would trigger the secondary function of the key instead.
The primary mechanism for the Shift keys in this keyboard are the dual-role Z and slash keys. Pressing the key sends the keystroke, while holding the key sends a shift. This is a design choice taken from the xyverz layout, and one I find much more intuitive than a thumb shift. In addition, the pinky doesn't need to stretch as far to reach these keys as it does to reach a standard Shift key.
The secondary Alt on the left bottom row exists to provide a single-hand Alt+Tab shortcut, which would take two rows otherwise.
Occasionally, when typing the letter Z, I'll hold the key down a fraction of a second too long, and the keyboard will shift instead. If you're not a confident typist, this dual-role Shift key layout is probably not a good solution. In that case, I'd suggest moving Shift onto the Backspace key (press for Backspace, hold for Shift).
In addition to the Shift keys, there are three dual-purpose keys: Ctrl (Delete), Alt (Enter), and Space (Number layer). In QMK, these dual-role keys can be made to hold their primary key with a tap and hold. For example, if I wanted to insert a long string of Spaces, I would tap the Space key, then tap it again and hold. A single press and hold would trigger the secondary function of the key instead.
## Extend Layer ##
@ -42,9 +44,11 @@ This layer also provides plenty of symbol shortcuts. Most of these can be access
![Atreus function layer](atreus-replica-function.png)
Function keys (F1-F12) are on this layer, as well as some more generic "functions" such as media keys. I've also set up a mirror image of the arrows from the Extend layer in case I need to use these with my left hand, but I don't do this very often.
Function keys (F1-F12) are on this layer. Their layout in groups of four comes from Jeremy's Atreus layout in this repository. I'd been using 1-9 in a numpad layout, then adding 10-12 on the side...I suppose it took seeing someone else do it this way for me to realize how much more sense it makes.
The reset key is on this layer, as well as a toggle from Colemak to QWERTY and back. The QWERTY layer is not currently documented, but it is functionally identical to the base layer except for letter positions.
On the right side are mouse keys - cursor left/right/up/down, and scroll up/down. Volume keys are also here, though really only because there was room for them (I'm not entirely happy with their positions).
Finally, the reset key is on this layer, as well as toggles from Colemak to QWERTY and back. The QWERTY layer is not currently documented, but it is functionally identical to the base layer except for letter positions.
## Gaming Layer ##
@ -54,4 +58,4 @@ This is a small layer developed to allow some simple gameplay without a mouse. T
The keys on the left hand bring Space into the left thumb's reach, as well as overriding the dual-role Shift with its standard function (Z in both QWERTY and in Colemak). This allows easy Shift presses without blocking the Z key, commonly used in games.
I would probably not consider this a hard-core gaming keyboard, and this layout does have the huge problem of blocking access to the number keys, but for more casual games, it plays quite well. I've used it quite a bit on Minecraft, for example, and I'm quite pleased with it.
I would probably not consider the Atreus a hard-core gaming keyboard in the first place, and this layout does have the huge problem of blocking access to the number keys, but for more casual games, it plays quite well. I've used it quite a bit on Minecraft, for example, and I'm quite pleased with it.

View file

@ -34,4 +34,4 @@
#endif
#endif /* KEYBOARDS_ERGODOX_CONFIG_H_ */
#endif /* KEYBOARDS_ERGODOX_CONFIG_H_ */

View file

@ -0,0 +1,63 @@
/*
Config file - Ergodox QMK with replicaJunction layout
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/>.
*/
#ifndef KEYBOARDS_ERGODOX_CONFIG_H_
#define KEYBOARDS_ERGODOX_CONFIG_H_
#define MOUSEKEY_DELAY 100
#define MOUSEKEY_INTERVAL 20
#define MOUSEKEY_MAX_SPEED 3
#define MOUSEKEY_TIME_TO_MAX 10
#define TAPPING_TOGGLE 1
/* define if matrix has ghost */
//#define MATRIX_HAS_GHOST
// MS the button needs to be held before a tap becomes a hold (default: 200)
#define TAPPING_TERM 200
#define IGNORE_MOD_TAP_INTERRUPT // this makes it possible to do rolling combos (zx) with keys that convert to other keys on hold (z becomes ctrl when you hold it, and when this option isn't enabled, z rapidly followed by x actually sends Ctrl-x. That's bad.)
// I don't have any locking keys, so I don't need these features
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
//#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
//#define LOCKING_RESYNC_ENABLE
/* Prevent modifiers from sticking when switching layers */
/* Uses 5 bytes of memory per 8 keys, but makes sure modifiers don't get "stuck" switching layers */
#define PREVENT_STUCK_MODIFIERS
/* key combination for command */
#define IS_COMMAND() ( \
keyboard_report->mods == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL)) || \
keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) \
)
#ifdef SUBPROJECT_ez
#include "ez/config.h"
#endif
#ifdef SUBPROJECT_infinity
#include "infinity/config.h"
#endif
#endif /* KEYBOARDS_ERGODOX_CONFIG_H_ */

View file

@ -0,0 +1,336 @@
/*
* Keyboard: Ergodox
* Keymap: replicaJunction
* Version: 1.2
*
* This keymap is designed to complement my Atreus keyboard layout, found in keyboards/atreus.
* The Atreus keyboard is a 40% board whose design was heavily influenced by the Ergodox, and I now
* have both keyboards, so I've designed these layouts in an effort to make switching between the
* two as easy as possible.
*
* I've also tried to make use of the extra keys on the Ergodox in as logical of a manner as possible,
* adding to the layers in the Atreus config without disturbing what's there already. This allows for
* things like F11-F20, the Application (Menu) key, and better media key placement.
*
* The default key layout in this keymap is Colemak-ModDH. Information on that layout can be found
* here: https://colemakmods.github.io/mod-dh/
*/
#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
#define _CO 0 // Colemak
#define _QW 1 // QWERTY
#define _ME 2 // media keys
#define _NU 3 // numpad
#define _EX 4 // extend
#define _GA 5 // mouse overlay for gaming
// Some quick aliases, just to make it look pretty
#define _______ KC_TRNS
#define KCX_CGR LCTL(KC_GRV)
#define KX_STAB LSFT(KC_TAB)
#define KX_COPY LCTL(KC_C)
#define KX_CUT LCTL(KC_X)
#define KX_PAST LCTL(KC_V)
#define KX_UNDO LCTL(KC_Z)
; // This doesn't do anything. It's just for VSCode because its syntax highlighting is weird for the above #define statements.
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
* Keymap: Colemak-ModDH
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | ` | 1 | 2 | 3 | 4 | 5 | Esc | | | 6 | 7 | 8 | 9 | 0 | = |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | LCtrl | Q | W | F | P | B | Home | | BkSp | J | L | U | Y | ; | - |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | Tab | A | R | S | T | G |------| |------| M | N | E | I | O | ' |
* |--------+------+------+------+------+------| Hyper| | \ |------+------+------+------+------+--------|
* | LShft | Z | X | C | D | V | | | | K | H | , | , | / | RShft |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | LGui | [ | ] |CtlShf| LAlt | | _EX | - | ' | = | \ |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | LCtrl| ~GA | | Left | Right|
* ,------|------|------| |------+------+------.
* |LCtrl/| LAlt/| Home | | Up | Alt/| _NU/ |
* | BkSp | Del |------| |------| Enter| Space|
* | | | _NU | | Down | | |
* `--------------------' `--------------------'
*/
[_CO] = KEYMAP(
// left hand
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC,
KC_LCTL,KC_Q, KC_W, KC_F, KC_P, KC_B, KC_HOME,
KC_TAB, KC_A, KC_R, KC_S, KC_T, KC_G,
KC_LSFT,KC_Z, KC_X, KC_C, KC_D, KC_V, ALL_T(KC_NO),
KC_LGUI,KC_LBRC,KC_RBRC, LCTL(KC_LSFT), KC_LALT,
KC_LCTL, TG(_GA),
KC_HOME,
CTL_T(KC_BSPC), ALT_T(KC_DEL), MO(_NU),
// right hand
KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL,
KC_BSPC, KC_J, KC_L, KC_U, KC_Y, KC_SCLN,KC_MINS,
KC_M, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
KC_BSLS, KC_K, KC_H, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT,
MO(_EX),KC_MINS,KC_QUOT,KC_EQL, KC_BSLS,
KC_LEFT, KC_RGHT,
KC_UP,
KC_DOWN, ALT_T(KC_ENT), LT(_NU,KC_SPC)
),
/*
* Keymap: QWERTY layout.
*
* This is optimized for gaming, not typing, so there aren't as many macros
* as the Dvorak layer. Some of the keys have also been moved to "game-
* like" locations, such as making the spacebar available to the left thumb,
* and repositioning the arrow keys at the bottom right corner.
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | ` | 1 | 2 | 3 | 4 | 5 | Esc | | | 6 | 7 | 8 | 9 | 0 | = |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | LCtrl | Q | W | E | R | T | Home | | BkSp | Y | U | I | O | P | - |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | Tab | A | S | D | F | G |------| |------| H | J | K | L | ; | ' |
* |--------+------+------+------+------+------| Hyper| | \ |------+------+------+------+------+--------|
* | LShft | Z | X | C | V | B | | | | N | M | , | . | / | RShft |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | LGui | ` | \ |CtlShf| _NU | | _EX | - | ' | = | \ |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | LCtrl| ~GA | | Left | Right|
* ,------|------|------| |------+------+------.
* |LCtrl/| LAlt/| Home | | Up | Alt/| _NU/ |
* | BkSp | Del |------| |------| Enter| Space|
* | | | _NU | | Down | | |
* `--------------------' `--------------------'
*/
[_QW] = KEYMAP( // Layer1: QWERTY
// left hand
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC,
KC_LCTL,KC_Q, KC_W, KC_E, KC_R, KC_T, KC_HOME,
KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G,
KC_LSFT,KC_Z, KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
KC_LGUI,KC_GRV, KC_SLSH,LCTL(KC_LSFT), MO(_NU),
KC_LCTL,TG(_GA),
KC_HOME,
CTL_T(KC_BSPC), ALT_T(KC_DEL), MO(_NU),
// right hand
KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL,
KC_BSPC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS,
KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,
KC_BSLS, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT,
MO(_EX),KC_MINS,KC_QUOT,KC_EQL, KC_BSLS,
KC_LEFT, KC_RGHT,
KC_UP,
KC_DOWN, ALT_T(KC_ENT), LT(_NU,KC_SPC)
),
/*
* Keymap: Numbers and symbols
*
* Note that the number keys here are actually numpad keystrokes. This often doesn't matter, but it may be relevant in a few cases.
* That's why the Num Lock key exists on this layer - just in case.
*
* This layer also contains the layout switches.
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | ! | @ | { | } | & | | | | / | 7 | 8 | 9 | * | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | # | $ | ( | ) | ~ |------| |------| | | 4 | 5 | 6 | - | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | % | ^ | [ | ] | ` | | | | \ | 1 | 2 | 3 | + | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | |QWERTY|Colemk| | | | 0 | . | = | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* |NumLck| RESET| | | |
* ,------|------|------| |------+------+------.
* | | | | | | | |
* | | |------| |------| | |
* | | | | | | | |
* `--------------------' `--------------------'
*/
[_NU] = KEYMAP(
// left hand
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______,
_______, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_AMPR, _______,
_______, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_TILD,
_______, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_GRV, _______,
_______, DF(_QW), DF(_CO), _______, _______,
KC_NLCK,RESET,
_______,
_______,_______,_______,
// right hand
_______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
_______, KC_SLSH, KC_P7, KC_P8, KC_P9, KC_PAST, _______,
KC_PIPE, KC_P4, KC_P5, KC_P6, KC_PMNS, _______,
_______, KC_BSLS, KC_P1, KC_P2, KC_P3, KC_PPLS, _______,
KC_P0, KC_PDOT, KC_EQL, _______, _______,
_______, _______,
_______,
_______, _______, _______
),
/*
* Keymap: Extend
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | F11 | F12 | F13 | F14 | F15 | Mute | | | F16 | F17 | F18 | F19 | F20 | |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | | | | | Ctrl`| Vol | | | PgUp | Home | Up | End | Del | |
* |--------+------+------+------+------+------| Up | | |------+------+------+------+------+--------|
* | | | Gui | Alt | Ctrl | |------| |------| PgDn | Left | Down | Right| BkSp | Menu |
* |--------+------+------+------+------+------| Vol | | |------+------+------+------+------+--------|
* | | Undo | Cut | Copy | | Paste| Down | | | | ^Tab | Tab | |Insert| PrntScr|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | | | | | | | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | | | | | |
* | | |------| |------| | |
* | | | | | | | |
* `--------------------' `--------------------'
*
* Ctrl+` is a keyboard shortcut for the program ConEmu, which provides a Quake-style drop-down command prompt.
*
*/
[_EX] = KEYMAP(
// left hand
_______, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_MUTE,
_______, _______, _______, _______, _______, KCX_CGR, KC_VOLU,
_______, _______, KC_LGUI, KC_LALT, KC_LCTL, _______,
_______, KX_UNDO, KX_CUT, KX_COPY, _______, KX_PAST, KC_VOLD,
_______, _______, _______, _______, _______,
_______,_______,
_______,
_______,_______,_______,
// right hand
_______, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, _______,
_______, KC_PGUP, KC_HOME, KC_UP, KC_END, KC_DEL, _______,
KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_BSPC, KC_MENU,
_______, _______, KX_STAB, KC_TAB, _______, KC_INS, KC_PSCR,
_______, _______, _______, _______, _______,
_______, _______,
_______,
_______, _______, _______
),
/*
* Keymap: Gaming
*
* Provides a mouse overlay for the right hand, and also moves some "gamer friendly" keys to the left, such as space.
* This layer also removes a lot of dual-role keys, as when gaming, it's nicer not to need to keep track of those.
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | | | | | | | | | | | | | | |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | | | | | | | | | |WhlUp | MsUp |WhlDn | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | | | | |------| |------| |MsLeft|MsDown|MsRght| | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | | | | | | | | | | | | | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | LCtrl| | | | | | | | | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | ~_GA | | |MClick|
* ,------|------|------| |------+------+------.
* | | | | | | | |
* | Space| |------| |------|RClick|LClick|
* | | | | | | | |
* `--------------------' `--------------------'
*/
[_GA] = KEYMAP(
// left hand
_______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______,
KC_LCTL, _______, _______, _______, _______,
_______,_______,
_______,
KC_SPC, _______,_______,
// right hand
_______, _______, _______, _______, _______, _______, _______,
_______, _______, KC_WH_U, KC_MS_U, KC_WH_D, _______, _______,
_______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______,
_______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______,
_______, KC_BTN3,
_______,
_______, KC_BTN2, KC_BTN1
),
};
const uint16_t PROGMEM fn_actions[] = {
[1] = ACTION_LAYER_TAP_TOGGLE(_NU) // FN1 - Momentary Layer 1 (Numbers and symbols)
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
switch(id) {
case 0:
if (record->event.pressed) {
register_code(KC_RSFT);
} else {
unregister_code(KC_RSFT);
}
break;
}
return MACRO_NONE;
};
// Runs just one time when the keyboard initializes.
void matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);
// uint8_t default_layer = biton32(layer_state);
ergodox_board_led_off();
ergodox_right_led_1_off();
ergodox_right_led_2_off();
ergodox_right_led_3_off();
switch (layer) {
case _CO:
ergodox_right_led_1_on();
break;
case _QW:
ergodox_right_led_2_on();
break;
case _NU:
ergodox_right_led_3_on();
break;
case _GA:
ergodox_right_led_1_on();
ergodox_right_led_2_on();
default:
// none
break;
}
};

View file

@ -0,0 +1,5 @@
# replicaJunction - Ergodox (EZ) Layout
I designed this layout, along with my complimentary Atreus layout, to address the challenge of having an Ergodox as my primary home keyboard and an Atreus as my primary work board. I wanted a layout that provided symbols in comfortable locations on both keyboards - but didn't require me to learn two separate sets of symbols for the two keyboards.
I had originally used several keys as dual-role keys, where a tap would send a keypress and a long press and hold would trigger a different layer. However, after several months of experimenting with those ideas, I've begun moving away from that design due to performance. It's very hard to strike a balance between the time it takes to press a key normally while typing and the "delay" in the typing motion needed to trigger the alternate layer. I was frequently getting strange characters and artifacts because I pressed the function key + the symbol key too quickly, and the layer never shifted.