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 documentationpull/2330/head
parent
2917e55bd4
commit
2cf6bfe9ac
@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -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.
|
@ -0,0 +1,2 @@
|
|||||||
|
BACKLIGHT_ENABLE = yes
|
||||||
|
UNICODE_ENABLE = yes
|
@ -0,0 +1,6 @@
|
|||||||
|
#ifndef CONFIG_USER_H
|
||||||
|
#define CONFIG_USER_H
|
||||||
|
|
||||||
|
#include "../../config.h"
|
||||||
|
|
||||||
|
#endif
|
@ -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, _______, _______}
|
||||||
|
}
|
||||||
|
};
|
@ -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.
|
@ -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
|
@ -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
|
@ -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
|
@ -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…
Reference in new issue