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