* 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
		
			
				
	
	
		
			293 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			293 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #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();
 | |
|     }
 | |
|   }
 | |
| }
 |