summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandrew morton <drewish@katherinehouse.com>2025-11-18 20:50:47 -0700
committerGitHub <noreply@github.com>2025-11-18 20:50:47 -0700
commit0fde9c9cac5b2e86a2fe28cf8e2ea85b4b9c4c69 (patch)
treef692f9d5d1eb44ccd1cef5aee8f65008b249fc16
parent5bb74764005f6a88266bd1295fbb473301676786 (diff)
[Keyboard] Add Coffee Break Keyboards Acai (#25796)
* Add support for Coffee Break Keyboards Acai * Apply suggestions from code review Co-authored-by: Jack Sangdahl <jack@pngu.org> * Ran qmk format-json * Misssed one of @waffle87's suggestions * Misssed another of @waffle87's suggestions * Try hosting on imgur.com * Remove empty layers, add boot to layer 2 * Enhance the default keymap * Use correct keycodes for RGB --------- Co-authored-by: Jack Sangdahl <jack@pngu.org>
-rw-r--r--keyboards/cbkbd/acai/keyboard.json174
-rw-r--r--keyboards/cbkbd/acai/keymaps/default/keymap.c29
-rw-r--r--keyboards/cbkbd/acai/readme.md26
3 files changed, 229 insertions, 0 deletions
diff --git a/keyboards/cbkbd/acai/keyboard.json b/keyboards/cbkbd/acai/keyboard.json
new file mode 100644
index 0000000000..b1babe7797
--- /dev/null
+++ b/keyboards/cbkbd/acai/keyboard.json
@@ -0,0 +1,174 @@
1{
2 "manufacturer": "CoffeeBreakKeyboards",
3 "keyboard_name": "Acai",
4 "maintainer": "CoffeeBreakKeyboards",
5 "bootloader": "rp2040",
6 "diode_direction": "COL2ROW",
7 "dynamic_keymap": {
8 "layer_count": 6
9 },
10 "features": {
11 "bootmagic": true,
12 "extrakey": true,
13 "mousekey": true,
14 "nkro": true,
15 "rgb_matrix": true
16 },
17 "matrix_pins": {
18 "cols": ["GP25", "GP24", "GP23", "GP20", "GP18", "GP7", "GP6", "GP5", "GP4", "GP3"],
19 "rows": ["GP27", "GP28", "GP19", "GP26"]
20 },
21 "processor": "RP2040",
22 "rgb_matrix": {
23 "animations": {
24 "alphas_mods": true,
25 "band_pinwheel_sat": true,
26 "band_pinwheel_val": true,
27 "band_sat": true,
28 "band_spiral_sat": true,
29 "band_spiral_val": true,
30 "band_val": true,
31 "breathing": true,
32 "cycle_all": true,
33 "cycle_left_right": true,
34 "cycle_out_in": true,
35 "cycle_out_in_dual": true,
36 "cycle_pinwheel": true,
37 "cycle_spiral": true,
38 "cycle_up_down": true,
39 "digital_rain": true,
40 "dual_beacon": true,
41 "flower_blooming": true,
42 "gradient_left_right": true,
43 "gradient_up_down": true,
44 "hue_breathing": true,
45 "hue_pendulum": true,
46 "hue_wave": true,
47 "jellybean_raindrops": true,
48 "multisplash": true,
49 "pixel_flow": true,
50 "pixel_fractal": true,
51 "pixel_rain": true,
52 "rainbow_beacon": true,
53 "rainbow_moving_chevron": true,
54 "rainbow_pinwheels": true,
55 "raindrops": true,
56 "riverflow": true,
57 "solid_multisplash": true,
58 "solid_reactive": true,
59 "solid_reactive_cross": true,
60 "solid_reactive_multicross": true,
61 "solid_reactive_multinexus": true,
62 "solid_reactive_multiwide": true,
63 "solid_reactive_nexus": true,
64 "solid_reactive_simple": true,
65 "solid_reactive_wide": true,
66 "solid_splash": true,
67 "splash": true,
68 "starlight": true,
69 "starlight_dual_hue": true,
70 "starlight_dual_sat": true,
71 "typing_heatmap": true
72 },
73 "driver": "ws2812",
74 "layout": [
75 {"matrix": [0, 4], "x": 100, "y": 0, "flags": 4},
76 {"matrix": [0, 3], "x": 75, "y": 0, "flags": 4},
77 {"matrix": [0, 2], "x": 50, "y": 0, "flags": 4},
78 {"matrix": [0, 1], "x": 25, "y": 0, "flags": 4},
79 {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4},
80 {"matrix": [1, 0], "x": 0, "y": 21, "flags": 4},
81 {"matrix": [1, 1], "x": 25, "y": 21, "flags": 4},
82 {"matrix": [1, 2], "x": 50, "y": 21, "flags": 4},
83 {"matrix": [1, 3], "x": 75, "y": 21, "flags": 4},
84 {"matrix": [1, 4], "x": 100, "y": 21, "flags": 4},
85 {"matrix": [2, 4], "x": 100, "y": 43, "flags": 4},
86 {"matrix": [2, 3], "x": 75, "y": 43, "flags": 4},
87 {"matrix": [2, 2], "x": 50, "y": 43, "flags": 4},
88 {"matrix": [2, 1], "x": 25, "y": 43, "flags": 4},
89 {"matrix": [2, 0], "x": 0, "y": 43, "flags": 4},
90 {"matrix": [3, 0], "x": 0, "y": 64, "flags": 4},
91 {"matrix": [3, 1], "x": 25, "y": 64, "flags": 4},
92 {"matrix": [3, 2], "x": 50, "y": 64, "flags": 4},
93 {"matrix": [3, 3], "x": 75, "y": 64, "flags": 4},
94 {"matrix": [3, 4], "x": 100, "y": 64, "flags": 4},
95 {"matrix": [3, 5], "x": 125, "y": 64, "flags": 4},
96 {"matrix": [3, 6], "x": 150, "y": 64, "flags": 4},
97 {"matrix": [3, 7], "x": 175, "y": 64, "flags": 4},
98 {"matrix": [3, 8], "x": 200, "y": 64, "flags": 4},
99 {"matrix": [3, 9], "x": 224, "y": 64, "flags": 4},
100 {"matrix": [2, 9], "x": 224, "y": 43, "flags": 4},
101 {"matrix": [2, 8], "x": 200, "y": 43, "flags": 4},
102 {"matrix": [2, 7], "x": 175, "y": 43, "flags": 4},
103 {"matrix": [2, 6], "x": 150, "y": 43, "flags": 4},
104 {"matrix": [2, 5], "x": 125, "y": 43, "flags": 4},
105 {"matrix": [1, 5], "x": 125, "y": 21, "flags": 4},
106 {"matrix": [1, 6], "x": 150, "y": 21, "flags": 4},
107 {"matrix": [1, 7], "x": 175, "y": 21, "flags": 4},
108 {"matrix": [1, 8], "x": 200, "y": 21, "flags": 4},
109 {"matrix": [1, 9], "x": 224, "y": 21, "flags": 4},
110 {"matrix": [0, 9], "x": 224, "y": 0, "flags": 4},
111 {"matrix": [0, 8], "x": 200, "y": 0, "flags": 4},
112 {"matrix": [0, 7], "x": 175, "y": 0, "flags": 4},
113 {"matrix": [0, 6], "x": 150, "y": 0, "flags": 4},
114 {"matrix": [0, 5], "x": 125, "y": 0, "flags": 4}
115 ],
116 "max_brightness": 125,
117 "sleep": true
118 },
119 "usb": {
120 "device_version": "0.0.1",
121 "pid": "0x1075",
122 "vid": "0x4342"
123 },
124 "ws2812": {
125 "driver": "vendor",
126 "pin": "GP29"
127 },
128 "layouts": {
129 "LAYOUT": {
130 "layout": [
131 {"matrix": [0, 0], "x": 0, "y": 0},
132 {"matrix": [0, 1], "x": 1, "y": 0},
133 {"matrix": [0, 2], "x": 2, "y": 0},
134 {"matrix": [0, 3], "x": 3, "y": 0},
135 {"matrix": [0, 4], "x": 4, "y": 0},
136 {"matrix": [0, 5], "x": 5, "y": 0},
137 {"matrix": [0, 6], "x": 6, "y": 0},
138 {"matrix": [0, 7], "x": 7, "y": 0},
139 {"matrix": [0, 8], "x": 8, "y": 0},
140 {"matrix": [0, 9], "x": 9, "y": 0},
141 {"matrix": [1, 0], "x": 0, "y": 1},
142 {"matrix": [1, 1], "x": 1, "y": 1},
143 {"matrix": [1, 2], "x": 2, "y": 1},
144 {"matrix": [1, 3], "x": 3, "y": 1},
145 {"matrix": [1, 4], "x": 4, "y": 1},
146 {"matrix": [1, 5], "x": 5, "y": 1},
147 {"matrix": [1, 6], "x": 6, "y": 1},
148 {"matrix": [1, 7], "x": 7, "y": 1},
149 {"matrix": [1, 8], "x": 8, "y": 1},
150 {"matrix": [1, 9], "x": 9, "y": 1},
151 {"matrix": [2, 0], "x": 0, "y": 2},
152 {"matrix": [2, 1], "x": 1, "y": 2},
153 {"matrix": [2, 2], "x": 2, "y": 2},
154 {"matrix": [2, 3], "x": 3, "y": 2},
155 {"matrix": [2, 4], "x": 4, "y": 2},
156 {"matrix": [2, 5], "x": 5, "y": 2},
157 {"matrix": [2, 6], "x": 6, "y": 2},
158 {"matrix": [2, 7], "x": 7, "y": 2},
159 {"matrix": [2, 8], "x": 8, "y": 2},
160 {"matrix": [2, 9], "x": 9, "y": 2},
161 {"matrix": [3, 0], "x": 0, "y": 3},
162 {"matrix": [3, 1], "x": 1, "y": 3},
163 {"matrix": [3, 2], "x": 2, "y": 3},
164 {"matrix": [3, 3], "x": 3, "y": 3},
165 {"matrix": [3, 4], "x": 4, "y": 3},
166 {"matrix": [3, 5], "x": 5, "y": 3},
167 {"matrix": [3, 6], "x": 6, "y": 3},
168 {"matrix": [3, 7], "x": 7, "y": 3},
169 {"matrix": [3, 8], "x": 8, "y": 3},
170 {"matrix": [3, 9], "x": 9, "y": 3}
171 ]
172 }
173 }
174}
diff --git a/keyboards/cbkbd/acai/keymaps/default/keymap.c b/keyboards/cbkbd/acai/keymaps/default/keymap.c
new file mode 100644
index 0000000000..90ff4a4f49
--- /dev/null
+++ b/keyboards/cbkbd/acai/keymaps/default/keymap.c
@@ -0,0 +1,29 @@
1// Copyright 2025 QMK
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#include QMK_KEYBOARD_H
5
6const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
7
8 [0] = LAYOUT(
9 KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
10 KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENTER,
11 LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, RSFT_T(KC_SLSH),
12 KC_LCTL, KC_LGUI, KC_LALT, LT(1,KC_BSPC), KC_DEL, KC_ENT, LT(2,KC_SPACE), KC_RALT, KC_RGUI, KC_RCTL
13 ),
14
15 [1] = LAYOUT(
16 KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
17 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
18 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
19 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
20 ),
21
22 [2] = LAYOUT(
23 RM_TOGG, RM_NEXT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT,
24 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TRNS,
25 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
26 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
27 ),
28
29};
diff --git a/keyboards/cbkbd/acai/readme.md b/keyboards/cbkbd/acai/readme.md
new file mode 100644
index 0000000000..f3c2b1728d
--- /dev/null
+++ b/keyboards/cbkbd/acai/readme.md
@@ -0,0 +1,26 @@
1# Acai
2
3![Acai](https://imgur.com/eWKoH96.png)
4
5A 10x4 ortholinear keyboard made and sold by Coffee Break Keyboards. PCB designed by Snipeye. Case designed by Rain and Obabo. [More info on cbkbd.com](https://www.cbkbd.com/product/acai)
6
7* Hardware Supported: Acai PCB
8* Hardware Availability: [cbkbd.com](https://www.cbkbd.com/product/acai-pcb)
9
10Make example for this keyboard (after setting up your build environment):
11
12 make cbkbd/acai:default
13
14Flashing example for this keyboard:
15
16 make cbkbd/acai:default:flash
17
18See the [build environment setup](getting_started_build_tools) and the [make instructions](getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](newbs).
19
20## Bootloader
21
22Enter the bootloader in 3 ways:
23
24* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
25* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
26* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available \ No newline at end of file