]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/xd75/keymaps/tdl-jturner/keymap.c
Update keyboards/kbdfans/kbd67/readme.md
[qmk_firmware.git] / keyboards / xd75 / keymaps / tdl-jturner / keymap.c
1 /* Copyright 2018 Josh Turner (/u/tdl-jturner)
2  *
3  * This program is free software: you can redistribute it and/or modify
4  * it under the terms of the GNU General Public License as published by
5  * the Free Software Foundation, either version 2 of the License, or
6  * (at your option) any later version.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
15  */
16 #include "xd75.h"
17
18 enum xd75_layers {
19   _QWERTY,
20   _COLEMAK,
21   _LYMD,
22   _LYFK,
23   _LYMED,
24   _LYNUM,
25   _LYNAV,
26   _LYMOS,
27   _LYSYS,
28   _LYLT
29 };
30
31 enum xd75_keycodes {
32   HELP = SAFE_RANGE,
33   KC_BSDEL,
34   KC_FBSLH,
35   KC_DOTQ,
36   KC_CPIPE,
37   COLEMAK,
38   QWERTY,
39   KC_LYDEF
40 };
41
42 //Tap Dance Declarations
43 enum {
44   TD_LOCK_SLEEP,
45   TD_ABK,
46   TD_BRC,
47   TD_CBR,
48 };
49
50 //Tap Dance Definitions
51 qk_tap_dance_action_t tap_dance_actions[] = {
52   //Tap once for Esc, twice for Caps Lock
53   [TD_LOCK_SLEEP]  = ACTION_TAP_DANCE_DOUBLE(LGUI(KC_L), KC_SLEP),
54   [TD_ABK] = ACTION_TAP_DANCE_DOUBLE(KC_LABK,KC_RABK),
55   [TD_BRC] = ACTION_TAP_DANCE_DOUBLE(KC_LBRC,KC_RBRC),
56   [TD_CBR] = ACTION_TAP_DANCE_DOUBLE(KC_LCBR,KC_RCBR)
57 // Other declarations would go here, separated by commas, if you have them
58 };
59
60 //remaps for pretty layouts
61 #define ________ KC_TRNS
62 #define ___XX___ KC_NO
63
64
65 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
66
67  //QWERY - Base Layer
68  [_QWERTY] = {
69          {KC_GRV ,  KC_1  ,  KC_2  ,  KC_3  ,  KC_4  ,  KC_5  ,________  ,________,________,  KC_6  ,  KC_7  ,  KC_8  ,  KC_9  ,  KC_0  ,KC_MINUS},
70          {KC_TAB ,  KC_Q  ,  KC_W  ,  KC_E  ,  KC_R  ,  KC_T  ,________  ,________,________,  KC_Y  ,  KC_U  ,  KC_I  ,  KC_O  ,  KC_P  ,KC_BSDEL}, //Custom shift Codes. Backspace ^ Delete
71 {LT(_LYMD,KC_ESC),  KC_A  ,  KC_S  ,  KC_D  ,  KC_F  ,  KC_G  ,________  ,________,________,  KC_H  ,  KC_J  ,  KC_K  ,  KC_L  ,KC_SCLN ,KC_QUOT },
72          {KC_LSPO,  KC_Z  ,  KC_X  ,  KC_C  ,  KC_V  ,  KC_B  ,________  ,________,________,  KC_N  ,  KC_M  ,KC_CPIPE,KC_DOTQ ,KC_FBSLH,KC_RSPC }, // Custom Shift Codes. ,^| .^?  /^|
73       { KC_MEH ,KC_LCTL ,KC_LGUI ,KC_LALT ,MO(_LYNUM), KC_SPC ,________  ,________,________, KC_ENT ,MO(_LYNAV),TD(TD_CBR) ,TD(TD_BRC),TD(TD_ABK),TD(TD_LOCK_SLEEP)}
74
75  },
76
77  //_COLEMAK - Colemak Layout - Identical to qwerty layer except for the layout changes
78  [_COLEMAK] = {
79          {KC_GRV ,  KC_1  ,  KC_2  ,  KC_3  ,  KC_4  ,  KC_5  ,________  ,________,________,  KC_6  ,  KC_7  ,  KC_8  ,  KC_9  ,  KC_0  ,KC_MINUS},
80          {KC_TAB ,  KC_Q  ,  KC_W  ,  KC_F  ,  KC_P  ,  KC_G  ,________  ,________,________,  KC_J  ,  KC_L  ,  KC_U  ,  KC_Y  ,KC_SCLN ,KC_BSDEL}, //Custom shift Codes. Backspace ^ Delete
81 {LT(_LYMD,KC_ESC),  KC_A  ,  KC_R  ,  KC_S  ,  KC_T  ,  KC_D  ,________  ,________,________,  KC_H  ,  KC_N  ,  KC_E  ,  KC_I  ,  KC_O  ,KC_QUOT },
82          {KC_LSPO,  KC_Z  ,  KC_X  ,  KC_C  ,  KC_V  ,  KC_B  ,________  ,________,________,  KC_K  ,  KC_M  ,KC_CPIPE,KC_DOTQ ,KC_FBSLH,KC_RSPC }, // Custom Shift Codes. ,^| .^?  /^|
83      {  KC_MEH ,KC_LCTL ,KC_LGUI ,KC_LALT ,MO(_LYNUM), KC_SPC ,________  ,________,________, KC_ENT ,MO(_LYNAV),TD(TD_CBR) ,TD(TD_BRC),TD(TD_ABK),TD(TD_LOCK_SLEEP)}
84
85  },
86
87  // Decision Layer
88  [_LYMD] =
89     {
90        {________,________  ,________  ,________  ,________,________,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___},
91        {________,MO(_LYFK) ,MO(_LYMED),________  ,________,________,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,________},
92        {________,MO(_LYNUM),MO(_LYNAV),________  ,________,________,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___},
93        {________,MO(_LYMOS),MO(_LYSYS),MO(_LYLT) ,________,________,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___},
94        {________,________  ,________  ,________  ,________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,___XX___}
95      },
96
97  //F Keys
98  [_LYFK] =
99     {
100       {________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___},
101       {KC_LYDEF,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,KC_F7   ,KC_F8   ,KC_F9   ,KC_F12  ,________},
102       {________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,KC_F4   ,KC_F5   ,KC_F6   ,KC_F11  ,___XX___},
103       {________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,KC_F1   ,KC_F2   ,KC_F3   ,KC_F10  ,___XX___},
104       {________,________,________,________,________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,___XX___}
105     },
106 //Media Keys
107 [_LYMED] =
108    {
109      {________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___},
110      {KC_LYDEF,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,___XX___,KC_VOLU ,___XX___,___XX___,________},
111      {________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,KC_MPRV ,KC_MUTE ,KC_MNXT ,___XX___,___XX___},
112      {________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,___XX___,KC_VOLD ,___XX___,KC_MSTP ,___XX___},
113      {________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,KC_MPLY ,___XX___,___XX___,___XX___,___XX___}
114    },
115 //Num Keys
116 [_LYNUM] =
117   {
118     {________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,KC_PEQL ,KC_PSLS ,KC_PAST ,KC_PMNS ,___XX___},
119     {KC_LYDEF,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,KC_7    ,KC_8    ,KC_9    ,KC_MINUS,________},
120     {________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,KC_4    ,KC_5    ,KC_6    ,KC_PPLS ,KC_PSLS },
121     {________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,KC_1    ,KC_2    ,KC_3    ,KC_PENT ,KC_PAST },
122     {________,________,________,________,________,________,________,________,________,________,KC_0    ,KC_0    ,KC_PDOT ,KC_PEQL ,___XX___}
123   },
124 //Navigation Keys
125 [_LYNAV] =
126  {
127    {________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___},
128    {KC_LYDEF,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,KC_HOME ,KC_UP   ,KC_PGUP ,KC_PSCR ,________},
129    {________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,KC_LEFT ,KC_F5   ,KC_RIGHT,KC_SLCK ,___XX___},
130    {________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,KC_END  ,KC_DOWN ,KC_PGDN ,KC_PAUS ,___XX___},
131    {________,________,________,________,________,________,________,________,________,________,________,KC_INS  ,KC_DEL  ,___XX___,___XX___}
132  },
133  //Mouse Keys
134  [_LYMOS] =
135   {
136     {________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___},
137     {KC_LYDEF,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,___XX___,KC_MS_U ,KC_WH_U ,KC_ACL2 ,________},
138     {________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,KC_MS_L ,KC_ACL0 ,KC_MS_R ,KC_ACL1 ,___XX___},
139     {________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,___XX___,KC_MS_D ,KC_WH_D ,KC_BTN2 ,___XX___},
140     {________,________,________,________,________,________,________,________,________,________,KC_BTN1 ,KC_BTN3 ,KC_BTN4 ,___XX___,___XX___}
141   },
142   //Systen Keys
143   [_LYSYS] =
144    {
145      {________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___},
146      {KC_LYDEF,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,________},
147      {________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,___XX___,QWERTY  ,COLEMAK ,___XX___,RESET   },
148      {________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___},
149      {________,________,________,________,________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,___XX___}
150    },
151
152 // Light Control
153 [_LYLT] =
154   {
155      {________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___},
156      {KC_LYDEF,________,________,________,________,________,___XX___,___XX___,___XX___,RGB_HUD ,RGB_HUI ,RGB_SAD ,RGB_SAI ,RGB_VAD ,RGB_VAI },
157      {________,________,________,________,________,________,___XX___,___XX___,___XX___,RGB_TOG ,RGB_RMOD,RGB_MOD ,___XX___,___XX___,___XX___},
158      {________,________,________,________,________,________,___XX___,___XX___,___XX___,BL_TOGG ,BL_DEC  ,BL_INC  ,BL_BRTG ,___XX___,___XX___},
159      {________,________,________,________,________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,___XX___}
160   }
161 };
162
163 //Define layer colors
164 #define rgblight_setrgb_user_base()  rgblight_sethsv(325,255,255)
165 #define rgblight_setrgb_user_LYFK()  rgblight_sethsv_red()
166 #define rgblight_setrgb_user_LYMED() rgblight_sethsv_blue()
167 #define rgblight_setrgb_user_LYNUM() rgblight_sethsv_purple()
168 #define rgblight_setrgb_user_LYNAV() rgblight_sethsv_cyan()
169 #define rgblight_setrgb_user_LYMOS() rgblight_sethsv_orange()
170 #define rgblight_setrgb_user_LYSYS() rgblight_sethsv_green()
171 #define rgblight_setrgb_user_LYLT()  rgblight_sethsv_yellow()
172 #define rgblight_setrgb_user_LYMD()  rgblight_sethsv_white()
173
174 //initialize rgb
175 void matrix_init_user(void) {
176   rgblight_enable();
177   rgblight_mode(1);
178   rgblight_setrgb_user_base();
179 }
180
181 //Set a color based on the layer
182 uint32_t layer_state_set_user(uint32_t state) {
183   switch(biton32(state)) {
184     case _LYFK:
185       rgblight_setrgb_user_LYFK();
186       break;
187     case _LYMED:
188       rgblight_setrgb_user_LYMED();
189       break;
190     case _LYNUM:
191       rgblight_setrgb_user_LYNUM();
192       break;
193     case _LYNAV:
194       rgblight_setrgb_user_LYNAV();
195       break;
196     case _LYMOS:
197       rgblight_setrgb_user_LYMOS();
198       break;
199     case _LYSYS:
200       rgblight_setrgb_user_LYSYS();
201       break;
202     case _LYLT:
203       rgblight_setrgb_user_LYLT();
204       break;
205     case _LYMD:
206       rgblight_setrgb_user_LYMD();
207       break;
208     default:
209       rgblight_setrgb_user_base();
210       break;
211   }
212   return state;
213 }
214
215
216 //Const for shift
217 const uint8_t shift = MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT);
218
219 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
220
221   switch(keycode) {
222     case KC_LYDEF:
223       layer_clear();
224       return false;
225       break;
226     case QWERTY:
227       if (record->event.pressed) {
228         set_single_persistent_default_layer(_QWERTY);
229       }
230       return false;
231       break;
232     case COLEMAK:
233       if (record->event.pressed) {
234         set_single_persistent_default_layer(_COLEMAK);
235       }
236       return false;
237       break;
238     case KC_BSDEL:
239       if (record->event.pressed) {
240         if (keyboard_report->mods & shift) {
241           if (keyboard_report->mods & MOD_BIT(KC_LSFT)) {
242             unregister_code(KC_LSHIFT);
243           }
244           else {
245             unregister_code(KC_RSHIFT);
246           }
247           register_code(KC_DEL);
248         }
249         else {
250           register_code(KC_BSPC);
251         }
252       }
253       else {
254         unregister_code(KC_DEL);
255         unregister_code (KC_BSPC);
256       }
257       return false;
258       break;
259     case KC_FBSLH:
260       if (record->event.pressed) {
261         if (keyboard_report->mods & shift) {
262             if (keyboard_report->mods & MOD_BIT(KC_LSFT)) {
263               unregister_code(KC_LSHIFT);
264             }
265             else {
266               unregister_code(KC_RSHIFT);
267             }
268           register_code(KC_BSLASH);
269         }
270         else {
271           register_code(KC_SLSH);
272         }
273       }
274       else {
275         unregister_code(KC_BSLASH);
276         unregister_code (KC_SLSH);
277       }
278       return false;
279       break;
280     case KC_DOTQ:
281       if (record->event.pressed) {
282         if (keyboard_report->mods & shift) {
283           register_code(KC_SLSH); // shifted slash = ?
284         }
285         else {
286           register_code(KC_DOT);
287         }
288       }
289       else {
290         unregister_code(KC_SLSH); // shifted slash = ?
291         unregister_code (KC_DOT);
292       }
293       return false;
294       break;
295     case KC_CPIPE:
296       if (record->event.pressed) {
297         if (keyboard_report->mods & shift) {
298           register_code(KC_BSLS);
299         }
300         else {
301           register_code(KC_COMM);
302         }
303       }
304       else {
305         unregister_code(KC_BSLS);
306         unregister_code (KC_COMM);
307       }
308       return false;
309       break;
310     }
311     return true;
312 };