* Add my own keymap to the list of available Redox keymaps. This keymap is a Colemak keymap, and is meant to be used on Mac OS. More information can be found in the readme. * Fix "macOS" typo and remove mention of the license. This directory inherits the project's license. * Add missing custom keycode. * Address feedback from PR review - Remove deprecated code - Remove RGB logic since it is overwritten by code running later.
		
			
				
	
	
		
			283 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			283 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include QMK_KEYBOARD_H
 | |
| 
 | |
| extern keymap_config_t keymap_config;
 | |
| 
 | |
| // Each layer gets a name for readability, which is then used in the keymap matrix below.
 | |
| // The underscores don't mean anything - you can have a layer called STUFF or any other name.
 | |
| // Layer names don't all need to be of the same length, obviously, and you can also skip them
 | |
| // entirely and just use numbers.
 | |
| #define _COLEMAK 0
 | |
| #define _SYMB 1
 | |
| #define _NAV 2
 | |
| #define _INTER 3
 | |
| #define _ADJUST 4
 | |
| 
 | |
| enum custom_keycodes {
 | |
| 	COLEMAK = SAFE_RANGE,
 | |
| 	SYMB,
 | |
| 	NAV,
 | |
| 	INTER,
 | |
| 	ADJUST,
 | |
| 	// These use process_record_user()
 | |
| 	M_BRACKET_LEFT,
 | |
| 	M_BRACKET_RIGHT,
 | |
| 	SHRUG,
 | |
| 	WAVE,
 | |
| 	YOSHI,
 | |
| 	THUMB_UP,
 | |
| 	NBSP
 | |
| };
 | |
| 
 | |
| // Fillers to make layering more clear
 | |
| #define KC_ KC_TRNS
 | |
| #define _______ KC_TRNS
 | |
| #define XXXXXXX KC_NO
 | |
| 
 | |
| // Make macros a bit simpler with this shortcut.
 | |
| #define TAP_ONCE(code)  \
 | |
|   register_code (code); \
 | |
|   unregister_code (code)
 | |
| 
 | |
| // Is shift being held? Let's store this in a bool.
 | |
| static bool shift_held = false;
 | |
| 
 | |
| bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 | |
| 	switch(keycode) {
 | |
| 		case SHRUG:
 | |
| 			if (record->event.pressed) {
 | |
| 				unicode_input_start(); register_hex(0xaf); unicode_input_finish();
 | |
| 				TAP_ONCE (KC_BSLS);
 | |
| 				register_code (KC_RSFT); TAP_ONCE (KC_MINS); TAP_ONCE (KC_9); unregister_code (KC_RSFT);
 | |
| 				unicode_input_start (); register_hex(0x30c4); unicode_input_finish();
 | |
| 				register_code (KC_RSFT); TAP_ONCE (KC_0); TAP_ONCE (KC_MINS); unregister_code (KC_RSFT);
 | |
| 				TAP_ONCE (KC_SLSH);
 | |
| 				unicode_input_start (); register_hex(0xaf); unicode_input_finish();
 | |
| 			}
 | |
| 			return false;
 | |
| 			break;
 | |
| 		case YOSHI:
 | |
| 			if (record->event.pressed) {
 | |
| 				SEND_STRING(":yellow_yoshi:");
 | |
| 			}
 | |
| 			return false;
 | |
| 			break;
 | |
| 		case THUMB_UP:
 | |
| 			if (record->event.pressed) {
 | |
| 				SEND_STRING(SS_LALT("D83D+DC4D"));
 | |
| 			}
 | |
| 			return false;
 | |
| 			break;
 | |
| 		case WAVE:
 | |
| 			if (record->event.pressed) {
 | |
| 				SEND_STRING(SS_LALT("D83D+DC4B"));
 | |
| 			}
 | |
| 			return false;
 | |
| 			break;
 | |
| 		case NBSP:
 | |
| 			if (record->event.pressed) {
 | |
| 				SEND_STRING(" ");
 | |
| 			}
 | |
| 			return false;
 | |
| 			break;
 | |
| 	case KC_LSFT:
 | |
| 		shift_held = record->event.pressed;
 | |
| 		return true;
 | |
| 		break;
 | |
| 	case KC_RSFT:
 | |
| 		shift_held = record->event.pressed;
 | |
| 		return true;
 | |
| 		break;
 | |
| 		case M_BRACKET_LEFT: {
 | |
| 			if (record->event.pressed) {
 | |
| 				if (shift_held) {
 | |
| 					unregister_code(KC_LSFT);
 | |
| 					unregister_code(KC_RSFT);
 | |
| 					register_code(KC_LBRC);
 | |
| 				} else {
 | |
| 					register_code(KC_LSFT);
 | |
| 					register_code(KC_9);
 | |
| 				}
 | |
| 			} else { // Release the key
 | |
| 				unregister_code(KC_LBRC);
 | |
| 				unregister_code(KC_LSFT);
 | |
| 				unregister_code(KC_RSFT);
 | |
| 				unregister_code(KC_9);
 | |
| 			}
 | |
| 			return false;
 | |
| 			break;
 | |
| 		}
 | |
| 		case M_BRACKET_RIGHT: {
 | |
| 			if (record->event.pressed) {
 | |
| 				if (shift_held) {
 | |
| 					unregister_code(KC_LSFT);
 | |
| 					unregister_code(KC_RSFT);
 | |
| 					register_code(KC_RBRC);
 | |
| 				} else {
 | |
| 					register_code(KC_LSFT);
 | |
| 					register_code(KC_0);
 | |
| 				}
 | |
| 			} else { // Release the key
 | |
| 				unregister_code(KC_RBRC);
 | |
| 				unregister_code(KC_LSFT);
 | |
| 				unregister_code(KC_RSFT);
 | |
| 				unregister_code(KC_0);
 | |
| 			}
 | |
| 			return false;
 | |
| 			break;
 | |
| 		}
 | |
| 	}
 | |
