[Keymap] Neo2 for ErgoDox on MacOS US QWERTY / ABC Extended keymap (#5862)
This is a Neo2 inspired layout that is meant to be fully usable on MacOS when used with the default US QWERTY/ABC Extended keymap. Neo2 layers 1-4 have been almost fully implemented in hardware. Layers 5 and 6 (greek and mathematical symbols) have been left out for now as most of them aren't available on the default keymaps. Layer toggling for layer 3 on the right hand side utilizes a tap-toggle approach that is a combination of MO & LT macros. This is required to allow sending Y when tapped, @ when tapped while the SHIFT modifier is active and support momentarily toggling the layer while the key is held.
This commit is contained in:
		
							parent
							
								
									93a97ec6e5
								
							
						
					
					
						commit
						7c0f2ae6d1
					
				
					 4 changed files with 969 additions and 0 deletions
				
			
		
							
								
								
									
										694
									
								
								layouts/community/ergodox/osx_neo2/keymap.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										694
									
								
								layouts/community/ergodox/osx_neo2/keymap.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,694 @@ | |||
| #include QMK_KEYBOARD_H | ||||
| #include "layers.h" | ||||
| #include "version.h" | ||||
| 
 | ||||
| // Timer to detect tap/hold on NEO_RMOD3 key
 | ||||
| static uint16_t neo3_timer; | ||||
| // State bitmap to track which key(s) enabled NEO_3 layer
 | ||||
| static uint8_t neo3_state = 0; | ||||
| // State bitmap to track key combo for CAPSLOCK
 | ||||
| static uint8_t capslock_state = 0; | ||||
| 
 | ||||
| // bitmasks for modifier keys
 | ||||
| #define MOD_MASK_NONE 0 | ||||
| 
 | ||||
| // Used to trigger macros / sequences of keypresses
 | ||||
| enum custom_keycodes { | ||||
|   PLACEHOLDER = SAFE_RANGE,  // can always be here
 | ||||
|   US_OSX_SMALL_UE, | ||||
|   US_OSX_SMALL_AE, | ||||
|   US_OSX_SMALL_OE, | ||||
|   US_OSX_CAPITAL_UE, | ||||
|   US_OSX_CAPITAL_AE, | ||||
|   US_OSX_CAPITAL_OE, | ||||
|   NEO2_LMOD3, | ||||
|   NEO2_RMOD3, | ||||
|   NEO2_1, | ||||
|   NEO2_2, | ||||
|   NEO2_3, | ||||
|   NEO2_4, | ||||
|   NEO2_5, | ||||
|   NEO2_6, | ||||
|   NEO2_7, | ||||
|   NEO2_8, | ||||
|   NEO2_9, | ||||
|   NEO2_0, | ||||
|   NEO2_MINUS, | ||||
|   NEO2_UE, | ||||
|   NEO2_AE, | ||||
|   NEO2_OE, | ||||
|   NEO2_COMMA, | ||||
|   NEO2_DOT, | ||||
|   NEO2_SHARP_S | ||||
| }; | ||||
| 
 | ||||
| #define NEO2_LMOD4                  TT(NEO_4) | ||||
| #define NEO2_RMOD4                  NEO2_LMOD4 | ||||
| 
 | ||||
| // NEO_3 special characters
 | ||||
| #define US_OSX_SUPERSCRIPT_1        KC_NO                       // ¹
 | ||||
| #define US_OSX_SUPERSCRIPT_2        KC_NO                       // ²
 | ||||
| #define US_OSX_SUPERSCRIPT_3        KC_NO                       // ³
 | ||||
| #define US_OSX_RSAQUO               LALT(LSFT(KC_4))            // ›
 | ||||
| #define US_OSX_LSAQUO               LALT(LSFT(KC_3))            // ‹
 | ||||
| #define US_OSX_CENT                 LALT(KC_4)                  // ¢
 | ||||
| #define US_OSX_YEN                  LALT(KC_Y)                  // ¥
 | ||||
| #define US_OSX_SBQUO                LALT(LSFT(KC_0))            // ‚
 | ||||
| #define US_OSX_LEFT_SINGLE_QUOTE    LALT(KC_RBRACKET)           // ‘
 | ||||
| #define US_OSX_RIGHT_SINGLE_QUOTE   LALT(LSFT(KC_RBRACKET))     // ’
 | ||||
| #define US_OSX_ELLIPSIS             LALT(KC_SCOLON)             // …
 | ||||
| #define US_OSX_UNDERSCORE           LSFT(KC_MINUS)              // _
 | ||||
| #define US_OSX_LBRACKET             KC_LBRACKET                 // [
 | ||||
| #define US_OSX_RBRACKET             KC_RBRACKET                 // ]
 | ||||
| #define US_OSX_CIRCUMFLEX           LSFT(KC_6)                  // ^
 | ||||
| #define US_OSX_EXCLAMATION          LSFT(KC_1)                  // !
 | ||||
| #define US_OSX_LESSTHAN             LSFT(KC_COMMA)              // <
 | ||||
| #define US_OSX_GREATERTHAN          LSFT(KC_DOT)                // >
 | ||||
| #define US_OSX_EQUAL                KC_EQUAL                    // =
 | ||||
| #define US_OSX_AMPERSAND            LSFT(KC_7)                  // &
 | ||||
| #define US_OSX_SMALL_LONG_S         KC_NO                       // ſ
 | ||||
| #define US_OSX_BSLASH               KC_BSLASH | ||||
| #define US_OSX_SLASH                KC_SLASH                    // /
 | ||||
| #define US_OSX_CLBRACKET            LSFT(KC_LBRACKET)           // {
 | ||||
| #define US_OSX_CRBRACKET            LSFT(KC_RBRACKET)           // }
 | ||||
| #define US_OSX_ASTERISK             LSFT(KC_8)                  // *
 | ||||
| #define US_OSX_QUESTIONMARK         LSFT(KC_SLASH)              // ?
 | ||||
| #define US_OSX_LPARENTHESES         LSFT(KC_9)                  // (
 | ||||
| #define US_OSX_RPARENTHESES         LSFT(KC_0)                  // )
 | ||||
| #define US_OSX_HYPHEN_MINUS         KC_MINUS                    // -
 | ||||
| #define US_OSX_COLON                LSFT(KC_SCOLON)             // :
 | ||||
| #define US_OSX_AT                   LSFT(KC_2)                  // @
 | ||||
| #define US_OSX_HASH                 LSFT(KC_3)                  // #
 | ||||
| #define US_OSX_PIPE                 LSFT(KC_BSLASH)             // |
 | ||||
| #define US_OSX_TILDE                LSFT(KC_GRAVE)              // ~
 | ||||
| #define US_OSX_BACKTICK             KC_GRAVE                    // `
 | ||||
| #define US_OSX_PLUS                 LSFT(KC_EQUAL)              // +
 | ||||
| #define US_OSX_PERCENT              LSFT(KC_5)                  // %
 | ||||
| #define US_OSX_DOUBLE_QUOTE         LSFT(KC_QUOTE)              // "
 | ||||
| #define US_OSX_SINGLE_QUOTE         KC_QUOTE                    // '
 | ||||
| #define US_OSX_SEMICOLON            KC_SCOLON                   // ;
 | ||||
| 
 | ||||
| // NEO_4 special characters
 | ||||
| #define US_OSX_FEMININE_ORDINAL     LALT(KC_9)                  // ª
 | ||||
| #define US_OSX_MASCULINE_ORDINAL    LALT(KC_0)                  // º
 | ||||
| #define US_OSX_NUMERO_SIGN          KC_NO                       // №
 | ||||
| #define US_OSX_MIDDLE_DOT           LALT(LSFT(KC_9))            // ·
 | ||||
| #define US_OSX_BRITISH_POUND        LALT(KC_3)                  // £
 | ||||
| #define US_OSX_CURRENCY_SIGN        KC_NO                       // ¤
 | ||||
| #define US_OSX_INV_EXCLAMATION      LALT(KC_1)                  // ¡
 | ||||
| #define US_OSX_INV_QUESTIONMARK     LALT(LSFT(KC_SLASH))        // ¿
 | ||||
| #define US_OSX_DOLLAR               KC_DOLLAR                   // $
 | ||||
| #define US_OSX_EM_DASH              LALT(LSFT(KC_MINUS))        // —
 | ||||
| 
 | ||||
| const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||||
|   /* NEO_1: Basic layer
 | ||||
|    * | ||||
|    * ,--------------------------------------------------.           ,--------------------------------------------------. | ||||
|    * |  ----  |  1/° |  2/§ |  3/  |  4/» |  5/« |  ESC |           | US_1 |  6/$ |  7/€ |  8/„ |  9/“ |  0/” |  -/—   | | ||||
|    * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------| | ||||
|    * |  TAB   |   X  |   V  |   L  |   C  |   W  | LCTL |           | RCTL |   K  |   H  |   G  |   F  |   Q  |   ß    | | ||||
|    * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------| | ||||
|    * |  NEO_3 |   U  |   I  |   A  |   E  |   O  |------|           |------|   S  |   N  |   R  |   T  |   D  |   Y    | | ||||
|    * |--------+------+------+------+------+------| LALT |           | RALT |------+------+------+------+------+--------| | ||||
|    * | LSHIFT |   Ü  |   Ö  |   Ä  |   P  |   Z  |      |           |      |   B  |   M  |  ,/– |  ./• |   J  | RSHIFT | | ||||
|    * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------' | ||||
|    *   | ---- | ---- | LCTL | LALT | LGUI |                                       | RGUI | Left | Down |  Up  | Right| | ||||
|    *   `----------------------------------'                                       `----------------------------------' | ||||
|    *                                        ,-------------.       ,-------------. | ||||
|    *                                        | FKEYS| Home |       | PgUp | FKEYS| | ||||
|    *                                 ,------|------|------|       |------+------+------. | ||||
|    *                                 | Back-|      | End  |       | PgDn |      |      | | ||||
|    *                                 | space|Delete|------|       |------| Enter|Space | | ||||
|    *                                 |      |      | NEO_4|       | NEO_4|      |      | | ||||
|    *                                 `--------------------'       `--------------------' | ||||
|    */ | ||||
|   [NEO_1] = LAYOUT_ergodox( | ||||
|     // left hand side - main
 | ||||
|     KC_NO /* NOOP */, NEO2_1,                   NEO2_2,                   NEO2_3,                   NEO2_4,           NEO2_5,           KC_ESCAPE, | ||||
|     KC_TAB,           KC_X,                     KC_V,                     KC_L,                     KC_C,             KC_W,             KC_LCTRL, | ||||
|     NEO2_LMOD3,       KC_U,                     KC_I,                     KC_A,                     KC_E,             KC_O,             /* --- */ | ||||
|     KC_LSHIFT,        NEO2_UE,                  NEO2_OE,                  NEO2_AE,                  KC_P,             KC_Z,             KC_LALT, | ||||
|     KC_NO /* NOOP */, KC_NO /* NOOP */,         KC_LCTRL,                 KC_LALT,                  KC_LGUI,          /* --- */         /* --- */ | ||||
| 
 | ||||
|     // left hand side - thumb cluster
 | ||||
|     /* --- */         MO(FKEYS),        KC_HOME, | ||||
|     /* KC_BSPACE */   /* KC_DELETE */   KC_END, | ||||
|     KC_BSPACE,        KC_DELETE,        NEO2_LMOD4, | ||||
| 
 | ||||
|     // right hand side - main
 | ||||
|     TO(US_1),         NEO2_6,           NEO2_7,           NEO2_8,           NEO2_9,           NEO2_0,           NEO2_MINUS, | ||||
|     KC_RCTRL,         KC_K,             KC_H,             KC_G,             KC_F,             KC_Q,             NEO2_SHARP_S, | ||||
|     /* --- */         KC_S,             KC_N,             KC_R,             KC_T,             KC_D,             NEO2_RMOD3, | ||||
|     KC_RALT,          KC_B,             KC_M,             NEO2_COMMA,       NEO2_DOT,         KC_J,             KC_RSHIFT, | ||||
|     /* --- */         /* --- */         KC_RGUI,          KC_LEFT,          KC_DOWN,          KC_UP,            KC_RIGHT, | ||||
| 
 | ||||
|     // right hand side - thumb cluster
 | ||||
|     KC_PGUP,          MO(FKEYS),        /* --- */ | ||||
|     KC_PGDOWN,        /* --- */         /* --- */ | ||||
|     NEO2_RMOD4,       KC_ENTER,         KC_SPACE | ||||
|   ), | ||||
| 
 | ||||
|   /* NEO_3: Symbol layer
 | ||||
|    * | ||||
|    * ,--------------------------------------------------.           ,--------------------------------------------------. | ||||
|    * |  ----  | ---- | ---- | ---- |   ›  |   ‹  |      |           |      |   ¢ 	|   ¥  |   ‚  |   ‘  |   ’  |  ----  | | ||||
|    * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------| | ||||
|    * |  ----  |   …  |   _  |   [  |   ]  |   ^  |      |           |      |   !  |   <  |   >  |   =  |   &  |  ----  | | ||||
|    * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------| | ||||
|    * |        |   \  |   /  |   {  |   }  |   *  |------|           |------|   ?  |   (  |   )  |   -  |   :  |   @    | | ||||
|    * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------| | ||||
|    * |        |   #  |   $  |   |  |   ~  |   `  |      |           |      |   +  |   %  |   "  |   '  |   ;  |        | | ||||
|    * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------' | ||||
|    *   |      |      |      |      |      |                                       |      |      |      |      |      | | ||||
|    *   `----------------------------------'                                       `----------------------------------' | ||||
|    *                                        ,-------------.       ,-------------. | ||||
|    *                                        |      |      |       |      |      | | ||||
|    *                                 ,------|------|------|       |------+------+------. | ||||
|    *                                 |      |      |      |       |      |      |      | | ||||
|    *                                 |      |      |------|       |------|      |      | | ||||
|    *                                 |      |      |      |       |      |      |      | | ||||
|    *                                 `--------------------'       `--------------------' | ||||
|    */ | ||||
|   [NEO_3] = LAYOUT_ergodox( | ||||
|     // left hand side - main
 | ||||
|     KC_NO /* NOOP */,   KC_NO /* NOOP */,     KC_NO /* NOOP */,     KC_NO /* NOOP */,     US_OSX_RSAQUO,            US_OSX_LSAQUO,                _______, | ||||
|     KC_NO /* NOOP */,   US_OSX_ELLIPSIS,      US_OSX_UNDERSCORE,    US_OSX_LBRACKET,      US_OSX_RBRACKET,          US_OSX_CIRCUMFLEX,            _______, | ||||
|     _______,            US_OSX_BSLASH,        US_OSX_SLASH,         US_OSX_CLBRACKET,     US_OSX_CRBRACKET,         US_OSX_ASTERISK,              /* --- */ | ||||
|     _______,            US_OSX_HASH,          US_OSX_DOLLAR,        US_OSX_PIPE,          US_OSX_TILDE,             US_OSX_BACKTICK,              _______, | ||||
|     _______,            _______,              _______,              _______,              _______,                  /* --- */                     /* --- */ | ||||
| 
 | ||||
|     // left hand side - thumb cluster
 | ||||
|     /* --- */           _______,              _______, | ||||
|     /* --- */           /* --- */             _______, | ||||
|     _______,            _______,              _______, | ||||
| 
 | ||||
|     // right hand side - main
 | ||||
|     _______,            US_OSX_CENT,          US_OSX_YEN,           US_OSX_SBQUO,         US_OSX_LEFT_SINGLE_QUOTE,  US_OSX_RIGHT_SINGLE_QUOTE,   KC_NO, | ||||
|     _______,            US_OSX_EXCLAMATION,   US_OSX_LESSTHAN,      US_OSX_GREATERTHAN,   US_OSX_EQUAL,              US_OSX_AMPERSAND,            US_OSX_SMALL_LONG_S, | ||||
|     /* --- */           US_OSX_QUESTIONMARK,  US_OSX_LPARENTHESES,  US_OSX_RPARENTHESES,  US_OSX_HYPHEN_MINUS,       US_OSX_COLON,                NEO2_RMOD3, | ||||
|     _______,            US_OSX_PLUS,          US_OSX_PERCENT,       US_OSX_DOUBLE_QUOTE,  US_OSX_SINGLE_QUOTE,       US_OSX_SEMICOLON,            _______, | ||||
|     /* --- */           /* --- */             _______,              _______,              _______,                   _______,                     _______, | ||||
| 
 | ||||
|     // right hand side - thumb cluster
 | ||||
|     _______,            _______,              /* --- */ | ||||
|     _______,            /* --- */             /* --- */ | ||||
|     _______,            _______,              _______ | ||||
|   ), | ||||
| 
 | ||||
|   /* NEO_4: Cursor & Numpad
 | ||||
|    * | ||||
|    * ,--------------------------------------------------.           ,--------------------------------------------------. | ||||
|    * |  ----  |   ª  |   º  | ---- |   ·  |   £  |      |           |      | ---- | Tab  |   /  |   *  |   -  |  ----  | | ||||
|    * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------| | ||||
|    * |  ----  | PgUp |   ⌫  |  Up  |   ⌦  | PgDn |      |           |      |   ¡  |   7  |   8  |   9  |   +  |   –    | | ||||
|    * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------| | ||||
|    * |        | Home | Left | Down | Right| End  |------|           |------|   ¿  |   4  |   5  |   6  |   ,  |   .    | | ||||
|    * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------| | ||||
|    * |        | Esc  | Tab  | Ins  |Return| ---- |      |           |      |   :  |   1  |   2  |   3  |   ;  |        | | ||||
|    * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------' | ||||
|    *   |      |      |      |      |      |                                       |      |   0  |      |      |      | | ||||
|    *   `----------------------------------'                                       `----------------------------------' | ||||
|    *                                        ,-------------.       ,-------------. | ||||
|    *                                        |      |      |       |      |      | | ||||
|    *                                 ,------|------|------|       |------+------+------. | ||||
|    *                                 |      |      |      |       |      |      |      | | ||||
|    *                                 |      |      |------|       |------|      |      | | ||||
|    *                                 |      |      |      |       |      |      |      | | ||||
|    *                                 `--------------------'       `--------------------' | ||||
|    */ | ||||
|   [NEO_4] = LAYOUT_ergodox( | ||||
|     // left hand side - main
 | ||||
|     KC_NO /* NOOP */,   US_OSX_FEMININE_ORDINAL,  US_OSX_MASCULINE_ORDINAL, KC_NO /* NOOP */,     US_OSX_MIDDLE_DOT,  US_OSX_BRITISH_POUND, _______, | ||||
|     _______,            KC_PGUP,                  KC_BSPACE,                KC_UP,                KC_DELETE,          KC_PGDOWN,            _______, | ||||
|     _______,            KC_HOME,                  KC_LEFT,                  KC_DOWN,              KC_RIGHT,           KC_END,               /* --- */ | ||||
|     _______,            KC_ESCAPE,                KC_TAB,                   KC_INSERT,            KC_ENTER,           KC_NO /* NOOP */,     _______, | ||||
|     _______,            _______,                  _______,                  _______,              _______,            /* --- */             /* --- */ | ||||
| 
 | ||||
|     // left hand side - thumb cluster
 | ||||
|     /* --- */           _______,                  _______, | ||||
|     /* --- */           /* --- */                 _______, | ||||
|     _______,            _______,                  _______, | ||||
| 
 | ||||
|     // right hand side - main
 | ||||
|     _______,            US_OSX_CURRENCY_SIGN,     KC_TAB,                   KC_KP_SLASH,          KC_KP_ASTERISK,     KC_KP_MINUS,          KC_NO /* NOOP */, | ||||
|     _______,            US_OSX_INV_EXCLAMATION,   KC_KP_7,                  KC_KP_8,              KC_KP_9,            KC_KP_PLUS,           US_OSX_EM_DASH, | ||||
|     /* --- */           US_OSX_INV_QUESTIONMARK,  KC_KP_4,                  KC_KP_5,              KC_KP_6,            KC_KP_COMMA,          KC_KP_DOT, | ||||
|     _______,            US_OSX_COLON,             KC_KP_1,                  KC_KP_2,              KC_KP_3,            US_OSX_SEMICOLON,     _______, | ||||
|     /* --- */           /* --- */                 _______,                  KC_KP_0,              _______,            _______,              _______, | ||||
| 
 | ||||
|     // right hand side - thumb cluster
 | ||||
|     _______,            _______,                  /* --- */ | ||||
|     _______,            /* --- */                 /* --- */ | ||||
|     _______,            _______,                  _______ | ||||
|   ), | ||||
| 
 | ||||
|   /* NEO_5: Greek
 | ||||
|    * | ||||
|    * ,--------------------------------------------------.           ,--------------------------------------------------. | ||||
|    * |  ----  | ---- | ---- | ---- | ---- | ---- |      |           |      | ---- | ---- | ---- | ---- | ---- |  ----  | | ||||
|    * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------| | ||||
|    * |  ----  | ---- | ---- | ---- | ---- | ---- |      |           |      | ---- | ---- | ---- | ---- | ---- |  ----  | | ||||
|    * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------| | ||||
|    * |        | ---- |  ----| ---- | ---- | ---- |------|           |------| ---- | ---- | ---- | ---- | ---- |  ----  | | ||||
|    * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------| | ||||
|    * |        | ---- |  ----| ---- | ---- | ---- |      |           |      | ---- | ---- | ---- | ---- | ---- |        | | ||||
|    * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------' | ||||
|    *   |      |      |      |      |      |                                       |      |      |      |      |      | | ||||
|    *   `----------------------------------'                                       `----------------------------------' | ||||
|    *                                        ,-------------.       ,-------------. | ||||
|    *                                        |      |      |       |      |      | | ||||
|    *                                 ,------|------|------|       |------+------+------. | ||||
|    *                                 |      |      |      |       |      |      |      | | ||||
|    *                                 |      |      |------|       |------|      |      | | ||||
|    *                                 |      |      |      |       |      |      |      | | ||||
|    *                                 `--------------------'       `--------------------' | ||||
|    */ | ||||
|   [NEO_5] = LAYOUT_ergodox( | ||||
|     // left hand side - main
 | ||||
|     KC_NO /* NOOP */,   KC_NO /* NOOP */,   KC_NO /* NOOP */,   KC_NO /* NOOP */,     KC_NO /* NOOP */,   KC_NO /* NOOP */,   _______, | ||||
|     KC_NO /* NOOP */,   KC_NO /* NOOP */,   KC_NO /* NOOP */,   KC_NO /* NOOP */,     KC_NO /* NOOP */,   KC_NO /* NOOP */,   _______, | ||||
|     _______,            KC_NO /* NOOP */,   KC_NO /* NOOP */,   KC_NO /* NOOP */,     KC_NO /* NOOP */,   KC_NO /* NOOP */,   /* --- */ | ||||
|     _______,            KC_NO /* NOOP */,   KC_NO /* NOOP */,   KC_NO /* NOOP */,     KC_NO /* NOOP */,   KC_NO /* NOOP */,   _______, | ||||
|     _______,            _______,            _______,            _______,              _______,            /* --- */           /* --- */ | ||||
| 
 | ||||
|     // left hand side - thumb cluster
 | ||||
|     /* --- */           _______,            _______, | ||||
|     /* --- */           /* --- */           _______, | ||||
|     _______,            _______,            _______, | ||||
| 
 | ||||
|     // right hand side - main
 | ||||
|     _______,            KC_NO /* NOOP */,   KC_NO /* NOOP */,   KC_NO /* NOOP */,     KC_NO /* NOOP */,   KC_NO /* NOOP */,   KC_NO /* NOOP */, | ||||
|     _______,            KC_NO /* NOOP */,   KC_NO /* NOOP */,   KC_NO /* NOOP */,     KC_NO /* NOOP */,   KC_NO /* NOOP */,   KC_NO /* NOOP */, | ||||
|     /* --- */           KC_NO /* NOOP */,   KC_NO /* NOOP */,   KC_NO /* NOOP */,     KC_NO /* NOOP */,   KC_NO /* NOOP */,   KC_NO /* NOOP */, | ||||
|     _______,            KC_NO /* NOOP */,   KC_NO /* NOOP */,   KC_NO /* NOOP */,     KC_NO /* NOOP */,   KC_NO /* NOOP */,   _______, | ||||
|     /* --- */           /* --- */           _______,            _______,              _______,            _______,            _______, | ||||
| 
 | ||||
|     // right hand side - thumb cluster
 | ||||
|     _______,            _______,            /* --- */ | ||||
|     _______,            /* --- */           /* --- */ | ||||
|     _______,            _______,            _______ | ||||
|   ), | ||||
| 
 | ||||
|   /* NEO_6: Math symbols
 | ||||
|    * | ||||
|    * ,--------------------------------------------------.           ,--------------------------------------------------. | ||||
|    * |  ----  | ---- | ---- | ---- | ---- | ---- |      |           |      | ---- | ---- | ---- | ---- | ---- |  ----  | | ||||
|    * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------| | ||||
|    * |  ----  | ---- | ---- | ---- | ---- | ---- |      |           |      | ---- | ---- | ---- | ---- | ---- |  ----  | | ||||
|    * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------| | ||||
|    * |        | ---- |  ----| ---- | ---- | ---- |------|           |------| ---- | ---- | ---- | ---- | ---- |  ----  | | ||||
|    * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------| | ||||
|    * |        | ---- |  ----| ---- | ---- | ---- |      |           |      | ---- | ---- | ---- | ---- | ---- |        | | ||||
|    * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------' | ||||
|    *   |      |      |      |      |      |                                       |      |      |      |      |      | | ||||
|    *   `----------------------------------'                                       `----------------------------------' | ||||
|    *                                        ,-------------.       ,-------------. | ||||
|    *                                        |      |      |       |      |      | | ||||
|    *                                 ,------|------|------|       |------+------+------. | ||||
|    *                                 |      |      |      |       |      |      |      | | ||||
|    *                                 |      |      |------|       |------|      |      | | ||||
|    *                                 |      |      |      |       |      |      |      | | ||||
|    *                                 `--------------------'       `--------------------' | ||||
|    */ | ||||
|   [NEO_6] = LAYOUT_ergodox( | ||||
|     // left hand side - main
 | ||||
|     KC_NO /* NOOP */,   KC_NO /* NOOP */,   KC_NO /* NOOP */,   KC_NO /* NOOP */,     KC_NO /* NOOP */,   KC_NO /* NOOP */,   _______, | ||||
|     KC_NO /* NOOP */,   KC_NO /* NOOP */,   KC_NO /* NOOP */,   KC_NO /* NOOP */,     KC_NO /* NOOP */,   KC_NO /* NOOP */,   _______, | ||||
|     _______,            KC_NO /* NOOP */,   KC_NO /* NOOP */,   KC_NO /* NOOP */,     KC_NO /* NOOP */,   KC_NO /* NOOP */,   /* --- */ | ||||
|     _______,            KC_NO /* NOOP */,   KC_NO /* NOOP */,   KC_NO /* NOOP */,     KC_NO /* NOOP */,   KC_NO /* NOOP */,   _______, | ||||
|     _______,            _______,            _______,            _______,              _______,            /* --- */           /* --- */ | ||||
| 
 | ||||
|     // left hand side - thumb cluster
 | ||||
|     /* --- */           _______,            _______, | ||||
|     /* --- */           /* --- */           _______, | ||||
|     _______,            _______,            _______, | ||||
| 
 | ||||
|     // right hand side - main
 | ||||
|     _______,            KC_NO /* NOOP */,   KC_NO /* NOOP */,   KC_NO /* NOOP */,     KC_NO /* NOOP */,   KC_NO /* NOOP */,   KC_NO /* NOOP */, | ||||
|     _______,            KC_NO /* NOOP */,   KC_NO /* NOOP */,   KC_NO /* NOOP */,     KC_NO /* NOOP */,   KC_NO /* NOOP */,   KC_NO /* NOOP */, | ||||
|     /* --- */           KC_NO /* NOOP */,   KC_NO /* NOOP */,   KC_NO /* NOOP */,     KC_NO /* NOOP */,   KC_NO /* NOOP */,   KC_NO /* NOOP */, | ||||
|     _______,            KC_NO /* NOOP */,   KC_NO /* NOOP */,   KC_NO /* NOOP */,     KC_NO /* NOOP */,   KC_NO /* NOOP */,   _______, | ||||
|     /* --- */           /* --- */           _______,            _______,              _______,            _______,            _______, | ||||
| 
 | ||||
|     // right hand side - thumb cluster
 | ||||
|     _______,            _______,            /* --- */ | ||||
|     _______,            /* --- */           /* --- */ | ||||
|     _______,            _______,            _______ | ||||
|   ), | ||||
| 
 | ||||
|   /* US_1: US QWERTY
 | ||||
|    * | ||||
|    * ,--------------------------------------------------.           ,--------------------------------------------------. | ||||
|    * |   =    |   1  |   2  |   3  |   4  |   5  | ESC  |           | NEO_1|   6  |   7  |   8  |   9  |   0  |    -   | | ||||
|    * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------| | ||||
|    * |   \    |   Q  |   W  |   E  |   R  |   T  | ---- |           |   [  |   Y  |   U  |   I  |   O  |   P  |    ]   | | ||||
|    * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------| | ||||
|    * |  TAB   |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   ;  |    '   | | ||||
|    * |--------+------+------+------+------+------| ---- |           | ---- |------+------+------+------+------+--------| | ||||
|    * | LSHIFT |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |   /  | RSHIFT | | ||||
|    * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------' | ||||
|    *   | LGUI |   `  | ---- | ---- | FKEYS|                                       | Left | Down |  Up  | Right| RGUI | | ||||
|    *   `----------------------------------'                                       `----------------------------------' | ||||
|    *                                        ,-------------.       ,-------------. | ||||
|    *                                        | LCTRL| LALT |       | RALT | RCTRL| | ||||
|    *                                 ,------|------|------|       |------+------+------. | ||||
|    *                                 |      |      | HOME |       | PGUP |      |      | | ||||
|    *                                 | BKSP | DEL  |------|       |------| ENTR | SPCE | | ||||
|    *                                 |      |      | END  |       | PGDN |      |      | | ||||
|    *                                 `--------------------'       `--------------------' | ||||
|    */ | ||||
|   [US_1] = LAYOUT_ergodox( | ||||
|     // left hand side - main
 | ||||
|     KC_EQUAL,         KC_1,         KC_2,       KC_3,       KC_4,       KC_5,       KC_ESCAPE, | ||||
|     KC_BSLASH,        KC_Q,         KC_W,       KC_E,       KC_R,       KC_T,       KC_NO /* NOOP */, | ||||
|     KC_TAB,           KC_A,         KC_S,       KC_D,       KC_F,       KC_G,       /* --- */ | ||||
|     KC_LSHIFT,        KC_Z,         KC_X,       KC_C,       KC_V,       KC_B,       KC_NO /* NOOP */, | ||||
|     KC_LGUI,          KC_GRAVE,     KC_NO,      KC_NO,      MO(FKEYS),  /* --- */   /* --- */ | ||||
| 
 | ||||
|     // left hand side - thumb cluster
 | ||||
|     /* --- */         KC_LCTRL,     KC_LALT, | ||||
|     /* --- */         /* --- */     KC_HOME, | ||||
|     KC_BSPACE,        KC_DELETE,    KC_END, | ||||
| 
 | ||||
|     // right hand side - main
 | ||||
|     TO(NEO_1),        KC_6,         KC_7,       KC_8,       KC_9,       KC_0,       KC_MINUS, | ||||
|     KC_LBRACKET,      KC_Y,         KC_U,       KC_I,       KC_O,       KC_P,       KC_RBRACKET, | ||||
|     /* --- */         KC_H,         KC_J,       KC_K,       KC_L,       KC_SCOLON,  KC_QUOTE, | ||||
|     KC_NO /* NOOP */, KC_N,         KC_M,       KC_COMMA,   KC_DOT,     KC_SLASH,   KC_RSHIFT, | ||||
|     /* --- */         /* --- */     KC_LEFT,    KC_DOWN,    KC_UP,      KC_RIGHT,   KC_RGUI, | ||||
| 
 | ||||
|     // right hand side - thumb cluster
 | ||||
|     KC_RALT,          KC_RCTRL,     /* --- */ | ||||
|     KC_PGUP,          /* --- */     /* --- */ | ||||
|     KC_PGDOWN,        KC_ENTER,     KC_SPACE | ||||
|   ), | ||||
| 
 | ||||
|   /* FKEYS: Function keys
 | ||||
|    * | ||||
|    * ,--------------------------------------------------.           ,--------------------------------------------------. | ||||
|    * |  Prev  |  F1  |  F2  |  F3  |  F4  |  F5  |  F11 |           |  F12 |  F6  |  F7  |  F8  |  F9  |  F10 |  VolUp | | ||||
|    * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------| | ||||
|    * |  Play  |      |      |      |      |      |      |           |      |      |      |      |      |      |  VolDn | | ||||
|    * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------| | ||||
|    * |  Next  |      |      |      |      |      |------|           |------|      |      |      |      |      |  Mute  | | ||||
|    * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------| | ||||
|    * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        | | ||||
|    * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------' | ||||
|    *   |      |      |      |      |      |                                       |      |      |      |      |      | | ||||
|    *   `----------------------------------'                                       `----------------------------------' | ||||
|    *                                        ,-------------.       ,-------------. | ||||
|    *                                        |      |      |       |      |      | | ||||
|    *                                 ,------|------|------|       |------+------+------. | ||||
|    *                                 |      |      |      |       |      |      |      | | ||||
|    *                                 |      |      |------|       |------|      |      | | ||||
|    *                                 |      |      |      |       |      |      |      | | ||||
|    *                                 `--------------------'       `--------------------' | ||||
|    */ | ||||
|   [FKEYS] = LAYOUT_ergodox( | ||||
|     // left hand side - main
 | ||||
|     KC_MEDIA_REWIND,        KC_F1,              KC_F2,              KC_F3,                KC_F4,              KC_F5,              KC_F11, | ||||
|     KC_MEDIA_PLAY_PAUSE,    _______,            _______,            _______,              _______,            _______,            _______, | ||||
|     KC_MEDIA_FAST_FORWARD,  _______,            _______,            _______,              _______,            _______,            /* --- */ | ||||
|     _______,                _______,            _______,            _______,              _______,            _______,            _______, | ||||
|     _______,                _______,            _______,            _______,              _______,            /* --- */           /* --- */ | ||||
| 
 | ||||
|     // left hand side - thumb cluster
 | ||||
|     /* --- */               _______,            _______, | ||||
|     /* --- */               /* --- */           _______, | ||||
|     _______,                _______,            _______, | ||||
| 
 | ||||
|     // right hand side - main
 | ||||
|     KC_F12,                 KC_F6,              KC_F7,              KC_F8,                KC_F9,              KC_F10,             KC_AUDIO_VOL_UP, | ||||
|     _______,                _______,            _______,            _______,              _______,            _______,            KC_AUDIO_VOL_DOWN, | ||||
|     /* --- */               _______,            _______,            _______,              _______,            _______,            KC_AUDIO_MUTE, | ||||
|     _______,                _______,            _______,            _______,              _______,            _______,            _______, | ||||
|     /* --- */               /* --- */           _______,            _______,              _______,            _______,            _______, | ||||
| 
 | ||||
|     // right hand side - thumb cluster
 | ||||
|     _______,                _______,            /* --- */ | ||||
|     _______,                /* --- */           /* --- */ | ||||
|     _______,                _______,            _______ | ||||
|   ), | ||||
| }; | ||||
| 
 | ||||
