]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/planck/keymaps/callum/keymap.c
08d0c69b88d673e358045027206780a3a4700f44
[qmk_firmware.git] / keyboards / planck / keymaps / callum / keymap.c
1 #include "planck.h"
2 #include "action_layer.h"
3
4 extern keymap_config_t keymap_config;
5
6 #define AC(X) A(C(X))
7 #define SC(X) S(C(X))
8
9 enum planck_layers {
10     _COLEMAK,
11     _QWERTY,
12     _SYMB,
13     _MOVE,
14     _FUNC,
15     _MOUSE,
16 };
17
18 enum planck_keycodes {
19     COLEMAK = SAFE_RANGE,
20     QWERTY,
21     SYMB,
22     MOVE,
23     FUNC,
24     MOUSE,
25 };
26
27 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
28
29     /* COLEMAK
30      * ,-----------------------------------------------------------------------.
31      * |Tab  |  Q  |  W  |  F  |  P  |  G  |  J  |  L  |  U  |  Y  |  ;  |  -  |
32      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
33      * |Bksp |  A  |  R  |  S  |  T  |  D  |  H  |  N  |  E  |  I  |  O  |  '  |
34      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
35      * |Shift|  Z  |  X  |  C  |  V  |  B  |  K  |  M  |  ,  |  .  |  /  |Shift|
36      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
37      * |Func |Ctrl | Alt |Super|Symb |Enter|Space|Move |Super| Alt |Ctrl |Func |
38      * `-----------------------------------------------------------------------'
39      */
40     [_COLEMAK] = LAYOUT_planck_grid(
41         KC_TAB,       KC_Q,         KC_W,         KC_F,
42         KC_P,         KC_G,         KC_J,         KC_L,
43         KC_U,         KC_Y,         KC_SCLN,      KC_MINS,
44
45         KC_BSPC,      KC_A,         KC_R,         KC_S,
46         KC_T,         KC_D,         KC_H,         KC_N,
47         KC_E,         KC_I,         KC_O,         KC_QUOT,
48
49         KC_LSFT,      KC_Z,         KC_X,         KC_C,
50         KC_V,         KC_B,         KC_K,         KC_M,
51         KC_COMM,      KC_DOT,       KC_SLSH,      KC_RSFT,
52
53         FUNC,         KC_LCTL,      KC_LALT,      KC_LGUI,
54         SYMB,         KC_ENT,       KC_SPC,       MOVE,
55         KC_RGUI,      KC_RALT,      KC_RCTL,      FUNC
56     ),
57
58     /* QWERTY
59      * ,-----------------------------------------------------------------------.
60      * |Tab  |  Q  |  W  |  E  |  R  |  T  |  Y  |  U  |  I  |  O  |  P  |  -  |
61      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
62      * |Bksp |  A  |  S  |  D  |  F  |  G  |  H  |  J  |  K  |  L  |  ;  |  '  |
63      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
64      * |Shift|  Z  |  X  |  C  |  V  |  B  |  N  |  M  |  ,  |  .  |  /  |Shift|
65      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
66      * |Func |Ctrl | Alt |Super|Symb |Enter|Space|Move |Super| Alt |Ctrl |Func |
67      * `-----------------------------------------------------------------------'
68      */
69     [_QWERTY] = LAYOUT_planck_grid(
70         KC_TAB,       KC_Q,         KC_W,         KC_E,
71         KC_R,         KC_T,         KC_Y,         KC_U,
72         KC_I,         KC_O,         KC_P,         KC_MINS,
73
74         KC_BSPC,      KC_A,         KC_S,         KC_D,
75         KC_F,         KC_G,         KC_H,         KC_J,
76         KC_K,         KC_L,         KC_SCLN,      KC_QUOT,
77
78         KC_LSFT,      KC_Z,         KC_X,         KC_C,
79         KC_V,         KC_B,         KC_N,         KC_M,
80         KC_COMM,      KC_DOT,       KC_SLSH,      KC_RSFT,
81
82         FUNC,         KC_LCTL,      KC_LALT,      KC_LGUI,
83         SYMB,         KC_ENT,       KC_SPC,       MOVE,
84         KC_RGUI,      KC_RALT,      KC_RCTL,      FUNC
85     ),
86
87     /* SYMB
88      * ,-----------------------------------------------------------------------.
89      * | Esc |  1  |  2  |  3  |  4  |  5  |  6  |  7  |  8  |  9  |  0  |ndash|
90      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
91      * | Del |  !  |  @  |  #  |  $  |  %  |  ^  |  &  |  *  |  (  |  )  |  £  |
92      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
93      * |     |  ~  |  `  |  +  |  =  |  |  |  \  |  [  |  ]  |  {  |  }  |     |
94      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
95      * |     |     |     |     |     |     |     |     |     |     |     |     |
96      * `-----------------------------------------------------------------------'
97      */
98     [_SYMB] = LAYOUT_planck_grid(
99         KC_ESC,       KC_1,         KC_2,         KC_3,
100         KC_4,         KC_5,         KC_6,         KC_7,
101         KC_8,         KC_9,         KC_0,         A(KC_MINS),
102
103         KC_DEL,       KC_EXLM,      KC_AT,        KC_HASH,
104         KC_DLR,       KC_PERC,      KC_CIRC,      KC_AMPR,
105         KC_ASTR,      KC_LPRN,      KC_RPRN,      A(KC_3),
106
107         _______,      KC_TILD,      KC_GRV,       KC_PLUS,
108         KC_EQL,       KC_PIPE,      KC_BSLS,      KC_LBRC,
109         KC_RBRC,      KC_LCBR,      KC_RCBR,      _______,
110
111         _______,      _______,      _______,      _______,
112         _______,      _______,      _______,      _______,
113         _______,      _______,      _______,      _______
114     ),
115
116     /* MOVE
117      * ,-----------------------------------------------------------------------.
118      * |     |     |     |     |     |     |CtrUp|Home | Up  | End |Caps |Mouse|
119      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
120      * |     |     |     |     |     |     |CtrL |Left |Down |Right|CtrR |     |
121      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
122      * |     |     |     |     |     |     |CtrDn|PgDn |PgUp |TabL |TabR |     |
123      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
124      * |     |     |     |     |     |     |     |     |     |     |     |     |
125      * `-----------------------------------------------------------------------'
126      */
127     [_MOVE] = LAYOUT_planck_grid(
128         AC(KC_A),     AC(KC_B),     AC(KC_C),     AC(KC_D),
129         AC(KC_E),     AC(KC_F),     C(KC_UP),     KC_HOME,
130         KC_UP,        KC_END,       KC_CAPS,      MOUSE,
131
132         AC(KC_G),     AC(KC_H),     AC(KC_I),     AC(KC_J),
133         AC(KC_K),     AC(KC_L),     C(KC_LEFT),   KC_LEFT,
134         KC_DOWN,      KC_RGHT,      C(KC_RIGHT),  XXXXXXX,
135
136         _______,      AC(KC_M),     AC(KC_N),     AC(KC_O),
137         AC(KC_P),     AC(KC_Q),     C(KC_DOWN),   KC_PGDN,
138         KC_PGUP,      SC(KC_TAB),   C(KC_TAB),    _______,
139
140         _______,      _______,      _______,      _______,
141         _______,      _______,      _______,      _______,
142         _______,      _______,      _______,      _______
143     ),
144
145     /* FUNC
146      * ,-----------------------------------------------------------------------.
147      * |Reset| F1  | F2  | F3  | F4  | F5  | F6  | F7  | F8  | F9  | F10 |VolUp|
148      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
149      * |Power| F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 |VolDn|
150      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
151      * |     |     |     |     |     |     |     |     |     |Clmak|Qwrty|     |
152      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
153      * |     |     |     |     |Prev |Mute |Play |Next |     |     |     |     |
154      * `-----------------------------------------------------------------------'
155      */
156     [_FUNC] = LAYOUT_planck_grid(
157         RESET,        KC_F1,        KC_F2,        KC_F3,
158         KC_F4,        KC_F5,        KC_F6,        KC_F7,
159         KC_F8,        KC_F9,        KC_F10,       KC_VOLU,
160
161         KC_POWER,     KC_F11,       KC_F12,       KC_F13,
162         KC_F14,       KC_F15,       KC_F16,       KC_F17,
163         KC_F18,       KC_F19,       KC_F20,       KC_VOLD,
164
165         _______,      XXXXXXX,      KC_HOME,      SC(KC_TAB),
166         C(KC_TAB),    KC_END,       XXXXXXX,      XXXXXXX,
167         XXXXXXX,      COLEMAK,      QWERTY,       _______,
168
169         _______,      _______,      _______,      _______,
170         KC_MPRV,      KC_MUTE,      KC_MPLY,      KC_MNXT,
171         _______,      _______,      _______,      _______
172     ),
173
174     /* MOUSE
175      * ,-----------------------------------------------------------------------.
176      * |     |     |CtrL |CtrU |CtrR | B5  |CtrU | ScL |Up   | ScR |     |     |
177      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
178      * |     |     | Ac0 | Ac1 | Ac2 | B4  |CtrL |Left |Down |Right|CtrR |     |
179      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
180      * |     |     |     |Home | End | B3  |CtrD | ScD | ScU |TabL |TabR |     |
181      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
182      * |     |     |     |     |     | B2  | B1  |     |     |     |     |     |
183      * `-----------------------------------------------------------------------'
184      */
185     [_MOUSE] = LAYOUT_planck_grid(
186         _______,      XXXXXXX,      C(KC_LEFT),   C(KC_UP),
187         C(KC_RIGHT),  KC_BTN5,      C(KC_UP),     KC_WH_R,
188         KC_MS_U,      KC_WH_L,      XXXXXXX,      XXXXXXX,
189
190         _______,      XXXXXXX,      KC_ACL0,      KC_ACL1,
191         KC_ACL2,      KC_BTN4,      C(KC_LEFT),   KC_MS_L,
192         KC_MS_D,      KC_MS_R,      C(KC_RIGHT),  XXXXXXX,
193
194         _______,      XXXXXXX,      XXXXXXX,      KC_HOME,
195         KC_END,       KC_BTN3,      C(KC_DOWN),   KC_WH_U,
196         KC_WH_D,      SC(KC_TAB),   C(KC_TAB),    _______,
197
198         _______,      _______,      _______,      _______,
199         _______,      KC_BTN2,      KC_BTN1,      _______,
200         _______,      _______,      _______,      _______
201     )
202 };
203
204 #ifdef AUDIO_ENABLE
205 float colemak_song[][2] = SONG(COLEMAK_SOUND);
206 float qwerty_song[][2] = SONG(QWERTY_SOUND);
207 #endif
208
209 void set_colemak(void) {
210 #ifdef AUDIO_ENABLE
211     stop_all_notes();
212     PLAY_SONG(colemak_song);
213 #endif
214     set_single_persistent_default_layer(_COLEMAK);
215 }
216
217 void set_qwerty(void) {
218 #ifdef AUDIO_ENABLE
219     stop_all_notes();
220     PLAY_SONG(qwerty_song);
221 #endif
222     set_single_persistent_default_layer(_QWERTY);
223 }
224
225 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
226     switch (keycode) {
227         case COLEMAK:
228             if (record->event.pressed) {
229                 set_colemak();
230             }
231             return false;
232         case QWERTY:
233             if (record->event.pressed) {
234                 set_qwerty();
235             }
236             return false;
237         case SYMB:
238             if (record->event.pressed) {
239                 layer_off(_MOUSE);
240                 layer_on(_SYMB);
241             } else {
242                 layer_off(_SYMB);
243             }
244             return false;
245         case MOVE:
246             if (record->event.pressed) {
247                 layer_off(_MOUSE);
248                 layer_on(_MOVE);
249             } else {
250                 layer_off(_MOVE);
251             }
252             return false;
253         case FUNC:
254             if (record->event.pressed) {
255                 layer_off(_MOUSE);
256                 layer_on(_FUNC);
257             } else {
258                 layer_off(_FUNC);
259             }
260             return false;
261         case MOUSE:
262             if (record->event.pressed) {
263                 layer_on(_MOUSE);
264             }
265             return false;
266
267         // Override the defualt auto shifted symbols to use SEND_STRING
268         // See https://github.com/qmk/qmk_firmware/issues/4072
269         case KC_EXLM:
270             if (record->event.pressed) { SEND_STRING("!"); }
271             return false;
272         case KC_AT:
273             if (record->event.pressed) { SEND_STRING("@"); }
274             return false;
275         case KC_HASH:
276             if (record->event.pressed) { SEND_STRING("#"); }
277             return false;
278         case KC_DLR:
279             if (record->event.pressed) { SEND_STRING("$"); }
280             return false;
281         case KC_PERC:
282             if (record->event.pressed) { SEND_STRING("%"); }
283             return false;
284         case KC_CIRC:
285             if (record->event.pressed) { SEND_STRING("^"); }
286             return false;
287         case KC_AMPR:
288             if (record->event.pressed) { SEND_STRING("&"); }
289             return false;
290         case KC_ASTR:
291             if (record->event.pressed) { SEND_STRING("*"); }
292             return false;
293         case KC_LPRN:
294             if (record->event.pressed) { SEND_STRING("("); }
295             return false;
296         case KC_RPRN:
297             if (record->event.pressed) { SEND_STRING(")"); }
298             return false;
299         case KC_TILD:
300             if (record->event.pressed) { SEND_STRING("~"); }
301             return false;
302         case KC_GRV:
303             if (record->event.pressed) { SEND_STRING("`"); }
304             return false;
305         case KC_PLUS:
306             if (record->event.pressed) { SEND_STRING("+"); }
307             return false;
308         case KC_EQL:
309             if (record->event.pressed) { SEND_STRING("="); }
310             return false;
311         case KC_PIPE:
312             if (record->event.pressed) { SEND_STRING("|"); }
313             return false;
314         case KC_BSLS:
315             if (record->event.pressed) { SEND_STRING("\\"); }
316             return false;
317         case KC_LBRC:
318             if (record->event.pressed) { SEND_STRING("["); }
319             return false;
320         case KC_RBRC:
321             if (record->event.pressed) { SEND_STRING("]"); }
322             return false;
323         case KC_LCBR:
324             if (record->event.pressed) { SEND_STRING("{"); }
325             return false;
326         case KC_RCBR:
327             if (record->event.pressed) { SEND_STRING("}"); }
328             return false;
329     }
330     return true;
331 }