| 	return true;
 | |
| };
 | |
| 
 | |
| const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | |
| 
 | |
| /* COLEMAK
 | |
|  * ,------------------------------------------------.            ,------------------------------------------------.
 | |
|  * |   `  |   1  |   2  |   3  |   4  |   5  | Esc  |            | Exp  |   6  |   7  |   8  |   9  |   0  |   =  |
 | |
|  * |------+------+------+------+------+------+------|            |------+------+------+------+------+------+------|
 | |
|  * | Tab  |   Q  |   W  |   F  |   P  |   G  |  (   |            |   )  |   J  |   L  |   U  |   Y  |   ;  |   \  |
 | |
|  * |------+------+------+------+------+------+------|            |------+------+------+------+------+------+------|
 | |
|  * | Lay1 |   A  |   R  |   S  |   T  |   D  | Lay2 |            | Lay2 |   H  |   N  |   E  |   I  |   O  |'/Lay1|
 | |
|  * |------+------+------+------+------+------+------|            |------+------+------+------+------+------+------|
 | |
|  * | Shift|   Z  |   X  |   C  |   V  |   B  | Lay1 |            | Lay1 |   K  |   M  |   ,  |   .  |   /  |Shift |
 | |
|  * |------+------+------+------+------+------+------|            |------+------+------+------+------+------+------|
 | |
|  * | Lay3 | Ctrl | Hyper|  Alt | Cmd  |Bcksp | Ctrl |            |Enter |Space | Cmd  | Lay4 | Hyper| Ctrl | Lay3 |
 | |
|  * `------------------------------------------------'            `------------------------------------------------'
 | |
|  */
 | |
|   [_COLEMAK] = LAYOUT(
 | |
|   //,----+----+----+----+----+----+----.                                                         ,----+----+----+----+----+----+----.
 | |
| 	 KC_GRV     , KC_1  , KC_2  , KC_3  , KC_4  , KC_5  ,KC_ESC,                           LCTL(KC_DOWN), KC_6  , KC_7 ,   KC_8   , KC_9   , KC_0    , KC_EQL,
 | |
|   //|----+----+----+----+----+----+----|                                                         |----+----+----+----+----+----+----|
 | |
| 	 KC_TAB     , KC_Q  , KC_W  , KC_F  , KC_P  , KC_G  , M_BRACKET_LEFT,               M_BRACKET_RIGHT , KC_J  , KC_L  ,   KC_U  , KC_Y   , KC_SCLN , KC_BSLS,
 | |
|   //|----+----+----+----+----+----+----|                                                         |----+----+----+----+----+----+----|
 | |
| 	 MO(_SYMB)  , KC_A  , KC_R  , KC_S  , KC_T  , KC_D  ,TT(_NAV),                        TT(_NAV)    , KC_H  , KC_N  ,   KC_E  , KC_I   , KC_O    , LT(_SYMB,KC_QUOT),
 | |
|   //|----+----+----+----+----+----+----|                                                         |----+----+----+----+----+----+----|
 | |
| 	 KC_LSFT    , KC_Z  , KC_X  , KC_C  , KC_V  , KC_B  ,TT(_SYMB),                       TT(_SYMB)   , KC_K  , KC_M  , KC_COMM , KC_DOT , KC_SLSH , KC_RSFT,
 | |
|   //|----+----+----+----+----+----+----|                                                         |----+----+----+----+----+----+----|
 | |
| 	 MO(_INTER),KC_LCTL,KC_HYPR,KC_LALT,   KC_LCMD,   KC_BSPC,KC_LCTL,               KC_ENT,KC_SPC     ,    KC_RCMD    , TT(_ADJUST),KC_HYPR,KC_RCTL,MO(_INTER)
 | |
|   //`----+----+----+----+----+----+----'                                                         `----+----+----+----+----+----+----'
 | |
|   ),
 | |
