From 2cf6bfe9ac10663181aa3ba32087da956bb7ec1e Mon Sep 17 00:00:00 2001 From: jola5 Date: Fri, 2 Feb 2018 07:21:41 +0100 Subject: [PATCH] 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 --- .../keymaps/not-quite-neo/keymap.c | 292 ++++++++++++++++++ .../keymaps/not-quite-neo/readme.md | 5 + .../keymaps/not-quite-neo/rules.mk | 2 + .../planck/keymaps/not-quite-neo/config.h | 6 + .../planck/keymaps/not-quite-neo/keymap.c | 129 ++++++++ .../planck/keymaps/not-quite-neo/readme.md | 5 + .../planck/keymaps/not-quite-neo/rules.mk | 29 ++ users/not-quite-neo/nqn-basic-layout.h | 124 ++++++++ users/not-quite-neo/nqn-common.h | 14 + .../nqn-keys-on-quertz-de-latin1.h | 73 +++++ users/not-quite-neo/readme.md | 24 ++ 11 files changed, 703 insertions(+) create mode 100644 keyboards/ergodox_infinity/keymaps/not-quite-neo/keymap.c create mode 100644 keyboards/ergodox_infinity/keymaps/not-quite-neo/readme.md create mode 100644 keyboards/ergodox_infinity/keymaps/not-quite-neo/rules.mk create mode 100644 keyboards/planck/keymaps/not-quite-neo/config.h create mode 100644 keyboards/planck/keymaps/not-quite-neo/keymap.c create mode 100644 keyboards/planck/keymaps/not-quite-neo/readme.md create mode 100644 keyboards/planck/keymaps/not-quite-neo/rules.mk create mode 100644 users/not-quite-neo/nqn-basic-layout.h create mode 100644 users/not-quite-neo/nqn-common.h create mode 100644 users/not-quite-neo/nqn-keys-on-quertz-de-latin1.h create mode 100644 users/not-quite-neo/readme.md diff --git a/keyboards/ergodox_infinity/keymaps/not-quite-neo/keymap.c b/keyboards/ergodox_infinity/keymaps/not-quite-neo/keymap.c new file mode 100644 index 000000000..8cf51842a --- /dev/null +++ b/keyboards/ergodox_infinity/keymaps/not-quite-neo/keymap.c @@ -0,0 +1,292 @@ +#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 -> : 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(); + } + } +} diff --git a/keyboards/ergodox_infinity/keymaps/not-quite-neo/readme.md b/keyboards/ergodox_infinity/keymaps/not-quite-neo/readme.md new file mode 100644 index 000000000..3fcb4edf0 --- /dev/null +++ b/keyboards/ergodox_infinity/keymaps/not-quite-neo/readme.md @@ -0,0 +1,5 @@ +# 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. \ No newline at end of file diff --git a/keyboards/ergodox_infinity/keymaps/not-quite-neo/rules.mk b/keyboards/ergodox_infinity/keymaps/not-quite-neo/rules.mk new file mode 100644 index 000000000..75624bb8c --- /dev/null +++ b/keyboards/ergodox_infinity/keymaps/not-quite-neo/rules.mk @@ -0,0 +1,2 @@ +BACKLIGHT_ENABLE = yes +UNICODE_ENABLE = yes \ No newline at end of file diff --git a/keyboards/planck/keymaps/not-quite-neo/config.h b/keyboards/planck/keymaps/not-quite-neo/config.h new file mode 100644 index 000000000..7fa3bf328 --- /dev/null +++ b/keyboards/planck/keymaps/not-quite-neo/config.h @@ -0,0 +1,6 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +#endif diff --git a/keyboards/planck/keymaps/not-quite-neo/keymap.c b/keyboards/planck/keymaps/not-quite-neo/keymap.c new file mode 100644 index 000000000..8ea7679e3 --- /dev/null +++ b/keyboards/planck/keymaps/not-quite-neo/keymap.c @@ -0,0 +1,129 @@ +/* +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 -> : 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, _______, _______} +} +}; diff --git a/keyboards/planck/keymaps/not-quite-neo/readme.md b/keyboards/planck/keymaps/not-quite-neo/readme.md new file mode 100644 index 000000000..3fcb4edf0 --- /dev/null +++ b/keyboards/planck/keymaps/not-quite-neo/readme.md @@ -0,0 +1,5 @@ +# 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. \ No newline at end of file diff --git a/keyboards/planck/keymaps/not-quite-neo/rules.mk b/keyboards/planck/keymaps/not-quite-neo/rules.mk new file mode 100644 index 000000000..316a3ea7b --- /dev/null +++ b/keyboards/planck/keymaps/not-quite-neo/rules.mk @@ -0,0 +1,29 @@ +# 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 diff --git a/users/not-quite-neo/nqn-basic-layout.h b/users/not-quite-neo/nqn-basic-layout.h new file mode 100644 index 000000000..d1b9a1c47 --- /dev/null +++ b/users/not-quite-neo/nqn-basic-layout.h @@ -0,0 +1,124 @@ +#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__ + + 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 diff --git a/users/not-quite-neo/nqn-common.h b/users/not-quite-neo/nqn-common.h new file mode 100644 index 000000000..a04dc7a18 --- /dev/null +++ b/users/not-quite-neo/nqn-common.h @@ -0,0 +1,14 @@ +#ifndef NQN_COMMON_H +#define NQN_COMMON_H + + +/* +This file holds some commen NQN definitions +*/ + + +#define _______ KC_TRNS +#define XXXXXXX KC_NO + + +#endif diff --git a/users/not-quite-neo/nqn-keys-on-quertz-de-latin1.h b/users/not-quite-neo/nqn-keys-on-quertz-de-latin1.h new file mode 100644 index 000000000..8276cf207 --- /dev/null +++ b/users/not-quite-neo/nqn-keys-on-quertz-de-latin1.h @@ -0,0 +1,73 @@ +#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 diff --git a/users/not-quite-neo/readme.md b/users/not-quite-neo/readme.md new file mode 100644 index 000000000..85a29ecc6 --- /dev/null +++ b/users/not-quite-neo/readme.md @@ -0,0 +1,24 @@ +# 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) + . \ No newline at end of file