]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/xd75/keymaps/skewwhiffy/keymap.c
11fa2f0e64f8ce56ab1ab234b6834aa5d491ae6e
[qmk_firmware.git] / keyboards / xd75 / keymaps / skewwhiffy / keymap.c
1 /* Copyright 2017 Kenny Hung
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 #include "keymap_uk.h"
18 // Fillers to make layering more clear
19 #define _______ KC_TRNS
20
21 // Layer shorthand
22 #define _CM 0 // Colemak
23 #define _DV 1 // Dvorak
24 #define _QW 2 // QWERTY
25 #define _NB 3 // Numbers
26 #define _SY 4 // Symbols
27 #define _NAV 5 // Navigation
28
29 // Layer buttons
30 #define _Z_SFT SFT_T(UK_Z)
31 #define _SCLSH SFT_T(UK_SCLN)
32 #define _SLSH SFT_T(UK_SLSH)
33 #define _X_NB LT(_NB, UK_X)
34 #define _Q_NB LT(_NB, UK_Q)
35 #define _DOT_NB LT(_NB, UK_DOT)
36 #define _V_NB LT(_NB, UK_V)
37 #define _C_SY LT(_SY, UK_C)
38 #define _J_SY LT(_SY, UK_J)
39 #define _W_SY LT(_SY, UK_W)
40 #define _COM_SY LT(_SY, UK_COMM)
41 #define _AST_SY LT(_SY, UK_PAST)
42 #define _B_NAV LT(_NAV, UK_B)
43 #define _X_NAV LT(_NAV, UK_X)
44 #define _K_NAV LT(_NAV, UK_K)
45 #define _N_NAV LT(_NAV, UK_N)
46 #define _F1_NB LT(_NB, UK_F1)
47 #define _3_NB LT(_NB, UK_3)
48
49 // Custom hotkeys
50 #define _TERM LCTL(UK_QUOT) // Hotkey for Cmder or iTerm
51 #define _S_TAB S(UK_TAB)
52 #define _C_LEFT LCTL(UK_LEFT)
53 #define _C_RGHT LCTL(UK_RGHT)
54 #define _A_LEFT LALT(UK_LEFT)
55 #define _A_RGHT LALT(UK_RGHT)
56
57 enum custom_keycodes {
58   L_NEXT = SAFE_RANGE,
59   L_SB
60 };
61
62 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
63
64 /* Colemak _CM
65  * .--------------------------------------------------------------------------------------------------------------------------------------.
66  * |        |        |        |        |        |        |        |        |        |        |        |        |        | L_NEXT | L_SB   |
67  * |--------------------------------------------------------------------------------------------------------------------------------------|
68  * | Q      | W      | F      | P      | G      |        |        |        |        |        | J      | L      | U      | Y      | ;      |
69  * |--------------------------------------------------------------------------------------------------------------------------------------|
70  * | A      | R      | S      | T      | D      |        |        |        |        |        | H      | N      | E      | I      | O      |
71  * |--------------------------------------------------------------------------------------------------------------------------------------|
72  * | Z      | X      | C      | V      | B      |        |        |        |        |        | K      | M      | ,      | .      | /      |
73  * | SHIFT  | NUMBER | SYMBOL |        | NAV    |        |        |        |        |        | NAV    |        | SYMBOL | FUNC   | SHIFT  |
74  * |--------------------------------------------------------------------------------------------------------------------------------------|
75  * | LSHIFT | LCTRL  | LALT   | LGUI   | SPACE  | ENT    |        |        |        | DEL    | BKSPC  | RGUI   | RALT   | RCTRL  | RSHIFT |
76  * .--------------------------------------------------------------------------------------------------------------------------------------.
77  */
78  [_CM] = {
79   { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, L_NEXT,  L_SB    },
80   { UK_Q,    UK_W,    UK_F,    UK_P,    UK_G,    _______, _______, _______, _______, _______, UK_J,    UK_L,    UK_U,    UK_Y,    UK_SCLN },
81   { UK_A,    UK_R,    UK_S,    UK_T,    UK_D,    _______, _______, _______, _______, _______, UK_H,    UK_N,    UK_E,    UK_I,    UK_O    },
82   { _Z_SFT,  _X_NB,   _C_SY,   UK_V,    _B_NAV,  _______, _______, _______, _______, _______, _K_NAV,  UK_M,    _COM_SY, _DOT_NB, _SLSH   },
83   { UK_LSFT, UK_LCTL, UK_LALT, UK_LGUI, UK_SPC,  UK_ENT,  _______, _______, _______, UK_DEL,  UK_BSPC, UK_RGUI, UK_RALT, UK_RCTL, UK_RSFT }
84  },
85
86 /* DVORAK _DV
87  * .--------------------------------------------------------------------------------------------------------------------------------------.
88  * |        |        |        |        |        |        |        |        |        |        |        |        |        |        |        |
89  * |--------------------------------------------------------------------------------------------------------------------------------------|
90  * | '      | ,      | .      | P      | Y      |        |        |        |        |        | F      | G      | C      | R      | L      |
91  * |--------------------------------------------------------------------------------------------------------------------------------------|
92  * | A      | O      | E      | U      | I      |        |        |        |        |        | D      | H      | T      | N      | S      |
93  * |--------------------------------------------------------------------------------------------------------------------------------------|
94  * | ;      | Q      | J      | K      | X      |        |        |        |        |        | B      | M      | W      | V      | Z      |
95  * | SHIFT  | NUMBER | SYMBOL |        | NAV    |        |        |        |        |        | NAV    |        | SYMBOL | FUNC   | SHIFT  |
96  * |--------------------------------------------------------------------------------------------------------------------------------------|
97  * |        |        |        |        |        |        |        |        |        |        |        |        |        |        |        |
98  * |--------------------------------------------------------------------------------------------------------------------------------------|
99  */
100  [_DV] = {
101   { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
102   { UK_QUOT, UK_COMM, UK_DOT,  UK_P,    UK_Y,    _______, _______, _______, _______, _______, UK_F,    UK_G,    UK_C,    UK_R,    UK_L    },
103   { UK_A,    UK_O,    UK_E,    UK_U,    UK_I,    _______, _______, _______, _______, _______, UK_D,    UK_H,    UK_T,    UK_N,    UK_S    },
104   { _SCLSH,  _Q_NB,   _J_SY,   UK_K,    _X_NAV,  _______, _______, _______, _______, _______, _B_NAV,  UK_M,    _W_SY,   _V_NB,   _Z_SFT  },
105   { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }
106  },
107
108 /* QWERTY _QW
109  * .--------------------------------------------------------------------------------------------------------------------------------------.
110  * |        |        |        |        |        |        |        |        |        |        |        |        |        |        |        |
111  * |--------------------------------------------------------------------------------------------------------------------------------------|
112  * | Q      | W      | E      | R      | T      |        |        |        |        |        | Y      | U      | I      | O      | P      |
113  * |--------------------------------------------------------------------------------------------------------------------------------------|
114  * | A      | S      | D      | F      | G      |        |        |        |        |        | H      | J      | K      | L      | ;      |
115  * |--------------------------------------------------------------------------------------------------------------------------------------|
116  * | Z      | X      | C      | V      | B      |        |        |        |        |        | N      | M      | ,      | .      | /      |
117  * | SHIFT  | NUMBER | SYMBOL |        | NAV    |        |        |        |        |        | NAV    |        | SYMBOL | FUNC   | SHIFT  |
118  * |--------------------------------------------------------------------------------------------------------------------------------------|
119  * |        |        |        |        |        |        |        |        |        |        |        |        |        |        |        |
120  * |--------------------------------------------------------------------------------------------------------------------------------------|
121  * | LSHIFT | LCTRL  | LALT   | LGUI   | SPACE  | ENT    |        |        |        | DEL    | BKSPC  | RGUI   | RALT   | RCTRL  | RSHIFT |
122  * .--------------------------------------------------------------------------------------------------------------------------------------.
123  */
124  [_QW] = {
125   { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
126   { UK_Q,    UK_W,    UK_E,    UK_R,    UK_T,    _______, _______, _______, _______, _______, UK_Y,    UK_U,    UK_I,    UK_O,    UK_P    },
127   { UK_A,    UK_S,    UK_D,    UK_F,    UK_G,    _______, _______, _______, _______, _______, UK_H,    UK_J,    UK_K,    UK_L,    UK_SCLN },
128   { _Z_SFT,  _X_NB,   _C_SY,   UK_V,    _B_NAV,  _______, _______, _______, _______, _______, _N_NAV,  UK_M,    _COM_SY, _DOT_NB, _SLSH   },
129   { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }
130  },
131
132 /* Numbers _NB
133  * .--------------------------------------------------------------------------------------------------------------------------------------.
134  * |        |        |        |        |        |        |        |        |        |        |        |        |        |        |        |
135  * |-----------------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
136  * |        | F7     | F8     | F9     | F10    |        |        |        |        |        |        | 7      | 8      | 9      |        |
137  * |-----------------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
138  * |        | F4     | F5     | F6     | F11    |        |        |        |        |        |        | 4      | 5      | 6      |        |
139  * |-----------------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
140  * |        | F1     | F2     | F3     | F12    |        |        |        |        |        | 0      | 1      | 2      | 3      | .      |
141  * |-----------------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------+--------|
142  * |        |        |        |        |        |        |        |        |        |        |        |        |        |        |        |
143  * '--------------------------------------------------------------------------------------------------------------------------------------'
144  */
145  [_NB] = {
146   { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
147   { _______, UK_F7,   UK_F8,   UK_F9,   UK_F10,  _______, _______, _______, _______, _______, _______, UK_7,    UK_8,    UK_9,    _______ },
148   { _______, UK_F4,   UK_F5,   UK_F6,   UK_F11,  _______, _______, _______, _______, _______, _______, UK_4,    UK_5,    UK_6,    _______ },
149   { _______, _F1_NB,  UK_F2,   UK_F3,   UK_F12,  _______, _______, _______, _______, _______, UK_0,    UK_1,    UK_2,    _3_NB,   UK_DOT  },
150   { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }
151  },
152
153 /* Symbols _SY
154  * .--------------------------------------------------------------------------------------------------------------------------------------.
155  * |        |        |        |        |        |        |        |        |        |        |        |        |        |        |        |
156  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
157  * | !      | £      | _      | -      | ~      |        |        |        |        |        | \      | {      | }      | /      | #      |
158  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
159  * | $      | %      | +      | =      |        |        |        |        |        |        | "      | (      | )      | '      | @      |
160  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
161  * | ^      | &      | *      | |      |        |        |        |        |        |        | <      | [      | ]      | >      | `      |
162  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
163  * |        |        |        |        |        |        |        |        |        |        |        |        |        |        |        |
164  * '--------------------------------------------------------------------------------------------------------------------------------------'
165  */
166  [_SY] = {
167   { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
168   { UK_EXLM, UK_PND,  UK_UNDS, UK_MINS, UK_TILD, _______, _______, _______, _______, _______, UK_BSLS, UK_LCBR, UK_RCBR, UK_SLSH, UK_HASH },
169   { UK_DLR,  UK_PERC, UK_PLUS, UK_EQL,  _______, _______, _______, _______, _______, _______, UK_DQUO, UK_LPRN, UK_RPRN, UK_QUOT, UK_AT   },
170   { UK_CIRC, UK_AMPR, _AST_SY, UK_PIPE, _______, _______, _______, _______, _______, _______, UK_LABK, UK_LBRC, _COM_SY, UK_RABK, UK_GRV  },
171   { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }
172  },
173 /*
174  * Navigation
175  * .--------------------------------------------------------------------------------------------------------------------------------------.
176  * | RESET  | COLEMA | DVORAK | QWERTY |        |        |        |        |        |        |        |        |        |        |        |
177  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
178  * | Esc    | Ctrl L | Up     | Ctrl R |        | RGB HD | RGB HI |        |        |        |        | PtSn   | ScLk   | Pause  |        |
179  * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
180  * | Tab    | Left   | Down   | Right  |        | RGB SD | RGB SI |        |        |        |        | Insert | Home   | PgUp   | Term   |
181  * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
182  * | ShTab  | Alt L  | Shift  | Alt R  |        | RGB VD | RGB VI |        |        |        |        | ScLk   | End    | PgDn   |        |
183  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
184  * |        |        |        |        |        | RGB RMD| RGB MD |        |        |        |        |        |        |        |        |
185  * '--------------------------------------------------------------------------------------------------------------------------------------'
186  */
187  [_NAV] = {
188   { RESET,   DF(_CM), DF(_DV), DF(_QW), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
189   { UK_ESC,  _C_LEFT, UK_UP  , _C_RGHT, _______, RGB_HUD, RGB_HUI, _______, _______, _______, _______, UK_PSCR, UK_SLCK, UK_PAUS, _______ },
190   { UK_TAB,  UK_LEFT, UK_DOWN, UK_RGHT, _______, RGB_SAD, RGB_SAI, _______, _______, _______, _______, UK_INS,  UK_HOME, UK_PGUP, _TERM   },
191   { _S_TAB,  _A_LEFT, UK_LSFT, _A_RGHT, _B_NAV,  RGB_VAD, RGB_VAI, _______, _______, _______, _K_NAV,  UK_SLCK, UK_END,  UK_PGDN, _______ },
192   { _______, _______, _______, _______, _______, RGB_RMOD,RGB_MOD, _______, _______, _______, _______, _______, _______, _______, _______ }
193  },
194 };
195
196 const uint16_t PROGMEM fn_actions[] = {
197
198 };
199
200 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
201 {
202   // MACRODOWN only works in this function
203       switch(id) {
204         case 0:
205           if (record->event.pressed) {
206             register_code(KC_RSFT);
207             #ifdef BACKLIGHT_ENABLE
208               backlight_step();
209             #endif
210           } else {
211             unregister_code(KC_RSFT);
212           }
213         break;
214       }
215     return MACRO_NONE;
216 };
217
218 bool lightsOn = true;
219 int keyPresses = 0;
220 int effect = 0;
221 uint32_t key_timer;
222
223 void resetCounts(void) {
224   effect++;
225   keyPresses = 0;
226   key_timer = timer_read32();
227 }
228
229 void matrix_scan_user(void) {
230   if (!lightsOn) {
231     rgblight_setrgb(0, 0, 0);
232     return;
233   }
234   if (timer_elapsed32(key_timer) > 60000) {
235     resetCounts();
236   }
237   switch (effect) {
238     case 0:
239       rgblight_effect_breathing(3);
240       break;
241     case 1:
242       rgblight_effect_knight(3);
243       break;
244     case 2:
245       rgblight_effect_rainbow_swirl(128);
246       break;
247     case 3:
248       rgblight_effect_snake(30);
249       break;
250     case 4:
251       rgblight_effect_rainbow_swirl(128);
252       break;
253     case 5:
254       rgblight_effect_rainbow_mood(128);
255       break;
256     case 6:
257       rgblight_effect_christmas();
258       break;
259     case 7:
260       rgblight_effect_rgbtest();
261       break;
262     default:
263       effect = 0;
264       break;
265   }
266 }
267
268 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
269   if (!record->event.pressed) return true;
270   if (keycode == L_SB) {
271     lightsOn = !lightsOn;
272     if (!lightsOn) {
273       keyPresses = 0;
274     } else {
275       resetCounts();
276     }
277     return true;
278   }
279   if (keycode == L_NEXT) {
280     resetCounts();
281     return true;
282   }
283   keyPresses++;
284   if (keyPresses > 100) {
285     resetCounts();
286   }
287   return true;
288 }