| 
 | |
| /* Symbols
 | |
|  * ,------------------------------------------------.      ,------------------------------------------------.
 | |
|  * |      |      |      |      |      |      |      |      |      |      |      |      |      |      |      |
 | |
|  * |------+------+------+------+------+------+------|      |------+------+------+------+------+------+------|
 | |
|  * |      |   1  |   2  |   3  |   4  |   5  |      |      |      |   6  |   7  |   8  |   9  |      |      |
 | |
|  * |------+------+------+------+------+------+------|      |------+------+------+------+------+------+------|
 | |
|  * |      |   !  |   @  |   #  |   $  |   %  |      |      |      |   ^  |   &  |   *  |   -  |   _  |      |
 | |
|  * |------+------+------+------+------+------+------|      |------+------+------+------+------+------+------|
 | |
|  * |      |      |      |      |      |      |      |      |      |      |      |      |      |      |      |
 | |
|  * |------+------+------+------+------+------+------|      |------+------+------+------+------+------+------|
 | |
|  * |      |      |      |      |      |      |      |      |      |      |      |      |      |      |      |
 | |
|  * `------------------------------------------------'      `------------------------------------------------'
 | |
|  */
 | |
| 
 | |
|   [_SYMB] = LAYOUT(
 | |
| 	_______, _______, _______, _______, _______, _______, _______,                             _______, _______, _______, _______, _______, _______, _______,
 | |
| 	_______, KC_1   , KC_2   , KC_3   , KC_4   , KC_5   , KC_LCBR,                             KC_RCBR, KC_6   , KC_7   ,   KC_8 , KC_9   , KC_0   , _______,
 | |
| 	_______, KC_EXLM, KC_AT  , KC_HASH, KC_DLR , KC_PERC, _______,                             _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_MINS, KC_UNDS, _______,
 | |
| 	_______, _______, _______, _______, _______, _______, _______,                             _______, _______, _______, _______, _______, _______, _______,
 | |
| 	_______, _______, _______, _______, _______, _______, _______,                             _______, _______, _______, _______, _______, _______, _______
 | |
|   ),
 | |
| 
 | |
| /* Navigation
 | |
|  * ,------------------------------------------------.      ,------------------------------------------------.
 | |
|  * |      |      |      |      |      |      |      |      |      |      |      |      |      |      |      |
 | |
|  * |------+------+------+------+------+------+------|      |------+------+------+------+------+------+------|
 | |
|  * |      |      |      |      |      |      |      |      |      |      |      |      |      |      |      |
 | |
|  * |------+------+------+------+------+------+------|      |------+------+------+------+------+------+------|
 | |
|  * |      |      |      |VOLDOW|VOL UP| MUTE |      |      |      | LEFT | DOWN |  UP  |RIGHT |      |      |
 | |
|  * |------+------+------+------+------+------+------|      |------+------+------+------+------+------+------|
 | |
|  * |      |      |      |      |      |      |      |      |      |      |      |      |      |      |      |
 | |
|  * |------+------+------+------+------+------+------|      |------+------+------+------+------+------+------|
 | |
|  * |      |      |      |      |      |      |      |      |      |      |      |      |      |      |      |
 | |
|  * `------------------------------------------------'      `------------------------------------------------'
 | |
|  */
 | |
|   [_NAV] = LAYOUT(
 | |
| 	_______, _______, _______, _______, _______, _______, _______,                            _______, _______, _______, _______, _______, _______, _______,
 | |
| 	XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,                            _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
 | |
| 	XXXXXXX, XXXXXXX, KC_VOLD, KC_VOLU, KC_MUTE, XXXXXXX, _______,                            _______, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP  , KC_RIGHT, XXXXXXX,
 | |
| 	XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,                            _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
 | |
| 	_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,                            _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, _______
 | |
|   ),
 | |
| 
 | |
| /* i18n + emoji
 | |
| * ,------------------------------------------------.      ,------------------------------------------------.
 | |
| * |      |      |      |      |      |      |      |      |      |      |      |      |      |      |      |
 | |
| * |------+------+------+------+------+------+------|      |------+------+------+------+------+------+------|
 | |
| * |      |  à   | 👋   |      |      |      |      |      |      |      |  ü   |  è   | YOSHI|   ö  |      |
 | |
| * |------+------+------+------+------+------+------|      |------+------+------+------+------+------+------|
 | |
| * |      |  á   |      |SHRUG |  👍  |      |      |      |      |      |   ú  |   é  |   í  |   ó  |      |
 | |
| * |------+------+------+------+------+------+------|      |------+------+------+------+------+------+------|
 | |
| * |      |  â   |      |  ç   |      |      |      |      |      |      |   ű  |   ê  |      |  ő   |      |
 | |
| * |------+------+------+------+------+------+------|      |------+------+------+------+------+------+------|
 | |
| * |      |      |      |      |      |      |      |      |      |      |      |      |      |      |      |
 | |
| * `------------------------------------------------'      `------------------------------------------------'
 | |
| */
 | |
