]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/planck/keymaps/callum/keymap.c
Adds support for Planck Rev 6 (#2666)
[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 G(X) LGUI(X)
8 #define A(X) LALT(X)
9 #define C(X) LCTL(X)
10 #define AC(X) A(C(X))
11 #define SC(X) S(C(X))
12 #define _______ KC_TRNS
13 #define XXXXXXX KC_NO
14
15 enum planck_layers {
16     _COLEMAK,
17     _QWERTY,
18     _SYMB,
19     _MOVE,
20     _FUNC,
21 };
22
23 enum planck_keycodes {
24     COLEMAK = SAFE_RANGE,
25     QWERTY,
26     SYMB,
27     MOVE,
28     FUNC,
29 };
30
31 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
32
33     /* COLEMAK
34      * ,-----------------------------------------------------------------------.
35      * |Tab  |  Q  |  W  |  F  |  P  |  G  |  J  |  L  |  U  |  Y  |  ;  |  -  |
36      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
37      * |Bksp |  A  |  R  |  S  |  T  |  D  |  H  |  N  |  E  |  I  |  O  |  '  |
38      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
39      * |Shift|  Z  |  X  |  C  |  V  |  B  |  K  |  M  |  ,  |  .  |  /  |Shift|
40      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
41      * |Func |Ctrl | Alt |Super|Symb |Enter|Space|Move |Super| Alt |Ctrl |Func |
42      * `-----------------------------------------------------------------------'
43      */
44     [_COLEMAK] = {
45         {
46             KC_TAB,       KC_Q,         KC_W,         KC_F,
47             KC_P,         KC_G,         KC_J,         KC_L,
48             KC_U,         KC_Y,         KC_SCLN,      KC_MINS
49         },
50         {
51             KC_BSPC,      KC_A,         KC_R,         KC_S,
52             KC_T,         KC_D,         KC_H,         KC_N,
53             KC_E,         KC_I,         KC_O,         KC_QUOT
54         },
55         {
56             KC_LSFT,      KC_Z,         KC_X,         KC_C,
57             KC_V,         KC_B,         KC_K,         KC_M,
58             KC_COMM,      KC_DOT,       KC_SLSH,      KC_RSFT
59         },
60         {
61             FUNC,         KC_LCTL,      KC_LALT,      KC_LGUI,
62             SYMB,         KC_ENT,       KC_SPC,       MOVE,
63             KC_RGUI,      KC_RALT,      KC_RCTL,      FUNC
64         }
65     },
66
67     /* QWERTY
68      * ,-----------------------------------------------------------------------.
69      * |Tab  |  Q  |  W  |  E  |  R  |  T  |  Y  |  U  |  I  |  O  |  P  |  -  |
70      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
71      * |Bksp |  A  |  S  |  D  |  F  |  G  |  H  |  J  |  K  |  L  |  ;  |  '  |
72      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
73      * |Shift|  Z  |  X  |  C  |  V  |  B  |  N  |  M  |  ,  |  .  |  /  |Shift|
74      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
75      * |Func |Ctrl | Alt |Super|Symb |Enter|Space|Move |Super| Alt |Ctrl |Func |
76      * `-----------------------------------------------------------------------'
77      */
78     [_QWERTY] = {
79         {
80             KC_TAB,       KC_Q,         KC_W,         KC_E,
81             KC_R,         KC_T,         KC_Y,         KC_U,
82             KC_I,         KC_O,         KC_P,         KC_MINS
83         },
84         {
85             KC_BSPC,      KC_A,         KC_S,         KC_D,
86             KC_F,         KC_G,         KC_H,         KC_J,
87             KC_K,         KC_L,         KC_SCLN,      KC_QUOT
88         },
89         {
90             KC_LSFT,      KC_Z,         KC_X,         KC_C,
91             KC_V,         KC_B,         KC_N,         KC_M,
92             KC_COMM,      KC_DOT,       KC_SLSH,      KC_RSFT
93         },
94         {
95             FUNC,         KC_LCTL,      KC_LALT,      KC_LGUI,
96             SYMB,         KC_ENT,       KC_SPC,       MOVE,
97             KC_RGUI,      KC_RALT,      KC_RCTL,      FUNC
98         }
99     },
100
101     /* SYMB
102      * ,-----------------------------------------------------------------------.
103      * | Esc |  1  |  2  |  3  |  4  |  5  |  6  |  7  |  8  |  9  |  0  |     |
104      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
105      * | Del |  !  |  @  |  #  |  $  |  %  |  ^  |  &  |  *  |  (  |  )  |     |
106      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
107      * |     |  ~  |  `  |  +  |  =  |  |  |  \  |  [  |  ]  |  {  |  }  |     |
108      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
109      * |     |     |     |     |     |     |     |     |     |     |     |     |
110      * `-----------------------------------------------------------------------'
111      */
112     [_SYMB] = {
113         {
114             KC_ESC,       KC_1,         KC_2,         KC_3,
115             KC_4,         KC_5,         KC_6,         KC_7,
116             KC_8,         KC_9,         KC_0,         _______
117         },
118         {
119             KC_DEL,       KC_EXLM,      KC_AT,        KC_HASH,
120             KC_DLR,       KC_PERC,      KC_CIRC,      KC_AMPR,
121             KC_ASTR,      KC_LPRN,      KC_RPRN,      _______
122         },
123         {
124             _______,      KC_TILD,      KC_GRV,       KC_PLUS,
125             KC_EQL,       KC_PIPE,      KC_BSLS,      KC_LBRC,
126             KC_RBRC,      KC_LCBR,      KC_RCBR,      _______
127         },
128         {
129             _______,      _______,      _______,      _______,
130             _______,      _______,      _______,      _______,
131             _______,      _______,      _______,      _______
132         }
133     },
134
135     /* MOVE
136      * ,-----------------------------------------------------------------------.
137      * |     |     |     |     |     |     |     |Home | Up  | End |     | Esc |
138      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
139      * |     |     |     |     |     |     |     |Left |Down |Right|Caps | Del |
140      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
141      * |     |     |     |     |     |     |     |PgDn |PgUp |TabL |TabR |     |
142      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
143      * |     |     |     |     |     |     |     |     |     |     |     |     |
144      * `-----------------------------------------------------------------------'
145      */
146     [_MOVE] = {
147         {
148             AC(KC_A),     AC(KC_B),     AC(KC_C),     AC(KC_D),
149             AC(KC_E),     AC(KC_F),     XXXXXXX,      KC_HOME,
150             KC_UP,        KC_END,       XXXXXXX,      KC_ESC
151         },
152         {
153             AC(KC_G),     AC(KC_H),     AC(KC_I),     AC(KC_J),
154             AC(KC_K),     AC(KC_L),     XXXXXXX,      KC_LEFT,
155             KC_DOWN,      KC_RGHT,      KC_CAPS,      KC_DEL
156         },
157         {
158             _______,      AC(KC_M),     AC(KC_N),     AC(KC_O),
159             AC(KC_P),     AC(KC_Q),     XXXXXXX,      KC_PGDN,
160             KC_PGUP,      SC(KC_TAB),   C(KC_TAB),    _______
161         },
162         {
163             _______,      _______,      _______,      _______,
164             _______,      _______,      _______,      _______,
165             _______,      _______,      _______,      _______
166         }
167     },
168
169     /* FUNC
170      * ,-----------------------------------------------------------------------.
171      * |Reset| F1  | F2  | F3  | F4  | F5  | F6  | F7  | F8  | F9  | F10 |VolUp|
172      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
173      * |Power| F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 |VolDn|
174      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
175      * |     | F21 | F22 | F23 | F24 |     |     |     |     |Clmak|Qwrty|     |
176      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
177      * |     |     |     |     |Prev |Mute |Play |Next |     |     |     |     |
178      * `-----------------------------------------------------------------------'
179      */
180     [_FUNC] = {
181         {
182             RESET,        KC_F1,        KC_F2,        KC_F3,
183             KC_F4,        KC_F5,        KC_F6,        KC_F7,
184             KC_F8,        KC_F9,        KC_F10,       KC_VOLU
185         },
186         {
187             KC_POWER,     KC_F11,       KC_F12,       KC_F13,
188             KC_F14,       KC_F15,       KC_F16,       KC_F17,
189             KC_F18,       KC_F19,       KC_F20,       KC_VOLD
190         },
191         {
192             _______,      KC_F21,       KC_F22,       KC_F23,
193             KC_F24,       XXXXXXX,      XXXXXXX,      XXXXXXX,
194             XXXXXXX,      COLEMAK,      QWERTY,       _______
195         },
196         {
197             _______,      _______,      _______,      _______,
198             KC_MPRV,      KC_MUTE,      KC_MPLY,      KC_MNXT,
199             _______,      _______,      _______,      _______
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             break;
233         case QWERTY:
234             if (record->event.pressed) {
235                 set_qwerty();
236             }
237             return false;
238             break;
239         case SYMB:
240             if (record->event.pressed) {
241                 layer_on(_SYMB);
242             } else {
243                 layer_off(_SYMB);
244             }
245             return false;
246             break;
247         case MOVE:
248             if (record->event.pressed) {
249                 layer_on(_MOVE);
250             } else {
251                 layer_off(_MOVE);
252             }
253             return false;
254             break;
255         case FUNC:
256             if (record->event.pressed) {
257                 layer_on(_FUNC);
258             } else {
259                 layer_off(_FUNC);
260             }
261             return false;
262             break;
263     }
264     return true;
265 }