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