|   [_INTER] = LAYOUT(
 | |
| 	XXXXXXX, _______   , _______, _______   , _______ , _______, _______,                            _______, _______, _______, _______, _______, _______, _______,
 | |
| 	XXXXXXX, UC(0x00E0), WAVE   , XXXXXXX   , XXXXXXX , XXXXXXX, _______,                            _______, XXXXXXX, UC(0x00FC), UC(0x00E8), YOSHI, UC(0x00F6), XXXXXXX,
 | |
| 	_______, UC(0x00E1), XXXXXXX, SHRUG     , THUMB_UP, XXXXXXX, _______,                            _______, XXXXXXX, UC(0x00F9), UC(0x00E9), UC(0x00ED)  , UC(0x00F3), _______,
 | |
| 	XXXXXXX, UC(0x00E2), XXXXXXX, UC(0x00E7), XXXXXXX , XXXXXXX, _______,                            _______, XXXXXXX, UC(0x0171), UC(0x00EA), XXXXXXX, UC(0x0151), XXXXXXX,
 | |
| 	_______, XXXXXXX   , XXXXXXX, XXXXXXX   , XXXXXXX , XXXXXXX, _______,                            _______, NBSP, XXXXXXX, _______, XXXXXXX, XXXXXXX, _______
 | |
|   ),
 | |
| 
 | |
| /* Adjust keyboard settings
 | |
|  * ,------------------------------------------------.      ,------------------------------------------------.
 | |
|  * |      |      |      |      |      |      |      |      |      |      |      |      |      |      |      |
 | |
|  * |------+------+------+------+------+------+------|      |------+------+------+------+------+------+------|
 | |
|  * |      |      |      |      |      |      |      |      |      |      |      |      |      |      |      |
 | |
|  * |------+------+------+------+------+------+------|      |------+------+------+------+------+------+------|
 | |
|  * |      |      | RGB- | RGB+ |RGB ON|      |      |      |      |      | RESET| DEBUG|AUD ON|      |      |
 | |
|  * |------+------+------+------+------+------+------|      |------+------+------+------+------+------+------|
 | |
|  * |      |      |      |      |      |      |      |      |      |      |      |      |      |      |      |
 | |
|  * |------+------+------+------+------+------+------|      |------+------+------+------+------+------+------|
 | |
|  * |      |      |      |      |      |      |      |      |      |      |      |      |      |      |      |
 | |
|  * `------------------------------------------------'      `------------------------------------------------'
 | |
|  */
 | |
|   [_ADJUST] = LAYOUT(
 | |
| 	XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                            XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
 | |
| 	XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                            XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
 | |
| 	_______, XXXXXXX, RGB_VAD, RGB_VAI, RGB_TOG, XXXXXXX, _______,                            _______, XXXXXXX, RESET  , DEBUG  , AU_TOG , XXXXXXX, _______,
 | |
| 	XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,                            _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
 | |
| 	_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,                            _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, _______
 | |
|   )
 | |
| 
 | |
| };
 | |
| 
 | |
| #ifdef AUDIO_ENABLE
 | |
| float tone_colemak[][2]     = SONG(ZELDA_TREASURE);
 | |
| #endif
 | |
| 
 | |
| void persistent_default_layer_set(uint16_t default_layer) {
 | |
| 	eeconfig_update_default_layer(default_layer);
 | |
| 	default_layer_set(default_layer);
 | |
| }
 | |
| 
 | |
| // Set unicode in Mac OS.
 | |
| void matrix_init_user(void) {
 | |
| 	set_unicode_input_mode(UC_OSX);
 | |
| };
 | |
| 
 | |
| // Change LED colors depending on the layer.
 | |
| uint32_t layer_state_set_user(uint32_t state) {
 | |
| 	switch (biton32(state)) {
 | |
| 		case _SYMB:
 | |
| 			rgblight_setrgb_orange();
 | |
| 			break;
 | |
| 		case _NAV:
 | |
| 			rgblight_setrgb_springgreen();
 | |
| 			break;
 | |
| 		case _INTER:
 | |
| 			rgblight_setrgb_teal();
 | |
| 			break;
 | |
| 		case _ADJUST:
 | |
| 			rgblight_setrgb_red();
 | |
| 			break;
 | |
| 		default: //  for any other layers, or the default layer
 | |
| 			rgblight_setrgb_yellow();
 | |
| 			break;
 | |
| 	}
 | |
| 	return state;
 | |
| };
 |