|  |  | @ -3,42 +3,82 @@ | 
			
		
	
		
		
			
				
					
					|  |  |  | #include "action_layer.h" |  |  |  | #include "action_layer.h" | 
			
		
	
		
		
			
				
					
					|  |  |  | #include "version.h" |  |  |  | #include "version.h" | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | #define BASE 0 // default layer
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | #include "keymap_german.h" |  |  |  | //#define FUNC 1 // function, media, arrow keys
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | //#define NUMP 2 // numpad
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | #include "keymap_nordic.h" |  |  |  | //#define INTL 3 // international symbols
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | enum custom_keycodes { |  |  |  | enum custom_keycodes { | 
			
		
	
		
		
			
				
					
					|  |  |  |   PLACEHOLDER = SAFE_RANGE, // can always be here
 |  |  |  |   PLACEHOLDER = SAFE_RANGE, // can always be here
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   EPRM, |  |  |  |   EPRM, | 
			
		
	
		
		
			
				
					
					|  |  |  |   VRSN, |  |  |  |   VRSN, | 
			
		
	
		
		
			
				
					
					|  |  |  |   RGB_SLD, |  |  |  |   RGB_SLD | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |    |  |  |  |  | 
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | }; |  |  |  | }; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |  |  |  | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | /* Keymap 0: Basic layer
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   [0] = KEYMAP(KC_ESCAPE,KC_1,KC_2,KC_3,KC_4,KC_5,KC_MINUS,KC_DELETE,KC_Q,KC_W,KC_E,KC_R,KC_T,KC_HOME,KC_TAB,KC_A,KC_S,KC_D,KC_F,KC_G,KC_LSPO,KC_Z,KC_X,KC_C,KC_V,KC_B,KC_END,CTL_T(KC_LGUI),KC_APPLICATION,KC_GRAVE,KC_QUOTE,KC_BSLASH,KC_AUDIO_VOL_DOWN,KC_AUDIO_VOL_UP,KC_AUDIO_MUTE,ALT_T(KC_SPACE),MO(1),KC_RALT,KC_KP_PLUS,KC_6,KC_7,KC_8,KC_9,KC_0,KC_PSCREEN,KC_PGUP,KC_Y,KC_U,KC_I,KC_O,KC_P,KC_BSPACE,KC_H,KC_J,KC_K,KC_L,KC_SCOLON,KC_ENTER,KC_PGDOWN,KC_N,KC_M,KC_COMMA,KC_DOT,KC_KP_SLASH,KC_RSPC,KC_LBRACKET,KC_RBRACKET,KC_TRANSPARENT,KC_APPLICATION,CTL_T(KC_RGUI),KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_RALT,MO(1),ALT_T(KC_SPACE)), |  |  |  |  * | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  * ,--------------------------------------------------.           ,--------------------------------------------------. | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   [1] = KEYMAP(M(0),KC_F1,KC_F2,KC_F3,KC_F4,KC_F5,KC_F11,KC_PAUSE,KC_TRANSPARENT,KC_TRANSPARENT,KC_UP,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_LEFT,KC_DOWN,KC_RIGHT,KC_TRANSPARENT,KC_TRANSPARENT,KC_MEDIA_PREV_TRACK,KC_MEDIA_STOP,KC_MEDIA_PLAY_PAUSE,KC_MEDIA_NEXT_TRACK,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_F12,KC_F6,KC_F7,KC_F8,KC_F9,KC_F10,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_INSERT,KC_LEFT,KC_DOWN,KC_UP,KC_RIGHT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT), |  |  |  |  * | ESC    |   1  |   2  |   3  |   4  |   5  |   -  |           |  =   |   6  |   7  |   8  |   9  |   0  | SYSREQ | | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------| | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  * | DEL    |   Q  |   W  |   E  |   R  |   T  | HOME |           | PGUP |   Y  |   U  |   I  |   O  |   P  |  BKSP  | | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------| | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  * | TAB    |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   ;  |  ENTER | | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  * |--------+------+------+------+------+------|  END |           | PGDN |------+------+------+------+------+--------| | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  * | (/LSFT |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |   /  | )/RSFT | | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------' | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  * |LGUI/LCTRL|MENU|   `  |   '  | CAPS |                                       |   [  |   ]  |   \  |MENU|RGUI/RCTRL| | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  * `------------------------------------'                                       `------------------------------------' | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  *                                        ,-------------.       ,-------------. | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  *                                        | VOL- | VOL+ |       | BRT- | BRT+ | | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  *                                 ,------|------|------|       |------+------+------. | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  *                                 | ALT/ |      | MUTE |       | NUM  |      | ALT/ | | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  *                                 | SPC  | LAY1 |------|       |------| LAY1 | SPC  | | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  *                                 |      |      | LAY3 |       | LAY2 |      |      | | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  *                                 `--------------------'       `--------------------' | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | // If it accepts an argument (i.e, is a function), it doesn't need KC_.
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | // Otherwise, it needs KC_*
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | [BASE] = KEYMAP(  // layer 0 : default
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         // left hand
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         KC_ESC,         KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_MINS, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         KC_DEL,         KC_Q,   KC_W,   KC_E,   KC_R,   KC_T,   KC_HOME, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         KC_TAB,         KC_A,   KC_S,   KC_D,   KC_F,   KC_G, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         KC_LSPO,        KC_Z,   KC_X,   KC_C,   KC_V,   KC_B,   KC_END, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         KC_LCTL,        KC_LGUI,KC_GRV, KC_QUOT,KC_CAPS, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                                                 KC_VOLD, KC_VOLU, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                                                             KC_MUTE, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                                 ALT_T(KC_SPC),  MO(BASE),   MO(BASE), | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         // right hand
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             KC_EQL,     KC_6,   KC_7,       KC_8,       KC_9,       KC_0,       KC_SYSREQ, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             KC_PGUP,    KC_Y,   KC_U,       KC_I,       KC_O,       KC_P,       KC_BSPC, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                         KC_H,   KC_J,       KC_K,       KC_L,       KC_SCLN,    KC_ENTER, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             KC_PGDN,    KC_N,   KC_M,       KC_COMM,    KC_DOT,     KC_SLSH,    KC_RSPC, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                                 KC_LBRC,    KC_RBRC,    KC_BSLS,    KC_RGUI,    KC_RCTL, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             KC_VOLD, KC_VOLU, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             KC_NLCK, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             TT(BASE),   MO(BASE),   ALT_T(KC_SPC) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     ), | 
			
		
	
		
		
			
				
					
					|  |  |  | }; |  |  |  | }; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | const uint16_t PROGMEM fn_actions[] = { |  |  |  | const uint16_t PROGMEM fn_actions[] = { | 
			
		
	
		
		
			
				
					
					|  |  |  |   [1] = ACTION_LAYER_TAP_TOGGLE(1) |  |  |  |     [1] = ACTION_LAYER_TAP_TOGGLE(BASE)                // FN1 - Momentary Layer 1 (Function Keys)
 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | }; |  |  |  | }; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | // leaving this in place for compatibilty with old keymaps cloned and re-compiled.
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) |  |  |  | const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) | 
			
		
	
		
		
			
				
					
					|  |  |  | { |  |  |  | { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   // MACRODOWN only works in this function
 | 
			
		
	
		
		
			
				
					
					|  |  |  |       switch(id) { |  |  |  |       switch(id) { | 
			
		
	
		
		
			
				
					
					|  |  |  |         case 0: |  |  |  |         case 0: | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (record->event.pressed) { |  |  |  |         if (record->event.pressed) { | 
			
		
	
		
		
			
				
					
					|  |  |  |           SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); |  |  |  |           SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |         break; |  |  |  |         break; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         case 1: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if (record->event.pressed) { // For resetting EEPROM
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |           eeconfig_init(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         break; | 
			
		
	
		
		
			
				
					
					|  |  |  |       } |  |  |  |       } | 
			
		
	
		
		
			
				
					
					|  |  |  |     return MACRO_NONE; |  |  |  |     return MACRO_NONE; | 
			
		
	
		
		
			
				
					
					|  |  |  | }; |  |  |  | }; | 
			
		
	
	
		
		
			
				
					|  |  | @ -60,15 +100,23 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { | 
			
		
	
		
		
			
				
					
					|  |  |  |       break; |  |  |  |       break; | 
			
		
	
		
		
			
				
					
					|  |  |  |     case RGB_SLD: |  |  |  |     case RGB_SLD: | 
			
		
	
		
		
			
				
					
					|  |  |  |       if (record->event.pressed) { |  |  |  |       if (record->event.pressed) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         #ifdef RGBLIGHT_ENABLE | 
			
		
	
		
		
			
				
					
					|  |  |  |           rgblight_mode(1); |  |  |  |           rgblight_mode(1); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         #endif | 
			
		
	
		
		
			
				
					
					|  |  |  |       } |  |  |  |       } | 
			
		
	
		
		
			
				
					
					|  |  |  |       return false; |  |  |  |       return false; | 
			
		
	
		
		
			
				
					
					|  |  |  |       break; |  |  |  |       break; | 
			
		
	
		
		
			
				
					
					|  |  |  |      |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   } |  |  |  |   } | 
			
		
	
		
		
			
				
					
					|  |  |  |   return true; |  |  |  |   return true; | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | // 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) { |  |  |  | void matrix_scan_user(void) { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     uint8_t layer = biton32(layer_state); |  |  |  |     uint8_t layer = biton32(layer_state); | 
			
		
	
	
		
		
			
				
					|  |  | @ -78,33 +126,15 @@ void matrix_scan_user(void) { | 
			
		
	
		
		
			
				
					
					|  |  |  |     ergodox_right_led_2_off(); |  |  |  |     ergodox_right_led_2_off(); | 
			
		
	
		
		
			
				
					
					|  |  |  |     ergodox_right_led_3_off(); |  |  |  |     ergodox_right_led_3_off(); | 
			
		
	
		
		
			
				
					
					|  |  |  |     switch (layer) { |  |  |  |     switch (layer) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       // TODO: Make this relevant to the ErgoDox EZ.
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         case 1: |  |  |  |         case 1: | 
			
		
	
		
		
			
				
					
					|  |  |  |             ergodox_right_led_1_on(); |  |  |  |             ergodox_right_led_1_on(); | 
			
		
	
		
		
			
				
					
					|  |  |  |             break; |  |  |  |             break; | 
			
		
	
		
		
			
				
					
					|  |  |  |         case 2: |  |  |  |         case 2: | 
			
		
	
		
		
			
				
					
					|  |  |  |             ergodox_right_led_2_on(); |  |  |  |             ergodox_right_led_2_on(); | 
			
		
	
		
		
			
				
					
					|  |  |  |             break; |  |  |  |             break; | 
			
		
	
		
		
			
				
					
					|  |  |  |         case 3: |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             ergodox_right_led_3_on(); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             break; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         case 4: |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             ergodox_right_led_1_on(); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             ergodox_right_led_2_on(); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             break; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         case 5: |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             ergodox_right_led_1_on(); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             ergodox_right_led_3_on(); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             break; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         case 6: |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             ergodox_right_led_2_on(); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             ergodox_right_led_3_on(); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             break; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         case 7: |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             ergodox_right_led_1_on(); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             ergodox_right_led_2_on(); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             ergodox_right_led_3_on(); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             break; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         default: |  |  |  |         default: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             // none
 | 
			
		
	
		
		
			
				
					
					|  |  |  |             break; |  |  |  |             break; | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | 
 |