diff --git a/keyboards/nachie/evelyn/config.h b/keyboards/nachie/evelyn/config.h
new file mode 100755
index 0000000000..e52c3797b5
--- /dev/null
+++ b/keyboards/nachie/evelyn/config.h
@@ -0,0 +1,29 @@
+/*
+Copyright 2024 nachie
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#pragma once
+
+//#include "config_common.h"
+#define RP2040_FLASH_GENERIC_03H
+
+/* key matrix size */
+#define MATRIX_ROWS 7
+#define MATRIX_COLS 6
+
+#define DEBUG_MATRIX_SCAN_RATE
+#define DEBUG_ACTION
+
+#define VIA_CUSTOM_LIGHTING_ENABLE
diff --git a/keyboards/nachie/evelyn/info.json b/keyboards/nachie/evelyn/info.json
new file mode 100644
index 0000000000..7b0c80d08e
--- /dev/null
+++ b/keyboards/nachie/evelyn/info.json
@@ -0,0 +1,87 @@
+{
+ "manufacturer": "nachie",
+ "keyboard_name": "Syndrome",
+ "maintainer": "nachie",
+ "board": "GENERIC_RP_RP2040",
+ "bootloader": "rp2040",
+ "processor": "RP2040",
+ "url": "https://littlecraftery.com/products/evelyn",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": false,
+ "audio": false,
+ "backlight": false,
+ "rgb_matrix": false,
+ "rgblight": false,
+ "encoder": true
+ },
+ "dynamic_keymap": {
+ "layer_count": 4
+ },
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x4B43",
+ "vid": "0x6F75"
+ },
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": ["GP19", "GP18", "GP16", "GP7", "GP22", "GP2"],
+ "rows": ["GP24", "GP23", "GP25", "GP26", "GP20", "GP21", "GP17"]
+ },
+ "encoder": {
+ "enabled": true,
+ "rotary": [
+ { "pin_a": "GP12", "pin_b": "GP13", "resolution": 2 },
+ { "pin_a": "GP0", "pin_b": "GP1", "resolution": 2 },
+ { "pin_a": "GP27", "pin_b": "GP28", "resolution": 2 }
+ ]
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"y": 0.0, "x": 0.29, "matrix": [0, 0], "label": "0,0"},
+ {"y": 0.0, "x": 10.190000000000001, "matrix": [1, 4], "label": "1,4"},
+ {"y": 0.0, "x": 11.190000000000001, "matrix": [0, 5], "label": "0,5"},
+ {"y": 0.99, "x": 0.15, "matrix": [2, 0], "w": 1.25, "label": "2,0"},
+ {"y": 0.99, "x": 10.58, "matrix": [2, 5], "w": 1.75, "label": "2,5"},
+ {"y": 1.99, "x": 0.0, "matrix": [4, 0], "w": 1.75, "label": "4,0"},
+ {"y": 2.99, "x": 0.09000000000000001, "matrix": [6, 0], "w": 1.25, "label": "6,0"},
+ {"y": 6.23, "x": 3.97, "matrix": [5, 4], "w": 1.25, "label": "5,4"},
+ {"y": 6.23, "x": 5.220000000000001, "matrix": [4, 5], "label": "4,5"},
+ {"y": 7.23, "x": 4.87, "matrix": [6, 5], "w": 1.25, "label": "6,5"},
+ {"y": 8.23, "x": 1.43, "matrix": [1, 0], "label": "1,0"},
+ {"y": 8.23, "x": 2.43, "matrix": [0, 1], "label": "0,1"},
+ {"y": 8.23, "x": 3.43, "matrix": [1, 1], "label": "1,1"},
+ {"y": 8.23, "x": 4.430000000000001, "matrix": [0, 2], "label": "0,2"},
+ {"y": 9.23, "x": 1.68, "matrix": [3, 0], "label": "3,0"},
+ {"y": 9.23, "x": 2.68, "matrix": [2, 1], "label": "2,1"},
+ {"y": 9.23, "x": 3.68, "matrix": [3, 1], "label": "3,1"},
+ {"y": 9.23, "x": 4.680000000000001, "matrix": [2, 2], "label": "2,2"},
+ {"y": 10.23, "x": 2.18, "matrix": [5, 0], "label": "5,0"},
+ {"y": 10.23, "x": 3.18, "matrix": [4, 1], "label": "4,1"},
+ {"y": 10.23, "x": 4.180000000000001, "matrix": [5, 1], "label": "5,1"},
+ {"y": 10.23, "x": 5.180000000000001, "matrix": [4, 2], "label": "4,2"},
+ {"y": 11.23, "x": 2.93, "matrix": [6, 1], "label": "6,1"},
+ {"y": 11.23, "x": 3.93, "matrix": [6, 2], "w": 2.25, "label": "6,2"},
+ {"y": 9.89, "x": 5.930000000000001, "matrix": [1, 2], "label": "1,2"},
+ {"y": 9.89, "x": 6.930000000000001, "matrix": [0, 3], "label": "0,3"},
+ {"y": 9.89, "x": 7.930000000000001, "matrix": [1, 3], "label": "1,3"},
+ {"y": 9.89, "x": 8.93, "matrix": [0, 4], "label": "0,4"},
+ {"y": 10.89, "x": 6.180000000000001, "matrix": [3, 2], "label": "3,2"},
+ {"y": 10.89, "x": 7.180000000000001, "matrix": [2, 3], "label": "2,3"},
+ {"y": 10.89, "x": 8.18, "matrix": [3, 3], "label": "3,3"},
+ {"y": 10.89, "x": 9.18, "matrix": [2, 4], "label": "2,4"},
+ {"y": 11.89, "x": 5.680000000000001, "matrix": [5, 2], "label": "5,2"},
+ {"y": 11.89, "x": 6.680000000000001, "matrix": [4, 3], "label": "4,3"},
+ {"y": 11.89, "x": 7.680000000000001, "matrix": [5, 3], "label": "5,3"},
+ {"y": 11.89, "x": 8.68, "matrix": [4, 4], "label": "4,4"},
+ {"y": 12.89, "x": 5.680000000000001, "matrix": [6, 3], "w": 2, "label": "6,3"},
+ {"y": 12.89, "x": 7.680000000000001, "matrix": [6, 4], "label": "6,4"}
+ ]
+ }
+ }
+}
diff --git a/keyboards/nachie/evelyn/keyboard.json b/keyboards/nachie/evelyn/keyboard.json
new file mode 100644
index 0000000000..61d598a52b
--- /dev/null
+++ b/keyboards/nachie/evelyn/keyboard.json
@@ -0,0 +1,87 @@
+{
+ "manufacturer": "nachie",
+ "keyboard_name": "Syndrome",
+ "maintainer": "nachie",
+ "board": "GENERIC_RP_RP2040",
+ "bootloader": "rp2040",
+ "processor": "RP2040",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "rgb_matrix": false
+ },
+ "dynamic_keymap": {
+ "layer_count": 4
+ },
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x4B43",
+ "vid": "0x6F75"
+ },
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": ["GP19", "GP18", "GP16", "GP7", "GP22", "GP2"],
+ "rows": ["GP24", "GP23", "GP25", "GP26", "GP20", "GP21", "GP17"]
+ },
+ "encoder": {
+ "enabled": true,
+ "rotary": [
+ { "pin_a": "GP12", "pin_b": "GP13", "resolution": 2 },
+ { "pin_a": "GP0", "pin_b": "GP1", "resolution": 2 },
+ { "pin_a": "GP27", "pin_b": "GP28", "resolution": 2 }
+ ]
+ },
+ "qmk": {
+ "locking": {
+ "enabled": true,
+ "resync": true
+ }
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"y": 0.0, "x": 0.29, "matrix": [0, 0], "label": "0,0"},
+ {"y": 0.0, "x": 10.190000000000001, "matrix": [1, 4], "label": "1,4"},
+ {"y": 0.0, "x": 11.190000000000001, "matrix": [0, 5], "label": "0,5"},
+ {"y": 0.99, "x": 0.15, "matrix": [2, 0], "w": 1.25, "label": "2,0"},
+ {"y": 0.99, "x": 10.58, "matrix": [2, 5], "w": 1.75, "label": "2,5"},
+ {"y": 1.99, "x": 0.0, "matrix": [4, 0], "w": 1.75, "label": "4,0"},
+ {"y": 2.99, "x": 0.09000000000000001, "matrix": [6, 0], "w": 1.25, "label": "6,0"},
+ {"y": 6.23, "x": 3.97, "matrix": [5, 4], "w": 1.25, "label": "5,4"},
+ {"y": 6.23, "x": 5.220000000000001, "matrix": [4, 5], "label": "4,5"},
+ {"y": 7.23, "x": 4.87, "matrix": [6, 5], "w": 1.25, "label": "6,5"},
+ {"y": 8.23, "x": 1.43, "matrix": [1, 0], "label": "1,0"},
+ {"y": 8.23, "x": 2.43, "matrix": [0, 1], "label": "0,1"},
+ {"y": 8.23, "x": 3.43, "matrix": [1, 1], "label": "1,1"},
+ {"y": 8.23, "x": 4.430000000000001, "matrix": [0, 2], "label": "0,2"},
+ {"y": 9.23, "x": 1.68, "matrix": [3, 0], "label": "3,0"},
+ {"y": 9.23, "x": 2.68, "matrix": [2, 1], "label": "2,1"},
+ {"y": 9.23, "x": 3.68, "matrix": [3, 1], "label": "3,1"},
+ {"y": 9.23, "x": 4.680000000000001, "matrix": [2, 2], "label": "2,2"},
+ {"y": 10.23, "x": 2.18, "matrix": [5, 0], "label": "5,0"},
+ {"y": 10.23, "x": 3.18, "matrix": [4, 1], "label": "4,1"},
+ {"y": 10.23, "x": 4.180000000000001, "matrix": [5, 1], "label": "5,1"},
+ {"y": 10.23, "x": 5.180000000000001, "matrix": [4, 2], "label": "4,2"},
+ {"y": 11.23, "x": 2.93, "matrix": [6, 1], "label": "6,1"},
+ {"y": 11.23, "x": 3.93, "matrix": [6, 2], "w": 2.25, "label": "6,2"},
+ {"y": 9.89, "x": 5.930000000000001, "matrix": [1, 2], "label": "1,2"},
+ {"y": 9.89, "x": 6.930000000000001, "matrix": [0, 3], "label": "0,3"},
+ {"y": 9.89, "x": 7.930000000000001, "matrix": [1, 3], "label": "1,3"},
+ {"y": 9.89, "x": 8.93, "matrix": [0, 4], "label": "0,4"},
+ {"y": 10.89, "x": 6.180000000000001, "matrix": [3, 2], "label": "3,2"},
+ {"y": 10.89, "x": 7.180000000000001, "matrix": [2, 3], "label": "2,3"},
+ {"y": 10.89, "x": 8.18, "matrix": [3, 3], "label": "3,3"},
+ {"y": 10.89, "x": 9.18, "matrix": [2, 4], "label": "2,4"},
+ {"y": 11.89, "x": 5.680000000000001, "matrix": [5, 2], "label": "5,2"},
+ {"y": 11.89, "x": 6.680000000000001, "matrix": [4, 3], "label": "4,3"},
+ {"y": 11.89, "x": 7.680000000000001, "matrix": [5, 3], "label": "5,3"},
+ {"y": 11.89, "x": 8.68, "matrix": [4, 4], "label": "4,4"},
+ {"y": 12.89, "x": 5.680000000000001, "matrix": [6, 3], "w": 2, "label": "6,3"},
+ {"y": 12.89, "x": 7.680000000000001, "matrix": [6, 4], "label": "6,4"}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/nachie/evelyn/keymaps/default/keymap.c b/keyboards/nachie/evelyn/keymaps/default/keymap.c
new file mode 100755
index 0000000000..43266d2051
--- /dev/null
+++ b/keyboards/nachie/evelyn/keymaps/default/keymap.c
@@ -0,0 +1,27 @@
+/*
+Copyright 2024 nachie
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* QWERTY */
+ LAYOUT(
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT,
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_DOT, KC_LSFT, MO(1),
+ KC_LCTL, KC_LGUI, KC_SPC, KC_SPC, KC_RGUI, MO(1))
+};
diff --git a/keyboards/nachie/evelyn/keymaps/default/readme.md b/keyboards/nachie/evelyn/keymaps/default/readme.md
new file mode 100644
index 0000000000..80a227e25e
--- /dev/null
+++ b/keyboards/nachie/evelyn/keymaps/default/readme.md
@@ -0,0 +1 @@
+The default keymap for the Evelyn.
\ No newline at end of file
diff --git a/keyboards/nachie/evelyn/keymaps/vial/config.h b/keyboards/nachie/evelyn/keymaps/vial/config.h
new file mode 100644
index 0000000000..bf83820779
--- /dev/null
+++ b/keyboards/nachie/evelyn/keymaps/vial/config.h
@@ -0,0 +1,11 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#pragma once
+
+#define VIAL_KEYBOARD_UID {0x53, 0x01, 0x24, 0xD6, 0x96, 0x84, 0xF2, 0x0F}
+
+#define VIAL_UNLOCK_COMBO_ROWS { 0, 2 }
+#define VIAL_UNLOCK_COMBO_COLS { 0, 5 }
+
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define RGB_MATRIX_KEYPRESSES
\ No newline at end of file
diff --git a/keyboards/nachie/evelyn/keymaps/vial/keymap.c b/keyboards/nachie/evelyn/keymaps/vial/keymap.c
new file mode 100755
index 0000000000..9f58b5accb
--- /dev/null
+++ b/keyboards/nachie/evelyn/keymaps/vial/keymap.c
@@ -0,0 +1,65 @@
+/*
+Copyright 2024 nachie
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+#include
+char wpm_str[10];
+
+enum layer_names {
+ _BASE, // Default Layer
+ _FN, // Fn Layer 1
+ _FN2, // Fn Layer 2
+ _FN3 // Fn Layer 3
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* QWERTY */
+ [_BASE] = LAYOUT(
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT,
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_DOT, KC_LSFT, MO(1),
+ KC_LCTL, KC_LGUI, KC_SPC, KC_SPC, KC_RGUI, MO(1)),
+
+ /* FUNCTION */
+ [_FN] = LAYOUT(
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT,
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_DOT, KC_LSFT, MO(1),
+ KC_LGUI, KC_LGUI, KC_LALT, KC_BSPC, KC_RGUI, MO(1)),
+
+ [_FN2] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______),
+
+ [_FN3] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______)
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
+ [_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [_FN] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD) },
+ [_FN2] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD) },
+ [_FN3] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD) },
+};
+#endif
diff --git a/keyboards/nachie/evelyn/keymaps/vial/readme.md b/keyboards/nachie/evelyn/keymaps/vial/readme.md
new file mode 100644
index 0000000000..c68b8bea09
--- /dev/null
+++ b/keyboards/nachie/evelyn/keymaps/vial/readme.md
@@ -0,0 +1 @@
+The vial keymap for the Evelyn PCB.
\ No newline at end of file
diff --git a/keyboards/nachie/evelyn/keymaps/vial/rules.mk b/keyboards/nachie/evelyn/keymaps/vial/rules.mk
new file mode 100644
index 0000000000..2b08f373bf
--- /dev/null
+++ b/keyboards/nachie/evelyn/keymaps/vial/rules.mk
@@ -0,0 +1,6 @@
+VIA_ENABLE = yes
+VIAL_ENABLE = yes
+
+#VIALRGB_ENABLE = yes
+
+ENCODER_MAP_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/nachie/evelyn/keymaps/vial/vial.json b/keyboards/nachie/evelyn/keymaps/vial/vial.json
new file mode 100644
index 0000000000..4597db1978
--- /dev/null
+++ b/keyboards/nachie/evelyn/keymaps/vial/vial.json
@@ -0,0 +1,213 @@
+{
+ "name": "Syndrome",
+ "vendorId": "0x4B43",
+ "productId": "0x6F75",
+ "matrix": { "rows": 7, "cols": 6 },
+ "layouts": {
+ "labels":[
+ [
+ "Right Shift",
+ "Split Shift",
+ "Full Shift"
+ ],
+ "1.75 Left Space",
+ "1.75 Right Space"
+ ],
+ "keymap": [
+ [
+ {
+ "y": 0.16,
+ "x": 12.25
+ },
+ "1,0\n\n\n\n\n\n\n\n\ne",
+ "1,1\n\n\n\n\n\n\n\n\ne"
+ ],
+ [
+ {
+ "y": -0.9199999999999999,
+ "x": 0.3,
+ "c": "#ffffff",
+ "t": "#2e2525"
+ },
+ "0,0",
+ {
+ "x": 8.9
+ },
+ "1,4",
+ "0,5"
+ ],
+ [
+ {
+ "y": -0.010000000000000009,
+ "x": 0.16,
+ "w": 1.25
+ },
+ "2,0",
+ {
+ "x": 9.18,
+ "w": 1.75
+ },
+ "2,5"
+ ],
+ [
+ {
+ "x": 0.01,
+ "w": 1.75
+ },
+ "4,0"
+ ],
+ [
+ {
+ "y": -0.9899999999999998,
+ "x": 12.73,
+ "w": 2.25
+ },
+ "5,4\n\n\n0,1"
+ ],
+ [
+ {
+ "y": -0.010000000000000231,
+ "x": 0.1,
+ "w": 1.25
+ },
+ "6,0"
+ ],
+ [
+ {
+ "y": 0.6799999999999997,
+ "x": 3.5,
+ "c": "#cccccc",
+ "t": "#000000"
+ },
+ "2,0\n\n\n\n\n\n\n\n\ne",
+ "2,1\n\n\n\n\n\n\n\n\ne",
+ {
+ "x": 0.75
+ },
+ "3,0\n\n\n\n\n\n\n\n\ne",
+ "3,1\n\n\n\n\n\n\n\n\ne"
+ ],
+ [
+ {
+ "rx": 6.25,
+ "y": 2.24,
+ "x": 3.9800000000000004,
+ "c": "#ffffff",
+ "t": "#2e2525",
+ "w": 1.25
+ },
+ "5,4\n\n\n0,0",
+ "4,5\n\n\n0,0"
+ ],
+ [
+ {
+ "x": 4.879999999999999,
+ "w": 1.25
+ },
+ "6,5"
+ ],
+ [
+ {
+ "r": 8,
+ "rx": 0,
+ "x": 1.44
+ },
+ "1,0",
+ "0,1",
+ "1,1",
+ "0,2"
+ ],
+ [
+ {
+ "x": 1.69
+ },
+ "3,0",
+ "2,1",
+ "3,1",
+ "2,2"
+ ],
+ [
+ {
+ "x": 2.19
+ },
+ "5,0",
+ "4,1",
+ "5,1",
+ "4,2"
+ ],
+ [
+ {
+ "x": 2.94
+ },
+ "6,1\n\n\n1,0",
+ {
+ "w": 2.25
+ },
+ "6,2\n\n\n1,0"
+ ],
+ [
+ {
+ "x": 2.94,
+ "t": "#000000",
+ "w": 1.5
+ },
+ "6,1\n\n\n1,1",
+ {
+ "x": 8.881784197001252e-16,
+ "w": 1.75
+ },
+ "6,2\n\n\n1,1"
+ ],
+ [
+ {
+ "r": -8,
+ "y": -3.34,
+ "x": 5.9399999999999995,
+ "t": "#2e2525"
+ },
+ "1,2",
+ "0,3",
+ "1,3",
+ "0,4"
+ ],
+ [
+ {
+ "x": 6.19
+ },
+ "3,2",
+ "2,3",
+ "3,3",
+ "2,4"
+ ],
+ [
+ {
+ "x": 5.69
+ },
+ "5,2",
+ "4,3",
+ "5,3",
+ "4,4"
+ ],
+ [
+ {
+ "x": 5.69,
+ "w": 2
+ },
+ "6,3\n\n\n2,0",
+ "6,4\n\n\n2,0"
+ ],
+ [
+ {
+ "x": 5.69,
+ "t": "#000000",
+ "w": 1.75
+ },
+ "6,3\n\n\n2,1",
+ {
+ "w": 1.25
+ },
+ "6,4\n\n\n2,1"
+ ]
+ ]
+ }
+}
\ No newline at end of file
diff --git a/keyboards/nachie/evelyn/readme.md b/keyboards/nachie/evelyn/readme.md
new file mode 100644
index 0000000000..2259be9671
--- /dev/null
+++ b/keyboards/nachie/evelyn/readme.md
@@ -0,0 +1,23 @@
+# Båge
+
+Firmware for the Båge
+
+* Keyboard Maintainer: [nachie](https://github.com/nachie)
+* Hardware Supported: Båge
+* Hardware Availability: [nachie](https://littlecraftery.com/products/Båge)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make nachie/syndrome:default
+
+Or to make and flash:
+
+ make nachie/syndrome:default:flash
+
+
+See 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).
+
+## Bootloader
+
+* **Bootmagic reset**: Hold down ESC key (top left) and plug in the keyboard
+* **Physical reset button**: Briefly press the button labeled "SW_RST1" on the back of the PCB
diff --git a/keyboards/nachie/evelyn/rules.mk b/keyboards/nachie/evelyn/rules.mk
new file mode 100755
index 0000000000..7ff128fa69
--- /dev/null
+++ b/keyboards/nachie/evelyn/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
\ No newline at end of file
diff --git a/keyboards/nachie/littlewritter/config.h b/keyboards/nachie/littlewritter/config.h
new file mode 100755
index 0000000000..aeedd65f7f
--- /dev/null
+++ b/keyboards/nachie/littlewritter/config.h
@@ -0,0 +1,25 @@
+/*
+Copyright 2024 Nachie
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#pragma once
+
+#define RP2040_FLASH_GENERIC_03H
+
+#ifdef HAPTIC_ENABLE
+#define SOLENOID_PIN GP15
+#endif
+
+#define VIA_CUSTOM_LIGHTING_ENABLE
diff --git a/keyboards/nachie/littlewritter/halconf.h b/keyboards/nachie/littlewritter/halconf.h
new file mode 100644
index 0000000000..7691f8fd28
--- /dev/null
+++ b/keyboards/nachie/littlewritter/halconf.h
@@ -0,0 +1,3 @@
+#pragma once
+
+#include_next
diff --git a/keyboards/nachie/littlewritter/info.json b/keyboards/nachie/littlewritter/info.json
new file mode 100644
index 0000000000..3c55188b27
--- /dev/null
+++ b/keyboards/nachie/littlewritter/info.json
@@ -0,0 +1,148 @@
+{
+ "keyboard_name": "LittleWritter",
+ "manufacturer": "Nachie",
+ "usb": {
+ "vid": "0x4B43",
+ "pid": "0x5358",
+ "device_version": "1.0.0"
+ },
+ "board": "GENERIC_RP_RP2040",
+ "bootloader": "rp2040",
+ "processor": "RP2040",
+ "url": "https://littlecraftery.com/products/little-writter",
+ "maintainer": "nachie",
+ "ws2812": {
+ "pin": "GP29",
+ "driver": "vendor"
+ },
+ "rgb_matrix": {
+ "driver": "ws2812",
+ "led_count": 16,
+ "animations": {
+ "alphas_mods": true,
+ "gradient_up_down": true,
+ "gradient_left_right": true,
+ "breathing": true,
+ "band_sat": true,
+ "band_val": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "rainbow_moving_chevron":true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "jellybean_raindrops": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "typing_heatmap": true,
+ "digital_rain": true,
+ "solid_reactive_simple": true,
+ "solid_reactive": true,
+ "solid_reactive_wide": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_multinexus": true,
+ "splash": true,
+ "solid_splash": true,
+ "solid_multisplash": true,
+ "pixel_rain": true,
+ "pixel_fractal": true
+ }
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"y": 0, "x": 11.5, "matrix": [10, 5], "label": "10,5"},
+ {"y": 1, "x": 10.5, "matrix": [10, 6], "label": "10,6"},
+ {"y": 1, "x": 12.5, "matrix": [10, 7], "label": "10,7"},
+ {"y": 1.75, "x": 0, "matrix": [8, 5], "label": "8,5"},
+ {"y": 1.75, "x": 1, "matrix": [9, 5], "label": "9,5"},
+ {"y": 1.75, "x": 3.25, "matrix": [8, 6], "label": "8,6"},
+ {"y": 1.75, "x": 4.25, "matrix": [9, 6], "label": "9,6"},
+ {"y": 1.75, "x": 5.25, "matrix": [8, 7], "label": "8,7"},
+ {"y": 1.75, "x": 7.25, "matrix": [9, 7], "label": "9,7"},
+ {"y": 1.75, "x": 8.25, "matrix": [8, 8], "label": "8,8"},
+ {"y": 2, "x": 11.5, "matrix": [10, 8], "label": "10,8"},
+ {"y": 3.5, "x": 0, "matrix": [0, 0], "label": "0,0"},
+ {"y": 3.5, "x": 1, "matrix": [1, 0], "label": "1,0"},
+ {"y": 3.5, "x": 2, "matrix": [0, 1], "label": "0,1"},
+ {"y": 3.5, "x": 3, "matrix": [1, 1], "label": "1,1"},
+ {"y": 3.5, "x": 4, "matrix": [0, 2], "label": "0,2"},
+ {"y": 3.5, "x": 5, "matrix": [1, 2], "label": "1,2"},
+ {"y": 3.5, "x": 6, "matrix": [0, 3], "label": "0,3"},
+ {"y": 3.5, "x": 7, "matrix": [1, 3], "label": "1,3"},
+ {"y": 3.5, "x": 8, "matrix": [0, 4], "label": "0,4"},
+ {"y": 3.5, "x": 9, "matrix": [1, 4], "label": "1,4"},
+ {"y": 3.5, "x": 10, "matrix": [7, 4], "label": "7,4"},
+ {"y": 3.5, "x": 12.5, "matrix": [9, 8], "label": "9,8"},
+ {"y": 4.5, "x": 0, "matrix": [2, 0], "w": 1.25, "label": "2,0"},
+ {"y": 4.5, "x": 1.25, "matrix": [3, 0], "label": "3,0"},
+ {"y": 4.5, "x": 2.25, "matrix": [2, 1], "label": "2,1"},
+ {"y": 4.5, "x": 3.25, "matrix": [3, 1], "label": "3,1"},
+ {"y": 4.5, "x": 4.25, "matrix": [2, 2], "label": "2,2"},
+ {"y": 4.5, "x": 5.25, "matrix": [3, 2], "label": "3,2"},
+ {"y": 4.5, "x": 6.25, "matrix": [2, 3], "label": "2,3"},
+ {"y": 4.5, "x": 7.25, "matrix": [3, 3], "label": "3,3"},
+ {"y": 4.5, "x": 8.25, "matrix": [2, 4], "label": "2,4"},
+ {"y": 4.5, "x": 9.25, "matrix": [3, 4], "w": 1.75, "label": "3,4"},
+ {"y": 4.5, "x": 12.5, "matrix": [8, 9], "label": "8,9"},
+ {"y": 5.5, "x": 0, "matrix": [4, 0], "w": 1.75, "label": "4,0"},
+ {"y": 5.5, "x": 1.75, "matrix": [5, 0], "label": "5,0"},
+ {"y": 5.5, "x": 2.75, "matrix": [4, 1], "label": "4,1"},
+ {"y": 5.5, "x": 3.75, "matrix": [5, 1], "label": "5,1"},
+ {"y": 5.5, "x": 4.75, "matrix": [4, 2], "label": "4,2"},
+ {"y": 5.5, "x": 5.75, "matrix": [5, 2], "label": "5,2"},
+ {"y": 5.5, "x": 6.75, "matrix": [4, 3], "label": "4,3"},
+ {"y": 5.5, "x": 7.75, "matrix": [5, 3], "label": "5,3"},
+ {"y": 5.5, "x": 8.75, "matrix": [4, 4], "w": 1.25, "label": "4,4"},
+ {"y": 5.5, "x": 10, "matrix": [5, 4], "label": "5,4"},
+ {"y": 5.5, "x": 12.5, "matrix": [9, 9], "label": "9,9"},
+ {"y": 6.5, "x": 0, "matrix": [6, 0], "w": 1.5, "label": "6,0"},
+ {"y": 6.5, "x": 1.5, "matrix": [7, 0], "label": "7,0"},
+ {"y": 6.5, "x": 2.5, "matrix": [6, 1], "w": 1.25, "label": "6,1"},
+ {"y": 6.5, "x": 3.75, "matrix": [7, 1], "w": 1.75, "label": "7,1"},
+ {"y": 6.5, "x": 5.5, "matrix": [7, 2], "w": 1.75, "label": "7,2"},
+ {"y": 6.5, "x": 7.25, "matrix": [6, 3], "w": 1.25, "label": "6,3"},
+ {"y": 6.5, "x": 8.5, "matrix": [7, 3], "label": "7,3"},
+ {"y": 6.5, "x": 9.5, "matrix": [6, 4], "w": 1.5, "label": "6,4"}
+ ]
+ }
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": false,
+ "audio": false,
+ "backlight": false,
+ "rgblight": false,
+ "encoder": true,
+ "rgb_matrix": true
+ },
+ "encoder": {
+ "enabled": true,
+ "rotary": [
+ { "pin_a": "GP22", "pin_b": "GP23", "resolution": 2 },
+ { "pin_a": "GP26", "pin_b": "GP27", "resolution": 2 },
+ { "pin_a": "GP0", "pin_b": "GP1", "resolution": 2 }
+ ]
+ },
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": ["GP28", "GP21", "GP20", "GP3", "GP2", "GP12", "GP13", "GP14", "GP10", "GP11"],
+ "rows": ["GP25", "GP24", "GP16", "GP7", "GP17", "GP18", "GP19", "GP4", "GP8", "GP9", "GP15"]
+ }
+}
diff --git a/keyboards/nachie/littlewritter/keyboard.json b/keyboards/nachie/littlewritter/keyboard.json
new file mode 100644
index 0000000000..3c55188b27
--- /dev/null
+++ b/keyboards/nachie/littlewritter/keyboard.json
@@ -0,0 +1,148 @@
+{
+ "keyboard_name": "LittleWritter",
+ "manufacturer": "Nachie",
+ "usb": {
+ "vid": "0x4B43",
+ "pid": "0x5358",
+ "device_version": "1.0.0"
+ },
+ "board": "GENERIC_RP_RP2040",
+ "bootloader": "rp2040",
+ "processor": "RP2040",
+ "url": "https://littlecraftery.com/products/little-writter",
+ "maintainer": "nachie",
+ "ws2812": {
+ "pin": "GP29",
+ "driver": "vendor"
+ },
+ "rgb_matrix": {
+ "driver": "ws2812",
+ "led_count": 16,
+ "animations": {
+ "alphas_mods": true,
+ "gradient_up_down": true,
+ "gradient_left_right": true,
+ "breathing": true,
+ "band_sat": true,
+ "band_val": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "rainbow_moving_chevron":true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "jellybean_raindrops": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "typing_heatmap": true,
+ "digital_rain": true,
+ "solid_reactive_simple": true,
+ "solid_reactive": true,
+ "solid_reactive_wide": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_multinexus": true,
+ "splash": true,
+ "solid_splash": true,
+ "solid_multisplash": true,
+ "pixel_rain": true,
+ "pixel_fractal": true
+ }
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"y": 0, "x": 11.5, "matrix": [10, 5], "label": "10,5"},
+ {"y": 1, "x": 10.5, "matrix": [10, 6], "label": "10,6"},
+ {"y": 1, "x": 12.5, "matrix": [10, 7], "label": "10,7"},
+ {"y": 1.75, "x": 0, "matrix": [8, 5], "label": "8,5"},
+ {"y": 1.75, "x": 1, "matrix": [9, 5], "label": "9,5"},
+ {"y": 1.75, "x": 3.25, "matrix": [8, 6], "label": "8,6"},
+ {"y": 1.75, "x": 4.25, "matrix": [9, 6], "label": "9,6"},
+ {"y": 1.75, "x": 5.25, "matrix": [8, 7], "label": "8,7"},
+ {"y": 1.75, "x": 7.25, "matrix": [9, 7], "label": "9,7"},
+ {"y": 1.75, "x": 8.25, "matrix": [8, 8], "label": "8,8"},
+ {"y": 2, "x": 11.5, "matrix": [10, 8], "label": "10,8"},
+ {"y": 3.5, "x": 0, "matrix": [0, 0], "label": "0,0"},
+ {"y": 3.5, "x": 1, "matrix": [1, 0], "label": "1,0"},
+ {"y": 3.5, "x": 2, "matrix": [0, 1], "label": "0,1"},
+ {"y": 3.5, "x": 3, "matrix": [1, 1], "label": "1,1"},
+ {"y": 3.5, "x": 4, "matrix": [0, 2], "label": "0,2"},
+ {"y": 3.5, "x": 5, "matrix": [1, 2], "label": "1,2"},
+ {"y": 3.5, "x": 6, "matrix": [0, 3], "label": "0,3"},
+ {"y": 3.5, "x": 7, "matrix": [1, 3], "label": "1,3"},
+ {"y": 3.5, "x": 8, "matrix": [0, 4], "label": "0,4"},
+ {"y": 3.5, "x": 9, "matrix": [1, 4], "label": "1,4"},
+ {"y": 3.5, "x": 10, "matrix": [7, 4], "label": "7,4"},
+ {"y": 3.5, "x": 12.5, "matrix": [9, 8], "label": "9,8"},
+ {"y": 4.5, "x": 0, "matrix": [2, 0], "w": 1.25, "label": "2,0"},
+ {"y": 4.5, "x": 1.25, "matrix": [3, 0], "label": "3,0"},
+ {"y": 4.5, "x": 2.25, "matrix": [2, 1], "label": "2,1"},
+ {"y": 4.5, "x": 3.25, "matrix": [3, 1], "label": "3,1"},
+ {"y": 4.5, "x": 4.25, "matrix": [2, 2], "label": "2,2"},
+ {"y": 4.5, "x": 5.25, "matrix": [3, 2], "label": "3,2"},
+ {"y": 4.5, "x": 6.25, "matrix": [2, 3], "label": "2,3"},
+ {"y": 4.5, "x": 7.25, "matrix": [3, 3], "label": "3,3"},
+ {"y": 4.5, "x": 8.25, "matrix": [2, 4], "label": "2,4"},
+ {"y": 4.5, "x": 9.25, "matrix": [3, 4], "w": 1.75, "label": "3,4"},
+ {"y": 4.5, "x": 12.5, "matrix": [8, 9], "label": "8,9"},
+ {"y": 5.5, "x": 0, "matrix": [4, 0], "w": 1.75, "label": "4,0"},
+ {"y": 5.5, "x": 1.75, "matrix": [5, 0], "label": "5,0"},
+ {"y": 5.5, "x": 2.75, "matrix": [4, 1], "label": "4,1"},
+ {"y": 5.5, "x": 3.75, "matrix": [5, 1], "label": "5,1"},
+ {"y": 5.5, "x": 4.75, "matrix": [4, 2], "label": "4,2"},
+ {"y": 5.5, "x": 5.75, "matrix": [5, 2], "label": "5,2"},
+ {"y": 5.5, "x": 6.75, "matrix": [4, 3], "label": "4,3"},
+ {"y": 5.5, "x": 7.75, "matrix": [5, 3], "label": "5,3"},
+ {"y": 5.5, "x": 8.75, "matrix": [4, 4], "w": 1.25, "label": "4,4"},
+ {"y": 5.5, "x": 10, "matrix": [5, 4], "label": "5,4"},
+ {"y": 5.5, "x": 12.5, "matrix": [9, 9], "label": "9,9"},
+ {"y": 6.5, "x": 0, "matrix": [6, 0], "w": 1.5, "label": "6,0"},
+ {"y": 6.5, "x": 1.5, "matrix": [7, 0], "label": "7,0"},
+ {"y": 6.5, "x": 2.5, "matrix": [6, 1], "w": 1.25, "label": "6,1"},
+ {"y": 6.5, "x": 3.75, "matrix": [7, 1], "w": 1.75, "label": "7,1"},
+ {"y": 6.5, "x": 5.5, "matrix": [7, 2], "w": 1.75, "label": "7,2"},
+ {"y": 6.5, "x": 7.25, "matrix": [6, 3], "w": 1.25, "label": "6,3"},
+ {"y": 6.5, "x": 8.5, "matrix": [7, 3], "label": "7,3"},
+ {"y": 6.5, "x": 9.5, "matrix": [6, 4], "w": 1.5, "label": "6,4"}
+ ]
+ }
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": false,
+ "audio": false,
+ "backlight": false,
+ "rgblight": false,
+ "encoder": true,
+ "rgb_matrix": true
+ },
+ "encoder": {
+ "enabled": true,
+ "rotary": [
+ { "pin_a": "GP22", "pin_b": "GP23", "resolution": 2 },
+ { "pin_a": "GP26", "pin_b": "GP27", "resolution": 2 },
+ { "pin_a": "GP0", "pin_b": "GP1", "resolution": 2 }
+ ]
+ },
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": ["GP28", "GP21", "GP20", "GP3", "GP2", "GP12", "GP13", "GP14", "GP10", "GP11"],
+ "rows": ["GP25", "GP24", "GP16", "GP7", "GP17", "GP18", "GP19", "GP4", "GP8", "GP9", "GP15"]
+ }
+}
diff --git a/keyboards/nachie/littlewritter/keymaps/default/keymap.c b/keyboards/nachie/littlewritter/keymaps/default/keymap.c
new file mode 100755
index 0000000000..0ae29aa151
--- /dev/null
+++ b/keyboards/nachie/littlewritter/keymaps/default/keymap.c
@@ -0,0 +1,28 @@
+/*
+Copyright 2024 Nachie
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* QWERTY */
+ LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_W,
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_Q,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT, KC_A,
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_DOT, KC_LSFT, MO(1), KC_Z,
+ KC_LGUI, KC_LGUI, KC_LALT, KC_SPC, KC_BSPC, KC_RGUI, KC_RALT, MO(1))
+};
diff --git a/keyboards/nachie/littlewritter/keymaps/default/readme.md b/keyboards/nachie/littlewritter/keymaps/default/readme.md
new file mode 100644
index 0000000000..0bb2e6026d
--- /dev/null
+++ b/keyboards/nachie/littlewritter/keymaps/default/readme.md
@@ -0,0 +1 @@
+The default keymap for the Little Writter.
\ No newline at end of file
diff --git a/keyboards/nachie/littlewritter/keymaps/vial/config.h b/keyboards/nachie/littlewritter/keymaps/vial/config.h
new file mode 100644
index 0000000000..a6cc2583d0
--- /dev/null
+++ b/keyboards/nachie/littlewritter/keymaps/vial/config.h
@@ -0,0 +1,11 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#pragma once
+
+#define VIAL_KEYBOARD_UID {0x81, 0x8E, 0x3C, 0xC9, 0xA3, 0x67, 0xDE, 0xA5}
+
+#define VIAL_UNLOCK_COMBO_ROWS { 0, 3 }
+#define VIAL_UNLOCK_COMBO_COLS { 0, 4 }
+
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define RGB_MATRIX_KEYPRESSES
\ No newline at end of file
diff --git a/keyboards/nachie/littlewritter/keymaps/vial/keymap.c b/keyboards/nachie/littlewritter/keymaps/vial/keymap.c
new file mode 100755
index 0000000000..fe744f7a0b
--- /dev/null
+++ b/keyboards/nachie/littlewritter/keymaps/vial/keymap.c
@@ -0,0 +1,486 @@
+/*
+Copyright 2024 Nachie
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+#include
+#include "os_detection.h"
+
+os_variant_t current_platform;
+bool is_alt_tab_active = false;
+uint16_t alt_tab_timer = 0;
+
+enum layer_names {
+ _BASE, // Default Layer
+ _FN, // Fn Layer 1
+ _FN2, // Fn Layer 2
+ _FN3 // Fn Layer 3
+};
+
+enum custom_keycode {
+ JWRDL = QK_KB_0,
+ JWRDR,
+ SWRDL,
+ SWRDR,
+ TABL,
+ TABR,
+ DSKTPL,
+ DSKTPR,
+ PRVAPP,
+ NXTAPP
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case KC_HOME:
+ if (record->event.pressed && current_platform == OS_MACOS) {
+ register_mods(MOD_LGUI);
+ tap_code(KC_LEFT);
+ unregister_mods(MOD_LGUI);
+ } else {
+ tap_code(KC_HOME);
+ }
+ break;
+ case KC_END:
+ if (record->event.pressed && current_platform == OS_MACOS) {
+ register_mods(MOD_LGUI);
+ tap_code(KC_RIGHT);
+ unregister_mods(MOD_LGUI);
+ } else {
+ tap_code(KC_END);
+ }
+ break;
+ case KC_PGUP:
+ if (record->event.pressed && current_platform == OS_MACOS) {
+ register_mods(MOD_LGUI);
+ tap_code(KC_UP);
+ unregister_mods(MOD_LGUI);
+ } else {
+ tap_code(KC_PGUP);
+ }
+ break;
+ case KC_PGDN:
+ if (record->event.pressed && current_platform == OS_MACOS) {
+ register_mods(MOD_LGUI);
+ tap_code(KC_DOWN);
+ unregister_mods(MOD_LGUI);
+ } else {
+ tap_code(KC_PGDN);
+ }
+ break;
+ case KC_NUM_LOCK:
+ if (record->event.pressed && current_platform == OS_MACOS) {
+ register_mods(MOD_LSFT);
+ tap_code(KC_CLEAR);
+ unregister_mods(MOD_LSFT);
+ } else {
+ tap_code(KC_NUM_LOCK);
+ }
+ break;
+ case KC_SCROLL_LOCK:
+ if (record->event.pressed && current_platform == OS_MACOS) {
+ register_mods(MOD_LCTL);
+ tap_code(KC_F14);
+ unregister_mods(MOD_LCTL);
+ } else {
+ tap_code(KC_SCROLL_LOCK);
+ }
+ break;
+ case KC_PRINT_SCREEN:
+ if (record->event.pressed && current_platform == OS_MACOS) {
+ register_mods(MOD_LSFT);
+ register_mods(MOD_LGUI);
+ tap_code(KC_5);
+ unregister_mods(MOD_LGUI);
+ unregister_mods(MOD_LSFT);
+ } else {
+ tap_code(KC_PRINT_SCREEN);
+ }
+ break;
+ case JWRDL:
+ if (record->event.pressed) {
+ (current_platform == OS_MACOS) ? register_mods(MOD_LALT) : register_mods(MOD_LCTL);
+ tap_code(KC_LEFT);
+ (current_platform == OS_MACOS) ? unregister_mods(MOD_LALT) : unregister_mods(MOD_LCTL);
+ } else {
+ }
+ break;
+ case JWRDR:
+ if (record->event.pressed) {
+ (current_platform == OS_MACOS) ? register_mods(MOD_LALT) : register_mods(MOD_LCTL);
+ tap_code(KC_RIGHT);
+ (current_platform == OS_MACOS) ? unregister_mods(MOD_LALT) : unregister_mods(MOD_LCTL);
+ } else {
+ }
+ break;
+ case SWRDL:
+ if (record->event.pressed) {
+ register_mods(MOD_LSFT);
+ (current_platform == OS_MACOS) ? register_mods(MOD_LALT) : register_mods(MOD_LCTL);
+ tap_code(KC_LEFT);
+ (current_platform == OS_MACOS) ? unregister_mods(MOD_LALT) : unregister_mods(MOD_LCTL);
+ unregister_mods(MOD_LSFT);
+ } else {
+ }
+ break;
+ case SWRDR:
+ if (record->event.pressed) {
+ register_mods(MOD_LSFT);
+ (current_platform == OS_MACOS) ? register_mods(MOD_LALT) : register_mods(MOD_LCTL);
+ tap_code(KC_RIGHT);
+ (current_platform == OS_MACOS) ? unregister_mods(MOD_LALT) : unregister_mods(MOD_LCTL);
+ unregister_mods(MOD_LSFT);
+ } else {
+ }
+ break;
+ case TABL:
+ if (record->event.pressed) {
+ register_mods(MOD_LCTL);
+ register_mods(MOD_LSFT);
+ tap_code(KC_TAB);
+ unregister_mods(MOD_LSFT);
+ unregister_mods(MOD_LCTL);
+ } else {
+ }
+ break;
+ case TABR:
+ if (record->event.pressed) {
+ register_mods(MOD_LCTL);
+ tap_code(KC_TAB);
+ unregister_mods(MOD_LCTL);
+ } else {
+ }
+ break;
+ case DSKTPL:
+ if (record->event.pressed) {
+ register_mods(MOD_LCTL);
+ register_mods(MOD_LGUI);
+ (current_platform == OS_LINUX) ? tap_code(KC_UP) : tap_code(KC_LEFT);
+ unregister_mods(MOD_LGUI);
+ unregister_mods(MOD_LCTL);
+ } else {
+ }
+ break;
+ case DSKTPR:
+ if (record->event.pressed) {
+ register_mods(MOD_LCTL);
+ register_mods(MOD_LGUI);
+ (current_platform == OS_LINUX) ? tap_code(KC_DOWN) : tap_code(KC_RGHT);
+ unregister_mods(MOD_LGUI);
+ unregister_mods(MOD_LCTL);
+ } else {
+ }
+ break;
+ case PRVAPP:
+ if (record->event.pressed) {
+ register_code(KC_LSFT);
+ if (!is_alt_tab_active) {
+ is_alt_tab_active = true;
+ (current_platform == OS_MACOS) ? register_code(KC_LGUI) : register_code(KC_LALT);
+ }
+ alt_tab_timer = timer_read();
+ register_code(KC_TAB);
+ } else {
+ unregister_code(KC_TAB);
+ unregister_code(KC_LSFT);
+ }
+ break;
+ case NXTAPP:
+ if (record->event.pressed) {
+ if (!is_alt_tab_active) {
+ is_alt_tab_active = true;
+ (current_platform == OS_MACOS) ? register_code(KC_LGUI) : register_code(KC_LALT);
+ }
+ alt_tab_timer = timer_read();
+ register_code(KC_TAB);
+ } else {
+ unregister_code(KC_TAB);
+ }
+ break;
+ }
+ return true;
+};
+
+#ifndef HAPTIC_ENABLE
+ #define HF_TOGG _______
+#endif
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* QWERTY */
+ [_BASE] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_W,
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_Q,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT, KC_A,
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_DOT, KC_LSFT, MO(1), KC_Z,
+ KC_LGUI, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_BSPC, KC_RGUI, MO(2)),
+
+ /* FUNCTION */
+ [_FN] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_W,
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, _______,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT, _______,
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_DOT, KC_LSFT, MO(1), _______,
+ KC_LGUI, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_BSPC, KC_RGUI, MO(1)),
+
+ [_FN2] = LAYOUT(
+ KC_ESC, QK_BOOTLOADER, QK_REBOOT, QK_DEBUG_TOGGLE, QK_CLEAR_EEPROM, _______, _______, _______, _______, _______, _______,
+ HF_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______),
+
+ [_FN3] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______)
+};
+
+void matrix_scan_user(void) { // The very important timer.
+ if (is_alt_tab_active) {
+ if (timer_elapsed(alt_tab_timer) > 1000) {
+ (current_platform == OS_MACOS) ? unregister_code(KC_LGUI) : unregister_code(KC_LALT);
+ is_alt_tab_active = false;
+ }
+ }
+}
+
+#if defined(ENCODER_MAP_ENABLE)
+ const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
+ [_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [_FN] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD) },
+ [_FN2] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD) },
+ [_FN3] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD) },
+ };
+#endif
+
+#ifdef OLED_ENABLE
+ #ifdef DYNAMIC_MACRO_ENABLE
+ bool macro1;
+ bool macro1rec;
+ bool macro2;
+ bool macro2rec;
+ bool prevEnabled;
+ uint8_t prevRGBmode;
+
+ void render_dynamic_macro_status(int col, int line){
+ oled_set_cursor(col,line);
+ macro1rec ? oled_write(PSTR("DM1"), macro1) : oled_write(PSTR(" "),false);
+ oled_set_cursor(col,line+1);
+ macro2rec ? oled_write(PSTR("DM2"), macro2) : oled_write(PSTR(" "),false);
+ }
+
+ //direction indicates which macro it is, with 1 being Macro 1, -1 being Macro 2, and 0 being no macro.
+ void dynamic_macro_record_start_user(int8_t direction){
+ prevEnabled = rgb_matrix_is_enabled();
+ if (!prevEnabled) { rgb_matrix_enable(); }
+ prevRGBmode = rgb_matrix_get_mode();
+ rgb_matrix_mode(RGB_MATRIX_BREATHING);
+ switch(direction){
+ case 1:
+ macro1 = false;
+ macro1rec = true;
+ break;
+ case -1:
+ macro2 = false;
+ macro2rec = true;
+ break;
+ default:
+ macro1 = false;
+ macro2 = false;
+ macro1rec = false;
+ macro2rec = false;
+ break;
+ }
+ }
+
+ void dynamic_macro_record_end_user(int8_t direction){
+ prevEnabled ? rgb_matrix_mode(prevRGBmode) : rgb_matrix_disable();
+ switch(direction){
+ case 1:
+ macro1 = true;
+ break;
+ case -1:
+ macro2 = true;
+ break;
+ default:
+ macro1 = false;
+ macro2 = false;
+ break;
+ }
+ }
+ #endif
+
+ bool clear_screen = false;
+ bool rerender_platform = false;
+
+ static void render_logo(void) {
+ static const char PROGMEM logo[] = {
+ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94,
+ 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4,
+ 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0x00
+ };
+
+ oled_write(logo, false);
+ }
+
+ void render_keylock_status(led_t led_state) {
+ bool caps_state = (led_state.caps_lock || is_caps_word_on());
+ oled_write(PSTR("CAPS"), caps_state);
+ oled_write(PSTR(" "), false);
+ oled_write(PSTR("NUM"), led_state.num_lock);
+ oled_write(PSTR(" "), false);
+ oled_write(PSTR("SCRL"), led_state.scroll_lock);
+ //oled_write_ln_P(PSTR(" "), false);
+ }
+
+ void render_mod_status(uint8_t modifiers) {
+ oled_write(PSTR("SH"), (modifiers & MOD_MASK_SHIFT));
+ oled_write(PSTR(" "), false);
+ (current_platform == OS_MACOS || current_platform == OS_IOS) ? oled_write(PSTR("CMD"), (modifiers & MOD_MASK_GUI)) : oled_write(PSTR("CT"), (modifiers & MOD_MASK_CTRL));
+ oled_write(PSTR(" "), false);
+ (current_platform == OS_MACOS || current_platform == OS_IOS) ? oled_write(PSTR("OPT"), (modifiers & MOD_MASK_ALT)) : oled_write(PSTR("ALT"), (modifiers & MOD_MASK_ALT));
+ oled_write(PSTR(" "), false);
+ (current_platform == OS_MACOS || current_platform == OS_IOS) ? oled_write(PSTR("CT"), (modifiers & MOD_MASK_CTRL)) : oled_write(PSTR("GUI"), (modifiers & MOD_MASK_GUI));
+ }
+
+ void render_key_status_or_logo(){
+ led_t led_state = host_keyboard_led_state();
+ uint8_t mod_state = (get_mods()|get_oneshot_mods());
+ if ( !led_state.num_lock && !led_state.caps_lock && !led_state.scroll_lock
+ && !(mod_state & MOD_MASK_SHIFT) && !(mod_state & MOD_MASK_ALT) && !(mod_state & MOD_MASK_CTRL) && !(mod_state & MOD_MASK_GUI)) {
+ if(!clear_screen) {
+ render_logo();
+ rerender_platform = true;
+ }
+ clear_screen = true;
+ } else {
+ if (clear_screen == true) {
+ oled_clear();
+ oled_render();
+ clear_screen = false;
+ }
+ oled_set_cursor(8,0);
+ render_keylock_status(led_state);
+ oled_set_cursor(8,1);
+ render_mod_status(mod_state);
+ rerender_platform = true;
+ }
+
+ }
+
+ void render_current_layer(){
+ switch (get_highest_layer(layer_state)) {
+ case 0:
+ oled_write(PSTR("Layer 0"), false);
+ break;
+ case 1:
+ oled_write(PSTR("Layer 1"), false);
+ break;
+ case 2:
+ oled_write(PSTR("Layer 2"), false);
+ break;
+ case 3:
+ oled_write(PSTR("Layer 3"), false);
+ break;
+ default:
+ oled_write(PSTR("Layer ?"), false); // Should never display, here as a catchall
+ }
+ }
+
+ void render_current_wpm(){
+ oled_write_P(PSTR("WPM: "), false);
+ oled_write(get_u8_str(get_current_wpm(), '0'), false);
+ }
+
+ void render_platform_status(int col, int line) {
+ /* Show Ctrl-Gui Swap options */
+ static const char PROGMEM logo[][5][3] = {
+ {{0x9B, 0x9C, 0}, {0xbb, 0xbc, 0}}, //Android
+ {{0x99, 0x9A, 0}, {0xb9, 0xba, 0}}, //Linux
+ {{0x97, 0x98, 0}, {0xb7, 0xb8, 0}}, //Windows
+ {{0x95, 0x96, 0}, {0xb5, 0xb6, 0}}, //Mac/iOS
+ {{0x9D, 0x9E, 0}, {0xbd, 0xbe, 0}}, //Empty Placeholder
+ };
+ current_platform = detected_host_os();
+ switch (current_platform) {
+ /*case OS_ANDROID: //Android
+ oled_set_cursor(col,line);
+ oled_write(logo[0][0], false);
+ oled_set_cursor(col,line+1);
+ oled_write(logo[0][1], false);
+ break;*/
+ case OS_LINUX: //Linux
+ oled_set_cursor(col,line);
+ oled_write(logo[1][0], false);
+ oled_set_cursor(col,line+1);
+ oled_write(logo[1][1], false);
+ keymap_config.swap_lctl_lgui = false;
+ keymap_config.swap_rctl_rgui = false;
+ break;
+ case OS_WINDOWS: //Windows
+ oled_set_cursor(col,line);
+ oled_write(logo[2][0], false);
+ oled_set_cursor(col,line+1);
+ oled_write(logo[2][1], false);
+ keymap_config.swap_lctl_lgui = false;
+ keymap_config.swap_rctl_rgui = false;
+ break;
+ case OS_MACOS: //Mac
+ oled_set_cursor(col,line);
+ oled_write(logo[3][0], false);
+ oled_set_cursor(col,line+1);
+ oled_write(logo[3][1], false);
+ keymap_config.swap_lctl_lgui = true;
+ keymap_config.swap_rctl_rgui = true;
+ break;
+ case OS_IOS: //iOS
+ oled_set_cursor(col,line);
+ oled_write(logo[3][0], false);
+ oled_set_cursor(col,line+1);
+ oled_write(logo[3][1], false);
+ keymap_config.swap_lctl_lgui = true;
+ keymap_config.swap_rctl_rgui = true;
+ break;
+ default: //OS_UNSURE or not configured
+ oled_set_cursor(col,line);
+ oled_write(logo[4][0], false);
+ oled_set_cursor(col,line+1);
+ oled_write(logo[4][1], false);
+ break;
+ }
+ rerender_platform = false;
+ }
+
+ bool oled_task_user(void) {
+ render_key_status_or_logo();
+ oled_set_cursor(8,2);
+ render_current_layer();
+ #ifdef DYNAMIC_MACRO_ENABLE
+ render_dynamic_macro_status(18,2);
+ #endif
+ oled_set_cursor(8,3);
+ render_current_wpm();
+ #ifdef OS_DETECTION_ENABLE
+ if(current_platform != detected_host_os() || rerender_platform) { render_platform_status(3,0); }
+ #endif
+
+ return false;
+ }
+
+#endif
diff --git a/keyboards/nachie/littlewritter/keymaps/vial/readme.md b/keyboards/nachie/littlewritter/keymaps/vial/readme.md
new file mode 100644
index 0000000000..a0f0ba8669
--- /dev/null
+++ b/keyboards/nachie/littlewritter/keymaps/vial/readme.md
@@ -0,0 +1 @@
+The vial keymap for the Little Writter PCB.
\ No newline at end of file
diff --git a/keyboards/nachie/littlewritter/keymaps/vial/rules.mk b/keyboards/nachie/littlewritter/keymaps/vial/rules.mk
new file mode 100644
index 0000000000..9f6eb0c0b1
--- /dev/null
+++ b/keyboards/nachie/littlewritter/keymaps/vial/rules.mk
@@ -0,0 +1,10 @@
+VIA_ENABLE = yes
+VIAL_ENABLE = yes
+
+VIALRGB_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
+BOOTMAGIC_ENABLE = yes
+MAGIC_ENABLE = yes
+OS_DETECTION_ENABLE = yes
+DYNAMIC_MACRO_ENABLE = yes
+CAPS_WORD_ENABLE = yes
diff --git a/keyboards/nachie/littlewritter/keymaps/vial/vial.json b/keyboards/nachie/littlewritter/keymaps/vial/vial.json
new file mode 100644
index 0000000000..a4c716e148
--- /dev/null
+++ b/keyboards/nachie/littlewritter/keymaps/vial/vial.json
@@ -0,0 +1,433 @@
+{
+ "name": "LittleWritter",
+ "vendorId": "0x4B43",
+ "productId": "0x5358",
+ "customKeycodes": [
+ {
+ "name": "JmpWordL",
+ "title": "Jump Word Left",
+ "shortName": "JWRDL"
+ },
+ {
+ "name": "JmpWordR",
+ "title": "Jump Word Right",
+ "shortName": "JWRDR"
+ },
+ {
+ "name": "SlcWordL",
+ "title": "Select Word Left",
+ "shortName": "SWRDL"
+ },
+ {
+ "name": "SlcWordR",
+ "title": "Select Word Right",
+ "shortName": "SWRDR"
+ },
+ {
+ "name": "TabLft",
+ "title": "Tab Left",
+ "shortName": "TABL"
+ },
+ {
+ "name": "TabRght",
+ "title": "Tab Right",
+ "shortName": "TABR"
+ },
+ {
+ "name": "DsktpLft",
+ "title": "Desktop Left",
+ "shortName": "DSKTPL"
+ },
+ {
+ "name": "DsktpRght",
+ "title": "Desktop Right",
+ "shortName": "DSKTPR"
+ },
+ {
+ "name": "PrevApp",
+ "title": "Previous App",
+ "shortName": "PRVAPP"
+ },
+ {
+ "name": "NextApp",
+ "title": "Next App",
+ "shortName": "NXTAPP"
+ }
+ ],
+ "matrix": { "rows": 11, "cols": 10 },
+ "lighting": "vialrgb",
+ "layouts": {
+ "labels":[
+ [
+ "Right Shift",
+ "Split Shift Fn",
+ "Split Fn Shift",
+ "No Split"
+ ],
+ [
+ "Bottom Row",
+ "3U Centered",
+ "6U Big Bar",
+ "3U/3U",
+ "2U/2U",
+ "1.75U/1.75U",
+ "7U Big Bar",
+ "3U/1U/3U",
+ "2.75U ALPS",
+ "3U/ENC/3U"
+ ],
+ "Macro Row"
+ ],
+ "keymap": [
+ [
+ {
+ "y": 2.5,
+ "x": 13.5
+ },
+ "10,5"
+ ],
+ [
+ {
+ "x": 12.5
+ },
+ "10,6",
+ {
+ "x": 1
+ },
+ "10,7\nBreak"
+ ],
+ [
+ {
+ "y": -0.25,
+ "x": 2
+ },
+ "8,5",
+ "9,5",
+ {
+ "x": 1.25
+ },
+ "8,6",
+ "9,6",
+ "8,7",
+ {
+ "x": 1
+ },
+ "9,7",
+ "8,8"
+ ],
+ [
+ {
+ "y": -0.75,
+ "x": 13.5
+ },
+ "10,8"
+ ],
+ [
+ {
+ "x": 1
+ },
+ "0,0\n\n\n\n\n\n\n\n\ne",
+ {
+ "x": 11
+ },
+ "1,0\n\n\n\n\n\n\n\n\ne"
+ ],
+ [
+ {
+ "y": -0.5,
+ "x": 2
+ },
+ "0,0",
+ "1,0",
+ "0,1",
+ "1,1",
+ "0,2",
+ "1,2",
+ "0,3",
+ "1,3",
+ "0,4",
+ "1,4",
+ "7,4",
+ {
+ "x": 1.5
+ },
+ "9,8"
+ ],
+ [
+ {
+ "y": -0.5,
+ "x": 1
+ },
+ "0,1\n\n\n\n\n\n\n\n\ne",
+ {
+ "x": 11
+ },
+ "1,1\n\n\n\n\n\n\n\n\ne"
+ ],
+ [
+ {
+ "y": -0.5,
+ "x": 2,
+ "c": "#aaaaaa",
+ "w": 1.25
+ },
+ "2,0",
+ {
+ "c": "#cccccc"
+ },
+ "3,0",
+ "2,1",
+ "3,1",
+ "2,2",
+ "3,2",
+ "2,3",
+ "3,3",
+ "2,4",
+ {
+ "c": "#777777",
+ "w": 1.75
+ },
+ "3,4",
+ {
+ "x": 1.5,
+ "c": "#cccccc"
+ },
+ "8,9"
+ ],
+ [
+ {
+ "x": 2,
+ "c": "#aaaaaa",
+ "w": 1.75
+ },
+ "4,0",
+ {
+ "c": "#cccccc"
+ },
+ "5,0",
+ "4,1",
+ "5,1",
+ "4,2",
+ "5,2",
+ "4,3",
+ "5,3",
+ {
+ "c": "#aaaaaa",
+ "w": 1.25
+ },
+ "4,4\n\n\n0,0",
+ {
+ "c": "#cccccc"
+ },
+ "5,4\n\n\n0,0",
+ {
+ "x": 1.5
+ },
+ "9,9"
+ ],
+ [
+ {
+ "x": 2,
+ "c": "#aaaaaa",
+ "w": 1.5
+ },
+ "6,0\n\n\n1,0",
+ "7,0\n\n\n1,0",
+ {
+ "w": 1.5
+ },
+ "6,1\n\n\n1,0",
+ {
+ "w": 3
+ },
+ "7,2\n\n\n1,0",
+ {
+ "w": 1.5
+ },
+ "6,3\n\n\n1,0",
+ "7,3\n\n\n1,0",
+ {
+ "w": 1.5
+ },
+ "6,4\n\n\n1,0"
+ ],
+ [
+ {
+ "x": 6.5,
+ "c": "#cccccc"
+ },
+ "2,0\n\n\n\n\n\n\n\n\ne",
+ "2,1\n\n\n\n\n\n\n\n\ne",
+ {
+ "x": 2.25
+ },
+ "4,4\n\n\n0,1",
+ {
+ "c": "#aaaaaa",
+ "w": 1.25
+ },
+ "5,4\n\n\n0,1"
+ ],
+ [
+ {
+ "x": 10.75,
+ "w": 2.25
+ },
+ "4,4\n\n\n0,2"
+ ],
+ [
+ {
+ "y": 0.25,
+ "x": 2,
+ "w": 1.5
+ },
+ "6,0\n\n\n1,1",
+ "7,0\n\n\n1,1",
+ {
+ "w": 6
+ },
+ "7,2\n\n\n1,1",
+ "7,3\n\n\n1,1",
+ {
+ "w": 1.5
+ },
+ "6,4\n\n\n1,1"
+ ],
+ [
+ {
+ "x": 2,
+ "w": 1.5
+ },
+ "6,0\n\n\n1,2",
+ "7,0\n\n\n1,2",
+ {
+ "w": 3
+ },
+ "7,1\n\n\n1,2",
+ {
+ "w": 3
+ },
+ "7,2\n\n\n1,2",
+ "7,3\n\n\n1,2",
+ {
+ "w": 1.5
+ },
+ "6,4\n\n\n1,2"
+ ],
+ [
+ {
+ "x": 2,
+ "w": 1.5
+ },
+ "6,0\n\n\n1,3",
+ "7,0\n\n\n1,3",
+ "6,1\n\n\n1,3",
+ {
+ "w": 2
+ },
+ "7,1\n\n\n1,3",
+ {
+ "w": 2
+ },
+ "7,2\n\n\n1,3",
+ "6,3\n\n\n1,3",
+ "7,3\n\n\n1,3",
+ {
+ "w": 1.5
+ },
+ "6,4\n\n\n1,3"
+ ],
+ [
+ {
+ "x": 2,
+ "w": 1.5
+ },
+ "6,0\n\n\n1,4",
+ "7,0\n\n\n1,4",
+ {
+ "w": 1.25
+ },
+ "6,1\n\n\n1,4",
+ {
+ "w": 1.75
+ },
+ "7,1\n\n\n1,4",
+ {
+ "w": 1.75
+ },
+ "7,2\n\n\n1,4",
+ {
+ "w": 1.25
+ },
+ "6,3\n\n\n1,4",
+ "7,3\n\n\n1,4",
+ {
+ "w": 1.5
+ },
+ "6,4\n\n\n1,4"
+ ],
+ [
+ {
+ "x": 2
+ },
+ "6,0\n\n\n1,5",
+ "7,0\n\n\n1,5",
+ {
+ "w": 7
+ },
+ "7,2\n\n\n1,5",
+ "7,3\n\n\n1,5",
+ "6,4\n\n\n1,5"
+ ],
+ [
+ {
+ "x": 2
+ },
+ "6,0\n\n\n1,6",
+ "7,0\n\n\n1,6",
+ {
+ "w": 3
+ },
+ "6,1\n\n\n1,6",
+ "7,2\n\n\n1,6",
+ {
+ "w": 3
+ },
+ "6,3\n\n\n1,6",
+ "7,3\n\n\n1,6",
+ "6,4\n\n\n1,6"
+ ],
+ [
+ {
+ "x": 2,
+ "w": 1.25
+ },
+ "6,0\n\n\n1,7",
+ {
+ "w": 1.5
+ },
+ "7,0\n\n\n1,7",
+ {
+ "w": 1.25
+ },
+ "6,1\n\n\n1,7",
+ {
+ "w": 2.75
+ },
+ "7,2\n\n\n1,7",
+ {
+ "w": 1.25
+ },
+ "6,3\n\n\n1,7",
+ {
+ "w": 1.5
+ },
+ "7,3\n\n\n1,7",
+ {
+ "w": 1.5
+ },
+ "6,4\n\n\n1,7"
+ ]
+ ]
+ }
+}
diff --git a/keyboards/nachie/littlewritter/littlewritter.c b/keyboards/nachie/littlewritter/littlewritter.c
new file mode 100755
index 0000000000..9784354c9d
--- /dev/null
+++ b/keyboards/nachie/littlewritter/littlewritter.c
@@ -0,0 +1,89 @@
+/*
+Copyright 2024 Nachie
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include "quantum.h"
+
+
+led_config_t g_led_config = { {
+ { NO_LED, 6, 5, 4, NO_LED, 3, 2, 1, 0, NO_LED },
+ { NO_LED, 6, 5, 4, NO_LED, 3, 2, 1, 0, NO_LED },
+ { 7, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, 15 },
+ { 8, 9, 10, 11, 12, NO_LED, 13, 14, NO_LED, NO_LED},
+ { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }
+}, {
+ { 183,0 }, { 162,0 }, { 142,0 }, { 122,0 }, { 81,0 }, { 61,0 }, { 40,0 },
+ { 20,16 }, { 40,48 },
+ { 61,48 }, { 81,48 }, { 101,48 }, { 122,48 }, { 162,48 }, { 203,48 }, { 244,16 }
+}, {
+ 1, 1, 1, 1, 1, 1, 1,
+ 1, 1,
+ 1, 1, 1, 1, 1, 1, 1
+} };
+
+#ifdef OLED_ENABLE
+
+static void render_logo(void) {
+ static const char PROGMEM my_logo[] = {
+ // 'Screenshot 2023-07-21 at 1', 128x32px
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xfe, 0x00, 0x03, 0xc0, 0x00, 0xc0, 0x00, 0x3c, 0x00, 0x0f, 0x1f, 0xf8, 0xe0, 0x00, 0x1f, 0xff,
+0xff, 0x80, 0x01, 0xc0, 0x00, 0x40, 0x00, 0x38, 0x00, 0x07, 0x1f, 0xf8, 0xe0, 0x00, 0x1f, 0xff,
+0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0x1f, 0xf8, 0xff, 0xff, 0x0f, 0xff,
+0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0x1f, 0xf8, 0xff, 0xff, 0x8f, 0xff,
+0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0x1f, 0xf8, 0xff, 0xff, 0x0f, 0xff,
+0xfe, 0x1f, 0xf1, 0xc0, 0x03, 0xff, 0x8f, 0xf8, 0xff, 0xc7, 0x1f, 0xf8, 0xe1, 0xc0, 0x1f, 0xff,
+0xfe, 0x1f, 0xf1, 0xc0, 0x03, 0xff, 0x8f, 0xf8, 0xff, 0xc7, 0x1f, 0xf8, 0xe1, 0xe0, 0x3f, 0xff,
+0xfe, 0x1f, 0xf1, 0xc3, 0xff, 0xff, 0x8f, 0xf8, 0xff, 0xc7, 0x1f, 0xf8, 0xe1, 0xf0, 0xff, 0xff,
+0xfe, 0x1f, 0xf1, 0xc3, 0xff, 0xff, 0x8f, 0xf8, 0xff, 0xc7, 0x1f, 0xf8, 0xe1, 0xf8, 0x7f, 0xff,
+0xfe, 0x1f, 0xf1, 0xc3, 0xff, 0xff, 0x8f, 0xf8, 0xff, 0xc7, 0x1f, 0xf8, 0xe1, 0xf8, 0x7f, 0xff,
+0xfe, 0x00, 0x01, 0xc0, 0x00, 0x7f, 0x8f, 0xf8, 0x00, 0x07, 0x00, 0x00, 0xe1, 0xfc, 0x3f, 0xff,
+0xfe, 0x00, 0x03, 0xc0, 0x00, 0xff, 0x8f, 0xfc, 0x00, 0x0f, 0x80, 0x01, 0xe1, 0xfe, 0x1f, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+};
+ oled_write_raw_P(my_logo, sizeof(my_logo));
+}
+
+bool oled_task_kb(void) {
+ // Defer to the keymap if they want to override
+
+ if(!oled_task_user()) {
+ return false;
+ }
+
+ // default keyboard drawing code
+ render_logo();
+ return false;
+}
+
+#endif
\ No newline at end of file
diff --git a/keyboards/nachie/littlewritter/mcuconf.h b/keyboards/nachie/littlewritter/mcuconf.h
new file mode 100644
index 0000000000..ed18e34905
--- /dev/null
+++ b/keyboards/nachie/littlewritter/mcuconf.h
@@ -0,0 +1,3 @@
+#pragma once
+
+#include_next
diff --git a/keyboards/nachie/littlewritter/readme.md b/keyboards/nachie/littlewritter/readme.md
new file mode 100644
index 0000000000..719ba4e63b
--- /dev/null
+++ b/keyboards/nachie/littlewritter/readme.md
@@ -0,0 +1,23 @@
+# LittleWritter
+
+Firmware for the LittleWritter
+
+* Keyboard Maintainer: [Nachie](https://github.com/nachie)
+* Hardware Supported: LittleWritter
+* Hardware Availability: [Little Craftery](https://littlecraftery.com/products/littlewritter)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make nachie/littlewritter:default
+
+Or to make and flash:
+
+ make nachie/littlewritter:default:flash
+
+
+See 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).
+
+## Bootloader
+
+* **Bootmagic reset**: Hold down ESC key (top left) and plug in the keyboard
+* **Physical reset button**: Briefly press the button labeled "SW_RST1" on the back of the PCB
diff --git a/keyboards/nachie/littlewritter/rules.mk b/keyboards/nachie/littlewritter/rules.mk
new file mode 100755
index 0000000000..2c49b41d7a
--- /dev/null
+++ b/keyboards/nachie/littlewritter/rules.mk
@@ -0,0 +1 @@
+# This file is intentionally left blank
\ No newline at end of file
diff --git a/keyboards/nachie/rnd60/config.h b/keyboards/nachie/rnd60/config.h
new file mode 100644
index 0000000000..2451782afd
--- /dev/null
+++ b/keyboards/nachie/rnd60/config.h
@@ -0,0 +1,29 @@
+/*
+Copyright 2024 nachie
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
+
+/* number of backlight levels */
+
+#define VIA_CUSTOM_LIGHTING_ENABLE
+
+#define LED_CAPS_LOCK_PIN GP17
+#define LED_KANA_PIN GP26
+#define LED_PIN_ON_STATE 1
diff --git a/keyboards/nachie/rnd60/info.json b/keyboards/nachie/rnd60/info.json
new file mode 100644
index 0000000000..9664025c5b
--- /dev/null
+++ b/keyboards/nachie/rnd60/info.json
@@ -0,0 +1,155 @@
+{
+ "keyboard_name": "RND60",
+ "manufacturer": "Nachie",
+ "board": "GENERIC_RP_RP2040",
+ "bootloader": "rp2040",
+ "processor": "RP2040",
+ "usb": {
+ "vid": "0x4B43",
+ "pid": "0x5336",
+ "device_version": "1.0.0"
+ },
+ "url": "https://rndkbd.com",
+ "maintainer": "nachie",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "audio": false,
+ "backlight": false,
+ "rgblight": false,
+ "encoder": false,
+ "rgb_matrix": true
+ },
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": ["GP21", "GP5", "GP4", "GP3", "GP2", "GP1", "GP0", "GP15", "GP14", "GP13", "GP12", "GP11", "GP10", "GP8", "GP9"],
+ "rows": ["GP28", "GP27", "GP20", "GP6", "GP7"]
+ },
+ "ws2812": {
+ "pin": "GP29",
+ "driver": "vendor"
+ },
+ "rgb_matrix": {
+ "driver": "ws2812",
+ "led_count": 16,
+ "animations": {
+ "alphas_mods": true,
+ "gradient_up_down": true,
+ "gradient_left_right": true,
+ "breathing": true,
+ "band_sat": true,
+ "band_val": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "rainbow_moving_chevron":true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "jellybean_raindrops": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "typing_heatmap": true,
+ "digital_rain": true,
+ "solid_reactive_simple": true,
+ "solid_reactive": true,
+ "solid_reactive_wide": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_multinexus": true,
+ "splash": true,
+ "solid_splash": true,
+ "solid_multisplash": true,
+ "pixel_rain": true,
+ "pixel_fractal": true
+ }
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"y": 0, "x": 0, "matrix": [0, 0], "label": "0,0"},
+ {"y": 0, "x": 1, "matrix": [0, 1], "label": "0,1"},
+ {"y": 0, "x": 2, "matrix": [0, 2], "label": "0,2"},
+ {"y": 0, "x": 3, "matrix": [0, 3], "label": "0,3"},
+ {"y": 0, "x": 4, "matrix": [0, 4], "label": "0,4"},
+ {"y": 0, "x": 5, "matrix": [0, 5], "label": "0,5"},
+ {"y": 0, "x": 6, "matrix": [0, 6], "label": "0,6"},
+ {"y": 0, "x": 7, "matrix": [0, 7], "label": "0,7"},
+ {"y": 0, "x": 8, "matrix": [0, 8], "label": "0,8"},
+ {"y": 0, "x": 9, "matrix": [0, 9], "label": "0,9"},
+ {"y": 0, "x": 10, "matrix": [0, 10], "label": "0,10"},
+ {"y": 0, "x": 11, "matrix": [0, 11], "label": "0,11"},
+ {"y": 0, "x": 12, "matrix": [0, 12], "label": "0,12"},
+ {"y": 0, "x": 13, "matrix": [0, 13], "label": "0,13"},
+ {"y": 0, "x": 14, "matrix": [0, 14], "label": "0,14"},
+ {"y": 1, "x": 0, "matrix": [1, 0], "w": 1.5, "label": "1,0"},
+ {"y": 1, "x": 1.5, "matrix": [1, 1], "label": "1,1"},
+ {"y": 1, "x": 2.5, "matrix": [1, 2], "label": "1,2"},
+ {"y": 1, "x": 3.5, "matrix": [1, 3], "label": "1,3"},
+ {"y": 1, "x": 4.5, "matrix": [1, 4], "label": "1,4"},
+ {"y": 1, "x": 5.5, "matrix": [1, 5], "label": "1,5"},
+ {"y": 1, "x": 6.5, "matrix": [1, 6], "label": "1,6"},
+ {"y": 1, "x": 7.5, "matrix": [1, 7], "label": "1,7"},
+ {"y": 1, "x": 8.5, "matrix": [1, 8], "label": "1,8"},
+ {"y": 1, "x": 9.5, "matrix": [1, 9], "label": "1,9"},
+ {"y": 1, "x": 10.5, "matrix": [1, 10], "label": "1,10"},
+ {"y": 1, "x": 11.5, "matrix": [1, 11], "label": "1,11"},
+ {"y": 1, "x": 12.5, "matrix": [1, 12], "label": "1,12"},
+ {"y": 1, "x": 13.5, "matrix": [1, 14], "w": 1.5, "label": "1,14"},
+ {"y": 2, "x": 0, "matrix": [2, 0], "w": 1.75, "label": "2,0"},
+ {"y": 2, "x": 1.75, "matrix": [2, 1], "label": "2,1"},
+ {"y": 2, "x": 2.75, "matrix": [2, 2], "label": "2,2"},
+ {"y": 2, "x": 3.75, "matrix": [2, 3], "label": "2,3"},
+ {"y": 2, "x": 4.75, "matrix": [2, 4], "label": "2,4"},
+ {"y": 2, "x": 5.75, "matrix": [2, 5], "label": "2,5"},
+ {"y": 2, "x": 6.75, "matrix": [2, 6], "label": "2,6"},
+ {"y": 2, "x": 7.75, "matrix": [2, 7], "label": "2,7"},
+ {"y": 2, "x": 8.75, "matrix": [2, 8], "label": "2,8"},
+ {"y": 2, "x": 9.75, "matrix": [2, 9], "label": "2,9"},
+ {"y": 2, "x": 10.75, "matrix": [2, 10], "label": "2,10"},
+ {"y": 2, "x": 11.75, "matrix": [2, 11], "label": "2,11"},
+ {"y": 2, "x": 12.75, "matrix": [2, 12], "label": "2,12"},
+ {"y": 2, "x": 12.75, "matrix": [2, 13], "w": 2.25, "label": "2,13"},
+ {"y": 3, "x": 0, "matrix": [3, 0], "w": 1.25, "label": "3,0"},
+ {"y": 3, "x": 1.25, "matrix": [3, 1], "label": "3,1"},
+ {"y": 3, "x": 2.25, "matrix": [3, 2], "label": "3,2"},
+ {"y": 3, "x": 3.25, "matrix": [3, 3], "label": "3,3"},
+ {"y": 3, "x": 4.25, "matrix": [3, 4], "label": "3,4"},
+ {"y": 3, "x": 5.25, "matrix": [3, 5], "label": "3,5"},
+ {"y": 3, "x": 6.25, "matrix": [3, 6], "label": "3,6"},
+ {"y": 3, "x": 7.25, "matrix": [3, 7], "label": "3,7"},
+ {"y": 3, "x": 8.25, "matrix": [3, 8], "label": "3,8"},
+ {"y": 3, "x": 9.25, "matrix": [3, 9], "label": "3,9"},
+ {"y": 3, "x": 10.25, "matrix": [3, 10], "label": "3,10"},
+ {"y": 3, "x": 11.25, "matrix": [3, 11], "label": "3,11"},
+ {"y": 3, "x": 12.25, "matrix": [3, 12], "w": 1.75, "label": "3,12"},
+ {"y": 3, "x": 14, "matrix": [3, 14], "label": "3,14"},
+ {"y": 4, "x": 0, "matrix": [4, 0], "w": 1.25, "label": "4,0"},
+ {"y": 4, "x": 1.25, "matrix": [4, 1], "w": 1.25, "label": "4,1"},
+ {"y": 4, "x": 2.5, "matrix": [4, 2], "w": 1.25, "label": "4,2"},
+ {"y": 4, "x": 4, "matrix": [4, 4], "label": "4,4"},
+ {"y": 4, "x": 5, "matrix": [4, 5], "w": 2.25, "label": "4,5"},
+ {"y": 4, "x": 7, "matrix": [4, 7], "label": "4,7"},
+ {"y": 4, "x": 8, "matrix": [4, 9], "w": 3, "label": "4,9"},
+ {"y": 4, "x": 10, "matrix": [4, 10], "w": 1.25, "label": "4,10"},
+ {"y": 4, "x": 11.25, "matrix": [4, 11], "w": 1.25, "label": "4,11"},
+ {"y": 4, "x": 12.5, "matrix": [4, 12], "w": 1.25, "label": "4,12"},
+ {"y": 4, "x": 13.75, "matrix": [4, 14], "w": 1.25, "label": "4,14"}
+ ]
+ }
+ }
+ }
diff --git a/keyboards/nachie/rnd60/keyboard.json b/keyboards/nachie/rnd60/keyboard.json
new file mode 100644
index 0000000000..6e63a2d125
--- /dev/null
+++ b/keyboards/nachie/rnd60/keyboard.json
@@ -0,0 +1,155 @@
+{
+ "keyboard_name": "RND60",
+ "manufacturer": "Nachie",
+ "board": "GENERIC_RP_RP2040",
+ "bootloader": "rp2040",
+ "processor": "RP2040",
+ "usb": {
+ "vid": "0x4B43",
+ "pid": "0x5336",
+ "device_version": "1.0.0"
+ },
+ "url": "https://rndkbd.com",
+ "maintainer": "nachie",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "audio": false,
+ "backlight": false,
+ "rgblight": false,
+ "encoder": false,
+ "rgb_matrix": true
+ },
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": ["GP21", "GP5", "GP4", "GP3", "GP2", "GP1", "GP0", "GP15", "GP14", "GP13", "GP12", "GP11", "GP10", "GP8", "GP9"],
+ "rows": ["GP28", "GP27", "GP20", "GP6", "GP7"]
+ },
+ "ws2812": {
+ "pin": "GP29",
+ "driver": "vendor"
+ },
+ "rgb_matrix": {
+ "driver": "ws2812",
+ "led_count": 16,
+ "animations": {
+ "alphas_mods": true,
+ "gradient_up_down": true,
+ "gradient_left_right": true,
+ "breathing": true,
+ "band_sat": true,
+ "band_val": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "rainbow_moving_chevron":true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "jellybean_raindrops": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "typing_heatmap": true,
+ "digital_rain": true,
+ "solid_reactive_simple": true,
+ "solid_reactive": true,
+ "solid_reactive_wide": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_multinexus": true,
+ "splash": true,
+ "solid_splash": true,
+ "solid_multisplash": true,
+ "pixel_rain": true,
+ "pixel_fractal": true
+ }
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"y": 0, "x": 0, "matrix": [0, 0], "label": "0,0"},
+ {"y": 0, "x": 1, "matrix": [0, 1], "label": "0,1"},
+ {"y": 0, "x": 2, "matrix": [0, 2], "label": "0,2"},
+ {"y": 0, "x": 3, "matrix": [0, 3], "label": "0,3"},
+ {"y": 0, "x": 4, "matrix": [0, 4], "label": "0,4"},
+ {"y": 0, "x": 5, "matrix": [0, 5], "label": "0,5"},
+ {"y": 0, "x": 6, "matrix": [0, 6], "label": "0,6"},
+ {"y": 0, "x": 7, "matrix": [0, 7], "label": "0,7"},
+ {"y": 0, "x": 8, "matrix": [0, 8], "label": "0,8"},
+ {"y": 0, "x": 9, "matrix": [0, 9], "label": "0,9"},
+ {"y": 0, "x": 10, "matrix": [0, 10], "label": "0,10"},
+ {"y": 0, "x": 11, "matrix": [0, 11], "label": "0,11"},
+ {"y": 0, "x": 12, "matrix": [0, 12], "label": "0,12"},
+ {"y": 0, "x": 13, "matrix": [0, 13], "label": "0,13"},
+ {"y": 0, "x": 14, "matrix": [0, 14], "label": "0,14"},
+ {"y": 1, "x": 0, "matrix": [1, 0], "w": 1.5, "label": "1,0"},
+ {"y": 1, "x": 1.5, "matrix": [1, 1], "label": "1,1"},
+ {"y": 1, "x": 2.5, "matrix": [1, 2], "label": "1,2"},
+ {"y": 1, "x": 3.5, "matrix": [1, 3], "label": "1,3"},
+ {"y": 1, "x": 4.5, "matrix": [1, 4], "label": "1,4"},
+ {"y": 1, "x": 5.5, "matrix": [1, 5], "label": "1,5"},
+ {"y": 1, "x": 6.5, "matrix": [1, 6], "label": "1,6"},
+ {"y": 1, "x": 7.5, "matrix": [1, 7], "label": "1,7"},
+ {"y": 1, "x": 8.5, "matrix": [1, 8], "label": "1,8"},
+ {"y": 1, "x": 9.5, "matrix": [1, 9], "label": "1,9"},
+ {"y": 1, "x": 10.5, "matrix": [1, 10], "label": "1,10"},
+ {"y": 1, "x": 11.5, "matrix": [1, 11], "label": "1,11"},
+ {"y": 1, "x": 12.5, "matrix": [1, 12], "label": "1,12"},
+ {"y": 1, "x": 13.5, "matrix": [1, 14], "w": 1.5, "label": "1,14"},
+ {"y": 2, "x": 0, "matrix": [2, 0], "w": 1.75, "label": "2,0"},
+ {"y": 2, "x": 1.75, "matrix": [2, 1], "label": "2,1"},
+ {"y": 2, "x": 2.75, "matrix": [2, 2], "label": "2,2"},
+ {"y": 2, "x": 3.75, "matrix": [2, 3], "label": "2,3"},
+ {"y": 2, "x": 4.75, "matrix": [2, 4], "label": "2,4"},
+ {"y": 2, "x": 5.75, "matrix": [2, 5], "label": "2,5"},
+ {"y": 2, "x": 6.75, "matrix": [2, 6], "label": "2,6"},
+ {"y": 2, "x": 7.75, "matrix": [2, 7], "label": "2,7"},
+ {"y": 2, "x": 8.75, "matrix": [2, 8], "label": "2,8"},
+ {"y": 2, "x": 9.75, "matrix": [2, 9], "label": "2,9"},
+ {"y": 2, "x": 10.75, "matrix": [2, 10], "label": "2,10"},
+ {"y": 2, "x": 11.75, "matrix": [2, 11], "label": "2,11"},
+ {"y": 2, "x": 12.75, "matrix": [2, 12], "label": "2,12"},
+ {"y": 2, "x": 12.75, "matrix": [2, 13], "w": 2.25, "label": "2,13"},
+ {"y": 3, "x": 0, "matrix": [3, 0], "w": 1.25, "label": "3,0"},
+ {"y": 3, "x": 1.25, "matrix": [3, 1], "label": "3,1"},
+ {"y": 3, "x": 2.25, "matrix": [3, 2], "label": "3,2"},
+ {"y": 3, "x": 3.25, "matrix": [3, 3], "label": "3,3"},
+ {"y": 3, "x": 4.25, "matrix": [3, 4], "label": "3,4"},
+ {"y": 3, "x": 5.25, "matrix": [3, 5], "label": "3,5"},
+ {"y": 3, "x": 6.25, "matrix": [3, 6], "label": "3,6"},
+ {"y": 3, "x": 7.25, "matrix": [3, 7], "label": "3,7"},
+ {"y": 3, "x": 8.25, "matrix": [3, 8], "label": "3,8"},
+ {"y": 3, "x": 9.25, "matrix": [3, 9], "label": "3,9"},
+ {"y": 3, "x": 10.25, "matrix": [3, 10], "label": "3,10"},
+ {"y": 3, "x": 11.25, "matrix": [3, 11], "label": "3,11"},
+ {"y": 3, "x": 12.25, "matrix": [3, 12], "w": 1.75, "label": "3,12"},
+ {"y": 3, "x": 14, "matrix": [3, 14], "label": "3,14"},
+ {"y": 4, "x": 0, "matrix": [4, 0], "w": 1.25, "label": "4,0"},
+ {"y": 4, "x": 1.25, "matrix": [4, 1], "w": 1.25, "label": "4,1"},
+ {"y": 4, "x": 2.5, "matrix": [4, 2], "w": 1.25, "label": "4,2"},
+ {"y": 4, "x": 4, "matrix": [4, 4], "label": "4,4"},
+ {"y": 4, "x": 5, "matrix": [4, 5], "w": 2.25, "label": "4,5"},
+ {"y": 4, "x": 7, "matrix": [4, 7], "label": "4,7"},
+ {"y": 4, "x": 8, "matrix": [4, 9], "w": 3, "label": "4,9"},
+ {"y": 4, "x": 10, "matrix": [4, 10], "w": 1.25, "label": "4,10"},
+ {"y": 4, "x": 11.25, "matrix": [4, 11], "w": 1.25, "label": "4,11"},
+ {"y": 4, "x": 12.5, "matrix": [4, 12], "w": 1.25, "label": "4,12"},
+ {"y": 4, "x": 13.75, "matrix": [4, 14], "w": 1.25, "label": "4,14"}
+ ]
+ }
+ }
+}
diff --git a/keyboards/nachie/rnd60/keymaps/default/keymap.c b/keyboards/nachie/rnd60/keymaps/default/keymap.c
new file mode 100644
index 0000000000..45eac72322
--- /dev/null
+++ b/keyboards/nachie/rnd60/keymaps/default/keymap.c
@@ -0,0 +1,54 @@
+/*
+Copyright 2024 nachie
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUBS, KC_ENT,
+ KC_LSFT, KC_NUHS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_VOLD, KC_SPC, KC_MPLY, KC_SPC, KC_VOLU, KC_RALT, KC_LGUI, KC_LCTL
+ ),
+
+ [1] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [2] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [3] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+
+};
diff --git a/keyboards/nachie/rnd60/keymaps/vial/config.h b/keyboards/nachie/rnd60/keymaps/vial/config.h
new file mode 100644
index 0000000000..181ca38486
--- /dev/null
+++ b/keyboards/nachie/rnd60/keymaps/vial/config.h
@@ -0,0 +1,9 @@
+#pragma once
+
+#define VIAL_KEYBOARD_UID {0xEB, 0x02, 0x48, 0xB5, 0x37, 0x0B, 0x55, 0x7B}
+
+#define VIAL_UNLOCK_COMBO_ROWS { 0, 2 }
+#define VIAL_UNLOCK_COMBO_COLS { 0, 13 }
+
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define RGB_MATRIX_KEYPRESSES
\ No newline at end of file
diff --git a/keyboards/nachie/rnd60/keymaps/vial/keymap.c b/keyboards/nachie/rnd60/keymaps/vial/keymap.c
new file mode 100644
index 0000000000..c9feda29ac
--- /dev/null
+++ b/keyboards/nachie/rnd60/keymaps/vial/keymap.c
@@ -0,0 +1,54 @@
+/*
+Copyright 2024 nachie
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUBS, KC_ENT,
+ KC_LSFT, KC_NUHS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_LGUI, KC_APP, KC_LCTL
+ ),
+
+ [1] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [2] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [3] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+
+};
diff --git a/keyboards/nachie/rnd60/keymaps/vial/rules.mk b/keyboards/nachie/rnd60/keymaps/vial/rules.mk
new file mode 100644
index 0000000000..d013bc62da
--- /dev/null
+++ b/keyboards/nachie/rnd60/keymaps/vial/rules.mk
@@ -0,0 +1,3 @@
+VIA_ENABLE = yes
+VIAL_ENABLE = yes
+VIALRGB_ENABLE = yes
diff --git a/keyboards/nachie/rnd60/keymaps/vial/vial.json b/keyboards/nachie/rnd60/keymaps/vial/vial.json
new file mode 100644
index 0000000000..7fa02bd148
--- /dev/null
+++ b/keyboards/nachie/rnd60/keymaps/vial/vial.json
@@ -0,0 +1,346 @@
+{
+ "name": "RND60",
+ "vendorId": "0x4B43",
+ "productId": "0x5345",
+ "lighting": "vialrgb",
+ "matrix": {
+ "rows": 5,
+ "cols": 15
+ },
+ "layouts": {
+ "labels": [
+ "Split Backspace",
+ ["Enter", "ANSI", "ISO"],
+ "Split Left Shift",
+ "Split Right Shift",
+ ["Space", "6.25u", "3-1-3 Split", "Small Split", "10u", "7u"]
+ ],
+ "keymap": [
+ [
+ {
+ "x": 2.5,
+ "c": "#777777"
+ },
+ "0,0",
+ {
+ "c": "#cccccc"
+ },
+ "0,1",
+ "0,2",
+ "0,3",
+ "0,4",
+ "0,5",
+ "0,6",
+ "0,7",
+ "0,8",
+ "0,9",
+ "0,10",
+ "0,11",
+ "0,12",
+ {
+ "c": "#aaaaaa",
+ "w": 2
+ },
+ "0,14\n\n\n0,0",
+ {
+ "x": 1
+ },
+ "0,13\n\n\n0,1",
+ "0,14\n\n\n0,1"
+ ],
+ [
+ {
+ "x": 2.5,
+ "w": 1.5
+ },
+ "1,0",
+ {
+ "c": "#cccccc"
+ },
+ "1,1",
+ "1,2",
+ "1,3",
+ "1,4",
+ "1,5",
+ "1,6",
+ "1,7",
+ "1,8",
+ "1,9",
+ "1,10",
+ "1,11",
+ "1,12",
+ {
+ "c": "#aaaaaa",
+ "w": 1.5
+ },
+ "1,14\n\n\n1,0",
+ {
+ "x": 1.75,
+ "c": "#777777",
+ "w": 1.25,
+ "h": 2,
+ "w2": 1.5,
+ "h2": 1,
+ "x2": -0.25
+ },
+ "2,13\n\n\n1,1"
+ ],
+ [
+ {
+ "x": 2.5,
+ "c": "#aaaaaa",
+ "w": 1.75
+ },
+ "2,0",
+ {
+ "c": "#cccccc"
+ },
+ "2,1",
+ "2,2",
+ "2,3",
+ "2,4",
+ "2,5",
+ "2,6",
+ "2,7",
+ "2,8",
+ "2,9",
+ "2,10",
+ "2,11",
+ {
+ "c": "#777777",
+ "w": 2.25
+ },
+ "2,13\n\n\n1,0",
+ {
+ "x": 0.75,
+ "c": "#cccccc"
+ },
+ "2,12\n\n\n1,1"
+ ],
+ [
+ {
+ "c": "#aaaaaa",
+ "w": 1.25
+ },
+ "3,0\n\n\n2,1",
+ "3,1\n\n\n2,1",
+ {
+ "x": 0.25,
+ "w": 2.25
+ },
+ "3,0\n\n\n2,0",
+ {
+ "c": "#cccccc"
+ },
+ "3,2",
+ "3,3",
+ "3,4",
+ "3,5",
+ "3,6",
+ "3,7",
+ "3,8",
+ "3,9",
+ "3,10",
+ "3,11",
+ {
+ "c": "#aaaaaa",
+ "w": 2.75
+ },
+ "3,12\n\n\n3,0",
+ {
+ "x": 0.25,
+ "w": 1.75
+ },
+ "3,12\n\n\n3,1",
+ "3,14\n\n\n3,1"
+ ],
+ [
+ {
+ "x": 2.5,
+ "w": 1.25
+ },
+ "4,0\n\n\n4,0",
+ {
+ "x": -1.25,
+ "w": 1.5
+ },
+ "4,0\n\n\n4,4",
+ {
+ "x": -1.5,
+ "w": 1.5
+ },
+ "4,0\n\n\n4,1",
+ {
+ "x": -1.5,
+ "w": 1.5
+ },
+ "4,0\n\n\n4,2",
+ {
+ "x": -1.5,
+ "w": 1.5
+ },
+ "4,0\n\n\n4,3",
+ {
+ "x": -0.25,
+ "w": 1.25
+ },
+ "4,1\n\n\n4,0",
+ {
+ "x": -1
+ },
+ "4,1\n\n\n4,4",
+ {
+ "x": -1
+ },
+ "4,1\n\n\n4,1",
+ {
+ "x": -1
+ },
+ "4,1\n\n\n4,2",
+ {
+ "x": -1
+ },
+ "4,1\n\n\n4,3",
+ {
+ "w": 1.25
+ },
+ "4,2\n\n\n4,0",
+ {
+ "x": -1.25,
+ "w": 1.5
+ },
+ "4,2\n\n\n4,4",
+ {
+ "x": -1.5,
+ "w": 1.5
+ },
+ "4,2\n\n\n4,1",
+ {
+ "x": -1.5,
+ "w": 1.5
+ },
+ "4,2\n\n\n4,2",
+ {
+ "x": -1.5,
+ "c": "#cccccc",
+ "w": 10
+ },
+ "4,7\n\n\n4,3",
+ {
+ "x": -8.75,
+ "w": 6.25
+ },
+ "4,7\n\n\n4,0",
+ {
+ "x": -6,
+ "w": 7
+ },
+ "4,7\n\n\n4,4",
+ {
+ "x": -7,
+ "w": 3
+ },
+ "4,5\n\n\n4,1",
+ {
+ "x": -3,
+ "c": "#aaaaaa"
+ },
+ "4,4\n\n\n4,2",
+ {
+ "c": "#cccccc",
+ "w": 2.25
+ },
+ "4,5\n\n\n4,2",
+ {
+ "x": -0.25,
+ "c": "#aaaaaa"
+ },
+ "4,7\n\n\n4,1",
+ {
+ "x": -0.75,
+ "c": "#cccccc",
+ "w": 2.75
+ },
+ "4,9\n\n\n4,2",
+ {
+ "x": -2,
+ "w": 3
+ },
+ "4,9\n\n\n4,1",
+ {
+ "x": -1,
+ "c": "#aaaaaa",
+ "w": 1.25
+ },
+ "4,10\n\n\n4,0",
+ {
+ "x": -1.25
+ },
+ "4,10\n\n\n4,2",
+ {
+ "w": 1.5
+ },
+ "4,11\n\n\n4,4",
+ {
+ "x": -1.5,
+ "w": 1.5
+ },
+ "4,11\n\n\n4,1",
+ {
+ "x": -1.5,
+ "w": 1.5
+ },
+ "4,11\n\n\n4,2",
+ {
+ "x": -1.25,
+ "w": 1.25
+ },
+ "4,11\n\n\n4,0",
+ {
+ "w": 1.25
+ },
+ "4,12\n\n\n4,0",
+ {
+ "x": -1.25
+ },
+ "4,12\n\n\n4,4",
+ {
+ "x": -1
+ },
+ "4,12\n\n\n4,1",
+ {
+ "x": -1
+ },
+ "4,12\n\n\n4,2",
+ {
+ "x": -1
+ },
+ "4,12\n\n\n4,3",
+ {
+ "w": 1.5
+ },
+ "4,14\n\n\n4,4",
+ {
+ "x": -1.5,
+ "w": 1.5
+ },
+ "4,14\n\n\n4,1",
+ {
+ "x": -1.5,
+ "w": 1.5
+ },
+ "4,14\n\n\n4,2",
+ {
+ "x": -1.5,
+ "w": 1.5
+ },
+ "4,14\n\n\n4,3",
+ {
+ "x": -1.25,
+ "w": 1.25
+ },
+ "4,14\n\n\n4,0"
+ ]
+ ]
+ }
+}
\ No newline at end of file
diff --git a/keyboards/nachie/rnd60/rnd60.c b/keyboards/nachie/rnd60/rnd60.c
new file mode 100644
index 0000000000..3d117420fc
--- /dev/null
+++ b/keyboards/nachie/rnd60/rnd60.c
@@ -0,0 +1,38 @@
+/*
+Copyright 2024 nachie
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include "quantum.h"
+
+led_config_t g_led_config = { {
+ { NO_LED, 0, NO_LED, 1, NO_LED, 2, NO_LED, NO_LED, 3, NO_LED, 4, NO_LED, 5, NO_LED, NO_LED },
+ { 6, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, 7 },
+ { 8, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED },
+ { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, 9 },
+ { NO_LED, NO_LED, 10, NO_LED, 11, 12, NO_LED, NO_LED, 13, 14, NO_LED, 15, NO_LED, NO_LED, NO_LED }
+}, {
+ { 16,0 }, { 49,0 }, { 81,0 }, { 130,0 }, { 163,0 }, { 195,0 },
+ { 4,16 }, { 224,16 },
+ { 6,32 },
+ { 224,48 },
+ { 16,64 }, { 51,64 }, { 79,64 }, { 120,64 }, { 153,64 }, { 204,64 }
+}, {
+ 1, 1, 1, 1, 1, 1,
+ 1, 1,
+ 1,
+ 1,
+ 1, 1, 1, 1, 1, 1
+} };
\ No newline at end of file
diff --git a/keyboards/nachie/rnd60/rules.mk b/keyboards/nachie/rnd60/rules.mk
new file mode 100644
index 0000000000..837f4bffb5
--- /dev/null
+++ b/keyboards/nachie/rnd60/rules.mk
@@ -0,0 +1 @@
+# This file is intentionally left blank
diff --git a/keyboards/nachie/subtext/chconf.h b/keyboards/nachie/subtext/chconf.h
new file mode 100644
index 0000000000..f58ef8c02a
--- /dev/null
+++ b/keyboards/nachie/subtext/chconf.h
@@ -0,0 +1,26 @@
+/*
+Copyright 2024 Nachie
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#define CH_CFG_ST_FREQUENCY 10000
+
+#define CH_CFG_OPTIMIZE_SPEED FALSE
+
+#define CH_CFG_USE_CONDVARS_TIMEOUT FALSE
+
+#include_next
diff --git a/keyboards/nachie/subtext/config.h b/keyboards/nachie/subtext/config.h
new file mode 100644
index 0000000000..579b7833ba
--- /dev/null
+++ b/keyboards/nachie/subtext/config.h
@@ -0,0 +1,46 @@
+/*
+Copyright 2024 nachie
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#ifdef OLED_ENABLE
+/* Oled config */
+#define OLED_DISPLAY_ADDRESS 0x3C
+#define I2C1_SCL_PIN B6
+#define I2C1_SDA_PIN B7
+#define I2C1_SCL_PAL_MODE 1
+#define I2C1_SDA_PAL_MODE 1
+
+#define OLED_TIMEOUT 60000 // Turns off the OLED screen after x ms of keyboard inactivity. Helps reduce OLED Burn-in. Set to 0 to disable.
+#define OLED_BRIGHTNESS 50 // The default brightness level of the OLED, from 0 to 255.
+#define OLED_UPDATE_INTERVAL 16 // limits in milliseconds how frequently the OLED updates. Calculation 1000/fps (increases keyboard responsiveness)
+
+#endif
+
+/* I2c Timings at 48mhz - Fast mode 400KHz */
+// #define I2C1_TIMINGR_PRESC 2U
+// #define I2C1_TIMINGR_SCLDEL 1U
+// #define I2C1_TIMINGR_SDADEL 0U
+// #define I2C1_TIMINGR_SCLH 9U
+// #define I2C1_TIMINGR_SCLL 26U
+
+/* I2c Timings at 48mhz - Fast mode plus 1MHz */
+#define I2C1_TIMINGR_PRESC 0x00U
+#define I2C1_TIMINGR_SCLDEL 0x03U
+#define I2C1_TIMINGR_SDADEL 0x01U
+#define I2C1_TIMINGR_SCLH 0x03U
+#define I2C1_TIMINGR_SCLL 0x09U
diff --git a/keyboards/nachie/subtext/halconf.h b/keyboards/nachie/subtext/halconf.h
new file mode 100644
index 0000000000..b80587a2f9
--- /dev/null
+++ b/keyboards/nachie/subtext/halconf.h
@@ -0,0 +1,22 @@
+/*
+Copyright 2024 nachie
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#define HAL_USE_I2C TRUE
+
+#include_next
diff --git a/keyboards/nachie/subtext/info.json b/keyboards/nachie/subtext/info.json
new file mode 100644
index 0000000000..1ad2beadaf
--- /dev/null
+++ b/keyboards/nachie/subtext/info.json
@@ -0,0 +1,83 @@
+{
+ "keyboard_name": "Subtext",
+ "manufacturer": "Nachie",
+ "usb": {
+ "vid": "0x4B43",
+ "pid": "0x5354",
+ "device_version": "1.0.0"
+ },
+ "url": "https://littlecraftery.com/products/subtext",
+ "maintainer": "nachie",
+ "bootloader": "stm32-dfu",
+ "processor": "STM32F072",
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "h": 0.75, "label": "0,0", "w": 1.0357, "y": 0.0, "x": 0},
+ {"matrix": [1, 0], "h": 0.75, "label": "1,0", "w": 1.0357, "y": 0.0, "x": 1.03},
+ {"matrix": [0, 1], "h": 0.75, "label": "0,1", "w": 1.0357, "y": 0.0, "x": 2.0700000000000003},
+ {"matrix": [1, 1], "h": 0.75, "label": "1,1", "w": 1.0357, "y": 0.0, "x": 3.1},
+ {"matrix": [0, 3], "h": 0.75, "label": "0,3", "w": 1.0357, "y": 0.0, "x": 6.46},
+ {"matrix": [1, 3], "h": 0.75, "label": "1,3", "w": 1.0357, "y": 0.0, "x": 7.5},
+ {"matrix": [0, 4], "h": 0.75, "label": "0,4", "w": 1.0357, "y": 0.0, "x": 8.530000000000001},
+ {"matrix": [1, 4], "h": 0.75, "label": "1,4", "w": 1.0357, "y": 0.0, "x": 9.57},
+ {"matrix": [2, 0], "h": 0.75, "label": "2,0", "w": 1.0357, "y": 1.0, "x": 0},
+ {"matrix": [3, 0], "h": 0.75, "label": "3,0", "w": 1.0357, "y": 1.0, "x": 1.03},
+ {"matrix": [2, 1], "h": 0.75, "label": "2,1", "w": 1.0357, "y": 1.0, "x": 2.0700000000000003},
+ {"matrix": [3, 1], "h": 0.75, "label": "3,1", "w": 1.0357, "y": 1.0, "x": 3.1},
+ {"matrix": [2, 2], "h": 0.75, "label": "2,2", "w": 1.0357, "y": 1.0, "x": 4.140000000000001},
+ {"matrix": [3, 2], "h": 0.75, "label": "3,2", "w": 1.0357, "y": 1.0, "x": 5.180000000000001},
+ {"matrix": [2, 3], "h": 0.75, "label": "2,3", "w": 1.0357, "y": 1.0, "x": 6.21},
+ {"matrix": [3, 3], "h": 0.75, "label": "3,3", "w": 1.0357, "y": 1.0, "x": 7.250000000000001},
+ {"matrix": [2, 4], "h": 0.75, "label": "2,4", "w": 1.0357, "y": 1.0, "x": 8.280000000000001},
+ {"matrix": [3, 4], "h": 0.75, "label": "3,4", "w": 1.0357, "y": 1.0, "x": 9.32},
+ {"matrix": [4, 0], "h": 0.75, "label": "4,0", "w": 1.0357, "y": 1.75, "x": 0.25},
+ {"matrix": [5, 0], "h": 0.75, "label": "5,0", "w": 1.0357, "y": 1.75, "x": 1.28},
+ {"matrix": [4, 1], "h": 0.75, "label": "4,1", "w": 1.0357, "y": 1.75, "x": 2.3200000000000003},
+ {"matrix": [5, 1], "h": 0.75, "label": "5,1", "w": 1.0357, "y": 1.75, "x": 3.35},
+ {"matrix": [4, 2], "h": 0.75, "label": "4,2", "w": 1.0357, "y": 1.75, "x": 4.390000000000001},
+ {"matrix": [5, 2], "h": 0.75, "label": "5,2", "w": 1.0357, "y": 1.75, "x": 5.430000000000001},
+ {"matrix": [4, 3], "h": 0.75, "label": "4,3", "w": 1.0357, "y": 1.75, "x": 6.46},
+ {"matrix": [5, 3], "h": 0.75, "label": "5,3", "w": 1.0357, "y": 1.75, "x": 7.500000000000001},
+ {"matrix": [4, 4], "h": 0.75, "label": "4,4", "w": 1.0357, "y": 1.75, "x": 8.530000000000001},
+ {"matrix": [5, 4], "h": 0.75, "label": "5,4", "w": 1.0357, "y": 1.75, "x": 9.57},
+ {"matrix": [7, 0], "h": 0.75, "label": "7,0", "w": 1.0357, "y": 2.5, "x": 0.5},
+ {"matrix": [6, 1], "h": 0.75, "label": "6,1", "w": 1.0357, "y": 2.5, "x": 1.53},
+ {"matrix": [7, 1], "h": 0.75, "label": "7,1", "w": 1.0357, "y": 2.5, "x": 2.5700000000000003},
+ {"matrix": [6, 2], "h": 0.75, "label": "6,2", "w": 1.0357, "y": 2.5, "x": 3.6},
+ {"matrix": [7, 2], "h": 0.75, "label": "7,2", "w": 1.0357, "y": 2.5, "x": 4.640000000000001},
+ {"matrix": [6, 3], "h": 0.75, "label": "6,3", "w": 1.0357, "y": 2.5, "x": 5.680000000000001},
+ {"matrix": [7, 3], "h": 0.75, "label": "7,3", "w": 1.0357, "y": 2.5, "x": 6.71},
+ {"matrix": [6, 4], "h": 0.75, "label": "6,4", "w": 1.0357, "y": 2.5, "x": 7.750000000000001},
+ {"matrix": [7, 4], "h": 0.75, "label": "7,4", "w": 1.0357, "y": 2.5, "x": 8.780000000000001},
+ {"matrix": [8, 0], "h": 0.75, "label": "8,0", "w": 1.0357, "y": 3.25, "x": 1.25},
+ {"matrix": [9, 0], "h": 0.75, "label": "9,0", "w": 1.0357, "y": 3.25, "x": 2.2800000000000002},
+ {"matrix": [8, 1], "h": 0.75, "label": "8,1", "w": 1.0357, "y": 3.25, "x": 3.3200000000000003},
+ {"matrix": [9, 1], "h": 0.75, "label": "9,1", "w": 1.0357, "y": 3.25, "x": 4.3500000000000005},
+ {"matrix": [8, 2], "h": 0.75, "label": "8,2", "w": 1.0357, "y": 3.25, "x": 5.390000000000001},
+ {"matrix": [9, 2], "h": 0.75, "label": "9,2", "w": 1.0357, "y": 3.25, "x": 6.430000000000001},
+ {"matrix": [8, 3], "h": 0.75, "label": "8,3", "w": 1.0357, "y": 3.25, "x": 7.46},
+ {"matrix": [9, 3], "h": 0.75, "label": "9,3", "w": 1.0357, "y": 3.25, "x": 8.5}
+ ]
+ }
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": false,
+ "audio": false,
+ "backlight": false,
+ "rgblight": false,
+ "encoder": false,
+ "oled": true,
+ "wpm": true
+ },
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": ["A3", "A9", "A8", "B12", "B14"],
+ "rows": ["A2", "A4", "C13", "B5", "B9", "B3", "B4", "B8", "A15", "A10"]
+ }
+}
diff --git a/keyboards/nachie/subtext/keyboard.json b/keyboards/nachie/subtext/keyboard.json
new file mode 100644
index 0000000000..2d16dd50b4
--- /dev/null
+++ b/keyboards/nachie/subtext/keyboard.json
@@ -0,0 +1,83 @@
+{
+ "keyboard_name": "Subtext",
+ "manufacturer": "Nachie",
+ "usb": {
+ "vid": "0x4B43",
+ "pid": "0x5354",
+ "device_version": "1.0.0"
+ },
+ "url": "https://littlecraftery.com/products/subtext",
+ "maintainer": "nachie",
+ "bootloader": "stm32-dfu",
+ "processor": "STM32F072",
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "h": 0.75, "label": "0,0", "w": 1.0357, "y": 0.0, "x": 0},
+ {"matrix": [1, 0], "h": 0.75, "label": "1,0", "w": 1.0357, "y": 0.0, "x": 1.03},
+ {"matrix": [0, 1], "h": 0.75, "label": "0,1", "w": 1.0357, "y": 0.0, "x": 2.0700000000000003},
+ {"matrix": [1, 1], "h": 0.75, "label": "1,1", "w": 1.0357, "y": 0.0, "x": 3.1},
+ {"matrix": [0, 3], "h": 0.75, "label": "0,3", "w": 1.0357, "y": 0.0, "x": 6.46},
+ {"matrix": [1, 3], "h": 0.75, "label": "1,3", "w": 1.0357, "y": 0.0, "x": 7.5},
+ {"matrix": [0, 4], "h": 0.75, "label": "0,4", "w": 1.0357, "y": 0.0, "x": 8.530000000000001},
+ {"matrix": [1, 4], "h": 0.75, "label": "1,4", "w": 1.0357, "y": 0.0, "x": 9.57},
+ {"matrix": [2, 0], "h": 0.75, "label": "2,0", "w": 1.0357, "y": 1.0, "x": 0},
+ {"matrix": [3, 0], "h": 0.75, "label": "3,0", "w": 1.0357, "y": 1.0, "x": 1.03},
+ {"matrix": [2, 1], "h": 0.75, "label": "2,1", "w": 1.0357, "y": 1.0, "x": 2.0700000000000003},
+ {"matrix": [3, 1], "h": 0.75, "label": "3,1", "w": 1.0357, "y": 1.0, "x": 3.1},
+ {"matrix": [2, 2], "h": 0.75, "label": "2,2", "w": 1.0357, "y": 1.0, "x": 4.140000000000001},
+ {"matrix": [3, 2], "h": 0.75, "label": "3,2", "w": 1.0357, "y": 1.0, "x": 5.180000000000001},
+ {"matrix": [2, 3], "h": 0.75, "label": "2,3", "w": 1.0357, "y": 1.0, "x": 6.21},
+ {"matrix": [3, 3], "h": 0.75, "label": "3,3", "w": 1.0357, "y": 1.0, "x": 7.250000000000001},
+ {"matrix": [2, 4], "h": 0.75, "label": "2,4", "w": 1.0357, "y": 1.0, "x": 8.280000000000001},
+ {"matrix": [3, 4], "h": 0.75, "label": "3,4", "w": 1.0357, "y": 1.0, "x": 9.32},
+ {"matrix": [4, 0], "h": 0.75, "label": "4,0", "w": 1.0357, "y": 1.75, "x": 0.25},
+ {"matrix": [5, 0], "h": 0.75, "label": "5,0", "w": 1.0357, "y": 1.75, "x": 1.28},
+ {"matrix": [4, 1], "h": 0.75, "label": "4,1", "w": 1.0357, "y": 1.75, "x": 2.3200000000000003},
+ {"matrix": [5, 1], "h": 0.75, "label": "5,1", "w": 1.0357, "y": 1.75, "x": 3.35},
+ {"matrix": [4, 2], "h": 0.75, "label": "4,2", "w": 1.0357, "y": 1.75, "x": 4.390000000000001},
+ {"matrix": [5, 2], "h": 0.75, "label": "5,2", "w": 1.0357, "y": 1.75, "x": 5.430000000000001},
+ {"matrix": [4, 3], "h": 0.75, "label": "4,3", "w": 1.0357, "y": 1.75, "x": 6.46},
+ {"matrix": [5, 3], "h": 0.75, "label": "5,3", "w": 1.0357, "y": 1.75, "x": 7.500000000000001},
+ {"matrix": [4, 4], "h": 0.75, "label": "4,4", "w": 1.0357, "y": 1.75, "x": 8.530000000000001},
+ {"matrix": [5, 4], "h": 0.75, "label": "5,4", "w": 1.0357, "y": 1.75, "x": 9.57},
+ {"matrix": [7, 0], "h": 0.75, "label": "7,0", "w": 1.0357, "y": 2.5, "x": 0.5},
+ {"matrix": [6, 1], "h": 0.75, "label": "6,1", "w": 1.0357, "y": 2.5, "x": 1.53},
+ {"matrix": [7, 1], "h": 0.75, "label": "7,1", "w": 1.0357, "y": 2.5, "x": 2.5700000000000003},
+ {"matrix": [6, 2], "h": 0.75, "label": "6,2", "w": 1.0357, "y": 2.5, "x": 3.6},
+ {"matrix": [7, 2], "h": 0.75, "label": "7,2", "w": 1.0357, "y": 2.5, "x": 4.640000000000001},
+ {"matrix": [6, 3], "h": 0.75, "label": "6,3", "w": 1.0357, "y": 2.5, "x": 5.680000000000001},
+ {"matrix": [7, 3], "h": 0.75, "label": "7,3", "w": 1.0357, "y": 2.5, "x": 6.71},
+ {"matrix": [6, 4], "h": 0.75, "label": "6,4", "w": 1.0357, "y": 2.5, "x": 7.750000000000001},
+ {"matrix": [7, 4], "h": 0.75, "label": "7,4", "w": 1.0357, "y": 2.5, "x": 8.780000000000001},
+ {"matrix": [8, 0], "h": 0.75, "label": "8,0", "w": 1.0357, "y": 3.25, "x": 1.25},
+ {"matrix": [9, 0], "h": 0.75, "label": "9,0", "w": 1.0357, "y": 3.25, "x": 2.2800000000000002},
+ {"matrix": [8, 1], "h": 0.75, "label": "8,1", "w": 1.0357, "y": 3.25, "x": 3.3200000000000003},
+ {"matrix": [9, 1], "h": 0.75, "label": "9,1", "w": 1.0357, "y": 3.25, "x": 4.3500000000000005},
+ {"matrix": [8, 2], "h": 0.75, "label": "8,2", "w": 1.0357, "y": 3.25, "x": 5.390000000000001},
+ {"matrix": [9, 2], "h": 0.75, "label": "9,2", "w": 1.0357, "y": 3.25, "x": 6.430000000000001},
+ {"matrix": [8, 3], "h": 0.75, "label": "8,3", "w": 1.0357, "y": 3.25, "x": 7.46},
+ {"matrix": [9, 3], "h": 0.75, "label": "9,3", "w": 1.0357, "y": 3.25, "x": 8.5}
+ ]
+ }
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": false,
+ "audio": false,
+ "backlight": false,
+ "rgblight": false,
+ "encoder": false,
+ "oled": true,
+ "wpm": true
+ },
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": ["A3", "A9", "A8", "B12", "B14"],
+ "rows": ["A2", "A4", "C13", "B5", "B9", "B3", "B4", "B8", "A15", "A10"]
+ }
+}
diff --git a/keyboards/nachie/subtext/keymaps/default/keymap.c b/keyboards/nachie/subtext/keymaps/default/keymap.c
new file mode 100644
index 0000000000..b87f5bb39a
--- /dev/null
+++ b/keyboards/nachie/subtext/keymaps/default/keymap.c
@@ -0,0 +1,27 @@
+/*
+Copyright 2024 nachie
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7,
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT,
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_DOT,
+ KC_LGUI, KC_LALT, KC_SPC, KC_LGUI, KC_SPC, KC_BSPC, KC_RALT, KC_RCTL
+ )
+};
\ No newline at end of file
diff --git a/keyboards/nachie/subtext/keymaps/default/readme.md b/keyboards/nachie/subtext/keymaps/default/readme.md
new file mode 100644
index 0000000000..5f776a4427
--- /dev/null
+++ b/keyboards/nachie/subtext/keymaps/default/readme.md
@@ -0,0 +1 @@
+The default layout for the nachie SubText
\ No newline at end of file
diff --git a/keyboards/nachie/subtext/keymaps/vial/config.h b/keyboards/nachie/subtext/keymaps/vial/config.h
new file mode 100644
index 0000000000..f11557a734
--- /dev/null
+++ b/keyboards/nachie/subtext/keymaps/vial/config.h
@@ -0,0 +1,8 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#pragma once
+
+#define VIAL_KEYBOARD_UID {0x7B, 0x8D, 0x18, 0xFF, 0xE1, 0x74, 0x36, 0xB2}
+
+#define VIAL_UNLOCK_COMBO_ROWS { 0, 5 }
+#define VIAL_UNLOCK_COMBO_COLS { 0, 4 }
diff --git a/keyboards/nachie/subtext/keymaps/vial/keymap.c b/keyboards/nachie/subtext/keymaps/vial/keymap.c
new file mode 100644
index 0000000000..f40f343353
--- /dev/null
+++ b/keyboards/nachie/subtext/keymaps/vial/keymap.c
@@ -0,0 +1,487 @@
+/*
+Copyright 2024 nachie
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+#include
+#include "os_detection.h"
+
+#ifdef OLED_ENABLE
+void render_key_status_or_logo(void);
+void render_current_layer(void);
+void render_current_wpm(void);
+#endif
+
+os_variant_t current_platform;
+bool is_alt_tab_active = false;
+uint16_t alt_tab_timer = 0;
+
+enum layer_names {
+ _BASE, // Default Layer
+ _FN, // Fn Layer 1
+ _FN2, // Fn Layer 2
+ _FN3 // Fn Layer 3
+};
+
+enum custom_keycode {
+ JWRDL = QK_KB_0,
+ JWRDR,
+ SWRDL,
+ SWRDR,
+ TABL,
+ TABR,
+ DSKTPL,
+ DSKTPR,
+ PRVAPP,
+ NXTAPP
+};
+
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case KC_HOME:
+ if (record->event.pressed && current_platform == OS_MACOS) {
+ register_mods(MOD_LGUI);
+ tap_code(KC_LEFT);
+ unregister_mods(MOD_LGUI);
+ } else {
+ tap_code(KC_HOME);
+ }
+ break;
+ case KC_END:
+ if (record->event.pressed && current_platform == OS_MACOS) {
+ register_mods(MOD_LGUI);
+ tap_code(KC_RIGHT);
+ unregister_mods(MOD_LGUI);
+ } else {
+ tap_code(KC_END);
+ }
+ break;
+ case KC_PGUP:
+ if (record->event.pressed && current_platform == OS_MACOS) {
+ register_mods(MOD_LGUI);
+ tap_code(KC_UP);
+ unregister_mods(MOD_LGUI);
+ } else {
+ tap_code(KC_PGUP);
+ }
+ break;
+ case KC_PGDN:
+ if (record->event.pressed && current_platform == OS_MACOS) {
+ register_mods(MOD_LGUI);
+ tap_code(KC_DOWN);
+ unregister_mods(MOD_LGUI);
+ } else {
+ tap_code(KC_PGDN);
+ }
+ break;
+ case KC_NUM_LOCK:
+ if (record->event.pressed && current_platform == OS_MACOS) {
+ register_mods(MOD_LSFT);
+ tap_code(KC_CLEAR);
+ unregister_mods(MOD_LSFT);
+ } else {
+ tap_code(KC_NUM_LOCK);
+ }
+ break;
+ case KC_SCROLL_LOCK:
+ if (record->event.pressed && current_platform == OS_MACOS) {
+ register_mods(MOD_LCTL);
+ tap_code(KC_F14);
+ unregister_mods(MOD_LCTL);
+ } else {
+ tap_code(KC_SCROLL_LOCK);
+ }
+ break;
+ case KC_PRINT_SCREEN:
+ if (record->event.pressed && current_platform == OS_MACOS) {
+ register_mods(MOD_LSFT);
+ register_mods(MOD_LGUI);
+ tap_code(KC_5);
+ unregister_mods(MOD_LGUI);
+ unregister_mods(MOD_LSFT);
+ } else {
+ tap_code(KC_PRINT_SCREEN);
+ }
+ break;
+ case JWRDL:
+ if (record->event.pressed) {
+ (current_platform == OS_MACOS) ? register_mods(MOD_LALT) : register_mods(MOD_LCTL);
+ tap_code(KC_LEFT);
+ (current_platform == OS_MACOS) ? unregister_mods(MOD_LALT) : unregister_mods(MOD_LCTL);
+ } else {
+ }
+ break;
+ case JWRDR:
+ if (record->event.pressed) {
+ (current_platform == OS_MACOS) ? register_mods(MOD_LALT) : register_mods(MOD_LCTL);
+ tap_code(KC_RIGHT);
+ (current_platform == OS_MACOS) ? unregister_mods(MOD_LALT) : unregister_mods(MOD_LCTL);
+ } else {
+ }
+ break;
+ case SWRDL:
+ if (record->event.pressed) {
+ register_mods(MOD_LSFT);
+ (current_platform == OS_MACOS) ? register_mods(MOD_LALT) : register_mods(MOD_LCTL);
+ tap_code(KC_LEFT);
+ (current_platform == OS_MACOS) ? unregister_mods(MOD_LALT) : unregister_mods(MOD_LCTL);
+ unregister_mods(MOD_LSFT);
+ } else {
+ }
+ break;
+ case SWRDR:
+ if (record->event.pressed) {
+ register_mods(MOD_LSFT);
+ (current_platform == OS_MACOS) ? register_mods(MOD_LALT) : register_mods(MOD_LCTL);
+ tap_code(KC_RIGHT);
+ (current_platform == OS_MACOS) ? unregister_mods(MOD_LALT) : unregister_mods(MOD_LCTL);
+ unregister_mods(MOD_LSFT);
+ } else {
+ }
+ break;
+ case TABL:
+ if (record->event.pressed) {
+ register_mods(MOD_LCTL);
+ register_mods(MOD_LSFT);
+ tap_code(KC_TAB);
+ unregister_mods(MOD_LSFT);
+ unregister_mods(MOD_LCTL);
+ } else {
+ }
+ break;
+ case TABR:
+ if (record->event.pressed) {
+ register_mods(MOD_LCTL);
+ tap_code(KC_TAB);
+ unregister_mods(MOD_LCTL);
+ } else {
+ }
+ break;
+ case DSKTPL:
+ if (record->event.pressed) {
+ register_mods(MOD_LCTL);
+ register_mods(MOD_LGUI);
+ (current_platform == OS_LINUX) ? tap_code(KC_UP) : tap_code(KC_LEFT);
+ unregister_mods(MOD_LGUI);
+ unregister_mods(MOD_LCTL);
+ } else {
+ }
+ break;
+ case DSKTPR:
+ if (record->event.pressed) {
+ register_mods(MOD_LCTL);
+ register_mods(MOD_LGUI);
+ (current_platform == OS_LINUX) ? tap_code(KC_DOWN) : tap_code(KC_RGHT);
+ unregister_mods(MOD_LGUI);
+ unregister_mods(MOD_LCTL);
+ } else {
+ }
+ break;
+ case PRVAPP:
+ if (record->event.pressed) {
+ register_code(KC_LSFT);
+ if (!is_alt_tab_active) {
+ is_alt_tab_active = true;
+ (current_platform == OS_MACOS) ? register_code(KC_LGUI) : register_code(KC_LALT);
+ }
+ alt_tab_timer = timer_read();
+ register_code(KC_TAB);
+ } else {
+ unregister_code(KC_TAB);
+ unregister_code(KC_LSFT);
+ }
+ break;
+ case NXTAPP:
+ if (record->event.pressed) {
+ if (!is_alt_tab_active) {
+ is_alt_tab_active = true;
+ (current_platform == OS_MACOS) ? register_code(KC_LGUI) : register_code(KC_LALT);
+ }
+ alt_tab_timer = timer_read();
+ register_code(KC_TAB);
+ } else {
+ unregister_code(KC_TAB);
+ }
+ break;
+ }
+ return true;
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* QWERTY */
+ [_BASE] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7,
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT,
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_DOT,
+ KC_LGUI, KC_LALT, KC_SPC, KC_LGUI, KC_SPC, KC_BSPC, KC_RALT, KC_RCTL
+ ),
+
+ /* FUNCTION */
+ [_FN] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ [_FN2] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ [_FN3] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ )
+
+};
+
+
+void matrix_scan_user(void) { // The very important timer.
+ if (is_alt_tab_active) {
+ if (timer_elapsed(alt_tab_timer) > 1000) {
+ (current_platform == OS_MACOS) ? unregister_code(KC_LGUI) : unregister_code(KC_LALT);
+ is_alt_tab_active = false;
+ }
+ }
+}
+
+
+#ifdef OLED_ENABLE
+ #ifdef DYNAMIC_MACRO_ENABLE
+ bool macro1;
+ bool macro1rec;
+ bool macro2;
+ bool macro2rec;
+ bool prevEnabled;
+ uint8_t prevRGBmode;
+
+ void render_dynamic_macro_status(int col, int line){
+ oled_set_cursor(col,line);
+ macro1rec ? oled_write(PSTR("DM1"), macro1) : oled_write(PSTR(" "),false);
+ oled_set_cursor(col,line+1);
+ macro2rec ? oled_write(PSTR("DM2"), macro2) : oled_write(PSTR(" "),false);
+ }
+
+ //direction indicates which macro it is, with 1 being Macro 1, -1 being Macro 2, and 0 being no macro.
+ void dynamic_macro_record_start_user(int8_t direction){
+ //prevEnabled = rgb_matrix_is_enabled();
+ //if (!prevEnabled) { rgb_matrix_enable(); }
+ //prevRGBmode = rgb_matrix_get_mode();
+ //rgb_matrix_mode(RGB_MATRIX_BREATHING);
+ switch(direction){
+ case 1:
+ macro1 = false;
+ macro1rec = true;
+ break;
+ case -1:
+ macro2 = false;
+ macro2rec = true;
+ break;
+ default:
+ macro1 = false;
+ macro2 = false;
+ macro1rec = false;
+ macro2rec = false;
+ break;
+ }
+ }
+
+ void dynamic_macro_record_end_user(int8_t direction){
+ //prevEnabled ? rgb_matrix_mode(prevRGBmode) : rgb_matrix_disable();
+ switch(direction){
+ case 1:
+ macro1 = true;
+ break;
+ case -1:
+ macro2 = true;
+ break;
+ default:
+ macro1 = false;
+ macro2 = false;
+ break;
+ }
+ }
+ #endif
+
+ bool clear_screen = false;
+ bool rerender_platform = false;
+
+ static void render_logo(void) {
+ static const char PROGMEM logo[] = {
+ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94,
+ 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4,
+ 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0x00
+ };
+
+ oled_write(logo, false);
+ }
+
+ void render_keylock_status(led_t led_state) {
+ bool caps_state = (led_state.caps_lock || is_caps_word_on());
+ oled_write(PSTR("CAPS"), caps_state);
+ oled_write(PSTR(" "), false);
+ oled_write(PSTR("NUM"), led_state.num_lock);
+ oled_write(PSTR(" "), false);
+ oled_write(PSTR("SCRL"), led_state.scroll_lock);
+ //oled_write_ln_P(PSTR(" "), false);
+ }
+
+ void render_mod_status(uint8_t modifiers) {
+ oled_write(PSTR("SH"), (modifiers & MOD_MASK_SHIFT));
+ oled_write(PSTR(" "), false);
+ (current_platform == OS_MACOS || current_platform == OS_IOS) ? oled_write(PSTR("CMD"), (modifiers & MOD_MASK_GUI)) : oled_write(PSTR("CT"), (modifiers & MOD_MASK_CTRL));
+ oled_write(PSTR(" "), false);
+ (current_platform == OS_MACOS || current_platform == OS_IOS) ? oled_write(PSTR("OPT"), (modifiers & MOD_MASK_ALT)) : oled_write(PSTR("ALT"), (modifiers & MOD_MASK_ALT));
+ oled_write(PSTR(" "), false);
+ (current_platform == OS_MACOS || current_platform == OS_IOS) ? oled_write(PSTR("CT"), (modifiers & MOD_MASK_CTRL)) : oled_write(PSTR("GUI"), (modifiers & MOD_MASK_GUI));
+ }
+
+ void render_key_status_or_logo(){
+ led_t led_state = host_keyboard_led_state();
+ uint8_t mod_state = (get_mods()|get_oneshot_mods());
+ if ( !led_state.num_lock && !led_state.caps_lock && !led_state.scroll_lock
+ && !(mod_state & MOD_MASK_SHIFT) && !(mod_state & MOD_MASK_ALT) && !(mod_state & MOD_MASK_CTRL) && !(mod_state & MOD_MASK_GUI)) {
+ if(!clear_screen) {
+ render_logo();
+ rerender_platform = true;
+ }
+ clear_screen = true;
+ } else {
+ if (clear_screen == true) {
+ oled_clear();
+ oled_render();
+ clear_screen = false;
+ }
+ oled_set_cursor(8,0);
+ render_keylock_status(led_state);
+ oled_set_cursor(8,1);
+ render_mod_status(mod_state);
+ rerender_platform = true;
+ }
+
+ }
+
+ void render_current_layer(){
+ switch (get_highest_layer(layer_state)) {
+ case 0:
+ oled_write(PSTR("Layer 0"), false);
+ break;
+ case 1:
+ oled_write(PSTR("Layer 1"), false);
+ break;
+ case 2:
+ oled_write(PSTR("Layer 2"), false);
+ break;
+ case 3:
+ oled_write(PSTR("Layer 3"), false);
+ break;
+ default:
+ oled_write(PSTR("Layer ?"), false); // Should never display, here as a catchall
+ }
+ }
+
+ void render_current_wpm(){
+ oled_write_P(PSTR("WPM: "), false);
+ oled_write(get_u8_str(get_current_wpm(), '0'), false);
+ }
+
+ void render_platform_status(int col, int line) {
+ /* Show Ctrl-Gui Swap options */
+ static const char PROGMEM logo[][5][3] = {
+ {{0x9B, 0x9C, 0}, {0xbb, 0xbc, 0}}, //Android
+ {{0x99, 0x9A, 0}, {0xb9, 0xba, 0}}, //Linux
+ {{0x97, 0x98, 0}, {0xb7, 0xb8, 0}}, //Windows
+ {{0x95, 0x96, 0}, {0xb5, 0xb6, 0}}, //Mac/iOS
+ {{0x9D, 0x9E, 0}, {0xbd, 0xbe, 0}}, //Empty Placeholder
+ };
+ current_platform = detected_host_os();
+ switch (current_platform) {
+ /*case OS_ANDROID: //Android
+ oled_set_cursor(col,line);
+ oled_write(logo[0][0], false);
+ oled_set_cursor(col,line+1);
+ oled_write(logo[0][1], false);
+ break;*/
+ case OS_LINUX: //Linux
+ oled_set_cursor(col,line);
+ oled_write(logo[1][0], false);
+ oled_set_cursor(col,line+1);
+ oled_write(logo[1][1], false);
+ keymap_config.swap_lctl_lgui = false;
+ keymap_config.swap_rctl_rgui = false;
+ break;
+ case OS_WINDOWS: //Windows
+ oled_set_cursor(col,line);
+ oled_write(logo[2][0], false);
+ oled_set_cursor(col,line+1);
+ oled_write(logo[2][1], false);
+ keymap_config.swap_lctl_lgui = false;
+ keymap_config.swap_rctl_rgui = false;
+ break;
+ case OS_MACOS: //Mac
+ oled_set_cursor(col,line);
+ oled_write(logo[3][0], false);
+ oled_set_cursor(col,line+1);
+ oled_write(logo[3][1], false);
+ keymap_config.swap_lctl_lgui = true;
+ keymap_config.swap_rctl_rgui = true;
+ break;
+ case OS_IOS: //iOS
+ oled_set_cursor(col,line);
+ oled_write(logo[3][0], false);
+ oled_set_cursor(col,line+1);
+ oled_write(logo[3][1], false);
+ keymap_config.swap_lctl_lgui = true;
+ keymap_config.swap_rctl_rgui = true;
+ break;
+ default: //OS_UNSURE or not configured
+ oled_set_cursor(col,line);
+ oled_write(logo[4][0], false);
+ oled_set_cursor(col,line+1);
+ oled_write(logo[4][1], false);
+ break;
+ }
+ rerender_platform = false;
+ }
+
+ bool oled_task_user(void) {
+ render_key_status_or_logo();
+ oled_set_cursor(8,2);
+ render_current_layer();
+ #ifdef DYNAMIC_MACRO_ENABLE
+ render_dynamic_macro_status(18,2);
+ #endif
+ oled_set_cursor(8,3);
+ render_current_wpm();
+ #ifdef OS_DETECTION_ENABLE
+ if(current_platform != detected_host_os() || rerender_platform) { render_platform_status(3,0); }
+ #endif
+
+ return false;
+ }
+
+#endif
\ No newline at end of file
diff --git a/keyboards/nachie/subtext/keymaps/vial/readme.md b/keyboards/nachie/subtext/keymaps/vial/readme.md
new file mode 100644
index 0000000000..c7dbc0d8fa
--- /dev/null
+++ b/keyboards/nachie/subtext/keymaps/vial/readme.md
@@ -0,0 +1 @@
+The VIAL Keymap for the nachie subtext
\ No newline at end of file
diff --git a/keyboards/nachie/subtext/keymaps/vial/rules.mk b/keyboards/nachie/subtext/keymaps/vial/rules.mk
new file mode 100644
index 0000000000..038a797951
--- /dev/null
+++ b/keyboards/nachie/subtext/keymaps/vial/rules.mk
@@ -0,0 +1,9 @@
+VIA_ENABLE = yes
+VIAL_ENABLE = yes
+
+ENCODER_MAP_ENABLE = no
+BOOTMAGIC_ENABLE = yes
+MAGIC_ENABLE = yes
+OS_DETECTION_ENABLE = yes
+DYNAMIC_MACRO_ENABLE = yes
+CAPS_WORD_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/nachie/subtext/keymaps/vial/vial.json b/keyboards/nachie/subtext/keymaps/vial/vial.json
new file mode 100644
index 0000000000..8c2b566aa4
--- /dev/null
+++ b/keyboards/nachie/subtext/keymaps/vial/vial.json
@@ -0,0 +1,298 @@
+{
+ "name": "Subtext",
+ "vendorId": "0x4B43",
+ "productId": "0x5354",
+ "customKeycodes": [
+ {
+ "name": "JmpWordL",
+ "title": "Jump Word Left",
+ "shortName": "JWRDL"
+ },
+ {
+ "name": "JmpWordR",
+ "title": "Jump Word Right",
+ "shortName": "JWRDR"
+ },
+ {
+ "name": "SlcWordL",
+ "title": "Select Word Left",
+ "shortName": "SWRDL"
+ },
+ {
+ "name": "SlcWordR",
+ "title": "Select Word Right",
+ "shortName": "SWRDR"
+ },
+ {
+ "name": "TabLft",
+ "title": "Tab Left",
+ "shortName": "TABL"
+ },
+ {
+ "name": "TabRght",
+ "title": "Tab Right",
+ "shortName": "TABR"
+ },
+ {
+ "name": "DsktpLft",
+ "title": "Desktop Left",
+ "shortName": "DSKTPL"
+ },
+ {
+ "name": "DsktpRght",
+ "title": "Desktop Right",
+ "shortName": "DSKTPR"
+ },
+ {
+ "name": "PrevApp",
+ "title": "Previous App",
+ "shortName": "PRVAPP"
+ },
+ {
+ "name": "NextApp",
+ "title": "Next App",
+ "shortName": "NXTAPP"
+ }
+ ],
+ "matrix": { "rows": 10, "cols": 5 },
+ "layouts": {
+ "keymap": [
+ [
+ {
+ "t": "#666666",
+ "f": 2,
+ "w": 1.0357
+ },
+ "0,0",
+ {
+ "x": -0.005700000000000038,
+ "w": 1.0357
+ },
+ "1,0",
+ {
+ "x": 0.0042999999999997485,
+ "w": 1.0357
+ },
+ "0,1",
+ {
+ "x": -0.005699999999999594,
+ "w": 1.0357
+ },
+ "1,1",
+ {
+ "x": 2.3243,
+ "w": 1.0357
+ },
+ "0,3",
+ {
+ "x": 0.0042999999999997485,
+ "w": 1.0357
+ },
+ "1,3",
+ {
+ "x": -0.0057000000000009265,
+ "w": 1.0357
+ },
+ "0,4",
+ {
+ "x": 0.004300000000000637,
+ "w": 1.0357
+ },
+ "1,4"
+ ],
+ [
+ {
+ "y": 0.5,
+ "w": 1.0357
+ },
+ "2,0",
+ {
+ "x": -0.005700000000000038,
+ "w": 1.0357
+ },
+ "3,0",
+ {
+ "x": 0.0042999999999997485,
+ "w": 1.0357
+ },
+ "2,1",
+ {
+ "x": -0.005699999999999594,
+ "w": 1.0357
+ },
+ "3,1",
+ {
+ "x": 0.0042999999999997485,
+ "w": 1.0357
+ },
+ "2,2",
+ {
+ "x": 0.0042999999999997485,
+ "w": 1.0357
+ },
+ "3,2",
+ {
+ "x": -0.005700000000000038,
+ "w": 1.0357
+ },
+ "2,3",
+ {
+ "x": 0.0042999999999997485,
+ "w": 1.0357
+ },
+ "3,3",
+ {
+ "x": -0.0057000000000009265,
+ "w": 1.0357
+ },
+ "2,4",
+ {
+ "x": 0.004300000000000637,
+ "w": 1.0357
+ },
+ "3,4"
+ ],
+ [
+ {
+ "x": 0.25,
+ "w": 1.0357
+ },
+ "4,0",
+ {
+ "x": -0.005700000000000038,
+ "w": 1.0357
+ },
+ "5,0",
+ {
+ "x": 0.0042999999999997485,
+ "w": 1.0357
+ },
+ "4,1",
+ {
+ "x": -0.005699999999999594,
+ "w": 1.0357
+ },
+ "5,1",
+ {
+ "x": 0.0042999999999997485,
+ "w": 1.0357
+ },
+ "4,2",
+ {
+ "x": 0.0042999999999997485,
+ "w": 1.0357
+ },
+ "5,2",
+ {
+ "x": -0.005700000000000038,
+ "w": 1.0357
+ },
+ "4,3",
+ {
+ "x": 0.0042999999999997485,
+ "w": 1.0357
+ },
+ "5,3",
+ {
+ "x": -0.0057000000000009265,
+ "w": 1.0357
+ },
+ "4,4",
+ {
+ "x": 0.004300000000000637,
+ "w": 1.0357
+ },
+ "5,4"
+ ],
+ [
+ {
+ "x": 0.5,
+ "w": 1.0357
+ },
+ "7,0",
+ {
+ "x": -0.005700000000000038,
+ "w": 1.0357
+ },
+ "6,1",
+ {
+ "x": 0.0042999999999997485,
+ "w": 1.0357
+ },
+ "7,1",
+ {
+ "x": -0.005699999999999594,
+ "w": 1.0357
+ },
+ "6,2",
+ {
+ "x": 0.0042999999999997485,
+ "w": 1.0357
+ },
+ "7,2",
+ {
+ "x": 0.0042999999999997485,
+ "w": 1.0357
+ },
+ "6,3",
+ {
+ "x": -0.005700000000000038,
+ "w": 1.0357
+ },
+ "7,3",
+ {
+ "x": 0.0042999999999997485,
+ "w": 1.0357
+ },
+ "6,4",
+ {
+ "x": -0.0057000000000009265,
+ "w": 1.0357
+ },
+ "7,4"
+ ],
+ [
+ {
+ "x": 1.25,
+ "w": 1.0357
+ },
+ "8,0",
+ {
+ "x": -0.0057000000000004825,
+ "w": 1.0357
+ },
+ "9,0",
+ {
+ "x": 0.0043000000000001926,
+ "w": 1.0357
+ },
+ "8,1",
+ {
+ "x": -0.005700000000000038,
+ "w": 1.0357
+ },
+ "9,1",
+ {
+ "x": 0.0042999999999997485,
+ "w": 1.0357
+ },
+ "8,2",
+ {
+ "x": 0.0042999999999997485,
+ "w": 1.0357
+ },
+ "9,2",
+ {
+ "x": -0.005700000000000038,
+ "w": 1.0357
+ },
+ "8,3",
+ {
+ "x": 0.004300000000000637,
+ "w": 1.0357
+ },
+ "9,3"
+ ]
+ ]
+ }
+ }
diff --git a/keyboards/nachie/subtext/mcuconf.h b/keyboards/nachie/subtext/mcuconf.h
new file mode 100644
index 0000000000..e8803b14f8
--- /dev/null
+++ b/keyboards/nachie/subtext/mcuconf.h
@@ -0,0 +1,22 @@
+/*
+Copyright 2024 nachie
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+#include_next
+
+#undef STM32_I2C_USE_I2C1
+#define STM32_I2C_USE_I2C1 TRUE
diff --git a/keyboards/nachie/subtext/readme.md b/keyboards/nachie/subtext/readme.md
new file mode 100644
index 0000000000..f4cb6f1bfb
--- /dev/null
+++ b/keyboards/nachie/subtext/readme.md
@@ -0,0 +1,23 @@
+# Subtext
+
+Firmware for the nachie Subtext keyboard
+
+* Keyboard Maintainer: [nachie](https://github.com/nachie)
+* Hardware Supported: Subtext
+* Hardware Availability: [nachie](https://littlecraftery.com/products/subtext)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make nachie/subtext:default
+
+Or to make and flash:
+
+ make nachie/subtext:default:flash
+
+
+See 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).
+
+## Bootloader
+
+* **Bootmagic reset**: Hold down ESC (top left) and plug in the keyboard
+* **Physical reset button**: Briefly press the button labeled "SW_RST1" on the back of the PCB
diff --git a/keyboards/nachie/subtext/rules.mk b/keyboards/nachie/subtext/rules.mk
new file mode 100644
index 0000000000..934dbb46a9
--- /dev/null
+++ b/keyboards/nachie/subtext/rules.mk
@@ -0,0 +1,5 @@
+
+OLED_DRIVER = ssd1306 # Set Driver to SSD1306
+
+# Enter lower-power sleep mode when on the ChibiOS idle thread
+OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
\ No newline at end of file
diff --git a/keyboards/nachie/subtext/subtext.c b/keyboards/nachie/subtext/subtext.c
new file mode 100644
index 0000000000..aad919566d
--- /dev/null
+++ b/keyboards/nachie/subtext/subtext.c
@@ -0,0 +1,79 @@
+/*
+Copyright 2024 nachie
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include "quantum.h"
+
+void board_init(void) {
+ SYSCFG->CFGR1 |= SYSCFG_CFGR1_I2C1_DMA_RMP; // DMA re-map, you may not need this depending on your
+}
+
+#ifdef OLED_ENABLE
+
+oled_rotation_t oled_init_kb(oled_rotation_t rotation) {
+ return OLED_ROTATION_0;
+}
+
+static void render_logo(void) {
+ static const char PROGMEM my_logo[] = {
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0x3f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x7f, 0x7f, 0x7f,
+0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x7f, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0x00, 0x00, 0x1f, 0x8f, 0x07, 0x03, 0x71, 0xf8, 0xfc, 0xfe, 0xff, 0xff, 0x03, 0x01,
+0x38, 0x1c, 0x06, 0xa6, 0xb6, 0x86, 0xfc, 0xf8, 0x00, 0x03, 0xff, 0xff, 0xff, 0x00, 0x00, 0xf1,
+0xf9, 0xfc, 0xfc, 0xfc, 0xf8, 0xe1, 0x03, 0x0f, 0xff, 0xff, 0x1f, 0x03, 0x01, 0xf9, 0xfc, 0x1c,
+0x80, 0xf8, 0xf0, 0xf1, 0xf7, 0xff, 0xff, 0xff, 0x03, 0x01, 0x38, 0x1c, 0x06, 0xa6, 0xb6, 0x86,
+0xfc, 0xf8, 0x00, 0x03, 0xff, 0xff, 0xdf, 0x9f, 0x3f, 0x7f, 0xf8, 0xf2, 0xf2, 0x00, 0x01, 0xff,
+0xff, 0xff, 0x07, 0x03, 0x91, 0x99, 0x9c, 0x9c, 0x9c, 0x98, 0x91, 0x83, 0x87, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xe0, 0xe0, 0xff, 0xff, 0xff, 0xfe, 0xf8, 0xe0, 0xe3, 0xe7, 0xff, 0xff, 0xff, 0xe0,
+0xe0, 0xe0, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xe0, 0xff, 0xff, 0xff, 0x00, 0x00, 0xf1,
+0xe7, 0xe7, 0xe7, 0xe7, 0xe3, 0xf0, 0xf8, 0xfe, 0xff, 0xff, 0xfe, 0xf8, 0x70, 0x03, 0xc0, 0xe4,
+0xe7, 0xe7, 0xe1, 0xf0, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xe0, 0xe0, 0xfe, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xe0, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf8, 0xf1, 0xe1, 0xe0, 0xe0, 0xff,
+0xff, 0xff, 0xfc, 0xf0, 0xf1, 0xe3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe3, 0xf1, 0xf9, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+};
+ oled_write_raw_P(my_logo, sizeof(my_logo));
+}
+
+
+bool oled_task_kb(void) {
+ // Defer to the keymap if they want to override
+ if(!oled_task_user()) {
+ return false;
+ }
+
+ // default keyboard drawing code
+ render_logo();
+ return false;
+}
+
+#endif
\ No newline at end of file
diff --git a/keyboards/nachie/syndrome/chconf.h b/keyboards/nachie/syndrome/chconf.h
new file mode 100644
index 0000000000..ad01fb3387
--- /dev/null
+++ b/keyboards/nachie/syndrome/chconf.h
@@ -0,0 +1,11 @@
+/*
+ * `qmk chibios-confmigrate -i firmware/nachie/syndrome/chconf.h -r ../keymaps_qmk/platforms/chibios/boards/GENERIC_PROMICRO_RP2040/configs/chconf.h`
+ */
+
+
+#pragma once
+
+#include_next
+
+#undef CH_CFG_ST_TIMEDELTA
+#define CH_CFG_ST_TIMEDELTA 100
\ No newline at end of file
diff --git a/keyboards/nachie/syndrome/config.h b/keyboards/nachie/syndrome/config.h
new file mode 100755
index 0000000000..e050f0be12
--- /dev/null
+++ b/keyboards/nachie/syndrome/config.h
@@ -0,0 +1,38 @@
+/*
+Copyright 2024 Nachie
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#pragma once
+
+#define RP2040_FLASH_GENERIC_03H
+
+
+#ifdef HAPTIC_ENABLE
+#define SOLENOID_PIN GP15
+#endif
+
+/* Oled config */
+#ifdef OLED_ENABLE
+#define I2C_DRIVER I2CD1
+#define I2C1_SDA_PIN GP10
+#define I2C1_SCL_PIN GP11
+#define OLED_TIMEOUT 60000 // Turns off the OLED screen after x ms of screen update inactivity. Helps reduce OLED Burn-in. Set to 0 to disable.
+#define OLED_FADE_OUT
+#define OLED_FADE_OUT_INTERVAL 13
+#define OLED_BRIGHTNESS 50 // The default brightness level of the OLED, from 0 to 255.
+#define OLED_UPDATE_INTERVAL 16 // limits in milliseconds how frequently the OLED updates. Calculation 1000/fps (increases keyboard responsiveness)
+#endif
+
+#define VIA_CUSTOM_LIGHTING_ENABLE
diff --git a/keyboards/nachie/syndrome/halconf.h b/keyboards/nachie/syndrome/halconf.h
new file mode 100644
index 0000000000..23c08453a8
--- /dev/null
+++ b/keyboards/nachie/syndrome/halconf.h
@@ -0,0 +1,4 @@
+#pragma once
+
+#include_next
+#define HAL_USE_I2C TRUE
\ No newline at end of file
diff --git a/keyboards/nachie/syndrome/info.json b/keyboards/nachie/syndrome/info.json
new file mode 100644
index 0000000000..71825036b1
--- /dev/null
+++ b/keyboards/nachie/syndrome/info.json
@@ -0,0 +1,149 @@
+{
+ "keyboard_name": "Syndrome",
+ "manufacturer": "Nachie",
+ "usb": {
+ "vid": "0x4B43",
+ "pid": "0x5359",
+ "device_version": "1.0.0"
+ },
+ "board": "GENERIC_RP_RP2040",
+ "bootloader": "rp2040",
+ "processor": "RP2040",
+ "url": "https://littlecraftery.com/products/syndrome",
+ "maintainer": "nachie",
+ "ws2812": {
+ "pin": "GP29",
+ "driver": "vendor"
+ },
+ "rgb_matrix": {
+ "driver": "ws2812",
+ "led_count": 16,
+ "animations": {
+ "alphas_mods": true,
+ "gradient_up_down": true,
+ "gradient_left_right": true,
+ "breathing": true,
+ "band_sat": true,
+ "band_val": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "rainbow_moving_chevron":true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "jellybean_raindrops": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "typing_heatmap": true,
+ "digital_rain": true,
+ "solid_reactive_simple": true,
+ "solid_reactive": true,
+ "solid_reactive_wide": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_multinexus": true,
+ "splash": true,
+ "solid_splash": true,
+ "solid_multisplash": true,
+ "pixel_rain": true,
+ "pixel_fractal": true
+ }
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"y": 0, "x": 0, "matrix": [8, 5], "label": "8,5"},
+ {"y": 0, "x": 7, "matrix": [9, 5], "label": "9,5"},
+ {"y": 0, "x": 8, "matrix": [8, 6], "label": "8,6"},
+ {"y": 0, "x": 9, "matrix": [9, 6], "label": "9,6"},
+ {"y": 0, "x": 10, "matrix": [8, 7], "label": "8,7"},
+ {"y": 2, "x": 0, "matrix": [0, 0], "label": "0,0"},
+ {"y": 2, "x": 1, "matrix": [1, 0], "label": "1,0"},
+ {"y": 2, "x": 2, "matrix": [0, 1], "label": "0,1"},
+ {"y": 2, "x": 3, "matrix": [1, 1], "label": "1,1"},
+ {"y": 2, "x": 4, "matrix": [0, 2], "label": "0,2"},
+ {"y": 2, "x": 5, "matrix": [1, 2], "label": "1,2"},
+ {"y": 2, "x": 6, "matrix": [0, 3], "label": "0,3"},
+ {"y": 2, "x": 7, "matrix": [1, 3], "label": "1,3"},
+ {"y": 2, "x": 8, "matrix": [0, 4], "label": "0,4"},
+ {"y": 2, "x": 9, "matrix": [1, 4], "label": "1,4"},
+ {"y": 2, "x": 10, "matrix": [7, 4], "label": "7,4"},
+ {"y": 3, "x": 0, "matrix": [2, 0], "w": 1.25, "label": "2,0"},
+ {"y": 3, "x": 1.25, "matrix": [3, 0], "label": "3,0"},
+ {"y": 3, "x": 2.25, "matrix": [2, 1], "label": "2,1"},
+ {"y": 3, "x": 3.25, "matrix": [3, 1], "label": "3,1"},
+ {"y": 3, "x": 4.25, "matrix": [2, 2], "label": "2,2"},
+ {"y": 3, "x": 5.25, "matrix": [3, 2], "label": "3,2"},
+ {"y": 3, "x": 6.25, "matrix": [2, 3], "label": "2,3"},
+ {"y": 3, "x": 7.25, "matrix": [3, 3], "label": "3,3"},
+ {"y": 3, "x": 8.25, "matrix": [2, 4], "label": "2,4"},
+ {"y": 3, "x": 9.25, "matrix": [3, 4], "w": 1.75, "label": "3,4"},
+ {"y": 4, "x": 0, "matrix": [4, 0], "w": 1.75, "label": "4,0"},
+ {"y": 4, "x": 1.75, "matrix": [5, 0], "label": "5,0"},
+ {"y": 4, "x": 2.75, "matrix": [4, 1], "label": "4,1"},
+ {"y": 4, "x": 3.75, "matrix": [5, 1], "label": "5,1"},
+ {"y": 4, "x": 4.75, "matrix": [4, 2], "label": "4,2"},
+ {"y": 4, "x": 5.75, "matrix": [5, 2], "label": "5,2"},
+ {"y": 4, "x": 6.75, "matrix": [4, 3], "label": "4,3"},
+ {"y": 4, "x": 7.75, "matrix": [5, 3], "label": "5,3"},
+ {"y": 4, "x": 8.75, "matrix": [4, 4], "w": 1.25, "label": "4,4"},
+ {"y": 4, "x": 10, "matrix": [5, 4], "label": "5,4"},
+ {"y": 5, "x": 0, "matrix": [6, 0], "w": 1.5, "label": "6,0"},
+ {"y": 5, "x": 1.5, "matrix": [7, 0], "label": "7,0"},
+ {"y": 5, "x": 2.5, "matrix": [6, 1], "w": 1.25, "label": "6,1"},
+ {"y": 5, "x": 3.75, "matrix": [7, 1], "w": 1.75, "label": "7,1"},
+ {"y": 5, "x": 5.5, "matrix": [7, 2], "w": 1.75, "label": "7,2"},
+ {"y": 5, "x": 7.25, "matrix": [6, 3], "w": 1.25, "label": "6,3"},
+ {"y": 5, "x": 8.5, "matrix": [7, 3], "label": "7,3"},
+ {"y": 5, "x": 9.5, "matrix": [6, 4], "w": 1.5, "label": "6,4"}
+ ]
+ }
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": false,
+ "audio": false,
+ "backlight": false,
+ "rgblight": false,
+ "encoder": true,
+ "rgb_matrix": true,
+ "haptic": true,
+ "oled": true,
+ "wpm": true
+ },
+ "build": {
+ "lto": true
+ },
+ "haptic": {
+ "driver": "solenoid"
+ },
+ "encoder": {
+ "enabled": true,
+ "rotary": [
+ { "pin_a": "GP22", "pin_b": "GP23", "resolution": 2 },
+ { "pin_a": "GP26", "pin_b": "GP27", "resolution": 2 },
+ { "pin_a": "GP0", "pin_b": "GP1", "resolution": 2 },
+ { "pin_a": "GP5", "pin_b": "GP6", "resolution": 2 }
+ ]
+ },
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": ["GP28", "GP21", "GP20", "GP3", "GP2", "GP12", "GP13", "GP14"],
+ "rows": ["GP25", "GP24", "GP16", "GP7", "GP17", "GP18", "GP19", "GP4", "GP8", "GP9"]
+ }
+}
diff --git a/keyboards/nachie/syndrome/keyboard.json b/keyboards/nachie/syndrome/keyboard.json
new file mode 100644
index 0000000000..71825036b1
--- /dev/null
+++ b/keyboards/nachie/syndrome/keyboard.json
@@ -0,0 +1,149 @@
+{
+ "keyboard_name": "Syndrome",
+ "manufacturer": "Nachie",
+ "usb": {
+ "vid": "0x4B43",
+ "pid": "0x5359",
+ "device_version": "1.0.0"
+ },
+ "board": "GENERIC_RP_RP2040",
+ "bootloader": "rp2040",
+ "processor": "RP2040",
+ "url": "https://littlecraftery.com/products/syndrome",
+ "maintainer": "nachie",
+ "ws2812": {
+ "pin": "GP29",
+ "driver": "vendor"
+ },
+ "rgb_matrix": {
+ "driver": "ws2812",
+ "led_count": 16,
+ "animations": {
+ "alphas_mods": true,
+ "gradient_up_down": true,
+ "gradient_left_right": true,
+ "breathing": true,
+ "band_sat": true,
+ "band_val": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "rainbow_moving_chevron":true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "jellybean_raindrops": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "typing_heatmap": true,
+ "digital_rain": true,
+ "solid_reactive_simple": true,
+ "solid_reactive": true,
+ "solid_reactive_wide": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_multinexus": true,
+ "splash": true,
+ "solid_splash": true,
+ "solid_multisplash": true,
+ "pixel_rain": true,
+ "pixel_fractal": true
+ }
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"y": 0, "x": 0, "matrix": [8, 5], "label": "8,5"},
+ {"y": 0, "x": 7, "matrix": [9, 5], "label": "9,5"},
+ {"y": 0, "x": 8, "matrix": [8, 6], "label": "8,6"},
+ {"y": 0, "x": 9, "matrix": [9, 6], "label": "9,6"},
+ {"y": 0, "x": 10, "matrix": [8, 7], "label": "8,7"},
+ {"y": 2, "x": 0, "matrix": [0, 0], "label": "0,0"},
+ {"y": 2, "x": 1, "matrix": [1, 0], "label": "1,0"},
+ {"y": 2, "x": 2, "matrix": [0, 1], "label": "0,1"},
+ {"y": 2, "x": 3, "matrix": [1, 1], "label": "1,1"},
+ {"y": 2, "x": 4, "matrix": [0, 2], "label": "0,2"},
+ {"y": 2, "x": 5, "matrix": [1, 2], "label": "1,2"},
+ {"y": 2, "x": 6, "matrix": [0, 3], "label": "0,3"},
+ {"y": 2, "x": 7, "matrix": [1, 3], "label": "1,3"},
+ {"y": 2, "x": 8, "matrix": [0, 4], "label": "0,4"},
+ {"y": 2, "x": 9, "matrix": [1, 4], "label": "1,4"},
+ {"y": 2, "x": 10, "matrix": [7, 4], "label": "7,4"},
+ {"y": 3, "x": 0, "matrix": [2, 0], "w": 1.25, "label": "2,0"},
+ {"y": 3, "x": 1.25, "matrix": [3, 0], "label": "3,0"},
+ {"y": 3, "x": 2.25, "matrix": [2, 1], "label": "2,1"},
+ {"y": 3, "x": 3.25, "matrix": [3, 1], "label": "3,1"},
+ {"y": 3, "x": 4.25, "matrix": [2, 2], "label": "2,2"},
+ {"y": 3, "x": 5.25, "matrix": [3, 2], "label": "3,2"},
+ {"y": 3, "x": 6.25, "matrix": [2, 3], "label": "2,3"},
+ {"y": 3, "x": 7.25, "matrix": [3, 3], "label": "3,3"},
+ {"y": 3, "x": 8.25, "matrix": [2, 4], "label": "2,4"},
+ {"y": 3, "x": 9.25, "matrix": [3, 4], "w": 1.75, "label": "3,4"},
+ {"y": 4, "x": 0, "matrix": [4, 0], "w": 1.75, "label": "4,0"},
+ {"y": 4, "x": 1.75, "matrix": [5, 0], "label": "5,0"},
+ {"y": 4, "x": 2.75, "matrix": [4, 1], "label": "4,1"},
+ {"y": 4, "x": 3.75, "matrix": [5, 1], "label": "5,1"},
+ {"y": 4, "x": 4.75, "matrix": [4, 2], "label": "4,2"},
+ {"y": 4, "x": 5.75, "matrix": [5, 2], "label": "5,2"},
+ {"y": 4, "x": 6.75, "matrix": [4, 3], "label": "4,3"},
+ {"y": 4, "x": 7.75, "matrix": [5, 3], "label": "5,3"},
+ {"y": 4, "x": 8.75, "matrix": [4, 4], "w": 1.25, "label": "4,4"},
+ {"y": 4, "x": 10, "matrix": [5, 4], "label": "5,4"},
+ {"y": 5, "x": 0, "matrix": [6, 0], "w": 1.5, "label": "6,0"},
+ {"y": 5, "x": 1.5, "matrix": [7, 0], "label": "7,0"},
+ {"y": 5, "x": 2.5, "matrix": [6, 1], "w": 1.25, "label": "6,1"},
+ {"y": 5, "x": 3.75, "matrix": [7, 1], "w": 1.75, "label": "7,1"},
+ {"y": 5, "x": 5.5, "matrix": [7, 2], "w": 1.75, "label": "7,2"},
+ {"y": 5, "x": 7.25, "matrix": [6, 3], "w": 1.25, "label": "6,3"},
+ {"y": 5, "x": 8.5, "matrix": [7, 3], "label": "7,3"},
+ {"y": 5, "x": 9.5, "matrix": [6, 4], "w": 1.5, "label": "6,4"}
+ ]
+ }
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": false,
+ "audio": false,
+ "backlight": false,
+ "rgblight": false,
+ "encoder": true,
+ "rgb_matrix": true,
+ "haptic": true,
+ "oled": true,
+ "wpm": true
+ },
+ "build": {
+ "lto": true
+ },
+ "haptic": {
+ "driver": "solenoid"
+ },
+ "encoder": {
+ "enabled": true,
+ "rotary": [
+ { "pin_a": "GP22", "pin_b": "GP23", "resolution": 2 },
+ { "pin_a": "GP26", "pin_b": "GP27", "resolution": 2 },
+ { "pin_a": "GP0", "pin_b": "GP1", "resolution": 2 },
+ { "pin_a": "GP5", "pin_b": "GP6", "resolution": 2 }
+ ]
+ },
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": ["GP28", "GP21", "GP20", "GP3", "GP2", "GP12", "GP13", "GP14"],
+ "rows": ["GP25", "GP24", "GP16", "GP7", "GP17", "GP18", "GP19", "GP4", "GP8", "GP9"]
+ }
+}
diff --git a/keyboards/nachie/syndrome/keymaps/default/keymap.c b/keyboards/nachie/syndrome/keymaps/default/keymap.c
new file mode 100755
index 0000000000..9536a4d71c
--- /dev/null
+++ b/keyboards/nachie/syndrome/keymaps/default/keymap.c
@@ -0,0 +1,28 @@
+/*
+Copyright 2024 Nachie
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* QWERTY */
+ LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4,
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT,
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_DOT, KC_LSFT, MO(1),
+ KC_LGUI, KC_LGUI, KC_LALT, KC_SPC, KC_BSPC, KC_RGUI, KC_RALT, MO(1))
+};
diff --git a/keyboards/nachie/syndrome/keymaps/default/readme.md b/keyboards/nachie/syndrome/keymaps/default/readme.md
new file mode 100644
index 0000000000..4301f35d66
--- /dev/null
+++ b/keyboards/nachie/syndrome/keymaps/default/readme.md
@@ -0,0 +1 @@
+The default keymap for the Syndrome.
\ No newline at end of file
diff --git a/keyboards/nachie/syndrome/keymaps/vial/config.h b/keyboards/nachie/syndrome/keymaps/vial/config.h
new file mode 100644
index 0000000000..db5d246379
--- /dev/null
+++ b/keyboards/nachie/syndrome/keymaps/vial/config.h
@@ -0,0 +1,11 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#pragma once
+
+#define VIAL_KEYBOARD_UID {0xBE, 0x9A, 0x53, 0x6B, 0x85, 0xE5, 0xE2, 0xFE}
+
+#define VIAL_UNLOCK_COMBO_ROWS { 0, 3 }
+#define VIAL_UNLOCK_COMBO_COLS { 0, 4 }
+
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define RGB_MATRIX_KEYPRESSES
\ No newline at end of file
diff --git a/keyboards/nachie/syndrome/keymaps/vial/keymap.c b/keyboards/nachie/syndrome/keymaps/vial/keymap.c
new file mode 100755
index 0000000000..229b78c6d9
--- /dev/null
+++ b/keyboards/nachie/syndrome/keymaps/vial/keymap.c
@@ -0,0 +1,492 @@
+/*
+Copyright 2024 Nachie
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+#include
+#include "os_detection.h"
+
+#ifdef OLED_ENABLE
+void render_key_status_or_logo(void);
+void render_current_layer(void);
+void render_current_wpm(void);
+#endif
+
+os_variant_t current_platform;
+bool is_alt_tab_active = false;
+uint16_t alt_tab_timer = 0;
+
+enum layer_names {
+ _BASE, // Default Layer
+ _FN, // Fn Layer 1
+ _FN2, // Fn Layer 2
+ _FN3 // Fn Layer 3
+};
+
+enum custom_keycode {
+ JWRDL = QK_KB_0,
+ JWRDR,
+ SWRDL,
+ SWRDR,
+ TABL,
+ TABR,
+ DSKTPL,
+ DSKTPR,
+ PRVAPP,
+ NXTAPP
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case KC_HOME:
+ if (record->event.pressed && current_platform == OS_MACOS) {
+ register_mods(MOD_LGUI);
+ tap_code(KC_LEFT);
+ unregister_mods(MOD_LGUI);
+ } else {
+ tap_code(KC_HOME);
+ }
+ break;
+ case KC_END:
+ if (record->event.pressed && current_platform == OS_MACOS) {
+ register_mods(MOD_LGUI);
+ tap_code(KC_RIGHT);
+ unregister_mods(MOD_LGUI);
+ } else {
+ tap_code(KC_END);
+ }
+ break;
+ case KC_PGUP:
+ if (record->event.pressed && current_platform == OS_MACOS) {
+ register_mods(MOD_LGUI);
+ tap_code(KC_UP);
+ unregister_mods(MOD_LGUI);
+ } else {
+ tap_code(KC_PGUP);
+ }
+ break;
+ case KC_PGDN:
+ if (record->event.pressed && current_platform == OS_MACOS) {
+ register_mods(MOD_LGUI);
+ tap_code(KC_DOWN);
+ unregister_mods(MOD_LGUI);
+ } else {
+ tap_code(KC_PGDN);
+ }
+ break;
+ case KC_NUM_LOCK:
+ if (record->event.pressed && current_platform == OS_MACOS) {
+ register_mods(MOD_LSFT);
+ tap_code(KC_CLEAR);
+ unregister_mods(MOD_LSFT);
+ } else {
+ tap_code(KC_NUM_LOCK);
+ }
+ break;
+ case KC_SCROLL_LOCK:
+ if (record->event.pressed && current_platform == OS_MACOS) {
+ register_mods(MOD_LCTL);
+ tap_code(KC_F14);
+ unregister_mods(MOD_LCTL);
+ } else {
+ tap_code(KC_SCROLL_LOCK);
+ }
+ break;
+ case KC_PRINT_SCREEN:
+ if (record->event.pressed && current_platform == OS_MACOS) {
+ register_mods(MOD_LSFT);
+ register_mods(MOD_LGUI);
+ tap_code(KC_5);
+ unregister_mods(MOD_LGUI);
+ unregister_mods(MOD_LSFT);
+ } else {
+ tap_code(KC_PRINT_SCREEN);
+ }
+ break;
+ case JWRDL:
+ if (record->event.pressed) {
+ (current_platform == OS_MACOS) ? register_mods(MOD_LALT) : register_mods(MOD_LCTL);
+ tap_code(KC_LEFT);
+ (current_platform == OS_MACOS) ? unregister_mods(MOD_LALT) : unregister_mods(MOD_LCTL);
+ } else {
+ }
+ break;
+ case JWRDR:
+ if (record->event.pressed) {
+ (current_platform == OS_MACOS) ? register_mods(MOD_LALT) : register_mods(MOD_LCTL);
+ tap_code(KC_RIGHT);
+ (current_platform == OS_MACOS) ? unregister_mods(MOD_LALT) : unregister_mods(MOD_LCTL);
+ } else {
+ }
+ break;
+ case SWRDL:
+ if (record->event.pressed) {
+ register_mods(MOD_LSFT);
+ (current_platform == OS_MACOS) ? register_mods(MOD_LALT) : register_mods(MOD_LCTL);
+ tap_code(KC_LEFT);
+ (current_platform == OS_MACOS) ? unregister_mods(MOD_LALT) : unregister_mods(MOD_LCTL);
+ unregister_mods(MOD_LSFT);
+ } else {
+ }
+ break;
+ case SWRDR:
+ if (record->event.pressed) {
+ register_mods(MOD_LSFT);
+ (current_platform == OS_MACOS) ? register_mods(MOD_LALT) : register_mods(MOD_LCTL);
+ tap_code(KC_RIGHT);
+ (current_platform == OS_MACOS) ? unregister_mods(MOD_LALT) : unregister_mods(MOD_LCTL);
+ unregister_mods(MOD_LSFT);
+ } else {
+ }
+ break;
+ case TABL:
+ if (record->event.pressed) {
+ register_mods(MOD_LCTL);
+ register_mods(MOD_LSFT);
+ tap_code(KC_TAB);
+ unregister_mods(MOD_LSFT);
+ unregister_mods(MOD_LCTL);
+ } else {
+ }
+ break;
+ case TABR:
+ if (record->event.pressed) {
+ register_mods(MOD_LCTL);
+ tap_code(KC_TAB);
+ unregister_mods(MOD_LCTL);
+ } else {
+ }
+ break;
+ case DSKTPL:
+ if (record->event.pressed) {
+ register_mods(MOD_LCTL);
+ register_mods(MOD_LGUI);
+ (current_platform == OS_LINUX) ? tap_code(KC_UP) : tap_code(KC_LEFT);
+ unregister_mods(MOD_LGUI);
+ unregister_mods(MOD_LCTL);
+ } else {
+ }
+ break;
+ case DSKTPR:
+ if (record->event.pressed) {
+ register_mods(MOD_LCTL);
+ register_mods(MOD_LGUI);
+ (current_platform == OS_LINUX) ? tap_code(KC_DOWN) : tap_code(KC_RGHT);
+ unregister_mods(MOD_LGUI);
+ unregister_mods(MOD_LCTL);
+ } else {
+ }
+ break;
+ case PRVAPP:
+ if (record->event.pressed) {
+ register_code(KC_LSFT);
+ if (!is_alt_tab_active) {
+ is_alt_tab_active = true;
+ (current_platform == OS_MACOS) ? register_code(KC_LGUI) : register_code(KC_LALT);
+ }
+ alt_tab_timer = timer_read();
+ register_code(KC_TAB);
+ } else {
+ unregister_code(KC_TAB);
+ unregister_code(KC_LSFT);
+ }
+ break;
+ case NXTAPP:
+ if (record->event.pressed) {
+ if (!is_alt_tab_active) {
+ is_alt_tab_active = true;
+ (current_platform == OS_MACOS) ? register_code(KC_LGUI) : register_code(KC_LALT);
+ }
+ alt_tab_timer = timer_read();
+ register_code(KC_TAB);
+ } else {
+ unregister_code(KC_TAB);
+ }
+ break;
+ }
+ return true;
+};
+
+#ifndef HAPTIC_ENABLE
+ #define HF_TOGG _______
+#endif
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* QWERTY */
+ [_BASE] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4,
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT,
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_DOT, KC_LSFT, MO(1),
+ KC_LGUI, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_BSPC, KC_RGUI, MO(2)),
+
+ /* FUNCTION */
+ [_FN] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4,
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT,
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_DOT, KC_LSFT, MO(1),
+ KC_LGUI, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_BSPC, KC_RGUI, MO(1)),
+
+ [_FN2] = LAYOUT(
+ KC_ESC, QK_BOOTLOADER, QK_REBOOT, QK_DEBUG_TOGGLE, QK_CLEAR_EEPROM,
+ HF_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______),
+
+ [_FN3] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______)
+};
+
+void matrix_scan_user(void) { // The very important timer.
+ if (is_alt_tab_active) {
+ if (timer_elapsed(alt_tab_timer) > 1000) {
+ (current_platform == OS_MACOS) ? unregister_code(KC_LGUI) : unregister_code(KC_LALT);
+ is_alt_tab_active = false;
+ }
+ }
+}
+
+#if defined(ENCODER_MAP_ENABLE)
+ const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
+ [_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [_FN] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD) },
+ [_FN2] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [_FN3] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ };
+#endif
+
+#ifdef OLED_ENABLE
+ #ifdef DYNAMIC_MACRO_ENABLE
+ bool macro1;
+ bool macro1rec;
+ bool macro2;
+ bool macro2rec;
+ bool prevEnabled;
+ uint8_t prevRGBmode;
+
+ void render_dynamic_macro_status(int col, int line){
+ oled_set_cursor(col,line);
+ macro1rec ? oled_write(PSTR("DM1"), macro1) : oled_write(PSTR(" "),false);
+ oled_set_cursor(col,line+1);
+ macro2rec ? oled_write(PSTR("DM2"), macro2) : oled_write(PSTR(" "),false);
+ }
+
+ //direction indicates which macro it is, with 1 being Macro 1, -1 being Macro 2, and 0 being no macro.
+ void dynamic_macro_record_start_user(int8_t direction){
+ prevEnabled = rgb_matrix_is_enabled();
+ if (!prevEnabled) { rgb_matrix_enable(); }
+ prevRGBmode = rgb_matrix_get_mode();
+ rgb_matrix_mode(RGB_MATRIX_BREATHING);
+ switch(direction){
+ case 1:
+ macro1 = false;
+ macro1rec = true;
+ break;
+ case -1:
+ macro2 = false;
+ macro2rec = true;
+ break;
+ default:
+ macro1 = false;
+ macro2 = false;
+ macro1rec = false;
+ macro2rec = false;
+ break;
+ }
+ }
+
+ void dynamic_macro_record_end_user(int8_t direction){
+ prevEnabled ? rgb_matrix_mode(prevRGBmode) : rgb_matrix_disable();
+ switch(direction){
+ case 1:
+ macro1 = true;
+ break;
+ case -1:
+ macro2 = true;
+ break;
+ default:
+ macro1 = false;
+ macro2 = false;
+ break;
+ }
+ }
+ #endif
+
+ bool clear_screen = false;
+ bool rerender_platform = false;
+
+ static void render_logo(void) {
+ static const char PROGMEM logo[] = {
+ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94,
+ 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4,
+ 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0x00
+ };
+
+ oled_write(logo, false);
+ }
+
+ void render_keylock_status(led_t led_state) {
+ bool caps_state = (led_state.caps_lock || is_caps_word_on());
+ oled_write(PSTR("CAPS"), caps_state);
+ oled_write(PSTR(" "), false);
+ oled_write(PSTR("NUM"), led_state.num_lock);
+ oled_write(PSTR(" "), false);
+ oled_write(PSTR("SCRL"), led_state.scroll_lock);
+ //oled_write_ln_P(PSTR(" "), false);
+ }
+
+ void render_mod_status(uint8_t modifiers) {
+ oled_write(PSTR("SH"), (modifiers & MOD_MASK_SHIFT));
+ oled_write(PSTR(" "), false);
+ (current_platform == OS_MACOS || current_platform == OS_IOS) ? oled_write(PSTR("CMD"), (modifiers & MOD_MASK_GUI)) : oled_write(PSTR("CT"), (modifiers & MOD_MASK_CTRL));
+ oled_write(PSTR(" "), false);
+ (current_platform == OS_MACOS || current_platform == OS_IOS) ? oled_write(PSTR("OPT"), (modifiers & MOD_MASK_ALT)) : oled_write(PSTR("ALT"), (modifiers & MOD_MASK_ALT));
+ oled_write(PSTR(" "), false);
+ (current_platform == OS_MACOS || current_platform == OS_IOS) ? oled_write(PSTR("CT"), (modifiers & MOD_MASK_CTRL)) : oled_write(PSTR("GUI"), (modifiers & MOD_MASK_GUI));
+ }
+
+ void render_key_status_or_logo(){
+ led_t led_state = host_keyboard_led_state();
+ uint8_t mod_state = (get_mods()|get_oneshot_mods());
+ if ( !led_state.num_lock && !led_state.caps_lock && !led_state.scroll_lock
+ && !(mod_state & MOD_MASK_SHIFT) && !(mod_state & MOD_MASK_ALT) && !(mod_state & MOD_MASK_CTRL) && !(mod_state & MOD_MASK_GUI)) {
+ if(!clear_screen) {
+ render_logo();
+ rerender_platform = true;
+ }
+ clear_screen = true;
+ } else {
+ if (clear_screen == true) {
+ oled_clear();
+ oled_render();
+ clear_screen = false;
+ }
+ oled_set_cursor(8,0);
+ render_keylock_status(led_state);
+ oled_set_cursor(8,1);
+ render_mod_status(mod_state);
+ rerender_platform = true;
+ }
+
+ }
+
+ void render_current_layer(){
+ switch (get_highest_layer(layer_state)) {
+ case 0:
+ oled_write(PSTR("Layer 0"), false);
+ break;
+ case 1:
+ oled_write(PSTR("Layer 1"), false);
+ break;
+ case 2:
+ oled_write(PSTR("Layer 2"), false);
+ break;
+ case 3:
+ oled_write(PSTR("Layer 3"), false);
+ break;
+ default:
+ oled_write(PSTR("Layer ?"), false); // Should never display, here as a catchall
+ }
+ }
+
+ void render_current_wpm(){
+ oled_write_P(PSTR("WPM: "), false);
+ oled_write(get_u8_str(get_current_wpm(), '0'), false);
+ }
+
+ void render_platform_status(int col, int line) {
+ /* Show Ctrl-Gui Swap options */
+ static const char PROGMEM logo[][5][3] = {
+ {{0x9B, 0x9C, 0}, {0xbb, 0xbc, 0}}, //Android
+ {{0x99, 0x9A, 0}, {0xb9, 0xba, 0}}, //Linux
+ {{0x97, 0x98, 0}, {0xb7, 0xb8, 0}}, //Windows
+ {{0x95, 0x96, 0}, {0xb5, 0xb6, 0}}, //Mac/iOS
+ {{0x9D, 0x9E, 0}, {0xbd, 0xbe, 0}}, //Empty Placeholder
+ };
+ current_platform = detected_host_os();
+ switch (current_platform) {
+ /*case OS_ANDROID: //Android
+ oled_set_cursor(col,line);
+ oled_write(logo[0][0], false);
+ oled_set_cursor(col,line+1);
+ oled_write(logo[0][1], false);
+ break;*/
+ case OS_LINUX: //Linux
+ oled_set_cursor(col,line);
+ oled_write(logo[1][0], false);
+ oled_set_cursor(col,line+1);
+ oled_write(logo[1][1], false);
+ keymap_config.swap_lctl_lgui = false;
+ keymap_config.swap_rctl_rgui = false;
+ break;
+ case OS_WINDOWS: //Windows
+ oled_set_cursor(col,line);
+ oled_write(logo[2][0], false);
+ oled_set_cursor(col,line+1);
+ oled_write(logo[2][1], false);
+ keymap_config.swap_lctl_lgui = false;
+ keymap_config.swap_rctl_rgui = false;
+ break;
+ case OS_MACOS: //Mac
+ oled_set_cursor(col,line);
+ oled_write(logo[3][0], false);
+ oled_set_cursor(col,line+1);
+ oled_write(logo[3][1], false);
+ keymap_config.swap_lctl_lgui = true;
+ keymap_config.swap_rctl_rgui = true;
+ break;
+ case OS_IOS: //iOS
+ oled_set_cursor(col,line);
+ oled_write(logo[3][0], false);
+ oled_set_cursor(col,line+1);
+ oled_write(logo[3][1], false);
+ keymap_config.swap_lctl_lgui = true;
+ keymap_config.swap_rctl_rgui = true;
+ break;
+ default: //OS_UNSURE or not configured
+ oled_set_cursor(col,line);
+ oled_write(logo[4][0], false);
+ oled_set_cursor(col,line+1);
+ oled_write(logo[4][1], false);
+ break;
+ }
+ rerender_platform = false;
+ }
+
+ bool oled_task_user(void) {
+ render_key_status_or_logo();
+ oled_set_cursor(8,2);
+ render_current_layer();
+ #ifdef DYNAMIC_MACRO_ENABLE
+ render_dynamic_macro_status(18,2);
+ #endif
+ oled_set_cursor(8,3);
+ render_current_wpm();
+ #ifdef OS_DETECTION_ENABLE
+ if(current_platform != detected_host_os() || rerender_platform) { render_platform_status(3,0); }
+ #endif
+
+ return false;
+ }
+
+#endif
diff --git a/keyboards/nachie/syndrome/keymaps/vial/readme.md b/keyboards/nachie/syndrome/keymaps/vial/readme.md
new file mode 100644
index 0000000000..4b24f26170
--- /dev/null
+++ b/keyboards/nachie/syndrome/keymaps/vial/readme.md
@@ -0,0 +1 @@
+The vial keymap for the Syndrome PCB.
\ No newline at end of file
diff --git a/keyboards/nachie/syndrome/keymaps/vial/rules.mk b/keyboards/nachie/syndrome/keymaps/vial/rules.mk
new file mode 100644
index 0000000000..9f6eb0c0b1
--- /dev/null
+++ b/keyboards/nachie/syndrome/keymaps/vial/rules.mk
@@ -0,0 +1,10 @@
+VIA_ENABLE = yes
+VIAL_ENABLE = yes
+
+VIALRGB_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
+BOOTMAGIC_ENABLE = yes
+MAGIC_ENABLE = yes
+OS_DETECTION_ENABLE = yes
+DYNAMIC_MACRO_ENABLE = yes
+CAPS_WORD_ENABLE = yes
diff --git a/keyboards/nachie/syndrome/keymaps/vial/vial.json b/keyboards/nachie/syndrome/keymaps/vial/vial.json
new file mode 100644
index 0000000000..cc3f42f35e
--- /dev/null
+++ b/keyboards/nachie/syndrome/keymaps/vial/vial.json
@@ -0,0 +1,397 @@
+{
+ "name": "Syndrome",
+ "vendorId": "0x4B43",
+ "productId": "0x5359",
+ "customKeycodes": [
+ {
+ "name": "JmpWordL",
+ "title": "Jump Word Left",
+ "shortName": "JWRDL"
+ },
+ {
+ "name": "JmpWordR",
+ "title": "Jump Word Right",
+ "shortName": "JWRDR"
+ },
+ {
+ "name": "SlcWordL",
+ "title": "Select Word Left",
+ "shortName": "SWRDL"
+ },
+ {
+ "name": "SlcWordR",
+ "title": "Select Word Right",
+ "shortName": "SWRDR"
+ },
+ {
+ "name": "TabLft",
+ "title": "Tab Left",
+ "shortName": "TABL"
+ },
+ {
+ "name": "TabRght",
+ "title": "Tab Right",
+ "shortName": "TABR"
+ },
+ {
+ "name": "DsktpLft",
+ "title": "Desktop Left",
+ "shortName": "DSKTPL"
+ },
+ {
+ "name": "DsktpRght",
+ "title": "Desktop Right",
+ "shortName": "DSKTPR"
+ },
+ {
+ "name": "PrevApp",
+ "title": "Previous App",
+ "shortName": "PRVAPP"
+ },
+ {
+ "name": "NextApp",
+ "title": "Next App",
+ "shortName": "NXTAPP"
+ }
+ ],
+ "matrix": { "rows": 10, "cols": 8 },
+ "lighting": "vialrgb",
+ "layouts": {
+ "labels":[
+ [
+ "Right Shift",
+ "Split Shift Fn",
+ "Split Fn Shift",
+ "No Split"
+ ],
+ [
+ "Bottom Row",
+ "3U Centered",
+ "6U Big Bar",
+ "3U/3U",
+ "2U/2U",
+ "1.75U/1.75U",
+ "7U Big Bar",
+ "3U/1U/3U",
+ "2.75U ALPS",
+ "3U/ENC/3U"
+ ],
+ "Macro Row"
+ ],
+ "keymap": [
+ [
+ {
+ "y": 2.5,
+ "x": 1.5
+ },
+ "3,0\n\n\n\n\n\n\n\n\ne",
+ "3,1\n\n\n\n\n\n\n\n\ne"
+ ],
+ [
+ {
+ "x": 2
+ },
+ "8,5\n\n\n2,0",
+ {
+ "x": 6
+ },
+ "9,5\n\n\n2,0",
+ "8,6\n\n\n2,0",
+ "9,6\n\n\n2,0",
+ "8,7\n\n\n2,0"
+ ],
+ [
+ {
+ "y": 0.5,
+ "x": 1
+ },
+ "0,0\n\n\n\n\n\n\n\n\ne",
+ {
+ "x": 11
+ },
+ "1,0\n\n\n\n\n\n\n\n\ne"
+ ],
+ [
+ {
+ "y": -0.5,
+ "x": 2
+ },
+ "0,0",
+ "1,0",
+ "0,1",
+ "1,1",
+ "0,2",
+ "1,2",
+ "0,3",
+ "1,3",
+ "0,4",
+ "1,4",
+ "7,4"
+ ],
+ [
+ {
+ "y": -0.5,
+ "x": 1
+ },
+ "0,1\n\n\n\n\n\n\n\n\ne",
+ {
+ "x": 11
+ },
+ "1,1\n\n\n\n\n\n\n\n\ne"
+ ],
+ [
+ {
+ "y": -0.5,
+ "x": 2,
+ "c": "#aaaaaa",
+ "w": 1.25
+ },
+ "2,0",
+ {
+ "c": "#cccccc"
+ },
+ "3,0",
+ "2,1",
+ "3,1",
+ "2,2",
+ "3,2",
+ "2,3",
+ "3,3",
+ "2,4",
+ {
+ "c": "#777777",
+ "w": 1.75
+ },
+ "3,4"
+ ],
+ [
+ {
+ "x": 2,
+ "c": "#aaaaaa",
+ "w": 1.75
+ },
+ "4,0",
+ {
+ "c": "#cccccc"
+ },
+ "5,0",
+ "4,1",
+ "5,1",
+ "4,2",
+ "5,2",
+ "4,3",
+ "5,3",
+ {
+ "c": "#aaaaaa",
+ "w": 1.25
+ },
+ "4,4\n\n\n0,0",
+ {
+ "c": "#cccccc"
+ },
+ "5,4\n\n\n0,0",
+ {
+ "x": 0.25
+ },
+ "4,4\n\n\n0,1",
+ {
+ "c": "#aaaaaa",
+ "w": 1.25
+ },
+ "5,4\n\n\n0,1",
+ {
+ "x": 0.25,
+ "w": 2.25
+ },
+ "4,4\n\n\n0,2"
+ ],
+ [
+ {
+ "x": 2,
+ "w": 1.5
+ },
+ "6,0\n\n\n1,0",
+ "7,0\n\n\n1,0",
+ {
+ "w": 1.5
+ },
+ "6,1\n\n\n1,0",
+ {
+ "w": 3
+ },
+ "7,2\n\n\n1,0",
+ {
+ "w": 1.5
+ },
+ "6,3\n\n\n1,0",
+ "7,3\n\n\n1,0",
+ {
+ "w": 1.5
+ },
+ "6,4\n\n\n1,0"
+ ],
+ [
+ {
+ "x": 6.5,
+ "c": "#cccccc"
+ },
+ "2,0\n\n\n\n\n\n\n\n\ne",
+ "2,1\n\n\n\n\n\n\n\n\ne"
+ ],
+ [
+ {
+ "y": 0.25,
+ "x": 2,
+ "c": "#aaaaaa",
+ "w": 1.5
+ },
+ "6,0\n\n\n1,1",
+ "7,0\n\n\n1,1",
+ {
+ "w": 6
+ },
+ "7,2\n\n\n1,1",
+ "7,3\n\n\n1,1",
+ {
+ "w": 1.5
+ },
+ "6,4\n\n\n1,1"
+ ],
+ [
+ {
+ "x": 2,
+ "w": 1.5
+ },
+ "6,0\n\n\n1,2",
+ "7,0\n\n\n1,2",
+ {
+ "w": 3
+ },
+ "7,1\n\n\n1,2",
+ {
+ "w": 3
+ },
+ "7,2\n\n\n1,2",
+ "7,3\n\n\n1,2",
+ {
+ "w": 1.5
+ },
+ "6,4\n\n\n1,2"
+ ],
+ [
+ {
+ "x": 2,
+ "w": 1.5
+ },
+ "6,0\n\n\n1,3",
+ "7,0\n\n\n1,3",
+ "6,1\n\n\n1,3",
+ {
+ "w": 2
+ },
+ "7,1\n\n\n1,3",
+ {
+ "w": 2
+ },
+ "7,2\n\n\n1,3",
+ "6,3\n\n\n1,3",
+ "7,3\n\n\n1,3",
+ {
+ "w": 1.5
+ },
+ "6,4\n\n\n1,3"
+ ],
+ [
+ {
+ "x": 2,
+ "w": 1.5
+ },
+ "6,0\n\n\n1,4",
+ "7,0\n\n\n1,4",
+ {
+ "w": 1.25
+ },
+ "6,1\n\n\n1,4",
+ {
+ "w": 1.75
+ },
+ "7,1\n\n\n1,4",
+ {
+ "w": 1.75
+ },
+ "7,2\n\n\n1,4",
+ {
+ "w": 1.25
+ },
+ "6,3\n\n\n1,4",
+ "7,3\n\n\n1,4",
+ {
+ "w": 1.5
+ },
+ "6,4\n\n\n1,4"
+ ],
+ [
+ {
+ "x": 2
+ },
+ "6,0\n\n\n1,5",
+ "7,0\n\n\n1,5",
+ {
+ "w": 7
+ },
+ "7,2\n\n\n1,5",
+ "7,3\n\n\n1,5",
+ "6,4\n\n\n1,5"
+ ],
+ [
+ {
+ "x": 2
+ },
+ "6,0\n\n\n1,6",
+ "7,0\n\n\n1,6",
+ {
+ "w": 3
+ },
+ "6,1\n\n\n1,6",
+ "7,2\n\n\n1,6",
+ {
+ "w": 3
+ },
+ "6,3\n\n\n1,6",
+ "7,3\n\n\n1,6",
+ "6,4\n\n\n1,6"
+ ],
+ [
+ {
+ "x": 2,
+ "w": 1.25
+ },
+ "6,0\n\n\n1,7",
+ {
+ "w": 1.5
+ },
+ "7,0\n\n\n1,7",
+ {
+ "w": 1.25
+ },
+ "6,1\n\n\n1,7",
+ {
+ "w": 2.75
+ },
+ "7,2\n\n\n1,7",
+ {
+ "w": 1.25
+ },
+ "6,3\n\n\n1,7",
+ {
+ "w": 1.5
+ },
+ "7,3\n\n\n1,7",
+ {
+ "w": 1.5
+ },
+ "6,4\n\n\n1,7"
+ ]
+ ]
+ }
+}
diff --git a/keyboards/nachie/syndrome/mcuconf.h b/keyboards/nachie/syndrome/mcuconf.h
new file mode 100644
index 0000000000..771e56e0de
--- /dev/null
+++ b/keyboards/nachie/syndrome/mcuconf.h
@@ -0,0 +1,9 @@
+#pragma once
+
+#include_next
+
+#undef RP_I2C_USE_I2C0
+#define RP_I2C_USE_I2C0 FALSE
+
+#undef RP_I2C_USE_I2C1
+#define RP_I2C_USE_I2C1 TRUE
\ No newline at end of file
diff --git a/keyboards/nachie/syndrome/readme.md b/keyboards/nachie/syndrome/readme.md
new file mode 100644
index 0000000000..5d6bf99339
--- /dev/null
+++ b/keyboards/nachie/syndrome/readme.md
@@ -0,0 +1,23 @@
+# Syndrome
+
+Firmware for the Syndrome (and Detour)
+
+* Keyboard Maintainer: [Nachie](https://github.com/nachie)
+* Hardware Supported: Syndrome
+* Hardware Availability: [Little Craftery](https://littlecraftery.com/products/syndrome)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make nachie/syndrome:default
+
+Or to make and flash:
+
+ make nachie/syndrome:default:flash
+
+
+See 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).
+
+## Bootloader
+
+* **Bootmagic reset**: Hold down ESC key (top left) and plug in the keyboard
+* **Physical reset button**: Briefly press the button labeled "SW_RST1" on the back of the PCB
diff --git a/keyboards/nachie/syndrome/rules.mk b/keyboards/nachie/syndrome/rules.mk
new file mode 100755
index 0000000000..2af4b691b6
--- /dev/null
+++ b/keyboards/nachie/syndrome/rules.mk
@@ -0,0 +1,4 @@
+
+OLED_DRIVER = ssd1306
+
+OPT_DEFS += -DHAL_USE_I2C=TRUE
diff --git a/keyboards/nachie/syndrome/syndrome.c b/keyboards/nachie/syndrome/syndrome.c
new file mode 100755
index 0000000000..cc62882ef0
--- /dev/null
+++ b/keyboards/nachie/syndrome/syndrome.c
@@ -0,0 +1,89 @@
+/*
+Copyright 2024 Nachie
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include "quantum.h"
+
+led_config_t g_led_config = { {
+ {NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED},
+ { 6, 5, 4, 3, 2, 1, 0, NO_LED },
+ { 7, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, 15 },
+ { 8 , 9, NO_LED, 10, 11, 12, 13, 14 },
+ { NO_LED, NO_LED, NO_LED,NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }
+}, {
+ { 183,0 }, { 162,0 }, { 142,0 }, { 122,0 }, { 81,0 }, { 61,0 }, { 40,0 },
+ { 20,16 }, { 40,48 },
+ { 61,48 }, { 81,48 }, { 101,48 }, { 122,48 }, { 162,48 }, { 203,48 }, { 244,16 }
+}, {
+ 1, 1, 1, 1, 1, 1, 1,
+ 1, 1,
+ 1, 1, 1, 1, 1, 1, 1
+} };
+
+#ifdef OLED_ENABLE
+
+static void render_logo(void) {
+ static const char PROGMEM my_logo[] = {
+ // 'Screenshot 2023-07-21 at 1', 128x32px
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xfe, 0x00, 0x03, 0xc0, 0x00, 0xc0, 0x00, 0x3c, 0x00, 0x0f, 0x1f, 0xf8, 0xe0, 0x00, 0x1f, 0xff,
+0xff, 0x80, 0x01, 0xc0, 0x00, 0x40, 0x00, 0x38, 0x00, 0x07, 0x1f, 0xf8, 0xe0, 0x00, 0x1f, 0xff,
+0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0x1f, 0xf8, 0xff, 0xff, 0x0f, 0xff,
+0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0x1f, 0xf8, 0xff, 0xff, 0x8f, 0xff,
+0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0x1f, 0xf8, 0xff, 0xff, 0x0f, 0xff,
+0xfe, 0x1f, 0xf1, 0xc0, 0x03, 0xff, 0x8f, 0xf8, 0xff, 0xc7, 0x1f, 0xf8, 0xe1, 0xc0, 0x1f, 0xff,
+0xfe, 0x1f, 0xf1, 0xc0, 0x03, 0xff, 0x8f, 0xf8, 0xff, 0xc7, 0x1f, 0xf8, 0xe1, 0xe0, 0x3f, 0xff,
+0xfe, 0x1f, 0xf1, 0xc3, 0xff, 0xff, 0x8f, 0xf8, 0xff, 0xc7, 0x1f, 0xf8, 0xe1, 0xf0, 0xff, 0xff,
+0xfe, 0x1f, 0xf1, 0xc3, 0xff, 0xff, 0x8f, 0xf8, 0xff, 0xc7, 0x1f, 0xf8, 0xe1, 0xf8, 0x7f, 0xff,
+0xfe, 0x1f, 0xf1, 0xc3, 0xff, 0xff, 0x8f, 0xf8, 0xff, 0xc7, 0x1f, 0xf8, 0xe1, 0xf8, 0x7f, 0xff,
+0xfe, 0x00, 0x01, 0xc0, 0x00, 0x7f, 0x8f, 0xf8, 0x00, 0x07, 0x00, 0x00, 0xe1, 0xfc, 0x3f, 0xff,
+0xfe, 0x00, 0x03, 0xc0, 0x00, 0xff, 0x8f, 0xfc, 0x00, 0x0f, 0x80, 0x01, 0xe1, 0xfe, 0x1f, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+};
+ oled_write_raw_P(my_logo, sizeof(my_logo));
+}
+
+bool oled_task_kb(void) {
+ // Defer to the keymap if they want to override
+
+ if(!oled_task_user()) {
+ return false;
+ }
+
+ // default keyboard drawing code
+ render_logo();
+ return false;
+}
+
+#endif
\ No newline at end of file
diff --git a/keyboards/nachie/syndrome_ortho/chconf.h b/keyboards/nachie/syndrome_ortho/chconf.h
new file mode 100644
index 0000000000..ad01fb3387
--- /dev/null
+++ b/keyboards/nachie/syndrome_ortho/chconf.h
@@ -0,0 +1,11 @@
+/*
+ * `qmk chibios-confmigrate -i firmware/nachie/syndrome/chconf.h -r ../keymaps_qmk/platforms/chibios/boards/GENERIC_PROMICRO_RP2040/configs/chconf.h`
+ */
+
+
+#pragma once
+
+#include_next
+
+#undef CH_CFG_ST_TIMEDELTA
+#define CH_CFG_ST_TIMEDELTA 100
\ No newline at end of file
diff --git a/keyboards/nachie/syndrome_ortho/config.h b/keyboards/nachie/syndrome_ortho/config.h
new file mode 100755
index 0000000000..895749b5e2
--- /dev/null
+++ b/keyboards/nachie/syndrome_ortho/config.h
@@ -0,0 +1,37 @@
+/*
+Copyright 2024 Nachie
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#pragma once
+
+#define RP2040_FLASH_GENERIC_03H
+
+#ifdef HAPTIC_ENABLE
+#define SOLENOID_PIN GP15
+#endif
+
+/* Oled config */
+#ifdef OLED_ENABLE
+#define I2C_DRIVER I2CD1
+#define I2C1_SDA_PIN GP10
+#define I2C1_SCL_PIN GP11
+#define OLED_TIMEOUT 60000 // Turns off the OLED screen after x ms of screen update inactivity. Helps reduce OLED Burn-in. Set to 0 to disable.
+#define OLED_FADE_OUT
+#define OLED_FADE_OUT_INTERVAL 13
+#define OLED_BRIGHTNESS 50 // The default brightness level of the OLED, from 0 to 255.
+#define OLED_UPDATE_INTERVAL 16 // limits in milliseconds how frequently the OLED updates. Calculation 1000/fps (increases keyboard responsiveness)
+#endif
+
+#define VIA_CUSTOM_LIGHTING_ENABLE
diff --git a/keyboards/nachie/syndrome_ortho/halconf.h b/keyboards/nachie/syndrome_ortho/halconf.h
new file mode 100644
index 0000000000..23c08453a8
--- /dev/null
+++ b/keyboards/nachie/syndrome_ortho/halconf.h
@@ -0,0 +1,4 @@
+#pragma once
+
+#include_next
+#define HAL_USE_I2C TRUE
\ No newline at end of file
diff --git a/keyboards/nachie/syndrome_ortho/info.json b/keyboards/nachie/syndrome_ortho/info.json
new file mode 100644
index 0000000000..397b8c2209
--- /dev/null
+++ b/keyboards/nachie/syndrome_ortho/info.json
@@ -0,0 +1,154 @@
+{
+ "keyboard_name": "Syndrome Ortho",
+ "manufacturer": "Nachie",
+ "usb": {
+ "vid": "0x4B43",
+ "pid": "0x5360",
+ "device_version": "1.0.0"
+ },
+ "board": "GENERIC_RP_RP2040",
+ "bootloader": "rp2040",
+ "processor": "RP2040",
+ "url": "https://littlecraftery.com/products/syndrome-ortho",
+ "maintainer": "nachie",
+ "ws2812": {
+ "pin": "GP29",
+ "driver": "vendor"
+ },
+ "rgb_matrix": {
+ "driver": "ws2812",
+ "led_count": 16,
+ "animations": {
+ "alphas_mods": true,
+ "gradient_up_down": true,
+ "gradient_left_right": true,
+ "breathing": true,
+ "band_sat": true,
+ "band_val": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "rainbow_moving_chevron":true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "jellybean_raindrops": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "typing_heatmap": true,
+ "digital_rain": true,
+ "solid_reactive_simple": true,
+ "solid_reactive": true,
+ "solid_reactive_wide": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_multinexus": true,
+ "splash": true,
+ "solid_splash": true,
+ "solid_multisplash": true,
+ "pixel_rain": true,
+ "pixel_fractal": true
+ }
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"y": 0, "x": 0, "matrix": [8, 5], "label": "8,5"},
+ {"y": 0, "x": 7, "matrix": [9, 5], "label": "9,5"},
+ {"y": 0, "x": 8, "matrix": [8, 6], "label": "8,6"},
+ {"y": 0, "x": 9, "matrix": [9, 6], "label": "9,6"},
+ {"y": 0, "x": 10, "matrix": [8, 7], "label": "8,7"},
+ {"y": 1.5, "x": 0, "matrix": [0, 0], "label": "0,0"},
+ {"y": 1.5, "x": 1, "matrix": [1, 0], "label": "1,0"},
+ {"y": 1.5, "x": 2, "matrix": [0, 1], "label": "0,1"},
+ {"y": 1.5, "x": 3, "matrix": [1, 1], "label": "1,1"},
+ {"y": 1.5, "x": 4, "matrix": [0, 2], "label": "0,2"},
+ {"y": 1.5, "x": 5, "matrix": [1, 2], "label": "1,2"},
+ {"y": 1.5, "x": 6, "matrix": [0, 3], "label": "0,3"},
+ {"y": 1.5, "x": 7, "matrix": [1, 3], "label": "1,3"},
+ {"y": 1.5, "x": 8, "matrix": [0, 4], "label": "0,4"},
+ {"y": 1.5, "x": 9, "matrix": [1, 4], "label": "1,4"},
+ {"y": 1.5, "x": 10, "matrix": [0, 5], "label": "0,5"},
+ {"y": 2.5, "x": 0, "matrix": [2, 0], "label": "2,0"},
+ {"y": 2.5, "x": 1, "matrix": [3, 0], "label": "3,0"},
+ {"y": 2.5, "x": 2, "matrix": [2, 1], "label": "2,1"},
+ {"y": 2.5, "x": 3, "matrix": [3, 1], "label": "3,1"},
+ {"y": 2.5, "x": 4, "matrix": [2, 2], "label": "2,2"},
+ {"y": 2.5, "x": 5, "matrix": [3, 2], "label": "3,2"},
+ {"y": 2.5, "x": 6, "matrix": [2, 3], "label": "2,3"},
+ {"y": 2.5, "x": 7, "matrix": [3, 3], "label": "3,3"},
+ {"y": 2.5, "x": 8, "matrix": [2, 4], "label": "2,4"},
+ {"y": 2.5, "x": 9, "matrix": [3, 4], "label": "3,4"},
+ {"y": 2.5, "x": 10, "matrix": [2, 5], "label": "2,5"},
+ {"y": 3.5, "x": 0, "matrix": [4, 0], "label": "4,0"},
+ {"y": 3.5, "x": 1, "matrix": [5, 0], "label": "5,0"},
+ {"y": 3.5, "x": 2, "matrix": [4, 1], "label": "4,1"},
+ {"y": 3.5, "x": 3, "matrix": [5, 1], "label": "5,1"},
+ {"y": 3.5, "x": 4, "matrix": [4, 2], "label": "4,2"},
+ {"y": 3.5, "x": 5, "matrix": [5, 2], "label": "5,2"},
+ {"y": 3.5, "x": 6, "matrix": [4, 3], "label": "4,3"},
+ {"y": 3.5, "x": 7, "matrix": [5, 3], "label": "5,3"},
+ {"y": 3.5, "x": 8, "matrix": [4, 4], "label": "4,4"},
+ {"y": 3.5, "x": 9, "matrix": [5, 4], "label": "5,4"},
+ {"y": 3.5, "x": 10, "matrix": [4, 5], "label": "4,5"},
+ {"y": 4.5, "x": 0, "matrix": [6, 0], "w": 1.5, "label": "6,0"},
+ {"y": 4.5, "x": 1.5, "matrix": [7, 0], "label": "7,0"},
+ {"y": 4.5, "x": 2.5, "matrix": [6, 1], "label": "6,1"},
+ {"y": 4.5, "x": 3.5, "matrix": [7, 1], "label": "7,1"},
+ {"y": 4.5, "x": 4.5, "matrix": [6, 2], "label": "6,2"},
+ {"y": 4.5, "x": 4.5, "matrix": [6, 3], "w": 2, "label": "6,3"},
+ {"y": 4.5, "x": 5.5, "matrix": [7, 2], "label": "7,2"},
+ {"y": 4.5, "x": 6.5, "matrix": [7, 3], "label": "7,3"},
+ {"y": 4.5, "x": 7.5, "matrix": [6, 4], "label": "6,4"},
+ {"y": 4.5, "x": 8.5, "matrix": [7, 4], "label": "7,4"},
+ {"y": 4.5, "x": 9.5, "matrix": [6, 5], "w": 1.5, "label": "6,5"}
+ ]
+ }
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": false,
+ "audio": false,
+ "backlight": false,
+ "rgblight": false,
+ "encoder": true,
+ "rgb_matrix": true,
+ "haptic": true,
+ "oled": true,
+ "wpm": true
+ },
+ "build": {
+ "lto": true
+ },
+ "haptic": {
+ "driver": "solenoid"
+ },
+ "encoder": {
+ "enabled": true,
+ "rotary": [
+ { "pin_a": "GP22", "pin_b": "GP23", "resolution": 2 },
+ { "pin_a": "GP26", "pin_b": "GP24", "resolution": 2 },
+ { "pin_a": "GP0", "pin_b": "GP1", "resolution": 2 },
+ { "pin_a": "GP5", "pin_b": "GP3", "resolution": 2 }
+ ]
+ },
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": ["GP28", "GP21", "GP20", "GP6", "GP2", "GP12", "GP13", "GP14"],
+ "rows": ["GP25", "GP27", "GP16", "GP7", "GP17", "GP18", "GP19", "GP4", "GP8", "GP9"]
+ }
+}
diff --git a/keyboards/nachie/syndrome_ortho/keyboard.json b/keyboards/nachie/syndrome_ortho/keyboard.json
new file mode 100644
index 0000000000..397b8c2209
--- /dev/null
+++ b/keyboards/nachie/syndrome_ortho/keyboard.json
@@ -0,0 +1,154 @@
+{
+ "keyboard_name": "Syndrome Ortho",
+ "manufacturer": "Nachie",
+ "usb": {
+ "vid": "0x4B43",
+ "pid": "0x5360",
+ "device_version": "1.0.0"
+ },
+ "board": "GENERIC_RP_RP2040",
+ "bootloader": "rp2040",
+ "processor": "RP2040",
+ "url": "https://littlecraftery.com/products/syndrome-ortho",
+ "maintainer": "nachie",
+ "ws2812": {
+ "pin": "GP29",
+ "driver": "vendor"
+ },
+ "rgb_matrix": {
+ "driver": "ws2812",
+ "led_count": 16,
+ "animations": {
+ "alphas_mods": true,
+ "gradient_up_down": true,
+ "gradient_left_right": true,
+ "breathing": true,
+ "band_sat": true,
+ "band_val": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "rainbow_moving_chevron":true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "jellybean_raindrops": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "typing_heatmap": true,
+ "digital_rain": true,
+ "solid_reactive_simple": true,
+ "solid_reactive": true,
+ "solid_reactive_wide": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_multinexus": true,
+ "splash": true,
+ "solid_splash": true,
+ "solid_multisplash": true,
+ "pixel_rain": true,
+ "pixel_fractal": true
+ }
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"y": 0, "x": 0, "matrix": [8, 5], "label": "8,5"},
+ {"y": 0, "x": 7, "matrix": [9, 5], "label": "9,5"},
+ {"y": 0, "x": 8, "matrix": [8, 6], "label": "8,6"},
+ {"y": 0, "x": 9, "matrix": [9, 6], "label": "9,6"},
+ {"y": 0, "x": 10, "matrix": [8, 7], "label": "8,7"},
+ {"y": 1.5, "x": 0, "matrix": [0, 0], "label": "0,0"},
+ {"y": 1.5, "x": 1, "matrix": [1, 0], "label": "1,0"},
+ {"y": 1.5, "x": 2, "matrix": [0, 1], "label": "0,1"},
+ {"y": 1.5, "x": 3, "matrix": [1, 1], "label": "1,1"},
+ {"y": 1.5, "x": 4, "matrix": [0, 2], "label": "0,2"},
+ {"y": 1.5, "x": 5, "matrix": [1, 2], "label": "1,2"},
+ {"y": 1.5, "x": 6, "matrix": [0, 3], "label": "0,3"},
+ {"y": 1.5, "x": 7, "matrix": [1, 3], "label": "1,3"},
+ {"y": 1.5, "x": 8, "matrix": [0, 4], "label": "0,4"},
+ {"y": 1.5, "x": 9, "matrix": [1, 4], "label": "1,4"},
+ {"y": 1.5, "x": 10, "matrix": [0, 5], "label": "0,5"},
+ {"y": 2.5, "x": 0, "matrix": [2, 0], "label": "2,0"},
+ {"y": 2.5, "x": 1, "matrix": [3, 0], "label": "3,0"},
+ {"y": 2.5, "x": 2, "matrix": [2, 1], "label": "2,1"},
+ {"y": 2.5, "x": 3, "matrix": [3, 1], "label": "3,1"},
+ {"y": 2.5, "x": 4, "matrix": [2, 2], "label": "2,2"},
+ {"y": 2.5, "x": 5, "matrix": [3, 2], "label": "3,2"},
+ {"y": 2.5, "x": 6, "matrix": [2, 3], "label": "2,3"},
+ {"y": 2.5, "x": 7, "matrix": [3, 3], "label": "3,3"},
+ {"y": 2.5, "x": 8, "matrix": [2, 4], "label": "2,4"},
+ {"y": 2.5, "x": 9, "matrix": [3, 4], "label": "3,4"},
+ {"y": 2.5, "x": 10, "matrix": [2, 5], "label": "2,5"},
+ {"y": 3.5, "x": 0, "matrix": [4, 0], "label": "4,0"},
+ {"y": 3.5, "x": 1, "matrix": [5, 0], "label": "5,0"},
+ {"y": 3.5, "x": 2, "matrix": [4, 1], "label": "4,1"},
+ {"y": 3.5, "x": 3, "matrix": [5, 1], "label": "5,1"},
+ {"y": 3.5, "x": 4, "matrix": [4, 2], "label": "4,2"},
+ {"y": 3.5, "x": 5, "matrix": [5, 2], "label": "5,2"},
+ {"y": 3.5, "x": 6, "matrix": [4, 3], "label": "4,3"},
+ {"y": 3.5, "x": 7, "matrix": [5, 3], "label": "5,3"},
+ {"y": 3.5, "x": 8, "matrix": [4, 4], "label": "4,4"},
+ {"y": 3.5, "x": 9, "matrix": [5, 4], "label": "5,4"},
+ {"y": 3.5, "x": 10, "matrix": [4, 5], "label": "4,5"},
+ {"y": 4.5, "x": 0, "matrix": [6, 0], "w": 1.5, "label": "6,0"},
+ {"y": 4.5, "x": 1.5, "matrix": [7, 0], "label": "7,0"},
+ {"y": 4.5, "x": 2.5, "matrix": [6, 1], "label": "6,1"},
+ {"y": 4.5, "x": 3.5, "matrix": [7, 1], "label": "7,1"},
+ {"y": 4.5, "x": 4.5, "matrix": [6, 2], "label": "6,2"},
+ {"y": 4.5, "x": 4.5, "matrix": [6, 3], "w": 2, "label": "6,3"},
+ {"y": 4.5, "x": 5.5, "matrix": [7, 2], "label": "7,2"},
+ {"y": 4.5, "x": 6.5, "matrix": [7, 3], "label": "7,3"},
+ {"y": 4.5, "x": 7.5, "matrix": [6, 4], "label": "6,4"},
+ {"y": 4.5, "x": 8.5, "matrix": [7, 4], "label": "7,4"},
+ {"y": 4.5, "x": 9.5, "matrix": [6, 5], "w": 1.5, "label": "6,5"}
+ ]
+ }
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": false,
+ "audio": false,
+ "backlight": false,
+ "rgblight": false,
+ "encoder": true,
+ "rgb_matrix": true,
+ "haptic": true,
+ "oled": true,
+ "wpm": true
+ },
+ "build": {
+ "lto": true
+ },
+ "haptic": {
+ "driver": "solenoid"
+ },
+ "encoder": {
+ "enabled": true,
+ "rotary": [
+ { "pin_a": "GP22", "pin_b": "GP23", "resolution": 2 },
+ { "pin_a": "GP26", "pin_b": "GP24", "resolution": 2 },
+ { "pin_a": "GP0", "pin_b": "GP1", "resolution": 2 },
+ { "pin_a": "GP5", "pin_b": "GP3", "resolution": 2 }
+ ]
+ },
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": ["GP28", "GP21", "GP20", "GP6", "GP2", "GP12", "GP13", "GP14"],
+ "rows": ["GP25", "GP27", "GP16", "GP7", "GP17", "GP18", "GP19", "GP4", "GP8", "GP9"]
+ }
+}
diff --git a/keyboards/nachie/syndrome_ortho/keymaps/default/keymap.c b/keyboards/nachie/syndrome_ortho/keymaps/default/keymap.c
new file mode 100755
index 0000000000..cc7dcb2934
--- /dev/null
+++ b/keyboards/nachie/syndrome_ortho/keymaps/default/keymap.c
@@ -0,0 +1,28 @@
+/*
+Copyright 2024 Nachie
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* QWERTY */
+ LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4,
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_SPC, KC_H, KC_J, KC_K, KC_L, KC_ENT,
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_SPC, KC_N, KC_M, KC_DOT, KC_LSFT, MO(1),
+ KC_LGUI, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_BSPC, KC_SPC, KC_SPC, KC_BSPC, KC_RGUI, MO(1))
+};
diff --git a/keyboards/nachie/syndrome_ortho/keymaps/default/readme.md b/keyboards/nachie/syndrome_ortho/keymaps/default/readme.md
new file mode 100644
index 0000000000..bdaa70b6e3
--- /dev/null
+++ b/keyboards/nachie/syndrome_ortho/keymaps/default/readme.md
@@ -0,0 +1 @@
+The default keymap for the Syndrome Ortho.
\ No newline at end of file
diff --git a/keyboards/nachie/syndrome_ortho/keymaps/vial/config.h b/keyboards/nachie/syndrome_ortho/keymaps/vial/config.h
new file mode 100644
index 0000000000..60cacf763c
--- /dev/null
+++ b/keyboards/nachie/syndrome_ortho/keymaps/vial/config.h
@@ -0,0 +1,13 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#pragma once
+
+#define VIA_EEPROM_LAYOUT_OPTIONS_SIZE 2
+
+#define VIAL_KEYBOARD_UID {0xC9, 0x3D, 0x14, 0x32, 0x17, 0xA3, 0xD1, 0x9D}
+
+#define VIAL_UNLOCK_COMBO_ROWS { 0, 3 }
+#define VIAL_UNLOCK_COMBO_COLS { 0, 4 }
+
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+#define RGB_MATRIX_KEYPRESSES
\ No newline at end of file
diff --git a/keyboards/nachie/syndrome_ortho/keymaps/vial/keymap.c b/keyboards/nachie/syndrome_ortho/keymaps/vial/keymap.c
new file mode 100755
index 0000000000..d5a1298178
--- /dev/null
+++ b/keyboards/nachie/syndrome_ortho/keymaps/vial/keymap.c
@@ -0,0 +1,492 @@
+/*
+Copyright 2024 Nachie
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+#include
+#include "os_detection.h"
+
+#ifdef OLED_ENABLE
+void render_key_status_or_logo(void);
+void render_current_layer(void);
+void render_current_wpm(void);
+#endif
+
+os_variant_t current_platform;
+bool is_alt_tab_active = false;
+uint16_t alt_tab_timer = 0;
+
+enum layer_names {
+ _BASE, // Default Layer
+ _FN, // Fn Layer 1
+ _FN2, // Fn Layer 2
+ _FN3 // Fn Layer 3
+};
+
+enum custom_keycode {
+ JWRDL = QK_KB_0,
+ JWRDR,
+ SWRDL,
+ SWRDR,
+ TABL,
+ TABR,
+ DSKTPL,
+ DSKTPR,
+ PRVAPP,
+ NXTAPP
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case KC_HOME:
+ if (record->event.pressed && current_platform == OS_MACOS) {
+ register_mods(MOD_LGUI);
+ tap_code(KC_LEFT);
+ unregister_mods(MOD_LGUI);
+ } else {
+ tap_code(KC_HOME);
+ }
+ break;
+ case KC_END:
+ if (record->event.pressed && current_platform == OS_MACOS) {
+ register_mods(MOD_LGUI);
+ tap_code(KC_RIGHT);
+ unregister_mods(MOD_LGUI);
+ } else {
+ tap_code(KC_END);
+ }
+ break;
+ case KC_PGUP:
+ if (record->event.pressed && current_platform == OS_MACOS) {
+ register_mods(MOD_LGUI);
+ tap_code(KC_UP);
+ unregister_mods(MOD_LGUI);
+ } else {
+ tap_code(KC_PGUP);
+ }
+ break;
+ case KC_PGDN:
+ if (record->event.pressed && current_platform == OS_MACOS) {
+ register_mods(MOD_LGUI);
+ tap_code(KC_DOWN);
+ unregister_mods(MOD_LGUI);
+ } else {
+ tap_code(KC_PGDN);
+ }
+ break;
+ case KC_NUM_LOCK:
+ if (record->event.pressed && current_platform == OS_MACOS) {
+ register_mods(MOD_LSFT);
+ tap_code(KC_CLEAR);
+ unregister_mods(MOD_LSFT);
+ } else {
+ tap_code(KC_NUM_LOCK);
+ }
+ break;
+ case KC_SCROLL_LOCK:
+ if (record->event.pressed && current_platform == OS_MACOS) {
+ register_mods(MOD_LCTL);
+ tap_code(KC_F14);
+ unregister_mods(MOD_LCTL);
+ } else {
+ tap_code(KC_SCROLL_LOCK);
+ }
+ break;
+ case KC_PRINT_SCREEN:
+ if (record->event.pressed && current_platform == OS_MACOS) {
+ register_mods(MOD_LSFT);
+ register_mods(MOD_LGUI);
+ tap_code(KC_5);
+ unregister_mods(MOD_LGUI);
+ unregister_mods(MOD_LSFT);
+ } else {
+ tap_code(KC_PRINT_SCREEN);
+ }
+ break;
+ case JWRDL:
+ if (record->event.pressed) {
+ (current_platform == OS_MACOS) ? register_mods(MOD_LALT) : register_mods(MOD_LCTL);
+ tap_code(KC_LEFT);
+ (current_platform == OS_MACOS) ? unregister_mods(MOD_LALT) : unregister_mods(MOD_LCTL);
+ } else {
+ }
+ break;
+ case JWRDR:
+ if (record->event.pressed) {
+ (current_platform == OS_MACOS) ? register_mods(MOD_LALT) : register_mods(MOD_LCTL);
+ tap_code(KC_RIGHT);
+ (current_platform == OS_MACOS) ? unregister_mods(MOD_LALT) : unregister_mods(MOD_LCTL);
+ } else {
+ }
+ break;
+ case SWRDL:
+ if (record->event.pressed) {
+ register_mods(MOD_LSFT);
+ (current_platform == OS_MACOS) ? register_mods(MOD_LALT) : register_mods(MOD_LCTL);
+ tap_code(KC_LEFT);
+ (current_platform == OS_MACOS) ? unregister_mods(MOD_LALT) : unregister_mods(MOD_LCTL);
+ unregister_mods(MOD_LSFT);
+ } else {
+ }
+ break;
+ case SWRDR:
+ if (record->event.pressed) {
+ register_mods(MOD_LSFT);
+ (current_platform == OS_MACOS) ? register_mods(MOD_LALT) : register_mods(MOD_LCTL);
+ tap_code(KC_RIGHT);
+ (current_platform == OS_MACOS) ? unregister_mods(MOD_LALT) : unregister_mods(MOD_LCTL);
+ unregister_mods(MOD_LSFT);
+ } else {
+ }
+ break;
+ case TABL:
+ if (record->event.pressed) {
+ register_mods(MOD_LCTL);
+ register_mods(MOD_LSFT);
+ tap_code(KC_TAB);
+ unregister_mods(MOD_LSFT);
+ unregister_mods(MOD_LCTL);
+ } else {
+ }
+ break;
+ case TABR:
+ if (record->event.pressed) {
+ register_mods(MOD_LCTL);
+ tap_code(KC_TAB);
+ unregister_mods(MOD_LCTL);
+ } else {
+ }
+ break;
+ case DSKTPL:
+ if (record->event.pressed) {
+ register_mods(MOD_LCTL);
+ register_mods(MOD_LGUI);
+ (current_platform == OS_LINUX) ? tap_code(KC_UP) : tap_code(KC_LEFT);
+ unregister_mods(MOD_LGUI);
+ unregister_mods(MOD_LCTL);
+ } else {
+ }
+ break;
+ case DSKTPR:
+ if (record->event.pressed) {
+ register_mods(MOD_LCTL);
+ register_mods(MOD_LGUI);
+ (current_platform == OS_LINUX) ? tap_code(KC_DOWN) : tap_code(KC_RGHT);
+ unregister_mods(MOD_LGUI);
+ unregister_mods(MOD_LCTL);
+ } else {
+ }
+ break;
+ case PRVAPP:
+ if (record->event.pressed) {
+ register_code(KC_LSFT);
+ if (!is_alt_tab_active) {
+ is_alt_tab_active = true;
+ (current_platform == OS_MACOS) ? register_code(KC_LGUI) : register_code(KC_LALT);
+ }
+ alt_tab_timer = timer_read();
+ register_code(KC_TAB);
+ } else {
+ unregister_code(KC_TAB);
+ unregister_code(KC_LSFT);
+ }
+ break;
+ case NXTAPP:
+ if (record->event.pressed) {
+ if (!is_alt_tab_active) {
+ is_alt_tab_active = true;
+ (current_platform == OS_MACOS) ? register_code(KC_LGUI) : register_code(KC_LALT);
+ }
+ alt_tab_timer = timer_read();
+ register_code(KC_TAB);
+ } else {
+ unregister_code(KC_TAB);
+ }
+ break;
+ }
+ return true;
+};
+
+#ifndef HAPTIC_ENABLE
+ #define HF_TOGG _______
+#endif
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* QWERTY */
+ [_BASE] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4,
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_SPC, KC_H, KC_J, KC_K, KC_L, KC_ENT,
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_SPC, KC_N, KC_M, KC_DOT, KC_LSFT, MO(1),
+ KC_LGUI, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_BSPC, KC_SPC, KC_SPC, KC_BSPC, KC_RGUI, MO(2)),
+
+ /* FUNCTION */
+ [_FN] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4,
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_SPC, KC_H, KC_J, KC_K, KC_L, KC_ENT,
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_SPC, KC_N, KC_M, KC_DOT, KC_LSFT, MO(1),
+ KC_LGUI, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_BSPC, KC_SPC, KC_SPC, KC_BSPC, KC_RGUI, MO(1)),
+
+ [_FN2] = LAYOUT(
+ KC_ESC, QK_BOOTLOADER, QK_REBOOT, QK_DEBUG_TOGGLE, QK_CLEAR_EEPROM,
+ HF_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+ [_FN3] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)
+};
+
+void matrix_scan_user(void) { // The very important timer.
+ if (is_alt_tab_active) {
+ if (timer_elapsed(alt_tab_timer) > 1000) {
+ (current_platform == OS_MACOS) ? unregister_code(KC_LGUI) : unregister_code(KC_LALT);
+ is_alt_tab_active = false;
+ }
+ }
+}
+
+#if defined(ENCODER_MAP_ENABLE)
+ const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
+ [_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [_FN] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD) },
+ [_FN2] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [_FN3] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ };
+#endif
+
+#ifdef OLED_ENABLE
+ #ifdef DYNAMIC_MACRO_ENABLE
+ bool macro1;
+ bool macro1rec;
+ bool macro2;
+ bool macro2rec;
+ bool prevEnabled;
+ uint8_t prevRGBmode;
+
+ void render_dynamic_macro_status(int col, int line){
+ oled_set_cursor(col,line);
+ macro1rec ? oled_write(PSTR("DM1"), macro1) : oled_write(PSTR(" "),false);
+ oled_set_cursor(col,line+1);
+ macro2rec ? oled_write(PSTR("DM2"), macro2) : oled_write(PSTR(" "),false);
+ }
+
+ //direction indicates which macro it is, with 1 being Macro 1, -1 being Macro 2, and 0 being no macro.
+ void dynamic_macro_record_start_user(int8_t direction){
+ prevEnabled = rgb_matrix_is_enabled();
+ if (!prevEnabled) { rgb_matrix_enable(); }
+ prevRGBmode = rgb_matrix_get_mode();
+ rgb_matrix_mode(RGB_MATRIX_BREATHING);
+ switch(direction){
+ case 1:
+ macro1 = false;
+ macro1rec = true;
+ break;
+ case -1:
+ macro2 = false;
+ macro2rec = true;
+ break;
+ default:
+ macro1 = false;
+ macro2 = false;
+ macro1rec = false;
+ macro2rec = false;
+ break;
+ }
+ }
+
+ void dynamic_macro_record_end_user(int8_t direction){
+ prevEnabled ? rgb_matrix_mode(prevRGBmode) : rgb_matrix_disable();
+ switch(direction){
+ case 1:
+ macro1 = true;
+ break;
+ case -1:
+ macro2 = true;
+ break;
+ default:
+ macro1 = false;
+ macro2 = false;
+ break;
+ }
+ }
+ #endif
+
+ bool clear_screen = false;
+ bool rerender_platform = false;
+
+ static void render_logo(void) {
+ static const char PROGMEM logo[] = {
+ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94,
+ 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4,
+ 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0x00
+ };
+
+ oled_write(logo, false);
+ }
+
+ void render_keylock_status(led_t led_state) {
+ bool caps_state = (led_state.caps_lock || is_caps_word_on());
+ oled_write(PSTR("CAPS"), caps_state);
+ oled_write(PSTR(" "), false);
+ oled_write(PSTR("NUM"), led_state.num_lock);
+ oled_write(PSTR(" "), false);
+ oled_write(PSTR("SCRL"), led_state.scroll_lock);
+ //oled_write_ln_P(PSTR(" "), false);
+ }
+
+ void render_mod_status(uint8_t modifiers) {
+ oled_write(PSTR("SH"), (modifiers & MOD_MASK_SHIFT));
+ oled_write(PSTR(" "), false);
+ (current_platform == OS_MACOS || current_platform == OS_IOS) ? oled_write(PSTR("CMD"), (modifiers & MOD_MASK_GUI)) : oled_write(PSTR("CT"), (modifiers & MOD_MASK_CTRL));
+ oled_write(PSTR(" "), false);
+ (current_platform == OS_MACOS || current_platform == OS_IOS) ? oled_write(PSTR("OPT"), (modifiers & MOD_MASK_ALT)) : oled_write(PSTR("ALT"), (modifiers & MOD_MASK_ALT));
+ oled_write(PSTR(" "), false);
+ (current_platform == OS_MACOS || current_platform == OS_IOS) ? oled_write(PSTR("CT"), (modifiers & MOD_MASK_CTRL)) : oled_write(PSTR("GUI"), (modifiers & MOD_MASK_GUI));
+ }
+
+ void render_key_status_or_logo(){
+ led_t led_state = host_keyboard_led_state();
+ uint8_t mod_state = (get_mods()|get_oneshot_mods());
+ if ( !led_state.num_lock && !led_state.caps_lock && !led_state.scroll_lock
+ && !(mod_state & MOD_MASK_SHIFT) && !(mod_state & MOD_MASK_ALT) && !(mod_state & MOD_MASK_CTRL) && !(mod_state & MOD_MASK_GUI)) {
+ if(!clear_screen) {
+ render_logo();
+ rerender_platform = true;
+ }
+ clear_screen = true;
+ } else {
+ if (clear_screen == true) {
+ oled_clear();
+ oled_render();
+ clear_screen = false;
+ }
+ oled_set_cursor(8,0);
+ render_keylock_status(led_state);
+ oled_set_cursor(8,1);
+ render_mod_status(mod_state);
+ rerender_platform = true;
+ }
+
+ }
+
+ void render_current_layer(){
+ switch (get_highest_layer(layer_state)) {
+ case 0:
+ oled_write(PSTR("Layer 0"), false);
+ break;
+ case 1:
+ oled_write(PSTR("Layer 1"), false);
+ break;
+ case 2:
+ oled_write(PSTR("Layer 2"), false);
+ break;
+ case 3:
+ oled_write(PSTR("Layer 3"), false);
+ break;
+ default:
+ oled_write(PSTR("Layer ?"), false); // Should never display, here as a catchall
+ }
+ }
+
+ void render_current_wpm(){
+ oled_write_P(PSTR("WPM: "), false);
+ oled_write(get_u8_str(get_current_wpm(), '0'), false);
+ }
+
+ void render_platform_status(int col, int line) {
+ /* Show Ctrl-Gui Swap options */
+ static const char PROGMEM logo[][5][3] = {
+ {{0x9B, 0x9C, 0}, {0xbb, 0xbc, 0}}, //Android
+ {{0x99, 0x9A, 0}, {0xb9, 0xba, 0}}, //Linux
+ {{0x97, 0x98, 0}, {0xb7, 0xb8, 0}}, //Windows
+ {{0x95, 0x96, 0}, {0xb5, 0xb6, 0}}, //Mac/iOS
+ {{0x9D, 0x9E, 0}, {0xbd, 0xbe, 0}}, //Empty Placeholder
+ };
+ current_platform = detected_host_os();
+ switch (current_platform) {
+ /*case OS_ANDROID: //Android
+ oled_set_cursor(col,line);
+ oled_write(logo[0][0], false);
+ oled_set_cursor(col,line+1);
+ oled_write(logo[0][1], false);
+ break;*/
+ case OS_LINUX: //Linux
+ oled_set_cursor(col,line);
+ oled_write(logo[1][0], false);
+ oled_set_cursor(col,line+1);
+ oled_write(logo[1][1], false);
+ keymap_config.swap_lctl_lgui = false;
+ keymap_config.swap_rctl_rgui = false;
+ break;
+ case OS_WINDOWS: //Windows
+ oled_set_cursor(col,line);
+ oled_write(logo[2][0], false);
+ oled_set_cursor(col,line+1);
+ oled_write(logo[2][1], false);
+ keymap_config.swap_lctl_lgui = false;
+ keymap_config.swap_rctl_rgui = false;
+ break;
+ case OS_MACOS: //Mac
+ oled_set_cursor(col,line);
+ oled_write(logo[3][0], false);
+ oled_set_cursor(col,line+1);
+ oled_write(logo[3][1], false);
+ keymap_config.swap_lctl_lgui = true;
+ keymap_config.swap_rctl_rgui = true;
+ break;
+ case OS_IOS: //iOS
+ oled_set_cursor(col,line);
+ oled_write(logo[3][0], false);
+ oled_set_cursor(col,line+1);
+ oled_write(logo[3][1], false);
+ keymap_config.swap_lctl_lgui = true;
+ keymap_config.swap_rctl_rgui = true;
+ break;
+ default: //OS_UNSURE or not configured
+ oled_set_cursor(col,line);
+ oled_write(logo[4][0], false);
+ oled_set_cursor(col,line+1);
+ oled_write(logo[4][1], false);
+ break;
+ }
+ rerender_platform = false;
+ }
+
+ bool oled_task_user(void) {
+ render_key_status_or_logo();
+ oled_set_cursor(8,2);
+ render_current_layer();
+ #ifdef DYNAMIC_MACRO_ENABLE
+ render_dynamic_macro_status(18,2);
+ #endif
+ oled_set_cursor(8,3);
+ render_current_wpm();
+ #ifdef OS_DETECTION_ENABLE
+ if(current_platform != detected_host_os() || rerender_platform) { render_platform_status(3,0); }
+ #endif
+
+ return false;
+ }
+
+#endif
diff --git a/keyboards/nachie/syndrome_ortho/keymaps/vial/readme.md b/keyboards/nachie/syndrome_ortho/keymaps/vial/readme.md
new file mode 100644
index 0000000000..eb6fef76ce
--- /dev/null
+++ b/keyboards/nachie/syndrome_ortho/keymaps/vial/readme.md
@@ -0,0 +1 @@
+The via keymap for the Syndrome Ortho PCB.
\ No newline at end of file
diff --git a/keyboards/nachie/syndrome_ortho/keymaps/vial/rules.mk b/keyboards/nachie/syndrome_ortho/keymaps/vial/rules.mk
new file mode 100644
index 0000000000..9f6eb0c0b1
--- /dev/null
+++ b/keyboards/nachie/syndrome_ortho/keymaps/vial/rules.mk
@@ -0,0 +1,10 @@
+VIA_ENABLE = yes
+VIAL_ENABLE = yes
+
+VIALRGB_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
+BOOTMAGIC_ENABLE = yes
+MAGIC_ENABLE = yes
+OS_DETECTION_ENABLE = yes
+DYNAMIC_MACRO_ENABLE = yes
+CAPS_WORD_ENABLE = yes
diff --git a/keyboards/nachie/syndrome_ortho/keymaps/vial/vial.json b/keyboards/nachie/syndrome_ortho/keymaps/vial/vial.json
new file mode 100644
index 0000000000..a5a15ec4ce
--- /dev/null
+++ b/keyboards/nachie/syndrome_ortho/keymaps/vial/vial.json
@@ -0,0 +1,302 @@
+{
+ "name": "Syndrome",
+ "vendorId": "0x4B43",
+ "productId": "0x5360",
+ "customKeycodes": [
+ {
+ "name": "JmpWordL",
+ "title": "Jump Word Left",
+ "shortName": "JWRDL"
+ },
+ {
+ "name": "JmpWordR",
+ "title": "Jump Word Right",
+ "shortName": "JWRDR"
+ },
+ {
+ "name": "SlcWordL",
+ "title": "Select Word Left",
+ "shortName": "SWRDL"
+ },
+ {
+ "name": "SlcWordR",
+ "title": "Select Word Right",
+ "shortName": "SWRDR"
+ },
+ {
+ "name": "TabLft",
+ "title": "Tab Left",
+ "shortName": "TABL"
+ },
+ {
+ "name": "TabRght",
+ "title": "Tab Right",
+ "shortName": "TABR"
+ },
+ {
+ "name": "DsktpLft",
+ "title": "Desktop Left",
+ "shortName": "DSKTPL"
+ },
+ {
+ "name": "DsktpRght",
+ "title": "Desktop Right",
+ "shortName": "DSKTPR"
+ },
+ {
+ "name": "PrevApp",
+ "title": "Previous App",
+ "shortName": "PRVAPP"
+ },
+ {
+ "name": "NextApp",
+ "title": "Next App",
+ "shortName": "NXTAPP"
+ }
+ ],
+ "matrix": { "rows": 10, "cols": 8 },
+ "lighting": "vialrgb",
+ "layouts": {
+ "labels":[
+ [
+ "Bottom Row",
+ "All 1U",
+ "2U Centered Space",
+ "6U Big Bar",
+ "3U/3U",
+ "2U/2U",
+ "1.75U/1.75U"
+ ],
+ "Alpha Stagger",
+ "R1 Encoder",
+ "R2 Encoder",
+ "R3 Encoder",
+ "Macro Row"
+ ],
+ "keymap": [
+ [
+ {
+ "y": 2.5,
+ "x": 2
+ },
+ "3,0\n\n\n\n\n\n\n\n\ne",
+ "3,1\n\n\n\n\n\n\n\n\ne"
+ ],
+ [
+ {
+ "x": 2.5
+ },
+ "8,5\n\n\n5,0",
+ {
+ "x": 6
+ },
+ "9,5\n\n\n5,0",
+ "8,6\n\n\n5,0",
+ "9,6\n\n\n5,0",
+ "8,7\n\n\n5,0"
+ ],
+ [
+ {
+ "y": 0.5,
+ "x": 2.5
+ },
+ "0,0",
+ "1,0",
+ "0,1",
+ "1,1",
+ "0,2",
+ "1,2",
+ "0,3",
+ "1,3",
+ "0,4",
+ "1,4",
+ "0,5",
+ {
+ "x": 0.75,
+ "d": true
+ },
+ "0,0\n\n\n2,0\n\n\n\n\n\ne",
+ {
+ "d": true
+ },
+ "0,1\n\n\n2,0\n\n\n\n\n\ne",
+ "0,0\n\n\n2,1\n\n\n\n\n\ne",
+ "0,1\n\n\n2,1\n\n\n\n\n\ne"
+ ],
+ [
+ {
+ "x": 2.5,
+ "c": "#aaaaaa"
+ },
+ "2,0",
+ {
+ "c": "#cccccc"
+ },
+ "3,0",
+ "2,1",
+ "3,1",
+ "2,2",
+ "3,2",
+ "2,3",
+ "3,3",
+ "2,4",
+ {
+ "c": "#777777"
+ },
+ "3,4",
+ "2,5",
+ {
+ "x": 0.75,
+ "c": "#cccccc",
+ "d": true
+ },
+ "1,0\n\n\n3,0\n\n\n\n\n\ne",
+ {
+ "d": true
+ },
+ "1,1\n\n\n3,0\n\n\n\n\n\ne",
+ "1,0\n\n\n3,1\n\n\n\n\n\ne",
+ "1,1\n\n\n3,1\n\n\n\n\n\ne"
+ ],
+ [
+ {
+ "x": 2.5,
+ "c": "#aaaaaa"
+ },
+ "4,0\n\n\n1,0",
+ {
+ "c": "#cccccc"
+ },
+ "5,0\n\n\n1,0",
+ "4,1\n\n\n1,0",
+ "5,1\n\n\n1,0",
+ "4,2\n\n\n1,0",
+ "5,2",
+ "4,3\n\n\n1,0",
+ "5,3\n\n\n1,0",
+ "4,4\n\n\n1,0",
+ {
+ "c": "#aaaaaa"
+ },
+ "5,4\n\n\n1,0",
+ "4,5\n\n\n1,0",
+ {
+ "x": 0.75,
+ "c": "#cccccc",
+ "d": true
+ },
+ "2,0\n\n\n4,0\n\n\n\n\n\ne",
+ {
+ "d": true
+ },
+ "2,1\n\n\n4,0\n\n\n\n\n\ne",
+ "2,0\n\n\n4,1\n\n\n\n\n\ne",
+ "2,1\n\n\n4,1\n\n\n\n\n\ne"
+ ],
+ [
+ {
+ "x": 2.5,
+ "w": 1.5
+ },
+ "6,0",
+ "7,0",
+ "6,1\n\n\n0,0",
+ "7,1\n\n\n0,0",
+ "6,2\n\n\n0,0",
+ "7,2\n\n\n0,0",
+ "7,3\n\n\n0,0",
+ "6,4\n\n\n0,0",
+ "7,4",
+ {
+ "w": 1.5
+ },
+ "6,5"
+ ],
+ [
+ {
+ "x": 5
+ },
+ "6,1\n\n\n0,1",
+ "7,1\n\n\n0,1",
+ {
+ "w": 2
+ },
+ "6,3\n\n\n0,1",
+ "7,3\n\n\n0,1",
+ "6,4\n\n\n0,1"
+ ],
+ [
+ {
+ "x": 5,
+ "w": 6
+ },
+ "6,3\n\n\n0,2"
+ ],
+ [
+ {
+ "x": 5,
+ "w": 3
+ },
+ "7,1\n\n\n0,3",
+ {
+ "w": 3
+ },
+ "7,3\n\n\n0,3"
+ ],
+ [
+ {
+ "x": 5
+ },
+ "6,1\n\n\n0,4",
+ {
+ "w": 2
+ },
+ "6,2\n\n\n0,4",
+ {
+ "w": 2
+ },
+ "7,3\n\n\n0,4",
+ "6,4\n\n\n0,4"
+ ],
+ [
+ {
+ "x": 5,
+ "w": 1.25
+ },
+ "6,1\n\n\n0,5",
+ {
+ "w": 1.75
+ },
+ "6,2\n\n\n0,5",
+ {
+ "w": 1.75
+ },
+ "7,3\n\n\n0,5",
+ {
+ "w": 1.25
+ },
+ "6,4\n\n\n0,5"
+ ],
+ [
+ {
+ "y": 1.25,
+ "x": 2.5,
+ "w": 1.5
+ },
+ "4,0\n\n\n1,1",
+ "5,0\n\n\n1,1",
+ "4,1\n\n\n1,1",
+ "5,1\n\n\n1,1",
+ "4,2\n\n\n1,1",
+ "4,3\n\n\n1,1",
+ "5,3\n\n\n1,1",
+ "4,4\n\n\n1,1",
+ "5,4\n\n\n1,1",
+ {
+ "w": 1.5
+ },
+ "4,5\n\n\n1,1"
+ ]
+ ]
+ }
+}
diff --git a/keyboards/nachie/syndrome_ortho/mcuconf.h b/keyboards/nachie/syndrome_ortho/mcuconf.h
new file mode 100644
index 0000000000..771e56e0de
--- /dev/null
+++ b/keyboards/nachie/syndrome_ortho/mcuconf.h
@@ -0,0 +1,9 @@
+#pragma once
+
+#include_next
+
+#undef RP_I2C_USE_I2C0
+#define RP_I2C_USE_I2C0 FALSE
+
+#undef RP_I2C_USE_I2C1
+#define RP_I2C_USE_I2C1 TRUE
\ No newline at end of file
diff --git a/keyboards/nachie/syndrome_ortho/readme.md b/keyboards/nachie/syndrome_ortho/readme.md
new file mode 100644
index 0000000000..5c94323941
--- /dev/null
+++ b/keyboards/nachie/syndrome_ortho/readme.md
@@ -0,0 +1,23 @@
+# Syndrome Ortho
+
+Firmware for the Syndrome Ortho (and Detour)
+
+* Keyboard Maintainer: [Nachie](https://github.com/nachie)
+* Hardware Supported: Syndrome Ortho
+* Hardware Availability: [Little Craftery](https://littlecraftery.com/products/syndrome-ortho)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make nachie/syndrome_ortho:default
+
+Or to make and flash:
+
+ make nachie/syndrome_ortho:default:flash
+
+
+See 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).
+
+## Bootloader
+
+* **Bootmagic reset**: Hold down ESC key (top left) and plug in the keyboard
+* **Physical reset button**: Briefly press the button labeled "SW_RST1" on the back of the PCB
diff --git a/keyboards/nachie/syndrome_ortho/rules.mk b/keyboards/nachie/syndrome_ortho/rules.mk
new file mode 100755
index 0000000000..d45c132405
--- /dev/null
+++ b/keyboards/nachie/syndrome_ortho/rules.mk
@@ -0,0 +1,3 @@
+OLED_DRIVER = ssd1306
+
+OPT_DEFS += -DHAL_USE_I2C=TRUE
diff --git a/keyboards/nachie/syndrome_ortho/syndrome_ortho.c b/keyboards/nachie/syndrome_ortho/syndrome_ortho.c
new file mode 100755
index 0000000000..ea88ac225b
--- /dev/null
+++ b/keyboards/nachie/syndrome_ortho/syndrome_ortho.c
@@ -0,0 +1,89 @@
+/*
+Copyright 2024 Nachie
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include "quantum.h"
+
+
+led_config_t g_led_config = { {
+ {NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED},
+ { 6, 5, 4, 3, 2, 1, 0, NO_LED },
+ { 7, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, 15 },
+ { 8 , 9, NO_LED, 10, 11, 12, 13, 14 },
+ { NO_LED, NO_LED, NO_LED,NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }
+}, {
+ { 183,0 }, { 162,0 }, { 142,0 }, { 122,0 }, { 81,0 }, { 61,0 }, { 40,0 },
+ { 20,16 }, { 40,48 },
+ { 61,48 }, { 81,48 }, { 101,48 }, { 122,48 }, { 162,48 }, { 203,48 }, { 244,16 }
+}, {
+ 1, 1, 1, 1, 1, 1, 1,
+ 1, 1,
+ 1, 1, 1, 1, 1, 1, 1
+} };
+
+#ifdef OLED_ENABLE
+
+static void render_logo(void) {
+ static const char PROGMEM my_logo[] = {
+ // 'Screenshot 2023-07-21 at 1', 128x32px
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xfe, 0x00, 0x03, 0xc0, 0x00, 0xc0, 0x00, 0x3c, 0x00, 0x0f, 0x1f, 0xf8, 0xe0, 0x00, 0x1f, 0xff,
+0xff, 0x80, 0x01, 0xc0, 0x00, 0x40, 0x00, 0x38, 0x00, 0x07, 0x1f, 0xf8, 0xe0, 0x00, 0x1f, 0xff,
+0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0x1f, 0xf8, 0xff, 0xff, 0x0f, 0xff,
+0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0x1f, 0xf8, 0xff, 0xff, 0x8f, 0xff,
+0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0x1f, 0xf8, 0xff, 0xff, 0x0f, 0xff,
+0xfe, 0x1f, 0xf1, 0xc0, 0x03, 0xff, 0x8f, 0xf8, 0xff, 0xc7, 0x1f, 0xf8, 0xe1, 0xc0, 0x1f, 0xff,
+0xfe, 0x1f, 0xf1, 0xc0, 0x03, 0xff, 0x8f, 0xf8, 0xff, 0xc7, 0x1f, 0xf8, 0xe1, 0xe0, 0x3f, 0xff,
+0xfe, 0x1f, 0xf1, 0xc3, 0xff, 0xff, 0x8f, 0xf8, 0xff, 0xc7, 0x1f, 0xf8, 0xe1, 0xf0, 0xff, 0xff,
+0xfe, 0x1f, 0xf1, 0xc3, 0xff, 0xff, 0x8f, 0xf8, 0xff, 0xc7, 0x1f, 0xf8, 0xe1, 0xf8, 0x7f, 0xff,
+0xfe, 0x1f, 0xf1, 0xc3, 0xff, 0xff, 0x8f, 0xf8, 0xff, 0xc7, 0x1f, 0xf8, 0xe1, 0xf8, 0x7f, 0xff,
+0xfe, 0x00, 0x01, 0xc0, 0x00, 0x7f, 0x8f, 0xf8, 0x00, 0x07, 0x00, 0x00, 0xe1, 0xfc, 0x3f, 0xff,
+0xfe, 0x00, 0x03, 0xc0, 0x00, 0xff, 0x8f, 0xfc, 0x00, 0x0f, 0x80, 0x01, 0xe1, 0xfe, 0x1f, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+};
+ oled_write_raw_P(my_logo, sizeof(my_logo));
+}
+
+bool oled_task_kb(void) {
+ // Defer to the keymap if they want to override
+
+ if(!oled_task_user()) {
+ return false;
+ }
+
+ // default keyboard drawing code
+ render_logo();
+ return false;
+}
+
+#endif
\ No newline at end of file