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