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
master
jola5 2018-02-02 07:21:41 +01:00 committed by Jack Humbert
parent 2917e55bd4
commit 2cf6bfe9ac
11 changed files with 703 additions and 0 deletions

View File

@ -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();
}
}
}

View File

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

View File

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

View File

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

View File

@ -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, _______, _______}
}
};

View File

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

View File

@ -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

View File

@ -0,0 +1,124 @@
#ifndef NQN_BASIC_LAYOUT_H
#define NQN_BASIC_LAYOUT_H
/*
This is the basic NQN layout
It consists of a block of 5x3, 5x4, 6x3, or 6x4 for each hand. This allows us
to use these blocks for a variety of keyboards like the planck, preonic and
even splits like the ergodox.
You can see that we use some quirky preprocessor defines to achive what we
desire. In the future I would like to see qmk taking a more generic approach
like the KLL.
The naming convention for these blocks is
L<LAYER>_<SIDE>_<ROW>
The LAYER is a number following the neo2 manner starting at 1 for the base
layer, 2 is shift, 3 is for special chars etc.
SIDE is, well either the left or right side/half of a keyboard.
The ROW is starting from the top, numbering beginning at 1.
*/
#include "nqn-common.h"
/*
*
* LEFT RIGHT
* ,----------------------------------. ,----------------------------------.
* 01 | x | v | l | c | w | | k | h | g | f | q |
* |------+------+------+------+------| |------+------+------+------+------|
* 02 | u | i | a | e | o | | s | n | r | t | d |
* |------+------+------+------+------| |------+------+------+------+------|
* 03 | y | < | # | p | z | | b | m | , | . | j |
* `----------------------------------' `----------------------------------'
*/
#define L01_LEFT_01 KC_X, KC_V, KC_L, KC_C, KC_W
#define L01_LEFT_02 KC_U, KC_I, KC_A, KC_E, KC_O
#define L01_LEFT_03 N_Y, N_LT, N_HS, KC_P, N_Z
#define L01_RIGHT_02 KC_S, KC_N, KC_R, KC_T, KC_D
#define L01_RIGHT_01 KC_K, KC_H, KC_G, KC_F, KC_Q
#define L01_RIGHT_03 KC_B, KC_M, KC_COMM, KC_DOT, KC_J
/*
*
* LEFT RIGHT
* ,----------------------------------. ,----------------------------------.
* 01 | | _ | [ | ] | ^ | | ! | < | > | = | & |
* |------+------+------+------+------| |------+------+------+------+------|
* 02 | \ | / | { | } | * | | ? | ( | ) | - | @ |
* |------+------+------+------+------| |------+------+------+------+------|
* 03 | # | $ | | | ~ | ` | | + | % | " | ' | ° |
* `----------------------------------' `----------------------------------'
*/
#define L03_LEFT_01 N_DOTS, N_USC, N_LSQBR, N_RSQBR, N_CIRC
#define L03_LEFT_02 N_BSLS, N_SLSH, N_LCUBR, N_RCUBR, N_ASTR
#define L03_LEFT_03 N_HASH, N_DLR, N_PIPE, N_TILD, N_GRAVE
#define L03_RIGHT_01 N_EXKL, N_LT, N_GT, N_EQ, N_AMP
#define L03_RIGHT_02 N_QUES, N_LPARN, N_RPARN, N_MINS, N_AT
#define L03_RIGHT_03 N_PLUS, N_PERC, N_QUOT, N_SING, N_DEGRE
/*
*
* LEFT RIGHT
* ,----------------------------------. ,----------------------------------.
* 01 | PAGEU| BACKS| UP | DELET| PAGED| | / | 7 | 8 | 9 | - |
* |------+------+------+------+------| |------+------+------+------+------|
* 02 | HOME | LEFT | DOWN | RIGHT| END | | * | 4 | 5 | 6 | + |
* |------+------+------+------+------| |------+------+------+------+------|
* 03 | ESC | TAB | INSRT| ENTER| UNDO | | ENTER| 1 | 2 | 3 | , |
* `----------------------------------' `----------------------------------'
*/
#define L04_LEFT_01 KC_PGUP, KC_BSPC, KC_UP, KC_DEL, KC_PGDN
#define L04_LEFT_02 KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT, KC_END
#define L04_LEFT_03 KC_ESC, KC_TAB, KC_INS, KC_ENTER, N_UNDO
#define L04_RIGHT_01 KC_KP_SLASH, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_MINUS
#define L04_RIGHT_02 KC_KP_ASTERISK, KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_PLUS
#define L04_RIGHT_03 KC_KP_ENTER, KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_DOT
/*
* LEFT RIGHT
* ,----------------------------------. ,----------------------------------.
* 01 | | | | | | | | | | | |
* |------+------+------+------+------| |------+------+------+------+------|
* 02 | ü | | ä | | ö | | ß | | | | |
* |------+------+------+------+------| |------+------+------+------+------|
* 03 | | | | | | | | µ | | | |
* `----------------------------------' `----------------------------------'
*/
#define L05_LEFT_01 _______, _______, _______, _______, _______
#define L05_LEFT_02 N_UE, _______, N_AE, N_EURO, N_OE
#define L05_LEFT_03 _______, _______, _______, _______, _______
#define L05_RIGHT_01 _______, _______, _______, _______, _______
#define L05_RIGHT_02 N_SS, _______, _______, _______, _______
#define L05_RIGHT_03 _______, N_MU, _______, _______, _______
/*
*
* LEFT RIGHT
* ,----------------------------------. ,----------------------------------.
* 01 | F1 | F2 | F3 | F4 | | | MAIL | MUSIC| FILES| CALC | PASTE|
* |------+------+------+------+------| |------+------+------+------+------|
* 02 | F5 | F6 | F7 | F8 | | | PREV |PLAY/P| NEXT | STOP | COPY |
* |------+------+------+------+------| |------+------+------+------+------|
* 03 | F9 | F10 | F11 | F12 | | | PRINT| SCROL| PAUSE| NUMLK| CUT |
* `----------------------------------' `----------------------------------'
*/
#define L06_LEFT_01 KC_F1, KC_F2, KC_F3, KC_F4, _______
#define L06_LEFT_02 KC_F5, KC_F6, KC_F7, KC_F8, _______
#define L06_LEFT_03 KC_F9, KC_F10, KC_F11, KC_F12, _______
#define L06_RIGHT_01 KC_MAIL, KC_MSEL, KC_MY_COMPUTER, KC_CALCULATOR, N_PASTE
#define L06_RIGHT_02 KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP, N_COPY
#define L06_RIGHT_03 KC_PSCR, KC_SLCK, KC_PAUS, KC_NLCK, N_CUT
#endif

