aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--keyboards/planck/keymaps/buffet/config.h46
-rw-r--r--keyboards/planck/keymaps/buffet/keymap.c384
-rw-r--r--keyboards/planck/keymaps/buffet/readme.md104
-rw-r--r--keyboards/planck/keymaps/buffet/rgb_matrix_user.inc18
-rw-r--r--keyboards/planck/keymaps/buffet/rules.mk6
5 files changed, 558 insertions, 0 deletions
diff --git a/keyboards/planck/keymaps/buffet/config.h b/keyboards/planck/keymaps/buffet/config.h
new file mode 100644
index 000000000..478b282b3
--- /dev/null
+++ b/keyboards/planck/keymaps/buffet/config.h
@@ -0,0 +1,46 @@
1#pragma once
2
3#define TAPPING_TERM 150
4#define PERMISSIVE_HOLD
5
6// Disable all RGB effects
7#define DISABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
8#define DISABLE_RGB_MATRIX_ALPHAS_MODS
9#define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN
10#define DISABLE_RGB_MATRIX_BREATHING
11#define DISABLE_RGB_MATRIX_BAND_SAT
12#define DISABLE_RGB_MATRIX_BAND_VAL
13#define DISABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
14#define DISABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
15#define DISABLE_RGB_MATRIX_BAND_SPIRAL_SAT
16#define DISABLE_RGB_MATRIX_BAND_SPIRAL_VAL
17#define DISABLE_RGB_MATRIX_CYCLE_ALL
18#define DISABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
19#define DISABLE_RGB_MATRIX_CYCLE_UP_DOWN
20#define DISABLE_RGB_MATRIX_CYCLE_OUT_IN
21#define DISABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
22#define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
23#define DISABLE_RGB_MATRIX_DUAL_BEACON
24#define DISABLE_RGB_MATRIX_CYCLE_PINWHEEL
25#define DISABLE_RGB_MATRIX_CYCLE_SPIRAL
26#define DISABLE_RGB_MATRIX_RAINBOW_BEACON
27#define DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS
28#define DISABLE_RGB_MATRIX_RAINDROPS
29#define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
30#define DISABLE_RGB_MATRIX_TYPING_HEATMAP
31#define DISABLE_RGB_MATRIX_DIGITAL_RAIN
32#define DISABLE_RGB_MATRIX_SOLID_REACTIVE
33#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
34#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
35#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
36#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
37#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
38#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
39#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
40#define DISABLE_RGB_MATRIX_SPLASH
41#define DISABLE_RGB_MATRIX_MULTISPLASH
42#define DISABLE_RGB_MATRIX_SOLID_SPLASH
43#define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH
44
45// Most tactile encoders have detents every 4 stages
46#define ENCODER_RESOLUTION 4
diff --git a/keyboards/planck/keymaps/buffet/keymap.c b/keyboards/planck/keymaps/buffet/keymap.c
new file mode 100644
index 000000000..78a9f711c
--- /dev/null
+++ b/keyboards/planck/keymaps/buffet/keymap.c
@@ -0,0 +1,384 @@
1/* Copyright 2015-2017 Jack Humbert
2 * 2020 Niclas Meyer
3 *
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#include QMK_KEYBOARD_H
19
20#define K(kc) (1ull<<((kc) - ALPHA))
21
22#define KALPHA K(ALPHA)
23#define KBETA K(BETA)
24#define KGAMMA K(GAMMA)
25#define KDELTA K(DELTA)
26#define KEPSILON K(EPSILON)
27#define KZETA K(ZETA)
28#define KTHETA K(THETA)
29#define KIOTA K(IOTA)
30#define KKAPPA K(KAPPA)
31
32enum keys {
33 ALPHA = SAFE_RANGE,
34 BETA,
35 GAMMA,
36 DELTA,
37 EPSILON,
38 ZETA,
39 THETA,
40 IOTA,
41 KAPPA,
42 LOCK,
43 NONE,
44};
45
46enum layers {
47 NORMAL,
48 QWERTY,
49 GAME,
50 LOWER,
51 RAISE,
52 PHI,
53 FN,
54};
55
56#define XXXX KC_NO
57#define ____ KC_TRNS
58
59#define CQWER LM(QWERTY, MOD_LCTL)
60#define AQWER LM(QWERTY, MOD_LALT)
61
62const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
63 [NORMAL] = LAYOUT_planck_grid(
64 ALPHA, BETA, GAMMA, DELTA, ____, ____, ____, ____, DELTA, GAMMA, BETA, ALPHA,
65 EPSILON, ZETA, THETA, IOTA, ____, ____, ____, ____, IOTA, THETA, ZETA, EPSILON,
66 ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,
67 MO(PHI), CQWER, AQWER, MO(FN), KAPPA, ____, XXXX, KAPPA, MO(FN), ____, ____, MO(PHI)
68 ),
69 [QWERTY] = LAYOUT_planck_grid(
70 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
71 KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
72 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_SFTENT,
73 MO(PHI), KC_LCTL, KC_LALT, KC_LGUI, MO(LOWER), KC_SPC, XXXX, MO(RAISE), KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT
74 ),
75 [GAME] = LAYOUT_planck_grid(
76 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
77 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
78 KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
79 KC_LCTL, KC_Z, KC_X, KC_C, KC_SPC, ____, XXXX, ____, KC_V, KC_B, ____, MO(PHI)
80 ),
81 [LOWER] = LAYOUT_planck_grid(
82 KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
83 KC_DEL, ____, ____, ____, ____, ____, ____, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
84 ____, ____, ____, ____, ____, ____, ____, KC_PGUP, KC_PGDN, KC_HOME, KC_END, ____,
85 ____, ____, ____, ____, ____, ____, XXXX, ____, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
86 ),
87 [RAISE] = LAYOUT_planck_grid(
88 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
89 KC_DEL, ____, ____, ____, ____, ____, ____, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
90 ____, ____, ____, ____, ____, ____, ____, KC_PGUP, KC_PGDN, KC_HOME, KC_END, ____,
91 ____, ____, ____, ____, ____, ____, XXXX, ____, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
92 ),
93 [PHI] = LAYOUT_planck_grid(
94 RESET, KC_F1, KC_F2, KC_F3, KC_F4, ____, ____, ____, ____, ____, ____, KC_DEL,
95 ____, KC_F5, KC_F6, KC_F7, KC_F8, ____, ____, DF(QWERTY), DF(NORMAL), DF(GAME), ____, KC_F13,
96 ____, KC_F9, KC_F10, KC_F11, KC_F12, ____, ____, ____, ____, ____, ____, ____,
97 ____, RGB_TOG, RGB_MOD, ____, ____, ____, XXXX, ____, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
98 ),
99 [FN] = LAYOUT_planck_grid(
100 ____, ____, KC_UP, ____, ____, ____, ____, ____, ____, KC_UP, ____, ____,
101 KC_DEL, KC_LEFT, KC_DOWN, KC_RIGHT, ____, ____, ____, ____, KC_LEFT, KC_DOWN, KC_RIGHT, KC_DEL,
102 KC_HOME, KC_END, KC_PGUP, KC_PGDN, ____, ____, ____, ____, KC_PGDN, KC_PGUP, KC_HOME, KC_END,
103 ____, ____, ____, ____, ____, ____, XXXX, ____, ____, ____, ____, ____
104 ),
105};
106
107static uint16_t left_chord = 0;
108static uint16_t right_chord = 0;
109
110static bool locking = false;
111static bool locked = false;
112static uint16_t mods = 0;
113
114#define PROCESS_MOD(mod) \
115 do { \
116 if ((mods & MOD_##mod) && !(keys & MOD_##mod)) { \
117 unregister_code16(KC_##mod); \
118 } \
119 if (!(mods & MOD_##mod) && (keys & MOD_##mod)) { \
120 register_code16(KC_##mod); \
121 } \
122 } while (0)
123
124static void process_keys(uint16_t keys) {
125 if (keys == NONE) {
126 return;
127 }
128
129 if (keys == LOCK) {
130 locking = !locking;
131 return;
132 }
133
134 if ((keys & QK_ONE_SHOT_MOD) == QK_ONE_SHOT_MOD) {
135 PROCESS_MOD(LCTL);
136 PROCESS_MOD(LSFT);
137 PROCESS_MOD(LALT);
138 PROCESS_MOD(LGUI);
139
140 mods = keys & ~QK_ONE_SHOT_MOD;
141 locked = false;
142
143 if (locking) {
144 locking = false;
145 locked = true;
146 }
147
148 return;
149 }
150
151 // Normal key
152 tap_code16(keys);
153 locking = false;
154
155 if (mods && !locked) {
156 if (mods & MOD_LCTL) {
157 unregister_code16(KC_LCTL);
158 }
159
160 if (mods & MOD_LSFT) {
161 unregister_code16(KC_LSFT);
162 }
163
164 if (mods & MOD_LALT) {
165 unregister_code16(KC_LALT);
166 }
167
168 if (mods & MOD_LGUI) {
169 unregister_code16(KC_LGUI);
170 }
171
172 mods = 0;
173 }
174}
175
176static uint16_t chord_to_keys(uint16_t chord) {
177 switch (chord) {
178 // Unshifted Extra
179 case KKAPPA: return KC_SPC;
180 case KEPSILON | KZETA | KTHETA | KIOTA: return KC_ENT;
181 case KEPSILON | KZETA | KGAMMA | KIOTA: return KC_TAB;
182 case KEPSILON | KIOTA: return KC_BSPC;
183 case KKAPPA | KEPSILON: return KC_ESC;
184
185 // Shifted Extra
186 case KKAPPA | KEPSILON | KZETA | KTHETA | KIOTA: return S(KC_ENT);
187 case KKAPPA | KEPSILON | KZETA | KGAMMA | KIOTA: return S(KC_TAB);
188 case KKAPPA | KEPSILON | KIOTA: return S(KC_BSPC);
189
190 // Lowercase Letters
191 case KBETA: return KC_A;
192 case KZETA | KDELTA: return KC_B;
193 case KBETA | KGAMMA | KDELTA: return KC_C;
194 case KZETA | KTHETA | KIOTA: return KC_D;
195 case KDELTA: return KC_E;
196 case KGAMMA | KIOTA: return KC_F;
197 case KBETA | KTHETA: return KC_G;
198 case KZETA | KTHETA: return KC_H;
199 case KGAMMA: return KC_I;
200 case KBETA | KGAMMA | KIOTA: return KC_J;
201 case KBETA | KTHETA | KIOTA: return KC_K;
202 case KBETA | KGAMMA: return KC_L;
203 case KBETA | KDELTA: return KC_M;
204 case KZETA: return KC_N;
205 case KTHETA: return KC_O;
206 case KZETA | KGAMMA: return KC_P;
207 case KBETA | KTHETA | KDELTA: return KC_Q;
208 case KGAMMA | KDELTA: return KC_R;
209 case KTHETA | KIOTA: return KC_S;
210 case KIOTA: return KC_T;
211 case KZETA | KIOTA: return KC_U;
212 case KTHETA | KDELTA: return KC_V;
213 case KZETA | KGAMMA | KIOTA: return KC_W;
214 case KZETA | KTHETA | KDELTA: return KC_X;
215 case KBETA | KIOTA: return KC_Y;
216 case KZETA | KGAMMA | KDELTA: return KC_Z;
217
218 // Uppercase Letters
219 case KKAPPA | KBETA: return S(KC_A);
220 case KKAPPA | KZETA | KDELTA: return S(KC_B);
221 case KKAPPA | KBETA | KGAMMA | KDELTA: return S(KC_C);
222 case KKAPPA | KZETA | KTHETA | KIOTA: return S(KC_D);
223 case KKAPPA | KDELTA: return S(KC_E);
224 case KKAPPA | KGAMMA | KIOTA: return S(KC_F);
225 case KKAPPA | KBETA | KTHETA: return S(KC_G);
226 case KKAPPA | KZETA | KTHETA: return S(KC_H);
227 case KKAPPA | KGAMMA: return S(KC_I);
228 case KKAPPA | KBETA | KGAMMA | KIOTA: return S(KC_J);
229 case KKAPPA | KBETA | KTHETA | KIOTA: return S(KC_K);
230 case KKAPPA | KBETA | KGAMMA: return S(KC_L);
231 case KKAPPA | KBETA | KDELTA: return S(KC_M);
232 case KKAPPA | KZETA: return S(KC_N);
233 case KKAPPA | KTHETA: return S(KC_O);
234 case KKAPPA | KZETA | KGAMMA: return S(KC_P);
235 case KKAPPA | KBETA | KTHETA | KDELTA: return S(KC_Q);
236 case KKAPPA | KGAMMA | KDELTA: return S(KC_R);
237 case KKAPPA | KTHETA | KIOTA: return S(KC_S);
238 case KKAPPA | KIOTA: return S(KC_T);
239 case KKAPPA | KZETA | KIOTA: return S(KC_U);
240 case KKAPPA | KTHETA | KDELTA: return S(KC_V);
241 case KKAPPA | KZETA | KGAMMA | KIOTA: return S(KC_W);
242 case KKAPPA | KZETA | KTHETA | KDELTA: return S(KC_X);
243 case KKAPPA | KBETA | KIOTA: return S(KC_Y);
244 case KKAPPA | KZETA | KGAMMA | KDELTA: return S(KC_Z);
245
246 // Unshifted Numbers
247 case KEPSILON | KZETA: return KC_0;
248 case KEPSILON | KZETA | KIOTA: return KC_1;
249 case KEPSILON | KZETA | KTHETA: return KC_2;
250 case KEPSILON | KBETA: return KC_3;
251 case KEPSILON | KBETA | KDELTA: return KC_4;
252 case KEPSILON | KBETA | KGAMMA: return KC_5;
253 case KEPSILON | KBETA | KIOTA: return KC_6;
254 case KEPSILON | KTHETA: return KC_7;
255 case KEPSILON | KBETA | KGAMMA | KIOTA: return KC_8;
256 case KEPSILON | KGAMMA | KDELTA: return KC_9;
257
258 // Shifted Numbers
259 case KKAPPA | KEPSILON | KZETA | KIOTA: return KC_EXLM;
260 case KKAPPA | KEPSILON | KZETA | KTHETA: return KC_AT;
261 case KKAPPA | KEPSILON | KBETA: return KC_HASH;
262 case KKAPPA | KEPSILON | KBETA | KDELTA: return KC_DLR;
263 case KKAPPA | KEPSILON | KBETA | KGAMMA: return KC_PERC;
264 case KKAPPA | KEPSILON | KBETA | KIOTA: return KC_CIRC;
265 case KKAPPA | KEPSILON | KTHETA: return KC_AMPR;
266 case KKAPPA | KEPSILON | KBETA | KGAMMA | KIOTA: return KC_ASTR;
267 case KKAPPA | KEPSILON | KGAMMA | KDELTA: return KC_LPRN;
268 case KKAPPA | KEPSILON | KZETA: return KC_RPRN;
269
270 // Unshifted Symbols
271 case KEPSILON | KBETA | KTHETA | KIOTA: return KC_MINS;
272 case KEPSILON | KZETA | KTHETA | KDELTA: return KC_EQL;
273 case KEPSILON | KZETA | KGAMMA: return KC_LBRC;
274 case KEPSILON | KGAMMA | KIOTA: return KC_RBRC;
275 case KEPSILON | KBETA | KTHETA: return KC_BSLS;
276 case KEPSILON | KBETA | KGAMMA | KDELTA: return KC_SCLN;
277 case KEPSILON | KZETA | KDELTA: return KC_QUOT;
278 case KEPSILON | KTHETA | KIOTA: return KC_COMM;
279 case KEPSILON | KZETA | KGAMMA | KDELTA: return KC_DOT;
280 case KEPSILON | KGAMMA: return KC_SLSH;
281 case KEPSILON | KDELTA: return KC_GRV;
282
283 // Shifted Symbols
284 case KKAPPA | KEPSILON | KBETA | KTHETA | KIOTA: return KC_UNDS;
285 case KKAPPA | KEPSILON | KZETA | KTHETA | KDELTA: return KC_PLUS;
286 case KKAPPA | KEPSILON | KZETA | KGAMMA: return KC_LCBR;
287 case KKAPPA | KEPSILON | KGAMMA | KIOTA: return KC_RCBR;
288 case KKAPPA | KEPSILON | KBETA | KTHETA: return KC_PIPE;
289 case KKAPPA | KEPSILON | KBETA | KGAMMA | KDELTA: return KC_COLN;
290 case KKAPPA | KEPSILON | KZETA | KDELTA: return KC_DQT;
291 case KKAPPA | KEPSILON | KTHETA | KIOTA: return KC_LT;
292 case KKAPPA | KEPSILON | KZETA | KGAMMA | KDELTA: return KC_GT;
293 case KKAPPA | KEPSILON | KGAMMA: return KC_QUES;
294 case KKAPPA | KEPSILON | KDELTA: return KC_TILD;
295
296 // Modifiers
297 case KALPHA | KIOTA: return LOCK;
298
299 case KALPHA: return QK_ONE_SHOT_MOD; // Release all
300
301 case KALPHA | KBETA: return OSM(MOD_LCTL);
302 case KALPHA | KGAMMA: return OSM(MOD_LSFT);
303 case KALPHA | KDELTA: return OSM(MOD_LALT);
304 case KALPHA | KKAPPA: return OSM(MOD_LGUI);
305
306 case KALPHA | KBETA | KGAMMA: return OSM(MOD_LCTL | MOD_LSFT);
307 case KALPHA | KBETA | KDELTA: return OSM(MOD_LCTL | MOD_LALT);
308 case KALPHA | KBETA | KKAPPA: return OSM(MOD_LCTL | MOD_LGUI);
309 case KALPHA | KGAMMA | KDELTA: return OSM(MOD_LSFT | MOD_LALT);
310 case KALPHA | KGAMMA | KKAPPA: return OSM(MOD_LSFT | MOD_LGUI);
311 case KALPHA | KDELTA | KKAPPA: return OSM(MOD_LALT | MOD_LGUI);
312
313 case KALPHA | KBETA | KGAMMA | KDELTA: return OSM(MOD_LCTL | MOD_LSFT | MOD_LALT);
314 case KALPHA | KBETA | KGAMMA | KKAPPA: return OSM(MOD_LCTL | MOD_LSFT | MOD_LGUI);
315 case KALPHA | KBETA | KDELTA | KKAPPA: return OSM(MOD_LCTL | MOD_LALT | MOD_LGUI);
316 case KALPHA | KGAMMA | KDELTA | KKAPPA: return OSM(MOD_LSFT | MOD_LALT | MOD_LGUI);
317
318 case KALPHA | KBETA | KGAMMA | KDELTA | KKAPPA: return OSM(MOD_LCTL | MOD_LSFT | MOD_LALT | MOD_LGUI);
319 }
320
321 return NONE;
322}
323
324static uint16_t *get_hand(keypos_t *key) {
325 if (key->row <= 3) {
326 return &left_chord;
327 }
328
329 if (key->row <= 6) {
330 return &right_chord;
331 }
332
333 // row 7
334 if (key->col <= 2) {
335 return &right_chord;
336 } else {
337 return &left_chord;
338 }
339}
340
341bool process_record_user(uint16_t keycode, keyrecord_t *record) {
342 if (keycode < ALPHA) {
343 return true;
344 }
345
346 uint16_t *chord = get_hand(&record->event.key);
347
348 if (record->event.pressed) {
349 *chord |= K(keycode);
350 return false;
351 }
352
353 if (*chord != 0) {
354 process_keys(chord_to_keys(*chord));
355 *chord = 0;
356 }
357
358 return false;
359}
360
361#ifdef KEYBOARD_planck_ez
362
363#define LED_BRIGHTNESS 50
364
365layer_state_t default_layer_state_set_user(layer_state_t state) {
366 switch (state) {
367 case 1U << NORMAL:
368 planck_ez_left_led_off();
369 planck_ez_right_led_off();
370 break;
371 case 1U << QWERTY:
372 planck_ez_left_led_level(LED_BRIGHTNESS);
373 planck_ez_right_led_off();
374 break;
375 case 1U << GAME:
376 planck_ez_left_led_off();
377 planck_ez_right_led_level(LED_BRIGHTNESS);
378 break;
379 }
380
381 return state;
382}
383
384#endif /* KEYBOARD_planck_ez */
diff --git a/keyboards/planck/keymaps/buffet/readme.md b/keyboards/planck/keymaps/buffet/readme.md
new file mode 100644
index 000000000..223595b92
--- /dev/null
+++ b/keyboards/planck/keymaps/buffet/readme.md
@@ -0,0 +1,104 @@
1# buffet's planck layout
2
3## Layout
4
5The Layout is based on keychords.
6The general idea is that you're able to type everything with either hand, so that you can alternate between hands as you type.
7
8The keys are in a 2x4 block in the top left and top right respectively (mirrored).
9They have greek letter names (see `keymap.c` for more info).
10
11Thumb added to any key means shift is pressed as well.
12
13`-` means the finger presses nothing.
14`^` means the finger presses the upper row.
15`v` means the finger presses the lower row.
16
17```
18Space: thumb
19Return: vvvv vvvv
20Tab: vv^v v^vv
21Bspace: v--v v--v
22Esc: lower pinky and thumb
23```
24
25### Letters
26
27```
28a: -^-- --^-
29b: -v-^ ^-v-
30c: -^^^ ^^^-
31d: -vvv vvv-
32e: ---^ ^---
33f: --^v v^--
34g: -^v- -v^-
35h: -vv- -vv-
36i: --^- -^--
37j: -^^v v^^-
38k: -^vv vv^-
39l: -^^- -^^-
40m: -^-^ ^-^-
41n: -v-- --v-
42o: --v- -v--
43p: -v^- -^v-
44q: -^v^ ^v^-
45r: --^^ ^^--
46s: --vv vv--
47t: ---v v---
48u: -v-v v-v-
49v: --v^ ^v--
50w: -v^v v^v-
51x: -vv^ ^vv-
52y: -^-v v-^-
53z: -v^^ ^^v-
54```
55
56### Numbers and Symbols
57
58```
590: vv-- --vv
601: vv-v v-vv
612: vvv- -vvv
623: v^-- --^v
634: v^-^ ^-^v
645: v^^- -^^v
656: v^-v v-^v
667: v-v- -v-v
678: v^^v v^^v
689: v-^^ ^^-v
69-: v^vv vv^v
70=: vvv^ ^vvv
71[: vv^- -^vv
72]: v-^v v^-v
73\: v^v- -v^v
74;: v^^^ ^^^v
75': vv-^ ^-vv
76,: v-vv vv-v
77.: vv^^ ^^vv
78/: v-^- -^-v
79`: v--^ ^--v
80```
81
82### Modifiers
83
84Modifiers all use the top pinky key, and a combinations of modifiers you want to activate for the next keypress (very similar to how OMS work).
85For the modifiers the top row of keys is used.
86
87```
88Control: Ringfinger
89Shift: Middlefinger
90Alt: Indexfinger
91Super: Thumb
92```
93
94`^--v v--^` can be used to lock the next modifier input.
95
96### Remaining
97
98These combinations are unused.
99
100```
101v^v^
102v-v^
103v---
104```
diff --git a/keyboards/planck/keymaps/buffet/rgb_matrix_user.inc b/keyboards/planck/keymaps/buffet/rgb_matrix_user.inc
new file mode 100644
index 000000000..e217d1010
--- /dev/null
+++ b/keyboards/planck/keymaps/buffet/rgb_matrix_user.inc
@@ -0,0 +1,18 @@
1RGB_MATRIX_EFFECT(rainbow_stripe)
2
3#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
4
5static HSV rainbow_stripe_math(HSV hsv, uint8_t i, uint8_t time) {
6 if (i >= 14 && i <= 21) {
7 hsv.h = g_led_config.point[i].x - time;
8 } else {
9 hsv.v = 0;
10 }
11 return hsv;
12}
13
14bool rainbow_stripe(effect_params_t* params) {
15 return effect_runner_i(params, &rainbow_stripe_math);
16}
17
18#endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
diff --git a/keyboards/planck/keymaps/buffet/rules.mk b/keyboards/planck/keymaps/buffet/rules.mk
new file mode 100644
index 000000000..7774d7665
--- /dev/null
+++ b/keyboards/planck/keymaps/buffet/rules.mk
@@ -0,0 +1,6 @@
1AUDIO_ENABLE = no
2BOOTMAGIC_ENABLE = lite
3COMMAND_ENABLE = no
4MOUSEKEY_ENABLE = no
5
6RGB_MATRIX_CUSTOM_USER = yes