summaryrefslogtreecommitdiff
path: root/keyboards/splitkb
diff options
context:
space:
mode:
authorVeyPatch <126267034+VeyPatch@users.noreply.github.com>2025-04-28 07:25:09 +0200
committerGitHub <noreply@github.com>2025-04-27 22:25:09 -0700
commit01354fffb4b11bdaec0e5ec10c34a1d974bc7070 (patch)
treecd728e93bf81178b2d1d79c2adf33e0a7cd3efda /keyboards/splitkb
parent92c4f0095dcef88c0a983f5fd661f7de2966bcc0 (diff)
[Keyboard] Add splitkb.com's Halcyon Elora rev2 (#24790)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Diffstat (limited to 'keyboards/splitkb')
-rw-r--r--keyboards/splitkb/halcyon/elora/info.json80
-rw-r--r--keyboards/splitkb/halcyon/elora/keymaps/default/keymap.c241
-rw-r--r--keyboards/splitkb/halcyon/elora/keymaps/default/readme.md262
-rw-r--r--keyboards/splitkb/halcyon/elora/keymaps/default/rules.mk1
-rw-r--r--keyboards/splitkb/halcyon/elora/readme.md31
-rw-r--r--keyboards/splitkb/halcyon/elora/rev2/config.h32
-rw-r--r--keyboards/splitkb/halcyon/elora/rev2/halconf.h14
-rw-r--r--keyboards/splitkb/halcyon/elora/rev2/keyboard.json177
-rw-r--r--keyboards/splitkb/halcyon/elora/rev2/mcuconf.h14
-rw-r--r--keyboards/splitkb/halcyon/elora/rev2/rev2.c28
10 files changed, 880 insertions, 0 deletions
diff --git a/keyboards/splitkb/halcyon/elora/info.json b/keyboards/splitkb/halcyon/elora/info.json
new file mode 100644
index 0000000000..ea97888673
--- /dev/null
+++ b/keyboards/splitkb/halcyon/elora/info.json
@@ -0,0 +1,80 @@
1{
2 "manufacturer": "splitkb.com",
3 "maintainer": "splitkb",
4 "url": "https://splitkb.com",
5 "usb": {
6 "device_version": "1.0.0",
7 "vid": "0x8D1D"
8 },
9 "layout_aliases": {
10 "LAYOUT": "LAYOUT_split_4x6_5"
11 },
12 "layouts": {
13 "LAYOUT_split_4x6_5": {
14 "layout": [
15 {"label": "L06", "matrix": [0, 6], "x": 0, "y": 0.75},
16 {"label": "L05", "matrix": [0, 5], "x": 1, "y": 0.75},
17 {"label": "L04", "matrix": [0, 4], "x": 2, "y": 0.25},
18 {"label": "L03", "matrix": [0, 3], "x": 3, "y": 0},
19 {"label": "L02", "matrix": [0, 2], "x": 4, "y": 0.25},
20 {"label": "L01", "matrix": [0, 1], "x": 5, "y": 0.5},
21 {"label": "R01", "matrix": [5, 1], "x": 10.5, "y": 0.5},
22 {"label": "R02", "matrix": [5, 2], "x": 11.5, "y": 0.25},
23 {"label": "R03", "matrix": [5, 3], "x": 12.5, "y": 0},
24 {"label": "R04", "matrix": [5, 4], "x": 13.5, "y": 0.25},
25 {"label": "R05", "matrix": [5, 5], "x": 14.5, "y": 0.75},
26 {"label": "R06", "matrix": [5, 6], "x": 15.5, "y": 0.75},
27 {"label": "L12", "matrix": [1, 6], "x": 0, "y": 1.75},
28 {"label": "L11", "matrix": [1, 5], "x": 1, "y": 1.75},
29 {"label": "L10", "matrix": [1, 4], "x": 2, "y": 1.25},
30 {"label": "L09", "matrix": [1, 3], "x": 3, "y": 1},
31 {"label": "L08", "matrix": [1, 2], "x": 4, "y": 1.25},
32 {"label": "L07", "matrix": [1, 1], "x": 5, "y": 1.5},
33 {"label": "R07", "matrix": [6, 1], "x": 10.5, "y": 1.5},
34 {"label": "R08", "matrix": [6, 2], "x": 11.5, "y": 1.25},
35 {"label": "R09", "matrix": [6, 3], "x": 12.5, "y": 1},
36 {"label": "R10", "matrix": [6, 4], "x": 13.5, "y": 1.25},
37 {"label": "R11", "matrix": [6, 5], "x": 14.5, "y": 1.75},
38 {"label": "R12", "matrix": [6, 6], "x": 15.5, "y": 1.75},
39 {"label": "L18", "matrix": [2, 6], "x": 0, "y": 2.75},
40 {"label": "L17", "matrix": [2, 5], "x": 1, "y": 2.75},
41 {"label": "L16", "matrix": [2, 4], "x": 2, "y": 2.25},
42 {"label": "L15", "matrix": [2, 3], "x": 3, "y": 2},
43 {"label": "L14", "matrix": [2, 2], "x": 4, "y": 2.25},
44 {"label": "L13", "matrix": [2, 1], "x": 5, "y": 2.5},
45 {"label": "R13", "matrix": [7, 1], "x": 10.5, "y": 2.5},
46 {"label": "R14", "matrix": [7, 2], "x": 11.5, "y": 2.25},
47 {"label": "R15", "matrix": [7, 3], "x": 12.5, "y": 2},
48 {"label": "R16", "matrix": [7, 4], "x": 13.5, "y": 2.25},
49 {"label": "R17", "matrix": [7, 5], "x": 14.5, "y": 2.75},
50 {"label": "R18", "matrix": [7, 6], "x": 15.5, "y": 2.75},
51 {"label": "L26", "matrix": [3, 6], "x": 0, "y": 3.75},
52 {"label": "L25", "matrix": [3, 5], "x": 1, "y": 3.75},
53 {"label": "L24", "matrix": [3, 4], "x": 2, "y": 3.25},
54 {"label": "L23", "matrix": [3, 3], "x": 3, "y": 3},
55 {"label": "L22", "matrix": [3, 2], "x": 4, "y": 3.25},
56 {"label": "L21", "matrix": [3, 1], "x": 5, "y": 3.5},
57 {"label": "L20", "matrix": [4, 3], "x": 6, "y": 4},
58 {"label": "L19", "matrix": [3, 0], "x": 7, "y": 4.25},
59 {"label": "R19", "matrix": [8, 0], "x": 8.5, "y": 4.25},
60 {"label": "R20", "matrix": [9, 3], "x": 9.5, "y": 4},
61 {"label": "R21", "matrix": [8, 1], "x": 10.5, "y": 3.5},
62 {"label": "R22", "matrix": [8, 2], "x": 11.5, "y": 3.25},
63 {"label": "R23", "matrix": [8, 3], "x": 12.5, "y": 3},
64 {"label": "R24", "matrix": [8, 4], "x": 13.5, "y": 3.25},
65 {"label": "R26", "matrix": [8, 5], "x": 14.5, "y": 3.75},
66 {"label": "R27", "matrix": [8, 6], "x": 15.5, "y": 3.75},
67 {"label": "L31", "matrix": [4, 4], "x": 2.5, "y": 4.25},
68 {"label": "L30", "matrix": [4, 2], "x": 3.5, "y": 4.25},
69 {"label": "L29", "matrix": [4, 1], "x": 4.5, "y": 4.5},
70 {"label": "L28", "matrix": [4, 5], "x": 5.5, "y": 5},
71 {"label": "L27", "matrix": [4, 0], "x": 6.5, "y": 5.25},
72 {"label": "R27", "matrix": [9, 0], "x": 9, "y": 5.25},
73 {"label": "R28", "matrix": [9, 5], "x": 10, "y": 5},
74 {"label": "R29", "matrix": [9, 1], "x": 11, "y": 4.5},
75 {"label": "R30", "matrix": [9, 2], "x": 12, "y": 4.25},
76 {"label": "R31", "matrix": [9, 4], "x": 13, "y": 4.25}
77 ]
78 }
79 }
80}
diff --git a/keyboards/splitkb/halcyon/elora/keymaps/default/keymap.c b/keyboards/splitkb/halcyon/elora/keymaps/default/keymap.c
new file mode 100644
index 0000000000..542314bf21
--- /dev/null
+++ b/keyboards/splitkb/halcyon/elora/keymaps/default/keymap.c
@@ -0,0 +1,241 @@
1// Copyright 2025 splitkb.com (support@splitkb.com)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#include QMK_KEYBOARD_H
5
6enum layers {
7 _QWERTY = 0,
8 _DVORAK,
9 _COLEMAK_DH,
10 _NAV,
11 _SYM,
12 _FUNCTION,
13 _ADJUST,
14};
15
16// Aliases for readability
17#define QWERTY DF(_QWERTY)
18#define COLEMAK DF(_COLEMAK_DH)
19#define DVORAK DF(_DVORAK)
20
21#define SYM MO(_SYM)
22#define NAV MO(_NAV)
23#define FKEYS MO(_FUNCTION)
24#define ADJUST MO(_ADJUST)
25
26#define CTL_ESC MT(MOD_LCTL, KC_ESC)
27#define CTL_QUOT MT(MOD_RCTL, KC_QUOTE)
28#define CTL_MINS MT(MOD_RCTL, KC_MINUS)
29#define ALT_ENT MT(MOD_LALT, KC_ENT)
30
31// Note: LAlt/Enter (ALT_ENT) is not the same thing as the keyboard shortcut Alt+Enter.
32// The notation `mod/tap` denotes a key that activates the modifier `mod` when held down, and
33// produces the key `tap` when tapped (i.e. pressed and released).
34
35// clang-format off
36const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
37/*
38 * Base Layer: QWERTY
39 *
40 * ,-------------------------------------------. ,-------------------------------------------.
41 * | Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Esc |
42 * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
43 * | Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp |
44 * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
45 * |Ctrl/Esc| A | S | D | F | G | | H | J | K | L | ; : |Ctrl/' "|
46 * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
47 * | LShift | Z | X | C | V | B | [ { |CapsLk| |F-keys| ] } | N | M | , < | . > | / ? | RShift |
48 * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
49 * |Adjust| LGUI | LAlt/| Space| Nav | | Sym | Space| AltGr| RGUI | Menu |
50 * | | | Enter| | | | | | | | |
51 * `----------------------------------' `----------------------------------'
52 */
53 [_QWERTY] = LAYOUT(
54 KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_ESC ,
55 KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y, KC_U , KC_I , KC_O , KC_P , KC_BSPC,
56 CTL_ESC , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H, KC_J , KC_K , KC_L ,KC_SCLN,CTL_QUOT,
57 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,
58 ADJUST , KC_LGUI, ALT_ENT, KC_SPC , NAV , SYM , KC_SPC ,KC_RALT, KC_RGUI, KC_APP
59 ),
60
61/*
62 * Base Layer: Dvorak
63 *
64 * ,-------------------------------------------. ,-------------------------------------------.
65 * | Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Esc |
66 * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
67 * | Tab | ' " | , < | . > | P | Y | | F | G | C | R | L | Bksp |
68 * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
69 * |Ctrl/Esc| A | O | E | U | I | | D | H | T | N | S |Ctrl/- _|
70 * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
71 * | LShift | ; : | Q | J | K | X | [ { |CapsLk| |F-keys| ] } | B | M | W | V | Z | RShift |
72 * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
73 * |Adjust| LGUI | LAlt/| Space| Nav | | Sym | Space| AltGr| RGUI | Menu |
74 * | | | Enter| | | | | | | | |
75 * `----------------------------------' `----------------------------------'
76 */
77 [_DVORAK] = LAYOUT(
78 KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_ESC ,
79 KC_TAB ,KC_QUOTE,KC_COMM, KC_DOT, KC_P , KC_Y , KC_F, KC_G , KC_C , KC_R , KC_L , KC_BSPC,
80 CTL_ESC , KC_A , KC_O , KC_E , KC_U , KC_I , KC_D, KC_H , KC_T , KC_N , KC_S , CTL_MINS,
81 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,
82 ADJUST, KC_LGUI, ALT_ENT, KC_SPC , NAV , SYM , KC_SPC ,KC_RALT, KC_RGUI, KC_APP
83 ),
84
85/*
86 * Base Layer: Colemak DH
87 *
88 * ,-------------------------------------------. ,-------------------------------------------.
89 * | Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Esc |
90 * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
91 * | Tab | Q | W | F | P | B | | J | L | U | Y | ; : | Bksp |
92 * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
93 * |Ctrl/Esc| A | R | S | T | G | | M | N | E | I | O |Ctrl/' "|
94 * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
95 * | LShift | Z | X | C | D | V | [ { |CapsLk| |F-keys| ] } | K | H | , < | . > | / ? | RShift |
96 * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
97 * |Adjust| LGUI | LAlt/| Space| Nav | | Sym | Space| AltGr| RGUI | Menu |
98 * | | | Enter| | | | | | | | |
99 * `----------------------------------' `----------------------------------'
100 */
101 [_COLEMAK_DH] = LAYOUT(
102 KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_ESC ,
103 KC_TAB , KC_Q , KC_W , KC_F , KC_P , KC_B , KC_J, KC_L , KC_U , KC_Y ,KC_SCLN, KC_BSPC,
104 CTL_ESC , KC_A , KC_R , KC_S , KC_T , KC_G , KC_M, KC_N , KC_E , KC_I , KC_O , CTL_QUOT,
105 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,
106 ADJUST, KC_LGUI, ALT_ENT, KC_SPC , NAV , SYM , KC_SPC ,KC_RALT, KC_RGUI, KC_APP
107 ),
108
109/*
110 * Nav Layer: Media, navigation
111 *
112 * ,-------------------------------------------. ,-------------------------------------------.
113 * | | | | | | | | | | | | | |
114 * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
115 * | | | | | | | | PgUp | Home | ↑ | End | VolUp| Delete |
116 * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
117 * | | GUI | Alt | Ctrl | Shift| | | PgDn | ← | ↓ | → | VolDn| Insert |
118 * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
119 * | | | | | | | |ScLck | | | | Pause|M Prev|M Play|M Next|VolMut| PrtSc |
120 * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
121 * | | | | | | | | | | | |
122 * | | | | | | | | | | | |
123 * `----------------------------------' `----------------------------------'
124 */
125 [_NAV] = LAYOUT(
126 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
127 _______, _______, _______, _______, _______, _______, KC_PGUP, KC_HOME, KC_UP, KC_END, KC_VOLU, KC_DEL,
128 _______, KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_VOLD, KC_INS,
129 _______, _______, _______, _______, _______, _______, _______, KC_SCRL, _______, _______,KC_PAUSE, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_PSCR,
130 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
131 ),
132
133/*
134 * Sym Layer: Numbers and symbols
135 *
136 * ,-------------------------------------------. ,-------------------------------------------.
137 * | | | | | | | | | | | | | |
138 * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
139 * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | = |
140 * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
141 * | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | + |
142 * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
143 * | | | \ | : | ; | - | [ | { | | | | } | ] | _ | , | . | / | ? |
144 * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
145 * | | | | | | | | | | | |
146 * | | | | | | | | | | | |
147 * `----------------------------------' `----------------------------------'
148 */
149 [_SYM] = LAYOUT(
150 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
151 KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_EQL ,
152 KC_TILD , KC_EXLM, KC_AT , KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PLUS,
153 KC_PIPE , KC_BSLS, KC_COLN, KC_SCLN, KC_MINS, KC_LBRC, KC_LCBR, _______, _______, KC_RCBR, KC_RBRC, KC_UNDS, KC_COMM, KC_DOT, KC_SLSH, KC_QUES,
154 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
155 ),
156
157/*
158 * Function Layer: Function keys
159 *
160 * ,-------------------------------------------. ,-------------------------------------------.
161 * | | | | | | | | | | | | | |
162 * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
163 * | | F9 | F10 | F11 | F12 | | | | | | | | |
164 * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
165 * | | F5 | F6 | F7 | F8 | | | | Shift| Ctrl | Alt | GUI | |
166 * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
167 * | | F1 | F2 | F3 | F4 | | | | | | | | | | | | |
168 * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
169 * | | | | | | | | | | | |
170 * | | | | | | | | | | | |
171 * `----------------------------------' `----------------------------------'
172 */
173 [_FUNCTION] = LAYOUT(
174 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
175 _______, KC_F9 , KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, _______, _______,
176 _______, KC_F5 , KC_F6 , KC_F7 , KC_F8 , _______, _______, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, _______,
177 _______, KC_F1 , KC_F2 , KC_F3 , KC_F4 , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
178 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
179 ),
180
181/*
182 * Adjust Layer: Default layer settings, RGB
183 *
184 * ,-------------------------------------------. ,-------------------------------------------.
185 * | Reset | | | | | | | | | | | | |
186 * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
187 * | | | |QWERTY| | | | | | | | | |
188 * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
189 * | | | |Dvorak| | | | TOG | SAI | HUI | VAI | MOD | |
190 * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
191 * | | | |Colmak| | | | | | | | | SAD | HUD | VAD | RMOD | |
192 * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
193 * | | | | | | | | | | | |
194 * | | | | | | | | | | | |
195 * `----------------------------------' `----------------------------------'
196 */
197 [_ADJUST] = LAYOUT(
198 QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
199 _______, _______, _______, QWERTY , _______, _______, _______, _______, _______, _______, _______, _______,
200 _______, _______, _______, DVORAK , _______, _______, RM_TOGG, RM_SATU, RM_HUEU, RM_VALU, RM_NEXT, _______,
201 _______, _______, _______, COLEMAK, _______, _______,_______, _______, _______, _______, _______, RM_SATD, RM_HUED, RM_VALD, RM_PREV, _______,
202 _______, _______, _______,_______, _______, _______, _______, _______, _______, _______
203 ),
204
205// /*
206// * Layer template
207// *
208// * ,-------------------------------------------. ,-------------------------------------------.
209// * | | | | | | | | | | | | | |
210// * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
211// * | | | | | | | | | | | | | |
212// * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
213// * | | | | | | | | | | | | | |
214// * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
215// * | | | | | | | | | | | | | | | | | |
216// * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
217// * | | | | | | | | | | | |
218// * | | | | | | | | | | | |
219// * `----------------------------------' `----------------------------------'
220// */
221// [_LAYERINDEX] = LAYOUT(
222// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
223// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
224// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
225// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
226// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
227// ),
228//
229};
230
231#if defined(ENCODER_MAP_ENABLE)
232const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
233 [0] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD), ENCODER_CCW_CW(KC_PGDN, KC_PGUP) },
234 [1] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) },
235 [2] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) },
236 [3] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) },
237 [4] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) },
238 [5] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) },
239 [6] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) },
240};
241#endif
diff --git a/keyboards/splitkb/halcyon/elora/keymaps/default/readme.md b/keyboards/splitkb/halcyon/elora/keymaps/default/readme.md
new file mode 100644
index 0000000000..bd386bfa39
--- /dev/null
+++ b/keyboards/splitkb/halcyon/elora/keymaps/default/readme.md
@@ -0,0 +1,262 @@
1# Halcyon Elora's Default Keymap
2
3The default keymap contains 5 layers which allows it to include all keys found on an ANSI layout TKL keyboard plus media keys.
4Hardware features of the Elora such as rotary encoders and underglow are also supported.
5
6The Elora keymap is in essence identical to the Kyria keymap, just with an additional number row. A deep dive into the keymap is provided there.
7
8The five different layers are the following:
91. Base layer (QWERTY, Colemak-DH or Dvorak)
102. Navigation layer
113. Symbols/Numbers layer
124. Function layer
135. Adjust layer
14
15## Base layer(s)
16```
17Base Layer: -
18
19,-------------------------------------------. ,-------------------------------------------.
20| Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Esc |
21|--------+------+------+------+------+------| |------+------+------+------+------+--------|
22| Tab | - | - | - | - | - | | - | - | - | - | - | Bksp |
23|--------+------+------+------+------+------| |------+------+------+------+------+--------|
24|Ctrl/Esc| - | - | - | - | - | | - | - | - | - | - |Ctrl/ - |
25|--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
26| LShift | - | - | - | - | - | [ { |CapsLk| |F-Keys| ] } | - | - | - | - | - | RShift |
27`----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
28 |Adjust| LGUI | LAlt/| Space| Nav | | Sym | Space| AltGr| RGUI | Menu |
29 | | | Enter| | | | | | | | |
30 `----------------------------------' `----------------------------------'
31```
32Three 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).
33
34For 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”.
35
36```
37Base Layer: QWERTY
38
39,-------------------------------------------. ,-------------------------------------------.
40| Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Esc |
41|--------+------+------+------+------+------| |------+------+------+------+------+--------|
42| Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp |
43|--------+------+------+------+------+------| |------+------+------+------+------+--------|
44|Ctrl/Esc| A | S | D | F | G | | H | J | K | L | ; : |Ctrl/' "|
45|--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
46| LShift | Z | X | C | V | B | [ { |CapsLk| |F-keys| ] } | N | M | , < | . > | / ? | RShift |
47`----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
48 |Adjust| LGUI | LAlt/| Space| Nav | | Sym | Space| AltGr| RGUI | Menu |
49 | | | Enter| | | | | | | | |
50 `----------------------------------' `----------------------------------'
51```
52
53Aside from variations in the alpha cluster, the rest of the base keys remain the same and are designed to feel familiar.
54
55![Step-by-step animation of the transformation of an ortholinear TKL to a Kyria](https://i.imgur.com/uVDCOek.gif)
56
57<details>
58After making transformations to the classic ANSI US QWERTY TKL 60% to arrive to the layout of the Elora, as illustrated in the animation above, the result looks like this:
59
60```
61,-------------------------------------------. ,-------------------------------------------.
62| Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Esc |
63|--------+------+------+------+------+------| |------+------+------+------+------+--------|
64| Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp |
65|--------+------+------+------+------+------| |------+------+------+------+------+--------|
66| Cap Lk | A | S | D | F | G | | H | J | K | L | ; : | ' " |
67|--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
68| LShift | Z | X | C | V | B | | | | | | N | M | , < | . > | / ? | RShift |
69`----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
70 | LCtrl| LGUI | LAlt | Space| | | | Space| AltGr| RGUI | Menu |
71 | | | | | | | | | | | |
72 `----------------------------------' '----------------------------------'
73```
74
75First thing to notice is the presence of blank keys. To fill in the blank keys above the <kbd>Space</kbd> keys, we can take inspiration from other split keyboards featuring an extra inner index column on each half. A common mapping for those kind of keys are the bracket keys that got removed in the fourth step of the animated transformation. The thumb keys besides <kbd>Space</kbd>s is prime real estate for dedicated layer-switching keys. It doesn't matter on which side is assigned the sym-layer-switch key but it helps to keep the nav-layer-switch on the left in order to keep the arrow keys on the right side like on a classic keyboard, so we'll put nav on the left and sym on the right. We'll address the remaining blank thumb keys later.
76
77The base layer is starting to form but there remains some flaws. One glaring issue is the position of Control. Control is a very commonly used function but the key on which it sits right now is way too tucked in under the hand to be able to press it comfortably with either the thumb or the pinky from resting position. In fact, installing a rotary encoder there is a common move among Elora users and I guarantee you that activating Control by holding down a rotary encoder does not spark joy. Instead, let's employ a popular trick that involves remapping the current Caps Lock key, which is positioned at a comfortable position on the keyboard, to Control.
78
79We can go further though; a variant of this trick makes the Control key produce Escape when tapped. This is called a “modtap”. There is no use to tapping Control by itself without chording it with another key and there is no use to holding down the Esc key so why not combine the two into a single key?
80
81All of this leaves us with three blank keys.
82
83```
84,-------------------------------------------. ,-------------------------------------------.
85| Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Esc |
86|--------+------+------+------+------+------| |------+------+------+------+------+--------|
87| Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp |
88|--------+------+------+------+------+------| |------+------+------+------+------+--------|
89|Ctrl/Esc| A | S | D | F | G | | H | J | K | L | ; : | ' " |
90|--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
91| LShift | Z | X | C | V | B | [ { | | | | ] } | N | M | , < | . > | / ? | RShift |
92`--------+-------------+--------------------+------+------| |------+------+--------------------+------+---------------'
93 | | LGUI | LAlt | Space| Nav | | Sym | Space| AltGr| RGUI | Menu |
94 | | | | | | | | | | | |
95 `----------------------------------' '----------------------------------'
96```
97
98These keys are not easily reachable while touch typing (that is, not reachable without picking up your hand) and should thus be associated with functions that you are not likely to be typed within a stream of text. The idea is that if you have to pick up your hand to hit a key, you want it to be at a time when you are likely to be pausing your interaction with the machine, rather than in the midst of a flurry of typing. They're thus well suited for accessing the adjust layer and the function layer. We can also toss in Caps Lock even though it is an editing-type function that gets used within a stream of text because shouting in ALL-CAPS should be a deliberate action.
99
100```
101,-------------------------------------------. ,-------------------------------------------.
102| Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Esc |
103|--------+------+------+------+------+------| |------+------+------+------+------+--------|
104| Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp |
105|--------+------+------+------+------+------| |------+------+------+------+------+--------|
106|Ctrl/Esc| A | S | D | F | G | | H | J | K | L | ; : | ' " |
107|--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
108| LShift | Z | X | C | V | B | [ { |CapsLk| |F-keys| ] } | N | M | , < | . > | / ? | RShift |
109`----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
110 |Adjust| LGUI | LAlt | Space| Nav | | Sym | Space| AltGr| RGUI | Menu |
111 | | | | | | | | | | | |
112 `----------------------------------' `----------------------------------'
113```
114
115The next glaring issue is the absence of an Enter key on the current base layer this far. Enter is a very frequently used key so it deserves to be placed at a good spot in the keymap. The best way to insert it in the keymap with minimal changes to the current layout is to use modtaps. A tempting solution is to turn the <kbd>RShift</kbd> key into a <kbd>RShift/Enter</kbd> modtap but that can result in chat messages sent too frustratingly early when you're not used to it. Using GUI is also sub-optimal because tapping the GUI modifier actually has a use as opposed to taps of the Control or the Shift key. Pressing and releasing the GUI key by itself opens the App menu in many desktop environments. The natural choice is thus <kbd>LAlt/Enter</kbd>. That way, Enter is 1u away from resting thumb position and is unlikely to get accidentally activated because Alt is very rarely used in the midst of prose.
116
117Finally, we're one Quality-Of-Life update away from the actual base layer. <kbd>Ctrl/' "</kbd> not only preserves symmetry in the keymap with <kbd>Ctrl/Esc</kbd> but also helps balance the load between your pinkies and invites you to use both hands instead of contortions. Perhaps more importantly, it also frees you from the necessity of picking up your hand, breaking touch typing position and pressing a pinky key with your ring finger in order to execute Ctrl+A or Ctrl+Z. That becomes even more important on a board with such an aggressive pinky columnar stagger like the Elora.
118
119
120```
121,-------------------------------------------. ,-------------------------------------------.
122| Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Esc |
123|--------+------+------+------+------+------| |------+------+------+------+------+--------|
124| Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp |
125|--------+------+------+------+------+------| |------+------+------+------+------+--------|
126|Ctrl/Esc| A | S | D | F | G | | H | J | K | L | ; : |Ctrl/' "|
127|--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
128| LShift | Z | X | C | V | B | [ { |CapsLk| |F-keys| ] } | N | M | , < | . > | / ? | RShift |
129`----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
130 |Adjust| LGUI | LAlt/| Space| Nav | | Sym | Space| AltGr| RGUI | Menu |
131 | | | Enter| | | | | | | | |
132 `----------------------------------' `----------------------------------'
133```
134
135</details>
136
137## Navigation layer
138
139```
140Nav Layer: Media, navigation
141
142,-------------------------------------------. ,-------------------------------------------.
143| | | | | | | | | | | | | |
144|--------+------+------+------+------+------| |------+------+------+------+------+--------|
145| | | | | | | | PgUp | Home | ↑ | End | VolUp| Delete |
146|--------+------+------+------+------+------| |------+------+------+------+------+--------|
147| | GUI | Alt | Ctrl | Shift| | | PgDn | ← | ↓ | → | VolDn| Insert |
148|--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
149| | | | | | | |ScLck | | | | Pause|M Prev|M Play|M Next|VolMut| PrtSc |
150`----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
151 | | | | | | | | | | | |
152 | | | | | | | | | | | |
153 `----------------------------------' `----------------------------------'
154```
155
156This is where you'll find all the keys that are generally between the main block of a classic keyboard and the numpad in addition to media controls and modifiers on easy access on the home row for fast and comfortable chording with navigation keys.
157
158Useful mnemonics:
159- “GACS” to remember the order of the modifiers on the left-hand home row
160- <kbd>Scroll Lock</kbd> is on the same key as <kbd>Caps Lock</kbd> because they're both locks
161- <kbd>Delete</kbd> is on the same key as <kbd>Backspace</kbd> because they both erase characters
162- <kbd>Home</kbd> is the leftmost position on the current line so it is above <kbd>←</kbd>. Same logic applies for <kbd>End</kbd>.
163- <kbd>Media Previous</kbd> = ⏮, <kbd>Media Next</kbd> = ⏭
164- <kbd>Page Up</kbd>, <kbd>Page Down</kbd> and <kbd>Volume Up</kbd>, <kbd>Volume Down</kbd> are positioned like the main <kbd>Up</kbd> and <kbd>Down</kbd> keys.
165
166## Sym layer
167```
168Sym Layer: Numbers, symbols
169
170,-------------------------------------------. ,-------------------------------------------.
171| | | | | | | | | | | | | |
172|--------+------+------+------+------+------| |------+------+------+------+------+--------|
173| ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | = |
174|--------+------+------+------+------+------| |------+------+------+------+------+--------|
175| ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | + |
176|--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
177| | | \ | : | ; | - | [ | { | | | | } | ] | _ | , | . | / | ? |
178`----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
179 | | | | | | | | | | | |
180 | | | | | | | | | | | |
181 `----------------------------------' `----------------------------------'
182```
183The top row is the unshifted num row, the home row of the layer is the shifted num row and the bottom row contains the hyphen `-` and the underscore `_` on the best lower row spot because of how frequent they are as well as redundant symbols that are already present on the base layer but are reproduced here to avoid juggling back and forth between base, shift, and sym when typing a string of symbols.
184
185The layout of the first two rows needs no introduction, you're already used to them but it's worth looking into the structure of the bottom row.
186
187The two halves are mirrored in a sense. On the right, you can find <kbd>,</kbd> <kbd>.</kbd> <kbd>/</kbd> at their usual spots with the addition of <kbd>Shift</kbd>+<kbd>/</kbd>=<kbd>?</kbd> to the right of the <kbd>/</kbd> key to remove the need to press simultaneously <kbd>Sym</kbd> and a <kbd>Shift</kbd> key to access `?`.
188
189Now, if you look at the left side, you'll notice that the mirror of <kbd>,</kbd> is <kbd>;</kbd>, the mirror of <kbd>.</kbd> is <kbd>:</kbd> and the mirror of <kbd>/</kbd> is <kbd>\\</kbd>. The same logic used for <kbd>Shift</kbd>+<kbd>/</kbd>=<kbd>?</kbd> also applies to <kbd>Shift</kbd>+<kbd>\\</kbd>=<kbd>|</kbd>.
190
191In case you wish to combine <kbd>Shift</kbd> with a symbol key anyways, you can hold down <kbd>Shift</kbd> on the base layer with your pinky, activate <kbd>Sym</kbd> with your right thumb and while still holding down the <kbd>Shift</kbd> key, tap your desired symbol key. Same thing if you need <kbd>Ctrl</kbd>+<kbd>Digit</kbd>.
192
193## Function layer
194```
195Function Layer: Function keys
196
197,-------------------------------------------. ,-------------------------------------------.
198| | | | | | | | | | | | | |
199|--------+------+------+------+------+------| |------+------+------+------+------+--------|
200| | F9 | F10 | F11 | F12 | | | | | | | | |
201|--------+------+------+------+------+------| |------+------+------+------+------+--------|
202| | F5 | F6 | F7 | F8 | | | | Shift| Ctrl | Alt | GUI | |
203|--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
204| | F1 | F2 | F3 | F4 | | | | | | | | | | | | |
205`----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
206 | | | | | | | | | | | |
207 | | | | | | | | | | | |
208 `----------------------------------' `----------------------------------'
209```
210In a similar fashion to the nav layer, pressing down `FKEYS` with the right thumb enables a numpad of function keys on the opposite hand and modifiers on the right-hand home row. Once again, mirror symmetry is leveraged in this keymap for the order of the right-hand modifiers.
211
212The <kbd>Alt</kbd> modifier, despite being situated on the right half of the keyboard is *not* `KC_RALT`, it is `KC_LALT`. `KC_RALT` is actually the <kbd>AltGr</kbd> key which generally acts very differently to the left <kbd>Alt</kbd> key. Keyboard shortcuts involving <kbd>AltGr</kbd>+<kbd>F#</kbd> are rare and infrequent as opposed to the much more common <kbd>Alt</kbd>+<kbd>F#</kbd> shortcuts. Consequently, `KC_LALT` was chosen for the function layer.
213
214Since there are more than 10 function keys, the cluster of F-keys does not follow the usual 3×3+1 numpad arrangement.
215
216
217## Adjust layer
218```
219Adjust Layer: Default layer settings, RGB
220
221,-------------------------------------------. ,-------------------------------------------.
222| | | | | | | | | | | | | |
223|--------+------+------+------+------+------| |------+------+------+------+------+--------|
224| | | |QWERTY| | | | | | | | | |
225|--------+------+------+------+------+------| |------+------+------+------+------+--------|
226| | | |Dvorak| | | | TOG | SAI | HUI | VAI | MOD | |
227|--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
228| | | |Colmak| | | | | | | | | SAD | HUD | VAD | RMOD | |
229`----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
230 | | | | | | | | | | | |
231 | | | | | | | | | | | |
232 `----------------------------------' `----------------------------------'
233```
234
235Default layer settings on the left and various RGB underglow controls on the right.
236
237The default layer settings are lined up on the middle finger column because the home middle finger key is <kbd>D</kbd> on QWERTY (like the “D” in “Dvorak”) and the lower middle finger key is <kbd>C</kbd> on QWERTY (like the “C” in “Colemak”). I can hear you say that “QWERTY” doesn't start with “E” but Dvorak and Colemak were already aligned in a column so the QWERTY may as well join the formation.
238
239NOTE: The default layer settings set by those keys are *NOT* stored in EEPROM and thus do not persist through boots. If you wish to change the default layer in a non-volatile manner, either change the order of the layers in the firmware, for example like so if you want to set Dvorak as the new default:
240```c
241enum layers {
242 _DVORAK = 0,
243 _QWERTY,
244 _COLEMAK_DH,
245 _NAV,
246 _SYM,
247 _FUNCTION,
248 _ADJUST
249};
250```
251or re-define the `QWERTY`, `COLEMAK` and `DVORAK` keys to point to custom keycodes starting on `SAFE_RANGE` and calling the `set_single_persistent_default_layer` function inside of `process_record_user`.
252
253## Hardware Features
254
255### Rotary Encoder
256The left rotary encoder is programmed to control the volume whereas the right encoder sends <kbd>PgUp</kbd> or <kbd>PgDn</kbd> on every turn.
257
258## Going further…
259
260This default keymap can be used as is, unchanged, as a daily driver for your Elora but you're invited to treat your keymap like a bonsai. At the beginning, it's just like the default keymap but from time to time, you can tweak it a little. Cut a little key here, let another combo grow there. Slowly but surely it will be a unique keymap that will fit you like a glove.
261
262Check out the #keymap-ideas channel on the official SplitKB Discord server for inspiration.
diff --git a/keyboards/splitkb/halcyon/elora/keymaps/default/rules.mk b/keyboards/splitkb/halcyon/elora/keymaps/default/rules.mk
new file mode 100644
index 0000000000..ee32568148
--- /dev/null
+++ b/keyboards/splitkb/halcyon/elora/keymaps/default/rules.mk
@@ -0,0 +1 @@
ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/splitkb/halcyon/elora/readme.md b/keyboards/splitkb/halcyon/elora/readme.md
new file mode 100644
index 0000000000..9970d31f43
--- /dev/null
+++ b/keyboards/splitkb/halcyon/elora/readme.md
@@ -0,0 +1,31 @@
1# Halcyon Elora
2
3![splitkb/halcyon/elora](https://i.imgur.com/TbFWzsh.png)
4
5The Halcyon Elora rev2 is the second Elora revision and the second keyboard in our Halcyon range. Similar to Aurora, all keyboards in the series share the same feature set. The key highlights:
6
7- Halcyon keyboards come preassembled! You won't need a soldering iron.
8- You'll be able to install [VIK](https://github.com/sadekbaroudi/vik) modules.
9- It'll come fully documented, which includes the unboxing, assembly (with only a screwdriver), first installation and some advanced use cases.
10- Both the connection to the host device as well as the interconnect between the keyboard halves use USB C.
11- The controller has full ESD protection on all USB C ports, as well as all switch matrix GPIO!
12- The controller is interchangable. If part of your keyboard ever breaks, we can replace just the bits that need replacing.
13
14* Keyboard Maintainer: [splitkb.com](https://github.com/splitkb.com)
15* Hardware Availability: [splitkb.com](https://splitkb.com).
16
17Make example for this keyboard (after setting up your build environment):
18
19 make splitkb/halcyon/elora/rev2:default
20
21The keyboard can be flashed by copying the resulting `.uf2` file onto the `RPI-RP2` flash drive.
22
23See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
24
25## Bootloader
26
27Enter the bootloader in 3 ways:
28
29* **Reset button**: Double-tap the reset button at the top of the controller, right above the USB-C port.
30* **Bootloader reset**: Hold down the "Boot" button and plug in the keyboard.
31* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available. \ No newline at end of file
diff --git a/keyboards/splitkb/halcyon/elora/rev2/config.h b/keyboards/splitkb/halcyon/elora/rev2/config.h
new file mode 100644
index 0000000000..b5cd6f95f2
--- /dev/null
+++ b/keyboards/splitkb/halcyon/elora/rev2/config.h
@@ -0,0 +1,32 @@
1// Copyright 2025 splitkb.com (support@splitkb.com)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#pragma once
5
6// Make it easier to enter the bootloader
7#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
8#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U
9
10// UART1, communication between the two halves
11#define SERIAL_USART_FULL_DUPLEX // Enable full duplex operation mode.
12#define SERIAL_USART_TX_PIN GP28 // USART TX pin
13#define SERIAL_USART_RX_PIN GP29 // USART RX pin
14#define SERIAL_PIO_USE_PIO1 // Use PIO1 as PIO0 is used for WS2812 driver
15
16// VBUS detection
17#define USB_VBUS_PIN GP1
18
19//// VIK
20
21// GPIO1 = GP27
22// GPIO2 = GP26
23// CS = GP13
24
25#define I2C_DRIVER I2C0
26#define I2C1_SDA_PIN GP16
27#define I2C1_SCL_PIN GP17
28
29#define SPI_DRIVER SPID1
30#define SPI_SCK_PIN GP14
31#define SPI_MOSI_PIN GP15
32#define SPI_MISO_PIN GP12
diff --git a/keyboards/splitkb/halcyon/elora/rev2/halconf.h b/keyboards/splitkb/halcyon/elora/rev2/halconf.h
new file mode 100644
index 0000000000..fd95e15f83
--- /dev/null
+++ b/keyboards/splitkb/halcyon/elora/rev2/halconf.h
@@ -0,0 +1,14 @@
1// Copyright 2025 splitkb.com (support@splitkb.com)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#pragma once
5
6//// VIK
7
8#define HAL_USE_I2C TRUE
9
10#define HAL_USE_SPI TRUE
11#define SPI_USE_WAIT TRUE
12#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
13
14#include_next <halconf.h>
diff --git a/keyboards/splitkb/halcyon/elora/rev2/keyboard.json b/keyboards/splitkb/halcyon/elora/rev2/keyboard.json
new file mode 100644
index 0000000000..c2dc711f07
--- /dev/null
+++ b/keyboards/splitkb/halcyon/elora/rev2/keyboard.json
@@ -0,0 +1,177 @@
1{
2 "keyboard_name": "Halcyon Elora rev2",
3 "bootloader": "rp2040",
4 "diode_direction": "COL2ROW",
5 "encoder": {
6 "rotary": [
7 {"pin_a": "GP22", "pin_b": "GP18", "resolution": 2}
8 ]
9 },
10 "features": {
11 "encoder": true,
12 "extrakey": true,
13 "mousekey": true,
14 "nkro": true,
15 "rgb_matrix": true
16 },
17 "matrix_pins": {
18 "cols": ["GP24", "GP19", "GP20", "GP25", "GP4", "GP9", "GP10"],
19 "rows": ["GP8", "GP11", "GP7", "GP6", "GP5"]
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 "gradient_left_right": true,
42 "gradient_up_down": true,
43 "hue_breathing": true,
44 "hue_pendulum": true,
45 "hue_wave": true,
46 "jellybean_raindrops": true,
47 "multisplash": true,
48 "pixel_flow": true,
49 "pixel_fractal": true,
50 "pixel_rain": true,
51 "rainbow_beacon": true,
52 "rainbow_moving_chevron": true,
53 "rainbow_pinwheels": true,
54 "raindrops": true,
55 "solid_color": true,
56 "solid_multisplash": true,
57 "solid_reactive": true,
58 "solid_reactive_cross": true,
59 "solid_reactive_multicross": true,
60 "solid_reactive_multinexus": true,
61 "solid_reactive_multiwide": true,
62 "solid_reactive_nexus": true,
63 "solid_reactive_simple": true,
64 "solid_reactive_wide": true,
65 "solid_splash": true,
66 "splash": true,
67 "typing_heatmap": true
68 },
69 "driver": "ws2812",
70 "layout": [
71 {"x": 75, "y": 2, "flags": 2},
72 {"x": 50, "y": 1, "flags": 2},
73 {"x": 14, "y": 4, "flags": 2},
74 {"x": 25, "y": 45, "flags": 2},
75 {"x": 58, "y": 49, "flags": 2},
76 {"x": 94, "y": 53, "flags": 2},
77 {"matrix": [4, 0], "x": 94, "y": 64, "flags": 4},
78 {"matrix": [4, 5], "x": 79, "y": 61, "flags": 4},
79 {"matrix": [4, 1], "x": 65, "y": 55, "flags": 4},
80 {"matrix": [4, 2], "x": 51, "y": 52, "flags": 4},
81 {"matrix": [4, 4], "x": 36, "y": 52, "flags": 4},
82 {"matrix": [3, 0], "x": 101, "y": 52, "flags": 4},
83 {"matrix": [4, 3], "x": 87, "y": 49, "flags": 4},
84 {"matrix": [3, 1], "x": 72, "y": 43, "flags": 4},
85 {"matrix": [3, 2], "x": 58, "y": 40, "flags": 4},
86 {"matrix": [3, 3], "x": 43, "y": 37, "flags": 4},
87 {"matrix": [3, 4], "x": 29, "y": 40, "flags": 4},
88 {"matrix": [3, 5], "x": 14, "y": 46, "flags": 4},
89 {"matrix": [3, 6], "x": 0, "y": 46, "flags": 4},
90 {"matrix": [2, 1], "x": 72, "y": 30, "flags": 4},
91 {"matrix": [2, 2], "x": 58, "y": 27, "flags": 4},
92 {"matrix": [2, 3], "x": 43, "y": 24, "flags": 4},
93 {"matrix": [2, 4], "x": 29, "y": 27, "flags": 4},
94 {"matrix": [2, 5], "x": 14, "y": 34, "flags": 4},
95 {"matrix": [2, 6], "x": 0, "y": 34, "flags": 4},
96 {"matrix": [1, 1], "x": 72, "y": 18, "flags": 4},
97 {"matrix": [1, 2], "x": 58, "y": 15, "flags": 4},
98 {"matrix": [1, 3], "x": 43, "y": 12, "flags": 4},
99 {"matrix": [1, 4], "x": 29, "y": 15, "flags": 4},
100 {"matrix": [1, 5], "x": 14, "y": 21, "flags": 4},
101 {"matrix": [1, 6], "x": 0, "y": 21, "flags": 4},
102 {"matrix": [0, 1], "x": 72, "y": 6, "flags": 4},
103 {"matrix": [0, 2], "x": 48, "y": 3, "flags": 4},
104 {"matrix": [0, 3], "x": 43, "y": 0, "flags": 4},
105 {"matrix": [0, 4], "x": 29, "y": 3, "flags": 4},
106 {"matrix": [0, 5], "x": 14, "y": 9, "flags": 4},
107 {"matrix": [0, 6], "x": 0, "y": 9, "flags": 4},
108 {"x": 149, "y": 2, "flags": 2},
109 {"x": 174, "y": 1, "flags": 2},
110 {"x": 210, "y": 4, "flags": 2},
111 {"x": 199, "y": 45, "flags": 2},
112 {"x": 166, "y": 49, "flags": 2},
113 {"x": 130, "y": 53, "flags": 2},
114 {"matrix": [9, 0], "x": 130, "y": 64, "flags": 4},
115 {"matrix": [9, 5], "x": 145, "y": 61, "flags": 4},
116 {"matrix": [9, 1], "x": 159, "y": 55, "flags": 4},
117 {"matrix": [9, 2], "x": 173, "y": 52, "flags": 4},
118 {"matrix": [9, 4], "x": 188, "y": 52, "flags": 4},
119 {"matrix": [8, 0], "x": 123, "y": 52, "flags": 4},
120 {"matrix": [9, 3], "x": 137, "y": 49, "flags": 4},
121 {"matrix": [8, 1], "x": 152, "y": 43, "flags": 4},
122 {"matrix": [8, 2], "x": 166, "y": 40, "flags": 4},
123 {"matrix": [8, 3], "x": 181, "y": 37, "flags": 4},
124 {"matrix": [8, 4], "x": 195, "y": 40, "flags": 4},
125 {"matrix": [8, 5], "x": 210, "y": 46, "flags": 4},
126 {"matrix": [8, 6], "x": 224, "y": 46, "flags": 4},
127 {"matrix": [7, 1], "x": 152, "y": 30, "flags": 4},
128 {"matrix": [7, 2], "x": 166, "y": 27, "flags": 4},
129 {"matrix": [7, 3], "x": 181, "y": 24, "flags": 4},
130 {"matrix": [7, 4], "x": 195, "y": 27, "flags": 4},
131 {"matrix": [7, 5], "x": 210, "y": 34, "flags": 4},
132 {"matrix": [7, 6], "x": 224, "y": 34, "flags": 4},
133 {"matrix": [6, 1], "x": 152, "y": 18, "flags": 4},
134 {"matrix": [6, 2], "x": 166, "y": 15, "flags": 4},
135 {"matrix": [6, 3], "x": 181, "y": 12, "flags": 4},
136 {"matrix": [6, 4], "x": 195, "y": 15, "flags": 4},
137 {"matrix": [6, 5], "x": 210, "y": 21, "flags": 4},
138 {"matrix": [6, 6], "x": 224, "y": 21, "flags": 4},
139 {"matrix": [5, 1], "x": 152, "y": 6, "flags": 4},
140 {"matrix": [5, 2], "x": 166, "y": 3, "flags": 4},
141 {"matrix": [5, 3], "x": 181, "y": 0, "flags": 4},
142 {"matrix": [5, 4], "x": 195, "y": 3, "flags": 4},
143 {"matrix": [5, 5], "x": 210, "y": 9, "flags": 4},
144 {"matrix": [5, 6], "x": 224, "y": 9, "flags": 4}
145 ],
146 "max_brightness": 128,
147 "sleep": true,
148 "split_count": [37, 37]
149 },
150 "split": {
151 "enabled": true,
152 "handedness": {
153 "pin": "GP23"
154 },
155 "matrix_pins": {
156 "right": {
157 "cols": ["GP10", "GP9", "GP4", "GP25", "GP20", "GP19", "GP24"],
158 "rows": ["GP8", "GP11", "GP7", "GP6", "GP5"]
159 }
160 },
161 "serial": {
162 "driver": "vendor"
163 },
164 "transport": {
165 "sync": {
166 "matrix_state": true
167 }
168 }
169 },
170 "usb": {
171 "pid": "0xA392"
172 },
173 "ws2812": {
174 "driver": "vendor",
175 "pin": "GP3"
176 }
177}
diff --git a/keyboards/splitkb/halcyon/elora/rev2/mcuconf.h b/keyboards/splitkb/halcyon/elora/rev2/mcuconf.h
new file mode 100644
index 0000000000..126697a4a0
--- /dev/null
+++ b/keyboards/splitkb/halcyon/elora/rev2/mcuconf.h
@@ -0,0 +1,14 @@
1// Copyright 2025 splitkb.com (support@splitkb.com)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#pragma once
5
6#include_next <mcuconf.h>
7
8//// VIK
9
10#undef RP_I2C_USE_I2C0
11#define RP_I2C_USE_I2C0 TRUE
12
13#undef RP_SPI_USE_SPI1
14#define RP_SPI_USE_SPI1 TRUE
diff --git a/keyboards/splitkb/halcyon/elora/rev2/rev2.c b/keyboards/splitkb/halcyon/elora/rev2/rev2.c
new file mode 100644
index 0000000000..e0a64ae9a4
--- /dev/null
+++ b/keyboards/splitkb/halcyon/elora/rev2/rev2.c
@@ -0,0 +1,28 @@
1// Copyright 2025 splitkb.com (support@splitkb.com)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#include "quantum.h"
5
6#ifdef ENCODER_ENABLE
7bool encoder_update_kb(uint8_t index, bool clockwise) {
8 if (!encoder_update_user(index, clockwise)) {
9 return false;
10 }
11 if (index == 0) {
12 // Volume control
13 if (clockwise) {
14 tap_code(KC_VOLU);
15 } else {
16 tap_code(KC_VOLD);
17 }
18 } else if (index == 1) {
19 // Page up/Page down
20 if (clockwise) {
21 tap_code(KC_PGDN);
22 } else {
23 tap_code(KC_PGUP);
24 }
25 }
26 return false;
27}
28#endif