From 491387f1f2d30419d303afb227683f4eba98db89 Mon Sep 17 00:00:00 2001
From: SneakboxKB <67670271+SneakboxKB@users.noreply.github.com>
Date: Fri, 11 Jul 2025 00:40:05 -0500
Subject: [PATCH 01/11] m4m5 initial commit
---
keyboards/sneakbox/m4m5/keyboard.json | 229 ++++++++++++++++++
.../sneakbox/m4m5/keymaps/alice/keymap.c | 46 ++++
.../sneakbox/m4m5/keymaps/default/keymap.c | 46 ++++
keyboards/sneakbox/m4m5/readme.md | 23 ++
4 files changed, 344 insertions(+)
create mode 100644 keyboards/sneakbox/m4m5/keyboard.json
create mode 100644 keyboards/sneakbox/m4m5/keymaps/alice/keymap.c
create mode 100644 keyboards/sneakbox/m4m5/keymaps/default/keymap.c
create mode 100644 keyboards/sneakbox/m4m5/readme.md
diff --git a/keyboards/sneakbox/m4m5/keyboard.json b/keyboards/sneakbox/m4m5/keyboard.json
new file mode 100644
index 00000000000..9c601b73949
--- /dev/null
+++ b/keyboards/sneakbox/m4m5/keyboard.json
@@ -0,0 +1,229 @@
+{
+ "keyboard_name": "M4 & M5",
+ "manufacturer": "Sneakbox",
+ "maintainer": "mujimanic",
+ "bootloader": "atmel-dfu",
+ "build": {
+ "lto": true
+ },
+ "diode_direction": "COL2ROW",
+ "encoder": {
+ "rotary": [
+ {"pin_a": "D3", "pin_b": "D2"}
+ ]
+ },
+ "bootmagic": {
+ "matrix": [2, 0]
+ },
+ "indicators": {
+ "caps_lock": "D6",
+ "num_lock": "D4",
+ "scroll_lock": "D7"
+ },
+ "features": {
+ "bootmagic": true,
+ "encoder": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": true
+ },
+ "matrix_pins": {
+ "cols": ["F0", "D0", "C7", "C6", "B6", "B5", "B4", "D1"],
+ "rows": ["F1", "E6", "F4", "B1", "F5", "B2", "F6", "B3", "F7", "B7"]
+ },
+ "rgblight": {
+ "led_count": 16,
+ "animations": {
+ "breathing": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "snake": true,
+ "knight": true,
+ "christmas": true,
+ "static_gradient": true,
+ "rgb_test": true,
+ "alternating": true,
+ "twinkle": true
+ }
+ },
+ "ws2812": {
+ "pin": "D5"
+ },
+ "processor": "atmega32u4",
+ "url": "https://sneakbox.design",
+ "usb": {
+ "device_version": "0.0.1"
+ "vid": "0x5342",
+ "pid": "0x0005"
+ },
+ "community_layouts": ["alice", "alice_split_bs"],
+ "layout_aliases": {
+ "LAYOUT_all": "LAYOUT_alice_split_bs"
+ },
+ "layouts": {
+ "LAYOUT_alice_split_bs": {
+ "layout": [
+ {"matrix": [2, 0], "x": 0, "y": 0},
+
+ {"matrix": [0, 0], "x": 1.25, "y": 0},
+ {"matrix": [0, 1], "x": 2.25, "y": 0},
+ {"matrix": [0, 2], "x": 3.25, "y": 0},
+ {"matrix": [0, 3], "x": 4.25, "y": 0},
+ {"matrix": [0, 4], "x": 5.25, "y": 0},
+ {"matrix": [0, 5], "x": 6.25, "y": 0},
+ {"matrix": [0, 6], "x": 7.25, "y": 0},
+
+ {"matrix": [1, 0], "x": 10.25, "y": 0},
+ {"matrix": [1, 1], "x": 11.25, "y": 0},
+ {"matrix": [1, 2], "x": 12.25, "y": 0},
+ {"matrix": [1, 3], "x": 13.25, "y": 0},
+ {"matrix": [1, 4], "x": 14.25, "y": 0},
+ {"matrix": [1, 5], "x": 15.25, "y": 0},
+ {"matrix": [1, 6], "x": 16.25, "y": 0},
+ {"matrix": [1, 7], "x": 17.25, "y": 0},
+
+ {"matrix": [4, 0], "x": 0, "y": 1},
+
+ {"matrix": [2, 1], "x": 1.25, "y": 1, "w": 1.5},
+ {"matrix": [2, 2], "x": 2.75, "y": 1},
+ {"matrix": [2, 3], "x": 3.75, "y": 1},
+ {"matrix": [2, 4], "x": 4.75, "y": 1},
+ {"matrix": [2, 5], "x": 5.75, "y": 1},
+ {"matrix": [2, 6], "x": 6.75, "y": 1},
+
+ {"matrix": [3, 0], "x": 9.75, "y": 1},
+ {"matrix": [3, 1], "x": 10.75, "y": 1},
+ {"matrix": [3, 2], "x": 11.75, "y": 1},
+ {"matrix": [3, 3], "x": 12.75, "y": 1},
+ {"matrix": [3, 4], "x": 13.75, "y": 1},
+ {"matrix": [3, 5], "x": 14.75, "y": 1},
+ {"matrix": [3, 6], "x": 15.75, "y": 1},
+ {"matrix": [3, 7], "x": 16.75, "y": 1, "w": 1.5},
+
+ {"matrix": [6, 0], "x": 0, "y": 2},
+
+ {"matrix": [4, 1], "x": 1.25, "y": 2, "w": 1.75},
+ {"matrix": [4, 2], "x": 3, "y": 2},
+ {"matrix": [4, 3], "x": 4, "y": 2},
+ {"matrix": [4, 4], "x": 5, "y": 2},
+ {"matrix": [4, 5], "x": 6, "y": 2},
+ {"matrix": [4, 6], "x": 7, "y": 2},
+
+ {"matrix": [5, 0], "x": 10, "y": 2},
+ {"matrix": [5, 1], "x": 11, "y": 2},
+ {"matrix": [5, 2], "x": 12, "y": 2},
+ {"matrix": [5, 3], "x": 13, "y": 2},
+ {"matrix": [5, 4], "x": 14, "y": 2},
+ {"matrix": [5, 5], "x": 15, "y": 2},
+ {"matrix": [5, 6], "x": 16, "y": 2, "w": 2.25},
+
+ {"matrix": [6, 1], "x": 1.25, "y": 3, "w": 2.25},
+ {"matrix": [6, 2], "x": 3.5, "y": 3},
+ {"matrix": [6, 3], "x": 4.5, "y": 3},
+ {"matrix": [6, 4], "x": 5.5, "y": 3},
+ {"matrix": [6, 5], "x": 6.5, "y": 3},
+ {"matrix": [6, 6], "x": 7.5, "y": 3},
+
+ {"matrix": [7, 0], "x": 9.5, "y": 3},
+ {"matrix": [7, 1], "x": 10.5, "y": 3},
+ {"matrix": [7, 2], "x": 11.5, "y": 3},
+ {"matrix": [7, 3], "x": 12.5, "y": 3},
+ {"matrix": [7, 4], "x": 13.5, "y": 3},
+ {"matrix": [7, 5], "x": 14.5, "y": 3},
+ {"matrix": [7, 6], "x": 15.5, "y": 3, "w": 1.75},
+ {"matrix": [7, 7], "x": 17.25, "y": 3},
+
+ {"matrix": [8, 1], "x": 1.25, "y": 4, "w": 1.5},
+ {"matrix": [8, 3], "x": 4, "y": 4, "w": 1.5},
+ {"matrix": [8, 5], "x": 5.5, "y": 4, "w": 2.25},
+ {"matrix": [8, 6], "x": 7.75, "y": 4},
+ {"matrix": [9, 1], "x": 9.75, "y": 4, "w": 1.25},
+ {"matrix": [9, 2], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [9, 3], "x": 12.5, "y": 4, "w": 1.5},
+ {"matrix": [9, 7], "x": 16.75, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_alice": {
+ "layout": [
+ {"matrix": [2, 0], "x": 0, "y": 0},
+
+ {"matrix": [0, 0], "x": 1.25, "y": 0},
+ {"matrix": [0, 1], "x": 2.25, "y": 0},
+ {"matrix": [0, 2], "x": 3.25, "y": 0},
+ {"matrix": [0, 3], "x": 4.25, "y": 0},
+ {"matrix": [0, 4], "x": 5.25, "y": 0},
+ {"matrix": [0, 5], "x": 6.25, "y": 0},
+
+ {"matrix": [0, 6], "x": 7.25, "y": 0},
+ {"matrix": [1, 0], "x": 10.25, "y": 0},
+ {"matrix": [1, 1], "x": 11.25, "y": 0},
+ {"matrix": [1, 2], "x": 12.25, "y": 0},
+ {"matrix": [1, 3], "x": 13.25, "y": 0},
+ {"matrix": [1, 4], "x": 14.25, "y": 0},
+ {"matrix": [1, 5], "x": 15.25, "y": 0},
+ {"matrix": [1, 6], "x": 16.25, "y": 0, "w": 2},
+
+ {"matrix": [4, 0], "x": 0, "y": 1},
+
+ {"matrix": [2, 1], "x": 1.25, "y": 1, "w": 1.5},
+ {"matrix": [2, 2], "x": 2.75, "y": 1},
+ {"matrix": [2, 3], "x": 3.75, "y": 1},
+ {"matrix": [2, 4], "x": 4.75, "y": 1},
+ {"matrix": [2, 5], "x": 5.75, "y": 1},
+ {"matrix": [2, 6], "x": 6.75, "y": 1},
+ {"matrix": [3, 0], "x": 9.75, "y": 1},
+
+ {"matrix": [3, 1], "x": 10.75, "y": 1},
+ {"matrix": [3, 2], "x": 11.75, "y": 1},
+ {"matrix": [3, 3], "x": 12.75, "y": 1},
+ {"matrix": [3, 4], "x": 13.75, "y": 1},
+ {"matrix": [3, 5], "x": 14.75, "y": 1},
+ {"matrix": [3, 6], "x": 15.75, "y": 1},
+ {"matrix": [3, 7], "x": 16.75, "y": 1, "w": 1.5},
+
+ {"matrix": [6, 0], "x": 0, "y": 2},
+
+ {"matrix": [4, 1], "x": 1.25, "y": 2, "w": 1.75},
+ {"matrix": [4, 2], "x": 3, "y": 2},
+ {"matrix": [4, 3], "x": 4, "y": 2},
+ {"matrix": [4, 4], "x": 5, "y": 2},
+ {"matrix": [4, 5], "x": 6, "y": 2},
+ {"matrix": [4, 6], "x": 7, "y": 2},
+
+ {"matrix": [5, 0], "x": 10, "y": 2},
+ {"matrix": [5, 1], "x": 11, "y": 2},
+ {"matrix": [5, 2], "x": 12, "y": 2},
+ {"matrix": [5, 3], "x": 13, "y": 2},
+ {"matrix": [5, 4], "x": 14, "y": 2},
+ {"matrix": [5, 5], "x": 15, "y": 2},
+ {"matrix": [5, 6], "x": 16, "y": 2, "w": 2.25},
+
+ {"matrix": [6, 1], "x": 1.25, "y": 3, "w": 2.25},
+ {"matrix": [6, 2], "x": 3.5, "y": 3},
+ {"matrix": [6, 3], "x": 4.5, "y": 3},
+ {"matrix": [6, 4], "x": 5.5, "y": 3},
+ {"matrix": [6, 5], "x": 6.5, "y": 3},
+ {"matrix": [6, 6], "x": 7.5, "y": 3},
+ {"matrix": [7, 0], "x": 9.5, "y": 3},
+
+ {"matrix": [7, 1], "x": 10.5, "y": 3},
+ {"matrix": [7, 2], "x": 11.5, "y": 3},
+ {"matrix": [7, 3], "x": 12.5, "y": 3},
+ {"matrix": [7, 4], "x": 13.5, "y": 3},
+ {"matrix": [7, 5], "x": 14.5, "y": 3},
+ {"matrix": [7, 6], "x": 15.5, "y": 3, "w": 1.75},
+ {"matrix": [7, 7], "x": 17.25, "y": 3},
+
+ {"matrix": [8, 1], "x": 1.25, "y": 4, "w": 1.5},
+ {"matrix": [8, 3], "x": 4, "y": 4, "w": 1.5},
+ {"matrix": [8, 5], "x": 5.5, "y": 4, "w": 2.25},
+ {"matrix": [8, 6], "x": 7.75, "y": 4},
+ {"matrix": [9, 1], "x": 9.75, "y": 4, "w": 1.25},
+ {"matrix": [9, 2], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [9, 3], "x": 12.5, "y": 4, "w": 1.5},
+ {"matrix": [9, 7], "x": 16.75, "y": 4, "w": 1.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/sneakbox/m4m5/keymaps/alice/keymap.c b/keyboards/sneakbox/m4m5/keymaps/alice/keymap.c
new file mode 100644
index 00000000000..81288361662
--- /dev/null
+++ b/keyboards/sneakbox/m4m5/keymaps/alice/keymap.c
@@ -0,0 +1,46 @@
+/*
+Copyright 2023 Bryan Ong
+
+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
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+ _BASE,
+ _FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT_alice(
+ KC_ESC, KC_GRV, 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_PGUP, 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_PGDN, 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_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_LGUI,
+ KC_LCTL, KC_LALT, KC_SPC, LT(_FN, KC_SPC), KC_SPC, KC_SPC, KC_RALT, KC_RCTL),
+ [_FN] = LAYOUT_alice(
+ KC_TRNS, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_RMOD, RGB_MOD, RGB_TOG,
+ KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_VAD, RGB_VAI, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_SAD, RGB_SAI, KC_TRNS, RGB_HUI,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [_BASE] = { ENCODER_CCW_CW(KC_1, KC_2)},
+ [_FN] = { ENCODER_CCW_CW(KC_1, KC_2)}
+};
+#endif
\ No newline at end of file
diff --git a/keyboards/sneakbox/m4m5/keymaps/default/keymap.c b/keyboards/sneakbox/m4m5/keymaps/default/keymap.c
new file mode 100644
index 00000000000..30d27382dcc
--- /dev/null
+++ b/keyboards/sneakbox/m4m5/keymaps/default/keymap.c
@@ -0,0 +1,46 @@
+/*
+Copyright 2023 Bryan Ong
+
+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
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+ _BASE,
+ _FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT_alice_split_bs(
+ KC_ESC, KC_GRV, 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_PGUP, 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_PGDN, 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_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_LGUI,
+ KC_LCTL, KC_LALT, KC_SPC, LT(_FN, KC_SPC), KC_SPC, KC_SPC, KC_RALT, KC_RCTL),
+ [_FN] = LAYOUT_alice_split_bs(
+ KC_TRNS, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_RMOD, RGB_MOD, RGB_TOG,
+ KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_VAD, RGB_VAI, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_SAD, RGB_SAI, KC_TRNS, RGB_HUI,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [_BASE] = { ENCODER_CCW_CW(KC_1, KC_2)},
+ [_FN] = { ENCODER_CCW_CW(KC_1, KC_2)}
+};
+#endif
\ No newline at end of file
diff --git a/keyboards/sneakbox/m4m5/readme.md b/keyboards/sneakbox/m4m5/readme.md
new file mode 100644
index 00000000000..3e664ddfb70
--- /dev/null
+++ b/keyboards/sneakbox/m4m5/readme.md
@@ -0,0 +1,23 @@
+# Sneakbox M4 & M5 PCB
+
+
+
+An Alice-compatible PCB with hotswap with pushbutton rotary encoder socket placed at the top left key position. This PCB is the successor to the AliceCloneRGB PCB and features RGB underglow lighting along with revised hardware components such as an additional spacebar key in the right spacebar cluster. M4M5 covers two physical PCBs for the MGA project as well as the MGA V3.
+
+* Keyboard Maintainer: [mujimanic](https://github.com/mujimanic)
+* Hardware Supported: Any Alice-layout case.
+* Hardware Availability: [sneakbox.design](https://sneakbox.com/products/m4-alice-pcbs-for-mga-cases)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make sneakbox/m4m5:default
+
+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
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the top left key in the nevigation cluster (Escape key) and plug in the keyboard
+* **Physical reset button**: Briefly press the small metal button on the back of the PCB
+* **Keycode in layout**: Press and hold the key next to the right split spacebar (to the right of the spacebar) and then press the End key (located on the bottom of the four-key navigation cluster)
From d37b6a56ecee804e030b7dd35945026f25799a35 Mon Sep 17 00:00:00 2001
From: SneakboxKB <67670271+SneakboxKB@users.noreply.github.com>
Date: Wed, 16 Jul 2025 12:46:40 -0500
Subject: [PATCH 02/11] Revised description and flashing instructions
---
keyboards/sneakbox/m4m5/readme.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/keyboards/sneakbox/m4m5/readme.md b/keyboards/sneakbox/m4m5/readme.md
index 3e664ddfb70..1a040dfea16 100644
--- a/keyboards/sneakbox/m4m5/readme.md
+++ b/keyboards/sneakbox/m4m5/readme.md
@@ -2,7 +2,7 @@

-An Alice-compatible PCB with hotswap with pushbutton rotary encoder socket placed at the top left key position. This PCB is the successor to the AliceCloneRGB PCB and features RGB underglow lighting along with revised hardware components such as an additional spacebar key in the right spacebar cluster. M4M5 covers two physical PCBs for the MGA project as well as the MGA V3.
+An Alice-compatible PCB with hotswap with pushbutton rotary encoder socket placed at the top left key position. This PCB is the successor to the AliceCloneRGB PCB and features RGB underglow lighting along with revised hardware components such as an additional spacebar key in the right spacebar cluster. M4M5 firmware covers two physical PCBs for the MGA project (M4 PCB and M5 PCB) namely for the MGA V3 keyboard (which uses either PCB).
* Keyboard Maintainer: [mujimanic](https://github.com/mujimanic)
* Hardware Supported: Any Alice-layout case.
@@ -20,4 +20,4 @@ Enter the bootloader in 3 ways:
* **Bootmagic reset**: Hold down the top left key in the nevigation cluster (Escape key) and plug in the keyboard
* **Physical reset button**: Briefly press the small metal button on the back of the PCB
-* **Keycode in layout**: Press and hold the key next to the right split spacebar (to the right of the spacebar) and then press the End key (located on the bottom of the four-key navigation cluster)
+* **Keycode in layout**: Press and hold the key next to the right split spacebar (to the right of the spacebar) and then press the End key (located on the bottom of the three-key navigation cluster)
From 39c733ff160c04580f16c3a9a6f58718ffc14b97 Mon Sep 17 00:00:00 2001
From: SneakboxKB <67670271+SneakboxKB@users.noreply.github.com>
Date: Wed, 16 Jul 2025 13:00:45 -0500
Subject: [PATCH 03/11] Removed community layouts.
---
keyboards/sneakbox/m4m5/keyboard.json | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/keyboards/sneakbox/m4m5/keyboard.json b/keyboards/sneakbox/m4m5/keyboard.json
index 9c601b73949..f04312413c9 100644
--- a/keyboards/sneakbox/m4m5/keyboard.json
+++ b/keyboards/sneakbox/m4m5/keyboard.json
@@ -57,10 +57,6 @@
"vid": "0x5342",
"pid": "0x0005"
},
- "community_layouts": ["alice", "alice_split_bs"],
- "layout_aliases": {
- "LAYOUT_all": "LAYOUT_alice_split_bs"
- },
"layouts": {
"LAYOUT_alice_split_bs": {
"layout": [
@@ -144,7 +140,7 @@
{"matrix": [9, 7], "x": 16.75, "y": 4, "w": 1.5}
]
},
- "LAYOUT_alice": {
+ "LAYOUT_alice_2u_backspace": {
"layout": [
{"matrix": [2, 0], "x": 0, "y": 0},
From 92e86f3cae5297a9ba99b7f1a0aaab2bc8c41b57 Mon Sep 17 00:00:00 2001
From: SneakboxKB <67670271+SneakboxKB@users.noreply.github.com>
Date: Wed, 16 Jul 2025 13:07:01 -0500
Subject: [PATCH 04/11] Update keyboards/sneakbox/m4m5/keymaps/alice/keymap.c
Co-authored-by: Jack Sangdahl
---
keyboards/sneakbox/m4m5/keymaps/alice/keymap.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/keyboards/sneakbox/m4m5/keymaps/alice/keymap.c b/keyboards/sneakbox/m4m5/keymaps/alice/keymap.c
index 81288361662..85102c234f1 100644
--- a/keyboards/sneakbox/m4m5/keymaps/alice/keymap.c
+++ b/keyboards/sneakbox/m4m5/keymaps/alice/keymap.c
@@ -32,9 +32,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LALT, KC_SPC, LT(_FN, KC_SPC), KC_SPC, KC_SPC, KC_RALT, KC_RCTL),
[_FN] = LAYOUT_alice(
KC_TRNS, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_RMOD, RGB_MOD, RGB_TOG,
- KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_VAD, RGB_VAI, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_SAD, RGB_SAI, KC_TRNS, RGB_HUI,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, UG_PREV, UG_NEXT, UG_TOGG,
+ KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, UG_VALD, UG_VALU, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, UG_SATD, UG_SATU, KC_TRNS, UG_HUEU,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
};
From 830211dbb2e95420e3dfc2dcaa6b562e1d4035b3 Mon Sep 17 00:00:00 2001
From: SneakboxKB <67670271+SneakboxKB@users.noreply.github.com>
Date: Wed, 16 Jul 2025 13:07:13 -0500
Subject: [PATCH 05/11] Update keyboards/sneakbox/m4m5/keymaps/alice/keymap.c
Co-authored-by: Jack Sangdahl
---
keyboards/sneakbox/m4m5/keymaps/alice/keymap.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/keyboards/sneakbox/m4m5/keymaps/alice/keymap.c b/keyboards/sneakbox/m4m5/keymaps/alice/keymap.c
index 85102c234f1..174cc57766c 100644
--- a/keyboards/sneakbox/m4m5/keymaps/alice/keymap.c
+++ b/keyboards/sneakbox/m4m5/keymaps/alice/keymap.c
@@ -43,4 +43,4 @@ const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[_BASE] = { ENCODER_CCW_CW(KC_1, KC_2)},
[_FN] = { ENCODER_CCW_CW(KC_1, KC_2)}
};
-#endif
\ No newline at end of file
+#endif
From 857d5ccbb8a5ce674c7cd319499c51efc5bd6d2e Mon Sep 17 00:00:00 2001
From: SneakboxKB <67670271+SneakboxKB@users.noreply.github.com>
Date: Wed, 16 Jul 2025 13:10:06 -0500
Subject: [PATCH 06/11] renamed layout alias for alice single backspace to
"alice"
---
keyboards/sneakbox/m4m5/keyboard.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/keyboards/sneakbox/m4m5/keyboard.json b/keyboards/sneakbox/m4m5/keyboard.json
index f04312413c9..bc1c485c158 100644
--- a/keyboards/sneakbox/m4m5/keyboard.json
+++ b/keyboards/sneakbox/m4m5/keyboard.json
@@ -140,7 +140,7 @@
{"matrix": [9, 7], "x": 16.75, "y": 4, "w": 1.5}
]
},
- "LAYOUT_alice_2u_backspace": {
+ "LAYOUT_alice": {
"layout": [
{"matrix": [2, 0], "x": 0, "y": 0},
From f4deffbd7419715b95f5b554314b59b9c31c52f9 Mon Sep 17 00:00:00 2001
From: SneakboxKB <67670271+SneakboxKB@users.noreply.github.com>
Date: Wed, 16 Jul 2025 13:17:37 -0500
Subject: [PATCH 07/11] Updated RGB control commands in default keymap per
requested
---
keyboards/sneakbox/m4m5/keymaps/default/keymap.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/keyboards/sneakbox/m4m5/keymaps/default/keymap.c b/keyboards/sneakbox/m4m5/keymaps/default/keymap.c
index 30d27382dcc..b11b66887eb 100644
--- a/keyboards/sneakbox/m4m5/keymaps/default/keymap.c
+++ b/keyboards/sneakbox/m4m5/keymaps/default/keymap.c
@@ -32,9 +32,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LALT, KC_SPC, LT(_FN, KC_SPC), KC_SPC, KC_SPC, KC_RALT, KC_RCTL),
[_FN] = LAYOUT_alice_split_bs(
KC_TRNS, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_RMOD, RGB_MOD, RGB_TOG,
- KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_VAD, RGB_VAI, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_SAD, RGB_SAI, KC_TRNS, RGB_HUI,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, UG_PREV, UG_NEXT, UG_TOGG,
+ KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, UG_VALD, UG_VALU, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, UG_SATD, UG_SATU, KC_TRNS, UG_HUEU,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
};
@@ -43,4 +43,4 @@ const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[_BASE] = { ENCODER_CCW_CW(KC_1, KC_2)},
[_FN] = { ENCODER_CCW_CW(KC_1, KC_2)}
};
-#endif
\ No newline at end of file
+#endif
From 53fee9b9056886af542f2146469fb751d5a9f8dd Mon Sep 17 00:00:00 2001
From: SneakboxKB <67670271+SneakboxKB@users.noreply.github.com>
Date: Wed, 16 Jul 2025 14:13:54 -0500
Subject: [PATCH 08/11] Correct qmk json formatting using command line. This is
the correct file.
---
keyboards/sneakbox/m4m5/keyboard.json | 420 ++++++++++++--------------
1 file changed, 199 insertions(+), 221 deletions(-)
diff --git a/keyboards/sneakbox/m4m5/keyboard.json b/keyboards/sneakbox/m4m5/keyboard.json
index bc1c485c158..ba56a6c85d9 100644
--- a/keyboards/sneakbox/m4m5/keyboard.json
+++ b/keyboards/sneakbox/m4m5/keyboard.json
@@ -1,225 +1,203 @@
{
- "keyboard_name": "M4 & M5",
- "manufacturer": "Sneakbox",
- "maintainer": "mujimanic",
- "bootloader": "atmel-dfu",
- "build": {
- "lto": true
- },
- "diode_direction": "COL2ROW",
- "encoder": {
- "rotary": [
- {"pin_a": "D3", "pin_b": "D2"}
- ]
- },
- "bootmagic": {
- "matrix": [2, 0]
- },
- "indicators": {
- "caps_lock": "D6",
- "num_lock": "D4",
- "scroll_lock": "D7"
- },
- "features": {
- "bootmagic": true,
- "encoder": true,
- "extrakey": true,
- "mousekey": true,
- "nkro": true,
- "rgblight": true
- },
- "matrix_pins": {
- "cols": ["F0", "D0", "C7", "C6", "B6", "B5", "B4", "D1"],
- "rows": ["F1", "E6", "F4", "B1", "F5", "B2", "F6", "B3", "F7", "B7"]
- },
- "rgblight": {
- "led_count": 16,
- "animations": {
- "breathing": true,
- "rainbow_mood": true,
- "rainbow_swirl": true,
- "snake": true,
- "knight": true,
- "christmas": true,
- "static_gradient": true,
- "rgb_test": true,
- "alternating": true,
- "twinkle": true
- }
- },
- "ws2812": {
- "pin": "D5"
- },
- "processor": "atmega32u4",
- "url": "https://sneakbox.design",
- "usb": {
- "device_version": "0.0.1"
- "vid": "0x5342",
- "pid": "0x0005"
- },
- "layouts": {
- "LAYOUT_alice_split_bs": {
- "layout": [
- {"matrix": [2, 0], "x": 0, "y": 0},
-
- {"matrix": [0, 0], "x": 1.25, "y": 0},
- {"matrix": [0, 1], "x": 2.25, "y": 0},
- {"matrix": [0, 2], "x": 3.25, "y": 0},
- {"matrix": [0, 3], "x": 4.25, "y": 0},
- {"matrix": [0, 4], "x": 5.25, "y": 0},
- {"matrix": [0, 5], "x": 6.25, "y": 0},
- {"matrix": [0, 6], "x": 7.25, "y": 0},
-
- {"matrix": [1, 0], "x": 10.25, "y": 0},
- {"matrix": [1, 1], "x": 11.25, "y": 0},
- {"matrix": [1, 2], "x": 12.25, "y": 0},
- {"matrix": [1, 3], "x": 13.25, "y": 0},
- {"matrix": [1, 4], "x": 14.25, "y": 0},
- {"matrix": [1, 5], "x": 15.25, "y": 0},
- {"matrix": [1, 6], "x": 16.25, "y": 0},
- {"matrix": [1, 7], "x": 17.25, "y": 0},
-
- {"matrix": [4, 0], "x": 0, "y": 1},
-
- {"matrix": [2, 1], "x": 1.25, "y": 1, "w": 1.5},
- {"matrix": [2, 2], "x": 2.75, "y": 1},
- {"matrix": [2, 3], "x": 3.75, "y": 1},
- {"matrix": [2, 4], "x": 4.75, "y": 1},
- {"matrix": [2, 5], "x": 5.75, "y": 1},
- {"matrix": [2, 6], "x": 6.75, "y": 1},
-
- {"matrix": [3, 0], "x": 9.75, "y": 1},
- {"matrix": [3, 1], "x": 10.75, "y": 1},
- {"matrix": [3, 2], "x": 11.75, "y": 1},
- {"matrix": [3, 3], "x": 12.75, "y": 1},
- {"matrix": [3, 4], "x": 13.75, "y": 1},
- {"matrix": [3, 5], "x": 14.75, "y": 1},
- {"matrix": [3, 6], "x": 15.75, "y": 1},
- {"matrix": [3, 7], "x": 16.75, "y": 1, "w": 1.5},
-
- {"matrix": [6, 0], "x": 0, "y": 2},
-
- {"matrix": [4, 1], "x": 1.25, "y": 2, "w": 1.75},
- {"matrix": [4, 2], "x": 3, "y": 2},
- {"matrix": [4, 3], "x": 4, "y": 2},
- {"matrix": [4, 4], "x": 5, "y": 2},
- {"matrix": [4, 5], "x": 6, "y": 2},
- {"matrix": [4, 6], "x": 7, "y": 2},
-
- {"matrix": [5, 0], "x": 10, "y": 2},
- {"matrix": [5, 1], "x": 11, "y": 2},
- {"matrix": [5, 2], "x": 12, "y": 2},
- {"matrix": [5, 3], "x": 13, "y": 2},
- {"matrix": [5, 4], "x": 14, "y": 2},
- {"matrix": [5, 5], "x": 15, "y": 2},
- {"matrix": [5, 6], "x": 16, "y": 2, "w": 2.25},
-
- {"matrix": [6, 1], "x": 1.25, "y": 3, "w": 2.25},
- {"matrix": [6, 2], "x": 3.5, "y": 3},
- {"matrix": [6, 3], "x": 4.5, "y": 3},
- {"matrix": [6, 4], "x": 5.5, "y": 3},
- {"matrix": [6, 5], "x": 6.5, "y": 3},
- {"matrix": [6, 6], "x": 7.5, "y": 3},
-
- {"matrix": [7, 0], "x": 9.5, "y": 3},
- {"matrix": [7, 1], "x": 10.5, "y": 3},
- {"matrix": [7, 2], "x": 11.5, "y": 3},
- {"matrix": [7, 3], "x": 12.5, "y": 3},
- {"matrix": [7, 4], "x": 13.5, "y": 3},
- {"matrix": [7, 5], "x": 14.5, "y": 3},
- {"matrix": [7, 6], "x": 15.5, "y": 3, "w": 1.75},
- {"matrix": [7, 7], "x": 17.25, "y": 3},
-
- {"matrix": [8, 1], "x": 1.25, "y": 4, "w": 1.5},
- {"matrix": [8, 3], "x": 4, "y": 4, "w": 1.5},
- {"matrix": [8, 5], "x": 5.5, "y": 4, "w": 2.25},
- {"matrix": [8, 6], "x": 7.75, "y": 4},
- {"matrix": [9, 1], "x": 9.75, "y": 4, "w": 1.25},
- {"matrix": [9, 2], "x": 11, "y": 4, "w": 1.5},
- {"matrix": [9, 3], "x": 12.5, "y": 4, "w": 1.5},
- {"matrix": [9, 7], "x": 16.75, "y": 4, "w": 1.5}
- ]
+ "manufacturer": "Sneakbox",
+ "keyboard_name": "M4 & M5",
+ "maintainer": "mujimanic",
+ "bootloader": "atmel-dfu",
+ "bootmagic": {
+ "matrix": [2, 0]
},
- "LAYOUT_alice": {
- "layout": [
- {"matrix": [2, 0], "x": 0, "y": 0},
-
- {"matrix": [0, 0], "x": 1.25, "y": 0},
- {"matrix": [0, 1], "x": 2.25, "y": 0},
- {"matrix": [0, 2], "x": 3.25, "y": 0},
- {"matrix": [0, 3], "x": 4.25, "y": 0},
- {"matrix": [0, 4], "x": 5.25, "y": 0},
- {"matrix": [0, 5], "x": 6.25, "y": 0},
-
- {"matrix": [0, 6], "x": 7.25, "y": 0},
- {"matrix": [1, 0], "x": 10.25, "y": 0},
- {"matrix": [1, 1], "x": 11.25, "y": 0},
- {"matrix": [1, 2], "x": 12.25, "y": 0},
- {"matrix": [1, 3], "x": 13.25, "y": 0},
- {"matrix": [1, 4], "x": 14.25, "y": 0},
- {"matrix": [1, 5], "x": 15.25, "y": 0},
- {"matrix": [1, 6], "x": 16.25, "y": 0, "w": 2},
-
- {"matrix": [4, 0], "x": 0, "y": 1},
-
- {"matrix": [2, 1], "x": 1.25, "y": 1, "w": 1.5},
- {"matrix": [2, 2], "x": 2.75, "y": 1},
- {"matrix": [2, 3], "x": 3.75, "y": 1},
- {"matrix": [2, 4], "x": 4.75, "y": 1},
- {"matrix": [2, 5], "x": 5.75, "y": 1},
- {"matrix": [2, 6], "x": 6.75, "y": 1},
- {"matrix": [3, 0], "x": 9.75, "y": 1},
-
- {"matrix": [3, 1], "x": 10.75, "y": 1},
- {"matrix": [3, 2], "x": 11.75, "y": 1},
- {"matrix": [3, 3], "x": 12.75, "y": 1},
- {"matrix": [3, 4], "x": 13.75, "y": 1},
- {"matrix": [3, 5], "x": 14.75, "y": 1},
- {"matrix": [3, 6], "x": 15.75, "y": 1},
- {"matrix": [3, 7], "x": 16.75, "y": 1, "w": 1.5},
-
- {"matrix": [6, 0], "x": 0, "y": 2},
-
- {"matrix": [4, 1], "x": 1.25, "y": 2, "w": 1.75},
- {"matrix": [4, 2], "x": 3, "y": 2},
- {"matrix": [4, 3], "x": 4, "y": 2},
- {"matrix": [4, 4], "x": 5, "y": 2},
- {"matrix": [4, 5], "x": 6, "y": 2},
- {"matrix": [4, 6], "x": 7, "y": 2},
-
- {"matrix": [5, 0], "x": 10, "y": 2},
- {"matrix": [5, 1], "x": 11, "y": 2},
- {"matrix": [5, 2], "x": 12, "y": 2},
- {"matrix": [5, 3], "x": 13, "y": 2},
- {"matrix": [5, 4], "x": 14, "y": 2},
- {"matrix": [5, 5], "x": 15, "y": 2},
- {"matrix": [5, 6], "x": 16, "y": 2, "w": 2.25},
-
- {"matrix": [6, 1], "x": 1.25, "y": 3, "w": 2.25},
- {"matrix": [6, 2], "x": 3.5, "y": 3},
- {"matrix": [6, 3], "x": 4.5, "y": 3},
- {"matrix": [6, 4], "x": 5.5, "y": 3},
- {"matrix": [6, 5], "x": 6.5, "y": 3},
- {"matrix": [6, 6], "x": 7.5, "y": 3},
- {"matrix": [7, 0], "x": 9.5, "y": 3},
-
- {"matrix": [7, 1], "x": 10.5, "y": 3},
- {"matrix": [7, 2], "x": 11.5, "y": 3},
- {"matrix": [7, 3], "x": 12.5, "y": 3},
- {"matrix": [7, 4], "x": 13.5, "y": 3},
- {"matrix": [7, 5], "x": 14.5, "y": 3},
- {"matrix": [7, 6], "x": 15.5, "y": 3, "w": 1.75},
- {"matrix": [7, 7], "x": 17.25, "y": 3},
-
- {"matrix": [8, 1], "x": 1.25, "y": 4, "w": 1.5},
- {"matrix": [8, 3], "x": 4, "y": 4, "w": 1.5},
- {"matrix": [8, 5], "x": 5.5, "y": 4, "w": 2.25},
- {"matrix": [8, 6], "x": 7.75, "y": 4},
- {"matrix": [9, 1], "x": 9.75, "y": 4, "w": 1.25},
- {"matrix": [9, 2], "x": 11, "y": 4, "w": 1.5},
- {"matrix": [9, 3], "x": 12.5, "y": 4, "w": 1.5},
- {"matrix": [9, 7], "x": 16.75, "y": 4, "w": 1.5}
- ]
+ "build": {
+ "lto": true
+ },
+ "diode_direction": "COL2ROW",
+ "encoder": {
+ "rotary": [
+ {"pin_a": "D3", "pin_b": "D2"}
+ ]
+ },
+ "features": {
+ "bootmagic": true,
+ "encoder": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": true
+ },
+ "indicators": {
+ "caps_lock": "D6",
+ "num_lock": "D4",
+ "scroll_lock": "D7"
+ },
+ "matrix_pins": {
+ "cols": ["F0", "D0", "C7", "C6", "B6", "B5", "B4", "D1"],
+ "rows": ["F1", "E6", "F4", "B1", "F5", "B2", "F6", "B3", "F7", "B7"]
+ },
+ "processor": "atmega32u4",
+ "rgblight": {
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ },
+ "led_count": 16
+ },
+ "url": "https://sneakbox.design",
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x0005",
+ "vid": "0x5342"
+ },
+ "ws2812": {
+ "pin": "D5"
+ },
+ "layouts": {
+ "LAYOUT_alice": {
+ "layout": [
+ {"matrix": [2, 0], "x": 0, "y": 0},
+ {"matrix": [0, 0], "x": 1.25, "y": 0},
+ {"matrix": [0, 1], "x": 2.25, "y": 0},
+ {"matrix": [0, 2], "x": 3.25, "y": 0},
+ {"matrix": [0, 3], "x": 4.25, "y": 0},
+ {"matrix": [0, 4], "x": 5.25, "y": 0},
+ {"matrix": [0, 5], "x": 6.25, "y": 0},
+ {"matrix": [0, 6], "x": 7.25, "y": 0},
+ {"matrix": [1, 0], "x": 10.25, "y": 0},
+ {"matrix": [1, 1], "x": 11.25, "y": 0},
+ {"matrix": [1, 2], "x": 12.25, "y": 0},
+ {"matrix": [1, 3], "x": 13.25, "y": 0},
+ {"matrix": [1, 4], "x": 14.25, "y": 0},
+ {"matrix": [1, 5], "x": 15.25, "y": 0},
+ {"matrix": [1, 6], "x": 16.25, "y": 0, "w": 2},
+ {"matrix": [4, 0], "x": 0, "y": 1},
+ {"matrix": [2, 1], "x": 1.25, "y": 1, "w": 1.5},
+ {"matrix": [2, 2], "x": 2.75, "y": 1},
+ {"matrix": [2, 3], "x": 3.75, "y": 1},
+ {"matrix": [2, 4], "x": 4.75, "y": 1},
+ {"matrix": [2, 5], "x": 5.75, "y": 1},
+ {"matrix": [2, 6], "x": 6.75, "y": 1},
+ {"matrix": [3, 0], "x": 9.75, "y": 1},
+ {"matrix": [3, 1], "x": 10.75, "y": 1},
+ {"matrix": [3, 2], "x": 11.75, "y": 1},
+ {"matrix": [3, 3], "x": 12.75, "y": 1},
+ {"matrix": [3, 4], "x": 13.75, "y": 1},
+ {"matrix": [3, 5], "x": 14.75, "y": 1},
+ {"matrix": [3, 6], "x": 15.75, "y": 1},
+ {"matrix": [3, 7], "x": 16.75, "y": 1, "w": 1.5},
+ {"matrix": [6, 0], "x": 0, "y": 2},
+ {"matrix": [4, 1], "x": 1.25, "y": 2, "w": 1.75},
+ {"matrix": [4, 2], "x": 3, "y": 2},
+ {"matrix": [4, 3], "x": 4, "y": 2},
+ {"matrix": [4, 4], "x": 5, "y": 2},
+ {"matrix": [4, 5], "x": 6, "y": 2},
+ {"matrix": [4, 6], "x": 7, "y": 2},
+ {"matrix": [5, 0], "x": 10, "y": 2},
+ {"matrix": [5, 1], "x": 11, "y": 2},
+ {"matrix": [5, 2], "x": 12, "y": 2},
+ {"matrix": [5, 3], "x": 13, "y": 2},
+ {"matrix": [5, 4], "x": 14, "y": 2},
+ {"matrix": [5, 5], "x": 15, "y": 2},
+ {"matrix": [5, 6], "x": 16, "y": 2, "w": 2.25},
+ {"matrix": [6, 1], "x": 1.25, "y": 3, "w": 2.25},
+ {"matrix": [6, 2], "x": 3.5, "y": 3},
+ {"matrix": [6, 3], "x": 4.5, "y": 3},
+ {"matrix": [6, 4], "x": 5.5, "y": 3},
+ {"matrix": [6, 5], "x": 6.5, "y": 3},
+ {"matrix": [6, 6], "x": 7.5, "y": 3},
+ {"matrix": [7, 0], "x": 9.5, "y": 3},
+ {"matrix": [7, 1], "x": 10.5, "y": 3},
+ {"matrix": [7, 2], "x": 11.5, "y": 3},
+ {"matrix": [7, 3], "x": 12.5, "y": 3},
+ {"matrix": [7, 4], "x": 13.5, "y": 3},
+ {"matrix": [7, 5], "x": 14.5, "y": 3},
+ {"matrix": [7, 6], "x": 15.5, "y": 3, "w": 1.75},
+ {"matrix": [7, 7], "x": 17.25, "y": 3},
+ {"matrix": [8, 1], "x": 1.25, "y": 4, "w": 1.5},
+ {"matrix": [8, 3], "x": 4, "y": 4, "w": 1.5},
+ {"matrix": [8, 5], "x": 5.5, "y": 4, "w": 2.25},
+ {"matrix": [8, 6], "x": 7.75, "y": 4},
+ {"matrix": [9, 1], "x": 9.75, "y": 4, "w": 1.25},
+ {"matrix": [9, 2], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [9, 3], "x": 12.5, "y": 4, "w": 1.5},
+ {"matrix": [9, 7], "x": 16.75, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_alice_split_bs": {
+ "layout": [
+ {"matrix": [2, 0], "x": 0, "y": 0},
+ {"matrix": [0, 0], "x": 1.25, "y": 0},
+ {"matrix": [0, 1], "x": 2.25, "y": 0},
+ {"matrix": [0, 2], "x": 3.25, "y": 0},
+ {"matrix": [0, 3], "x": 4.25, "y": 0},
+ {"matrix": [0, 4], "x": 5.25, "y": 0},
+ {"matrix": [0, 5], "x": 6.25, "y": 0},
+ {"matrix": [0, 6], "x": 7.25, "y": 0},
+ {"matrix": [1, 0], "x": 10.25, "y": 0},
+ {"matrix": [1, 1], "x": 11.25, "y": 0},
+ {"matrix": [1, 2], "x": 12.25, "y": 0},
+ {"matrix": [1, 3], "x": 13.25, "y": 0},
+ {"matrix": [1, 4], "x": 14.25, "y": 0},
+ {"matrix": [1, 5], "x": 15.25, "y": 0},
+ {"matrix": [1, 6], "x": 16.25, "y": 0},
+ {"matrix": [1, 7], "x": 17.25, "y": 0},
+ {"matrix": [4, 0], "x": 0, "y": 1},
+ {"matrix": [2, 1], "x": 1.25, "y": 1, "w": 1.5},
+ {"matrix": [2, 2], "x": 2.75, "y": 1},
+ {"matrix": [2, 3], "x": 3.75, "y": 1},
+ {"matrix": [2, 4], "x": 4.75, "y": 1},
+ {"matrix": [2, 5], "x": 5.75, "y": 1},
+ {"matrix": [2, 6], "x": 6.75, "y": 1},
+ {"matrix": [3, 0], "x": 9.75, "y": 1},
+ {"matrix": [3, 1], "x": 10.75, "y": 1},
+ {"matrix": [3, 2], "x": 11.75, "y": 1},
+ {"matrix": [3, 3], "x": 12.75, "y": 1},
+ {"matrix": [3, 4], "x": 13.75, "y": 1},
+ {"matrix": [3, 5], "x": 14.75, "y": 1},
+ {"matrix": [3, 6], "x": 15.75, "y": 1},
+ {"matrix": [3, 7], "x": 16.75, "y": 1, "w": 1.5},
+ {"matrix": [6, 0], "x": 0, "y": 2},
+ {"matrix": [4, 1], "x": 1.25, "y": 2, "w": 1.75},
+ {"matrix": [4, 2], "x": 3, "y": 2},
+ {"matrix": [4, 3], "x": 4, "y": 2},
+ {"matrix": [4, 4], "x": 5, "y": 2},
+ {"matrix": [4, 5], "x": 6, "y": 2},
+ {"matrix": [4, 6], "x": 7, "y": 2},
+ {"matrix": [5, 0], "x": 10, "y": 2},
+ {"matrix": [5, 1], "x": 11, "y": 2},
+ {"matrix": [5, 2], "x": 12, "y": 2},
+ {"matrix": [5, 3], "x": 13, "y": 2},
+ {"matrix": [5, 4], "x": 14, "y": 2},
+ {"matrix": [5, 5], "x": 15, "y": 2},
+ {"matrix": [5, 6], "x": 16, "y": 2, "w": 2.25},
+ {"matrix": [6, 1], "x": 1.25, "y": 3, "w": 2.25},
+ {"matrix": [6, 2], "x": 3.5, "y": 3},
+ {"matrix": [6, 3], "x": 4.5, "y": 3},
+ {"matrix": [6, 4], "x": 5.5, "y": 3},
+ {"matrix": [6, 5], "x": 6.5, "y": 3},
+ {"matrix": [6, 6], "x": 7.5, "y": 3},
+ {"matrix": [7, 0], "x": 9.5, "y": 3},
+ {"matrix": [7, 1], "x": 10.5, "y": 3},
+ {"matrix": [7, 2], "x": 11.5, "y": 3},
+ {"matrix": [7, 3], "x": 12.5, "y": 3},
+ {"matrix": [7, 4], "x": 13.5, "y": 3},
+ {"matrix": [7, 5], "x": 14.5, "y": 3},
+ {"matrix": [7, 6], "x": 15.5, "y": 3, "w": 1.75},
+ {"matrix": [7, 7], "x": 17.25, "y": 3},
+ {"matrix": [8, 1], "x": 1.25, "y": 4, "w": 1.5},
+ {"matrix": [8, 3], "x": 4, "y": 4, "w": 1.5},
+ {"matrix": [8, 5], "x": 5.5, "y": 4, "w": 2.25},
+ {"matrix": [8, 6], "x": 7.75, "y": 4},
+ {"matrix": [9, 1], "x": 9.75, "y": 4, "w": 1.25},
+ {"matrix": [9, 2], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [9, 3], "x": 12.5, "y": 4, "w": 1.5},
+ {"matrix": [9, 7], "x": 16.75, "y": 4, "w": 1.5}
+ ]
+ }
}
- }
}
From 3a65032a3b0e910c4a881ee598e048bc9f7a8169 Mon Sep 17 00:00:00 2001
From: SneakboxKB <67670271+SneakboxKB@users.noreply.github.com>
Date: Wed, 16 Jul 2025 14:52:39 -0500
Subject: [PATCH 09/11] Update keyboards/sneakbox/m4m5/keymaps/alice/keymap.c
Co-authored-by: Joel Challis
---
keyboards/sneakbox/m4m5/keymaps/alice/keymap.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/keyboards/sneakbox/m4m5/keymaps/alice/keymap.c b/keyboards/sneakbox/m4m5/keymaps/alice/keymap.c
index 174cc57766c..8b8f6c2180f 100644
--- a/keyboards/sneakbox/m4m5/keymaps/alice/keymap.c
+++ b/keyboards/sneakbox/m4m5/keymaps/alice/keymap.c
@@ -40,7 +40,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
- [_BASE] = { ENCODER_CCW_CW(KC_1, KC_2)},
- [_FN] = { ENCODER_CCW_CW(KC_1, KC_2)}
+ [_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
+ [_FN] = { ENCODER_CCW_CW(_______, _______)}
};
#endif
From 70ce6d63416299c997ea001843852d1c503cf5b2 Mon Sep 17 00:00:00 2001
From: SneakboxKB <67670271+SneakboxKB@users.noreply.github.com>
Date: Wed, 16 Jul 2025 14:52:48 -0500
Subject: [PATCH 10/11] Update keyboards/sneakbox/m4m5/keymaps/default/keymap.c
Co-authored-by: Joel Challis
---
keyboards/sneakbox/m4m5/keymaps/default/keymap.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/keyboards/sneakbox/m4m5/keymaps/default/keymap.c b/keyboards/sneakbox/m4m5/keymaps/default/keymap.c
index b11b66887eb..7dca6a6bbd3 100644
--- a/keyboards/sneakbox/m4m5/keymaps/default/keymap.c
+++ b/keyboards/sneakbox/m4m5/keymaps/default/keymap.c
@@ -40,7 +40,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
- [_BASE] = { ENCODER_CCW_CW(KC_1, KC_2)},
- [_FN] = { ENCODER_CCW_CW(KC_1, KC_2)}
+ [_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
+ [_FN] = { ENCODER_CCW_CW(_______, _______)}
};
#endif
From adc80c124027d6d29afbdb33936bb48e8c2073c7 Mon Sep 17 00:00:00 2001
From: SneakboxKB <67670271+SneakboxKB@users.noreply.github.com>
Date: Wed, 16 Jul 2025 14:53:00 -0500
Subject: [PATCH 11/11] Update keyboards/sneakbox/m4m5/readme.md
Co-authored-by: Joel Challis
---
keyboards/sneakbox/m4m5/readme.md | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/keyboards/sneakbox/m4m5/readme.md b/keyboards/sneakbox/m4m5/readme.md
index 1a040dfea16..3bba688862c 100644
--- a/keyboards/sneakbox/m4m5/readme.md
+++ b/keyboards/sneakbox/m4m5/readme.md
@@ -12,6 +12,10 @@ Make example for this keyboard (after setting up your build environment):
make sneakbox/m4m5:default
+Flashing example for this keyboard:
+
+ make sneakbox/m4m5: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