]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/zinc/keymaps/default/keymap.c
Merge branch 'master' of https://github.com/qmk/qmk_firmware
[qmk_firmware.git] / keyboards / zinc / keymaps / default / keymap.c
1 #include QMK_KEYBOARD_H
2
3 extern keymap_config_t keymap_config;
4
5 #ifdef RGBLIGHT_ENABLE
6 //Following line allows macro to read current RGB settings
7 extern rgblight_config_t rgblight_config;
8 rgblight_config_t RGB_current_config;
9 #endif
10
11 extern uint8_t is_master;
12
13 // Each layer gets a name for readability, which is then used in the keymap matrix below.
14 // The underscores don't mean anything - you can have a layer called STUFF or any other name.
15 // Layer names don't all need to be of the same length, obviously, and you can also skip them
16 // entirely and just use numbers.
17 enum layer_number {
18     _QWERTY = 0,
19     _COLEMAK,
20     _DVORAK,
21     _LOWER,
22     _RAISE,
23     _ADJUST
24 };
25
26 enum custom_keycodes {
27   QWERTY = SAFE_RANGE,
28   COLEMAK,
29   DVORAK,
30   LOWER,
31   RAISE,
32   ADJUST,
33   BACKLIT,
34   KANA,
35   EISU,
36   RGBRST
37 };
38
39 enum macro_keycodes {
40   KC_SAMPLEMACRO,
41 };
42
43 //Macros
44 #define M_SAMPLE M(KC_SAMPLEMACRO)
45
46 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { \
47   /* Qwerty
48    * ,-----------------------------------------.             ,-----------------------------------------.
49    * | Tab  |   Q  |   W  |   E  |   R  |   T  |             |   Y  |   U  |   I  |   O  |   P  | Bksp |
50    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
51    * | Ctrl |   A  |   S  |   D  |   F  |   G  |             |   H  |   J  |   K  |   L  |   ;  |  '   |
52    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
53    * | Shift|   Z  |   X  |   C  |   V  |   B  |             |   N  |   M  |   ,  |   .  |   /  |Enter |
54    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
55    * | Esc  |ADJUST| Win  | Alt  |LOWER |Space |             | Space| RAISE| Left | Down |  Up  | Right|
56    * `-----------------------------------------'             `-----------------------------------------'
57    */
58 [_QWERTY] = LAYOUT_ortho_4x12(
59       KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,                      KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC, \
60       KC_LCTL, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,                      KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, \
61       KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,                      KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT , \
62       KC_ESC,  ADJUST,  KC_LGUI, KC_LALT, LOWER,   KC_SPC,                    KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT \
63       ),
64
65   /* Colemak
66    * ,-----------------------------------------.             ,-----------------------------------------.
67    * | Tab  |   Q  |   W  |   F  |   P  |   G  |             |   J  |   L  |   U  |   Y  |   ;  | Bksp |
68    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
69    * | Ctrl |   A  |   R  |   S  |   T  |   D  |             |   H  |   N  |   E  |   I  |   O  |  '   |
70    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
71    * | Shift|   Z  |   X  |   C  |   V  |   B  |             |   K  |   M  |   ,  |   .  |   /  |Enter |
72    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
73    * | Esc  |ADJUST| Alt  | Win  |LOWER |Space |             | Space| RAISE| Left | Down |  Up  | Right|
74    * `-----------------------------------------'             `-----------------------------------------'
75    */
76   [_COLEMAK] = LAYOUT_ortho_4x12( \
77       KC_TAB,  KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,                      KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_BSPC, \
78       KC_LCTL, KC_A,    KC_R,    KC_S,    KC_T,    KC_D,                      KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    KC_QUOT, \
79       KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,                      KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT , \
80       KC_ESC,  ADJUST,  KC_LALT, KC_LGUI, LOWER,   KC_SPC,                    KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT \
81       ),
82
83   /* Dvorak
84    * ,-----------------------------------------.             ,-----------------------------------------.
85    * | Tab  |   '  |   ,  |   .  |   P  |   Y  |             |   F  |   G  |   C  |   R  |   L  | Del  |
86    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
87    * | Ctrl |   A  |   O  |   E  |   U  |   I  |             |   D  |   H  |   T  |   N  |   S  |  /   |
88    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
89    * | Shift|   ;  |   Q  |   J  |   K  |   X  |             |   B  |   M  |   W  |   V  |   Z  |Enter |
90    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
91    * | Esc  |ADJUST| Alt  | Win  |LOWER |Space |             | Space| RAISE| Left | Down |  Up  | Right|
92    * `-----------------------------------------'             `-----------------------------------------'
93    */
94   [_DVORAK] = LAYOUT_ortho_4x12( \
95       KC_TAB,  KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,                      KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    KC_DEL, \
96       KC_LCTL, KC_A,    KC_O,    KC_E,    KC_U,    KC_I,                      KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_SLSH, \
97       KC_LSFT, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,                      KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    KC_ENT , \
98       KC_ESC,  ADJUST,  KC_LALT, KC_LGUI, LOWER,   KC_SPC,                    KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT \
99       ),
100
101   /* Lower
102    * ,-----------------------------------------.             ,-----------------------------------------.
103    * |   ~  |   !  |   @  |   #  |   $  |   %  |             |   ^  |   &  |   *  |   (  |   )  |      |
104    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
105    * |      |      |      |      |      |      |             |   -  |   _  |   +  |   {  |   }  |  |   |
106    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
107    * |      |      |      |      |      |      |             |      |      |      | Home | End  |      |
108    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
109    * |      |      |      |      |      |      |             |      |      | Next | Vol- | Vol+ | Play |
110    * `-----------------------------------------'             `-----------------------------------------'
111    */
112   [_LOWER] = LAYOUT_ortho_4x12( \
113       KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC,                   KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, \
114       _______, _______, _______, _______, _______, _______,                   KC_MINS, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
115       _______, _______, _______, _______, _______, _______,                   _______, _______, _______, KC_HOME, KC_END,  _______, \
116       _______, _______, _______, _______, _______, _______,                   _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
117       ),
118
119   /* Raise
120    * ,-----------------------------------------.             ,-----------------------------------------.
121    * |   `  |   1  |   2  |   3  |   4  |   5  |             |   6  |   7  |   8  |   9  |   0  | Del  |
122    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
123    * |      |  F1  |  F2  |  F3  |  F4  |  F5  |             |  F6  |   -  |   =  |   [  |   ]  |  \   |
124    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
125    * |      |  F7  |  F8  |  F9  |  F10 |  F11 |             |  F12 |      |      |      |      |
126    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
127    * |      |      |      |      |      |      |             |      |      | Next | Vol- | Vol+ | Play |
128    * `-----------------------------------------'             `-----------------------------------------'
129    */
130   [_RAISE] = LAYOUT_ortho_4x12( \
131       KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,                      KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_DEL, \
132       _______, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,                     KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS, \
133       _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,                    KC_F12,  _______, _______, _______, _______, _______, \
134       _______, _______, _______, _______, _______, _______,                   _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
135       ),
136
137   /* Adjust (Lower + Raise)
138    * ,-----------------------------------------.             ,-----------------------------------------.
139    * |      | Reset|RGBRST|Aud on|Audoff|      |             |      |Qwerty|Colemk|Dvorak|      | Ins  |
140    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
141    * |      |RGB ON| HUE+ | SAT+ | VAL+ | Mac  |             | Win  |  -   |   =  |Print |ScLock|Pause |
142    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
143    * |      | MODE | HUE- | SAT- | VAL- |      |             |      |      |      |      |      |      |
144    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
145    * |      |      |      | EISU | EISU | EISU |             | KANA | KANA | Home |PageDn|PageUp| End  |
146    * `-----------------------------------------'             `-----------------------------------------'
147    */
148     [_ADJUST] =  LAYOUT_ortho_4x12( \
149       _______, RESET,   RGBRST,  _______, _______, _______,                   _______, QWERTY,  COLEMAK, DVORAK,  _______, KC_INS, \
150       _______, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, AG_NORM,                   AG_SWAP, KC_MINS, KC_EQL,  KC_PSCR, KC_SLCK, KC_PAUS,\
151       _______, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, _______,                   _______, _______, _______, _______, _______, _______,\
152       _______, _______, _______, EISU,    EISU,    EISU,                      KANA,    KANA,    KC_HOME, KC_PGDN, KC_PGUP, KC_END\
153       )
154 };
155
156 // define variables for reactive RGB
157 bool TOG_STATUS = false;  
158
159 // Setting ADJUST layer RGB back to default
160 void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
161   if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
162     #ifdef RGBLIGHT_ENABLE
163       rgblight_mode_noeeprom(RGB_current_config.mode);
164     #endif
165     layer_on(layer3);
166   } else {
167     layer_off(layer3);
168   }
169 }
170
171 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
172   switch (keycode) {
173     case QWERTY:
174       if (record->event.pressed) {
175         set_single_persistent_default_layer(_QWERTY);
176       }
177       return false;
178       break;
179     case COLEMAK:
180       if (record->event.pressed) {
181         set_single_persistent_default_layer(_COLEMAK);
182       }
183       return false;
184       break;
185     case DVORAK:
186       if (record->event.pressed) {
187         set_single_persistent_default_layer(_DVORAK);
188       }
189       return false;
190       break;
191
192     case LOWER:
193       if (record->event.pressed) {
194           //not sure how to have keyboard check mode and set it to a variable, so my work around
195           //uses another variable that would be set to true after the first time a reactive key is pressed.
196         if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false
197         } else {
198           TOG_STATUS = !TOG_STATUS;
199           #ifdef RGBLIGHT_ENABLE
200            rgblight_mode_noeeprom(16);
201           #endif
202         }
203         layer_on(_LOWER);
204         update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
205       } else {
206         #ifdef RGBLIGHT_ENABLE
207           rgblight_mode_noeeprom(RGB_current_config.mode);   // revert RGB to initial mode prior to RGB mode change
208         #endif
209         TOG_STATUS = false;
210         layer_off(_LOWER);
211         update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
212       }
213       return false;
214       break;
215   
216     case RAISE:
217       if (record->event.pressed) {
218         //not sure how to have keyboard check mode and set it to a variable, so my work around
219         //uses another variable that would be set to true after the first time a reactive key is pressed.
220         if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false
221         } else {
222           TOG_STATUS = !TOG_STATUS;
223           #ifdef RGBLIGHT_ENABLE
224             rgblight_mode_noeeprom(15);
225           #endif
226         }
227         layer_on(_RAISE);
228         update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
229       } else {
230         #ifdef RGBLIGHT_ENABLE
231           rgblight_mode_noeeprom(RGB_current_config.mode);  // revert RGB to initial mode prior to RGB mode change
232         #endif
233         layer_off(_RAISE);
234         TOG_STATUS = false;
235         update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
236       }
237       return false;
238       break;
239
240     case ADJUST:
241         if (record->event.pressed) {
242           layer_on(_ADJUST);
243         } else {
244           layer_off(_ADJUST);
245         }
246         return false;
247         break;
248       //led operations - RGB mode change now updates the RGB_current_mode to allow the right RGB mode to be set after reactive keys are released
249     case RGB_MOD:
250       #ifdef RGBLIGHT_ENABLE
251         if (record->event.pressed) {
252           rgblight_mode_noeeprom(RGB_current_config.mode);
253           rgblight_step();
254           RGB_current_config.mode = rgblight_config.mode;
255         }
256       #endif
257       return false;
258       break;
259
260     case EISU:
261       if (record->event.pressed) {
262         if(keymap_config.swap_lalt_lgui==false){
263           register_code(KC_LANG2);
264         }else{
265           SEND_STRING(SS_LALT("`"));
266         }
267       } else {
268         unregister_code(KC_LANG2);
269       }
270       return false;
271       break;
272     case KANA:
273       if (record->event.pressed) {
274         if(keymap_config.swap_lalt_lgui==false){
275           register_code(KC_LANG1);
276         }else{
277          SEND_STRING(SS_LALT("`"));
278         }
279       } else {
280         unregister_code(KC_LANG1);
281       }
282       return false;
283       break;
284
285     case RGBRST:
286       #ifdef RGBLIGHT_ENABLE
287         if (record->event.pressed) {
288           eeconfig_update_rgblight_default();
289           rgblight_enable();
290           RGB_current_config = rgblight_config;
291         }
292       #endif
293       break;
294   }
295   return true;
296 }
297
298
299 void matrix_init_user(void) {
300     #ifdef RGBLIGHT_ENABLE
301       rgblight_init();
302       RGB_current_config = rgblight_config;
303     #endif
304 }
305
306