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