From a7afa58fb633e38cd39f8610d89182c04855a074 Mon Sep 17 00:00:00 2001
From: James Young <18669334+noroadsleft@users.noreply.github.com>
Date: Sun, 24 Sep 2023 22:39:18 -0700
Subject: YMDK Melody96 Break-Up (#22121)
---
keyboards/ymdk/melody96/config.h | 7 -
keyboards/ymdk/melody96/hotswap/info.json | 501 ++++++++++
.../ymdk/melody96/hotswap/keymaps/default/keymap.c | 23 +
.../ymdk/melody96/hotswap/keymaps/via/keymap.c | 23 +
.../ymdk/melody96/hotswap/keymaps/via/rules.mk | 2 +
.../ymdk/melody96/hotswap/keymaps/zunger/config.h | 22 +
.../ymdk/melody96/hotswap/keymaps/zunger/keymap.c | 489 +++++++++
.../ymdk/melody96/hotswap/keymaps/zunger/readme.md | 78 ++
.../ymdk/melody96/hotswap/keymaps/zunger/rules.mk | 2 +
keyboards/ymdk/melody96/hotswap/matrix_diagram.md | 23 +
keyboards/ymdk/melody96/hotswap/readme.md | 19 +
keyboards/ymdk/melody96/hotswap/rules.mk | 1 +
keyboards/ymdk/melody96/info.json | 1039 --------------------
keyboards/ymdk/melody96/keymaps/crilith/keymap.c | 38 -
keyboards/ymdk/melody96/keymaps/default/keymap.c | 20 -
.../keymaps/default_96_with60_split_num0/keymap.c | 36 -
keyboards/ymdk/melody96/keymaps/dvz/config.h | 36 -
keyboards/ymdk/melody96/keymaps/dvz/keymap.c | 161 ---
keyboards/ymdk/melody96/keymaps/dvz/readme.md | 3 -
keyboards/ymdk/melody96/keymaps/dvz/rules.mk | 5 -
.../ymdk/melody96/keymaps/konstantin/config.h | 3 -
.../ymdk/melody96/keymaps/konstantin/keymap.c | 77 --
.../ymdk/melody96/keymaps/konstantin/rules.mk | 19 -
keyboards/ymdk/melody96/keymaps/via/keymap.c | 36 -
keyboards/ymdk/melody96/keymaps/via/rules.mk | 2 -
keyboards/ymdk/melody96/keymaps/zunger/config.h | 22 -
keyboards/ymdk/melody96/keymaps/zunger/keymap.c | 489 ---------
keyboards/ymdk/melody96/keymaps/zunger/readme.md | 78 --
keyboards/ymdk/melody96/keymaps/zunger/rules.mk | 2 -
keyboards/ymdk/melody96/matrix_diagram.md | 35 -
keyboards/ymdk/melody96/readme.md | 19 -
keyboards/ymdk/melody96/rules.mk | 13 +-
keyboards/ymdk/melody96/soldered/config.h | 7 +
keyboards/ymdk/melody96/soldered/info.json | 1039 ++++++++++++++++++++
.../melody96/soldered/keymaps/crilith/keymap.c | 38 +
.../melody96/soldered/keymaps/default/keymap.c | 20 +
.../keymaps/default_96_with60_split_num0/keymap.c | 36 +
.../ymdk/melody96/soldered/keymaps/dvz/config.h | 36 +
.../ymdk/melody96/soldered/keymaps/dvz/keymap.c | 161 +++
.../ymdk/melody96/soldered/keymaps/dvz/readme.md | 3 +
.../ymdk/melody96/soldered/keymaps/dvz/rules.mk | 5 +
.../melody96/soldered/keymaps/konstantin/config.h | 3 +
.../melody96/soldered/keymaps/konstantin/keymap.c | 77 ++
.../melody96/soldered/keymaps/konstantin/rules.mk | 19 +
.../ymdk/melody96/soldered/keymaps/via/keymap.c | 36 +
.../ymdk/melody96/soldered/keymaps/via/rules.mk | 2 +
keyboards/ymdk/melody96/soldered/matrix_diagram.md | 35 +
keyboards/ymdk/melody96/soldered/readme.md | 19 +
keyboards/ymdk/melody96/soldered/rules.mk | 12 +
49 files changed, 2732 insertions(+), 2139 deletions(-)
delete mode 100644 keyboards/ymdk/melody96/config.h
create mode 100644 keyboards/ymdk/melody96/hotswap/info.json
create mode 100644 keyboards/ymdk/melody96/hotswap/keymaps/default/keymap.c
create mode 100644 keyboards/ymdk/melody96/hotswap/keymaps/via/keymap.c
create mode 100644 keyboards/ymdk/melody96/hotswap/keymaps/via/rules.mk
create mode 100644 keyboards/ymdk/melody96/hotswap/keymaps/zunger/config.h
create mode 100644 keyboards/ymdk/melody96/hotswap/keymaps/zunger/keymap.c
create mode 100644 keyboards/ymdk/melody96/hotswap/keymaps/zunger/readme.md
create mode 100644 keyboards/ymdk/melody96/hotswap/keymaps/zunger/rules.mk
create mode 100644 keyboards/ymdk/melody96/hotswap/matrix_diagram.md
create mode 100644 keyboards/ymdk/melody96/hotswap/readme.md
create mode 100644 keyboards/ymdk/melody96/hotswap/rules.mk
delete mode 100644 keyboards/ymdk/melody96/info.json
delete mode 100644 keyboards/ymdk/melody96/keymaps/crilith/keymap.c
delete mode 100644 keyboards/ymdk/melody96/keymaps/default/keymap.c
delete mode 100644 keyboards/ymdk/melody96/keymaps/default_96_with60_split_num0/keymap.c
delete mode 100644 keyboards/ymdk/melody96/keymaps/dvz/config.h
delete mode 100644 keyboards/ymdk/melody96/keymaps/dvz/keymap.c
delete mode 100644 keyboards/ymdk/melody96/keymaps/dvz/readme.md
delete mode 100644 keyboards/ymdk/melody96/keymaps/dvz/rules.mk
delete mode 100644 keyboards/ymdk/melody96/keymaps/konstantin/config.h
delete mode 100644 keyboards/ymdk/melody96/keymaps/konstantin/keymap.c
delete mode 100644 keyboards/ymdk/melody96/keymaps/konstantin/rules.mk
delete mode 100644 keyboards/ymdk/melody96/keymaps/via/keymap.c
delete mode 100644 keyboards/ymdk/melody96/keymaps/via/rules.mk
delete mode 100644 keyboards/ymdk/melody96/keymaps/zunger/config.h
delete mode 100644 keyboards/ymdk/melody96/keymaps/zunger/keymap.c
delete mode 100644 keyboards/ymdk/melody96/keymaps/zunger/readme.md
delete mode 100644 keyboards/ymdk/melody96/keymaps/zunger/rules.mk
delete mode 100644 keyboards/ymdk/melody96/matrix_diagram.md
delete mode 100644 keyboards/ymdk/melody96/readme.md
create mode 100644 keyboards/ymdk/melody96/soldered/config.h
create mode 100644 keyboards/ymdk/melody96/soldered/info.json
create mode 100644 keyboards/ymdk/melody96/soldered/keymaps/crilith/keymap.c
create mode 100644 keyboards/ymdk/melody96/soldered/keymaps/default/keymap.c
create mode 100644 keyboards/ymdk/melody96/soldered/keymaps/default_96_with60_split_num0/keymap.c
create mode 100644 keyboards/ymdk/melody96/soldered/keymaps/dvz/config.h
create mode 100644 keyboards/ymdk/melody96/soldered/keymaps/dvz/keymap.c
create mode 100644 keyboards/ymdk/melody96/soldered/keymaps/dvz/readme.md
create mode 100644 keyboards/ymdk/melody96/soldered/keymaps/dvz/rules.mk
create mode 100644 keyboards/ymdk/melody96/soldered/keymaps/konstantin/config.h
create mode 100644 keyboards/ymdk/melody96/soldered/keymaps/konstantin/keymap.c
create mode 100644 keyboards/ymdk/melody96/soldered/keymaps/konstantin/rules.mk
create mode 100644 keyboards/ymdk/melody96/soldered/keymaps/via/keymap.c
create mode 100644 keyboards/ymdk/melody96/soldered/keymaps/via/rules.mk
create mode 100644 keyboards/ymdk/melody96/soldered/matrix_diagram.md
create mode 100644 keyboards/ymdk/melody96/soldered/readme.md
create mode 100644 keyboards/ymdk/melody96/soldered/rules.mk
(limited to 'keyboards/ymdk/melody96')
diff --git a/keyboards/ymdk/melody96/config.h b/keyboards/ymdk/melody96/config.h
deleted file mode 100644
index 5f36081323..0000000000
--- a/keyboards/ymdk/melody96/config.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#pragma once
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
diff --git a/keyboards/ymdk/melody96/hotswap/info.json b/keyboards/ymdk/melody96/hotswap/info.json
new file mode 100644
index 0000000000..61112d88ab
--- /dev/null
+++ b/keyboards/ymdk/melody96/hotswap/info.json
@@ -0,0 +1,501 @@
+{
+ "keyboard_name": "Melody96 Hotswap",
+ "manufacturer": "YMDK",
+ "url": "",
+ "maintainer": "qmk",
+ "usb": {
+ "vid": "0x594D",
+ "pid": "0x4D97",
+ "device_version": "0.0.1"
+ },
+ "matrix_pins": {
+ "cols": ["D0", "D1", "D2", "D3", "D5", "D4", "D6", "D7", "B4"],
+ "rows": ["B7", "B3", "B2", "B1", "B0", "E6", "F0", "F1", "F4", "F5", "F6", "F7"]
+ },
+ "diode_direction": "ROW2COL",
+ "features": {
+ "audio": false,
+ "backlight": true,
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": true
+ },
+ "backlight": {
+ "pin": "B6",
+ "levels": 5
+ },
+ "rgblight": {
+ "led_count": 18,
+ "saturation_steps": 8,
+ "brightness_steps": 8,
+ "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": "E2"
+ },
+ "indicators": {
+ "caps_lock": "C7",
+ "num_lock": "C6",
+ "scroll_lock": "B5",
+ "on_state": 0
+ },
+ "bootmagic": {
+ "matrix": [5, 0]
+ },
+ "processor": "atmega32u4",
+ "bootloader": "atmel-dfu",
+ "community_layouts": ["96_ansi", "96_iso"],
+ "layouts": {
+ "LAYOUT_96_iso": {
+ "layout": [
+ {"matrix": [5, 0], "x": 0, "y": 0},
+ {"matrix": [5, 1], "x": 1, "y": 0},
+ {"matrix": [5, 2], "x": 2, "y": 0},
+ {"matrix": [5, 3], "x": 3, "y": 0},
+ {"matrix": [5, 4], "x": 4, "y": 0},
+ {"matrix": [5, 5], "x": 5, "y": 0},
+ {"matrix": [5, 6], "x": 6, "y": 0},
+ {"matrix": [5, 7], "x": 7, "y": 0},
+ {"matrix": [5, 8], "x": 8, "y": 0},
+ {"matrix": [11, 8], "x": 9, "y": 0},
+ {"matrix": [11, 7], "x": 10, "y": 0},
+ {"matrix": [11, 5], "x": 11, "y": 0},
+ {"matrix": [11, 4], "x": 12, "y": 0},
+ {"matrix": [11, 3], "x": 13, "y": 0},
+ {"matrix": [11, 6], "x": 14, "y": 0},
+ {"matrix": [11, 2], "x": 15, "y": 0},
+ {"matrix": [11, 1], "x": 16, "y": 0},
+ {"matrix": [11, 0], "x": 17, "y": 0},
+ {"matrix": [6, 3], "x": 18, "y": 0},
+
+ {"matrix": [4, 0], "x": 0, "y": 1},
+ {"matrix": [4, 1], "x": 1, "y": 1},
+ {"matrix": [4, 2], "x": 2, "y": 1},
+ {"matrix": [4, 3], "x": 3, "y": 1},
+ {"matrix": [4, 4], "x": 4, "y": 1},
+ {"matrix": [4, 5], "x": 5, "y": 1},
+ {"matrix": [4, 6], "x": 6, "y": 1},
+ {"matrix": [4, 7], "x": 7, "y": 1},
+ {"matrix": [4, 8], "x": 8, "y": 1},
+ {"matrix": [10, 8], "x": 9, "y": 1},
+ {"matrix": [10, 7], "x": 10, "y": 1},
+ {"matrix": [10, 5], "x": 11, "y": 1},
+ {"matrix": [10, 4], "x": 12, "y": 1},
+ {"matrix": [10, 6], "x": 13, "y": 1, "w": 2},
+ {"matrix": [10, 2], "x": 15, "y": 1},
+ {"matrix": [10, 1], "x": 16, "y": 1},
+ {"matrix": [10, 0], "x": 17, "y": 1},
+ {"matrix": [6, 4], "x": 18, "y": 1},
+
+ {"matrix": [3, 0], "x": 0, "y": 2, "w": 1.5},
+ {"matrix": [3, 1], "x": 1.5, "y": 2},
+ {"matrix": [3, 2], "x": 2.5, "y": 2},
+ {"matrix": [3, 3], "x": 3.5, "y": 2},
+ {"matrix": [3, 4], "x": 4.5, "y": 2},
+ {"matrix": [3, 5], "x": 5.5, "y": 2},
+ {"matrix": [3, 6], "x": 6.5, "y": 2},
+ {"matrix": [3, 7], "x": 7.5, "y": 2},
+ {"matrix": [3, 8], "x": 8.5, "y": 2},
+ {"matrix": [9, 8], "x": 9.5, "y": 2},
+ {"matrix": [9, 7], "x": 10.5, "y": 2},
+ {"matrix": [9, 5], "x": 11.5, "y": 2},
+ {"matrix": [9, 4], "x": 12.5, "y": 2},
+ {"matrix": [9, 6], "x": 15, "y": 2},
+ {"matrix": [9, 2], "x": 16, "y": 2},
+ {"matrix": [9, 1], "x": 17, "y": 2},
+ {"matrix": [8, 0], "x": 18, "y": 2, "h": 2},
+
+ {"matrix": [2, 0], "x": 0, "y": 3, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 3},
+ {"matrix": [2, 2], "x": 2.75, "y": 3},
+ {"matrix": [2, 3], "x": 3.75, "y": 3},
+ {"matrix": [2, 4], "x": 4.75, "y": 3},
+ {"matrix": [2, 5], "x": 5.75, "y": 3},
+ {"matrix": [2, 6], "x": 6.75, "y": 3},
+ {"matrix": [2, 7], "x": 7.75, "y": 3},
+ {"matrix": [2, 8], "x": 8.75, "y": 3},
+ {"matrix": [8, 8], "x": 9.75, "y": 3},
+ {"matrix": [8, 7], "x": 10.75, "y": 3},
+ {"matrix": [8, 5], "x": 11.75, "y": 3},
+ {"matrix": [8, 4], "x": 12.75, "y": 3},
+ {"matrix": [9, 3], "x": 13.75, "y": 2, "w": 1.25, "h": 2},
+ {"matrix": [8, 6], "x": 15, "y": 3},
+ {"matrix": [8, 2], "x": 16, "y": 3},
+ {"matrix": [8, 1], "x": 17, "y": 3},
+
+ {"matrix": [1, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [1, 1], "x": 1.25, "y": 4},
+ {"matrix": [1, 2], "x": 2.25, "y": 4},
+ {"matrix": [1, 3], "x": 3.25, "y": 4},
+ {"matrix": [1, 4], "x": 4.25, "y": 4},
+ {"matrix": [1, 5], "x": 5.25, "y": 4},
+ {"matrix": [1, 6], "x": 6.25, "y": 4},
+ {"matrix": [1, 7], "x": 7.25, "y": 4},
+ {"matrix": [1, 8], "x": 8.25, "y": 4},
+ {"matrix": [7, 8], "x": 9.25, "y": 4},
+ {"matrix": [7, 7], "x": 10.25, "y": 4},
+ {"matrix": [7, 5], "x": 11.25, "y": 4},
+ {"matrix": [7, 4], "x": 12.25, "y": 4, "w": 1.75},
+ {"matrix": [7, 3], "x": 14, "y": 4},
+ {"matrix": [7, 6], "x": 15, "y": 4},
+ {"matrix": [7, 2], "x": 16, "y": 4},
+ {"matrix": [7, 1], "x": 17, "y": 4},
+ {"matrix": [6, 0], "x": 18, "y": 4, "h": 2},
+
+ {"matrix": [0, 0], "x": 0, "y": 5, "w": 1.25},
+ {"matrix": [0, 1], "x": 1.25, "y": 5, "w": 1.25},
+ {"matrix": [0, 2], "x": 2.5, "y": 5, "w": 1.25},
+ {"matrix": [0, 6], "x": 3.75, "y": 5, "w": 6.25},
+ {"matrix": [0, 8], "x": 10, "y": 5},
+ {"matrix": [0, 7], "x": 11, "y": 5},
+ {"matrix": [0, 5], "x": 12, "y": 5},
+ {"matrix": [0, 4], "x": 13, "y": 5},
+ {"matrix": [0, 3], "x": 14, "y": 5},
+ {"matrix": [6, 6], "x": 15, "y": 5},
+ {"matrix": [6, 2], "x": 16, "y": 5},
+ {"matrix": [6, 1], "x": 17, "y": 5}
+ ]
+ },
+ "LAYOUT_96_iso_rwkl": {
+ "layout": [
+ {"matrix": [5, 0], "x": 0, "y": 0},
+ {"matrix": [5, 1], "x": 1, "y": 0},
+ {"matrix": [5, 2], "x": 2, "y": 0},
+ {"matrix": [5, 3], "x": 3, "y": 0},
+ {"matrix": [5, 4], "x": 4, "y": 0},
+ {"matrix": [5, 5], "x": 5, "y": 0},
+ {"matrix": [5, 6], "x": 6, "y": 0},
+ {"matrix": [5, 7], "x": 7, "y": 0},
+ {"matrix": [5, 8], "x": 8, "y": 0},
+ {"matrix": [11, 8], "x": 9, "y": 0},
+ {"matrix": [11, 7], "x": 10, "y": 0},
+ {"matrix": [11, 5], "x": 11, "y": 0},
+ {"matrix": [11, 4], "x": 12, "y": 0},
+ {"matrix": [11, 3], "x": 13, "y": 0},
+ {"matrix": [11, 6], "x": 14, "y": 0},
+ {"matrix": [11, 2], "x": 15, "y": 0},
+ {"matrix": [11, 1], "x": 16, "y": 0},
+ {"matrix": [11, 0], "x": 17, "y": 0},
+ {"matrix": [6, 3], "x": 18, "y": 0},
+
+ {"matrix": [4, 0], "x": 0, "y": 1},
+ {"matrix": [4, 1], "x": 1, "y": 1},
+ {"matrix": [4, 2], "x": 2, "y": 1},
+ {"matrix": [4, 3], "x": 3, "y": 1},
+ {"matrix": [4, 4], "x": 4, "y": 1},
+ {"matrix": [4, 5], "x": 5, "y": 1},
+ {"matrix": [4, 6], "x": 6, "y": 1},
+ {"matrix": [4, 7], "x": 7, "y": 1},
+ {"matrix": [4, 8], "x": 8, "y": 1},
+ {"matrix": [10, 8], "x": 9, "y": 1},
+ {"matrix": [10, 7], "x": 10, "y": 1},
+ {"matrix": [10, 5], "x": 11, "y": 1},
+ {"matrix": [10, 4], "x": 12, "y": 1},
+ {"matrix": [10, 6], "x": 13, "y": 1, "w": 2},
+ {"matrix": [10, 2], "x": 15, "y": 1},
+ {"matrix": [10, 1], "x": 16, "y": 1},
+ {"matrix": [10, 0], "x": 17, "y": 1},
+ {"matrix": [6, 4], "x": 18, "y": 1},
+
+ {"matrix": [3, 0], "x": 0, "y": 2, "w": 1.5},
+ {"matrix": [3, 1], "x": 1.5, "y": 2},
+ {"matrix": [3, 2], "x": 2.5, "y": 2},
+ {"matrix": [3, 3], "x": 3.5, "y": 2},
+ {"matrix": [3, 4], "x": 4.5, "y": 2},
+ {"matrix": [3, 5], "x": 5.5, "y": 2},
+ {"matrix": [3, 6], "x": 6.5, "y": 2},
+ {"matrix": [3, 7], "x": 7.5, "y": 2},
+ {"matrix": [3, 8], "x": 8.5, "y": 2},
+ {"matrix": [9, 8], "x": 9.5, "y": 2},
+ {"matrix": [9, 7], "x": 10.5, "y": 2},
+ {"matrix": [9, 5], "x": 11.5, "y": 2},
+ {"matrix": [9, 4], "x": 12.5, "y": 2},
+ {"matrix": [9, 6], "x": 15, "y": 2},
+ {"matrix": [9, 2], "x": 16, "y": 2},
+ {"matrix": [9, 1], "x": 17, "y": 2},
+ {"matrix": [8, 0], "x": 18, "y": 2, "h": 2},
+
+ {"matrix": [2, 0], "x": 0, "y": 3, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 3},
+ {"matrix": [2, 2], "x": 2.75, "y": 3},
+ {"matrix": [2, 3], "x": 3.75, "y": 3},
+ {"matrix": [2, 4], "x": 4.75, "y": 3},
+ {"matrix": [2, 5], "x": 5.75, "y": 3},
+ {"matrix": [2, 6], "x": 6.75, "y": 3},
+ {"matrix": [2, 7], "x": 7.75, "y": 3},
+ {"matrix": [2, 8], "x": 8.75, "y": 3},
+ {"matrix": [8, 8], "x": 9.75, "y": 3},
+ {"matrix": [8, 7], "x": 10.75, "y": 3},
+ {"matrix": [8, 5], "x": 11.75, "y": 3},
+ {"matrix": [8, 4], "x": 12.75, "y": 3},
+ {"matrix": [9, 3], "x": 13.75, "y": 2, "w": 1.25, "h": 2},
+ {"matrix": [8, 6], "x": 15, "y": 3},
+ {"matrix": [8, 2], "x": 16, "y": 3},
+ {"matrix": [8, 1], "x": 17, "y": 3},
+
+ {"matrix": [1, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [1, 1], "x": 1.25, "y": 4},
+ {"matrix": [1, 2], "x": 2.25, "y": 4},
+ {"matrix": [1, 3], "x": 3.25, "y": 4},
+ {"matrix": [1, 4], "x": 4.25, "y": 4},
+ {"matrix": [1, 5], "x": 5.25, "y": 4},
+ {"matrix": [1, 6], "x": 6.25, "y": 4},
+ {"matrix": [1, 7], "x": 7.25, "y": 4},
+ {"matrix": [1, 8], "x": 8.25, "y": 4},
+ {"matrix": [7, 8], "x": 9.25, "y": 4},
+ {"matrix": [7, 7], "x": 10.25, "y": 4},
+ {"matrix": [7, 5], "x": 11.25, "y": 4},
+ {"matrix": [7, 4], "x": 12.25, "y": 4, "w": 1.75},
+ {"matrix": [7, 3], "x": 14, "y": 4},
+ {"matrix": [7, 6], "x": 15, "y": 4},
+ {"matrix": [7, 2], "x": 16, "y": 4},
+ {"matrix": [7, 1], "x": 17, "y": 4},
+ {"matrix": [6, 0], "x": 18, "y": 4, "h": 2},
+
+ {"matrix": [0, 0], "x": 0, "y": 5, "w": 1.25},
+ {"matrix": [0, 1], "x": 1.25, "y": 5, "w": 1.25},
+ {"matrix": [0, 2], "x": 2.5, "y": 5, "w": 1.25},
+ {"matrix": [0, 6], "x": 3.75, "y": 5, "w": 6.25},
+ {"matrix": [0, 8], "x": 10, "y": 5, "w": 1.5},
+ {"matrix": [0, 5], "x": 11.5, "y": 5, "w": 1.5},
+ {"matrix": [0, 4], "x": 13, "y": 5},
+ {"matrix": [0, 3], "x": 14, "y": 5},
+ {"matrix": [6, 6], "x": 15, "y": 5},
+ {"matrix": [6, 2], "x": 16, "y": 5},
+ {"matrix": [6, 1], "x": 17, "y": 5}
+ ]
+ },
+ "LAYOUT_96_ansi": {
+ "layout": [
+ {"matrix": [5, 0], "x": 0, "y": 0},
+ {"matrix": [5, 1], "x": 1, "y": 0},
+ {"matrix": [5, 2], "x": 2, "y": 0},
+ {"matrix": [5, 3], "x": 3, "y": 0},
+ {"matrix": [5, 4], "x": 4, "y": 0},
+ {"matrix": [5, 5], "x": 5, "y": 0},
+ {"matrix": [5, 6], "x": 6, "y": 0},
+ {"matrix": [5, 7], "x": 7, "y": 0},
+ {"matrix": [5, 8], "x": 8, "y": 0},
+ {"matrix": [11, 8], "x": 9, "y": 0},
+ {"matrix": [11, 7], "x": 10, "y": 0},
+ {"matrix": [11, 5], "x": 11, "y": 0},
+ {"matrix": [11, 4], "x": 12, "y": 0},
+ {"matrix": [11, 3], "x": 13, "y": 0},
+ {"matrix": [11, 6], "x": 14, "y": 0},
+ {"matrix": [11, 2], "x": 15, "y": 0},
+ {"matrix": [11, 1], "x": 16, "y": 0},
+ {"matrix": [11, 0], "x": 17, "y": 0},
+ {"matrix": [6, 3], "x": 18, "y": 0},
+
+ {"matrix": [4, 0], "x": 0, "y": 1},
+ {"matrix": [4, 1], "x": 1, "y": 1},
+ {"matrix": [4, 2], "x": 2, "y": 1},
+ {"matrix": [4, 3], "x": 3, "y": 1},
+ {"matrix": [4, 4], "x": 4, "y": 1},
+ {"matrix": [4, 5], "x": 5, "y": 1},
+ {"matrix": [4, 6], "x": 6, "y": 1},
+ {"matrix": [4, 7], "x": 7, "y": 1},
+ {"matrix": [4, 8], "x": 8, "y": 1},
+ {"matrix": [10, 8], "x": 9, "y": 1},
+ {"matrix": [10, 7], "x": 10, "y": 1},
+ {"matrix": [10, 5], "x": 11, "y": 1},
+ {"matrix": [10, 4], "x": 12, "y": 1},
+ {"matrix": [10, 6], "x": 13, "y": 1, "w": 2},
+ {"matrix": [10, 2], "x": 15, "y": 1},
+ {"matrix": [10, 1], "x": 16, "y": 1},
+ {"matrix": [10, 0], "x": 17, "y": 1},
+ {"matrix": [6, 4], "x": 18, "y": 1},
+
+ {"matrix": [3, 0], "x": 0, "y": 2, "w": 1.5},
+ {"matrix": [3, 1], "x": 1.5, "y": 2},
+ {"matrix": [3, 2], "x": 2.5, "y": 2},
+ {"matrix": [3, 3], "x": 3.5, "y": 2},
+ {"matrix": [3, 4], "x": 4.5, "y": 2},
+ {"matrix": [3, 5], "x": 5.5, "y": 2},
+ {"matrix": [3, 6], "x": 6.5, "y": 2},
+ {"matrix": [3, 7], "x": 7.5, "y": 2},
+ {"matrix": [3, 8], "x": 8.5, "y": 2},
+ {"matrix": [9, 8], "x": 9.5, "y": 2},
+ {"matrix": [9, 7], "x": 10.5, "y": 2},
+ {"matrix": [9, 5], "x": 11.5, "y": 2},
+ {"matrix": [9, 4], "x": 12.5, "y": 2},
+ {"matrix": [9, 3], "x": 13.5, "y": 2, "w": 1.5},
+ {"matrix": [9, 6], "x": 15, "y": 2},
+ {"matrix": [9, 2], "x": 16, "y": 2},
+ {"matrix": [9, 1], "x": 17, "y": 2},
+ {"matrix": [8, 0], "x": 18, "y": 2, "h": 2},
+
+ {"matrix": [2, 0], "x": 0, "y": 3, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 3},
+ {"matrix": [2, 2], "x": 2.75, "y": 3},
+ {"matrix": [2, 3], "x": 3.75, "y": 3},
+ {"matrix": [2, 4], "x": 4.75, "y": 3},
+ {"matrix": [2, 5], "x": 5.75, "y": 3},
+ {"matrix": [2, 6], "x": 6.75, "y": 3},
+ {"matrix": [2, 7], "x": 7.75, "y": 3},
+ {"matrix": [2, 8], "x": 8.75, "y": 3},
+ {"matrix": [8, 8], "x": 9.75, "y": 3},
+ {"matrix": [8, 7], "x": 10.75, "y": 3},
+ {"matrix": [8, 5], "x": 11.75, "y": 3},
+ {"matrix": [8, 4], "x": 12.75, "y": 3, "w": 2.25},
+ {"matrix": [8, 6], "x": 15, "y": 3},
+ {"matrix": [8, 2], "x": 16, "y": 3},
+ {"matrix": [8, 1], "x": 17, "y": 3},
+
+ {"matrix": [1, 0], "x": 0, "y": 4, "w": 2.25},
+ {"matrix": [1, 2], "x": 2.25, "y": 4},
+ {"matrix": [1, 3], "x": 3.25, "y": 4},
+ {"matrix": [1, 4], "x": 4.25, "y": 4},
+ {"matrix": [1, 5], "x": 5.25, "y": 4},
+ {"matrix": [1, 6], "x": 6.25, "y": 4},
+ {"matrix": [1, 7], "x": 7.25, "y": 4},
+ {"matrix": [1, 8], "x": 8.25, "y": 4},
+ {"matrix": [7, 8], "x": 9.25, "y": 4},
+ {"matrix": [7, 7], "x": 10.25, "y": 4},
+ {"matrix": [7, 5], "x": 11.25, "y": 4},
+ {"matrix": [7, 4], "x": 12.25, "y": 4, "w": 1.75},
+ {"matrix": [7, 3], "x": 14, "y": 4},
+ {"matrix": [7, 6], "x": 15, "y": 4},
+ {"matrix": [7, 2], "x": 16, "y": 4},
+ {"matrix": [7, 1], "x": 17, "y": 4},
+ {"matrix": [6, 0], "x": 18, "y": 4, "h": 2},
+
+ {"matrix": [0, 0], "x": 0, "y": 5, "w": 1.25},
+ {"matrix": [0, 1], "x": 1.25, "y": 5, "w": 1.25},
+ {"matrix": [0, 2], "x": 2.5, "y": 5, "w": 1.25},
+ {"matrix": [0, 6], "x": 3.75, "y": 5, "w": 6.25},
+ {"matrix": [0, 8], "x": 10, "y": 5},
+ {"matrix": [0, 7], "x": 11, "y": 5},
+ {"matrix": [0, 5], "x": 12, "y": 5},
+ {"matrix": [0, 4], "x": 13, "y": 5},
+ {"matrix": [0, 3], "x": 14, "y": 5},
+ {"matrix": [6, 6], "x": 15, "y": 5},
+ {"matrix": [6, 2], "x": 16, "y": 5},
+ {"matrix": [6, 1], "x": 17, "y": 5}
+ ]
+ },
+ "LAYOUT_96_ansi_rwkl": {
+ "layout": [
+ {"matrix": [5, 0], "x": 0, "y": 0},
+ {"matrix": [5, 1], "x": 1, "y": 0},
+ {"matrix": [5, 2], "x": 2, "y": 0},
+ {"matrix": [5, 3], "x": 3, "y": 0},
+ {"matrix": [5, 4], "x": 4, "y": 0},
+ {"matrix": [5, 5], "x": 5, "y": 0},
+ {"matrix": [5, 6], "x": 6, "y": 0},
+ {"matrix": [5, 7], "x": 7, "y": 0},
+ {"matrix": [5, 8], "x": 8, "y": 0},
+ {"matrix": [11, 8], "x": 9, "y": 0},
+ {"matrix": [11, 7], "x": 10, "y": 0},
+ {"matrix": [11, 5], "x": 11, "y": 0},
+ {"matrix": [11, 4], "x": 12, "y": 0},
+ {"matrix": [11, 3], "x": 13, "y": 0},
+ {"matrix": [11, 6], "x": 14, "y": 0},
+ {"matrix": [11, 2], "x": 15, "y": 0},
+ {"matrix": [11, 1], "x": 16, "y": 0},
+ {"matrix": [11, 0], "x": 17, "y": 0},
+ {"matrix": [6, 3], "x": 18, "y": 0},
+
+ {"matrix": [4, 0], "x": 0, "y": 1},
+ {"matrix": [4, 1], "x": 1, "y": 1},
+ {"matrix": [4, 2], "x": 2, "y": 1},
+ {"matrix": [4, 3], "x": 3, "y": 1},
+ {"matrix": [4, 4], "x": 4, "y": 1},
+ {"matrix": [4, 5], "x": 5, "y": 1},
+ {"matrix": [4, 6], "x": 6, "y": 1},
+ {"matrix": [4, 7], "x": 7, "y": 1},
+ {"matrix": [4, 8], "x": 8, "y": 1},
+ {"matrix": [10, 8], "x": 9, "y": 1},
+ {"matrix": [10, 7], "x": 10, "y": 1},
+ {"matrix": [10, 5], "x": 11, "y": 1},
+ {"matrix": [10, 4], "x": 12, "y": 1},
+ {"matrix": [10, 6], "x": 13, "y": 1, "w": 2},
+ {"matrix": [10, 2], "x": 15, "y": 1},
+ {"matrix": [10, 1], "x": 16, "y": 1},
+ {"matrix": [10, 0], "x": 17, "y": 1},
+ {"matrix": [6, 4], "x": 18, "y": 1},
+
+ {"matrix": [3, 0], "x": 0, "y": 2, "w": 1.5},
+ {"matrix": [3, 1], "x": 1.5, "y": 2},
+ {"matrix": [3, 2], "x": 2.5, "y": 2},
+ {"matrix": [3, 3], "x": 3.5, "y": 2},
+ {"matrix": [3, 4], "x": 4.5, "y": 2},
+ {"matrix": [3, 5], "x": 5.5, "y": 2},
+ {"matrix": [3, 6], "x": 6.5, "y": 2},
+ {"matrix": [3, 7], "x": 7.5, "y": 2},
+ {"matrix": [3, 8], "x": 8.5, "y": 2},
+ {"matrix": [9, 8], "x": 9.5, "y": 2},
+ {"matrix": [9, 7], "x": 10.5, "y": 2},
+ {"matrix": [9, 5], "x": 11.5, "y": 2},
+ {"matrix": [9, 4], "x": 12.5, "y": 2},
+ {"matrix": [9, 3], "x": 13.5, "y": 2, "w": 1.5},
+ {"matrix": [9, 6], "x": 15, "y": 2},
+ {"matrix": [9, 2], "x": 16, "y": 2},
+ {"matrix": [9, 1], "x": 17, "y": 2},
+ {"matrix": [8, 0], "x": 18, "y": 2, "h": 2},
+
+ {"matrix": [2, 0], "x": 0, "y": 3, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 3},
+ {"matrix": [2, 2], "x": 2.75, "y": 3},
+ {"matrix": [2, 3], "x": 3.75, "y": 3},
+ {"matrix": [2, 4], "x": 4.75, "y": 3},
+ {"matrix": [2, 5], "x": 5.75, "y": 3},
+ {"matrix": [2, 6], "x": 6.75, "y": 3},
+ {"matrix": [2, 7], "x": 7.75, "y": 3},
+ {"matrix": [2, 8], "x": 8.75, "y": 3},
+ {"matrix": [8, 8], "x": 9.75, "y": 3},
+ {"matrix": [8, 7], "x": 10.75, "y": 3},
+ {"matrix": [8, 5], "x": 11.75, "y": 3},
+ {"matrix": [8, 4], "x": 12.75, "y": 3, "w": 2.25},
+ {"matrix": [8, 6], "x": 15, "y": 3},
+ {"matrix": [8, 2], "x": 16, "y": 3},
+ {"matrix": [8, 1], "x": 17, "y": 3},
+
+ {"matrix": [1, 0], "x": 0, "y": 4, "w": 2.25},
+ {"matrix": [1, 2], "x": 2.25, "y": 4},
+ {"matrix": [1, 3], "x": 3.25, "y": 4},
+ {"matrix": [1, 4], "x": 4.25, "y": 4},
+ {"matrix": [1, 5], "x": 5.25, "y": 4},
+ {"matrix": [1, 6], "x": 6.25, "y": 4},
+ {"matrix": [1, 7], "x": 7.25, "y": 4},
+ {"matrix": [1, 8], "x": 8.25, "y": 4},
+ {"matrix": [7, 8], "x": 9.25, "y": 4},
+ {"matrix": [7, 7], "x": 10.25, "y": 4},
+ {"matrix": [7, 5], "x": 11.25, "y": 4},
+ {"matrix": [7, 4], "x": 12.25, "y": 4, "w": 1.75},
+ {"matrix": [7, 3], "x": 14, "y": 4},
+ {"matrix": [7, 6], "x": 15, "y": 4},
+ {"matrix": [7, 2], "x": 16, "y": 4},
+ {"matrix": [7, 1], "x": 17, "y": 4},
+ {"matrix": [6, 0], "x": 18, "y": 4, "h": 2},
+
+ {"matrix": [0, 0], "x": 0, "y": 5, "w": 1.25},
+ {"matrix": [0, 1], "x": 1.25, "y": 5, "w": 1.25},
+ {"matrix": [0, 2], "x": 2.5, "y": 5, "w": 1.25},
+ {"matrix": [0, 6], "x": 3.75, "y": 5, "w": 6.25},
+ {"matrix": [0, 8], "x": 10, "y": 5, "w": 1.5},
+ {"matrix": [0, 5], "x": 11.5, "y": 5, "w": 1.5},
+ {"matrix": [0, 4], "x": 13, "y": 5},
+ {"matrix": [0, 3], "x": 14, "y": 5},
+ {"matrix": [6, 6], "x": 15, "y": 5},
+ {"matrix": [6, 2], "x": 16, "y": 5},
+ {"matrix": [6, 1], "x": 17, "y": 5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/ymdk/melody96/hotswap/keymaps/default/keymap.c b/keyboards/ymdk/melody96/hotswap/keymaps/default/keymap.c
new file mode 100644
index 0000000000..90a18f965f
--- /dev/null
+++ b/keyboards/ymdk/melody96/hotswap/keymaps/default/keymap.c
@@ -0,0 +1,23 @@
+// Copyright 2023 James Young for QMK (@noroadsleft)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_96_iso(
+ KC_ESC, 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_PSCR, KC_HOME, KC_END, KC_PGUP, KC_PGDN, KC_DEL,
+ 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_NUM, KC_PSLS, KC_PAST, KC_PMNS,
+ 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_P7, KC_P8, KC_P9, KC_PPLS,
+ 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_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, MO(1), KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
+ ),
+ [1] = LAYOUT_96_iso(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_TOG, _______, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, BL_DOWN, BL_TOGG, BL_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/ymdk/melody96/hotswap/keymaps/via/keymap.c b/keyboards/ymdk/melody96/hotswap/keymaps/via/keymap.c
new file mode 100644
index 0000000000..90a18f965f
--- /dev/null
+++ b/keyboards/ymdk/melody96/hotswap/keymaps/via/keymap.c
@@ -0,0 +1,23 @@
+// Copyright 2023 James Young for QMK (@noroadsleft)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_96_iso(
+ KC_ESC, 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_PSCR, KC_HOME, KC_END, KC_PGUP, KC_PGDN, KC_DEL,
+ 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_NUM, KC_PSLS, KC_PAST, KC_PMNS,
+ 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_P7, KC_P8, KC_P9, KC_PPLS,
+ 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_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, MO(1), KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
+ ),
+ [1] = LAYOUT_96_iso(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_TOG, _______, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, BL_DOWN, BL_TOGG, BL_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/ymdk/melody96/hotswap/keymaps/via/rules.mk b/keyboards/ymdk/melody96/hotswap/keymaps/via/rules.mk
new file mode 100644
index 0000000000..36b7ba9cbc
--- /dev/null
+++ b/keyboards/ymdk/melody96/hotswap/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/ymdk/melody96/hotswap/keymaps/zunger/config.h b/keyboards/ymdk/melody96/hotswap/keymaps/zunger/config.h
new file mode 100644
index 0000000000..cc06440e0d
--- /dev/null
+++ b/keyboards/ymdk/melody96/hotswap/keymaps/zunger/config.h
@@ -0,0 +1,22 @@
+/* Copyright 2018 MechMerlin
+ *
+ * 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
+
+// Enable cmd-option-escape on mac.
+#define GRAVE_ESC_ALT_OVERRIDE
+
+// place overrides here
diff --git a/keyboards/ymdk/melody96/hotswap/keymaps/zunger/keymap.c b/keyboards/ymdk/melody96/hotswap/keymaps/zunger/keymap.c
new file mode 100644
index 0000000000..c84f656080
--- /dev/null
+++ b/keyboards/ymdk/melody96/hotswap/keymaps/zunger/keymap.c
@@ -0,0 +1,489 @@
+/* Copyright 2019 Yonatan Zunger
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+#include
+
+// This keymap is designed to make it easy to type in a wide variety of languages, as well as
+// generate mathematical symbols (à la Space Cadet).
+//
+// LAYER MAGIC (aka, typing in many alphabets)
+// This keyboard has three "base" layers: QWERTY, GREEK, and CADET. The GREEK and CADET layers
+// are actually full of Unicode points, and so which point they generate depends on things like
+// whether the shift key is down. To handle this, each of those layers is actually *two* layers, one
+// with and one without shift. In our main loop, we manage modifier state detection, as well as
+// layer switch detection, and pick the right layer on the fly.
+// Layers are selected with a combination of three keys. The "Greek" and "Cadet" keys act like
+// modifiers: When held down, they transiently select the indicated base layer. The "Layer Lock" key
+// locks the value of the base layer at whatever is currently held; so e.g., if you hold Greek +
+// Layer Lock, you'll stay in Greek mode until you hit Layer Lock again without any of the mods
+// held.
+// TODO: This system of layer selection is nice for math, but it's not very nice for actually
+// typing in multiple languages. It seems like a better plan will be to reserve one key for each
+// base layer -- maybe fn + F(n) -- which can either be held as a modifier or tapped to switch
+// layers. That will open up adding some more languages, like Yiddish, but to do this effectively
+// we'll need to find a good UI with which to show the currently selected layer. Need to check what
+// the melody96 has in the way of outputs (LEDs, sound, etc).
+//
+// ACCENT MAGIC (aka, typing conveniently in Romance languages)
+// We want to support easy typing of diacritical marks. We can't rely on the host OS for this,
+// because (e.g.) on MacOS, to make any of the other stuff work, we need to be using the Unicode
+// input method at the OS level, which breaks all the normal accent stuff on that end. So we do it
+// ourselves. Accents can actually be invoked in two different ways: one fast and very compatible,
+// one very versatile but with occasional compatibility problems.
+//
+// THE MAIN WAY: You can hit one of the "accent request" key patterns immediately *before* typing
+// a letter to be accented. It will emit the corresponding accented Unicode. For example, you can
+// hit fn-e to request an acute accent, followed by i, and it will output í, U+00ED LATIN SMALL
+// LETTER I WITH ACUTE. These "combined characters" are in Unicode normal form C (NFKC), which is
+// important because many European websites and apps, in particular, tend to behave very badly
+// (misunderstanding and/or crashing) when presented with characters in other forms! The catch is
+// that this only works for the various combinations of letters and accents found in the Latin-1
+// supplement block of Unicode -- basically, things you need for Western European languages.
+//
+// (NB: If you make an accent request followed by a letter which can't take the corresponding
+// accent, it will output the uncombined form of the accent followed by whatever you typed; so
+// e.g., if you hit fn-e followed by f, it will output ´f, U+00B4 ACUTE ACCENT followed by an
+// ordinary f. This is very similar to the default behavior of MacOS.)
+//
+// THE FLEXIBLE WAY: If you hit the accent request with a shift -- e.g., fn-shift-e -- it will
+// instead immediately output the corresponding *combining* Unicode accent mark, which will modify
+// the *previous* character you typed. For example, if you type i followed by fn-shift-e, it will
+// generate í. But don't be fooled by visual similarity: unlike the previous example, this one is
+// an ordinary i followed by U+0301 COMBINING ACUTE ACCENT. It's actually *two symbols*, and this
+// is Unicode normal form D (NFKD). Unlike NFKC, there are NFKD representations of far more
+// combinations of letters and accents, and it's easy to add more of these if you need. (The NFKC
+// representation of such combinations is identical to their NFKD representation)
+//
+// Programs that try to compare Unicode strings *should* first normalize them by converting them
+// all into one normal form or another, and there are functions in every programming language to
+// do this -- e.g., JavaScript's string.normalize() -- but lots of programmers fail to understand
+// this, and so write code that massively freaks out when it encounters the wrong form.
+//
+// The current accent request codes are modeled on the ones in MacOS.
+//
+// fn+` Grave accent (`)
+// fn+e Acute accent (´)
+// fn+i Circumflex (^)
+// fn+u Diaresis / umlaut / trema (¨)
+// fn+c Cedilla (¸)
+// fn+n Tilde (˜)
+//
+// Together, these functions make for a nice "polyglot" keyboard: one that can easily type in a wide
+// variety of languages, which is very useful for people who, well, need to type in a bunch of
+// languages.
+//
+// The major TODOs are:
+// - Update the layer selection logic (and add visible layer cues);
+// - Factor the code below so that the data layers are more clearly separated from the code logic,
+// so that other users of this keymap can easily add whichever alphabets they need without
+// having to deeply understand the implementation.
+
+
+enum custom_keycodes {
+ // We provide special layer management keys:
+ // GREEK triggers the Greek (aka "Front") layer, or the SHIFTGREEK layer when shift is held.
+ // (Because we use Unicode, we need to implement shift-handling at the firmware level,
+ // rather than the OS level like we do in the QWERTY layer)
+ // CADET or GREEK+ALT triggers the Cadet (aka "Top") layer, or the SHIFTCADET layer when
+ // shift is held.
+ // LAYER_LOCK locks the "base" layer (i.e., QWERTY, GREEK, or CADET) to the value which is
+ // pressed at the moment that it is being released. When a layer lock is set, the
+ // analogous layer modifier key is reversed; e.g., if you lock the GREEK layer, then the
+ // GREEK button bounces you back to QWERTY.
+ //
+ // We also parse the shift, alt, and caps lock keys to provide management of those which is
+ // compatible with these various layers.
+ KC_GREEK = SAFE_RANGE,
+ KC_CADET,
+ KC_LAYER_LOCK,
+
+ // These are the keycodes generated by the various "accent request" keystrokes.
+ KC_ACCENT_START,
+ KC_CGRV = KC_ACCENT_START, // Grave accent
+ KC_CAGU, // Acute accent
+ KC_CDIA, // Diaresis / umlaut / trema
+ KC_CCIR, // Circumflex
+ KC_CCED, // Cedilla
+ KC_CTIL, // Tilde
+ KC_ACCENT_END,
+};
+
+enum layers_keymap {
+ _QWERTY = 0,
+ _FUNCTION,
+
+ _GREEK,
+ _SHIFTGREEK,
+ _CADET,
+ _SHIFTCADET,
+};
+
+// This is so that H(xxxx) has the same width as _______, which makes the grids more legible.
+#define H(x) UC(0x##x)
+#define MO_FN MO(_FUNCTION)
+#define KC_LLCK KC_LAYER_LOCK
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // NB: Using GESC for escape in the QWERTY layer as a temporary hack because I messed up the
+ // switch on the KC_GRV key; change back to KC_ESC once this is fixed.
+ [_QWERTY] = LAYOUT_96_ansi(
+ QK_GESC, 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_HOME, KC_END, KC_PGUP, KC_PGDN, KC_MPLY, KC_BRK,
+ 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_LLCK, KC_PSLS, KC_PAST, KC_PMNS,
+ 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_P7, KC_P8, KC_P9,
+ KC_LCTL, 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_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, MO_FN, KC_GREEK,KC_CADET,KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT),
+ /* The Greek layers. Shown here are the QWERTY layer (for visual reference) and the two Greek
+ * layers.
+ * ,----------------------------------------------------------------------------
+ * | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|HOM|END|PGU|PGD|MUT|BRK| QWERTY
+ * | ` | ₁ | ₂ | ₃ | ₄ | ₅ | ₆ | ₇ | ₈ | ₉ | ₀ | ₋ | ₊ | ₍ | ₎ | | | | | SHIFTGREEK
+ * | ` | ¹ | ² | ³ | ⁴ | ⁵ | ⁶ | ⁷ | ⁸ | ⁹ | ⁰ | ⁻ | ⁺ | ⁽ | ⁾ | | | | | GREEK
+ * |---------------------------------------------------------------------------|
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | + | BKSPC |LCK| / | * | - |
+ * | ` | ¿ | | € | | | | | | | | | ≁ | BKSPC |LCK| | ⊗ | |
+ * | | | | | | | | | | | | ∝ | ∼ | BKSPC |LCK| ⊘ | ⊙ | ⊖ |
+ * |---------------------------------------------------------------------------|
+ * | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | 7 | 8 | 9 | |
+ * | | Θ | Ω | Ε | Ρ | Τ | Ψ | Υ | Ι | Ο | Π | | | | | | | |
+ * | | θ | ω | ε | ρ | τ | ψ | υ | ι | ο | π | | | | | | | |
+ * |-----------------------------------------------------------------------| + |
+ * | CTRL | A | S | D | F | G | H | J | K | L | ; | ' | RET | 4 | 5 | 6 | ⊕ |
+ * | CTRL | Α | Σ | Δ | Φ | Γ | Η | | Κ | Λ | … | ∴ | RET | | | | |
+ * | CTRL | α | σ | δ | φ | γ | η | ϑ | κ | λ | ⋯ | ⋅ | RET | | | | |
+ * |-----------------------------------------------------------------------|---|
+ * | SHIFT | Z | X | C | V | B | N | M | , | . | / |SHFT | ↑ | 1 | 2 | 3 | |
+ * | SHIFT | Ζ | Ξ | Χ | ✔ | Β | Ν | Μ | ≲ | ≳ | |SHFT | | | | | |
+ * | SHIFT | ζ | ξ | χ | ς | β | ν | μ | ≪ | ≫ | ∫ |SHFT | | | | | |
+ * |-----------------------------------------------------------------------|ENT|
+ * | CTL | ALT| CMD| SPACE | α | β | γ | ← | ↓ | → | 0 | . | |
+ * | CTL | ALT| CMD| SPACE | α | β | γ | | | | | | |
+ * | CTL | ALT| CMD| SPACE | α | β | γ | | | | | | |
+ * `---------------------------------------------------------------------------'
+ */
+ [_GREEK] = LAYOUT_96_ansi(
+ KC_GRV, H(00b9), H(00b2), H(00b3), H(2074), H(2075), H(2076), H(2077), H(2078), H(2079), H(2070), H(207b), H(207a), H(207d), H(207e), XXXXXXX, XXXXXXX, XXXXXXX, _______,
+ KC_GRV, _______, _______, _______, _______, _______, _______, _______, H(00b0), _______, _______, H(221d), H(223c), _______, _______, H(2298), H(2299), H(2296),
+ _______, H(03b8), H(03c9), H(03b5), H(03c1), H(03c4), H(03c8), H(03c5), H(03b9), H(03bf), H(03c0), KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9,
+ _______, H(03b1), H(03c3), H(03b4), H(03c6), H(03b3), H(03b7), H(03d1), H(03ba), H(03bb), H(22ef), H(22c5), _______, KC_P4, KC_P5, KC_P6, H(2295),
+ _______, H(03b6), H(03be), H(03c7), H(03c2), H(03b2), H(03bd), H(03bc), H(226a), H(226b), H(222b), _______, _______, KC_P1, KC_P2, KC_P3,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_P0, KC_PDOT, KC_PENT),
+ [_SHIFTGREEK] = LAYOUT_96_ansi(
+ KC_GRV, H(2081), H(2082), H(2083), H(2084), H(2085), H(2086), H(2087), H(2088), H(2089), H(2080), H(208b), H(208a), H(208d), H(208e), XXXXXXX, XXXXXXX, XXXXXXX, _______,
+ KC_GRV, H(00bf), _______, H(20ac), _______, _______, _______, _______, _______, _______, _______, XXXXXXX, H(2241), _______, _______, XXXXXXX, H(2297), XXXXXXX,
+ _______, H(0398), H(03a9), H(0395), H(03a1), H(03a4), H(03a8), H(03a5), H(0399), H(039f), H(03a0), KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9,
+ _______, H(0391), H(03a3), H(0394), H(03a6), H(0393), H(0397), XXXXXXX, H(039a), H(039b), H(2026), H(2234), _______, KC_P4, KC_P5, KC_P6, H(2295),
+ _______, H(0396), H(039e), H(03a7), H(2714), H(0392), H(039d), H(039c), H(2272), H(2273), XXXXXXX, _______, _______, KC_P1, KC_P2, KC_P3,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_P0, KC_PDOT, KC_PENT),
+ /* The Cadet layers. Again, we show the QWERTY layer and the two cadet layers.
+ * ,----------------------------------------------------------------------------
+ * | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|HOM|END|PGU|PGD|MUT|BRK| QWERTY
+ * | ∅ | | | | | | | | | | | | | | | | | | | SHIFTCADET
+ * | ¬ | | | | | | | | | | | | | | | | | | | CADET
+ * |---------------------------------------------------------------------------|
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | + | BKSPC |LCK| / | * | - |
+ * | ` | ¡ | | £ | | | | | ° | | | * | ∓ | BKSPC |LCK| | | |
+ * | | | | | | | | | | | | | ± | BKSPC |LCK| | × | |
+ * |---------------------------------------------------------------------------|
+ * | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | 7 | 8 | 9 | |
+ * | | ℚ | | | ℝ | ⊆ | ⊇ | | ℵ | ∄ | | ∉ | | | * | * | * | |
+ * | | ∧ | ∨ | ∩ | ∪ | ⊂ | ⊃ | ∀ | ∞ | ∃ | ∂ | ∈ | | | * | * | * | | [1]
+ * |-----------------------------------------------------------------------| + |
+ * | CTRL | A | S | D | F | G | H | J | K | L | ; | ' | RET | 4 | 5 | 6 | ⊕ |
+ * | CTRL | Å | | ∇ | | ⇑ | ⇓ | ⇐ | ⇒ | ⇔ | | | RET | * | * | * | |
+ * | CTRL | ⟘ | ⊤ | ⊢ | ⊣ | ↑ | ↓ | ← | → | ↔ | | | RET | * | * | * | | [1]
+ * |-----------------------------------------------------------------------|---|
+ * | SHIFT | Z | X | C | V | B | N | M | , | . | / |SHFT | ↑ | 1 | 2 | 3 | |
+ * | SHIFT | ℤ | ℂ | | ≉ | ≢ | ℕ | | | | |SHFT | | * | * | * | |
+ * | SHIFT | | ≠ | | ≈ | ≡ | ≤ | ≥ | | | ÷ |SHFT | | * | * | * | | [1]
+ * |-----------------------------------------------------------------------|ENT|
+ * | CTL | ALT| CMD| SPACE | α | β | γ | ← | ↓ | → | 0 | . | |
+ * | CTL | ALT| CMD| SPACE | α | β | γ | | | | | | |
+ * | CTL | ALT| CMD| SPACE | α | β | γ | | | | | | |
+ * `---------------------------------------------------------------------------'
+ * [1] CADET + numpad moves the mouse. SHIFT+CADET+NUMPAD moves it more quickly. CADET+5
+ * clicks the mouse, and SHIFT+CADET+FIVE right-clicks.
+ */
+ [_CADET] = LAYOUT_96_ansi(
+ H(00AC), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
+ KC_GRV, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, H(00b1), _______, _______, XXXXXXX, H(00d7), XXXXXXX,
+ _______, H(2227), H(2228), H(2229), H(222a), H(2282), H(2283), H(2200), H(221e), H(2203), H(2202), H(2208), XXXXXXX, XXXXXXX, KC_P7, KC_P8, KC_P9,
+ _______, H(22a5), H(22a4), H(22a2), H(22a3), H(2191), H(2193), H(2190), H(2192), H(2194), XXXXXXX, XXXXXXX, _______, KC_P4, KC_P5, KC_P6, XXXXXXX,
+ _______, XXXXXXX, H(2260), XXXXXXX, H(2248), H(2261), H(2264), H(2265), XXXXXXX, XXXXXXX, H(00f7), _______, _______, KC_P1, KC_P2, KC_P3,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_P0, KC_PDOT, KC_PENT),
+ [_SHIFTCADET] = LAYOUT_96_ansi(
+ H(2205), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
+ KC_GRV, H(00a1), XXXXXXX, H(00a3), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, H(2213), _______, _______, XXXXXXX, XXXXXXX, XXXXXXX,
+ _______, H(211a), XXXXXXX, XXXXXXX, H(211d), H(2286), H(2287), XXXXXXX, H(2135), H(2204), XXXXXXX, H(2209), XXXXXXX, XXXXXXX, KC_P7, KC_P8, KC_P9,
+ _______, H(212b), XXXXXXX, H(2207), XXXXXXX, H(21d1), H(21d3), H(21d0), H(21d2), H(21d4), XXXXXXX, XXXXXXX, _______, KC_P4, KC_P5, KC_P6, XXXXXXX,
+ _______, H(2124), H(2102), XXXXXXX, H(2249), H(2262), H(2115), XXXXXXX, XXXXXXX, XXXXXXX, H(00f7), _______, _______, KC_P1, KC_P2, KC_P3,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_P0, KC_PDOT, KC_PENT),
+
+ // Function layer is mostly for keyboard meta-control operations, but also contains the combining
+ // accent marks. These are deliberately placed to match where the analogous controls go on Mac OS.
+ [_FUNCTION] = LAYOUT_96_ansi(
+ KC_CGRV, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, QK_BOOT,
+ KC_CGRV, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, KC_CAGU, _______, _______, _______, KC_CDIA, KC_CCIR, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, UC_MAC, UC_LINX, UC_WIN, UC_BSD, UC_WINC, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, KC_CCED, _______, _______, KC_CTIL, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+};
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// Accent implementation
+//
+// In the body of process_record_user, we store an "accent_request", which is the accent keycode if
+// one was just selected, or zero otherwise. When the *next* key is hit, we look up whether the
+// accent request plus that next keycode (plus the state of the shift key) together amount to an
+// interesting combined (NFKC) character, and if so, emit it; otherwise, we emit the accent as a
+// separate character and then process the next key normally. The resulting UI behavior is similar
+// to that of the combining accent keys in MacOS.
+//
+// We store two arrays, depending on whether shift is or isn't held. Each is two-dimensional, with
+// its outer key by the next keycode struck, and the inner key by the accent requested. The outer
+// array has KC_Z + 1 as its upper bound, so that we can save memory by only coding alphabetic keys.
+// The contents are either Unicode code points, or zero to indicate that we don't have a point for
+// this combination.
+
+#define KC_NUM_ACCENTS (KC_ACCENT_END - KC_ACCENT_START)
+#define KC_NUM_SLOTS (KC_Z + 1)
+
+const uint16_t PROGMEM unshifted_accents[KC_NUM_SLOTS][KC_NUM_ACCENTS] = {
+ // KC_CGRV, KC_CAGU, KC_CDIA, KC_CCIR, KC_CCED, KC_CTIL
+ [KC_A] = { 0x00e0, 0x00e1, 0x00e4, 0x00e2, 0, 0x00e3 },
+ [KC_E] = { 0x00e8, 0x00e9, 0x00eb, 0x00ea, 0, 0 },
+ [KC_I] = { 0x00ec, 0x00ed, 0x00ef, 0x00ee, 0, 0 },
+ [KC_O] = { 0x00f2, 0x00f3, 0x00f6, 0x00f4, 0, 0x00f5 },
+ [KC_U] = { 0x00f9, 0x00fa, 0x00fc, 0x00fb, 0, 0 },
+ [KC_Y] = { 0, 0, 0x00ff, 0, 0, 0 },
+ [KC_N] = { 0, 0, 0, 0, 0, 0x00f1 },
+ [KC_C] = { 0, 0, 0, 0, 0x00e7, 0 },
+};
+
+const uint16_t PROGMEM shifted_accents[KC_NUM_SLOTS][KC_NUM_ACCENTS] = {
+ // KC_CGRV, KC_CAGU, KC_CDIA, KC_CCIR, KC_CCED, KC_CTIL
+ [KC_A] = { 0x00c0, 0x00c1, 0x00c4, 0x00c2, 0, 0x00c3 },
+ [KC_E] = { 0x00c8, 0x00c9, 0x00cb, 0x00ca, 0, 0 },
+ [KC_I] = { 0x00cc, 0x00cd, 0x00cf, 0x00ce, 0, 0 },
+ [KC_O] = { 0x00d2, 0x00d3, 0x00d6, 0x00d4, 0, 0x00d5 },
+ [KC_U] = { 0x00d9, 0x00da, 0x00dc, 0x00db, 0, 0 },
+ [KC_Y] = { 0, 0, 0x00df, 0, 0, 0 },
+ [KC_N] = { 0, 0, 0, 0, 0, 0x00d1 },
+ [KC_C] = { 0, 0, 0, 0, 0x00c7, 0 },
+};
+
+// The uncombined and combined forms of the accents, for when we want to emit them as single
+// characters.
+const uint16_t PROGMEM uncombined_accents[KC_NUM_ACCENTS] = {
+ [KC_CGRV - KC_ACCENT_START] = 0x0060,
+ [KC_CAGU - KC_ACCENT_START] = 0x00b4,
+ [KC_CDIA - KC_ACCENT_START] = 0x00a8,
+ [KC_CCIR - KC_ACCENT_START] = 0x005e,
+ [KC_CCED - KC_ACCENT_START] = 0x00b8,
+ [KC_CTIL - KC_ACCENT_START] = 0x02dc,
+};
+
+const uint16_t PROGMEM combined_accents[KC_NUM_ACCENTS] = {
+ [KC_CGRV - KC_ACCENT_START] = 0x0300,
+ [KC_CAGU - KC_ACCENT_START] = 0x0301,
+ [KC_CDIA - KC_ACCENT_START] = 0x0308,
+ [KC_CCIR - KC_ACCENT_START] = 0x0302,
+ [KC_CCED - KC_ACCENT_START] = 0x0327,
+ [KC_CTIL - KC_ACCENT_START] = 0x0303,
+};
+
+// This function manages keypresses that happen after an accent has been selected by an earlier
+// keypress.
+// Args:
+// accent_key: The accent key which was earlier selected. This must be in the range
+// [KC_ACCENT_START, KC_ACCENT_END).
+// keycode: The keycode which was just pressed.
+// is_shifted: The current shift state (as set by a combination of shift and caps lock)
+// force_no_accent: If true, we're in a situation where we want to force there to be no
+// accent combination -- if e.g. we're in a non-QWERTY layer, or if other modifier keys
+// are held.
+//
+// Returns true if the keycode has been completely handled by this function (and so should not be
+// processed further by process_record_user) or false otherwise.
+bool process_key_after_accent(
+ uint16_t accent_key,
+ uint16_t keycode,
+ bool is_shifted,
+ bool force_no_accent
+) {
+ assert(accent_key >= KC_ACCENT_START);
+ assert(accent_key < KC_ACCENT_END);
+ const int accent_index = accent_key - KC_ACCENT_START;
+
+ // If the keycode is outside A..Z, or force_no_accent is set, we know we shouldn't even bother
+ // with a table lookup.
+ if (keycode <= KC_Z && !force_no_accent) {
+ // Pick the correct array. Because this is progmem, we're going to need to do the
+ // two-dimensional array indexing by hand, and so we just cast it to a single-dimensional array.
+ const uint16_t *points = (const uint16_t*)(is_shifted ? shifted_accents : unshifted_accents);
+ const uint16_t code_point = pgm_read_word_near(points + KC_NUM_ACCENTS * keycode + accent_index);
+ if (code_point) {
+ register_unicode(code_point);
+ return true;
+ }
+ }
+
+ // If we get here, there was no accent match. Emit the accent as its own character, and then let
+ // the caller figure out what to do next.
+ register_unicode(pgm_read_word_near(uncombined_accents + accent_index));
+ return false;
+}
+
+// Layer bitfields.
+#define GREEK_LAYER (1UL << _GREEK)
+#define SHIFTGREEK_LAYER (1UL << _SHIFTGREEK)
+#define CADET_LAYER (1UL << _CADET)
+#define SHIFTCADET_LAYER (1UL << _SHIFTCADET)
+// The layers we don't touch.
+#define LAYER_MASK ~(GREEK_LAYER|SHIFTGREEK_LAYER|CADET_LAYER|SHIFTCADET_LAYER)
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ // We track these persistent globals and manage them on our own, rather than trying to rely on
+ // get_mods or the like, because this function is called *before* that's updated!
+ static bool shift_held = false;
+ static bool alt_held = false;
+ static bool ctrl_held = false;
+ static bool super_held = false;
+ static bool greek_held = false;
+ static bool cadet_held = false;
+
+ // These are where we remember the values of lock states.
+ static bool shift_lock = false;
+ static int layer_lock = _QWERTY;
+
+ // The accent request, or zero if there isn't one.
+ static uint16_t accent_request = 0;
+
+ // If this is set to true, don't trigger any handling of pending accent requests. That's what we
+ // want to do if e.g. the user just hit the shift key or something.
+ bool ignore_accent_change = !record->event.pressed;
+
+ // Step 1: Process any modifier key state changes, so we can maintain that state.
+ if (keycode == KC_LSFT || keycode == KC_RSFT) {
+ shift_held = record->event.pressed;
+ ignore_accent_change = true;
+ } else if (keycode == KC_LALT || keycode == KC_RALT) {
+ alt_held = record->event.pressed;
+ ignore_accent_change = true;
+ } else if (keycode == KC_LCTL || keycode == KC_RCTL) {
+ ctrl_held = record->event.pressed;
+ ignore_accent_change = true;
+ } else if (keycode == KC_LGUI || keycode == KC_RGUI) {
+ super_held = record->event.pressed;
+ ignore_accent_change = true;
+ } else if (keycode == KC_GREEK) {
+ greek_held = record->event.pressed;
+ ignore_accent_change = true;
+ } else if (keycode == KC_CADET) {
+ cadet_held = record->event.pressed;
+ ignore_accent_change = true;
+ }
+
+ // Step 2: Figure out which layer we're supposed to be in, by transforming all the prior stuff
+ // into layer requests.
+ const bool greek_request = (greek_held && !alt_held);
+ const bool cadet_request = (cadet_held || (greek_held && alt_held));
+
+ // Now, handle the lock keys. We store next_layer_lock in a local variable so that we can
+ // determine the layer to pick right now before we update layer_lock.
+ int next_layer_lock = layer_lock;
+ if (keycode == KC_CAPS) {
+ // If we're in QWERTY mode, caps lock is already going to be managed by the host OS, but by
+ // tracking it ourselves we can also usefully apply it to the GREEK and CADET layers.
+ if (record->event.pressed) {
+ shift_lock = !shift_lock;
+ }
+ } else if (keycode == KC_LAYER_LOCK) {
+ if (record->event.pressed) {
+ if (cadet_request) {
+ next_layer_lock = _CADET;
+ } else if (greek_request) {
+ next_layer_lock = _GREEK;
+ } else {
+ next_layer_lock = _QWERTY;
+ }
+ }
+ }
+
+ // OK! Now we know which buttons are being held, and the current and upcoming states of the locks.
+ // We can compute our new base layer. Remember that the CADET and GREEK keys act as their own
+ // antonyms if they match the layer lock -- e.g., if you have CADET locked, then CADET+X generates
+ // QWERTY-X.
+ int base_layer;
+ if (cadet_request) {
+ base_layer = (layer_lock == _CADET ? _QWERTY : _CADET);
+ } else if (greek_request) {
+ base_layer = (layer_lock == _GREEK ? _QWERTY : _GREEK);
+ } else {
+ base_layer = layer_lock;
+ }
+
+ const bool shifted = (shift_held != shift_lock);
+ int actual_layer;
+ if (base_layer == _CADET) {
+ actual_layer = (shifted ? _SHIFTCADET : _CADET);
+ } else if (base_layer == _GREEK) {
+ actual_layer = (shifted ? _SHIFTGREEK : _GREEK);
+ } else {
+ // We don't do shifting for the QWERTY layer, since for that we emit USB HID codes and shifting
+ // is managed by the host OS.
+ actual_layer = _QWERTY;
+ }
+
+ // And now we can update the layer lock and the actual firmware layer selector.
+ layer_lock = next_layer_lock;
+ layer_state_t new_layer_state = (layer_state & LAYER_MASK) | (1UL << actual_layer);
+ if (new_layer_state != layer_state) {
+ layer_state_set(new_layer_state);
+ }
+
+ // Step 3: Handle accents. If there's a pending accent request, process it. If what the user just
+ // hit creates a new accent request, update the pending state for the next keypress.
+ if (!ignore_accent_change && accent_request && record->event.pressed) {
+ // Only do the accent stuff if we're in the QWERTY layer and we aren't modifying something.
+ const bool force_no_accent = (
+ actual_layer != _QWERTY ||
+ ctrl_held ||
+ super_held ||
+ alt_held
+ );
+ const uint16_t old_accent = accent_request;
+ accent_request = 0;
+ if (process_key_after_accent(old_accent, keycode, shifted, force_no_accent)) {
+ return false;
+ }
+ }
+
+ // And if a new accent request just arrived, update accent_request.
+ if (keycode >= KC_ACCENT_START && keycode < KC_ACCENT_END && record->event.pressed) {
+ if (shifted) {
+ // Shift + accent request generates the combining accent key, and leaves accent_request alone.
+ register_unicode(pgm_read_word_near(combined_accents + keycode - KC_ACCENT_START));
+ return false;
+ } else {
+ accent_request = keycode;
+ }
+ }
+
+ return true;
+}
diff --git a/keyboards/ymdk/melody96/hotswap/keymaps/zunger/readme.md b/keyboards/ymdk/melody96/hotswap/keymaps/zunger/readme.md
new file mode 100644
index 0000000000..3eb64a2e73
--- /dev/null
+++ b/keyboards/ymdk/melody96/hotswap/keymaps/zunger/readme.md
@@ -0,0 +1,78 @@
+* The "Cadet-Style" keymap for the melody96.
+* Author: Yonatan Zunger (zunger@gmail.com)
+
+This is an experimental keymap being used both for practical reasons (as my daily driver) and to
+work out the ideas of a "space-cadet-style" keyboard which can type text and mathematical symbols
+with equal ease. It's designed for anyone who frequently needs to do this outside of a LaTeX
+environment, or for anyone who loves the old "Space Cadet" keyboard! And it works at its best when
+you have actual Cadet keycaps (like SA Symbolics) installed, because those keycaps will actually
+show what you get.
+
+The core idea of this keyboard is that, in addition to a QWERTY base layer and a function layer, it
+supports two additional base layers -- the GREEK layer (the analogue of the Space Cadet "Greek," or
+"Front," keys) and the CADET layer (the analogue of the Space Cadet "Top" keys). These layers use
+Unicode to generate all of the mathematical symbols you can find on a traditional Space Cadet
+layout, plus a bunch of extras.
+
+Because Unicode can't be encoded using the traditional USB HID protocol, QMK does some clever but
+horrifying things to fool your OS. One consequence of this is that the shift key needs to be handled
+by the keyboard firmware, not the host OS. To handle this, we have two additional layers --
+SHIFTGREEK and SHIFTCADET -- and handle the flipping between all of these layers here in the
+firmware.
+
+*The simple bit: Using this layout on a Melody96*
+
+At the core of this layout are three special modifier keys and two special lock keys:
+
+* The GREEK key, to the right of the spacebar, activates the GREEK layer. GREEK+SHIFT activates
+ SHIFTGREEK. These keys generate Greek letters on the letter keys (thus the name), and a few
+ mathematical symbols on other keys. They correspond to the notations on the front of traditional
+ Space Cadet keys; if your capset doesn't include those (alas, most don't), they're the "pretty
+ obvious" mappings.
+* The CADET key, to the right of GREEK, activates the CADET layer. These are the symbols above the
+ letters on a Space Cadet layout. CADET+SHIFT activates the SHIFTCADET layer, with even more
+ symbols.
+* The FUNCTION key, to the right of CADET, activates the function layer. This is where you have a
+ reset mechanism, a selector for which Unicode input type you want, and so on.
+
+Additionally, GREEK+ALT is equivalent to CADET. This is handy for other keyboards where you don't
+have room for this many modifiers.
+
+The lock keys are:
+
+* Caps lock, if you use it, will also act as a "shift lock" for the Greek and Cadet layers. Shift
+ lock is slightly different, in that while it is engaged shift will _dis_engage it; that's actually
+ pretty useful when typing math.
+* An additional "layer lock" key, by default where "num lock" usually goes, will lock the choice of
+ base layer. To use it, hold down any invocation of the GREEK or CADET layers, or none at all, and
+ hit lock; it will then put you in that layer. The corresponding modifier key will then toggle you
+ back to the QWERTY layer. (So for example, if you hit GREEK+LAYER_LOCK and release them, you're
+ now typing in Greek; the GREEK modifier would cause you to type QWERTY momentarily. To go back to
+ ordinary QWERTY mode, you'd just hit LAYER_LOCK again with no modifiers held)
+
+To see the full layout, check out the big comment in keymap.c.
+
+*A less-simple bit: Adapting this to other keyboards*
+
+This is really a canary for generic Cadet implementations. Before this can be made generic, a few
+things will have to happen:
+
+(1) Instead of a fixed keymap, this has to be refactored into some kind of array showing the
+mappings of QWERTY-layer keys onto the appropriate code points in the GREEK and CADET layers, and
+some preprocessor magic needs to auto-transform this plus a traditional keymap for the QWERTY layer
+into keymaps for all five of the core layers. (Function layers would presumably be handled on a
+per-keyboard basis)
+
+(2) The standard mapping of those should have some #define's to control things like whether there
+are physical F-keys (you would probably want to move superscript and subscripts onto the numbers if
+there weren't, and figure out what to do with the non-numeric super/sub keys), whether you actually
+want to enable GREEK+ALT=CADET, and so on;
+
+(3) There should be support for controlling indicator LEDs based on the base layer selection,
+caps/shift lock state, and layer lock state, as well as for triggering audio on transitions;
+
+(4) All the core fancy logic in process_record_user which implements the layer handling should be
+factored out into its own function, so that keyboards can easily reuse that, too.
+
+This is a lovely TODO for future work, and could be particularly fun to go along with new releases
+of SA Symbolics and the like. Anyone interested in such things, ping me!
diff --git a/keyboards/ymdk/melody96/hotswap/keymaps/zunger/rules.mk b/keyboards/ymdk/melody96/hotswap/keymaps/zunger/rules.mk
new file mode 100644
index 0000000000..a61cfa33fa
--- /dev/null
+++ b/keyboards/ymdk/melody96/hotswap/keymaps/zunger/rules.mk
@@ -0,0 +1,2 @@
+# You need Unicode for this map.
+UNICODE_ENABLE = yes # Unicode
diff --git a/keyboards/ymdk/melody96/hotswap/matrix_diagram.md b/keyboards/ymdk/melody96/hotswap/matrix_diagram.md
new file mode 100644
index 0000000000..77f7e6a925
--- /dev/null
+++ b/keyboards/ymdk/melody96/hotswap/matrix_diagram.md
@@ -0,0 +1,23 @@
+# Matrix Diagram for YMDK Melody96 Hotswap
+
+```
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+│50 │51 │52 │53 │54 │55 │56 │57 │58 │B8 │B7 │B5 │B4 │B3 │B6 │B2 │B1 │B0 │63 │
+├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┴───┼───┼───┼───┼───┤
+│40 │41 │42 │43 │44 │45 │46 │47 │48 │A8 │A7 │A5 │A4 │A6 │A2 │A1 │A0 │64 │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┼───┼───┼───┤ ┌─────┐
+│30 │31 │32 │33 │34 │35 │36 │37 │38 │98 │97 │95 │94 │93 │96 │92 │91 │80 │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┼───┼───┤ │ ┌──┴┐93 │ ISO Enter
+│20 │21 │22 │23 │24 │25 │26 │27 │28 │88 │87 │85 │84 │86 │82 │81 │ │ │84 │ │
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┼───┼───┼───┤ └───┴────┘
+│10 │11 │12 │13 │14 │15 │16 │17 │18 │78 │77 │75 │74 │73 │76 │72 │71 │60 │
+├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┼───┼───┼───┼───┤ │
+│00 │01 │02 │06 │08 │07 │05 │04 │03 │66 │62 │61 │ │
+└────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
+┌────────┐
+│10 │ 2.25u LShift
+└────────┘
+┌────┬────┬────┬────────────────────────┬─────┬─────┐
+│00 │01 │02 │06 │08 │05 │ RWKL
+└────┴────┴────┴────────────────────────┴─────┴─────┘
+```
diff --git a/keyboards/ymdk/melody96/hotswap/readme.md b/keyboards/ymdk/melody96/hotswap/readme.md
new file mode 100644
index 0000000000..9fd379b273
--- /dev/null
+++ b/keyboards/ymdk/melody96/hotswap/readme.md
@@ -0,0 +1,19 @@
+# YMDK Melody96 Hotswap
+
+![melody96](https://i.imgur.com/9o0a6XFh.png)
+
+A 96% hotswap keyboard from YMDK, available in four different layouts.
+
+* Keyboard Maintainer: [The QMK Community](https://github.com/qmk)
+* Hardware Supported: Melody96 Hotswap PCBs
+* Hardware Availability: [YMDK](https://ymdkey.com/products/ymdk-hot-swap-hot-swappable-kailh-socket-96-pcb-qmk-fully-programmable-support-ansi-iso-interchange-melody-96-ymd96), [AliExpress](https://www.aliexpress.us/item/2251832770844523.html)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make ymdk/melody96/hotswap:default
+
+Flashing example for this keyboard:
+
+ make ymdk/melody96/hotswap: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).
diff --git a/keyboards/ymdk/melody96/hotswap/rules.mk b/keyboards/ymdk/melody96/hotswap/rules.mk
new file mode 100644
index 0000000000..6e7633bfe0
--- /dev/null
+++ b/keyboards/ymdk/melody96/hotswap/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/ymdk/melody96/info.json b/keyboards/ymdk/melody96/info.json
deleted file mode 100644
index f941c65970..0000000000
--- a/keyboards/ymdk/melody96/info.json
+++ /dev/null
@@ -1,1039 +0,0 @@
-{
- "keyboard_name": "Melody96 Soldered",
- "manufacturer": "YMDK",
- "url": "",
- "maintainer": "qmk",
- "usb": {
- "vid": "0x594D",
- "pid": "0x4D96",
- "device_version": "0.0.1"
- },
- "matrix_pins": {
- "cols": ["D0", "D1", "D2", "D3", "D5", "D4", "D6", "D7", "B4"],
- "rows": ["B7", "B3", "B2", "B1", "B0", "E6", "F0", "F1", "F4", "F5", "F6", "F7"]
- },
- "diode_direction": "ROW2COL",
- "backlight": {
- "pin": "B6",
- "levels": 5
- },
- "rgblight": {
- "saturation_steps": 8,
- "brightness_steps": 8,
- "led_count": 18,
- "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": "E2"
- },
- "indicators": {
- "caps_lock": "C7",
- "num_lock": "C6",
- "scroll_lock": "B5",
- "on_state": 0
- },
- "bootmagic": {
- "matrix": [5, 0]
- },
- "processor": "atmega32u4",
- "bootloader": "atmel-dfu",
- "layout_aliases": {
- "LAYOUT": "LAYOUT_all"
- },
- "community_layouts": ["96_ansi", "96_iso"],
- "layouts": {
- "LAYOUT_all": {
- "layout": [
- {"matrix": [5, 0], "x": 0, "y": 0},
- {"matrix": [5, 1], "x": 1, "y": 0},
- {"matrix": [5, 2], "x": 2, "y": 0},
- {"matrix": [5, 3], "x": 3, "y": 0},
- {"matrix": [5, 4], "x": 4, "y": 0},
- {"matrix": [5, 5], "x": 5, "y": 0},
- {"matrix": [5, 6], "x": 6, "y": 0},
- {"matrix": [5, 7], "x": 7, "y": 0},
- {"matrix": [5, 8], "x": 8, "y": 0},
- {"matrix": [11, 8], "x": 9, "y": 0},
- {"matrix": [11, 7], "x": 10, "y": 0},
- {"matrix": [11, 5], "x": 11, "y": 0},
- {"matrix": [11, 4], "x": 12, "y": 0},
- {"matrix": [11, 3], "x": 13, "y": 0},
- {"matrix": [11, 6], "x": 14, "y": 0},
- {"matrix": [11, 2], "x": 15, "y": 0},
- {"matrix": [11, 1], "x": 16, "y": 0},
- {"matrix": [11, 0], "x": 17, "y": 0},
- {"matrix": [6, 3], "x": 18, "y": 0},
-
- {"matrix": [4, 0], "x": 0, "y": 1},
- {"matrix": [4, 1], "x": 1, "y": 1},
- {"matrix": [4, 2], "x": 2, "y": 1},
- {"matrix": [4, 3], "x": 3, "y": 1},
- {"matrix": [4, 4], "x": 4, "y": 1},
- {"matrix": [4, 5], "x": 5, "y": 1},
- {"matrix": [4, 6], "x": 6, "y": 1},
- {"matrix": [4, 7], "x": 7, "y": 1},
- {"matrix": [4, 8], "x": 8, "y": 1},
- {"matrix": [10, 8], "x": 9, "y": 1},
- {"matrix": [10, 7], "x": 10, "y": 1},
- {"matrix": [10, 5], "x": 11, "y": 1},
- {"matrix": [10, 4], "x": 12, "y": 1},
- {"matrix": [10, 3], "x": 13, "y": 1},
- {"matrix": [10, 6], "x": 14, "y": 1},
- {"matrix": [10, 2], "x": 15, "y": 1},
- {"matrix": [10, 1], "x": 16, "y": 1},
- {"matrix": [10, 0], "x": 17, "y": 1},
- {"matrix": [6, 4], "x": 18, "y": 1},
-
- {"matrix": [3, 0], "x": 0, "y": 2, "w": 1.5},
- {"matrix": [3, 1], "x": 1.5, "y": 2},
- {"matrix": [3, 2], "x": 2.5, "y": 2},
- {"matrix": [3, 3], "x": 3.5, "y": 2},
- {"matrix": [3, 4], "x": 4.5, "y": 2},
- {"matrix": [3, 5], "x": 5.5, "y": 2},
- {"matrix": [3, 6], "x": 6.5, "y": 2},
- {"matrix": [3, 7], "x": 7.5, "y": 2},
- {"matrix": [3, 8], "x": 8.5, "y": 2},
- {"matrix": [9, 8], "x": 9.5, "y": 2},
- {"matrix": [9, 7], "x": 10.5, "y": 2},
- {"matrix": [9, 5], "x": 11.5, "y": 2},
- {"matrix": [9, 4], "x": 12.5, "y": 2},
- {"matrix": [8, 4], "x": 13.5, "y": 2, "w": 1.5},
- {"matrix": [9, 6], "x": 15, "y": 2},
- {"matrix": [9, 2], "x": 16, "y": 2},
- {"matrix": [9, 1], "x": 17, "y": 2},
- {"matrix": [9, 0], "x": 18, "y": 2},
-
- {"matrix": [2, 0], "x": 0, "y": 3, "w": 1.75},
- {"matrix": [2, 1], "x": 1.75, "y": 3},
- {"matrix": [2, 2], "x": 2.75, "y": 3},
- {"matrix": [2, 3], "x": 3.75, "y": 3},
- {"matrix": [2, 4], "x": 4.75, "y": 3},
- {"matrix": [2, 5], "x": 5.75, "y": 3},
- {"matrix": [2, 6], "x": 6.75, "y": 3},
- {"matrix": [2, 7], "x": 7.75, "y": 3},
- {"matrix": [2, 8], "x": 8.75, "y": 3},
- {"matrix": [8, 8], "x": 9.75, "y": 3},
- {"matrix": [8, 7], "x": 10.75, "y": 3},
- {"matrix": [8, 5], "x": 11.75, "y": 3},
- {"matrix": [9, 3], "x": 12.75, "y": 3, "w": 2.25},
- {"matrix": [8, 6], "x": 15, "y": 3},
- {"matrix": [8, 2], "x": 16, "y": 3},
- {"matrix": [8, 1], "x": 17, "y": 3},
- {"matrix": [8, 0], "x": 18, "y": 3},
-
- {"matrix": [1, 0], "x": 0, "y": 4, "w": 1.25},
- {"matrix": [1, 1], "x": 1.25, "y": 4},
- {"matrix": [1, 2], "x": 2.25, "y": 4},
- {"matrix": [1, 3], "x": 3.25, "y": 4},
- {"matrix": [1, 4], "x": 4.25, "y": 4},
- {"matrix": [1, 5], "x": 5.25, "y": 4},
- {"matrix": [1, 6], "x": 6.25, "y": 4},
- {"matrix": [1, 7], "x": 7.25, "y": 4},
- {"matrix": [1, 8], "x": 8.25, "y": 4},
- {"matrix": [7, 8], "x": 9.25, "y": 4},
- {"matrix": [7, 7], "x": 10.25, "y": 4},
- {"matrix": [7, 5], "x": 11.25, "y": 4},
- {"matrix": [7, 4], "x": 12.25, "y": 4, "w": 1.75},
- {"matrix": [7, 3], "x": 14, "y": 4},
- {"matrix": [7, 6], "x": 15, "y": 4},
- {"matrix": [7, 2], "x": 16, "y": 4},
- {"matrix": [7, 1], "x": 17, "y": 4},
- {"matrix": [7, 0], "x": 18, "y": 4},
-
- {"matrix": [0, 0], "x": 0, "y": 5, "w": 1.25},
- {"matrix": [0, 1], "x": 1.25, "y": 5, "w": 1.25},
- {"matrix": [0, 2], "x": 2.5, "y": 5, "w": 1.25},
- {"matrix": [0, 6], "x": 3.75, "y": 5, "w": 6.25},
- {"matrix": [0, 8], "x": 10, "y": 5},
- {"matrix": [0, 7], "x": 11, "y": 5},
- {"matrix": [0, 5], "x": 12, "y": 5},
- {"matrix": [0, 4], "x": 13, "y": 5},
- {"matrix": [0, 3], "x": 14, "y": 5},
- {"matrix": [6, 6], "x": 15, "y": 5},
- {"matrix": [6, 2], "x": 16, "y": 5},
- {"matrix": [6, 1], "x": 17, "y": 5},
- {"matrix": [6, 0], "x": 18, "y": 5}
- ]
- },
- "LAYOUT_96_ansi": {
- "layout": [
- {"matrix": [5, 0], "x": 0, "y": 0},
- {"matrix": [5, 1], "x": 1, "y": 0},
- {"matrix": [5, 2], "x": 2, "y": 0},
- {"matrix": [5, 3], "x": 3, "y": 0},
- {"matrix": [5, 4], "x": 4, "y": 0},
- {"matrix": [5, 5], "x": 5, "y": 0},
- {"matrix": [5, 6], "x": 6, "y": 0},
- {"matrix": [5, 7], "x": 7, "y": 0},
- {"matrix": [5, 8], "x": 8, "y": 0},
- {"matrix": [11, 8], "x": 9, "y": 0},
- {"matrix": [11, 7], "x": 10, "y": 0},
- {"matrix": [11, 5], "x": 11, "y": 0},
- {"matrix": [11, 4], "x": 12, "y": 0},
- {"matrix": [11, 3], "x": 13, "y": 0},
- {"matrix": [11, 6], "x": 14, "y": 0},
- {"matrix": [11, 2], "x": 15, "y": 0},
- {"matrix": [11, 1], "x": 16, "y": 0},
- {"matrix": [11, 0], "x": 17, "y": 0},
- {"matrix": [6, 3], "x": 18, "y": 0},
-
- {"matrix": [4, 0], "x": 0, "y": 1},
- {"matrix": [4, 1], "x": 1, "y": 1},
- {"matrix": [4, 2], "x": 2, "y": 1},
- {"matrix": [4, 3], "x": 3, "y": 1},
- {"matrix": [4, 4], "x": 4, "y": 1},
- {"matrix": [4, 5], "x": 5, "y": 1},
- {"matrix": [4, 6], "x": 6, "y": 1},
- {"matrix": [4, 7], "x": 7, "y": 1},
- {"matrix": [4, 8], "x": 8, "y": 1},
- {"matrix": [10, 8], "x": 9, "y": 1},
- {"matrix": [10, 7], "x": 10, "y": 1},
- {"matrix": [10, 5], "x": 11, "y": 1},
- {"matrix": [10, 4], "x": 12, "y": 1},
- {"matrix": [10, 6], "x": 13, "y": 1, "w": 2},
- {"matrix": [10, 2], "x": 15, "y": 1},
- {"matrix": [10, 1], "x": 16, "y": 1},
- {"matrix": [10, 0], "x": 17, "y": 1},
- {"matrix": [6, 4], "x": 18, "y": 1},
-
- {"matrix": [3, 0], "x": 0, "y": 2, "w": 1.5},
- {"matrix": [3, 1], "x": 1.5, "y": 2},
- {"matrix": [3, 2], "x": 2.5, "y": 2},
- {"matrix": [3, 3], "x": 3.5, "y": 2},
- {"matrix": [3, 4], "x": 4.5, "y": 2},
- {"matrix": [3, 5], "x": 5.5, "y": 2},
- {"matrix": [3, 6], "x": 6.5, "y": 2},
- {"matrix": [3, 7], "x": 7.5, "y": 2},
- {"matrix": [3, 8], "x": 8.5, "y": 2},
- {"matrix": [9, 8], "x": 9.5, "y": 2},
- {"matrix": [9, 7], "x": 10.5, "y": 2},
- {"matrix": [9, 5], "x": 11.5, "y": 2},
- {"matrix": [9, 4], "x": 12.5, "y": 2},
- {"matrix": [8, 4], "x": 13.5, "y": 2, "w": 1.5},
- {"matrix": [9, 6], "x": 15, "y": 2},
- {"matrix": [9, 2], "x": 16, "y": 2},
- {"matrix": [9, 1], "x": 17, "y": 2},
- {"matrix": [8, 0], "x": 18, "y": 2, "h": 2},
-
- {"matrix": [2, 0], "x": 0, "y": 3, "w": 1.75},
- {"matrix": [2, 1], "x": 1.75, "y": 3},
- {"matrix": [2, 2], "x": 2.75, "y": 3},
- {"matrix": [2, 3], "x": 3.75, "y": 3},
- {"matrix": [2, 4], "x": 4.75, "y": 3},
- {"matrix": [2, 5], "x": 5.75, "y": 3},
- {"matrix": [2, 6], "x": 6.75, "y": 3},
- {"matrix": [2, 7], "x": 7.75, "y": 3},
- {"matrix": [2, 8], "x": 8.75, "y": 3},
- {"matrix": [8, 8], "x": 9.75, "y": 3},
- {"matrix": [8, 7], "x": 10.75, "y": 3},
- {"matrix": [8, 5], "x": 11.75, "y": 3},
- {"matrix": [9, 3], "x": 12.75, "y": 3, "w": 2.25},
- {"matrix": [8, 6], "x": 15, "y": 3},
- {"matrix": [8, 2], "x": 16, "y": 3},
- {"matrix": [8, 1], "x": 17, "y": 3},
-
- {"matrix": [1, 0], "x": 0, "y": 4, "w": 2.25},
- {"matrix": [1, 2], "x": 2.25, "y": 4},
- {"matrix": [1, 3], "x": 3.25, "y": 4},
- {"matrix": [1, 4], "x": 4.25, "y": 4},
- {"matrix": [1, 5], "x": 5.25, "y": 4},
- {"matrix": [1, 6], "x": 6.25, "y": 4},
- {"matrix": [1, 7], "x": 7.25, "y": 4},
- {"matrix": [1, 8], "x": 8.25, "y": 4},
- {"matrix": [7, 8], "x": 9.25, "y": 4},
- {"matrix": [7, 7], "x": 10.25, "y": 4},
- {"matrix": [7, 5], "x": 11.25, "y": 4},
- {"matrix": [7, 4], "x": 12.25, "y": 4, "w": 1.75},
- {"matrix": [7, 3], "x": 14, "y": 4},
- {"matrix": [7, 6], "x": 15, "y": 4},
- {"matrix": [7, 2], "x": 16, "y": 4},
- {"matrix": [7, 1], "x": 17, "y": 4},
- {"matrix": [6, 0], "x": 18, "y": 4, "h": 2},
-
- {"matrix": [0, 0], "x": 0, "y": 5, "w": 1.25},
- {"matrix": [0, 1], "x": 1.25, "y": 5, "w": 1.25},
- {"matrix": [0, 2], "x": 2.5, "y": 5, "w": 1.25},
- {"matrix": [0, 6], "x": 3.75, "y": 5, "w": 6.25},
- {"matrix": [0, 8], "x": 10, "y": 5},
- {"matrix": [0, 7], "x": 11, "y": 5},
- {"matrix": [0, 5], "x": 12, "y": 5},
- {"matrix": [0, 4], "x": 13, "y": 5},
- {"matrix": [0, 3], "x": 14, "y": 5},
- {"matrix": [6, 6], "x": 15, "y": 5},
- {"matrix": [6, 2], "x": 16, "y": 5},
- {"matrix": [6, 1], "x": 17, "y": 5}
- ]
- },
- "LAYOUT_96_ansi_splitbs": {
- "layout": [
- {"matrix": [5, 0], "x": 0, "y": 0},
- {"matrix": [5, 1], "x": 1, "y": 0},
- {"matrix": [5, 2], "x": 2, "y": 0},
- {"matrix": [5, 3], "x": 3, "y": 0},
- {"matrix": [5, 4], "x": 4, "y": 0},
- {"matrix": [5, 5], "x": 5, "y": 0},
- {"matrix": [5, 6], "x": 6, "y": 0},
- {"matrix": [5, 7], "x": 7, "y": 0},
- {"matrix": [5, 8], "x": 8, "y": 0},
- {"matrix": [11, 8], "x": 9, "y": 0},
- {"matrix": [11, 7], "x": 10, "y": 0},
- {"matrix": [11, 5], "x": 11, "y": 0},
- {"matrix": [11, 4], "x": 12, "y": 0},
- {"matrix": [11, 3], "x": 13, "y": 0},
- {"matrix": [11, 6], "x": 14, "y": 0},
- {"matrix": [11, 2], "x": 15, "y": 0},
- {"matrix": [11, 1], "x": 16, "y": 0},
- {"matrix": [11, 0], "x": 17, "y": 0},
- {"matrix": [6, 3], "x": 18, "y": 0},
-
- {"matrix": [4, 0], "x": 0, "y": 1},
- {"matrix": [4, 1], "x": 1, "y": 1},
- {"matrix": [4, 2], "x": 2, "y": 1},
- {"matrix": [4, 3], "x": 3, "y": 1},
- {"matrix": [4, 4], "x": 4, "y": 1},
- {"matrix": [4, 5], "x": 5, "y": 1},
- {"matrix": [4, 6], "x": 6, "y": 1},
- {"matrix": [4, 7], "x": 7, "y": 1},
- {"matrix": [4, 8], "x": 8, "y": 1},
- {"matrix": [10, 8], "x": 9, "y": 1},
- {"matrix": [10, 7], "x": 10, "y": 1},
- {"matrix": [10, 5], "x": 11, "y": 1},
- {"matrix": [10, 4], "x": 12, "y": 1},
- {"matrix": [10, 3], "x": 13, "y": 1},
- {"matrix": [10, 6], "x": 14, "y": 1},
- {"matrix": [10, 2], "x": 15, "y": 1},
- {"matrix": [10, 1], "x": 16, "y": 1},
- {"matrix": [10, 0], "x": 17, "y": 1},
- {"matrix": [6, 4], "x": 18, "y": 1},
-
- {"matrix": [3, 0], "x": 0, "y": 2, "w": 1.5},
- {"matrix": [3, 1], "x": 1.5, "y": 2},
- {"matrix": [3, 2], "x": 2.5, "y": 2},
- {"matrix": [3, 3], "x": 3.5, "y": 2},
- {"matrix": [3, 4], "x": 4.5, "y": 2},
- {"matrix": [3, 5], "x": 5.5, "y": 2},
- {"matrix": [3, 6], "x": 6.5, "y": 2},
- {"matrix": [3, 7], "x": 7.5, "y": 2},
- {"matrix": [3, 8], "x": 8.5, "y": 2},
- {"matrix": [9, 8], "x": 9.5, "y": 2},
- {"matrix": [9, 7], "x": 10.5, "y": 2},
- {"matrix": [9, 5], "x": 11.5, "y": 2},
- {"matrix": [9, 4], "x": 12.5, "y": 2},
- {"matrix": [8, 4], "x": 13.5, "y": 2, "w": 1.5},
- {"matrix": [9, 6], "x": 15, "y": 2},
- {"matrix": [9, 2], "x": 16, "y": 2},
- {"matrix": [9, 1], "x": 17, "y": 2},
- {"matrix": [8, 0], "x": 18, "y": 2, "h": 2},
-
- {"matrix": [2, 0], "x": 0, "y": 3, "w": 1.75},
- {"matrix": [2, 1], "x": 1.75, "y": 3},
- {"matrix": [2, 2], "x": 2.75, "y": 3},
- {"matrix": [2, 3], "x": 3.75, "y": 3},
- {"matrix": [2, 4], "x": 4.75, "y": 3},
- {"matrix": [2, 5], "x": 5.75, "y": 3},
- {"matrix": [2, 6], "x": 6.75, "y": 3},
- {"matrix": [2, 7], "x": 7.75, "y": 3},
- {"matrix": [2, 8], "x": 8.75, "y": 3},
- {"matrix": [8, 8], "x": 9.75, "y": 3},
- {"matrix": [8, 7], "x": 10.75, "y": 3},
- {"matrix": [8, 5], "x": 11.75, "y": 3},
- {"matrix": [9, 3], "x": 12.75, "y": 3, "w": 2.25},
- {"matrix": [8, 6], "x": 15, "y": 3},
- {"matrix": [8, 2], "x": 16, "y": 3},
- {"matrix": [8, 1], "x": 17, "y": 3},
-
- {"matrix": [1, 0], "x": 0, "y": 4, "w": 2.25},
- {"matrix": [1, 2], "x": 2.25, "y": 4},
- {"matrix": [1, 3], "x": 3.25, "y": 4},
- {"matrix": [1, 4], "x": 4.25, "y": 4},
- {"matrix": [1, 5], "x": 5.25, "y": 4},
- {"matrix": [1, 6], "x": 6.25, "y": 4},
- {"matrix": [1, 7], "x": 7.25, "y": 4},
- {"matrix": [1, 8], "x": 8.25, "y": 4},
- {"matrix": [7, 8], "x": 9.25, "y": 4},
- {"matrix": [7, 7], "x": 10.25, "y": 4},
- {"matrix": [7, 5], "x": 11.25, "y": 4},
- {"matrix": [7, 4], "x": 12.25, "y": 4, "w": 1.75},
- {"matrix": [7, 3], "x": 14, "y": 4},
- {"matrix": [7, 6], "x": 15, "y": 4},
- {"matrix": [7, 2], "x": 16, "y": 4},
- {"matrix": [7, 1], "x": 17, "y": 4},
- {"matrix": [6, 0], "x": 18, "y": 4, "h": 2},
-
- {"matrix": [0, 0], "x": 0, "y": 5, "w": 1.25},
- {"matrix": [0, 1], "x": 1.25, "y": 5, "w": 1.25},
- {"matrix": [0, 2], "x": 2.5, "y": 5, "w": 1.25},
- {"matrix": [0, 6], "x": 3.75, "y": 5, "w": 6.25},
- {"matrix": [0, 8], "x": 10, "y": 5},
- {"matrix": [0, 7], "x": 11, "y": 5},
- {"matrix": [0, 5], "x": 12, "y": 5},
- {"matrix": [0, 4], "x": 13, "y": 5},
- {"matrix": [0, 3], "x": 14, "y": 5},
- {"matrix": [6, 6], "x": 15, "y": 5},
- {"matrix": [6, 2], "x": 16, "y": 5},
- {"matrix": [6, 1], "x": 17, "y": 5}
- ]
- },
- "LAYOUT_96_iso": {
- "layout": [
- {"matrix": [5, 0], "x": 0, "y": 0},
- {"matrix": [5, 1], "x": 1, "y": 0},
- {"matrix": [5, 2], "x": 2, "y": 0},
- {"matrix": [5, 3], "x": 3, "y": 0},
- {"matrix": [5, 4], "x": 4, "y": 0},
- {"matrix": [5, 5], "x": 5, "y": 0},
- {"matrix": [5, 6], "x": 6, "y": 0},
- {"matrix": [5, 7], "x": 7, "y": 0},
- {"matrix": [5, 8], "x": 8, "y": 0},
- {"matrix": [11, 8], "x": 9, "y": 0},
- {"matrix": [11, 7], "x": 10, "y": 0},
- {"matrix": [11, 5], "x": 11, "y": 0},
- {"matrix": [11, 4], "x": 12, "y": 0},
- {"matrix": [11, 3], "x": 13, "y": 0},
- {"matrix": [11, 6], "x": 14, "y": 0},
- {"matrix": [11, 2], "x": 15, "y": 0},
- {"matrix": [11, 1], "x": 16, "y": 0},
- {"matrix": [11, 0], "x": 17, "y": 0},
- {"matrix": [6, 3], "x": 18, "y": 0},
-
- {"matrix": [4, 0], "x": 0, "y": 1},
- {"matrix": [4, 1], "x": 1, "y": 1},
- {"matrix": [4, 2], "x": 2, "y": 1},
- {"matrix": [4, 3], "x": 3, "y": 1},
- {"matrix": [4, 4], "x": 4, "y": 1},
- {"matrix": [4, 5], "x": 5, "y": 1},
- {"matrix": [4, 6], "x": 6, "y": 1},
- {"matrix": [4, 7], "x": 7, "y": 1},
- {"matrix": [4, 8], "x": 8, "y": 1},
- {"matrix": [10, 8], "x": 9, "y": 1},
- {"matrix": [10, 7], "x": 10, "y": 1},
- {"matrix": [10, 5], "x": 11, "y": 1},
- {"matrix": [10, 4], "x": 12, "y": 1},
- {"matrix": [10, 6], "x": 13, "y": 1, "w": 2},
- {"matrix": [10, 2], "x": 15, "y": 1},
- {"matrix": [10, 1], "x": 16, "y": 1},
- {"matrix": [10, 0], "x": 17, "y": 1},
- {"matrix": [6, 4], "x": 18, "y": 1},
-
- {"matrix": [3, 0], "x": 0, "y": 2, "w": 1.5},
- {"matrix": [3, 1], "x": 1.5, "y": 2},
- {"matrix": [3, 2], "x": 2.5, "y": 2},
- {"matrix": [3, 3], "x": 3.5, "y": 2},
- {"matrix": [3, 4], "x": 4.5, "y": 2},
- {"matrix": [3, 5], "x": 5.5, "y": 2},
- {"matrix": [3, 6], "x": 6.5, "y": 2},
- {"matrix": [3, 7], "x": 7.5, "y": 2},
- {"matrix": [3, 8], "x": 8.5, "y": 2},
- {"matrix": [9, 8], "x": 9.5, "y": 2},
- {"matrix": [9, 7], "x": 10.5, "y": 2},
- {"matrix": [9, 5], "x": 11.5, "y": 2},
- {"matrix": [9, 4], "x": 12.5, "y": 2},
- {"matrix": [9, 6], "x": 15, "y": 2},
- {"matrix": [9, 2], "x": 16, "y": 2},
- {"matrix": [9, 1], "x": 17, "y": 2},
- {"matrix": [8, 0], "x": 18, "y": 2, "h": 2},
-
- {"matrix": [2, 0], "x": 0, "y": 3, "w": 1.75},
- {"matrix": [2, 1], "x": 1.75, "y": 3},
- {"matrix": [2, 2], "x": 2.75, "y": 3},
- {"matrix": [2, 3], "x": 3.75, "y": 3},
- {"matrix": [2, 4], "x": 4.75, "y": 3},
- {"matrix": [2, 5], "x": 5.75, "y": 3},
- {"matrix": [2, 6], "x": 6.75, "y": 3},
- {"matrix": [2, 7], "x": 7.75, "y": 3},
- {"matrix": [2, 8], "x": 8.75, "y": 3},
- {"matrix": [8, 8], "x": 9.75, "y": 3},
- {"matrix": [8, 7], "x": 10.75, "y": 3},
- {"matrix": [8, 5], "x": 11.75, "y": 3},
- {"matrix": [8, 4], "x": 12.75, "y": 3},
- {"matrix": [9, 3], "x": 13.75, "y": 2, "w": 1.25, "h": 2},
- {"matrix": [8, 6], "x": 15, "y": 3},
- {"matrix": [8, 2], "x": 16, "y": 3},
- {"matrix": [8, 1], "x": 17, "y": 3},
-
- {"matrix": [1, 0], "x": 0, "y": 4, "w": 1.25},
- {"matrix": [1, 1], "x": 1.25, "y": 4},
- {"matrix": [1, 2], "x": 2.25, "y": 4},
- {"matrix": [1, 3], "x": 3.25, "y": 4},
- {"matrix": [1, 4], "x": 4.25, "y": 4},
- {"matrix": [1, 5], "x": 5.25, "y": 4},
- {"matrix": [1, 6], "x": 6.25, "y": 4},
- {"matrix": [1, 7], "x": 7.25, "y": 4},
- {"matrix": [1, 8], "x": 8.25, "y": 4},
- {"matrix": [7, 8], "x": 9.25, "y": 4},
- {"matrix": [7, 7], "x": 10.25, "y": 4},
- {"matrix": [7, 5], "x": 11.25, "y": 4},
- {"matrix": [7, 4], "x": 12.25, "y": 4, "w": 1.75},
- {"matrix": [7, 3], "x": 14, "y": 4},
- {"matrix": [7, 6], "x": 15, "y": 4},
- {"matrix": [7, 2], "x": 16, "y": 4},
- {"matrix": [7, 1], "x": 17, "y": 4},
- {"matrix": [6, 0], "x": 18, "y": 4, "h": 2},
-
- {"matrix": [0, 0], "x": 0, "y": 5, "w": 1.25},
- {"matrix": [0, 1], "x": 1.25, "y": 5, "w": 1.25},
- {"matrix": [0, 2], "x": 2.5, "y": 5, "w": 1.25},
- {"matrix": [0, 6], "x": 3.75, "y": 5, "w": 6.25},
- {"matrix": [0, 8], "x": 10, "y": 5},
- {"matrix": [0, 7], "x": 11, "y": 5},
- {"matrix": [0, 5], "x": 12, "y": 5},
- {"matrix": [0, 4], "x": 13, "y": 5},
- {"matrix": [0, 3], "x": 14, "y": 5},
- {"matrix": [6, 6], "x": 15, "y": 5},
- {"matrix": [6, 2], "x": 16, "y": 5},
- {"matrix": [6, 1], "x": 17, "y": 5}
- ]
- },
- "LAYOUT_96_iso_splitbs": {
- "layout": [
- {"matrix": [5, 0], "x": 0, "y": 0},
- {"matrix": [5, 1], "x": 1, "y": 0},
- {"matrix": [5, 2], "x": 2, "y": 0},
- {"matrix": [5, 3], "x": 3, "y": 0},
- {"matrix": [5, 4], "x": 4, "y": 0},
- {"matrix": [5, 5], "x": 5, "y": 0},
- {"matrix": [5, 6], "x": 6, "y": 0},
- {"matrix": [5, 7], "x": 7, "y": 0},
- {"matrix": [5, 8], "x": 8, "y": 0},
- {"matrix": [11, 8], "x": 9, "y": 0},
- {"matrix": [11, 7], "x": 10, "y": 0},
- {"matrix": [11, 5], "x": 11, "y": 0},
- {"matrix": [11, 4], "x": 12, "y": 0},
- {"matrix": [11, 3], "x": 13, "y": 0},
- {"matrix": [11, 6], "x": 14, "y": 0},
- {"matrix": [11, 2], "x": 15, "y": 0},
- {"matrix": [11, 1], "x": 16, "y": 0},
- {"matrix": [11, 0], "x": 17, "y": 0},
- {"matrix": [6, 3], "x": 18, "y": 0},
-
- {"matrix": [4, 0], "x": 0, "y": 1},
- {"matrix": [4, 1], "x": 1, "y": 1},
- {"matrix": [4, 2], "x": 2, "y": 1},
- {"matrix": [4, 3], "x": 3, "y": 1},
- {"matrix": [4, 4], "x": 4, "y": 1},
- {"matrix": [4, 5], "x": 5, "y": 1},
- {"matrix": [4, 6], "x": 6, "y": 1},
- {"matrix": [4, 7], "x": 7, "y": 1},
- {"matrix": [4, 8], "x": 8, "y": 1},
- {"matrix": [10, 8], "x": 9, "y": 1},
- {"matrix": [10, 7], "x": 10, "y": 1},
- {"matrix": [10, 5], "x": 11, "y": 1},
- {"matrix": [10, 4], "x": 12, "y": 1},
- {"matrix": [10, 3], "x": 13, "y": 1},
- {"matrix": [10, 6], "x": 14, "y": 1},
- {"matrix": [10, 2], "x": 15, "y": 1},
- {"matrix": [10, 1], "x": 16, "y": 1},
- {"matrix": [10, 0], "x": 17, "y": 1},
- {"matrix": [6, 4], "x": 18, "y": 1},
-
- {"matrix": [3, 0], "x": 0, "y": 2, "w": 1.5},
- {"matrix": [3, 1], "x": 1.5, "y": 2},
- {"matrix": [3, 2], "x": 2.5, "y": 2},
- {"matrix": [3, 3], "x": 3.5, "y": 2},
- {"matrix": [3, 4], "x": 4.5, "y": 2},
- {"matrix": [3, 5], "x": 5.5, "y": 2},
- {"matrix": [3, 6], "x": 6.5, "y": 2},
- {"matrix": [3, 7], "x": 7.5, "y": 2},
- {"matrix": [3, 8], "x": 8.5, "y": 2},
- {"matrix": [9, 8], "x": 9.5, "y": 2},
- {"matrix": [9, 7], "x": 10.5, "y": 2},
- {"matrix": [9, 5], "x": 11.5, "y": 2},
- {"matrix": [9, 4], "x": 12.5, "y": 2},
- {"matrix": [9, 6], "x": 15, "y": 2},
- {"matrix": [9, 2], "x": 16, "y": 2},
- {"matrix": [9, 1], "x": 17, "y": 2},
- {"matrix": [8, 0], "x": 18, "y": 2, "h": 2},
-
- {"matrix": [2, 0], "x": 0, "y": 3, "w": 1.75},
- {"matrix": [2, 1], "x": 1.75, "y": 3},
- {"matrix": [2, 2], "x": 2.75, "y": 3},
- {"matrix": [2, 3], "x": 3.75, "y": 3},
- {"matrix": [2, 4], "x": 4.75, "y": 3},
- {"matrix": [2, 5], "x": 5.75, "y": 3},
- {"matrix": [2, 6], "x": 6.75, "y": 3},
- {"matrix": [2, 7], "x": 7.75, "y": 3},
- {"matrix": [2, 8], "x": 8.75, "y": 3},
- {"matrix": [8, 8], "x": 9.75, "y": 3},
- {"matrix": [8, 7], "x": 10.75, "y": 3},
- {"matrix": [8, 5], "x": 11.75, "y": 3},
- {"matrix": [8, 4], "x": 12.75, "y": 3},
- {"matrix": [9, 3], "x": 13.75, "y": 2, "w": 1.25, "h": 2},
- {"matrix": [8, 6], "x": 15, "y": 3},
- {"matrix": [8, 2], "x": 16, "y": 3},
- {"matrix": [8, 1], "x": 17, "y": 3},
-
- {"matrix": [1, 0], "x": 0, "y": 4, "w": 1.25},
- {"matrix": [1, 1], "x": 1.25, "y": 4},
- {"matrix": [1, 2], "x": 2.25, "y": 4},
- {"matrix": [1, 3], "x": 3.25, "y": 4},
- {"matrix": [1, 4], "x": 4.25, "y": 4},
- {"matrix": [1, 5], "x": 5.25, "y": 4},
- {"matrix": [1, 6], "x": 6.25, "y": 4},
- {"matrix": [1, 7], "x": 7.25, "y": 4},
- {"matrix": [1, 8], "x": 8.25, "y": 4},
- {"matrix": [7, 8], "x": 9.25, "y": 4},
- {"matrix": [7, 7], "x": 10.25, "y": 4},
- {"matrix": [7, 5], "x": 11.25, "y": 4},
- {"matrix": [7, 4], "x": 12.25, "y": 4, "w": 1.75},
- {"matrix": [7, 3], "x": 14, "y": 4},
- {"matrix": [7, 6], "x": 15, "y": 4},
- {"matrix": [7, 2], "x": 16, "y": 4},
- {"matrix": [7, 1], "x": 17, "y": 4},
- {"matrix": [6, 0], "x": 18, "y": 4, "h": 2},
-
- {"matrix": [0, 0], "x": 0, "y": 5, "w": 1.25},
- {"matrix": [0, 1], "x": 1.25, "y": 5, "w": 1.25},
- {"matrix": [0, 2], "x": 2.5, "y": 5, "w": 1.25},
- {"matrix": [0, 6], "x": 3.75, "y": 5, "w": 6.25},
- {"matrix": [0, 8], "x": 10, "y": 5},
- {"matrix": [0, 7], "x": 11, "y": 5},
- {"matrix": [0, 5], "x": 12, "y": 5},
- {"matrix": [0, 4], "x": 13, "y": 5},
- {"matrix": [0, 3], "x": 14, "y": 5},
- {"matrix": [6, 6], "x": 15, "y": 5},
- {"matrix": [6, 2], "x": 16, "y": 5},
- {"matrix": [6, 1], "x": 17, "y": 5}
- ]
- },
- "LAYOUT_96_with60": {
- "layout": [
- {"matrix": [5, 0], "x": 0, "y": 0},
- {"matrix": [5, 1], "x": 1, "y": 0},
- {"matrix": [5, 2], "x": 2, "y": 0},
- {"matrix": [5, 3], "x": 3, "y": 0},
- {"matrix": [5, 4], "x": 4, "y": 0},
- {"matrix": [5, 5], "x": 5, "y": 0},
- {"matrix": [5, 6], "x": 6, "y": 0},
- {"matrix": [5, 7], "x": 7, "y": 0},
- {"matrix": [5, 8], "x": 8, "y": 0},
- {"matrix": [11, 8], "x": 9, "y": 0},
- {"matrix": [11, 7], "x": 10, "y": 0},
- {"matrix": [11, 5], "x": 11, "y": 0},
- {"matrix": [11, 4], "x": 12, "y": 0},
- {"matrix": [11, 3], "x": 13, "y": 0},
- {"matrix": [11, 6], "x": 14, "y": 0},
- {"matrix": [11, 2], "x": 15, "y": 0},
- {"matrix": [11, 1], "x": 16, "y": 0},
- {"matrix": [11, 0], "x": 17, "y": 0},
- {"matrix": [6, 3], "x": 18, "y": 0},
-
- {"matrix": [4, 0], "x": 0, "y": 1},
- {"matrix": [4, 1], "x": 1, "y": 1},
- {"matrix": [4, 2], "x": 2, "y": 1},
- {"matrix": [4, 3], "x": 3, "y": 1},
- {"matrix": [4, 4], "x": 4, "y": 1},
- {"matrix": [4, 5], "x": 5, "y": 1},
- {"matrix": [4, 6], "x": 6, "y": 1},
- {"matrix": [4, 7], "x": 7, "y": 1},
- {"matrix": [4, 8], "x": 8, "y": 1},
- {"matrix": [10, 8], "x": 9, "y": 1},
- {"matrix": [10, 7], "x": 10, "y": 1},
- {"matrix": [10, 5], "x": 11, "y": 1},
- {"matrix": [10, 4], "x": 12, "y": 1},
- {"matrix": [10, 6], "x": 13, "y": 1, "w": 2},
- {"matrix": [10, 2], "x": 15, "y": 1},
- {"matrix": [10, 1], "x": 16, "y": 1},
- {"matrix": [10, 0], "x": 17, "y": 1},
- {"matrix": [6, 4], "x": 18, "y": 1},
-
- {"matrix": [3, 0], "x": 0, "y": 2, "w": 1.5},
- {"matrix": [3, 1], "x": 1.5, "y": 2},
- {"matrix": [3, 2], "x": 2.5, "y": 2},
- {"matrix": [3, 3], "x": 3.5, "y": 2},
- {"matrix": [3, 4], "x": 4.5, "y": 2},
- {"matrix": [3, 5], "x": 5.5, "y": 2},
- {"matrix": [3, 6], "x": 6.5, "y": 2},
- {"matrix": [3, 7], "x": 7.5, "y": 2},
- {"matrix": [3, 8], "x": 8.5, "y": 2},
- {"matrix": [9, 8], "x": 9.5, "y": 2},
- {"matrix": [9, 7], "x": 10.5, "y": 2},
- {"matrix": [9, 5], "x": 11.5, "y": 2},
- {"matrix": [9, 4], "x": 12.5, "y": 2},
- {"matrix": [8, 4], "x": 13.5, "y": 2, "w": 1.5},
- {"matrix": [9, 6], "x": 15, "y": 2},
- {"matrix": [9, 2], "x": 16, "y": 2},
- {"matrix": [9, 1], "x": 17, "y": 2},
- {"matrix": [8, 0], "x": 18, "y": 2, "h": 2},
-
- {"matrix": [2, 0], "x": 0, "y": 3, "w": 1.75},
- {"matrix": [2, 1], "x": 1.75, "y": 3},
- {"matrix": [2, 2], "x": 2.75, "y": 3},
- {"matrix": [2, 3], "x": 3.75, "y": 3},
- {"matrix": [2, 4], "x": 4.75, "y": 3},
- {"matrix": [2, 5], "x": 5.75, "y": 3},
- {"matrix": [2, 6], "x": 6.75, "y": 3},
- {"matrix": [2, 7], "x": 7.75, "y": 3},
- {"matrix": [2, 8], "x": 8.75, "y": 3},
- {"matrix": [8, 8], "x": 9.75, "y": 3},
- {"matrix": [8, 7], "x": 10.75, "y": 3},
- {"matrix": [8, 5], "x": 11.75, "y": 3},
- {"matrix": [9, 3], "x": 12.75, "y": 3, "w": 2.25},
- {"matrix": [8, 6], "x": 15, "y": 3},
- {"matrix": [8, 2], "x": 16, "y": 3},
- {"matrix": [8, 1], "x": 17, "y": 3},
-
- {"matrix": [1, 0], "x": 0, "y": 4, "w": 2.25},
- {"matrix": [1, 2], "x": 2.25, "y": 4},
- {"matrix": [1, 3], "x": 3.25, "y": 4},
- {"matrix": [1, 4], "x": 4.25, "y": 4},
- {"matrix": [1, 5], "x": 5.25, "y": 4},
- {"matrix": [1, 6], "x": 6.25, "y": 4},
- {"matrix": [1, 7], "x": 7.25, "y": 4},
- {"matrix": [1, 8], "x": 8.25, "y": 4},
- {"matrix": [7, 8], "x": 9.25, "y": 4},
- {"matrix": [7, 7], "x": 10.25, "y": 4},
- {"matrix": [7, 5], "x": 11.25, "y": 4},
- {"matrix": [7, 4], "x": 12.25, "y": 4, "w": 2.75},
- {"matrix": [7, 6], "x": 15, "y": 4},
- {"matrix": [7, 2], "x": 16, "y": 4},
- {"matrix": [7, 1], "x": 17, "y": 4},
- {"matrix": [6, 0], "x": 18, "y": 4, "h": 2},
-
- {"matrix": [0, 0], "x": 0, "y": 5, "w": 1.25},
- {"matrix": [0, 1], "x": 1.25, "y": 5, "w": 1.25},
- {"matrix": [0, 2], "x": 2.5, "y": 5, "w": 1.25},
- {"matrix": [0, 6], "x": 3.75, "y": 5, "w": 6.25},
- {"matrix": [0, 8], "x": 10, "y": 5, "w": 1.25},
- {"matrix": [0, 7], "x": 11.25, "y": 5, "w": 1.25},
- {"matrix": [0, 4], "x": 12.5, "y": 5, "w": 1.25},
- {"matrix": [0, 3], "x": 13.75, "y": 5, "w": 1.25},
- {"matrix": [6, 2], "x": 15, "y": 5, "w": 2},
- {"matrix": [6, 1], "x": 17, "y": 5}
- ]
- },
- "LAYOUT_96_with60_splitbs": {
- "layout": [
- {"matrix": [5, 0], "x": 0, "y": 0},
- {"matrix": [5, 1], "x": 1, "y": 0},
- {"matrix": [5, 2], "x": 2, "y": 0},
- {"matrix": [5, 3], "x": 3, "y": 0},
- {"matrix": [5, 4], "x": 4, "y": 0},
- {"matrix": [5, 5], "x": 5, "y": 0},
- {"matrix": [5, 6], "x": 6, "y": 0},
- {"matrix": [5, 7], "x": 7, "y": 0},
- {"matrix": [5, 8], "x": 8, "y": 0},
- {"matrix": [11, 8], "x": 9, "y": 0},
- {"matrix": [11, 7], "x": 10, "y": 0},
- {"matrix": [11, 5], "x": 11, "y": 0},
- {"matrix": [11, 4], "x": 12, "y": 0},
- {"matrix": [11, 3], "x": 13, "y": 0},
- {"matrix": [11, 6], "x": 14, "y": 0},
- {"matrix": [11, 2], "x": 15, "y": 0},
- {"matrix": [11, 1], "x": 16, "y": 0},
- {"matrix": [11, 0], "x": 17, "y": 0},
- {"matrix": [6, 3], "x": 18, "y": 0},
-
- {"matrix": [4, 0], "x": 0, "y": 1},
- {"matrix": [4, 1], "x": 1, "y": 1},
- {"matrix": [4, 2], "x": 2, "y": 1},
- {"matrix": [4, 3], "x": 3, "y": 1},
- {"matrix": [4, 4], "x": 4, "y": 1},
- {"matrix": [4, 5], "x": 5, "y": 1},
- {"matrix": [4, 6], "x": 6, "y": 1},
- {"matrix": [4, 7], "x": 7, "y": 1},
- {"matrix": [4, 8], "x": 8, "y": 1},
- {"matrix": [10, 8], "x": 9, "y": 1},
- {"matrix": [10, 7], "x": 10, "y": 1},
- {"matrix": [10, 5], "x": 11, "y": 1},
- {"matrix": [10, 4], "x": 12, "y": 1},
- {"matrix": [10, 3], "x": 13, "y": 1},
- {"matrix": [10, 6], "x": 14, "y": 1},
- {"matrix": [10, 2], "x": 15, "y": 1},
- {"matrix": [10, 1], "x": 16, "y": 1},
- {"matrix": [10, 0], "x": 17, "y": 1},
- {"matrix": [6, 4], "x": 18, "y": 1},
-
- {"matrix": [3, 0], "x": 0, "y": 2, "w": 1.5},
- {"matrix": [3, 1], "x": 1.5, "y": 2},
- {"matrix": [3, 2], "x": 2.5, "y": 2},
- {"matrix": [3, 3], "x": 3.5, "y": 2},
- {"matrix": [3, 4], "x": 4.5, "y": 2},
- {"matrix": [3, 5], "x": 5.5, "y": 2},
- {"matrix": [3, 6], "x": 6.5, "y": 2},
- {"matrix": [3, 7], "x": 7.5, "y": 2},
- {"matrix": [3, 8], "x": 8.5, "y": 2},
- {"matrix": [9, 8], "x": 9.5, "y": 2},
- {"matrix": [9, 7], "x": 10.5, "y": 2},
- {"matrix": [9, 5], "x": 11.5, "y": 2},
- {"matrix": [9, 4], "x": 12.5, "y": 2},
- {"matrix": [8, 4], "x": 13.5, "y": 2, "w": 1.5},
- {"matrix": [9, 6], "x": 15, "y": 2},
- {"matrix": [9, 2], "x": 16, "y": 2},
- {"matrix": [9, 1], "x": 17, "y": 2},
- {"matrix": [8, 0], "x": 18, "y": 2, "h": 2},
-
- {"matrix": [2, 0], "x": 0, "y": 3, "w": 1.75},
- {"matrix": [2, 1], "x": 1.75, "y": 3},
- {"matrix": [2, 2], "x": 2.75, "y": 3},
- {"matrix": [2, 3], "x": 3.75, "y": 3},
- {"matrix": [2, 4], "x": 4.75, "y": 3},
- {"matrix": [2, 5], "x": 5.75, "y": 3},
- {"matrix": [2, 6], "x": 6.75, "y": 3},
- {"matrix": [2, 7], "x": 7.75, "y": 3},
- {"matrix": [2, 8], "x": 8.75, "y": 3},
- {"matrix": [8, 8], "x": 9.75, "y": 3},
- {"matrix": [8, 7], "x": 10.75, "y": 3},
- {"matrix": [8, 5], "x": 11.75, "y": 3},
- {"matrix": [9, 3], "x": 12.75, "y": 3, "w": 2.25},
- {"matrix": [8, 6], "x": 15, "y": 3},
- {"matrix": [8, 2], "x": 16, "y": 3},
- {"matrix": [8, 1], "x": 17, "y": 3},
-
- {"matrix": [1, 0], "x": 0, "y": 4, "w": 2.25},
- {"matrix": [1, 2], "x": 2.25, "y": 4},
- {"matrix": [1, 3], "x": 3.25, "y": 4},
- {"matrix": [1, 4], "x": 4.25, "y": 4},
- {"matrix": [1, 5], "x": 5.25, "y": 4},
- {"matrix": [1, 6], "x": 6.25, "y": 4},
- {"matrix": [1, 7], "x": 7.25, "y": 4},
- {"matrix": [1, 8], "x": 8.25, "y": 4},
- {"matrix": [7, 8], "x": 9.25, "y": 4},
- {"matrix": [7, 7], "x": 10.25, "y": 4},
- {"matrix": [7, 5], "x": 11.25, "y": 4},
- {"matrix": [7, 4], "x": 12.25, "y": 4, "w": 2.75},
- {"matrix": [7, 6], "x": 15, "y": 4},
- {"matrix": [7, 2], "x": 16, "y": 4},
- {"matrix": [7, 1], "x": 17, "y": 4},
- {"matrix": [6, 0], "x": 18, "y": 4, "h": 2},
-
- {"matrix": [0, 0], "x": 0, "y": 5, "w": 1.25},
- {"matrix": [0, 1], "x": 1.25, "y": 5, "w": 1.25},
- {"matrix": [0, 2], "x": 2.5, "y": 5, "w": 1.25},
- {"matrix": [0, 6], "x": 3.75, "y": 5, "w": 6.25},
- {"matrix": [0, 8], "x": 10, "y": 5, "w": 1.25},
- {"matrix": [0, 7], "x": 11.25, "y": 5, "w": 1.25},
- {"matrix": [0, 4], "x": 12.5, "y": 5, "w": 1.25},
- {"matrix": [0, 3], "x": 13.75, "y": 5, "w": 1.25},
- {"matrix": [6, 2], "x": 15, "y": 5, "w": 2},
- {"matrix": [6, 1], "x": 17, "y": 5}
- ]
- },
- "LAYOUT_96_with60_split_num0": {
- "layout": [
- {"matrix": [5, 0], "x": 0, "y": 0},
- {"matrix": [5, 1], "x": 1, "y": 0},
- {"matrix": [5, 2], "x": 2, "y": 0},
- {"matrix": [5, 3], "x": 3, "y": 0},
- {"matrix": [5, 4], "x": 4, "y": 0},
- {"matrix": [5, 5], "x": 5, "y": 0},
- {"matrix": [5, 6], "x": 6, "y": 0},
- {"matrix": [5, 7], "x": 7, "y": 0},
- {"matrix": [5, 8], "x": 8, "y": 0},
- {"matrix": [11, 8], "x": 9, "y": 0},
- {"matrix": [11, 7], "x": 10, "y": 0},
- {"matrix": [11, 5], "x": 11, "y": 0},
- {"matrix": [11, 4], "x": 12, "y": 0},
- {"matrix": [11, 3], "x": 13, "y": 0},
- {"matrix": [11, 6], "x": 14, "y": 0},
- {"matrix": [11, 2], "x": 15, "y": 0},
- {"matrix": [11, 1], "x": 16, "y": 0},
- {"matrix": [11, 0], "x": 17, "y": 0},
- {"matrix": [6, 3], "x": 18, "y": 0},
-
- {"matrix": [4, 0], "x": 0, "y": 1},
- {"matrix": [4, 1], "x": 1, "y": 1},
- {"matrix": [4, 2], "x": 2, "y": 1},
- {"matrix": [4, 3], "x": 3, "y": 1},
- {"matrix": [4, 4], "x": 4, "y": 1},
- {"matrix": [4, 5], "x": 5, "y": 1},
- {"matrix": [4, 6], "x": 6, "y": 1},
- {"matrix": [4, 7], "x": 7, "y": 1},
- {"matrix": [4, 8], "x": 8, "y": 1},
- {"matrix": [10, 8], "x": 9, "y": 1},
- {"matrix": [10, 7], "x": 10, "y": 1},
- {"matrix": [10, 5], "x": 11, "y": 1},
- {"matrix": [10, 4], "x": 12, "y": 1},
- {"matrix": [10, 6], "x": 13, "y": 1, "w": 2},
- {"matrix": [10, 2], "x": 15, "y": 1},
- {"matrix": [10, 1], "x": 16, "y": 1},
- {"matrix": [10, 0], "x": 17, "y": 1},
- {"matrix": [6, 4], "x": 18, "y": 1},
-
- {"matrix": [3, 0], "x": 0, "y": 2, "w": 1.5},
- {"matrix": [3, 1], "x": 1.5, "y": 2},
- {"matrix": [3, 2], "x": 2.5, "y": 2},
- {"matrix": [3, 3], "x": 3.5, "y": 2},
- {"matrix": [3, 4], "x": 4.5, "y": 2},
- {"matrix": [3, 5], "x": 5.5, "y": 2},
- {"matrix": [3, 6], "x": 6.5, "y": 2},
- {"matrix": [3, 7], "x": 7.5, "y": 2},
- {"matrix": [3, 8], "x": 8.5, "y": 2},
- {"matrix": [9, 8], "x": 9.5, "y": 2},
- {"matrix": [9, 7], "x": 10.5, "y": 2},
- {"matrix": [9, 5], "x": 11.5, "y": 2},
- {"matrix": [9, 4], "x": 12.5, "y": 2},
- {"matrix": [8, 4], "x": 13.5, "y": 2, "w": 1.5},
- {"matrix": [9, 6], "x": 15, "y": 2},
- {"matrix": [9, 2], "x": 16, "y": 2},
- {"matrix": [9, 1], "x": 17, "y": 2},
- {"matrix": [8, 0], "x": 18, "y": 2, "h": 2},
-
- {"matrix": [2, 0], "x": 0, "y": 3, "w": 1.75},
- {"matrix": [2, 1], "x": 1.75, "y": 3},
- {"matrix": [2, 2], "x": 2.75, "y": 3},
- {"matrix": [2, 3], "x": 3.75, "y": 3},
- {"matrix": [2, 4], "x": 4.75, "y": 3},
- {"matrix": [2, 5], "x": 5.75, "y": 3},
- {"matrix": [2, 6], "x": 6.75, "y": 3},
- {"matrix": [2, 7], "x": 7.75, "y": 3},
- {"matrix": [2, 8], "x": 8.75, "y": 3},
- {"matrix": [8, 8], "x": 9.75, "y": 3},
- {"matrix": [8, 7], "x": 10.75, "y": 3},
- {"matrix": [8, 5], "x": 11.75, "y": 3},
- {"matrix": [9, 3], "x": 12.75, "y": 3, "w": 2.25},
- {"matrix": [8, 6], "x": 15, "y": 3},
- {"matrix": [8, 2], "x": 16, "y": 3},
- {"matrix": [8, 1], "x": 17, "y": 3},
-
- {"matrix": [1, 0], "x": 0, "y": 4, "w": 2.25},
- {"matrix": [1, 2], "x": 2.25, "y": 4},
- {"matrix": [1, 3], "x": 3.25, "y": 4},
- {"matrix": [1, 4], "x": 4.25, "y": 4},
- {"matrix": [1, 5], "x": 5.25, "y": 4},
- {"matrix": [1, 6], "x": 6.25, "y": 4},
- {"matrix": [1, 7], "x": 7.25, "y": 4},
- {"matrix": [1, 8], "x": 8.25, "y": 4},
- {"matrix": [7, 8], "x": 9.25, "y": 4},
- {"matrix": [7, 7], "x": 10.25, "y": 4},
- {"matrix": [7, 5], "x": 11.25, "y": 4},
- {"matrix": [7, 4], "x": 12.25, "y": 4, "w": 2.75},
- {"matrix": [7, 6], "x": 15, "y": 4},
- {"matrix": [7, 2], "x": 16, "y": 4},
- {"matrix": [7, 1], "x": 17, "y": 4},
- {"matrix": [6, 0], "x": 18, "y": 4, "h": 2},
-
- {"matrix": [0, 0], "x": 0, "y": 5, "w": 1.25},
- {"matrix": [0, 1], "x": 1.25, "y": 5, "w": 1.25},
- {"matrix": [0, 2], "x": 2.5, "y": 5, "w": 1.25},
- {"matrix": [0, 6], "x": 3.75, "y": 5, "w": 6.25},
- {"matrix": [0, 8], "x": 10, "y": 5, "w": 1.25},
- {"matrix": [0, 7], "x": 11.25, "y": 5, "w": 1.25},
- {"matrix": [0, 4], "x": 12.5, "y": 5, "w": 1.25},
- {"matrix": [0, 3], "x": 13.75, "y": 5, "w": 1.25},
- {"matrix": [6, 6], "x": 15, "y": 5},
- {"matrix": [6, 2], "x": 16, "y": 5},
- {"matrix": [6, 1], "x": 17, "y": 5}
- ]
- },
- "LAYOUT_hotswap": {
- "layout": [
- {"matrix": [5, 0], "x": 0, "y": 0},
- {"matrix": [5, 1], "x": 1, "y": 0},
- {"matrix": [5, 2], "x": 2, "y": 0},
- {"matrix": [5, 3], "x": 3, "y": 0},
- {"matrix": [5, 4], "x": 4, "y": 0},
- {"matrix": [5, 5], "x": 5, "y": 0},
- {"matrix": [5, 6], "x": 6, "y": 0},
- {"matrix": [5, 7], "x": 7, "y": 0},
- {"matrix": [5, 8], "x": 8, "y": 0},
- {"matrix": [11, 8], "x": 9, "y": 0},
- {"matrix": [11, 7], "x": 10, "y": 0},
- {"matrix": [11, 5], "x": 11, "y": 0},
- {"matrix": [11, 4], "x": 12, "y": 0},
- {"matrix": [11, 3], "x": 13, "y": 0},
- {"matrix": [11, 6], "x": 14, "y": 0},
- {"matrix": [11, 2], "x": 15, "y": 0},
- {"matrix": [11, 1], "x": 16, "y": 0},
- {"matrix": [11, 0], "x": 17, "y": 0},
- {"matrix": [6, 3], "x": 18, "y": 0},
-
- {"matrix": [4, 0], "x": 0, "y": 1},
- {"matrix": [4, 1], "x": 1, "y": 1},
- {"matrix": [4, 2], "x": 2, "y": 1},
- {"matrix": [4, 3], "x": 3, "y": 1},
- {"matrix": [4, 4], "x": 4, "y": 1},
- {"matrix": [4, 5], "x": 5, "y": 1},
- {"matrix": [4, 6], "x": 6, "y": 1},
- {"matrix": [4, 7], "x": 7, "y": 1},
- {"matrix": [4, 8], "x": 8, "y": 1},
- {"matrix": [10, 8], "x": 9, "y": 1},
- {"matrix": [10, 7], "x": 10, "y": 1},
- {"matrix": [10, 5], "x": 11, "y": 1},
- {"matrix": [10, 4], "x": 12, "y": 1},
- {"matrix": [10, 6], "x": 13, "y": 1, "w": 2},
- {"matrix": [10, 2], "x": 15, "y": 1},
- {"matrix": [10, 1], "x": 16, "y": 1},
- {"matrix": [10, 0], "x": 17, "y": 1},
- {"matrix": [6, 4], "x": 18, "y": 1},
-
- {"matrix": [3, 0], "x": 0, "y": 2, "w": 1.5},
- {"matrix": [3, 1], "x": 1.5, "y": 2},
- {"matrix": [3, 2], "x": 2.5, "y": 2},
- {"matrix": [3, 3], "x": 3.5, "y": 2},
- {"matrix": [3, 4], "x": 4.5, "y": 2},
- {"matrix": [3, 5], "x": 5.5, "y": 2},
- {"matrix": [3, 6], "x": 6.5, "y": 2},
- {"matrix": [3, 7], "x": 7.5, "y": 2},
- {"matrix": [3, 8], "x": 8.5, "y": 2},
- {"matrix": [9, 8], "x": 9.5, "y": 2},
- {"matrix": [9, 7], "x": 10.5, "y": 2},
- {"matrix": [9, 5], "x": 11.5, "y": 2},
- {"matrix": [9, 4], "x": 12.5, "y": 2},
- {"matrix": [9, 3], "x": 13.5, "y": 2, "w": 1.5},
- {"matrix": [9, 6], "x": 15, "y": 2},
- {"matrix": [9, 2], "x": 16, "y": 2},
- {"matrix": [9, 1], "x": 17, "y": 2},
- {"matrix": [8, 0], "x": 18, "y": 2, "h": 2},
-
- {"matrix": [2, 0], "x": 0, "y": 3, "w": 1.75},
- {"matrix": [2, 1], "x": 1.75, "y": 3},
- {"matrix": [2, 2], "x": 2.75, "y": 3},
- {"matrix": [2, 3], "x": 3.75, "y": 3},
- {"matrix": [2, 4], "x": 4.75, "y": 3},
- {"matrix": [2, 5], "x": 5.75, "y": 3},
- {"matrix": [2, 6], "x": 6.75, "y": 3},
- {"matrix": [2, 7], "x": 7.75, "y": 3},
- {"matrix": [2, 8], "x": 8.75, "y": 3},
- {"matrix": [8, 8], "x": 9.75, "y": 3},
- {"matrix": [8, 7], "x": 10.75, "y": 3},
- {"matrix": [8, 5], "x": 11.75, "y": 3},
- {"matrix": [8, 4], "x": 12.75, "y": 3, "w": 2.25},
- {"matrix": [8, 6], "x": 15, "y": 3},
- {"matrix": [8, 2], "x": 16, "y": 3},
- {"matrix": [8, 1], "x": 17, "y": 3},
-
- {"matrix": [1, 0], "x": 0, "y": 4, "w": 2.25},
- {"matrix": [1, 2], "x": 2.25, "y": 4},
- {"matrix": [1, 3], "x": 3.25, "y": 4},
- {"matrix": [1, 4], "x": 4.25, "y": 4},
- {"matrix": [1, 5], "x": 5.25, "y": 4},
- {"matrix": [1, 6], "x": 6.25, "y": 4},
- {"matrix": [1, 7], "x": 7.25, "y": 4},
- {"matrix": [1, 8], "x": 8.25, "y": 4},
- {"matrix": [7, 8], "x": 9.25, "y": 4},
- {"matrix": [7, 7], "x": 10.25, "y": 4},
- {"matrix": [7, 5], "x": 11.25, "y": 4},
- {"matrix": [7, 4], "x": 12.25, "y": 4, "w": 1.75},
- {"matrix": [7, 3], "x": 14, "y": 4},
- {"matrix": [7, 6], "x": 15, "y": 4},
- {"matrix": [7, 2], "x": 16, "y": 4},
- {"matrix": [7, 1], "x": 17, "y": 4},
- {"matrix": [6, 0], "x": 18, "y": 4, "h": 2},
-
- {"matrix": [0, 0], "x": 0, "y": 5, "w": 1.25},
- {"matrix": [0, 1], "x": 1.25, "y": 5, "w": 1.25},
- {"matrix": [0, 2], "x": 2.5, "y": 5, "w": 1.25},
- {"matrix": [0, 6], "x": 3.75, "y": 5, "w": 6.25},
- {"matrix": [0, 8], "x": 10, "y": 5},
- {"matrix": [0, 7], "x": 11, "y": 5},
- {"matrix": [0, 5], "x": 12, "y": 5},
- {"matrix": [0, 4], "x": 13, "y": 5},
- {"matrix": [0, 3], "x": 14, "y": 5},
- {"matrix": [6, 6], "x": 15, "y": 5},
- {"matrix": [6, 2], "x": 16, "y": 5},
- {"matrix": [6, 1], "x": 17, "y": 5}
- ]
- }
- }
-}
diff --git a/keyboards/ymdk/melody96/keymaps/crilith/keymap.c b/keyboards/ymdk/melody96/keymaps/crilith/keymap.c
deleted file mode 100644
index e5eff6ee9d..0000000000
--- a/keyboards/ymdk/melody96/keymaps/crilith/keymap.c
+++ /dev/null
@@ -1,38 +0,0 @@
-#include QMK_KEYBOARD_H
-
-enum custom_keycodes {
- QWERTY = SAFE_RANGE,
- DYNAMIC_MACRO_RANGE,
-};
-
-#include "dynamic_macro.h"
-
-#define KC_REC DM_REC1
-#define KC_DONE DM_RSTP
-#define KC_PLAY DM_PLY1
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- LAYOUT(
- KC_ESC, 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_PSCR, KC_HOME, KC_END, KC_PGUP, KC_PGDN, KC_DEL,
- 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_BSLS, KC_BSPC, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
- 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_P7, KC_P8, KC_P9, KC_PPLS,
- 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_P4, KC_P5, KC_P6, KC_PPLS,
- KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, TT(1), KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT),
-
- LAYOUT(
- QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_CALC, _______, _______, _______,
- _______, RGB_TOG, _______, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, KC_TAB,
- BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_TAB,
- _______, _______, _______, _______, BL_DOWN, BL_TOGG, BL_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, KC_PLAY, _______, KC_REC, KC_DONE, _______, _______, _______, _______, _______, _______),
-};
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- if (!process_record_dynamic_macro(keycode, record)) {
- return false;
- }
- return true;
-}
diff --git a/keyboards/ymdk/melody96/keymaps/default/keymap.c b/keyboards/ymdk/melody96/keymaps/default/keymap.c
deleted file mode 100644
index cc5a7cc0e5..0000000000
--- a/keyboards/ymdk/melody96/keymaps/default/keymap.c
+++ /dev/null
@@ -1,20 +0,0 @@
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_all(
- KC_ESC, 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_PSCR, KC_HOME, KC_END, KC_PGUP, KC_PGDN, KC_DEL,
- 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_BSLS, KC_BSPC, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
- 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_P7, KC_P8, KC_P9, KC_PMNS,
- 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_P4, KC_P5, KC_P6, KC_PPLS,
- KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), MO(1), KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT
- ),
- [1] = LAYOUT_all(
- QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, RGB_TOG, _______, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______,
- BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, BL_DOWN, BL_TOGG, BL_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
- )
-};
diff --git a/keyboards/ymdk/melody96/keymaps/default_96_with60_split_num0/keymap.c b/keyboards/ymdk/melody96/keymaps/default_96_with60_split_num0/keymap.c
deleted file mode 100644
index 6e4af827d6..0000000000
--- a/keyboards/ymdk/melody96/keymaps/default_96_with60_split_num0/keymap.c
+++ /dev/null
@@ -1,36 +0,0 @@
-#include QMK_KEYBOARD_H
-
-enum custom_keycodes {
- KC_P00 = SAFE_RANGE
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_96_with60_split_num0(
- KC_ESC, 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_PSCR, KC_HOME, KC_END, KC_PGUP, KC_PGDN, KC_DEL,
- 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_NUM, KC_PSLS, KC_PAST, KC_PMNS,
- 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_P7, KC_P8, KC_P9, KC_PPLS,
- 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_P4, KC_P5, KC_P6,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_P1, KC_P2, KC_P3, KC_PENT,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_APP, KC_RCTL, KC_P0, KC_P00, KC_PDOT
- ),
- [1] = LAYOUT_96_with60_split_num0(
- QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, RGB_TOG, _______, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______,
- BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, BL_DOWN, BL_TOGG, BL_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
- )
-};
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case KC_P00:
- if (record->event.pressed) {
- tap_code(KC_P0);
- tap_code(KC_P0);
- }
- return false;
- }
- return true;
-}
diff --git a/keyboards/ymdk/melody96/keymaps/dvz/config.h b/keyboards/ymdk/melody96/keymaps/dvz/config.h
deleted file mode 100644
index 380e11a3a1..0000000000
--- a/keyboards/ymdk/melody96/keymaps/dvz/config.h
+++ /dev/null
@@ -1,36 +0,0 @@
- /* Copyright 2021 Milan Düwel
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-#pragma once
-
-#define COMBO_TERM 100
-
-//#define UNICODE_SELECTED_MODES UNICODE_MODE_WINCOMPOSE
-
-#define RGBLIGHT_LAYERS
-#define RGBLIGHT_LAYER_BLINK
-
-#define RGBLIGHT_EFFECT_ALTERNATING
-#define RGBLIGHT_EFFECT_BREATHING
-#define RGBLIGHT_EFFECT_CHRISTMAS
-#define RGBLIGHT_EFFECT_KNIGHT
-#define RGBLIGHT_EFFECT_SNAKE
-#define RGBLIGHT_EFFECT_TWINKLE
-
-#undef RGBLIGHT_EFFECT_RAINBOW_MOOD
-#undef RGBLIGHT_EFFECT_RAINBOW_SWIRL
-#undef RGBLIGHT_EFFECT_STATIC_GRADIENT
-#undef RGBLIGHT_EFFECT_RGB_TEST
diff --git a/keyboards/ymdk/melody96/keymaps/dvz/keymap.c b/keyboards/ymdk/melody96/keymaps/dvz/keymap.c
deleted file mode 100644
index 20d4d1e510..0000000000
--- a/keyboards/ymdk/melody96/keymaps/dvz/keymap.c
+++ /dev/null
@@ -1,161 +0,0 @@
- /* Copyright 2021 Milan Düwel
- *
- * 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
-
- /* This keymap is designed for use with a German keyboard layout.
- * It is essentially the same as the default via keymap but adds combo functionality to type umlauts as well as lighting layers for various actions.
- * Toggling the combo feature also disables KC_LGUI so both can be turned off for gaming. If you want to get rid of it without reflashing new firmware, use KC_RGUI instead.
- * Layers 2 and 3 are currently unused but are configurable within via.
- */
-
-enum combos {
- UML_AE,
- UML_OE,
- UML_UE,
- UML_SZ
-};
-
-const uint16_t PROGMEM ae_combo[] = {KC_A, KC_E, COMBO_END};
-const uint16_t PROGMEM oe_combo[] = {KC_O, KC_E, COMBO_END};
-const uint16_t PROGMEM ue_combo[] = {KC_U, KC_E, COMBO_END};
-const uint16_t PROGMEM sz_combo[] = {KC_S, KC_Y, COMBO_END};
-
-combo_t key_combos[] = {
- [UML_AE] = COMBO(ae_combo, KC_QUOT),
- [UML_OE] = COMBO(oe_combo, KC_SCLN),
- [UML_UE] = COMBO(ue_combo, KC_LBRC),
- [UML_SZ] = COMBO(sz_combo, KC_MINS)
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- [0] = LAYOUT(
- KC_ESC, 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_PSCR, KC_HOME, KC_END, KC_PGUP, KC_PGDN, KC_DEL,
- 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_BSLS, KC_BSPC, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
- 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_P7, KC_P8, KC_P9, KC_PMNS,
- 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_P4, KC_P5, KC_P6, KC_PPLS,
- KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), MO(1), KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT),
-
- [1] = LAYOUT(
- QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD,
- KC_TRNS, RGB_TOG, KC_TRNS, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD,
- BL_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, CM_TOGG, BL_TOGG, BL_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END, KC_TRNS, KC_TRNS, KC_MUTE),
-
- [2] = LAYOUT(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
-
- [3] = LAYOUT(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
-};
-
-/* The lighting layers feature a caps indicator as well as layer blinks for mute and the function layer (blink only to allow unhindered adjustment of the RGB backlight settings).
- Sadly these colours can not be customized within VIA.
-*/
-
-const rgblight_segment_t PROGMEM my_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS(
- {0, 1, HSV_RED},
- {15, 17, HSV_RED}
-);
-
-const rgblight_segment_t PROGMEM my_function_layer[] = RGBLIGHT_LAYER_SEGMENTS(
- {10, 12, HSV_YELLOW}
-);
-
-const rgblight_segment_t PROGMEM my_f2_layer[] = RGBLIGHT_LAYER_SEGMENTS(
- {0, 17, HSV_CYAN}
-);
-
-const rgblight_segment_t PROGMEM my_f3_layer[] = RGBLIGHT_LAYER_SEGMENTS(
- {0, 17, HSV_PURPLE}
-);
-
-const rgblight_segment_t PROGMEM my_flash_layer[] = RGBLIGHT_LAYER_SEGMENTS(
- {0, 17, HSV_RED}
-);
-
-// Now define the array of layers. Later layers take precedence
-const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(
- my_capslock_layer,
- my_function_layer, // Overrides caps lock layer
- my_f2_layer,
- my_f3_layer,
- my_flash_layer
-);
-
-void keyboard_post_init_user(void) {
- // Enable the LED layers
- rgblight_layers = my_rgb_layers;
-};
-
-bool led_update_user(led_t led_state) {
- rgblight_set_layer_state(0, led_state.caps_lock);
- return true;
-};
-
-layer_state_t layer_state_set_user(layer_state_t state) {
- //rgblight_set_layer_state(1, layer_state_cmp(state, 1));
- rgblight_set_layer_state(2, layer_state_cmp(state, 2));
- rgblight_set_layer_state(3, layer_state_cmp(state, 3));
- return state;
-};
-
-// Note we user post_process_record_user because we want the state
-// after the flag has been flipped...
-void post_process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case KC_CAPS:
- case KC_MUTE:
- case QK_COMBO_TOGGLE:
- if (record->event.pressed) {
- rgblight_blink_layer(4, 250);
- }
- break;
- case MO(1):
- if (record->event.pressed) {
- rgblight_blink_layer(1, 250);
- }
- break;
- }
-};
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case KC_LGUI: //use combo toggle to disable the win key while gaming
- if (record->event.pressed) {
- if (is_combo_enabled()==false) {
- return false;
- }
- }
- return true; // Let QMK send the enter press/release events
- default:
- return true; // Process all other keycodes normally
- }
-};
diff --git a/keyboards/ymdk/melody96/keymaps/dvz/readme.md b/keyboards/ymdk/melody96/keymaps/dvz/readme.md
deleted file mode 100644
index d82055244e..0000000000
--- a/keyboards/ymdk/melody96/keymaps/dvz/readme.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# DvZ's VIA compatible keymap with rolling umlauts for german typists
-
-Added by: [devilzmods](https://github.com/devilzmods)
diff --git a/keyboards/ymdk/melody96/keymaps/dvz/rules.mk b/keyboards/ymdk/melody96/keymaps/dvz/rules.mk
deleted file mode 100644
index a1e85f13f4..0000000000
--- a/keyboards/ymdk/melody96/keymaps/dvz/rules.mk
+++ /dev/null
@@ -1,5 +0,0 @@
-VIA_ENABLE = yes
-LTO_ENABLE = yes # reduce firmware size
-COMBO_ENABLE = yes
-#UNICODE_ENABLE = yes
-BOOTLOADER = caterina
diff --git a/keyboards/ymdk/melody96/keymaps/konstantin/config.h b/keyboards/ymdk/melody96/keymaps/konstantin/config.h
deleted file mode 100644
index 4b511eb848..0000000000
--- a/keyboards/ymdk/melody96/keymaps/konstantin/config.h
+++ /dev/null
@@ -1,3 +0,0 @@
-#pragma once
-
-#define LAYER_FN
diff --git a/keyboards/ymdk/melody96/keymaps/konstantin/keymap.c b/keyboards/ymdk/melody96/keymaps/konstantin/keymap.c
deleted file mode 100644
index 5dff7a249a..0000000000
--- a/keyboards/ymdk/melody96/keymaps/konstantin/keymap.c
+++ /dev/null
@@ -1,77 +0,0 @@
-#include QMK_KEYBOARD_H
-#include "konstantin.h"
-
-static const HSV *colors[] = { &godspeed_blue, &godspeed_yellow };
-static const size_t cnum = ARRAY_SIZE(colors);
-static size_t cidx = 0;
-
-enum keycodes_keymap {
- RGB_SET = RANGE_KEYMAP,
-};
-
-void eeconfig_init_keymap(void) {
- rgblight_sethsv(colors[cidx]->h, colors[cidx]->s, colors[cidx]->v);
-}
-
-bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case RGB_SET:
- if (record->event.pressed) {
- cidx = (cidx + 1) % cnum;
- rgblight_sethsv(colors[cidx]->h, colors[cidx]->s, colors[cidx]->v);
- }
- break;
- }
-
- return true;
-}
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* Base layer
- * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
- * │Esc│F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│PSc│Ins│Hom│End│PgU│PgD│
- * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
- * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ \ │Del│NLk│P/ │P* │P- │
- * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┼───┼───┼───┼───┤
- * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │Bspc │P7 │P8 │P9 │ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┼───┼───┤P+ │
- * │FnCaps│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │P4 │P5 │P6 │ │
- * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┼───┼───┼───┤
- * │LSft│RAG│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │RSfRCt│ ↑ │P1 │P2 │P3 │ │
- * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┴┬──┴──┬───┼───┼───┼───┼───┤PEn│
- * │LCtl│LGui│LAlt│ Space │RAlGu│FnFLk│ ← │ ↓ │ → │P0 │P. │ │
- * └────┴────┴────┴────────────────────────┴─────┴─────┴───┴───┴───┴───┴───┴───┘
- */
- [L_BASE] = LAYOUT(
- KC_ESC, 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_PSCR, KC_INS, KC_HOME, KC_END, KC_PGUP, KC_PGDN,
- 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_BSLS, KC_DEL, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
- 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_BSPC, KC_P7, KC_P8, KC_P9, XXXXXXX,
- FN_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_P4, KC_P5, KC_P6, KC_PPLS,
- KC_LSFT, RAL_RGU, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RSF_RCT, KC_UP, KC_P1, KC_P2, KC_P3, XXXXXXX,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, RAL_RGU, XXXXXXX, FN_FNLK, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT
- ),
-
- /* Fn layer
- * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
- * │ │ │ │ │ │ │ │ │ │ │ │ │ │Sys│SLk│Pau│Brk│Top│Btm│
- * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
- * │ │F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│ │ │RTg│ ÷ │ × │ − │
- * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┼───┼───┼───┼───┤
- * │ M4 │M2 │M↑ │M1 │M3 │M5 │ │UCM│ │Stp│Ply│Prv│Nxt│Clear│RH+│RS+│RV+│ │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┼───┼───┤RSt│
- * │ │M← │M↓ │M→ │MW↑│ │ │ │ │ │ │ │ │RH-│RS-│RV-│ │
- * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┼───┼───┼───┤
- * │ │ │MA0│MA2│MW←│MW→│ │ │App│Vo-│Vo+│Mut│ │PgU│RMR│RMS│RMB│ │
- * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┼───┼───┼───┼───┤RMP│
- * │ │DtPR│DtNA│ MW↓ │ │ │ │Hom│PgD│End│RM-│RM+│ │
- * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
- */
- [L_FN] = LAYOUT(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, SYSRQ, KC_SCRL, KC_PAUS, BREAK, TOP, BOTTOM,
- _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, RGB_TOG, DIVIDE, TIMES, MINUS,
- KC_BTN4, KC_BTN2, KC_MS_U, KC_BTN1, KC_BTN3, KC_BTN5, _______, UC_NEXT, _______, KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, CLEAR, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX,
- _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_U, _______, _______, _______, _______, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SET,
- _______, _______, KC_ACL0, KC_ACL2, KC_WH_L, KC_WH_R, _______, _______, KC_APP, KC_VOLD, KC_VOLU, KC_MUTE, _______, KC_PGUP, RGB_M_R, RGB_M_SN,RGB_M_B, XXXXXXX,
- _______, DST_P_R, DST_N_A, KC_WH_D, _______, XXXXXXX, _______, KC_HOME, KC_PGDN, KC_END, RGB_RMOD,RGB_MOD, RGB_M_P
- ),
-};
diff --git a/keyboards/ymdk/melody96/keymaps/konstantin/rules.mk b/keyboards/ymdk/melody96/keymaps/konstantin/rules.mk
deleted file mode 100644
index b315c8e6b9..0000000000
--- a/keyboards/ymdk/melody96/keymaps/konstantin/rules.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-# Generic features
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-COMMAND_ENABLE = yes
-CONSOLE_ENABLE = yes
-EXTRAKEY_ENABLE = yes
-MOUSEKEY_ENABLE = yes
-NKRO_ENABLE = yes
-TAP_DANCE_ENABLE = yes
-UNICODEMAP_ENABLE = yes
-
-# Keyboard-specific features
-BACKLIGHT_ENABLE = no
-RGBLIGHT_ENABLE = yes
-VIA_ENABLE = yes
-
-# Firmware size reduction
-GRAVE_ESC_ENABLE = no
-MAGIC_ENABLE = no
-SPACE_CADET_ENABLE = no
diff --git a/keyboards/ymdk/melody96/keymaps/via/keymap.c b/keyboards/ymdk/melody96/keymaps/via/keymap.c
deleted file mode 100644
index 897d86acb7..0000000000
--- a/keyboards/ymdk/melody96/keymaps/via/keymap.c
+++ /dev/null
@@ -1,36 +0,0 @@
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_all(
- KC_ESC, 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_PSCR, KC_HOME, KC_END, KC_PGUP, KC_PGDN, KC_DEL,
- 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_BSLS, KC_BSPC, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
- 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_P7, KC_P8, KC_P9, KC_PMNS,
- 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_P4, KC_P5, KC_P6, KC_PPLS,
- KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), MO(1), KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT
- ),
- [1] = LAYOUT_all(
- QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, RGB_TOG, _______, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______,
- BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, BL_DOWN, BL_TOGG, BL_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
- ),
- [2] = LAYOUT_all(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
- ),
- [3] = LAYOUT_all(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
- )
-};
diff --git a/keyboards/ymdk/melody96/keymaps/via/rules.mk b/keyboards/ymdk/melody96/keymaps/via/rules.mk
deleted file mode 100644
index 36b7ba9cbc..0000000000
--- a/keyboards/ymdk/melody96/keymaps/via/rules.mk
+++ /dev/null
@@ -1,2 +0,0 @@
-VIA_ENABLE = yes
-LTO_ENABLE = yes
diff --git a/keyboards/ymdk/melody96/keymaps/zunger/config.h b/keyboards/ymdk/melody96/keymaps/zunger/config.h
deleted file mode 100644
index cc06440e0d..0000000000
--- a/keyboards/ymdk/melody96/keymaps/zunger/config.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/* Copyright 2018 MechMerlin
- *
- * 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
-
-// Enable cmd-option-escape on mac.
-#define GRAVE_ESC_ALT_OVERRIDE
-
-// place overrides here
diff --git a/keyboards/ymdk/melody96/keymaps/zunger/keymap.c b/keyboards/ymdk/melody96/keymaps/zunger/keymap.c
deleted file mode 100644
index d65f10dcec..0000000000
--- a/keyboards/ymdk/melody96/keymaps/zunger/keymap.c
+++ /dev/null
@@ -1,489 +0,0 @@
-/* Copyright 2019 Yonatan Zunger
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-#include QMK_KEYBOARD_H
-#include
-
-// This keymap is designed to make it easy to type in a wide variety of languages, as well as
-// generate mathematical symbols (à la Space Cadet).
-//
-// LAYER MAGIC (aka, typing in many alphabets)
-// This keyboard has three "base" layers: QWERTY, GREEK, and CADET. The GREEK and CADET layers
-// are actually full of Unicode points, and so which point they generate depends on things like
-// whether the shift key is down. To handle this, each of those layers is actually *two* layers, one
-// with and one without shift. In our main loop, we manage modifier state detection, as well as
-// layer switch detection, and pick the right layer on the fly.
-// Layers are selected with a combination of three keys. The "Greek" and "Cadet" keys act like
-// modifiers: When held down, they transiently select the indicated base layer. The "Layer Lock" key
-// locks the value of the base layer at whatever is currently held; so e.g., if you hold Greek +
-// Layer Lock, you'll stay in Greek mode until you hit Layer Lock again without any of the mods
-// held.
-// TODO: This system of layer selection is nice for math, but it's not very nice for actually
-// typing in multiple languages. It seems like a better plan will be to reserve one key for each
-// base layer -- maybe fn + F(n) -- which can either be held as a modifier or tapped to switch
-// layers. That will open up adding some more languages, like Yiddish, but to do this effectively
-// we'll need to find a good UI with which to show the currently selected layer. Need to check what
-// the melody96 has in the way of outputs (LEDs, sound, etc).
-//
-// ACCENT MAGIC (aka, typing conveniently in Romance languages)
-// We want to support easy typing of diacritical marks. We can't rely on the host OS for this,
-// because (e.g.) on MacOS, to make any of the other stuff work, we need to be using the Unicode
-// input method at the OS level, which breaks all the normal accent stuff on that end. So we do it
-// ourselves. Accents can actually be invoked in two different ways: one fast and very compatible,
-// one very versatile but with occasional compatibility problems.
-//
-// THE MAIN WAY: You can hit one of the "accent request" key patterns immediately *before* typing
-// a letter to be accented. It will emit the corresponding accented Unicode. For example, you can
-// hit fn-e to request an acute accent, followed by i, and it will output í, U+00ED LATIN SMALL
-// LETTER I WITH ACUTE. These "combined characters" are in Unicode normal form C (NFKC), which is
-// important because many European websites and apps, in particular, tend to behave very badly
-// (misunderstanding and/or crashing) when presented with characters in other forms! The catch is
-// that this only works for the various combinations of letters and accents found in the Latin-1
-// supplement block of Unicode -- basically, things you need for Western European languages.
-//
-// (NB: If you make an accent request followed by a letter which can't take the corresponding
-// accent, it will output the uncombined form of the accent followed by whatever you typed; so
-// e.g., if you hit fn-e followed by f, it will output ´f, U+00B4 ACUTE ACCENT followed by an
-// ordinary f. This is very similar to the default behavior of MacOS.)
-//
-// THE FLEXIBLE WAY: If you hit the accent request with a shift -- e.g., fn-shift-e -- it will
-// instead immediately output the corresponding *combining* Unicode accent mark, which will modify
-// the *previous* character you typed. For example, if you type i followed by fn-shift-e, it will
-// generate í. But don't be fooled by visual similarity: unlike the previous example, this one is
-// an ordinary i followed by U+0301 COMBINING ACUTE ACCENT. It's actually *two symbols*, and this
-// is Unicode normal form D (NFKD). Unlike NFKC, there are NFKD representations of far more
-// combinations of letters and accents, and it's easy to add more of these if you need. (The NFKC
-// representation of such combinations is identical to their NFKD representation)
-//
-// Programs that try to compare Unicode strings *should* first normalize them by converting them
-// all into one normal form or another, and there are functions in every programming language to
-// do this -- e.g., JavaScript's string.normalize() -- but lots of programmers fail to understand
-// this, and so write code that massively freaks out when it encounters the wrong form.
-//
-// The current accent request codes are modeled on the ones in MacOS.
-//
-// fn+` Grave accent (`)
-// fn+e Acute accent (´)
-// fn+i Circumflex (^)
-// fn+u Diaresis / umlaut / trema (¨)
-// fn+c Cedilla (¸)
-// fn+n Tilde (˜)
-//
-// Together, these functions make for a nice "polyglot" keyboard: one that can easily type in a wide
-// variety of languages, which is very useful for people who, well, need to type in a bunch of
-// languages.
-//
-// The major TODOs are:
-// - Update the layer selection logic (and add visible layer cues);
-// - Factor the code below so that the data layers are more clearly separated from the code logic,
-// so that other users of this keymap can easily add whichever alphabets they need without
-// having to deeply understand the implementation.
-
-
-enum custom_keycodes {
- // We provide special layer management keys:
- // GREEK triggers the Greek (aka "Front") layer, or the SHIFTGREEK layer when shift is held.
- // (Because we use Unicode, we need to implement shift-handling at the firmware level,
- // rather than the OS level like we do in the QWERTY layer)
- // CADET or GREEK+ALT triggers the Cadet (aka "Top") layer, or the SHIFTCADET layer when
- // shift is held.
- // LAYER_LOCK locks the "base" layer (i.e., QWERTY, GREEK, or CADET) to the value which is
- // pressed at the moment that it is being released. When a layer lock is set, the
- // analogous layer modifier key is reversed; e.g., if you lock the GREEK layer, then the
- // GREEK button bounces you back to QWERTY.
- //
- // We also parse the shift, alt, and caps lock keys to provide management of those which is
- // compatible with these various layers.
- KC_GREEK = SAFE_RANGE,
- KC_CADET,
- KC_LAYER_LOCK,
-
- // These are the keycodes generated by the various "accent request" keystrokes.
- KC_ACCENT_START,
- KC_CGRV = KC_ACCENT_START, // Grave accent
- KC_CAGU, // Acute accent
- KC_CDIA, // Diaresis / umlaut / trema
- KC_CCIR, // Circumflex
- KC_CCED, // Cedilla
- KC_CTIL, // Tilde
- KC_ACCENT_END,
-};
-
-enum layers_keymap {
- _QWERTY = 0,
- _FUNCTION,
-
- _GREEK,
- _SHIFTGREEK,
- _CADET,
- _SHIFTCADET,
-};
-
-// This is so that H(xxxx) has the same width as _______, which makes the grids more legible.
-#define H(x) UC(0x##x)
-#define MO_FN MO(_FUNCTION)
-#define KC_LLCK KC_LAYER_LOCK
-
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- // NB: Using GESC for escape in the QWERTY layer as a temporary hack because I messed up the
- // switch on the KC_GRV key; change back to KC_ESC once this is fixed.
- [_QWERTY] = LAYOUT_hotswap(
- QK_GESC, 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_HOME, KC_END, KC_PGUP, KC_PGDN, KC_MPLY, KC_BRK,
- 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_LLCK, KC_PSLS, KC_PAST, KC_PMNS,
- 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_P7, KC_P8, KC_P9,
- KC_LCTL, 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_P4, KC_P5, KC_P6, KC_PPLS,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3,
- KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, MO_FN, KC_GREEK,KC_CADET,KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT),
- /* The Greek layers. Shown here are the QWERTY layer (for visual reference) and the two Greek
- * layers.
- * ,----------------------------------------------------------------------------
- * | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|HOM|END|PGU|PGD|MUT|BRK| QWERTY
- * | ` | ₁ | ₂ | ₃ | ₄ | ₅ | ₆ | ₇ | ₈ | ₉ | ₀ | ₋ | ₊ | ₍ | ₎ | | | | | SHIFTGREEK
- * | ` | ¹ | ² | ³ | ⁴ | ⁵ | ⁶ | ⁷ | ⁸ | ⁹ | ⁰ | ⁻ | ⁺ | ⁽ | ⁾ | | | | | GREEK
- * |---------------------------------------------------------------------------|
- * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | + | BKSPC |LCK| / | * | - |
- * | ` | ¿ | | € | | | | | | | | | ≁ | BKSPC |LCK| | ⊗ | |
- * | | | | | | | | | | | | ∝ | ∼ | BKSPC |LCK| ⊘ | ⊙ | ⊖ |
- * |---------------------------------------------------------------------------|
- * | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | 7 | 8 | 9 | |
- * | | Θ | Ω | Ε | Ρ | Τ | Ψ | Υ | Ι | Ο | Π | | | | | | | |
- * | | θ | ω | ε | ρ | τ | ψ | υ | ι | ο | π | | | | | | | |
- * |-----------------------------------------------------------------------| + |
- * | CTRL | A | S | D | F | G | H | J | K | L | ; | ' | RET | 4 | 5 | 6 | ⊕ |
- * | CTRL | Α | Σ | Δ | Φ | Γ | Η | | Κ | Λ | … | ∴ | RET | | | | |
- * | CTRL | α | σ | δ | φ | γ | η | ϑ | κ | λ | ⋯ | ⋅ | RET | | | | |
- * |-----------------------------------------------------------------------|---|
- * | SHIFT | Z | X | C | V | B | N | M | , | . | / |SHFT | ↑ | 1 | 2 | 3 | |
- * | SHIFT | Ζ | Ξ | Χ | ✔ | Β | Ν | Μ | ≲ | ≳ | |SHFT | | | | | |
- * | SHIFT | ζ | ξ | χ | ς | β | ν | μ | ≪ | ≫ | ∫ |SHFT | | | | | |
- * |-----------------------------------------------------------------------|ENT|
- * | CTL | ALT| CMD| SPACE | α | β | γ | ← | ↓ | → | 0 | . | |
- * | CTL | ALT| CMD| SPACE | α | β | γ | | | | | | |
- * | CTL | ALT| CMD| SPACE | α | β | γ | | | | | | |
- * `---------------------------------------------------------------------------'
- */
- [_GREEK] = LAYOUT_hotswap(
- KC_GRV, H(00b9), H(00b2), H(00b3), H(2074), H(2075), H(2076), H(2077), H(2078), H(2079), H(2070), H(207b), H(207a), H(207d), H(207e), XXXXXXX, XXXXXXX, XXXXXXX, _______,
- KC_GRV, _______, _______, _______, _______, _______, _______, _______, H(00b0), _______, _______, H(221d), H(223c), _______, _______, H(2298), H(2299), H(2296),
- _______, H(03b8), H(03c9), H(03b5), H(03c1), H(03c4), H(03c8), H(03c5), H(03b9), H(03bf), H(03c0), KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9,
- _______, H(03b1), H(03c3), H(03b4), H(03c6), H(03b3), H(03b7), H(03d1), H(03ba), H(03bb), H(22ef), H(22c5), _______, KC_P4, KC_P5, KC_P6, H(2295),
- _______, H(03b6), H(03be), H(03c7), H(03c2), H(03b2), H(03bd), H(03bc), H(226a), H(226b), H(222b), _______, _______, KC_P1, KC_P2, KC_P3,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_P0, KC_PDOT, KC_PENT),
- [_SHIFTGREEK] = LAYOUT_hotswap(
- KC_GRV, H(2081), H(2082), H(2083), H(2084), H(2085), H(2086), H(2087), H(2088), H(2089), H(2080), H(208b), H(208a), H(208d), H(208e), XXXXXXX, XXXXXXX, XXXXXXX, _______,
- KC_GRV, H(00bf), _______, H(20ac), _______, _______, _______, _______, _______, _______, _______, XXXXXXX, H(2241), _______, _______, XXXXXXX, H(2297), XXXXXXX,
- _______, H(0398), H(03a9), H(0395), H(03a1), H(03a4), H(03a8), H(03a5), H(0399), H(039f), H(03a0), KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9,
- _______, H(0391), H(03a3), H(0394), H(03a6), H(0393), H(0397), XXXXXXX, H(039a), H(039b), H(2026), H(2234), _______, KC_P4, KC_P5, KC_P6, H(2295),
- _______, H(0396), H(039e), H(03a7), H(2714), H(0392), H(039d), H(039c), H(2272), H(2273), XXXXXXX, _______, _______, KC_P1, KC_P2, KC_P3,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_P0, KC_PDOT, KC_PENT),
- /* The Cadet layers. Again, we show the QWERTY layer and the two cadet layers.
- * ,----------------------------------------------------------------------------
- * | ` |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|HOM|END|PGU|PGD|MUT|BRK| QWERTY
- * | ∅ | | | | | | | | | | | | | | | | | | | SHIFTCADET
- * | ¬ | | | | | | | | | | | | | | | | | | | CADET
- * |---------------------------------------------------------------------------|
- * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | + | BKSPC |LCK| / | * | - |
- * | ` | ¡ | | £ | | | | | ° | | | * | ∓ | BKSPC |LCK| | | |
- * | | | | | | | | | | | | | ± | BKSPC |LCK| | × | |
- * |---------------------------------------------------------------------------|
- * | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | 7 | 8 | 9 | |
- * | | ℚ | | | ℝ | ⊆ | ⊇ | | ℵ | ∄ | | ∉ | | | * | * | * | |
- * | | ∧ | ∨ | ∩ | ∪ | ⊂ | ⊃ | ∀ | ∞ | ∃ | ∂ | ∈ | | | * | * | * | | [1]
- * |-----------------------------------------------------------------------| + |
- * | CTRL | A | S | D | F | G | H | J | K | L | ; | ' | RET | 4 | 5 | 6 | ⊕ |
- * | CTRL | Å | | ∇ | | ⇑ | ⇓ | ⇐ | ⇒ | ⇔ | | | RET | * | * | * | |
- * | CTRL | ⟘ | ⊤ | ⊢ | ⊣ | ↑ | ↓ | ← | → | ↔ | | | RET | * | * | * | | [1]
- * |-----------------------------------------------------------------------|---|
- * | SHIFT | Z | X | C | V | B | N | M | , | . | / |SHFT | ↑ | 1 | 2 | 3 | |
- * | SHIFT | ℤ | ℂ | | ≉ | ≢ | ℕ | | | | |SHFT | | * | * | * | |
- * | SHIFT | | ≠ | | ≈ | ≡ | ≤ | ≥ | | | ÷ |SHFT | | * | * | * | | [1]
- * |-----------------------------------------------------------------------|ENT|
- * | CTL | ALT| CMD| SPACE | α | β | γ | ← | ↓ | → | 0 | . | |
- * | CTL | ALT| CMD| SPACE | α | β | γ | | | | | | |
- * | CTL | ALT| CMD| SPACE | α | β | γ | | | | | | |
- * `---------------------------------------------------------------------------'
- * [1] CADET + numpad moves the mouse. SHIFT+CADET+NUMPAD moves it more quickly. CADET+5
- * clicks the mouse, and SHIFT+CADET+FIVE right-clicks.
- */
- [_CADET] = LAYOUT_hotswap(
- H(00AC), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
- KC_GRV, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, H(00b1), _______, _______, XXXXXXX, H(00d7), XXXXXXX,
- _______, H(2227), H(2228), H(2229), H(222a), H(2282), H(2283), H(2200), H(221e), H(2203), H(2202), H(2208), XXXXXXX, XXXXXXX, KC_P7, KC_P8, KC_P9,
- _______, H(22a5), H(22a4), H(22a2), H(22a3), H(2191), H(2193), H(2190), H(2192), H(2194), XXXXXXX, XXXXXXX, _______, KC_P4, KC_P5, KC_P6, XXXXXXX,
- _______, XXXXXXX, H(2260), XXXXXXX, H(2248), H(2261), H(2264), H(2265), XXXXXXX, XXXXXXX, H(00f7), _______, _______, KC_P1, KC_P2, KC_P3,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_P0, KC_PDOT, KC_PENT),
- [_SHIFTCADET] = LAYOUT_hotswap(
- H(2205), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
- KC_GRV, H(00a1), XXXXXXX, H(00a3), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, H(2213), _______, _______, XXXXXXX, XXXXXXX, XXXXXXX,
- _______, H(211a), XXXXXXX, XXXXXXX, H(211d), H(2286), H(2287), XXXXXXX, H(2135), H(2204), XXXXXXX, H(2209), XXXXXXX, XXXXXXX, KC_P7, KC_P8, KC_P9,
- _______, H(212b), XXXXXXX, H(2207), XXXXXXX, H(21d1), H(21d3), H(21d0), H(21d2), H(21d4), XXXXXXX, XXXXXXX, _______, KC_P4, KC_P5, KC_P6, XXXXXXX,
- _______, H(2124), H(2102), XXXXXXX, H(2249), H(2262), H(2115), XXXXXXX, XXXXXXX, XXXXXXX, H(00f7), _______, _______, KC_P1, KC_P2, KC_P3,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_P0, KC_PDOT, KC_PENT),
-
- // Function layer is mostly for keyboard meta-control operations, but also contains the combining
- // accent marks. These are deliberately placed to match where the analogous controls go on Mac OS.
- [_FUNCTION] = LAYOUT_hotswap(
- KC_CGRV, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, QK_BOOT,
- KC_CGRV, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, KC_CAGU, _______, _______, _______, KC_CDIA, KC_CCIR, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, UC_MAC, UC_LINX, UC_WIN, UC_BSD, UC_WINC, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, KC_CCED, _______, _______, KC_CTIL, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
-};
-
-////////////////////////////////////////////////////////////////////////////////////////////////////
-// Accent implementation
-//
-// In the body of process_record_user, we store an "accent_request", which is the accent keycode if
-// one was just selected, or zero otherwise. When the *next* key is hit, we look up whether the
-// accent request plus that next keycode (plus the state of the shift key) together amount to an
-// interesting combined (NFKC) character, and if so, emit it; otherwise, we emit the accent as a
-// separate character and then process the next key normally. The resulting UI behavior is similar
-// to that of the combining accent keys in MacOS.
-//
-// We store two arrays, depending on whether shift is or isn't held. Each is two-dimensional, with
-// its outer key by the next keycode struck, and the inner key by the accent requested. The outer
-// array has KC_Z + 1 as its upper bound, so that we can save memory by only coding alphabetic keys.
-// The contents are either Unicode code points, or zero to indicate that we don't have a point for
-// this combination.
-
-#define KC_NUM_ACCENTS (KC_ACCENT_END - KC_ACCENT_START)
-#define KC_NUM_SLOTS (KC_Z + 1)
-
-const uint16_t PROGMEM unshifted_accents[KC_NUM_SLOTS][KC_NUM_ACCENTS] = {
- // KC_CGRV, KC_CAGU, KC_CDIA, KC_CCIR, KC_CCED, KC_CTIL
- [KC_A] = { 0x00e0, 0x00e1, 0x00e4, 0x00e2, 0, 0x00e3 },
- [KC_E] = { 0x00e8, 0x00e9, 0x00eb, 0x00ea, 0, 0 },
- [KC_I] = { 0x00ec, 0x00ed, 0x00ef, 0x00ee, 0, 0 },
- [KC_O] = { 0x00f2, 0x00f3, 0x00f6, 0x00f4, 0, 0x00f5 },
- [KC_U] = { 0x00f9, 0x00fa, 0x00fc, 0x00fb, 0, 0 },
- [KC_Y] = { 0, 0, 0x00ff, 0, 0, 0 },
- [KC_N] = { 0, 0, 0, 0, 0, 0x00f1 },
- [KC_C] = { 0, 0, 0, 0, 0x00e7, 0 },
-};
-
-const uint16_t PROGMEM shifted_accents[KC_NUM_SLOTS][KC_NUM_ACCENTS] = {
- // KC_CGRV, KC_CAGU, KC_CDIA, KC_CCIR, KC_CCED, KC_CTIL
- [KC_A] = { 0x00c0, 0x00c1, 0x00c4, 0x00c2, 0, 0x00c3 },
- [KC_E] = { 0x00c8, 0x00c9, 0x00cb, 0x00ca, 0, 0 },
- [KC_I] = { 0x00cc, 0x00cd, 0x00cf, 0x00ce, 0, 0 },
- [KC_O] = { 0x00d2, 0x00d3, 0x00d6, 0x00d4, 0, 0x00d5 },
- [KC_U] = { 0x00d9, 0x00da, 0x00dc, 0x00db, 0, 0 },
- [KC_Y] = { 0, 0, 0x00df, 0, 0, 0 },
- [KC_N] = { 0, 0, 0, 0, 0, 0x00d1 },
- [KC_C] = { 0, 0, 0, 0, 0x00c7, 0 },
-};
-
-// The uncombined and combined forms of the accents, for when we want to emit them as single
-// characters.
-const uint16_t PROGMEM uncombined_accents[KC_NUM_ACCENTS] = {
- [KC_CGRV - KC_ACCENT_START] = 0x0060,
- [KC_CAGU - KC_ACCENT_START] = 0x00b4,
- [KC_CDIA - KC_ACCENT_START] = 0x00a8,
- [KC_CCIR - KC_ACCENT_START] = 0x005e,
- [KC_CCED - KC_ACCENT_START] = 0x00b8,
- [KC_CTIL - KC_ACCENT_START] = 0x02dc,
-};
-
-const uint16_t PROGMEM combined_accents[KC_NUM_ACCENTS] = {
- [KC_CGRV - KC_ACCENT_START] = 0x0300,
- [KC_CAGU - KC_ACCENT_START] = 0x0301,
- [KC_CDIA - KC_ACCENT_START] = 0x0308,
- [KC_CCIR - KC_ACCENT_START] = 0x0302,
- [KC_CCED - KC_ACCENT_START] = 0x0327,
- [KC_CTIL - KC_ACCENT_START] = 0x0303,
-};
-
-// This function manages keypresses that happen after an accent has been selected by an earlier
-// keypress.
-// Args:
-// accent_key: The accent key which was earlier selected. This must be in the range
-// [KC_ACCENT_START, KC_ACCENT_END).
-// keycode: The keycode which was just pressed.
-// is_shifted: The current shift state (as set by a combination of shift and caps lock)
-// force_no_accent: If true, we're in a situation where we want to force there to be no
-// accent combination -- if e.g. we're in a non-QWERTY layer, or if other modifier keys
-// are held.
-//
-// Returns true if the keycode has been completely handled by this function (and so should not be
-// processed further by process_record_user) or false otherwise.
-bool process_key_after_accent(
- uint16_t accent_key,
- uint16_t keycode,
- bool is_shifted,
- bool force_no_accent
-) {
- assert(accent_key >= KC_ACCENT_START);
- assert(accent_key < KC_ACCENT_END);
- const int accent_index = accent_key - KC_ACCENT_START;
-
- // If the keycode is outside A..Z, or force_no_accent is set, we know we shouldn't even bother
- // with a table lookup.
- if (keycode <= KC_Z && !force_no_accent) {
- // Pick the correct array. Because this is progmem, we're going to need to do the
- // two-dimensional array indexing by hand, and so we just cast it to a single-dimensional array.
- const uint16_t *points = (const uint16_t*)(is_shifted ? shifted_accents : unshifted_accents);
- const uint16_t code_point = pgm_read_word_near(points + KC_NUM_ACCENTS * keycode + accent_index);
- if (code_point) {
- register_unicode(code_point);
- return true;
- }
- }
-
- // If we get here, there was no accent match. Emit the accent as its own character, and then let
- // the caller figure out what to do next.
- register_unicode(pgm_read_word_near(uncombined_accents + accent_index));
- return false;
-}
-
-// Layer bitfields.
-#define GREEK_LAYER (1UL << _GREEK)
-#define SHIFTGREEK_LAYER (1UL << _SHIFTGREEK)
-#define CADET_LAYER (1UL << _CADET)
-#define SHIFTCADET_LAYER (1UL << _SHIFTCADET)
-// The layers we don't touch.
-#define LAYER_MASK ~(GREEK_LAYER|SHIFTGREEK_LAYER|CADET_LAYER|SHIFTCADET_LAYER)
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- // We track these persistent globals and manage them on our own, rather than trying to rely on
- // get_mods or the like, because this function is called *before* that's updated!
- static bool shift_held = false;
- static bool alt_held = false;
- static bool ctrl_held = false;
- static bool super_held = false;
- static bool greek_held = false;
- static bool cadet_held = false;
-
- // These are where we remember the values of lock states.
- static bool shift_lock = false;
- static int layer_lock = _QWERTY;
-
- // The accent request, or zero if there isn't one.
- static uint16_t accent_request = 0;
-
- // If this is set to true, don't trigger any handling of pending accent requests. That's what we
- // want to do if e.g. the user just hit the shift key or something.
- bool ignore_accent_change = !record->event.pressed;
-
- // Step 1: Process any modifier key state changes, so we can maintain that state.
- if (keycode == KC_LSFT || keycode == KC_RSFT) {
- shift_held = record->event.pressed;
- ignore_accent_change = true;
- } else if (keycode == KC_LALT || keycode == KC_RALT) {
- alt_held = record->event.pressed;
- ignore_accent_change = true;
- } else if (keycode == KC_LCTL || keycode == KC_RCTL) {
- ctrl_held = record->event.pressed;
- ignore_accent_change = true;
- } else if (keycode == KC_LGUI || keycode == KC_RGUI) {
- super_held = record->event.pressed;
- ignore_accent_change = true;
- } else if (keycode == KC_GREEK) {
- greek_held = record->event.pressed;
- ignore_accent_change = true;
- } else if (keycode == KC_CADET) {
- cadet_held = record->event.pressed;
- ignore_accent_change = true;
- }
-
- // Step 2: Figure out which layer we're supposed to be in, by transforming all the prior stuff
- // into layer requests.
- const bool greek_request = (greek_held && !alt_held);
- const bool cadet_request = (cadet_held || (greek_held && alt_held));
-
- // Now, handle the lock keys. We store next_layer_lock in a local variable so that we can
- // determine the layer to pick right now before we update layer_lock.
- int next_layer_lock = layer_lock;
- if (keycode == KC_CAPS) {
- // If we're in QWERTY mode, caps lock is already going to be managed by the host OS, but by
- // tracking it ourselves we can also usefully apply it to the GREEK and CADET layers.
- if (record->event.pressed) {
- shift_lock = !shift_lock;
- }
- } else if (keycode == KC_LAYER_LOCK) {
- if (record->event.pressed) {
- if (cadet_request) {
- next_layer_lock = _CADET;
- } else if (greek_request) {
- next_layer_lock = _GREEK;
- } else {
- next_layer_lock = _QWERTY;
- }
- }
- }
-
- // OK! Now we know which buttons are being held, and the current and upcoming states of the locks.
- // We can compute our new base layer. Remember that the CADET and GREEK keys act as their own
- // antonyms if they match the layer lock -- e.g., if you have CADET locked, then CADET+X generates
- // QWERTY-X.
- int base_layer;
- if (cadet_request) {
- base_layer = (layer_lock == _CADET ? _QWERTY : _CADET);
- } else if (greek_request) {
- base_layer = (layer_lock == _GREEK ? _QWERTY : _GREEK);
- } else {
- base_layer = layer_lock;
- }
-
- const bool shifted = (shift_held != shift_lock);
- int actual_layer;
- if (base_layer == _CADET) {
- actual_layer = (shifted ? _SHIFTCADET : _CADET);
- } else if (base_layer == _GREEK) {
- actual_layer = (shifted ? _SHIFTGREEK : _GREEK);
- } else {
- // We don't do shifting for the QWERTY layer, since for that we emit USB HID codes and shifting
- // is managed by the host OS.
- actual_layer = _QWERTY;
- }
-
- // And now we can update the layer lock and the actual firmware layer selector.
- layer_lock = next_layer_lock;
- layer_state_t new_layer_state = (layer_state & LAYER_MASK) | (1UL << actual_layer);
- if (new_layer_state != layer_state) {
- layer_state_set(new_layer_state);
- }
-
- // Step 3: Handle accents. If there's a pending accent request, process it. If what the user just
- // hit creates a new accent request, update the pending state for the next keypress.
- if (!ignore_accent_change && accent_request && record->event.pressed) {
- // Only do the accent stuff if we're in the QWERTY layer and we aren't modifying something.
- const bool force_no_accent = (
- actual_layer != _QWERTY ||
- ctrl_held ||
- super_held ||
- alt_held
- );
- const uint16_t old_accent = accent_request;
- accent_request = 0;
- if (process_key_after_accent(old_accent, keycode, shifted, force_no_accent)) {
- return false;
- }
- }
-
- // And if a new accent request just arrived, update accent_request.
- if (keycode >= KC_ACCENT_START && keycode < KC_ACCENT_END && record->event.pressed) {
- if (shifted) {
- // Shift + accent request generates the combining accent key, and leaves accent_request alone.
- register_unicode(pgm_read_word_near(combined_accents + keycode - KC_ACCENT_START));
- return false;
- } else {
- accent_request = keycode;
- }
- }
-
- return true;
-}
diff --git a/keyboards/ymdk/melody96/keymaps/zunger/readme.md b/keyboards/ymdk/melody96/keymaps/zunger/readme.md
deleted file mode 100644
index 3eb64a2e73..0000000000
--- a/keyboards/ymdk/melody96/keymaps/zunger/readme.md
+++ /dev/null
@@ -1,78 +0,0 @@
-* The "Cadet-Style" keymap for the melody96.
-* Author: Yonatan Zunger (zunger@gmail.com)
-
-This is an experimental keymap being used both for practical reasons (as my daily driver) and to
-work out the ideas of a "space-cadet-style" keyboard which can type text and mathematical symbols
-with equal ease. It's designed for anyone who frequently needs to do this outside of a LaTeX
-environment, or for anyone who loves the old "Space Cadet" keyboard! And it works at its best when
-you have actual Cadet keycaps (like SA Symbolics) installed, because those keycaps will actually
-show what you get.
-
-The core idea of this keyboard is that, in addition to a QWERTY base layer and a function layer, it
-supports two additional base layers -- the GREEK layer (the analogue of the Space Cadet "Greek," or
-"Front," keys) and the CADET layer (the analogue of the Space Cadet "Top" keys). These layers use
-Unicode to generate all of the mathematical symbols you can find on a traditional Space Cadet
-layout, plus a bunch of extras.
-
-Because Unicode can't be encoded using the traditional USB HID protocol, QMK does some clever but
-horrifying things to fool your OS. One consequence of this is that the shift key needs to be handled
-by the keyboard firmware, not the host OS. To handle this, we have two additional layers --
-SHIFTGREEK and SHIFTCADET -- and handle the flipping between all of these layers here in the
-firmware.
-
-*The simple bit: Using this layout on a Melody96*
-
-At the core of this layout are three special modifier keys and two special lock keys:
-
-* The GREEK key, to the right of the spacebar, activates the GREEK layer. GREEK+SHIFT activates
- SHIFTGREEK. These keys generate Greek letters on the letter keys (thus the name), and a few
- mathematical symbols on other keys. They correspond to the notations on the front of traditional
- Space Cadet keys; if your capset doesn't include those (alas, most don't), they're the "pretty
- obvious" mappings.
-* The CADET key, to the right of GREEK, activates the CADET layer. These are the symbols above the
- letters on a Space Cadet layout. CADET+SHIFT activates the SHIFTCADET layer, with even more
- symbols.
-* The FUNCTION key, to the right of CADET, activates the function layer. This is where you have a
- reset mechanism, a selector for which Unicode input type you want, and so on.
-
-Additionally, GREEK+ALT is equivalent to CADET. This is handy for other keyboards where you don't
-have room for this many modifiers.
-
-The lock keys are:
-
-* Caps lock, if you use it, will also act as a "shift lock" for the Greek and Cadet layers. Shift
- lock is slightly different, in that while it is engaged shift will _dis_engage it; that's actually
- pretty useful when typing math.
-* An additional "layer lock" key, by default where "num lock" usually goes, will lock the choice of
- base layer. To use it, hold down any invocation of the GREEK or CADET layers, or none at all, and
- hit lock; it will then put you in that layer. The corresponding modifier key will then toggle you
- back to the QWERTY layer. (So for example, if you hit GREEK+LAYER_LOCK and release them, you're
- now typing in Greek; the GREEK modifier would cause you to type QWERTY momentarily. To go back to
- ordinary QWERTY mode, you'd just hit LAYER_LOCK again with no modifiers held)
-
-To see the full layout, check out the big comment in keymap.c.
-
-*A less-simple bit: Adapting this to other keyboards*
-
-This is really a canary for generic Cadet implementations. Before this can be made generic, a few
-things will have to happen:
-
-(1) Instead of a fixed keymap, this has to be refactored into some kind of array showing the
-mappings of QWERTY-layer keys onto the appropriate code points in the GREEK and CADET layers, and
-some preprocessor magic needs to auto-transform this plus a traditional keymap for the QWERTY layer
-into keymaps for all five of the core layers. (Function layers would presumably be handled on a
-per-keyboard basis)
-
-(2) The standard mapping of those should have some #define's to control things like whether there
-are physical F-keys (you would probably want to move superscript and subscripts onto the numbers if
-there weren't, and figure out what to do with the non-numeric super/sub keys), whether you actually
-want to enable GREEK+ALT=CADET, and so on;
-
-(3) There should be support for controlling indicator LEDs based on the base layer selection,
-caps/shift lock state, and layer lock state, as well as for triggering audio on transitions;
-
-(4) All the core fancy logic in process_record_user which implements the layer handling should be
-factored out into its own function, so that keyboards can easily reuse that, too.
-
-This is a lovely TODO for future work, and could be particularly fun to go along with new releases
-of SA Symbolics and the like. Anyone interested in such things, ping me!
diff --git a/keyboards/ymdk/melody96/keymaps/zunger/rules.mk b/keyboards/ymdk/melody96/keymaps/zunger/rules.mk
deleted file mode 100644
index a61cfa33fa..0000000000
--- a/keyboards/ymdk/melody96/keymaps/zunger/rules.mk
+++ /dev/null
@@ -1,2 +0,0 @@
-# You need Unicode for this map.
-UNICODE_ENABLE = yes # Unicode
diff --git a/keyboards/ymdk/melody96/matrix_diagram.md b/keyboards/ymdk/melody96/matrix_diagram.md
deleted file mode 100644
index e589bcc469..0000000000
--- a/keyboards/ymdk/melody96/matrix_diagram.md
+++ /dev/null
@@ -1,35 +0,0 @@
-# Matrix Diagram for YMDK Melody96
-
-```
-┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
-│50 │51 │52 │53 │54 │55 │56 │57 │58 │B8 │B7 │B5 │B4 │B3 │B6 │B2 │B1 │B0 │63 │
-├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤ ┌───────┐
-│40 │41 │42 │43 │44 │45 │56 │47 │48 │A8 │A7 │A5 │A4 │A3 │A6 │A2 │A1 │A0 │64 │ │A6 │ 2u Backpsace
-├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┼───┼───┼───┼───┤ └─┬─────┤ ┌───┐
-│30 │31 │32 │33 │34 │35 │36 │37 │38 │98 │97 │95 │94 │84 │96 │92 │91 │90 │ │ │ │ │
-├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┼───┼───┼───┤ ┌──┴┐93 │ ISO Enter │80 │ Numpad "+" 2u
-│20 │21 │22 │23 │24 │25 │26 │27 │28 │88 │87 │85 │93 │86 │82 │81 │80 │ │84 │ │ │ │
-├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┼───┼───┼───┤ └───┴────┘ ├───┤
-│10 │11 │12 │13 │14 │15 │16 │17 │18 │78 │77 │75 │74 │73 │76 │72 │71 │70 │ │ │
-├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┼───┼───┼───┼───┼───┤ ┌───────┐ │60 │ Numpad Enter 2U
-│00 │01 │02 │06 │08 │07 │05 │04 │03 │66 │62 │61 │60 │ Numpad 0 2u │62 │ │ │
-└────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┴───┴───┴───┘ └───────┘ └───┘
-┌────────┐ ┌──────────┐
-│10 │ 2.25u LShift 2.75u RShift │74 │
-└────────┘ └──────────┘
-┌────┬────┬────┬────────────────────────┬────┬────┬────┬────┐
-│00 │01 │02 │06 │08 │07 │04 │03 │ 4x1.25u Right Mod
-└────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
-┌─────┬─────┬───────────────────────────┬───┬───┬───┬───┬───┐
-│00 │01 │06 │08 │07 │05 │04 │03 │ 2x1.5u Left Mod
-└─────┴─────┴───────────────────────────┴───┴───┴───┴───┴───┘
-┌─────┬───┬─────┬───────────────────────┬─────┬─────┬───┬───┐
-│00 │01 │02 │06 │08 │05 │04 │03 │ Tsangan Left Mod, 2x1.5u-2x1u Right Mod
-└─────┴───┴─────┴───────────────────────┴─────┴─────┴───┴───┘
-┌─────┬───┬─────┬───────────────────────────┬─────┬───┬─────┐
-│00 │01 │02 │06 │07 │04 │03 │ Tsangan/WKL/HHKB
-└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
-┌─────┬───┬─────┬───────────────────────────┬───┬───┬───┬───┐
-│00 │01 │02 │06 │07 │05 │04 │03 │ 4x1u Right Mod
-└─────┴───┴─────┴───────────────────────────┴───┴───┴───┴───┘
-```
diff --git a/keyboards/ymdk/melody96/readme.md b/keyboards/ymdk/melody96/readme.md
deleted file mode 100644
index e0e57a081e..0000000000
--- a/keyboards/ymdk/melody96/readme.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# YMDK Melody96 Soldered
-
-![melody96](https://i.imgur.com/9o0a6XFh.png)
-
-96-key Keyboard from YMDK. The PCB for this board is also commonly used in the NYM96.
-
-* Keyboard Maintainer: [superuser41](https://github.com/kaylanm)
-* Hardware Supported: Melody96 Soldered PCBs
-* Hardware Availability: [YMDK on Geekhack, group buy closed](https://geekhack.org/index.php?topic=93614.0), [NYM96 on Massdrop](https://www.massdrop.com/buy/nym96-aluminum-mechanical-keyboard?mode=guest_open)
-
-Make example for this keyboard (after setting up your build environment):
-
- make ymdk/melody96:default
-
-Flashing example for this keyboard:
-
- make ymdk/melody96: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).
diff --git a/keyboards/ymdk/melody96/rules.mk b/keyboards/ymdk/melody96/rules.mk
index 3d5cb57ad5..806543977b 100644
--- a/keyboards/ymdk/melody96/rules.mk
+++ b/keyboards/ymdk/melody96/rules.mk
@@ -1,12 +1 @@
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = yes # Enable N-Key Rollover
-BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
+DEFAULT_FOLDER = ymdk/melody96/soldered
diff --git a/keyboards/ymdk/melody96/soldered/config.h b/keyboards/ymdk/melody96/soldered/config.h
new file mode 100644
index 0000000000..5f36081323
--- /dev/null
+++ b/keyboards/ymdk/melody96/soldered/config.h
@@ -0,0 +1,7 @@
+#pragma once
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
diff --git a/keyboards/ymdk/melody96/soldered/info.json b/keyboards/ymdk/melody96/soldered/info.json
new file mode 100644
index 0000000000..f941c65970
--- /dev/null
+++ b/keyboards/ymdk/melody96/soldered/info.json
@@ -0,0 +1,1039 @@
+{
+ "keyboard_name": "Melody96 Soldered",
+ "manufacturer": "YMDK",
+ "url": "",
+ "maintainer": "qmk",
+ "usb": {
+ "vid": "0x594D",
+ "pid": "0x4D96",
+ "device_version": "0.0.1"
+ },
+ "matrix_pins": {
+ "cols": ["D0", "D1", "D2", "D3", "D5", "D4", "D6", "D7", "B4"],
+ "rows": ["B7", "B3", "B2", "B1", "B0", "E6", "F0", "F1", "F4", "F5", "F6", "F7"]
+ },
+ "diode_direction": "ROW2COL",
+ "backlight": {
+ "pin": "B6",
+ "levels": 5
+ },
+ "rgblight": {
+ "saturation_steps": 8,
+ "brightness_steps": 8,
+ "led_count": 18,
+ "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": "E2"
+ },
+ "indicators": {
+ "caps_lock": "C7",
+ "num_lock": "C6",
+ "scroll_lock": "B5",
+ "on_state": 0
+ },
+ "bootmagic": {
+ "matrix": [5, 0]
+ },
+ "processor": "atmega32u4",
+ "bootloader": "atmel-dfu",
+ "layout_aliases": {
+ "LAYOUT": "LAYOUT_all"
+ },
+ "community_layouts": ["96_ansi", "96_iso"],
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ {"matrix": [5, 0], "x": 0, "y": 0},
+ {"matrix": [5, 1], "x": 1, "y": 0},
+ {"matrix": [5, 2], "x": 2, "y": 0},
+ {"matrix": [5, 3], "x": 3, "y": 0},
+ {"matrix": [5, 4], "x": 4, "y": 0},
+ {"matrix": [5, 5], "x": 5, "y": 0},
+ {"matrix": [5, 6], "x": 6, "y": 0},
+ {"matrix": [5, 7], "x": 7, "y": 0},
+ {"matrix": [5, 8], "x": 8, "y": 0},
+ {"matrix": [11, 8], "x": 9, "y": 0},
+ {"matrix": [11, 7], "x": 10, "y": 0},
+ {"matrix": [11, 5], "x": 11, "y": 0},
+ {"matrix": [11, 4], "x": 12, "y": 0},
+ {"matrix": [11, 3], "x": 13, "y": 0},
+ {"matrix": [11, 6], "x": 14, "y": 0},
+ {"matrix": [11, 2], "x": 15, "y": 0},
+ {"matrix": [11, 1], "x": 16, "y": 0},
+ {"matrix": [11, 0], "x": 17, "y": 0},
+ {"matrix": [6, 3], "x": 18, "y": 0},
+
+ {"matrix": [4, 0], "x": 0, "y": 1},
+ {"matrix": [4, 1], "x": 1, "y": 1},
+ {"matrix": [4, 2], "x": 2, "y": 1},
+ {"matrix": [4, 3], "x": 3, "y": 1},
+ {"matrix": [4, 4], "x": 4, "y": 1},
+ {"matrix": [4, 5], "x": 5, "y": 1},
+ {"matrix": [4, 6], "x": 6, "y": 1},
+ {"matrix": [4, 7], "x": 7, "y": 1},
+ {"matrix": [4, 8], "x": 8, "y": 1},
+ {"matrix": [10, 8], "x": 9, "y": 1},
+ {"matrix": [10, 7], "x": 10, "y": 1},
+ {"matrix": [10, 5], "x": 11, "y": 1},
+ {"matrix": [10, 4], "x": 12, "y": 1},
+ {"matrix": [10, 3], "x": 13, "y": 1},
+ {"matrix": [10, 6], "x": 14, "y": 1},
+ {"matrix": [10, 2], "x": 15, "y": 1},
+ {"matrix": [10, 1], "x": 16, "y": 1},
+ {"matrix": [10, 0], "x": 17, "y": 1},
+ {"matrix": [6, 4], "x": 18, "y": 1},
+
+ {"matrix": [3, 0], "x": 0, "y": 2, "w": 1.5},
+ {"matrix": [3, 1], "x": 1.5, "y": 2},
+ {"matrix": [3, 2], "x": 2.5, "y": 2},
+ {"matrix": [3, 3], "x": 3.5, "y": 2},
+ {"matrix": [3, 4], "x": 4.5, "y": 2},
+ {"matrix": [3, 5], "x": 5.5, "y": 2},
+ {"matrix": [3, 6], "x": 6.5, "y": 2},
+ {"matrix": [3, 7], "x": 7.5, "y": 2},
+ {"matrix": [3, 8], "x": 8.5, "y": 2},
+ {"matrix": [9, 8], "x": 9.5, "y": 2},
+ {"matrix": [9, 7], "x": 10.5, "y": 2},
+ {"matrix": [9, 5], "x": 11.5, "y": 2},
+ {"matrix": [9, 4], "x": 12.5, "y": 2},
+ {"matrix": [8, 4], "x": 13.5, "y": 2, "w": 1.5},
+ {"matrix": [9, 6], "x": 15, "y": 2},
+ {"matrix": [9, 2], "x": 16, "y": 2},
+ {"matrix": [9, 1], "x": 17, "y": 2},
+ {"matrix": [9, 0], "x": 18, "y": 2},
+
+ {"matrix": [2, 0], "x": 0, "y": 3, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 3},
+ {"matrix": [2, 2], "x": 2.75, "y": 3},
+ {"matrix": [2, 3], "x": 3.75, "y": 3},
+ {"matrix": [2, 4], "x": 4.75, "y": 3},
+ {"matrix": [2, 5], "x": 5.75, "y": 3},
+ {"matrix": [2, 6], "x": 6.75, "y": 3},
+ {"matrix": [2, 7], "x": 7.75, "y": 3},
+ {"matrix": [2, 8], "x": 8.75, "y": 3},
+ {"matrix": [8, 8], "x": 9.75, "y": 3},
+ {"matrix": [8, 7], "x": 10.75, "y": 3},
+ {"matrix": [8, 5], "x": 11.75, "y": 3},
+ {"matrix": [9, 3], "x": 12.75, "y": 3, "w": 2.25},
+ {"matrix": [8, 6], "x": 15, "y": 3},
+ {"matrix": [8, 2], "x": 16, "y": 3},
+ {"matrix": [8, 1], "x": 17, "y": 3},
+ {"matrix": [8, 0], "x": 18, "y": 3},
+
+ {"matrix": [1, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [1, 1], "x": 1.25, "y": 4},
+ {"matrix": [1, 2], "x": 2.25, "y": 4},
+ {"matrix": [1, 3], "x": 3.25, "y": 4},
+ {"matrix": [1, 4], "x": 4.25, "y": 4},
+ {"matrix": [1, 5], "x": 5.25, "y": 4},
+ {"matrix": [1, 6], "x": 6.25, "y": 4},
+ {"matrix": [1, 7], "x": 7.25, "y": 4},
+ {"matrix": [1, 8], "x": 8.25, "y": 4},
+ {"matrix": [7, 8], "x": 9.25, "y": 4},
+ {"matrix": [7, 7], "x": 10.25, "y": 4},
+ {"matrix": [7, 5], "x": 11.25, "y": 4},
+ {"matrix": [7, 4], "x": 12.25, "y": 4, "w": 1.75},
+ {"matrix": [7, 3], "x": 14, "y": 4},
+ {"matrix": [7, 6], "x": 15, "y": 4},
+ {"matrix": [7, 2], "x": 16, "y": 4},
+ {"matrix": [7, 1], "x": 17, "y": 4},
+ {"matrix": [7, 0], "x": 18, "y": 4},
+
+ {"matrix": [0, 0], "x": 0, "y": 5, "w": 1.25},
+ {"matrix": [0, 1], "x": 1.25, "y": 5, "w": 1.25},
+ {"matrix": [0, 2], "x": 2.5, "y": 5, "w": 1.25},
+ {"matrix": [0, 6], "x": 3.75, "y": 5, "w": 6.25},
+ {"matrix": [0, 8], "x": 10, "y": 5},
+ {"matrix": [0, 7], "x": 11, "y": 5},
+ {"matrix": [0, 5], "x": 12, "y": 5},
+ {"matrix": [0, 4], "x": 13, "y": 5},
+ {"matrix": [0, 3], "x": 14, "y": 5},
+ {"matrix": [6, 6], "x": 15, "y": 5},
+ {"matrix": [6, 2], "x": 16, "y": 5},
+ {"matrix": [6, 1], "x": 17, "y": 5},
+ {"matrix": [6, 0], "x": 18, "y": 5}
+ ]
+ },
+ "LAYOUT_96_ansi": {
+ "layout": [
+ {"matrix": [5, 0], "x": 0, "y": 0},
+ {"matrix": [5, 1], "x": 1, "y": 0},
+ {"matrix": [5, 2], "x": 2, "y": 0},
+ {"matrix": [5, 3], "x": 3, "y": 0},
+ {"matrix": [5, 4], "x": 4, "y": 0},
+ {"matrix": [5, 5], "x": 5, "y": 0},
+ {"matrix": [5, 6], "x": 6, "y": 0},
+ {"matrix": [5, 7], "x": 7, "y": 0},
+ {"matrix": [5, 8], "x": 8, "y": 0},
+ {"matrix": [11, 8], "x": 9, "y": 0},
+ {"matrix": [11, 7], "x": 10, "y": 0},
+ {"matrix": [11, 5], "x": 11, "y": 0},
+ {"matrix": [11, 4], "x": 12, "y": 0},
+ {"matrix": [11, 3], "x": 13, "y": 0},
+ {"matrix": [11, 6], "x": 14, "y": 0},
+ {"matrix": [11, 2], "x": 15, "y": 0},
+ {"matrix": [11, 1], "x": 16, "y": 0},
+ {"matrix": [11, 0], "x": 17, "y": 0},
+ {"matrix": [6, 3], "x": 18, "y": 0},
+
+ {"matrix": [4, 0], "x": 0, "y": 1},
+ {"matrix": [4, 1], "x": 1, "y": 1},
+ {"matrix": [4, 2], "x": 2, "y": 1},
+ {"matrix": [4, 3], "x": 3, "y": 1},
+ {"matrix": [4, 4], "x": 4, "y": 1},
+ {"matrix": [4, 5], "x": 5, "y": 1},
+ {"matrix": [4, 6], "x": 6, "y": 1},
+ {"matrix": [4, 7], "x": 7, "y": 1},
+ {"matrix": [4, 8], "x": 8, "y": 1},
+ {"matrix": [10, 8], "x": 9, "y": 1},
+ {"matrix": [10, 7], "x": 10, "y": 1},
+ {"matrix": [10, 5], "x": 11, "y": 1},
+ {"matrix": [10, 4], "x": 12, "y": 1},
+ {"matrix": [10, 6], "x": 13, "y": 1, "w": 2},
+ {"matrix": [10, 2], "x": 15, "y": 1},
+ {"matrix": [10, 1], "x": 16, "y": 1},
+ {"matrix": [10, 0], "x": 17, "y": 1},
+ {"matrix": [6, 4], "x": 18, "y": 1},
+
+ {"matrix": [3, 0], "x": 0, "y": 2, "w": 1.5},
+ {"matrix": [3, 1], "x": 1.5, "y": 2},
+ {"matrix": [3, 2], "x": 2.5, "y": 2},
+ {"matrix": [3, 3], "x": 3.5, "y": 2},
+ {"matrix": [3, 4], "x": 4.5, "y": 2},
+ {"matrix": [3, 5], "x": 5.5, "y": 2},
+ {"matrix": [3, 6], "x": 6.5, "y": 2},
+ {"matrix": [3, 7], "x": 7.5, "y": 2},
+ {"matrix": [3, 8], "x": 8.5, "y": 2},
+ {"matrix": [9, 8], "x": 9.5, "y": 2},
+ {"matrix": [9, 7], "x": 10.5, "y": 2},
+ {"matrix": [9, 5], "x": 11.5, "y": 2},
+ {"matrix": [9, 4], "x": 12.5, "y": 2},
+ {"matrix": [8, 4], "x": 13.5, "y": 2, "w": 1.5},
+ {"matrix": [9, 6], "x": 15, "y": 2},
+ {"matrix": [9, 2], "x": 16, "y": 2},
+ {"matrix": [9, 1], "x": 17, "y": 2},
+ {"matrix": [8, 0], "x": 18, "y": 2, "h": 2},
+
+ {"matrix": [2, 0], "x": 0, "y": 3, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 3},
+ {"matrix": [2, 2], "x": 2.75, "y": 3},
+ {"matrix": [2, 3], "x": 3.75, "y": 3},
+ {"matrix": [2, 4], "x": 4.75, "y": 3},
+ {"matrix": [2, 5], "x": 5.75, "y": 3},
+ {"matrix": [2, 6], "x": 6.75, "y": 3},
+ {"matrix": [2, 7], "x": 7.75, "y": 3},
+ {"matrix": [2, 8], "x": 8.75, "y": 3},
+ {"matrix": [8, 8], "x": 9.75, "y": 3},
+ {"matrix": [8, 7], "x": 10.75, "y": 3},
+ {"matrix": [8, 5], "x": 11.75, "y": 3},
+ {"matrix": [9, 3], "x": 12.75, "y": 3, "w": 2.25},
+ {"matrix": [8, 6], "x": 15, "y": 3},
+ {"matrix": [8, 2], "x": 16, "y": 3},
+ {"matrix": [8, 1], "x": 17, "y": 3},
+
+ {"matrix": [1, 0], "x": 0, "y": 4, "w": 2.25},
+ {"matrix": [1, 2], "x": 2.25, "y": 4},
+ {"matrix": [1, 3], "x": 3.25, "y": 4},
+ {"matrix": [1, 4], "x": 4.25, "y": 4},
+ {"matrix": [1, 5], "x": 5.25, "y": 4},
+ {"matrix": [1, 6], "x": 6.25, "y": 4},
+ {"matrix": [1, 7], "x": 7.25, "y": 4},
+ {"matrix": [1, 8], "x": 8.25, "y": 4},
+ {"matrix": [7, 8], "x": 9.25, "y": 4},
+ {"matrix": [7, 7], "x": 10.25, "y": 4},
+ {"matrix": [7, 5], "x": 11.25, "y": 4},
+ {"matrix": [7, 4], "x": 12.25, "y": 4, "w": 1.75},
+ {"matrix": [7, 3], "x": 14, "y": 4},
+ {"matrix": [7, 6], "x": 15, "y": 4},
+ {"matrix": [7, 2], "x": 16, "y": 4},
+ {"matrix": [7, 1], "x": 17, "y": 4},
+ {"matrix": [6, 0], "x": 18, "y": 4, "h": 2},
+
+ {"matrix": [0, 0], "x": 0, "y": 5, "w": 1.25},
+ {"matrix": [0, 1], "x": 1.25, "y": 5, "w": 1.25},
+ {"matrix": [0, 2], "x": 2.5, "y": 5, "w": 1.25},
+ {"matrix": [0, 6], "x": 3.75, "y": 5, "w": 6.25},
+ {"matrix": [0, 8], "x": 10, "y": 5},
+ {"matrix": [0, 7], "x": 11, "y": 5},
+ {"matrix": [0, 5], "x": 12, "y": 5},
+ {"matrix": [0, 4], "x": 13, "y": 5},
+ {"matrix": [0, 3], "x": 14, "y": 5},
+ {"matrix": [6, 6], "x": 15, "y": 5},
+ {"matrix": [6, 2], "x": 16, "y": 5},
+ {"matrix": [6, 1], "x": 17, "y": 5}
+ ]
+ },
+ "LAYOUT_96_ansi_splitbs": {
+ "layout": [
+ {"matrix": [5, 0], "x": 0, "y": 0},
+ {"matrix": [5, 1], "x": 1, "y": 0},
+ {"matrix": [5, 2], "x": 2, "y": 0},
+ {"matrix": [5, 3], "x": 3, "y": 0},
+ {"matrix": [5, 4], "x": 4, "y": 0},
+ {"matrix": [5, 5], "x": 5, "y": 0},
+ {"matrix": [5, 6], "x": 6, "y": 0},
+ {"matrix": [5, 7], "x": 7, "y": 0},
+ {"matrix": [5, 8], "x": 8, "y": 0},
+ {"matrix": [11, 8], "x": 9, "y": 0},
+ {"matrix": [11, 7], "x": 10, "y": 0},
+ {"matrix": [11, 5], "x": 11, "y": 0},
+ {"matrix": [11, 4], "x": 12, "y": 0},
+ {"matrix": [11, 3], "x": 13, "y": 0},
+ {"matrix": [11, 6], "x": 14, "y": 0},
+ {"matrix": [11, 2], "x": 15, "y": 0},
+ {"matrix": [11, 1], "x": 16, "y": 0},
+ {"matrix": [11, 0], "x": 17, "y": 0},
+ {"matrix": [6, 3], "x": 18, "y": 0},
+
+ {"matrix": [4, 0], "x": 0, "y": 1},
+ {"matrix": [4, 1], "x": 1, "y": 1},
+ {"matrix": [4, 2], "x": 2, "y": 1},
+ {"matrix": [4, 3], "x": 3, "y": 1},
+ {"matrix": [4, 4], "x": 4, "y": 1},
+ {"matrix": [4, 5], "x": 5, "y": 1},
+ {"matrix": [4, 6], "x": 6, "y": 1},
+ {"matrix": [4, 7], "x": 7, "y": 1},
+ {"matrix": [4, 8], "x": 8, "y": 1},
+ {"matrix": [10, 8], "x": 9, "y": 1},
+ {"matrix": [10, 7], "x": 10, "y": 1},
+ {"matrix": [10, 5], "x": 11, "y": 1},
+ {"matrix": [10, 4], "x": 12, "y": 1},
+ {"matrix": [10, 3], "x": 13, "y": 1},
+ {"matrix": [10, 6], "x": 14, "y": 1},
+ {"matrix": [10, 2], "x": 15, "y": 1},
+ {"matrix": [10, 1], "x": 16, "y": 1},
+ {"matrix": [10, 0], "x": 17, "y": 1},
+ {"matrix": [6, 4], "x": 18, "y": 1},
+
+ {"matrix": [3, 0], "x": 0, "y": 2, "w": 1.5},
+ {"matrix": [3, 1], "x": 1.5, "y": 2},
+ {"matrix": [3, 2], "x": 2.5, "y": 2},
+ {"matrix": [3, 3], "x": 3.5, "y": 2},
+ {"matrix": [3, 4], "x": 4.5, "y": 2},
+ {"matrix": [3, 5], "x": 5.5, "y": 2},
+ {"matrix": [3, 6], "x": 6.5, "y": 2},
+ {"matrix": [3, 7], "x": 7.5, "y": 2},
+ {"matrix": [3, 8], "x": 8.5, "y": 2},
+ {"matrix": [9, 8], "x": 9.5, "y": 2},
+ {"matrix": [9, 7], "x": 10.5, "y": 2},
+ {"matrix": [9, 5], "x": 11.5, "y": 2},
+ {"matrix": [9, 4], "x": 12.5, "y": 2},
+ {"matrix": [8, 4], "x": 13.5, "y": 2, "w": 1.5},
+ {"matrix": [9, 6], "x": 15, "y": 2},
+ {"matrix": [9, 2], "x": 16, "y": 2},
+ {"matrix": [9, 1], "x": 17, "y": 2},
+ {"matrix": [8, 0], "x": 18, "y": 2, "h": 2},
+
+ {"matrix": [2, 0], "x": 0, "y": 3, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 3},
+ {"matrix": [2, 2], "x": 2.75, "y": 3},
+ {"matrix": [2, 3], "x": 3.75, "y": 3},
+ {"matrix": [2, 4], "x": 4.75, "y": 3},
+ {"matrix": [2, 5], "x": 5.75, "y": 3},
+ {"matrix": [2, 6], "x": 6.75, "y": 3},
+ {"matrix": [2, 7], "x": 7.75, "y": 3},
+ {"matrix": [2, 8], "x": 8.75, "y": 3},
+ {"matrix": [8, 8], "x": 9.75, "y": 3},
+ {"matrix": [8, 7], "x": 10.75, "y": 3},
+ {"matrix": [8, 5], "x": 11.75, "y": 3},
+ {"matrix": [9, 3], "x": 12.75, "y": 3, "w": 2.25},
+ {"matrix": [8, 6], "x": 15, "y": 3},
+ {"matrix": [8, 2], "x": 16, "y": 3},
+ {"matrix": [8, 1], "x": 17, "y": 3},
+
+ {"matrix": [1, 0], "x": 0, "y": 4, "w": 2.25},
+ {"matrix": [1, 2], "x": 2.25, "y": 4},
+ {"matrix": [1, 3], "x": 3.25, "y": 4},
+ {"matrix": [1, 4], "x": 4.25, "y": 4},
+ {"matrix": [1, 5], "x": 5.25, "y": 4},
+ {"matrix": [1, 6], "x": 6.25, "y": 4},
+ {"matrix": [1, 7], "x": 7.25, "y": 4},
+ {"matrix": [1, 8], "x": 8.25, "y": 4},
+ {"matrix": [7, 8], "x": 9.25, "y": 4},
+ {"matrix": [7, 7], "x": 10.25, "y": 4},
+ {"matrix": [7, 5], "x": 11.25, "y": 4},
+ {"matrix": [7, 4], "x": 12.25, "y": 4, "w": 1.75},
+ {"matrix": [7, 3], "x": 14, "y": 4},
+ {"matrix": [7, 6], "x": 15, "y": 4},
+ {"matrix": [7, 2], "x": 16, "y": 4},
+ {"matrix": [7, 1], "x": 17, "y": 4},
+ {"matrix": [6, 0], "x": 18, "y": 4, "h": 2},
+
+ {"matrix": [0, 0], "x": 0, "y": 5, "w": 1.25},
+ {"matrix": [0, 1], "x": 1.25, "y": 5, "w": 1.25},
+ {"matrix": [0, 2], "x": 2.5, "y": 5, "w": 1.25},
+ {"matrix": [0, 6], "x": 3.75, "y": 5, "w": 6.25},
+ {"matrix": [0, 8], "x": 10, "y": 5},
+ {"matrix": [0, 7], "x": 11, "y": 5},
+ {"matrix": [0, 5], "x": 12, "y": 5},
+ {"matrix": [0, 4], "x": 13, "y": 5},
+ {"matrix": [0, 3], "x": 14, "y": 5},
+ {"matrix": [6, 6], "x": 15, "y": 5},
+ {"matrix": [6, 2], "x": 16, "y": 5},
+ {"matrix": [6, 1], "x": 17, "y": 5}
+ ]
+ },
+ "LAYOUT_96_iso": {
+ "layout": [
+ {"matrix": [5, 0], "x": 0, "y": 0},
+ {"matrix": [5, 1], "x": 1, "y": 0},
+ {"matrix": [5, 2], "x": 2, "y": 0},
+ {"matrix": [5, 3], "x": 3, "y": 0},
+ {"matrix": [5, 4], "x": 4, "y": 0},
+ {"matrix": [5, 5], "x": 5, "y": 0},
+ {"matrix": [5, 6], "x": 6, "y": 0},
+ {"matrix": [5, 7], "x": 7, "y": 0},
+ {"matrix": [5, 8], "x": 8, "y": 0},
+ {"matrix": [11, 8], "x": 9, "y": 0},
+ {"matrix": [11, 7], "x": 10, "y": 0},
+ {"matrix": [11, 5], "x": 11, "y": 0},
+ {"matrix": [11, 4], "x": 12, "y": 0},
+ {"matrix": [11, 3], "x": 13, "y": 0},
+ {"matrix": [11, 6], "x": 14, "y": 0},
+ {"matrix": [11, 2], "x": 15, "y": 0},
+ {"matrix": [11, 1], "x": 16, "y": 0},
+ {"matrix": [11, 0], "x": 17, "y": 0},
+ {"matrix": [6, 3], "x": 18, "y": 0},
+
+ {"matrix": [4, 0], "x": 0, "y": 1},
+ {"matrix": [4, 1], "x": 1, "y": 1},
+ {"matrix": [4, 2], "x": 2, "y": 1},
+ {"matrix": [4, 3], "x": 3, "y": 1},
+ {"matrix": [4, 4], "x": 4, "y": 1},
+ {"matrix": [4, 5], "x": 5, "y": 1},
+ {"matrix": [4, 6], "x": 6, "y": 1},
+ {"matrix": [4, 7], "x": 7, "y": 1},
+ {"matrix": [4, 8], "x": 8, "y": 1},
+ {"matrix": [10, 8], "x": 9, "y": 1},
+ {"matrix": [10, 7], "x": 10, "y": 1},
+ {"matrix": [10, 5], "x": 11, "y": 1},
+ {"matrix": [10, 4], "x": 12, "y": 1},
+ {"matrix": [10, 6], "x": 13, "y": 1, "w": 2},
+ {"matrix": [10, 2], "x": 15, "y": 1},
+ {"matrix": [10, 1], "x": 16, "y": 1},
+ {"matrix": [10, 0], "x": 17, "y": 1},
+ {"matrix": [6, 4], "x": 18, "y": 1},
+
+ {"matrix": [3, 0], "x": 0, "y": 2, "w": 1.5},
+ {"matrix": [3, 1], "x": 1.5, "y": 2},
+ {"matrix": [3, 2], "x": 2.5, "y": 2},
+ {"matrix": [3, 3], "x": 3.5, "y": 2},
+ {"matrix": [3, 4], "x": 4.5, "y": 2},
+ {"matrix": [3, 5], "x": 5.5, "y": 2},
+ {"matrix": [3, 6], "x": 6.5, "y": 2},
+ {"matrix": [3, 7], "x": 7.5, "y": 2},
+ {"matrix": [3, 8], "x": 8.5, "y": 2},
+ {"matrix": [9, 8], "x": 9.5, "y": 2},
+ {"matrix": [9, 7], "x": 10.5, "y": 2},
+ {"matrix": [9, 5], "x": 11.5, "y": 2},
+ {"matrix": [9, 4], "x": 12.5, "y": 2},
+ {"matrix": [9, 6], "x": 15, "y": 2},
+ {"matrix": [9, 2], "x": 16, "y": 2},
+ {"matrix": [9, 1], "x": 17, "y": 2},
+ {"matrix": [8, 0], "x": 18, "y": 2, "h": 2},
+
+ {"matrix": [2, 0], "x": 0, "y": 3, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 3},
+ {"matrix": [2, 2], "x": 2.75, "y": 3},
+ {"matrix": [2, 3], "x": 3.75, "y": 3},
+ {"matrix": [2, 4], "x": 4.75, "y": 3},
+ {"matrix": [2, 5], "x": 5.75, "y": 3},
+ {"matrix": [2, 6], "x": 6.75, "y": 3},
+ {"matrix": [2, 7], "x": 7.75, "y": 3},
+ {"matrix": [2, 8], "x": 8.75, "y": 3},
+ {"matrix": [8, 8], "x": 9.75, "y": 3},
+ {"matrix": [8, 7], "x": 10.75, "y": 3},
+ {"matrix": [8, 5], "x": 11.75, "y": 3},
+ {"matrix": [8, 4], "x": 12.75, "y": 3},
+ {"matrix": [9, 3], "x": 13.75, "y": 2, "w": 1.25, "h": 2},
+ {"matrix": [8, 6], "x": 15, "y": 3},
+ {"matrix": [8, 2], "x": 16, "y": 3},
+ {"matrix": [8, 1], "x": 17, "y": 3},
+
+ {"matrix": [1, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [1, 1], "x": 1.25, "y": 4},
+ {"matrix": [1, 2], "x": 2.25, "y": 4},
+ {"matrix": [1, 3], "x": 3.25, "y": 4},
+ {"matrix": [1, 4], "x": 4.25, "y": 4},
+ {"matrix": [1, 5], "x": 5.25, "y": 4},
+ {"matrix": [1, 6], "x": 6.25, "y": 4},
+ {"matrix": [1, 7], "x": 7.25, "y": 4},
+ {"matrix": [1, 8], "x": 8.25, "y": 4},
+ {"matrix": [7, 8], "x": 9.25, "y": 4},
+ {"matrix": [7, 7], "x": 10.25, "y": 4},
+ {"matrix": [7, 5], "x": 11.25, "y": 4},
+ {"matrix": [7, 4], "x": 12.25, "y": 4, "w": 1.75},
+ {"matrix": [7, 3], "x": 14, "y": 4},
+ {"matrix": [7, 6], "x": 15, "y": 4},
+ {"matrix": [7, 2], "x": 16, "y": 4},
+ {"matrix": [7, 1], "x": 17, "y": 4},
+ {"matrix": [6, 0], "x": 18, "y": 4, "h": 2},
+
+ {"matrix": [0, 0], "x": 0, "y": 5, "w": 1.25},
+ {"matrix": [0, 1], "x": 1.25, "y": 5, "w": 1.25},
+ {"matrix": [0, 2], "x": 2.5, "y": 5, "w": 1.25},
+ {"matrix": [0, 6], "x": 3.75, "y": 5, "w": 6.25},
+ {"matrix": [0, 8], "x": 10, "y": 5},
+ {"matrix": [0, 7], "x": 11, "y": 5},
+ {"matrix": [0, 5], "x": 12, "y": 5},
+ {"matrix": [0, 4], "x": 13, "y": 5},
+ {"matrix": [0, 3], "x": 14, "y": 5},
+ {"matrix": [6, 6], "x": 15, "y": 5},
+ {"matrix": [6, 2], "x": 16, "y": 5},
+ {"matrix": [6, 1], "x": 17, "y": 5}
+ ]
+ },
+ "LAYOUT_96_iso_splitbs": {
+ "layout": [
+ {"matrix": [5, 0], "x": 0, "y": 0},
+ {"matrix": [5, 1], "x": 1, "y": 0},
+ {"matrix": [5, 2], "x": 2, "y": 0},
+ {"matrix": [5, 3], "x": 3, "y": 0},
+ {"matrix": [5, 4], "x": 4, "y": 0},
+ {"matrix": [5, 5], "x": 5, "y": 0},
+ {"matrix": [5, 6], "x": 6, "y": 0},
+ {"matrix": [5, 7], "x": 7, "y": 0},
+ {"matrix": [5, 8], "x": 8, "y": 0},
+ {"matrix": [11, 8], "x": 9, "y": 0},
+ {"matrix": [11, 7], "x": 10, "y": 0},
+ {"matrix": [11, 5], "x": 11, "y": 0},
+ {"matrix": [11, 4], "x": 12, "y": 0},
+ {"matrix": [11, 3], "x": 13, "y": 0},
+ {"matrix": [11, 6], "x": 14, "y": 0},
+ {"matrix": [11, 2], "x": 15, "y": 0},
+ {"matrix": [11, 1], "x": 16, "y": 0},
+ {"matrix": [11, 0], "x": 17, "y": 0},
+ {"matrix": [6, 3], "x": 18, "y": 0},
+
+ {"matrix": [4, 0], "x": 0, "y": 1},
+ {"matrix": [4, 1], "x": 1, "y": 1},
+ {"matrix": [4, 2], "x": 2, "y": 1},
+ {"matrix": [4, 3], "x": 3, "y": 1},
+ {"matrix": [4, 4], "x": 4, "y": 1},
+ {"matrix": [4, 5], "x": 5, "y": 1},
+ {"matrix": [4, 6], "x": 6, "y": 1},
+ {"matrix": [4, 7], "x": 7, "y": 1},
+ {"matrix": [4, 8], "x": 8, "y": 1},
+ {"matrix": [10, 8], "x": 9, "y": 1},
+ {"matrix": [10, 7], "x": 10, "y": 1},
+ {"matrix": [10, 5], "x": 11, "y": 1},
+ {"matrix": [10, 4], "x": 12, "y": 1},
+ {"matrix": [10, 3], "x": 13, "y": 1},
+ {"matrix": [10, 6], "x": 14, "y": 1},
+ {"matrix": [10, 2], "x": 15, "y": 1},
+ {"matrix": [10, 1], "x": 16, "y": 1},
+ {"matrix": [10, 0], "x": 17, "y": 1},
+ {"matrix": [6, 4], "x": 18, "y": 1},
+
+ {"matrix": [3, 0], "x": 0, "y": 2, "w": 1.5},
+ {"matrix": [3, 1], "x": 1.5, "y": 2},
+ {"matrix": [3, 2], "x": 2.5, "y": 2},
+ {"matrix": [3, 3], "x": 3.5, "y": 2},
+ {"matrix": [3, 4], "x": 4.5, "y": 2},
+ {"matrix": [3, 5], "x": 5.5, "y": 2},
+ {"matrix": [3, 6], "x": 6.5, "y": 2},
+ {"matrix": [3, 7], "x": 7.5, "y": 2},
+ {"matrix": [3, 8], "x": 8.5, "y": 2},
+ {"matrix": [9, 8], "x": 9.5, "y": 2},
+ {"matrix": [9, 7], "x": 10.5, "y": 2},
+ {"matrix": [9, 5], "x": 11.5, "y": 2},
+ {"matrix": [9, 4], "x": 12.5, "y": 2},
+ {"matrix": [9, 6], "x": 15, "y": 2},
+ {"matrix": [9, 2], "x": 16, "y": 2},
+ {"matrix": [9, 1], "x": 17, "y": 2},
+ {"matrix": [8, 0], "x": 18, "y": 2, "h": 2},
+
+ {"matrix": [2, 0], "x": 0, "y": 3, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 3},
+ {"matrix": [2, 2], "x": 2.75, "y": 3},
+ {"matrix": [2, 3], "x": 3.75, "y": 3},
+ {"matrix": [2, 4], "x": 4.75, "y": 3},
+ {"matrix": [2, 5], "x": 5.75, "y": 3},
+ {"matrix": [2, 6], "x": 6.75, "y": 3},
+ {"matrix": [2, 7], "x": 7.75, "y": 3},
+ {"matrix": [2, 8], "x": 8.75, "y": 3},
+ {"matrix": [8, 8], "x": 9.75, "y": 3},
+ {"matrix": [8, 7], "x": 10.75, "y": 3},
+ {"matrix": [8, 5], "x": 11.75, "y": 3},
+ {"matrix": [8, 4], "x": 12.75, "y": 3},
+ {"matrix": [9, 3], "x": 13.75, "y": 2, "w": 1.25, "h": 2},
+ {"matrix": [8, 6], "x": 15, "y": 3},
+ {"matrix": [8, 2], "x": 16, "y": 3},
+ {"matrix": [8, 1], "x": 17, "y": 3},
+
+ {"matrix": [1, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [1, 1], "x": 1.25, "y": 4},
+ {"matrix": [1, 2], "x": 2.25, "y": 4},
+ {"matrix": [1, 3], "x": 3.25, "y": 4},
+ {"matrix": [1, 4], "x": 4.25, "y": 4},
+ {"matrix": [1, 5], "x": 5.25, "y": 4},
+ {"matrix": [1, 6], "x": 6.25, "y": 4},
+ {"matrix": [1, 7], "x": 7.25, "y": 4},
+ {"matrix": [1, 8], "x": 8.25, "y": 4},
+ {"matrix": [7, 8], "x": 9.25, "y": 4},
+ {"matrix": [7, 7], "x": 10.25, "y": 4},
+ {"matrix": [7, 5], "x": 11.25, "y": 4},
+ {"matrix": [7, 4], "x": 12.25, "y": 4, "w": 1.75},
+ {"matrix": [7, 3], "x": 14, "y": 4},
+ {"matrix": [7, 6], "x": 15, "y": 4},
+ {"matrix": [7, 2], "x": 16, "y": 4},
+ {"matrix": [7, 1], "x": 17, "y": 4},
+ {"matrix": [6, 0], "x": 18, "y": 4, "h": 2},
+
+ {"matrix": [0, 0], "x": 0, "y": 5, "w": 1.25},
+ {"matrix": [0, 1], "x": 1.25, "y": 5, "w": 1.25},
+ {"matrix": [0, 2], "x": 2.5, "y": 5, "w": 1.25},
+ {"matrix": [0, 6], "x": 3.75, "y": 5, "w": 6.25},
+ {"matrix": [0, 8], "x": 10, "y": 5},
+ {"matrix": [0, 7], "x": 11, "y": 5},
+ {"matrix": [0, 5], "x": 12, "y": 5},
+ {"matrix": [0, 4], "x": 13, "y": 5},
+ {"matrix": [0, 3], "x": 14, "y": 5},
+ {"matrix": [6, 6], "x": 15, "y": 5},
+ {"matrix": [6, 2], "x": 16, "y": 5},
+ {"matrix": [6, 1], "x": 17, "y": 5}
+ ]
+ },
+ "LAYOUT_96_with60": {
+ "layout": [
+ {"matrix": [5, 0], "x": 0, "y": 0},
+ {"matrix": [5, 1], "x": 1, "y": 0},
+ {"matrix": [5, 2], "x": 2, "y": 0},
+ {"matrix": [5, 3], "x": 3, "y": 0},
+ {"matrix": [5, 4], "x": 4, "y": 0},
+ {"matrix": [5, 5], "x": 5, "y": 0},
+ {"matrix": [5, 6], "x": 6, "y": 0},
+ {"matrix": [5, 7], "x": 7, "y": 0},
+ {"matrix": [5, 8], "x": 8, "y": 0},
+ {"matrix": [11, 8], "x": 9, "y": 0},
+ {"matrix": [11, 7], "x": 10, "y": 0},
+ {"matrix": [11, 5], "x": 11, "y": 0},
+ {"matrix": [11, 4], "x": 12, "y": 0},
+ {"matrix": [11, 3], "x": 13, "y": 0},
+ {"matrix": [11, 6], "x": 14, "y": 0},
+ {"matrix": [11, 2], "x": 15, "y": 0},
+ {"matrix": [11, 1], "x": 16, "y": 0},
+ {"matrix": [11, 0], "x": 17, "y": 0},
+ {"matrix": [6, 3], "x": 18, "y": 0},
+
+ {"matrix": [4, 0], "x": 0, "y": 1},
+ {"matrix": [4, 1], "x": 1, "y": 1},
+ {"matrix": [4, 2], "x": 2, "y": 1},
+ {"matrix": [4, 3], "x": 3, "y": 1},
+ {"matrix": [4, 4], "x": 4, "y": 1},
+ {"matrix": [4, 5], "x": 5, "y": 1},
+ {"matrix": [4, 6], "x": 6, "y": 1},
+ {"matrix": [4, 7], "x": 7, "y": 1},
+ {"matrix": [4, 8], "x": 8, "y": 1},
+ {"matrix": [10, 8], "x": 9, "y": 1},
+ {"matrix": [10, 7], "x": 10, "y": 1},
+ {"matrix": [10, 5], "x": 11, "y": 1},
+ {"matrix": [10, 4], "x": 12, "y": 1},
+ {"matrix": [10, 6], "x": 13, "y": 1, "w": 2},
+ {"matrix": [10, 2], "x": 15, "y": 1},
+ {"matrix": [10, 1], "x": 16, "y": 1},
+ {"matrix": [10, 0], "x": 17, "y": 1},
+ {"matrix": [6, 4], "x": 18, "y": 1},
+
+ {"matrix": [3, 0], "x": 0, "y": 2, "w": 1.5},
+ {"matrix": [3, 1], "x": 1.5, "y": 2},
+ {"matrix": [3, 2], "x": 2.5, "y": 2},
+ {"matrix": [3, 3], "x": 3.5, "y": 2},
+ {"matrix": [3, 4], "x": 4.5, "y": 2},
+ {"matrix": [3, 5], "x": 5.5, "y": 2},
+ {"matrix": [3, 6], "x": 6.5, "y": 2},
+ {"matrix": [3, 7], "x": 7.5, "y": 2},
+ {"matrix": [3, 8], "x": 8.5, "y": 2},
+ {"matrix": [9, 8], "x": 9.5, "y": 2},
+ {"matrix": [9, 7], "x": 10.5, "y": 2},
+ {"matrix": [9, 5], "x": 11.5, "y": 2},
+ {"matrix": [9, 4], "x": 12.5, "y": 2},
+ {"matrix": [8, 4], "x": 13.5, "y": 2, "w": 1.5},
+ {"matrix": [9, 6], "x": 15, "y": 2},
+ {"matrix": [9, 2], "x": 16, "y": 2},
+ {"matrix": [9, 1], "x": 17, "y": 2},
+ {"matrix": [8, 0], "x": 18, "y": 2, "h": 2},
+
+ {"matrix": [2, 0], "x": 0, "y": 3, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 3},
+ {"matrix": [2, 2], "x": 2.75, "y": 3},
+ {"matrix": [2, 3], "x": 3.75, "y": 3},
+ {"matrix": [2, 4], "x": 4.75, "y": 3},
+ {"matrix": [2, 5], "x": 5.75, "y": 3},
+ {"matrix": [2, 6], "x": 6.75, "y": 3},
+ {"matrix": [2, 7], "x": 7.75, "y": 3},
+ {"matrix": [2, 8], "x": 8.75, "y": 3},
+ {"matrix": [8, 8], "x": 9.75, "y": 3},
+ {"matrix": [8, 7], "x": 10.75, "y": 3},
+ {"matrix": [8, 5], "x": 11.75, "y": 3},
+ {"matrix": [9, 3], "x": 12.75, "y": 3, "w": 2.25},
+ {"matrix": [8, 6], "x": 15, "y": 3},
+ {"matrix": [8, 2], "x": 16, "y": 3},
+ {"matrix": [8, 1], "x": 17, "y": 3},
+
+ {"matrix": [1, 0], "x": 0, "y": 4, "w": 2.25},
+ {"matrix": [1, 2], "x": 2.25, "y": 4},
+ {"matrix": [1, 3], "x": 3.25, "y": 4},
+ {"matrix": [1, 4], "x": 4.25, "y": 4},
+ {"matrix": [1, 5], "x": 5.25, "y": 4},
+ {"matrix": [1, 6], "x": 6.25, "y": 4},
+ {"matrix": [1, 7], "x": 7.25, "y": 4},
+ {"matrix": [1, 8], "x": 8.25, "y": 4},
+ {"matrix": [7, 8], "x": 9.25, "y": 4},
+ {"matrix": [7, 7], "x": 10.25, "y": 4},
+ {"matrix": [7, 5], "x": 11.25, "y": 4},
+ {"matrix": [7, 4], "x": 12.25, "y": 4, "w": 2.75},
+ {"matrix": [7, 6], "x": 15, "y": 4},
+ {"matrix": [7, 2], "x": 16, "y": 4},
+ {"matrix": [7, 1], "x": 17, "y": 4},
+ {"matrix": [6, 0], "x": 18, "y": 4, "h": 2},
+
+ {"matrix": [0, 0], "x": 0, "y": 5, "w": 1.25},
+ {"matrix": [0, 1], "x": 1.25, "y": 5, "w": 1.25},
+ {"matrix": [0, 2], "x": 2.5, "y": 5, "w": 1.25},
+ {"matrix": [0, 6], "x": 3.75, "y": 5, "w": 6.25},
+ {"matrix": [0, 8], "x": 10, "y": 5, "w": 1.25},
+ {"matrix": [0, 7], "x": 11.25, "y": 5, "w": 1.25},
+ {"matrix": [0, 4], "x": 12.5, "y": 5, "w": 1.25},
+ {"matrix": [0, 3], "x": 13.75, "y": 5, "w": 1.25},
+ {"matrix": [6, 2], "x": 15, "y": 5, "w": 2},
+ {"matrix": [6, 1], "x": 17, "y": 5}
+ ]
+ },
+ "LAYOUT_96_with60_splitbs": {
+ "layout": [
+ {"matrix": [5, 0], "x": 0, "y": 0},
+ {"matrix": [5, 1], "x": 1, "y": 0},
+ {"matrix": [5, 2], "x": 2, "y": 0},
+ {"matrix": [5, 3], "x": 3, "y": 0},
+ {"matrix": [5, 4], "x": 4, "y": 0},
+ {"matrix": [5, 5], "x": 5, "y": 0},
+ {"matrix": [5, 6], "x": 6, "y": 0},
+ {"matrix": [5, 7], "x": 7, "y": 0},
+ {"matrix": [5, 8], "x": 8, "y": 0},
+ {"matrix": [11, 8], "x": 9, "y": 0},
+ {"matrix": [11, 7], "x": 10, "y": 0},
+ {"matrix": [11, 5], "x": 11, "y": 0},
+ {"matrix": [11, 4], "x": 12, "y": 0},
+ {"matrix": [11, 3], "x": 13, "y": 0},
+ {"matrix": [11, 6], "x": 14, "y": 0},
+ {"matrix": [11, 2], "x": 15, "y": 0},
+ {"matrix": [11, 1], "x": 16, "y": 0},
+ {"matrix": [11, 0], "x": 17, "y": 0},
+ {"matrix": [6, 3], "x": 18, "y": 0},
+
+ {"matrix": [4, 0], "x": 0, "y": 1},
+ {"matrix": [4, 1], "x": 1, "y": 1},
+ {"matrix": [4, 2], "x": 2, "y": 1},
+ {"matrix": [4, 3], "x": 3, "y": 1},
+ {"matrix": [4, 4], "x": 4, "y": 1},
+ {"matrix": [4, 5], "x": 5, "y": 1},
+ {"matrix": [4, 6], "x": 6, "y": 1},
+ {"matrix": [4, 7], "x": 7, "y": 1},
+ {"matrix": [4, 8], "x": 8, "y": 1},
+ {"matrix": [10, 8], "x": 9, "y": 1},
+ {"matrix": [10, 7], "x": 10, "y": 1},
+ {"matrix": [10, 5], "x": 11, "y": 1},
+ {"matrix": [10, 4], "x": 12, "y": 1},
+ {"matrix": [10, 3], "x": 13, "y": 1},
+ {"matrix": [10, 6], "x": 14, "y": 1},
+ {"matrix": [10, 2], "x": 15, "y": 1},
+ {"matrix": [10, 1], "x": 16, "y": 1},
+ {"matrix": [10, 0], "x": 17, "y": 1},
+ {"matrix": [6, 4], "x": 18, "y": 1},
+
+ {"matrix": [3, 0], "x": 0, "y": 2, "w": 1.5},
+ {"matrix": [3, 1], "x": 1.5, "y": 2},
+ {"matrix": [3, 2], "x": 2.5, "y": 2},
+ {"matrix": [3, 3], "x": 3.5, "y": 2},
+ {"matrix": [3, 4], "x": 4.5, "y": 2},
+ {"matrix": [3, 5], "x": 5.5, "y": 2},
+ {"matrix": [3, 6], "x": 6.5, "y": 2},
+ {"matrix": [3, 7], "x": 7.5, "y": 2},
+ {"matrix": [3, 8], "x": 8.5, "y": 2},
+ {"matrix": [9, 8], "x": 9.5, "y": 2},
+ {"matrix": [9, 7], "x": 10.5, "y": 2},
+ {"matrix": [9, 5], "x": 11.5, "y": 2},
+ {"matrix": [9, 4], "x": 12.5, "y": 2},
+ {"matrix": [8, 4], "x": 13.5, "y": 2, "w": 1.5},
+ {"matrix": [9, 6], "x": 15, "y": 2},
+ {"matrix": [9, 2], "x": 16, "y": 2},
+ {"matrix": [9, 1], "x": 17, "y": 2},
+ {"matrix": [8, 0], "x": 18, "y": 2, "h": 2},
+
+ {"matrix": [2, 0], "x": 0, "y": 3, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 3},
+ {"matrix": [2, 2], "x": 2.75, "y": 3},
+ {"matrix": [2, 3], "x": 3.75, "y": 3},
+ {"matrix": [2, 4], "x": 4.75, "y": 3},
+ {"matrix": [2, 5], "x": 5.75, "y": 3},
+ {"matrix": [2, 6], "x": 6.75, "y": 3},
+ {"matrix": [2, 7], "x": 7.75, "y": 3},
+ {"matrix": [2, 8], "x": 8.75, "y": 3},
+ {"matrix": [8, 8], "x": 9.75, "y": 3},
+ {"matrix": [8, 7], "x": 10.75, "y": 3},
+ {"matrix": [8, 5], "x": 11.75, "y": 3},
+ {"matrix": [9, 3], "x": 12.75, "y": 3, "w": 2.25},
+ {"matrix": [8, 6], "x": 15, "y": 3},
+ {"matrix": [8, 2], "x": 16, "y": 3},
+ {"matrix": [8, 1], "x": 17, "y": 3},
+
+ {"matrix": [1, 0], "x": 0, "y": 4, "w": 2.25},
+ {"matrix": [1, 2], "x": 2.25, "y": 4},
+ {"matrix": [1, 3], "x": 3.25, "y": 4},
+ {"matrix": [1, 4], "x": 4.25, "y": 4},
+ {"matrix": [1, 5], "x": 5.25, "y": 4},
+ {"matrix": [1, 6], "x": 6.25, "y": 4},
+ {"matrix": [1, 7], "x": 7.25, "y": 4},
+ {"matrix": [1, 8], "x": 8.25, "y": 4},
+ {"matrix": [7, 8], "x": 9.25, "y": 4},
+ {"matrix": [7, 7], "x": 10.25, "y": 4},
+ {"matrix": [7, 5], "x": 11.25, "y": 4},
+ {"matrix": [7, 4], "x": 12.25, "y": 4, "w": 2.75},
+ {"matrix": [7, 6], "x": 15, "y": 4},
+ {"matrix": [7, 2], "x": 16, "y": 4},
+ {"matrix": [7, 1], "x": 17, "y": 4},
+ {"matrix": [6, 0], "x": 18, "y": 4, "h": 2},
+
+ {"matrix": [0, 0], "x": 0, "y": 5, "w": 1.25},
+ {"matrix": [0, 1], "x": 1.25, "y": 5, "w": 1.25},
+ {"matrix": [0, 2], "x": 2.5, "y": 5, "w": 1.25},
+ {"matrix": [0, 6], "x": 3.75, "y": 5, "w": 6.25},
+ {"matrix": [0, 8], "x": 10, "y": 5, "w": 1.25},
+ {"matrix": [0, 7], "x": 11.25, "y": 5, "w": 1.25},
+ {"matrix": [0, 4], "x": 12.5, "y": 5, "w": 1.25},
+ {"matrix": [0, 3], "x": 13.75, "y": 5, "w": 1.25},
+ {"matrix": [6, 2], "x": 15, "y": 5, "w": 2},
+ {"matrix": [6, 1], "x": 17, "y": 5}
+ ]
+ },
+ "LAYOUT_96_with60_split_num0": {
+ "layout": [
+ {"matrix": [5, 0], "x": 0, "y": 0},
+ {"matrix": [5, 1], "x": 1, "y": 0},
+ {"matrix": [5, 2], "x": 2, "y": 0},
+ {"matrix": [5, 3], "x": 3, "y": 0},
+ {"matrix": [5, 4], "x": 4, "y": 0},
+ {"matrix": [5, 5], "x": 5, "y": 0},
+ {"matrix": [5, 6], "x": 6, "y": 0},
+ {"matrix": [5, 7], "x": 7, "y": 0},
+ {"matrix": [5, 8], "x": 8, "y": 0},
+ {"matrix": [11, 8], "x": 9, "y": 0},
+ {"matrix": [11, 7], "x": 10, "y": 0},
+ {"matrix": [11, 5], "x": 11, "y": 0},
+ {"matrix": [11, 4], "x": 12, "y": 0},
+ {"matrix": [11, 3], "x": 13, "y": 0},
+ {"matrix": [11, 6], "x": 14, "y": 0},
+ {"matrix": [11, 2], "x": 15, "y": 0},
+ {"matrix": [11, 1], "x": 16, "y": 0},
+ {"matrix": [11, 0], "x": 17, "y": 0},
+ {"matrix": [6, 3], "x": 18, "y": 0},
+
+ {"matrix": [4, 0], "x": 0, "y": 1},
+ {"matrix": [4, 1], "x": 1, "y": 1},
+ {"matrix": [4, 2], "x": 2, "y": 1},
+ {"matrix": [4, 3], "x": 3, "y": 1},
+ {"matrix": [4, 4], "x": 4, "y": 1},
+ {"matrix": [4, 5], "x": 5, "y": 1},
+ {"matrix": [4, 6], "x": 6, "y": 1},
+ {"matrix": [4, 7], "x": 7, "y": 1},
+ {"matrix": [4, 8], "x": 8, "y": 1},
+ {"matrix": [10, 8], "x": 9, "y": 1},
+ {"matrix": [10, 7], "x": 10, "y": 1},
+ {"matrix": [10, 5], "x": 11, "y": 1},
+ {"matrix": [10, 4], "x": 12, "y": 1},
+ {"matrix": [10, 6], "x": 13, "y": 1, "w": 2},
+ {"matrix": [10, 2], "x": 15, "y": 1},
+ {"matrix": [10, 1], "x": 16, "y": 1},
+ {"matrix": [10, 0], "x": 17, "y": 1},
+ {"matrix": [6, 4], "x": 18, "y": 1},
+
+ {"matrix": [3, 0], "x": 0, "y": 2, "w": 1.5},
+ {"matrix": [3, 1], "x": 1.5, "y": 2},
+ {"matrix": [3, 2], "x": 2.5, "y": 2},
+ {"matrix": [3, 3], "x": 3.5, "y": 2},
+ {"matrix": [3, 4], "x": 4.5, "y": 2},
+ {"matrix": [3, 5], "x": 5.5, "y": 2},
+ {"matrix": [3, 6], "x": 6.5, "y": 2},
+ {"matrix": [3, 7], "x": 7.5, "y": 2},
+ {"matrix": [3, 8], "x": 8.5, "y": 2},
+ {"matrix": [9, 8], "x": 9.5, "y": 2},
+ {"matrix": [9, 7], "x": 10.5, "y": 2},
+ {"matrix": [9, 5], "x": 11.5, "y": 2},
+ {"matrix": [9, 4], "x": 12.5, "y": 2},
+ {"matrix": [8, 4], "x": 13.5, "y": 2, "w": 1.5},
+ {"matrix": [9, 6], "x": 15, "y": 2},
+ {"matrix": [9, 2], "x": 16, "y": 2},
+ {"matrix": [9, 1], "x": 17, "y": 2},
+ {"matrix": [8, 0], "x": 18, "y": 2, "h": 2},
+
+ {"matrix": [2, 0], "x": 0, "y": 3, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 3},
+ {"matrix": [2, 2], "x": 2.75, "y": 3},
+ {"matrix": [2, 3], "x": 3.75, "y": 3},
+ {"matrix": [2, 4], "x": 4.75, "y": 3},
+ {"matrix": [2, 5], "x": 5.75, "y": 3},
+ {"matrix": [2, 6], "x": 6.75, "y": 3},
+ {"matrix": [2, 7], "x": 7.75, "y": 3},
+ {"matrix": [2, 8], "x": 8.75, "y": 3},
+ {"matrix": [8, 8], "x": 9.75, "y": 3},
+ {"matrix": [8, 7], "x": 10.75, "y": 3},
+ {"matrix": [8, 5], "x": 11.75, "y": 3},
+ {"matrix": [9, 3], "x": 12.75, "y": 3, "w": 2.25},
+ {"matrix": [8, 6], "x": 15, "y": 3},
+ {"matrix": [8, 2], "x": 16, "y": 3},
+ {"matrix": [8, 1], "x": 17, "y": 3},
+
+ {"matrix": [1, 0], "x": 0, "y": 4, "w": 2.25},
+ {"matrix": [1, 2], "x": 2.25, "y": 4},
+ {"matrix": [1, 3], "x": 3.25, "y": 4},
+ {"matrix": [1, 4], "x": 4.25, "y": 4},
+ {"matrix": [1, 5], "x": 5.25, "y": 4},
+ {"matrix": [1, 6], "x": 6.25, "y": 4},
+ {"matrix": [1, 7], "x": 7.25, "y": 4},
+ {"matrix": [1, 8], "x": 8.25, "y": 4},
+ {"matrix": [7, 8], "x": 9.25, "y": 4},
+ {"matrix": [7, 7], "x": 10.25, "y": 4},
+ {"matrix": [7, 5], "x": 11.25, "y": 4},
+ {"matrix": [7, 4], "x": 12.25, "y": 4, "w": 2.75},
+ {"matrix": [7, 6], "x": 15, "y": 4},
+ {"matrix": [7, 2], "x": 16, "y": 4},
+ {"matrix": [7, 1], "x": 17, "y": 4},
+ {"matrix": [6, 0], "x": 18, "y": 4, "h": 2},
+
+ {"matrix": [0, 0], "x": 0, "y": 5, "w": 1.25},
+ {"matrix": [0, 1], "x": 1.25, "y": 5, "w": 1.25},
+ {"matrix": [0, 2], "x": 2.5, "y": 5, "w": 1.25},
+ {"matrix": [0, 6], "x": 3.75, "y": 5, "w": 6.25},
+ {"matrix": [0, 8], "x": 10, "y": 5, "w": 1.25},
+ {"matrix": [0, 7], "x": 11.25, "y": 5, "w": 1.25},
+ {"matrix": [0, 4], "x": 12.5, "y": 5, "w": 1.25},
+ {"matrix": [0, 3], "x": 13.75, "y": 5, "w": 1.25},
+ {"matrix": [6, 6], "x": 15, "y": 5},
+ {"matrix": [6, 2], "x": 16, "y": 5},
+ {"matrix": [6, 1], "x": 17, "y": 5}
+ ]
+ },
+ "LAYOUT_hotswap": {
+ "layout": [
+ {"matrix": [5, 0], "x": 0, "y": 0},
+ {"matrix": [5, 1], "x": 1, "y": 0},
+ {"matrix": [5, 2], "x": 2, "y": 0},
+ {"matrix": [5, 3], "x": 3, "y": 0},
+ {"matrix": [5, 4], "x": 4, "y": 0},
+ {"matrix": [5, 5], "x": 5, "y": 0},
+ {"matrix": [5, 6], "x": 6, "y": 0},
+ {"matrix": [5, 7], "x": 7, "y": 0},
+ {"matrix": [5, 8], "x": 8, "y": 0},
+ {"matrix": [11, 8], "x": 9, "y": 0},
+ {"matrix": [11, 7], "x": 10, "y": 0},
+ {"matrix": [11, 5], "x": 11, "y": 0},
+ {"matrix": [11, 4], "x": 12, "y": 0},
+ {"matrix": [11, 3], "x": 13, "y": 0},
+ {"matrix": [11, 6], "x": 14, "y": 0},
+ {"matrix": [11, 2], "x": 15, "y": 0},
+ {"matrix": [11, 1], "x": 16, "y": 0},
+ {"matrix": [11, 0], "x": 17, "y": 0},
+ {"matrix": [6, 3], "x": 18, "y": 0},
+
+ {"matrix": [4, 0], "x": 0, "y": 1},
+ {"matrix": [4, 1], "x": 1, "y": 1},
+ {"matrix": [4, 2], "x": 2, "y": 1},
+ {"matrix": [4, 3], "x": 3, "y": 1},
+ {"matrix": [4, 4], "x": 4, "y": 1},
+ {"matrix": [4, 5], "x": 5, "y": 1},
+ {"matrix": [4, 6], "x": 6, "y": 1},
+ {"matrix": [4, 7], "x": 7, "y": 1},
+ {"matrix": [4, 8], "x": 8, "y": 1},
+ {"matrix": [10, 8], "x": 9, "y": 1},
+ {"matrix": [10, 7], "x": 10, "y": 1},
+ {"matrix": [10, 5], "x": 11, "y": 1},
+ {"matrix": [10, 4], "x": 12, "y": 1},
+ {"matrix": [10, 6], "x": 13, "y": 1, "w": 2},
+ {"matrix": [10, 2], "x": 15, "y": 1},
+ {"matrix": [10, 1], "x": 16, "y": 1},
+ {"matrix": [10, 0], "x": 17, "y": 1},
+ {"matrix": [6, 4], "x": 18, "y": 1},
+
+ {"matrix": [3, 0], "x": 0, "y": 2, "w": 1.5},
+ {"matrix": [3, 1], "x": 1.5, "y": 2},
+ {"matrix": [3, 2], "x": 2.5, "y": 2},
+ {"matrix": [3, 3], "x": 3.5, "y": 2},
+ {"matrix": [3, 4], "x": 4.5, "y": 2},
+ {"matrix": [3, 5], "x": 5.5, "y": 2},
+ {"matrix": [3, 6], "x": 6.5, "y": 2},
+ {"matrix": [3, 7], "x": 7.5, "y": 2},
+ {"matrix": [3, 8], "x": 8.5, "y": 2},
+ {"matrix": [9, 8], "x": 9.5, "y": 2},
+ {"matrix": [9, 7], "x": 10.5, "y": 2},
+ {"matrix": [9, 5], "x": 11.5, "y": 2},
+ {"matrix": [9, 4], "x": 12.5, "y": 2},
+ {"matrix": [9, 3], "x": 13.5, "y": 2, "w": 1.5},
+ {"matrix": [9, 6], "x": 15, "y": 2},
+ {"matrix": [9, 2], "x": 16, "y": 2},
+ {"matrix": [9, 1], "x": 17, "y": 2},
+ {"matrix": [8, 0], "x": 18, "y": 2, "h": 2},
+
+ {"matrix": [2, 0], "x": 0, "y": 3, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 3},
+ {"matrix": [2, 2], "x": 2.75, "y": 3},
+ {"matrix": [2, 3], "x": 3.75, "y": 3},
+ {"matrix": [2, 4], "x": 4.75, "y": 3},
+ {"matrix": [2, 5], "x": 5.75, "y": 3},
+ {"matrix": [2, 6], "x": 6.75, "y": 3},
+ {"matrix": [2, 7], "x": 7.75, "y": 3},
+ {"matrix": [2, 8], "x": 8.75, "y": 3},
+ {"matrix": [8, 8], "x": 9.75, "y": 3},
+ {"matrix": [8, 7], "x": 10.75, "y": 3},
+ {"matrix": [8, 5], "x": 11.75, "y": 3},
+ {"matrix": [8, 4], "x": 12.75, "y": 3, "w": 2.25},
+ {"matrix": [8, 6], "x": 15, "y": 3},
+ {"matrix": [8, 2], "x": 16, "y": 3},
+ {"matrix": [8, 1], "x": 17, "y": 3},
+
+ {"matrix": [1, 0], "x": 0, "y": 4, "w": 2.25},
+ {"matrix": [1, 2], "x": 2.25, "y": 4},
+ {"matrix": [1, 3], "x": 3.25, "y": 4},
+ {"matrix": [1, 4], "x": 4.25, "y": 4},
+ {"matrix": [1, 5], "x": 5.25, "y": 4},
+ {"matrix": [1, 6], "x": 6.25, "y": 4},
+ {"matrix": [1, 7], "x": 7.25, "y": 4},
+ {"matrix": [1, 8], "x": 8.25, "y": 4},
+ {"matrix": [7, 8], "x": 9.25, "y": 4},
+ {"matrix": [7, 7], "x": 10.25, "y": 4},
+ {"matrix": [7, 5], "x": 11.25, "y": 4},
+ {"matrix": [7, 4], "x": 12.25, "y": 4, "w": 1.75},
+ {"matrix": [7, 3], "x": 14, "y": 4},
+ {"matrix": [7, 6], "x": 15, "y": 4},
+ {"matrix": [7, 2], "x": 16, "y": 4},
+ {"matrix": [7, 1], "x": 17, "y": 4},
+ {"matrix": [6, 0], "x": 18, "y": 4, "h": 2},
+
+ {"matrix": [0, 0], "x": 0, "y": 5, "w": 1.25},
+ {"matrix": [0, 1], "x": 1.25, "y": 5, "w": 1.25},
+ {"matrix": [0, 2], "x": 2.5, "y": 5, "w": 1.25},
+ {"matrix": [0, 6], "x": 3.75, "y": 5, "w": 6.25},
+ {"matrix": [0, 8], "x": 10, "y": 5},
+ {"matrix": [0, 7], "x": 11, "y": 5},
+ {"matrix": [0, 5], "x": 12, "y": 5},
+ {"matrix": [0, 4], "x": 13, "y": 5},
+ {"matrix": [0, 3], "x": 14, "y": 5},
+ {"matrix": [6, 6], "x": 15, "y": 5},
+ {"matrix": [6, 2], "x": 16, "y": 5},
+ {"matrix": [6, 1], "x": 17, "y": 5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/ymdk/melody96/soldered/keymaps/crilith/keymap.c b/keyboards/ymdk/melody96/soldered/keymaps/crilith/keymap.c
new file mode 100644
index 0000000000..e5eff6ee9d
--- /dev/null
+++ b/keyboards/ymdk/melody96/soldered/keymaps/crilith/keymap.c
@@ -0,0 +1,38 @@
+#include QMK_KEYBOARD_H
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ DYNAMIC_MACRO_RANGE,
+};
+
+#include "dynamic_macro.h"
+
+#define KC_REC DM_REC1
+#define KC_DONE DM_RSTP
+#define KC_PLAY DM_PLY1
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ LAYOUT(
+ KC_ESC, 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_PSCR, KC_HOME, KC_END, KC_PGUP, KC_PGDN, KC_DEL,
+ 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_BSLS, KC_BSPC, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
+ 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_P7, KC_P8, KC_P9, KC_PPLS,
+ 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_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, TT(1), KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT),
+
+ LAYOUT(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_CALC, _______, _______, _______,
+ _______, RGB_TOG, _______, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, KC_TAB,
+ BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_TAB,
+ _______, _______, _______, _______, BL_DOWN, BL_TOGG, BL_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, KC_PLAY, _______, KC_REC, KC_DONE, _______, _______, _______, _______, _______, _______),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (!process_record_dynamic_macro(keycode, record)) {
+ return false;
+ }
+ return true;
+}
diff --git a/keyboards/ymdk/melody96/soldered/keymaps/default/keymap.c b/keyboards/ymdk/melody96/soldered/keymaps/default/keymap.c
new file mode 100644
index 0000000000..cc5a7cc0e5
--- /dev/null
+++ b/keyboards/ymdk/melody96/soldered/keymaps/default/keymap.c
@@ -0,0 +1,20 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_all(
+ KC_ESC, 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_PSCR, KC_HOME, KC_END, KC_PGUP, KC_PGDN, KC_DEL,
+ 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_BSLS, KC_BSPC, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
+ 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_P7, KC_P8, KC_P9, KC_PMNS,
+ 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_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), MO(1), KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT
+ ),
+ [1] = LAYOUT_all(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_TOG, _______, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, BL_DOWN, BL_TOGG, BL_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/ymdk/melody96/soldered/keymaps/default_96_with60_split_num0/keymap.c b/keyboards/ymdk/melody96/soldered/keymaps/default_96_with60_split_num0/keymap.c
new file mode 100644
index 0000000000..6e4af827d6
--- /dev/null
+++ b/keyboards/ymdk/melody96/soldered/keymaps/default_96_with60_split_num0/keymap.c
@@ -0,0 +1,36 @@
+#include QMK_KEYBOARD_H
+
+enum custom_keycodes {
+ KC_P00 = SAFE_RANGE
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_96_with60_split_num0(
+ KC_ESC, 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_PSCR, KC_HOME, KC_END, KC_PGUP, KC_PGDN, KC_DEL,
+ 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_NUM, KC_PSLS, KC_PAST, KC_PMNS,
+ 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_P7, KC_P8, KC_P9, KC_PPLS,
+ 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_P4, KC_P5, KC_P6,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_APP, KC_RCTL, KC_P0, KC_P00, KC_PDOT
+ ),
+ [1] = LAYOUT_96_with60_split_num0(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_TOG, _______, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, BL_DOWN, BL_TOGG, BL_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case KC_P00:
+ if (record->event.pressed) {
+ tap_code(KC_P0);
+ tap_code(KC_P0);
+ }
+ return false;
+ }
+ return true;
+}
diff --git a/keyboards/ymdk/melody96/soldered/keymaps/dvz/config.h b/keyboards/ymdk/melody96/soldered/keymaps/dvz/config.h
new file mode 100644
index 0000000000..380e11a3a1
--- /dev/null
+++ b/keyboards/ymdk/melody96/soldered/keymaps/dvz/config.h
@@ -0,0 +1,36 @@
+ /* Copyright 2021 Milan Düwel
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define COMBO_TERM 100
+
+//#define UNICODE_SELECTED_MODES UNICODE_MODE_WINCOMPOSE
+
+#define RGBLIGHT_LAYERS
+#define RGBLIGHT_LAYER_BLINK
+
+#define RGBLIGHT_EFFECT_ALTERNATING
+#define RGBLIGHT_EFFECT_BREATHING
+#define RGBLIGHT_EFFECT_CHRISTMAS
+#define RGBLIGHT_EFFECT_KNIGHT
+#define RGBLIGHT_EFFECT_SNAKE
+#define RGBLIGHT_EFFECT_TWINKLE
+
+#undef RGBLIGHT_EFFECT_RAINBOW_MOOD
+#undef RGBLIGHT_EFFECT_RAINBOW_SWIRL
+#undef RGBLIGHT_EFFECT_STATIC_GRADIENT
+#undef RGBLIGHT_EFFECT_RGB_TEST
diff --git a/keyboards/ymdk/melody96/soldered/keymaps/dvz/keymap.c b/keyboards/ymdk/melody96/soldered/keymaps/dvz/keymap.c
new file mode 100644
index 0000000000..20d4d1e510
--- /dev/null
+++ b/keyboards/ymdk/melody96/soldered/keymaps/dvz/keymap.c
@@ -0,0 +1,161 @@
+ /* Copyright 2021 Milan Düwel
+ *
+ * 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
+
+ /* This keymap is designed for use with a German keyboard layout.
+ * It is essentially the same as the default via keymap but adds combo functionality to type umlauts as well as lighting layers for various actions.
+ * Toggling the combo feature also disables KC_LGUI so both can be turned off for gaming. If you want to get rid of it without reflashing new firmware, use KC_RGUI instead.
+ * Layers 2 and 3 are currently unused but are configurable within via.
+ */
+
+enum combos {
+ UML_AE,
+ UML_OE,
+ UML_UE,
+ UML_SZ
+};
+
+const uint16_t PROGMEM ae_combo[] = {KC_A, KC_E, COMBO_END};
+const uint16_t PROGMEM oe_combo[] = {KC_O, KC_E, COMBO_END};
+const uint16_t PROGMEM ue_combo[] = {KC_U, KC_E, COMBO_END};
+const uint16_t PROGMEM sz_combo[] = {KC_S, KC_Y, COMBO_END};
+
+combo_t key_combos[] = {
+ [UML_AE] = COMBO(ae_combo, KC_QUOT),
+ [UML_OE] = COMBO(oe_combo, KC_SCLN),
+ [UML_UE] = COMBO(ue_combo, KC_LBRC),
+ [UML_SZ] = COMBO(sz_combo, KC_MINS)
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(
+ KC_ESC, 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_PSCR, KC_HOME, KC_END, KC_PGUP, KC_PGDN, KC_DEL,
+ 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_BSLS, KC_BSPC, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
+ 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_P7, KC_P8, KC_P9, KC_PMNS,
+ 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_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), MO(1), KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT),
+
+ [1] = LAYOUT(
+ QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD,
+ KC_TRNS, RGB_TOG, KC_TRNS, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD,
+ BL_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, CM_TOGG, BL_TOGG, BL_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END, KC_TRNS, KC_TRNS, KC_MUTE),
+
+ [2] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ [3] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+};
+
+/* The lighting layers feature a caps indicator as well as layer blinks for mute and the function layer (blink only to allow unhindered adjustment of the RGB backlight settings).
+ Sadly these colours can not be customized within VIA.
+*/
+
+const rgblight_segment_t PROGMEM my_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS(
+ {0, 1, HSV_RED},
+ {15, 17, HSV_RED}
+);
+
+const rgblight_segment_t PROGMEM my_function_layer[] = RGBLIGHT_LAYER_SEGMENTS(
+ {10, 12, HSV_YELLOW}
+);
+
+const rgblight_segment_t PROGMEM my_f2_layer[] = RGBLIGHT_LAYER_SEGMENTS(
+ {0, 17, HSV_CYAN}
+);
+
+const rgblight_segment_t PROGMEM my_f3_layer[] = RGBLIGHT_LAYER_SEGMENTS(
+ {0, 17, HSV_PURPLE}
+);
+
+const rgblight_segment_t PROGMEM my_flash_layer[] = RGBLIGHT_LAYER_SEGMENTS(
+ {0, 17, HSV_RED}
+);
+
+// Now define the array of layers. Later layers take precedence
+const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(
+ my_capslock_layer,
+ my_function_layer, // Overrides caps lock layer
+ my_f2_layer,
+ my_f3_layer,
+ my_flash_layer
+);
+
+void keyboard_post_init_user(void) {
+ // Enable the LED layers
+ rgblight_layers = my_rgb_layers;
+};
+
+bool led_update_user(led_t led_state) {
+ rgblight_set_layer_state(0, led_state.caps_lock);
+ return true;
+};
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ //rgblight_set_layer_state(1, layer_state_cmp(state, 1));
+ rgblight_set_layer_state(2, layer_state_cmp(state, 2));
+ rgblight_set_layer_state(3, layer_state_cmp(state, 3));
+ return state;
+};
+
+// Note we user post_process_record_user because we want the state
+// after the flag has been flipped...
+void post_process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case KC_CAPS:
+ case KC_MUTE:
+ case QK_COMBO_TOGGLE:
+ if (record->event.pressed) {
+ rgblight_blink_layer(4, 250);
+ }
+ break;
+ case MO(1):
+ if (record->event.pressed) {
+ rgblight_blink_layer(1, 250);
+ }
+ break;
+ }
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case KC_LGUI: //use combo toggle to disable the win key while gaming
+ if (record->event.pressed) {
+ if (is_combo_enabled()==false) {
+ return false;
+ }
+ }
+ return true; // Let QMK send the enter press/release events
+ default:
+ return true; // Process all other keycodes normally
+ }
+};
diff --git a/keyboards/ymdk/melody96/soldered/keymaps/dvz/readme.md b/keyboards/ymdk/melody96/soldered/keymaps/dvz/readme.md
new file mode 100644
index 0000000000..d82055244e
--- /dev/null
+++ b/keyboards/ymdk/melody96/soldered/keymaps/dvz/readme.md
@@ -0,0 +1,3 @@
+# DvZ's VIA compatible keymap with rolling umlauts for german typists
+
+Added by: [devilzmods](https://github.com/devilzmods)
diff --git a/keyboards/ymdk/melody96/soldered/keymaps/dvz/rules.mk b/keyboards/ymdk/melody96/soldered/keymaps/dvz/rules.mk
new file mode 100644
index 0000000000..a1e85f13f4
--- /dev/null
+++ b/keyboards/ymdk/melody96/soldered/keymaps/dvz/rules.mk
@@ -0,0 +1,5 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes # reduce firmware size
+COMBO_ENABLE = yes
+#UNICODE_ENABLE = yes
+BOOTLOADER = caterina
diff --git a/keyboards/ymdk/melody96/soldered/keymaps/konstantin/config.h b/keyboards/ymdk/melody96/soldered/keymaps/konstantin/config.h
new file mode 100644
index 0000000000..4b511eb848
--- /dev/null
+++ b/keyboards/ymdk/melody96/soldered/keymaps/konstantin/config.h
@@ -0,0 +1,3 @@
+#pragma once
+
+#define LAYER_FN
diff --git a/keyboards/ymdk/melody96/soldered/keymaps/konstantin/keymap.c b/keyboards/ymdk/melody96/soldered/keymaps/konstantin/keymap.c
new file mode 100644
index 0000000000..5dff7a249a
--- /dev/null
+++ b/keyboards/ymdk/melody96/soldered/keymaps/konstantin/keymap.c
@@ -0,0 +1,77 @@
+#include QMK_KEYBOARD_H
+#include "konstantin.h"
+
+static const HSV *colors[] = { &godspeed_blue, &godspeed_yellow };
+static const size_t cnum = ARRAY_SIZE(colors);
+static size_t cidx = 0;
+
+enum keycodes_keymap {
+ RGB_SET = RANGE_KEYMAP,
+};
+
+void eeconfig_init_keymap(void) {
+ rgblight_sethsv(colors[cidx]->h, colors[cidx]->s, colors[cidx]->v);
+}
+
+bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case RGB_SET:
+ if (record->event.pressed) {
+ cidx = (cidx + 1) % cnum;
+ rgblight_sethsv(colors[cidx]->h, colors[cidx]->s, colors[cidx]->v);
+ }
+ break;
+ }
+
+ return true;
+}
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Base layer
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │Esc│F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│PSc│Ins│Hom│End│PgU│PgD│
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ \ │Del│NLk│P/ │P* │P- │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┼───┼───┼───┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │Bspc │P7 │P8 │P9 │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┼───┼───┤P+ │
+ * │FnCaps│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │P4 │P5 │P6 │ │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┼───┼───┼───┤
+ * │LSft│RAG│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │RSfRCt│ ↑ │P1 │P2 │P3 │ │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┴┬──┴──┬───┼───┼───┼───┼───┤PEn│
+ * │LCtl│LGui│LAlt│ Space │RAlGu│FnFLk│ ← │ ↓ │ → │P0 │P. │ │
+ * └────┴────┴────┴────────────────────────┴─────┴─────┴───┴───┴───┴───┴───┴───┘
+ */
+ [L_BASE] = LAYOUT(
+ KC_ESC, 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_PSCR, KC_INS, KC_HOME, KC_END, KC_PGUP, KC_PGDN,
+ 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_BSLS, KC_DEL, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
+ 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_BSPC, KC_P7, KC_P8, KC_P9, XXXXXXX,
+ FN_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_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_LSFT, RAL_RGU, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RSF_RCT, KC_UP, KC_P1, KC_P2, KC_P3, XXXXXXX,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, RAL_RGU, XXXXXXX, FN_FNLK, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT
+ ),
+
+ /* Fn layer
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │Sys│SLk│Pau│Brk│Top│Btm│
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │ │F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│ │ │RTg│ ÷ │ × │ − │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┼───┼───┼───┼───┤
+ * │ M4 │M2 │M↑ │M1 │M3 │M5 │ │UCM│ │Stp│Ply│Prv│Nxt│Clear│RH+│RS+│RV+│ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┼───┼───┤RSt│
+ * │ │M← │M↓ │M→ │MW↑│ │ │ │ │ │ │ │ │RH-│RS-│RV-│ │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┼───┼───┼───┤
+ * │ │ │MA0│MA2│MW←│MW→│ │ │App│Vo-│Vo+│Mut│ │PgU│RMR│RMS│RMB│ │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┼───┼───┼───┼───┤RMP│
+ * │ │DtPR│DtNA│ MW↓ │ │ │ │Hom│PgD│End│RM-│RM+│ │
+ * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
+ */
+ [L_FN] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, SYSRQ, KC_SCRL, KC_PAUS, BREAK, TOP, BOTTOM,
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, RGB_TOG, DIVIDE, TIMES, MINUS,
+ KC_BTN4, KC_BTN2, KC_MS_U, KC_BTN1, KC_BTN3, KC_BTN5, _______, UC_NEXT, _______, KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, CLEAR, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX,
+ _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_U, _______, _______, _______, _______, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SET,
+ _______, _______, KC_ACL0, KC_ACL2, KC_WH_L, KC_WH_R, _______, _______, KC_APP, KC_VOLD, KC_VOLU, KC_MUTE, _______, KC_PGUP, RGB_M_R, RGB_M_SN,RGB_M_B, XXXXXXX,
+ _______, DST_P_R, DST_N_A, KC_WH_D, _______, XXXXXXX, _______, KC_HOME, KC_PGDN, KC_END, RGB_RMOD,RGB_MOD, RGB_M_P
+ ),
+};
diff --git a/keyboards/ymdk/melody96/soldered/keymaps/konstantin/rules.mk b/keyboards/ymdk/melody96/soldered/keymaps/konstantin/rules.mk
new file mode 100644
index 0000000000..b315c8e6b9
--- /dev/null
+++ b/keyboards/ymdk/melody96/soldered/keymaps/konstantin/rules.mk
@@ -0,0 +1,19 @@
+# Generic features
+BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
+COMMAND_ENABLE = yes
+CONSOLE_ENABLE = yes
+EXTRAKEY_ENABLE = yes
+MOUSEKEY_ENABLE = yes
+NKRO_ENABLE = yes
+TAP_DANCE_ENABLE = yes
+UNICODEMAP_ENABLE = yes
+
+# Keyboard-specific features
+BACKLIGHT_ENABLE = no
+RGBLIGHT_ENABLE = yes
+VIA_ENABLE = yes
+
+# Firmware size reduction
+GRAVE_ESC_ENABLE = no
+MAGIC_ENABLE = no
+SPACE_CADET_ENABLE = no
diff --git a/keyboards/ymdk/melody96/soldered/keymaps/via/keymap.c b/keyboards/ymdk/melody96/soldered/keymaps/via/keymap.c
new file mode 100644
index 0000000000..897d86acb7
--- /dev/null
+++ b/keyboards/ymdk/melody96/soldered/keymaps/via/keymap.c
@@ -0,0 +1,36 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_all(
+ KC_ESC, 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_PSCR, KC_HOME, KC_END, KC_PGUP, KC_PGDN, KC_DEL,
+ 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_BSLS, KC_BSPC, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
+ 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_P7, KC_P8, KC_P9, KC_PMNS,
+ 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_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), MO(1), KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT
+ ),
+ [1] = LAYOUT_all(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_TOG, _______, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, BL_DOWN, BL_TOGG, BL_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ [2] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ [3] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/ymdk/melody96/soldered/keymaps/via/rules.mk b/keyboards/ymdk/melody96/soldered/keymaps/via/rules.mk
new file mode 100644
index 0000000000..36b7ba9cbc
--- /dev/null
+++ b/keyboards/ymdk/melody96/soldered/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/ymdk/melody96/soldered/matrix_diagram.md b/keyboards/ymdk/melody96/soldered/matrix_diagram.md
new file mode 100644
index 0000000000..af8ba0ec81
--- /dev/null
+++ b/keyboards/ymdk/melody96/soldered/matrix_diagram.md
@@ -0,0 +1,35 @@
+# Matrix Diagram for YMDK Melody96 Soldered
+
+```
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+│50 │51 │52 │53 │54 │55 │56 │57 │58 │B8 │B7 │B5 │B4 │B3 │B6 │B2 │B1 │B0 │63 │
+├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤ ┌───────┐
+│40 │41 │42 │43 │44 │45 │56 │47 │48 │A8 │A7 │A5 │A4 │A3 │A6 │A2 │A1 │A0 │64 │ │A6 │ 2u Backpsace
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┼───┼───┼───┼───┤ └─┬─────┤ ┌───┐
+│30 │31 │32 │33 │34 │35 │36 │37 │38 │98 │97 │95 │94 │84 │96 │92 │91 │90 │ │ │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┼───┼───┼───┤ ┌──┴┐93 │ ISO Enter │80 │ Numpad "+" 2u
+│20 │21 │22 │23 │24 │25 │26 │27 │28 │88 │87 │85 │93 │86 │82 │81 │80 │ │84 │ │ │ │
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┼───┼───┼───┤ └───┴────┘ ├───┤
+│10 │11 │12 │13 │14 │15 │16 │17 │18 │78 │77 │75 │74 │73 │76 │72 │71 │70 │ │ │
+├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┼───┼───┼───┼───┼───┤ ┌───────┐ │60 │ Numpad Enter 2U
+│00 │01 │02 │06 │08 │07 │05 │04 │03 │66 │62 │61 │60 │ Numpad 0 2u │62 │ │ │
+└────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┴───┴───┴───┘ └───────┘ └───┘
+┌────────┐ ┌──────────┐
+│10 │ 2.25u LShift 2.75u RShift │74 │
+└────────┘ └──────────┘
+┌────┬────┬────┬────────────────────────┬────┬────┬────┬────┐
+│00 │01 │02 │06 │08 │07 │04 │03 │ 4x1.25u Right Mod
+└────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+┌─────┬─────┬───────────────────────────┬───┬───┬───┬───┬───┐
+│00 │01 │06 │08 │07 │05 │04 │03 │ 2x1.5u Left Mod
+└─────┴─────┴───────────────────────────┴───┴───┴───┴───┴───┘
+┌─────┬───┬─────┬───────────────────────┬─────┬─────┬───┬───┐
+│00 │01 │02 │06 │08 │05 │04 │03 │ Tsangan Left Mod, 2x1.5u-2x1u Right Mod
+└─────┴───┴─────┴───────────────────────┴─────┴─────┴───┴───┘
+┌─────┬───┬─────┬───────────────────────────┬─────┬───┬─────┐
+│00 │01 │02 │06 │07 │04 │03 │ Tsangan/WKL/HHKB
+└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
+┌─────┬───┬─────┬───────────────────────────┬───┬───┬───┬───┐
+│00 │01 │02 │06 │07 │05 │04 │03 │ 4x1u Right Mod
+└─────┴───┴─────┴───────────────────────────┴───┴───┴───┴───┘
+```
diff --git a/keyboards/ymdk/melody96/soldered/readme.md b/keyboards/ymdk/melody96/soldered/readme.md
new file mode 100644
index 0000000000..8cd3889a6c
--- /dev/null
+++ b/keyboards/ymdk/melody96/soldered/readme.md
@@ -0,0 +1,19 @@
+# YMDK Melody96 Soldered
+
+![melody96](https://i.imgur.com/9o0a6XFh.png)
+
+96-key Keyboard from YMDK. The PCB for this board is also commonly used in the NYM96.
+
+* Keyboard Maintainer: [superuser41](https://github.com/kaylanm)
+* Hardware Supported: Melody96 Soldered PCBs
+* Hardware Availability: [YMDK on Geekhack, group buy closed](https://geekhack.org/index.php?topic=93614.0), [NYM96 on Massdrop](https://www.massdrop.com/buy/nym96-aluminum-mechanical-keyboard?mode=guest_open)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make ymdk/melody96/soldered:default
+
+Flashing example for this keyboard:
+
+ make ymdk/melody96/soldered: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).
diff --git a/keyboards/ymdk/melody96/soldered/rules.mk b/keyboards/ymdk/melody96/soldered/rules.mk
new file mode 100644
index 0000000000..3d5cb57ad5
--- /dev/null
+++ b/keyboards/ymdk/melody96/soldered/rules.mk
@@ -0,0 +1,12 @@
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # Enable N-Key Rollover
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
--
cgit v1.2.3