View File

@ -0,0 +1,14 @@
#ifndef NQN_COMMON_H
#define NQN_COMMON_H
/*
This file holds some commen NQN definitions
*/
#define _______ KC_TRNS
#define XXXXXXX KC_NO
#endif

View File

@ -0,0 +1,73 @@
#ifndef NQN_KEYS_ON_QUERTZ_DE_LATIN1_H
#define NQN_KEYS_ON_QUERTZ_DE_LATIN1_H
/*
This file defines the desierd NQN keys if you use a software (operating sysetm)
configured for a QUERTZ layout (de-latin1).
These chars can be created by using ALTGR on linux and a few of them on windows
with a German de-latin1 layout (depending on desktop environment and/or
application).
¹²³¼½¬{[]}\¸
@łŧøþ¨~
æſðđŋħ̣ĸł˝^
|»«¢µ·
Additionally, there are some common chars that we dit not yet define:
§
*/
#include "nqn-common.h"
// NQN key definitions in no particular order
#define N_LT KC_NONUS_BSLASH
#define N_HS KC_NONUS_HASH
#define N_DOTS RALT(KC_DOT) // …
#define N_USC LSFT(KC_SLASH) // _
#define N_LSQBR RALT(KC_8) // [
#define N_RSQBR RALT(KC_9) // ]
#define N_CIRC KC_GRAVE // ^
#define N_EXKL LSFT(KC_1) // !
#define N_GT LSFT(KC_NONUS_BSLASH) // >
#define N_EQ LSFT(KC_0) // =
#define N_AMP LSFT(KC_6) // &
#define N_BSLS RALT(KC_MINS) // \ backslash
#define N_SLSH LSFT(KC_7) // /
#define N_LCUBR RALT(KC_7) // {
#define N_RCUBR RALT(KC_0) // }
#define N_ASTR LSFT(KC_RBRC) // *
#define N_QUES LSFT(KC_MINS) // ?
#define N_LPARN LSFT(KC_8) // (
#define N_RPARN LSFT(KC_9) // )
#define N_MINS KC_SLASH // -
#define N_COLN LSFT(KC_DOT) // :
#define N_HASH KC_BSLASH // #
#define N_DLR LSFT(KC_4) // $
#define N_PIPE RALT(KC_NONUS_BSLASH) // |
#define N_TILD RALT(KC_RBRC) // ~
#define N_GRAVE LSFT(KC_EQUAL) // `
#define N_PLUS KC_RBRC // +
#define N_PERC LSFT(KC_5) // %
#define N_QUOT LSFT(KC_2) // "
#define N_SING LSFT(KC_BSLASH) // '
#define N_SEMI LSFT(KC_COMM) // ;
#define N_EURO RALT(KC_E) // €
#define N_AT RALT(KC_Q) // @
#define N_Z KC_Y
#define N_Y KC_Z
#define N_AE KC_QUOTE // ä
#define N_OE KC_SCOLON // ö
#define N_UE KC_LBRACKET // ü
#define N_MU RALT(KC_M) // µ
#define N_SS KC_MINS // ß
#define N_DEGRE LSFT(KC_GRAVE) // °
#define N_PASTE LCTL(KC_V) // CTRL+V
#define N_COPY LCTL(KC_C) // CTRL+C
#define N_CUT LCTL(KC_X) // CTRL+X
#define N_UNDO LCTL(N_Z) // CTRL+Z
#endif