| // Send a key tap with a optional set of modifiers.
 | ||||
| void tap_with_modifiers(uint16_t keycode, uint8_t force_modifiers) { | ||||
|   uint8_t active_modifiers = get_mods(); | ||||
| 
 | ||||
|   if ((force_modifiers & MOD_MASK_SHIFT) && !(active_modifiers & MOD_MASK_SHIFT)) register_code(KC_LSFT); | ||||
|   if ((force_modifiers & MOD_MASK_CTRL) && !(active_modifiers & MOD_MASK_CTRL)) register_code(KC_LCTRL); | ||||
|   if ((force_modifiers & MOD_MASK_ALT) && !(active_modifiers & MOD_MASK_ALT)) register_code(KC_LALT); | ||||
|   if ((force_modifiers & MOD_MASK_GUI) && !(active_modifiers & MOD_MASK_GUI)) register_code(KC_LGUI); | ||||
| 
 | ||||
|   register_code(keycode); | ||||
|   unregister_code(keycode); | ||||
| 
 | ||||
|   if ((force_modifiers & MOD_MASK_SHIFT) && !(active_modifiers & MOD_MASK_SHIFT)) unregister_code(KC_LSFT); | ||||
|   if ((force_modifiers & MOD_MASK_CTRL) && !(active_modifiers & MOD_MASK_CTRL)) unregister_code(KC_LCTRL); | ||||
|   if ((force_modifiers & MOD_MASK_ALT) && !(active_modifiers & MOD_MASK_ALT)) unregister_code(KC_LALT); | ||||
|   if ((force_modifiers & MOD_MASK_GUI) && !(active_modifiers & MOD_MASK_GUI)) unregister_code(KC_LGUI); | ||||
| } | ||||
| 
 | ||||
