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