Not quite neo (#2318)
* planck with a not-quite-neo layout for a de-DE OS/SW keymap * ergodox infinity with a not-quite-neo layout for a de-DE OS/SW keymap * add documentation
This commit is contained in:
parent
2917e55bd4
commit
2cf6bfe9ac
11 changed files with 703 additions and 0 deletions
124
users/not-quite-neo/nqn-basic-layout.h
Normal file
124
users/not-quite-neo/nqn-basic-layout.h
Normal file
|
@ -0,0 +1,124 @@
|
|||
#ifndef NQN_BASIC_LAYOUT_H
|
||||
#define NQN_BASIC_LAYOUT_H
|
||||
|
||||
/*
|
||||
This is the basic NQN layout
|
||||
|
||||
It consists of a block of 5x3, 5x4, 6x3, or 6x4 for each hand. This allows us
|
||||
to use these blocks for a variety of keyboards like the planck, preonic and
|
||||
even splits like the ergodox.
|
||||
|
||||
You can see that we use some quirky preprocessor defines to achive what we
|
||||
desire. In the future I would like to see qmk taking a more generic approach
|
||||
like the KLL.
|
||||
|
||||
The naming convention for these blocks is
|
||||
L<LAYER>_<SIDE>_<ROW>
|
||||
|
||||
The LAYER is a number following the neo2 manner starting at 1 for the base
|
||||
layer, 2 is shift, 3 is for special chars etc.
|
||||
|
||||
SIDE is, well either the left or right side/half of a keyboard.
|
||||
|
||||
The ROW is starting from the top, numbering beginning at 1.
|
||||
*/
|
||||
|
||||
|
||||
#include "nqn-common.h"
|
||||
|
||||
|
||||
/*
|
||||
*
|
||||
* LEFT RIGHT
|
||||
* ,----------------------------------. ,----------------------------------.
|
||||
* 01 | x | v | l | c | w | | k | h | g | f | q |
|
||||
* |------+------+------+------+------| |------+------+------+------+------|
|
||||
* 02 | u | i | a | e | o | | s | n | r | t | d |
|
||||
* |------+------+------+------+------| |------+------+------+------+------|
|
||||
* 03 | y | < | # | p | z | | b | m | , | . | j |
|
||||
* `----------------------------------' `----------------------------------'
|
||||
*/
|
||||
#define L01_LEFT_01 KC_X, KC_V, KC_L, KC_C, KC_W
|
||||
#define L01_LEFT_02 KC_U, KC_I, KC_A, KC_E, KC_O
|
||||
#define L01_LEFT_03 N_Y, N_LT, N_HS, KC_P, N_Z
|
||||
#define L01_RIGHT_02 KC_S, KC_N, KC_R, KC_T, KC_D
|
||||
#define L01_RIGHT_01 KC_K, KC_H, KC_G, KC_F, KC_Q
|
||||
#define L01_RIGHT_03 KC_B, KC_M, KC_COMM, KC_DOT, KC_J
|
||||
|
||||
|
||||
/*
|
||||
*
|
||||
* LEFT RIGHT
|
||||
* ,----------------------------------. ,----------------------------------.
|
||||
* 01 | … | _ | [ | ] | ^ | | ! | < | > | = | & |
|
||||
* |------+------+------+------+------| |------+------+------+------+------|
|
||||
* 02 | \ | / | { | } | * | | ? | ( | ) | - | @ |
|
||||
* |------+------+------+------+------| |------+------+------+------+------|
|
||||
* 03 | # | $ | | | ~ | ` | | + | % | " | ' | ° |
|
||||
* `----------------------------------' `----------------------------------'
|
||||
*/
|
||||
#define L03_LEFT_01 N_DOTS, N_USC, N_LSQBR, N_RSQBR, N_CIRC
|
||||
#define L03_LEFT_02 N_BSLS, N_SLSH, N_LCUBR, N_RCUBR, N_ASTR
|
||||
#define L03_LEFT_03 N_HASH, N_DLR, N_PIPE, N_TILD, N_GRAVE
|
||||
#define L03_RIGHT_01 N_EXKL, N_LT, N_GT, N_EQ, N_AMP
|
||||
#define L03_RIGHT_02 N_QUES, N_LPARN, N_RPARN, N_MINS, N_AT
|
||||
#define L03_RIGHT_03 N_PLUS, N_PERC, N_QUOT, N_SING, N_DEGRE
|
||||
|
||||
|
||||
/*
|
||||
*
|
||||
* LEFT RIGHT
|
||||
* ,----------------------------------. ,----------------------------------.
|
||||
* 01 | PAGEU| BACKS| UP | DELET| PAGED| | / | 7 | 8 | 9 | - |
|
||||
* |------+------+------+------+------| |------+------+------+------+------|
|
||||
* 02 | HOME | LEFT | DOWN | RIGHT| END | | * | 4 | 5 | 6 | + |
|
||||
* |------+------+------+------+------| |------+------+------+------+------|
|
||||
* 03 | ESC | TAB | INSRT| ENTER| UNDO | | ENTER| 1 | 2 | 3 | , |
|
||||
* `----------------------------------' `----------------------------------'
|
||||
*/
|
||||
#define L04_LEFT_01 KC_PGUP, KC_BSPC, KC_UP, KC_DEL, KC_PGDN
|
||||
#define L04_LEFT_02 KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT, KC_END
|
||||
#define L04_LEFT_03 KC_ESC, KC_TAB, KC_INS, KC_ENTER, N_UNDO
|
||||
#define L04_RIGHT_01 KC_KP_SLASH, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_MINUS
|
||||
#define L04_RIGHT_02 KC_KP_ASTERISK, KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_PLUS
|
||||
#define L04_RIGHT_03 KC_KP_ENTER, KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_DOT
|
||||
|
||||
|
||||
/*
|
||||
* LEFT RIGHT
|
||||
* ,----------------------------------. ,----------------------------------.
|
||||
* 01 | | | | | | | | | | | |
|
||||
* |------+------+------+------+------| |------+------+------+------+------|
|
||||
* 02 | ü | | ä | € | ö | | ß | | | | |
|
||||
* |------+------+------+------+------| |------+------+------+------+------|
|
||||
* 03 | | | | | | | | µ | | | |
|
||||
* `----------------------------------' `----------------------------------'
|
||||
*/
|
||||
#define L05_LEFT_01 _______, _______, _______, _______, _______
|
||||
#define L05_LEFT_02 N_UE, _______, N_AE, N_EURO, N_OE
|
||||
#define L05_LEFT_03 _______, _______, _______, _______, _______
|
||||
#define L05_RIGHT_01 _______, _______, _______, _______, _______
|
||||
#define L05_RIGHT_02 N_SS, _______, _______, _______, _______
|
||||
#define L05_RIGHT_03 _______, N_MU, _______, _______, _______
|
||||
|
||||
|
||||
/*
|
||||
*
|
||||
* LEFT RIGHT
|
||||
* ,----------------------------------. ,----------------------------------.
|
||||
* 01 | F1 | F2 | F3 | F4 | | | MAIL | MUSIC| FILES| CALC | PASTE|
|
||||
* |------+------+------+------+------| |------+------+------+------+------|
|
||||
* 02 | F5 | F6 | F7 | F8 | | | PREV |PLAY/P| NEXT | STOP | COPY |
|
||||
* |------+------+------+------+------| |------+------+------+------+------|
|
||||
* 03 | F9 | F10 | F11 | F12 | | | PRINT| SCROL| PAUSE| NUMLK| CUT |
|
||||
* `----------------------------------' `----------------------------------'
|
||||
*/
|
||||
#define L06_LEFT_01 KC_F1, KC_F2, KC_F3, KC_F4, _______
|
||||
#define L06_LEFT_02 KC_F5, KC_F6, KC_F7, KC_F8, _______
|
||||
#define L06_LEFT_03 KC_F9, KC_F10, KC_F11, KC_F12, _______
|
||||
#define L06_RIGHT_01 KC_MAIL, KC_MSEL, KC_MY_COMPUTER, KC_CALCULATOR, N_PASTE
|
||||
#define L06_RIGHT_02 KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP, N_COPY
|
||||
#define L06_RIGHT_03 KC_PSCR, KC_SLCK, KC_PAUS, KC_NLCK, N_CUT
|
||||
|
||||
|
||||
#endif
|
14
users/not-quite-neo/nqn-common.h
Normal file
14
users/not-quite-neo/nqn-common.h
Normal file
|
@ -0,0 +1,14 @@
|
|||
#ifndef NQN_COMMON_H
|
||||
#define NQN_COMMON_H
|
||||
|
||||
|
||||
/*
|
||||
This file holds some commen NQN definitions
|
||||
*/
|
||||
|
||||
|
||||
#define _______ KC_TRNS
|
||||
#define XXXXXXX KC_NO
|
||||
|
||||
|
||||
#endif
|
73
users/not-quite-neo/nqn-keys-on-quertz-de-latin1.h
Normal file
73
users/not-quite-neo/nqn-keys-on-quertz-de-latin1.h
Normal file
|
@ -0,0 +1,73 @@
|
|||
#ifndef NQN_KEYS_ON_QUERTZ_DE_LATIN1_H
|
||||
#define NQN_KEYS_ON_QUERTZ_DE_LATIN1_H
|
||||
|
||||
|
||||
/*
|
||||
This file defines the desierd NQN keys if you use a software (operating sysetm)
|
||||
configured for a QUERTZ layout (de-latin1).
|
||||
|
||||
These chars can be created by using ALTGR on linux and a few of them on windows
|
||||
with a German de-latin1 layout (depending on desktop environment and/or
|
||||
application).
|
||||
′¹²³¼½¬{[]}\¸
|
||||
@ł€¶ŧ←↓→øþ¨~
|
||||
æſðđŋħ̣ĸł˝^’
|
||||
|»«¢„“”µ·…–
|
||||
|
||||
Additionally, there are some common chars that we dit not yet define:
|
||||
§
|
||||
*/
|
||||
|
||||
|
||||
#include "nqn-common.h"
|
||||
|
||||
|
||||
// NQN key definitions in no particular order
|
||||
#define N_LT KC_NONUS_BSLASH
|
||||
#define N_HS KC_NONUS_HASH
|
||||
#define N_DOTS RALT(KC_DOT) // …
|
||||
#define N_USC LSFT(KC_SLASH) // _
|
||||
#define N_LSQBR RALT(KC_8) // [
|
||||
#define N_RSQBR RALT(KC_9) // ]
|
||||
#define N_CIRC KC_GRAVE // ^
|
||||
#define N_EXKL LSFT(KC_1) // !
|
||||
#define N_GT LSFT(KC_NONUS_BSLASH) // >
|
||||
#define N_EQ LSFT(KC_0) // =
|
||||
#define N_AMP LSFT(KC_6) // &
|
||||
#define N_BSLS RALT(KC_MINS) // \ backslash
|
||||
#define N_SLSH LSFT(KC_7) // /
|
||||
#define N_LCUBR RALT(KC_7) // {
|
||||
#define N_RCUBR RALT(KC_0) // }
|
||||
#define N_ASTR LSFT(KC_RBRC) // *
|
||||
#define N_QUES LSFT(KC_MINS) // ?
|
||||
#define N_LPARN LSFT(KC_8) // (
|
||||
#define N_RPARN LSFT(KC_9) // )
|
||||
#define N_MINS KC_SLASH // -
|
||||
#define N_COLN LSFT(KC_DOT) // :
|
||||
#define N_HASH KC_BSLASH // #
|
||||
#define N_DLR LSFT(KC_4) // $
|
||||
#define N_PIPE RALT(KC_NONUS_BSLASH) // |
|
||||
#define N_TILD RALT(KC_RBRC) // ~
|
||||
#define N_GRAVE LSFT(KC_EQUAL) // `
|
||||
#define N_PLUS KC_RBRC // +
|
||||
#define N_PERC LSFT(KC_5) // %
|
||||
#define N_QUOT LSFT(KC_2) // "
|
||||
#define N_SING LSFT(KC_BSLASH) // '
|
||||
#define N_SEMI LSFT(KC_COMM) // ;
|
||||
#define N_EURO RALT(KC_E) // €
|
||||
#define N_AT RALT(KC_Q) // @
|
||||
#define N_Z KC_Y
|
||||
#define N_Y KC_Z
|
||||
#define N_AE KC_QUOTE // ä
|
||||
#define N_OE KC_SCOLON // ö
|
||||
#define N_UE KC_LBRACKET // ü
|
||||
#define N_MU RALT(KC_M) // µ
|
||||
#define N_SS KC_MINS // ß
|
||||
#define N_DEGRE LSFT(KC_GRAVE) // °
|
||||
#define N_PASTE LCTL(KC_V) // CTRL+V
|
||||
#define N_COPY LCTL(KC_C) // CTRL+C
|
||||
#define N_CUT LCTL(KC_X) // CTRL+X
|
||||
#define N_UNDO LCTL(N_Z) // CTRL+Z
|
||||
|
||||
|
||||
#endif
|
24
users/not-quite-neo/readme.md
Normal file
24
users/not-quite-neo/readme.md
Normal file
|
@ -0,0 +1,24 @@
|
|||
# not-quite-neo
|
||||
|
||||
This is my personal take on porting the [neo2 layout](https://www.neo-layout.org/) to support both a ergodox (infinity) and a planck keyboard. Some sacrifices needed to be made, hence this layout is not-quite-neo.
|
||||
|
||||
## Use case
|
||||
My use case is simple:
|
||||
|
||||
* I want to use neo2 (or a keymap as close as possible) on any computer I can plug my keyboards in. Because installing the neo2 SW driver is often not a acceptable solution.
|
||||
* Since most computers I work on (colleagues, family, etc.) use a de-DE keymap, I can not use the official neo2 implementation, because it relies on a us layout and I often times do not even posses the administration rights to change that.
|
||||
* neo2 makes use of most of the keys of a standard 104 key keyboard, especially for supporting the planck I needed to deviate from the original neo2 layout in order to fit everything I wanted.
|
||||
|
||||
Therefore, I put all reusable code in the users/not-quite-neo directory and created a custom not-quite-neo keymap for the planck and the ergodox infinity keyboard respectively.
|
||||
|
||||
## Pitfalls
|
||||
Mind, since neo2 is a SW driver supported layout it offers a lot of features that are hard to support in hardware (especially the fancy utf stuff with math symbols and greek letters etc.).
|
||||
|
||||
Right now this implementation only incompletely supports neo2 layers 1 to 4.
|
||||
|
||||
The biggest difference is probably the support for the German Umlauts ä, ö, ü and the ß. Since we rely on a smaller number of keys some glyphs needed to be created otherwise. See the implementation in [nqn-basic-layout.h](nqn-basic-layout.h) for details.
|
||||
|
||||
## Keyboards and keymaps
|
||||
|
||||
You can find the *not-quite-neo* keymap for the ergodox infinity under [qmk_firmware/keyboards/ergodox_infinity/keymaps/not-quite-neo/](../../keyboards/ergodox_infinity/keymaps/not-quite-neo/readme.md). Respectively the keymap for the planck resides in [qmk_firmware/keyboards/planck/keymaps/not-quite-neo/](../../keyboards/planck/keymaps/not-quite-neo/readme.md)
|
||||
.
|
Loading…
Add table
Add a link
Reference in a new issue