| // Special remapping for keys with different keycodes/macros when used with shift modifiers.
 | ||||
| bool process_record_user_shifted(uint16_t keycode, keyrecord_t *record) { | ||||
|   uint8_t active_modifiers = get_mods(); | ||||
|   uint8_t shifted          = active_modifiers & MOD_MASK_SHIFT; | ||||
| 
 | ||||
|   // Early return on key release
 | ||||
|   if (!record->event.pressed) { | ||||
|     return true; | ||||
|   } | ||||
| 
 | ||||
|   if (shifted) { | ||||
|     clear_mods(); | ||||
| 
 | ||||
|     switch (keycode) { | ||||
|       case NEO2_1: | ||||
|         // degree symbol
 | ||||
|         SEND_STRING(SS_DOWN(X_LALT) SS_DOWN(X_LSHIFT) SS_TAP(X_8) SS_UP(X_LSHIFT) SS_UP(X_LALT)); | ||||
|         break; | ||||
|       case NEO2_2: | ||||
|         // section symbol
 | ||||
|         SEND_STRING(SS_DOWN(X_LALT) SS_TAP(X_6) SS_UP(X_LALT)); | ||||
|         break; | ||||
|       case NEO2_3: | ||||
|         // There is no OSX key combination for the script small l character
 | ||||
|         break; | ||||
|       case NEO2_4: | ||||
|         // right angled quote
 | ||||
|         SEND_STRING(SS_DOWN(X_LALT) SS_DOWN(X_LSHIFT) SS_TAP(X_BSLASH) SS_UP(X_LSHIFT) SS_UP(X_LALT)); | ||||
|         break; | ||||
|       case NEO2_5: | ||||
|         // left angled quote
 | ||||
|         SEND_STRING(SS_DOWN(X_LALT) SS_TAP(X_BSLASH) SS_UP(X_LALT)); | ||||
|         break; | ||||
|       case NEO2_6: | ||||
|         // dollar sign
 | ||||
|         SEND_STRING(SS_DOWN(X_LSHIFT) SS_TAP(X_4) SS_UP(X_LSHIFT)); | ||||
|         break; | ||||
|       case NEO2_7: | ||||
|         // euro sign
 | ||||
|         SEND_STRING(SS_DOWN(X_LALT) SS_DOWN(X_LSHIFT) SS_TAP(X_2) SS_UP(X_LSHIFT) SS_UP(X_LALT)); | ||||
|         break; | ||||
|       case NEO2_8: | ||||
|         // low9 double quote
 | ||||
|         SEND_STRING(SS_DOWN(X_LALT) SS_DOWN(X_LSHIFT) SS_TAP(X_W) SS_UP(X_LSHIFT) SS_UP(X_LALT)); | ||||
|         break; | ||||
|       case NEO2_9: | ||||
|         // left double quote
 | ||||
|         SEND_STRING(SS_DOWN(X_LALT) SS_TAP(X_LBRACKET) SS_UP(X_LALT)); | ||||
|         break; | ||||
|       case NEO2_0: | ||||
|         // right double quote
 | ||||
|         SEND_STRING(SS_DOWN(X_LALT) SS_DOWN(X_LSHIFT) SS_TAP(X_LBRACKET) SS_UP(X_LSHIFT) SS_UP(X_LALT)); | ||||
|         break; | ||||
|       case NEO2_MINUS: | ||||
|         // em dash
 | ||||
|         SEND_STRING(SS_DOWN(X_LALT) SS_DOWN(X_LSHIFT) SS_TAP(X_MINUS) SS_UP(X_LSHIFT) SS_UP(X_LALT)); | ||||
|         break; | ||||
|       case NEO2_COMMA: | ||||
|         // en dash
 | ||||
|         SEND_STRING(SS_DOWN(X_LALT) SS_TAP(X_MINUS) SS_UP(X_LALT)); | ||||
|         break; | ||||
|       case NEO2_DOT: | ||||
|         // bullet
 | ||||
|         SEND_STRING(SS_DOWN(X_LALT) SS_TAP(X_8) SS_UP(X_LALT)); | ||||
|         break; | ||||
|       case NEO2_SHARP_S: | ||||
|         // german sharp s
 | ||||
|         SEND_STRING(SS_DOWN(X_LALT) SS_TAP(X_S) SS_UP(X_LALT)); | ||||
|         break; | ||||
|       case NEO2_UE: | ||||
|         SEND_STRING(SS_DOWN(X_LALT) SS_DOWN(X_U) SS_UP(X_U) SS_UP(X_LALT) SS_DOWN(X_LSHIFT) SS_TAP(X_U) SS_UP(X_LSHIFT)); | ||||
|         break; | ||||
|       case NEO2_OE: | ||||
|         SEND_STRING(SS_DOWN(X_LALT) SS_DOWN(X_U) SS_UP(X_U) SS_UP(X_LALT) SS_DOWN(X_LSHIFT) SS_TAP(X_O) SS_UP(X_LSHIFT)); | ||||
|         break; | ||||
|       case NEO2_AE: | ||||
|         SEND_STRING(SS_DOWN(X_LALT) SS_DOWN(X_U) SS_UP(X_U) SS_UP(X_LALT) SS_DOWN(X_LSHIFT) SS_TAP(X_A) SS_UP(X_LSHIFT)); | ||||
|         break; | ||||
|       default: | ||||
|         set_mods(active_modifiers); | ||||
|         return true; | ||||
|     } | ||||
| 
 | ||||
|     set_mods(active_modifiers); | ||||
|     return false; | ||||
|   } else { | ||||
|     switch (keycode) { | ||||
|       case NEO2_1: | ||||
|         SEND_STRING(SS_TAP(X_1)); | ||||
|         break; | ||||
|       case NEO2_2: | ||||
|         SEND_STRING(SS_TAP(X_2)); | ||||
|         break; | ||||
|       case NEO2_3: | ||||
|         SEND_STRING(SS_TAP(X_3)); | ||||
|         break; | ||||
|       case NEO2_4: | ||||
|         SEND_STRING(SS_TAP(X_4)); | ||||
|         break; | ||||
|       case NEO2_5: | ||||
|         SEND_STRING(SS_TAP(X_5)); | ||||
|         break; | ||||
|       case NEO2_6: | ||||
|         SEND_STRING(SS_TAP(X_6)); | ||||
|         break; | ||||
|       case NEO2_7: | ||||
|         SEND_STRING(SS_TAP(X_7)); | ||||
|         break; | ||||
|       case NEO2_8: | ||||
|         SEND_STRING(SS_TAP(X_8)); | ||||
|         break; | ||||
|       case NEO2_9: | ||||
|         SEND_STRING(SS_TAP(X_9)); | ||||
|         break; | ||||
|       case NEO2_0: | ||||
|         SEND_STRING(SS_TAP(X_0)); | ||||
|         break; | ||||
|       case NEO2_MINUS: | ||||
|         SEND_STRING(SS_TAP(X_MINUS)); | ||||
|         break; | ||||
|       case NEO2_COMMA: | ||||
|         SEND_STRING(SS_TAP(X_COMMA)); | ||||
|         break; | ||||
|       case NEO2_DOT: | ||||
|         SEND_STRING(SS_TAP(X_DOT)); | ||||
|         break; | ||||
|       case NEO2_SHARP_S: | ||||
|         // german sharp s
 | ||||
|         SEND_STRING(SS_DOWN(X_LALT) SS_TAP(X_S) SS_UP(X_LALT)); | ||||
|         break; | ||||
|       case NEO2_UE: | ||||
|         SEND_STRING(SS_DOWN(X_LALT) SS_DOWN(X_U) SS_UP(X_U) SS_UP(X_LALT) SS_TAP(X_U)); | ||||
|         break; | ||||
|       case NEO2_OE: | ||||
|         SEND_STRING(SS_DOWN(X_LALT) SS_DOWN(X_U) SS_UP(X_U) SS_UP(X_LALT) SS_TAP(X_O)); | ||||
|         break; | ||||
|       case NEO2_AE: | ||||
|         SEND_STRING(SS_DOWN(X_LALT) SS_DOWN(X_U) SS_UP(X_U) SS_UP(X_LALT) SS_TAP(X_A)); | ||||
|         break; | ||||
|       default: | ||||
|         return true; | ||||
|     } | ||||
| 
 | ||||
|     return false; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| // Runs for each key down or up event.
 | ||||
| bool process_record_user(uint16_t keycode, keyrecord_t *record) { | ||||
|   switch (keycode) { | ||||
|     case KC_LSHIFT: | ||||
|       if (record->event.pressed) { | ||||
|         capslock_state |= (MOD_BIT(KC_LSHIFT)); | ||||
|       } else { | ||||
|         capslock_state &= ~(MOD_BIT(KC_LSHIFT)); | ||||
|       } | ||||
|       break; | ||||
|     case KC_RSHIFT: | ||||
|       if (record->event.pressed) { | ||||
|         capslock_state |= MOD_BIT(KC_RSHIFT); | ||||
|       } else { | ||||
|         capslock_state &= ~(MOD_BIT(KC_RSHIFT)); | ||||
|       } | ||||
|       break; | ||||
|     case NEO2_LMOD3: | ||||
|       if (record->event.pressed) { | ||||
|         layer_on(NEO_3); | ||||
|         neo3_state |= (1 << 1); | ||||
|       } else { | ||||
|         // Turn off NEO_3 layer unless it's enabled through NEO2_RMOD3 as well.
 | ||||
|         if ((neo3_state & ~(1 << 1)) == 0) { | ||||
|           layer_off(NEO_3); | ||||
|         } | ||||
|         neo3_state &= ~(1 << 1); | ||||
|       } | ||||
|       break; | ||||
|     case NEO2_RMOD3: | ||||
|       if (record->event.pressed) { | ||||
|         neo3_timer = timer_read(); | ||||
|         neo3_state |= (1 << 2); | ||||
|         layer_on(NEO_3); | ||||
|       } else { | ||||
|         // Turn off NEO_3 layer unless it's enabled through NEO2_LMOD3 as well.
 | ||||
|         if ((neo3_state & ~(1 << 2)) == 0) { | ||||
|           layer_off(NEO_3); | ||||
|         } | ||||
|         neo3_state &= ~(1 << 2); | ||||
| 
 | ||||
|         // Was the NEO2_RMOD3 key TAPPED?
 | ||||
|         if (timer_elapsed(neo3_timer) <= 150) { | ||||
|           if (neo3_state > 0) { | ||||
|             // We are still in NEO_3 layer, send keycode and modifiers for @
 | ||||
|             tap_with_modifiers(KC_2, MOD_MASK_SHIFT); | ||||
|             return false; | ||||
|           } else { | ||||
|             // Do the normal key processing, send y
 | ||||
|             tap_with_modifiers(KC_Y, MOD_MASK_NONE); | ||||
|             return false; | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|       break; | ||||
|   } | ||||
| 
 | ||||
|   if ((capslock_state & MOD_MASK_SHIFT) == MOD_MASK_SHIFT) { | ||||
|     // CAPSLOCK is currently active, disable it
 | ||||
|     if (host_keyboard_leds() & (1 << USB_LED_CAPS_LOCK)) { | ||||
|       unregister_code(KC_LOCKING_CAPS); | ||||
|     } else { | ||||
|       register_code(KC_LOCKING_CAPS); | ||||
|     } | ||||
|     return false; | ||||
|   } | ||||
| 
 | ||||
|   return process_record_user_shifted(keycode, record); | ||||
| }; | ||||
| 
 | ||||
| // Runs just one time when the keyboard initializes.
 | ||||
| void matrix_init_user(void){ | ||||
| 
 | ||||
| }; | ||||
| 
 | ||||
| // Runs constantly in the background, in a loop.
 | ||||
| void matrix_scan_user(void) { | ||||
|   uint8_t layer = biton32(layer_state); | ||||
| 
 | ||||
|   ergodox_board_led_off(); | ||||
|   ergodox_right_led_1_off(); | ||||
|   ergodox_right_led_2_off(); | ||||
|   ergodox_right_led_3_off(); | ||||
|   switch (layer) { | ||||
|       // TODO: Make this relevant to the ErgoDox EZ.
 | ||||
|     case 1: | ||||
|       ergodox_right_led_1_on(); | ||||
|       break; | ||||
|     case 2: | ||||
|       ergodox_right_led_2_on(); | ||||
|       break; | ||||
|     default: | ||||
|       // none
 | ||||
|       break; | ||||
|   } | ||||
| }; | ||||
							
								
								
									
										9
									
								
								layouts/community/ergodox/osx_neo2/layers.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								layouts/community/ergodox/osx_neo2/layers.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,9 @@ | |||
| enum layers { | ||||
|   NEO_1,  // layer_0
 | ||||
|   NEO_3,  // layer_1
 | ||||
|   NEO_4,  // layer_2
 | ||||
|   NEO_5,  // layer_3
 | ||||
|   NEO_6,  // layer_4
 | ||||
|   US_1,   // layer_5
 | ||||
|   FKEYS   // layer_6
 | ||||
| }; | ||||
							
								
								
									
										219
									
								
								layouts/community/ergodox/osx_neo2/readme.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										219
									
								
								layouts/community/ergodox/osx_neo2/readme.md
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,219 @@ | |||
| # Neo 2 for ErgoDox on QWERTY | ||||
| 
 | ||||
| # Description | ||||
| 
 | ||||
| The Neo layout is an optimized German keyboard layout developed by the  | ||||
| Neo Users Group, supporting many Latin-based alphabets. The positions  | ||||
| of the letters are not only optimized for German letter frequency,  | ||||
| but also for typical groups of two or three letters.  English is  | ||||
| considered a primary target as well.  | ||||
| 
 | ||||
| The design tries to enforce the alternating usage of both hands to  | ||||
| increase typing speed  and incorporates ideas from de-ergo and other  | ||||
| ergonomic layouts. High frequency keys are placed in the home row.  | ||||
| The current layout Neo 2.0 has unique features making it suited for  | ||||
| many target groups such as programmers, mathematicians, scientists or  | ||||
| LaTeX authors. | ||||
| 
 | ||||
| Neo is grouped into six layers, each dedicated to a special purpose. | ||||
| 
 | ||||
| # Layers | ||||
| 
 | ||||
| At the core this is a Neo 2.0 layout adjusted for the Ergodox Infinity.  | ||||
| The keymap is laid out expecting a macOs using the US QWERTY or ABC  | ||||
| Extended layout.  | ||||
| 
 | ||||
| [Layer 1](#layer-1) Lowercase, upppercase and typographical  characters | ||||
| 
 | ||||
| [Layer 2](#layer-2) Special characters for programming | ||||
| 
 | ||||
| [Layer 3](#layer-3) WASD-like movement keys and number block | ||||
| 
 | ||||
| [Layer 4](#layer-4) Greek characters | ||||
| 
 | ||||
| [Layer 5](#layer-5) Mathematical symbols and Greek uppercase characters | ||||
| 
 | ||||
| [Layer 6](#layer-6) Ergodox Infinity US QWERTY layout | ||||
| 
 | ||||
| [Layer 7](#layer-7) Function keys | ||||
| 
 | ||||
| ## Legend | ||||
| 
 | ||||
|  * Keys marked with `----` are dead keys. | ||||
|  * Blank keys are transparent and fall through to lower levels. | ||||
| 
 | ||||
| ## Layer 1 | ||||
| 
 | ||||
| This layer implements NEO layers 1 and 2. | ||||
| 
 | ||||
| ``` | ||||
| ,--------------------------------------------------.           ,--------------------------------------------------. | ||||
| |  ----  |  1/° |  2/§ |  3/  |  4/» |  5/« |  ESC |           | US_1 |  6/$ |  7/€ |  8/„ |  9/“ |  0/” |  -/—   | | ||||
| |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------| | ||||
| |  TAB   |   X  |   V  |   L  |   C  |   W  | LCTL |           | RCTL |   K  |   H  |   G  |   F  |   Q  |   ß    | | ||||
| |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------| | ||||
| |  NEO_3 |   U  |   I  |   A  |   E  |   O  |------|           |------|   S  |   N  |   R  |   T  |   D  |   Y    | | ||||
| |--------+------+------+------+------+------| LALT |           | RALT |------+------+------+------+------+--------| | ||||
| | LSHIFT |   Ü  |   Ö  |   Ä  |   P  |   Z  |      |           |      |   B  |   M  |  ,/– |  ./• |   J  | RSHIFT | | ||||
| `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------' | ||||
|   | ---- | ---- | LCTL | LALT | LGUI |                                       | RGUI | Left | Down |  Up  | Right| | ||||
|   `----------------------------------'                                       `----------------------------------' | ||||
|                                        ,-------------.       ,-------------. | ||||
|                                        | FKEYS| Home |       | PgUp | FKEYS| | ||||
|                                 ,------|------|------|       |------+------+------. | ||||
|                                 | Back-|      | End  |       | PgDn |      |      | | ||||
|                                 | space|Delete|------|       |------| Enter|Space | | ||||
|                                 |      |      | NEO_4|       | NEO_4|      |      | | ||||
|                                 `--------------------'       `--------------------' | ||||
| ``` | ||||
| 
 | ||||
| ## Layer 2 | ||||
| 
 | ||||
| This layer implements NEO layer 3. | ||||
| 
 | ||||
| 
 | ||||
| ``` | ||||
| ,--------------------------------------------------.           ,--------------------------------------------------. | ||||
| |  ----  | ---- | ---- | ---- |   ›  |   ‹  |      |           |      |   ¢ 	|   ¥  |   ‚  |   ‘  |   ’  |  ----  | | ||||
| |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------| | ||||
| |  ----  |   …  |   _  |   [  |   ]  |   ^  |      |           |      |   !  |   <  |   >  |   =  |   &  |  ----  | | ||||
| |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------| | ||||
| |        |   \  |   /  |   {  |   }  |   *  |------|           |------|   ?  |   (  |   )  |   -  |   :  |   @    | | ||||
| |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------| | ||||
| |        |   #  |   $  |   |  |   ~  |   `  |      |           |      |   +  |   %  |   "  |   '  |   ;  |        | | ||||
| `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------' | ||||
|   |      |      |      |      |      |                                       |      |      |      |      |      | | ||||
|   `----------------------------------'                                       `----------------------------------' | ||||
|                                        ,-------------.       ,-------------. | ||||
|                                        |      |      |       |      |      | | ||||
|                                 ,------|------|------|       |------+------+------. | ||||
|                                 |      |      |      |       |      |      |      | | ||||
|                                 |      |      |------|       |------|      |      | | ||||
|                                 |      |      |      |       |      |      |      | | ||||
|                                 `--------------------'       `--------------------' | ||||
| ``` | ||||
| 
 | ||||
| ## Layer 3 | ||||
| 
 | ||||
| This layer implements NEO layer 4. | ||||
| 
 | ||||
| ``` | ||||
| ,--------------------------------------------------.           ,--------------------------------------------------. | ||||
| |  ----  |   ª  |   º  | ---- |   ·  |   £  |      |           |      | ---- | Tab  |   /  |   *  |   -  |  ----  | | ||||
| |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------| | ||||
| |  ----  | PgUp |   ⌫  |  Up  |   ⌦  | PgDn |      |           |      |   ¡  |   7  |   8  |   9  |   +  |   –    | | ||||
| |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------| | ||||
| |        | Home | Left | Down | Right| End  |------|           |------|   ¿  |   4  |   5  |   6  |   ,  |   .    | | ||||
| |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------| | ||||
| |        | Esc  | Tab  | Ins  |Return| ---- |      |           |      |   :  |   1  |   2  |   3  |   ;  |        | | ||||
| `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------' | ||||
|   |      |      |      |      |      |                                       |      |   0  |      |      |      | | ||||
|   `----------------------------------'                                       `----------------------------------' | ||||
|                                        ,-------------.       ,-------------. | ||||
|                                        |      |      |       |      |      | | ||||
|                                 ,------|------|------|       |------+------+------. | ||||
|                                 |      |      |      |       |      |      |      | | ||||
|                                 |      |      |------|       |------|      |      | | ||||
|                                 |      |      |      |       |      |      |      | | ||||
|                                 `--------------------'       `--------------------' | ||||
| ``` | ||||
| 
 | ||||
| ## Layer 4 | ||||
| 
 | ||||
| This layer is currently empty/reserved for NEO layer 5. | ||||
| 
 | ||||
| ``` | ||||
| ,--------------------------------------------------.           ,--------------------------------------------------. | ||||
| |  ----  | ---- | ---- | ---- | ---- | ---- |      |           |      | ---- | ---- | ---- | ---- | ---- |  ----  | | ||||
| |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------| | ||||
| |  ----  | ---- | ---- | ---- | ---- | ---- |      |           |      | ---- | ---- | ---- | ---- | ---- |  ----  | | ||||
| |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------| | ||||
| |        | ---- |  ----| ---- | ---- | ---- |------|           |------| ---- | ---- | ---- | ---- | ---- |  ----  | | ||||
| |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------| | ||||
| |        | ---- |  ----| ---- | ---- | ---- |      |           |      | ---- | ---- | ---- | ---- | ---- |        | | ||||
| `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------' | ||||
|   |      |      |      |      |      |                                       |      |      |      |      |      | | ||||
|   `----------------------------------'                                       `----------------------------------' | ||||
|                                        ,-------------.       ,-------------. | ||||
|                                        |      |      |       |      |      | | ||||
|                                 ,------|------|------|       |------+------+------. | ||||
|                                 |      |      |      |       |      |      |      | | ||||
|                                 |      |      |------|       |------|      |      | | ||||
|                                 |      |      |      |       |      |      |      | | ||||
|                                 `--------------------'       `--------------------' | ||||
| ``` | ||||
| 
 | ||||
| ## Layer 5 | ||||
| 
 | ||||
| This layer is currently empty/reserved for NEO layer 6. | ||||
| 
 | ||||
| ``` | ||||
| ,--------------------------------------------------.           ,--------------------------------------------------. | ||||
| |  ----  | ---- | ---- | ---- | ---- | ---- |      |           |      | ---- | ---- | ---- | ---- | ---- |  ----  | | ||||
| |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------| | ||||
| |  ----  | ---- | ---- | ---- | ---- | ---- |      |           |      | ---- | ---- | ---- | ---- | ---- |  ----  | | ||||
| |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------| | ||||
| |        | ---- |  ----| ---- | ---- | ---- |------|           |------| ---- | ---- | ---- | ---- | ---- |  ----  | | ||||
| |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------| | ||||
| |        | ---- |  ----| ---- | ---- | ---- |      |           |      | ---- | ---- | ---- | ---- | ---- |        | | ||||
| `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------' | ||||
|   |      |      |      |      |      |                                       |      |      |      |      |      | | ||||
|   `----------------------------------'                                       `----------------------------------' | ||||
|                                        ,-------------.       ,-------------. | ||||
|                                        |      |      |       |      |      | | ||||
|                                 ,------|------|------|       |------+------+------. | ||||
|                                 |      |      |      |       |      |      |      | | ||||
|                                 |      |      |------|       |------|      |      | | ||||
|                                 |      |      |      |       |      |      |      | | ||||
|                                 `--------------------'       `--------------------' | ||||
| ``` | ||||
| 
 | ||||
| ## Layer 6 | ||||
| 
 | ||||
| A bare bones implementation of the default Ergodox Infinity layout. | ||||
| 
 | ||||
| ``` | ||||
| ,--------------------------------------------------.           ,--------------------------------------------------. | ||||
| |   =    |   1  |   2  |   3  |   4  |   5  | ESC  |           | NEO_1|   6  |   7  |   8  |   9  |   0  |    -   | | ||||
| |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------| | ||||
| |   \    |   Q  |   W  |   E  |   R  |   T  | ---- |           |   [  |   Y  |   U  |   I  |   O  |   P  |    ]   | | ||||
| |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------| | ||||
| |  TAB   |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   ;  |    '   | | ||||
| |--------+------+------+------+------+------| ---- |           | ---- |------+------+------+------+------+--------| | ||||
| | LSHIFT |   Z  |   X  |   V  |   B  |   M  |      |           |      |   N  |   M  |   ,  |   .  |   /  | RSHIFT | | ||||
| `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------' | ||||
|   | LGUI |   `  | ---- | ---- | FKEYS|                                       | Left | Down |  Up  | Right| RGUI | | ||||
|   `----------------------------------'                                       `----------------------------------' | ||||
|                                        ,-------------.       ,-------------. | ||||
|                                        | LCTRL| LALT |       | RALT | RCTRL| | ||||
|                                 ,------|------|------|       |------+------+------. | ||||
|                                 |      |      | HOME |       | PGUP |      |      | | ||||
|                                 | BKSP | DEL  |------|       |------| ENTR | SPCE | | ||||
|                                 |      |      | END  |       | PGDN |      |      | | ||||
|                                 `--------------------'       `--------------------' | ||||
| ``` | ||||
| 
 | ||||
| ## Layer 7 | ||||
| 
 | ||||
| This layer implements function and multimedia keys. | ||||
| 
 | ||||
| ``` | ||||
| ,--------------------------------------------------.           ,--------------------------------------------------. | ||||
| |  Prev  |  F1  |  F2  |  F3  |  F4  |  F5  |  F11 |           |  F12 |  F6  |  F7  |  F8  |  F9  |  F10 |  VolUp | | ||||
| |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------| | ||||
| |  Play  |      |      |      |      |      |      |           |      |      |      |      |      |      |  VolDn | | ||||
| |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------| | ||||
| |  Next  |      |      |      |      |      |------|           |------|      |      |      |      |      |  Mute  | | ||||
| |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------| | ||||
| |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        | | ||||
| `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------' | ||||
|   |      |      |      |      |      |                                       |      |      |      |      |      | | ||||
|   `----------------------------------'                                       `----------------------------------' | ||||
|                                        ,-------------.       ,-------------. | ||||
|                                        |      |      |       |      |      | | ||||
|                                 ,------|------|------|       |------+------+------. | ||||
|                                 |      |      |      |       |      |      |      | | ||||
|                                 |      |      |------|       |------|      |      | | ||||
|                                 |      |      |      |       |      |      |      | | ||||
|                                 `--------------------'       `--------------------' | ||||
| ``` | ||||
							
								
								
									
										47
									
								
								layouts/community/ergodox/osx_neo2/visualizer.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								layouts/community/ergodox/osx_neo2/visualizer.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,47 @@ | |||
| #include "layers.h" | ||||
| #include "simple_visualizer.h" | ||||
| #include "util.h" | ||||
| 
 | ||||
| static void get_visualizer_layer_and_color(visualizer_state_t *state) { | ||||
|   uint8_t layer = biton32(state->status.layer); | ||||
| 
 | ||||
|   // Go from highest to lowest layer to get the right text/color combination.
 | ||||
|   switch (layer) { | ||||
|     // #AEB2F4 / hsv(65.71%, 28.69%, 95.69%)
 | ||||
|     case FKEYS: | ||||
|       // #F4AEDC / hsv(89.05%, 28.69%, 95.69%)
 | ||||
|       state->layer_text       = "FUNCTION KEYS"; | ||||
|       state->target_lcd_color = LCD_COLOR(228, 73, 245); | ||||
|       break; | ||||
|     case US_1: | ||||
|       // #F4B993 / hsv(6.53%, 39.75%, 95.69%)
 | ||||
|       state->layer_text       = "QWERTY"; | ||||
|       state->target_lcd_color = LCD_COLOR(17, 102, 245); | ||||
|       break; | ||||
|     case NEO_6: | ||||
|       // #F4E393 / hsv(13.75%, 39.75%, 95.69%)
 | ||||
|       state->layer_text       = "NEO: 6"; | ||||
|       state->target_lcd_color = LCD_COLOR(35, 102, 245); | ||||
|       break; | ||||
|     case NEO_5: | ||||
|       // #C6F493 / hsv(24.57%, 39.75%, 95.69%)
 | ||||
|       state->layer_text       = "NEO: 5"; | ||||
|       state->target_lcd_color = LCD_COLOR(63, 102, 245); | ||||
|       break; | ||||
|     case NEO_4: | ||||
|       // #8EEBC9 / hsv(43.91%, 39.57%, 92.16%)
 | ||||
|       state->layer_text       = "NEO: 4"; | ||||
|       state->target_lcd_color = LCD_COLOR(112, 101, 189); | ||||
|       break; | ||||
|     case NEO_3: | ||||
|       // #93D2F4 / hsv(55.84%, 39.75%, 95.69%)
 | ||||
|       state->layer_text       = "NEO: 3"; | ||||
|       state->target_lcd_color = LCD_COLOR(143, 102, 245); | ||||
|       break; | ||||
|     default: | ||||
|       // #EEEEEE / hsv(0%, 0%, 93%)
 | ||||
|       state->layer_text       = "NEO: 1"; | ||||
|       state->target_lcd_color = LCD_COLOR(0, 0, 255); | ||||
|       break; | ||||
|   } | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Morton Jonuschat
						Morton Jonuschat