]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/ergodox/keymaps/don/keymap.c
add plover map
[qmk_firmware.git] / keyboards / ergodox / keymaps / don / keymap.c
1 /*
2 Copyright 2016 Fred Sundvik <fsundvik@gmail.com>
3 Jun Wako <wakojun@gmail.com>
4
5 This program is free software: you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation, either version 2 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program.  If not, see <http://www.gnu.org/licenses/>.
17 */
18
19 #include "ergodox.h"
20 #include "debug.h"
21 #include "action_layer.h"
22 #include "version.h"
23 #include "keymap_plover.h"
24
25 #define BASE 0
26 #define SYMB 1
27 #define MOUS 2
28 #define FNXN 3
29 #define NUMP 4
30 #define PLVR 5
31
32
33 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
34     [BASE] = KEYMAP(  // layer 0 : default
35         // left hand
36         KC_ESC, KC_1,  KC_2,   KC_3,   KC_4,   KC_5,   KC_EQL,
37         KC_BSLS,KC_Q,  KC_W,   KC_E,   KC_R,   KC_T,   TG(MOUS),
38         KC_TAB, KC_A,  KC_S,   KC_D,   KC_F,   KC_G,
39         KC_LSFT,KC_Z,  KC_X,   KC_C,   KC_V,   KC_B,   MO(SYMB),
40         KC_EQL,KC_GRV, KC_BSLS,KC_LEFT,KC_RGHT,
41                                       KC_LALT,KC_LGUI,
42                                            KC_HOME,
43                                  KC_BSPC,KC_LCTL, KC_END,
44         // right hand
45         TG(NUMP), KC_6,KC_7, KC_8,   KC_9,   KC_0,   KC_MINS,
46           KC_LBRC,KC_Y,KC_U, KC_I,   KC_O,   KC_P,   KC_RBRC,
47                   KC_H,KC_J, KC_K,   KC_L,   KC_SCLN,KC_QUOT,
48         TG(SYMB), KC_N,KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT,
49                       KC_UP, KC_DOWN,KC_LEFT,  KC_RGHT,KC_RGUI,
50         KC_DEL,KC_RGUI,
51         KC_PGUP,
52         KC_PGDN,KC_ENT, KC_SPC
53     ),
54
55     [SYMB] = KEYMAP(  // layer 1 : function and symbol keys
56         // left hand
57        TG(PLVR),KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_F11,
58         KC_TRNS,KC_LBRC,KC_RBRC,KC_LBRC,KC_RBRC,KC_SCLN,KC_TRNS,
59         KC_TRNS,KC_BSLS,KC_SLSH,KC_9   ,KC_0   ,KC_SCLN,
60         KC_TRNS,KC_1   ,KC_2   ,KC_3   ,KC_4   ,KC_5   ,KC_TRNS,
61        TG(FNXN),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
62                                       KC_TRNS,KC_TRNS,
63                                            KC_TRNS,
64                                  KC_TRNS,KC_TRNS,KC_TRNS,
65         // right hand
66              KC_F12, KC_F6,  KC_F7,  KC_F8,  KC_F9,  KC_F10, KC_PWR ,
67              KC_TRNS,KC_TRNS,KC_EQL ,KC_EQL ,KC_MINS,KC_MINS,KC_VOLU,
68                      KC_LEFT,KC_DOWN,KC_UP  ,KC_RGHT,KC_TRNS,KC_VOLD,
69              KC_FN5 ,KC_6   ,KC_7   ,KC_8   ,KC_9   ,KC_0   ,KC_MUTE,
70                      KC_MRWD,KC_MSTP,KC_MPLY,KC_MPRV,KC_MNXT,
71         KC_TRNS,KC_TRNS,
72         KC_TRNS,
73         KC_TRNS,KC_TRNS,KC_TRNS
74     ),
75     [MOUS] = KEYMAP(  // layer 2 : Mouse
76         // left hand
77         KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
78         KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS ,
79         KC_TRNS,KC_BTN4,KC_BTN2,KC_BTN3,KC_BTN1,KC_TRNS,
80         KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
81         KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
82                                       KC_TRNS,KC_TRNS,
83                                            KC_TRNS,
84                                  KC_TRNS,KC_TRNS,KC_TRNS,
85         // right hand
86              KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
87              KC_TRNS,KC_ACL0,KC_TRNS,KC_WH_D,KC_WH_U,KC_TRNS,KC_TRNS,
88                      KC_ACL1,KC_MS_L,KC_MS_D,KC_MS_U,KC_MS_R,KC_TRNS,
89              KC_TRNS,KC_ACL2,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
90                              KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
91         KC_TRNS,KC_TRNS,
92         KC_TRNS,
93         KC_TRNS,KC_TRNS,KC_TRNS
94     ),
95
96     [FNXN] = KEYMAP(  // layer 3 : keyboard functions
97         // left hand
98         RESET,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
99         KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_FN5,
100         KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
101         KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_FN5,
102         KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
103                                       KC_TRNS,KC_TRNS,
104                                            KC_TRNS,
105                                  KC_TRNS,KC_TRNS,KC_TRNS,
106         // right hand
107             KC_FN5, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
108             KC_FN5, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
109                     KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
110             KC_FN5, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
111                        KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
112         KC_TRNS,KC_TRNS,
113         KC_TRNS,
114         KC_TRNS,KC_TRNS,KC_TRNS
115     ),
116
117     [NUMP] = KEYMAP(  // layer 4: numpad
118         // left hand
119         KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
120         KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
121         KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
122         KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
123         KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
124                                       KC_TRNS,KC_TRNS,
125                                            KC_TRNS,
126                                  KC_TRNS,KC_TRNS,KC_TRNS,
127         // right hand
128              KC_FN5,KC_NLCK, KC_PSLS,KC_PAST,KC_PAST,KC_PMNS,KC_BSPC,
129              KC_FN5 ,KC_NO,  KC_P7,  KC_P8,  KC_P9,  KC_PMNS,KC_BSPC,
130                      KC_NO,  KC_P4,  KC_P5,  KC_P6,  KC_PPLS,KC_PENT,
131              KC_FN5 ,KC_NO,  KC_P1,  KC_P2,  KC_P3,  KC_PPLS,KC_PENT,
132                      KC_P0,  KC_PDOT,KC_SLSH,KC_PENT,KC_PENT,
133         KC_TRNS,KC_TRNS,
134         KC_TRNS,
135         KC_TRNS,KC_TRNS,KC_TRNS
136     ),
137 /* Keymap 8: Steno for Plover
138  *
139  * ,--------------------------------------------------.           ,----------------------------------------
140  * |        |      |      |      |      |      | BASE |           |      |      |      |      |      |     
141  * |--------+------+------+------+------+-------------|           |------+------+------+------+------+-----
142  * |        |   #  |   #  |   #  |   #  |   #  |   #  |           |  #   |  #   |  #   |   #  |   #  |  #  
143  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+-----
144  * |        |      |   T  |   P  |   H  |      |------|           |------|      |  F   |   P  |   L  |  T  
145  * |--------+   S  +------+------+------+   *  |   *  |           |  *   |  *   +------+------+------+-----
146  * |        |      |   K  |   W  |   R  |      |      |           |      |      |  R   |   B  |   G  |  S  
147  * `--------+------+------+------+------+-------------'           `-------------+------+------+------+-----
148  *   |      |      |      |      |      |                                       |      |      |      |     
149  *   `----------------------------------'                                       `--------------------------
150  *                                        ,-------------.       ,-------------.
151  *                                        |      |      |       |      |      |
152  *                                 ,------|------|------|       |------+------+------.
153  *                                 |      |      |      |       |      |      |      |
154  *                                 |   A  |   O  |------|       |------|  E   |  U   |
155  *                                 |      |      |      |       |      |      |      |
156  *                                 `--------------------'       `--------------------'
157  */
158
159 [PLVR] = KEYMAP(
160 // left hand
161 KC_NO,  KC_NO,  KC_NO,  KC_NO,   KC_NO,  KC_NO,   KC_FN0,
162 KC_NO,  PV_NUM, PV_NUM, PV_NUM,  PV_NUM, PV_NUM,  PV_NUM,
163 KC_NO,  PV_LS,  PV_LT,  PV_LP,   PV_LH,  PV_STAR,
164 KC_NO,  PV_LS,  PV_LK,  PV_LW,   PV_LR,  PV_STAR, PV_STAR,
165 KC_NO,  KC_NO,  KC_NO,  KC_NO,   KC_NO,
166                                            KC_NO, KC_NO,
167                                                          KC_NO,
168                                            PV_A,  PV_O,  KC_NO,
169
170         // right hand
171 KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,
172 PV_NUM,  PV_NUM,  PV_NUM,  PV_NUM,  PV_NUM,  PV_NUM,  PV_NUM,
173 PV_STAR, PV_RF,   PV_RP,   PV_RL,   PV_RT,   PV_RD,
174 PV_STAR, PV_STAR, PV_RR,   PV_RB,   PV_RG,   PV_RS,   PV_RZ,
175 KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,
176   KC_NO, KC_NO,
177   KC_NO,
178   KC_NO,PV_E, PV_U
179  ),
180 };
181 const uint16_t PROGMEM fn_actions[] = {
182     [0] = ACTION_LAYER_SET(BASE, ON_PRESS),                  // FN0 - push Layer0
183     [1] = ACTION_LAYER_MOMENTARY(SYMB),                      // FN1 - switch to Layer1
184     [2] = ACTION_LAYER_SET(MOUS, ON_PRESS),                  // FN2 - push Layer2
185     [3] = ACTION_LAYER_SET(FNXN, ON_PRESS),                  // FN3 - push Layer3
186     [4] = ACTION_LAYER_SET(NUMP, ON_PRESS),                  // FN4 - push Layer4
187     [5] = ACTION_LAYER_SET(BASE, ON_PRESS),                  // FN5 - push Layer0
188     [6] = ACTION_LAYER_SET(SYMB, ON_PRESS),                  // FN6 - push Layer1
189     [6] = ACTION_LAYER_SET(PLVR, ON_PRESS),                  // FN7 - push Layer5
190 };
191
192 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
193 {
194   // MACRODOWN only works in this function
195       switch(id) {
196         case 0:
197         if (record->event.pressed) {
198           register_code(KC_RSFT);
199         } else {
200           unregister_code(KC_RSFT);
201         }
202         break;
203       }
204     return MACRO_NONE;
205 };
206
207 // Runs just one time when the keyboard initializes.
208 void matrix_init_user(void) {
209
210 };
211
212 // Runs constantly in the background, in a loop.
213 void matrix_scan_user(void) {
214
215 };