View File

@ -0,0 +1,24 @@
# not-quite-neo
This is my personal take on porting the [neo2 layout](https://www.neo-layout.org/) to support both a ergodox (infinity) and a planck keyboard. Some sacrifices needed to be made, hence this layout is not-quite-neo.
## Use case
My use case is simple:
* I want to use neo2 (or a keymap as close as possible) on any computer I can plug my keyboards in. Because installing the neo2 SW driver is often not a acceptable solution.
* Since most computers I work on (colleagues, family, etc.) use a de-DE keymap, I can not use the official neo2 implementation, because it relies on a us layout and I often times do not even posses the administration rights to change that.
* neo2 makes use of most of the keys of a standard 104 key keyboard, especially for supporting the planck I needed to deviate from the original neo2 layout in order to fit everything I wanted.
Therefore, I put all reusable code in the users/not-quite-neo directory and created a custom not-quite-neo keymap for the planck and the ergodox infinity keyboard respectively.
## Pitfalls
Mind, since neo2 is a SW driver supported layout it offers a lot of features that are hard to support in hardware (especially the fancy utf stuff with math symbols and greek letters etc.).
Right now this implementation only incompletely supports neo2 layers 1 to 4.
The biggest difference is probably the support for the German Umlauts ä, ö, ü and the ß. Since we rely on a smaller number of keys some glyphs needed to be created otherwise. See the implementation in [nqn-basic-layout.h](nqn-basic-layout.h) for details.
## Keyboards and keymaps
You can find the *not-quite-neo* keymap for the ergodox infinity under [qmk_firmware/keyboards/ergodox_infinity/keymaps/not-quite-neo/](../../keyboards/ergodox_infinity/keymaps/not-quite-neo/readme.md). Respectively the keymap for the planck resides in [qmk_firmware/keyboards/planck/keymaps/not-quite-neo/](../../keyboards/planck/keymaps/not-quite-neo/readme.md)
.