1 static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
3 * Keymap: Default Layer in QWERTY
5 * ,--------------------------------------------------. ,--------------------------------------------------.
6 * | ~ | 1 | 2 | 3 | 4 | 5 | \ | | - | 6 | 7 | 8 | 9 | 0 | = |
7 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
8 * | Tab | Q | W | E | R | T | ~L1 | | ~L3 | Y | U | I | O | P | [ |
9 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
10 * | LShift | A | S | D | F | G |------| |------| H | J | K | L | ; | ' FN14 |
11 * |--------+------+------+------+------+------| L0 | | ~L4 |------+------+------+------+------+--------|
12 * | LCtrl | Z | X | C | V | B | | | | N | M | , | . | / | ] FN15 |
13 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
14 * | ~L1 | ~L2 | Caps | LAlt | LGui | | Lft | Up | Dn | Rght | ~L4 |
15 * `----------------------------------' `----------------------------------'
16 * ,-------------. ,-------------.
17 * | +L2 | Home | | PgUp | Del |
18 * ,------|------|------| |------+------+------.
19 * | | | End | | PgDn | | |
20 * | BkSp | ESC |------| |------| Enter| Space|
21 * | | | Spc | | Ins | | |
22 * `--------------------' `--------------------'
26 ****************************************************************************************************
28 * Under XOrg, I use my own mapping from QWERTY to "Workman for Programmers"
29 * See XOrg files in ./addons/ subdirectory.
31 * I have to do so, because of two things:
32 * 1) my native language is Russian, and XOrg keymap for it is based on QWERTY layout
33 * 2) I want to have non-standart shifted keys, like $ (as normal) and @ (as shifted), or _ and -
35 * And even if (2) could be solved using FN* keys (but there is limit in firmware for only 32 such
36 * keys), then (1) can't be solved at firmware level at all.
38 * So, I have to stick with QWERTY as my main layout + my own XOrg keyboard layout for English.
39 * But sometimes I have to input something when XOrg is not active - for example, in Linux console,
40 * or in firmware console (while debugging firmware), or when keyboard is connected to not my computer.
42 * For such cases I have Layer5 :)
43 * // hint: switch to Layer5 is only at Layer4
45 ****************************************************************************************************
49 * Keymap: Default Layer in Workman
51 * ,--------------------------------------------------. ,--------------------------------------------------.
52 * | ~ | ; | ! | # | { | } | ' | | ^ | [ | ] | * | ( | ) | = |
53 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
54 * | Tab | Q | D | R | W | B | ~L1 | | ~L3 | J | F | U | P | $ | : |
55 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
56 * | LShift | A | S | H | T | G |------| |------| Y | N | E | O | I | - FN14 |
57 * |--------+------+------+------+------+------| L0 | | ~L4 |------+------+------+------+------+--------|
58 * | LCtrl | Z | X | M | C | V | | | | K | L | , | . | / | | FN15 |
59 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
60 * | ~L1 | ~L2 | Caps | LAlt | LGui | | Lft | Up | Dn | Rght | ~L4 |
61 * `----------------------------------' `----------------------------------'
62 * ,-------------. ,-------------.
63 * | +L2 | Home | | PgUp | Del |
64 * ,------|------|------| |------+------+------.
65 * | | | End | | PgDn | | |
66 * | BkSp | ESC |------| |------| Enter| Space|
67 * | | | Spc | | Ins | | |
68 * `--------------------' `--------------------'
70 * Keymap: Default Layer in Workman / with Shift
72 * ,--------------------------------------------------. ,--------------------------------------------------.
73 * | ` | 1 | 2 | 3 | 4 | 5 | " | | \ | 6 | 7 | 8 | 9 | 0 | + |
74 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
75 * | Tab | Q | D | R | W | B | ~L1 | | ~L3 | J | F | U | P | @ | % |
76 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
77 * | LShift | A | S | H | T | G |------| |------| Y | N | E | O | I | _ FN14 |
78 * |--------+------+------+------+------+------| L0 | | ~L4 |------+------+------+------+------+--------|
79 * | LCtrl | Z | X | M | C | V | | | | K | L | , | . | / | & FN15 |
80 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
81 * | ~L1 | ~L2 | Caps | LAlt | LGui | | Lft | Up | Dn | Rght | ~L4 |
82 * `----------------------------------' `----------------------------------'
83 * ,-------------. ,-------------.
84 * | +L2 | Home | | PgUp | Del |
85 * ,------|------|------| |------+------+------.
86 * | | | End | | PgDn | | |
87 * | BkSp | ESC |------| |------| Enter| Space|
88 * | | | Spc | | Ins | | |
89 * `--------------------' `--------------------'
93 KEYMAP( // layout: layer 0: default
95 GRV, 1, 2, 3, 4, 5, BSLS,
96 TAB, Q, W, E, R, T, FN1,
98 LCTL,Z, X, C, FN19,B, FN0,
99 FN1, FN6, CAPS,LALT,FN17,
104 MINS,6, 7, 8, 9, 0, EQL,
105 FN3, Y, U, I, O, P, LBRC,
106 FN18,J, K, L, FN21,FN14,
107 FN4, N, M, COMM,DOT, SLSH,FN15,
108 LEFT,UP, DOWN,RGHT,FN4,
114 KEYMAP( // layout: layer 1: F-keys instead of numbers
116 TRNS,F1, F2, F3, F4, F5, F6,
117 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
118 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
119 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
120 TRNS,TRNS,TRNS,TRNS,TRNS,
125 F7, F8, F9, F10, F11, F12, TRNS,
126 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
127 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
128 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
129 TRNS,TRNS,TRNS,TRNS,TRNS,
135 KEYMAP( // layout: layer 2: mouse + numpad
137 TRNS,NO, NO, NO, NO, PAUS,PSCR,
138 TRNS,WH_L,WH_U,WH_D,WH_R,BTN2,TRNS,
139 TRNS,MS_L,MS_U,MS_D,MS_R,BTN1,
140 TRNS,NO, NO, NO, TRNS,BTN3,TRNS,
141 TRNS,TRNS,TRNS,TRNS,TRNS,
146 SLCK,NLCK,PSLS,PAST,PAST,PMNS,BSPC,
147 TRNS,NO, P7, P8, P9, PMNS,BSPC,
148 TRNS,P4, P5, P6, PPLS,PENT,
149 TRNS,NO, P1, P2, P3, PPLS,PENT,
150 P0, PDOT,SLSH,PENT,PENT,
156 KEYMAP( // layout: layer 3: F-keys only
158 TRNS,NO, NO, NO, NO, NO, NO,
159 TRNS,F13, F14, F15, F16, NO, TRNS,
160 TRNS,F17, F18, F19, F20, NO,
161 TRNS,F21, F22, F23, F24, NO, TRNS,
162 TRNS,TRNS,TRNS,TRNS,TRNS,
167 NO, NO, NO, NO, NO, NO, TRNS,
168 TRNS,NO, F1, F2, F3, F4, TRNS,
169 NO, F5, F6, F7, F8, TRNS,
170 TRNS,NO, F9, F10, F11, F12, TRNS,
171 TRNS,TRNS,TRNS,TRNS,TRNS,
177 KEYMAP( // layout: layer 4: F-keys + cursor
179 TRNS,F1, F2, F3, F4, F5, F6,
180 FN7, NO, PGUP,UP, PGDN,PGUP,TRNS,
181 TRNS,NO, LEFT,DOWN,RGHT,PGDN,
182 TRNS,NO, NO, END, HOME,NO, TRNS,
183 FN5, TRNS,TRNS,TRNS,TRNS,
188 F7, F8, F9, F10, F11, F12, MINS,
189 TRNS,PGUP,PGUP,UP, PGDN,NO, FN7,
190 PGDN,LEFT,DOWN,RGHT,NO, TRNS,
191 TRNS,NO, HOME,END, NO, NO, TRNS,
192 TRNS,TRNS,TRNS,TRNS,TRNS,
198 KEYMAP( // layout: layer 5: Workman layout
200 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
201 TRNS,Q, D, R, W, B, TRNS,
203 TRNS,Z, X, M, C, V, TRNS,
204 TRNS,TRNS,TRNS,TRNS,TRNS,
209 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
210 TRNS,J, F, U, P, 4, TRNS,
212 TRNS,K, L, TRNS,TRNS,TRNS,TRNS,
213 TRNS,TRNS,TRNS,TRNS,TRNS,
219 KEYMAP( // layout: layer 6: F-keys on home+1 row
221 TRNS,NO, NO, NO, NO, NO, NO,
222 TRNS,F1, F2, F3, F4, F5, F11,
223 TRNS,TRNS,NO, NO, NO, NO,
224 TRNS,NO, NO, NO, NO, NO, TRNS,
225 TRNS,TRNS,TRNS,LALT,LGUI,
230 NO, NO, NO, NO, NO, NO, TRNS,
231 F12, F6, F7, F8, F9, F10, PGUP,
232 NO, NO, NO, NO, TRNS,PGDN,
233 TRNS,NO, NO, NO, NO, NO, TRNS,
234 RGUI,RALT,TRNS,TRNS,TRNS,
240 KEYMAP( // layout: layer 7: F-keys on right hand
242 TRNS,NO, NO, NO, NO, NO, NO,
243 TRNS,NO, NO, NO, NO, NO, TRNS,
244 TRNS,TRNS,NO, NO, NO, NO,
245 TRNS,NO, NO, NO, NO, NO, TRNS,
246 TRNS,TRNS,TRNS,LALT,LGUI,
251 NO, NO, NO, NO, NO, NO, TRNS,
252 TRNS,MINS,F1, F2, F3, F4, PGUP,
253 BSLS,F5, F6, F7, F8, PGDN,
254 TRNS,FN22,F9, F10, F11, F12, FN23,
255 RGUI,RALT,TRNS,TRNS,TRNS,
262 // templates to copy from
264 KEYMAP( // layout: layer N: transparent on edges, all others are empty
266 TRNS,NO, NO, NO, NO, NO, NO,
267 TRNS,NO, NO, NO, NO, NO, TRNS,
268 TRNS,NO, NO, NO, NO, NO,
269 TRNS,NO, NO, NO, NO, NO, TRNS,
270 TRNS,TRNS,TRNS,LALT,LGUI,
275 NO, NO, NO, NO, NO, NO, TRNS,
276 TRNS,NO, NO, NO, NO, NO, TRNS,
277 NO, NO, NO, NO, NO, TRNS,
278 TRNS,NO, NO, NO, NO, NO, TRNS,
279 RGUI,RALT,TRNS,TRNS,TRNS,
284 KEYMAP( // layout: layer N: fully transparent
286 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
287 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
288 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
289 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
290 TRNS,TRNS,TRNS,TRNS,TRNS,
295 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
296 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
297 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
298 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
299 TRNS,TRNS,TRNS,TRNS,TRNS,
308 /* id for user defined functions */
314 * Fn action definition
316 static const uint16_t PROGMEM fn_actions[] = {
317 ACTION_LAYER_SET(0, ON_BOTH), // FN0 - switch to Layer0
318 ACTION_LAYER_MOMENTARY(1), // FN1 - push Layer1
319 ACTION_LAYER_SET(2, ON_BOTH), // FN2 - switch to Layer2
320 ACTION_LAYER_MOMENTARY(3), // FN3 - push Layer3
321 ACTION_LAYER_MOMENTARY(4), // FN4 - push Layer4
322 ACTION_LAYER_SET(5, ON_BOTH), // FN5 - switch to Layer5
323 ACTION_LAYER_MOMENTARY(2), // FN6 - push Layer2
324 ACTION_FUNCTION(TEENSY_KEY), // FN7 - Teensy key
326 ACTION_MODS_TAP_KEY(MOD_LCTL, KC_BSPC), // FN8 = LShift with tap BackSpace
327 ACTION_MODS_TAP_KEY(MOD_LSFT, KC_ESC), // FN9 = LCtrl with tap Escape
328 ACTION_MODS_TAP_KEY(MOD_LALT, KC_SPC), // FN10 = LAlt with tap Space
329 ACTION_MODS_TAP_KEY(MOD_RALT, KC_INS), // FN11 = RAlt with tap Ins
330 ACTION_MODS_TAP_KEY(MOD_RSFT, KC_ENT), // FN12 = RShift with tap Enter
331 ACTION_MODS_TAP_KEY(MOD_RCTL, KC_SPC), // FN13 = RCtrl with tap Space
332 ACTION_MODS_TAP_KEY(MOD_RSFT, KC_QUOT), // FN14 = RShift with tap quotes
333 ACTION_MODS_TAP_KEY(MOD_RCTL, KC_RBRC), // FN15 = RCtrl with tap ]
334 ACTION_MODS_TAP_KEY(MOD_LSFT, KC_TAB), // FN16 = LShift with tap Tab
335 ACTION_MODS_TAP_KEY(MOD_LGUI, KC_ESC), // FN17 = LShift with tap Escape
337 ACTION_LAYER_TAP_KEY(2, KC_H), // FN18 = L2 symbols on H key, to use with Mouse keys
338 ACTION_LAYER_TAP_KEY(2, KC_V), // FN19 = L2 symbols on V key, to use with Numpad keys
339 ACTION_LAYER_TAP_KEY(7, KC_A), // FN20 = L7 symbols on A key, to use with F* keys
340 ACTION_LAYER_TAP_KEY(6, KC_SCLN), // FN21 = L6 symbols on ; key, to use with F* keys
342 ACTION_MODS_KEY(MOD_LSFT, KC_BSLS), // FN22 = Shifted BackSlash // " in Workman
343 ACTION_MODS_KEY(MOD_LSFT, KC_MINS), // FN23 = Shifted Minus // \ in Workman
346 void action_function(keyrecord_t *event, uint8_t id, uint8_t opt)
348 print("action_function called\n");
349 print("id = "); phex(id); print("\n");
350 print("opt = "); phex(opt); print("\n");
351 if (id == TEENSY_KEY) {
353 print("\n\nJump to bootloader... ");
355 bootloader_jump(); // should not return
356 print("not supported.\n");