~ruther/qmk_firmware

ca7da3866d8a7a80e5c932ebac40fe0061d00c7f — fauxpark 4 years ago ab375d3 + 8cf5f72
Merge remote-tracking branch 'upstream/master' into develop
162 files changed, 980 insertions(+), 180 deletions(-)

M docs/feature_rgb_matrix.md
M keyboards/baguette/config.h
M keyboards/bakeneko80/config.h
M keyboards/bantam44/config.h
M keyboards/basekeys/slice/rev1/config.h
M keyboards/basekeys/slice/rev1_rgb/config.h
M keyboards/bat43/config.h
M keyboards/bigseries/1key/config.h
M keyboards/bigseries/2key/config.h
M keyboards/bigseries/3key/config.h
M keyboards/bigseries/4key/config.h
M keyboards/bioi/g60ble/config.h
M keyboards/blackplum/config.h
M keyboards/blockey/config.h
M keyboards/bm16a/config.h
M keyboards/bm16s/config.h
M keyboards/bm43a/config.h
M keyboards/bm60rgb/config.h
M keyboards/boardsource/3x4/config.h
M keyboards/boardsource/4x12/config.h
M keyboards/boardsource/5x12/config.h
M keyboards/boardwalk/config.h
M keyboards/boston_meetup/config.h
M keyboards/botanicalkeyboards/fm2u/config.h
M keyboards/bpiphany/frosty_flake/config.h
M keyboards/bpiphany/pegasushoof/2013/config.h
M keyboards/bpiphany/pegasushoof/2015/config.h
M keyboards/bpiphany/sixshooter/config.h
M keyboards/bpiphany/tiger_lily/config.h
M keyboards/bpiphany/unloved_bastard/config.h
M keyboards/bthlabs/geekpad/config.h
M keyboards/business_card/alpha/config.h
M keyboards/business_card/beta/config.h
M keyboards/butterstick/config.h
M keyboards/c39/config.h
M keyboards/cannonkeys/an_c/config.h
M keyboards/cannonkeys/atlas/config.h
M keyboards/cannonkeys/chimera65/config.h
M keyboards/cannonkeys/db60/config.h
M keyboards/cannonkeys/devastatingtkl/config.h
M keyboards/cannonkeys/instant60/config.h
M keyboards/cannonkeys/iron165/config.h
M keyboards/cannonkeys/obliterated75/config.h
M keyboards/cannonkeys/ortho48/config.h
M keyboards/cannonkeys/ortho60/config.h
M keyboards/cannonkeys/ortho75/config.h
M keyboards/cannonkeys/practice60/config.h
M keyboards/cannonkeys/practice65/config.h
M keyboards/cannonkeys/rekt1800/config.h
M keyboards/cannonkeys/satisfaction75/config.h
M keyboards/cannonkeys/savage65/config.h
M keyboards/cannonkeys/tmov2/config.h
M keyboards/catch22/config.h
M keyboards/centromere/config.h
M keyboards/cheshire/curiosity/config.h
M keyboards/chidori/config.h
M keyboards/chili/config.h
M keyboards/chimera_ergo/config.h
M keyboards/chimera_ls/config.h
M keyboards/chimera_ortho/config.h
M keyboards/chimera_ortho_plus/config.h
M keyboards/choc_taro/config.h
M keyboards/christmas_tree/config.h
M keyboards/ckeys/handwire_101/config.h
M keyboards/ckeys/nakey/config.h
M keyboards/ckeys/obelus/config.h
M keyboards/ckeys/thedora/config.h
M keyboards/ckeys/washington/config.h
M keyboards/claw44/rev1/config.h
M keyboards/clawsome/bookerboard/config.h
M keyboards/clawsome/coupe/config.h
M keyboards/clawsome/gamebuddy/config.h
M keyboards/clawsome/sedan/config.h
M keyboards/clawsome/sidekick/config.h
M keyboards/cocoa40/config.h
M keyboards/comet46/config.h
M keyboards/contra/config.h
M keyboards/converter/adb_usb/config.h
M keyboards/converter/hp_46010a/config.h
M keyboards/converter/ibm_5291/config.h
M keyboards/converter/ibm_terminal/config.h
M keyboards/converter/m0110_usb/config.h
M keyboards/converter/m0110_usb/readme.md
M keyboards/converter/modelm101/config.h
M keyboards/converter/numeric_keypad_IIe/config.h
M keyboards/converter/palm_usb/config.h
M keyboards/converter/siemens_tastatur/config.h
M keyboards/converter/sun_usb/config.h
M keyboards/converter/usb_usb/ble/config.h
M keyboards/converter/usb_usb/config.h
M keyboards/converter/xt_usb/config.h
A keyboards/cool836a/config.h
A keyboards/cool836a/cool836a.c
A keyboards/cool836a/cool836a.h
A keyboards/cool836a/info.json
A keyboards/cool836a/keymaps/default/keymap.c
A keyboards/cool836a/keymaps/default/readme.md
A keyboards/cool836a/readme.md
A keyboards/cool836a/rules.mk
M keyboards/copenhagen_click/click_pad_v1/config.h
M keyboards/coseyfannitutti/discipad/config.h
M keyboards/coseyfannitutti/discipline/config.h
M keyboards/coseyfannitutti/mullet/config.h
M keyboards/coseyfannitutti/mulletpad/config.h
M keyboards/coseyfannitutti/mysterium/config.h
M keyboards/coseyfannitutti/romeo/config.h
M keyboards/cospad/config.h
M keyboards/crawlpad/config.h
M keyboards/cu24/config.h
M keyboards/cu75/config.h
M keyboards/cu80/config.h
M keyboards/cutie_club/borsdorf/info.json
M keyboards/cutie_club/wraith/config.h
M keyboards/daisy/config.h
M keyboards/dc01/arrow/config.h
M keyboards/dc01/left/config.h
M keyboards/dc01/numpad/config.h
M keyboards/dc01/right/config.h
M keyboards/deltasplit75/v2/config.h
M keyboards/dichotomy/config.h
M keyboards/diverge3/config.h
M keyboards/divergetm2/config.h
M keyboards/dm9records/ergoinu/config.h
M keyboards/dm9records/plaid/config.h
M keyboards/dm9records/tartan/config.h
M keyboards/dmqdesign/spin/config.h
M keyboards/do60/config.h
M keyboards/donutcables/scrabblepad/config.h
M keyboards/doppelganger/config.h
M keyboards/doro67/multi/config.h
M keyboards/doro67/regular/config.h
M keyboards/doro67/rgb/config.h
M keyboards/dozen0/config.h
M keyboards/dp60/config.h
M keyboards/duck/eagle_viper/v2/config.h
M keyboards/duck/jetfire/config.h
M keyboards/duck/lightsaver/config.h
M keyboards/duck/octagon/v1/config.h
M keyboards/duck/octagon/v2/config.h
M keyboards/duck/orion/v3/config.h
M keyboards/duck/tcv3/config.h
M keyboards/dumbpad/config.h
M keyboards/dz60/keymaps/LEdiodes/config.h
M keyboards/dztech/dz60rgb/v1/config.h
M keyboards/dztech/dz60rgb/v2/config.h
M keyboards/dztech/dz60rgb_ansi/v1/config.h
M keyboards/dztech/dz60rgb_ansi/v2/config.h
M keyboards/dztech/dz60rgb_wkl/v1/config.h
M keyboards/dztech/dz60rgb_wkl/v2/config.h
M keyboards/dztech/dz65rgb/v1/config.h
M keyboards/dztech/dz65rgb/v2/config.h
A keyboards/lily58/keymaps/domnantas/config.h
A keyboards/lily58/keymaps/domnantas/keymap.c
A keyboards/lily58/keymaps/domnantas/readme.md
A keyboards/lily58/keymaps/domnantas/rules.mk
A keyboards/ymdk/ymd09/keymaps/andys8/keymap.c
M quantum/rgb_matrix_animations/typing_heatmap_anim.h
M shell.nix
M tmk_core/protocol/arm_atsam/usb/udi_device_epsize.h
M tmk_core/protocol/lufa/adafruit_ble.cpp
M tmk_core/protocol/lufa/adafruit_ble.h
M tmk_core/protocol/lufa/lufa.c
M docs/feature_rgb_matrix.md => docs/feature_rgb_matrix.md +13 -0
@@ 318,6 318,19 @@ You can disable a single effect by defining `DISABLE_[EFFECT_NAME]` in your `con
|`#define DISABLE_RGB_MATRIX_SOLID_SPLASH`              |Disables `RGB_MATRIX_SOLID_SPLASH`             |
|`#define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH`         |Disables `RGB_MATRIX_SOLID_MULTISPLASH`        |

### RGB Matrix Effect Typing Heatmap :id=rgb-matrix-effect-typing-heatmap

This effect will color the RGB matrix according to a heatmap of recently pressed
keys. Whenever a key is pressed its "temperature" increases as well as that of
its neighboring keys. The temperature of each key is then decreased
automatically every 25 milliseconds by default.

In order to change the delay of temperature decrease define
`RGB_MATRIX_TYPING_HEATMAP_DECREASE_DELAY_MS`:

```c
#define RGB_MATRIX_TYPING_HEATMAP_DECREASE_DELAY_MS 50
```

## Custom RGB Matrix Effects :id=custom-rgb-matrix-effects


M keyboards/baguette/config.h => keyboards/baguette/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    Yiancar
#define PRODUCT         Baguette
#define DESCRIPTION     A French Custom

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/bakeneko80/config.h => keyboards/bakeneko80/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER 0x0001
#define MANUFACTURER Koichi Katano
#define PRODUCT Bakeneko 80
#define DESCRIPTION Open source tenkeyless keyboard

/* key matrix size */
#define MATRIX_ROWS 6

M keyboards/bantam44/config.h => keyboards/bantam44/config.h +0 -1
@@ 26,7 26,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    Bantam Keyboards
#define PRODUCT         Bantam44
#define DESCRIPTION     A custom keyboard

/* key matrix size */
#define MATRIX_ROWS 4

M keyboards/basekeys/slice/rev1/config.h => keyboards/basekeys/slice/rev1/config.h +0 -1
@@ 23,7 23,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0002
#define MANUFACTURER    2Moons
#define PRODUCT         Slice
#define DESCRIPTION     A custom keyboard

/* key matrix size */
#define MATRIX_ROWS 10

M keyboards/basekeys/slice/rev1_rgb/config.h => keyboards/basekeys/slice/rev1_rgb/config.h +0 -1
@@ 22,7 22,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0002
#define MANUFACTURER    2Moons
#define PRODUCT         Slice RGB
#define DESCRIPTION     A custom keyboard

/* key matrix size */
#define MATRIX_ROWS 10

M keyboards/bat43/config.h => keyboards/bat43/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER 0x0001
#define MANUFACTURER yfuku
#define PRODUCT bat43
#define DESCRIPTION 43key keyboard

/* key matrix size */
#define MATRIX_ROWS 8

M keyboards/bigseries/1key/config.h => keyboards/bigseries/1key/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0002
#define MANUFACTURER    WoodKeys.click
#define PRODUCT         BigSeries Single Keyboard
#define DESCRIPTION     Single key board for Novelkeys Big Series Switch

/* key matrix size */
#define MATRIX_ROWS 1

M keyboards/bigseries/2key/config.h => keyboards/bigseries/2key/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0002
#define MANUFACTURER    WoodKeys.click
#define PRODUCT         BigSeries Single Keyboard
#define DESCRIPTION     Single key board for Novelkeys Big Series Switch

/* key matrix size */
#define MATRIX_ROWS 1

M keyboards/bigseries/3key/config.h => keyboards/bigseries/3key/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    WoodKeys.click
#define PRODUCT         BigSeries Triple Keyboard
#define DESCRIPTION     Triple key board for Novelkeys Big Series Switch

/* key matrix size */
#define MATRIX_ROWS 1

M keyboards/bigseries/4key/config.h => keyboards/bigseries/4key/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0002
#define MANUFACTURER    WoodKeys.click
#define PRODUCT         BigSeries Quad Keyboard
#define DESCRIPTION     4-key board for Novelkeys Big Series Switch

/* key matrix size */
#define MATRIX_ROWS 2

M keyboards/bioi/g60ble/config.h => keyboards/bioi/g60ble/config.h +0 -1
@@ 8,7 8,6 @@
#define DEVICE_VER 0x0001
#define MANUFACTURER Basic IO Instruments
#define PRODUCT BIOI G60 BLE
#define DESCRIPTION BIOI G60 BLE

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/blackplum/config.h => keyboards/blackplum/config.h +0 -1
@@ 8,7 8,6 @@
#define DEVICE_VER      0x1001
#define MANUFACTURER    Pixlup
#define PRODUCT         Blackplum Keeb
#define DESCRIPTION     Blackplum 68 Percent Mechanical Keyboard

/* key matrix size */
#define MATRIX_ROWS 9

M keyboards/blockey/config.h => keyboards/blockey/config.h +0 -1
@@ 26,7 26,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    Eucalyn
#define PRODUCT         Blockey
#define DESCRIPTION     A custom keyboard

/* key matrix size */
#define MATRIX_ROWS 10

M keyboards/bm16a/config.h => keyboards/bm16a/config.h +0 -1
@@ 24,7 24,6 @@
#define DEVICE_VER      0x0001
#define MANUFACTURER    KPrepublic
#define PRODUCT         bm16a
#define DESCRIPTION     KPrepublic bm16a

/* key matrix size */
#define MATRIX_ROWS 4

M keyboards/bm16s/config.h => keyboards/bm16s/config.h +0 -1
@@ 7,7 7,6 @@
#define DEVICE_VER      0x0001
#define MANUFACTURER    KPrepublic
#define PRODUCT         bm16s
#define DESCRIPTION     KPrepublic bm16s

/* key matrix size */
#define MATRIX_ROWS 4

M keyboards/bm43a/config.h => keyboards/bm43a/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    KPRepublic
#define PRODUCT         BM43A
#define DESCRIPTION     A QMK-powered custom keyboard

/* key matrix size */
#define MATRIX_ROWS 4

