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
{
29 const uint16_t PROGMEM keymaps
[][MATRIX_ROWS
][MATRIX_COLS
] = {
33 * ,-----------------------------------------------------------------------------------.
34 * | Tab | Q | D | R | W | B | J | F | U | P | ; | Bksp |
35 * |------+------+------+------+------+-------------+------+------+------+------+------|
36 * | Esc | A | S | H | T | G | Y | N | E | O | I | " |
37 * |------+------+------+------+------+------|------+------+------+------+------+------|
38 * | Shift| Z | X | M | C | V | K | L | Dead | . | / |Enter |
39 * |------+------+------+------+------+------+------+------+------+------+------+------|
40 * | Ctrl | RAlt | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
41 * `-----------------------------------------------------------------------------------'
43 [_WORKMAN
] = LAYOUT_planck_grid(
44 KC_TAB
, KC_Q
, KC_D
, KC_R
, KC_W
, KC_B
, KC_J
, KC_F
, KC_U
, KC_P
, KC_SCLN
, KC_BSPC
,
45 MT(MOD_LCTL
,KC_ESC
), KC_A
, KC_S
, KC_H
, KC_T
, KC_G
, KC_Y
, KC_N
, KC_E
, KC_O
, KC_I
, KC_QUOT
,
46 KC_LSFT
, KC_Z
, KC_X
, KC_M
, KC_C
, KC_V
, KC_K
, KC_L
, DEAD
, KC_DOT
, KC_SLSH
, KC_ENT
,
47 KC_LCTL
, KC_RALT
, KC_LALT
, KC_LGUI
, LOWER
, KC_SPC
, KC_SPC
, RAISE
, KC_LEFT
, KC_DOWN
, KC_UP
, KC_RGHT
51 * ,-----------------------------------------------------------------------------------.
52 * | | % | & | ? | + | @ | $ | _ | [ | ] | ! | |
53 * |------+------+------+------+------+-------------+------+------+------+------+------|
54 * | | / | ( | = | 0 | { | } | 1 | * | ) | - | " |
55 * |------+------+------+------+------+------|------+------+------+------+------+------|
56 * | | 6 | 7 | 8 | 9 | | | \ | 2 | 3 | 4 | 5 | |
57 * |------+------+------+------+------+------+------+------+------+------+------+------|
58 * | | | < | ~ | ` | , | # | ^ | > | | |
59 * `-----------------------------------------------------------------------------------'
61 [_DEAD
] = LAYOUT_planck_grid(
62 XXXXXXX
, KC_PERC
, KC_AMPR
, KC_QUES
, KC_PLUS
, KC_AT
, KC_DLR
, KC_UNDS
, KC_LBRC
, KC_RBRC
, KC_EXLM
, XXXXXXX
,
63 XXXXXXX
, KC_SLSH
, KC_LPRN
, KC_EQL
, KC_0
, KC_LCBR
, KC_RCBR
, KC_1
, KC_ASTR
, KC_RPRN
, KC_MINS
, XXXXXXX
,
64 XXXXXXX
, KC_6
, KC_7
, KC_8
, KC_9
, KC_PIPE
, KC_BSLS
, KC_2
, KC_3
, KC_4
, KC_5
, XXXXXXX
,
65 XXXXXXX
, XXXXXXX
, KC_LT
, KC_TILD
, KC_GRV
, KC_COMM
, KC_COMM
, KC_HASH
, KC_CIRC
, KC_GT
, XXXXXXX
, XXXXXXX
69 * ,-----------------------------------------------------------------------------------.
70 * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
71 * |------+------+------+------+------+-------------+------+------+------+------+------|
72 * | Esc | A | S | D | F | G | H | J | K | L | ; | " |
73 * |------+------+------+------+------+------|------+------+------+------+------+------|
74 * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
75 * |------+------+------+------+------+------+------+------+------+------+------+------|
76 * | Ctrl | RAlt | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
77 * `-----------------------------------------------------------------------------------'
79 [_QWERTY
] = LAYOUT_planck_grid(
80 KC_TAB
, KC_Q
, KC_W
, KC_E
, KC_R
, KC_T
, KC_Y
, KC_U
, KC_I
, KC_O
, KC_P
, KC_BSPC
,
81 KC_ESC
, KC_A
, KC_S
, KC_D
, KC_F
, KC_G
, KC_H
, KC_J
, KC_K
, KC_L
, KC_SCLN
, KC_QUOT
,
82 KC_LSFT
, KC_Z
, KC_X
, KC_C
, KC_V
, KC_B
, KC_N
, KC_M
, KC_COMM
, KC_DOT
, KC_SLSH
, KC_ENT
,
83 KC_LCTL
, KC_RALT
, KC_LALT
, KC_LGUI
, LOWER
, KC_SPC
, KC_SPC
, RAISE
, KC_LEFT
, KC_DOWN
, KC_UP
, KC_RGHT
87 * ,-----------------------------------------------------------------------------------.
88 * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
89 * |------+------+------+------+------+-------------+------+------+------+------+------|
90 * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
91 * |------+------+------+------+------+------|------+------+------+------+------+------|
92 * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | Vol+ |Enter |
93 * |------+------+------+------+------+------+------+------+------+------+------+------|
94 * | | | | | | | | Prev | Next | Vol- | Play |
95 * `-----------------------------------------------------------------------------------'
97 [_LOWER
] = LAYOUT_planck_grid(
98 KC_TILD
, KC_EXLM
, KC_AT
, KC_HASH
, KC_DLR
, KC_PERC
, KC_CIRC
, KC_AMPR
, KC_ASTR
, KC_LPRN
, KC_RPRN
, KC_BSPC
,
99 KC_DEL
, KC_F1
, KC_F2
, KC_F3
, KC_F4
, KC_F5
, KC_F6
, KC_UNDS
, KC_PLUS
, KC_LCBR
, KC_RCBR
, KC_PIPE
,
100 _______
, KC_F7
, KC_F8
, KC_F9
, KC_F10
, KC_F11
, KC_F12
,S(KC_NUHS
),S(KC_NUBS
), _______
, KC_VOLU
, _______
,
101 _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, KC_MPRV
, KC_MNXT
, KC_VOLD
, KC_MPLY
104 /* Raise - KWM Interaction
105 * ,-----------------------------------------------------------------------------------.
106 * |Restrt| |TgSplt|Flotng|Parent|FlScrn|InsMrk| InsW | InsS | InsN | InsE | |
107 * |------+------+------+------+------+-------------+------+------+------+------+------|
108 * | | Mark |Rotate|Prefix| Term | BSP |SwpMrk|SwapW |SwapS |SwapN |SwapE | |
109 * |------+------+------+------+------+------|------+------+------+------+------+------|
110 * | |MarkW |MarkS |MarkN |MarkE |Monocl|Float |FocusW|FocusS|FocusN|FocusE| |
111 * |------+------+------+------+------+------+------+------+------+------+------+------|
112 * | | | | | | | | | | | |
113 * `-----------------------------------------------------------------------------------'
115 [_RAISE
] = LAYOUT_planck_grid(
116 LCAG(KC_Q
), XXXXXXX
, LCAG(KC_S
), LCAG(KC_W
), LCAG(KC_D
), LCAG(KC_F
), LCTL(S(KC_X
)), LCTL(S(KC_H
)), LCTL(S(KC_J
)), LCTL(S(KC_K
)), LCTL(S(KC_L
)), XXXXXXX
,
117 XXXXXXX
, LCAG(KC_M
), LGUI(LCTL(KC_R
)), LCAG(KC_DOT
), LCAG(KC_T
), LGUI(LCTL(KC_A
)), LCTL(LALT(KC_M
)), LCTL(LALT(KC_H
)), LCTL(LALT(KC_J
)), LCTL(LALT(KC_K
)), LCTL(LALT(KC_L
)), XXXXXXX
,
118 _______
, LCAG(KC_H
), LCAG(KC_J
), LCAG(KC_K
), LCAG(KC_L
), LGUI(LCTL(KC_S
)), LGUI(LCTL(KC_D
)), LGUI(LALT(KC_H
)), LGUI(LALT(KC_J
)), LGUI(LALT(KC_K
)), LGUI(LALT(KC_L
)), _______
,
119 _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
122 /* Plover layer (http://opensteno.org)
123 * ,-----------------------------------------------------------------------------------.
124 * | # | # | # | # | # | # | # | # | # | # | # | # |
125 * |------+------+------+------+------+-------------+------+------+------+------+------|
126 * | | S | T | P | H | * | * | F | P | L | T | D |
127 * |------+------+------+------+------+------|------+------+------+------+------+------|
128 * |TogOut| S | K | W | R | * | * | R | B | G | S | Z |
129 * |------+------+------+------+------+------+------+------+------+------+------+------|
130 * | Exit | | | A | O | | E | U | | | |
131 * `-----------------------------------------------------------------------------------'
134 [_PLOVER
] = LAYOUT_planck_grid(
135 KC_1
, KC_1
, KC_1
, KC_1
, KC_1
, KC_1
, KC_1
, KC_1
, KC_1
, KC_1
, KC_1
, KC_1
,
136 XXXXXXX
, KC_Q
, KC_D
, KC_R
, KC_W
, KC_B
, KC_J
, KC_F
, KC_U
, KC_P
, KC_SCLN
, KC_BSPC
,
137 TOG_PLV
, KC_A
, KC_S
, KC_H
, KC_T
, KC_G
, KC_Y
, KC_N
, KC_E
, KC_O
, KC_I
, KC_QUOT
,
138 EXT_PLV
, XXXXXXX
, XXXXXXX
, KC_M
, KC_C
, XXXXXXX
, XXXXXXX
, KC_L
, KC_COMM
, XXXXXXX
, XXXXXXX
, XXXXXXX
141 /* Adjust (Lower + Raise)
142 * ,-----------------------------------------------------------------------------------.
143 * | | Reset| | | | | | | | | | Del |
144 * |------+------+------+------+------+-------------+------+------+------+------+------|
145 * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Workmn|Plover| | |
146 * |------+------+------+------+------+------|------+------+------+------+------+------|
147 * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | |
148 * |------+------+------+------+------+------+------+------+------+------+------+------|
149 * | | | | | | | | | | | |
150 * `-----------------------------------------------------------------------------------'
152 [_ADJUST
] = LAYOUT_planck_grid(
153 _______
, RESET
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, KC_DEL
,
154 _______
, _______
, _______
, AU_ON
, AU_OFF
, AG_NORM
, AG_SWAP
, QWERTY
, WORKMAN
, PLOVER
, _______
, _______
,
155 _______
, MUV_DE
, MUV_IN
, MU_ON
, MU_OFF
, MI_ON
, MI_OFF
, _______
, _______
, _______
, _______
, _______
,
156 _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
164 float tone_startup
[][2] = SONG(STARTUP_SOUND
);
165 float tone_qwerty
[][2] = SONG(QWERTY_SOUND
);
166 float tone_workman
[][2] = SONG(WORKMAN_SOUND
);
167 float tone_plover
[][2] = SONG(PLOVER_SOUND
);
168 float tone_plover_gb
[][2] = SONG(PLOVER_GOODBYE_SOUND
);
169 float music_scale
[][2] = SONG(MUSIC_SCALE_SOUND
);
171 float tone_goodbye
[][2] = SONG(GOODBYE_SOUND
);
175 void persistent_default_layer_set(uint16_t default_layer
) {
176 eeconfig_update_default_layer(default_layer
);
177 default_layer_set(default_layer
);
180 bool process_record_user(uint16_t keycode
, keyrecord_t
*record
) {
183 if (record
->event
.pressed
) {
185 PLAY_SONG(tone_workman
);
187 persistent_default_layer_set(1UL<<_WORKMAN
);
192 if (record
->event
.pressed
) {
194 set_oneshot_layer(_DEAD
, ONESHOT_START
);
195 clear_oneshot_layer_state(ONESHOT_PRESSED
);
200 if (record
->event
.pressed
) {
202 PLAY_SONG(tone_qwerty
);
204 persistent_default_layer_set(1UL<<_QWERTY
);
209 if (record
->event
.pressed
) {
211 update_tri_layer(_LOWER
, _RAISE
, _ADJUST
);
214 update_tri_layer(_LOWER
, _RAISE
, _ADJUST
);
219 if (record
->event
.pressed
) {
221 update_tri_layer(_LOWER
, _RAISE
, _ADJUST
);
224 update_tri_layer(_LOWER
, _RAISE
, _ADJUST
);
229 if (record
->event
.pressed
) {
232 PLAY_SONG(tone_plover
);
238 if (!eeconfig_is_enabled()) {
241 keymap_config
.raw
= eeconfig_read_keymap();
242 keymap_config
.nkro
= 1;
243 eeconfig_update_keymap(keymap_config
.raw
);
248 if (record
->event
.pressed
) {
250 PLAY_SONG(tone_plover_gb
);
257 if (record
->event
.pressed
) {
272 void matrix_init_user(void) {
282 _delay_ms(20); // gets rid of tick
283 PLAY_SONG(tone_startup
);
288 PLAY_SONG(tone_goodbye
);
293 void music_on_user(void)
298 void music_scale_user(void)
300 PLAY_SONG(music_scale
);