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 | ~L5 | | ~L6 | Y | U | I | O | P | [ |
9 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
10 * | LShift | A | S | D | F | G |------| |------| H | J | K | L | ; | ' |
11 * |--------+------+------+------+------+------| L0 | | ~L7 |------+------+------+------+------+--------|
12 * | LCtrl | Z | X | C | V | B | | | | N | M | , | . | / | ] |
13 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
14 * | ~L5 | ~L2 | Caps | LAlt | LGui | | Lft | Up | Dn | Rght | ~L6 |
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 Layer1 :)
43 * // hint: switch to Layer1 is only at Layer6
45 ****************************************************************************************************
49 * Keymap: Default Layer in Workman
51 * ,--------------------------------------------------. ,--------------------------------------------------.
52 * | ~ | ; | ! | # | { | } | ' | | ^ | [ | ] | * | ( | ) | = |
53 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
54 * | Tab | Q | D | R | W | B | ~L5 | | ~L6 | J | F | U | P | $ | : |
55 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
56 * | LShift | A | S | H | T | G |------| |------| Y | N | E | O | I | - |
57 * |--------+------+------+------+------+------| L0 | | ~L7 |------+------+------+------+------+--------|
58 * | LCtrl | Z | X | M | C | V | | | | K | L | , | . | / | | |
59 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
60 * | ~L5 | ~L2 | Caps | LAlt | LGui | | Lft | Up | Dn | Rght | ~L6 |
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 | ~L5 | | ~L6 | J | F | U | P | @ | % |
76 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
77 * | LShift | A | S | H | T | G |------| |------| Y | N | E | O | I | _ |
78 * |--------+------+------+------+------+------| L0 | | ~L7 |------+------+------+------+------+--------|
79 * | LCtrl | Z | X | M | C | V | | | | K | L | , | . | / | & |
80 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
81 * | ~L5 | ~L2 | Caps | LAlt | LGui | | Lft | Up | Dn | Rght | ~L6 |
82 * `----------------------------------' `----------------------------------'
83 * ,-------------. ,-------------.
84 * | +L2 | Home | | PgUp | Del |
85 * ,------|------|------| |------+------+------.
86 * | | | End | | PgDn | | |
87 * | BkSp | ESC |------| |------| Enter| Space|
88 * | | | Spc | | Ins | | |
89 * `--------------------' `--------------------'
93 KEYMAP( // Layer0: default, leftled:none
95 GRV, 1, 2, 3, 4, 5, BSLS,
96 TAB, Q, W, E, R, T, FN19,
97 FN11,FN25,FN24,D, F, G,
98 LCTL,Z, X, C, FN23,B, FN15,
99 FN19,FN18,CAPS,LALT,FN12,
104 MINS,6, 7, 8, 9, 0, EQL,
105 FN20,Y, U, I, O, P, LBRC,
106 FN22,J, K, L, FN26,FN13,
107 FN21,N, M, COMM,DOT, SLSH,FN14,
108 LEFT,UP, DOWN,RGHT,FN20,
114 KEYMAP( // Layer1: Workman layout, leftled:all
116 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
117 TRNS,Q, D, R, W, B, TRNS,
119 TRNS,Z, X, M, C, V, TRNS,
120 TRNS,TRNS,TRNS,TRNS,TRNS,
125 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
126 TRNS,J, F, U, P, 4, TRNS,
128 TRNS,K, L, TRNS,TRNS,TRNS,TRNS,
129 TRNS,TRNS,TRNS,TRNS,TRNS,
135 KEYMAP( // Layer2: mouse + numpad, leftled:blue
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( // Layer3: F-keys + PgUp/PgDn on right hand, leftled:green
158 TRNS,NO, NO, NO, NO, NO, NO,
159 TRNS,NO, NO, NO, NO, NO, TRNS,
160 TRNS,NO, TRNS,NO, NO, NO,
161 TRNS,NO, NO, NO, NO, NO, TRNS,
162 TRNS,TRNS,TRNS,LALT,LGUI,
167 NO, NO, NO, NO, NO, NO, TRNS,
168 TRNS,NO, F1, F2, F3, F4, PGUP,
169 NO, F5, F6, F7, F8, PGDN,
170 TRNS,NO, F9, F10, F11, F12, NO,
171 RGUI,RALT,TRNS,TRNS,TRNS,
177 KEYMAP( // Layer4: unconvenient keys on right hand, leftled:red
179 TRNS,NO, NO, NO, NO, NO, NO,
180 TRNS,NO, NO, NO, NO, NO, TRNS,
181 TRNS,TRNS,NO, NO, NO, NO,
182 TRNS,NO, NO, NO, NO, NO, TRNS,
183 TRNS,TRNS,TRNS,LALT,LGUI,
188 // in Workman this will be:
195 NO, NO, NO, NO, NO, NO, TRNS,
196 TRNS,NO, 4, 5, 9, 0, PPLS,
197 NO, BSLS,FN1, MINS,MINS,FN2,
198 TRNS,NO, 6, FN3, FN4, 7, FN2,
199 TRNS,TRNS,TRNS,TRNS,TRNS,
205 KEYMAP( // Layer5: F-keys instead of numbers, leftled:red
207 TRNS,F1, F2, F3, F4, F5, F6,
208 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
209 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
210 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
211 TRNS,TRNS,TRNS,TRNS,TRNS,
216 F7, F8, F9, F10, F11, F12, TRNS,
217 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
218 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
219 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
220 TRNS,TRNS,TRNS,TRNS,TRNS,
226 KEYMAP( // Layer6: F-keys, cursor, Workman-layer switch, Teensy, leftled:red+onboard
228 TRNS,F1, F2, F3, F4, F5, F6,
229 FN0, NO, PGUP,UP, PGDN,PGUP,TRNS,
230 TRNS,NO, LEFT,DOWN,RGHT,PGDN,
231 TRNS,NO, NO, END, HOME,NO, TRNS,
232 FN16,TRNS,TRNS,TRNS,TRNS,
237 F7, F8, F9, F10, F11, F12, MINS,
238 TRNS,PGUP,PGUP,UP, PGDN,NO, FN0,
239 PGDN,LEFT,DOWN,RGHT,NO, TRNS,
240 TRNS,NO, HOME,END, NO, NO, TRNS,
241 TRNS,TRNS,TRNS,TRNS,TRNS,
251 KEYMAP( // Layer7: F-keys only
253 TRNS,NO, NO, NO, NO, NO, NO,
254 TRNS,F13, F14, F15, F16, NO, TRNS,
255 TRNS,F17, F18, F19, F20, NO,
256 TRNS,F21, F22, F23, F24, NO, TRNS,
257 TRNS,TRNS,TRNS,TRNS,TRNS,
262 NO, NO, NO, NO, NO, NO, TRNS,
263 TRNS,NO, F1, F2, F3, F4, TRNS,
264 NO, F5, F6, F7, F8, TRNS,
265 TRNS,NO, F9, F10, F11, F12, TRNS,
266 TRNS,TRNS,TRNS,TRNS,TRNS,
272 KEYMAP( // Layer8: F-keys on home+1 row
274 TRNS,NO, NO, NO, NO, NO, NO,
275 TRNS,F1, F2, F3, F4, F5, F11,
276 TRNS,TRNS,NO, NO, NO, NO,
277 TRNS,NO, NO, NO, NO, NO, TRNS,
278 TRNS,TRNS,TRNS,LALT,LGUI,
283 NO, NO, NO, NO, NO, NO, TRNS,
284 F12, F6, F7, F8, F9, F10, PGUP,
285 NO, NO, NO, NO, TRNS,PGDN,
286 TRNS,NO, NO, NO, NO, NO, TRNS,
287 RGUI,RALT,TRNS,TRNS,TRNS,
294 // templates to copy from
296 KEYMAP( // LayerN: transparent on edges + hard-defined thumb keys, all others are empty
298 TRNS,NO, NO, NO, NO, NO, NO,
299 TRNS,NO, NO, NO, NO, NO, TRNS,
300 TRNS,NO, NO, NO, NO, NO,
301 TRNS,NO, NO, NO, NO, NO, TRNS,
302 TRNS,TRNS,TRNS,LALT,LGUI,
307 NO, NO, NO, NO, NO, NO, TRNS,
308 TRNS,NO, NO, NO, NO, NO, TRNS,
309 NO, NO, NO, NO, NO, TRNS,
310 TRNS,NO, NO, NO, NO, NO, TRNS,
311 RGUI,RALT,TRNS,TRNS,TRNS,
316 KEYMAP( // LayerN: fully transparent
318 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
319 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
320 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
321 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
322 TRNS,TRNS,TRNS,TRNS,TRNS,
327 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
328 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
329 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
330 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
331 TRNS,TRNS,TRNS,TRNS,TRNS,
340 /* id for user defined functions */
346 * Fn action definition
348 static const uint16_t PROGMEM fn_actions[] = {
349 ACTION_FUNCTION(TEENSY_KEY), // FN0 - Teensy key
351 ACTION_MODS_KEY(MOD_LSFT, KC_BSLS), // FN1 = Shifted BackSlash // " in Workman
352 ACTION_MODS_KEY(MOD_LSFT, KC_MINS), // FN2 = Shifted Minus // \ in Workman
353 ACTION_MODS_KEY(MOD_LSFT, KC_COMM), // FN3 = Shifted comma // < in Workman
354 ACTION_MODS_KEY(MOD_LSFT, KC_DOT), // FN4 = Shifted dot // > in Workman
356 ACTION_MODS_TAP_KEY(MOD_LCTL, KC_BSPC), // FN5 = LShift with tap BackSpace
357 ACTION_MODS_TAP_KEY(MOD_LSFT, KC_ESC), // FN6 = LCtrl with tap Escape
358 ACTION_MODS_TAP_KEY(MOD_LALT, KC_SPC), // FN7 = LAlt with tap Space
359 ACTION_MODS_TAP_KEY(MOD_RALT, KC_INS), // FN8 = RAlt with tap Ins
360 ACTION_MODS_TAP_KEY(MOD_RSFT, KC_ENT), // FN9 = RShift with tap Enter
361 ACTION_MODS_TAP_KEY(MOD_RCTL, KC_SPC), // FN10 = RCtrl with tap Space
363 ACTION_MODS_TAP_KEY(MOD_LSFT, KC_TAB), // FN11 = LShift with tap Tab
364 ACTION_MODS_TAP_KEY(MOD_LGUI, KC_ESC), // FN12 = LGui with tap Escape
365 ACTION_MODS_TAP_KEY(MOD_RSFT, KC_QUOT), // FN13 = RShift with tap quotes
366 ACTION_MODS_TAP_KEY(MOD_RCTL, KC_RBRC), // FN14 = RCtrl with tap ]
368 ACTION_LAYER_SET(0, ON_BOTH), // FN15 - set Layer0
369 ACTION_LAYER_SET(1, ON_BOTH), // FN16 - set Layer1, to use Workman layout at firmware level
370 ACTION_LAYER_SET(2, ON_BOTH), // FN17 - set Layer2, to use with Numpad keys
372 ACTION_LAYER_MOMENTARY(2), // FN18 - momentary Layer2, to use with Numpad keys
373 ACTION_LAYER_MOMENTARY(5), // FN19 - momentary Layer5, to use with F* keys on top row
374 ACTION_LAYER_MOMENTARY(6), // FN20 - momentary Layer6, to use with F* keys, cursor, Teensy, Workman-layer switch
375 ACTION_LAYER_MOMENTARY(7), // FN21 - momentary Layer7, to use with F* keys (F1-F24)
377 ACTION_LAYER_TAP_KEY(2, KC_H), // FN22 = momentary Layer2 on H key, to use with Mouse keys
378 ACTION_LAYER_TAP_KEY(2, KC_V), // FN23 = momentary Layer2 on V key, to use with Numpad keys
379 ACTION_LAYER_TAP_KEY(3, KC_S), // FN24 = momentary Layer3 on S key, to use with F* keys
380 ACTION_LAYER_TAP_KEY(4, KC_A), // FN25 = momentary Layer4 on A key, to use with unconvenient keys
381 ACTION_LAYER_TAP_KEY(8, KC_SCLN), // FN26 = momentary Layer8 on ; key, to use with F* keys on home+1 row
384 void action_function(keyrecord_t *event, uint8_t id, uint8_t opt)
386 print("action_function called\n");
387 print("id = "); phex(id); print("\n");
388 print("opt = "); phex(opt); print("\n");
389 if (id == TEENSY_KEY) {
391 print("\n\nJump to bootloader... ");
393 bootloader_jump(); // should not return
394 print("not supported.\n");