M keyboards/bm60rgb/config.h => keyboards/bm60rgb/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    KP Republic
#define PRODUCT         BM60 RGB
#define DESCRIPTION     A 60% hotswap inswitch rgb board

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/boardsource/3x4/config.h => keyboards/boardsource/3x4/config.h +0 -1
@@ 10,7 10,6 @@
#define DEVICE_VER      0x0000
#define MANUFACTURER    Boardsource
#define PRODUCT         3x4
#define DESCRIPTION     Little macro pad

/* key matrix size */
#define MATRIX_ROWS 3

M keyboards/boardsource/4x12/config.h => keyboards/boardsource/4x12/config.h +0 -1
@@ 8,7 8,6 @@
#define DEVICE_VER      0x0000
#define MANUFACTURER    Boardsource
#define PRODUCT         4x12
#define DESCRIPTION     40 percent ortho keyboard

/* key matrix size */
#define MATRIX_ROWS 4

M keyboards/boardsource/5x12/config.h => keyboards/boardsource/5x12/config.h +0 -1
@@ 8,7 8,6 @@
#define DEVICE_VER      0x0000
#define MANUFACTURER    Boardsource
#define PRODUCT         5x12
#define DESCRIPTION     50 percent ortho keyboard

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/boardwalk/config.h => keyboards/boardwalk/config.h +0 -1
@@ 23,7 23,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    shensmobile
#define PRODUCT         Boardwalk
#define DESCRIPTION     QMK keyboard firmware for Boardwalk

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/boston_meetup/config.h => keyboards/boston_meetup/config.h +0 -1
@@ 24,7 24,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define PRODUCT_ID      0x26BE
#define MANUFACTURER    ishtob
#define PRODUCT         Boston Meetup Board
#define DESCRIPTION     A limited-run community meetup board

//#define AUDIO_VOICES


M keyboards/botanicalkeyboards/fm2u/config.h => keyboards/botanicalkeyboards/fm2u/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER 0x0001
#define MANUFACTURER botanicalkeyboards
#define PRODUCT fm2u
#define DESCRIPTION A 1 key macropad

/* key matrix size */
#define MATRIX_ROWS 1

M keyboards/bpiphany/frosty_flake/config.h => keyboards/bpiphany/frosty_flake/config.h +0 -1
@@ 26,7 26,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    Bathroom Epiphanies
#define PRODUCT         frosty_flake
#define DESCRIPTION     Frosty Flake controller for the CM Storm Quick Fire Rapid

/*
 * Frosty Flake Rev. 20140521 made by Bathroom Ephiphanies

M keyboards/bpiphany/pegasushoof/2013/config.h => keyboards/bpiphany/pegasushoof/2013/config.h +0 -1
@@ 24,7 24,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0104
#define MANUFACTURER    Filco
#define PRODUCT         Majestouch TKL \\w The Pegasus Hoof 2013
#define DESCRIPTION     QMK firmware for Majestouch TKL

/* key matrix size */
#define MATRIX_ROWS 8

M keyboards/bpiphany/pegasushoof/2015/config.h => keyboards/bpiphany/pegasushoof/2015/config.h +0 -1
@@ 24,7 24,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0104
#define MANUFACTURER    Filco
#define PRODUCT         Majestouch TKL \\w The Pegasus Hoof 2015
#define DESCRIPTION     QMK firmware for Majestouch TKL

/* key matrix size */
#define MATRIX_ROWS 8

M keyboards/bpiphany/sixshooter/config.h => keyboards/bpiphany/sixshooter/config.h +0 -1
@@ 8,7 8,6 @@
#define DEVICE_VER      0x0001
#define MANUFACTURER    bpiphany
#define PRODUCT         sixshooter
#define DESCRIPTION     A PCB for the CM Storm switch tester utilizing a Teensy 2.0.

/* key matrix size */
#define MATRIX_ROWS 2

M keyboards/bpiphany/tiger_lily/config.h => keyboards/bpiphany/tiger_lily/config.h +0 -1
@@ 26,7 26,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    Bathroom Epiphanies
#define PRODUCT         tiger_lily
#define DESCRIPTION     Tiger Lily controller for the Filco Majestouch 2

/*
 * Frosty Flake Rev. 20140521 made by Bathroom Ephiphanies

M keyboards/bpiphany/unloved_bastard/config.h => keyboards/bpiphany/unloved_bastard/config.h +0 -1
@@ 26,7 26,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    BathroomEpiphanies
#define PRODUCT         Unloved Bastard
#define DESCRIPTION     Unloved Bastard controller for CM Masterkeys S

/* key matrix size */
#define MATRIX_ROWS 8

M keyboards/bthlabs/geekpad/config.h => keyboards/bthlabs/geekpad/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    BTHLabs
#define PRODUCT         GeekPad
#define DESCRIPTION     3x3 custom macro pad

/* key matrix size */
#define MATRIX_ROWS 3

M keyboards/business_card/alpha/config.h => keyboards/business_card/alpha/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    kakunpc
#define PRODUCT         business_card
#define DESCRIPTION     A custom keyboard

/* key matrix size */
#define MATRIX_ROWS 2

M keyboards/business_card/beta/config.h => keyboards/business_card/beta/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    kakunpc
#define PRODUCT         business_card
#define DESCRIPTION     A custom keyboard

/* key matrix size */
#define MATRIX_ROWS 3

M keyboards/butterstick/config.h => keyboards/butterstick/config.h +0 -1
@@ 8,7 8,6 @@
#define DEVICE_VER      0x0001
#define MANUFACTURER    g Heavy Industries
#define PRODUCT         Butter Stick
#define DESCRIPTION     Its a stick of butter
#define VERSION 		"Paula Deen"

#define DEBOUNCE 5

M keyboards/c39/config.h => keyboards/c39/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    Maple Computing
#define PRODUCT         C39
#define DESCRIPTION     A compact 39 key keyboard

/* key matrix size */
#define MATRIX_ROWS 3

M keyboards/cannonkeys/an_c/config.h => keyboards/cannonkeys/an_c/config.h +0 -1
@@ 23,7 23,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER CannonKeys
#define PRODUCT AN-C
#define DESCRIPTION AN-C Keyboard

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/cannonkeys/atlas/config.h => keyboards/cannonkeys/atlas/config.h +0 -1
@@ 23,7 23,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER CannonKeys
#define PRODUCT Atlas
#define DESCRIPTION Atlas Keyboard

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/cannonkeys/chimera65/config.h => keyboards/cannonkeys/chimera65/config.h +0 -1
@@ 23,7 23,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER CannonKeys
#define PRODUCT Chimera65
#define DESCRIPTION Chimera65 Keyboard

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/cannonkeys/db60/config.h => keyboards/cannonkeys/db60/config.h +0 -1
@@ 24,7 24,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.

#define MANUFACTURER CannonKeys
#define PRODUCT DB60
#define DESCRIPTION DB60 Keyboard

#define MATRIX_ROWS 5
#define MATRIX_COLS 15

M keyboards/cannonkeys/devastatingtkl/config.h => keyboards/cannonkeys/devastatingtkl/config.h +0 -1
@@ 23,7 23,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER CannonKeys
#define PRODUCT DevastatingTKL
#define DESCRIPTION Devastating Keyboard

#define MATRIX_ROWS 6
#define MATRIX_COLS 18

M keyboards/cannonkeys/instant60/config.h => keyboards/cannonkeys/instant60/config.h +0 -1
@@ 23,7 23,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER CannonKeys
#define PRODUCT Instant60
#define DESCRIPTION Instant 60 Keyboard

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/cannonkeys/iron165/config.h => keyboards/cannonkeys/iron165/config.h +0 -1
@@ 23,7 23,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER SmithAndRune
#define PRODUCT Iron165
#define DESCRIPTION Iron165 Keyboard

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/cannonkeys/obliterated75/config.h => keyboards/cannonkeys/obliterated75/config.h +0 -1
@@ 23,7 23,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER CannonKeys
#define PRODUCT Obliterated75
#define DESCRIPTION Obliterated75 Keyboard

/* key matrix size */
#define MATRIX_ROWS 6

M keyboards/cannonkeys/ortho48/config.h => keyboards/cannonkeys/ortho48/config.h +0 -1
@@ 23,7 23,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER QMK
#define PRODUCT Ortho48
#define DESCRIPTION Ortho48

/* key matrix size */
#define MATRIX_ROWS 4

M keyboards/cannonkeys/ortho60/config.h => keyboards/cannonkeys/ortho60/config.h +0 -1
@@ 23,7 23,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER QMK
#define PRODUCT Ortho60
#define DESCRIPTION Ortho60

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/cannonkeys/ortho75/config.h => keyboards/cannonkeys/ortho75/config.h +0 -1
@@ 23,7 23,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER CannonKeys
#define PRODUCT Ortho75
#define DESCRIPTION Ortho75

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/cannonkeys/practice60/config.h => keyboards/cannonkeys/practice60/config.h +0 -1
@@ 23,7 23,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER CannonKeys
#define PRODUCT Practice 60
#define DESCRIPTION Practice 60

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/cannonkeys/practice65/config.h => keyboards/cannonkeys/practice65/config.h +0 -1
@@ 23,7 23,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER CannonKeys
#define PRODUCT Practice 65
#define DESCRIPTION Practice 65

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/cannonkeys/rekt1800/config.h => keyboards/cannonkeys/rekt1800/config.h +0 -1
@@ 23,7 23,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER CannonKeys
#define PRODUCT Rekt1800
#define DESCRIPTION Rekt1800 Keyboard

/* key matrix size */
#define MATRIX_ROWS 6

M keyboards/cannonkeys/satisfaction75/config.h => keyboards/cannonkeys/satisfaction75/config.h +0 -1
@@ 29,7 29,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER CannonKeys
#define PRODUCT Satisfaction75
#define DESCRIPTION Satisfaction 75 Keyboard

/* key matrix size */
#define MATRIX_ROWS 6

M keyboards/cannonkeys/savage65/config.h => keyboards/cannonkeys/savage65/config.h +0 -1
@@ 23,7 23,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER CannonKeys
#define PRODUCT Savage65
#define DESCRIPTION Savage65 Keyboard

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/cannonkeys/tmov2/config.h => keyboards/cannonkeys/tmov2/config.h +0 -1
@@ 23,7 23,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER CannonKeys
#define PRODUCT TMOv2
#define DESCRIPTION TMOv2 Keyboard

/* key matrix size */
#define MATRIX_ROWS 4

M keyboards/catch22/config.h => keyboards/catch22/config.h +0 -1
@@ 24,7 24,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    rockydbull
#define PRODUCT         Catch22 Hotswap Macropad
#define DESCRIPTION     Budget 22 Key Hotswap Macropad

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/centromere/config.h => keyboards/centromere/config.h +0 -1
@@ 26,7 26,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    Southpaw Design
#define PRODUCT         centromere
#define DESCRIPTION     Q.M.K. keyboard firmware for Centromere

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/cheshire/curiosity/config.h => keyboards/cheshire/curiosity/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    Nightingale Studios/Cheshire Designs
#define PRODUCT         Curiosity
#define DESCRIPTION     Curiosity

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/chidori/config.h => keyboards/chidori/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER 0x0001
#define MANUFACTURER Kagizaraya
#define PRODUCT Chidori
#define DESCRIPTION Yet another split keyboard made with only through - hole components

/* key matrix size */
#define MATRIX_ROWS 12

M keyboards/chili/config.h => keyboards/chili/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    YDKB
#define PRODUCT         Chili
#define DESCRIPTION     QMK keyboard firmware for Chili, a G80-3000 replacement PCB

/* key matrix size */
#define MATRIX_ROWS 11

M keyboards/chimera_ergo/config.h => keyboards/chimera_ergo/config.h +0 -1
@@ 27,7 27,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    unknown
#define PRODUCT         Chimera Ergo
#define DESCRIPTION     q.m.k. keyboard firmware for Chimera Ergo

/* key matrix size */
#define MATRIX_ROWS 6

M keyboards/chimera_ls/config.h => keyboards/chimera_ls/config.h +0 -1
@@ 27,7 27,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    unknown
#define PRODUCT         Chimera Lets Split
#define DESCRIPTION     q.m.k. keyboard firmware for Chimera Lets Split

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/chimera_ortho/config.h => keyboards/chimera_ortho/config.h +0 -1
@@ 27,7 27,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    unknown
#define PRODUCT         Chimera Ortho
#define DESCRIPTION     q.m.k. keyboard firmware for Chimera Ortho

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/chimera_ortho_plus/config.h => keyboards/chimera_ortho_plus/config.h +0 -1
@@ 26,7 26,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    unknown
#define PRODUCT         Chimera Ortho Plus
#define DESCRIPTION     q.m.k. keyboard firmware for Chimera Ortho Plus

/* key matrix size */
#define MATRIX_ROWS 6

M keyboards/choc_taro/config.h => keyboards/choc_taro/config.h +0 -1
@@ 26,7 26,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER 0x0001
#define MANUFACTURER kakunpc
#define PRODUCT choc_taro
#define DESCRIPTION A custom keyboard

/* key matrix size */
#define MATRIX_ROWS 16

M keyboards/christmas_tree/config.h => keyboards/christmas_tree/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define PRODUCT_ID      0x3070
#define MANUFACTURER    Maple Computing
#define PRODUCT         Christmas Tree
#define DESCRIPTION     A tiny 6 key macro pad, in the shape of a christmas tree

/* key matrix size */
#define MATRIX_ROWS 6

M keyboards/ckeys/handwire_101/config.h => keyboards/ckeys/handwire_101/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    ckeys_handwire
#define PRODUCT         ckeys_handwire
#define DESCRIPTION     4x4 handwire workshop board

/* key matrix size */
#define MATRIX_ROWS 4

M keyboards/ckeys/nakey/config.h => keyboards/ckeys/nakey/config.h +0 -1
@@ 26,7 26,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    cKeys
#define PRODUCT         naKey
#define DESCRIPTION     The cKeys through hole ten key pad

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/ckeys/obelus/config.h => keyboards/ckeys/obelus/config.h +0 -1
@@ 26,7 26,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    You
#define PRODUCT         obelus
#define DESCRIPTION     4x4 QMK test platform

/* key matrix size */
#define MATRIX_ROWS 4

M keyboards/ckeys/thedora/config.h => keyboards/ckeys/thedora/config.h +0 -1
@@ 24,7 24,6 @@
#define DEVICE_VER 0x0001
#define MANUFACTURER ckeys
#define PRODUCT thedora
#define DESCRIPTION A board for keyboard exploration.

