[Keymap] Neo2 for ErgoDox on MacOS US QWERTY / ABC Extended keymap (#5862)

This is a Neo2 inspired layout that is meant to be fully usable on
MacOS when used with the default US QWERTY/ABC Extended keymap.

Neo2 layers 1-4 have been almost fully implemented in hardware.
Layers 5 and 6 (greek and mathematical symbols) have been left
out for now as most of them aren't available on the default
keymaps.

Layer toggling for layer 3 on the right hand side utilizes a
tap-toggle approach that is a combination of MO & LT macros.
This is required to allow sending Y when tapped, @ when tapped
while the SHIFT modifier is active and support momentarily
toggling the layer while the key is held.
This commit is contained in:
Morton Jonuschat
2019-05-14 12:12:29 -07:00
committed by Drashna Jaelre
parent 93a97ec6e5
commit 7c0f2ae6d1
4 changed files with 969 additions and 0 deletions

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,9 @@
enum layers {
NEO_1, // layer_0
NEO_3, // layer_1
NEO_4, // layer_2
NEO_5, // layer_3
NEO_6, // layer_4
US_1, // layer_5
FKEYS // layer_6
};

View File

@ -0,0 +1,219 @@
# Neo 2 for ErgoDox on QWERTY
# Description
The Neo layout is an optimized German keyboard layout developed by the
Neo Users Group, supporting many Latin-based alphabets. The positions
of the letters are not only optimized for German letter frequency,
but also for typical groups of two or three letters. English is
considered a primary target as well.
The design tries to enforce the alternating usage of both hands to
increase typing speed and incorporates ideas from de-ergo and other
ergonomic layouts. High frequency keys are placed in the home row.
The current layout Neo 2.0 has unique features making it suited for
many target groups such as programmers, mathematicians, scientists or
LaTeX authors.
Neo is grouped into six layers, each dedicated to a special purpose.
# Layers
At the core this is a Neo 2.0 layout adjusted for the Ergodox Infinity.
The keymap is laid out expecting a macOs using the US QWERTY or ABC
Extended layout.
[Layer 1](#layer-1) Lowercase, upppercase and typographical characters
[Layer 2](#layer-2) Special characters for programming
[Layer 3](#layer-3) WASD-like movement keys and number block
[Layer 4](#layer-4) Greek characters
[Layer 5](#layer-5) Mathematical symbols and Greek uppercase characters
[Layer 6](#layer-6) Ergodox Infinity US QWERTY layout
[Layer 7](#layer-7) Function keys
## Legend
* Keys marked with `----` are dead keys.
* Blank keys are transparent and fall through to lower levels.
## Layer 1
This layer implements NEO layers 1 and 2.
```
,--------------------------------------------------. ,--------------------------------------------------.
| ---- | 1/° | 2/§ | 3/ | 4/» | 5/« | ESC | | US_1 | 6/$ | 7/€ | 8/„ | 9/“ | 0/” | -/— |
|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
| TAB | X | V | L | C | W | LCTL | | RCTL | K | H | G | F | Q | ß |
|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
| NEO_3 | U | I | A | E | O |------| |------| S | N | R | T | D | Y |
|--------+------+------+------+------+------| LALT | | RALT |------+------+------+------+------+--------|
| LSHIFT | Ü | Ö | Ä | P | Z | | | | B | M | ,/ | ./• | J | RSHIFT |
`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
| ---- | ---- | LCTL | LALT | LGUI | | RGUI | Left | Down | Up | Right|
`----------------------------------' `----------------------------------'
,-------------. ,-------------.
| FKEYS| Home | | PgUp | FKEYS|
,------|------|------| |------+------+------.
| Back-| | End | | PgDn | | |
| space|Delete|------| |------| Enter|Space |
| | | NEO_4| | NEO_4| | |
`--------------------' `--------------------'
```
## Layer 2
This layer implements NEO layer 3.
```
,--------------------------------------------------. ,--------------------------------------------------.
| ---- | ---- | ---- | ---- | | | | | | ¢ | ¥ | | | | ---- |
|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
| ---- | … | _ | [ | ] | ^ | | | | ! | < | > | = | & | ---- |
|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
| | \ | / | { | } | * |------| |------| ? | ( | ) | - | : | @ |
|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
| | # | $ | | | ~ | ` | | | | + | % | " | ' | ; | |
`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
| | | | | | | | | | | |
`----------------------------------' `----------------------------------'
,-------------. ,-------------.
| | | | | |
,------|------|------| |------+------+------.
| | | | | | | |
| | |------| |------| | |
| | | | | | | |
`--------------------' `--------------------'
```
## Layer 3
This layer implements NEO layer 4.
```
,--------------------------------------------------. ,--------------------------------------------------.
| ---- | ª | º | ---- | · | £ | | | | ---- | Tab | / | * | - | ---- |
|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
| ---- | PgUp | ⌫ | Up | ⌦ | PgDn | | | | ¡ | 7 | 8 | 9 | + | |
|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
| | Home | Left | Down | Right| End |------| |------| ¿ | 4 | 5 | 6 | , | . |
|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
| | Esc | Tab | Ins |Return| ---- | | | | : | 1 | 2 | 3 | ; | |
`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
| | | | | | | | 0 | | | |
`----------------------------------' `----------------------------------'
,-------------. ,-------------.
| | | | | |
,------|------|------| |------+------+------.
| | | | | | | |
| | |------| |------| | |
| | | | | | | |
`--------------------' `--------------------'
```
## Layer 4
This layer is currently empty/reserved for NEO layer 5.
```
,--------------------------------------------------. ,--------------------------------------------------.
| ---- | ---- | ---- | ---- | ---- | ---- | | | | ---- | ---- | ---- | ---- | ---- | ---- |
|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
| ---- | ---- | ---- | ---- | ---- | ---- | | | | ---- | ---- | ---- | ---- | ---- | ---- |
|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
| | ---- | ----| ---- | ---- | ---- |------| |------| ---- | ---- | ---- | ---- | ---- | ---- |
|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
| | ---- | ----| ---- | ---- | ---- | | | | ---- | ---- | ---- | ---- | ---- | |
`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
| | | | | | | | | | | |
`----------------------------------' `----------------------------------'
,-------------. ,-------------.
| | | | | |
,------|------|------| |------+------+------.
| | | | | | | |
| | |------| |------| | |
| | | | | | | |
`--------------------' `--------------------'
```
## Layer 5
This layer is currently empty/reserved for NEO layer 6.
```
,--------------------------------------------------. ,--------------------------------------------------.
| ---- | ---- | ---- | ---- | ---- | ---- | | | | ---- | ---- | ---- | ---- | ---- | ---- |
|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
| ---- | ---- | ---- | ---- | ---- | ---- | | | | ---- | ---- | ---- | ---- | ---- | ---- |
|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
| | ---- | ----| ---- | ---- | ---- |------| |------| ---- | ---- | ---- | ---- | ---- | ---- |
|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
| | ---- | ----| ---- | ---- | ---- | | | | ---- | ---- | ---- | ---- | ---- | |
`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
| | | | | | | | | | | |
`----------------------------------' `----------------------------------'
,-------------. ,-------------.
| | | | | |
,------|------|------| |------+------+------.
| | | | | | | |
| | |------| |------| | |
| | | | | | | |
`--------------------' `--------------------'
```
## Layer 6
A bare bones implementation of the default Ergodox Infinity layout.
```
,--------------------------------------------------. ,--------------------------------------------------.
| = | 1 | 2 | 3 | 4 | 5 | ESC | | NEO_1| 6 | 7 | 8 | 9 | 0 | - |
|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
| \ | Q | W | E | R | T | ---- | | [ | Y | U | I | O | P | ] |
|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
| TAB | A | S | D | F | G |------| |------| H | J | K | L | ; | ' |
|--------+------+------+------+------+------| ---- | | ---- |------+------+------+------+------+--------|
| LSHIFT | Z | X | V | B | M | | | | N | M | , | . | / | RSHIFT |
`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
| LGUI | ` | ---- | ---- | FKEYS| | Left | Down | Up | Right| RGUI |
`----------------------------------' `----------------------------------'
,-------------. ,-------------.
| LCTRL| LALT | | RALT | RCTRL|
,------|------|------| |------+------+------.
| | | HOME | | PGUP | | |
| BKSP | DEL |------| |------| ENTR | SPCE |
| | | END | | PGDN | | |
`--------------------' `--------------------'
```
## Layer 7
This layer implements function and multimedia keys.
```
,--------------------------------------------------. ,--------------------------------------------------.
| Prev | F1 | F2 | F3 | F4 | F5 | F11 | | F12 | F6 | F7 | F8 | F9 | F10 | VolUp |
|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
| Play | | | | | | | | | | | | | | VolDn |
|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
| Next | | | | | |------| |------| | | | | | Mute |
|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
| | | | | | | | | | | | | | | |
`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
| | | | | | | | | | | |
`----------------------------------' `----------------------------------'
,-------------. ,-------------.
| | | | | |
,------|------|------| |------+------+------.
| | | | | | | |
| | |------| |------| | |
| | | | | | | |
`--------------------' `--------------------'
```

View File

@ -0,0 +1,47 @@
#include "layers.h"
#include "simple_visualizer.h"
#include "util.h"
static void get_visualizer_layer_and_color(visualizer_state_t *state) {
uint8_t layer = biton32(state->status.layer);
// Go from highest to lowest layer to get the right text/color combination.
switch (layer) {
// #AEB2F4 / hsv(65.71%, 28.69%, 95.69%)
case FKEYS:
// #F4AEDC / hsv(89.05%, 28.69%, 95.69%)
state->layer_text = "FUNCTION KEYS";
state->target_lcd_color = LCD_COLOR(228, 73, 245);
break;
case US_1:
// #F4B993 / hsv(6.53%, 39.75%, 95.69%)
state->layer_text = "QWERTY";
state->target_lcd_color = LCD_COLOR(17, 102, 245);
break;
case NEO_6:
// #F4E393 / hsv(13.75%, 39.75%, 95.69%)
state->layer_text = "NEO: 6";
state->target_lcd_color = LCD_COLOR(35, 102, 245);
break;
case NEO_5:
// #C6F493 / hsv(24.57%, 39.75%, 95.69%)
state->layer_text = "NEO: 5";
state->target_lcd_color = LCD_COLOR(63, 102, 245);
break;
case NEO_4:
// #8EEBC9 / hsv(43.91%, 39.57%, 92.16%)
state->layer_text = "NEO: 4";
state->target_lcd_color = LCD_COLOR(112, 101, 189);
break;
case NEO_3:
// #93D2F4 / hsv(55.84%, 39.75%, 95.69%)
state->layer_text = "NEO: 3";
state->target_lcd_color = LCD_COLOR(143, 102, 245);
break;
default:
// #EEEEEE / hsv(0%, 0%, 93%)
state->layer_text = "NEO: 1";
state->target_lcd_color = LCD_COLOR(0, 0, 255);
break;
}
}