summaryrefslogtreecommitdiffstats
path: root/keyboards/bastardkb/charybdis/3x5
diff options
context:
space:
mode:
authorNick Brassel <nick@tzarc.org>2022-08-28 14:23:01 +1000
committerNick Brassel <nick@tzarc.org>2022-08-28 14:23:01 +1000
commit0a3f7e48690bb2b7b008300a54554979a55be19a (patch)
tree7499d52f20040ed7d5a56496ecb81ed114f80719 /keyboards/bastardkb/charybdis/3x5
parentfc0bf67f372c38f72c303cdec21b1d4afb5e8cb4 (diff)
parent9b5b0722555891ba94f240760ef3a6d4c870fd13 (diff)
Merge remote-tracking branch 'upstream/develop'
Diffstat (limited to 'keyboards/bastardkb/charybdis/3x5')
-rw-r--r--keyboards/bastardkb/charybdis/3x5/3x5.c8
-rw-r--r--keyboards/bastardkb/charybdis/3x5/blackpill/config.h62
-rw-r--r--keyboards/bastardkb/charybdis/3x5/blackpill/halconf.h29
-rw-r--r--keyboards/bastardkb/charybdis/3x5/blackpill/info.json6
-rw-r--r--keyboards/bastardkb/charybdis/3x5/blackpill/mcuconf.h61
-rw-r--r--keyboards/bastardkb/charybdis/3x5/blackpill/readme.md3
-rw-r--r--keyboards/bastardkb/charybdis/3x5/blackpill/rules.mk41
-rw-r--r--keyboards/bastardkb/charybdis/3x5/config.h38
-rw-r--r--keyboards/bastardkb/charybdis/3x5/info.json5
-rw-r--r--keyboards/bastardkb/charybdis/3x5/keymaps/bstiq/README.md3
-rw-r--r--keyboards/bastardkb/charybdis/3x5/keymaps/bstiq/config.h166
-rw-r--r--keyboards/bastardkb/charybdis/3x5/keymaps/bstiq/keymap.c224
-rw-r--r--keyboards/bastardkb/charybdis/3x5/keymaps/bstiq/rules.mk10
-rw-r--r--keyboards/bastardkb/charybdis/3x5/keymaps/default/keymap.c4
-rw-r--r--keyboards/bastardkb/charybdis/3x5/keymaps/drashna/config.h6
-rw-r--r--keyboards/bastardkb/charybdis/3x5/keymaps/via/config.h13
-rw-r--r--keyboards/bastardkb/charybdis/3x5/keymaps/via/keymap.c42
-rw-r--r--keyboards/bastardkb/charybdis/3x5/v1/elitec/config.h42
-rw-r--r--keyboards/bastardkb/charybdis/3x5/v1/elitec/info.json6
-rw-r--r--keyboards/bastardkb/charybdis/3x5/v1/elitec/rules.mk (renamed from keyboards/bastardkb/charybdis/3x5/rules.mk)9
-rw-r--r--keyboards/bastardkb/charybdis/3x5/v2/elitec/config.h36
-rw-r--r--keyboards/bastardkb/charybdis/3x5/v2/elitec/info.json6
-rw-r--r--keyboards/bastardkb/charybdis/3x5/v2/elitec/rules.mk37
-rw-r--r--keyboards/bastardkb/charybdis/3x5/v2/splinky/config.h50
-rw-r--r--keyboards/bastardkb/charybdis/3x5/v2/splinky/info.json6
-rw-r--r--keyboards/bastardkb/charybdis/3x5/v2/splinky/mcuconf.h23
-rw-r--r--keyboards/bastardkb/charybdis/3x5/v2/splinky/rules.mk37
27 files changed, 895 insertions, 78 deletions
diff --git a/keyboards/bastardkb/charybdis/3x5/3x5.c b/keyboards/bastardkb/charybdis/3x5/3x5.c
index d896cf6923..7b10d322cd 100644
--- a/keyboards/bastardkb/charybdis/3x5/3x5.c
+++ b/keyboards/bastardkb/charybdis/3x5/3x5.c
@@ -33,6 +33,10 @@
* ╰────────────────────╯ ╰────────────────────╯
* 15 16 17 33 34 XX
* ╰────────────╯ ╰────────────╯
+ *
+ * Note: the LED config simulates 36 LEDs instead of the actual 35 to prevent
+ * confusion when testing LEDs during assembly when handedness is not set
+ * correctly. Those fake LEDs are bound to the physical top-left corner.
*/
led_config_t g_led_config = { {
/* Key Matrix to LED index. */
@@ -61,7 +65,7 @@ led_config_t g_led_config = { {
/* index=24 */ { 188, 42 }, { 188, 21 }, { 188, 0 },
/* index=27 */ { 170, 0 }, { 170, 21 }, { 170, 42 },
/* index=30 */ { 152, 0 }, { 152, 21 }, { 152, 42 },
- /* index=33 */ { 152, 64 }, { 134, 64 },
+ /* index=33 */ { 134, 64 }, { 152, 64 }, { 0, 0 },
}, {
/* LED index to flag. */
// Left split.
@@ -77,7 +81,7 @@ led_config_t g_led_config = { {
/* index=24 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT,
/* index=27 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT,
/* index=30 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT,
- /* index=33 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, // Thumb cluster
+ /* index=33 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, // Thumb cluster
} };
#endif
// clang-format on
diff --git a/keyboards/bastardkb/charybdis/3x5/blackpill/config.h b/keyboards/bastardkb/charybdis/3x5/blackpill/config.h
new file mode 100644
index 0000000000..ddd5e83318
--- /dev/null
+++ b/keyboards/bastardkb/charybdis/3x5/blackpill/config.h
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2020 Christopher Courtney <drashna@live.com> (@drashna)
+ * Copyright 2021 Stefan Kerkmann (@KarlK90)
+ * Copyright 2021 Charly Delay <charly@codesink.dev> (@0xcharly)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Publicw 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 <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+/* Key matrix configuration. */
+#define MATRIX_ROW_PINS \
+ { A2, B8, A8, B9 }
+#define MATRIX_COL_PINS \
+ { B1, B10, B3, B4, B5 }
+
+/* Handedness. */
+#define SPLIT_HAND_PIN A3 // High -> left, Low -> right.
+
+/* RGB settings. */
+#define RGB_DI_PIN A1
+#define WS2812_PWM_DRIVER PWMD2
+#define WS2812_PWM_CHANNEL 2
+#define WS2812_PWM_PAL_MODE 1
+#define WS2812_EXTERNAL_PULLUP
+#define WS2812_DMA_STREAM STM32_DMA1_STREAM1
+#define WS2812_DMA_CHANNEL 3
+#define WS2812_PWM_TARGET_PERIOD 800000
+
+/* Serial configuration for split keyboard. */
+#define SERIAL_USART_TX_PIN A9
+
+/* CRC. */
+#define CRC8_USE_TABLE
+#define CRC8_OPTIMIZE_SPEED
+
+/* SPI config for EEPROM and pmw3360 sensor. */
+#define SPI_DRIVER SPID1
+#define SPI_SCK_PIN A5
+#define SPI_SCK_PAL_MODE 5
+#define SPI_MOSI_PIN A7
+#define SPI_MOSI_PAL_MODE 5
+#define SPI_MISO_PIN A6
+#define SPI_MISO_PAL_MODE 5
+
+/* EEPROM config. */
+#define EXTERNAL_EEPROM_SPI_SLAVE_SELECT_PIN A4
+
+/* PMW3360 settings. */
+#define PMW33XX_CS_PIN B14
+#define PMW33XX_CS_DIVISOR 64
diff --git a/keyboards/bastardkb/charybdis/3x5/blackpill/halconf.h b/keyboards/bastardkb/charybdis/3x5/blackpill/halconf.h
new file mode 100644
index 0000000000..a89dff0cd3
--- /dev/null
+++ b/keyboards/bastardkb/charybdis/3x5/blackpill/halconf.h
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2020 Nick Brassel (tzarc)
+ * Copyright 2021 Charly Delay <charly@codesink.dev> (@0xcharly)
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#define HAL_USE_PWM TRUE
+#define HAL_USE_SERIAL TRUE
+//#define HAL_USE_I2C TRUE
+#define HAL_USE_SPI TRUE
+#define SPI_USE_WAIT TRUE
+#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
+//#define HAL_USE_GPT TRUE
+
+#include_next "halconf.h"
diff --git a/keyboards/bastardkb/charybdis/3x5/blackpill/info.json b/keyboards/bastardkb/charybdis/3x5/blackpill/info.json
new file mode 100644
index 0000000000..1e347df9b2
--- /dev/null
+++ b/keyboards/bastardkb/charybdis/3x5/blackpill/info.json
@@ -0,0 +1,6 @@
+{
+ "keyboard_name": "Charybdis Nano (3x5) Blackpill",
+ "usb": {
+ "device_version": "1.0.0",
+ },
+}
diff --git a/keyboards/bastardkb/charybdis/3x5/blackpill/mcuconf.h b/keyboards/bastardkb/charybdis/3x5/blackpill/mcuconf.h
new file mode 100644
index 0000000000..1615d1bf46
--- /dev/null
+++ b/keyboards/bastardkb/charybdis/3x5/blackpill/mcuconf.h
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2020 Nick Brassel (tzarc)
+ * Copyright 2021 Stefan Kerkmann (@KarlK90)
+ * Copyright 2021 Charly Delay <charly@codesink.dev> (@0xcharly)
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include_next "mcuconf.h"
+
+#undef STM32_I2C_USE_I2C1
+#define STM32_I2C_USE_I2C1 TRUE
+
+#undef STM32_I2C_I2C1_RX_DMA_STREAM
+#define STM32_I2C_I2C1_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 0)
+#undef STM32_I2C_I2C1_TX_DMA_STREAM
+#define STM32_I2C_I2C1_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 1)
+
+#undef STM32_PWM_USE_TIM2
+#define STM32_PWM_USE_TIM2 TRUE
+
+#undef STM32_PWM_USE_TIM3
+#define STM32_PWM_USE_TIM3 TRUE
+
+#undef STM32_SPI_USE_SPI1
+#define STM32_SPI_USE_SPI1 TRUE
+
+#undef STM32_SPI_SPI1_RX_DMA_STREAM
+#define STM32_SPI_SPI1_RX_DMA_STREAM STM32_DMA_STREAM_ID(2, 0)
+#undef STM32_SPI_SPI1_TX_DMA_STREAM
+#define STM32_SPI_SPI1_TX_DMA_STREAM STM32_DMA_STREAM_ID(2, 3)
+
+#undef STM32_SERIAL_USE_USART1
+#define STM32_SERIAL_USE_USART1 TRUE
+
+// #undef STM32_SERIAL_USE_USART2
+// #define STM32_SERIAL_USE_USART2 TRUE
+
+// #undef STM32_UART_USART2_RX_DMA_STREAM
+// #define STM32_UART_USART2_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 5)
+// #undef STM32_UART_USART2_TX_DMA_STREAM
+// #define STM32_UART_USART2_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 6)
+
+#undef STM32_GPT_USE_TIM4
+#define STM32_GPT_USE_TIM4 TRUE
+
+#undef STM32_ST_USE_TIMER
+#define STM32_ST_USE_TIMER 5
diff --git a/keyboards/bastardkb/charybdis/3x5/blackpill/readme.md b/keyboards/bastardkb/charybdis/3x5/blackpill/readme.md
new file mode 100644
index 0000000000..7ef08798b8
--- /dev/null
+++ b/keyboards/bastardkb/charybdis/3x5/blackpill/readme.md
@@ -0,0 +1,3 @@
+# Charybdis Nano (3x5) BlackPill
+
+An ergonomic keyboard with integrated trackball, with BlackPill (STM32F411) mod.
diff --git a/keyboards/bastardkb/charybdis/3x5/blackpill/rules.mk b/keyboards/bastardkb/charybdis/3x5/blackpill/rules.mk
new file mode 100644
index 0000000000..0f732c2cbd
--- /dev/null
+++ b/keyboards/bastardkb/charybdis/3x5/blackpill/rules.mk
@@ -0,0 +1,41 @@
+# MCU name
+MCU = STM32F411
+BOARD = BLACKPILL_STM32_F411
+
+# Bootloader selection
+BOOTLOADER = stm32-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
+
+AUDIO_SUPPORTED = no # Audio is not supported
+RGB_MATRIX_SUPPORTED = yes # RGB matrix is supported and enabled by default
+RGBLIGHT_SUPPORTED = yes # RGB underglow is supported, but not enabled by default
+RGB_MATRIX_ENABLE = yes # Enable keyboard RGB matrix functionality
+RGB_MATRIX_DRIVER = WS2812
+
+# Charybdis nano is a split 3x5 keyboard with a maximum of 3 thumb keys (2 on
+# the trackball side).
+SPLIT_KEYBOARD = yes
+LAYOUTS = split_3x5_3 # Support community layout, in particular Manna-Harbour's Miryoku layout
+
+POINTING_DEVICE_ENABLE = yes # Enable trackball
+POINTING_DEVICE_DRIVER = pmw3360
+MOUSE_SHARED_EP = no # Unify multiple HID interfaces into a single Endpoint
+KEYBOARD_SHARED_EP = yes
+
+EEPROM_DRIVER = spi
+WS2812_DRIVER = pwm
+SERIAL_DRIVER = usart
+
+DEBOUNCE_TYPE = asym_eager_defer_pk
diff --git a/keyboards/bastardkb/charybdis/3x5/config.h b/keyboards/bastardkb/charybdis/3x5/config.h
index 6d62caf5d2..6e3b8a7124 100644
--- a/keyboards/bastardkb/charybdis/3x5/config.h
+++ b/keyboards/bastardkb/charybdis/3x5/config.h
@@ -19,51 +19,21 @@
#pragma once
/* Key matrix configuration. */
-
-// Rows are doubled-up.
-#define MATRIX_ROWS 8
+#define MATRIX_ROWS 8 // Rows are doubled-up.
#define MATRIX_COLS 5
-// Wiring configuration for each half.
-#define MATRIX_ROW_PINS \
- { B7, C6, D4, B5 }
-#define MATRIX_COL_PINS \
- { C7, F0, D7, E6, B4 }
-
-#define MATRIX_ROW_PINS_RIGHT \
- { F0, C6, D4, B5 }
-#define MATRIX_COL_PINS_RIGHT \
- { C7, B7, D7, E6, B4 }
-
#define DIODE_DIRECTION ROW2COL
-/* Handedness. */
-#define MASTER_RIGHT
-
-/* Bootmagic Lite configuration. */
-#define BOOTMAGIC_LITE_ROW 0
-#define BOOTMAGIC_LITE_COLUMN 0
-#define BOOTMAGIC_LITE_ROW_RIGHT 4
-#define BOOTMAGIC_LITE_COLUMN_RIGHT 0
-
-/* serial.c configuration (for split keyboard) */
-#define SOFT_SERIAL_PIN D2
-
/* Set 0 if debouncing isn't needed. */
#define DEBOUNCE 5
-/* PMW3360 settings. */
-#define PMW3360_CS_PIN B0
-
-// Trackball angle adjustment.
+/* Trackball angle adjustment. */
#define ROTATIONAL_TRANSFORM_ANGLE -25
/* RGB settings. */
-
-#define RGB_DI_PIN D3
-#define RGBLED_NUM 35
+#define RGBLED_NUM 36
#define RGBLED_SPLIT \
- { 18, 17 }
+ { 18, 18 }
/* RGB matrix support. */
#ifdef RGB_MATRIX_ENABLE
diff --git a/keyboards/bastardkb/charybdis/3x5/info.json b/keyboards/bastardkb/charybdis/3x5/info.json
index 935b1f7249..41c80b457f 100644
--- a/keyboards/bastardkb/charybdis/3x5/info.json
+++ b/keyboards/bastardkb/charybdis/3x5/info.json
@@ -1,12 +1,9 @@
{
- "keyboard_name": "Charybdis Nano",
+ "url": "https://bastardkb.com/charybdis-nano",
"manufacturer": "Bastard Keyboards",
- "url": "https://www.bastardkb.com",
- "maintainer": "Quentin Lebastard",
"usb": {
"vid": "0xA8F8",
"pid": "0x1832",
- "device_version": "0.0.1"
},
"layouts": {
"LAYOUT_charybdis_3x5": {
diff --git a/keyboards/bastardkb/charybdis/3x5/keymaps/bstiq/README.md b/keyboards/bastardkb/charybdis/3x5/keymaps/bstiq/README.md
new file mode 100644
index 0000000000..5d9f7fcd5f
--- /dev/null
+++ b/keyboards/bastardkb/charybdis/3x5/keymaps/bstiq/README.md
@@ -0,0 +1,3 @@
+# Charybdis (3x5) @bstiq keymap
+
+Inspired from Miryoku, using home-rows.
diff --git a/keyboards/bastardkb/charybdis/3x5/keymaps/bstiq/config.h b/keyboards/bastardkb/charybdis/3x5/keymaps/bstiq/config.h
new file mode 100644
index 0000000000..699a700063
--- /dev/null
+++ b/keyboards/bastardkb/charybdis/3x5/keymaps/bstiq/config.h
@@ -0,0 +1,166 @@
+/**
+ * Copyright 2021 Quentin LEBASTARD <qlebastard@gmail.com>
+ * Copyright 2021 Charly Delay <charly@codesink.dev> (@0xcharly)
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+#ifdef VIA_ENABLE
+/* Via configuration. */
+# define DYNAMIC_KEYMAP_LAYER_COUNT 8
+#endif // VIA_ENABLE
+
+#ifndef __arm__
+/* Disable unused features. */
+# define NO_ACTION_ONESHOT
+#endif // __arm__
+
+/**
+ * Configure the global tapping term (default: 200ms).
+ * If you have a lot of accidental mod activations, crank up the tapping term.
+ *
+ * See docs.qmk.fm/using-qmk/software-features/tap_hold#tapping-term
+ */
+#ifndef TAPPING_TERM
+# define TAPPING_TERM 160
+#endif // TAPPING_TERM
+
+/**
+ * Enable rapid switch from tap to hold. Disable auto-repeat when pressing key
+ * twice, except for one-shot keys.
+ *
+ * See docs.qmk.fm/using-qmk/software-features/tap_hold#tapping-force-hold
+ */
+#define TAPPING_FORCE_HOLD
+
+/*
+ * Tap-or-Hold decision modes.
+ *
+ * Note that the following flags behave differently when combined (ie. when 2 or
+ * more are enabled).
+ *
+ * See bit.ly/tap-or-hold for a visual explanation of the following tap-or-hold
+ * decision modes.
+ */
+
+/**
+ * Faster tap-hold trigger.
+ *
+ * Without `PERMISSIVE_HOLD`, within `TAPPING_TERM`:
+ * Mod(a)🠗 e🠗 e🠕 Mod(a)🠕 ➞ ae
+ * With `PERMISSIVE_HOLD`, within `TAPPING_TERM`:
+ * Mod(a)🠗 e🠗 e🠕 Mod(a)🠕 ➞ Mod+e
+ *
+ * See docs.qmk.fm/using-qmk/software-features/tap_hold#permissive-hold
+ */
+#define PERMISSIVE_HOLD
+
+/**
+ * Prevent normal rollover on alphas from accidentally triggering mods.
+ *
+ * Ignores key presses that interrupt a mod-tap. Must-have for Home Row mod.
+ *
+ * Without `IGNORE_MOD_TAP_INTERRUPT`, within `TAPPING_TERM`:
+ * Mod(a)🠗 e🠗 Mod(a)🠕 e🠕 ➞ Mod+e
+ * With `IGNORE_MOD_TAP_INTERRUPT`, within `TAPPING_TERM`:
+ * Mod(a)🠗 e🠗 Mod(a)🠕 e🠕 ➞ ae
+ *
+ * See docs.qmk.fm/using-qmk/software-features/tap_hold#ignore-mod-tap-interrupt
+ */
+#define IGNORE_MOD_TAP_INTERRUPT
+
+/** Charybdis-specific features. */
+
+#ifdef POINTING_DEVICE_ENABLE
+// Automatically enable the pointer layer when moving the trackball. See also:
+// - `CHARYBDIS_AUTO_POINTER_LAYER_TRIGGER_TIMEOUT_MS`
+// - `CHARYBDIS_AUTO_POINTER_LAYER_TRIGGER_THRESHOLD`
+// #define CHARYBDIS_AUTO_POINTER_LAYER_TRIGGER_ENABLE
+
+// Flip horizontal direction for drag-scroll.
+# define CHARYBDIS_DRAGSCROLL_REVERSE_X
+// #define CHARYBDIS_DRAGSCROLL_REVERSE_Y
+#endif // POINTING_DEVICE_ENABLE
+
+/** RGB Matrix. */
+
+#ifdef RGB_MATRIX_ENABLE
+# ifdef __arm__
+// Enable all animations on ARM boards since they have plenty of memory
+// available for it.
+# define ENABLE_RGB_MATRIX_ALPHAS_MODS
+# define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+# define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
+# define ENABLE_RGB_MATRIX_BREATHING
+# define ENABLE_RGB_MATRIX_BAND_SAT
+# define ENABLE_RGB_MATRIX_BAND_VAL
+# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
+# define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+# define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
+# define ENABLE_RGB_MATRIX_CYCLE_ALL
+# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+# define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
+# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
+# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
+# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
+# define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
+# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
+# define ENABLE_RGB_MATRIX_DUAL_BEACON
+# define ENABLE_RGB_MATRIX_RAINBOW_BEACON
+# define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
+# define ENABLE_RGB_MATRIX_RAINDROPS
+# define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+# define ENABLE_RGB_MATRIX_HUE_BREATHING
+# define ENABLE_RGB_MATRIX_HUE_PENDULUM
+# define ENABLE_RGB_MATRIX_HUE_WAVE
+# define ENABLE_RGB_MATRIX_TYPING_HEATMAP
+# define ENABLE_RGB_MATRIX_DIGITAL_RAIN
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+# define ENABLE_RGB_MATRIX_SPLASH
+# define ENABLE_RGB_MATRIX_MULTISPLASH
+# define ENABLE_RGB_MATRIX_SOLID_SPLASH
+# define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
+# else
+// Disable control of RGB matrix by keycodes (must use firmware implementation
+// to control the feature).
+# define RGB_MATRIX_DISABLE_KEYCODES
+# endif
+
+// Limit maximum brightness to keep power consumption reasonable, and avoid
+// disconnects.
+# undef RGB_MATRIX_MAXIMUM_BRIGHTNESS
+# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 64
+
+// Rainbow swirl as startup mode.
+# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+# define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_CYCLE_LEFT_RIGHT
+
+// Slow swirl at startup.
+# define RGB_MATRIX_STARTUP_SPD 32
+
+// Startup values.
+# define RGB_MATRIX_STARTUP_HUE 0
+# define RGB_MATRIX_STARTUP_SAT 255
+# define RGB_MATRIX_STARTUP_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS
+# define RGB_MATRIX_STARTUP_HSV RGB_MATRIX_STARTUP_HUE, RGB_MATRIX_STARTUP_SAT, RGB_MATRIX_STARTUP_VAL
+#endif // RGB_MATRIX_ENABLE
diff --git a/keyboards/bastardkb/charybdis/3x5/keymaps/bstiq/keymap.c b/keyboards/bastardkb/charybdis/3x5/keymaps/bstiq/keymap.c
new file mode 100644
index 0000000000..ca67dd690c
--- /dev/null
+++ b/keyboards/bastardkb/charybdis/3x5/keymaps/bstiq/keymap.c
@@ -0,0 +1,224 @@
+/**
+ * Copyright 2021 Quentin LEBASTARD <qlebastard@gmail.com>
+ * Copyright 2021 Charly Delay <charly@codesink.dev> (@0xcharly)
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+enum charybdis_keymap_bstiq_layers {
+ LAYER_BASE = 0,
+ LAYER_MBO,
+ LAYER_MEDIA,
+ LAYER_NAV,
+ LAYER_MOUSE,
+ LAYER_SYM,
+ LAYER_NUM,
+ LAYER_FUN,
+};
+
+// Automatically enable sniping when the mouse layer is on.
+#define CHARYBDIS_AUTO_SNIPING_ON_LAYER LAYER_MOUSE
+
+#define BSP_NAV LT(LAYER_NAV, KC_BSPC)
+#define ENT_MBO LT(LAYER_MBO, KC_ENT)
+#define TAB_MED LT(LAYER_MEDIA, KC_TAB)
+#define ESC_SYM LT(LAYER_SYM, KC_ESC)
+#define SPC_NUM LT(LAYER_NUM, KC_SPC)
+#define MOUSE(KC) LT(LAYER_MOUSE, KC)
+
+#define USR_RDO KC_AGAIN
+#define USR_PST S(KC_INS)
+#define USR_CPY C(KC_INS)
+#define USR_CUT S(KC_DEL)
+#define USR_UND KC_UNDO
+
+#define MS_L KC_MS_LEFT
+#define MS_R KC_MS_RIGHT
+#define MS_D KC_MS_DOWN
+#define MS_U KC_MS_UP
+
+#define WH_L KC_MS_WH_LEFT
+#define WH_R KC_MS_WH_RIGHT
+#define WH_D KC_MS_WH_DOWN
+#define WH_U KC_MS_WH_UP
+
+// clang-format off
+/** Convenience macro. */
+#define _KC_LAYOUT_wrapper( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, \
+ ...) \
+ KC_##k00, KC_##k01, KC_##k02, KC_##k03, KC_##k04, KC_##k05, KC_##k06, KC_##k07, KC_##k08, KC_##k09, \
+ KC_##k10, KC_##k11, KC_##k12, KC_##k13, KC_##k14, KC_##k15, KC_##k16, KC_##k17, KC_##k18, KC_##k19, \
+ KC_##k20, KC_##k21, KC_##k22, KC_##k23, KC_##k24, KC_##k25, KC_##k26, KC_##k27, KC_##k28, KC_##k29, \
+ __VA_ARGS__
+#define KC_LAYOUT_wrapper(...) _KC_LAYOUT_wrapper(__VA_ARGS__)
+
+/** Base layer with BÉPO layout. */
+#define LAYOUT_LAYER_BASE_BEPO KC_LAYOUT_wrapper( \
+ B, Z, P, O, QUOT, DOT, V, D, L, J, \
+ A, U, I, E, COMM, C, T, S, R, N, \
+ W, Y, X, SLSH, K, M, Q, G, H, F, \
+ BSP_NAV, ENT_MBO, TAB_MED, ESC_SYM, SPC_NUM)
+
+/** Convenience key shorthands. */
+#define U_NA KC_NO // Present but not available for use.
+#define U_NU KC_NO // Available but not used.
+
+/** Convenience row shorthands. */
+#define __________________RESET_L__________________ QK_BOOT, U_NA, U_NA, U_NA, U_NA
+#define __________________RESET_R__________________ U_NA, U_NA, U_NA, U_NA, QK_BOOT
+#define ______________HOME_ROW_GASC_L______________ KC_LGUI, KC_LALT, KC_LSFT, KC_LCTL, U_NA
+#define ______________HOME_ROW_ALGR_L______________ U_NA, KC_ALGR, U_NA, U_NA, U_NA
+#define ______________HOME_ROW_GASC_R______________ U_NA, KC_LCTL, KC_LSFT, KC_LALT, KC_LGUI
+#define ______________HOME_ROW_ALGR_R______________ U_NA, U_NA, U_NA, KC_ALGR, U_NA
+
+/** Layers. */
+
+// Buttons.
+#define LAYOUT_LAYER_MBO \
+ __________________RESET_L__________________, USR_RDO, USR_PST, USR_CPY, USR_CUT, USR_UND, \
+ ______________HOME_ROW_GASC_L______________, KC_CAPS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, \
+ KC_BTN3, KC_ALGR, KC_BTN2, KC_BTN1, U_NA, KC_INS, KC_HOME, KC_PGDN, KC_PGUP, KC_END, \
+ U_NA, U_NA, U_NA, KC_ENT, KC_DEL
+
+// Media.
+#define LAYOUT_LAYER_MEDIA \
+ __________________RESET_L__________________, USR_RDO, USR_PST, USR_CPY, USR_CUT, USR_UND, \
+ ______________HOME_ROW_GASC_L______________, U_NU, MS_L, MS_D, MS_U, MS_R, \
+ ______________HOME_ROW_ALGR_L______________, U_NU, WH_L, WH_D, WH_U, WH_R, \
+ U_NA, U_NA, U_NA, KC_BTN1, KC_BTN3
+
+// Navigation.
+#define LAYOUT_LAYER_NAV \
+ __________________RESET_L__________________, RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, \
+ ______________HOME_ROW_GASC_L______________, U_NU, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT, \
+ ______________HOME_ROW_ALGR_L______________, U_NU, U_NU, U_NU, U_NU, U_NU, \
+ U_NA, U_NA, U_NA, KC_MSTP, KC_MPLY
+
+// Mouse.
+#define LAYOUT_LAYER_MOUSE \
+ S_D_MOD, USR_PST, USR_CPY, USR_CUT, USR_UND, USR_RDO, USR_PST, USR_CPY, USR_CUT, USR_UND, \
+ DPI_MOD, DRGSCRL, KC_LSFT, KC_LCTL, _______, U_NU, MS_L, MS_D, MS_U, MS_R, \
+ USR_RDO, USR_PST, USR_CPY, USR_CUT, USR_UND, U_NU, WH_L, WH_D, WH_U, WH_R, \
+ KC_BTN2, KC_BTN1, KC_BTN3, KC_BTN1, KC_BTN3
+
+// Symbols.
+#define LAYOUT_LAYER_SYM \
+ KC_LCBR, KC_AMPR, KC_ASTR, KC_LPRN, KC_RCBR, __________________RESET_R__________________, \
+ KC_COLN, KC_DLR, KC_PERC, KC_CIRC, KC_PLUS, ______________HOME_ROW_GASC_R______________, \
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_PIPE, ______________HOME_ROW_ALGR_R______________, \
+ KC_LPRN, KC_RPRN, KC_UNDS, U_NA, U_NA
+
+// Numerals.
+#define LAYOUT_LAYER_NUM \
+ KC_LBRC, KC_7, KC_8, KC_9, KC_RBRC, __________________RESET_R__________________, \
+ KC_SCLN, KC_4, KC_5, KC_6, KC_EQL, ______________HOME_ROW_GASC_R______________, \
+ KC_GRV, KC_1, KC_2, KC_3, KC_BSLS, ______________HOME_ROW_ALGR_R______________, \
+ KC_DOT, KC_0, KC_MINS, U_NA, U_NA
+
+// Function keys.
+#define LAYOUT_LAYER_FUN \
+ KC_F12, KC_F7, KC_F8, KC_F9, KC_PSCR, __________________RESET_R__________________, \
+ KC_F11, KC_F4, KC_F5, KC_F6, KC_SLCK, ______________HOME_ROW_GASC_R______________, \
+ KC_F10, KC_F1, KC_F2, KC_F3, KC_PAUS, ______________HOME_ROW_ALGR_R______________,\
+ KC_APP, KC_SPC, KC_TAB, U_NA, U_NA
+
+/**
+ * Add Home Row mod to a layout.
+ *
+ * Expects a 10-key per row layout. Adds support for GASC (Gui, Alt, Shift, Ctl)
+ * home row. The layout passed in parameter must contain at least 20 keycodes.
+ *
+ * This is meant to be used with `LAYOUT_LAYER_BASE_BEPO` defined above, eg.:
+ *
+ * HOME_ROW_MOD_GASC(LAYOUT_LAYER_BASE_BEPO)
+ */
+#define _HOME_ROW_MOD_GASC( \
+ L00, L01, L02, L03, L04, R05, R06, R07, R08, R09, \
+ L10, L11, L12, L13, L14, R15, R16, R17, R18, R19, \
+ ...) \
+ L00, L01, L02, L03, L04, \
+ R05, R06, R07, R08, R09, \
+ LGUI_T(L10), LALT_T(L11), LSFT_T(L12), LCTL_T(L13), L14, \
+ R15, RCTL_T(R16), RSFT_T(R17), LALT_T(R18), RGUI_T(R19), \
+ __VA_ARGS__
+#define HOME_ROW_MOD_GASC(...) _HOME_ROW_MOD_GASC(__VA_ARGS__)
+
+/**
+ * Add mouse layer keys to a layout.
+ *
+ * Expects a 10-key per row layout. The layout passed in parameter must contain
+ * at least 30 keycodes.
+ *
+ * This is meant to be used with `LAYOUT_LAYER_BASE_BEPO` defined above, eg.:
+ *
+ * MOUSE_MOD(LAYOUT_LAYER_BASE_BEPO)
+ */
+#define _MOUSE_MOD( \
+ L00, L01, L02, L03, L04, R05, R06, R07, R08, R09, \
+ L10, L11, L12, L13, L14, R15, R16, R17, R18, R19, \
+ L20, L21, L22, L23, L24, R25, R26, R27, R28, R29, \
+ ...) \
+ L00, L01, L02, L03, L04, \
+ R05, R06, R07, R08, R09, \
+ L10, L11, L12, L13, L14, \
+ R15, R16, R17, R18, R19, \
+ MOUSE(L20), L21, L22, L23, L24, \
+ R25, R26, R27, R28, MOUSE(R29), \
+ __VA_ARGS__
+#define MOUSE_MOD(...) _MOUSE_MOD(__VA_ARGS__)
+
+#define LAYOUT_wrapper(...) LAYOUT_charybdis_3x5(__VA_ARGS__)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [LAYER_BASE] = LAYOUT_wrapper(
+ MOUSE_MOD(HOME_ROW_MOD_GASC(LAYOUT_LAYER_BASE_BEPO))
+ ),
+ [LAYER_MBO] = LAYOUT_wrapper(LAYOUT_LAYER_MBO),
+ [LAYER_MEDIA] = LAYOUT_wrapper(LAYOUT_LAYER_MEDIA),
+ [LAYER_NAV] = LAYOUT_wrapper(L