2 #include QMK_KEYBOARD_H
4 extern keymap_config_t keymap_config
;
6 // Each layer gets a name for readability, which is then used in the keymap matrix below.
7 // The underscores don't mean anything - you can have a layer called STUFF or any other name.
8 // Layer names don't all need to be of the same length, obviously, and you can also skip them
9 // entirely and just use numbers.
18 enum planck_keycodes
{
24 const uint16_t PROGMEM keymaps
[][MATRIX_ROWS
][MATRIX_COLS
] = {
26 /* Workman Alpha-numeric
27 * ,-----------------------------------------------------------------------------------------------.
28 * | Q | D | R | W | B | F | U | P | J | 7 | 8 | 9 |
29 * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------|
30 * | A | S | H | T | G | N | E | O | I | 4 | 5 | 6 |
31 * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------|
32 * | Z | X | M | C | V | L | Y | K | Up | 1 | 2 | 3 |
33 * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------|
34 * |Alt/Tab|Gui/Esc| , |CTL/Bsp| Fn/Ent|SFT/SPC| . | Left | Down | Right | 0 |Adj/Ent|
35 * `-----------------------------------------------------------------------------------------------'
38 [_WORKMAN
] = LAYOUT_planck_grid(
39 KC_Q
, KC_D
, KC_R
, KC_W
, KC_B
, KC_F
, KC_U
, KC_P
, KC_J
, KC_KP_7
, KC_KP_8
, KC_KP_9
,
40 KC_A
, KC_S
, KC_H
, KC_T
, KC_G
, KC_N
, KC_E
, KC_O
, KC_I
, KC_KP_4
, KC_KP_5
, KC_KP_6
,
41 KC_Z
, KC_X
, KC_M
, KC_C
, KC_V
, KC_L
, KC_Y
, KC_K
, KC_UP
, KC_KP_1
, KC_KP_2
, KC_KP_3
,
42 ALT_T(KC_TAB
), GUI_T(KC_ESC
), KC_COMM
, CTL_T(KC_BSPC
), LT(_FN
, KC_ENT
), SFT_T(KC_SPC
), KC_DOT
, KC_LEFT
, KC_DOWN
, KC_RGHT
, KC_KP_0
, LT(_ADJ
, KC_ENT
)
45 /* FN-key held (Workman)
46 * ,-----------------------------------------------------------------------------------------------.
47 * | ! | @ | # | $ | % | ^ | & | * | F12 | F7 | F8 | F9 |
48 * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------|
49 * | Tab | [ | ] | - | Del | ' | ( | ) | F11 | F4 | F5 | F6 |
50 * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------|
51 * | Menu | | | = | \ | / | | | PgUp | F1 | F2 | F3 |
52 * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------|
53 * |Alt/Tab| Gui | ~ |CTL/Bsp| Fn/Ent|SFT/Spc| ; | Home | PgDn | End | F10 |Adj/Ent|
54 * `-----------------------------------------------------------------------------------------------'
57 [_FN
] = LAYOUT_planck_grid(
58 KC_EXLM
, KC_AT
, KC_HASH
, KC_DLR
, KC_PERC
, KC_CIRC
, KC_AMPR
, KC_ASTR
, KC_F12
, KC_F7
, KC_F8
, KC_F9
,
59 KC_TAB
, KC_LBRACKET
, KC_RBRACKET
, KC_MINUS
, KC_DELETE
, KC_QUOT
, KC_LPRN
, KC_RPRN
, KC_F11
, KC_F4
, KC_F5
, KC_F6
,
60 KC_MENU
, _______
, _______
, KC_EQUAL
, KC_BSLS
, KC_SLSH
, XXXXXXX
, XXXXXXX
, KC_PGUP
, KC_F1
, KC_F2
, KC_F3
,
61 _______
, KC_LGUI
, KC_GRAVE
, _______
, _______
, _______
, KC_SCOLON
, KC_HOME
, KC_PGDN
, KC_END
, KC_F10
, _______
65 * ,-----------------------------------------------------------------------------------------------.
66 * |Gui/Esc| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
67 * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------|
68 * | Ctrl | Q | W | E | R | T | Y | U | I | O | P | / |
69 * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------|
70 * | Shift | A | S | D | F | G | H | J | K | L | ; | " |
71 * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------|
72 * |Alt/Tab| Z | X | C | V | Fn/SPC| B | N | M | , | . |Adj/Ent|
73 * `-----------------------------------------------------------------------------------------------'
76 [_QWERTY
] = LAYOUT_planck_grid(
77 GUI_T(KC_ESC
), KC_1
, KC_2
, KC_3
, KC_4
, KC_5
, KC_6
, KC_7
, KC_8
, KC_9
, KC_0
, KC_BSPC
,
78 KC_LCTL
, KC_Q
, KC_W
, KC_E
, KC_R
, KC_T
, KC_Y
, KC_U
, KC_I
, KC_O
, KC_P
, KC_ENT
,
79 KC_LSFT
, KC_A
, KC_S
, KC_D
, KC_F
, KC_G
, KC_H
, KC_J
, KC_K
, KC_L
, KC_SCLN
, KC_QUOT
,
80 ALT_T(KC_TAB
), KC_Z
, KC_X
, KC_C
, KC_V
, LT(_QW_FN
, KC_SPC
), KC_B
, KC_N
, KC_M
, KC_COMM
, KC_DOT
, LT(_ADJ
, KC_ENT
)
83 /* FN-key held (Qwerty)
84 * ,-----------------------------------------------------------------------------------------------.
85 * | Gui | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 |
86 * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------|
87 * | Ctrl | ~ | [ | PgUp | ] | | | - | Up | = | | F12 |
88 * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------|
89 * | Shift | Tab | Home | PgDn | End | Del | | Left | Down | Right | | |
90 * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------|
91 * |Alt/Tab| | | | | Fn/Spc| | | | | Menu |Adj/Ent|
92 * `-----------------------------------------------------------------------------------------------'
95 [_QW_FN
] = LAYOUT_planck_grid(
96 KC_LGUI
, KC_F1
, KC_F2
, KC_F3
, KC_F4
, KC_F5
, KC_F6
, KC_F7
, KC_F8
, KC_F9
, KC_F10
, KC_F11
,
97 _______
, KC_GRAVE
, KC_LBRC
, KC_PGUP
, KC_RBRC
, XXXXXXX
, XXXXXXX
, KC_MINS
, KC_UP
, KC_EQUAL
, XXXXXXX
, KC_F12
,
98 _______
, KC_TAB
, KC_HOME
, KC_PGDN
, KC_END
, KC_DELETE
, XXXXXXX
, KC_LEFT
, KC_DOWN
, KC_RIGHT
, XXXXXXX
, XXXXXXX
,
99 _______
, XXXXXXX
, XXXXXXX
, XXXXXXX
, XXXXXXX
, _______
, XXXXXXX
, _______
, _______
, _______
, KC_MENU
, _______
102 /* Plover layer (http://opensteno.org)
103 * ,-----------------------------------------------------------------------------------------------.
104 * | S | T | P | H | * | F | P | L | T | D | | |
105 * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------|
106 * | S | K | W | R | * | R | B | G | S | Z | | |
107 * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------|
108 * | # | # | # | # | | # | # | # | # | # | | |
109 * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------|
110 * | | | A | O | | E | U | | | | |Adj/Ent|
111 * `-----------------------------------------------------------------------------------------------'
114 [_PLOVER
] = LAYOUT_planck_grid(
115 KC_Q
, KC_W
, KC_E
, KC_R
, KC_T
, KC_U
, KC_I
, KC_O
, KC_P
, KC_LBRC
, XXXXXXX
, XXXXXXX
,
116 KC_A
, KC_S
, KC_D
, KC_F
, KC_G
, KC_J
, KC_K
, KC_L
, KC_SCLN
, KC_QUOT
, XXXXXXX
, XXXXXXX
,
117 KC_1
, KC_1
, KC_1
, KC_1
, XXXXXXX
, KC_1
, KC_1
, KC_1
, KC_1
, KC_1
, XXXXXXX
, XXXXXXX
,
118 XXXXXXX
, XXXXXXX
, KC_C
, KC_V
, XXXXXXX
, KC_N
, KC_M
, XXXXXXX
, XXXXXXX
, XXXXXXX
, XXXXXXX
, LT(_ADJ
, KC_ENT
)
122 * ,-----------------------------------------------------------------------------------------------.
123 * | | | | | | | | | Insert| PrtSc | Pause | RESET |
124 * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------|
125 * | | | | | | | | CapLk |Voice +| Audio |MIDIoff| |
126 * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------|
127 * | | | | | | | | ScrLk |Voice -| Music |MIDI on| |
128 * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------|
129 * | | | | | | | | Numlk |Workman| Qwerty| Plover|Adj/Ent|
130 * `-----------------------------------------------------------------------------------------------'
133 [_ADJ
] = LAYOUT_planck_grid(
134 _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, KC_INS
, KC_PSCR
, KC_PAUSE
, RESET
,
135 _______
, _______
, _______
, _______
, _______
, _______
, _______
, KC_CLCK
, MUV_IN
, AU_TOG
, MI_OFF
, _______
,
136 _______
, _______
, _______
, _______
, _______
, _______
, _______
, KC_SLCK
, MUV_DE
, MU_TOG
, MI_ON
, _______
,
137 _______
, _______
, _______
, _______
, _______
, _______
, _______
, KC_NLCK
, WORKMAN
, QWERTY
, PLOVER
, _______
144 float tone_startup
[][2] = SONG(STARTUP_SOUND
);
145 float tone_goodbye
[][2] = SONG(GOODBYE_SOUND
);
147 float tone_workman
[][2] = SONG(QWERTY_SOUND
);
148 float tone_qwerty
[][2] = SONG(COLEMAK_SOUND
);
149 float tone_plover
[][2] = SONG(PLOVER_SOUND
);
151 float music_scale
[][2] = SONG(MUSIC_SCALE_SOUND
);
156 void persistent_default_layer_set(uint16_t default_layer
) {
157 eeconfig_update_default_layer(default_layer
);
158 default_layer_set(default_layer
);
161 bool process_record_user(uint16_t keycode
, keyrecord_t
*record
) {
164 if (record
->event
.pressed
) {
166 PLAY_SONG(tone_workman
);
168 persistent_default_layer_set(1UL<<_WORKMAN
);
173 if (record
->event
.pressed
) {
175 PLAY_SONG(tone_qwerty
);
177 persistent_default_layer_set(1UL<<_QWERTY
);
182 if (record
->event
.pressed
) {
184 PLAY_SONG(tone_plover
);
186 if (!eeconfig_is_enabled()) {
189 keymap_config
.raw
= eeconfig_read_keymap();
190 keymap_config
.nkro
= 1;
191 eeconfig_update_keymap(keymap_config
.raw
);
192 persistent_default_layer_set(1UL<<_PLOVER
);
200 void matrix_init_user(void) {
210 _delay_ms(20); // gets rid of tick
211 PLAY_SONG(tone_startup
);
216 PLAY_SONG(tone_goodbye
);
221 void music_on_user(void)
226 void music_scale_user(void)
228 PLAY_SONG(music_scale
);