aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjola5 <jola5@users.noreply.github.com>2018-02-02 07:21:41 +0100
committerJack Humbert <jack.humb@gmail.com>2018-02-02 01:21:41 -0500
commit2cf6bfe9ac10663181aa3ba32087da956bb7ec1e (patch)
tree24d8ee8993770542be82e55066cc4813cbbf67a8
parent2917e55bd4c8e25d79981ec997037b89478d402c (diff)
downloadqmk_firmware-2cf6bfe9ac10663181aa3ba32087da956bb7ec1e.tar.gz
qmk_firmware-2cf6bfe9ac10663181aa3ba32087da956bb7ec1e.zip
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
-rw-r--r--keyboards/ergodox_infinity/keymaps/not-quite-neo/keymap.c292
-rw-r--r--keyboards/ergodox_infinity/keymaps/not-quite-neo/readme.md5
-rw-r--r--keyboards/ergodox_infinity/keymaps/not-quite-neo/rules.mk2
-rw-r--r--keyboards/planck/keymaps/not-quite-neo/config.h6
-rw-r--r--keyboards/planck/keymaps/not-quite-neo/keymap.c129
-rw-r--r--keyboards/planck/keymaps/not-quite-neo/readme.md5
-rw-r--r--keyboards/planck/keymaps/not-quite-neo/rules.mk29
-rw-r--r--users/not-quite-neo/nqn-basic-layout.h124
-rw-r--r--users/not-quite-neo/nqn-common.h14
-rw-r--r--users/not-quite-neo/nqn-keys-on-quertz-de-latin1.h73
-rw-r--r--users/not-quite-neo/readme.md24
11 files changed, 703 insertions, 0 deletions
diff --git a/keyboards/ergodox_infinity/keymaps/not-quite-neo/keymap.c b/keyboards/ergodox_infinity/keymaps/not-quite-neo/keymap.c
new file mode 100644
index 000000000..8cf51842a
--- /dev/null
+++ b/keyboards/ergodox_infinity/keymaps/not-quite-neo/keymap.c
@@ -0,0 +1,292 @@
1#include QMK_KEYBOARD_H
2
3/*
4NQN is not-quite-neo
5A layout based on neo2
6*/
7
8#include "action_layer.h"
9#include "version.h"
10
11#include "nqn-keys-on-quertz-de-latin1.h"
12#include "nqn-basic-layout.h"
13
14// Since our quirky block definitions are basically a list of comma separated
15// arguments, we need a wrapper in order for these definitions to be
16// expanded before being used as arguments to the LAYOUT_xxx macro.
17#define LAYOUT_ergodox_wrapper(...) LAYOUT_ergodox(__VA_ARGS__)
18
19#ifdef LEADER_TIMEOUT
20#undef LEADER_TIMEOUT
21#endif
22#define LEADER_TIMEOUT 300
23
24#define TAP_ONCE(code) \
25 register_code (code); \
26 unregister_code (code)
27
28
29// Automatic number generation of important keywords
30enum my_keycodes{
31 // Layer numbers follow the neo2 terminology, i.e. base layer = layer 1
32 L01 = 0,
33 /* L02, SHIFT is not (yet) implemented as a fully customizable layer */
34 L03,
35 L04,
36 L05,
37 /* L06, UNSPECIFIED not (yet) needed */
38 LFN
39};
40
41
42const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
43/* L01 -> default: BASE LAYER
44 * ,--------------------------------------------------. ,--------------------------------------------------.
45 * | TAB | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | BACKSP |
46 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
47 * | ESC | | LEADR| | LEADR| | ENTER |
48 * |--------+ | | | | +--------|
49 * | L03 | L01_LEFT |------| |------| L01_RIGHT | L03 |
50 * |--------+ | LFN | | LFN | +--------|
51 * | SHIFT | | | | | | SHIFT |
52 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
53 * | CTRL | GUI | ALT | L05 | L04 | | L04 | L05 | ALTGR| LFN | CTRL |
54 * `----------------------------------' `----------------------------------'
55 * ,-------------. ,-------------.
56 * | HOME | END | | LEFT | RIGHT|
57 * ,------|------|------| |------+------+------.
58 * | | | PGUP | | UP | | |
59 * | SPACE| SHIFT|------| |------| SHIFT| SPACE|
60 * | | | PGDN | | DOWN | | |
61 * `--------------------' `--------------------'
62 */
63[L01] = LAYOUT_ergodox_wrapper(
64 KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, XXXXXXX,
65 KC_ESC, L01_LEFT_01, KC_LEAD,
66 MO(L03), L01_LEFT_02,
67 KC_LSHIFT, L01_LEFT_03, MO(LFN),
68 KC_LCTRL,KC_LGUI,KC_LALT, MO(L05), MO(L04),
69 XXXXXXX, XXXXXXX,
70 KC_PGUP,
71 KC_SPACE,KC_LSHIFT,KC_PGDN,
72 //--
73 XXXXXXX, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPACE,
74 KC_LEAD, L01_RIGHT_01, KC_ENTER,
75 L01_RIGHT_02, MO(L03),
76 MO(LFN), L01_RIGHT_03, KC_RSHIFT,
77 MO(L04), MO(L05), KC_RALT, MO(LFN), KC_RCTRL,
78 KC_LEFT, KC_RIGHT,
79 KC_UP,
80 KC_DOWN, KC_RSHIFT, KC_SPACE
81),
82
83
84/*
85L02 -> MO(L02): SHIFT (as a layer not used, not defined, not reachable)
86 */
87
88
89/* L03 -> MO(L03): PROGRAMMING
90 * ,--------------------------------------------------. ,--------------------------------------------------.
91 * | | | | | | | | | | | | | | | |
92 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
93 * | | | | | | | |
94 * |--------+ | | | | +--------|
95 * | | L03_LEFT |------| |------| L03_RIGHT | |
96 * |--------+ | | | | +--------|
97 * | | | | | | | |
98 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
99 * | | | | | | | | | | | |
100 * `----------------------------------' `----------------------------------'
101 * ,-------------. ,-------------.
102 * | | | | | |
103 * ,------|------|------| |------+------+------.
104 * | | | | | | | |
105 * | | |------| |------| | |
106 * | | | | | | | |
107 * `--------------------' `--------------------'
108 */
109[L03] = LAYOUT_ergodox_wrapper(
110 _______, _______, _______, _______, _______, _______, _______,
111 _______, L03_LEFT_01, _______,
112 _______, L03_LEFT_02,
113 _______, L03_LEFT_03, _______,
114 _______, _______, _______, _______, _______,
115 _______, _______,
116 _______,
117 _______, _______, _______,
118 //--
119 _______, _______, _______, _______, _______, _______, _______,
120 _______, L03_RIGHT_01, _______,
121 L03_RIGHT_02, _______,
122 _______, L03_RIGHT_03, _______,
123 _______, _______, _______, _______, _______,
124 _______, _______,
125 _______,
126 _______, _______, _______
127),
128
129/* L04 -> MO(L04): NAVIGATION AND NUMBERS
130 * ,--------------------------------------------------. ,--------------------------------------------------.
131 * | | | | | | | | | | | | | | | |
132 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
133 * | | | | | | | |
134 * |--------+ | | | | +--------|
135 * | | L04_LEFT |------| |------| L04_RIGHT | |
136 * |--------+ | | | | +--------|
137 * | | | | | | | |
138 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
139 * | | | | | | | | | | | |
140 * `----------------------------------' `----------------------------------'
141 * ,-------------. ,-------------.
142 * | | | | | |
143 * ,------|------|------| |------+------+------.
144 * | | | | | | | |
145 * | 0 | |------| |------| | 0 |
146 * | | | | | | | |
147 * `--------------------' `--------------------'
148 */
149[L04] = LAYOUT_ergodox_wrapper(
150 _______, _______, _______, _______, _______, _______, _______,
151 _______, L04_LEFT_01, _______,
152 _______, L04_LEFT_02,
153 _______, L04_LEFT_03, _______,
154 _______, _______, _______, _______, _______,
155 _______, _______,
156 _______,
157 KC_0, _______, _______,
158 //--
159 _______, _______, _______, _______, _______, _______, _______,
160 _______, L04_RIGHT_01, _______,
161 L04_RIGHT_02, _______,
162 _______, L04_RIGHT_03, _______,
163 _______, _______, _______, _______, _______,
164 _______, _______,
165 _______,
166 _______, _______, KC_0
167),
168
169
170/* L05 -> MO(L05): ALTERNATE
171 * ,--------------------------------------------------. ,--------------------------------------------------.
172 * | | | | | | | | | | | | | | | |
173 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
174 * | | | | | | | |
175 * |--------+ | | | | +--------|
176 * | | L05_LEFT |------| |------| L05_RIGHT | |
177 * |--------+ | | | | +--------|
178 * | | | | | | | |
179 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
180 * | | | | | | | | | | | |
181 * `----------------------------------' `----------------------------------'
182 * ,-------------. ,-------------.
183 * | | | | | |
184 * ,------|------|------| |------+------+------.
185 * | | | | | | | |
186 * | | |------| |------| | |
187 * | | | | | | | |
188 * `--------------------' `--------------------'
189 */
190[L05] = LAYOUT_ergodox_wrapper(
191 _______, _______, _______, _______, _______, _______, _______,
192 _______, L05_LEFT_01, _______,
193 _______, L05_LEFT_02,
194 _______, L05_LEFT_03, _______,
195 _______, _______, _______, _______, _______,
196 _______, _______,
197 _______,
198 _______, _______, _______,
199 //--
200 _______, _______, _______, _______, _______, _______, _______,
201 _______, L05_RIGHT_01, _______,
202 L05_RIGHT_02, _______,
203 _______, L05_RIGHT_03, _______,
204 _______, _______, _______, _______, _______,
205 _______, _______,
206 _______,
207 _______, _______, _______
208),
209
210
211/*
212L06 -> <TBD>: UNSPECIFIED
213*/
214
215
216/* LFN -> MO(FN): FUNCTION
217 * ,--------------------------------------------------. ,--------------------------------------------------.
218 * | RESET | | | | | | | | | | | | | | RESET |
219 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
220 * | | | | | | | BACKSPC|
221 * |--------+ | | | | +--------|
222 * | | L06_LEFT |------| |------| L06_RIGHT | INSERT |
223 * |--------+ | | | | +--------|
224 * | | | | | | | DELETE |
225 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
226 * | | | | | | | VOL+ | VOL- | MUTE | | |
227 * `----------------------------------' `----------------------------------'
228 * ,-------------. ,-------------.
229 * | | | | | |
230 * ,------|------|------| |------+------+------.
231 * | | | | | | | |
232 * | | |------| |------| | |
233 * | | | | | | | |
234 * `--------------------' `--------------------'
235 */
236[LFN] = LAYOUT_ergodox_wrapper(
237 RESET, _______, _______, _______, _______, _______, _______,
238 _______, L06_LEFT_01, _______,
239 _______, L06_LEFT_02,
240 _______, L06_LEFT_03, _______,
241 _______, _______, _______, _______, _______,
242 _______, _______,
243 _______,
244 _______, _______, _______,
245 //--
246 _______, _______, _______, _______, _______, _______, RESET,
247 _______, L06_RIGHT_01, KC_BSPACE,
248 L06_RIGHT_02, KC_INSERT,
249 _______, L06_RIGHT_03, KC_DELETE,
250 KC_VOLU, KC_VOLD, KC_MUTE, _______, _______,
251 _______, _______,
252 _______,
253 _______, _______, _______
254)
255
256};
257
258
259// Runs just one time when the keyboard initializes.
260void matrix_init_user(void) {
261 set_unicode_input_mode(UC_LNX);
262};
263
264
265LEADER_EXTERNS();
266
267// Runs constantly in the background, in a loop.
268void matrix_scan_user(void) {
269 LEADER_DICTIONARY() {
270 leading = false;
271 leader_end();
272
273 SEQ_ONE_KEY (KC_1) {
274 // ¯\_(ツ)_/¯
275 unicode_input_start(); register_hex(0xaf); unicode_input_finish();
276 register_code (KC_RALT); TAP_ONCE (KC_MINS); unregister_code (KC_RALT);
277 register_code (KC_RSFT); TAP_ONCE (KC_8); unregister_code (KC_RSFT);
278 unicode_input_start (); register_hex(0x30c4); unicode_input_finish();
279 register_code (KC_RSFT); TAP_ONCE (KC_9); TAP_ONCE(KC_7); unregister_code (KC_RSFT);
280 unicode_input_start (); register_hex(0xaf); unicode_input_finish();
281 }
282
283 SEQ_ONE_KEY (KC_2) {
284 // 凸(ツ)凸
285 unicode_input_start(); register_hex(0x51F8); unicode_input_finish();
286 register_code (KC_RSFT); TAP_ONCE (KC_8); unregister_code (KC_RSFT);
287 unicode_input_start (); register_hex(0x30c4); unicode_input_finish();
288 register_code (KC_RSFT); TAP_ONCE (KC_9); unregister_code (KC_RSFT);
289 unicode_input_start (); register_hex(0x51F8); unicode_input_finish();
290 }
291 }
292}
diff --git a/keyboards/ergodox_infinity/keymaps/not-quite-neo/readme.md b/keyboards/ergodox_infinity/keymaps/not-quite-neo/readme.md
new file mode 100644
index 000000000..3fcb4edf0
--- /dev/null
+++ b/keyboards/ergodox_infinity/keymaps/not-quite-neo/readme.md
@@ -0,0 +1,5 @@
1# not-quite-neo
2
3This is my personal take on porting the [neo2 layout](https://www.neo-layout.org/) to support multiple keyboards.
4
5Refer to the [readme.md](../../../../users/not-quite-neo/readme.md) of the generic parts of the implementation. \ No newline at end of file
diff --git a/keyboards/ergodox_infinity/keymaps/not-quite-neo/rules.mk b/keyboards/ergodox_infinity/keymaps/not-quite-neo/rules.mk
new file mode 100644
index 000000000..75624bb8c
--- /dev/null
+++ b/keyboards/ergodox_infinity/keymaps/not-quite-neo/rules.mk
@@ -0,0 +1,2 @@
1BACKLIGHT_ENABLE = yes
2UNICODE_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/planck/keymaps/not-quite-neo/config.h b/keyboards/planck/keymaps/not-quite-neo/config.h
new file mode 100644
index 000000000..7fa3bf328
--- /dev/null
+++ b/keyboards/planck/keymaps/not-quite-neo/config.h
@@ -0,0 +1,6 @@
1#ifndef CONFIG_USER_H
2#define CONFIG_USER_H
3
4#include "../../config.h"
5
6#endif
diff --git a/keyboards/planck/keymaps/not-quite-neo/keymap.c b/keyboards/planck/keymaps/not-quite-neo/keymap.c
new file mode 100644
index 000000000..8ea7679e3
--- /dev/null
+++ b/keyboards/planck/keymaps/not-quite-neo/keymap.c
@@ -0,0 +1,129 @@
1/*
2NQN is not-quite-neo
3A layout based on the
4*/
5
6
7#include "planck.h"
8#include "nqn-keys-on-quertz-de-latin1.h"
9#include "nqn-basic-layout.h"
10
11
12// Automatic number generation of important keywords
13enum my_keycodes{
14 // Layer numbers follow the neo2 terminology, i.e. base layer = layer 1
15 L01 = 0,
16 /* L02, SHIFT is not (yet) implemented as a fully customizable layer */
17 L03,
18 L04,
19 L05,
20 /* L06, UNSPECIFIED not (yet) needed */
21 LFN
22};
23
24
25const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
26/* L01 -> default: BASE LAYER
27 * ,-----------------------------------------------------------------------------------.
28 * | ESC | | | ENTER|
29 * |------+ | +------|
30 * | L03 | L01_LEFT | L01_RIGHT | L03 |
31 * |------+ | +------|
32 * | SHIFT| | | SHIFT|
33 * |------+------+------+------+------+------+------+------+------+------+------+------|
34 * | CTLR | GUI | ALT | L05 | L04 | SPACE| SPACE| L04 | L05 | ALTGR| LFN | CTLR |
35 * `-----------------------------------------------------------------------------------'
36 */
37[L01] = {
38 {KC_ESC, L01_LEFT_01, L01_RIGHT_01, KC_ENTER},
39 {MO(L03), L01_LEFT_02, L01_RIGHT_02, MO(L03)},
40 {KC_LSHIFT, L01_LEFT_03, L01_RIGHT_03, KC_RSFT},
41 {KC_LCTRL,KC_LGUI, KC_LALT, MO(L05), MO(L04), KC_SPC, KC_SPC, MO(L04), MO(L05), KC_RALT, MO(LFN), KC_RCTRL}
42},
43
44
45/*
46L02 -> MO(L02): SHIFT (as a layer not used, not defined, not reachable)
47 */
48
49
50/* L03 -> MO(L03): PROGRAMMING
51 * ,-----------------------------------------------------------------------------------.
52 * | | | | |
53 * |------+ | +------|
54 * | | L03_LEFT | L03_RIGHT | |
55 * |------+ | +------|
56 * | | | | |
57 * |------+------+------+------+------+------+------+------+------+------+------+------|
58 * | | | | | | | | | | | | |
59 * `-----------------------------------------------------------------------------------'
60 */
61[L03] = {
62 {_______, L03_LEFT_01, L03_RIGHT_01, _______},
63 {_______, L03_LEFT_02, L03_RIGHT_02, _______},
64 {_______, L03_LEFT_03, L03_RIGHT_03, _______},
65 {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
66},
67
68
69/* L04 -> MO(L04): NAVIGATION AND NUMBERS
70 * ,-----------------------------------------------------------------------------------.
71 * | | | | |
72 * |------+ | +------|
73 * | | L04_LEFT | L04_RIGHT | |
74 * |------+ | +------|
75 * | | | | |
76 * |------+------+------+------+------+------+------+------+------+------+------+------|
77 * | | | | | | | 0 | | | | | |
78 * `-----------------------------------------------------------------------------------'
79 */
80[L04] = {
81 {_______, L04_LEFT_01, L04_RIGHT_01, _______},
82 {_______, L04_LEFT_02, L04_RIGHT_02, _______},
83 {_______, L04_LEFT_03, L04_RIGHT_03, _______},
84 {_______, _______, _______, _______, _______, _______, KC_0, _______, _______, _______, _______, _______}
85},
86
87
88/* L05 -> MO(L05): ALTERNATE
89 * ,-----------------------------------------------------------------------------------.
90 * | | | | |
91 * |------+ | +------|
92 * | | L05_LEFT | L05_RIGHT | |
93 * |------+ | +------|
94 * | | | | |
95 * |------+------+------+------+------+------+------+------+------+------+------+------|
96 * | | | | | | | | | | | | |
97 * `-----------------------------------------------------------------------------------'
98 */
99[L05] = {
100 {_______, L05_LEFT_01, L05_RIGHT_01, _______},
101 {_______, L05_LEFT_02, L05_RIGHT_02, _______},
102 {_______, L05_LEFT_03, L05_RIGHT_03, _______},
103 {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
104},
105
106
107/*
108L06 -> <TBD>: UNSPECIFIED
109*/
110
111
112/* LFN -> MO(FN): FUNCTION
113 * ,-----------------------------------------------------------------------------------.
114 * | RESET| | | BACKS|
115 * |------+ | +------|
116 * | | L06_LEFT | L06_RIGHT |INSERT|
117 * |------+ | +------|
118 * | | | |DELETE|
119 * |------+------+------+------+------+------+------+------+------+------+------+------|
120 * |VOICE-|VOICE+|MUS ON|MUS OF| LIGHT| | | VOL+ | VOL- | MUTE | | |
121 * `-----------------------------------------------------------------------------------'
122 */
123[LFN] = {
124 {RESET, L06_LEFT_01, L06_RIGHT_01, KC_BSPC},
125 {_______, L06_LEFT_02, L06_RIGHT_02, KC_INS},
126 {_______, L06_LEFT_03, L06_RIGHT_03, KC_DEL},
127 {MUV_DE, MUV_IN, MU_ON, MU_OFF, _______, _______, _______, KC_VOLU, KC_VOLD, KC_MUTE, _______, _______}
128}
129};
diff --git a/keyboards/planck/keymaps/not-quite-neo/readme.md b/keyboards/planck/keymaps/not-quite-neo/readme.md
new file mode 100644
index 000000000..3fcb4edf0
--- /dev/null
+++ b/keyboards/planck/keymaps/not-quite-neo/readme.md
@@ -0,0 +1,5 @@
1# not-quite-neo
2
3This is my personal take on porting the [neo2 layout](https://www.neo-layout.org/) to support multiple keyboards.
4
5Refer to the [readme.md](../../../../users/not-quite-neo/readme.md) of the generic parts of the implementation. \ No newline at end of file
diff --git a/keyboards/planck/keymaps/not-quite-neo/rules.mk b/keyboards/planck/keymaps/not-quite-neo/rules.mk
new file mode 100644
index 000000000..316a3ea7b
--- /dev/null
+++ b/keyboards/planck/keymaps/not-quite-neo/rules.mk
@@ -0,0 +1,29 @@
1# Based on Zach's Planck Makefile
2# Max .hex size is about 28636 bytes
3
4# Build Options
5# change to "no" to disable the options, or define them in the Makefile in
6# the appropriate keymap folder that will get included automatically
7#
8TAP_DANCE_ENABLE = no # Enable TapDance functionality
9BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
10MOUSEKEY_ENABLE = no # Mouse keys(+4700)
11EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
12CONSOLE_ENABLE = no # Console for debug(+400)
13COMMAND_ENABLE = no # Commands for debug and configuration
14NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
15USB_6KRO_ENABLE = no # 6key Rollover
16BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
17MIDI_ENABLE = no # MIDI controls
18AUDIO_ENABLE = no # Audio output on port C6
19#VARIABLE_TRACE = no # Debug changes to variable values
20UNICODE_ENABLE = no # Unicode (can't be used with unicodemap)
21UNICODEMAP_ENABLE = no # Enable extended unicode
22BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
23RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
24# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
25SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
26
27ifndef QUANTUM_DIR
28 include ../../../../Makefile
29endif
diff --git a/users/not-quite-neo/nqn-basic-layout.h b/users/not-quite-neo/nqn-basic-layout.h
new file mode 100644
index 000000000..d1b9a1c47
--- /dev/null
+++ b/users/not-quite-neo/nqn-basic-layout.h
@@ -0,0 +1,124 @@
1#ifndef NQN_BASIC_LAYOUT_H
2#define NQN_BASIC_LAYOUT_H
3
4/*
5This is the basic NQN layout
6
7It consists of a block of 5x3, 5x4, 6x3, or 6x4 for each hand. This allows us
8to use these blocks for a variety of keyboards like the planck, preonic and
9even splits like the ergodox.
10
11You can see that we use some quirky preprocessor defines to achive what we
12desire. In the future I would like to see qmk taking a more generic approach
13like the KLL.
14
15The naming convention for these blocks is
16 L<LAYER>_<SIDE>_<ROW>
17
18 The LAYER is a number following the neo2 manner starting at 1 for the base
19 layer, 2 is shift, 3 is for special chars etc.
20
21 SIDE is, well either the left or right side/half of a keyboard.
22
23 The ROW is starting from the top, numbering beginning at 1.
24*/
25
26
27#include "nqn-common.h"
28
29
30/*
31 *
32 * LEFT RIGHT
33 * ,----------------------------------. ,----------------------------------.
34 * 01 | x | v | l | c | w | | k | h | g | f | q |
35 * |------+------+------+------+------| |------+------+------+------+------|
36 * 02 | u | i | a | e | o | | s | n | r | t | d |
37 * |------+------+------+------+------| |------+------+------+------+------|
38 * 03 | y | < | # | p | z | | b | m | , | . | j |
39 * `----------------------------------' `----------------------------------'
40 */
41#define L01_LEFT_01 KC_X, KC_V, KC_L, KC_C, KC_W
42#define L01_LEFT_02 KC_U, KC_I, KC_A, KC_E, KC_O
43#define L01_LEFT_03 N_Y, N_LT, N_HS, KC_P, N_Z
44#define L01_RIGHT_02 KC_S, KC_N, KC_R, KC_T, KC_D
45#define L01_RIGHT_01 KC_K, KC_H, KC_G, KC_F, KC_Q
46#define L01_RIGHT_03 KC_B, KC_M, KC_COMM, KC_DOT, KC_J
47
48
49/*
50 *
51 * LEFT RIGHT
52 * ,----------------------------------. ,----------------------------------.
53 * 01 | … | _ | [ | ] | ^ | | ! | < | > | = | & |
54 * |------+------+------+------+------| |------+------+------+------+------|
55 * 02 | \ | / | { | } | * | | ? | ( | ) | - | @ |
56 * |------+------+------+------+------| |------+------+------+------+------|
57 * 03 | # | $ | | | ~ | ` | | + | % | " | ' | ° |
58 * `----------------------------------' `----------------------------------'
59 */
60#define L03_LEFT_01 N_DOTS, N_USC, N_LSQBR, N_RSQBR, N_CIRC
61#define L03_LEFT_02 N_BSLS, N_SLSH, N_LCUBR, N_RCUBR, N_ASTR
62#define L03_LEFT_03 N_HASH, N_DLR, N_PIPE, N_TILD, N_GRAVE
63#define L03_RIGHT_01 N_EXKL, N_LT, N_GT, N_EQ, N_AMP
64#define L03_RIGHT_02 N_QUES, N_LPARN, N_RPARN, N_MINS, N_AT
65#define L03_RIGHT_03 N_PLUS, N_PERC, N_QUOT, N_SING, N_DEGRE
66
67
68/*
69 *
70 * LEFT RIGHT
71 * ,----------------------------------. ,----------------------------------.
72 * 01 | PAGEU| BACKS| UP | DELET| PAGED| | / | 7 | 8 | 9 | - |
73 * |------+------+------+------+------| |------+------+------+------+------|
74 * 02 | HOME | LEFT | DOWN | RIGHT| END | | * | 4 | 5 | 6 | + |
75 * |------+------+------+------+------| |------+------+------+------+------|
76 * 03 | ESC | TAB | INSRT| ENTER| UNDO | | ENTER| 1 | 2 | 3 | , |
77 * `----------------------------------' `----------------------------------'
78 */
79#define L04_LEFT_01 KC_PGUP, KC_BSPC, KC_UP, KC_DEL, KC_PGDN
80#define L04_LEFT_02 KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT, KC_END
81#define L04_LEFT_03 KC_ESC, KC_TAB, KC_INS, KC_ENTER, N_UNDO
82#define L04_RIGHT_01 KC_KP_SLASH, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_MINUS
83#define L04_RIGHT_02 KC_KP_ASTERISK, KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_PLUS
84#define L04_RIGHT_03 KC_KP_ENTER, KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_DOT
85
86
87/*
88 * LEFT RIGHT
89 * ,----------------------------------. ,----------------------------------.
90 * 01 | | | | | | | | | | | |
91 * |------+------+------+------+------| |------+------+------+------+------|
92 * 02 | ü | | ä | € | ö | | ß | | | | |
93 * |------+------+------+------+------| |------+------+------+------+------|
94 * 03 | | | | | | | | µ | | | |
95 * `----------------------------------' `----------------------------------'
96 */
97#define L05_LEFT_01 _______, _______, _______, _______, _______
98#define L05_LEFT_02 N_UE, _______, N_AE, N_EURO, N_OE
99#define L05_LEFT_03 _______, _______, _______, _______, _______
100#define L05_RIGHT_01 _______, _______, _______, _______, _______
101#define L05_RIGHT_02 N_SS, _______, _______, _______, _______
102#define L05_RIGHT_03 _______, N_MU, _______, _______, _______
103
104
105/*
106 *
107 * LEFT RIGHT
108 * ,----------------------------------. ,----------------------------------.
109 * 01 | F1 | F2 | F3 | F4 | | | MAIL | MUSIC| FILES| CALC | PASTE|
110 * |------+------+------+------+------| |------+------+------+------+------|
111 * 02 | F5 | F6 | F7 | F8 | | | PREV |PLAY/P| NEXT | STOP | COPY |
112 * |------+------+------+------+------| |------+------+------+------+------|
113 * 03 | F9 | F10 | F11 | F12 | | | PRINT| SCROL| PAUSE| NUMLK| CUT |
114 * `----------------------------------' `----------------------------------'
115 */
116#define L06_LEFT_01 KC_F1, KC_F2, KC_F3, KC_F4, _______
117#define L06_LEFT_02 KC_F5, KC_F6, KC_F7, KC_F8, _______
118#define L06_LEFT_03 KC_F9, KC_F10, KC_F11, KC_F12, _______
119#define L06_RIGHT_01 KC_MAIL, KC_MSEL, KC_MY_COMPUTER, KC_CALCULATOR, N_PASTE
120#define L06_RIGHT_02 KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP, N_COPY
121#define L06_RIGHT_03 KC_PSCR, KC_SLCK, KC_PAUS, KC_NLCK, N_CUT
122
123
124#endif
diff --git a/users/not-quite-neo/nqn-common.h b/users/not-quite-neo/nqn-common.h
new file mode 100644
index 000000000..a04dc7a18
--- /dev/null
+++ b/users/not-quite-neo/nqn-common.h
@@ -0,0 +1,14 @@
1#ifndef NQN_COMMON_H
2#define NQN_COMMON_H
3
4
5/*
6This file holds some commen NQN definitions
7*/
8
9
10#define _______ KC_TRNS
11#define XXXXXXX KC_NO
12
13
14#endif
diff --git a/users/not-quite-neo/nqn-keys-on-quertz-de-latin1.h b/users/not-quite-neo/nqn-keys-on-quertz-de-latin1.h
new file mode 100644
index 000000000..8276cf207
--- /dev/null
+++ b/users/not-quite-neo/nqn-keys-on-quertz-de-latin1.h
@@ -0,0 +1,73 @@
1#ifndef NQN_KEYS_ON_QUERTZ_DE_LATIN1_H
2#define NQN_KEYS_ON_QUERTZ_DE_LATIN1_H
3
4
5/*
6This file defines the desierd NQN keys if you use a software (operating sysetm)
7configured for a QUERTZ layout (de-latin1).
8
9These chars can be created by using ALTGR on linux and a few of them on windows
10with a German de-latin1 layout (depending on desktop environment and/or
11application).
12 ′¹²³¼½¬{[]}\¸
13 @ł€¶ŧ←↓→øþ¨~
14 æſðđŋħ̣ĸł˝^’
15 |»«¢„“”µ·…–
16
17Additionally, there are some common chars that we dit not yet define:
18 §
19*/
20
21
22#include "nqn-common.h"
23
24
25// NQN key definitions in no particular order
26#define N_LT KC_NONUS_BSLASH
27#define N_HS KC_NONUS_HASH
28#define N_DOTS RALT(KC_DOT) // …
29#define N_USC LSFT(KC_SLASH) // _
30#define N_LSQBR RALT(KC_8) // [
31#define N_RSQBR RALT(KC_9) // ]
32#define N_CIRC KC_GRAVE // ^
33#define N_EXKL LSFT(KC_1) // !
34#define N_GT LSFT(KC_NONUS_BSLASH) // >
35#define N_EQ LSFT(KC_0) // =
36#define N_AMP LSFT(KC_6) // &
37#define N_BSLS RALT(KC_MINS) // \ backslash
38#define N_SLSH LSFT(KC_7) // /
39#define N_LCUBR RALT(KC_7) // {
40#define N_RCUBR RALT(KC_0) // }
41#define N_ASTR LSFT(KC_RBRC) // *
42#define N_QUES LSFT(KC_MINS) // ?
43#define N_LPARN LSFT(KC_8) // (
44#define N_RPARN LSFT(KC_9) // )
45#define N_MINS KC_SLASH // -
46#define N_COLN LSFT(KC_DOT) // :
47#define N_HASH KC_BSLASH // #
48#define N_DLR LSFT(KC_4) // $
49#define N_PIPE RALT(KC_NONUS_BSLASH) // |
50#define N_TILD RALT(KC_RBRC) // ~
51#define N_GRAVE LSFT(KC_EQUAL) // `
52#define N_PLUS KC_RBRC // +
53#define N_PERC LSFT(KC_5) // %
54#define N_QUOT LSFT(KC_2) // "
55#define N_SING LSFT(KC_BSLASH) // '
56#define N_SEMI LSFT(KC_COMM) // ;
57#define N_EURO RALT(KC_E) // €
58#define N_AT RALT(KC_Q) // @
59#define N_Z KC_Y
60#define N_Y KC_Z
61#define N_AE KC_QUOTE // ä
62#define N_OE KC_SCOLON // ö
63#define N_UE KC_LBRACKET // ü
64#define N_MU RALT(KC_M) // µ
65#define N_SS KC_MINS // ß
66#define N_DEGRE LSFT(KC_GRAVE) // °
67#define N_PASTE LCTL(KC_V) // CTRL+V
68#define N_COPY LCTL(KC_C) // CTRL+C
69#define N_CUT LCTL(KC_X) // CTRL+X
70#define N_UNDO LCTL(N_Z) // CTRL+Z
71
72
73#endif
diff --git a/users/not-quite-neo/readme.md b/users/not-quite-neo/readme.md
new file mode 100644
index 000000000..85a29ecc6
--- /dev/null
+++ b/users/not-quite-neo/readme.md
@@ -0,0 +1,24 @@
1# not-quite-neo
2
3This 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.
4
5## Use case
6My use case is simple:
7
8* 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.
9* 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.
10* 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.
11
12Therefore, 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.
13
14## Pitfalls
15Mind, 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.).
16
17Right now this implementation only incompletely supports neo2 layers 1 to 4.
18
19The 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.
20
21## Keyboards and keymaps
22
23You 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)
24 . \ No newline at end of file