aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorReed <rmwphd@gmail.com>2020-06-29 13:23:13 -0400
committerGitHub <noreply@github.com>2020-06-29 10:23:13 -0700
commit1baa99c6473473ba3204c9861951e70c10d037cb (patch)
tree2f53db277340f411a690bef3127768007720062e
parente9e6054ee7eaca4cbd8d1c7566f394559ea8770a (diff)
downloadqmk_firmware-1baa99c6473473ba3204c9861951e70c10d037cb.tar.gz
qmk_firmware-1baa99c6473473ba3204c9861951e70c10d037cb.zip
[Keymap] Adding my keymaps for ergodox_ez and kyria (#9365)
* Trying to fix problems in my kyria steez * repeating last commit..... * repeating last commit on EDIT layer but swapping direction exit * moving the reversed desktop moves to the symbol layers on the same hand, for easier activation * adding mac desktop movement keys to Kyria layout * Adding readmes to my keymaps * Removing a png... * Update keyboards/ergodox_ez/keymaps/rmw/keymap-mac.c removing EPRM case * Apply suggestions from code review Great updates to various old-school or outdated ways I was doing things, removing some commented out code, etc. * Apply suggestions from code review Additional improvements * Moving tapdances.cpp to userspace as tapdances.c * reindenting the Kyria keymap to follow four-spaces convention, turning off oled on my kyria, improving the led handling on the Ergodox. * updating led stuff on the other two versions of the keymap, removing EPRM key from main keymap * Apply suggestions from code review I'm adding these various removals to the config file because it seems that at this time those settings are in harmony with the ergodox_ez defaults. * Moving encoder functions into their own userspace file * Apply suggestions from code review Removing settings that are now defaults, clearing out placeholder custom keycodes (smh) * updating encoder functions. * Moving to LAYOUT_stack for all layers, adding end of file newlines, switching to some shorter keycode aliases * Okay, refactor is well underway. * refactored! Also improved led handling for ergodox and rgb handling for kyria * removing mac/windows swappable version because I don't feel like dealing with it when reflashing is so easy. * moving LAYOUT_stack into kyria.h * moving the alternate default layer down next to QWERTY
-rw-r--r--keyboards/ergodox_ez/keymaps/rmw/config.h59
-rw-r--r--keyboards/ergodox_ez/keymaps/rmw/keymap-mac.c188
-rw-r--r--keyboards/ergodox_ez/keymaps/rmw/keymap-win.c159
-rw-r--r--keyboards/ergodox_ez/keymaps/rmw/keymap.c13
-rw-r--r--keyboards/ergodox_ez/keymaps/rmw/readme.md11
-rw-r--r--keyboards/ergodox_ez/keymaps/rmw/rules.mk1
-rw-r--r--keyboards/kyria/keymaps/rmw/config.h36
-rw-r--r--keyboards/kyria/keymaps/rmw/keymap.c199
-rw-r--r--keyboards/kyria/keymaps/rmw/readme.md9
-rw-r--r--keyboards/kyria/keymaps/rmw/rules.mk4
-rw-r--r--keyboards/kyria/kyria.h22
-rw-r--r--users/rmw/encoder_functions.c53
-rw-r--r--users/rmw/encoder_functions.h11
-rw-r--r--users/rmw/rmw.c1
-rw-r--r--users/rmw/rmw.h87
-rw-r--r--users/rmw/rules.mk9
-rw-r--r--users/rmw/tapdances.c389
-rw-r--r--users/rmw/tapdances.h46
18 files changed, 1297 insertions, 0 deletions
diff --git a/keyboards/ergodox_ez/keymaps/rmw/config.h b/keyboards/ergodox_ez/keymaps/rmw/config.h
new file mode 100644
index 000000000..7b90c2327
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/rmw/config.h
@@ -0,0 +1,59 @@
1/*
2Copyright 2012 Jun Wako <wakojun@gmail.com>
3Copyright 2013 Oleg Kostyuk <cub.uanic@gmail.com>
4Edited like hell 2017+ by Reed Williams <rmwphd@gmail.com>
5
6This program is free software: you can redistribute it and/or modify
7it under the terms of the GNU General Public License as published by
8the Free Software Foundation, either version 2 of the License, or
9(at your option) any later version.
10
11This program is distributed in the hope that it will be useful,
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
17along with this program. If not, see <http://www.gnu.org/licenses/>.
18*/
19#pragma once
20
21#define MACOSX
22
23/* USB Device descriptor parameter */
24#ifndef DESCRIPTION
25#define DESCRIPTION QMK keyboard firmware for Ergodox EZ
26#endif
27
28#define USB_MAX_POWER_CONSUMPTION 500
29
30#define QMK_KEYS_PER_SCAN 4
31/* Set 0 if debouncing isn't needed */
32#undef DEBOUNCE
33#define DEBOUNCE 5
34
35
36#define ONESHOT_TIMEOUT 900 // how long before oneshot times out
37//#define ONESHOT_TAP_TOGGLE 2 // how many taps before oneshot toggle is triggered
38
39#undef LOCKING_SUPPORT_ENABLE
40#undef LOCKING_RESYNC_ENABLE
41
42#undef MOUSEKEY_DELAY
43#define MOUSEKEY_DELAY 20
44#undef MOUSEKEY_MAX_SPEED
45#define MOUSEKEY_MAX_SPEED 6
46#undef MOUSEKEY_TIME_TO_MAX
47#define MOUSEKEY_TIME_TO_MAX 254
48#undef MOUSEKEY_WHEEL_MAX_SPEED
49#define MOUSEKEY_WHEEL_MAX_SPEED 10
50#undef MOUSEKEY_WHEEL_TIME_TO_MAX
51#define MOUSEKEY_WHEEL_TIME_TO_MAX 254
52
53/* disable action features */
54//#define NO_ACTION_LAYER
55//#define NO_ACTION_TAPPING
56//#define NO_ACTION_ONESHOT
57//#define NO_ACTION_MACRO
58//#define NO_ACTION_FUNCTION
59//#define DEBUG_MATRIX_SCAN_RATE
diff --git a/keyboards/ergodox_ez/keymaps/rmw/keymap-mac.c b/keyboards/ergodox_ez/keymaps/rmw/keymap-mac.c
new file mode 100644
index 000000000..7a78ce98e
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/rmw/keymap-mac.c
@@ -0,0 +1,188 @@
1#include "rmw.h"
2
3const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
4
5 [QWERTY] = LAYOUT_ergodox(
6 TD(FRBK2), KC_1, KC_2, KC_3, KC_4, KC_5, KC_F4,
7 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TO(EDIT),
8 OSL(EDIT), KC_A, LT(NUMPAD,KC_S), KC_D, LT(FSYM,KC_F), KC_G,
9 LCTL(KC_LEFT), KC_Z, KC_X, KC_C, KC_V, SFT_T(KC_B), KC_TAB,
10 TD(CTLALL), OSL(ADJUST), TD(GUCTL), TD(SGCA), TD(AGC),
11 OS_CMD, OS_CTL ,
12 KC_ESCAPE,
13 KC_BSPACE, TD(SHENT), OSL(EDIT),
14
15 KC_F5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
16 TO(NUMPAD), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
17 KC_H, LT(JSYM,KC_J), KC_K, KC_L, LT(EDIT,KC_SCLN), KC_QUOTE,
18 CTL_T(KC_B), KC_N, KC_M, KC_COMM, KC_DOT, LT(MEDIA,KC_SLSH), LCTL(KC_RIGHT),
19 TD(GCA), TD(CTLALL), KC_LBRC, KC_RBRC, KC_MS_BTN1,
20 OS_CALT, KC_TAB,
21 KC_DEL,
22 KC_CAPS, SFTENT, KC_SPC),
23
24
25 [MINIMAK4] = LAYOUT_ergodox(
26 TD(FRBK2), KC_1, KC_2, KC_3, KC_4, KC_5, KC_F4,
27 KC_TAB, KC_Q, KC_W, KC_D, KC_R, KC_K, TO(EDIT),
28 OSL(EDIT), KC_A, LT(NUMPAD,KC_S), KC_T, LT(FSYM,KC_F), KC_G,
29 OSM(MOD_LSFT), KC_Z, KC_X, KC_C, KC_V, SFT_T(KC_B), KC_TAB,
30 TD(CTLALL), OSL(ADJUST), TD(GUCTL), TD(SGCA), TD(AGC),
31 OS_CMD, OS_CTL ,
32 KC_ESCAPE,
33 KC_BSPACE, TD(SHENT), OSL(EDIT),
34 KC_F5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
35 TO(NUMPAD), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
36 KC_H, LT(JSYM,KC_J), KC_E, KC_L, LT(EDIT,KC_SCLN), KC_QUOTE,
37 CTL_T(KC_B), KC_N, KC_M, KC_COMM, KC_DOT, LT(MEDIA,KC_SLSH), KC_MS_BTN1,
38 TD(GCA), TD(CTLALL), LGUI(KC_GRV), KC_RBRC, KC_MS_BTN1,
39 OS_ALT, KC_TAB,
40 KC_DEL,
41 KC_CAPS, SFT_T(KC_ENT), KC_SPC),
42
43 [NUMPAD] = LAYOUT_ergodox(VRSN, KC_F11, KC_F12, KC_F1, KC_F2, KC_F3, _______,
44 _______, _______, KC_PGUP, KC_UP, KC_PGDOWN, _______, TO(QWERTY),
45 _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______,
46 _______, LGUI(KC_Z), LGUI(KC_X), LGUI(KC_C), LGUI(KC_V), LGUI(KC_Y), _______,
47 _______, _______, _______, _______, _______,
48 _______, _______, KC_PSCREEN, _______, _______, TO(QWERTY),
49
50 _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
51 TO(EDIT), _______, KC_7, KC_8, KC_9, KC_KP_MINUS, _______,
52 _______, KC_4, KC_5, KC_6, KC_KP_PLUS, _______,
53 _______, KC_COMM, KC_1, KC_2, KC_3, KC_KP_SLASH, _______,
54 KC_0, KC_DOT, KC_EQUAL, KC_KP_ASTERISK, _______,
55 _______, _______, KC_INSERT, TO(EDIT), _______, _______),
56
57 [EDIT] = LAYOUT_ergodox(_______, _______, KC_MS_WH_UP, KC_MS_BTN1, KC_MS_BTN2, _______, _______,
58 _______, LGUI(LALT(KC_ESCAPE)), KC_MS_WH_DOWN, LALT(S(KC_LEFT)), LALT(S(KC_RIGHT)), _______, TO(NUMPAD),
59 _______, _______, LGUI(KC_GRV), LALT(KC_LEFT), LALT(KC_RIGHT), _______,
60 LCTL(KC_RIGHT), LGUI(KC_Z), LGUI(KC_X), LGUI(KC_C), LGUI(KC_V), LGUI(KC_Y), _______,
61 _______, _______, _______, _______, _______,
62 _______, _______, _______, _______, _______, TO(NUMPAD),
63 _______, _______, _______, S(KC_UP), _______, _______, KC_DELETE,
64 TO(QWERTY), LGUI(KC_T), KC_PGUP, KC_UP, KC_PGDOWN, KC_PSCREEN, _______,
65 LGUI(KC_LEFT), KC_LEFT, KC_DOWN, KC_RIGHT, LGUI(KC_RIGHT), _______,
66 _______, S(LGUI(KC_LEFT)), S(KC_LEFT), S(KC_DOWN), S(KC_RIGHT), S(LGUI(KC_RIGHT)), LCTL(KC_LEFT),
67 _______, _______, FORM_GET, FORM_PUT, _______,
68 _______, _______, _______, S(KC_F10), _______, _______),
69
70 [FSYM] = LAYOUT_ergodox(_______, _______, _______, _______, _______, _______, _______,
71 _______, _______, _______, _______, _______, _______, _______,
72 _______, _______, KC_TILD, KC_EXLM, _______, _______,
73 LCTL(KC_RIGHT), _______, _______, _______, _______, _______, _______,
74 _______, _______, _______, _______, _______,
75 _______, _______, _______, DEL_WRD, _______, _______,
76 _______, _______, _______, _______, _______, _______, _______,
77 _______, KC_CIRC, KC_AMPR , KC_ASTR, KC_GRV , _______, _______,
78 KC_EQUAL, KC_MINUS, KC_UNDS, KC_BSLS, KC_COLON, KC_DQT ,
79 _______, _______, KC_PLUS , KC_SLSH, KC_PIPE, _______ , _______,
80 _______, _______, _______, _______, _______,
81 _______, _______, _______, _______, _______, _______),
82
83 [JSYM] = LAYOUT_ergodox(_______, _______, _______, _______, _______, _______, _______,
84 _______, KC_GRV, KC_AT , KC_LCBR, KC_RCBR, _______, _______,
85 _______, KC_HASH, KC_DLR , KC_LPRN, KC_RPRN, KC_LEFT,
86 _______, KC_PERC, KC_CIRC, KC_LBRACKET, KC_RBRACKET, _______, _______,
87 _______, _______, _______, _______, _______,
88 _______, _______, _______, _______, _______, _______,
89 _______, _______, _______, _______, _______, _______, _______,
90 _______, _______, _______, _______, _______, _______, _______,
91 _______, _______, KC_QUES, KC_SLSH, KC_COLON, _______,
92 _______, _______, _______, _______, _______, _______, LCTL(KC_LEFT),
93 _______, _______, _______, _______, _______,
94 _______, _______, _______, _______, LGUI(KC_DOWN), _______),
95
96 [MEDIA] = LAYOUT_ergodox(_______, _______, KC_MS_BTN4, _______, KC_MS_BTN5, _______, _______,
97 _______, KC_MS_WH_UP, KC_MS_WH_LEFT, KC_MS_UP, KC_MS_WH_RIGHT, _______, _______,
98 _______, KC_MS_WH_DOWN, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, _______,
99 _______, _______, KC_MS_ACCEL0, KC_MS_ACCEL1, KC_MS_ACCEL2, _______, _______,
100 _______, _______, _______, _______, KC_MS_BTN3,
101 _______, _______, _______, KC_MS_BTN1, KC_MS_BTN2, _______,
102 _______, _______, _______, _______, _______, _______, _______,
103 _______, _______, _______, _______, _______, _______, _______,
104 _______, _______, _______, _______, _______, _______,
105 _______, _______, KC_AUDIO_VOL_DOWN, KC_AUDIO_MUTE, KC_AUDIO_VOL_UP, _______, _______,
106 KC_MEDIA_REWIND, KC_MEDIA_FAST_FORWARD, _______, _______, _______,
107 _______, _______, _______, _______, KC_MS_BTN1, KC_MEDIA_PLAY_PAUSE),
108
109 [ADJUST] = LAYOUT_ergodox(_______, _______, _______, _______, _______, _______, _______,
110 _______, _______, _______, _______, _______, _______, _______,
111 _______, TO(EDIT), TO(NUMPAD), TO(FSYM), TO(JSYM), TO(MEDIA),
112 _______, _______, _______, _______, _______, _______, _______,
113 _______, TO(QWERTY), DF(MINIMAK4), DF(QWERTY), _______,
114 _______, _______, _______, _______, _______, _______,
115 _______, _______, _______, _______, _______, _______, _______,
116 _______, _______, _______, _______, _______, _______, _______,
117 _______, _______, _______, _______, _______, _______,
118 _______, _______, _______, _______, _______, _______, _______,
119 _______, _______, _______, _______, _______,
120 _______, _______, _______, _______, _______, _______),
121
122};
123
124bool process_record_user(uint16_t keycode, keyrecord_t *record) {
125 switch (keycode) {
126 case VRSN:
127 if (record->event.pressed) {
128 SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
129 }
130 return false;
131 case FORM_GET:
132 if (record->event.pressed) {
133 tap_code(KC_BTN1);
134 tap_code16(G(KC_A));
135 tap_code16(G(KC_C));
136 }
137 return false;
138 case FORM_PUT:
139 if (record->event.pressed) {
140 tap_code(KC_BTN1);
141 tap_code16(G(KC_A));
142 tap_code16(G(KC_V));
143 }
144 return false;
145 }
146 return true;
147}
148
149layer_state_t layer_state_set_user(layer_state_t state) {
150 switch (get_highest_layer(state)) {
151 case QWERTY:
152 ergodox_right_led_1_off();
153 ergodox_right_led_2_off();
154 ergodox_right_led_3_off();
155 break;
156 case NUMPAD:
157 ergodox_right_led_1_on();
158 ergodox_right_led_2_off();
159 ergodox_right_led_3_off();
160 break;
161 case EDIT:
162 ergodox_right_led_1_off();
163 ergodox_right_led_2_on();
164 ergodox_right_led_3_off();
165 break;
166 case FSYM:
167 ergodox_right_led_1_on();
168 ergodox_right_led_2_on();
169 ergodox_right_led_3_off();
170 break;
171 case JSYM:
172 ergodox_right_led_1_on();
173 ergodox_right_led_2_off();
174 ergodox_right_led_3_on();
175 break;
176 case MEDIA:
177 ergodox_right_led_1_off();
178 ergodox_right_led_2_on();
179 ergodox_right_led_3_on();
180 break;
181 case ADJUST:
182 ergodox_right_led_1_on();
183 ergodox_right_led_2_on();
184 ergodox_right_led_3_on();
185 break;
186 }
187 return state;
188}
diff --git a/keyboards/ergodox_ez/keymaps/rmw/keymap-win.c b/keyboards/ergodox_ez/keymaps/rmw/keymap-win.c
new file mode 100644
index 000000000..9f7435c0d
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/rmw/keymap-win.c
@@ -0,0 +1,159 @@
1#include "rmw.h"
2
3const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
4
5 [QWERTY] = LAYOUT_ergodox( // LEFT HAND
6 TD(FRBK), KC_1, KC_2, KC_3, KC_4, KC_5, KC_F4,
7 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TO(EDIT),
8 OSL(EDIT), KC_A, LT(NUMPAD,KC_S), KC_D, LT(FSYM,KC_F), KC_G,
9 OSM(MOD_LSFT), KC_Z, KC_X, KC_C, KC_V, SFT_T(KC_B), KC_TAB,
10 TD(CTLAND), OSL(ADJUST), TD(SCAG), TD(TDGUI), TD(ACG),
11 OS_ALT, OS_CTL ,
12 KC_ESCAPE,
13 KC_BSPACE, TD(SHENT), OSL(EDIT),
14
15 // RIGHT HAND
16 KC_F5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
17 TO(NUMPAD), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
18 KC_H, LT(JSYM,KC_J), KC_K, KC_L, LT(EDIT,KC_SCLN), KC_QUOTE,
19 CTL_T(KC_B), KC_N, KC_M, KC_COMM, KC_DOT, LT(MEDIA,KC_SLSH), TD(SHENT),
20 TD(CAG), TD(TDGUI), KC_LBRC, KC_RBRC, KC_MS_BTN1,
21 OS_ALT, KC_TAB,
22 KC_DEL,
23 KC_CAPS, SFT_T(KC_ENT), KC_SPC),
24
25
26 [NUMPAD] = LAYOUT_ergodox(VRSN, KC_F11, KC_F12, KC_F1, KC_F2, KC_F3, _______,
27 _______, _______, KC_PGUP, KC_UP, KC_PGDOWN, _______, TO(0),
28 _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______,
29 _______, LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), LCTL(KC_Y), _______,
30 _______, _______, _______, _______, _______,
31 _______, _______, KC_PSCREEN, _______, _______, TO(0),
32
33 _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
34 TO(EDIT), _______, KC_7, KC_8, KC_9, KC_KP_MINUS, _______,
35 _______, KC_4, KC_5, KC_6, KC_KP_PLUS, _______,
36 _______, KC_COMM, KC_1, KC_2, KC_3, KC_KP_SLASH, _______,
37 KC_0, KC_DOT, KC_EQUAL, KC_KP_ASTERISK, _______,
38 _______, _______, KC_INSERT, TO(EDIT), _______, _______),
39
40 [EDIT] = LAYOUT_ergodox(KC_ESCAPE, LALT(LCTL(KC_DELETE)), KC_MS_WH_UP, KC_MS_BTN1, KC_MS_BTN2, _______, _______,
41 _______, LCTL(S(KC_ESCAPE)), KC_MS_WH_DOWN, LCTL(S(KC_LEFT)), LCTL(S(KC_RIGHT)), _______, TO(NUMPAD),
42 _______, _______, KC_LEFT, LCTL(KC_LEFT), LCTL(KC_RIGHT), _______,
43 _______, LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), LCTL(KC_Y), _______,
44 _______, _______, _______, _______, _______,
45 _______, _______, _______, _______, _______, TO(NUMPAD),
46 _______, _______, _______, S(KC_UP), _______, _______, KC_DELETE,
47 TO(0), LCTL(KC_T), KC_PGUP, KC_UP, KC_PGDOWN, KC_PSCREEN, _______,
48 KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT, KC_END, _______,
49 _______, S(KC_HOME), S(KC_LEFT), S(KC_DOWN), S(KC_RIGHT), S(KC_END), _______,
50 _______, _______, _______, _______, _______,
51 _______, _______, _______, S(KC_F10), _______, _______),
52
53 [FSYM] = LAYOUT_ergodox(_______, _______, _______, _______, _______, _______, _______,
54 _______, _______, _______, _______, _______, _______, _______,
55 _______, _______, KC_TILD, KC_EXLM, _______, _______,
56 _______, _______, _______, _______, _______, _______, _______,
57 _______, _______, _______, _______, _______,
58 _______, _______, _______, _______, _______, _______,
59 _______, _______, _______, _______, _______, _______, _______,
60 _______, KC_CIRC, KC_AMPR , KC_ASTR, KC_GRV , _______, _______,
61 KC_EQUAL, KC_MINUS, KC_UNDS, KC_BSLS, KC_COLON, KC_DQT ,
62 _______, _______, KC_PLUS , KC_SLSH, KC_PIPE, _______ , _______,
63 _______, _______, _______, _______, _______,
64 _______, _______, _______, _______, _______, _______),
65
66 [JSYM] = LAYOUT_ergodox(_______, _______, _______, _______, _______, _______, _______,
67 _______, KC_GRV, KC_AT , KC_LCBR, KC_RCBR, _______, _______,
68 _______, KC_HASH, KC_DLR , KC_LPRN, KC_RPRN, KC_LEFT,
69 _______, KC_PERC, KC_CIRC, KC_LBRACKET, KC_RBRACKET, _______, _______,
70 _______, _______, _______, _______, _______,
71 _______, _______, _______, _______, _______, _______,
72 _______, _______, _______, _______, _______, _______, _______,
73 _______, _______, _______, _______, _______, _______, _______,
74 _______, _______, KC_QUES, KC_SLSH, KC_COLON, _______,
75 _______, _______, _______, _______, _______, _______, _______,
76 _______, _______, _______, _______, _______,
77 _______, _______, _______, _______, _______, _______),
78
79 [MEDIA] = LAYOUT_ergodox(_______, _______, KC_MS_BTN4, _______, KC_MS_BTN5, _______, _______,
80 _______, KC_MS_WH_UP, KC_MS_WH_LEFT, KC_MS_UP, KC_MS_WH_RIGHT, _______, _______,
81 _______, KC_MS_WH_DOWN, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, _______,
82 _______, _______, KC_MS_ACCEL0, KC_MS_ACCEL1, KC_MS_ACCEL2, _______, _______,
83 _______, _______, _______, _______, KC_MS_BTN3,
84 _______, _______, _______, KC_MS_BTN1, KC_MS_BTN2, _______,
85 _______, _______, _______, _______, _______, _______, _______,
86 _______, _______, _______, _______, _______, _______, _______,
87 _______, _______, _______, _______, _______, _______,
88 _______, _______, KC_AUDIO_VOL_DOWN, KC_AUDIO_MUTE, KC_AUDIO_VOL_UP, _______, _______,
89 KC_MEDIA_PREV_TRACK, KC_MEDIA_NEXT_TRACK, _______, _______, _______,
90 _______, _______, _______, _______, KC_MS_BTN1, KC_MEDIA_PLAY_PAUSE),
91
92 [ADJUST] = LAYOUT_ergodox(_______, _______, _______, _______, _______, _______, _______,
93 _______, _______, _______, _______, _______, _______, _______,
94 _______, TO(EDIT), TO(NUMPAD), TO(FSYM), TO(JSYM), TO(MEDIA),
95 _______, _______, _______, _______, _______, _______, _______,
96 _______, TO(QWERTY), _______, _______, _______,
97 _______, _______, _______, _______, _______, _______,
98 _______, _______, _______, _______, _______, _______, _______,
99 _______, _______, _______, _______, _______, _______, _______,
100 _______, _______, _______, _______, _______, _______,
101 _______, _______, _______, _______, _______, _______, _______,
102 _______, _______, _______, _______, _______,
103 _______, _______, _______, _______, _______, _______),
104
105};
106
107bool process_record_user(uint16_t keycode, keyrecord_t *record) {
108 switch (keycode) {
109 // dynamically generate these.
110 case VRSN:
111 if (record->event.pressed) {
112 SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
113 }
114 return false;
115 }
116 return true;
117}
118
119
120layer_state_t layer_state_set_user(layer_state_t state) {
121 switch (get_highest_layer(state)) {
122 case QWERTY:
123 ergodox_right_led_1_off();
124 ergodox_right_led_2_off();
125 ergodox_right_led_3_off();
126 break;
127 case NUMPAD:
128 ergodox_right_led_1_on();
129 ergodox_right_led_2_off();
130 ergodox_right_led_3_off();
131 break;
132 case EDIT:
133 ergodox_right_led_1_off();
134 ergodox_right_led_2_on();
135 ergodox_right_led_3_off();
136 break;
137 case FSYM:
138 ergodox_right_led_1_on();
139 ergodox_right_led_2_on();
140 ergodox_right_led_3_off();
141 break;
142 case JSYM:
143 ergodox_right_led_1_on();
144 ergodox_right_led_2_off();
145 ergodox_right_led_3_on();
146 break;
147 case MEDIA:
148 ergodox_right_led_1_off();
149 ergodox_right_led_2_on();
150 ergodox_right_led_3_on();
151 break;
152 case ADJUST:
153 ergodox_right_led_1_on();
154 ergodox_right_led_2_on();
155 ergodox_right_led_3_on();
156 break;
157 }
158 return state;
159}
diff --git a/keyboards/ergodox_ez/keymaps/rmw/keymap.c b/keyboards/ergodox_ez/keymaps/rmw/keymap.c
new file mode 100644
index 000000000..b0b9bf13c
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/rmw/keymap.c
@@ -0,0 +1,13 @@
1#include "ergodox_ez.h"
2#include "version.h"
3
4#define LONGPRESS_DELAY 180
5#define LAYER_TOGGLE_DELAY 350
6
7#ifdef MACOSX
8#include "keymap-mac.c"
9#endif
10
11#ifdef WINDOWS
12#include "keymap-win.c"
13#endif
diff --git a/keyboards/ergodox_ez/keymaps/rmw/readme.md b/keyboards/ergodox_ez/keymaps/rmw/readme.md
new file mode 100644
index 000000000..36e0d1de0
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/rmw/readme.md
@@ -0,0 +1,11 @@
1# RMW Ergodox_EZ Layout
2
3This is the keymap I use on the Ergodox_EZ I use for work. I write reports and code in a variety of languages on this board and the various layers provide plenty of flexibility for navigating, editing text, and writing code and prose.
4
5I switched to a Mac in the past year, so my keymap now mostly gets used in the Mac mode; simply edit the keymap.c file to uncomment \#include keymap-win.c and comment out \#include keymap-mac.c to change back to the Windows version, but I haven't been updating that map as I've made changes moving forward on the Mac version.
6
7## The theory of this keymap
8
9The base layer is either QWERTY or MINIMAK4, as desired. Overlaid on that base layer are various layers triggered by one-shots, TOs, and LTs. Tapdances are used to cram lots of mods into few keys and provide freedom to hit combinations with either hand. Mods and layer things are one-shot (where reasonable) because I prefer that.
10
11An EDIT layer provides text navigation, selection, and editing capabilities in home position. The EXCEL layer offers a numpad and various spreadsheet-useful navigations and operations. Holding S will put the numpad under your right hand in home position. Keys F and J offer various useful symbols (mostly) on the opposite hand when held, including \[\]\(\)\{\} under the left pointer and middle fingers on bottom, middle, and top rows respectively. The MEDIA layer provides media controls (obvs) and some mouse movement and nav, in case I don't feel like reaching for the trackball/trackpad/mouse.
diff --git a/keyboards/ergodox_ez/keymaps/rmw/rules.mk b/keyboards/ergodox_ez/keymaps/rmw/rules.mk
new file mode 100644
index 000000000..31e0fcf29
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/rmw/rules.mk
@@ -0,0 +1 @@
TAP_DANCE_ENABLE=yes
diff --git a/keyboards/kyria/keymaps/rmw/config.h b/keyboards/kyria/keymaps/rmw/config.h
new file mode 100644
index 000000000..02e5087b3
--- /dev/null
+++ b/keyboards/kyria/keymaps/rmw/config.h
@@ -0,0 +1,36 @@
1/* Copyright 2019 Thomas Baart <thomas@splitkb.com>
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#define MACOSX
20
21#ifdef OLED_DRIVER_ENABLE
22 #define OLED_DISPLAY_128X64
23#endif
24
25#ifdef RGBLIGHT_ENABLE
26 #define RGBLIGHT_ANIMATIONS
27 #define RGBLIGHT_HUE_STEP 8
28 #define RGBLIGHT_SAT_STEP 8
29 #define RGBLIGHT_VAL_STEP 8
30#endif
31
32// If you are using an Elite C rev3 on the follower side, uncomment the lines below:
33// #define SPLIT_USB_DETECT
34// #define NO_USB_STARTUP_CHECK
35
36
diff --git a/keyboards/kyria/keymaps/rmw/keymap.c b/keyboards/kyria/keymaps/rmw/keymap.c
new file mode 100644
index 000000000..bf0427238
--- /dev/null
+++ b/keyboards/kyria/keymaps/rmw/keymap.c
@@ -0,0 +1,199 @@
1/* Copyright 2019 Thomas Baart <thomas@splitkb.com>
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 "rmw.h"
18
19const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
20
21 [QWERTY] = LAYOUT_stack(
22 KC_TAB , KC_Q, KC_W, KC_E, KC_R, KC_T,
23 OSL(EDIT), KC_A, LT(NUMPAD,KC_S), KC_D, LT(FSYM,KC_F), KC_G,
24 TD(FRBK2) , KC_Z, KC_X, KC_C, KC_V, KC_B, TO(EDIT), KC_ESCAPE,
25 TO(ADJUST), TD(SGCA), TD(AGC), KC_BSPACE, TD(SHNTC),
26
27 KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
28 KC_H, LT(JSYM,KC_J), KC_K, KC_L, LT(EDIT,KC_SCLN), KC_QUOT,
29 KC_DEL, TO(NUMPAD), KC_N, KC_M, KC_COMM, KC_DOT, LT(MEDIA,KC_SLSH), KC_MS_BTN1,
30 SFTENT, KC_SPC, TD(GCA), TD(CTLALL), KC_CAPS
31 ),
32
33 [MINIMAK4] = LAYOUT_stack(
34 KC_TAB , KC_Q, KC_W, KC_D, KC_R, KC_K,
35 OSL(EDIT), KC_A, LT(NUMPAD,KC_S), KC_T, LT(FSYM,KC_F), KC_G,
36 OSM(MOD_LSFT) , KC_Z, KC_X, KC_C, KC_V, KC_B, TO(EDIT), KC_ESCAPE,
37 _______, TO(ADJUST), TD(SGCA), KC_BSPACE, TD(SHNTC),
38
39 KC_Y, KC_U, KC_I, KC_O, KC_P, KC_PIPE,
40 KC_H, LT(JSYM,KC_J), KC_E, KC_L, LT(EDIT,KC_SCLN), KC_QUOT,
41 KC_DEL, TO(NUMPAD), KC_N, KC_M, KC_COMM, KC_DOT, LT(MEDIA,KC_SLSH), KC_MINS,
42 SFTENT, KC_SPC, TD(GCA), TD(CTLALL), _______
43 ),
44
45 [NUMPAD] = LAYOUT_stack(
46 _______, _______, _______, _______, _______, _______,
47 _______, _______, _______, _______, _______, _______,
48 _______, _______, _______, _______, _______, _______, TO(QWERTY), _______,
49 _______, _______, _______, _______ , _______,
50
51 _______, KC_7, KC_8, KC_9, KC_KP_MINUS, _______,
52 _______, KC_4, KC_5, KC_6, KC_KP_PLUS , _______,
53 _______, TO(EDIT), _______, KC_1, KC_2, KC_3, KC_KP_SLASH, LCTL(KC_RIGHT),
54 _______, _______, KC_0, KC_DOT, _______
55 ),
56
57 [EDIT] = LAYOUT_stack(
58 _______, TASK_MAN, _______, SELW_LEFT, SELW_RIGHT, _______,
59 _______, _______ , LGUI(KC_GRV), MVW_LEFT, MVW_RIGHT , _______,
60 LCTL(KC_LEFT), R_UNDO, R_CUT , R_COPY , R_PASTE, R_REDO , TO(NUMPAD), FORM_GET,
61 _______, _______, _______, DEL_WRD, _______,
62
63 NEW_TAB , KC_PGUP, KC_UP, KC_PGDOWN, KC_PSCREEN, _______,
64 R_HOME , KC_LEFT, KC_DOWN, KC_RIGHT, R_END, _______,
65 FORM_PUT, TO(QWERTY), SEL_HOME, S(KC_LEFT), S(KC_DOWN), S(KC_RIGHT), SEL_END, _______,
66 _______, _______, _______, _______, _______
67 ),
68
69 [ADJUST] = LAYOUT_stack(
70 KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
71 TO(QWERTY), TO(EDIT), TO(NUMPAD), TO(JSYM), TO(FSYM), TO(MEDIA),
72 DF(MINIMAK4), DF(QWERTY), RGB_SAD, RGB_HUD, RGB_VAD, RGB_RMOD,_______, _______,
73 _______, _______, _______, _______, _______,
74
75 KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
76 _______, _______, _______, _______, _______, _______,
77 _______, _______, _______, _______, _______, _______, _______, _______,
78 _______, _______, _______, _______, _______
79 ),
80
81 [FSYM] = LAYOUT_stack(
82 _______, _______, _______, _______, _______, _______,
83 _______, _______, KC_TILD, KC_EXLM, _______, _______,
84 LCTL(KC_RIGHT), _______, TO(QWERTY), _______, _______, _______, _______, _______,
85 _______, _______, _______, _______, _______,
86
87 KC_CIRC, KC_AMPR , KC_ASTR, KC_GRV , _______, _______,
88 KC_EQUAL, KC_MINUS, KC_UNDS, KC_PIPE, KC_COLON, KC_DQT,
89 _______, _______, _______, KC_PLUS, KC_BSLS, KC_SLSH, _______, _______,
90 _______, _______, _______, _______, _______
91 ),
92
93 [JSYM] = LAYOUT_stack(
94 _______, KC_GRV, KC_AT , KC_LCBR, KC_RCBR, _______,
95 _______, KC_HASH, KC_DLR , KC_LPRN, KC_RPRN, KC_LEFT,
96 _______, KC_PERC, KC_CIRC, KC_LBRACKET, KC_RBRACKET, _______, _______, _______,
97 _______, _______, _______, _______, _______,
98
99 _______, _______, _______, _______, _______, _______,
100 _______, _______, KC_QUES, KC_SLSH, KC_COLON, _______,
101 _______, _______, _______, _______, _______, TO(QWERTY), _______, LCTL(KC_LEFT),
102 _______, _______, _______, _______, _______
103 ),
104
105 [MEDIA] = LAYOUT_stack(
106 _______, KC_WH_U, KC_WH_L, KC_MS_UP, KC_WH_R, _______,
107 _______, KC_WH_D, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, _______,
108 _______, _______, KC_ACL0, KC_ACL1, KC_ACL2, _______, _______, _______,
109 _______, _______, _______, _______, _______,
110
111 _______, _______, _______, _______, _______, _______,
112 _______, _______, _______, _______, _______, _______,
113 _______, _______, _______, _______, KC_VOLD, KC_MUTE, KC_VOLU, _______,
114 KC_MS_BTN1, KC_MEDIA_PLAY_PAUSE, KC_MRWD, KC_MFFD, _______
115 )
116};
117
118bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
119 switch (keycode) {
120 case FORM_GET:
121 if (record->event.pressed) {
122 tap_code(KC_BTN1);
123 tap_code16(G(KC_A));
124 tap_code16(G(KC_C));
125 }
126 return false;
127 case FORM_PUT:
128 if (record->event.pressed) {
129 tap_code16(KC_MS_BTN1);
130 tap_code16(G(KC_A));
131 tap_code16(G(KC_V));
132 }
133 return false;
134 }
135 return true;
136}
137
138#ifdef ENCODER_ENABLE
139void encoder_update_keymap(uint8_t index, bool clockwise) {
140 if (index == 0) {
141 switch (get_highest_layer(layer_state)) {
142 case EDIT:
143 enc_move_words(clockwise);
144 break;
145 case QWERTY:
146 enc_move_desktop(clockwise);
147 default:
148 enc_history_scrubbing(clockwise);
149 break;
150 }
151 } else if (index == 1) {
152 switch (get_highest_layer(layer_state)) {
153 case QWERTY:
154 enc_scrolling(clockwise);
155 break;
156 case FSYM:
157 enc_zoom(clockwise);
158 break;
159 default:
160 enc_volume_knob(clockwise);
161 break;
162 }
163 }
164}
165#endif
166
167#ifdef RGBLIGHT_ENABLE // include mods, as well as layers
168layer_state_t layer_state_set_user(layer_state_t state) {
169 switch (get_highest_layer(state)) {
170 case QWERTY:
171 rgblight_setrgb (0x00, 0x00, 0x00);
172 break;
173 case MINIMAK4:
174 rgblight_setrgb (0x20, 0x20, 0x20);
175 break;
176 case NUMPAD:
177 rgblight_setrgb (0xFF, 0x00, 0x00);
178 break;
179 case EDIT:
180 rgblight_setrgb (0x00, 0xFF, 0x00);
181 break;
182 case FSYM:
183 rgblight_setrgb (0x7A, 0x7A, 0x00);
184 break;
185 case JSYM:
186 rgblight_setrgb (0x7A, 0x00, 0x7A);
187 break;
188 case MEDIA:
189 rgblight_setrgb (0x00, 0x7A, 0x7A);
190 break;
191 case ADJUST:
192 rgblight_setrgb (0x7A, 0x7A, 0x7A);
193 break;
194 default:
195 rgblight_setrgb (0x00, 0x00, 0x00);
196 }
197 return state;
198}
199#endif
diff --git a/keyboards/kyria/keymaps/rmw/readme.md b/keyboards/kyria/keymaps/rmw/readme.md
new file mode 100644
index 000000000..c05ca494b
--- /dev/null
+++ b/keyboards/kyria/keymaps/rmw/readme.md
@@ -0,0 +1,9 @@
1# RMW Kyria Layout
2
3This is a Kyria edition of the keymap I use on the Ergodox_EZ I use for work. I write reports and code in a variety of languages on that board and the various layers provide plenty of flexibility for navigating, editing text, and writing code and prose. This keymap is mostly Mac-focused in its shortcuts and tapdances.
4
5## The theory of this keymap
6
7The base layer is either QWERTY or MINIMAK4, as desired. Overlaid on that base layer are various layers triggered by one-shots, TOs, and LTs. Tapdances are used to cram lots of mods into few keys and provide freedom to hit combinations with either hand. Mods and layer things are one-shot (where reasonable) because I prefer that.
8
9An EDIT layer provides text navigation, selection, and editing capabilities in home position. The NUMPAD layer offers a numpad and various spreadsheet-useful navigations and operations. Holding S will put the numpad under your right hand in home position. Keys F and J offer various useful symbols (mostly) on the opposite hand when held, including \[\]\(\)\{\} under the left pointer and middle fingers on bottom, middle, and top rows respectively. The MEDIA layer provides media controls (obvs) and some mouse movement and nav, in case I don't feel like reaching for the trackball/trackpad/mouse.
diff --git a/keyboards/kyria/keymaps/rmw/rules.mk b/keyboards/kyria/keymaps/rmw/rules.mk
new file mode 100644
index 000000000..d41ffaef6
--- /dev/null
+++ b/keyboards/kyria/keymaps/rmw/rules.mk
@@ -0,0 +1,4 @@
1OLED_DRIVER_ENABLE = no # Enables the use of OLED displays
2ENCODER_ENABLE = yes # Enables the use of one or more encoders
3RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
4TAP_DANCE_ENABLE=yes # Enables Tap Dance
diff --git a/keyboards/kyria/kyria.h b/keyboards/kyria/kyria.h
index a2a675e0d..13375ae88 100644
--- a/keyboards/kyria/kyria.h
+++ b/keyboards/kyria/kyria.h
@@ -41,3 +41,25 @@
41 { R32, R33, R34, R35, R36, R37, R38, R39 }, \ 41 { R32, R33, R34, R35, R36, R37, R38, R39 }, \
42 { R45, R46, R47, R48, R49, KC_NO, KC_NO, KC_NO }, \ 42 { R45, R46, R47, R48, R49, KC_NO, KC_NO, KC_NO }, \
43} 43}
44
45#define LAYOUT_stack( \
46 L00, L01, L02, L03, L04, L05, \
47 L12, L13, L14, L15, L16, L17, \
48 L24, L25, L26, L27, L28, L29, L30, L31, \
49 L40, L41, L42, L43, L44, \
50 \
51 R06, R07, R08, R09, R10, R11, \
52 R18, R19, R20, R21, R22, R23, \
53 R32, R33, R34, R35, R36, R37, R38, R39, \
54 R45, R46, R47, R48, R49 \
55) \
56{ \
57 { KC_NO, KC_NO, L05, L04, L03, L02, L01, L00 }, \
58 { KC_NO, KC_NO, L17, L16, L15, L14, L13, L12 }, \
59 { L31, L30, L29, L28, L27, L26, L25, L24 }, \
60 { L44, L43, L42, L41, L40, KC_NO, KC_NO, KC_NO }, \
61 { KC_NO, KC_NO, R06, R07, R08, R09, R10, R11 }, \
62 { KC_NO, KC_NO, R18, R19, R20, R21, R22, R23 }, \
63 { R32, R33, R34, R35, R36, R37, R38, R39 }, \
64 { R45, R46, R47, R48, R49, KC_NO, KC_NO, KC_NO }, \
65}
diff --git a/users/rmw/encoder_functions.c b/users/rmw/encoder_functions.c
new file mode 100644
index 000000000..39032d0eb
--- /dev/null
+++ b/users/rmw/encoder_functions.c
@@ -0,0 +1,53 @@
1// Encoder functions to mix and match!
2
3#include "encoder_functions.h"
4
5void enc_move_words(bool cw){ // Move whole words. Hold shift to select while moving.
6 if (cw) {
7 tap_code16(A(KC_RGHT));
8 } else {
9 tap_code16(A(KC_LEFT));
10 }
11}
12void enc_history_scrubbing(bool cw){ // Undo/Redo.
13 if (cw) {
14 tap_code16(G(S(KC_Z)));
15 } else {
16 tap_code16(G(KC_Z));
17 }
18}
19void enc_scrolling(bool cw){ // Scrolling.
20 if (cw) {
21 tap_code(KC_MS_WH_DOWN);
22 } else {
23 tap_code(KC_MS_WH_UP);
24 }
25}
26void enc_scrolling_h(bool cw){ // Scrolling.
27 if (cw) {
28 tap_code(KC_MS_WH_RIGHT);
29 } else {
30 tap_code(KC_MS_WH_LEFT);
31 }
32}
33void enc_volume_knob(bool cw){ // Volume control.
34 if (cw) {
35 tap_code(KC_VOLU);
36 } else {
37 tap_code(KC_VOLD);
38 }
39}
40void enc_move_desktop(bool cw){ // Switch Desktops (Mac).
41 if (cw) {
42 tap_code16(C(KC_RIGHT));
43 } else {
44 tap_code16(C(KC_LEFT));
45 }
46}
47void enc_zoom(bool cw){ // Zoom in/zoom out.
48 if (cw) {
49 tap_code16(G(KC_PLUS));
50 } else {
51 tap_code16(G(KC_MINUS));
52 }
53}
diff --git a/users/rmw/encoder_functions.h b/users/rmw/encoder_functions.h
new file mode 100644
index 000000000..d80a78668
--- /dev/null
+++ b/users/rmw/encoder_functions.h
@@ -0,0 +1,11 @@
1#pragma once
2#include QMK_KEYBOARD_H
3#include "rmw.h"
4
5void enc_move_words(bool cw);
6void enc_history_scrubbing(bool cw);
7void enc_scrolling(bool cw);
8void enc_scrolling_h(bool cw);
9void enc_volume_knob(bool cw);
10void enc_move_desktop(bool cw);
11void enc_zoom(bool cw);
diff --git a/users/rmw/rmw.c b/users/rmw/rmw.c
new file mode 100644
index 000000000..bb1c1984f
--- /dev/null
+++ b/users/rmw/rmw.c
@@ -0,0 +1 @@
#include "rmw.h"
diff --git a/users/rmw/rmw.h b/users/rmw/rmw.h
new file mode 100644
index 000000000..272a400c7
--- /dev/null
+++ b/users/rmw/rmw.h
@@ -0,0 +1,87 @@
1#pragma once
2#include QMK_KEYBOARD_H
3
4#include "quantum.h"
5#include "action.h"
6#include "version.h"
7
8#ifdef TAP_DANCE_ENABLE
9#include "tapdances.h"
10#endif
11
12#ifdef ENCODER_ENABLE
13#include "encoder_functions.h"
14#endif
15
16enum user_layers {
17 QWERTY = 0
18 ,MINIMAK4
19 ,NUMPAD
20 ,EDIT
21 ,FSYM
22 ,JSYM
23 ,MEDIA
24 ,ADJUST
25};
26
27
28// Custom keycodes
29#define SFTENT SFT_T(KC_ENT)
30
31enum user_custom_keycodes_universal {
32 VRSN = SAFE_RANGE
33 ,OS_CSFT = OSM(MOD_LSFT | MOD_LCTL)
34 ,OS_GSFT = OSM(MOD_LSFT | MOD_LGUI)
35 ,OS_CALT = OSM(MOD_LCTL | MOD_LALT)
36 ,OS_ALT = OSM(MOD_LALT)
37 ,OS_CTL = OSM(MOD_LCTL)
38 ,NEW_SAFE_RANGE
39};
40
41#ifdef MACOSX
42 enum user_custom_keycodes {
43 FORM_GET = NEW_SAFE_RANGE
44 ,FORM_PUT
45 ,OS_CMD = OSM(MOD_LGUI)
46 ,R_UNDO = LGUI(KC_Z)
47 ,R_REDO = LGUI(KC_Y)
48 ,R_CUT = LGUI(KC_X)
49 ,R_COPY = LGUI(KC_C)
50 ,R_PASTE = LGUI(KC_V)
51 ,DEL_WRD = LALT(KC_BSPACE)
52 ,MVW_LEFT = LALT(KC_LEFT)
53 ,MVW_RIGHT = LALT(KC_RIGHT)
54 ,SELW_LEFT = LALT(S(KC_LEFT))
55 ,SELW_RIGHT = LALT(S(KC_RIGHT))
56 ,NEW_TAB = LGUI(KC_T)
57 ,TASK_MAN = LGUI(LALT(KC_ESCAPE))
58 ,SEL_HOME = S(LGUI(KC_LEFT))
59 ,SEL_END = S(LGUI(KC_RIGHT))
60 ,R_HOME = LGUI(KC_LEFT)
61 ,R_END = LGUI(KC_RIGHT)
62 };
63#endif
64
65#ifdef WINDOWS
66 enum user_custom_keycodes {
67 FORM_GET = NEW_SAFE_RANGE
68 ,FORM_PUT
69 ,OS_WIN = OSM(MOD_LGUI)
70 ,R_UNDO = LCTL(KC_Z)
71 ,R_REDO = LCTL(KC_Y)
72 ,R_CUT = LCTL(KC_X)
73 ,R_COPY = LCTL(KC_C)
74 ,R_PASTE = LCTL(KC_V)
75 ,DEL_WRD = LALT(KC_BSPACE)
76 ,MVW_LEFT = LCTL(KC_LEFT)
77 ,MVW_RIGHT = LCTL(KC_RIGHT)
78 ,SELW_LEFT = LCTL(S(KC_LEFT))
79 ,SELW_RIGHT = LCTL(S(KC_RIGHT))
80 ,NEW_TAB = LCTL(KC_T)
81 ,TASK_MAN = LCTL(LALT(KC_ESCAPE))
82 ,SEL_HOME = S(KC_HOME)
83 ,SEL_END = S(KC_END)
84 ,R_HOME = KC_HOME
85 ,R_END = KC_END
86};
87#endif
diff --git a/users/rmw/rules.mk b/users/rmw/rules.mk
new file mode 100644
index 000000000..468745dbc
--- /dev/null
+++ b/users/rmw/rules.mk
@@ -0,0 +1,9 @@
1SRC += rmw.c
2
3ifdef TAP_DANCE_ENABLE
4SRC += tapdances.c
5endif
6
7ifdef ENCODER_ENABLE
8SRC += encoder_functions.c
9endif
diff --git a/users/rmw/tapdances.c b/users/rmw/tapdances.c
new file mode 100644
index 000000000..1b44a8725
--- /dev/null
+++ b/users/rmw/tapdances.c
@@ -0,0 +1,389 @@
1// Useful tapdance functions!
2
3#include "tapdances.h"
4
5qk_tap_dance_action_t tap_dance_actions[] = {
6 [SHCAP] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, caps, shift_reset)
7 ,[TDGUI] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, shiftgui, gui_reset)
8 ,[TDGUI2] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, guictl, ubermod_reset)
9 ,[SHENT] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, shiftenter, shift_reset)
10 ,[SHNTC] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, shiftentercaps, shift_reset)
11 ,[GCA] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, ubermod_mac, ubermod_reset) // GUI->CTL->ALT
12 ,[AGC] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, ubermod2_mac, ubermod_reset) // ALT->GUI->CTL
13 ,[SGCA] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, shift_and_mac, CASG_reset) // SG->SC->SA
14 ,[GUCTL] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, guictl, ubermod_reset)
15 ,[CAG] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, ubermod, ubermod_reset) // CTL->ALT->GUI
16 ,[ACG] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, ubermod2, ubermod_reset) // ALT->GUI->CTL
17 ,[SCAG] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, shift_and, CASG_reset) // SG->SC->SA
18 ,[DLTR] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, deleter, ubermod_reset) // backspace, backspace, alt backspace, gui backspace
19 ,[FRBK2] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, forward_back_mac, ubermod_reset)
20 ,[CTLALL] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, ctrl_all_mac, ubermod_reset) // C->CG->CA->CAG
21 ,[CTLAND] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, ctrl_all, ubermod_reset) // C->CA->CG->CAG
22 ,[FRBK] = ACTION_TAP_DANCE_DOUBLE(KC_WWW_BACK,KC_WWW_FORWARD)
23};
24
25void caps(qk_tap_dance_state_t *state, void *user_data) // Shift, Caps
26{ if (state->count >= 2) {register_code(KC_CAPS); unregister_code(KC_CAPS);}
27 else if (state->pressed) {register_mods(MOD_LSFT);} else {set_oneshot_mods(MOD_LSFT);}
28 reset_tap_dance(state);
29}
30
31void forward_back_mac(qk_tap_dance_state_t *state, void *user_data) // G<-, then G->
32{
33 if (state->count > 1) {
34 tap_code16(G(KC_RGHT));
35 }
36 else {
37 tap_code16(G(KC_LEFT));
38 }
39 reset_tap_dance(state);
40}
41
42void shiftgui(qk_tap_dance_state_t *state, void *user_data) // G->SG
43{
44 if (state->count > 1) {
45 if (state->pressed) {
46 register_mods(MOD_LSFT | MOD_LGUI);
47 }
48 else {
49 set_oneshot_mods(MOD_LSFT | MOD_LGUI);
50 }
51 }
52 else if (state->pressed) {
53 register_mods(MOD_LGUI);
54 }
55 else {
56 set_oneshot_mods(MOD_LGUI);
57 }
58 reset_tap_dance(state);
59}
60
61void guictl(qk_tap_dance_state_t *state, void *user_data) // G->GC
62{
63 if (state->count > 1) {
64 if (state->pressed) {
65 register_mods(MOD_LCTL | MOD_LGUI);
66 }
67 else {
68 set_oneshot_mods(MOD_LCTL | MOD_LGUI);
69 }
70 }
71 else if (state->pressed) {
72 register_mods(MOD_LGUI);
73 }
74 else {
75 set_oneshot_mods(MOD_LGUI);
76 }
77 reset_tap_dance(state);
78}
79
80void deleter(qk_tap_dance_state_t *state, void *user_data) // bkspc -> delwrd -> delline
81{
82 if (state->count > 3) {
83 tap_code16(G(KC_BSPC));
84 }
85 else if (state->count > 2) {
86 tap_code16(A(KC_BSPC));
87 }
88 else {
89 tap_code(KC_BSPC);
90 }
91 reset_tap_dance(state);
92}
93
94void ubermod(qk_tap_dance_state_t *state, void *user_data) // CTL->ALT->GUI
95{
96 if (state->count > 2) {
97 if (state->pressed) {
98 register_mods(MOD_LGUI);
99 }
100 else {
101 set_oneshot_mods(MOD_LGUI);
102 }
103 }
104 else if (state->count > 1) {
105 if (state->pressed) {
106 register_mods(MOD_LALT);
107 }
108 else {
109 set_oneshot_mods(MOD_LALT);
110 }
111 }
112 else if (state->pressed) {
113 register_mods(MOD_LCTL);
114 }
115 else {
116 set_oneshot_mods(MOD_LCTL);
117 }
118 reset_tap_dance(state);
119}
120
121void ubermod_mac(qk_tap_dance_state_t *state, void *user_data) // GUI->CTL->ALT
122{
123 if (state->count > 2) {
124 if (state->pressed) {
125 register_mods(MOD_LALT);
126 }
127 else {
128 set_oneshot_mods(MOD_LALT);
129 }
130 }
131 else if (state->count > 1) {
132 if (state->pressed) {
133 register_mods(MOD_LCTL);
134 }
135 else {
136 set_oneshot_mods(MOD_LCTL);
137 }
138 }
139 else if (state->pressed) {
140 register_mods(MOD_LGUI);
141 }
142 else {
143 set_oneshot_mods(MOD_LGUI);
144 }
145 reset_tap_dance(state);
146}
147
148void ubermod2(qk_tap_dance_state_t *state, void *user_data) // ALT->CTL->GUI
149{
150 if (state->count > 2) {
151 if (state->pressed) {
152 register_mods(MOD_LGUI);
153 }
154 else {
155 set_oneshot_mods(MOD_LGUI);
156 }
157 }
158 else if (state->count > 1) {
159 if (state->pressed) {
160 register_mods(MOD_LCTL);
161 }
162 else {
163 set_oneshot_mods(MOD_LCTL);
164 }
165 }
166 else if (state->pressed) {
167 register_mods(MOD_LALT);
168 }
169 else {
170 set_oneshot_mods(MOD_LALT);
171 }
172 reset_tap_dance(state);
173}
174
175void ubermod2_mac(qk_tap_dance_state_t *state, void *user_data) // ALT->GUI->CTL
176{
177 if (state->count > 2) {
178 if (state->pressed) {
179 register_mods(MOD_LCTL);
180 }
181 else {
182 set_oneshot_mods(MOD_LCTL);
183 }
184 }
185 else if (state->count > 1) {
186 if (state->pressed) {
187 register_mods(MOD_LGUI);
188 }
189 else {
190 set_oneshot_mods(MOD_LGUI);
191 }
192 }
193 else if (state->pressed) {
194 register_mods(MOD_LALT);
195 }
196 else {
197 set_oneshot_mods(MOD_LALT);
198 }
199 reset_tap_dance(state);
200}
201
202void shift_reset(qk_tap_dance_state_t *state, void *user_data)
203{
204 unregister_mods(MOD_LSFT);
205 // clear_oneshot_mods();
206}
207void gui_reset(qk_tap_dance_state_t *state, void *user_data)
208{
209 unregister_mods(MOD_LSFT | MOD_LGUI);
210}
211void CAS_reset(qk_tap_dance_state_t *state, void *user_data)
212{
213 unregister_mods(MOD_LCTL | MOD_LSFT | MOD_LALT);
214}
215void CASG_reset(qk_tap_dance_state_t *state, void *user_data)
216{
217 unregister_mods(MOD_LCTL | MOD_LSFT | MOD_LALT | MOD_LGUI);
218 // clear_oneshot_mods();
219}
220void ubermod_reset(qk_tap_dance_state_t *state, void *user_data) // AKA CAG_reset
221{
222 unregister_mods(MOD_LCTL | MOD_LALT | MOD_LGUI);
223}
224
225void shiftenter(qk_tap_dance_state_t *state, void *user_data)
226{
227 if (state->count > 1) {
228 tap_code(KC_ENT);
229 }
230 else if (state->pressed) {
231 register_mods(MOD_LSFT);
232 }
233 else {
234 set_oneshot_mods(MOD_LSFT);
235 }
236 reset_tap_dance(state);
237}
238
239void shiftentercaps(qk_tap_dance_state_t *state, void *user_data)
240{
241 if (state->count > 2) {
242 tap_code(KC_CAPS);
243 }
244 else if (state->count > 1) {
245 tap_code(KC_ENT);
246 }
247 else if (state->pressed) {
248 register_mods(MOD_LSFT);
249 }
250 else {
251 set_oneshot_mods(MOD_LSFT);
252 }
253 reset_tap_dance(state);
254}
255
256void ctrl_all_mac(qk_tap_dance_state_t *state, void *user_data) // C->CG->CAG
257{
258 if (state->count > 2) {
259 if (state->pressed) {
260 register_mods(MOD_LCTL | MOD_LALT | MOD_LGUI);
261 }
262 else {
263 set_oneshot_mods(MOD_LCTL | MOD_LGUI | MOD_LALT);
264 }
265 }
266 else if (state->count > 1) {
267 if (state->pressed) {
268 register_mods(MOD_LCTL | MOD_LGUI);
269 }
270 else {
271 set_oneshot_mods(MOD_LCTL | MOD_LGUI);
272 }
273 }
274 else if (state->pressed) {
275 register_mods(MOD_LCTL);
276 }
277 else {
278 set_oneshot_mods(MOD_LCTL);
279 }
280 reset_tap_dance(state);
281}
282
283void ctrl_all(qk_tap_dance_state_t *state, void *user_data) // C->CA->SC
284{
285 if (state->count > 2) {
286 if (state->pressed) {
287 register_mods(MOD_LCTL | MOD_LSFT);
288 }
289 else {
290 set_oneshot_mods(MOD_LCTL | MOD_LSFT);
291 }
292 }
293 else if (state->count > 1) {
294 if (state->pressed) {
295 register_mods(MOD_LCTL | MOD_LALT);
296 }
297 else {
298 set_oneshot_mods(MOD_LCTL | MOD_LALT);
299 }
300 }
301 else if (state->pressed) {
302 register_mods(MOD_LCTL);
303 }
304 else {
305 set_oneshot_mods(MOD_LCTL);
306 }
307 reset_tap_dance(state);
308}
309
310void alt_all(qk_tap_dance_state_t *state, void *user_data) // A->SA->AC
311{
312 if (state->count > 2) {
313 if (state->pressed) {
314 register_mods(MOD_LCTL | MOD_LALT);
315 }
316 else {
317 set_oneshot_mods(MOD_LALT | MOD_LCTL);
318 }
319 }
320 else if (state->count > 1) {
321 if (state->pressed) {
322 register_mods(MOD_LSFT | MOD_LALT);
323 }
324 else {
325 set_oneshot_mods(MOD_LALT | MOD_LSFT);
326 }
327 }
328 else if (state->pressed) {
329 register_mods(MOD_LALT);
330 }
331 else {
332 set_oneshot_mods(MOD_LALT);
333 }
334 reset_tap_dance(state);
335}
336
337void shift_and(qk_tap_dance_state_t *state, void *user_data) // SC->SA->SG
338{
339 if (state->count > 2) {
340 if (state->pressed) {
341 register_mods(MOD_LSFT | MOD_LGUI);
342 }
343 else {
344 set_oneshot_mods(MOD_LGUI | MOD_LSFT);
345 }
346 }
347 else if (state->count > 1) {
348 if (state->pressed) {
349 register_mods(MOD_LSFT | MOD_LALT);
350 }
351 else {
352 set_oneshot_mods(MOD_LALT | MOD_LSFT);
353 }
354 }
355 else if (state->pressed) {
356 register_mods(MOD_LCTL | MOD_LSFT);
357 }
358 else {
359 set_oneshot_mods(MOD_LSFT | MOD_LCTL);
360 }
361 reset_tap_dance(state);
362}
363
364void shift_and_mac(qk_tap_dance_state_t *state, void *user_data) // SG->SC->SA
365{
366 if (state->count > 1) {
367 if (state->pressed) {
368 register_mods(MOD_LSFT | MOD_LALT);
369 }
370 else {
371 set_oneshot_mods(MOD_LALT | MOD_LSFT);
372 }
373 }
374 else if (state->count > 2) {
375 if (state->pressed) {
376 register_mods(MOD_LCTL | MOD_LSFT);
377 }
378 else {
379 set_oneshot_mods(MOD_LSFT | MOD_LCTL);
380 }
381 }
382 else if (state->pressed) {
383 register_mods(MOD_LSFT | MOD_LGUI);
384 }
385 else {
386 set_oneshot_mods(MOD_LGUI | MOD_LSFT);
387 }
388 reset_tap_dance(state);
389}
diff --git a/users/rmw/tapdances.h b/users/rmw/tapdances.h
new file mode 100644
index 000000000..11425011c
--- /dev/null
+++ b/users/rmw/tapdances.h
@@ -0,0 +1,46 @@
1#pragma once
2#include "rmw.h"
3#include "process_tap_dance.h"
4#include "action.h"
5
6void caps(qk_tap_dance_state_t *state, void *user_data); // Shift, Caps
7void forward_back_mac(qk_tap_dance_state_t *state, void *user_data); // G<-, then G->
8void shiftgui(qk_tap_dance_state_t *state, void *user_data); // G->SG
9void guictl(qk_tap_dance_state_t *state, void *user_data); // G->GC
10void deleter(qk_tap_dance_state_t *state, void *user_data); // bkspc -> delwrd -> delline
11void ubermod(qk_tap_dance_state_t *state, void *user_data); // CTL->ALT->GUI
12void ubermod_mac(qk_tap_dance_state_t *state, void *user_data); // GUI->CTL->ALT
13void ubermod2(qk_tap_dance_state_t *state, void *user_data); // ALT->CTL->GUI
14void ubermod2_mac(qk_tap_dance_state_t *state, void *user_data); // ALT->GUI->CTL
15void shift_reset(qk_tap_dance_state_t *state, void *user_data);
16void gui_reset(qk_tap_dance_state_t *state, void *user_data);
17void CAS_reset(qk_tap_dance_state_t *state, void *user_data);
18void CASG_reset(qk_tap_dance_state_t *state, void *user_data);
19void ubermod_reset(qk_tap_dance_state_t *state, void *user_data); // AKA CAG_reset
20void shiftenter(qk_tap_dance_state_t *state, void *user_data);
21void shiftentercaps(qk_tap_dance_state_t *state, void *user_data);
22void ctrl_all_mac(qk_tap_dance_state_t *state, void *user_data); // C->CG->CAG
23void ctrl_all(qk_tap_dance_state_t *state, void *user_data); // C->CA->SC
24void alt_all(qk_tap_dance_state_t *state, void *user_data); // A->SA->AC
25void shift_and(qk_tap_dance_state_t *state, void *user_data); // SC->SA->SG
26void shift_and_mac(qk_tap_dance_state_t *state, void *user_data); // SG->SC->SA
27
28enum {
29 SHCAP = 0
30 ,TDGUI
31 ,TDGUI2
32 ,SHENT
33 ,SHNTC
34 ,GUCTL
35 ,FRBK
36 ,FRBK2
37 ,GCA
38 ,AGC
39 ,SGCA
40 ,SCAG
41 ,CAG
42 ,ACG
43 ,CTLALL
44 ,CTLAND
45 ,DLTR
46};