#define ENCODERS_PAD_A { B13 }
#define ENCODERS_PAD_B { B15 }

M keyboards/ckeys/washington/config.h => keyboards/ckeys/washington/config.h +0 -1
@@ 23,7 23,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER 0x0001
#define MANUFACTURER merlin04
#define PRODUCT Washington Macropad
#define DESCRIPTION Washington State shaped macropad

/* key matrix size */
#define MATRIX_ROWS 3

M keyboards/claw44/rev1/config.h => keyboards/claw44/rev1/config.h +0 -1
@@ 24,7 24,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER 0x0001
#define MANUFACTURER yfuku
#define PRODUCT claw44
#define DESCRIPTION A split keyboard with 3x6 vertically staggered keys and 4 thumb keys

/* key matrix size */
#define MATRIX_ROWS 8

M keyboards/clawsome/bookerboard/config.h => keyboards/clawsome/bookerboard/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    AlisGraveNil
#define PRODUCT         Bookerboard
#define DESCRIPTION     A 12-key QMK-powered macropod

/* key matrix size */
#define MATRIX_ROWS 4

M keyboards/clawsome/coupe/config.h => keyboards/clawsome/coupe/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    AlisGraveNil
#define PRODUCT         The Coupe
#define DESCRIPTION     A 61-key/60% QMK-powered custom keyboard

/* key matrix size */
#define MATRIX_ROWS 10

M keyboards/clawsome/gamebuddy/config.h => keyboards/clawsome/gamebuddy/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    AlisGraveNil
#define PRODUCT         GameBuddy
#define DESCRIPTION     A 26-key QMK-powered macropad designed for gaming!

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/clawsome/sedan/config.h => keyboards/clawsome/sedan/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    AlisGraveNil
#define PRODUCT         The Sedan
#define DESCRIPTION     A QMK-powered 68% custom keyboard

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/clawsome/sidekick/config.h => keyboards/clawsome/sidekick/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    AlisGraveNil
#define PRODUCT         Sidekick
#define DESCRIPTION     A 27-key QMK-powered macropad

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/cocoa40/config.h => keyboards/cocoa40/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    recompile keys
#define PRODUCT         cocoa40
#define DESCRIPTION     A 40% keyboard for programmers.

/* key matrix size */
#define MATRIX_ROWS 8

M keyboards/comet46/config.h => keyboards/comet46/config.h +0 -1
@@ 27,7 27,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    SatT
#define PRODUCT         Comet46
#define DESCRIPTION     qmk keyboard firmware for Comet46

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/contra/config.h => keyboards/contra/config.h +0 -1
@@ 9,7 9,6 @@
#define DEVICE_VER      0x0001
#define MANUFACTURER    Cartel
#define PRODUCT         Contra
#define DESCRIPTION     Keyboard

/* key matrix size */
#define MATRIX_ROWS 4

M keyboards/converter/adb_usb/config.h => keyboards/converter/adb_usb/config.h +0 -1
@@ 24,7 24,6 @@ Ported to QMK by Peter Roe <pete@13bit.me>
#define DEVICE_VER      0x0101
#define MANUFACTURER    QMK
#define PRODUCT         ADB keyboard converter
#define DESCRIPTION     Convert ADB keyboard to USB

/* matrix size */
#define MATRIX_ROWS 16  // keycode bit: 3-0

M keyboards/converter/hp_46010a/config.h => keyboards/converter/hp_46010a/config.h +0 -1
@@ 24,7 24,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER        0x0001
#define MANUFACTURER      QMK
#define PRODUCT           46010A keyboard converter
#define DESCRIPTION       46010A keyboard converter
                          
#define MATRIX_ROWS       14
#define MATRIX_COLS       8

M keyboards/converter/ibm_5291/config.h => keyboards/converter/ibm_5291/config.h +0 -1
@@ 24,7 24,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER          0x0001
#define MANUFACTURER        QMK
#define PRODUCT             5291 keyboard converter
#define DESCRIPTION         5291 keyboard converter

#define MATRIX_ROWS         24
#define MATRIX_COLS         4

M keyboards/converter/ibm_terminal/config.h => keyboards/converter/ibm_terminal/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0100
#define MANUFACTURER    QMK
#define PRODUCT         IBM Terminal Keyboard
#define DESCRIPTION     USB converter for IBM Terminal Keyboard


/* matrix size */

M keyboards/converter/m0110_usb/config.h => keyboards/converter/m0110_usb/config.h +0 -1
@@ 26,7 26,6 @@ Ported to QMK by Techsock <info@techsock.com>
#define DEVICE_VER      0x0101
#define MANUFACTURER    Apple
#define PRODUCT         M0110(A)
#define DESCRIPTION     Converts M0110(A) to USB and/or BT

/* matrix size */
#define MATRIX_ROWS 14

M keyboards/converter/m0110_usb/readme.md => keyboards/converter/m0110_usb/readme.md +1 -1
@@ 5,7 5,7 @@ This is a port of the original M0110 converter from TMK to QMK. The original con

## Enabling Bluetooth for the Adafruit Feather 32U4 BLE

Simply add `BLUETOOTH = AdafruitBLE` to your `rules.mk` file. This enables code specifically for the Adafruit Feather 32U4 BLE. If enabled, the device will use the `PRODUCT` and `DESCRIPTION` values from `config.h` for the device name displayed by the Feather on host devices. You can simply change these values to change the device name.
Simply add `BLUETOOTH = AdafruitBLE` to your `rules.mk` file. This enables code specifically for the Adafruit Feather 32U4 BLE. If enabled, the device will use the `PRODUCT` value from `config.h` for the device name displayed by the Feather on host devices. You can simply change these values to change the device name.


## Pins

M keyboards/converter/modelm101/config.h => keyboards/converter/modelm101/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    iw0rm3r
#define PRODUCT         IBM Model M 101/102
#define DESCRIPTION     Controlled by AVR chip

/* key matrix size */
#define MATRIX_ROWS 8

M keyboards/converter/numeric_keypad_IIe/config.h => keyboards/converter/numeric_keypad_IIe/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    Apple Inc.
#define PRODUCT         Numeric Keypad IIe
#define DESCRIPTION     "Numeric Keypad IIe, A2M2003"

/*


M keyboards/converter/palm_usb/config.h => keyboards/converter/palm_usb/config.h +0 -1
@@ 28,7 28,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0100
#define MANUFACTURER    QMK
#define PRODUCT         Stowaway converter
#define DESCRIPTION     USB converter for Stowaway keyboard

// IO pins to serial
// https://deskthority.net/wiki/Arduino_Pro_Micro for pin lookup

M keyboards/converter/siemens_tastatur/config.h => keyboards/converter/siemens_tastatur/config.h +0 -1
@@ 24,7 24,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.

#define MANUFACTURER Yiancar-Designs
#define PRODUCT Siemens Tastatur
#define DESCRIPTION Practice

/* key matrix size */
#define MATRIX_ROWS 4

M keyboards/converter/sun_usb/config.h => keyboards/converter/sun_usb/config.h +0 -1
@@ 23,7 23,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0100
#define MANUFACTURER    QMK
#define PRODUCT         Sun keyboard converter
#define DESCRIPTION     USB converter for Sun type 5 keyboard

/* matrix size */
#define MATRIX_ROWS 16

M keyboards/converter/usb_usb/ble/config.h => keyboards/converter/usb_usb/ble/config.h +0 -2
@@ 2,8 2,6 @@

#undef PRODUCT
#define PRODUCT         QMK BLE Adapter
#undef DESCRIPTION
#define DESCRIPTION

// Turn off the mode leds on the BLE module
#define ADAFRUIT_BLE_ENABLE_MODE_LEDS 0

M keyboards/converter/usb_usb/config.h => keyboards/converter/usb_usb/config.h +0 -1
@@ 24,7 24,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    QMK
#define PRODUCT         QMK USB-USB Converter
#define DESCRIPTION     USB to USB Keyboard Converter with QMK

/* size of virtual matrix */
#define MATRIX_ROWS 16

M keyboards/converter/xt_usb/config.h => keyboards/converter/xt_usb/config.h +0 -1
@@ 24,7 24,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    QMK
#define PRODUCT         XT keyboard converter
#define DESCRIPTION     convert XT keyboard to USB


/* matrix size */

A keyboards/cool836a/config.h => keyboards/cool836a/config.h +153 -0
@@ 0,0 1,153 @@
/*
Copyright 2021 Ohashi

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#pragma once

#include "config_common.h"

/* USB Device descriptor parameter */
#define VENDOR_ID    0xFEED
#define PRODUCT_ID   0x0000
#define DEVICE_VER   0x0001
#define MANUFACTURER Ohashi
#define PRODUCT      cool836A

/* key matrix size */
#define MATRIX_ROWS 6
#define MATRIX_COLS 6

/*
 * Keyboard Matrix Assignments
 *
 * Change this to how you wired your keyboard
 * COLS: AVR pins used for columns, left to right
 * ROWS: AVR pins used for rows, top to bottom
 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
 *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
 *
 */
#define MATRIX_ROW_PINS { D1, B5, B4, F4, B1, B6 }
#define MATRIX_COL_PINS { F5, D0, B2, C6, D7, E6 }
#define UNUSED_PINS

/* COL2ROW, ROW2COL */
//#define DIODE_DIRECTION COL2ROW
#define DIODE_DIRECTION ROW2COL

/*
 * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
 */
#define SOFT_SERIAL_PIN D0  // or D1, D2, D3, E6

//#define LED_NUM_LOCK_PIN B0
//#define LED_CAPS_LOCK_PIN B1
//#define LED_SCROLL_LOCK_PIN B2
//#define LED_COMPOSE_PIN B3
//#define LED_KANA_PIN B4

//#define BACKLIGHT_PIN B7
//#define BACKLIGHT_LEVELS 3
//#define BACKLIGHT_BREATHING

//#define RGB_DI_PIN E2
//#ifdef RGB_DI_PIN
//#    define RGBLED_NUM 16
//#    define RGBLIGHT_HUE_STEP 8
//#    define RGBLIGHT_SAT_STEP 8
//#    define RGBLIGHT_VAL_STEP 8
//#    define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
//#    define RGBLIGHT_SLEEP  /* If defined, the RGB lighting will be switched off when the host goes to sleep */
/*== all animations enable ==*/
//#    define RGBLIGHT_ANIMATIONS
/*== or choose animations ==*/
//#    define RGBLIGHT_EFFECT_BREATHING
//#    define RGBLIGHT_EFFECT_RAINBOW_MOOD
//#    define RGBLIGHT_EFFECT_RAINBOW_SWIRL
//#    define RGBLIGHT_EFFECT_SNAKE
//#    define RGBLIGHT_EFFECT_KNIGHT
//#    define RGBLIGHT_EFFECT_CHRISTMAS
//#    define RGBLIGHT_EFFECT_STATIC_GRADIENT
//#    define RGBLIGHT_EFFECT_RGB_TEST
//#    define RGBLIGHT_EFFECT_ALTERNATING
/*== customize breathing effect ==*/
/*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
//#    define RGBLIGHT_BREATHE_TABLE_SIZE 256      // 256(default) or 128 or 64
/*==== use exp() and sin() ====*/
//#    define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85  // 1 to 2.7
//#    define RGBLIGHT_EFFECT_BREATHE_MAX    255   // 0 to 255
//#endif

/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5

/* define if matrix has ghost (lacks anti-ghosting diodes) */
//#define MATRIX_HAS_GHOST

/* 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

/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
 * This is useful for the Windows task manager shortcut (ctrl+shift+esc).
 */
//#define GRAVE_ESC_CTRL_OVERRIDE

/*
 * Force NKRO
 *
 * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
 * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
 * makefile for this to work.)
 *
 * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
 * until the next keyboard reset.
 *
 * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
 * fully operational during normal computer usage.
 *
 * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
 * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
 * bootmagic, NKRO mode will always be enabled until it is toggled again during a
 * power-up.
 *
 */
//#define FORCE_NKRO

/*
 * Feature disable options
 *  These options are also useful to firmware size reduction.
 */

/* disable debug print */
//#define NO_DEBUG

/* disable print */
//#define NO_PRINT

/* disable action features */
//#define NO_ACTION_LAYER
//#define NO_ACTION_TAPPING
//#define NO_ACTION_ONESHOT

/* disable these deprecated features by default */
#define NO_ACTION_MACRO
#define NO_ACTION_FUNCTION

/* Bootmagic Lite key configuration */
//#define BOOTMAGIC_LITE_ROW 0
//#define BOOTMAGIC_LITE_COLUMN 0

A keyboards/cool836a/cool836a.c => keyboards/cool836a/cool836a.c +17 -0
@@ 0,0 1,17 @@
/* Copyright 2021 Ohashi
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#include "cool836a.h"

A keyboards/cool836a/cool836a.h => keyboards/cool836a/cool836a.h +42 -0
@@ 0,0 1,42 @@
/* Copyright 2021 Ohashi
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#pragma once

#include "quantum.h"

/* This is a shortcut to help you visually see your layout.
 *
 * The first section contains all of the arguments representing the physical
 * layout of the board and position of the keys.
 *
 * The second converts the arguments into a two-dimensional array which
 * represents the switch matrix.
 */

#define LAYOUT( \
  K000, K001, K002, K003, K004, K005,   K300, K301, K302, K303, K304, K305, \
  K100, K101, K102, K103, K104, K105,   K400, K401, K402, K403, K404, K405, \
  K200, K201, K202, K203, K204, K205,   K500, K501, K502, K503, K504, K505 \
) \
{ \
  { K000, K001, K002, K003, K004, K005 }, \
  { K100, K101, K102, K103, K104, K105 }, \
  { K200, K201, K202, K203, K204, K205 }, \
  { K300, K301, K302, K303, K304, K305 }, \
  { K400, K401, K402, K403, K404, K405 }, \
  { K500, K501, K502, K503, K504, K505 }, \
}

