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.
24 // Macro name shortcuts
25 #define QWERTY M(_QWERTY)
26 #define COLEMAK M(_COLEMAK)
27 #define DVORAK M(_DVORAK)
28 #define LOWER M(_LOWER)
29 #define RAISE M(_RAISE)
35 #define MICMUTE M(_MICMUTE)
37 #define MACPRNT LGUI(LSFT(KC_3))
38 #define MACPRNT2 LGUI(LSFT(KC_4))
39 #define WINPRNT KC_PSCR
40 #define WINPRNT2 LGUI(KC_PSCR)
41 #define CYCLWIN LGUI(KC_GRV)
42 #define MACSLEEP LSFT(LCTL(KC_POWER))
43 #define WINSLEEP KC_SLEP
45 const uint16_t PROGMEM keymaps
[][MATRIX_ROWS
][MATRIX_COLS
] = {
47 [_QWERTY
] = LAYOUT_planck_grid(
48 KC_TAB
, KC_Q
, KC_W
, KC_E
, KC_R
, KC_T
, KC_Y
, KC_U
, KC_I
, KC_O
, KC_P
, KC_BSPC
,
49 KC_ESC
, KC_A
, KC_S
, KC_D
, KC_F
, KC_G
, KC_H
, KC_J
, KC_K
, KC_L
, KC_SCLN
, KC_QUOT
,
50 KC_LSFT
, KC_Z
, KC_X
, KC_C
, KC_V
, KC_B
, KC_N
, KC_M
, KC_COMM
, KC_DOT
, KC_SLSH
, KC_ENT
,
51 OS
, KC_LCTL
, KC_LALT
, KC_LGUI
, LOWER
, KC_SPC
, KC_SPC
, RAISE
, KC_LEFT
, KC_DOWN
, KC_UP
, KC_RGHT
54 [_COLEMAK
] = LAYOUT_planck_grid(
55 KC_TAB
, KC_Q
, KC_W
, KC_F
, KC_P
, KC_G
, KC_J
, KC_L
, KC_U
, KC_Y
, KC_SCLN
, KC_BSPC
,
56 KC_ESC
, KC_A
, KC_R
, KC_S
, KC_T
, KC_D
, KC_H
, KC_N
, KC_E
, KC_I
, KC_O
, KC_QUOT
,
57 KC_LSFT
, KC_Z
, KC_X
, KC_C
, KC_V
, KC_B
, KC_K
, KC_M
, KC_COMM
, KC_DOT
, KC_SLSH
, KC_ENT
,
58 OS
, KC_LCTL
, KC_LALT
, KC_LGUI
, LOWER
, KC_SPC
, KC_SPC
, RAISE
, KC_LEFT
, KC_DOWN
, KC_UP
, KC_RGHT
61 [_DVORAK
] = LAYOUT_planck_grid(
62 KC_TAB
, KC_QUOT
, KC_COMM
, KC_DOT
, KC_P
, KC_Y
, KC_F
, KC_G
, KC_C
, KC_R
, KC_L
, KC_BSPC
,
63 KC_ESC
, KC_A
, KC_O
, KC_E
, KC_U
, KC_I
, KC_D
, KC_H
, KC_T
, KC_N
, KC_S
, KC_SLSH
,
64 KC_LSFT
, KC_SCLN
, KC_Q
, KC_J
, KC_K
, KC_X
, KC_B
, KC_M
, KC_W
, KC_V
, KC_Z
, KC_ENT
,
65 OS
, KC_LCTL
, KC_LALT
, KC_LGUI
, LOWER
, KC_SPC
, KC_SPC
, RAISE
, KC_LEFT
, KC_DOWN
, KC_UP
, KC_RGHT
68 [_LOWER
] = LAYOUT_planck_grid(
69 KC_TILD
, KC_EXLM
, KC_AT
, KC_HASH
, KC_DLR
, KC_PERC
, KC_CIRC
, KC_AMPR
, KC_ASTR
, KC_LPRN
, KC_RPRN
, KC_BSPC
,
70 _______
, _______
, _______
, _______
, _______
, _______
, _______
, KC_UNDS
, KC_PLUS
, KC_LCBR
, KC_RCBR
, KC_PIPE
,
71 _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
,
72 _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, KC_MNXT
, KC_VOLD
, KC_VOLU
, KC_MPLY
75 [_RAISE
] = LAYOUT_planck_grid(
76 KC_GRV
, KC_1
, KC_2
, KC_3
, KC_4
, KC_5
, KC_6
, KC_7
, KC_8
, KC_9
, KC_0
, KC_BSPC
,
77 _______
, _______
, _______
, _______
, _______
, _______
, _______
, KC_MINS
, KC_EQL
, KC_LBRC
, KC_RBRC
, KC_BSLS
,
78 _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
,
79 _RAISE
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, KC_MNXT
, KC_VOLD
, KC_VOLU
, KC_MPLY
82 [_SETUP
] = LAYOUT_planck_grid( /* Setup */
83 _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
,
84 _______
, _______
, _______
, WIN
, MAC
, _______
, _______
, QWERTY
, COLEMAK
, DVORAK
, _______
, _______
,
85 _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
,
86 _______
, _______
, _______
, _______
, _______
, RESET
, RESET
, _______
, _______
, _______
, _______
, _______
88 [_MAC
] = LAYOUT_planck_grid( /* Mac */
89 CYCLWIN
,MACSLEEP
, XXXXXXX
, XXXXXXX
, XXXXXXX
, XXXXXXX
, XXXXXXX
, KC_F1
, KC_F2
, KC_F3
, KC_F4
, KC_DEL
,
90 _______
, MICMUTE
, KC_MUTE
, KC_VOLD
, KC_VOLU
, MACPRNT
,MACPRNT2
, KC_F5
, KC_F6
, KC_F7
, KC_F8
, XXXXXXX
,
91 _______
, BL_STEP
, KC_MPRV
, KC_MPLY
, KC_MNXT
, XXXXXXX
, XXXXXXX
, KC_F9
, KC_F10
, KC_F11
, KC_F12
, XXXXXXX
,
92 _______
, _______
, _______
, _______
, XXXXXXX
, XXXXXXX
, XXXXXXX
, XXXXXXX
, KC_HOME
, KC_PGDOWN
,KC_PGUP
,KC_END
94 [_WIN
] = LAYOUT_planck_grid( /* Windows */
95 CYCLWIN
,WINSLEEP
, XXXXXXX
, XXXXXXX
, XXXXXXX
, XXXXXXX
, XXXXXXX
, KC_F1
, KC_F2
, KC_F3
, KC_F4
, KC_DEL
,
96 _______
, MICMUTE
, KC_MUTE
, KC_VOLD
, KC_VOLU
, WINPRNT
,WINPRNT2
, KC_F5
, KC_F6
, KC_F7
, KC_F8
, XXXXXXX
,
97 _______
, BL_STEP
, KC_MPRV
, KC_MPLY
, KC_MNXT
, XXXXXXX
, XXXXXXX
, KC_F9
, KC_F10
, KC_F11
, KC_F12
, XXXXXXX
,
98 _______
, _______
, _______
, _______
, XXXXXXX
, XXXXXXX
, XXXXXXX
, XXXXXXX
, KC_HOME
, KC_PGDOWN
,KC_PGUP
,KC_END
100 [_LIN
] = LAYOUT_planck_grid( /* Linux */
101 KC_L
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
,
102 _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
,
103 _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
,
104 _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
109 int currentOs
= _MAC
;
113 float tone_startup
[][2] = {
114 {440.0*pow(2.0,(31)/12.0), 12},
115 {440.0*pow(2.0,(28)/12.0), 8},
116 {440.0*pow(2.0,(19)/12.0), 8},
117 {440.0*pow(2.0,(24)/12.0), 8},
118 {440.0*pow(2.0,(28)/12.0), 20}
121 float tone_qwerty
[][2] = SONG(QWERTY_SOUND
);
122 float tone_dvorak
[][2] = SONG(DVORAK_SOUND
);
123 float tone_colemak
[][2] = SONG(COLEMAK_SOUND
);
124 float tone_plover
[][2] = SONG(PLOVER_SOUND
);
125 float tone_plover_gb
[][2] = SONG(PLOVER_GOODBYE_SOUND
);
127 float music_scale
[][2] = SONG(MUSIC_SCALE_SOUND
);
128 float goodbye
[][2] = SONG(GOODBYE_SOUND
);
132 void persistent_default_layer_set(uint16_t default_layer
) {
133 eeconfig_update_default_layer(default_layer
);
134 default_layer_set(default_layer
);
137 const macro_t
*action_get_macro(keyrecord_t
*record
, uint8_t id
, uint8_t opt
)
141 if (record
->event
.pressed
) {
143 PLAY_SONG(tone_qwerty
);
145 persistent_default_layer_set(1UL<<_QWERTY
);
149 if (record
->event
.pressed
) {
151 PLAY_SONG(tone_colemak
);
153 persistent_default_layer_set(1UL<<_COLEMAK
);
157 if (record
->event
.pressed
) {
159 PLAY_SONG(tone_dvorak
);
161 persistent_default_layer_set(1UL<<_DVORAK
);
165 if (record
->event
.pressed
) {
167 update_tri_layer(_LOWER
, _RAISE
, _SETUP
);
170 update_tri_layer(_LOWER
, _RAISE
, _SETUP
);
174 if (record
->event
.pressed
) {
176 update_tri_layer(_LOWER
, _RAISE
, _SETUP
);
179 update_tri_layer(_LOWER
, _RAISE
, _SETUP
);
183 if (record
->event
.pressed
) {
190 if (record
->event
.pressed
) {
191 register_code(KC_RSFT
);
192 register_code(KC_RCTL
);
193 register_code(KC_RALT
);
194 register_code(KC_RGUI
);
196 unregister_code(KC_RSFT
);
197 unregister_code(KC_RCTL
);
198 unregister_code(KC_RALT
);
199 unregister_code(KC_RGUI
);
203 if (record
->event
.pressed
) {
214 if (record
->event
.pressed
) {
215 layer_off(currentOs
);
223 void matrix_init_user(void) {
225 _delay_ms(20); // stops the tick
226 PLAY_SONG(tone_startup
);
231 void play_goodbye_tone()
237 uint8_t starting_note
= 0x0C;
240 bool process_action_user(keyrecord_t
*record
) {
242 if (IS_LAYER_ON(_MUSIC
)) {
243 if (record
->event
.pressed
) {
244 play_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note
+ SCALE
[record
->event
.key
.col
+ offset
])/12.0+(MATRIX_ROWS
- record
->event
.key
.row
)), 0xF);
246 stop_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note
+ SCALE
[record
->event
.key
.col
+ offset
])/12.0+(MATRIX_ROWS
- record
->event
.key
.row
)));