aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--keyboards/foxlab/leaf60/universal/keymaps/mguterl/config.h19
-rw-r--r--keyboards/foxlab/leaf60/universal/keymaps/mguterl/keymap.c43
-rw-r--r--keyboards/foxlab/leaf60/universal/keymaps/mguterl/readme.md11
-rw-r--r--keyboards/preonic/keymaps/mguterl/config.h37
-rw-r--r--keyboards/preonic/keymaps/mguterl/keymap.c323
-rw-r--r--keyboards/preonic/keymaps/mguterl/readme.md18
-rw-r--r--keyboards/preonic/keymaps/mguterl/rules.mk1
-rw-r--r--keyboards/wilba_tech/rama_works_m60_a/keymaps/mguterl/keymap.c82
-rw-r--r--keyboards/wilba_tech/rama_works_m60_a/keymaps/mguterl/readme.md15
-rw-r--r--keyboards/wilba_tech/rama_works_m60_a/keymaps/mguterl/rules.mk1
-rw-r--r--layouts/community/ortho_4x12/mguterl/config.h39
-rw-r--r--layouts/community/ortho_4x12/mguterl/keymap.c352
-rw-r--r--layouts/community/ortho_4x12/mguterl/readme.md20
-rw-r--r--layouts/community/ortho_4x12/mguterl/rules.mk1
-rw-r--r--users/mguterl/config.h0
-rw-r--r--users/mguterl/mguterl.c1
-rw-r--r--users/mguterl/mguterl.h67
-rw-r--r--users/mguterl/readme.md14
-rw-r--r--users/mguterl/rules.mk1
19 files changed, 1045 insertions, 0 deletions
diff --git a/keyboards/foxlab/leaf60/universal/keymaps/mguterl/config.h b/keyboards/foxlab/leaf60/universal/keymaps/mguterl/config.h
new file mode 100644
index 000000000..d8f6533c6
--- /dev/null
+++ b/keyboards/foxlab/leaf60/universal/keymaps/mguterl/config.h
@@ -0,0 +1,19 @@
1/* Copyright 2019 Fox Lab
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#pragma once
18
19// place overrides here
diff --git a/keyboards/foxlab/leaf60/universal/keymaps/mguterl/keymap.c b/keyboards/foxlab/leaf60/universal/keymaps/mguterl/keymap.c
new file mode 100644
index 000000000..158bdde89
--- /dev/null
+++ b/keyboards/foxlab/leaf60/universal/keymaps/mguterl/keymap.c
@@ -0,0 +1,43 @@
1/* Copyright 2019 Fox Lab
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include QMK_KEYBOARD_H
17#include "mguterl.h"
18
19const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
20
21 [_QWERTY] = LAYOUT_all(
22 KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
23 HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
24 ESC_CTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
25 KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(UTIL),
26 KC_LALT, KC_LALT, KC_LGUI, SPC_UTL, SPC_UTL, SPC_UTL, KC_RALT, MO(1), KC_RGUI, KC_RCTL),
27
28 [_GAMING] = LAYOUT_all(
29 KC_ESC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
30 KC_TAB, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
31 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
32 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
33 _______, _______, _______, _______, KC_SPC, _______, _______, _______, _______, _______),
34
35 [_UTIL] = LAYOUT_all(
36 RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______,
37 TG_GAME, KC_MPLY, KC_MPRV, KC_MNXT, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______, _______, _______,
38 _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______,
39 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
40 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)
41
42
43};
diff --git a/keyboards/foxlab/leaf60/universal/keymaps/mguterl/readme.md b/keyboards/foxlab/leaf60/universal/keymaps/mguterl/readme.md
new file mode 100644
index 000000000..7f1d982bc
--- /dev/null
+++ b/keyboards/foxlab/leaf60/universal/keymaps/mguterl/readme.md
@@ -0,0 +1,11 @@
1# Michael Guterl's Leaf60 WKL Layout
2
3Check out my [userspace](/users/mguterl) for the custom keycodes that are used
4in keymap.c.
5
6This is a pretty standard 60% WKL layout. I add a couple of layers to add
7some conveniences and add vimkeys for navigation.
8
9```sh
10make foxlab/leaf60/universal:mguterl:flash
11```
diff --git a/keyboards/preonic/keymaps/mguterl/config.h b/keyboards/preonic/keymaps/mguterl/config.h
new file mode 100644
index 000000000..40a9524b4
--- /dev/null
+++ b/keyboards/preonic/keymaps/mguterl/config.h
@@ -0,0 +1,37 @@
1#pragma once
2
3#ifdef AUDIO_ENABLE
4 #define STARTUP_SONG SONG(PREONIC_SOUND)
5 // #define STARTUP_SONG SONG(NO_SOUND)
6
7 #define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
8 SONG(COLEMAK_SOUND), \
9 SONG(DVORAK_SOUND) \
10 }
11#endif
12
13#define MUSIC_MASK (keycode != KC_NO)
14
15/*
16 * MIDI options
17 */
18
19/* Prevent use of disabled MIDI features in the keymap */
20//#define MIDI_ENABLE_STRICT 1
21
22/* enable basic MIDI features:
23 - MIDI notes can be sent when in Music mode is on
24*/
25
26#define MIDI_BASIC
27
28/* enable advanced MIDI features:
29 - MIDI notes can be added to the keymap
30 - Octave shift and transpose
31 - Virtual sustain, portamento, and modulation wheel
32 - etc.
33*/
34//#define MIDI_ADVANCED
35
36/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
37//#define MIDI_TONE_KEYCODE_OCTAVES 2
diff --git a/keyboards/preonic/keymaps/mguterl/keymap.c b/keyboards/preonic/keymaps/mguterl/keymap.c
new file mode 100644
index 000000000..ecaf26b8d
--- /dev/null
+++ b/keyboards/preonic/keymaps/mguterl/keymap.c
@@ -0,0 +1,323 @@
1/* Copyright 2015-2017 Jack Humbert
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#include QMK_KEYBOARD_H
18#include "muse.h"
19#include "mguterl.h"
20
21const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
22
23/* Qwerty
24 * ,-----------------------------------------------------------------------------------.
25 * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
26 * |------+------+------+------+------+------+------+------+------+------+------+------|
27 * |HypTab| Q | W | E | R | T | Y | U | I | O | P | Bksp |
28 * |------+------+------+------+------+------+------+------+------+------+------+------|
29 * |EscCtl| A | S | D | F | G | H | J | K | L | ; | " |
30 * |------+------+------+------+------+------+------+------+------+------+------+------|
31 * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
32 * |------+------+------+------+------+------+------+------+------+------+------+------|
33 * | GESC | Ctrl | Alt | GUI |Lower |SpcUtl|SpcUtl|Raise | Left | Down | Up |Right |
34 * `-----------------------------------------------------------------------------------'
35 */
36[_QWERTY] = LAYOUT_preonic_grid( \
37 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
38 HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
39 ESC_CTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
40 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT,
41 KC_GESC, KC_LCTL, KC_LALT, KC_LGUI, LOWER, SPC_UTL, SPC_UTL, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
42),
43
44/*
45 * Gaming is very similar to Qwerty. Certain features from Qwerty are disable
46 * for better gaming experience.
47 */
48[_GAMING] = LAYOUT_preonic_grid( \
49 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
50 KC_TAB, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
51 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
52 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
53 KC_ESC, _______, _______, _______, _______, KC_SPC, KC_SPC, _______, _______, _______, _______, _______
54),
55
56/*
57 * Util is accessed by holding Space. The Util layer contains vimkeys and
58 * shortcuts that I find myself needing often.
59 */
60[_UTIL] = LAYOUT_preonic_grid( \
61 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
62 _______, GUI_1, GUI_2, GUI_3, GUI_4, GUI_5, GUI_6, GUI_7, GUI_8, GUI_9, GUI_0, _______,
63 _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______,
64 _______, _______, _______, _______, _______, _______, _______, GO_BACK, GO_FWD, _______, _______, _______,
65 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
66),
67
68/* Colemak
69 * ,-----------------------------------------------------------------------------------.
70 * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
71 * |------+------+------+------+------+------+------+------+------+------+------+------|
72 * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Del |
73 * |------+------+------+------+------+-------------+------+------+------+------+------|
74 * | Esc | A | R | S | T | D | H | N | E | I | O | " |
75 * |------+------+------+------+------+------|------+------+------+------+------+------|
76 * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
77 * |------+------+------+------+------+------+------+------+------+------+------+------|
78 * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
79 * `-----------------------------------------------------------------------------------'
80 */
81[_COLEMAK] = LAYOUT_preonic_grid( \
82 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
83 KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_DEL,
84 KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
85 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
86 BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
87),
88
89/* Dvorak
90 * ,-----------------------------------------------------------------------------------.
91 * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
92 * |------+------+------+------+------+------+------+------+------+------+------+------|
93 * | Tab | " | , | . | P | Y | F | G | C | R | L | Del |
94 * |------+------+------+------+------+-------------+------+------+------+------+------|
95 * | Esc | A | O | E | U | I | D | H | T | N | S | / |
96 * |------+------+------+------+------+------|------+------+------+------+------+------|
97 * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
98 * |------+------+------+------+------+------+------+------+------+------+------+------|
99 * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
100 * `-----------------------------------------------------------------------------------'
101 */
102[_DVORAK] = LAYOUT_preonic_grid( \
103 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
104 KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_DEL,
105 KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH,
106 KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT,
107 BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
108),
109
110/* Lower
111 * ,-----------------------------------------------------------------------------------.
112 * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
113 * |------+------+------+------+------+-------------+------+------+------+------+------|
114 * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
115 * |------+------+------+------+------+------+------+------+------+------+------+------|
116 * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
117 * |------+------+------+------+------+------+------+------+------+------+------+------|
118 * | | F7 | F8 | F9 | F10 | F11 | F12 | - | = | [ | ] | |
119 * |------+------+------+------+------+------+------+------+------+------+------+------|
120 * | | | | | | | | Next | Vol- | Vol+ | Play |
121 * `-----------------------------------------------------------------------------------'
122 */
123[_LOWER] = LAYOUT_preonic_grid( \
124 KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
125 KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
126 KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
127 _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
128 _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
129),
130
131/* Raise
132 * ,-----------------------------------------------------------------------------------.
133 * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
134 * |------+------+------+------+------+------+------+------+------+------+------+------|
135 * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
136 * |------+------+------+------+------+------+------+------+------+------+------+------|
137 * | Del | F1 | F2 | F3 | F4 | F5 | F6 | | | | | |
138 * |------+------+------+------+------+------+------+------+------+------+------+------|
139 * | | F7 | F8 | F9 | F10 | F11 | F12 | | |Pg Up |Pg Dn | |
140 * |------+------+------+------+------+------+------+------+------+------+------+------|
141 * | | | | | | | | Next | Vol- | Vol+ | Play |
142 * `-----------------------------------------------------------------------------------'
143 */
144[_RAISE] = LAYOUT_preonic_grid( \
145 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
146 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
147 KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, _______, _______, _______, _______,
148 _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, KC_PGUP, KC_PGDN, _______,
149 _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
150),
151
152/* Adjust (Lower + Raise)
153 * ,-----------------------------------------------------------------------------------.
154 * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
155 * |------+------+------+------+------+------+------+------+------+------+------+------|
156 * |ToGame| Reset| | | | | | | | | | Del |
157 * |------+------+------+------+------+-------------+------+------+------+------+------|
158 * | | | |Aud on|AudOff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
159 * |------+------+------+------+------+------|------+------+------+------+------+------|
160 * | |Voice-|Voice+|Mus on|MusOff|MidiOn|MidOff| | | | | |
161 * |------+------+------+------+------+------+------+------+------+------+------+------|
162 * | | | | | | | | | | | |
163 * `-----------------------------------------------------------------------------------'
164 */
165[_ADJUST] = LAYOUT_preonic_grid( \
166 KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
167 TG_GAME, RESET, DEBUG, _______, _______, _______, _______, TERM_ON, TERM_OFF,_______, _______, KC_DEL,
168 _______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______,
169 _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______,
170 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
171)
172
173
174};
175
176bool process_record_user(uint16_t keycode, keyrecord_t *record) {
177 switch (keycode) {
178 case QWERTY:
179 if (record->event.pressed) {
180 set_single_persistent_default_layer(_QWERTY);
181 }
182 return false;
183 break;
184 case COLEMAK:
185 if (record->event.pressed) {
186 set_single_persistent_default_layer(_COLEMAK);
187 }
188 return false;
189 break;
190 case DVORAK:
191 if (record->event.pressed) {
192 set_single_persistent_default_layer(_DVORAK);
193 }
194 return false;
195 break;
196 case LOWER:
197 if (record->event.pressed) {
198 layer_on(_LOWER);
199 update_tri_layer(_LOWER, _RAISE, _ADJUST);
200 } else {
201 layer_off(_LOWER);
202 update_tri_layer(_LOWER, _RAISE, _ADJUST);
203 }
204 return false;
205 break;
206 case RAISE:
207 if (record->event.pressed) {
208 layer_on(_RAISE);
209 update_tri_layer(_LOWER, _RAISE, _ADJUST);
210 } else {
211 layer_off(_RAISE);
212 update_tri_layer(_LOWER, _RAISE, _ADJUST);
213 }
214 return false;
215 break;
216 case BACKLIT:
217 if (record->event.pressed) {
218 register_code(KC_RSFT);
219 #ifdef BACKLIGHT_ENABLE
220 backlight_step();
221 #endif
222 #ifdef __AVR__
223 writePinLow(E6);
224 #endif
225 } else {
226 unregister_code(KC_RSFT);
227 #ifdef __AVR__
228 writePinHigh(E6);
229 #endif
230 }
231 return false;
232 break;
233 }
234 return true;
235};
236
237bool muse_mode = false;
238uint8_t last_muse_note = 0;
239uint16_t muse_counter = 0;
240uint8_t muse_offset = 70;
241uint16_t muse_tempo = 50;
242
243void encoder_update_user(uint8_t index, bool clockwise) {
244 if (muse_mode) {
245 if (IS_LAYER_ON(_RAISE)) {
246 if (clockwise) {
247 muse_offset++;
248 } else {
249 muse_offset--;
250 }
251 } else {
252 if (clockwise) {
253 muse_tempo+=1;
254 } else {
255 muse_tempo-=1;
256 }
257 }
258 } else {
259 if (clockwise) {
260 #ifdef MOUSEKEY_ENABLE
261 tap_code(KC_MS_WH_DOWN);
262 #else
263 tap_code(KC_PGDN);
264 #endif
265 } else {
266 #ifdef MOUSEKEY_ENABLE
267 tap_code(KC_MS_WH_UP);
268 #else
269 tap_code(KC_PGUP);
270 #endif
271 }
272 }
273}
274
275void dip_switch_update_user(uint8_t index, bool active) {
276 switch (index) {
277 case 0:
278 if (active) {
279 layer_on(_ADJUST);
280 } else {
281 layer_off(_ADJUST);
282 }
283 break;
284 case 1:
285 if (active) {
286 muse_mode = true;
287 } else {
288 muse_mode = false;
289 }
290 }
291}
292
293
294void matrix_scan_user(void) {
295#ifdef AUDIO_ENABLE
296 if (muse_mode) {
297 if (muse_counter == 0) {
298 uint8_t muse_note = muse_offset + SCALE[muse_clock_pulse()];
299 if (muse_note != last_muse_note) {
300 stop_note(compute_freq_for_midi_note(last_muse_note));
301 play_note(compute_freq_for_midi_note(muse_note), 0xF);
302 last_muse_note = muse_note;
303 }
304 }
305 muse_counter = (muse_counter + 1) % muse_tempo;
306 } else {
307 if (muse_counter) {
308 stop_all_notes();
309 muse_counter = 0;
310 }
311 }
312#endif
313}
314
315bool music_mask_user(uint16_t keycode) {
316 switch (keycode) {
317 case RAISE:
318 case LOWER:
319 return false;
320 default:
321 return true;
322 }
323}
diff --git a/keyboards/preonic/keymaps/mguterl/readme.md b/keyboards/preonic/keymaps/mguterl/readme.md
new file mode 100644
index 000000000..f90997601
--- /dev/null
+++ b/keyboards/preonic/keymaps/mguterl/readme.md
@@ -0,0 +1,18 @@
1# Michael Guterl's Preonic Layout
2
3I have a very similar [keymap](/keyboards/planck/keymaps/mguterl) for my
4Planck.
5
6Check out my [userspace](/users/mguterl) for the custom keycodes that are used
7in keymap.c.
8
9At a very high level I use 4 layers:
10
11* Qwerty - Letters
12* Util - Vimkeys for navigation and other convenient things
13* Raise - Numbers and F keys
14* Lower - Symbols
15
16```sh
17make preonic/rev3:mguterl:flash
18```
diff --git a/keyboards/preonic/keymaps/mguterl/rules.mk b/keyboards/preonic/keymaps/mguterl/rules.mk
new file mode 100644
index 000000000..dcf16bef3
--- /dev/null
+++ b/keyboards/preonic/keymaps/mguterl/rules.mk
@@ -0,0 +1 @@
SRC += muse.c
diff --git a/keyboards/wilba_tech/rama_works_m60_a/keymaps/mguterl/keymap.c b/keyboards/wilba_tech/rama_works_m60_a/keymaps/mguterl/keymap.c
new file mode 100644
index 000000000..fc81220e4
--- /dev/null
+++ b/keyboards/wilba_tech/rama_works_m60_a/keymaps/mguterl/keymap.c
@@ -0,0 +1,82 @@
1#include QMK_KEYBOARD_H
2
3
4#define QWER 0
5#define GAMING 1
6#define HHKB 2
7#define UTIL 3
8#define LIGHTING 4
9#define HPR_TAB ALL_T(KC_TAB) // Tap for Tab, hold for Hyper (Super+Ctrl+Shift+Alt)
10#define TG_GAME TG(GAMING)
11
12enum custom_keycodes {
13 FN_HHKB = SAFE_RANGE,
14 FN_UTIL
15};
16
17bool process_record_user(uint16_t keycode, keyrecord_t *record)
18{
19 switch(keycode) {
20 case FN_HHKB:
21 if (record->event.pressed) {
22 layer_on(2);
23 update_tri_layer(2, 3, 4);
24 } else {
25 layer_off(2);
26 update_tri_layer(2, 3, 4);
27 }
28 return false;
29 break;
30 case FN_UTIL:
31 if (record->event.pressed) {
32 layer_on(3);
33 update_tri_layer(2, 3, 4);
34 } else {
35 layer_off(3);
36 update_tri_layer(2, 3, 4);
37 }
38 return false;
39 break;
40 default:
41 return true;
42 }
43}
44
45const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
46
47[QWER] = LAYOUT_60_hhkb(
48 KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
49 HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
50 KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
51 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, FN_HHKB,
52 KC_LALT, KC_LGUI, LT(UTIL, KC_SPC), KC_RGUI, FN_UTIL),
53
54[GAMING] = LAYOUT_60_hhkb(
55 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
56 KC_TAB, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
57 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
58 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
59 _______, _______, KC_SPC, _______, _______),
60
61[HHKB] = LAYOUT_60_hhkb(
62 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
63 KC_CAPS, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, _______, _______,
64 _______, KC_VOLD, KC_VOLU, KC_MUTE, KC_EJCT, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, _______,
65 _______, _______, _______, _______, _______, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______,
66 _______, _______, _______, _______, _______),
67
68[UTIL] = LAYOUT_60_hhkb(
69 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
70 _______, KC_MPLY, KC_MPRV, KC_MNXT, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______, _______, _______,
71 _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______,
72 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
73 _______, _______, _______, _______, _______),
74
75[LIGHTING] = LAYOUT_60_hhkb(
76 RESET, EF_DEC, EF_INC, H1_DEC, H1_INC, H2_DEC, H2_INC, _______, _______, _______, _______, BR_DEC, BR_INC, _______, _______,
77 TG_GAME, _______, _______, S1_DEC, S1_INC, S2_DEC, S2_INC, _______, _______, _______, _______, ES_DEC, ES_INC, _______,
78 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
79 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
80 _______, _______, _______, _______, _______),
81
82};
diff --git a/keyboards/wilba_tech/rama_works_m60_a/keymaps/mguterl/readme.md b/keyboards/wilba_tech/rama_works_m60_a/keymaps/mguterl/readme.md
new file mode 100644
index 000000000..dc03b1491
--- /dev/null
+++ b/keyboards/wilba_tech/rama_works_m60_a/keymaps/mguterl/readme.md
@@ -0,0 +1,15 @@
1# Michael Guterl's M60-A Layout
2
3Check out my [userspace](/users/mguterl) for the custom keycodes that are used
4in keymap.c.
5
6This is a pretty standard HHKB layout. I add a couple of layers to add
7some conveniences and add vimkeys for navigation.
8
9If you flash a layout without RESET then you can unplug the keyboard, hold
10spacebar and escape, and then plug the keyboard back. This sequence of
11actions will allow you to flash the keyboard.
12
13```sh
14make wilba_tech/rama_works_m60a:mguterl:flash
15```
diff --git a/keyboards/wilba_tech/rama_works_m60_a/keymaps/mguterl/rules.mk b/keyboards/wilba_tech/rama_works_m60_a/keymaps/mguterl/rules.mk
new file mode 100644
index 000000000..800d917f2
--- /dev/null
+++ b/keyboards/wilba_tech/rama_works_m60_a/keymaps/mguterl/rules.mk
@@ -0,0 +1 @@
DYNAMIC_KEYMAP_ENABLE = no
diff --git a/layouts/community/ortho_4x12/mguterl/config.h b/layouts/community/ortho_4x12/mguterl/config.h
new file mode 100644
index 000000000..6fa31cc8a
--- /dev/null
+++ b/layouts/community/ortho_4x12/mguterl/config.h
@@ -0,0 +1,39 @@
1#pragma once
2
3#ifdef AUDIO_ENABLE
4 #define STARTUP_SONG SONG(PLANCK_SOUND)
5 // #define STARTUP_SONG SONG(NO_SOUND)
6
7 #define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
8 SONG(COLEMAK_SOUND), \
9 SONG(DVORAK_SOUND) \
10 }
11#endif
12
13/*
14 * MIDI options
15 */
16
17/* Prevent use of disabled MIDI features in the keymap */
18//#define MIDI_ENABLE_STRICT 1
19
20/* enable basic MIDI features:
21 - MIDI notes can be sent when in Music mode is on
22*/
23
24#define MIDI_BASIC
25
26/* enable advanced MIDI features:
27 - MIDI notes can be added to the keymap
28 - Octave shift and transpose
29 - Virtual sustain, portamento, and modulation wheel
30 - etc.
31*/
32//#define MIDI_ADVANCED
33
34/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
35//#define MIDI_TONE_KEYCODE_OCTAVES 2
36
37// Most tactile encoders have detents every 4 stages
38#define ENCODER_RESOLUTION 4
39
diff --git a/layouts/community/ortho_4x12/mguterl/keymap.c b/layouts/community/ortho_4x12/mguterl/keymap.c
new file mode 100644
index 000000000..2be2d449e
--- /dev/null
+++ b/layouts/community/ortho_4x12/mguterl/keymap.c
@@ -0,0 +1,352 @@
1/* Copyright 2015-2017 Jack Humbert
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#include QMK_KEYBOARD_H
18#include "muse.h"
19#include "mguterl.h"
20
21extern keymap_config_t keymap_config;
22
23const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
24
25/* Qwerty
26 * ,-----------------------------------------------------------------------------------.
27 * |HypTab| Q | W | E | R | T | Y | U | I | O | P | Bksp |
28 * |------+------+------+------+------+------+------+------+------+------+------+------|
29 * |EscCtl| A | S | D | F | G | H | J | K | L | ; | " |
30 * |------+------+------+------+------+------+------+------+------+------+------+------|
31 * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
32 * |------+------+------+------+------+------+------+------+------+------+------+------|
33 * | GESC | Ctrl | Alt | GUI |Lower |SpcUtl|SpcUtl|Raise | Left | Down | Up |Right |
34 * `-----------------------------------------------------------------------------------'
35 */
36[_QWERTY] = LAYOUT_ortho_4x12(
37 HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
38 ESC_CTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
39 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT,
40 KC_GESC, KC_LCTL, KC_LALT, KC_LGUI, LOWER, SPC_UTL, SPC_UTL, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
41),
42
43/*
44 * Gaming is very similar to Qwerty. Certain features from Qwerty are disable
45 * for better gaming experience.
46 */
47[_GAMING] = LAYOUT_ortho_4x12(
48 KC_TAB, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
49 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
50 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
51 KC_ESC, _______, _______, _______, _______, KC_SPC, KC_SPC, _______, _______, _______, _______, _______
52),
53
54/*
55 * Util is accessed by holding Space. The Util layer contains vimkeys and
56 * shortcuts that I find myself needing often.
57 */
58[_UTIL] = LAYOUT_ortho_4x12( \
59 _______, GUI_1, GUI_2, GUI_3, GUI_4, GUI_5, GUI_6, GUI_7, GUI_8, GUI_9, GUI_0, _______,
60 _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______,
61 _______, _______, _______, _______, _______, _______, _______, GO_BACK, GO_FWD, _______, _______, _______,
62 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
63),
64/* Colemak
65 * ,-----------------------------------------------------------------------------------.
66 * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
67 * |------+------+------+------+------+------+------+------+------+------+------+------|
68 * | Esc | A | R | S | T | D | H | N | E | I | O | " |
69 * |------+------+------+------+------+------+------+------+------+------+------+------|
70 * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
71 * |------+------+------+------+------+------+------+------+------+------+------+------|
72 * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
73 * `-----------------------------------------------------------------------------------'
74 */
75[_COLEMAK] = LAYOUT_ortho_4x12(
76 KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
77 KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
78 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
79 BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
80),
81
82/* Dvorak
83 * ,-----------------------------------------------------------------------------------.
84 * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp |
85 * |------+------+------+------+------+------+------+------+------+------+------+------|
86 * | Esc | A | O | E | U | I | D | H | T | N | S | / |
87 * |------+------+------+------+------+------+------+------+------+------+------+------|
88 * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
89 * |------+------+------+------+------+------+------+------+------+------+------+------|
90 * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
91 * `-----------------------------------------------------------------------------------'
92 */
93[_DVORAK] = LAYOUT_ortho_4x12(
94 KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC,
95 KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH,
96 KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT ,
97 BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
98),
99
100/* Lower
101 * ,-----------------------------------------------------------------------------------.
102 * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
103 * |------+------+------+------+------+------+------+------+------+------+------+------|
104 * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
105 * |------+------+------+------+------+------+------+------+------+------+------+------|
106 * | | F7 | F8 | F9 | F10 | F11 | F12 | - | = | [ | ] | |
107 * |------+------+------+------+------+------+------+------+------+------+------+------|
108 * | | | | | | | | Next | Vol- | Vol+ | Play |
109 * `-----------------------------------------------------------------------------------'
110 */
111[_LOWER] = LAYOUT_ortho_4x12(
112 KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
113 KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
114 _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
115 _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
116),
117
118/* Raise
119 * ,-----------------------------------------------------------------------------------.
120 * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
121 * |------+------+------+------+------+------+------+------+------+------+------+------|
122 * | Del | F1 | F2 | F3 | F4 | F5 | F6 | | | | | |
123 * |------+------+------+------+------+------+------+------+------+------+------+------|
124 * | | F7 | F8 | F9 | F10 | F11 | F12 | | |Pg Up |Pg Dn | |
125 * |------+------+------+------+------+------+------+------+------+------+------+------|
126 * | | | | | | | | Next | Vol- | Vol+ | Play |
127 * `-----------------------------------------------------------------------------------'
128 */
129[_RAISE] = LAYOUT_ortho_4x12(
130 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
131 KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, _______, _______, _______, _______,
132 _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, KC_PGUP, KC_PGDN, _______,
133 _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
134),
135
136/* Plover layer (http://opensteno.org)
137 * ,-----------------------------------------------------------------------------------.
138 * | # | # | # | # | # | # | # | # | # | # | # | # |
139 * |------+------+------+------+------+------+------+------+------+------+------+------|
140 * | | S | T | P | H | * | * | F | P | L | T | D |
141 * |------+------+------+------+------+------+------+------+------+------+------+------|
142 * | | S | K | W | R | * | * | R | B | G | S | Z |
143 * |------+------+------+------+------+------+------+------+------+------+------+------|
144 * | Exit | | | A | O | | E | U | | | |
145 * `-----------------------------------------------------------------------------------'
146 */
147[_PLOVER] = LAYOUT_ortho_4x12(
148 KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 ,
149 XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
150 XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
151 EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX
152),
153
154/* Adjust (Lower + Raise)
155 * v------------------------RGB CONTROL--------------------v
156 * ,-----------------------------------------------------------------------------------.
157 * |ToGame| Reset|Debug | RGB |RGBMOD| HUE+ | HUE- | SAT+ | SAT- |BRGTH+|BRGTH-| Del |
158 * |------+------+------+------+------+------+------+------+------+------+------+------|
159 * | | |MUSmod|Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| |
160 * |------+------+------+------+------+------+------+------+------+------+------+------|
161 * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof|TermOn|TermOf| | | |
162 * |------+------+------+------+------+------+------+------+------+------+------+------|
163 * | | | | | | | | | | | |
164 * `-----------------------------------------------------------------------------------'
165 */
166[_ADJUST] = LAYOUT_ortho_4x12(
167 TG_GAME, RESET, DEBUG, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL ,
168 _______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______,
169 _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, TERM_ON, TERM_OFF, _______, _______, _______,
170 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
171)
172
173};
174
175#ifdef AUDIO_ENABLE
176 float plover_song[][2] = SONG(PLOVER_SOUND);
177 float plover_gb_song[][2] = SONG(PLOVER_GOODBYE_SOUND);
178#endif
179
180layer_state_t layer_state_set_user(layer_state_t state) {
181 return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
182}
183
184bool process_record_user(uint16_t keycode, keyrecord_t *record) {
185 switch (keycode) {
186 case QWERTY:
187 if (record->event.pressed) {
188 print("mode just switched to qwerty and this is a huge string\n");
189 set_single_persistent_default_layer(_QWERTY);
190 }
191 return false;
192 break;
193 case COLEMAK:
194 if (record->event.pressed) {
195 set_single_persistent_default_layer(_COLEMAK);
196 }
197 return false;
198 break;
199 case DVORAK:
200 if (record->event.pressed) {
201 set_single_persistent_default_layer(_DVORAK);
202 }
203 return false;
204 break;
205 case BACKLIT:
206 if (record->event.pressed) {
207 register_code(KC_RSFT);
208 #ifdef BACKLIGHT_ENABLE
209 backlight_step();
210 #endif
211 #ifdef KEYBOARD_planck_rev5
212 writePinLow(E6);
213 #endif
214 } else {
215 unregister_code(KC_RSFT);
216 #ifdef KEYBOARD_planck_rev5
217 writePinHigh(E6);
218 #endif
219 }
220 return false;
221 break;
222 case PLOVER:
223 if (record->event.pressed) {
224 #ifdef AUDIO_ENABLE
225 stop_all_notes();
226 PLAY_SONG(plover_song);
227 #endif
228 layer_off(_RAISE);
229 layer_off(_LOWER);
230 layer_off(_ADJUST);
231 layer_on(_PLOVER);
232 if (!eeconfig_is_enabled()) {
233 eeconfig_init();
234 }
235 keymap_config.raw = eeconfig_read_keymap();
236 keymap_config.nkro = 1;
237 eeconfig_update_keymap(keymap_config.raw);
238 }
239 return false;
240 break;
241 case EXT_PLV:
242 if (record->event.pressed) {
243 #ifdef AUDIO_ENABLE
244 PLAY_SONG(plover_gb_song);
245 #endif
246 layer_off(_PLOVER);
247 }
248 return false;
249 break;
250 }
251 return true;
252}
253
254bool muse_mode = false;
255uint8_t last_muse_note = 0;
256uint16_t muse_counter = 0;
257uint8_t muse_offset = 70;
258uint16_t muse_tempo = 50;
259
260void encoder_update(bool clockwise) {
261 if (muse_mode) {
262 if (IS_LAYER_ON(_RAISE)) {
263 if (clockwise) {
264 muse_offset++;
265 } else {
266 muse_offset--;
267 }
268 } else {
269 if (clockwise) {
270 muse_tempo+=1;
271 } else {
272 muse_tempo-=1;
273 }
274 }
275 } else {
276 if (clockwise) {
277 #ifdef MOUSEKEY_ENABLE
278 tap_code(KC_MS_WH_DOWN);
279 #else
280 tap_code(KC_PGDN);
281 #endif
282 } else {
283 #ifdef MOUSEKEY_ENABLE
284 tap_code(KC_MS_WH_UP);
285 #else
286 tap_code(KC_PGUP);
287 #endif
288 }
289 }
290}
291
292void dip_switch_update_user(uint8_t index, bool active) {
293 switch (index) {
294 case 0: {
295#ifdef AUDIO_ENABLE
296 static bool play_sound = false;
297#endif
298 if (active) {
299#ifdef AUDIO_ENABLE
300 if (play_sound) { PLAY_SONG(plover_song); }
301#endif
302 layer_on(_ADJUST);
303 } else {
304#ifdef AUDIO_ENABLE
305 if (play_sound) { PLAY_SONG(plover_gb_song); }
306#endif
307 layer_off(_ADJUST);
308 }
309#ifdef AUDIO_ENABLE
310 play_sound = true;
311#endif
312 break;
313 }
314 case 1:
315 if (active) {
316 muse_mode = true;
317 } else {
318 muse_mode = false;
319 }
320 }
321}
322
323void matrix_scan_user(void) {
324#ifdef AUDIO_ENABLE
325 if (muse_mode) {
326 if (muse_counter == 0) {
327 uint8_t muse_note = muse_offset + SCALE[muse_clock_pulse()];
328 if (muse_note != last_muse_note) {
329 stop_note(compute_freq_for_midi_note(last_muse_note));
330 play_note(compute_freq_for_midi_note(muse_note), 0xF);
331 last_muse_note = muse_note;
332 }
333 }
334 muse_counter = (muse_counter + 1) % muse_tempo;
335 } else {
336 if (muse_counter) {
337 stop_all_notes();
338 muse_counter = 0;
339 }
340 }
341#endif
342}
343
344bool music_mask_user(uint16_t keycode) {
345 switch (keycode) {
346 case RAISE:
347 case LOWER:
348 return false;
349 default:
350 return true;
351 }
352}
diff --git a/layouts/community/ortho_4x12/mguterl/readme.md b/layouts/community/ortho_4x12/mguterl/readme.md
new file mode 100644
index 000000000..d1328c9aa
--- /dev/null
+++ b/layouts/community/ortho_4x12/mguterl/readme.md
@@ -0,0 +1,20 @@
1# Michael Guterl's Ortho 4x12 Layout
2
3I use this layout for both my Planck and Levinson. I also have a very similar
4[keymap](/keyboards/preonic/keymaps/mguterl) for my Preonic.
5
6Check out my [userspace](/users/mguterl) for the custom keycodes that are used
7in keymap.c.
8
9At a very high level I use 4 layers:
10
11* Qwerty - Letters
12* Util - Vimkeys for navigation and other convenient things
13* Raise - Numbers and F keys
14* Lower - Symbols
15
16```sh
17make planck/rev5:mguterl:flash # For Planck rev5 or earlier and Planck Light
18make planck/rev6:mguterl:flash # For Planck rev6
19make keebio/levinson/rev2:mguterl:dfu # For Levinson rev2
20```
diff --git a/layouts/community/ortho_4x12/mguterl/rules.mk b/layouts/community/ortho_4x12/mguterl/rules.mk
new file mode 100644
index 000000000..dcf16bef3
--- /dev/null
+++ b/layouts/community/ortho_4x12/mguterl/rules.mk
@@ -0,0 +1 @@
SRC += muse.c
diff --git a/users/mguterl/config.h b/users/mguterl/config.h
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/users/mguterl/config.h
diff --git a/users/mguterl/mguterl.c b/users/mguterl/mguterl.c
new file mode 100644
index 000000000..479c8d15d
--- /dev/null
+++ b/users/mguterl/mguterl.c
@@ -0,0 +1 @@
#include "mguterl.h"
diff --git a/users/mguterl/mguterl.h b/users/mguterl/mguterl.h
new file mode 100644
index 000000000..0b2f3938b
--- /dev/null
+++ b/users/mguterl/mguterl.h
@@ -0,0 +1,67 @@
1#pragma once
2#include "quantum.h"
3
4#define LOWER MO(_LOWER)
5#define RAISE MO(_RAISE)
6
7/* Tap for Tab, hold for Hyper (Super+Ctrl+Shift+Alt) */
8#define HPR_TAB ALL_T(KC_TAB)
9
10/* Shift when held, Enter when tapped */
11#define SFT_ENT MT(MOD_RSFT, KC_ENT)
12
13/* Activate util layer while holding space */
14#define SPC_UTL LT(_UTIL, KC_SPC)
15
16/* Control when held, Escape when tapped */
17#define ESC_CTL MT(MOD_LCTL, KC_ESC)
18
19/* Toggle gaming layer */
20#define TG_GAME TG(_GAMING)
21
22/*
23 * Make it easy to navigate back and forward in Chrome.
24 */
25#define GO_BACK LGUI(KC_LBRC)
26#define GO_FWD LGUI(KC_RBRC)
27
28/*
29 * When using a 40% layout, these keycodes make it easy to change tabs in apps
30 * like Chrome and VSCode.
31 */
32#define GUI_1 LGUI(KC_1)
33#define GUI_2 LGUI(KC_2)
34#define GUI_3 LGUI(KC_3)
35#define GUI_4 LGUI(KC_4)
36#define GUI_5 LGUI(KC_5)
37#define GUI_6 LGUI(KC_6)
38#define GUI_7 LGUI(KC_7)
39#define GUI_8 LGUI(KC_8)
40#define GUI_9 LGUI(KC_9)
41#define GUI_0 LGUI(KC_0)
42
43/*
44 * Common layers and keycodes that are shared between Planck and Preonic
45 */
46enum ortho_layers {
47 _QWERTY,
48 _GAMING,
49 _UTIL,
50 _COLEMAK,
51 _DVORAK,
52 _LOWER,
53 _RAISE,
54 _PLOVER,
55 _ADJUST
56};
57
58enum ortho_keycodes {
59 QWERTY = SAFE_RANGE,
60 GAMING,
61 UTIL,
62 COLEMAK,
63 DVORAK,
64 PLOVER,
65 BACKLIT,
66 EXT_PLV
67};
diff --git a/users/mguterl/readme.md b/users/mguterl/readme.md
new file mode 100644
index 000000000..9dc1a7ebb
--- /dev/null
+++ b/users/mguterl/readme.md
@@ -0,0 +1,14 @@
1Copyright 2019 Michael Guterl michael@diminishing.org @mguterl
2
3This program is free software: you can redistribute it and/or modify
4it under the terms of the GNU General Public License as published by
5the Free Software Foundation, either version 2 of the License, or
6(at your option) any later version.
7
8This program is distributed in the hope that it will be useful,
9but WITHOUT ANY WARRANTY; without even the implied warranty of
10MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11GNU General Public License for more details.
12
13You should have received a copy of the GNU General Public License
14along with this program. If not, see <http://www.gnu.org/licenses/>.
diff --git a/users/mguterl/rules.mk b/users/mguterl/rules.mk
new file mode 100644
index 000000000..4ed89c987
--- /dev/null
+++ b/users/mguterl/rules.mk
@@ -0,0 +1 @@
SRC += mguterl.c