c8fe565ee6528942cfc71187e32237b39ab7320a
- Author
- VeyPatch <126267034+VeyPatch@users.noreply.github.com>
- Committer
- GitHub <noreply@github.com>
- Date
Message
Diff
This diff is truncated to protect this page.
1diff --git a/keyboards/splitkb/halcyon/kyria/info.json b/keyboards/splitkb/halcyon/kyria/info.json
2new file mode 100755
3index 0000000000000000000000000000000000000000..8e49bb12f3bf7cabea0b7610bf6153117b1249a9
4--- /dev/null
5+++ b/keyboards/splitkb/halcyon/kyria/info.json
6@@ -0,0 +1,68 @@
7+{
8+ "manufacturer": "splitkb.com",
9+ "maintainer": "splitkb.com",
10+ "url": "https://splitkb.com",
11+ "usb": {
12+ "device_version": "1.0.0",
13+ "vid": "0x8D1D"
14+ },
15+ "layout_aliases": {
16+ "LAYOUT": "LAYOUT_split_3x6_5"
17+ },
18+ "layouts": {
19+ "LAYOUT_split_3x6_5": {
20+ "layout": [
21+ {"label": "L06", "matrix": [0, 6], "x": 0, "y": 0.75},
22+ {"label": "L05", "matrix": [0, 5], "x": 1, "y": 0.75},
23+ {"label": "L04", "matrix": [0, 4], "x": 2, "y": 0.25},
24+ {"label": "L03", "matrix": [0, 3], "x": 3, "y": 0},
25+ {"label": "L02", "matrix": [0, 2], "x": 4, "y": 0.25},
26+ {"label": "L01", "matrix": [0, 1], "x": 5, "y": 0.5},
27+ {"label": "R01", "matrix": [4, 1], "x": 10.5, "y": 0.5},
28+ {"label": "R02", "matrix": [4, 2], "x": 11.5, "y": 0.25},
29+ {"label": "R03", "matrix": [4, 3], "x": 12.5, "y": 0},
30+ {"label": "R04", "matrix": [4, 4], "x": 13.5, "y": 0.25},
31+ {"label": "R05", "matrix": [4, 5], "x": 14.5, "y": 0.75},
32+ {"label": "R06", "matrix": [4, 6], "x": 15.5, "y": 0.75},
33+ {"label": "L12", "matrix": [1, 6], "x": 0, "y": 1.75},
34+ {"label": "L11", "matrix": [1, 5], "x": 1, "y": 1.75},
35+ {"label": "L10", "matrix": [1, 4], "x": 2, "y": 1.25},
36+ {"label": "L09", "matrix": [1, 3], "x": 3, "y": 1},
37+ {"label": "L08", "matrix": [1, 2], "x": 4, "y": 1.25},
38+ {"label": "L07", "matrix": [1, 1], "x": 5, "y": 1.5},
39+ {"label": "R07", "matrix": [5, 1], "x": 10.5, "y": 1.5},
40+ {"label": "R08", "matrix": [5, 2], "x": 11.5, "y": 1.25},
41+ {"label": "R09", "matrix": [5, 3], "x": 12.5, "y": 1},
42+ {"label": "R10", "matrix": [5, 4], "x": 13.5, "y": 1.25},
43+ {"label": "R11", "matrix": [5, 5], "x": 14.5, "y": 1.75},
44+ {"label": "R12", "matrix": [5, 6], "x": 15.5, "y": 1.75},
45+ {"label": "L20", "matrix": [2, 6], "x": 0, "y": 2.75},
46+ {"label": "L19", "matrix": [2, 5], "x": 1, "y": 2.75},
47+ {"label": "L18", "matrix": [2, 4], "x": 2, "y": 2.25},
48+ {"label": "L17", "matrix": [2, 3], "x": 3, "y": 2},
49+ {"label": "L16", "matrix": [2, 2], "x": 4, "y": 2.25},
50+ {"label": "L15", "matrix": [2, 1], "x": 5, "y": 2.5},
51+ {"label": "L14", "matrix": [3, 3], "x": 6, "y": 3},
52+ {"label": "L13", "matrix": [2, 0], "x": 7, "y": 3.25},
53+ {"label": "R13", "matrix": [6, 0], "x": 8.5, "y": 3.25},
54+ {"label": "R14", "matrix": [7, 3], "x": 9.5, "y": 3},
55+ {"label": "R15", "matrix": [6, 1], "x": 10.5, "y": 2.5},
56+ {"label": "R16", "matrix": [6, 2], "x": 11.5, "y": 2.25},
57+ {"label": "R17", "matrix": [6, 3], "x": 12.5, "y": 2},
58+ {"label": "R18", "matrix": [6, 4], "x": 13.5, "y": 2.25},
59+ {"label": "R19", "matrix": [6, 5], "x": 14.5, "y": 2.75},
60+ {"label": "R20", "matrix": [6, 6], "x": 15.5, "y": 2.75},
61+ {"label": "L25", "matrix": [3, 4], "x": 2.5, "y": 3.25},
62+ {"label": "L24", "matrix": [3, 2], "x": 3.5, "y": 3.25},
63+ {"label": "L23", "matrix": [3, 1], "x": 4.5, "y": 3.5},
64+ {"label": "L22", "matrix": [3, 5], "x": 5.5, "y": 4},
65+ {"label": "L21", "matrix": [3, 0], "x": 6.5, "y": 4.25},
66+ {"label": "R21", "matrix": [7, 0], "x": 9, "y": 4.25},
67+ {"label": "R22", "matrix": [7, 5], "x": 10, "y": 4},
68+ {"label": "R23", "matrix": [7, 1], "x": 11, "y": 3.5},
69+ {"label": "R24", "matrix": [7, 2], "x": 12, "y": 3.25},
70+ {"label": "R25", "matrix": [7, 4], "x": 13, "y": 3.25}
71+ ]
72+ }
73+ }
74+}
75diff --git a/keyboards/splitkb/halcyon/kyria/keymaps/default/keymap.c b/keyboards/splitkb/halcyon/kyria/keymaps/default/keymap.c
76new file mode 100755
77index 0000000000000000000000000000000000000000..78fd8d4fab0a74f15da650519846476dad423862
78--- /dev/null
79+++ b/keyboards/splitkb/halcyon/kyria/keymaps/default/keymap.c
80@@ -0,0 +1,206 @@
81+// Copyright 2024 splitkb.com (support@splitkb.com)
82+// SPDX-License-Identifier: GPL-2.0-or-later
83+
84+#include QMK_KEYBOARD_H
85+
86+enum layers {
87+ _QWERTY = 0,
88+ _DVORAK,
89+ _COLEMAK_DH,
90+ _NAV,
91+ _SYM,
92+ _FUNCTION,
93+ _ADJUST,
94+};
95+
96+
97+// Aliases for readability
98+#define QWERTY DF(_QWERTY)
99+#define COLEMAK DF(_COLEMAK_DH)
100+#define DVORAK DF(_DVORAK)
101+
102+#define SYM MO(_SYM)
103+#define NAV MO(_NAV)
104+#define FKEYS MO(_FUNCTION)
105+#define ADJUST MO(_ADJUST)
106+
107+#define CTL_ESC MT(MOD_LCTL, KC_ESC)
108+#define CTL_QUOT MT(MOD_RCTL, KC_QUOTE)
109+#define CTL_MINS MT(MOD_RCTL, KC_MINUS)
110+#define ALT_ENT MT(MOD_LALT, KC_ENT)
111+
112+// Note: LAlt/Enter (ALT_ENT) is not the same thing as the keyboard shortcut Alt+Enter.
113+// The notation `mod/tap` denotes a key that activates the modifier `mod` when held down, and
114+// produces the key `tap` when tapped (i.e. pressed and released).
115+
116+// clang-format off
117+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
118+/*
119+ * Base Layer: QWERTY
120+ *
121+ * ,-------------------------------------------. ,-------------------------------------------.
122+ * | Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp |
123+ * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
124+ * |Ctrl/Esc| A | S | D | F | G | | H | J | K | L | ; : |Ctrl/' "|
125+ * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
126+ * | LShift | Z | X | C | V | B | [ { |CapsLk| |F-keys| ] } | N | M | , < | . > | / ? | RShift |
127+ * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
128+ * |Adjust| LGUI | LAlt/| Space| Nav | | Sym | Space| AltGr| RGUI | Menu |
129+ * | | | Enter| | | | | | | | |
130+ * `----------------------------------' `----------------------------------'
131+ */
132+ [_QWERTY] = LAYOUT(
133+ KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y, KC_U , KC_I , KC_O , KC_P , KC_BSPC,
134+ CTL_ESC , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H, KC_J , KC_K , KC_L ,KC_SCLN,CTL_QUOT,
135+ KC_LSFT , KC_Z , KC_X , KC_C , KC_V , KC_B , KC_LBRC,KC_CAPS, FKEYS , KC_RBRC, KC_N, KC_M ,KC_COMM, KC_DOT ,KC_SLSH, KC_RSFT,
136+ ADJUST , KC_LGUI, ALT_ENT, KC_SPC , NAV , SYM , KC_SPC ,KC_RALT, KC_RGUI, KC_APP
137+ ),
138+
139+/*
140+ * Base Layer: Dvorak
141+ *
142+ * ,-------------------------------------------. ,-------------------------------------------.
143+ * | Tab | ' " | , < | . > | P | Y | | F | G | C | R | L | Bksp |
144+ * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
145+ * |Ctrl/Esc| A | O | E | U | I | | D | H | T | N | S |Ctrl/- _|
146+ * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
147+ * | LShift | ; : | Q | J | K | X | [ { |CapsLk| |F-keys| ] } | B | M | W | V | Z | RShift |
148+ * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
149+ * |Adjust| LGUI | LAlt/| Space| Nav | | Sym | Space| AltGr| RGUI | Menu |
150+ * | | | Enter| | | | | | | | |
151+ * `----------------------------------' `----------------------------------'
152+ */
153+ [_DVORAK] = LAYOUT(
154+ KC_TAB ,KC_QUOTE,KC_COMM, KC_DOT, KC_P , KC_Y , KC_F, KC_G , KC_C , KC_R , KC_L , KC_BSPC,
155+ CTL_ESC , KC_A , KC_O , KC_E , KC_U , KC_I , KC_D, KC_H , KC_T , KC_N , KC_S , CTL_MINS,
156+ KC_LSFT ,KC_SCLN, KC_Q , KC_J , KC_K , KC_X , KC_LBRC,KC_CAPS, FKEYS , KC_RBRC, KC_B, KC_M , KC_W , KC_V , KC_Z , KC_RSFT,
157+ ADJUST, KC_LGUI, ALT_ENT, KC_SPC , NAV , SYM , KC_SPC ,KC_RALT, KC_RGUI, KC_APP
158+ ),
159+
160+/*
161+ * Base Layer: Colemak DH
162+ *
163+ * ,-------------------------------------------. ,-------------------------------------------.
164+ * | Tab | Q | W | F | P | B | | J | L | U | Y | ; : | Bksp |
165+ * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
166+ * |Ctrl/Esc| A | R | S | T | G | | M | N | E | I | O |Ctrl/' "|
167+ * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
168+ * | LShift | Z | X | C | D | V | [ { |CapsLk| |F-keys| ] } | K | H | , < | . > | / ? | RShift |
169+ * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
170+ * |Adjust| LGUI | LAlt/| Space| Nav | | Sym | Space| AltGr| RGUI | Menu |
171+ * | | | Enter| | | | | | | | |
172+ * `----------------------------------' `----------------------------------'
173+ */
174+ [_COLEMAK_DH] = LAYOUT(
175+ KC_TAB , KC_Q , KC_W , KC_F , KC_P , KC_B , KC_J, KC_L , KC_U , KC_Y ,KC_SCLN, KC_BSPC,
176+ CTL_ESC , KC_A , KC_R , KC_S , KC_T , KC_G , KC_M, KC_N , KC_E , KC_I , KC_O , CTL_QUOT,
177+ KC_LSFT , KC_Z , KC_X , KC_C , KC_D , KC_V , KC_LBRC,KC_CAPS, FKEYS , KC_RBRC, KC_K, KC_H ,KC_COMM, KC_DOT ,KC_SLSH, KC_RSFT,
178+ ADJUST, KC_LGUI, ALT_ENT, KC_SPC , NAV , SYM , KC_SPC ,KC_RALT, KC_RGUI, KC_APP
179+ ),
180diff --git a/keyboards/splitkb/halcyon/kyria/keymaps/default/readme.md b/keyboards/splitkb/halcyon/kyria/keymaps/default/readme.md
181new file mode 100755
182index 0000000000000000000000000000000000000000..e56bbbb773cc654725243733567ec3d29d3df3c8
183--- /dev/null
184+++ b/keyboards/splitkb/halcyon/kyria/keymaps/default/readme.md
185@@ -0,0 +1,242 @@
186+# Halcyon Kyria's Default Keymap
187+
188+
189+
190+
191+The default keymap contains 5 layers which allows it to include all keys found on an ANSI layout TKL keyboard plus media keys.
192+
193+The five different layers are the following:
194+1. Base layer (QWERTY, Colemak-DH or Dvorak)
195+2. Navigation layer
196+3. Symbols/Numbers layer
197+4. Function layer
198+5. Adjust layer
199+
200+## Base layer(s)
201+```
202+Base Layer: -
203+
204+,-------------------------------------------. ,-------------------------------------------.
205+| Tab | - | - | - | - | - | | - | - | - | - | - | Bksp |
206+|--------+------+------+------+------+------| |------+------+------+------+------+--------|
207+|Ctrl/Esc| - | - | - | - | - | | - | - | - | - | - |Ctrl/ - |
208+|--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
209+| LShift | - | - | - | - | - | [ { |CapsLk| |F-Keys| ] } | - | - | - | - | - | RShift |
210+`----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
211+ |Adjust| LGUI | LAlt/| Space| Nav | | Sym | Space| AltGr| RGUI | Menu |
212+ | | | Enter| | | | | | | | |
213+ `----------------------------------' `----------------------------------'
214+```
215+Three different well-known keyboard layouts are provided to fill in the placeholder `-` keys: QWERTY, Colemak-DH, and Dvorak. The default layer can be changed at runtime, more info on that in the section on the [adjust layer](#adjust-layer).
216+
217+For the rest of this write-up, the base layer will be assumed to be QWERTY and will be used as a reference to describe physical keys, e.g. “<kbd>B</kbd> key” vs, the much more verbose, “lower inner index key”.
218+
219+```
220+Base Layer: QWERTY
221+
222+,-------------------------------------------. ,-------------------------------------------.
223+| Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp |
224+|--------+------+------+------+------+------| |------+------+------+------+------+--------|
225+|Ctrl/Esc| A | S | D | F | G | | H | J | K | L | ; : |Ctrl/' "|
226+|--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
227+| LShift | Z | X | C | V | B | [ { |CapsLk| |F-keys| ] } | N | M | , < | . > | / ? | RShift |
228+`----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
229+ |Adjust| LGUI | LAlt/| Space| Nav | | Sym | Space| AltGr| RGUI | Menu |
230+ | | | Enter| | | | | | | | |
231+ `----------------------------------' `----------------------------------'
232+```
233+
234+Aside from variations in the alpha cluster, the rest of the base keys remain the same and are designed to feel familiar.
235+
236+
237+
238+<details>
239+After making transformations to the classic ANSI US QWERTY TKL 60% to arrive to the layout of the Kyria, as illustrated in the animation above, the result looks like this:
240+
241+```
242+,-------------------------------------------. ,-------------------------------------------.
243+| Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp |
244+|--------+------+------+------+------+------| |------+------+------+------+------+--------|
245+| Cap Lk | A | S | D | F | G | | H | J | K | L | ; : | ' " |
246+|--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
247+| LShift | Z | X | C | V | B | | | | | | N | M | , < | . > | / ? | RShift |
248+`----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
249+ | LCtrl| LGUI | LAlt | Space| | | | Space| AltGr| RGUI | Menu |
250+ | | | | | | | | | | | |
251+ `----------------------------------' '----------------------------------'
252+```
253+
254diff --git a/keyboards/splitkb/halcyon/kyria/readme.md b/keyboards/splitkb/halcyon/kyria/readme.md
255new file mode 100755
256index 0000000000000000000000000000000000000000..62689d35b055e70b17caa3727a698bb34dd2e785
257--- /dev/null
258+++ b/keyboards/splitkb/halcyon/kyria/readme.md
259@@ -0,0 +1,31 @@
260+# Halcyon Kyria
261+
262+
263+
264+The Halcyon Kyria rev4 is the fourth Kyria revision and the first keyboard in our Halcyon range. Similar to Aurora, all keyboards in the series share the same feature set. The key highlights:
265+
266+- Halcyon keyboards come preassembled! You won't need a soldering iron.
267+- You'll be able to install [VIK](https://github.com/sadekbaroudi/vik) modules.
268+- It'll come fully documented, which includes the unboxing, assembly (with only a screwdriver), first installation and some advanced use cases.
269+- Both the connection to the host device as well as the interconnect between the keyboard halves use USB C.
270+- The controller has full ESD protection on all USB C ports, as well as all switch matrix GPIO!
271+- The controller is interchangable. If part of your keyboard ever breaks, we can replace just the bits that need replacing.
272+
273+* Keyboard Maintainer: [splitkb.com](https://github.com/splitkb.com)
274+* Hardware Availability: [splitkb.com](https://splitkb.com).
275+
276+Make example for this keyboard (after setting up your build environment):
277+
278+ make splitkb/halcyon/kyria/rev4:default
279+
280+The keyboard can be flashed by copying the resulting `.uf2` file onto the `RPI-RP2` flash drive.
281+
282diff --git a/keyboards/splitkb/halcyon/kyria/rev4/config.h b/keyboards/splitkb/halcyon/kyria/rev4/config.h
283new file mode 100755
284index 0000000000000000000000000000000000000000..c09744f9238baaa3b360d599fc3ca72d882b6873
285--- /dev/null
286+++ b/keyboards/splitkb/halcyon/kyria/rev4/config.h
287@@ -0,0 +1,32 @@
288+// Copyright 2024 splitkb.com (support@splitkb.com)
289+// SPDX-License-Identifier: GPL-2.0-or-later
290+
291+#pragma once
292+
293+// Make it easier to enter the bootloader
294+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
295+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U
296+
297+// UART1, communication between the two halves
298+#define SERIAL_USART_FULL_DUPLEX // Enable full duplex operation mode.
299+#define SERIAL_USART_TX_PIN GP28 // USART TX pin
300+#define SERIAL_USART_RX_PIN GP29 // USART RX pin
301+#define SERIAL_PIO_USE_PIO1 // Use PIO1 as PIO0 is used for WS2812 driver
302+
303+// VBUS detection
304+#define USB_VBUS_PIN GP1
305+
306+//// VIK
307+
308+// GPIO1 = GP27
309+// GPIO2 = GP26
310+// CS = GP13
311+
312+#define I2C_DRIVER I2C0
313+#define I2C1_SDA_PIN GP16
314+#define I2C1_SCL_PIN GP17
315+
316+#define SPI_DRIVER SPID1
317+#define SPI_SCK_PIN GP14
318+#define SPI_MOSI_PIN GP15
319+#define SPI_MISO_PIN GP12
320diff --git a/keyboards/splitkb/halcyon/kyria/rev4/halconf.h b/keyboards/splitkb/halcyon/kyria/rev4/halconf.h
321new file mode 100644
322index 0000000000000000000000000000000000000000..1050ebf3130e41824f9005e0cd8867d77a6dede0
323--- /dev/null
324+++ b/keyboards/splitkb/halcyon/kyria/rev4/halconf.h
325@@ -0,0 +1,14 @@
326+// Copyright 2024 splitkb.com (support@splitkb.com)
327+// SPDX-License-Identifier: GPL-2.0-or-later
328+
329+#pragma once
330+
331+//// VIK
332+
333+#define HAL_USE_I2C TRUE
334+
335+#define HAL_USE_SPI TRUE
336+#define SPI_USE_WAIT TRUE
337+#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
338+
339+#include_next <halconf.h>
340diff --git a/keyboards/splitkb/halcyon/kyria/rev4/keyboard.json b/keyboards/splitkb/halcyon/kyria/rev4/keyboard.json
341new file mode 100755
342index 0000000000000000000000000000000000000000..c9e891964b151e689098d8a92c2aaabd7898edd5
343--- /dev/null
344+++ b/keyboards/splitkb/halcyon/kyria/rev4/keyboard.json
345@@ -0,0 +1,168 @@
346+{
347+ "keyboard_name": "Halcyon Kyria rev4",
348+ "bootloader": "rp2040",
349+ "diode_direction": "COL2ROW",
350+ "encoder": {
351+ "rotary": [
352+ {"pin_a": "GP23", "pin_b": "GP22", "resolution": 2}
353+ ]
354+ },
355+ "features": {
356+ "encoder": true,
357+ "extrakey": true,
358+ "mousekey": true,
359+ "nkro": true,
360+ "rgb_matrix": true
361+ },
362+ "matrix_pins": {
363+ "cols": ["GP19", "GP20", "GP25", "GP4", "GP9", "GP10", "GP5"],
364+ "rows": ["GP8", "GP11", "GP7", "GP6"]
365+ },
366+ "processor": "RP2040",
367+ "rgb_matrix": {
368+ "animations": {
369+ "alphas_mods": true,
370+ "band_pinwheel_sat": true,
371+ "band_pinwheel_val": true,
372+ "band_sat": true,
373+ "band_spiral_sat": true,
374+ "band_spiral_val": true,
375+ "band_val": true,
376+ "breathing": true,
377+ "cycle_all": true,
378+ "cycle_left_right": true,
379+ "cycle_out_in": true,
380+ "cycle_out_in_dual": true,
381+ "cycle_pinwheel": true,
382+ "cycle_spiral": true,
383+ "cycle_up_down": true,
384+ "digital_rain": true,
385+ "dual_beacon": true,
386+ "gradient_left_right": true,
387+ "gradient_up_down": true,
388+ "hue_breathing": true,
389+ "hue_pendulum": true,
390+ "hue_wave": true,
391+ "jellybean_raindrops": true,
392+ "multisplash": true,
393+ "pixel_flow": true,
394+ "pixel_fractal": true,
395+ "pixel_rain": true,
396+ "rainbow_beacon": true,
397+ "rainbow_moving_chevron": true,
398+ "rainbow_pinwheels": true,
399+ "raindrops": true,
400+ "solid_color": true,
401+ "solid_multisplash": true,
402+ "solid_reactive": true,
403+ "solid_reactive_cross": true,
404+ "solid_reactive_multicross": true,
405+ "solid_reactive_multinexus": true,
406+ "solid_reactive_multiwide": true,
407+ "solid_reactive_nexus": true,
408+ "solid_reactive_simple": true,
409+ "solid_reactive_wide": true,
410+ "solid_splash": true,
411+ "splash": true,
412+ "typing_heatmap": true
413+ },
414+ "default": {
415+ "animation": "cycle_left_right"
416+ },
417+ "driver": "ws2812",
418+ "layout": [
419+ {"x": 75, "y": 2, "flags": 2},
420+ {"x": 50, "y": 1, "flags": 2},
421+ {"x": 14, "y": 4, "flags": 2},
422+ {"x": 25, "y": 45, "flags": 2},
423+ {"x": 58, "y": 49, "flags": 2},
424+ {"x": 94, "y": 53, "flags": 2},
425+ {"matrix": [3, 0], "x": 94, "y": 64, "flags": 4},
426+ {"matrix": [3, 5], "x": 79, "y": 60, "flags": 4},
427+ {"matrix": [3, 1], "x": 65, "y": 53, "flags": 4},
428+ {"matrix": [3, 2], "x": 51, "y": 49, "flags": 4},
429+ {"matrix": [3, 4], "x": 36, "y": 49, "flags": 4},
430+ {"matrix": [2, 0], "x": 101, "y": 49, "flags": 4},
431+ {"matrix": [3, 3], "x": 87, "y": 45, "flags": 4},
432+ {"matrix": [2, 1], "x": 72, "y": 38, "flags": 4},
433+ {"matrix": [2, 2], "x": 58, "y": 34, "flags": 4},
434+ {"matrix": [2, 3], "x": 43, "y": 30, "flags": 4},
435+ {"matrix": [2, 4], "x": 29, "y": 34, "flags": 4},
436+ {"matrix": [2, 5], "x": 14, "y": 41, "flags": 4},
437+ {"matrix": [2, 6], "x": 0, "y": 41, "flags": 4},
438+ {"matrix": [1, 1], "x": 72, "y": 23, "flags": 4},
439+ {"matrix": [1, 2], "x": 58, "y": 19, "flags": 4},
440+ {"matrix": [1, 3], "x": 43, "y": 15, "flags": 4},
441+ {"matrix": [1, 4], "x": 29, "y": 19, "flags": 4},
442+ {"matrix": [1, 5], "x": 14, "y": 26, "flags": 4},
443+ {"matrix": [1, 6], "x": 0, "y": 26, "flags": 4},
444+ {"matrix": [0, 1], "x": 72, "y": 8, "flags": 4},
445diff --git a/keyboards/splitkb/halcyon/kyria/rev4/mcuconf.h b/keyboards/splitkb/halcyon/kyria/rev4/mcuconf.h
446new file mode 100644
447index 0000000000000000000000000000000000000000..6792b923f10d0f41615172ddc1d14ff69b6d143c
448--- /dev/null
449+++ b/keyboards/splitkb/halcyon/kyria/rev4/mcuconf.h
450@@ -0,0 +1,14 @@
451+// Copyright 2024 splitkb.com (support@splitkb.com)
452+// SPDX-License-Identifier: GPL-2.0-or-later
453+
454+#pragma once
455+
456+#include_next <mcuconf.h>
457+
458+//// VIK
459+
460+#undef RP_I2C_USE_I2C0
461+#define RP_I2C_USE_I2C0 TRUE
462+
463+#undef RP_SPI_USE_SPI1
464+#define RP_SPI_USE_SPI1 TRUE
465diff --git a/keyboards/splitkb/halcyon/kyria/rev4/rev4.c b/keyboards/splitkb/halcyon/kyria/rev4/rev4.c
466new file mode 100644
467index 0000000000000000000000000000000000000000..27671b9d7ce97f7b445f7447a7e5a8374302f25d
468--- /dev/null
469+++ b/keyboards/splitkb/halcyon/kyria/rev4/rev4.c
470@@ -0,0 +1,28 @@
471+// Copyright 2024 splitkb.com (support@splitkb.com)
472+// SPDX-License-Identifier: GPL-2.0-or-later
473+
474+#include "quantum.h"
475+
476+#ifdef ENCODER_ENABLE
477+bool encoder_update_kb(uint8_t index, bool clockwise) {
478+ if (!encoder_update_user(index, clockwise)) {
479+ return false;
480+ }
481+ if (index == 0) {
482+ // Volume control
483+ if (clockwise) {
484+ tap_code(KC_VOLU);
485+ } else {
486+ tap_code(KC_VOLD);
487+ }
488+ } else if (index == 1) {
489+ // Page up/Page down
490+ if (clockwise) {
491+ tap_code(KC_PGDN);
492+ } else {
493+ tap_code(KC_PGUP);
494+ }
495+ }
496+ return false;
497+}
498+#endif