diff --git a/.gitignore b/.gitignore
index 800a4e2c095..3e235668e40 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,3 +14,7 @@
compile_commands.json
.clangd/
.cache/
+
+# GCC
+avr_toolchain/
+avr_toolchain_build/
diff --git a/README.md b/README.md
index db51aa5ba4f..f6b50607277 100644
--- a/README.md
+++ b/README.md
@@ -1,14 +1,27 @@
# My QMK keyboard layout
-Based on Miryoku Layout
+This is a QWERTY Miryoku-inspired layout optimized for ergonomics.
+
+It's a Split 3x6_3 with the outer columns dedicated to Window management shortcuts.
+
+It features:
+
+- Predictive Tap Hold: Faster tap/hold decisions
+- Home row mods
+- Layer-tap keys: Hold thumb keys to access layers, tap for the base key
+- Raw HID: Layer state communication to a companion app
+
+Remember:
- Don’t connect or disconnect the TRRS cable when the keyboard is powered. Always disconnect the USB cable first.
-- Flash the firmware on both Raspberry Pi Picos.
-- Enter the bootloader mode by holding down the BOOTSEL button while reconnecting the board into USB port.
+- Flash the firmware on both sides.
-https://github.com/beekeeb/piantor
+
-https://github.com/qmk/qmk_firmware/tree/master/keyboards/beekeeb/piantor
+## Keyboards
+
+- [ Piantor ](./keyboards/beekeeb/piantor/readme.md)
+- [ Corne ](./keyboards/crkbd/rev1/readme.md)
## Keyboard Layers App companion
@@ -16,49 +29,80 @@ Display the selected keyboard layer layout on screen to assist your to memorize
It allows you to display the layout in a remote screen, so you can use a tablet or similar to save space on your main screen.
-Details here: https://github.com/maatthc/miryoku_qmk_app
+Details here: https://github.com/maatthc/keyboard_layers_app_companion
## Compile and Flash
### Install and setup
- Install QMK:
-`python3 -m pip install qmk`
+```
+python3 -m pip install qmk
+```
- Initialize the sub-modules:
-`git submodule update --init --recursive`
+```
+git submodule update --init --recursive
+```
- Set this folder as an userspace:
-`qmk config user.overlay_dir="$(realpath qmk_userspace)"`
+```
+qmk config user.overlay_dir="$(realpath qmk_userspace)"
+```
- Set up QMK:
-`cd ..; qmk setup`
+```
+cd ..; qmk setup
+```
+
+#### Piantor
+```
+export KEYBOARD="beekeeb/piantor"
+```
+#### Corne
-### Install old GCC 8.3.0
-Reduces size considerably (~1.5k):
+```
+export KEYBOARD="crkbd/rev1"
+```
-`./install_avr_8.3.0.sh`
-export PATH=${HOME}/avr_toolchain/bin:$PATH
+##### Compile with GCC v8.3.0
+Generates a firmware considerably smaller (~1.5k):
+
+```
+./install_avr_8.3.0.sh
+export PATH=${PWD}/avr_toolchain/bin:$PATH
+```
### Compile
-`qmk compile -kb beekeeb/piantor -km maat`
+```
+qmk compile -kb $KEYBOARD -km maat
+```
### Flash
-`qmk flash -kb beekeeb/piantor -km maat`
+```
+qmk flash -kb $KEYBOARD -km maat
+```
-### Generates the clang compile_commands.json
-`qmk compile --compiledb -kb crkbd/rev1 -km maat`
+### Generates the Clang compile_commands.json
+```
+qmk compile --compiledb -kb $KEYBOARD -km maat
+```
### Check debug logs
-`qmk console`
+```
+qmk console
+```
### info
-`qmk info -kb beekeeb/piantor -km maat`
+```
+qmk info -kb $KEYBOARD -km maat
+```
## Configuration
-- users/maat/
-- keyboards/beekeeb/piantor/keymaps/maat/
+- ./users/maat/
+- ./keyboards/beekeeb/piantor/keymaps/maat/
+- ./keyboards/crkbd/rev1/keymaps/maat/
### Typing Test
@@ -67,21 +111,23 @@ https://config.qmk.fm/#/test
### Symbols that correspond to keycodes available in QMK.
https://docs.qmk.fm/keycodes
-## Generated Layout/Layers images
+## All Layers
+
+Definitions (.json) files at: ./data/layers/
-Json files and images at: ./data/layers/
+Images generated with [KLE NG](https://editor.keyboard-tools.xyz/)
-- 
+
-- 
+
-- 
+
-- 
+
-- 
+
-- 
+
-- 
+
diff --git a/install_avr_8.3.0.sh b/install_avr_8.3.0.sh
new file mode 100755
index 00000000000..02baeef3af5
--- /dev/null
+++ b/install_avr_8.3.0.sh
@@ -0,0 +1,327 @@
+#!/bin/bash
+# Install AVR GCC 8.3.0 toolchain
+
+set -euo pipefail
+
+SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
+PREFIX="${SCRIPT_DIR}/avr_toolchain"
+BUILD_DIR="${SCRIPT_DIR}/avr_toolchain_build"
+BINUTILS_VERSION="2.32"
+GCC_VERSION="8.3.0"
+AVR_LIBC_VERSION="2.0.0"
+
+BINUTILS_URL="https://ftp.gnu.org/gnu/binutils/binutils-${BINUTILS_VERSION}.tar.bz2"
+GCC_URL="https://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-${GCC_VERSION}/gcc-${GCC_VERSION}.tar.gz"
+AVR_LIBC_URL="https://download.savannah.gnu.org/releases/avr-libc/avr-libc-${AVR_LIBC_VERSION}.tar.bz2"
+
+RED='\033[0;31m'
+GREEN='\033[0;32m'
+YELLOW='\033[1;33m'
+NC='\033[0m'
+
+log_info() {
+ echo -e "${GREEN}[INFO]${NC} $*"
+}
+
+log_warn() {
+ echo -e "${YELLOW}[WARN]${NC} $*"
+}
+
+log_error() {
+ echo -e "${RED}[ERROR]${NC} $*" >&2
+}
+
+command_exists() {
+ command -v "$1" >/dev/null 2>&1
+}
+
+check_dependencies() {
+ log_info "Checking dependencies..."
+ local missing_deps=()
+
+ for dep in wget tar make gcc g++ bzip2; do
+ if ! command_exists "$dep"; then
+ missing_deps+=("$dep")
+ fi
+ done
+
+ if [ ${#missing_deps[@]} -ne 0 ]; then
+ log_error "Missing required dependencies: ${missing_deps[*]}"
+ log_error "Please install them using your package manager."
+ exit 1
+ fi
+
+ log_info "All dependencies found."
+}
+
+check_installed() {
+ if [ -f "${PREFIX}/bin/avr-gcc" ] && command_exists "${PREFIX}/bin/avr-gcc"; then
+ local version
+ version=$("${PREFIX}/bin/avr-gcc" -dumpversion 2>/dev/null || echo "")
+ if [ "$version" = "$GCC_VERSION" ]; then
+ log_info "AVR GCC ${GCC_VERSION} is already installed at ${PREFIX}"
+ log_info "To reinstall, remove ${PREFIX} and ${BUILD_DIR} directories"
+ exit 0
+ fi
+ fi
+}
+
+cleanup() {
+ local exit_code=$?
+ if [ $exit_code -ne 0 ]; then
+ log_error "Script failed. Build artifacts remain in ${BUILD_DIR}"
+ log_warn "To retry, remove ${BUILD_DIR} and run again"
+ log_warn "The downloaded files will be preserved"
+ else
+ if [ -d "$BUILD_DIR" ]; then
+ log_info "Cleaning up build directory ${BUILD_DIR}..."
+ rm -rf "$BUILD_DIR"
+ log_info "Build directory cleaned up successfully."
+ fi
+ fi
+}
+trap cleanup EXIT
+
+download_and_extract() {
+ local url=$1
+ local output_file=$2
+ local extract_cmd=$3
+
+ log_info "Downloading $(basename "$url")..."
+ if [ -f "$output_file" ]; then
+ log_warn "File already exists: $output_file (skipping download)"
+ else
+ wget --progress=bar:force:noscroll -O "$output_file" "$url" || {
+ log_error "Failed to download $url"
+ exit 1
+ }
+ fi
+
+ log_info "Extracting $(basename "$output_file")..."
+ $extract_cmd "$output_file" || {
+ log_error "Failed to extract $output_file"
+ exit 1
+ }
+}
+
+build_binutils() {
+ log_info "Building binutils ${BINUTILS_VERSION}..."
+ cd "${BUILD_DIR}/binutils-${BINUTILS_VERSION}"
+
+ mkdir -p obj-avr
+ cd obj-avr
+
+ log_info "Configuring binutils..."
+ ../configure --prefix="$PREFIX" --target=avr --disable-nls || {
+ log_error "binutils configure failed"
+ exit 1
+ }
+
+ log_info "Building binutils (this may take a while)..."
+ make -j"$(nproc)" || {
+ log_error "binutils build failed"
+ exit 1
+ }
+
+ log_info "Installing binutils..."
+ make install || {
+ log_error "binutils install failed"
+ exit 1
+ }
+
+ cd "${BUILD_DIR}"
+}
+
+download_gcc_prerequisites() {
+ log_info "Downloading GCC prerequisites..."
+ cd "${BUILD_DIR}/gcc-${GCC_VERSION}"
+
+ # GCC 8.3.0 prerequisites (using HTTPS instead of FTP)
+ local gmp_version="6.1.0"
+ local mpfr_version="3.1.4"
+ local mpc_version="1.0.3"
+ local isl_version="0.18"
+
+ # URLs using HTTPS mirrors (avoiding FTP)
+ local gmp_url="https://gmplib.org/download/gmp/gmp-${gmp_version}.tar.bz2"
+ local mpfr_url="https://www.mpfr.org/mpfr-${mpfr_version}/mpfr-${mpfr_version}.tar.bz2"
+ local mpc_url="https://ftp.gnu.org/gnu/mpc/mpc-${mpc_version}.tar.gz"
+ # ISL from GNU mirror (infrastructure directory is available via HTTPS)
+ local isl_url="https://gcc.gnu.org/pub/gcc/infrastructure/isl-${isl_version}.tar.bz2"
+
+ # Alternative URLs if primary fails
+ local gmp_alt="https://ftp.gnu.org/gnu/gmp/gmp-${gmp_version}.tar.bz2"
+ local mpfr_alt="https://ftp.gnu.org/gnu/mpfr/mpfr-${mpfr_version}.tar.bz2"
+ local isl_alt="https://libisl.sourceforge.io/isl-${isl_version}.tar.bz2"
+
+ download_prereq() {
+ local url=$1
+ local alt_url=$2
+ local filename=$3
+ local linkname=$4
+
+ if [ -e "$linkname" ]; then
+ log_warn "Prerequisite $linkname already exists, skipping..."
+ return 0
+ fi
+
+ log_info "Downloading $filename..."
+ if ! wget --progress=bar:force:noscroll -O "$filename" "$url" 2>/dev/null; then
+ if [ -n "$alt_url" ]; then
+ log_warn "Primary URL failed, trying alternative..."
+ if ! wget --progress=bar:force:noscroll -O "$filename" "$alt_url" 2>/dev/null; then
+ log_error "Failed to download $filename"
+ return 1
+ fi
+ else
+ log_error "Failed to download $filename"
+ return 1
+ fi
+ fi
+
+ log_info "Extracting $filename..."
+ local extract_cmd
+ case "$filename" in
+ *.tar.bz2) extract_cmd="tar xjf" ;;
+ *.tar.gz) extract_cmd="tar xzf" ;;
+ *) log_error "Unknown archive format: $filename"; return 1 ;;
+ esac
+
+ if ! $extract_cmd "$filename"; then
+ log_error "Failed to extract $filename"
+ return 1
+ fi
+
+ local package="${filename%.tar*}"
+ log_info "Creating symlink $linkname -> $package"
+ ln -sf "$package" "$linkname" || {
+ log_error "Failed to create symlink $linkname"
+ return 1
+ }
+ }
+
+ # Download and link prerequisites
+ download_prereq "$gmp_url" "$gmp_alt" "gmp-${gmp_version}.tar.bz2" "gmp" || exit 1
+ download_prereq "$mpfr_url" "$mpfr_alt" "mpfr-${mpfr_version}.tar.bz2" "mpfr" || exit 1
+ download_prereq "$mpc_url" "" "mpc-${mpc_version}.tar.gz" "mpc" || exit 1
+ download_prereq "$isl_url" "$isl_alt" "isl-${isl_version}.tar.bz2" "isl" || exit 1
+
+ log_info "All GCC prerequisites downloaded successfully."
+}
+
+build_gcc() {
+ log_info "Building GCC ${GCC_VERSION}..."
+ cd "${BUILD_DIR}/gcc-${GCC_VERSION}"
+
+ download_gcc_prerequisites
+
+ mkdir -p obj-avr
+ cd obj-avr
+
+ log_info "Configuring GCC..."
+ ../configure \
+ --prefix="$PREFIX" \
+ --target=avr \
+ --enable-languages=c,c++,lto \
+ --disable-nls \
+ --disable-libssp \
+ --with-dwarf2 || {
+ log_error "GCC configure failed"
+ exit 1
+ }
+
+ log_info "Building GCC (this will take a very long time)..."
+ make -j"$(nproc)" || {
+ log_error "GCC build failed"
+ exit 1
+ }
+
+ log_info "Installing GCC..."
+ make install || {
+ log_error "GCC install failed"
+ exit 1
+ }
+
+ cd "${BUILD_DIR}"
+}
+
+build_avr_libc() {
+ log_info "Building avr-libc ${AVR_LIBC_VERSION}..."
+ cd "${BUILD_DIR}/avr-libc-${AVR_LIBC_VERSION}"
+
+ mkdir -p obj-avr
+ cd obj-avr
+
+ log_info "Configuring avr-libc..."
+ ../configure \
+ --prefix="$PREFIX" \
+ --build="$(../config.guess)" \
+ --host=avr \
+ --enable-debug-info=dwarf-2 || {
+ log_error "avr-libc configure failed"
+ exit 1
+ }
+
+ log_info "Building avr-libc..."
+ make -j"$(nproc)" || {
+ log_error "avr-libc build failed"
+ exit 1
+ }
+
+ log_info "Installing avr-libc..."
+ make install || {
+ log_error "avr-libc install failed"
+ exit 1
+ }
+
+ cd "${BUILD_DIR}"
+}
+
+verify_installation() {
+ log_info "Verifying installation..."
+ export PATH="${PREFIX}/bin:${PATH}"
+
+ if ! command_exists "${PREFIX}/bin/avr-gcc"; then
+ log_error "avr-gcc not found in ${PREFIX}/bin"
+ exit 1
+ fi
+
+ local version
+ version=$("${PREFIX}/bin/avr-gcc" -dumpversion 2>/dev/null || echo "")
+ if [ "$version" != "$GCC_VERSION" ]; then
+ log_error "Version mismatch: expected ${GCC_VERSION}, got ${version}"
+ exit 1
+ fi
+
+ log_info "AVR GCC version: $version"
+ "${PREFIX}/bin/avr-gcc" -v
+
+ log_info ""
+ log_info "${GREEN}Installation completed successfully!${NC}"
+ log_info "Toolchain installed to: ${PREFIX}"
+ log_info "Add to your PATH: export PATH=\"${PREFIX}/bin:\$PATH\""
+}
+
+main() {
+ log_info "AVR GCC ${GCC_VERSION} Toolchain Installer"
+ log_info "=========================================="
+
+ check_dependencies
+ check_installed
+
+ mkdir -p "$PREFIX"
+ mkdir -p "$BUILD_DIR"
+ cd "$BUILD_DIR"
+
+ download_and_extract "$BINUTILS_URL" "binutils-${BINUTILS_VERSION}.tar.bz2" "tar xjf"
+ download_and_extract "$GCC_URL" "gcc-${GCC_VERSION}.tar.gz" "tar xzf"
+ download_and_extract "$AVR_LIBC_URL" "avr-libc-${AVR_LIBC_VERSION}.tar.bz2" "tar xjf"
+
+ build_binutils
+ build_gcc
+ build_avr_libc
+
+ verify_installation
+}
+
+main "$@"
diff --git a/keyboards/crkbd/crkbd.c b/keyboards/crkbd/crkbd.c
new file mode 100644
index 00000000000..857f8c02aa8
--- /dev/null
+++ b/keyboards/crkbd/crkbd.c
@@ -0,0 +1,158 @@
+/*
+Copyright 2019 @foostan
+Copyright 2020 Drashna Jaelre <@drashna>
+
+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"
+
+#ifdef SWAP_HANDS_ENABLE
+__attribute__((weak)) const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
+ // Left
+ {{0, 4}, {1, 4}, {2, 4}, {3, 4}, {4, 4}, {5, 4}},
+ {{0, 5}, {1, 5}, {2, 5}, {3, 5}, {4, 5}, {5, 5}},
+ {{0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6}, {5, 6}},
+ {{0, 7}, {1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7}},
+ // Right
+ {{0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}, {5, 0}},
+ {{0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1}},
+ {{0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}, {5, 2}},
+ {{0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}, {5, 3}}};
+#endif
+
+#ifdef OLED_ENABLE
+
+oled_rotation_t oled_init_kb(oled_rotation_t rotation) {
+ if (!is_keyboard_master()) {
+ return OLED_ROTATION_180; // flips the display 180 degrees if offhand
+ }
+ return rotation;
+}
+
+static void oled_render_layer_state(void) {
+ oled_write_P(PSTR("Layer: "), false);
+ switch (get_highest_layer(layer_state)) {
+ case 0:
+ oled_write_ln_P(PSTR("Base"), false);
+ break;
+ case 1:
+ oled_write_ln_P(PSTR("Navigation"), false);
+ break;
+ case 2:
+ oled_write_ln_P(PSTR("Mouse"), false);
+ break;
+ case 3:
+ oled_write_ln_P(PSTR("Media"), false);
+ break;
+ case 4:
+ oled_write_ln_P(PSTR("Number"), false);
+ break;
+ case 5:
+ oled_write_ln_P(PSTR("Symbol"), false);
+ break;
+ case 6:
+ oled_write_ln_P(PSTR("Functions"), false);
+ break;
+ default:
+ oled_write_ln_P(PSTR("Undef"), false);
+ break;
+ }
+}
+
+char key_name = ' ';
+uint16_t last_keycode;
+uint8_t last_row;
+uint8_t last_col;
+
+static const char PROGMEM code_to_name[60] = {' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'R', 'E', 'B', 'T', '_', '-', '=', '[', ']', '\\', '#', ';', '\'', '`', ',', '.', '/', ' ', ' ', ' '};
+
+static void set_keylog(uint16_t keycode, keyrecord_t *record) {
+ // save the row and column (useful even if we can't find a keycode to show)
+ last_row = record->event.key.row;
+ last_col = record->event.key.col;
+
+ key_name = ' ';
+ last_keycode = keycode;
+ if (IS_QK_MOD_TAP(keycode)) {
+ if (record->tap.count) {
+ keycode = QK_MOD_TAP_GET_TAP_KEYCODE(keycode);
+ } else {
+ keycode = 0xE0 + biton(QK_MOD_TAP_GET_MODS(keycode) & 0xF) + biton(QK_MOD_TAP_GET_MODS(keycode) & 0x10);
+ }
+ } else if (IS_QK_LAYER_TAP(keycode) && record->tap.count) {
+ keycode = QK_LAYER_TAP_GET_TAP_KEYCODE(keycode);
+ } else if (IS_QK_MODS(keycode)) {
+ keycode = QK_MODS_GET_BASIC_KEYCODE(keycode);
+ } else if (IS_QK_ONE_SHOT_MOD(keycode)) {
+ keycode = 0xE0 + biton(QK_ONE_SHOT_MOD_GET_MODS(keycode) & 0xF) + biton(QK_ONE_SHOT_MOD_GET_MODS(keycode) & 0x10);
+ }
+ if (keycode > ARRAY_SIZE(code_to_name)) {
+ return;
+ }
+
+ // update keylog
+ key_name = pgm_read_byte(&code_to_name[keycode]);
+}
+
+static const char *depad_str(const char *depad_str, char depad_char) {
+ while (*depad_str == depad_char)
+ ++depad_str;
+ return depad_str;
+}
+
+static void oled_render_keylog(void) {
+ oled_write_char('0' + last_row, false);
+ oled_write_P(PSTR("x"), false);
+ oled_write_char('0' + last_col, false);
+ oled_write_P(PSTR(", k"), false);
+ const char *last_keycode_str = get_u16_str(last_keycode, ' ');
+ oled_write(depad_str(last_keycode_str, ' '), false);
+ oled_write_P(PSTR(":"), false);
+ oled_write_char(key_name, false);
+ oled_advance_page(true);
+}
+
+__attribute__((weak)) void oled_render_logo(void) {
+ // clang-format off
+ static const char PROGMEM crkbd_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,
+ 0};
+ // clang-format on
+ oled_clear();
+ oled_write_P(crkbd_logo, false);
+}
+
+bool oled_task_kb(void) {
+ if (!oled_task_user()) {
+ return false;
+ }
+ if (is_keyboard_master()) {
+ oled_render_layer_state();
+ oled_render_keylog();
+ } else {
+ oled_render_logo();
+ }
+ return false;
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+ set_keylog(keycode, record);
+ }
+ return process_record_user(keycode, record);
+}
+#endif // OLED_ENABLE
diff --git a/keyboards/crkbd/info.json b/keyboards/crkbd/info.json
new file mode 100644
index 00000000000..31ee98e269e
--- /dev/null
+++ b/keyboards/crkbd/info.json
@@ -0,0 +1,138 @@
+{
+ "manufacturer": "foostan",
+ "url": "https://github.com/foostan/crkbd",
+ "maintainer": "qmk",
+ "usb": {
+ "vid": "0x4653"
+ },
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "nkro": true,
+ "oled": true,
+ "rgblight": false,
+ "rgb_matrix": true
+ },
+ "bootmagic": {
+ "matrix": [0, 1]
+ },
+ "split": {
+ "enabled": true,
+ "bootmagic": {
+ "matrix": [4, 1]
+ }
+ },
+ "layout_aliases": {
+ "LAYOUT": "LAYOUT_split_3x6_3"
+ },
+ "community_layouts": [ "split_3x5_3", "split_3x6_3" ],
+ "layouts": {
+ "LAYOUT_split_3x5_3": {
+ "layout": [
+ {"matrix": [0, 1], "x": 0, "y": 0.3},
+ {"matrix": [0, 2], "x": 1, "y": 0.1},
+ {"matrix": [0, 3], "x": 2, "y": 0},
+ {"matrix": [0, 4], "x": 3, "y": 0.1},
+ {"matrix": [0, 5], "x": 4, "y": 0.2},
+
+ {"matrix": [4, 5], "x": 8, "y": 0.2},
+ {"matrix": [4, 4], "x": 9, "y": 0.1},
+ {"matrix": [4, 3], "x": 10, "y": 0},
+ {"matrix": [4, 2], "x": 11, "y": 0.1},
+ {"matrix": [4, 1], "x": 12, "y": 0.3},
+
+ {"matrix": [1, 1], "x": 0, "y": 1.3},
+ {"matrix": [1, 2], "x": 1, "y": 1.1},
+ {"matrix": [1, 3], "x": 2, "y": 1},
+ {"matrix": [1, 4], "x": 3, "y": 1.1},
+ {"matrix": [1, 5], "x": 4, "y": 1.2},
+
+ {"matrix": [5, 5], "x": 8, "y": 1.2},
+ {"matrix": [5, 4], "x": 9, "y": 1.1},
+ {"matrix": [5, 3], "x": 10, "y": 1},
+ {"matrix": [5, 2], "x": 11, "y": 1.1},
+ {"matrix": [5, 1], "x": 12, "y": 1.3},
+
+ {"matrix": [2, 1], "x": 0, "y": 2.3},
+ {"matrix": [2, 2], "x": 1, "y": 2.1},
+ {"matrix": [2, 3], "x": 2, "y": 2},
+ {"matrix": [2, 4], "x": 3, "y": 2.1},
+ {"matrix": [2, 5], "x": 4, "y": 2.2},
+
+ {"matrix": [6, 5], "x": 8, "y": 2.2},
+ {"matrix": [6, 4], "x": 9, "y": 2.1},
+ {"matrix": [6, 3], "x": 10, "y": 2},
+ {"matrix": [6, 2], "x": 11, "y": 2.1},
+ {"matrix": [6, 1], "x": 12, "y": 2.3},
+
+ {"matrix": [3, 3], "x": 3, "y": 3.7},
+ {"matrix": [3, 4], "x": 4, "y": 3.7},
+ {"matrix": [3, 5], "x": 5, "y": 3.2, "h": 1.5},
+
+ {"matrix": [7, 5], "x": 7, "y": 3.2, "h": 1.5},
+ {"matrix": [7, 4], "x": 8, "y": 3.7},
+ {"matrix": [7, 3], "x": 9, "y": 3.7}
+ ]
+ },
+ "LAYOUT_split_3x6_3": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0.3},
+ {"matrix": [0, 1], "x": 1, "y": 0.3},
+ {"matrix": [0, 2], "x": 2, "y": 0.1},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0.1},
+ {"matrix": [0, 5], "x": 5, "y": 0.2},
+
+ {"matrix": [4, 5], "x": 9, "y": 0.2},
+ {"matrix": [4, 4], "x": 10, "y": 0.1},
+ {"matrix": [4, 3], "x": 11, "y": 0},
+ {"matrix": [4, 2], "x": 12, "y": 0.1},
+ {"matrix": [4, 1], "x": 13, "y": 0.3},
+ {"matrix": [4, 0], "x": 14, "y": 0.3},
+
+ {"matrix": [1, 0], "x": 0, "y": 1.3},
+ {"matrix": [1, 1], "x": 1, "y": 1.3},
+ {"matrix": [1, 2], "x": 2, "y": 1.1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1.1},
+ {"matrix": [1, 5], "x": 5, "y": 1.2},
+
+ {"matrix": [5, 5], "x": 9, "y": 1.2},
+ {"matrix": [5, 4], "x": 10, "y": 1.1},
+ {"matrix": [5, 3], "x": 11, "y": 1},
+ {"matrix": [5, 2], "x": 12, "y": 1.1},
+ {"matrix": [5, 1], "x": 13, "y": 1.3},
+ {"matrix": [5, 0], "x": 14, "y": 1.3},
+
+ {"matrix": [2, 0], "x": 0, "y": 2.3},
+ {"matrix": [2, 1], "x": 1, "y": 2.3},
+ {"matrix": [2, 2], "x": 2, "y": 2.1},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2.1},
+ {"matrix": [2, 5], "x": 5, "y": 2.2},
+
+ {"matrix": [6, 5], "x": 9, "y": 2.2},
+ {"matrix": [6, 4], "x": 10, "y": 2.1},
+ {"matrix": [6, 3], "x": 11, "y": 2},
+ {"matrix": [6, 2], "x": 12, "y": 2.1},
+ {"matrix": [6, 1], "x": 13, "y": 2.3},
+ {"matrix": [6, 0], "x": 14, "y": 2.3},
+
+ {"matrix": [3, 3], "x": 4, "y": 3.7},
+ {"matrix": [3, 4], "x": 5, "y": 3.7},
+ {"matrix": [3, 5], "x": 6, "y": 3.2, "h": 1.5},
+
+ {"matrix": [7, 5], "x": 8, "y": 3.2, "h": 1.5},
+ {"matrix": [7, 4], "x": 9, "y": 3.7},
+ {"matrix": [7, 3], "x": 10, "y": 3.7}
+ ]
+ }
+ },
+ "rgb_matrix": {
+ "driver": "ws2812",
+ "max_brightness": 120
+ },
+ "rgblight": {
+ "max_brightness": 120
+ }
+}
diff --git a/keyboards/crkbd/lib/glcdfont.c b/keyboards/crkbd/lib/glcdfont.c
new file mode 100644
index 00000000000..6de94ebc5a5
--- /dev/null
+++ b/keyboards/crkbd/lib/glcdfont.c
@@ -0,0 +1,232 @@
+// This is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0.
+// See gfxfont.h for newer custom bitmap font info.
+
+#include "progmem.h"
+
+// Standard ASCII 5x7 font
+const unsigned char font[] PROGMEM = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00,
+ 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00,
+ 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00,
+ 0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00,
+ 0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00,
+ 0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00,
+ 0x00, 0x18, 0x3C, 0x18, 0x00, 0x00,
+ 0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00,
+ 0x00, 0x18, 0x24, 0x18, 0x00, 0x00,
+ 0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00,
+ 0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00,
+ 0x26, 0x29, 0x79, 0x29, 0x26, 0x00,
+ 0x40, 0x7F, 0x05, 0x05, 0x07, 0x00,
+ 0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00,
+ 0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00,
+ 0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00,
+ 0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00,
+ 0x14, 0x22, 0x7F, 0x22, 0x14, 0x00,
+ 0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00,
+ 0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00,
+ 0x00, 0x66, 0x89, 0x95, 0x6A, 0x00,
+ 0x60, 0x60, 0x60, 0x60, 0x60, 0x00,
+ 0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00,
+ 0x08, 0x04, 0x7E, 0x04, 0x08, 0x00,
+ 0x10, 0x20, 0x7E, 0x20, 0x10, 0x00,
+ 0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00,
+ 0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00,
+ 0x1E, 0x10, 0x10, 0x10, 0x10, 0x00,
+ 0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00,
+ 0x30, 0x38, 0x3E, 0x38, 0x30, 0x00,
+ 0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
+ 0x00, 0x07, 0x00, 0x07, 0x00, 0x00,
+ 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00,
+ 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00,
+ 0x23, 0x13, 0x08, 0x64, 0x62, 0x00,
+ 0x36, 0x49, 0x56, 0x20, 0x50, 0x00,
+ 0x00, 0x08, 0x07, 0x03, 0x00, 0x00,
+ 0x00, 0x1C, 0x22, 0x41, 0x00, 0x00,
+ 0x00, 0x41, 0x22, 0x1C, 0x00, 0x00,
+ 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00,
+ 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00,
+ 0x00, 0x80, 0x70, 0x30, 0x00, 0x00,
+ 0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
+ 0x00, 0x00, 0x60, 0x60, 0x00, 0x00,
+ 0x20, 0x10, 0x08, 0x04, 0x02, 0x00,
+ 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00,
+ 0x00, 0x42, 0x7F, 0x40, 0x00, 0x00,
+ 0x72, 0x49, 0x49, 0x49, 0x46, 0x00,
+ 0x21, 0x41, 0x49, 0x4D, 0x33, 0x00,
+ 0x18, 0x14, 0x12, 0x7F, 0x10, 0x00,
+ 0x27, 0x45, 0x45, 0x45, 0x39, 0x00,
+ 0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00,
+ 0x41, 0x21, 0x11, 0x09, 0x07, 0x00,
+ 0x36, 0x49, 0x49, 0x49, 0x36, 0x00,
+ 0x46, 0x49, 0x49, 0x29, 0x1E, 0x00,
+ 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
+ 0x00, 0x40, 0x34, 0x00, 0x00, 0x00,
+ 0x00, 0x08, 0x14, 0x22, 0x41, 0x00,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x00,
+ 0x00, 0x41, 0x22, 0x14, 0x08, 0x00,
+ 0x02, 0x01, 0x59, 0x09, 0x06, 0x00,
+ 0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00,
+ 0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00,
+ 0x7F, 0x49, 0x49, 0x49, 0x36, 0x00,
+ 0x3E, 0x41, 0x41, 0x41, 0x22, 0x00,
+ 0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00,
+ 0x7F, 0x49, 0x49, 0x49, 0x41, 0x00,
+ 0x7F, 0x09, 0x09, 0x09, 0x01, 0x00,
+ 0x3E, 0x41, 0x41, 0x51, 0x73, 0x00,
+ 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00,
+ 0x00, 0x41, 0x7F, 0x41, 0x00, 0x00,
+ 0x20, 0x40, 0x41, 0x3F, 0x01, 0x00,
+ 0x7F, 0x08, 0x14, 0x22, 0x41, 0x00,
+ 0x7F, 0x40, 0x40, 0x40, 0x40, 0x00,
+ 0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00,
+ 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00,
+ 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00,
+ 0x7F, 0x09, 0x09, 0x09, 0x06, 0x00,
+ 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00,
+ 0x7F, 0x09, 0x19, 0x29, 0x46, 0x00,
+ 0x26, 0x49, 0x49, 0x49, 0x32, 0x00,
+ 0x03, 0x01, 0x7F, 0x01, 0x03, 0x00,
+ 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00,
+ 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00,
+ 0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00,
+ 0x63, 0x14, 0x08, 0x14, 0x63, 0x00,
+ 0x03, 0x04, 0x78, 0x04, 0x03, 0x00,
+ 0x61, 0x59, 0x49, 0x4D, 0x43, 0x00,
+ 0x00, 0x7F, 0x41, 0x41, 0x41, 0x00,
+ 0x02, 0x04, 0x08, 0x10, 0x20, 0x00,
+ 0x00, 0x41, 0x41, 0x41, 0x7F, 0x00,
+ 0x04, 0x02, 0x01, 0x02, 0x04, 0x00,
+ 0x40, 0x40, 0x40, 0x40, 0x40, 0x00,
+ 0x00, 0x03, 0x07, 0x08, 0x00, 0x00,
+ 0x20, 0x54, 0x54, 0x78, 0x40, 0x00,
+ 0x7F, 0x28, 0x44, 0x44, 0x38, 0x00,
+ 0x38, 0x44, 0x44, 0x44, 0x28, 0x00,
+ 0x38, 0x44, 0x44, 0x28, 0x7F, 0x00,
+ 0x38, 0x54, 0x54, 0x54, 0x18, 0x00,
+ 0x00, 0x08, 0x7E, 0x09, 0x02, 0x00,
+ 0x18, 0x24, 0x24, 0x1C, 0x78, 0x00,
+ 0x7F, 0x08, 0x04, 0x04, 0x78, 0x00,
+ 0x00, 0x44, 0x7D, 0x40, 0x00, 0x00,
+ 0x20, 0x40, 0x40, 0x3D, 0x00, 0x00,
+ 0x7F, 0x10, 0x28, 0x44, 0x00, 0x00,
+ 0x00, 0x41, 0x7F, 0x40, 0x00, 0x00,
+ 0x7C, 0x04, 0x78, 0x04, 0x78, 0x00,
+ 0x7C, 0x08, 0x04, 0x04, 0x78, 0x00,
+ 0x38, 0x44, 0x44, 0x44, 0x38, 0x00,
+ 0x7C, 0x18, 0x24, 0x24, 0x18, 0x00,
+ 0x18, 0x24, 0x24, 0x18, 0x7C, 0x00,
+ 0x7C, 0x08, 0x04, 0x04, 0x08, 0x00,
+ 0x48, 0x54, 0x54, 0x54, 0x24, 0x00,
+ 0x04, 0x04, 0x3F, 0x44, 0x24, 0x00,
+ 0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00,
+ 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00,
+ 0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00,
+ 0x44, 0x28, 0x10, 0x28, 0x44, 0x00,
+ 0x4C, 0x90, 0x90, 0x90, 0x7C, 0x00,
+ 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00,
+ 0x00, 0x08, 0x36, 0x41, 0x00, 0x00,
+ 0x00, 0x00, 0x77, 0x00, 0x00, 0x00,
+ 0x00, 0x41, 0x36, 0x08, 0x00, 0x00,
+ 0x02, 0x01, 0x02, 0x04, 0x02, 0x00,
+ 0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x80, 0x80, 0x80, 0x80, 0x00,
+ 0xC0, 0xC0, 0x40, 0x60, 0x60, 0xE0,
+ 0xE0, 0x60, 0x60, 0x60, 0x60, 0x00,
+ 0x00, 0xFF, 0xFF, 0x30, 0x30, 0x30,
+ 0x30, 0x30, 0x30, 0x30, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xC0, 0x40, 0xA0, 0xA0,
+ 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x80, 0x40, 0x20, 0x20,
+ 0xF0, 0x30, 0x10, 0x10, 0x30, 0xF0,
+ 0xE0, 0x40, 0x40, 0x80, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+ 0xC0, 0x80, 0x00, 0x80, 0x40, 0x40,
+ 0xE0, 0x80, 0x00, 0x00, 0x80, 0x40,
+ 0x40, 0x80, 0x80, 0x80, 0x80, 0xE0,
+ 0x20, 0x20, 0x40, 0x80, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xE0, 0xF0, 0xF0, 0xF0, 0xE0, 0xEC,
+ 0xEE, 0xF7, 0xF3, 0x70, 0x20, 0x00,
+ 0x7C, 0x7C, 0x7C, 0x7E, 0x00, 0x7E,
+ 0x7E, 0x7E, 0x7F, 0x7F, 0x7F, 0x00,
+ 0x00, 0x80, 0xC0, 0xE0, 0x7E, 0x5B,
+ 0x4F, 0x5B, 0xFE, 0xC0, 0x00, 0x00,
+ 0xC0, 0x00, 0xDC, 0xD7, 0xDE, 0xDE,
+ 0xDE, 0xD7, 0xDC, 0x00, 0xC0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x38, 0x78, 0xD8, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x00,
+ 0x0C, 0x1E, 0x36, 0x63, 0xC3, 0x83,
+ 0xFF, 0xFF, 0x01, 0x01, 0x01, 0x00,
+ 0x01, 0x07, 0x0C, 0x18, 0x70, 0xFF,
+ 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x07, 0x07, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xFF, 0xB4, 0xB5, 0xB5,
+ 0x84, 0xCD, 0x7D, 0xFF, 0x00, 0x00,
+ 0x00, 0x7E, 0xF9, 0x78, 0xFC, 0x86,
+ 0x03, 0x03, 0x02, 0x86, 0xFF, 0xFF,
+ 0x24, 0x24, 0x00, 0x00, 0xFF, 0x00,
+ 0x00, 0x00, 0x3C, 0xC2, 0x02, 0x1F,
+ 0x7F, 0xC1, 0x8B, 0x8B, 0xC0, 0x90,
+ 0x3C, 0x0F, 0x82, 0xFC, 0xE6, 0x13,
+ 0x09, 0x09, 0x16, 0xE6, 0xFF, 0xFF,
+ 0xFF, 0xEE, 0xC4, 0x24, 0xE3, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F,
+ 0x7F, 0x7F, 0x3F, 0x1E, 0x0C, 0x00,
+ 0x1F, 0x1F, 0x1F, 0x3F, 0x00, 0x3F,
+ 0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x00,
+ 0x30, 0x7B, 0x7F, 0x78, 0x30, 0x20,
+ 0x20, 0x30, 0x78, 0x7F, 0x3B, 0x00,
+ 0x03, 0x00, 0x0F, 0x7F, 0x0F, 0x0F,
+ 0x0F, 0x7F, 0x0F, 0x00, 0x03, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x38, 0x3C, 0x3C, 0x37, 0x33, 0x30,
+ 0x30, 0x30, 0x30, 0x30, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x03, 0x07, 0x04, 0x0C, 0x18, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x03, 0x02, 0x06, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x0F, 0x19, 0x11, 0x19, 0x09,
+ 0x09, 0x39, 0x20, 0x3F, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x02, 0x04, 0x05,
+ 0x0F, 0x0F, 0x0B, 0x09, 0x09, 0x0B,
+ 0x07, 0x02, 0x02, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x02,
+ 0x04, 0x04, 0x0F, 0x09, 0x09, 0x08,
+ 0x04, 0x03, 0x07, 0x08, 0x09, 0x11,
+ 0x12, 0x12, 0x19, 0x0F, 0x0F, 0x07,
+ 0x0B, 0x0B, 0x09, 0x04, 0x03, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
diff --git a/keyboards/crkbd/post_config.h b/keyboards/crkbd/post_config.h
new file mode 100644
index 00000000000..dcc194479b5
--- /dev/null
+++ b/keyboards/crkbd/post_config.h
@@ -0,0 +1,21 @@
+/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna)
+ *
+ * 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
+
+#ifndef OLED_FONT_H
+# define OLED_FONT_H "keyboards/crkbd/lib/glcdfont.c"
+#endif
diff --git a/keyboards/crkbd/rev1/keyboard.json b/keyboards/crkbd/rev1/keyboard.json
new file mode 100644
index 00000000000..2b32a5c8f63
--- /dev/null
+++ b/keyboards/crkbd/rev1/keyboard.json
@@ -0,0 +1,95 @@
+{
+ "keyboard_name": "Corne",
+ "usb": {
+ "pid": "0x0001",
+ "device_version": "0.0.1"
+ },
+ "features": {
+ "rgblight": true
+ },
+ "build": {
+ "lto": true
+ },
+ "matrix_pins": {
+ "cols": [ "F4", "F5", "F6", "F7", "B1", "B3" ],
+ "rows": [ "D4", "C6", "D7", "E6" ]
+ },
+ "diode_direction": "COL2ROW",
+ "split": {
+ "serial": {
+ "pin": "D2"
+ },
+ "transport": {
+ "sync": {
+ "matrix_state": true
+ }
+ }
+ },
+ "rgblight": {
+ "led_count": 54,
+ "split_count": [27, 27]
+ },
+ "ws2812": {
+ "pin": "D3"
+ },
+ "rgb_matrix": {
+ "split_count": [27, 27],
+ "layout": [
+ {"x": 85, "y": 16, "flags": 2},
+ {"x": 50, "y": 13, "flags": 2},
+ {"x": 16, "y": 20, "flags": 2},
+ {"x": 16, "y": 38, "flags": 2},
+ {"x": 50, "y": 48, "flags": 2},
+ {"x": 85, "y": 52, "flags": 2},
+ {"matrix": [3, 5], "x": 95, "y": 63, "flags": 1},
+ {"matrix": [2, 5], "x": 85, "y": 39, "flags": 4},
+ {"matrix": [1, 5], "x": 85, "y": 21, "flags": 4},
+ {"matrix": [0, 5], "x": 85, "y": 4, "flags": 4},
+ {"matrix": [0, 4], "x": 68, "y": 2, "flags": 4},
+ {"matrix": [1, 4], "x": 68, "y": 19, "flags": 4},
+ {"matrix": [2, 4], "x": 68, "y": 37, "flags": 4},
+ {"matrix": [3, 4], "x": 80, "y": 58, "flags": 1},
+ {"matrix": [3, 3], "x": 60, "y": 55, "flags": 1},
+ {"matrix": [2, 3], "x": 50, "y": 35, "flags": 4},
+ {"matrix": [1, 3], "x": 50, "y": 13, "flags": 4},
+ {"matrix": [0, 3], "x": 50, "y": 0, "flags": 4},
+ {"matrix": [0, 2], "x": 33, "y": 3, "flags": 4},
+ {"matrix": [1, 2], "x": 33, "y": 20, "flags": 4},
+ {"matrix": [2, 2], "x": 33, "y": 37, "flags": 4},
+ {"matrix": [2, 1], "x": 16, "y": 42, "flags": 4},
+ {"matrix": [1, 1], "x": 16, "y": 24, "flags": 4},
+ {"matrix": [0, 1], "x": 16, "y": 7, "flags": 4},
+ {"matrix": [0, 0], "x": 0, "y": 7, "flags": 1},
+ {"matrix": [1, 0], "x": 0, "y": 24, "flags": 1},
+ {"matrix": [2, 0], "x": 0, "y": 41, "flags": 1},
+ {"x": 139, "y": 16, "flags": 2},
+ {"x": 174, "y": 13, "flags": 2},
+ {"x": 208, "y": 20, "flags": 2},
+ {"x": 208, "y": 38, "flags": 2},
+ {"x": 174, "y": 48, "flags": 2},
+ {"x": 139, "y": 52, "flags": 2},
+ {"matrix": [7, 5], "x": 129, "y": 63, "flags": 1},
+ {"matrix": [6, 5], "x": 139, "y": 39, "flags": 4},
+ {"matrix": [5, 5], "x": 139, "y": 21, "flags": 4},
+ {"matrix": [4, 5], "x": 139, "y": 4, "flags": 4},
+ {"matrix": [4, 4], "x": 156, "y": 2, "flags": 4},
+ {"matrix": [5, 4], "x": 156, "y": 19, "flags": 4},
+ {"matrix": [6, 4], "x": 156, "y": 37, "flags": 4},
+ {"matrix": [7, 4], "x": 144, "y": 58, "flags": 1},
+ {"matrix": [7, 3], "x": 164, "y": 55, "flags": 1},
+ {"matrix": [6, 3], "x": 174, "y": 35, "flags": 4},
+ {"matrix": [5, 3], "x": 174, "y": 13, "flags": 4},
+ {"matrix": [4, 3], "x": 174, "y": 0, "flags": 4},
+ {"matrix": [4, 2], "x": 191, "y": 3, "flags": 4},
+ {"matrix": [5, 2], "x": 191, "y": 20, "flags": 4},
+ {"matrix": [6, 2], "x": 191, "y": 37, "flags": 4},
+ {"matrix": [6, 1], "x": 208, "y": 42, "flags": 4},
+ {"matrix": [5, 1], "x": 208, "y": 24, "flags": 4},
+ {"matrix": [4, 1], "x": 208, "y": 7, "flags": 4},
+ {"matrix": [4, 0], "x": 224, "y": 7, "flags": 1},
+ {"matrix": [5, 0], "x": 224, "y": 24, "flags": 1},
+ {"matrix": [6, 0], "x": 224, "y": 41, "flags": 1}
+ ]
+ },
+ "development_board": "promicro"
+}
diff --git a/keyboards/crkbd/rev1/keymaps/maat/config.h b/keyboards/crkbd/rev1/keymaps/maat/config.h
new file mode 100644
index 00000000000..10b23222d6d
--- /dev/null
+++ b/keyboards/crkbd/rev1/keymaps/maat/config.h
@@ -0,0 +1,31 @@
+#pragma once
+
+#include "rgb_matrix.h"
+
+// -- To reduce memory use
+#define LAYER_STATE_8BIT
+#define NO_MUSIC_MODE
+#undef LOCKING_SUPPORT_ENABLE
+#undef LOCKING_RESYNC_ENABLE
+#define NO_ACTION_ONESHOT
+
+// -- To reduce memory use END
+
+// -- PTH
+// https://github.com/jgandert/qmk_modules/blob/main/predictive_tap_hold/README.md
+// #define PTH_DISABLED
+#define TAPPING_TERM 0
+#define PTH_FAST_STREAK_TAP_ENABLE
+// #define PTH_DEBUG
+#define PTH_DONT_HOLD_INSTANTLY
+// -- PTH end
+
+// -- App Companion
+// https://docs.qmk.fm/features/rawhid#usage
+// https://github.com/maatthc/qmk_layers_app_companion
+#define RAW_EPSIZE 32
+#define PAYLOAD_MARK 0x90
+#define PAYLOAD_BEGIN 24
+#define RAW_USAGE_PAGE 0xFF60
+#define RAW_USAGE 0x61
+// -- App Companion end
diff --git a/keyboards/crkbd/rev1/keymaps/maat/keymap.c b/keyboards/crkbd/rev1/keymaps/maat/keymap.c
new file mode 100644
index 00000000000..7f3f5b73352
--- /dev/null
+++ b/keyboards/crkbd/rev1/keymaps/maat/keymap.c
@@ -0,0 +1,44 @@
+// clang-format off
+#include QMK_KEYBOARD_H
+#include "raw_hid.h"
+#include "keymap.h"
+
+// Notifies the host of the layer change using raw HID
+// https://docs.qmk.fm/features/rawhid#usage
+//
+#ifdef RAW_ENABLE
+ layer_state_t layer_state_set_user(layer_state_t state) {
+ uint8_t hi_layer = get_highest_layer(state);
+ #ifdef CONSOLE_ENABLE
+ #include "print.h"
+ uprintf("LAYER: Selected Layer: %d\n", hi_layer);
+ #endif
+ uint8_t response[RAW_EPSIZE];
+ memset(response, 0x00, RAW_EPSIZE);
+ response[PAYLOAD_BEGIN] = PAYLOAD_MARK;
+ response[PAYLOAD_BEGIN + 1] = hi_layer;
+ raw_hid_send(response, RAW_EPSIZE);
+ return state;
+ }
+#endif /* ifdef RAW_ENABLE */
+
+// Predictive tap hold: https://github.com/jgandert/qmk_modules/tree/main/predictive_tap_hold
+const uint8_t pth_side_layout[MATRIX_ROWS][MATRIX_COLS] PROGMEM = LAYOUT_split_3x6_3(
+ PTH_L, PTH_L, PTH_L, PTH_L, PTH_L,PTH_L, PTH_R, PTH_R, PTH_R, PTH_R, PTH_R, PTH_R,
+ PTH_L, PTH_L, PTH_L, PTH_L, PTH_L,PTH_L, PTH_R, PTH_R, PTH_R, PTH_R, PTH_R, PTH_R,
+ PTH_L, PTH_L, PTH_L, PTH_L, PTH_L,PTH_L, PTH_R, PTH_R, PTH_R, PTH_R, PTH_R, PTH_R,
+ PTH_L, PTH_L, PTH_L, PTH_R, PTH_R, PTH_R
+);
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[L_BASE]=LAYER(LAYER_BASE),
+[L_MEDIA]=LAYER(LAYER_MEDIA),
+[L_NAV]=LAYER(LAYER_NAV),
+[L_NUM]=LAYER(LAYER_NUM),
+[L_SYM]=LAYER(LAYER_SYM),
+[L_FUN]=LAYER(LAYER_FUN),
+};
+
+#ifdef OLED_ENABLE
+ #include "oled.c"
+#endif
diff --git a/keyboards/crkbd/rev1/keymaps/maat/keymap.json b/keyboards/crkbd/rev1/keymaps/maat/keymap.json
new file mode 100644
index 00000000000..9111cf15497
--- /dev/null
+++ b/keyboards/crkbd/rev1/keymaps/maat/keymap.json
@@ -0,0 +1,3 @@
+{
+ "modules": ["jgandert/predictive_tap_hold"]
+}
diff --git a/keyboards/crkbd/rev1/keymaps/maat/oled.c b/keyboards/crkbd/rev1/keymaps/maat/oled.c
new file mode 100644
index 00000000000..63135d728e4
--- /dev/null
+++ b/keyboards/crkbd/rev1/keymaps/maat/oled.c
@@ -0,0 +1,78 @@
+#include "quantum.h"
+
+static void oled_render_layer_state(void) {
+ oled_write_P(PSTR("Layer: "), false);
+ switch (get_highest_layer(layer_state)) {
+ case 0:
+ oled_write_ln_P(PSTR("Base"), false);
+ break;
+ case 1:
+ oled_write_ln_P(PSTR("Navigation"), false);
+ break;
+ case 2:
+ oled_write_ln_P(PSTR("Mouse"), false);
+ break;
+ case 3:
+ oled_write_ln_P(PSTR("Media"), false);
+ break;
+ case 4:
+ oled_write_ln_P(PSTR("Number"), false);
+ break;
+ case 5:
+ oled_write_ln_P(PSTR("Symbol"), false);
+ break;
+ case 6:
+ oled_write_ln_P(PSTR("Functions"), false);
+ break;
+ default:
+ oled_write_ln_P(PSTR("Undef"), false);
+ break;
+ }
+}
+
+static char key_name = ' ';
+uint16_t last_keycode;
+uint8_t last_row;
+uint8_t last_col;
+
+static const char PROGMEM code_to_name[60] = {' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'R', 'E', 'B', 'T', '_', '-', '=', '[', ']', '\\', '#', ';', '\'', '`', ',', '.', '/', ' ', ' ', ' '};
+
+static const char *depad_str(const char *depad_str, char depad_char) {
+ while (*depad_str == depad_char)
+ ++depad_str;
+ return depad_str;
+}
+
+static void oled_render_keylog(void) {
+ oled_write_char('0' + last_row, false);
+ oled_write_P(PSTR("x"), false);
+ oled_write_char('0' + last_col, false);
+ oled_write_P(PSTR(", k"), false);
+ const char *last_keycode_str = get_u16_str(last_keycode, ' ');
+ oled_write(depad_str(last_keycode_str, ' '), false);
+ oled_write_P(PSTR(":"), false);
+ oled_write_char(key_name, false);
+ oled_advance_page(true);
+}
+
+void oled_render_logo(void) {
+ // clang-format off
+ static const char PROGMEM crkbd_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,
+ 0};
+ // clang-format on
+ // oled_clear();
+ oled_write_P(crkbd_logo, false);
+}
+
+bool oled_task_user(void) {
+ if (is_keyboard_master()) {
+ oled_render_layer_state();
+ oled_render_keylog();
+ } else {
+ oled_render_logo();
+ }
+ return false;
+}
diff --git a/keyboards/crkbd/rev1/keymaps/maat/rgb_matrix.h b/keyboards/crkbd/rev1/keymaps/maat/rgb_matrix.h
new file mode 100644
index 00000000000..79dfeddb6b2
--- /dev/null
+++ b/keyboards/crkbd/rev1/keymaps/maat/rgb_matrix.h
@@ -0,0 +1,194 @@
+#pragma once
+
+#ifdef RGB_MATRIX_ENABLE
+# define RGB_MATRIX_KEYPRESSES // reacts to keypresses
+// # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses)
+# define RGB_MATRIX_SLEEP // turn off effects when suspended
+# define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+// # define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness)
+// # define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness)
+# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 // limits maximum brightness of LEDs to 150 out of 255. Higher may cause the controller to crash.
+# define RGB_MATRIX_HUE_STEP 8
+# define RGB_MATRIX_SAT_STEP 8
+# define RGB_MATRIX_VAL_STEP 8
+# define RGB_MATRIX_SPD_STEP 10
+
+/* Enable the animations you want/need. You may need to enable only a small number of these because *
+ * they take up a lot of space. Enable and confirm that you can still successfully compile your firmware. */
+// RGB Matrix Animation modes. Explicitly enabled
+// For full list of effects, see:
+// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects
+# 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_PIXEL_RAIN
+# define ENABLE_RGB_MATRIX_PIXEL_FLOW
+# define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
+// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined
+# define ENABLE_RGB_MATRIX_TYPING_HEATMAP
+# define ENABLE_RGB_MATRIX_DIGITAL_RAIN
+// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined
+# 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
+#endif
+#ifdef RGB_MATRIX_ENABLE
+# define RGB_MATRIX_KEYPRESSES // reacts to keypresses
+// # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses)
+# define RGB_MATRIX_SLEEP // turn off effects when suspended
+# define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+// # define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness)
+// # define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness)
+# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 // limits maximum brightness of LEDs to 150 out of 255. Higher may cause the controller to crash.
+# define RGB_MATRIX_HUE_STEP 8
+# define RGB_MATRIX_SAT_STEP 8
+# define RGB_MATRIX_VAL_STEP 8
+# define RGB_MATRIX_SPD_STEP 10
+
+/* Enable the animations you want/need. You may need to enable only a small number of these because *
+ * they take up a lot of space. Enable and confirm that you can still successfully compile your firmware. */
+// RGB Matrix Animation modes. Explicitly enabled
+// For full list of effects, see:
+// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects
+# 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_PIXEL_RAIN
+# define ENABLE_RGB_MATRIX_PIXEL_FLOW
+# define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
+// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined
+# define ENABLE_RGB_MATRIX_TYPING_HEATMAP
+# define ENABLE_RGB_MATRIX_DIGITAL_RAIN
+// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined
+# 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
+#endif
+#ifdef RGB_MATRIX_ENABLE
+# define RGB_MATRIX_KEYPRESSES // reacts to keypresses
+// # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses)
+# define RGB_MATRIX_SLEEP // turn off effects when suspended
+# define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+// # define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness)
+// # define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness)
+# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 // limits maximum brightness of LEDs to 150 out of 255. Higher may cause the controller to crash.
+# define RGB_MATRIX_HUE_STEP 8
+# define RGB_MATRIX_SAT_STEP 8
+# define RGB_MATRIX_VAL_STEP 8
+# define RGB_MATRIX_SPD_STEP 10
+
+/* Enable the animations you want/need. You may need to enable only a small number of these because *
+ * they take up a lot of space. Enable and confirm that you can still successfully compile your firmware. */
+// RGB Matrix Animation modes. Explicitly enabled
+// For full list of effects, see:
+// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects
+# 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_PIXEL_RAIN
+# define ENABLE_RGB_MATRIX_PIXEL_FLOW
+# define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
+// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined
+# define ENABLE_RGB_MATRIX_TYPING_HEATMAP
+# define ENABLE_RGB_MATRIX_DIGITAL_RAIN
+// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined
+# 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
+#endif
diff --git a/keyboards/crkbd/rev1/keymaps/maat/rules.mk b/keyboards/crkbd/rev1/keymaps/maat/rules.mk
new file mode 100644
index 00000000000..59fb2493cb5
--- /dev/null
+++ b/keyboards/crkbd/rev1/keymaps/maat/rules.mk
@@ -0,0 +1,32 @@
+BOOTLOADER = atmel-dfu
+
+#To reduce memory use
+LTO_ENABLE = yes
+
+COMMAND_ENABLE = no
+SPACE_CADET_ENABLE = no
+GRAVE_ESC_ENABLE = no
+MAGIC_ENABLE = no
+BOOTMAGIC_ENABLE = no
+AVR_USE_MINIMAL_PRINTF = yes
+
+MUSIC_ENABLE = no
+AUDIO_ENABLE = no
+
+MOUSEKEY_ENABLE = no
+NKRO_ENABLE = no
+#To reduce memory use END
+
+OLED_ENABLE = yes
+RGBLIGHT_ENABLE = yes
+RGB_MATRIX_ENABLE = no
+
+EXTRAKEY_ENABLE = yes # Audio control and System control
+AUTO_SHIFT_ENABLE = no
+CAPS_WORD_ENABLE = yes
+
+# CONSOLE_ENABLE = yes
+# KEYCODE_STRING_ENABLE = yes
+
+RAW_ENABLE = yes
+WPM_ENABLE = yes
diff --git a/keyboards/crkbd/rev1/readme.md b/keyboards/crkbd/rev1/readme.md
new file mode 100644
index 00000000000..940d23e19be
--- /dev/null
+++ b/keyboards/crkbd/rev1/readme.md
@@ -0,0 +1,11 @@
+# Corne GLP (Gateron Low Profile)
+
+
+
+
+The Corne GLP (Gateron Low Profile) is a variant of the Corne v3 keyboard, originally created by [foostan](https://github.com/foostan/crkbd "foostan"). It supports Gateron low-profile key switches (KS-27 and KS-33). The original Corne firmware can be used with this keyboard.
+
+* Keyboard Maintainer: [beekeeb](https://github.com/beekeeb/crkbd-glp/)
+* Hardware Supported: Pro Micro or equivalent
+* Hardware Availability: https://shop.beekeeb.com
+