A keyboards/cool836a/info.json => keyboards/cool836a/info.json +19 -0
@@ 0,0 1,19 @@
{
    "keyboard_name": "cool836a",
    "url": "https://github.com/telzo2000/cool836A",
    "maintainer": "Ohashi",
    "width": 12,
    "height": 3,
    "layouts": {
        "LAYOUT": {
            "layout": [
                {"x": 0, "y": 0},{"x": 1, "y": 0},{"x": 2, "y": 0},{"x": 3, "y": 0},{"x": 4, "y": 0},{"x": 5, "y": 0},
                {"x": 7.5, "y": 0},{"x": 8.5, "y": 0},{"x": 9.5, "y": 0},{"x": 10.5, "y": 0},{"x": 11.5,"y": 0},{"x": 12.5,"y": 0},
                {"x": 0, "y": 1},{"x": 1.5, "y": 1},{"x": 2.5, "y": 1},{"x": 3.5, "y": 1},{"x": 4.5, "y": 1},{"x": 5.5, "y": 1},
                {"x": 8, "y": 1},{"x": 9, "y": 1},{"x": 10, "y": 1},{"x": 11, "y": 1},{"x": 12,"y": 1},{"x": 13,"y": 1},
                {"x": 0, "y": 2},{"x": 2, "y": 2},{"x": 3, "y": 2},{"x": 4, "y": 2},{"x": 5, "y": 2},{"x": 6, "y": 2},
                {"x": 7.5, "y": 2},{"x": 8.5, "y": 2},{"x": 9.5, "y": 2},{"x": 10.5, "y": 2},{"x": 11.5,"y": 2},{"x": 12.5,"y": 2}
            ]
        }
    }
}

A keyboards/cool836a/keymaps/default/keymap.c => keyboards/cool836a/keymaps/default/keymap.c +41 -0
@@ 0,0 1,41 @@
/* Copyright 2021 Ohashi
* 
* This program is free software: you can redistribute it and/or modify 
* it under the terms of the GNU General Public License as published by 
* the Free Software Foundation, either version 2 of the License, or 
* (at your option) any later version. 
* 
* This program is distributed in the hope that it will be useful, 
* but WITHOUT ANY WARRANTY; without even the implied warranty of 
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
* GNU General Public License for more details. 
* 
* You should have received a copy of the GNU General Public License 
* along with this program.  If not, see <http://www.gnu.org/licenses/>. 
*/ 

#include QMK_KEYBOARD_H

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    /* Base */
    [0] = LAYOUT(
        KC_ESC,  LALT_T(KC_Q), KC_W,        KC_E, KC_R,        KC_T,        KC_Y,   KC_U,           KC_I, KC_O, KC_P,     KC_BSPC,
        KC_LCTL, KC_A,         KC_S,        KC_D, KC_F,        KC_G,        KC_H,   KC_J,           KC_K, KC_L, KC_MINS,  KC_ENTER,
        KC_LSFT, KC_Z,         GUI_T(KC_X), KC_C, LT(3, KC_V), LT(2, KC_B), KC_SPC, LT(1, KC_N), KC_M, KC_COMM, KC_DOT,   KC_SPC
    ),
    [1] = LAYOUT(
        KC_TAB,  KC_1,    KC_2,    KC_3,    KC_4,   KC_5,       KC_6,    KC_7,     KC_8,    KC_9,    KC_0,   KC_BSPC,
        KC_LCTL, KC_EXLM, KC_AT,   KC_HASH, KC_DLR, KC_PERC,    KC_PLUS, KC_MINS, KC_ASTR, KC_PSLS, KC_EQL,  KC_ENTER,
        KC_LSFT, _______, _______, _______, _______, _______,   _______, _______, _______, _______, _______, KC_SPC
    ),
    [2] = LAYOUT(
        KC_TAB,  KC_F1,   KC_F2,   KC_F3,    KC_F4,   KC_F5,     KC_F6,   KC_F7,   KC_F8,   KC_F9,    KC_F10,  KC_BSPC,
        KC_LCTL, KC_LBRC, KC_RBRC, KC_BSLS, KC_SCLN,  KC_COLN,   KC_LEFT, KC_DOWN, KC_UP,   KC_RIGHT, KC_QUES, KC_ENTER,
        KC_LSFT, KC_UNDS, KC_PIPE, KC_CIRC, KC_TILD, _______,    _______, _______, _______, _______,  _______,  KC_SPC
    ),
    [3] = LAYOUT(
        _______, _______, _______, _______, _______, _______,    _______, _______, _______, KC_LPRN, KC_RPRN, _______,
        _______, _______, _______, _______, _______, _______,    _______, _______, _______, _______, _______, _______,
        _______, _______, _______, _______, _______, _______,    _______, _______, _______, _______, _______, _______
    )
};

A keyboards/cool836a/keymaps/default/readme.md => keyboards/cool836a/keymaps/default/readme.md +15 -0
@@ 0,0 1,15 @@
# m.ki様によるデフォルトキーマップ

