]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboard/ergodox_ez/keymaps/bepo/keymap.c
Use enums to define layers and macros
[qmk_firmware.git] / keyboard / ergodox_ez / keymaps / bepo / keymap.c
1 /* TypeMatrix-2030-like keymap  */
2 #include "ergodox_ez.h"
3 #include "debug.h"
4 #include "action_layer.h"
5 #include "led.h"
6 #include "keymap_extras/keymap_bepo.h"
7
8 enum layers {
9     LR_BASE, // default layer
10     LR_NUMR, // numeric layer
11     LR_FN, // fn layer
12 };
13
14 enum macros {
15     M_DBL0,
16     M_FNLR,
17 };
18
19 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
20 /* Basic layer
21  *
22  * ,--------------------------------------------------.           ,--------------------------------------------------.
23  * |   $    |   "  |   «  |   »  |   (  |   )  | Del  |           | Del  |   @  |   +  |   -  |   /  |   *  |   W    |
24  * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
25  * | Tab    |   B  |   É  |   P  |   O  |   È  |Backsp|           |Backsp|   ^  |   V  |   D  |   L  |   J  |   Z    |
26  * |--------+------+------+------+------+------|ace   |           |ace   |------+------+------+------+------+--------|
27  * |   =    |   A  |   U  |   I  |   E  |   ,  |------|           |------|   C  |   T  |   S  |   R  |   N  |   M    |
28  * |--------+------+------+------+------+------|Enter |           |Enter |------+------+------+------+------+--------|
29  * | LShift |   À  |   Y  |   X  |   .  |   K  |      |           |      |   '  |   Q  |   G  |   H  |   F  | RShift |
30  * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
31  *   |LCtrl |  fn  | LGui | Play |App/Alt|                                      |Alt Gr|   %  | Home |   Ç  |End/Ctl|
32  *   `-----------------------------------'                                      `-----------------------------------'
33  *                                       ,--------------.       ,-------------.
34  *                                       |Esc/Alt| num  |       | Left |Right |
35  *                                ,------+-------+------|       |------+------+------.
36  *                                |      |       | PgUp |       |  Up  |      |      |
37  *                                |Space |LShift |------|       |------|RShift|Space |
38  *                                |      |       | PgDn |       | Down |      |      |
39  *                                `---------------------'       `--------------------'
40  */
41 // If it accepts an argument (i.e, is a function), it doesn't need KC_.
42 // Otherwise, it needs KC_*
43 [LR_BASE] = KEYMAP(  // layer 0 : default
44         // left hand
45         BP_DLR,     KC_1,      KC_2,    KC_3,    KC_4,          KC_5,    KC_DELT,
46         KC_TAB,     BP_B,      BP_ECUT, BP_P,    BP_O,          BP_EGRV, KC_BSPC,
47         BP_EQL,     BP_A,      BP_U,    BP_I,    BP_E,          BP_COMM,
48         KC_LSFT,    BP_AGRV,   BP_Y,    BP_X,    BP_DOT,        BP_K,    KC_ENT,
49         KC_LCTL,    M(M_FNLR), KC_LGUI, KC_MPLY, ALT_T(KC_APP),
50
51                                               ALT_T(KC_ESC),  TG(LR_NUMR),
52                                                               KC_PGUP,
53                                             KC_SPC, KC_LSFT,  KC_PGDN,
54
55         // right hand
56         KC_DELT,   KC_6,     KC_7,    KC_8,    KC_9,    KC_0,     BP_W,
57         KC_BSPC,   BP_DCRC,  BP_V,    BP_D,    BP_L,    BP_J,     BP_Z,
58                    BP_C,     BP_T,    BP_S,    BP_R,    BP_N,     BP_M,
59         KC_ENT,    BP_APOS,  BP_Q,    BP_G,    BP_H,    BP_F,     KC_RSFT,
60                              BP_ALGR, BP_PERC, KC_HOME, BP_CCED,  CTL_T(KC_END),
61
62         KC_LEFT, KC_RGHT,
63         KC_UP,
64         KC_DOWN, KC_RSFT,  KC_SPC
65     ),
66 /* Numeric Layer
67  *
68  * ,--------------------------------------------------.           ,--------------------------------------------------.
69  * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |      |      |  Tab |   /  |   *  |   -    |
70  * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
71  * |        |  F6  |  F7  |  F8  |  F9  |  F10 |      |           |      |      | Home |   7  |   8  |   9  |   +    |
72  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
73  * |        |  F11 |  F12 |      |      |      |------|           |------|  Up  | End  |   4  |   5  |   6  |   +    |
74  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
75  * |        |      |      |      |      |      |      |           | Left | Down | Right|   1  |   2  |   3  |KpEnter |
76  * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
77  *   |      |      |      |      |      |                                       |      |   0  |  00  |   .  |Etr/Ctl|
78  *   `----------------------------------'                                       `-----------------------------------'
79  *                                        ,-------------.       ,-------------.
80  *                                        |      |      |       |n.lock|c.lock|
81  *                                 ,------|------|------|       |------+------+------.
82  *                                 |      |      |      |       |      |      |      |
83  *                                 |      |      |------|       |------|      |      |
84  *                                 |      |      |      |       |      |      |      |
85  *                                 `--------------------'       `--------------------'
86  */
87 // SYMBOLS
88 [LR_NUMR] = KEYMAP(
89        // left hand
90        KC_TRNS, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_TRNS,
91        KC_TRNS, KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_TRNS,
92        KC_TRNS, KC_F11,  KC_F12,  KC_TRNS, KC_TRNS, KC_TRNS,
93        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
94        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
95
96                                        KC_TRNS,KC_TRNS,
97                                                KC_TRNS,
98                               KC_TRNS, KC_TRNS,KC_TRNS,
99        // right hand
100        KC_TRNS, KC_F6,   KC_F7,   KC_TAB,  KC_PSLS,  KC_PAST, KC_PMNS,
101        KC_TRNS, KC_TRNS, KC_HOME, KC_P7,   KC_P8,    KC_P9,   KC_PPLS,
102                 KC_UP,   KC_END,  KC_P4,   KC_P5,    KC_P6,   KC_PPLS,
103        KC_LEFT, KC_DOWN, KC_RGHT, KC_P1,   KC_P2,    KC_P3,   KC_PENT,
104                          KC_TRNS, KC_P0,   M(M_DBL0),KC_PDOT, CTL_T(KC_PENT),
105
106        KC_NLCK, KC_CAPS,
107        KC_TRNS,
108        KC_TRNS, KC_TRNS, KC_TRNS
109 ),
110 /* fn layer
111  *
112  * ,--------------------------------------------------.           ,--------------------------------------------------.
113  * |        |      |      |      |      |      |Insert|           |Insert|Eject |Power |Sleep | Wake |PrtScr|ScrollLk|
114  * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
115  * |        |      |      |      |      |      |VolUp |           |      |      |      |      |      |      | Pause  |
116  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
117  * |        |      |      | Calc | Mail |Browsr|------|           |------|      |      |      |      |      |        |
118  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
119  * |        |      | cut  | copy |paste | Mute |VolDn |           |      |      |      |      |      |      |        |
120  * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
121  *   |      |      |      |      |      |                                       |      |      |      |      |      |
122  *   `----------------------------------'                                       `----------------------------------'
123  *                                        ,-------------.       ,-------------.
124  *                                        |      |      |       |      |      |
125  *                                 ,------|------|------|       |------+------+------.
126  *                                 |      |      |      |       | Next |      |      |
127  *                                 | Mute |      |------|       |------|      |      |
128  *                                 |      |      |      |       | Prev |      |      |
129  *                                 `--------------------'       `--------------------'
130  */
131 // MEDIA AND MOUSE
132 [LR_FN] = KEYMAP(
133        KC_TRNS,   KC_TRNS, KC_TRNS,      KC_TRNS,     KC_TRNS,      KC_TRNS, KC_INS,
134        KC_TRNS,   KC_TRNS, KC_TRNS,      KC_TRNS,     KC_TRNS,      KC_TRNS, KC_VOLU,
135        KC_TRNS,   KC_TRNS, KC_TRNS,      KC_CALC,     KC_MAIL,      KC_WHOM,
136        KC_TRNS,   KC_TRNS, LSFT(KC_DELT),LCTL(KC_INS),LSFT(KC_INS), KC_MUTE, KC_VOLD,
137        KC_TRNS,   KC_TRNS, KC_TRNS,      KC_TRNS,     KC_TRNS,
138
139                                            KC_TRNS, KC_TRNS,
140                                                     KC_TRNS,
141                                   KC_MUTE, KC_TRNS, KC_TRNS,
142     // right hand
143        KC_INS,   KC_EJCT, KC_PWR,  KC_SLEP, KC_WAKE, KC_PSCR, KC_SLCK,
144        KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PAUS,
145                  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
146        KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
147                           KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
148
149        KC_TRNS, KC_TRNS,
150        KC_MPRV,
151        KC_MNXT, KC_TRNS, KC_TRNS
152 ),
153 };
154
155 const uint16_t PROGMEM fn_actions[] = {
156 };
157
158 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
159 {
160   // MACRODOWN only works in this function
161     switch(id) {
162         case M_DBL0:
163             if (record->event.pressed) {
164               return MACRO( I(25), T(P0), T(P0), END );
165             }
166         break;
167         case M_FNLR:
168             layer_invert(LR_NUMR);
169             layer_invert(LR_FN);
170             break;
171     }
172     return MACRO_NONE;
173 };
174
175 // Runs just one time when the keyboard initializes.
176 void * matrix_init_user(void) {
177     return NULL;
178 };
179
180 // Runs constantly in the background, in a loop.
181 void * matrix_scan_user(void) {
182
183     ergodox_board_led_off();
184     ergodox_right_led_1_off();
185     ergodox_right_led_2_off();
186     ergodox_right_led_3_off();
187     // led 1: numeric layer
188     if (layer_state & (1 << LR_NUMR)) {
189         ergodox_right_led_1_on();
190     }
191     // led 3: caps lock
192     if (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) {
193       ergodox_right_led_3_on();
194     }
195     return NULL;
196 };