]> git.donarmstrong.com Git - qmk_firmware.git/blob - layouts/community/ergodox/french_hacker/keymap.c
30bf56608d5b7b7de03fb2398c1d722293421b02
[qmk_firmware.git] / layouts / community / ergodox / french_hacker / keymap.c
1 #include QMK_KEYBOARD_H
2 #include "debug.h"
3 #include "action_layer.h"
4 #include "version.h"
5 #include "keymap_french.h"
6
7 #define BASE 0 // default Colemak Mod-DH layer
8 #define SYMB 1 // symbols
9 #define MDIA 2 // media keys
10 #define ACC 3 // accented characters
11
12 #define QCOPY 0 // Qubes OS VM to VM copy
13 #define QPASTE 1 // Qubes OS VM to VM paste
14 #define M_ACIRC 2 // â
15 #define M_ECIRC 3 // ê
16 #define M_ICIRC 4 // î
17 #define M_OCIRC 5 // ô
18 #define M_UCIRC 6 // û
19 #define M_YCIRC 7 // ŷ
20 #define M_AUMLT 8 // ä
21 #define M_EUMLT 9 // ë
22 #define M_IUMLT 10 // ï
23 #define M_OUMLT 11 // ö
24 #define M_UUMLT 12 // ü
25 #define M_YUMLT 13 // ÿ
26
27 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
28 /* Keymap 0: Base Colemak Mod-DH layer
29  *
30  * ,--------------------------------------------------.           ,--------------------------------------------------.
31  * | Esc    |   1  |   2  |   3  |   4  |   5  |      |           |      |   6  |   7  |   8  |   9  |   0  |        |
32  * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
33  * |        |   Q  |   W  |   F  |   P  |   B  | TO(0)|           |TO(2) |   J  |   L  |   U  |   Y  |   ;  |        |
34  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
35  * | Tab    |   A  |   R  |   S  |   T  |   G  |------|           |------|   M  |   N  |   E  |   I  |   O  | Bcksp  |
36  * |--------+------+------+------+------+------| TO(1)|           |OSL(3)|------+------+------+------+------+--------|
37  * | LShift |   Z  |   X  |   C  |   D  |   V  |      |           |      |   K  |   H  |   ,  |   .  |   :  | Rshift |
38  * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
39  *   | Ins  | Caps | Left | Right| MO(2)|                                       | MO(2)| Down |  Up  | PgDn | PgUp  |
40  *   `----------------------------------'                                       `----------------------------------'
41  *                                        ,-------------.       ,-------------.
42  *                                        |QCopy | Ralt |       | Ralt |QPaste|
43  *                                 ,------|------|------|       |------+------+------.
44  *                                 |      |      | Home |       | End  |      |      |
45  *                                 | Space| Ctrl |------|       |------| Ctrl |Enter |
46  *                                 |      |      | LAlt |       | LAlt |      |      |
47  *                                 `--------------------'       `--------------------'
48  */
49   // If it accepts an argument (i.e, is a function), it doesn't need KC_.
50 // Otherwise, it needs KC_*
51 [BASE] = LAYOUT_ergodox(  // layer 0 : default
52         // left hand
53         KC_ESC,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_TRNS,
54         KC_TRNS,        FR_Q,         FR_W,   KC_F,   KC_P,   KC_B,   TO(BASE),
55         KC_TAB,         FR_A,         KC_R,   KC_S,   KC_T,   KC_G,
56         KC_LSFT,        FR_Z,         KC_X,   KC_C,   KC_D,   KC_V,   TO(SYMB),
57         KC_INS,         KC_CAPS,      KC_LEFT,KC_RIGHT, MO(SYMB),
58                                                M(QCOPY),          KC_RALT,
59                                                                   KC_HOME,
60                                                KC_SPC,KC_LCTRL,   KC_LALT,
61         // right hand
62         KC_TRNS,     KC_6,    KC_7,   KC_8,     KC_9,    KC_0,             KC_TRNS,
63         TO(MDIA),    KC_J,    KC_L,   KC_U,     KC_Y,    FR_SCLN,          KC_TRNS,
64                      FR_M,    KC_N,   KC_E,     KC_I,    KC_O,             KC_BSPC,
65         OSL(ACC),    KC_K,    KC_H,   FR_COMM,  FR_DOT,  FR_COLN,          KC_RSFT,
66         MO(SYMB),    KC_DOWN, KC_UP,  KC_PGDN,  KC_PGUP,
67
68         KC_RALT,        M(QPASTE),
69         KC_END,
70         KC_LALT,KC_RCTL, KC_ENT
71                   ),
72
73
74 /* Keymap 1: Symbol Layer
75  * // TODO missing: ¤
76  * ,--------------------------------------------------.           ,--------------------------------------------------.
77  * |Version |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
78  * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
79  * |        |   §  |   <  |   {  |   \  |   ~  |      |           |      |   %  |   @  |   }  |  >   |  µ   |   F12  |
80  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
81  * |        |   '  |   =  |   -  |   (  |   +  |------|           |------|   *  |   )  |   _  |  /   |   "  |        |
82  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
83  * |        |   `  |   ?  |   #  |   [  |   |  |      |           |      |   &  |   ]  |   $  |   !  |   ^  |        |
84  * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
85  *   |   €  |   £  |   $  |      |      |                                       |      |      |      |   ß  |      |
86  *   `----------------------------------'                                       `----------------------------------'
87  *                                        ,-------------.       ,-------------.
88  *                                        |      |      |       |      |      |
89  *                                 ,------|------|------|       |------+------+------.
90  *                                 |      |      |      |       |      |      |      |
91  *                                 |      |      |------|       |------|      |      |
92  *                                 |      |      |      |       |      |      |      |
93  *                                 `--------------------'       `--------------------'
94  */
95 // SYMBOLS
96 [SYMB] = LAYOUT_ergodox(
97        // left hand
98        M(0),   KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
99        KC_TRNS,FR_SECT,FR_LESS,  FR_LCBR,FR_BSLS,FR_TILD,KC_TRNS,
100        KC_TRNS,FR_APOS,FR_EQL, FR_MINS,FR_LPRN,FR_PLUS,
101        KC_TRNS,FR_GRV,FR_QUES,FR_HASH,FR_LBRC,FR_PIPE,KC_TRNS,
102           FR_EURO,FR_PND,FR_DLR,KC_TRNS,KC_TRNS,
103                                        KC_TRNS,KC_TRNS,
104                                                KC_TRNS,
105                                KC_TRNS,KC_TRNS,KC_TRNS,
106        // right hand
107        KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
108        KC_TRNS, FR_PERC, FR_AT,  FR_RCBR, FR_GRTR, FR_MU, KC_F12,
109                 FR_ASTR,   FR_RPRN, FR_UNDS, FR_SLSH, FR_QUOT, KC_TRNS,
110        KC_TRNS, FR_AMP,  FR_RBRC, FR_DLR,  FR_EXLM,  FR_CIRC, KC_TRNS,
111                          KC_TRNS, KC_TRNS, KC_TRNS,  ALGR(KC_S),  KC_TRNS,
112        KC_TRNS, KC_TRNS,
113        KC_TRNS,
114        KC_TRNS, KC_TRNS, KC_TRNS
115 ),
116 /* Keymap 2: Media and mouse keys
117  *
118  * ,--------------------------------------------------.           ,--------------------------------------------------.
119  * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
120  * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
121  * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
122  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
123  * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      | Lclk | Rclk |      |      |  Play  |
124  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
125  * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
126  * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
127  *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
128  *   `----------------------------------'                                       `----------------------------------'
129  *                                        ,-------------.       ,-------------.
130  *                                        |      |      |       |      |      |
131  *                                 ,------|------|------|       |------+------+------.
132  *                                 |      |      |      |       |      |      |Brwser|
133  *                                 |      |      |------|       |------|      |Back  |
134  *                                 |      |      |      |       |      |      |      |
135  *                                 `--------------------'       `--------------------'
136  */
137 // MEDIA AND MOUSE
138 [MDIA] = LAYOUT_ergodox(
139        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
140        KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
141        KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
142        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
143        KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
144                                            KC_TRNS, KC_TRNS,
145                                                     KC_TRNS,
146                                   KC_TRNS, KC_TRNS, KC_TRNS,
147        // right hand
148        KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
149        KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
150                  KC_TRNS, KC_BTN1, KC_BTN2, KC_TRNS, KC_TRNS, KC_MPLY,
151        KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
152                           KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
153        KC_TRNS, KC_TRNS,
154        KC_TRNS,
155        KC_TRNS, KC_TRNS, KC_WBAK
156 ),
157
158 /* Keymap 3: accented characters
159  *
160  * ,--------------------------------------------------.           ,--------------------------------------------------.
161  * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
162  * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
163  * |        |      |  à   |  â   |  ä   |      |      |           |      |      |      |  î   |  ï   |      |        |
164  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
165  * |        |  é   |  è   |  ê   |  ë   |      |------|           |------|      |      |  ô   |  ö   |      |        |
166  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
167  * |        |      |  ù   |  û   |  ü   |      |      |           |      |      |      |  ŷ   |  ÿ   |      |        |
168  * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
169  *   |      |      |      |      |      |                                       |      |      |      |      |      |
170  *   `----------------------------------'                                       `----------------------------------'
171  *                                        ,-------------.       ,-------------.
172  *                                        |      |      |       |      |      |
173  *                                 ,------|------|------|       |------+------+------.
174  *                                 |      |      |      |       |      |      |      |
175  *                                 |      |      |------|       |------|      |      |
176  *                                 |      |      |      |       |      |      |      |
177  *                                 `--------------------'       `--------------------'
178  */
179 // ACCENTED CHARACTERS
180 [ACC] = LAYOUT_ergodox(
181        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,     KC_TRNS,    KC_TRNS, KC_TRNS,
182
183        KC_TRNS, KC_TRNS, FR_AGRV, M(M_ACIRC),  M(M_AUMLT), KC_TRNS, KC_TRNS,
184        KC_TRNS, FR_EACU, FR_EGRV, M(M_ECIRC),  M(M_EUMLT), KC_TRNS,
185        KC_TRNS, KC_TRNS, FR_UGRV, M(M_UCIRC),  M(M_UUMLT), KC_TRNS, KC_TRNS,
186        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,     KC_TRNS,
187                                                KC_TRNS, KC_TRNS,
188                                                     KC_TRNS,
189                                   KC_TRNS, KC_TRNS, KC_TRNS,
190        // right hand
191        KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
192        KC_TRNS,  KC_TRNS, KC_TRNS, M(M_ICIRC), M(M_IUMLT), KC_TRNS, KC_TRNS,
193                  KC_TRNS, KC_TRNS, M(M_OCIRC), M(M_OUMLT), KC_TRNS, KC_TRNS,
194        KC_TRNS,  KC_TRNS, KC_TRNS, M(M_YCIRC), M(M_YUMLT), KC_TRNS, KC_TRNS,
195                           KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
196        KC_TRNS, KC_TRNS,
197        KC_TRNS,
198        KC_TRNS, KC_TRNS, KC_TRNS
199 ),
200 };
201
202 const uint16_t PROGMEM fn_actions[] = {
203     [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
204 };
205
206 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
207 {
208   // MACRODOWN only works in this function
209   switch(id) {
210   case QCOPY:
211     if (record->event.pressed) {
212       return MACRO(I(255),
213                    D(LCTRL),
214                    T(C),
215                    D(LSFT),
216                    T(C),
217                    U(LCTRL),
218                    U(LSFT),
219                    END);
220     }
221     break;
222   case QPASTE:
223     if (record->event.pressed) {
224       return MACRO(I(255),
225                    D(LCTRL),
226                    D(LSFT),
227                    T(V),
228                    U(LCTRL),
229                    T(INS),
230                    U(LSFT),
231                    END);
232     }
233     break;
234   case M_ACIRC:
235     if (record->event.pressed) {
236       return MACRO(T(LBRC), // FR_CIRC
237                    T(Q), // FR_A
238                    END);
239     }
240     break;
241   case M_ECIRC:
242     if (record->event.pressed) {
243       return MACRO(T(LBRC), // FR_CIRC
244                    T(E),
245                    END);
246     }
247     break;
248   case M_UCIRC:
249     if (record->event.pressed) {
250       return MACRO(T(LBRC), // FR_CIRC
251                    T(U),
252                    END);
253     }
254     break;
255   case M_ICIRC:
256     if (record->event.pressed) {
257       return MACRO(T(LBRC), // FR_CIRC
258                    T(I),
259                    END);
260     }
261     break;
262   case M_OCIRC:
263     if (record->event.pressed) {
264       return MACRO(T(LBRC), // FR_CIRC
265                    T(O),
266                    END);
267     }
268     break;
269   case M_YCIRC:
270     if (record->event.pressed) {
271       return MACRO(T(LBRC), // FR_CIRC
272                    T(Y),
273                    END);
274     }
275     break;
276   case M_AUMLT:
277     if (record->event.pressed) {
278       return MACRO(D(LSFT),
279                    T(LBRC),
280                    U(LSFT),
281                    T(Q),
282                    END);
283     }
284     break;
285   case M_EUMLT:
286     if (record->event.pressed) {
287       return MACRO(D(LSFT),
288                    T(LBRC),
289                    U(LSFT),
290                    T(E),
291                    END);
292     }
293     break;
294   case M_UUMLT:
295     if (record->event.pressed) {
296       return MACRO(D(LSFT),
297                    T(LBRC),
298                    U(LSFT),
299                    T(U),
300                    END);
301     }
302     break;
303   case M_IUMLT:
304     if (record->event.pressed) {
305       return MACRO(D(LSFT),
306                    T(LBRC),
307                    U(LSFT),
308                    T(I),
309                    END);
310     }
311     break;
312   case M_OUMLT:
313     if (record->event.pressed) {
314       return MACRO(D(LSFT),
315                    T(LBRC),
316                    U(LSFT),
317                    T(O),
318                    END);
319     }
320     break;
321   case M_YUMLT:
322     if (record->event.pressed) {
323       return MACRO(D(LSFT),
324                    T(LBRC),
325                    U(LSFT),
326                    T(Y),
327                    END);
328     }
329     break;
330
331   }
332   return MACRO_NONE;
333 };
334
335 // Runs just one time when the keyboard initializes.
336 void matrix_init_user(void) {
337
338 };
339
340
341 // Runs constantly in the background, in a loop.
342 void matrix_scan_user(void) {
343
344     uint8_t layer = biton32(layer_state);
345
346     ergodox_board_led_off();
347     ergodox_right_led_1_off();
348     ergodox_right_led_2_off();
349     ergodox_right_led_3_off();
350     switch (layer) {
351     case SYMB:
352       ergodox_right_led_1_on();
353       break;
354     case MDIA:
355       ergodox_right_led_2_on();
356       break;
357     case ACC:
358       ergodox_right_led_3_on();
359       break;
360     default:
361       // none
362       break;
363     }
364
365 };