[レッドバージョン ビルドガイド](https://github.com/telzo2000/cool836A/blob/master/buildguide_red.md)で紹介されていたキーマップです。チートシートを見ながらコードに書き写しました。

-------
## チートシート
以下、[同ページ](https://github.com/telzo2000/cool836A/blob/master/buildguide_red.md)の画像のコピーを添付します。
+ Layer=0
![Layer=0](https://github.com/oha-Ohashi/qmk_firmware/blob/images/default_keymap/default_0.png)
+ Layer=1
![Layer=1](https://github.com/oha-Ohashi/qmk_firmware/blob/images/default_keymap/default_1.png)
+ Layer=2
![Layer=2](https://github.com/oha-Ohashi/qmk_firmware/blob/images/default_keymap/default_2.png)
+ Layer=3
![Layer=3](https://github.com/oha-Ohashi/qmk_firmware/blob/images/default_keymap/default_3.png)

A keyboards/cool836a/readme.md => keyboards/cool836a/readme.md +51 -0
@@ 0,0 1,51 @@
# cool836A

- このプロジェクトの詳細については設計者たる[m.ki様](https://twitter.com/0002ozlet)による[GitHubリポジトリ](https://github.com/telzo2000/cool836A)の記述をご覧ください。

### バージョン(A, B+, C+)について
- m.ki様によるとどのバージョンも回路は同じで、ファームウェアを分ける必要はないとのことです。
- しかしながらこのファームウェアは、cool836A ver.B+ (通称レッドバージョン)のみでテストされています(2021年1月7日現在)。そのため念のため、当面の間はサブフォルダの名前をcool836A/verB_REDとさせていただきます。
- ほかのバージョンに書き込んだときに不具合等がありましたら、方はお気軽に私[オオハシ](https://twitter.com/oha_oha_Ohashi)までご連絡ください。


## 申し訳程度のチュートリアル
詳細に書き込む労力は払えませんでしたが、最低限のコードのみ記します。

git clone のあと、

``` make cool836A/verB_RED:default ```

でコンパイル可能であることを確認し、

``` make cool836A/verB_RED:default:avrdude ```

によってデフォルトキーマップをPro Microに焼けるかもしれません。
`default`の代わりに`Ohasheen`を利用することもできます。

初心者の方はもっと素晴らしいウェブサイトでGitやqmk firmwareの使い方を覚えていただくのがよいかと思います。



-----------------
## English
- [Here](https://github.com/telzo2000/cool836A) are a full description of this project and build guide by the great Designer: [m.ki](imgur.com image replace me!)

- Each virsions(A, B+, C+) of cool836A has the same circuit and that means you can install this firmware on any of them.
- However, this repository is currently(Jan 7, 2021) tested on ver.B+ (RED version) only. Feel free to contact [ME](https://github.com/ketcha-k) for any problems.

- firmware maintainer: [Ohashi](https://github.com/ketcha-k)

## Such a humble tutorial
The author would like to provide a minimum guide.

After cloning the repository, you may want to 

``` make cool836A/verB_RED ```

to make sure it's compilable, and 

``` make cool836A/verB_RED:default ```

which leads you to the goal.

It is recommended that beginners learn how to get started with qmk firmware/configurator at other fantastic websites rather than here......

A keyboards/cool836a/rules.mk => keyboards/cool836a/rules.mk +22 -0
@@ 0,0 1,22 @@
# MCU name
MCU = atmega32u4

# Bootloader selection
BOOTLOADER = atmel-dfu

# Build Options
#   change yes to no to disable
#
BOOTMAGIC_ENABLE = lite     # Virtual DIP switch configuration
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
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = no            # USB Nkey Rollover
BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
BLUETOOTH_ENABLE = no       # Enable Bluetooth
AUDIO_ENABLE = no           # Audio output

M keyboards/copenhagen_click/click_pad_v1/config.h => keyboards/copenhagen_click/click_pad_v1/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    Copenhagen Click
#define PRODUCT         Click Pad V1
#define DESCRIPTION     A single switch macropad given out at the Copenhagen Click 2019 meetup.

/* key matrix size */
#define MATRIX_ROWS 1

M keyboards/coseyfannitutti/discipad/config.h => keyboards/coseyfannitutti/discipad/config.h +0 -1
@@ 24,7 24,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    coseyfannitutti
#define PRODUCT         DISCIPAD
#define DESCRIPTION     17-key numpad assembled with only through hole components

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/coseyfannitutti/discipline/config.h => keyboards/coseyfannitutti/discipline/config.h +0 -1
@@ 23,7 23,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    coseyfannitutti
#define PRODUCT         DISCIPLINE
#define DESCRIPTION     65% keyboard that can be assembled with only through hole components

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/coseyfannitutti/mullet/config.h => keyboards/coseyfannitutti/mullet/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    coseyfannitutti
#define PRODUCT         mullet
#define DESCRIPTION     65% keyboard

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/coseyfannitutti/mulletpad/config.h => keyboards/coseyfannitutti/mulletpad/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    coseyfannitutti
#define PRODUCT         mulletpad
#define DESCRIPTION     numpad

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/coseyfannitutti/mysterium/config.h => keyboards/coseyfannitutti/mysterium/config.h +0 -1
@@ 23,7 23,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    coseyfannitutti
#define PRODUCT         MYSTERIUM
#define DESCRIPTION     TKL keyboard that can be assembled with only through hole components

/* key matrix size */
#define MATRIX_ROWS 6

M keyboards/coseyfannitutti/romeo/config.h => keyboards/coseyfannitutti/romeo/config.h +0 -1
@@ 24,7 24,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    coseyfannitutti
#define PRODUCT         ROMEO
#define DESCRIPTION     staggered layout 40% keyboard assembled with only through hole components

/* key matrix size */
#define MATRIX_ROWS 4

M keyboards/cospad/config.h => keyboards/cospad/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    KPrepublic
#define PRODUCT         Cospad
#define DESCRIPTION     6x4 numpad with underglow and backlighting

/* key matrix size */
#define MATRIX_ROWS 6

M keyboards/crawlpad/config.h => keyboards/crawlpad/config.h +0 -1
@@ 8,7 8,6 @@
#define DEVICE_VER      0x0001
#define MANUFACTURER    WoodKeys.click
#define PRODUCT         CrawlPad
#define DESCRIPTION     ATX Keycrawl 2017

/* key matrix size */
#define MATRIX_ROWS 4

M keyboards/cu24/config.h => keyboards/cu24/config.h +0 -1
@@ 25,7 25,6 @@
#define DEVICE_VER      0x0001
#define MANUFACTURER    Yiancar/CapsUnlocked
#define PRODUCT         CU24
#define DESCRIPTION     A luxurious fully customisable numpad

/* key matrix size */
#define MATRIX_ROWS 6

M keyboards/cu75/config.h => keyboards/cu75/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    LFKeyboards/CapsUnlocked
#define PRODUCT         CU75
#define DESCRIPTION     A luxurious fully customisable 75%

#define DIODE_DIRECTION COL2ROW
#define MATRIX_ROWS 6

M keyboards/cu80/config.h => keyboards/cu80/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    CapsUnlocked
#define PRODUCT         CU80
#define DESCRIPTION     CU80

/* key matrix size */
#define MATRIX_ROWS 6

M keyboards/cutie_club/borsdorf/info.json => keyboards/cutie_club/borsdorf/info.json +146 -3
@@ 1,15 1,158 @@
{
    "keyboard_name": "wraith",
    "keyboard_name": "Borsdorf",
    "url": "",
    "maintainer": "Cutie Club",
    "width": 16.5,
    "height": 5,
    "layouts": {
        "LAYOUT_all": {
            "layout": [{"x":0, "y":0, "w":1.25}, {"x":1.25, "y":0}, {"x":2.25, "y":0}, {"x":3.25, "y":0}, {"x":4.25, "y":0}, {"x":5.25, "y":0}, {"x":6.25, "y":0}, {"x":7.25, "y":0}, {"x":8.25, "y":0}, {"x":9.25, "y":0}, {"x":10.25, "y":0}, {"x":11.25, "y":0}, {"x":12.25, "y":0}, {"x":13.25, "y":0, "w":1.75}, {"x":15.5, "y":0}, {"x":0, "y":1, "w":1.75}, {"x":1.75, "y":1}, {"x":2.75, "y":1}, {"x":3.75, "y":1}, {"x":4.75, "y":1}, {"x":5.75, "y":1}, {"x":6.75, "y":1}, {"x":7.75, "y":1}, {"x":8.75, "y":1}, {"x":9.75, "y":1}, {"x":10.75, "y":1}, {"x":11.75, "y":1}, {"x":12.75, "y":1}, {"x":14, "y":1, "h":2}, {"x":15.5, "y":1}, {"x":0, "y":2, "w":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":6, "y":2}, {"x":7, "y":2}, {"x":8, "y":2}, {"x":9, "y":2}, {"x":10, "y":2}, {"x":11, "y":2}, {"x":12, "y":2}, {"x":13, "y":2}, {"x":0, "y":3, "w":1.5}, {"x":1.5, "y":3}, {"x":2.5, "y":3}, {"x":3.5, "y":3}, {"x":4.5, "y":3}, {"x":5.5, "y":3}, {"x":6.5, "y":3}, {"x":7.5, "y":3}, {"x":8.5, "y":3}, {"x":9.5, "y":3}, {"x":10.5, "y":3}, {"x":11.5, "y":3}, {"x":12.5, "y":3}, {"x":13.5, "y":3}, {"x":14.5, "y":3}, {"x":0, "y":4, "w":1.5}, {"x":1.5, "y":4, "w":1.25}, {"x":2.75, "y":4, "w":1.5}, {"x":4.25, "y":4, "w":6.5}, {"x":10.75, "y":4, "w":1.5}, {"x":12.25, "y":4, "w":1.25}, {"x":13.5, "y":4}, {"x":14.5, "y":4}, {"x":15.5, "y":4}]
            "layout": [
                {"x":0, "y":0, "w":1.25},
                {"x":1.25, "y":0},
                {"x":2.25, "y":0},
                {"x":3.25, "y":0},
                {"x":4.25, "y":0},
                {"x":5.25, "y":0},
                {"x":6.25, "y":0},
                {"x":7.25, "y":0},
                {"x":8.25, "y":0},
                {"x":9.25, "y":0},
                {"x":10.25, "y":0},
                {"x":11.25, "y":0},
                {"x":12.25, "y":0},
                {"x":13.25, "y":0, "w":1.75},
                {"x":15.5, "y":0},

                {"x":0, "y":1, "w":1.75},
                {"x":1.75, "y":1},
                {"x":2.75, "y":1},
                {"x":3.75, "y":1},
                {"x":4.75, "y":1},
                {"x":5.75, "y":1},
                {"x":6.75, "y":1},
                {"x":7.75, "y":1},
                {"x":8.75, "y":1},
                {"x":9.75, "y":1},
                {"x":10.75, "y":1},
                {"x":11.75, "y":1},
                {"x":12.75, "y":1},
                {"x":15.5, "y":1},

                {"x":0, "y":2, "w":2},
                {"x":2, "y":2},
                {"x":3, "y":2},
                {"x":4, "y":2},
                {"x":5, "y":2},
                {"x":6, "y":2},
                {"x":7, "y":2},
                {"x":8, "y":2},
                {"x":9, "y":2},
                {"x":10, "y":2},
                {"x":11, "y":2},
                {"x":12, "y":2},
                {"x":13, "y":2},
                {"x":14, "y":1, "h":2},

                {"x":0, "y":3, "w":1.5},
                {"x":1.5, "y":3},
                {"x":2.5, "y":3},
                {"x":3.5, "y":3},
                {"x":4.5, "y":3},
                {"x":5.5, "y":3},
                {"x":6.5, "y":3},
                {"x":7.5, "y":3},
                {"x":8.5, "y":3},
                {"x":9.5, "y":3},
                {"x":10.5, "y":3},
                {"x":11.5, "y":3},
                {"x":12.5, "y":3},
                {"x":13.5, "y":3},
                {"x":14.5, "y":3},

                {"x":0, "y":4, "w":1.5},
                {"x":1.5, "y":4, "w":1.25},
                {"x":2.75, "y":4, "w":1.5},
                {"x":4.25, "y":4, "w":6.5},
                {"x":10.75, "y":4, "w":1.5},
                {"x":12.25, "y":4, "w":1.25},
                {"x":13.5, "y":4},
                {"x":14.5, "y":4},
                {"x":15.5, "y":4}
            ]
        },
        "LAYOUT_rshift": {
            "layout": [{"x":0, "y":0, "w":1.25}, {"x":1.25, "y":0}, {"x":2.25, "y":0}, {"x":3.25, "y":0}, {"x":4.25, "y":0}, {"x":5.25, "y":0}, {"x":6.25, "y":0}, {"x":7.25, "y":0}, {"x":8.25, "y":0}, {"x":9.25, "y":0}, {"x":10.25, "y":0}, {"x":11.25, "y":0}, {"x":12.25, "y":0}, {"x":13.25, "y":0, "w":1.75}, {"x":15.5, "y":0}, {"x":0, "y":1, "w":1.75}, {"x":1.75, "y":1}, {"x":2.75, "y":1}, {"x":3.75, "y":1}, {"x":4.75, "y":1}, {"x":5.75, "y":1}, {"x":6.75, "y":1}, {"x":7.75, "y":1}, {"x":8.75, "y":1}, {"x":9.75, "y":1}, {"x":10.75, "y":1}, {"x":11.75, "y":1}, {"x":12.75, "y":1}, {"x":14, "y":1, "h":2}, {"x":15.5, "y":1}, {"x":0, "y":2, "w":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":6, "y":2}, {"x":7, "y":2}, {"x":8, "y":2}, {"x":9, "y":2}, {"x":10, "y":2}, {"x":11, "y":2}, {"x":12, "y":2}, {"x":13, "y":2}, {"x":0, "y":3, "w":1.5}, {"x":1.5, "y":3}, {"x":2.5, "y":3}, {"x":3.5, "y":3}, {"x":4.5, "y":3}, {"x":5.5, "y":3}, {"x":6.5, "y":3}, {"x":7.5, "y":3}, {"x":8.5, "y":3}, {"x":9.5, "y":3}, {"x":10.5, "y":3}, {"x":11.5, "y":3}, {"x":12.5, "y":3, "w":2}, {"x":14.5, "y":3}, {"x":0, "y":4, "w":1.5}, {"x":1.5, "y":4, "w":1.25}, {"x":2.75, "y":4, "w":1.5}, {"x":4.25, "y":4, "w":6.5}, {"x":10.75, "y":4, "w":1.5}, {"x":12.25, "y":4, "w":1.25}, {"x":13.5, "y":4}, {"x":14.5, "y":4}, {"x":15.5, "y":4}]
            "layout": [
                {"x":0, "y":0, "w":1.25},
                {"x":1.25, "y":0},
                {"x":2.25, "y":0},
                {"x":3.25, "y":0},
                {"x":4.25, "y":0},
                {"x":5.25, "y":0},
                {"x":6.25, "y":0},
                {"x":7.25, "y":0},
                {"x":8.25, "y":0},
                {"x":9.25, "y":0},
                {"x":10.25, "y":0},
                {"x":11.25, "y":0},
                {"x":12.25, "y":0},
                {"x":13.25, "y":0, "w":1.75},
                {"x":15.5, "y":0},

                {"x":0, "y":1, "w":1.75},
                {"x":1.75, "y":1},
                {"x":2.75, "y":1},
                {"x":3.75, "y":1},
                {"x":4.75, "y":1},
                {"x":5.75, "y":1},
                {"x":6.75, "y":1},
                {"x":7.75, "y":1},
                {"x":8.75, "y":1},
                {"x":9.75, "y":1},
                {"x":10.75, "y":1},
                {"x":11.75, "y":1},
                {"x":12.75, "y":1},
                {"x":15.5, "y":1},

                {"x":0, "y":2, "w":2},
                {"x":2, "y":2},
                {"x":3, "y":2},
                {"x":4, "y":2},
                {"x":5, "y":2},
                {"x":6, "y":2},
                {"x":7, "y":2},
                {"x":8, "y":2},
                {"x":9, "y":2},
                {"x":10, "y":2},
                {"x":11, "y":2},
                {"x":12, "y":2},
                {"x":13, "y":2},
                {"x":14, "y":1, "h":2},

                {"x":0, "y":3, "w":1.5},
                {"x":1.5, "y":3},
                {"x":2.5, "y":3},
                {"x":3.5, "y":3},
                {"x":4.5, "y":3},
                {"x":5.5, "y":3},
                {"x":6.5, "y":3},
                {"x":7.5, "y":3},
                {"x":8.5, "y":3},
                {"x":9.5, "y":3},
                {"x":10.5, "y":3},
                {"x":11.5, "y":3},
                {"x":12.5, "y":3, "w":2},
                {"x":14.5, "y":3},

                {"x":0, "y":4, "w":1.5},
                {"x":1.5, "y":4, "w":1.25},
                {"x":2.75, "y":4, "w":1.5},
                {"x":4.25, "y":4, "w":6.5},
                {"x":10.75, "y":4, "w":1.5},
                {"x":12.25, "y":4, "w":1.25},
                {"x":13.5, "y":4},
                {"x":14.5, "y":4},
                {"x":15.5, "y":4}
            ]
        }
    }
}

M keyboards/cutie_club/wraith/config.h => keyboards/cutie_club/wraith/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    Amber
#define PRODUCT         Wraith
#define DESCRIPTION     A WKL, 75% keyboard with staggered F-row.

/* key matrix size */
#define MATRIX_ROWS 12

M keyboards/daisy/config.h => keyboards/daisy/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0501
#define MANUFACTURER    KTEC
#define PRODUCT         Daisy
#define DESCRIPTION     qmk port for Daisy

/* key matrix size */
#define MATRIX_ROWS 4

M keyboards/dc01/arrow/config.h => keyboards/dc01/arrow/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    Mechboards
#define PRODUCT         DC01 Arrow
#define DESCRIPTION     Arrow cluster of DC01 keyboard

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/dc01/left/config.h => keyboards/dc01/left/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    Mechboards
#define PRODUCT         DC01 Left
#define DESCRIPTION     Left half of DC01 keyboard

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/dc01/numpad/config.h => keyboards/dc01/numpad/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    Mechboards
#define PRODUCT         DC01 Numpad
#define DESCRIPTION     Numpad of DC01 keyboard

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/dc01/right/config.h => keyboards/dc01/right/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    Mechboards
#define PRODUCT         DC01 Right
#define DESCRIPTION     Right half of DC01 keyboard

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/deltasplit75/v2/config.h => keyboards/deltasplit75/v2/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    xyxjj
#define PRODUCT         DeltaSplit75
#define DESCRIPTION     75% split keyboard

/* key matrix size */
// Rows are doubled-up

M keyboards/dichotomy/config.h => keyboards/dichotomy/config.h +0 -1
@@ 27,7 27,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0002
#define MANUFACTURER    Broekhuijsen
#define PRODUCT         Dichotomy
#define DESCRIPTION     q.m.k. keyboard firmware for Dichotomy

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/diverge3/config.h => keyboards/diverge3/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    UniKeyboard
#define PRODUCT         diverge3
#define DESCRIPTION     Split 72 key keyboard

/* key matrix size */
#define MATRIX_ROWS 10

M keyboards/divergetm2/config.h => keyboards/divergetm2/config.h +0 -1
@@ 25,7 25,6 @@
#define DEVICE_VER      0x0001
#define MANUFACTURER    UniKeyboard
#define PRODUCT         diverge tm2
#define DESCRIPTION     Split 46 key keyboard

/* key matrix size */
#define MATRIX_ROWS 8

M keyboards/dm9records/ergoinu/config.h => keyboards/dm9records/ergoinu/config.h +0 -1
@@ 29,7 29,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    Dm9Records
#define PRODUCT         ergoinu
#define DESCRIPTION     An (Not Portable But Small) Ergonomic split keyboard

#define TAPPING_FORCE_HOLD
#define TAPPING_TERM 100

M keyboards/dm9records/plaid/config.h => keyboards/dm9records/plaid/config.h +0 -1
@@ 26,7 26,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER 0x0002
#define MANUFACTURER dm9records
#define PRODUCT Plaid
#define DESCRIPTION 12x4 ortholinear keyboard with through hole components

/* key matrix size */
#define MATRIX_ROWS 4

M keyboards/dm9records/tartan/config.h => keyboards/dm9records/tartan/config.h +0 -1
@@ 26,7 26,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER 0x0001
#define MANUFACTURER dm9records
#define PRODUCT Tartan
#define DESCRIPTION 60% keyboard with through hole components

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/dmqdesign/spin/config.h => keyboards/dmqdesign/spin/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER 0x0001
#define MANUFACTURER DMQ Design
#define PRODUCT  SPIN
#define DESCRIPTION The SPIN Macro Pad is a 12 key Macro Pad by DMQ Design with 3 rotary encoders, inspired by the Plaid & RoMac.

/* key matrix size */
#define MATRIX_ROWS 3

M keyboards/do60/config.h => keyboards/do60/config.h +0 -1
@@ 26,7 26,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    Shopkey by Doyu Studio
#define PRODUCT         Do60
#define DESCRIPTION     Do60 Keyboard PCB by Doyu Studio

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/donutcables/scrabblepad/config.h => keyboards/donutcables/scrabblepad/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    Donut Cables
#define PRODUCT         ScrabblePad
#define DESCRIPTION     15x15 Ortholinear Board

/* key matrix size */
#define MATRIX_ROWS 15

M keyboards/doppelganger/config.h => keyboards/doppelganger/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    Yiancar-Designs
#define PRODUCT         Doppelganger
#define DESCRIPTION     A custom split keyboard

/* key matrix size */
#define MATRIX_ROWS 10

M keyboards/doro67/multi/config.h => keyboards/doro67/multi/config.h +0 -1
@@ 8,7 8,6 @@
#define DEVICE_VER      0x0001
#define MANUFACTURER    Backprop Studio
#define PRODUCT         Doro67 Multi PCB
#define DESCRIPTION     65% custom keyboard

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/doro67/regular/config.h => keyboards/doro67/regular/config.h +0 -1
@@ 8,7 8,6 @@
#define DEVICE_VER      0x0001
#define MANUFACTURER    Backprop Studio
#define PRODUCT         Doro67 Regular PCB
#define DESCRIPTION     65% custom keyboard

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/doro67/rgb/config.h => keyboards/doro67/rgb/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    Backprop Studio
#define PRODUCT         Doro67 RGB PCB
#define DESCRIPTION     65% custom keyboard

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/dozen0/config.h => keyboards/dozen0/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    yynmt
#define PRODUCT         Dozen0
#define DESCRIPTION     12 keys macropad

/* key matrix size */
#define MATRIX_ROWS 1

M keyboards/dp60/config.h => keyboards/dp60/config.h +0 -1
@@ 23,7 23,6 @@
#define DEVICE_VER      0x0001
#define MANUFACTURER    astro
#define PRODUCT         DP60
#define DESCRIPTION     60% rgb keyboard with ble extension

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/duck/eagle_viper/v2/config.h => keyboards/duck/eagle_viper/v2/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0002
#define MANUFACTURER    Duck
#define PRODUCT         Eagle/Viper V2
#define DESCRIPTION     60% Korean custom keyboard

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/duck/jetfire/config.h => keyboards/duck/jetfire/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    Duck
#define PRODUCT         Jetfire
#define DESCRIPTION     A custom keyboard

/* key matrix size */
#define MATRIX_ROWS 6

M keyboards/duck/lightsaver/config.h => keyboards/duck/lightsaver/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0003
#define MANUFACTURER    Duck
#define PRODUCT         Lightsaver V3
#define DESCRIPTION     Duck Lightsaver V3

/* key matrix size */
#define MATRIX_ROWS 6

M keyboards/duck/octagon/v1/config.h => keyboards/duck/octagon/v1/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    Duck
#define PRODUCT         Octagon V1
#define DESCRIPTION     Duck Octagon V1

/* key matrix size */
#define MATRIX_ROWS 6

M keyboards/duck/octagon/v2/config.h => keyboards/duck/octagon/v2/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0002
#define MANUFACTURER    Duck
#define PRODUCT         Octagon V2
#define DESCRIPTION     Duck Octagon V2

/* key matrix size */
#define MATRIX_ROWS 6

M keyboards/duck/orion/v3/config.h => keyboards/duck/orion/v3/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0002
#define MANUFACTURER    Duck
#define PRODUCT         Orion V3
#define DESCRIPTION     TKL Korean custom keyboard

/* key matrix size */
#define MATRIX_ROWS 6

M keyboards/duck/tcv3/config.h => keyboards/duck/tcv3/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    Duck
#define PRODUCT         TC-V3
#define DESCRIPTION     Duck TC-V3

/* key matrix size */
#define MATRIX_ROWS 6

M keyboards/dumbpad/config.h => keyboards/dumbpad/config.h +0 -1
@@ 25,7 25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER      0x0001
#define MANUFACTURER    imchipwood
#define PRODUCT         dumbpad
#define DESCRIPTION     4x4 macro/numpad with rotary encoder


/*

M keyboards/dz60/keymaps/LEdiodes/config.h => keyboards/dz60/keymaps/LEdiodes/config.h +0 -1
@@ 9,7 9,6 @@
#define DEVICE_VER      0x0001
#define MANUFACTURER    KBDFans
#define PRODUCT         DZ60
#define DESCRIPTION     DZ60 Keyboard

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/dztech/dz60rgb/v1/config.h => keyboards/dztech/dz60rgb/v1/config.h +0 -1
@@ 6,7 6,6 @@
#define DEVICE_VER      0x0001
#define MANUFACTURER    DZTECH
#define PRODUCT         DZ60RGB
#define DESCRIPTION     DZ60 ARM RGB keyboard

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/dztech/dz60rgb/v2/config.h => keyboards/dztech/dz60rgb/v2/config.h +0 -1
@@ 6,7 6,6 @@
#define DEVICE_VER      0x0002
#define MANUFACTURER    DZTECH
#define PRODUCT         DZ60RGB
#define DESCRIPTION     DZ60 AVR RGB keyboard

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/dztech/dz60rgb_ansi/v1/config.h => keyboards/dztech/dz60rgb_ansi/v1/config.h +0 -1
@@ 6,7 6,6 @@
#define DEVICE_VER      0x0001
#define MANUFACTURER    DZTECH
#define PRODUCT         DZ60RGB_ANSI
#define DESCRIPTION     DZ60 ARM RGB keyboard

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/dztech/dz60rgb_ansi/v2/config.h => keyboards/dztech/dz60rgb_ansi/v2/config.h +0 -1
@@ 6,7 6,6 @@
#define DEVICE_VER      0x0002
#define MANUFACTURER    DZTECH
#define PRODUCT         DZ60RGB_ANSI
#define DESCRIPTION     DZ60 AVR RGB keyboard

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/dztech/dz60rgb_wkl/v1/config.h => keyboards/dztech/dz60rgb_wkl/v1/config.h +0 -1
@@ 6,7 6,6 @@
#define DEVICE_VER      0x0001
#define MANUFACTURER    DZTECH
#define PRODUCT         DZ60RGB_WKL
#define DESCRIPTION     DZ60 ARM RGB keyboard

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/dztech/dz60rgb_wkl/v2/config.h => keyboards/dztech/dz60rgb_wkl/v2/config.h +0 -1
@@ 6,7 6,6 @@
#define DEVICE_VER      0x0002
#define MANUFACTURER    DZTECH
#define PRODUCT         DZ60RGB_WKL
#define DESCRIPTION     DZ60 AVR RGB keyboard

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/dztech/dz65rgb/v1/config.h => keyboards/dztech/dz65rgb/v1/config.h +0 -1
@@ 6,7 6,6 @@
#define DEVICE_VER      0x0001
#define MANUFACTURER    DZTECH
#define PRODUCT         DZ65RGB
#define DESCRIPTION     DZ65 ARM RGB keyboard

/* key matrix size */
#define MATRIX_ROWS 5

M keyboards/dztech/dz65rgb/v2/config.h => keyboards/dztech/dz65rgb/v2/config.h +0 -1
@@ 6,7 6,6 @@
#define DEVICE_VER      0x0002
#define MANUFACTURER    DZTECH
#define PRODUCT         DZ65RGB
#define DESCRIPTION     DZ65 AVR RGB keyboard

/* key matrix size */
#define MATRIX_ROWS 5

A keyboards/lily58/keymaps/domnantas/config.h => keyboards/lily58/keymaps/domnantas/config.h +36 -0
@@ 0,0 1,36 @@
/*
This is the c configuration file for the keymap

Copyright 2012 Jun Wako <wakojun@gmail.com>
Copyright 2015 Jack Humbert

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#pragma once

//#define USE_MATRIX_I2C

/* Select hand configuration */

// #define MASTER_LEFT
// #define MASTER_RIGHT
#define EE_HANDS

// #define SSD1306OLED

#define USE_SERIAL_PD2

#define TAPPING_FORCE_HOLD
#define TAPPING_TERM 100
\ No newline at end of file

A keyboards/lily58/keymaps/domnantas/keymap.c => keyboards/lily58/keymaps/domnantas/keymap.c +284 -0
@@ 0,0 1,284 @@
 /* Copyright 2020 Domantas Petrauskas
  * 
  * This program is free software: you can redistribute it and/or modify 
  * it under the terms of the GNU General Public License as published by 
  * the Free Software Foundation, either version 2 of the License, or 
  * (at your option) any later version. 
  * 
  * This program is distributed in the hope that it will be useful, 
  * but WITHOUT ANY WARRANTY; without even the implied warranty of 
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
  * GNU General Public License for more details. 
  * 
  * You should have received a copy of the GNU General Public License 
  * along with this program.  If not, see <http://www.gnu.org/licenses/>. 
  */ 

#include QMK_KEYBOARD_H
#include <stdio.h>

#define LT_1 RALT(KC_1)
#define LT_2 RALT(KC_2)
#define LT_3 RALT(KC_3)
#define LT_4 RALT(KC_4)
#define LT_5 RALT(KC_5)
#define LT_6 RALT(KC_6)
#define LT_7 RALT(KC_7)
#define LT_8 RALT(KC_8)
#define LT_9 RALT(KC_9)
#define LT_0 RALT(KC_0)

// Naming according to Unicode specifications
#define LT_A_OG KC_1
#define LT_C_CA KC_2
#define LT_E_OG KC_3
#define LT_E_DO KC_4
#define LT_I_OG KC_5
#define LT_S_CA KC_6
#define LT_U_OG KC_7
#define LT_U_MA KC_8
#define LT_Z_CA KC_EQL

#define LT_EQL RALT(KC_EQL)

// OLED setup
#define IDLE_FRAMES 5
#define IDLE_SPEED 30
#define TAP_FRAMES 2
#define TAP_SPEED 40
#define ANIM_FRAME_DURATION 200
#define ANIM_SIZE 512

char     wpm_str[10];
uint32_t anim_timer         = 0;
uint32_t anim_sleep         = 0;
uint8_t  current_idle_frame = 0;
uint8_t  current_tap_frame  = 0;

static long int oled_timeout = OLED_TIMEOUT;  // 10 minutes

enum layer_number {
    _QWERTY = 0,
    _LOWER,
    _RAISE,
    _ADJUST,
};

const bool *is_keyboard_left(void);

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

    /* QWERTY
     * ,-----------------------------------------.                    ,-----------------------------------------.
     * | ESC  |   Ą  |   Č  |   Ę  |   Ė  |   Į  |                    |   Š  |   Ų  |   Ū  |   (  |   )  |   Ž  |
     * |------+------+------+------+------+------|                    |------+------+------+------+------+------|
     * | Tab  |   Q  |   W  |   E  |   R  |   T  |                    |   Y  |   U  |   I  |   O  |   P  |   -  |
     * |------+------+------+------+------+------|                    |------+------+------+------+------+------|
     * |LShift|   A  |   S  |   D  |   F  |   G  |-------.    ,-------|   H  |   J  |   K  |   L  |   ;  |   '  |
     * |------+------+------+------+------+------|   [   |    |    ]  |------+------+------+------+------+------|
     * |LCTRL |   Z  |   X  |   C  |   V  |   B  |-------|    |-------|   N  |   M  |   ,  |   .  |   /  | RAlt |
     * `-----------------------------------------/       /     \      \-----------------------------------------'
     *                   | LGUI | LAlt |LOWER | / Space /       \Enter \  | Bksp |RAISE | Del  |
     *                   |      |      |      |/       /         \      \ |      |      |      |
     *                   `----------------------------'           '------''--------------------'
     */
    [_QWERTY] = LAYOUT(
        KC_ESC,   LT_A_OG, LT_C_CA, LT_E_OG, LT_E_DO, LT_I_OG,                  LT_S_CA, LT_U_OG, LT_U_MA, KC_9,    KC_0,    LT_Z_CA,
        KC_TAB,   KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,                     KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_MINS,
        KC_LSFT,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,                     KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,
        KC_LCTRL, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,   KC_LBRC, KC_RBRC, KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RALT,
                                KC_LGUI, KC_LALT, MO(_LOWER), KC_SPC,  KC_ENT,  KC_BSPC, MO(_RAISE), KC_DEL
    ),

    /* LOWER
     * ,-----------------------------------------.                    ,-----------------------------------------.
     * | ESC  |   1  |   2  |   3  |   4  |   5  |                    |   6  |   7  |   8  |   9  |   0  |  `   |
     * |------+------+------+------+------+------|                    |------+------+------+------+------+------|
     * | Tab  |   4  |   5  |   6  |      |      |                    |      |      |      |      |      |      |
     * |------+------+------+------+------+------|                    |------+------+------+------+------+------|
     * |LShift|   7  |   8  |   9  |   0  |      |-------.    ,-------|      |      |      |      |      |      |
     * |------+------+------+------+------+------|   [   |    |    ]  |------+------+------+------+------+------|
     * |LCTRL |   =  |   +  |   -  |   |  |      |-------|    |-------|      |      |      |      |      |      |
     * `-----------------------------------------/       /     \      \-----------------------------------------'
     *                   | LGUI | LAlt |LOWER | / Space /       \ Enter\  | Bksp |RAISE | Del  |
     *                   |      |      ||||||||/       /         \      \ |      |      |      |
     *                   `----------------------------'           '------''--------------------'
     */
    [_LOWER] = LAYOUT(
        _______, LT_1,    LT_2,    LT_3,    LT_4,    LT_5,                      LT_6,    LT_7,    LT_8,    LT_9,    LT_0,    KC_GRV,
        _______, LT_4,    LT_5,    LT_6,    _______, _______,                   _______, _______, _______, _______, _______, _______,
        _______, LT_7,    LT_8,    LT_9,    LT_0,    _______,                   _______, _______, _______, _______, _______, _______,
        _______, LT_EQL, KC_PPLS, KC_PMNS, KC_PIPE, _______, _______, _______, _______, _______, _______, _______, _______, _______,
                                   _______, _______, _______, _______, _______, _______, _______, _______
    ),

    /* RAISE
     * ,-----------------------------------------.                    ,-----------------------------------------.
     * | ESC  |  F1  |  F2  |  F3  |  F4  |  F5  |                    |  F6  |  F7  |  F8  |  F9  | F10  |PrScr |
     * |------+------+------+------+------+------|                    |------+------+------+------+------+------|
     * | Tab  | F11  | F12  |      |      |      |                    |      | PgUp | Home |  Up  | End  | Vol+ |
     * |------+------+------+------+------+------|                    |------+------+------+------+------+------|
     * |LShift|      |      |      |      |      |-------.    ,-------|      | PgDn | Left | Down |Right | Vol- |
     * |------+------+------+------+------+------|   [   |    |    ]  |------+------+------+------+------+------|
     * |LCTRL | Undo | Cut  | Copy |Paste |      |-------|    |-------|      |      |MPrev |MNext |MPlPa |      |
     * `-----------------------------------------/       /     \      \-----------------------------------------'
     *                   | LGUI | LAlt |LOWER | / Space /       \ Enter\  | Bksp |RAISE | Del  |
     *                   |      |      |      |/       /         \      \ |      ||||||||      |
     *                   `----------------------------'           '------''--------------------'
     */
    [_RAISE] = LAYOUT(
        _______, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,                     KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_PSCR,
        _______, KC_F11,  KC_F12,  _______, _______, _______,                   _______, KC_PGUP, KC_HOME, KC_UP,   KC_END,  KC_VOLU,
        _______, _______, _______, _______, _______, _______,                   _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_VOLD,
        _______, C(KC_Z), C(KC_X), C(KC_C), C(KC_V), _______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_MPLY, _______,
                                   _______, _______, _______, _______, _______, _______, _______, _______
    ),

    /* ADJUST
     * ,-----------------------------------------.                    ,-----------------------------------------.
     * |      |      |      |      |      |      |                    |      |      |      |      |      |      |
     * |------+------+------+------+------+------|                    |------+------+------+------+------+------|
     * |      |      |      |      |      |      |                    |      |      |      |      |      |      |
     * |------+------+------+------+------+------|                    |------+------+------+------+------+------|
     * | CAPS |      |      |      |      |      |-------.    ,-------|      |      |      |      |      |      |
     * |------+------+------+------+------+------|       |    |       |------+------+------+------+------+------|
     * |      |      |      |      |      |      |-------|    |-------|      |      |      |      |      |      |
     * `-----------------------------------------/       /     \      \-----------------------------------------'
     *                   | LGUI | LAlt |LOWER | /Space  /       \Enter \  | Bksp |RAISE | Del  |
     *                   |      |      ||||||||/       /         \      \ |      ||||||||      |
     *                   `----------------------------'           '------''--------------------'
     */
    [_ADJUST] = LAYOUT(
        XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                   XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
        XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                   XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
        KC_CAPS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                   XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
        XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
                                   _______, _______, _______, _______, _______,  _______, _______, _______
    )
};

oled_rotation_t oled_init_user(oled_rotation_t rotation) {
    if (is_keyboard_left()) return OLED_ROTATION_270;
    return OLED_ROTATION_180;
}

layer_state_t layer_state_set_user(layer_state_t state) {
  return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
}

static void render_bongo_cat(void) {

    // Idle animation
    static const char PROGMEM idle[IDLE_FRAMES][ANIM_SIZE] = {

        {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,  0, 0, 0, 0, 0, 0, 0, 0, 128, 64, 64, 32, 32, 32, 32, 16, 16,  16, 16, 16, 8,  8,  4,  4, 4, 8, 48, 64, 128, 0, 0, 0, 0,  0,  0,  0,  0,  0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,   0,   0,   0,   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 100, 130, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 48, 48, 0, 192, 193, 193, 194, 4, 8, 16, 32, 64, 128, 0, 0, 0, 128, 128, 128, 128, 64, 64, 64, 64, 32, 32, 32, 32, 16, 16, 16, 16, 8, 8, 8, 8, 8, 4, 4, 4, 4, 4, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 56, 4, 3, 0, 0, 0, 0, 0, 0, 0,   12, 12, 12, 13, 1,  0,  64, 160, 33, 34, 18, 17, 17, 17, 9, 8, 8, 8,  8,  4,   4, 8, 8, 16, 16, 16, 16, 16, 17, 15, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 64, 64, 64, 64, 64, 32, 32, 32, 32, 32, 16, 16, 16, 16, 16, 8, 8, 8, 8, 8, 4, 4, 4, 4, 4, 2, 3, 2,  2,   1,   1, 1, 1, 1, 1, 2, 2, 4, 4, 8, 8,   8,   8, 8, 7, 0, 0, 0, 0, 0, 0, 0,   0, 0,  0,  0, 0,   0,   0,   0,   0, 0, 0,  0,  0,  0,   0, 0, 0, 0,   0,   0,   0,   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},

        {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,  0, 0, 0, 0, 0, 0, 0, 0, 128, 64, 64, 32, 32, 32, 32, 16, 16,  16, 16, 16, 8,  8,  4,  4, 4, 8, 48, 64, 128, 0, 0, 0, 0,  0,  0,  0,  0,  0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,   0,   0,   0,   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 100, 130, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 48, 48, 0, 192, 193, 193, 194, 4, 8, 16, 32, 64, 128, 0, 0, 0, 128, 128, 128, 128, 64, 64, 64, 64, 32, 32, 32, 32, 16, 16, 16, 16, 8, 8, 8, 8, 8, 4, 4, 4, 4, 4, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 56, 4, 3, 0, 0, 0, 0, 0, 0, 0,   12, 12, 12, 13, 1,  0,  64, 160, 33, 34, 18, 17, 17, 17, 9, 8, 8, 8,  8,  4,   4, 8, 8, 16, 16, 16, 16, 16, 17, 15, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 64, 64, 64, 64, 64, 32, 32, 32, 32, 32, 16, 16, 16, 16, 16, 8, 8, 8, 8, 8, 4, 4, 4, 4, 4, 2, 3, 2,  2,   1,   1, 1, 1, 1, 1, 2, 2, 4, 4, 8, 8,   8,   8, 8, 7, 0, 0, 0, 0, 0, 0, 0,   0, 0,  0,  0, 0,   0,   0,   0,   0, 0, 0,  0,  0,  0,   0, 0, 0, 0,   0,   0,   0,   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},

        {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,   0,  0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 64, 64, 64, 64, 32, 32,  32, 32, 16, 8,  4,  2,  2,  4, 24, 96, 128, 0, 0, 0, 0, 0,  0,  0,  0,  0,  0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,   0,   0,   0,   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 194, 1, 1, 2, 2, 4, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 96, 0, 129, 130, 130, 132, 8, 16, 32, 64, 128, 0, 0, 0, 0, 128, 128, 128, 128, 64, 64, 64, 64, 32, 32, 32, 32, 16, 16, 16, 16, 8, 8, 8, 8, 8, 4, 4, 4, 4, 4, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 112, 25, 6, 0, 0, 0, 0, 0, 0, 0, 24,  24,  24, 27, 3,  0,  64, 160, 34, 36, 20, 18, 18, 18, 11, 8, 8,  8,  8,   5, 5, 9, 9, 16, 16, 16, 16, 16, 17, 15, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 64, 64, 64, 64, 64, 32, 32, 32, 32, 32, 16, 16, 16, 16, 16, 8, 8, 8, 8, 8, 4, 4, 4, 4, 4, 2, 3, 2,  2,   1, 1, 1, 1, 1, 1, 2, 2, 4, 4, 8, 8, 8, 8, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0,   0,   0,   0,   0, 0,  0,  0,  0,   0, 0, 0, 0, 0,   0,   0,   0,   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},

        {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,   0,  128, 128, 0, 0, 0, 0, 0, 128, 64, 64, 32, 32, 32, 32, 16, 16,  16, 16, 8,  4,  2,  1,  1, 2, 12, 48, 64, 128, 0, 0, 0, 0,  0,  0,  0,  0,  0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,   0,   0,   0,   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 225, 0, 0, 1, 1, 2, 2, 1, 0, 0, 0, 0, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 48, 48, 0, 192, 193, 193, 194, 4, 8, 16, 32, 64, 128, 0, 0, 0, 128, 128, 128, 128, 64, 64, 64, 64, 32, 32, 32, 32, 16, 16, 16, 16, 8, 8, 8, 8, 8, 4, 4, 4, 4, 4, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 112, 12, 3,   0,   0, 0, 0, 0, 0, 0,   12, 12, 12, 13, 1,  0,  64, 160, 33, 34, 18, 17, 17, 17, 9, 8, 8,  8,  8,  4,   4, 8, 8, 16, 16, 16, 16, 16, 17, 15, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 64, 64, 64, 64, 64, 32, 32, 32, 32, 32, 16, 16, 16, 16, 16, 8, 8, 8, 8, 8, 4, 4, 4, 4, 4, 2, 3, 2,  2,   1, 1, 1, 1, 1, 1, 2, 2, 4, 4, 8, 8,   8,   8, 8, 7, 0, 0, 0, 0, 0, 0, 0,   0, 0,  0,  0, 0,   0,   0,   0,   0, 0, 0,  0,  0,  0,   0, 0, 0, 0,   0,   0,   0,   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},

        {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,   0,  0, 0, 0, 0, 0, 0, 0, 128, 64, 64, 32, 32, 32, 32, 16, 16,  16, 16, 8,  8,  4,  2,  2, 2, 4, 56, 64, 128, 0, 0, 0, 0,  0,  0,  0,  0,  0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,   0,   0,   0,   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 226, 1, 1, 2, 2, 2, 2, 1, 0, 0, 0, 0, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 48, 48, 0, 192, 193, 193, 194, 4, 8, 16, 32, 64, 128, 0, 0, 0, 128, 128, 128, 128, 64, 64, 64, 64, 32, 32, 32, 32, 16, 16, 16, 16, 8, 8, 8, 8, 8, 4, 4, 4, 4, 4, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 112, 12, 3, 0, 0, 0, 0, 0, 0, 0,   12, 12, 12, 13, 1,  0,  64, 160, 33, 34, 18, 17, 17, 17, 9, 8, 8, 8,  8,  4,   4, 8, 8, 16, 16, 16, 16, 16, 17, 15, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 64, 64, 64, 64, 64, 32, 32, 32, 32, 32, 16, 16, 16, 16, 16, 8, 8, 8, 8, 8, 4, 4, 4, 4, 4, 2, 3, 2,  2,   1, 1, 1, 1, 1, 1, 2, 2, 4, 4, 8, 8,   8,   8, 8, 7, 0, 0, 0, 0, 0, 0, 0,   0, 0,  0,  0, 0,   0,   0,   0,   0, 0, 0,  0,  0,  0,   0, 0, 0, 0,   0,   0,   0,   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}

    };

    // Prep animation
    static const char PROGMEM prep[][ANIM_SIZE] = {

        {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,   0,  128, 128, 0, 0,  0, 0, 0,   128, 64,  64,  32,  32, 32, 32, 16, 16, 16, 16, 8,  4,  2,  1,  1, 2, 12, 48, 64, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,   0,   0,   0,   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 225, 0, 0, 1, 1, 2, 2, 129, 128, 128, 0, 0, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 48, 48, 0, 0, 1, 225, 26, 6, 9, 49, 53, 1, 138, 124, 0, 0, 128, 128, 128, 128, 64, 64, 64, 64, 32, 32, 32, 32, 16, 16, 16, 16, 8, 8, 8, 8, 8, 4, 4, 4, 4, 4, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 112, 12, 3,   0,   0, 24, 6, 5, 152, 153, 132, 195, 124, 65, 65, 64, 64, 32, 33, 34, 18, 17, 17, 17, 9, 8, 8,  8,  8,  4,   4, 4, 4, 4, 4, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 64, 64, 64, 64, 64, 32, 32, 32, 32, 32, 16, 16, 16, 16, 16, 8, 8, 8, 8, 8, 4, 4, 4, 4, 4, 2, 3, 2,  2,   1, 1, 1, 1, 1, 1, 0,   0,   0,   0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0,  0,  0, 0, 0, 0,   0,  0, 0, 0,  0,  0, 0,   0,   0, 0, 0,   0,   0,   0,   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}

    };

    // Typing animation
    static const char PROGMEM tap[TAP_FRAMES][ANIM_SIZE] = {

        {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,   0,  128, 128, 0, 0,  0, 0, 0,   128, 64,  64, 32,  32, 32, 32, 16, 16, 16, 16, 8,  4,  2,  1,  1, 2, 12, 48, 64, 128, 0, 0, 0, 0,  0,  0,  0,  248, 248, 248, 248, 0,  0,   0,   0,   0,   128, 128, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,   0,   0,   0,   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 225, 0, 0, 1, 1, 2, 2, 129, 128, 128, 0, 0, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 48, 48, 0, 0, 1, 1, 2, 4, 8, 16, 32, 67, 135, 7, 1, 0, 184, 188, 190, 159, 95, 95, 79, 76, 32, 32, 32, 32, 16, 16, 16, 16, 8, 8, 8, 8, 8, 4, 4, 4, 4, 4, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 112, 12, 3,   0,   0, 24, 6, 5, 152, 153, 132, 67, 124, 65, 65, 64, 64, 32, 33, 34, 18, 17, 17, 17, 9, 8, 8,  8,  8,  4,   4, 8, 8, 16, 16, 16, 16, 16,  17,  15,  1,   61, 124, 252, 252, 252, 252, 252, 60, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 64, 64, 64, 64, 64, 32, 32, 32, 32, 32, 16, 16, 16, 16, 16, 8, 8, 8, 8, 8, 4, 4, 4, 4, 4, 2, 3, 2,  2,   1, 1, 1, 1, 1, 1, 0,   0,   0,   0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0,   0, 0, 0, 0,   0,   1,   3,   3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},

        {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,   0,  128, 128, 0, 0, 0, 0, 0, 128, 64, 64, 32, 32, 32, 32, 16, 16,  16, 16, 8,  4,  2,  1,  1, 2, 12, 48, 64, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,   0,   0,   0,   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30,  225, 0,   0,   1,   1,   2,  2,  1, 0, 0, 0, 0, 128, 128, 0,   0,   0,   0,   0, 0, 0, 0, 0, 128, 0, 48, 48, 0, 0, 1, 225, 26, 6, 9, 49, 53, 1, 138, 124, 0, 0, 128, 128, 128, 128, 64, 64, 64, 64, 32, 32, 32, 32, 16, 16, 16, 16, 8, 8, 8, 8, 8, 4, 4, 4, 4, 4, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 112, 12, 3,   0,   0, 0, 0, 0, 0, 0,   0,  0,  0,  1,  1,  0,  64, 160, 33, 34, 18, 17, 17, 17, 9, 8, 8,  8,  8,  4,   4, 4, 4, 4, 4, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 64, 64, 64, 64, 64, 32, 32, 32, 32, 32, 16, 16, 16, 16, 16, 8, 8, 8, 8, 8, 4, 4, 4, 4, 4, 2, 3, 122, 122, 121, 121, 121, 121, 57, 49, 2, 2, 4, 4, 8, 8,   8,   136, 136, 135, 128, 0, 0, 0, 0, 0, 0,   0, 0,  0,  0, 0, 0, 0,   0,  0, 0, 0,  0,  0, 0,   0,   0, 0, 0,   0,   0,   0,   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}

    };

    void animation_phase(void) {
        if (get_current_wpm() <= IDLE_SPEED) {
            current_idle_frame = (current_idle_frame + 1) % IDLE_FRAMES;
            oled_write_raw_P(idle[abs((IDLE_FRAMES - 1) - current_idle_frame)], ANIM_SIZE);
        }

        if (get_current_wpm() > IDLE_SPEED && get_current_wpm() < TAP_SPEED) {
            oled_write_raw_P(prep[0], ANIM_SIZE);
        }

        if (get_current_wpm() >= TAP_SPEED) {
            current_tap_frame = (current_tap_frame + 1) % TAP_FRAMES;
            oled_write_raw_P(tap[abs((TAP_FRAMES - 1) - current_tap_frame)], ANIM_SIZE);
        }
    }

    if (get_current_wpm() != 000) {
        oled_on();

        if (timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) {
            anim_timer = timer_read32();
            animation_phase();
        }

        anim_sleep = timer_read32();
    } else {
        if (timer_elapsed32(anim_sleep) > oled_timeout) {
            oled_off();
        } else {
            if (timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) {
                anim_timer = timer_read32();
                animation_phase();
            }
        }
    }
}

static void render_status(void) {
    // WPM
    oled_write_ln_P(PSTR("wpm"), false);
    sprintf(wpm_str, "%03d", get_current_wpm());
    oled_write_ln(wpm_str, false);
    oled_write_ln_P(PSTR(""), false);

    // Layer display
    switch (get_highest_layer(layer_state)) {
        case _QWERTY:
            oled_write_ln_P(PSTR("deflt"), false);
            break;
        case _RAISE:
            oled_write_ln_P(PSTR("raise"), false);
            break;
        case _LOWER:
            oled_write_ln_P(PSTR("lower"), false);
            break;
        case _ADJUST:
            oled_write_ln_P(PSTR("adjst"), false);
            break;
        default:
            oled_write_ln_P(PSTR("error"), false);
    }

    led_t led_state = host_keyboard_led_state();
    oled_write_ln_P(PSTR(""), false);
    oled_write_ln_P(PSTR(""), false);
    oled_write_ln_P(PSTR("caps"), led_state.caps_lock);
}

void oled_task_user(void) {
    if (is_keyboard_left()) {
        render_status();
    } else {
        render_bongo_cat();
    }
}

A keyboards/lily58/keymaps/domnantas/readme.md => keyboards/lily58/keymaps/domnantas/readme.md +21 -0
@@ 0,0 1,21 @@
# Domnantas layout for Lily58 Pro

## Features

- Optimised for lithuanian layout, but works on English too
- Backspace, Enter and Space are under thumbs, very little hand movement
- LShift swapped with LCtrl
- Numpad on Lower layer for left hand
- Navigation, media keys on Raise layer for right hand
- Status on the left OLED
- BONGOCAT on the right

## Instructions
Since status is always on the left and Bongocat on the right, the keymap has to be flashed with different commands:

```bash
# Right hand
qmk flash -kb lily58/rev1 -km domnantas -bl avrdude-split-left
# Left hand
qmk flash -kb lily58/rev1 -km domnantas -bl avrdude-split-right
```
\ No newline at end of file

A keyboards/lily58/keymaps/domnantas/rules.mk => keyboards/lily58/keymaps/domnantas/rules.mk +2 -0
@@ 0,0 1,2 @@
EXTRAKEY_ENABLE = yes
WPM_ENABLE = yes

A keyboards/ymdk/ymd09/keymaps/andys8/keymap.c => keyboards/ymdk/ymd09/keymaps/andys8/keymap.c +65 -0
@@ 0,0 1,65 @@
/*
Copyright 2021 andys8 <andys8@users.noreply.github.com>

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
#include "sendstring_german.h"

enum custom_keycodes {
    GIT_STASH = SAFE_RANGE,
    GIT_STASH_POP,
    GIT_COMMIT,
    COPY_PASTE,
};

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    switch (keycode) {
        case GIT_STASH:
            if (record->event.pressed) {
                SEND_STRING("git stash\n");
            }
            break;
        case GIT_STASH_POP:
            if (record->event.pressed) {
                SEND_STRING("git stash pop\n");
            }
            break;
        case GIT_COMMIT:
            if (record->event.pressed) {
                SEND_STRING("git add -A && git commit -a\n");
            }
            break;
        case COPY_PASTE:
            if (record->event.pressed) {
                tap_code16(C(KC_C));
            } else {
                tap_code16(C(KC_V));
            }
            break;
    }
    return true;
};

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

  [0] = LAYOUT(GIT_STASH, GIT_STASH_POP, GIT_COMMIT,
               LCTL(KC_F4), LT(1, KC_SPACE), LCTL(KC_F6),
               COPY_PASTE, LCTL(KC_F2), LCTL(KC_F3)),

  [1] = LAYOUT(RGB_RMOD, RGB_TOG, RGB_MOD,
               RGB_HUI, KC_TRNS, RGB_SAI,
               RGB_HUD, RGB_M_P, RGB_SAD),

};

M quantum/rgb_matrix_animations/typing_heatmap_anim.h => quantum/rgb_matrix_animations/typing_heatmap_anim.h +24 -1
@@ 2,6 2,10 @@
RGB_MATRIX_EFFECT(TYPING_HEATMAP)
#    ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS

#        ifndef RGB_MATRIX_TYPING_HEATMAP_DECREASE_DELAY_MS
#            define RGB_MATRIX_TYPING_HEATMAP_DECREASE_DELAY_MS 25
#        endif

void process_rgb_matrix_typing_heatmap(keyrecord_t* record) {
    uint8_t row   = record->event.key.row;
    uint8_t col   = record->event.key.col;


@@ 27,6 31,11 @@ void process_rgb_matrix_typing_heatmap(keyrecord_t* record) {
    }
}

// A timer to track the last time we decremented all heatmap values.
static uint16_t heatmap_decrease_timer;
// Whether we should decrement the heatmap values during the next update.
static bool decrease_heatmap_values;

bool TYPING_HEATMAP(effect_params_t* params) {
    // Modified version of RGB_MATRIX_USE_LIMITS to work off of matrix row / col size
    uint8_t led_min = RGB_MATRIX_LED_PROCESS_LIMIT * params->iter;


@@ 38,6 47,18 @@ bool TYPING_HEATMAP(effect_params_t* params) {
        memset(g_rgb_frame_buffer, 0, sizeof g_rgb_frame_buffer);
    }

    // The heatmap animation might run in several iterations depending on
    // `RGB_MATRIX_LED_PROCESS_LIMIT`, therefore we only want to update the
    // timer when the animation starts.
    if (params->iter == 0) {
        decrease_heatmap_values = timer_elapsed(heatmap_decrease_timer) >= RGB_MATRIX_TYPING_HEATMAP_DECREASE_DELAY_MS;

        // Restart the timer if we are going to decrease the heatmap this frame.
        if (decrease_heatmap_values) {
            heatmap_decrease_timer = timer_read();
        }
    }

    // Render heatmap & decrease
    for (int i = led_min; i < led_max; i++) {
        uint8_t row = i % MATRIX_ROWS;


@@ 55,7 76,9 @@ bool TYPING_HEATMAP(effect_params_t* params) {
            rgb_matrix_set_color(led[j], rgb.r, rgb.g, rgb.b);
        }

        g_rgb_frame_buffer[row][col] = qsub8(val, 1);
        if (decrease_heatmap_values) {
            g_rgb_frame_buffer[row][col] = qsub8(val, 1);
        }
    }

    return led_max < sizeof(g_rgb_frame_buffer);

M shell.nix => shell.nix +1 -1
@@ 71,7 71,7 @@ in
mkShell {
  name = "qmk-firmware";

  buildInputs = [ dfu-programmer dfu-util diffutils git pythonEnv ]
  buildInputs = [ clang-tools dfu-programmer dfu-util diffutils git pythonEnv ]
    ++ lib.optional avr [
      pkgsCross.avr.buildPackages.binutils
      pkgsCross.avr.buildPackages.gcc8

M tmk_core/protocol/arm_atsam/usb/udi_device_epsize.h => tmk_core/protocol/arm_atsam/usb/udi_device_epsize.h +1 -1
@@ 21,7 21,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define KEYBOARD_EPSIZE 8
#define MOUSE_EPSIZE 8
#define EXTRAKEY_EPSIZE 8
#define RAW_EPSIZE 64
#define RAW_EPSIZE 32
#define CONSOLE_EPSIZE 32
#define NKRO_EPSIZE 32
#define MIDI_STREAM_EPSIZE 64

M tmk_core/protocol/lufa/adafruit_ble.cpp => tmk_core/protocol/lufa/adafruit_ble.cpp +20 -25
@@ 11,6 11,7 @@
#include "spi_master.h"
#include "wait.h"
#include "analog.h"
#include "progmem.h"

// These are the pin assignments for the 32u4 boards.
// You may define them to something else in your config.h


@@ 36,10 37,8 @@
#define SAMPLE_BATTERY
#define ConnectionUpdateInterval 1000 /* milliseconds */

#ifdef SAMPLE_BATTERY
#    ifndef BATTERY_LEVEL_PIN
#        define BATTERY_LEVEL_PIN B5
#    endif
#ifndef BATTERY_LEVEL_PIN
#    define BATTERY_LEVEL_PIN B5
#endif

static struct {


@@ 118,15 117,15 @@ enum sdep_type {
    SdepResponse      = 0x20,
    SdepAlert         = 0x40,
    SdepError         = 0x80,
    SdepSlaveNotReady = 0xfe,  // Try again later
    SdepSlaveOverflow = 0xff,  // You read more data than is available
    SdepSlaveNotReady = 0xFE,  // Try again later
    SdepSlaveOverflow = 0xFF,  // You read more data than is available
};

enum ble_cmd {
    BleInitialize = 0xbeef,
    BleAtWrapper  = 0x0a00,
    BleUartTx     = 0x0a01,
    BleUartRx     = 0x0a02,
    BleInitialize = 0xBEEF,
    BleAtWrapper  = 0x0A00,
    BleUartTx     = 0x0A01,
    BleUartRx     = 0x0A02,
};

enum ble_system_event_bits {


@@ 176,7 175,7 @@ static bool sdep_send_pkt(const struct sdep_msg *msg, uint16_t timeout) {

static inline void sdep_build_pkt(struct sdep_msg *msg, uint16_t command, const uint8_t *payload, uint8_t len, bool moredata) {
    msg->type     = SdepCommand;
    msg->cmd_low  = command & 0xff;
    msg->cmd_low  = command & 0xFF;
    msg->cmd_high = command >> 8;
    msg->len      = len;
    msg->more     = (moredata && len == SdepMaxPayload) ? 1 : 0;


@@ 407,11 406,11 @@ static bool at_command(const char *cmd, char *resp, uint16_t resplen, bool verbo
    }

    if (resp == NULL) {
        auto now = timer_read();
        uint16_t now = timer_read();
        while (!resp_buf.enqueue(now)) {
            resp_buf_read_one(false);
        }
        auto later = timer_read();
        uint16_t later = timer_read();
        if (TIMER_DIFF_16(later, now) > 0) {
            dprintf("waited %dms for resp_buf\n", TIMER_DIFF_16(later, now));
        }


@@ 422,7 421,7 @@ static bool at_command(const char *cmd, char *resp, uint16_t resplen, bool verbo
}

bool at_command_P(const char *cmd, char *resp, uint16_t resplen, bool verbose) {
    auto cmdbuf = (char *)alloca(strlen_P(cmd) + 1);
    char *cmdbuf = (char *)alloca(strlen_P(cmd) + 1);
    strcpy_P(cmdbuf, cmd);
    return at_command(cmdbuf, resp, resplen, verbose);
}


@@ 484,9 483,9 @@ fail:
static void set_connected(bool connected) {
    if (connected != state.is_connected) {
        if (connected) {
            print("****** BLE CONNECT!!!!\n");
            dprint("BLE connected\n");
        } else {
            print("****** BLE DISCONNECT!!!!\n");
            dprint("BLE disconnected\n");
        }
        state.is_connected = connected;



@@ 612,7 611,7 @@ static bool process_queue_item(struct queue_item *item, uint16_t timeout) {
    }
}

bool adafruit_ble_send_keys(uint8_t hid_modifier_mask, uint8_t *keys, uint8_t nkeys) {
void adafruit_ble_send_keys(uint8_t hid_modifier_mask, uint8_t *keys, uint8_t nkeys) {
    struct queue_item item;
    bool              didWait = false;



@@ 638,30 637,27 @@ bool adafruit_ble_send_keys(uint8_t hid_modifier_mask, uint8_t *keys, uint8_t nk
        }

        if (nkeys <= 6) {
            return true;
            return;
        }

        nkeys -= 6;
        keys += 6;
    }

    return true;
}

bool adafruit_ble_send_consumer_key(uint16_t keycode, int hold_duration) {
void adafruit_ble_send_consumer_key(uint16_t usage) {
    struct queue_item item;

    item.queue_type = QTConsumer;
    item.consumer   = keycode;
    item.consumer   = usage;

    while (!send_buf.enqueue(item)) {
        send_buf_send_one();
    }
    return true;
}

#ifdef MOUSE_ENABLE
bool adafruit_ble_send_mouse_move(int8_t x, int8_t y, int8_t scroll, int8_t pan, uint8_t buttons) {
void adafruit_ble_send_mouse_move(int8_t x, int8_t y, int8_t scroll, int8_t pan, uint8_t buttons) {
    struct queue_item item;

    item.queue_type        = QTMouseMove;


@@ 674,7 670,6 @@ bool adafruit_ble_send_mouse_move(int8_t x, int8_t y, int8_t scroll, int8_t pan,
    while (!send_buf.enqueue(item)) {
        send_buf_send_one();
    }
    return true;
}
#endif


M tmk_core/protocol/lufa/adafruit_ble.h => tmk_core/protocol/lufa/adafruit_ble.h +5 -6
@@ 10,7 10,6 @@
#include <string.h>

#include "config_common.h"
#include "progmem.h"

#ifdef __cplusplus
extern "C" {


@@ 35,17 34,17 @@ extern void adafruit_ble_task(void);
 * this set of keys.
 * Also sends a key release indicator, so that the keys do not remain
 * held down. */
extern bool adafruit_ble_send_keys(uint8_t hid_modifier_mask, uint8_t *keys, uint8_t nkeys);
extern void adafruit_ble_send_keys(uint8_t hid_modifier_mask, uint8_t *keys, uint8_t nkeys);

/* Send a consumer keycode, holding it down for the specified duration
/* Send a consumer usage.
 * (milliseconds) */
extern bool adafruit_ble_send_consumer_key(uint16_t keycode, int hold_duration);
extern void adafruit_ble_send_consumer_key(uint16_t usage);

#ifdef MOUSE_ENABLE
/* Send a mouse/wheel movement report.
 * The parameters are signed and indicate positive of negative direction
 * The parameters are signed and indicate positive or negative direction
 * change. */
extern bool adafruit_ble_send_mouse_move(int8_t x, int8_t y, int8_t scroll, int8_t pan, uint8_t buttons);
extern void adafruit_ble_send_mouse_move(int8_t x, int8_t y, int8_t scroll, int8_t pan, uint8_t buttons);
#endif

/* Compute battery voltage by reading an analog pin.

M tmk_core/protocol/lufa/lufa.c => tmk_core/protocol/lufa/lufa.c +1 -1
@@ 809,7 809,7 @@ static void send_consumer(uint16_t data) {

    if (where == OUTPUT_BLUETOOTH || where == OUTPUT_USB_AND_BT) {
#        ifdef MODULE_ADAFRUIT_BLE
        adafruit_ble_send_consumer_key(data, 0);
        adafruit_ble_send_consumer_key(data);
#        elif MODULE_RN42
        static uint16_t last_data = 0;
        if (data == last_data) return;