Quellcode durchsuchen

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
jola5 vor 7 Jahren
Ursprung
Commit
2cf6bfe9ac

+ 292 - 0
keyboards/ergodox_infinity/keymaps/not-quite-neo/keymap.c

@@ -0,0 +1,292 @@
+#include QMK_KEYBOARD_H
+
+/*
+NQN is not-quite-neo
+A layout based on neo2
+*/
+
+#include "action_layer.h"
+#include "version.h"
+
+#include "nqn-keys-on-quertz-de-latin1.h"
+#include "nqn-basic-layout.h"
+
+// Since our quirky block definitions are basically a list of comma separated 
+// arguments, we need a wrapper in order for these definitions to be 
+// expanded before being used as arguments to the LAYOUT_xxx macro.
+#define LAYOUT_ergodox_wrapper(...) LAYOUT_ergodox(__VA_ARGS__)
+
+#ifdef LEADER_TIMEOUT
+#undef LEADER_TIMEOUT
+#endif
+#define LEADER_TIMEOUT 300
+
+#define TAP_ONCE(code)  \
+  register_code (code); \
+  unregister_code (code)
+
+
+// Automatic number generation of important keywords
+enum my_keycodes{
+    // Layer numbers follow the neo2 terminology, i.e. base layer = layer 1
+    L01 = 0,
+    /* L02, SHIFT is not (yet) implemented as a fully customizable layer */
+    L03,
+    L04,
+    L05,
+    /* L06, UNSPECIFIED not (yet) needed */
+    LFN
+};
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* L01 -> default: BASE LAYER
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * | TAB    |   1  |   2  |   3  |   4  |   5  |      |           |      |   6  |   7  |   8  |   9  |   0  | BACKSP |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | ESC    |                                  | LEADR|           | LEADR|                                  | ENTER  |
+ * |--------+                                  |      |           |      |                                  +--------|
+ * | L03    |             L01_LEFT             |------|           |------|             L01_RIGHT            | L03    |
+ * |--------+                                  | LFN  |           | LFN  |                                  +--------|
+ * | SHIFT  |                                  |      |           |      |                                  | SHIFT  |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   | CTRL | GUI  | ALT  | L05  | L04  |                                       | L04  | L05  | ALTGR| LFN  | CTRL |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        | HOME | END  |       | LEFT | RIGHT|
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      | PGUP |       | UP   |      |      |
+ *                                 | SPACE| SHIFT|------|       |------| SHIFT| SPACE|
+ *                                 |      |      | PGDN |       | DOWN |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+[L01] = LAYOUT_ergodox_wrapper(
+  KC_TAB,  KC_1,   KC_2,    KC_3,    KC_4,    KC_5,    XXXXXXX,
+  KC_ESC,                 L01_LEFT_01,                 KC_LEAD,
+  MO(L03),                L01_LEFT_02,
+  KC_LSHIFT,              L01_LEFT_03,                 MO(LFN),
+  KC_LCTRL,KC_LGUI,KC_LALT, MO(L05), MO(L04),
+                                              XXXXXXX, XXXXXXX,
+                                                       KC_PGUP,
+                                     KC_SPACE,KC_LSHIFT,KC_PGDN,
+  //--
+  XXXXXXX,  KC_6,   KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPACE,
+  KC_LEAD,                L01_RIGHT_01,                 KC_ENTER,
+                          L01_RIGHT_02,                 MO(L03),
+  MO(LFN),                L01_RIGHT_03,                 KC_RSHIFT,
+                    MO(L04), MO(L05), KC_RALT, MO(LFN), KC_RCTRL,
+  KC_LEFT, KC_RIGHT,
+  KC_UP,
+  KC_DOWN, KC_RSHIFT, KC_SPACE
+),
+
+
+/*
+L02 -> MO(L02): SHIFT (as a layer not used, not defined, not reachable)
+ */
+
+
+/* L03 -> MO(L03): PROGRAMMING
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |                                  |      |           |      |                                  |        |
+ * |--------+                                  |      |           |      |                                  +--------|
+ * |        |             L03_LEFT             |------|           |------|             L03_RIGHT            |        |
+ * |--------+                                  |      |           |      |                                  +--------|
+ * |        |                                  |      |           |      |                                  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |      |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+[L03] = LAYOUT_ergodox_wrapper(
+  _______, _______, _______, _______, _______, _______, _______,
+  _______,                 L03_LEFT_01,                 _______,
+  _______,                 L03_LEFT_02,
+  _______,                 L03_LEFT_03,                 _______,
+  _______, _______, _______, _______, _______,
+                                               _______, _______,
+                                                        _______,
+                                      _______, _______, _______,
+  //--
+  _______, _______, _______, _______, _______, _______, _______,
+  _______,                 L03_RIGHT_01,                _______,
+                           L03_RIGHT_02,                _______,
+  _______,                 L03_RIGHT_03,                _______,
+                    _______, _______, _______, _______, _______,
+  _______, _______,
+  _______,
+  _______, _______, _______
+),
+
+/* L04 -> MO(L04): NAVIGATION AND NUMBERS
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |                                  |      |           |      |                                  |        |
+ * |--------+                                  |      |           |      |                                  +--------|
+ * |        |             L04_LEFT             |------|           |------|             L04_RIGHT            |        |
+ * |--------+                                  |      |           |      |                                  +--------|
+ * |        |                                  |      |           |      |                                  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |      |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 | 0    |      |------|       |------|      | 0    |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+[L04] = LAYOUT_ergodox_wrapper(
+  _______, _______, _______, _______, _______, _______, _______,
+  _______,                 L04_LEFT_01,                 _______,
+  _______,                 L04_LEFT_02,
+  _______,                 L04_LEFT_03,                 _______,
+  _______, _______, _______, _______, _______,
+                                               _______, _______,
+                                                        _______,
+                                      KC_0,    _______, _______,
+  //--
+  _______, _______, _______, _______, _______, _______, _______,
+  _______,                 L04_RIGHT_01,                _______,
+                           L04_RIGHT_02,                _______,
+  _______,                 L04_RIGHT_03,                _______,
+                    _______, _______, _______, _______, _______,
+  _______, _______,
+  _______,
+  _______, _______, KC_0
+),
+
+
+/* L05 -> MO(L05): ALTERNATE
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |                                  |      |           |      |                                  |        |
+ * |--------+                                  |      |           |      |                                  +--------|
+ * |        |             L05_LEFT             |------|           |------|             L05_RIGHT            |        |
+ * |--------+                                  |      |           |      |                                  +--------|
+ * |        |                                  |      |           |      |                                  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |      |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+[L05] = LAYOUT_ergodox_wrapper(
+  _______, _______, _______, _______, _______, _______, _______,
+  _______,                 L05_LEFT_01,                 _______,
+  _______,                 L05_LEFT_02,
+  _______,                 L05_LEFT_03,                 _______,
+  _______, _______, _______, _______, _______,
+                                               _______, _______,
+                                                        _______,
+                                      _______, _______, _______,
+  //--
+  _______, _______, _______, _______, _______, _______, _______,
+  _______,                 L05_RIGHT_01,                _______,
+                           L05_RIGHT_02,                _______,
+  _______,                 L05_RIGHT_03,                _______,
+                    _______, _______, _______, _______, _______,
+  _______, _______,
+  _______,
+  _______, _______, _______
+),
+
+
+/*
+L06 -> <TBD>: UNSPECIFIED
+*/
+
+
+/* LFN -> MO(FN): FUNCTION
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * | RESET  |      |      |      |      |      |      |           |      |      |      |      |      |      | RESET  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |                                  |      |           |      |                                  | BACKSPC|
+ * |--------+                                  |      |           |      |                                  +--------|
+ * |        |             L06_LEFT             |------|           |------|             L06_RIGHT            | INSERT |
+ * |--------+                                  |      |           |      |                                  +--------|
+ * |        |                                  |      |           |      |                                  | DELETE |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       | VOL+ | VOL- | MUTE |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+[LFN] = LAYOUT_ergodox_wrapper(
+  RESET,   _______, _______, _______, _______, _______, _______,
+  _______,                 L06_LEFT_01,                 _______,
+  _______,                 L06_LEFT_02,
+  _______,                 L06_LEFT_03,                 _______,
+  _______, _______, _______, _______, _______,
+                                               _______, _______,
+                                                        _______,
+                                      _______, _______, _______,
+  //--
+  _______, _______, _______, _______, _______, _______, RESET,
+  _______,                 L06_RIGHT_01,                KC_BSPACE,
+                           L06_RIGHT_02,                KC_INSERT,
+  _______,                 L06_RIGHT_03,                KC_DELETE,
+                    KC_VOLU, KC_VOLD, KC_MUTE, _______, _______,
+  _______, _______,
+  _______,
+  _______, _______, _______
+)
+
+};
+
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+  set_unicode_input_mode(UC_LNX);
+};
+
+
+LEADER_EXTERNS();
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+  LEADER_DICTIONARY() {
+    leading = false;
+    leader_end();
+
+    SEQ_ONE_KEY (KC_1) {
+      // ¯\_(ツ)_/¯
+      unicode_input_start(); register_hex(0xaf); unicode_input_finish();
+      register_code (KC_RALT); TAP_ONCE (KC_MINS); unregister_code (KC_RALT);
+      register_code (KC_RSFT); TAP_ONCE (KC_8); unregister_code (KC_RSFT);
+      unicode_input_start (); register_hex(0x30c4); unicode_input_finish();
+      register_code (KC_RSFT); TAP_ONCE (KC_9); TAP_ONCE(KC_7); unregister_code (KC_RSFT);
+      unicode_input_start (); register_hex(0xaf); unicode_input_finish();
+    }
+
+    SEQ_ONE_KEY (KC_2) {
+      // 凸(ツ)凸
+      unicode_input_start(); register_hex(0x51F8); unicode_input_finish();
+      register_code (KC_RSFT); TAP_ONCE (KC_8); unregister_code (KC_RSFT);
+      unicode_input_start (); register_hex(0x30c4); unicode_input_finish();
+      register_code (KC_RSFT); TAP_ONCE (KC_9); unregister_code (KC_RSFT);
+      unicode_input_start (); register_hex(0x51F8); unicode_input_finish();
+    }
+  }
+}

+ 5 - 0
keyboards/ergodox_infinity/keymaps/not-quite-neo/readme.md

@@ -0,0 +1,5 @@
+# not-quite-neo
+
+This is my personal take on porting the [neo2 layout](https://www.neo-layout.org/) to support multiple keyboards. 
+
+Refer to the [readme.md](../../../../users/not-quite-neo/readme.md) of the generic parts of the implementation.

+ 2 - 0
keyboards/ergodox_infinity/keymaps/not-quite-neo/rules.mk

@@ -0,0 +1,2 @@
+BACKLIGHT_ENABLE = yes
+UNICODE_ENABLE = yes

+ 6 - 0
keyboards/planck/keymaps/not-quite-neo/config.h

@@ -0,0 +1,6 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+#endif

+ 129 - 0
keyboards/planck/keymaps/not-quite-neo/keymap.c

@@ -0,0 +1,129 @@
+/*
+NQN is not-quite-neo
+A layout based on the
+*/
+
+
+#include "planck.h"
+#include "nqn-keys-on-quertz-de-latin1.h"
+#include "nqn-basic-layout.h"
+
+
+// Automatic number generation of important keywords
+enum my_keycodes{
+    // Layer numbers follow the neo2 terminology, i.e. base layer = layer 1
+    L01 = 0,
+    /* L02, SHIFT is not (yet) implemented as a fully customizable layer */
+    L03,
+    L04,
+    L05,
+    /* L06, UNSPECIFIED not (yet) needed */
+    LFN
+};
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* L01 -> default: BASE LAYER
+ * ,-----------------------------------------------------------------------------------.
+ * | ESC  |                                  |                                  | ENTER|
+ * |------+                                  |                                  +------|
+ * | L03  |             L01_LEFT             |             L01_RIGHT            | L03  |
+ * |------+                                  |                                  +------|
+ * | SHIFT|                                  |                                  | SHIFT|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | CTLR | GUI  | ALT  | L05  | L04  | SPACE| SPACE| L04  | L05  | ALTGR| LFN  | CTLR |
+ * `-----------------------------------------------------------------------------------'
+ */
+[L01] = {
+  {KC_ESC,                 L01_LEFT_01,                                 L01_RIGHT_01,                 KC_ENTER},
+  {MO(L03),                L01_LEFT_02,                                 L01_RIGHT_02,                 MO(L03)},
+  {KC_LSHIFT,              L01_LEFT_03,                                 L01_RIGHT_03,                 KC_RSFT},
+  {KC_LCTRL,KC_LGUI, KC_LALT, MO(L05), MO(L04), KC_SPC,  KC_SPC,  MO(L04), MO(L05), KC_RALT, MO(LFN), KC_RCTRL}
+},
+
+
+/*
+L02 -> MO(L02): SHIFT (as a layer not used, not defined, not reachable)
+ */
+
+
+/* L03 -> MO(L03): PROGRAMMING
+ * ,-----------------------------------------------------------------------------------.
+ * |      |                                  |                                  |      |
+ * |------+                                  |                                  +------|
+ * |      |             L03_LEFT             |             L03_RIGHT            |      |
+ * |------+                                  |                                  +------|
+ * |      |                                  |                                  |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[L03] = {
+  {_______,                L03_LEFT_01,                                 L03_RIGHT_01,                 _______},
+  {_______,                L03_LEFT_02,                                 L03_RIGHT_02,                 _______},
+  {_______,                L03_LEFT_03,                                 L03_RIGHT_03,                 _______},
+  {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+},
+
+
+/* L04 -> MO(L04): NAVIGATION AND NUMBERS
+ * ,-----------------------------------------------------------------------------------.
+ * |      |                                  |                                  |      |
+ * |------+                                  |                                  +------|
+ * |      |             L04_LEFT             |             L04_RIGHT            |      |
+ * |------+                                  |                                  +------|
+ * |      |                                  |                                  |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      | 0    |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[L04] = {
+  {_______,                L04_LEFT_01,                                 L04_RIGHT_01,                 _______},
+  {_______,                L04_LEFT_02,                                 L04_RIGHT_02,                 _______},
+  {_______,                L04_LEFT_03,                                 L04_RIGHT_03,                 _______},
+  {_______, _______, _______, _______, _______, _______, KC_0,    _______, _______, _______, _______, _______}
+},
+
+
+/* L05 -> MO(L05): ALTERNATE
+ * ,-----------------------------------------------------------------------------------.
+ * |      |                                  |                                  |      |
+ * |------+                                  |                                  +------|
+ * |      |             L05_LEFT             |             L05_RIGHT            |      |
+ * |------+                                  |                                  +------|
+ * |      |                                  |                                  |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[L05] = {
+  {_______,                L05_LEFT_01,                                 L05_RIGHT_01,                 _______},
+  {_______,                L05_LEFT_02,                                 L05_RIGHT_02,                 _______},
+  {_______,                L05_LEFT_03,                                 L05_RIGHT_03,                 _______},
+  {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+},
+
+
+/*
+L06 -> <TBD>: UNSPECIFIED
+*/
+
+
+/* LFN -> MO(FN): FUNCTION
+ * ,-----------------------------------------------------------------------------------.
+ * | RESET|                                  |                                  | BACKS|
+ * |------+                                  |                                  +------|
+ * |      |             L06_LEFT             |             L06_RIGHT            |INSERT|
+ * |------+                                  |                                  +------|
+ * |      |                                  |                                  |DELETE|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |VOICE-|VOICE+|MUS ON|MUS OF| LIGHT|      |      | VOL+ | VOL- | MUTE |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[LFN] = {
+  {RESET,                  L06_LEFT_01,                                 L06_RIGHT_01,                 KC_BSPC},
+  {_______,                L06_LEFT_02,                                 L06_RIGHT_02,                 KC_INS},
+  {_______,                L06_LEFT_03,                                 L06_RIGHT_03,                 KC_DEL},
+  {MUV_DE,  MUV_IN,  MU_ON,   MU_OFF,  _______, _______, _______, KC_VOLU, KC_VOLD, KC_MUTE, _______, _______}
+}
+};

+ 5 - 0
keyboards/planck/keymaps/not-quite-neo/readme.md

@@ -0,0 +1,5 @@
+# not-quite-neo
+
+This is my personal take on porting the [neo2 layout](https://www.neo-layout.org/) to support multiple keyboards. 
+
+Refer to the [readme.md](../../../../users/not-quite-neo/readme.md) of the generic parts of the implementation.

+ 29 - 0
keyboards/planck/keymaps/not-quite-neo/rules.mk

@@ -0,0 +1,29 @@
+# Based on Zach's Planck Makefile
+# Max .hex size is about 28636 bytes
+
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in
+#   the appropriate keymap folder that will get included automatically
+#
+TAP_DANCE_ENABLE    = no   # Enable TapDance functionality
+BOOTMAGIC_ENABLE    = no    # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE     = no    # Mouse keys(+4700)
+EXTRAKEY_ENABLE     = yes    # Audio control and System control(+450)
+CONSOLE_ENABLE      = no    # Console for debug(+400)
+COMMAND_ENABLE      = no    # Commands for debug and configuration
+NKRO_ENABLE         = yes   # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+USB_6KRO_ENABLE     = no    # 6key Rollover
+BACKLIGHT_ENABLE    = no    # Enable keyboard backlight functionality
+MIDI_ENABLE         = no    # MIDI controls
+AUDIO_ENABLE        = no    # Audio output on port C6
+#VARIABLE_TRACE      = no    # Debug changes to variable values
+UNICODE_ENABLE      = no    # Unicode (can't be used with unicodemap)
+UNICODEMAP_ENABLE   = no   # Enable extended unicode
+BLUETOOTH_ENABLE    = no    # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE     = no    # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE    = no    # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+	include ../../../../Makefile
+endif

+ 124 - 0
users/not-quite-neo/nqn-basic-layout.h

@@ -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 - 0
users/not-quite-neo/nqn-common.h

@@ -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 - 0
users/not-quite-neo/nqn-keys-on-quertz-de-latin1.h

@@ -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 - 0
users/not-quite-neo/readme.md

@@ -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)
+ .