aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/ISSUE_TEMPLATE/bug_report.yml2
-rw-r--r--builddefs/build_full_test.mk2
-rw-r--r--builddefs/build_keyboard.mk44
-rw-r--r--builddefs/common_features.mk173
-rw-r--r--builddefs/converters.mk7
-rw-r--r--builddefs/generic_features.mk3
-rw-r--r--data/constants/keycodes/extras/keycodes_belgian_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_bepo_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_brazilian_abnt2_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_canadian_multilingual_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_colemak_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_croatian_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_czech_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_danish_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_dvorak_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_dvorak_fr_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_dvorak_programmer_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_estonian_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_eurkey_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_finnish_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_french_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_french_afnor_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_french_mac_iso_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_german_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_german_mac_iso_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_greek_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_hebrew_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_hungarian_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_icelandic_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_irish_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_italian_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_italian_mac_ansi_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_italian_mac_iso_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_japanese_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_korean_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_latvian_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_lithuanian_azerty_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_lithuanian_qwerty_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_neo2_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_nordic_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_norman_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_norwegian_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_plover_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_plover_dvorak_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_polish_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_portuguese_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_portuguese_mac_iso_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_romanian_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_russian_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_serbian_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_serbian_latin_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_slovak_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_slovenian_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_spanish_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_spanish_dvorak_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_spanish_latin_america_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_swedish_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_swedish_mac_ansi_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_swedish_mac_iso_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_swedish_pro_mac_ansi_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_swedish_pro_mac_iso_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_swiss_de_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_swiss_fr_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_turkish_f_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_turkish_q_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_uk_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_ukrainian_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_us_extended_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_us_international_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_us_international_linux_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_workman_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/extras/keycodes_workman_zxcvm_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/keycodes_0.0.1.hjson2
-rw-r--r--data/constants/keycodes/keycodes_0.0.1_joystick.hjson2
-rw-r--r--data/constants/keycodes/keycodes_0.0.1_magic.hjson2
-rw-r--r--data/constants/keycodes/keycodes_0.0.1_programmable_button.hjson2
-rw-r--r--data/constants/keycodes/keycodes_0.0.1_sequencer.hjson2
-rw-r--r--data/constants/keycodes/keycodes_0.0.2_basic.hjson2
-rw-r--r--data/constants/keycodes/keycodes_0.0.2_magic.hjson2
-rw-r--r--data/constants/keycodes/keycodes_0.0.2_sequencer.hjson2
-rw-r--r--data/mappings/info_config.hjson1
-rw-r--r--data/mappings/info_rules.hjson4
-rw-r--r--data/mappings/keyboard_aliases.hjson9
-rw-r--r--data/schemas/community_module.jsonschema1
-rw-r--r--data/schemas/keyboard.jsonschema4
-rw-r--r--docs/_sidebar.json1
-rw-r--r--docs/cli.md4
-rw-r--r--docs/cli_development.md6
-rw-r--r--docs/coding_conventions_python.md4
-rw-r--r--docs/configurator_diagram.drawio2
-rw-r--r--docs/configurator_diagram.svg2
-rw-r--r--docs/drivers/battery.md51
-rw-r--r--docs/faq_debug.md11
-rw-r--r--docs/features/community_modules.md5
-rw-r--r--docs/features/pointing_device.md26
-rw-r--r--docs/public/badge-community-dark.svg2
-rw-r--r--docs/public/badge-community-light.svg2
-rw-r--r--docs/tap_hold.md83
-rw-r--r--docs/unit_testing.md28
-rw-r--r--drivers/battery/battery.c31
-rw-r--r--drivers/battery/battery.h34
-rw-r--r--drivers/battery/battery_adc.c55
-rw-r--r--drivers/battery/battery_driver.h29
-rw-r--r--drivers/bluetooth/bluefruit_le.cpp21
-rw-r--r--drivers/bluetooth/bluefruit_le.h4
-rw-r--r--drivers/bluetooth/outputselect.c70
-rw-r--r--drivers/bluetooth/outputselect.h24
-rw-r--r--drivers/eeprom/eeprom_transient.h2
-rw-r--r--drivers/painter/gc9xxx/qp_gc9a01_opcodes.h2
-rw-r--r--drivers/painter/ili9xxx/qp_ili9486.c16
-rw-r--r--drivers/painter/ld7032/qp_ld7032.h2
-rw-r--r--drivers/painter/ld7032/qp_ld7032_opcodes.h2
-rw-r--r--drivers/sensors/pimoroni_trackball.c12
-rw-r--r--drivers/usbpd.h2
-rw-r--r--keyboards/0_sixty/info.json1
-rw-r--r--keyboards/0xc7/61key/keyboard.json1
-rw-r--r--keyboards/0xcb/tutelpad/keyboard.json1
-rw-r--r--keyboards/1k/keyboard.json1
-rw-r--r--keyboards/1upkeyboards/1up60hse/keyboard.json1
-rw-r--r--keyboards/1upkeyboards/1up60rgb/keyboard.json1
-rw-r--r--keyboards/1upkeyboards/super16/keyboard.json1
-rw-r--r--keyboards/1upkeyboards/super16v2/keyboard.json1
-rw-r--r--keyboards/1upkeyboards/sweet16/info.json1
-rw-r--r--keyboards/1upkeyboards/sweet16/v1/keyboard.json1
-rw-r--r--keyboards/2key2crawl/keyboard.json1
-rw-r--r--keyboards/30wer/keyboard.json1
-rw-r--r--keyboards/40percentclub/25/keyboard.json1
-rw-r--r--keyboards/40percentclub/4pack/keyboard.json1
-rw-r--r--keyboards/40percentclub/4x4/keyboard.json1
-rw-r--r--keyboards/40percentclub/5x5/keyboard.json1
-rw-r--r--keyboards/40percentclub/6lit/keyboard.json1
-rw-r--r--keyboards/40percentclub/foobar/keyboard.json1
-rw-r--r--keyboards/40percentclub/gherkin/info.json1
-rw-r--r--keyboards/40percentclub/half_n_half/keyboard.json1
-rw-r--r--keyboards/40percentclub/i75/info.json1
-rw-r--r--keyboards/40percentclub/luddite/keyboard.json1
-rw-r--r--keyboards/40percentclub/mf68/keyboard.json1
-rw-r--r--keyboards/40percentclub/nano/keyboard.json1
-rw-r--r--keyboards/40percentclub/nori/keyboard.json1
-rw-r--r--keyboards/40percentclub/polyandry/info.json1
-rw-r--r--keyboards/40percentclub/tomato/keyboard.json1
-rw-r--r--keyboards/40percentclub/ut47/keyboard.json1
-rw-r--r--keyboards/45_ats/keyboard.json1
-rw-r--r--keyboards/4pplet/aekiso60/info.json1
-rw-r--r--keyboards/4pplet/perk60_iso/rev_a/keyboard.json1
-rw-r--r--keyboards/4pplet/waffling80/info.json1
-rw-r--r--keyboards/5keys/keyboard.json1
-rw-r--r--keyboards/7c8/framework/keyboard.json1
-rw-r--r--keyboards/9key/keyboard.json1
-rw-r--r--keyboards/abatskeyboardclub/nayeon/keyboard.json1
-rw-r--r--keyboards/acheron/apollo/87h/info.json1
-rw-r--r--keyboards/acheron/apollo/87htsc/keyboard.json1
-rw-r--r--keyboards/acheron/apollo/88htsc/keyboard.json1
-rw-r--r--keyboards/acheron/athena/info.json1
-rwxr-xr-xkeyboards/acheron/austin/keyboard.json1
-rw-r--r--keyboards/acheron/lasgweloth/keyboard.json1
-rw-r--r--keyboards/acheron/themis/info.json1
-rw-r--r--keyboards/ada/ada1800mini/keyboard.json1
-rw-r--r--keyboards/ada/infinity81/keyboard.json1
-rw-r--r--keyboards/adkb96/rev1/keyboard.json1
-rw-r--r--keyboards/adm42/rev4/keyboard.json1
-rw-r--r--keyboards/aeboards/aegis/keyboard.json1
-rw-r--r--keyboards/aeboards/constellation/rev1/keyboard.json1
-rw-r--r--keyboards/aeboards/constellation/rev2/keyboard.json1
-rw-r--r--keyboards/aeboards/constellation/rev3/keyboard.json1
-rw-r--r--keyboards/aeboards/ext65/info.json1
-rw-r--r--keyboards/aeboards/ext65/rev1/keyboard.json1
-rw-r--r--keyboards/aeboards/ext65/rev2/keyboard.json1
-rw-r--r--keyboards/aeboards/ext65/rev3/keyboard.json1
-rw-r--r--keyboards/aeboards/satellite/rev1/keyboard.json1
-rw-r--r--keyboards/ah/haven80/info.json1
-rw-r--r--keyboards/ai/keyboard.json1
-rw-r--r--keyboards/ai03/andromeda/keyboard.json1
-rw-r--r--keyboards/ai03/equinox/info.json1
-rw-r--r--keyboards/ai03/orbit_x/keyboard.json1
-rw-r--r--keyboards/akb/vero/board.h (renamed from keyboards/nix_studio/lilith/config.h)7
-rw-r--r--keyboards/akb/vero/config.h23
-rw-r--r--keyboards/akko/5087/5087.c2
-rw-r--r--keyboards/al1/keyboard.json1
-rw-r--r--keyboards/alf/x11/keyboard.json1
-rw-r--r--keyboards/alf/x2/keyboard.json1
-rw-r--r--keyboards/alhenkb/macropad5x4/keyboard.json1
-rw-r--r--keyboards/alpine65/keyboard.json1
-rw-r--r--keyboards/alps64/keyboard.json1
-rw-r--r--keyboards/amjkeyboard/amj40/keyboard.json1
-rw-r--r--keyboards/amjkeyboard/amj60/keyboard.json1
-rw-r--r--keyboards/amjkeyboard/amj66/keyboard.json1
-rw-r--r--keyboards/amjkeyboard/amj84/keyboard.json1
-rw-r--r--keyboards/amjkeyboard/amj96/keyboard.json1
-rw-r--r--keyboards/amjkeyboard/amjpad/keyboard.json1
-rw-r--r--keyboards/anavi/knobs3/keyboard.json3
-rw-r--r--keyboards/anavi/macropad10/keyboard.json3
-rw-r--r--keyboards/anavi/macropad8/keyboard.json1
-rw-r--r--keyboards/aplyard/aplx6/info.json1
-rw-r--r--keyboards/arabica37/rev1/keyboard.json1
-rw-r--r--keyboards/archetype/minervalx/keyboard.json1
-rw-r--r--keyboards/ares/keyboard.json1
-rw-r--r--keyboards/artemis/paragon/info.json1
-rw-r--r--keyboards/ashwing66/keyboard.json1
-rw-r--r--keyboards/ask55/keyboard.json2
-rw-r--r--keyboards/at_at/660m/keyboard.json1
-rw-r--r--keyboards/atreus/info.json1
-rw-r--r--keyboards/atreus62/keyboard.json1
-rw-r--r--keyboards/aves65/keyboard.json1
-rw-r--r--keyboards/axolstudio/helpo/keyboard.json1
-rw-r--r--keyboards/baguette/keyboard.json1
-rw-r--r--keyboards/bahm/aster_ergo/keyboard.json1
-rw-r--r--keyboards/balloondogcaps/tr90/keyboard.json1
-rw-r--r--keyboards/balloondogcaps/tr90pm/keyboard.json1
-rw-r--r--keyboards/bantam44/keyboard.json1
-rw-r--r--keyboards/bastardkb/charybdis/3x5/v1/elitec/keyboard.json4
-rw-r--r--keyboards/bastardkb/charybdis/3x5/v2/elitec/keyboard.json4
-rw-r--r--keyboards/bastardkb/charybdis/3x5/v2/splinky_2/keyboard.json4
-rw-r--r--keyboards/bastardkb/charybdis/3x5/v2/splinky_3/keyboard.json4
-rw-r--r--keyboards/bastardkb/charybdis/3x5/v2/stemcell/keyboard.json4
-rw-r--r--keyboards/bastardkb/charybdis/3x6/v1/elitec/keyboard.json4
-rw-r--r--keyboards/bastardkb/charybdis/3x6/v2/elitec/keyboard.json4
-rw-r--r--keyboards/bastardkb/charybdis/3x6/v2/splinky_2/keyboard.json4
-rw-r--r--keyboards/bastardkb/charybdis/3x6/v2/splinky_3/keyboard.json4
-rw-r--r--keyboards/bastardkb/charybdis/3x6/v2/stemcell/keyboard.json4
-rw-r--r--keyboards/bastardkb/charybdis/4x6/v1/elitec/keyboard.json4
-rw-r--r--keyboards/bastardkb/charybdis/4x6/v2/elitec/keyboard.json4
-rw-r--r--keyboards/bastardkb/charybdis/4x6/v2/splinky_2/keyboard.json4
-rw-r--r--keyboards/bastardkb/charybdis/4x6/v2/splinky_3/keyboard.json4
-rw-r--r--keyboards/bastardkb/charybdis/4x6/v2/stemcell/keyboard.json4
-rw-r--r--keyboards/bastardkb/dilemma/3x5_2/assembled/keyboard.json4
-rw-r--r--keyboards/bastardkb/dilemma/3x5_2/splinky/keyboard.json4
-rw-r--r--keyboards/bastardkb/dilemma/3x5_3/keyboard.json4
-rw-r--r--keyboards/bastardkb/dilemma/4x6_4/keyboard.json4
-rw-r--r--keyboards/bastardkb/scylla/v1/elitec/keyboard.json4
-rw-r--r--keyboards/bastardkb/scylla/v2/elitec/keyboard.json4
-rw-r--r--keyboards/bastardkb/scylla/v2/splinky_2/keyboard.json4
-rw-r--r--keyboards/bastardkb/scylla/v2/splinky_3/keyboard.json4
-rw-r--r--keyboards/bastardkb/scylla/v2/stemcell/keyboard.json4
-rw-r--r--keyboards/bastardkb/skeletyl/v1/elitec/keyboard.json4
-rw-r--r--keyboards/bastardkb/skeletyl/v2/elitec/keyboard.json4
-rw-r--r--keyboards/bastardkb/skeletyl/v2/splinky_2/keyboard.json4
-rw-r--r--keyboards/bastardkb/skeletyl/v2/splinky_3/keyboard.json4
-rw-r--r--keyboards/bastardkb/skeletyl/v2/stemcell/keyboard.json4
-rw-r--r--keyboards/bastardkb/tbkmini/v1/elitec/keyboard.json4
-rw-r--r--keyboards/bastardkb/tbkmini/v2/elitec/keyboard.json4
-rw-r--r--keyboards/bastardkb/tbkmini/v2/splinky_2/keyboard.json4
-rw-r--r--keyboards/bastardkb/tbkmini/v2/splinky_3/keyboard.json4
-rw-r--r--keyboards/bastardkb/tbkmini/v2/stemcell/keyboard.json4
-rw-r--r--keyboards/beatervan/keyboard.json1
-rw-r--r--keyboards/beekeeb/piantor_pro/keyboard.json1
-rw-r--r--keyboards/bestway/keyboard.json1
-rw-r--r--keyboards/bfake/keyboard.json1
-rw-r--r--keyboards/biacco42/ergo42/rev1/keyboard.json1
-rw-r--r--keyboards/biacco42/meishi/keyboard.json1
-rw-r--r--keyboards/biacco42/meishi2/keyboard.json1
-rw-r--r--keyboards/bioi/f60/keyboard.json1
-rw-r--r--keyboards/bioi/g60ble/keyboard.json1
-rw-r--r--keyboards/bioi/morgan65/keyboard.json1
-rw-r--r--keyboards/bioi/s65/keyboard.json1
-rw-r--r--keyboards/blank/blank01/keyboard.json1
-rw-r--r--keyboards/blaster75/keyboard.json1
-rw-r--r--keyboards/blockboy/ac980mini/keyboard.json1
-rw-r--r--keyboards/blockey/keyboard.json1
-rw-r--r--keyboards/boardwalk/keyboard.json1
-rw-r--r--keyboards/bobpad/keyboard.json1
-rw-r--r--keyboards/bolsa/bolsalice/keyboard.json1
-rw-r--r--keyboards/bolsa/damapad/keyboard.json1
-rw-r--r--keyboards/boston_meetup/2019/keyboard.json1
-rw-r--r--keyboards/botanicalkeyboards/fm2u/keyboard.json1
-rw-r--r--keyboards/box75/keyboard.json1
-rw-r--r--keyboards/bpiphany/four_banger/keyboard.json1
-rw-r--r--keyboards/bpiphany/frosty_flake/info.json1
-rw-r--r--keyboards/bpiphany/ghost_squid/keyboard.json1
-rw-r--r--keyboards/bpiphany/hid_liber/keyboard.json1
-rw-r--r--keyboards/bpiphany/kitten_paw/keyboard.json1
-rw-r--r--keyboards/bpiphany/pegasushoof/info.json1
-rw-r--r--keyboards/bpiphany/tiger_lily/keyboard.json1
-rw-r--r--keyboards/bt66tech/bt66tech60/keyboard.json1
-rw-r--r--keyboards/bubble75/hotswap/keyboard.json1
-rw-r--r--keyboards/budgy/keyboard.json1
-rw-r--r--keyboards/buildakb/mw60/keyboard.json1
-rw-r--r--keyboards/caffeinated/serpent65/keyboard.json1
-rw-r--r--keyboards/canary/canary60rgb/v1/keyboard.json1
-rw-r--r--keyboards/cannonkeys/adelie/keyboard.json1
-rw-r--r--keyboards/cannonkeys/lib/satisfaction75/satisfaction_core.c105
-rw-r--r--keyboards/cannonkeys/lib/satisfaction75/satisfaction_core.h11
-rw-r--r--keyboards/cannonkeys/lib/satisfaction75/satisfaction_encoder.c17
-rw-r--r--keyboards/cannonkeys/lib/satisfaction75/satisfaction_oled.c2
-rw-r--r--keyboards/cannonkeys/nearfield/keyboard.json1
-rw-r--r--keyboards/cannonkeys/ortho48/keyboard.json1
-rw-r--r--keyboards/cannonkeys/ortho60/keyboard.json1
-rw-r--r--keyboards/cannonkeys/ortho75/keyboard.json1
-rw-r--r--keyboards/cannonkeys/practice60/keyboard.json1
-rw-r--r--keyboards/cannonkeys/ripple/keyboard.json2
-rw-r--r--keyboards/cannonkeys/satisfaction75/config.h5
-rw-r--r--keyboards/cannonkeys/satisfaction75_hs/config.h5
-rw-r--r--keyboards/cannonkeys/savage65/keyboard.json207
-rw-r--r--keyboards/cannonkeys/vector/keyboard.json1
-rw-r--r--keyboards/capsunlocked/cu24/keyboard.json1
-rw-r--r--keyboards/capsunlocked/cu65/keyboard.json1
-rw-r--r--keyboards/capsunlocked/cu75/keyboard.json1
-rw-r--r--keyboards/centromere/keyboard.json1
-rw-r--r--keyboards/checkerboards/axon40/keyboard.json1
-rw-r--r--keyboards/checkerboards/candybar_ortho/keyboard.json1
-rw-r--r--keyboards/checkerboards/g_idb60/keyboard.json1
-rw-r--r--keyboards/checkerboards/nop60/keyboard.json1
-rw-r--r--keyboards/checkerboards/plexus75/keyboard.json1
-rw-r--r--keyboards/checkerboards/quark/keyboard.json1
-rw-r--r--keyboards/checkerboards/ud40_ortho_alt/keyboard.json1
-rw-r--r--keyboards/chickenman/ciel/keyboard.json1
-rw-r--r--keyboards/chickenman/ciel65/keyboard.json3
-rw-r--r--keyboards/cipulot/common/ec_board.c4
-rw-r--r--keyboards/cipulot/common/eeprom_tools.h26
-rw-r--r--keyboards/cipulot/common/via_ec.c7
-rw-r--r--keyboards/cipulot/ec_980c/ec_980c.c4
-rw-r--r--keyboards/cipulot/ec_typek/ec_typek.c4
-rw-r--r--keyboards/cipulot/kallos/keyboard.json1
-rw-r--r--keyboards/ck60i/keyboard.json1
-rw-r--r--keyboards/ckeys/nakey/keyboard.json1
-rw-r--r--keyboards/ckeys/obelus/keyboard.json1
-rw-r--r--keyboards/clawsome/bookerboard/keyboard.json1
-rw-r--r--keyboards/clawsome/sidekick/keyboard.json1
-rw-r--r--keyboards/clueboard/17/keyboard.json5
-rw-r--r--keyboards/clueboard/2x1800/2018/keyboard.json1
-rw-r--r--keyboards/clueboard/66/rev1/keyboard.json4
-rw-r--r--keyboards/clueboard/66/rev2/keyboard.json4
-rw-r--r--keyboards/clueboard/66/rev3/keyboard.json4
-rw-r--r--keyboards/clueboard/66/rev4/keyboard.json4
-rw-r--r--keyboards/clueboard/66_hotswap/prototype/keyboard.json4
-rw-r--r--keyboards/clueboard/california/keyboard.json1
-rw-r--r--keyboards/clueboard/card/keyboard.json4
-rw-r--r--keyboards/cmm_studio/fuji65/keyboard.json1
-rw-r--r--keyboards/cmm_studio/saka68/hotswap/keyboard.json1
-rw-r--r--keyboards/cmm_studio/saka68/solder/keyboard.json1
-rw-r--r--keyboards/coarse/ixora/keyboard.json1
-rw-r--r--keyboards/coarse/vinta/keyboard.json1
-rw-r--r--keyboards/concreteflowers/cor/keyboard.json1
-rw-r--r--keyboards/concreteflowers/cor_tkl/keyboard.json1
-rw-r--r--keyboards/contra/keyboard.json1
-rw-r--r--keyboards/contra/keymaps/default/keymap.c4
-rw-r--r--keyboards/converter/adb_usb/info.json1
-rw-r--r--keyboards/converter/ibm_terminal/keyboard.json1
-rw-r--r--keyboards/converter/m0110_usb/keyboard.json1
-rw-r--r--keyboards/converter/numeric_keypad_iie/keyboard.json1
-rw-r--r--keyboards/converter/palm_usb/stowaway/keyboard.json1
-rw-r--r--keyboards/converter/siemens_tastatur/keyboard.json1
-rw-r--r--keyboards/converter/sun_usb/info.json1
-rw-r--r--keyboards/converter/usb_usb/info.json1
-rw-r--r--keyboards/converter/xt_usb/keyboard.json1
-rw-r--r--keyboards/crawlpad/keyboard.json1
-rw-r--r--keyboards/crazy_keyboard_68/keyboard.json1
-rw-r--r--keyboards/creatkeebs/glacier/keyboard.json1
-rw-r--r--keyboards/crimsonkeyboards/resume1800/keyboard.json1
-rw-r--r--keyboards/crowboard/keyboard.json1
-rw-r--r--keyboards/cutie_club/borsdorf/keyboard.json1
-rw-r--r--keyboards/cutie_club/fidelity/keyboard.json1
-rw-r--r--keyboards/cutie_club/giant_macro_pad/keyboard.json1
-rw-r--r--keyboards/cutie_club/keebcats/denis/keyboard.json1
-rw-r--r--keyboards/cutie_club/keebcats/dougal/keyboard.json1
-rw-r--r--keyboards/cutie_club/novus/keyboard.json1
-rw-r--r--keyboards/cutie_club/wraith/keyboard.json1
-rw-r--r--keyboards/cx60/keyboard.json1
-rw-r--r--keyboards/cxt_studio/12e3/keyboard.json1
-rw-r--r--keyboards/cxt_studio/12e4/keyboard.json1
-rw-r--r--keyboards/dailycraft/bat43/info.json1
-rw-r--r--keyboards/dailycraft/claw44/rev1/keyboard.json1
-rw-r--r--keyboards/dailycraft/owl8/keyboard.json1
-rw-r--r--keyboards/dailycraft/sandbox/rev1/keyboard.json1
-rw-r--r--keyboards/dailycraft/sandbox/rev2/keyboard.json1
-rw-r--r--keyboards/dailycraft/stickey4/keyboard.json1
-rw-r--r--keyboards/dailycraft/wings42/rev1/keyboard.json1
-rw-r--r--keyboards/dailycraft/wings42/rev1_extkeys/keyboard.json1
-rw-r--r--keyboards/dailycraft/wings42/rev2/keyboard.json1
-rw-r--r--keyboards/daji/seis_cinco/keyboard.json1
-rw-r--r--keyboards/dark/magnum_ergo_1/keyboard.json1
-rw-r--r--keyboards/darkproject/kd83a_bfg_edition/keyboard.json1
-rw-r--r--keyboards/darkproject/kd87a_bfg_edition/keyboard.json1
-rw-r--r--keyboards/darmoshark/k3/keyboard.json1
-rw-r--r--keyboards/dasky/reverb/keyboard.json1
-rw-r--r--keyboards/dc01/arrow/keyboard.json1
-rw-r--r--keyboards/dc01/left/keyboard.json1
-rw-r--r--keyboards/dc01/numpad/keyboard.json1
-rw-r--r--keyboards/dc01/right/keyboard.json1
-rw-r--r--keyboards/deemen17/de60/r1/config.h (renamed from keyboards/deemen17/de60fs/config.h)0
-rw-r--r--keyboards/deemen17/de60/r1/keyboard.json (renamed from keyboards/deemen17/de60fs/keyboard.json)4
-rw-r--r--keyboards/deemen17/de60/r1/keymaps/default/keymap.c (renamed from keyboards/deemen17/de60fs/keymaps/default/keymap.c)0
-rw-r--r--keyboards/deemen17/de60/r1/readme.md (renamed from keyboards/deemen17/de60fs/readme.md)8
-rw-r--r--keyboards/deemen17/de60/readme.md17
-rw-r--r--keyboards/delikeeb/flatbread60/keyboard.json1
-rw-r--r--keyboards/delikeeb/vaguettelite/keyboard.json1
-rw-r--r--keyboards/delikeeb/vanana/info.json1
-rw-r--r--keyboards/delikeeb/waaffle/rev3/info.json1
-rw-r--r--keyboards/deltapad/keyboard.json1
-rw-r--r--keyboards/demiurge/keyboard.json1
-rw-r--r--keyboards/deng/djam/keyboard.json1
-rw-r--r--keyboards/deng/thirty/keyboard.json1
-rw-r--r--keyboards/densus/alveus/mx/keyboard.json1
-rw-r--r--keyboards/dichotomy/keyboard.json1
-rw-r--r--keyboards/dk60/keyboard.json1
-rw-r--r--keyboards/dm9records/ergoinu/keyboard.json1
-rw-r--r--keyboards/dm9records/plaid/keymaps/default/keymap.c4
-rw-r--r--keyboards/do60/keyboard.json1
-rw-r--r--keyboards/doio/kb09/keyboard.json1
-rw-r--r--keyboards/doio/kb12/keyboard.json1
-rw-r--r--keyboards/doio/kb19/keyboard.json1
-rw-r--r--keyboards/doio/kb30/keyboard.json1
-rw-r--r--keyboards/doio/kb3x/keyboard.json1
-rw-r--r--keyboards/donutcables/budget96/keyboard.json1
-rw-r--r--keyboards/donutcables/scrabblepad/keyboard.json1
-rw-r--r--keyboards/doppelganger/keyboard.json1
-rw-r--r--keyboards/doro67/multi/keyboard.json1
-rw-r--r--keyboards/doro67/rgb/keyboard.json1
-rw-r--r--keyboards/dp60/keyboard.json1
-rw-r--r--keyboards/draculad/keyboard.json1
-rw-r--r--keyboards/dtisaac/cg108/keyboard.json1
-rw-r--r--keyboards/dtisaac/dosa40rgb/keyboard.json1
-rw-r--r--keyboards/dtisaac/dtisaac01/keyboard.json1
-rw-r--r--keyboards/duck/jetfire/keyboard.json1
-rw-r--r--keyboards/duck/lightsaver/keyboard.json1
-rw-r--r--keyboards/duck/octagon/v1/keyboard.json1
-rw-r--r--keyboards/duck/octagon/v2/keyboard.json1
-rw-r--r--keyboards/duck/orion/v3/keyboard.json1
-rw-r--r--keyboards/duck/tcv3/keyboard.json1
-rw-r--r--keyboards/dumbo/keyboard.json1
-rw-r--r--keyboards/dz60/keyboard.json1
-rw-r--r--keyboards/dztech/bocc/keyboard.json1
-rw-r--r--keyboards/dztech/duo_s/keyboard.json1
-rw-r--r--keyboards/dztech/dz60rgb/info.json1
-rw-r--r--keyboards/dztech/dz60rgb_ansi/info.json1
-rw-r--r--keyboards/dztech/dz60rgb_wkl/info.json1
-rw-r--r--keyboards/dztech/dz64rgb/keyboard.json1
-rw-r--r--keyboards/dztech/dz65rgb/info.json1
-rw-r--r--keyboards/dztech/dz96/keyboard.json1
-rw-r--r--keyboards/dztech/endless80/keyboard.json1
-rw-r--r--keyboards/e88/keyboard.json1
-rw-r--r--keyboards/eason/aeroboard/keyboard.json1
-rw-r--r--keyboards/eason/capsule65/keyboard.json1
-rw-r--r--keyboards/eason/meow65/keyboard.json1
-rw-r--r--keyboards/eason/void65h/keyboard.json1
-rw-r--r--keyboards/eco/info.json1
-rw-r--r--keyboards/edc40/keyboard.json1
-rw-r--r--keyboards/edi/standaside/keyboard.json1
-rw-r--r--keyboards/eek/info.json1
-rw-r--r--keyboards/efreet/keyboard.json1
-rw-r--r--keyboards/ein_60/keyboard.json2
-rw-r--r--keyboards/emi20/keyboard.json1
-rw-r--r--keyboards/emptystring/nqg/keyboard.json1
-rw-r--r--keyboards/eniigmakeyboards/ek60/keyboard.json1
-rw-r--r--keyboards/eniigmakeyboards/ek65/keyboard.json1
-rw-r--r--keyboards/eniigmakeyboards/ek87/keyboard.json1
-rw-r--r--keyboards/epomaker/tide65/keyboard.json1
-rw-r--r--keyboards/era/divine/keyboard.json1
-rw-r--r--keyboards/era/era65/keyboard.json1
-rw-r--r--keyboards/era/linx3/fave65s/keyboard.json1
-rw-r--r--keyboards/era/linx3/n86/keyboard.json1
-rw-r--r--keyboards/era/linx3/n87/keyboard.json1
-rw-r--r--keyboards/era/linx3/n8x/keyboard.json1
-rw-r--r--keyboards/era/sirind/brick65s/keyboard.json1
-rw-r--r--keyboards/era/sirind/chickpad/keyboard.json1
-rw-r--r--keyboards/era/sirind/klein_hs/keyboard.json1
-rw-r--r--keyboards/era/sirind/klein_sd/keyboard.json1
-rw-r--r--keyboards/era/sirind/tomak/keyboard.json1
-rw-r--r--keyboards/era/sirind/tomak79h/keyboard.json1
-rw-r--r--keyboards/era/sirind/tomak79s/keyboard.json1
-rw-r--r--keyboards/esca/getawayvan/keyboard.json1
-rw-r--r--keyboards/esca/getawayvan_f042/keyboard.json1
-rw-r--r--keyboards/eve/meteor/keyboard.json1
-rw-r--r--keyboards/evil80/keyboard.json1
-rw-r--r--keyboards/evolv/keyboard.json1
-rw-r--r--keyboards/evyd13/atom47/rev2/keyboard.json1
-rw-r--r--keyboards/evyd13/atom47/rev3/keyboard.json1
-rw-r--r--keyboards/evyd13/atom47/rev4/keyboard.json1
-rw-r--r--keyboards/evyd13/atom47/rev5/keyboard.json1
-rw-r--r--keyboards/evyd13/eon65/keyboard.json1
-rw-r--r--keyboards/evyd13/eon75/keyboard.json1
-rw-r--r--keyboards/evyd13/eon87/keyboard.json1
-rw-r--r--keyboards/evyd13/eon95/keyboard.json1
-rw-r--r--keyboards/evyd13/fin_pad/keyboard.json1
-rw-r--r--keyboards/evyd13/minitomic/keyboard.json1
-rw-r--r--keyboards/evyd13/nt650/keyboard.json1
-rw-r--r--keyboards/evyd13/nt660/keyboard.json1
-rw-r--r--keyboards/evyd13/nt980/keyboard.json1
-rw-r--r--keyboards/evyd13/omrontkl/keyboard.json1
-rw-r--r--keyboards/evyd13/plain60/keyboard.json1
-rw-r--r--keyboards/evyd13/ta65/keyboard.json1
-rw-r--r--keyboards/evyd13/wonderland/keyboard.json1
-rw-r--r--keyboards/exclusive/e65/keyboard.json1
-rw-r--r--keyboards/exclusive/e6_rgb/keyboard.json1
-rw-r--r--keyboards/exclusive/e6v2/le/keyboard.json1
-rw-r--r--keyboards/exclusive/e6v2/oe/keyboard.json1
-rw-r--r--keyboards/exclusive/e7v1/keyboard.json1
-rw-r--r--keyboards/exclusive/e85/hotswap/keyboard.json1
-rw-r--r--keyboards/exclusive/e85/soldered/keyboard.json1
-rw-r--r--keyboards/exent/keyboard.json1
-rw-r--r--keyboards/eyeohdesigns/babyv/keyboard.json1
-rw-r--r--keyboards/eyeohdesigns/theboulevard/keyboard.json1
-rw-r--r--keyboards/facew/keyboard.json1
-rw-r--r--keyboards/falsonix/fx19/keyboard.json1
-rw-r--r--keyboards/fatotesa/keyboard.json1
-rw-r--r--keyboards/fc660c/keyboard.json1
-rw-r--r--keyboards/fc980c/keyboard.json1
-rw-r--r--keyboards/flehrad/numbrero/keyboard.json1
-rw-r--r--keyboards/flehrad/snagpad/keyboard.json1
-rw-r--r--keyboards/flehrad/tradestation/keyboard.json1
-rw-r--r--keyboards/fluorite/keyboard.json1
-rw-r--r--keyboards/flx/virgo/keyboard.json1
-rw-r--r--keyboards/foostan/cornelius/keyboard.json1
-rw-r--r--keyboards/fortitude60/rev1/keyboard.json1
-rw-r--r--keyboards/foxlab/key65/hotswap/keyboard.json1
-rw-r--r--keyboards/foxlab/key65/universal/keyboard.json1
-rw-r--r--keyboards/foxlab/leaf60/hotswap/keyboard.json1
-rw-r--r--keyboards/foxlab/leaf60/universal/keyboard.json1
-rw-r--r--keyboards/foxlab/time80/keyboard.json1
-rw-r--r--keyboards/foxlab/time_re/hotswap/keyboard.json1
-rw-r--r--keyboards/foxlab/time_re/universal/keyboard.json1
-rw-r--r--keyboards/fs_streampad/keyboard.json3
-rw-r--r--keyboards/ft/mars65/keyboard.json1
-rw-r--r--keyboards/ft/mars80/keyboard.json1
-rw-r--r--keyboards/funky40/keyboard.json1
-rw-r--r--keyboards/gami_studio/lex60/keyboard.json1
-rw-r--r--keyboards/gboards/butterstick/keyboard.json1
-rw-r--r--keyboards/gboards/gergoplex/keyboard.json1
-rw-r--r--keyboards/geekboards/macropad_v2/keyboard.json1
-rw-r--r--keyboards/geekboards/tester/keyboard.json1
-rw-r--r--keyboards/ggkeyboards/genesis/hotswap/keyboard.json1
-rw-r--r--keyboards/ggkeyboards/genesis/solder/keyboard.json1
-rw-r--r--keyboards/gh60/revc/keyboard.json1
-rw-r--r--keyboards/gh60/satan/keyboard.json1
-rw-r--r--keyboards/gh60/v1p3/keyboard.json1
-rw-r--r--keyboards/gh80_3000/keyboard.json1
-rw-r--r--keyboards/ghs/jem/info.json3
-rw-r--r--keyboards/ghs/xls/keyboard.json1
-rw-r--r--keyboards/gkeyboard/gkb_m16/keyboard.json1
-rw-r--r--keyboards/gl516/xr63gl/keyboard.json1
-rw-r--r--keyboards/glenpickle/chimera_ergo/keyboard.json1
-rw-r--r--keyboards/glenpickle/chimera_ls/keyboard.json1
-rw-r--r--keyboards/gon/nerd60/keyboard.json1
-rw-r--r--keyboards/gon/nerdtkl/keyboard.json1
-rw-r--r--keyboards/gopolar/gg86/keyboard.json1
-rw-r--r--keyboards/gray_studio/cod67/keyboard.json1
-rw-r--r--keyboards/gray_studio/hb85/keyboard.json1
-rw-r--r--keyboards/gray_studio/space65/keyboard.json1
-rw-r--r--keyboards/gray_studio/think65/hotswap/keyboard.json1
-rw-r--r--keyboards/gray_studio/think65/solder/keyboard.json1
-rw-r--r--keyboards/grid600/press/keyboard.json1
-rw-r--r--keyboards/gvalchca/ga150/keyboard.json1
-rw-r--r--keyboards/h0oni/deskpad/keyboard.json1
-rw-r--r--keyboards/h0oni/hotduck/keyboard.json1
-rw-r--r--keyboards/hadron/info.json1
-rw-r--r--keyboards/halokeys/elemental75/keyboard.json1
-rw-r--r--keyboards/handwired/108key_trackpoint/keyboard.json1
-rw-r--r--keyboards/handwired/2x5keypad/keyboard.json1
-rw-r--r--keyboards/handwired/3dfoxc/keyboard.json1
-rw-r--r--keyboards/handwired/3dortho14u/rev1/keyboard.json1
-rw-r--r--keyboards/handwired/3dortho14u/rev2/keyboard.json1
-rw-r--r--keyboards/handwired/3dp660/keyboard.json1
-rw-r--r--keyboards/handwired/3dp660_oled/keyboard.json1
-rw-r--r--keyboards/handwired/412_64/keyboard.json1
-rw-r--r--keyboards/handwired/42/keyboard.json1
-rw-r--r--keyboards/handwired/6macro/keyboard.json1
-rw-r--r--keyboards/handwired/aek64/keyboard.json1
-rw-r--r--keyboards/handwired/alcor_dactyl/keyboard.json1
-rw-r--r--keyboards/handwired/aplx2/keyboard.json1
-rw-r--r--keyboards/handwired/arrow_pad/keyboard.json1
-rw-r--r--keyboards/handwired/atreus50/keyboard.json1
-rw-r--r--keyboards/handwired/bdn9_ble/keyboard.json1
-rw-r--r--keyboards/handwired/bigmac/keyboard.json1
-rw-r--r--keyboards/handwired/boss566y/redragon_vara/keyboard.json1
-rw-r--r--keyboards/handwired/brain/keyboard.json1
-rw-r--r--keyboards/handwired/cans12er/keyboard.json1
-rw-r--r--keyboards/handwired/chiron/keyboard.json1
-rw-r--r--keyboards/handwired/ck4x4/keyboard.json1
-rw-r--r--keyboards/handwired/cmd60/keyboard.json1
-rw-r--r--keyboards/handwired/colorlice/keyboard.json1
-rw-r--r--keyboards/handwired/croxsplit44/keyboard.json1
-rw-r--r--keyboards/handwired/curiosity/keyboard.json1
-rw-r--r--keyboards/handwired/d48/keyboard.json1
-rw-r--r--keyboards/handwired/dactyl/keyboard.json1
-rw-r--r--keyboards/handwired/dactyl_cc/keyboard.json4
-rw-r--r--keyboards/handwired/dactyl_kinesis/keyboard.json5
-rw-r--r--keyboards/handwired/dactyl_left/keyboard.json1
-rw-r--r--keyboards/handwired/dactyl_lightcycle/keyboard.json4
-rw-r--r--keyboards/handwired/dactyl_manuform/4x5/keyboard.json5
-rw-r--r--keyboards/handwired/dactyl_manuform/4x5_5/keyboard.json4
-rw-r--r--keyboards/handwired/dactyl_manuform/4x6/keyboard.json5
-rw-r--r--keyboards/handwired/dactyl_manuform/4x6_4_3/keyboard.json4
-rw-r--r--keyboards/handwired/dactyl_manuform/4x6_5/keyboard.json5
-rw-r--r--keyboards/handwired/dactyl_manuform/5x6/keyboard.json5
-rw-r--r--keyboards/handwired/dactyl_manuform/5x6_2_5/keyboard.json5
-rw-r--r--keyboards/handwired/dactyl_manuform/5x6_5/keyboard.json5
-rw-r--r--keyboards/handwired/dactyl_manuform/5x6_6/keyboard.json4
-rw-r--r--keyboards/handwired/dactyl_manuform/5x6_68/keyboard.json5
-rw-r--r--keyboards/handwired/dactyl_manuform/5x7/keyboard.json5
-rw-r--r--keyboards/handwired/dactyl_manuform/5x8/keyboard.json1
-rw-r--r--keyboards/handwired/dactyl_manuform/6x6/info.json1
-rw-r--r--keyboards/handwired/dactyl_manuform/6x6/promicro/keyboard.json4
-rw-r--r--keyboards/handwired/dactyl_manuform/6x6_4/keyboard.json5
-rw-r--r--keyboards/handwired/dactyl_manuform/6x7/keyboard.json5
-rw-r--r--keyboards/handwired/dactyl_maximus/keyboard.json5
-rw-r--r--keyboards/handwired/dactyl_minidox/keyboard.json4
-rw-r--r--keyboards/handwired/dactyl_promicro/keyboard.json5
-rw-r--r--keyboards/handwired/dactyl_rah/keyboard.json4
-rw-r--r--keyboards/handwired/dactyl_tracer/keyboard.json4
-rw-r--r--keyboards/handwired/daishi/keyboard.json1
-rw-r--r--keyboards/handwired/daskeyboard/daskeyboard4/keyboard.json329
-rw-r--r--keyboards/handwired/datahand/keyboard.json1
-rw-r--r--keyboards/handwired/ddg_56/keyboard.json1
-rw-r--r--keyboards/handwired/eagleii/keyboard.json1
-rw-r--r--keyboards/handwired/elrgo_s/keyboard.json1
-rw-r--r--keyboards/handwired/ergocheap/keyboard.json1
-rw-r--r--keyboards/handwired/fc200rt_qmk/keyboard.json1
-rw-r--r--keyboards/handwired/fivethirteen/keyboard.json1
-rw-r--r--keyboards/handwired/gamenum/keyboard.json1
-rw-r--r--keyboards/handwired/hacked_motospeed/keyboard.json1
-rw-r--r--keyboards/handwired/hexon38/keyboard.json1
-rw-r--r--keyboards/handwired/hnah108/keyboard.json1
-rw-r--r--keyboards/handwired/hnah40rgb/keyboard.json2
-rw-r--r--keyboards/handwired/hwpm87/keyboard.json1
-rw-r--r--keyboards/handwired/iso85k/keyboard.json1
-rw-r--r--keyboards/handwired/itstleo9/info.json1
-rw-r--r--keyboards/handwired/jankrp2040dactyl/keyboard.json5
-rw-r--r--keyboards/handwired/jn68m/keyboard.json1
-rw-r--r--keyboards/handwired/jot50/keyboard.json1
-rw-r--r--keyboards/handwired/jotpad16/keyboard.json1
-rw-r--r--keyboards/handwired/jtallbean/split_65/keyboard.json1
-rw-r--r--keyboards/handwired/k8split/keyboard.json1
-rw-r--r--keyboards/handwired/k_numpad17/keyboard.json1
-rw-r--r--keyboards/handwired/kbod/keyboard.json1
-rw-r--r--keyboards/handwired/ks63/keyboard.json1
-rw-r--r--keyboards/handwired/lemonpad/keyboard.json1
-rw-r--r--keyboards/handwired/macroboard/info.json1
-rw-r--r--keyboards/handwired/magicforce61/keyboard.json1
-rw-r--r--keyboards/handwired/magicforce68/keyboard.json1
-rw-r--r--keyboards/handwired/marek128b/ergosplit44/keyboard.json1
-rw-r--r--keyboards/handwired/mechboards_micropad/keyboard.json1
-rw-r--r--keyboards/handwired/minorca/keyboard.json1
-rw-r--r--keyboards/handwired/ms_sculpt_mobile/info.json1
-rw-r--r--keyboards/handwired/myskeeb/keyboard.json1
-rw-r--r--keyboards/handwired/nicekey/keyboard.json1
-rw-r--r--keyboards/handwired/nortontechpad/keyboard.json1
-rw-r--r--keyboards/handwired/not_so_minidox/keyboard.json1
-rw-r--r--keyboards/handwired/novem/keyboard.json1
-rw-r--r--keyboards/handwired/nozbe_macro/keyboard.json1
-rw-r--r--keyboards/handwired/numpad20/keyboard.json1
-rw-r--r--keyboards/handwired/obuwunkunubi/spaget/keyboard.json1
-rw-r--r--keyboards/handwired/onekey/info.json1
-rw-r--r--keyboards/handwired/onekey/keymaps/battery/config.h6
-rw-r--r--keyboards/handwired/onekey/keymaps/battery/keymap.c28
-rw-r--r--keyboards/handwired/onekey/keymaps/battery/keymap.json7
-rw-r--r--keyboards/handwired/onekey/keymaps/battery/rules.mk1
-rw-r--r--keyboards/handwired/onekey/keymaps/via_ci/config.h4
-rw-r--r--keyboards/handwired/onekey/keymaps/via_ci/keymap.c30
-rw-r--r--keyboards/handwired/onekey/keymaps/via_ci/keymap.json7
-rw-r--r--keyboards/handwired/onekey/teensy_32/rules.mk1
-rw-r--r--keyboards/handwired/onekey/teensy_lc/rules.mk2
-rw-r--r--keyboards/handwired/ortho5x13/keyboard.json1
-rw-r--r--keyboards/handwired/ortho5x14/keyboard.json1
-rw-r--r--keyboards/handwired/ortho_brass/keyboard.json1
-rw-r--r--keyboards/handwired/ortho_brass/keymaps/default/keymap.c4
-rw-r--r--keyboards/handwired/osborne1/keyboard.json1
-rw-r--r--keyboards/handwired/p65rgb/keyboard.json1
-rw-r--r--keyboards/handwired/pilcrow/keyboard.json1
-rw-r--r--keyboards/handwired/postageboard/info.json1
-rw-r--r--keyboards/handwired/promethium/config.h5
-rw-r--r--keyboards/handwired/promethium/keyboard.json1
-rw-r--r--keyboards/handwired/promethium/promethium.c17
-rw-r--r--keyboards/handwired/promethium/rules.mk2
-rw-r--r--keyboards/handwired/protype/keyboard.json1
-rw-r--r--keyboards/handwired/pteron/keyboard.json1
-rw-r--r--keyboards/handwired/pteron38/keyboard.json1
-rw-r--r--keyboards/handwired/pteron44/keyboard.json1
-rw-r--r--keyboards/handwired/qc60/proto/keyboard.json1
-rw-r--r--keyboards/handwired/rd_61_qmk/keyboard.json1
-rw-r--r--keyboards/handwired/retro_refit/keyboard.json1
-rw-r--r--keyboards/handwired/riblee_f401/keyboard.json1
-rw-r--r--keyboards/handwired/riblee_f411/keyboard.json1
-rw-r--r--keyboards/handwired/riblee_split/keyboard.json1
-rw-r--r--keyboards/handwired/rs60/keyboard.json1
-rw-r--r--keyboards/handwired/sejin_eat1010r2/keyboard.json1
-rw-r--r--keyboards/handwired/sick68/keyboard.json1
-rw-r--r--keyboards/handwired/skakunm_dactyl/keyboard.json5
-rw-r--r--keyboards/handwired/slash/keyboard.json1
-rw-r--r--keyboards/handwired/snatchpad/keyboard.json1
-rw-r--r--keyboards/handwired/sono1/info.json1
-rw-r--r--keyboards/handwired/space_oddity/keyboard.json1
-rw-r--r--keyboards/handwired/splittest/info.json1
-rw-r--r--keyboards/handwired/splittest/promicro/keyboard.json4
-rw-r--r--keyboards/handwired/splittest/teensy_2/keyboard.json4
-rw-r--r--keyboards/handwired/steamvan/rev1/keyboard.json1
-rw-r--r--keyboards/handwired/stef9998/split_5x7/rev1/keyboard.json1
-rw-r--r--keyboards/handwired/sticc14/keyboard.json1
-rw-r--r--keyboards/handwired/swiftrax/cowfish/keyboard.json1
-rw-r--r--keyboards/handwired/symmetric70_proto/info.json1
-rw-r--r--keyboards/handwired/symmetric70_proto/promicro/info.json4
-rw-r--r--keyboards/handwired/symmetry60/keyboard.json1
-rw-r--r--keyboards/handwired/t111/keyboard.json1
-rw-r--r--keyboards/handwired/terminus_mini/keyboard.json1
-rw-r--r--keyboards/handwired/tkk/keyboard.json1
-rw-r--r--keyboards/handwired/trackpoint/keyboard.json1
-rw-r--r--keyboards/handwired/tractyl_manuform/4x6_right/keyboard.json5
-rw-r--r--keyboards/handwired/tractyl_manuform/5x6_right/arduinomicro/keyboard.json4
-rw-r--r--keyboards/handwired/tractyl_manuform/5x6_right/elite_c/keyboard.json4
-rw-r--r--keyboards/handwired/tractyl_manuform/5x6_right/info.json1
-rw-r--r--keyboards/handwired/tractyl_manuform/5x6_right/teensy2pp/keyboard.json4
-rw-r--r--keyboards/handwired/traveller/keyboard.json1
-rw-r--r--keyboards/handwired/twig/twig50/keyboard.json1
-rw-r--r--keyboards/handwired/unicomp_mini_m/keyboard.json1
-rw-r--r--keyboards/handwired/uthol/info.json1
-rw-r--r--keyboards/handwired/woodpad/keyboard.json1
-rw-r--r--keyboards/handwired/wulkan/keyboard.json1
-rw-r--r--keyboards/handwired/wwa/helios/keyboard.json1
-rw-r--r--keyboards/handwired/wwa/kepler/keyboard.json1
-rw-r--r--keyboards/handwired/wwa/mercury/keyboard.json1
-rw-r--r--keyboards/handwired/wwa/soyuz/keyboard.json1
-rw-r--r--keyboards/handwired/wwa/soyuzxl/keyboard.json1
-rw-r--r--keyboards/handwired/xealous/rev1/keyboard.json1
-rw-r--r--keyboards/handwired/z150/keyboard.json1
-rw-r--r--keyboards/handwired/ziyoulang_k3_mod/keyboard.json3
-rw-r--r--keyboards/hardlineworks/otd_plus/keyboard.json1
-rw-r--r--keyboards/heliar/wm1_hotswap/keyboard.json1
-rw-r--r--keyboards/helix/pico/info.json4
-rw-r--r--keyboards/helix/rev2/info.json4
-rw-r--r--keyboards/helix/rev2/rev2.c2
-rw-r--r--keyboards/helix/rev3_4rows/keyboard.json5
-rw-r--r--keyboards/helix/rev3_4rows/rev3_4rows.c2
-rw-r--r--keyboards/helix/rev3_5rows/keyboard.json5
-rw-r--r--keyboards/helix/rev3_5rows/rev3_5rows.c2
-rw-r--r--keyboards/herevoland/buff75/keyboard.json1
-rw-r--r--keyboards/hfdkb/ac001/keyboard.json1
-rw-r--r--keyboards/hhkb/ansi/info.json1
-rw-r--r--keyboards/hhkb/jp/keyboard.json1
-rw-r--r--keyboards/hhkb/yang/keyboard.json1
-rw-r--r--keyboards/hhkb_lite_2/keyboard.json1
-rw-r--r--keyboards/hillside/46/0_1/keyboard.json1
-rw-r--r--keyboards/hillside/48/0_1/keyboard.json1
-rw-r--r--keyboards/hillside/52/0_1/keyboard.json1
-rw-r--r--keyboards/hineybush/h08_ocelot/keyboard.json1
-rw-r--r--keyboards/hineybush/h10/keyboard.json1
-rw-r--r--keyboards/hineybush/h101/keyboard.json1
-rw-r--r--keyboards/hineybush/h60/keyboard.json1
-rw-r--r--keyboards/hineybush/h65/keyboard.json1
-rw-r--r--keyboards/hineybush/h65_hotswap/keyboard.json1
-rw-r--r--keyboards/hineybush/h660s/keyboard.json1
-rw-r--r--keyboards/hineybush/h75_singa/keyboard.json1
-rw-r--r--keyboards/hineybush/h87_g2/keyboard.json1
-rw-r--r--keyboards/hineybush/h87a/keyboard.json1
-rw-r--r--keyboards/hineybush/h88/keyboard.json1
-rw-r--r--keyboards/hineybush/h88_g2/keyboard.json1
-rw-r--r--keyboards/hineybush/hbcp/keyboard.json1
-rw-r--r--keyboards/hineybush/hineyg80/keyboard.json1
-rw-r--r--keyboards/hineybush/ibis/keyboard.json1
-rw-r--r--keyboards/hineybush/physix/keyboard.json1
-rw-r--r--keyboards/hineybush/sm68/keyboard.json1
-rw-r--r--keyboards/hnahkb/freyr/keyboard.json1
-rw-r--r--keyboards/hnahkb/stella/keyboard.json1
-rw-r--r--keyboards/holyswitch/lightweight65/keyboard.json1
-rw-r--r--keyboards/holyswitch/southpaw75/keyboard.json1
-rw-r--r--keyboards/horrortroll/chinese_pcb/black_e65/keyboard.json1
-rw-r--r--keyboards/horrortroll/chinese_pcb/devil68_pro/keyboard.json1
-rw-r--r--keyboards/horrortroll/handwired_k552/keyboard.json1
-rw-r--r--keyboards/horrortroll/lemon40/keyboard.json1
-rw-r--r--keyboards/horrortroll/nyx/rev1/lib/startup_swirl_anim.h3
-rw-r--r--keyboards/hp69/keyboard.json1
-rw-r--r--keyboards/hs60/v1/info.json1
-rw-r--r--keyboards/hs60/v2/ansi/keyboard.json1
-rw-r--r--keyboards/hs60/v2/hhkb/keyboard.json1
-rw-r--r--keyboards/hs60/v2/iso/keyboard.json1
-rw-r--r--keyboards/hubble/keyboard.json1
-rw-r--r--keyboards/ibm/model_m_4th_gen/overnumpad_1xb/board.h8
-rw-r--r--keyboards/ibm/model_m_4th_gen/overnumpad_1xb/config.h2
-rw-r--r--keyboards/icebreaker/hotswap/keyboard.json239
-rw-r--r--keyboards/icebreaker/hotswap/keymaps/default/keymap.c43
-rw-r--r--keyboards/icebreaker/hotswap/keymaps/default/rules.mk1
-rw-r--r--keyboards/icebreaker/readme.md26
-rw-r--r--keyboards/idobao/id75/v1/keyboard.json1
-rw-r--r--keyboards/idobao/id75/v2/keyboard.json1
-rw-r--r--keyboards/idobao/id80/v2/info.json1
-rw-r--r--keyboards/igloo/keyboard.json1
-rw-r--r--keyboards/illuminati/is0/keyboard.json1
-rw-r--r--keyboards/illusion/rosa/keyboard.json1
-rw-r--r--keyboards/ilumkb/primus75/keyboard.json1
-rw-r--r--keyboards/ilumkb/simpler61/keyboard.json1
-rw-r--r--keyboards/ilumkb/simpler64/keyboard.json1
-rw-r--r--keyboards/ilumkb/volcano660/keyboard.json1
-rw-r--r--keyboards/inett_studio/sqx/hotswap/keyboard.json1
-rw-r--r--keyboards/inett_studio/sqx/universal/keyboard.json1
-rw-r--r--keyboards/inland/kb83/kb83.c2
-rw-r--r--keyboards/inland/mk47/keyboard.json1
-rw-r--r--keyboards/input_club/k_type/keyboard.json1
-rw-r--r--keyboards/irene/keyboard.json1
-rw-r--r--keyboards/iriskeyboards/keyboard.json1
-rw-r--r--keyboards/iron180/keyboard.json1
-rw-r--r--keyboards/j80/keyboard.json1
-rw-r--r--keyboards/jae/j01/keyboard.json1
-rw-r--r--keyboards/jagdpietr/drakon/keyboard.json1
-rw-r--r--keyboards/jaykeeb/aumz_work/info.json1
-rw-r--r--keyboards/jaykeeb/jk60/keyboard.json1
-rw-r--r--keyboards/jaykeeb/jk60rgb/keyboard.json1
-rw-r--r--keyboards/jaykeeb/jk65/keyboard.json1
-rw-r--r--keyboards/jaykeeb/joker/keyboard.json1
-rw-r--r--keyboards/jaykeeb/kamigakushi/keyboard.json3
-rw-r--r--keyboards/jaykeeb/orba/keyboard.json1
-rw-r--r--keyboards/jaykeeb/sebelas/keyboard.json1
-rw-r--r--keyboards/jaykeeb/skyline/keyboard.json1
-rw-r--r--keyboards/jaykeeb/sriwedari70/keyboard.json2
-rw-r--r--keyboards/jaykeeb/tokki/keyboard.json1
-rw-r--r--keyboards/jc65/v32a/keyboard.json1
-rw-r--r--keyboards/jc65/v32u4/keyboard.json1
-rw-r--r--keyboards/jd40/keyboard.json1
-rw-r--r--keyboards/jd45/keyboard.json1
-rw-r--r--keyboards/jels/boaty/keyboard.json1
-rw-r--r--keyboards/jels/jels60/info.json1
-rw-r--r--keyboards/jels/jels88/keyboard.json1
-rw-r--r--keyboards/jian/keymaps/advanced/keymap.c4
-rw-r--r--keyboards/jolofsor/denial75/keyboard.json1
-rw-r--r--keyboards/jukaie/jk01/keyboard.json1
-rw-r--r--keyboards/kabedon/kabedon78s/keyboard.json1
-rw-r--r--keyboards/kabedon/kabedon98e/keyboard.json1
-rw-r--r--keyboards/kagizaraya/chidori/keyboard.json1
-rw-r--r--keyboards/kagizaraya/halberd/keyboard.json1
-rw-r--r--keyboards/kagizaraya/miniaxe/keyboard.json1
-rw-r--r--keyboards/kagizaraya/scythe/keyboard.json1
-rw-r--r--keyboards/kakunpc/business_card/alpha/keyboard.json1
-rw-r--r--keyboards/kakunpc/business_card/beta/keyboard.json1
-rw-r--r--keyboards/kb_elmo/67mk_e/keyboard.json1
-rw-r--r--keyboards/kb_elmo/isolation/keyboard.json1
-rw-r--r--keyboards/kb_elmo/qez/keyboard.json1
-rw-r--r--keyboards/kb_elmo/vertex/keyboard.json1
-rw-r--r--keyboards/kbdfans/bella/rgb/keyboard.json1
-rw-r--r--keyboards/kbdfans/bella/rgb_iso/keyboard.json1
-rw-r--r--keyboards/kbdfans/bella/soldered/keyboard.json1
-rw-r--r--keyboards/kbdfans/boop65/rgb/keyboard.json1
-rw-r--r--keyboards/kbdfans/bounce/75/soldered/keyboard.json1
-rw-r--r--keyboards/kbdfans/jm60/keyboard.json1
-rw-r--r--keyboards/kbdfans/kbd4x/keyboard.json1
-rw-r--r--keyboards/kbdfans/kbd66/keyboard.json1
-rw-r--r--keyboards/kbdfans/kbd67/hotswap/keyboard.json1
-rw-r--r--keyboards/kbdfans/kbd67/mkii_soldered/keyboard.json1
-rw-r--r--keyboards/kbdfans/kbd67/mkiirgb/info.json1
-rw-r--r--keyboards/kbdfans/kbd67/mkiirgb_iso/keyboard.json1
-rw-r--r--keyboards/kbdfans/kbd67/rev1/keyboard.json1
-rw-r--r--keyboards/kbdfans/kbd67/rev2/keyboard.json1
-rw-r--r--keyboards/kbdfans/kbd6x/keyboard.json1
-rw-r--r--keyboards/kbdfans/kbd75/rev1/keyboard.json1
-rw-r--r--keyboards/kbdfans/kbd75/rev2/keyboard.json1
-rw-r--r--keyboards/kbdfans/kbd75rgb/keyboard.json1
-rw-r--r--keyboards/kbdfans/kbd8x/keyboard.json1
-rw-r--r--keyboards/kbdfans/kbdmini/keyboard.json1
-rw-r--r--keyboards/kbdfans/maja/keyboard.json1
-rw-r--r--keyboards/kbdfans/maja_soldered/keyboard.json1
-rw-r--r--keyboards/kbdfans/niu_mini/keyboard.json1
-rw-r--r--keyboards/kbdfans/odin/rgb/keyboard.json1
-rw-r--r--keyboards/kbdfans/odin/soldered/keyboard.json1
-rw-r--r--keyboards/kbdfans/odin/v2/keyboard.json1
-rw-r--r--keyboards/kbdfans/odinmini/keyboard.json1
-rw-r--r--keyboards/kbdfans/phaseone/keyboard.json1
-rw-r--r--keyboards/kbdfans/tiger80/keyboard.json1
-rw-r--r--keyboards/kc60/keyboard.json1
-rw-r--r--keyboards/kc60se/keyboard.json1
-rw-r--r--keyboards/keebformom/keyboard.json1
-rw-r--r--keyboards/keebio/dilly/keyboard.json1
-rw-r--r--keyboards/keebmonkey/kbmg68/keyboard.json1
-rw-r--r--keyboards/keebsforall/freebird60/keyboard.json1
-rw-r--r--keyboards/keebsforall/freebird75/keyboard.json1
-rwxr-xr-xkeyboards/keebwerk/mega/ansi/keyboard.json1
-rw-r--r--keyboards/keebwerk/nano_slider/keyboard.json1
-rw-r--r--keyboards/keebzdotnet/fme/keyboard.json1
-rw-r--r--keyboards/kelwin/utopia88/keyboard.json1
-rw-r--r--keyboards/keybage/radpad/keyboard.json1
-rw-r--r--keyboards/keybee/keybee65/keyboard.json1
-rw-r--r--keyboards/keyboardio/atreus/keyboard.json1
-rw-r--r--keyboards/keycapsss/3w6_2040/keyboard.json1
-rw-r--r--keyboards/keychron/c1_pro_v2/board.h8
-rw-r--r--keyboards/keychron/c1_pro_v2/mcuconf.h3
-rw-r--r--keyboards/keychron/c2_pro_v2/board.h8
-rw-r--r--keyboards/keychron/c2_pro_v2/mcuconf.h3
-rw-r--r--keyboards/keychron/c3_pro/board.h8
-rw-r--r--keyboards/keychron/c3_pro/mcuconf.h3
-rw-r--r--keyboards/keycult/keycult1800/keyboard.json3
-rw-r--r--keyboards/keycult/keycult1800/keymaps/default/keymap.c4
-rw-r--r--keyboards/keyhive/honeycomb/keyboard.json1
-rw-r--r--keyboards/keyhive/lattice60/keyboard.json1
-rw-r--r--keyboards/keyhive/navi10/info.json1
-rw-r--r--keyboards/keyhive/southpole/keyboard.json1
-rw-r--r--keyboards/keyhive/ut472/keyboard.json1
-rw-r--r--keyboards/keyprez/bison/keyboard.json1
-rw-r--r--keyboards/keyprez/corgi/keyboard.json1
-rw-r--r--keyboards/keyprez/rhino/keyboard.json1
-rw-r--r--keyboards/keyprez/unicorn/keyboard.json1
-rw-r--r--keyboards/keysofkings/twokey/keyboard.json1
-rw-r--r--keyboards/keyspensory/kp60/keyboard.json1
-rw-r--r--keyboards/keyten/aperture/keyboard.json1
-rw-r--r--keyboards/keyten/kt3700/keyboard.json1
-rw-r--r--keyboards/keyten/kt60_m/keyboard.json1
-rw-r--r--keyboards/keyten/kt60hs_t/info.json14
-rw-r--r--keyboards/keyten/kt60hs_t/readme.md27
-rw-r--r--keyboards/keyten/kt60hs_t/v1/keyboard.json (renamed from keyboards/keyten/kt60hs_t/keyboard.json)82
-rw-r--r--keyboards/keyten/kt60hs_t/v1/readme.md29
-rw-r--r--keyboards/keyten/kt60hs_t/v2/keyboard.json282
-rw-r--r--keyboards/keyten/kt60hs_t/v2/readme.md29
-rw-r--r--keyboards/kezewa/enter67/keyboard.json1
-rw-r--r--keyboards/kezewa/enter80/keyboard.json1
-rw-r--r--keyboards/kibou/fukuro/keyboard.json1
-rw-r--r--keyboards/kikkou/keyboard.json1
-rw-r--r--keyboards/kinesis/info.json1
-rw-r--r--keyboards/kineticlabs/emu/hotswap/keyboard.json1
-rw-r--r--keyboards/kineticlabs/emu/soldered/keyboard.json1
-rw-r--r--keyboards/kingly_keys/ave/ortho/keyboard.json1
-rw-r--r--keyboards/kingly_keys/ave/staggered/keyboard.json1
-rw-r--r--keyboards/kingly_keys/little_foot/keyboard.json1
-rw-r--r--keyboards/kingly_keys/romac/keyboard.json1
-rw-r--r--keyboards/kingly_keys/romac_plus/keyboard.json1
-rw-r--r--keyboards/kingly_keys/smd_milk/keyboard.json1
-rw-r--r--keyboards/kira/kira75/keyboard.json1
-rw-r--r--keyboards/kira/kira80/keyboard.json1
-rw-r--r--keyboards/kk/65/keyboard.json1
-rw-r--r--keyboards/knobgoblin/keyboard.json1
-rw-r--r--keyboards/kona_classic/keyboard.json1
-rw-r--r--keyboards/kopibeng/xt60/keyboard.json1
-rw-r--r--keyboards/kopibeng/xt60_singa/keyboard.json1
-rw-r--r--keyboards/kopibeng/xt65/keyboard.json1
-rw-r--r--keyboards/kopibeng/xt8x/keyboard.json1
-rw-r--r--keyboards/kprepublic/bm16a/v1/keyboard.json1
-rw-r--r--keyboards/kprepublic/bm16a/v2/keyboard.json1
-rw-r--r--keyboards/kprepublic/bm16s/keyboard.json1
-rw-r--r--keyboards/kprepublic/bm40hsrgb/rev1/keyboard.json1
-rw-r--r--keyboards/kprepublic/bm40hsrgb/rev2/keyboard.json1
-rw-r--r--keyboards/kprepublic/bm43a/keyboard.json1
-rwxr-xr-xkeyboards/kprepublic/bm43hsrgb/keyboard.json1
-rw-r--r--keyboards/kprepublic/bm60hsrgb/rev1/keyboard.json1
-rw-r--r--keyboards/kprepublic/bm60hsrgb/rev2/keyboard.json1
-rw-r--r--keyboards/kprepublic/bm60hsrgb_ec/rev1/keyboard.json1
-rw-r--r--keyboards/kprepublic/bm60hsrgb_ec/rev2/keyboard.json1
-rw-r--r--keyboards/kprepublic/bm60hsrgb_iso/rev1/keyboard.json1
-rw-r--r--keyboards/kprepublic/bm60hsrgb_iso/rev2/keyboard.json1
-rw-r--r--keyboards/kprepublic/bm60hsrgb_poker/rev1/keyboard.json1
-rw-r--r--keyboards/kprepublic/bm60hsrgb_poker/rev2/keyboard.json1
-rw-r--r--keyboards/kprepublic/bm65hsrgb/rev1/keyboard.json1
-rw-r--r--keyboards/kprepublic/bm65hsrgb_iso/rev1/keyboard.json1
-rw-r--r--keyboards/kprepublic/bm68hsrgb/rev1/keyboard.json1
-rw-r--r--keyboards/kprepublic/bm68hsrgb/rev2/keyboard.json1
-rw-r--r--keyboards/kprepublic/bm80hsrgb/keyboard.json1
-rw-r--r--keyboards/kprepublic/bm80v2/keyboard.json1
-rw-r--r--keyboards/kprepublic/bm80v2_iso/keyboard.json1
-rw-r--r--keyboards/kprepublic/bm980hsrgb/keyboard.json1
-rw-r--r--keyboards/kprepublic/cospad/keyboard.json1
-rw-r--r--keyboards/kprepublic/cstc40/info.json1
-rw-r--r--keyboards/kprepublic/jj40/rev1/keyboard.json1
-rw-r--r--keyboards/kprepublic/jj4x4/keyboard.json1
-rw-r--r--keyboards/kprepublic/jj50/rev1/keyboard.json1
-rw-r--r--keyboards/kprepublic/jj50/rev2/keyboard.json2
-rw-r--r--keyboards/ktec/daisy/keyboard.json1
-rw-r--r--keyboards/ktec/staryu/keyboard.json1
-rw-r--r--keyboards/kumaokobo/kudox_game/info.json1
-rw-r--r--keyboards/kuro/kuro65/keyboard.json1
-rw-r--r--keyboards/kv/revt/keyboard.json1
-rw-r--r--keyboards/kwstudio/pisces/keyboard.json1
-rw-r--r--keyboards/kwstudio/scorpio/keyboard.json1
-rw-r--r--keyboards/kwstudio/scorpio_rev2/keyboard.json1
-rw-r--r--keyboards/labbe/labbeminiv1/keyboard.json1
-rw-r--r--keyboards/labyrinth75/keyboard.json1
-rw-r--r--keyboards/laneware/lpad/keyboard.json1
-rw-r--r--keyboards/laneware/lw67/keyboard.json1
-rw-r--r--keyboards/laneware/lw75/keyboard.json1
-rw-r--r--keyboards/laneware/macro1/keyboard.json1
-rw-r--r--keyboards/laser_ninja/pumpkinpad/keyboard.json1
-rw-r--r--keyboards/latincompass/latin17rgb/keyboard.json1
-rw-r--r--keyboards/latincompass/latin47ble/keyboard.json1
-rw-r--r--keyboards/latincompass/latin60rgb/keyboard.json1
-rw-r--r--keyboards/latincompass/latin64ble/keyboard.json1
-rw-r--r--keyboards/latincompass/latin6rgb/keyboard.json1
-rw-r--r--keyboards/leafcutterlabs/bigknob/keyboard.json1
-rw-r--r--keyboards/leeku/finger65/keyboard.json1
-rw-r--r--keyboards/lets_split/info.json1
-rw-r--r--keyboards/lfkeyboards/lfk78/revb/keyboard.json1
-rw-r--r--keyboards/lfkeyboards/lfk78/revc/keyboard.json1
-rw-r--r--keyboards/lfkeyboards/lfk78/revj/keyboard.json1
-rw-r--r--keyboards/lfkeyboards/lfk87/info.json1
-rw-r--r--keyboards/lfkeyboards/lfkpad/keyboard.json1
-rw-r--r--keyboards/lfkeyboards/mini1800/info.json1
-rw-r--r--keyboards/lfkeyboards/smk65/info.json1
-rw-r--r--keyboards/lily58/lite_rev3/keyboard.json1
-rw-r--r--keyboards/lily58/r2g/keyboard.json1
-rw-r--r--keyboards/lily58/rev1/keyboard.json1
-rw-r--r--keyboards/linworks/fave104/keyboard.json1
-rw-r--r--keyboards/linworks/fave60/keyboard.json1
-rw-r--r--keyboards/linworks/fave60a/keyboard.json1
-rw-r--r--keyboards/linworks/fave65h/keyboard.json1
-rw-r--r--keyboards/linworks/fave84h/keyboard.json1
-rw-r--r--keyboards/linworks/fave87h/keyboard.json1
-rw-r--r--keyboards/linworks/favepada/keyboard.json1
-rw-r--r--keyboards/littlealby/mute/keyboard.json1
-rw-r--r--keyboards/lm_keyboard/lm60n/keyboard.json1
-rw-r--r--keyboards/lxxt/keyboard.json3
-rw-r--r--keyboards/lyso1/lefishe/keyboard.json1
-rw-r--r--keyboards/lz/erghost/keyboard.json1
-rw-r--r--keyboards/m10a/keyboard.json1
-rw-r--r--keyboards/magic_force/mf34/keyboard.json1
-rw-r--r--keyboards/makrosu/keyboard.json1
-rw-r--r--keyboards/malevolti/lyra/rev1/keyboard.json1
-rw-r--r--keyboards/malevolti/superlyra/rev1/keyboard.json1
-rw-r--r--keyboards/maple_computing/6ball/keyboard.json1
-rwxr-xr-xkeyboards/maple_computing/c39/keyboard.json1
-rw-r--r--keyboards/maple_computing/ivy/rev1/keyboard.json1
-rw-r--r--keyboards/maple_computing/jnao/keyboard.json1
-rw-r--r--keyboards/maple_computing/launchpad/rev1/keyboard.json1
-rw-r--r--keyboards/maple_computing/lets_split_eh/keyboard.json1
-rw-r--r--keyboards/maple_computing/minidox/rev1/keyboard.json1
-rw-r--r--keyboards/maple_computing/the_ruler/keyboard.json1
-rw-r--r--keyboards/marcopad/keyboard.json3
-rw-r--r--keyboards/mariorion_v25/prod/keyboard.json1
-rw-r--r--keyboards/mariorion_v25/proto/keyboard.json1
-rw-r--r--keyboards/matrix/abelx/keyboard.json1
-rw-r--r--keyboards/matrix/cain_re/keyboard.json1
-rw-r--r--keyboards/matrix/falcon/config.h1
-rw-r--r--keyboards/matrix/falcon/keyboard.json1
-rw-r--r--keyboards/matrix/m12og/rev1/keyboard.json1
-rw-r--r--keyboards/matrix/m12og/rev2/keyboard.json1
-rw-r--r--keyboards/matrix/m20add/keyboard.json1
-rw-r--r--keyboards/matrix/me/keyboard.json1
-rw-r--r--keyboards/matrix/noah/keyboard.json1
-rw-r--r--keyboards/maxipad/info.json1
-rw-r--r--keyboards/mazestudio/jocker/keyboard.json1
-rw-r--r--keyboards/mb44/keyboard.json1
-rw-r--r--keyboards/mechanickeys/miniashen40/keyboard.json1
-rw-r--r--keyboards/mechanickeys/undead60m/keyboard.json1
-rw-r--r--keyboards/mechboards/crkbd/pro/keyboard.json3
-rw-r--r--keyboards/mechboards/lily58/pro/keyboard.json3
-rw-r--r--keyboards/mechboards/sofle/pro/keyboard.json3
-rw-r--r--keyboards/mechbrewery/mb65h/keyboard.json1
-rw-r--r--keyboards/mechbrewery/mb65s/keyboard.json1
-rw-r--r--keyboards/mechkeys/acr60/keyboard.json1
-rw-r--r--keyboards/mechkeys/alu84/keyboard.json1
-rw-r--r--keyboards/mechkeys/espectro/keyboard.json1
-rw-r--r--keyboards/mechkeys/mechmini/v1/keyboard.json1
-rw-r--r--keyboards/mechkeys/mk60/keyboard.json1
-rw-r--r--keyboards/mechlovin/adelais/info.json1
-rw-r--r--keyboards/mechlovin/delphine/info.json1
-rw-r--r--keyboards/mechlovin/foundation/keyboard.json1
-rw-r--r--keyboards/mechlovin/hannah60rgb/rev1/keyboard.json1
-rw-r--r--keyboards/mechlovin/hannah60rgb/rev2/keyboard.json1
-rw-r--r--keyboards/mechlovin/hannah65/rev1/haus/keyboard.json1
-rw-r--r--keyboards/mechlovin/hannah910/rev1/keyboard.json1
-rw-r--r--keyboards/mechlovin/hannah910/rev2/keyboard.json1
-rw-r--r--keyboards/mechlovin/hannah910/rev3/keyboard.json1
-rw-r--r--keyboards/mechlovin/hex4b/info.json1
-rw-r--r--keyboards/mechlovin/hex6c/keyboard.json1
-rw-r--r--keyboards/mechlovin/infinity87/rev1/rogue87/keyboard.json1
-rw-r--r--keyboards/mechlovin/infinity87/rev1/rouge87/keyboard.json1
-rw-r--r--keyboards/mechlovin/infinity87/rev1/standard/keyboard.json1
-rw-r--r--keyboards/mechlovin/infinity87/rev2/keyboard.json1
-rw-r--r--keyboards/mechlovin/infinity87/rgb_rev1/keyboard.json1
-rw-r--r--keyboards/mechlovin/infinity875/keyboard.json1
-rw-r--r--keyboards/mechlovin/infinity88/keyboard.json1
-rw-r--r--keyboards/mechlovin/infinityce/keyboard.json1
-rw-r--r--keyboards/mechlovin/jay60/keyboard.json1
-rw-r--r--keyboards/mechlovin/kanu/keyboard.json1
-rw-r--r--keyboards/mechlovin/kay60/keyboard.json1
-rw-r--r--keyboards/mechlovin/kay65/keyboard.json1
-rw-r--r--keyboards/mechlovin/mechlovin9/info.json1
-rw-r--r--keyboards/mechlovin/olly/bb/keyboard.json1
-rw-r--r--keyboards/mechlovin/olly/jf/info.json1
-rw-r--r--keyboards/mechlovin/olly/octagon/keyboard.json752
-rw-r--r--keyboards/mechlovin/olly/octagon/keymaps/default/keymap.c6
-rw-r--r--keyboards/mechlovin/olly/octagon/matrix_diagram.md26
-rw-r--r--keyboards/mechlovin/olly/orion/keyboard.json1
-rw-r--r--keyboards/mechlovin/pisces/keyboard.json1
-rw-r--r--keyboards/mechlovin/serratus/keyboard.json1
-rw-r--r--keyboards/mechlovin/th1800/keyboard.json1
-rw-r--r--keyboards/mechlovin/zed1800/info.json1
-rw-r--r--keyboards/mechlovin/zed60/keyboard.json1
-rw-r--r--keyboards/mechlovin/zed65/mono_led/keyboard.json1
-rw-r--r--keyboards/mechlovin/zed65/no_backlight/cor65/keyboard.json1
-rw-r--r--keyboards/mechlovin/zed65/no_backlight/retro66/keyboard.json1
-rw-r--r--keyboards/mechlovin/zed65/no_backlight/wearhaus66/keyboard.json1
-rw-r--r--keyboards/mechwild/bde/info.json3
-rw-r--r--keyboards/mechwild/bde/rev2/keyboard.json1
-rw-r--r--keyboards/mechwild/sugarglider/info.json2
-rw-r--r--keyboards/meetlab/kafka60/keyboard.json1
-rw-r--r--keyboards/meetlab/kafka68/keyboard.json1
-rw-r--r--keyboards/meetlab/kafkasplit/keyboard.json1
-rw-r--r--keyboards/meetlab/kalice/keyboard.json1
-rw-r--r--keyboards/meetlab/rena/keyboard.json1
-rw-r--r--keyboards/mehkee96/keyboard.json1
-rwxr-xr-xkeyboards/melgeek/mach80/info.json1
-rw-r--r--keyboards/melgeek/mj61/info.json1
-rw-r--r--keyboards/melgeek/mj63/info.json1
-rw-r--r--keyboards/melgeek/mj64/info.json1
-rw-r--r--keyboards/melgeek/mj65/rev3/keyboard.json1
-rwxr-xr-xkeyboards/melgeek/mj6xy/info.json1
-rwxr-xr-xkeyboards/melgeek/mojo68/rev1/keyboard.json1
-rw-r--r--keyboards/melgeek/mojo75/rev1/keyboard.json1
-rw-r--r--keyboards/melgeek/tegic/rev1/keyboard.json1
-rw-r--r--keyboards/melgeek/z70ultra/rev1/keyboard.json1
-rw-r--r--keyboards/meme/keyboard.json1
-rw-r--r--keyboards/merge/iso_macro/keyboard.json1
-rw-r--r--keyboards/mexsistor/ludmila/keyboard.json1
-rw-r--r--keyboards/miller/gm862/keyboard.json1
-rw-r--r--keyboards/millet/doksin/keyboard.json1
-rw-r--r--keyboards/mincedshon/ecila/keyboard.json1
-rw-r--r--keyboards/minimacro5/keyboard.json1
-rw-r--r--keyboards/mint60/keyboard.json1
-rw-r--r--keyboards/misterknife/knife66/keyboard.json1
-rw-r--r--keyboards/misterknife/knife66_iso/keyboard.json1
-rw-r--r--keyboards/mitosis/keyboard.json1
-rw-r--r--keyboards/miuni32/keyboard.json1
-rw-r--r--keyboards/mk65/keyboard.json3
-rw-r--r--keyboards/mlego/m65/rev1/keyboard.json1
-rw-r--r--keyboards/mlego/m65/rev2/keyboard.json1
-rw-r--r--keyboards/mlego/m65/rev3/keyboard.json1
-rw-r--r--keyboards/mlego/m65/rev4/keyboard.json1
-rw-r--r--keyboards/mmkzoo65/keyboard.json1
-rw-r--r--keyboards/mode/m256ws/keyboard.json1
-rw-r--r--keyboards/mode/m60h/keyboard.json1
-rw-r--r--keyboards/mode/m60h_f/keyboard.json1
-rw-r--r--keyboards/mode/m60s/keyboard.json1
-rw-r--r--keyboards/mode/m65ha_alpha/keyboard.json1
-rw-r--r--keyboards/mode/m65hi_alpha/keyboard.json1
-rw-r--r--keyboards/mode/m65s/keyboard.json1
-rw-r--r--keyboards/mode/m75h/keyboard.json1
-rw-r--r--keyboards/mode/m75s/keyboard.json1
-rw-r--r--keyboards/mode/m80v1/m80h/keyboard.json1
-rw-r--r--keyboards/mode/m80v1/m80s/keyboard.json1
-rw-r--r--keyboards/mokey/ginkgo65/keyboard.json1
-rw-r--r--keyboards/mokey/ginkgo65hot/keyboard.json1
-rw-r--r--keyboards/mokey/ibis80/keyboard.json1
-rw-r--r--keyboards/mokey/luckycat70/keyboard.json1
-rw-r--r--keyboards/mokey/mokey12x2/keyboard.json1
-rw-r--r--keyboards/mokey/mokey63/keyboard.json1
-rw-r--r--keyboards/mokey/mokey64/keyboard.json1
-rw-r--r--keyboards/mokey/xox70/keyboard.json1
-rw-r--r--keyboards/mokey/xox70hot/keyboard.json1
-rw-r--r--keyboards/moky/moky67/keyboard.json1
-rw-r--r--keyboards/moky/moky88/keyboard.json1
-rw-r--r--keyboards/momoka_ergo/keyboard.json1
-rw-r--r--keyboards/momokai/aurora/keyboard.json2
-rw-r--r--keyboards/momokai/tap_duo/keyboard.json2
-rw-r--r--keyboards/momokai/tap_trio/keyboard.json2
-rw-r--r--keyboards/monarch/keyboard.json1
-rw-r--r--keyboards/monoflex60/keyboard.json1
-rw-r--r--keyboards/monsgeek/m1/m1.c2
-rw-r--r--keyboards/monsgeek/m3/m3.c2
-rw-r--r--keyboards/mothwing/keyboard.json1
-rw-r--r--keyboards/mountainblocks/mb17/keyboard.json1
-rw-r--r--keyboards/mountainmechdesigns/teton_78/keyboard.json1
-rw-r--r--keyboards/ms_sculpt/keyboard.json1
-rw-r--r--keyboards/mss_studio/m63_rgb/keyboard.json1
-rw-r--r--keyboards/mss_studio/m64_rgb/keyboard.json1
-rw-r--r--keyboards/mt/blocked65/keyboard.json1
-rw-r--r--keyboards/mt/mt40/keyboard.json1
-rw-r--r--keyboards/mt/mt64rgb/keyboard.json1
-rw-r--r--keyboards/mt/mt84/keyboard.json1
-rw-r--r--keyboards/mt/split75/keyboard.json1
-rw-r--r--keyboards/murcielago/rev1/keyboard.json1
-rw-r--r--keyboards/mwstudio/mmk_3/keyboard.json1
-rw-r--r--keyboards/mwstudio/mw65_black/keyboard.json1
-rw-r--r--keyboards/mwstudio/mw65_rgb/keyboard.json1
-rw-r--r--keyboards/mwstudio/mw660/keyboard.json1
-rw-r--r--keyboards/mwstudio/mw75/keyboard.json1
-rw-r--r--keyboards/mwstudio/mw75r2/keyboard.json1
-rw-r--r--keyboards/mwstudio/mw80/keyboard.json3
-rw-r--r--keyboards/mykeyclub/jris65/hotswap/keyboard.json1
-rw-r--r--keyboards/nacly/splitreus62/keyboard.json1
-rw-r--r--keyboards/nacly/ua62/keyboard.json1
-rw-r--r--keyboards/navi60/keyboard.json1
-rw-r--r--keyboards/ncc1701kb/keyboard.json1
-rw-r--r--keyboards/nek_type_a/keyboard.json1
-rw-r--r--keyboards/nemui/keyboard.json1
-rw-r--r--keyboards/neokeys/g67/element_hs/keyboard.json1
-rw-r--r--keyboards/neokeys/g67/hotswap/keyboard.json1
-rw-r--r--keyboards/neokeys/g67/soldered/keyboard.json1
-rw-r--r--keyboards/neson_design/700e/keyboard.json1
-rw-r--r--keyboards/neson_design/810e/board.h8
-rw-r--r--keyboards/neson_design/810e/config.h21
-rw-r--r--keyboards/neson_design/810e/keyboard.json1
-rw-r--r--keyboards/neson_design/n6/keyboard.json1
-rw-r--r--keyboards/neson_design/nico/keyboard.json1
-rw-r--r--keyboards/newgame40/keyboard.json1
-rw-r--r--keyboards/nibell/micropad4x4/keyboard.json1
-rw-r--r--keyboards/nibiria/stream15/keyboard.json1
-rw-r--r--keyboards/nightly_boards/adellein/keyboard.json1
-rw-r--r--keyboards/nightly_boards/alter/rev1/keyboard.json1
-rw-r--r--keyboards/nightly_boards/alter_lite/keyboard.json1
-rw-r--r--keyboards/nightly_boards/conde60/keyboard.json1
-rw-r--r--keyboards/nightly_boards/n2/keyboard.json1
-rw-r--r--keyboards/nightly_boards/n40_o/keyboard.json1
-rw-r--r--keyboards/nightly_boards/n60_s/keyboard.json1
-rw-r--r--keyboards/nightly_boards/n87/keyboard.json1
-rw-r--r--keyboards/nightly_boards/n9/keyboard.json1
-rw-r--r--keyboards/nightly_boards/octopad/keyboard.json1
-rw-r--r--keyboards/nightly_boards/octopadplus/keyboard.json3
-rw-r--r--keyboards/nightly_boards/paraluman/keyboard.json1
-rw-r--r--keyboards/ning/tiny_board/tb16_rgb/keyboard.json1
-rw-r--r--keyboards/nix_studio/lilith/board.h8
-rw-r--r--keyboards/nix_studio/n60_a/keyboard.json1
-rw-r--r--keyboards/nix_studio/oxalys80/keyboard.json1
-rwxr-xr-xkeyboards/novelkeys/nk65/info.json1
-rw-r--r--keyboards/novelkeys/novelpad/keyboard.json1
-rw-r--r--keyboards/noxary/220/keyboard.json1
-rw-r--r--keyboards/noxary/260/keyboard.json1
-rw-r--r--keyboards/noxary/268_2/keyboard.json1
-rw-r--r--keyboards/noxary/268_2_rgb/keyboard.json1
-rw-r--r--keyboards/noxary/280/keyboard.json1
-rw-r--r--keyboards/noxary/378/keyboard.json1
-rw-r--r--keyboards/noxary/valhalla/keyboard.json1
-rw-r--r--keyboards/noxary/valhalla_v2/keyboard.json1
-rw-r--r--keyboards/noxary/x268/keyboard.json1
-rw-r--r--keyboards/numatreus/keyboard.json1
-rw-r--r--keyboards/obosob/arch_36/keyboard.json1
-rw-r--r--keyboards/ocean/gin_v2/keyboard.json1
-rw-r--r--keyboards/ocean/slamz/keyboard.json1
-rw-r--r--keyboards/ocean/stealth/keyboard.json1
-rw-r--r--keyboards/ocean/wang_ergo/keyboard.json1
-rw-r--r--keyboards/ocean/wang_v2/keyboard.json1
-rw-r--r--keyboards/odelia/keyboard.json1
-rw-r--r--keyboards/ogre/ergo_single/keyboard.json1
-rw-r--r--keyboards/ogre/ergo_split/keyboard.json1
-rw-r--r--keyboards/ok60/keyboard.json1
-rw-r--r--keyboards/omkbd/ergodash/mini/keyboard.json1
-rw-r--r--keyboards/omkbd/ergodash/rev1/keyboard.json1
-rw-r--r--keyboards/omkbd/runner3680/3x6/keyboard.json1
-rw-r--r--keyboards/omkbd/runner3680/3x7/keyboard.json1
-rw-r--r--keyboards/omkbd/runner3680/3x8/keyboard.json1
-rw-r--r--keyboards/omkbd/runner3680/4x6/keyboard.json1
-rw-r--r--keyboards/omkbd/runner3680/4x7/keyboard.json1
-rw-r--r--keyboards/omkbd/runner3680/4x8/keyboard.json1
-rw-r--r--keyboards/omkbd/runner3680/5x6/keyboard.json1
-rw-r--r--keyboards/omkbd/runner3680/5x6_5x8/keyboard.json1
-rw-r--r--keyboards/omkbd/runner3680/5x7/keyboard.json1
-rw-r--r--keyboards/omkbd/runner3680/5x8/keyboard.json1
-rw-r--r--keyboards/omnikeyish/dynamic_macro.c1
-rw-r--r--keyboards/orange75/keyboard.json1
-rw-r--r--keyboards/org60/keyboard.json1
-rw-r--r--keyboards/owlab/jelly_evolv/info.json1
-rw-r--r--keyboards/owlab/spring/keyboard.json1
-rw-r--r--keyboards/owlab/suit80/ansi/keyboard.json1
-rw-r--r--keyboards/owlab/suit80/iso/keyboard.json1
-rw-r--r--keyboards/p3d/eu_isolation/keyboard.json1
-rw-r--r--keyboards/p3d/q4z/keyboard.json1
-rw-r--r--keyboards/p3d/spacey/keyboard.json1
-rw-r--r--keyboards/p3d/synapse/keyboard.json1
-rw-r--r--keyboards/pabile/p20/info.json1
-rw-r--r--keyboards/panc40/keyboard.json1
-rw-r--r--keyboards/panc60/keyboard.json1
-rw-r--r--keyboards/papercranekeyboards/gerald65/keyboard.json1
-rw-r--r--keyboards/pauperboards/brick/keyboard.json1
-rw-r--r--keyboards/pdxkbc/keyboard.json1
-rw-r--r--keyboards/pearlboards/atlas/keyboard.json1
-rw-r--r--keyboards/pearlboards/pandora/keyboard.json1
-rw-r--r--keyboards/pearlboards/pearl/keyboard.json1
-rw-r--r--keyboards/pearlboards/zeus/keyboard.json1
-rw-r--r--keyboards/pearlboards/zeuspad/keyboard.json1
-rw-r--r--keyboards/pegasus/keyboard.json1
-rw-r--r--keyboards/percent/booster/keyboard.json1
-rw-r--r--keyboards/percent/canoe/keyboard.json1
-rw-r--r--keyboards/percent/canoe_gen2/keyboard.json1
-rw-r--r--keyboards/percent/skog/keyboard.json1
-rw-r--r--keyboards/percent/skog_lite/keyboard.json1
-rw-r--r--keyboards/phase_studio/titan65/hotswap/keyboard.json1
-rw-r--r--keyboards/phase_studio/titan65/soldered/keyboard.json1
-rw-r--r--keyboards/phdesign/phac/keyboard.json1
-rw-r--r--keyboards/phentech/rpk_001/keyboard.json1
-rw-r--r--keyboards/pimentoso/paddino02/rev1/keyboard.json1
-rw-r--r--keyboards/pimentoso/paddino02/rev2/left/keyboard.json1
-rw-r--r--keyboards/pimentoso/paddino02/rev2/right/keyboard.json1
-rw-r--r--keyboards/pinky/3/keyboard.json1
-rw-r--r--keyboards/pinky/4/keyboard.json1
-rw-r--r--keyboards/pixelspace/capsule65i/keyboard.json1
-rw-r--r--keyboards/pixelspace/shadow80/keyboard.json1
-rw-r--r--keyboards/pkb65/keyboard.json1
-rw-r--r--keyboards/planck/keymaps/default/keymap.c4
-rw-r--r--keyboards/planck/rev7/keymaps/default/keymap.c4
-rw-r--r--keyboards/playkbtw/ca66/keyboard.json1
-rw-r--r--keyboards/playkbtw/helen80/keyboard.json1
-rw-r--r--keyboards/playkbtw/pk60/keyboard.json1
-rw-r--r--keyboards/playkbtw/pk64rgb/keyboard.json1
-rw-r--r--keyboards/plume/plume65/keyboard.json1
-rw-r--r--keyboards/plut0nium/0x3e/keyboard.json1
-rw-r--r--keyboards/plywrks/ahgase/keyboard.json1
-rw-r--r--keyboards/plywrks/allaro/keyboard.json3
-rw-r--r--keyboards/plywrks/ji_eun/keyboard.json1
-rw-r--r--keyboards/plywrks/lune/keyboard.json1
-rw-r--r--keyboards/plywrks/ply8x/hotswap/config.h (renamed from keyboards/plywrks/ply8x/config.h)0
-rw-r--r--keyboards/plywrks/ply8x/hotswap/halconf.h (renamed from keyboards/plywrks/ply8x/halconf.h)0
-rw-r--r--keyboards/plywrks/ply8x/hotswap/keyboard.json559
-rw-r--r--keyboards/plywrks/ply8x/hotswap/keymaps/default/keymap.c32
-rw-r--r--keyboards/plywrks/ply8x/hotswap/mcuconf.h (renamed from keyboards/plywrks/ply8x/mcuconf.h)0
-rw-r--r--keyboards/plywrks/ply8x/solder/config.h10
-rw-r--r--keyboards/plywrks/ply8x/solder/halconf.h8
-rw-r--r--keyboards/plywrks/ply8x/solder/keyboard.json (renamed from keyboards/plywrks/ply8x/keyboard.json)495
-rw-r--r--keyboards/plywrks/ply8x/solder/keymaps/default/keymap.c (renamed from keyboards/plywrks/ply8x/keymaps/default/keymap.c)0
-rw-r--r--keyboards/plywrks/ply8x/solder/mcuconf.h9
-rw-r--r--keyboards/poker87c/keyboard.json1
-rw-r--r--keyboards/poker87d/keyboard.json1
-rw-r--r--keyboards/polilla/rev1/keyboard.json1
-rw-r--r--keyboards/polycarbdiet/s20/keyboard.json1
-rw-r--r--keyboards/primekb/prime_r/keyboard.json1
-rw-r--r--keyboards/printedpad/keyboard.json1
-rw-r--r--keyboards/program_yoink/ortho/keyboard.json1
-rw-r--r--keyboards/program_yoink/staggered/keyboard.json1
-rw-r--r--keyboards/projectcain/relic/keyboard.json1
-rw-r--r--keyboards/projectcain/vault45/keyboard.json1
-rw-r--r--keyboards/projectd/65/projectd_65_ansi/keyboard.json1
-rw-r--r--keyboards/projectd/75/ansi/keyboard.json1
-rw-r--r--keyboards/projectd/75/iso/keyboard.json1
-rw-r--r--keyboards/projectkb/signature87/keyboard.json1
-rw-r--r--keyboards/prototypist/oceanographer/keyboard.json3
-rw-r--r--keyboards/prototypist/pt60/keyboard.json1
-rw-r--r--keyboards/prototypist/pt80/keyboard.json1
-rw-r--r--keyboards/pteron36/keyboard.json1
-rw-r--r--keyboards/pteropus/keyboard.json1
-rw-r--r--keyboards/puck/keyboard.json1
-rw-r--r--keyboards/punk75/keyboard.json1
-rw-r--r--keyboards/purin/keyboard.json1
-rw-r--r--keyboards/qck75/v1/keyboard.json1
-rw-r--r--keyboards/qpockets/eggman/keyboard.json1
-rw-r--r--keyboards/qpockets/space_space/rev1/keyboard.json1
-rw-r--r--keyboards/qpockets/space_space/rev2/keyboard.json1
-rw-r--r--keyboards/qpockets/wanten/keyboard.json1
-rw-r--r--keyboards/quad_h/lb75/keyboard.json1
-rw-r--r--keyboards/quadrum/delta/keyboard.json1
-rw-r--r--keyboards/quantrik/kyuu/keyboard.json1
-rw-r--r--keyboards/qwertlekeys/calice/keyboard.json1
-rw-r--r--keyboards/qwertykeys/qk65/hotswap/keyboard.json1
-rw-r--r--keyboards/qwertykeys/qk65/solder/keyboard.json1
-rw-r--r--keyboards/qwertyydox/rev1/keyboard.json1
-rw-r--r--keyboards/rabbit/rabbit68/keyboard.json1
-rw-r--r--keyboards/rainkeebs/rainkeeb/keyboard.json1
-rw-r--r--keyboards/ramlord/witf/keyboard.json1
-rw-r--r--keyboards/rart/rart45/keyboard.json1
-rw-r--r--keyboards/rart/rart4x4/keyboard.json1
-rw-r--r--keyboards/rart/rart60/keyboard.json1
-rw-r--r--keyboards/rart/rart67/keyboard.json1
-rw-r--r--keyboards/rart/rart67m/keyboard.json1
-rw-r--r--keyboards/rart/rart75/keyboard.json1
-rw-r--r--keyboards/rart/rart75hs/keyboard.json1
-rw-r--r--keyboards/rart/rart75m/keyboard.json1
-rw-r--r--keyboards/rart/rart80/keyboard.json1
-rw-r--r--keyboards/rart/rartand/keyboard.json1
-rw-r--r--keyboards/rart/rartlice/keyboard.json1
-rw-r--r--keyboards/rart/rartlite/keyboard.json1
-rw-r--r--keyboards/rart/rartpad/keyboard.json1
-rw-r--r--keyboards/rastersoft/minitkl/keyboard.json1
-rw-r--r--keyboards/rate/pistachio/info.json1
-rw-r--r--keyboards/rate/pistachio_mp/keyboard.json1
-rw-r--r--keyboards/rationalist/ratio65_hotswap/rev_a/keyboard.json1
-rw-r--r--keyboards/rationalist/ratio65_solder/rev_a/keyboard.json1
-rw-r--r--keyboards/rect44/keyboard.json1
-rw-r--r--keyboards/redox/rev1/info.json1
-rw-r--r--keyboards/redox/wireless/keyboard.json1
-rw-r--r--keyboards/redox_media/keyboard.json1
-rw-r--r--keyboards/redscarf_i/keyboard.json1
-rw-r--r--keyboards/redscarf_iiplus/verb/keyboard.json1
-rw-r--r--keyboards/redscarf_iiplus/verc/keyboard.json1
-rw-r--r--keyboards/redscarf_iiplus/verd/keyboard.json1
-rw-r--r--keyboards/reedskeebs/alish40/keyboard.json4
-rw-r--r--keyboards/relapsekb/or87/keyboard.json1
-rw-r--r--keyboards/retro_75/keyboard.json1
-rw-r--r--keyboards/reversestudio/decadepad/keyboard.json1
-rw-r--r--keyboards/reviung/reviung33/keyboard.json1
-rwxr-xr-xkeyboards/reviung/reviung34/keyboard.json1
-rw-r--r--keyboards/reviung/reviung39/keyboard.json1
-rw-r--r--keyboards/reviung/reviung41/keyboard.json1
-rw-r--r--keyboards/reviung/reviung5/keyboard.json1
-rw-r--r--keyboards/reviung/reviung53/keyboard.json1
-rw-r--r--keyboards/reviung/reviung61/keyboard.json1
-rw-r--r--keyboards/rgbkb/sol/rev1/keyboard.json1
-rw-r--r--keyboards/rgbkb/sol/rev2/keyboard.json1
-rw-r--r--keyboards/rgbkb/sol3/rev1/keyboard.json1
-rw-r--r--keyboards/rgbkb/zen/rev1/keyboard.json1
-rw-r--r--keyboards/rgbkb/zen/rev2/keyboard.json1
-rw-r--r--keyboards/rmi_kb/aelith/keyboard.json1
-rw-r--r--keyboards/rmi_kb/chevron/keyboard.json1
-rw-r--r--keyboards/rmi_kb/equator/keyboard.json1
-rw-r--r--keyboards/rmi_kb/herringbone/pro/keyboard.json1
-rw-r--r--keyboards/rmi_kb/herringbone/v1/keyboard.json1
-rw-r--r--keyboards/rmi_kb/mona/v1/keyboard.json1
-rw-r--r--keyboards/rmi_kb/mona/v1_1/keyboard.json1
-rw-r--r--keyboards/rmi_kb/mona/v32a/keyboard.json1
-rw-r--r--keyboards/rmi_kb/squishy65/keyboard.json1
-rw-r--r--keyboards/rmi_kb/squishyfrl/keyboard.json1
-rw-r--r--keyboards/rmi_kb/squishytkl/keyboard.json1
-rw-r--r--keyboards/rmi_kb/tkl_ff/info.json1
-rw-r--r--keyboards/rmi_kb/wete/v1/keyboard.json1
-rw-r--r--keyboards/rmi_kb/wete/v2/keyboard.json1
-rw-r--r--keyboards/rmkeebs/rm_fullsize/keyboard.json1
-rw-r--r--keyboards/rocketboard_16/keyboard.json1
-rw-r--r--keyboards/rocketboard_16/keycode_lookup.c1
-rw-r--r--keyboards/rominronin/katana60/rev1/keyboard.json1
-rw-r--r--keyboards/rot13labs/rotc0n/keyboard.json1
-rw-r--r--keyboards/rot13labs/veilid_sao/keyboard.json3
-rw-r--r--keyboards/rpiguy9907/southpaw66/keyboard.json1
-rw-r--r--keyboards/ryanbaekr/rb1/keyboard.json1
-rw-r--r--keyboards/ryanbaekr/rb18/keyboard.json1
-rw-r--r--keyboards/ryanbaekr/rb69/keyboard.json1
-rw-r--r--keyboards/ryanbaekr/rb86/keyboard.json1
-rw-r--r--keyboards/ryanbaekr/rb87/keyboard.json1
-rw-r--r--keyboards/ryanskidmore/rskeys100/keyboard.json1
-rw-r--r--keyboards/sakura_workshop/fuji75/info.json1
-rw-r--r--keyboards/salane/ncr80alpsskfl/keyboard.json1
-rw-r--r--keyboards/salane/starryfrl/keyboard.json1
-rw-r--r--keyboards/salicylic_acid3/guide68/keyboard.json2
-rw-r--r--keyboards/sam/s80/keyboard.json1
-rw-r--r--keyboards/sam/sg81m/keyboard.json1
-rw-r--r--keyboards/sanctified/dystopia/keyboard.json1
-rw-r--r--keyboards/sandwich/keeb68/keyboard.json1
-rw-r--r--keyboards/satt/comet46/keyboard.json1
-rw-r--r--keyboards/satt/vision/keyboard.json1
-rw-r--r--keyboards/sauce/mild/keyboard.json1
-rw-r--r--keyboards/sawnsprojects/amber80/solder/keyboard.json1
-rw-r--r--keyboards/sawnsprojects/bunnygirl65/keyboard.json1
-rw-r--r--keyboards/sawnsprojects/eclipse/eclipse60/keyboard.json3
-rw-r--r--keyboards/sawnsprojects/eclipse/tinyneko/keyboard.json3
-rw-r--r--keyboards/sawnsprojects/krush/krush65/hotswap/keyboard.json1
-rw-r--r--keyboards/sawnsprojects/krush/krush65/solder/keyboard.json1
-rw-r--r--keyboards/sawnsprojects/okayu/info.json1
-rw-r--r--keyboards/sawnsprojects/plaque80/keyboard.json1
-rw-r--r--keyboards/sawnsprojects/re65/keyboard.json1
-rw-r--r--keyboards/sawnsprojects/satxri6key/keyboard.json1
-rw-r--r--keyboards/sawnsprojects/vcl65/solder/keyboard.json1
-rw-r--r--keyboards/sck/gtm/keyboard.json1
-rw-r--r--keyboards/sck/neiso/keyboard.json1
-rw-r--r--keyboards/sck/osa/keyboard.json1
-rw-r--r--keyboards/sentraq/s60_x/info.json1
-rw-r--r--keyboards/sentraq/s65_plus/keyboard.json1
-rw-r--r--keyboards/sentraq/s65_x/keyboard.json1
-rw-r--r--keyboards/shambles/keyboard.json1
-rw-r--r--keyboards/shandoncodes/mino_plus/hotswap/keyboard.json1
-rw-r--r--keyboards/shandoncodes/mino_plus/soldered/keyboard.json1
-rw-r--r--keyboards/shandoncodes/riot_pad/keyboard.json1
-rw-r--r--keyboards/sharkoon/skiller_sgk50_s2/keyboard.json1
-rw-r--r--keyboards/sharkoon/skiller_sgk50_s3/keyboard.json1
-rw-r--r--keyboards/sharkoon/skiller_sgk50_s4/keyboard.json1
-rw-r--r--keyboards/shorty/keyboard.json1
-rw-r--r--keyboards/shostudio/arc/keyboard.json1
-rw-r--r--keyboards/sidderskb/majbritt/rev1/keyboard.json1
-rw-r--r--keyboards/sirius/uni660/rev1/keyboard.json1
-rw-r--r--keyboards/sirius/uni660/rev2/ansi/keyboard.json1
-rw-r--r--keyboards/sirius/uni660/rev2/iso/keyboard.json1
-rw-r--r--keyboards/sixkeyboard/keyboard.json1
-rw-r--r--keyboards/skeletn87/hotswap/keyboard.json1
-rw-r--r--keyboards/skeletn87/soldered/keyboard.json1
-rw-r--r--keyboards/skippys_custom_pcs/roopad/keyboard.json1
-rw-r--r--keyboards/smallkeyboard/keyboard.json1
-rw-r--r--keyboards/smithrune/iron160/iron160_h/keyboard.json1
-rw-r--r--keyboards/smithrune/iron160/iron160_s/keyboard.json1
-rw-r--r--keyboards/smithrune/iron165r2/info.json1
-rw-r--r--keyboards/smithrune/iron180/keyboard.json1
-rw-r--r--keyboards/smithrune/iron180v2/v2h/keyboard.json1
-rw-r--r--keyboards/smithrune/iron180v2/v2s/keyboard.json1
-rw-r--r--keyboards/smithrune/magnus/m75h/keyboard.json1
-rw-r--r--keyboards/smithrune/magnus/m75s/keyboard.json1
-rw-r--r--keyboards/smk60/keyboard.json1
-rw-r--r--keyboards/snampad/keyboard.json1
-rw-r--r--keyboards/snes_macropad/keyboard.json1
-rw-r--r--keyboards/soda/cherish/keyboard.json1
-rw-r--r--keyboards/sofle/keyhive/keyboard.json1
-rw-r--r--keyboards/sofle/keyhive/readme.md54
-rw-r--r--keyboards/sofle/keymaps/rgb_default/config.h124
-rw-r--r--keyboards/sofle/keymaps/rgb_default/keymap.c559
-rw-r--r--keyboards/sofle/keymaps/rgb_default/rules.mk7
-rw-r--r--keyboards/sofle/readme.md25
-rw-r--r--keyboards/sofle/rev1/readme.md27
-rw-r--r--keyboards/soy20/keyboard.json1
-rwxr-xr-xkeyboards/spaceholdings/nebula12/keyboard.json1
-rwxr-xr-xkeyboards/spaceholdings/nebula12b/keyboard.json1
-rwxr-xr-xkeyboards/spaceholdings/nebula68/keyboard.json1
-rw-r--r--keyboards/spaceholdings/nebula68b/info.json1
-rw-r--r--keyboards/spaceman/2_milk/keyboard.json1
-rw-r--r--keyboards/spaceman/pancake/rev1/info.json1
-rw-r--r--keyboards/spaceman/pancake/rev2/keyboard.json1
-rw-r--r--keyboards/spaceman/yun65/keyboard.json1
-rw-r--r--keyboards/specskeys/keyboard.json1
-rw-r--r--keyboards/spiderisland/split78/keyboard.json1
-rw-r--r--keyboards/split67/keyboard.json1
-rw-r--r--keyboards/splitish/keyboard.json1
-rwxr-xr-xkeyboards/splitkb/halcyon/kyria/rev4/keyboard.json3
-rw-r--r--keyboards/splitography/keymaps/default/keymap.c4
-rw-r--r--keyboards/splitography/keymaps/default_with_ctl_shft_alt_switched/keymap.c4
-rw-r--r--keyboards/splitography/keymaps/dvorak/keymap.c4
-rw-r--r--keyboards/stello65/beta/keyboard.json1
-rw-r--r--keyboards/stello65/hs_rev1/keyboard.json1
-rw-r--r--keyboards/stello65/sl_rev1/keyboard.json1
-rw-r--r--keyboards/stratos/keyboard.json1
-rw-r--r--keyboards/studiokestra/frl84/keyboard.json1
-rw-r--r--keyboards/studiokestra/galatea/rev1/keyboard.json1
-rw-r--r--keyboards/studiokestra/galatea/rev2/keyboard.json2
-rw-r--r--keyboards/studiokestra/galatea/rev3/keyboard.json2
-rwxr-xr-xkeyboards/suavity/ehan/keyboard.json1
-rw-r--r--keyboards/subatomic/keyboard.json1
-rw-r--r--keyboards/superuser/ext/keyboard.json1
-rw-r--r--keyboards/superuser/frl/keyboard.json1
-rw-r--r--keyboards/superuser/tkl/keyboard.json1
-rw-r--r--keyboards/swiss/keyboard.json1
-rw-r--r--keyboards/switchplate/southpaw_fullsize/keyboard.json1
-rw-r--r--keyboards/switchplate/switchplate910/keyboard.json1
-rw-r--r--keyboards/sx60/keyboard.json1
-rw-r--r--keyboards/synthandkeys/bento_box/keyboard.json1
-rw-r--r--keyboards/synthandkeys/the_debit_card/keyboard.json1
-rw-r--r--keyboards/system76/launch_1/keyboard.json4
-rw-r--r--keyboards/system76/launch_1/launch_1.c3
-rw-r--r--keyboards/tada68/keyboard.json1
-rw-r--r--keyboards/takashicompany/baumkuchen/keyboard.json1
-rw-r--r--keyboards/takashicompany/center_enter/keyboard.json1
-rw-r--r--keyboards/takashicompany/ejectix/keyboard.json1
-rw-r--r--keyboards/takashicompany/ergomirage/keyboard.json1
-rw-r--r--keyboards/takashicompany/goat51/keyboard.json2
-rw-r--r--keyboards/takashicompany/jourkey/keyboard.json1
-rw-r--r--keyboards/takashicompany/klec_01/keyboard.json1
-rw-r--r--keyboards/takashicompany/klec_02/keyboard.json1
-rw-r--r--keyboards/takashicompany/minidivide/keyboard.json1
-rw-r--r--keyboards/takashicompany/minidivide_max/keyboard.json1
-rw-r--r--keyboards/takashicompany/palmslave/keyboard.json1
-rw-r--r--keyboards/takashicompany/spreadwriter/keyboard.json2
-rw-r--r--keyboards/takashicompany/tightwriter/keyboard.json1
-rw-r--r--keyboards/takashiski/otaku_split/rev0/keyboard.json1
-rw-r--r--keyboards/taleguers/taleguers75/keyboard.json1
-rw-r--r--keyboards/tanuki/keyboard.json1
-rw-r--r--keyboards/tau4/keyboard.json1
-rw-r--r--keyboards/technika/keyboard.json1
-rw-r--r--keyboards/teleport/native/board.h8
-rw-r--r--keyboards/teleport/native/config.h3
-rw-r--r--keyboards/telophase/keyboard.json1
-rw-r--r--keyboards/terrazzo/keyboard.json1
-rw-r--r--keyboards/tetris/keyboard.json1
-rw-r--r--keyboards/tg4x/keyboard.json1
-rw-r--r--keyboards/tg67/keyboard.json1
-rw-r--r--keyboards/tgr/910/keyboard.json1
-rw-r--r--keyboards/tgr/910ce/keyboard.json1
-rw-r--r--keyboards/tgr/alice/keyboard.json1
-rw-r--r--keyboards/tgr/jane/v2/keyboard.json1
-rw-r--r--keyboards/tgr/jane/v2ce/keyboard.json1
-rw-r--r--keyboards/tgr/tris/keyboard.json1
-rw-r--r--keyboards/the_royal/liminal/keyboard.json1
-rw-r--r--keyboards/thevankeyboards/bananasplit/keyboard.json1
-rw-r--r--keyboards/thevankeyboards/caravan/keyboard.json1
-rw-r--r--keyboards/thevankeyboards/jetvan/keyboard.json1
-rw-r--r--keyboards/thevankeyboards/minivan/keyboard.json1
-rw-r--r--keyboards/thevankeyboards/roadkit/keyboard.json1
-rw-r--r--keyboards/tkc/california/keyboard.json1
-rw-r--r--keyboards/tkc/candybar/lefty/keyboard.json1
-rw-r--r--keyboards/tkc/candybar/lefty_r3/keyboard.json1
-rw-r--r--keyboards/tkc/candybar/righty/keyboard.json1
-rw-r--r--keyboards/tkc/candybar/righty_r3/keyboard.json1
-rw-r--r--keyboards/tkc/godspeed75/keyboard.json1
-rw-r--r--keyboards/tkc/m0lly/keyboard.json1
-rw-r--r--keyboards/tkc/osav2/keyboard.json1
-rw-r--r--keyboards/tkc/portico/keyboard.json1
-rw-r--r--keyboards/tkc/portico68v2/keyboard.json1
-rw-r--r--keyboards/tkc/portico75/keyboard.json1
-rw-r--r--keyboards/tkc/tkc1800/keyboard.json1
-rw-r--r--keyboards/tkc/tkl_ab87/keyboard.json1
-rw-r--r--keyboards/tmo50/keyboard.json1
-rw-r--r--keyboards/toad/keyboard.json1
-rw-r--r--keyboards/toffee_studio/blueberry/keyboard.json1
-rw-r--r--keyboards/tokyokeyboard/alix40/config.h18
-rw-r--r--keyboards/tominabox1/bigboy/keyboard.json1
-rw-r--r--keyboards/tominabox1/le_chiffre/info.json1
-rw-r--r--keyboards/tominabox1/littlefoot_lx/rev1/keyboard.json1
-rw-r--r--keyboards/tominabox1/littlefoot_lx/rev2/keyboard.json1
-rw-r--r--keyboards/tominabox1/qaz/keyboard.json1
-rw-r--r--keyboards/tominabox1/underscore33/rev1/keyboard.json1
-rw-r--r--keyboards/tominabox1/underscore33/rev2/keyboard.json1
-rw-r--r--keyboards/touchpad/keyboard.json1
-rw-r--r--keyboards/tr60w/keyboard.json1
-rw-r--r--keyboards/trainpad/keyboard.json1
-rw-r--r--keyboards/treasure/type9/keyboard.json1
-rw-r--r--keyboards/treasure/type9s3/keyboard.json1
-rw-r--r--keyboards/trnthsn/e8ghty/info.json1
-rw-r--r--keyboards/trnthsn/e8ghtyneo/info.json1
-rw-r--r--keyboards/trnthsn/s6xty/keyboard.json1
-rw-r--r--keyboards/trnthsn/s6xty5neor2/info.json1
-rw-r--r--keyboards/tweetydabird/lbs4/keyboard.json3
-rw-r--r--keyboards/tweetydabird/lbs6/keyboard.json3
-rw-r--r--keyboards/ubest/vn/keyboard.json1
-rw-r--r--keyboards/uk78/keyboard.json1
-rw-r--r--keyboards/unicomp/classic_ultracl_post_2013/overnumpad_1xb/board.h8
-rw-r--r--keyboards/unicomp/classic_ultracl_post_2013/overnumpad_1xb/config.h2
-rw-r--r--keyboards/unicomp/classic_ultracl_pre_2013/overnumpad_1xb/board.h8
-rw-r--r--keyboards/unicomp/classic_ultracl_pre_2013/overnumpad_1xb/config.h2
-rw-r--r--keyboards/unicomp/pc122/overnumpad_1xb/board.h8
-rw-r--r--keyboards/unicomp/pc122/overnumpad_1xb/config.h2
-rw-r--r--keyboards/unicomp/spacesaver_m_post_2013/overnumpad_1xb/board.h8
-rw-r--r--keyboards/unicomp/spacesaver_m_post_2013/overnumpad_1xb/config.h2
-rw-r--r--keyboards/unicomp/spacesaver_m_pre_2013/overnumpad_1xb/board.h8
-rw-r--r--keyboards/unicomp/spacesaver_m_pre_2013/overnumpad_1xb/config.h2
-rw-r--r--keyboards/unikeyboard/diverge3/keyboard.json1
-rw-r--r--keyboards/unikeyboard/divergetm2/keyboard.json1
-rw-r--r--keyboards/unikeyboard/felix/keyboard.json1
-rw-r--r--keyboards/unikorn/keyboard.json1
-rw-r--r--keyboards/uranuma/keyboard.json1
-rw-r--r--keyboards/utd80/keyboard.json1
-rw-r--r--keyboards/v60_type_r/keyboard.json1
-rw-r--r--keyboards/vertex/angle65/keyboard.json1
-rw-r--r--keyboards/vertex/arc60/keyboard.json1
-rw-r--r--keyboards/vertex/arc60h/keyboard.json1
-rw-r--r--keyboards/vertex/cycle8/keyboard.json1
-rw-r--r--keyboards/viktus/omnikey_bh/keyboard.json1
-rw-r--r--keyboards/viktus/smolka/keyboard.json1
-rw-r--r--keyboards/viktus/sp_mini/keyboard.json1
-rw-r--r--keyboards/viktus/vkr94/keyboard.json1
-rw-r--r--keyboards/viktus/z150_bh/keyboard.json1
-rw-r--r--keyboards/vinhcatba/uncertainty/keyboard.json2
-rw-r--r--keyboards/vitamins_included/info.json1
-rw-r--r--keyboards/vitamins_included/rev2/rev2.c2
-rw-r--r--keyboards/void/voidhhkb_hotswap/keyboard.json1
-rw-r--r--keyboards/waterfowl/keyboard.json1
-rw-r--r--keyboards/wavtype/foundation/keyboard.json1
-rw-r--r--keyboards/wavtype/p01_ultra/keyboard.json1
-rw-r--r--keyboards/weirdo/geminate60/keyboard.json1
-rw-r--r--keyboards/weirdo/kelowna/rgb64/keyboard.json1
-rw-r--r--keyboards/weirdo/ls_60/keyboard.json1
-rw-r--r--keyboards/weirdo/naiping/np64/keyboard.json1
-rw-r--r--keyboards/weirdo/naiping/nphhkb/keyboard.json1
-rw-r--r--keyboards/weirdo/naiping/npminila/keyboard.json1
-rw-r--r--keyboards/weirdo/tiger910/keyboard.json1
-rw-r--r--keyboards/wekey/polaris/keyboard.json1
-rw-r--r--keyboards/wekey/we27/keyboard.json1
-rw-r--r--keyboards/werk_technica/one/board.h8
-rw-r--r--keyboards/werk_technica/one/config.h7
-rw-r--r--keyboards/westfoxtrot/aanzee/keyboard.json1
-rw-r--r--keyboards/westfoxtrot/cyclops/keyboard.json1
-rw-r--r--keyboards/westfoxtrot/prophet/keyboard.json1
-rw-r--r--keyboards/wilba_tech/wt_main.c59
-rw-r--r--keyboards/wilba_tech/wt_mono_backlight.c2
-rw-r--r--keyboards/wilba_tech/wt_rgb_backlight.c2
-rw-r--r--keyboards/windstudio/wind_x/r1/keyboard.json1
-rw-r--r--keyboards/winkeyless/b87/keyboard.json1
-rw-r--r--keyboards/winkeyless/bface/keyboard.json1
-rw-r--r--keyboards/winkeyless/bmini/keyboard.json1
-rw-r--r--keyboards/winry/winry25tc/keyboard.json1
-rw-r--r--keyboards/winry/winry315/keyboard.json1
-rw-r--r--keyboards/wolf/kuku65/keyboard.json1
-rw-r--r--keyboards/wolf/m60_b/keyboard.json1
-rw-r--r--keyboards/wolf/m6_c/keyboard.json1
-rw-r--r--keyboards/wolf/neely65/keyboard.json1
-rw-r--r--keyboards/wolf/ryujin/keyboard.json1
-rw-r--r--keyboards/wolf/sabre/keyboard.json1
-rw-r--r--keyboards/wolf/silhouette/keyboard.json1
-rw-r--r--keyboards/wolf/twilight/keyboard.json1
-rw-r--r--keyboards/wolf/ziggurat/keyboard.json1
-rw-r--r--keyboards/wolfmarkclub/wm1/keyboard.json1
-rw-r--r--keyboards/woodkeys/bigseries/1key/keyboard.json1
-rw-r--r--keyboards/woodkeys/bigseries/2key/keyboard.json1
-rw-r--r--keyboards/woodkeys/bigseries/3key/keyboard.json1
-rw-r--r--keyboards/woodkeys/bigseries/4key/keyboard.json1
-rw-r--r--keyboards/woodkeys/meira/info.json1
-rw-r--r--keyboards/woodkeys/scarletbandana/keyboard.json1
-rw-r--r--keyboards/work_louder/micro/keyboard.json1
-rw-r--r--keyboards/work_louder/numpad/keyboard.json1
-rw-r--r--keyboards/wsk/alpha9/keyboard.json1
-rw-r--r--keyboards/wsk/g4m3ralpha/keyboard.json1
-rw-r--r--keyboards/x16/keyboard.json1
-rw-r--r--keyboards/xbows/knight/keyboard.json1
-rw-r--r--keyboards/xbows/knight_plus/keyboard.json1
-rw-r--r--keyboards/xbows/nature/keyboard.json1
-rw-r--r--keyboards/xbows/numpad/keyboard.json1
-rw-r--r--keyboards/xbows/ranger/keyboard.json1
-rw-r--r--keyboards/xbows/woody/keyboard.json1
-rw-r--r--keyboards/xelus/dawn60/info.json1
-rw-r--r--keyboards/xelus/dharma/keyboard.json1
-rw-r--r--keyboards/xelus/la_plus/keyboard.json1
-rw-r--r--keyboards/xelus/la_plus/rgb_matrix_kb.inc2
-rw-r--r--keyboards/xelus/ninjin/keyboard.json1
-rw-r--r--keyboards/xelus/pachi/mini_32u4/keyboard.json1
-rw-r--r--keyboards/xelus/pachi/rev1/keyboard.json1
-rw-r--r--keyboards/xelus/pachi/rgb/rev1/keyboard.json1
-rw-r--r--keyboards/xelus/pachi/rgb/rev2/keyboard.json1
-rw-r--r--keyboards/xelus/rs108/board.h8
-rw-r--r--keyboards/xelus/rs108/config.h3
-rw-r--r--keyboards/xelus/rs108/keyboard.json1
-rw-r--r--keyboards/xelus/rs60/info.json1
-rw-r--r--keyboards/xelus/rs60/rev2_0/board.h8
-rw-r--r--keyboards/xelus/rs60/rev2_0/config.h3
-rw-r--r--keyboards/xelus/snap96/keyboard.json1
-rw-r--r--keyboards/xelus/trinityxttkl/keyboard.json1
-rw-r--r--keyboards/xelus/valor/rev1/keyboard.json1
-rw-r--r--keyboards/xelus/valor/rev2/keyboard.json1
-rw-r--r--keyboards/xelus/valor/rev3/keyboard.json1
-rw-r--r--keyboards/xelus/valor_frl_tkl/info.json1
-rw-r--r--keyboards/xelus/valor_frl_tkl/rev2_0/board.h8
-rw-r--r--keyboards/xelus/valor_frl_tkl/rev2_1/board.h8
-rw-r--r--keyboards/xelus/xs108/keyboard.json1
-rw-r--r--keyboards/xelus/xs60/hotswap/keyboard.json1
-rw-r--r--keyboards/xelus/xs60/soldered/keyboard.json1
-rw-r--r--keyboards/xiaomi/mk02/keyboard.json1
-rw-r--r--keyboards/xiudi/xd68/keyboard.json1
-rw-r--r--keyboards/xiudi/xd75/keyboard.json1
-rw-r--r--keyboards/xiudi/xd84/keyboard.json1
-rw-r--r--keyboards/xiudi/xd84pro/keyboard.json1
-rw-r--r--keyboards/xiudi/xd96/keyboard.json1
-rw-r--r--keyboards/xmmx/keyboard.json1
-rw-r--r--keyboards/xw60/keyboard.json1
-rw-r--r--keyboards/yampad/keyboard.json1
-rw-r--r--keyboards/ydkb/chili/keyboard.json1
-rw-r--r--keyboards/ydkb/just60/keyboard.json1
-rw-r--r--keyboards/ydkb/yd68/keyboard.json1
-rw-r--r--keyboards/ydkb/ydpm40/keyboard.json1
-rw-r--r--keyboards/ymdk/bface/keyboard.json1
-rw-r--r--keyboards/ymdk/id75/f103/keyboard.json1
-rw-r--r--keyboards/ymdk/id75/info.json2
-rw-r--r--keyboards/ymdk/id75/readme.md4
-rw-r--r--keyboards/ymdk/id75/rp2040/config.h (renamed from keyboards/sofle/keyhive/config.h)9
-rw-r--r--keyboards/ymdk/id75/rp2040/keyboard.json12
-rw-r--r--keyboards/ymdk/melody96/hotswap/keyboard.json1
-rw-r--r--keyboards/ymdk/melody96/soldered/keyboard.json1
-rw-r--r--keyboards/ymdk/sp64/keyboard.json1
-rw-r--r--keyboards/ymdk/yd60mq/info.json1
-rw-r--r--keyboards/ymdk/ym68/keyboard.json1
-rw-r--r--keyboards/ymdk/ymd21/v2/keyboard.json1
-rw-r--r--keyboards/ymdk/ymd40/air40/keyboard.json1
-rw-r--r--keyboards/ymdk/ymd40/v2/keyboard.json1
-rw-r--r--keyboards/ymdk/ymd75/rev1/keyboard.json1
-rw-r--r--keyboards/ymdk/ymd75/rev2/keyboard.json1
-rw-r--r--keyboards/ymdk/ymd75/rev3/keyboard.json1
-rw-r--r--keyboards/ymdk/ymd75/rev4/iso/keyboard.json1
-rw-r--r--keyboards/ymdk/ymd96/keyboard.json1
-rw-r--r--keyboards/yncognito/batpad/keyboard.json1
-rw-r--r--keyboards/yoichiro/lunakey_macro/keyboard.json1
-rw-r--r--keyboards/yoichiro/lunakey_mini/keyboard.json1
-rw-r--r--keyboards/yoichiro/lunakey_pico/keyboard.json4
-rw-r--r--keyboards/yushakobo/ergo68/keyboard.json1
-rw-r--r--keyboards/yushakobo/navpad/10_helix_r/keyboard.json1
-rw-r--r--keyboards/yushakobo/quick7/keyboard.json1
-rw-r--r--keyboards/ziggurat/keyboard.json1
-rw-r--r--keyboards/zlant/keyboard.json1
-rw-r--r--keyboards/zsa/moonlander/matrix.c2
-rw-r--r--keyboards/zvecr/split_blackpill/keyboard.json1
-rw-r--r--keyboards/zvecr/zv48/info.json1
-rw-r--r--keyboards/zwag/zwag75/keyboard.json1
-rw-r--r--layouts/community/75_ansi/layout.json2
-rw-r--r--layouts/community/ortho_1x4/layout.json2
-rw-r--r--layouts/community/ortho_4x12/layout.json2
-rw-r--r--layouts/default/60_ansi_arrow/layout.json2
-rw-r--r--layouts/default/ortho_5x5/readme.md2
m---------lib/pico-sdk0
-rw-r--r--lib/python/qmk/cli/__init__.py3
-rw-r--r--lib/python/qmk/cli/generate/community_modules.py65
-rw-r--r--lib/python/qmk/cli/generate/keycodes_tests.py39
-rwxr-xr-xlib/python/qmk/cli/generate/rules_mk.py34
-rw-r--r--lib/python/qmk/cli/lint.py13
-rwxr-xr-xlib/python/qmk/cli/new/keymap.py56
-rw-r--r--lib/python/qmk/info.py16
-rwxr-xr-xlib/python/qmk/json_encoders.py8
-rw-r--r--lib/python/qmk/keymap.py11
-rw-r--r--modules/qmk/hello_world/qmk_module.json1
-rw-r--r--modules/qmk/super_alt_tab/qmk_module.json1
-rw-r--r--platforms/avr/drivers/i2c_master.c2
-rw-r--r--platforms/chibios/boards/BONSAI_C4/configs/board.h2
-rw-r--r--platforms/chibios/boards/BONSAI_C4/configs/config.h2
-rw-r--r--platforms/chibios/boards/BONSAI_C4/configs/halconf.h2
-rw-r--r--platforms/chibios/boards/GENERIC_STM32_F405XG/board/board.mk2
-rw-r--r--platforms/chibios/boards/GENERIC_STM32_F407XE/board/board.mk2
-rw-r--r--platforms/chibios/boards/GENERIC_STM32_F407XE/configs/board.h2
-rw-r--r--platforms/chibios/boards/GENERIC_STM32_G474XE/configs/config.h2
-rw-r--r--platforms/chibios/boards/GENERIC_WB32_F3G71XX/configs/chconf.h2
-rw-r--r--platforms/chibios/boards/GENERIC_WB32_FQ95XX/configs/chconf.h2
-rw-r--r--platforms/chibios/boards/SIPEED_LONGAN_NANO/configs/chconf.h2
-rw-r--r--platforms/chibios/bootloaders/stm32duino.c2
-rw-r--r--platforms/chibios/converters/promicro_to_bonsai_c4/_pin_defs.h2
-rw-r--r--platforms/chibios/converters/promicro_to_bonsai_c4/post_converter.mk2
-rw-r--r--platforms/chibios/drivers/i2c_master.c2
-rw-r--r--platforms/chibios/drivers/usbpd_stm32g4.c2
-rw-r--r--platforms/chibios/errno.h13
-rw-r--r--platforms/chibios/platform.c2
-rw-r--r--platforms/test/platform.c2
-rw-r--r--quantum/action.c20
-rw-r--r--quantum/action.h6
-rw-r--r--quantum/action_tapping.c179
-rw-r--r--quantum/action_tapping.h60
-rw-r--r--quantum/action_util.c2
-rw-r--r--quantum/audio/audio.c12
-rw-r--r--quantum/audio/audio.h2
-rw-r--r--quantum/backlight/backlight.c31
-rw-r--r--quantum/backlight/backlight.h8
-rw-r--r--quantum/command.c6
-rw-r--r--quantum/connection/connection.c147
-rw-r--r--quantum/connection/connection.h110
-rw-r--r--quantum/dynamic_keymap.c205
-rw-r--r--quantum/dynamic_keymap.h9
-rw-r--r--quantum/eeconfig.c470
-rw-r--r--quantum/eeconfig.h162
-rw-r--r--quantum/haptic.c26
-rw-r--r--quantum/haptic.h2
-rw-r--r--quantum/keyboard.c22
-rw-r--r--quantum/keycode_config.h2
-rw-r--r--quantum/keycode_string.c564
-rw-r--r--quantum/keycode_string.h134
-rw-r--r--quantum/led_matrix/led_matrix.c5
-rw-r--r--quantum/led_matrix/led_matrix.h2
-rw-r--r--quantum/led_matrix/led_matrix_types.h2
-rw-r--r--quantum/logging/debug.h2
-rw-r--r--quantum/nvm/eeprom/nvm_dynamic_keymap.c193
-rw-r--r--quantum/nvm/eeprom/nvm_eeconfig.c305
-rw-r--r--quantum/nvm/eeprom/nvm_eeprom_eeconfig_internal.h61
-rw-r--r--quantum/nvm/eeprom/nvm_eeprom_via_internal.h22
-rw-r--r--quantum/nvm/eeprom/nvm_via.c77
-rw-r--r--quantum/nvm/nvm_dynamic_keymap.h27
-rw-r--r--quantum/nvm/nvm_eeconfig.h111
-rw-r--r--quantum/nvm/nvm_via.h17
-rw-r--r--quantum/nvm/readme.md30
-rw-r--r--quantum/nvm/rules.mk31
-rw-r--r--quantum/os_detection.h3
-rw-r--r--quantum/pointing_device/pointing_device.c35
-rw-r--r--quantum/pointing_device/pointing_device.h14
-rw-r--r--quantum/process_keycode/process_autocorrect.c6
-rw-r--r--quantum/process_keycode/process_caps_word.c7
-rw-r--r--quantum/process_keycode/process_clicky.c6
-rw-r--r--quantum/process_keycode/process_connection.c24
-rw-r--r--quantum/process_keycode/process_leader.c6
-rw-r--r--quantum/process_keycode/process_magic.c4
-rw-r--r--quantum/process_keycode/process_repeat_key.c5
-rw-r--r--quantum/process_keycode/process_steno.c7
-rw-r--r--quantum/quantum.c4
-rw-r--r--quantum/quantum.h1
-rw-r--r--quantum/rgb_matrix/animations/rgb_matrix_effects.inc2
-rw-r--r--quantum/rgb_matrix/rgb_matrix.c5
-rw-r--r--quantum/rgb_matrix/rgb_matrix.h4
-rw-r--r--quantum/rgb_matrix/rgb_matrix_types.h2
-rw-r--r--quantum/rgblight/rgblight.c45
-rw-r--r--quantum/rgblight/rgblight.h5
-rw-r--r--quantum/split_common/split_util.h2
-rw-r--r--quantum/unicode/unicode.c5
-rw-r--r--quantum/unicode/unicode.h2
-rw-r--r--quantum/via.c61
-rw-r--r--quantum/via.h27
-rw-r--r--quantum/wear_leveling/tests/rules.mk2
-rw-r--r--readme.md4
-rw-r--r--requirements.txt2
-rw-r--r--tests/basic/test_keycode_util.cpp52
-rw-r--r--tests/basic/test_one_shot_keys.cpp2
-rw-r--r--tests/caps_word/test.mk2
-rw-r--r--tests/caps_word/test_caps_word.cpp52
-rw-r--r--tests/combo/combo_repress/test_combo.cpp2
-rw-r--r--tests/combo/test_combo.cpp1
-rw-r--r--tests/keycode_string/config.h (renamed from keyboards/xelus/valor_frl_tkl/rev2_0/config.h)4
-rw-r--r--tests/keycode_string/test.mk22
-rw-r--r--tests/keycode_string/test_keycode_string.cpp153
-rw-r--r--tests/no_tapping/no_action_tapping/test.mk2
-rw-r--r--tests/no_tapping/no_mod_tap_mods/test.mk2
-rw-r--r--tests/repeat_key/alt_repeat_key/test_alt_repeat_key.cpp2
-rw-r--r--tests/repeat_key/test.mk1
-rw-r--r--tests/repeat_key/test_repeat_key.cpp33
-rw-r--r--tests/tap_hold_configurations/flow_tap/config.h (renamed from keyboards/xelus/valor_frl_tkl/rev2_1/config.h)8
-rw-r--r--tests/tap_hold_configurations/flow_tap/test.mk18
-rw-r--r--tests/tap_hold_configurations/flow_tap/test_keymap.c23
-rw-r--r--tests/tap_hold_configurations/flow_tap/test_tap_hold.cpp642
-rw-r--r--tests/test_common/build.mk1
-rw-r--r--tests/test_common/keyboard_report_util.cpp8
-rw-r--r--tests/test_common/keycode_table.cpp767
-rw-r--r--tests/test_common/keycode_util.cpp130
-rw-r--r--tests/test_common/keycode_util.hpp6
-rw-r--r--tests/test_common/test_driver.hpp8
-rw-r--r--tests/test_common/test_fixture.cpp2
-rw-r--r--tests/test_common/test_keymap_key.hpp6
-rw-r--r--tmk_core/protocol/chibios/chibios.c17
-rw-r--r--tmk_core/protocol/host.c11
-rw-r--r--tmk_core/protocol/report.h8
-rw-r--r--tmk_core/protocol/usb_descriptor.c24
-rw-r--r--tmk_core/protocol/usb_descriptor_common.h20
-rw-r--r--tmk_core/protocol/vusb/vusb.c28
-rw-r--r--users/_example/_example.c2
-rw-r--r--users/_example/_example.h2
-rw-r--r--users/_example/readme.md2
-rw-r--r--users/_example/rules.mk2
-rw-r--r--users/readme.md2
-rwxr-xr-xutil/regen.sh1
-rw-r--r--util/usb_detach/usb_detach.c2
1864 files changed, 8095 insertions, 5106 deletions
diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
index a5d185e1dd..3e32f4d994 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.yml
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -38,4 +38,4 @@ body:
- type: textarea
attributes:
label: Additional Context
- description: Add any other relevant information about the problem here. \ No newline at end of file
+ description: Add any other relevant information about the problem here.
diff --git a/builddefs/build_full_test.mk b/builddefs/build_full_test.mk
index 5cae327c6c..82bb9387a6 100644
--- a/builddefs/build_full_test.mk
+++ b/builddefs/build_full_test.mk
@@ -25,8 +25,6 @@ $(TEST_OUTPUT)_SRC := \
tests/test_common/test_driver.cpp \
tests/test_common/keyboard_report_util.cpp \
tests/test_common/mouse_report_util.cpp \
- tests/test_common/keycode_util.cpp \
- tests/test_common/keycode_table.cpp \
tests/test_common/test_fixture.cpp \
tests/test_common/test_keymap_key.cpp \
tests/test_common/test_logger.cpp \
diff --git a/builddefs/build_keyboard.mk b/builddefs/build_keyboard.mk
index c5fc9cd25d..514191b17d 100644
--- a/builddefs/build_keyboard.mk
+++ b/builddefs/build_keyboard.mk
@@ -97,21 +97,12 @@ endif
# Pull in rules.mk files from all our subfolders
-ifneq ("$(wildcard $(KEYBOARD_PATH_5)/rules.mk)","")
- include $(KEYBOARD_PATH_5)/rules.mk
-endif
-ifneq ("$(wildcard $(KEYBOARD_PATH_4)/rules.mk)","")
- include $(KEYBOARD_PATH_4)/rules.mk
-endif
-ifneq ("$(wildcard $(KEYBOARD_PATH_3)/rules.mk)","")
- include $(KEYBOARD_PATH_3)/rules.mk
-endif
-ifneq ("$(wildcard $(KEYBOARD_PATH_2)/rules.mk)","")
- include $(KEYBOARD_PATH_2)/rules.mk
-endif
-ifneq ("$(wildcard $(KEYBOARD_PATH_1)/rules.mk)","")
- include $(KEYBOARD_PATH_1)/rules.mk
-endif
+-include $(KEYBOARD_PATH_5)/rules.mk
+-include $(KEYBOARD_PATH_4)/rules.mk
+-include $(KEYBOARD_PATH_3)/rules.mk
+-include $(KEYBOARD_PATH_2)/rules.mk
+-include $(KEYBOARD_PATH_1)/rules.mk
+
# Create dependencies on DD keyboard config - structure validated elsewhere
DD_CONFIG_FILES :=
ifneq ("$(wildcard $(KEYBOARD_PATH_1)/info.json)","")
@@ -260,6 +251,9 @@ generated-files: $(INTERMEDIATE_OUTPUT)/src/config.h $(INTERMEDIATE_OUTPUT)/src/
endif
# Community modules
+COMMUNITY_RULES_MK = $(shell $(QMK_BIN) generate-community-modules-rules-mk -kb $(KEYBOARD) --quiet --escape --output $(INTERMEDIATE_OUTPUT)/src/community_rules.mk $(KEYMAP_JSON))
+include $(COMMUNITY_RULES_MK)
+
$(INTERMEDIATE_OUTPUT)/src/community_modules.h: $(KEYMAP_JSON) $(DD_CONFIG_FILES)
@$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD)
$(eval CMD=$(QMK_BIN) generate-community-modules-h -kb $(KEYBOARD) --quiet --output $(INTERMEDIATE_OUTPUT)/src/community_modules.h $(KEYMAP_JSON))
@@ -487,21 +481,11 @@ ifneq ("$(CONVERTER)","")
endif
# Pull in post_rules.mk files from all our subfolders
-ifneq ("$(wildcard $(KEYBOARD_PATH_1)/post_rules.mk)","")
- include $(KEYBOARD_PATH_1)/post_rules.mk
-endif
-ifneq ("$(wildcard $(KEYBOARD_PATH_2)/post_rules.mk)","")
- include $(KEYBOARD_PATH_2)/post_rules.mk
-endif
-ifneq ("$(wildcard $(KEYBOARD_PATH_3)/post_rules.mk)","")
- include $(KEYBOARD_PATH_3)/post_rules.mk
-endif
-ifneq ("$(wildcard $(KEYBOARD_PATH_4)/post_rules.mk)","")
- include $(KEYBOARD_PATH_4)/post_rules.mk
-endif
-ifneq ("$(wildcard $(KEYBOARD_PATH_5)/post_rules.mk)","")
- include $(KEYBOARD_PATH_5)/post_rules.mk
-endif
+-include $(KEYBOARD_PATH_1)/post_rules.mk
+-include $(KEYBOARD_PATH_2)/post_rules.mk
+-include $(KEYBOARD_PATH_3)/post_rules.mk
+-include $(KEYBOARD_PATH_4)/post_rules.mk
+-include $(KEYBOARD_PATH_5)/post_rules.mk
define post_rules_mk_community_module_includer
ifneq ("$(wildcard $(1)/post_rules.mk)","")
diff --git a/builddefs/common_features.mk b/builddefs/common_features.mk
index c88ce36011..0b9840a14e 100644
--- a/builddefs/common_features.mk
+++ b/builddefs/common_features.mk
@@ -30,6 +30,8 @@ QUANTUM_SRC += \
$(QUANTUM_DIR)/logging/sendchar.c \
$(QUANTUM_DIR)/process_keycode/process_default_layer.c \
+include $(QUANTUM_DIR)/nvm/rules.mk
+
VPATH += $(QUANTUM_DIR)/logging
# Fall back to lib/printf if there is no platform provided print
ifeq ("$(wildcard $(PLATFORM_PATH)/$(PLATFORM_KEY)/printf.mk)","")
@@ -169,80 +171,82 @@ endif
VALID_EEPROM_DRIVER_TYPES := vendor custom transient i2c spi wear_leveling legacy_stm32_flash
EEPROM_DRIVER ?= vendor
-ifeq ($(filter $(EEPROM_DRIVER),$(VALID_EEPROM_DRIVER_TYPES)),)
+ifneq ($(strip $(EEPROM_DRIVER)),none)
+ ifeq ($(filter $(EEPROM_DRIVER),$(VALID_EEPROM_DRIVER_TYPES)),)
$(call CATASTROPHIC_ERROR,Invalid EEPROM_DRIVER,EEPROM_DRIVER="$(EEPROM_DRIVER)" is not a valid EEPROM driver)
-else
- OPT_DEFS += -DEEPROM_ENABLE
- COMMON_VPATH += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/eeprom
- COMMON_VPATH += $(DRIVER_PATH)/eeprom
- COMMON_VPATH += $(PLATFORM_COMMON_DIR)
- ifeq ($(strip $(EEPROM_DRIVER)), custom)
- # Custom EEPROM implementation -- only needs to implement init/erase/read_block/write_block
- OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_CUSTOM
- SRC += eeprom_driver.c
- else ifeq ($(strip $(EEPROM_DRIVER)), wear_leveling)
- # Wear-leveling EEPROM implementation
- OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_WEAR_LEVELING
- SRC += eeprom_driver.c eeprom_wear_leveling.c
- else ifeq ($(strip $(EEPROM_DRIVER)), i2c)
- # External I2C EEPROM implementation
- OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_I2C
- I2C_DRIVER_REQUIRED = yes
- SRC += eeprom_driver.c eeprom_i2c.c
- else ifeq ($(strip $(EEPROM_DRIVER)), spi)
- # External SPI EEPROM implementation
- OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_SPI
- SPI_DRIVER_REQUIRED = yes
- SRC += eeprom_driver.c eeprom_spi.c
- else ifeq ($(strip $(EEPROM_DRIVER)), legacy_stm32_flash)
- # STM32 Emulated EEPROM, backed by MCU flash (soon to be deprecated)
- OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_LEGACY_EMULATED_FLASH
- COMMON_VPATH += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/flash
- COMMON_VPATH += $(DRIVER_PATH)/flash
- SRC += eeprom_driver.c eeprom_legacy_emulated_flash.c legacy_flash_ops.c
- else ifeq ($(strip $(EEPROM_DRIVER)), transient)
- # Transient EEPROM implementation -- no data storage but provides runtime area for it
- OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_TRANSIENT
- SRC += eeprom_driver.c eeprom_transient.c
- else ifeq ($(strip $(EEPROM_DRIVER)), vendor)
- # Vendor-implemented EEPROM
- OPT_DEFS += -DEEPROM_VENDOR
- ifeq ($(PLATFORM),AVR)
- # Automatically provided by avr-libc, nothing required
- else ifeq ($(PLATFORM),CHIBIOS)
- ifneq ($(filter %_STM32F072xB %_STM32F042x6, $(MCU_SERIES)_$(MCU_LDSCRIPT)),)
- # STM32 Emulated EEPROM, backed by MCU flash (soon to be deprecated)
- OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_LEGACY_EMULATED_FLASH
- COMMON_VPATH += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/flash
- COMMON_VPATH += $(DRIVER_PATH)/flash
- SRC += eeprom_driver.c eeprom_legacy_emulated_flash.c legacy_flash_ops.c
- else ifneq ($(filter $(MCU_SERIES),STM32F1xx STM32F3xx STM32F4xx STM32L4xx STM32G4xx WB32F3G71xx WB32FQ95xx AT32F415 GD32VF103),)
- # Wear-leveling EEPROM implementation, backed by MCU flash
- OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_WEAR_LEVELING
- SRC += eeprom_driver.c eeprom_wear_leveling.c
- WEAR_LEVELING_DRIVER ?= embedded_flash
- else ifneq ($(filter $(MCU_SERIES),STM32L0xx STM32L1xx),)
- # True EEPROM on STM32L0xx, L1xx
- OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_STM32_L0_L1
- SRC += eeprom_driver.c eeprom_stm32_L0_L1.c
- else ifneq ($(filter $(MCU_SERIES),RP2040),)
- # Wear-leveling EEPROM implementation, backed by RP2040 flash
- OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_WEAR_LEVELING
- SRC += eeprom_driver.c eeprom_wear_leveling.c
- WEAR_LEVELING_DRIVER ?= rp2040_flash
- else ifneq ($(filter $(MCU_SERIES),KL2x K20x),)
- # Teensy EEPROM implementations
- OPT_DEFS += -DEEPROM_KINETIS_FLEXRAM
- SRC += eeprom_kinetis_flexram.c
- else
- # Fall back to transient, i.e. non-persistent
- OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_TRANSIENT
- SRC += eeprom_driver.c eeprom_transient.c
+ else
+ OPT_DEFS += -DEEPROM_ENABLE
+ COMMON_VPATH += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/eeprom
+ COMMON_VPATH += $(DRIVER_PATH)/eeprom
+ COMMON_VPATH += $(PLATFORM_COMMON_DIR)
+ ifeq ($(strip $(EEPROM_DRIVER)), custom)
+ # Custom EEPROM implementation -- only needs to implement init/erase/read_block/write_block
+ OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_CUSTOM
+ SRC += eeprom_driver.c
+ else ifeq ($(strip $(EEPROM_DRIVER)), wear_leveling)
+ # Wear-leveling EEPROM implementation
+ OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_WEAR_LEVELING
+ SRC += eeprom_driver.c eeprom_wear_leveling.c
+ else ifeq ($(strip $(EEPROM_DRIVER)), i2c)
+ # External I2C EEPROM implementation
+ OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_I2C
+ I2C_DRIVER_REQUIRED = yes
+ SRC += eeprom_driver.c eeprom_i2c.c
+ else ifeq ($(strip $(EEPROM_DRIVER)), spi)
+ # External SPI EEPROM implementation
+ OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_SPI
+ SPI_DRIVER_REQUIRED = yes
+ SRC += eeprom_driver.c eeprom_spi.c
+ else ifeq ($(strip $(EEPROM_DRIVER)), legacy_stm32_flash)
+ # STM32 Emulated EEPROM, backed by MCU flash (soon to be deprecated)
+ OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_LEGACY_EMULATED_FLASH
+ COMMON_VPATH += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/flash
+ COMMON_VPATH += $(DRIVER_PATH)/flash
+ SRC += eeprom_driver.c eeprom_legacy_emulated_flash.c legacy_flash_ops.c
+ else ifeq ($(strip $(EEPROM_DRIVER)), transient)
+ # Transient EEPROM implementation -- no data storage but provides runtime area for it
+ OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_TRANSIENT
+ SRC += eeprom_driver.c eeprom_transient.c
+ else ifeq ($(strip $(EEPROM_DRIVER)), vendor)
+ # Vendor-implemented EEPROM
+ OPT_DEFS += -DEEPROM_VENDOR
+ ifeq ($(PLATFORM),AVR)
+ # Automatically provided by avr-libc, nothing required
+ else ifeq ($(PLATFORM),CHIBIOS)
+ ifneq ($(filter %_STM32F072xB %_STM32F042x6, $(MCU_SERIES)_$(MCU_LDSCRIPT)),)
+ # STM32 Emulated EEPROM, backed by MCU flash (soon to be deprecated)
+ OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_LEGACY_EMULATED_FLASH
+ COMMON_VPATH += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/flash
+ COMMON_VPATH += $(DRIVER_PATH)/flash
+ SRC += eeprom_driver.c eeprom_legacy_emulated_flash.c legacy_flash_ops.c
+ else ifneq ($(filter $(MCU_SERIES),STM32F1xx STM32F3xx STM32F4xx STM32L4xx STM32G4xx WB32F3G71xx WB32FQ95xx AT32F415 GD32VF103),)
+ # Wear-leveling EEPROM implementation, backed by MCU flash
+ OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_WEAR_LEVELING
+ SRC += eeprom_driver.c eeprom_wear_leveling.c
+ WEAR_LEVELING_DRIVER ?= embedded_flash
+ else ifneq ($(filter $(MCU_SERIES),STM32L0xx STM32L1xx),)
+ # True EEPROM on STM32L0xx, L1xx
+ OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_STM32_L0_L1
+ SRC += eeprom_driver.c eeprom_stm32_L0_L1.c
+ else ifneq ($(filter $(MCU_SERIES),RP2040),)
+ # Wear-leveling EEPROM implementation, backed by RP2040 flash
+ OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_WEAR_LEVELING
+ SRC += eeprom_driver.c eeprom_wear_leveling.c
+ WEAR_LEVELING_DRIVER ?= rp2040_flash
+ else ifneq ($(filter $(MCU_SERIES),KL2x K20x),)
+ # Teensy EEPROM implementations
+ OPT_DEFS += -DEEPROM_KINETIS_FLEXRAM
+ SRC += eeprom_kinetis_flexram.c
+ else
+ # Fall back to transient, i.e. non-persistent
+ OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_TRANSIENT
+ SRC += eeprom_driver.c eeprom_transient.c
+ endif
+ else ifeq ($(PLATFORM),TEST)
+ # Test harness "EEPROM"
+ OPT_DEFS += -DEEPROM_TEST_HARNESS
+ SRC += eeprom.c
endif
- else ifeq ($(PLATFORM),TEST)
- # Test harness "EEPROM"
- OPT_DEFS += -DEEPROM_TEST_HARNESS
- SRC += eeprom.c
endif
endif
endif
@@ -888,12 +892,11 @@ ifeq ($(strip $(BLUETOOTH_ENABLE)), yes)
OPT_DEFS += -DBLUETOOTH_ENABLE
OPT_DEFS += -DBLUETOOTH_$(strip $(shell echo $(BLUETOOTH_DRIVER) | tr '[:lower:]' '[:upper:]'))
NO_USB_STARTUP_CHECK := yes
+ CONNECTION_ENABLE := yes
COMMON_VPATH += $(DRIVER_PATH)/bluetooth
- SRC += outputselect.c process_connection.c
ifeq ($(strip $(BLUETOOTH_DRIVER)), bluefruit_le)
SPI_DRIVER_REQUIRED = yes
- ANALOG_DRIVER_REQUIRED = yes
SRC += $(DRIVER_PATH)/bluetooth/bluetooth.c
SRC += $(DRIVER_PATH)/bluetooth/bluefruit_le.cpp
endif
@@ -934,6 +937,28 @@ ifeq ($(strip $(DIP_SWITCH_ENABLE)), yes)
endif
endif
+VALID_BATTERY_DRIVER_TYPES := adc custom vendor
+
+BATTERY_DRIVER ?= adc
+ifeq ($(strip $(BATTERY_DRIVER_REQUIRED)), yes)
+ ifeq ($(filter $(BATTERY_DRIVER),$(VALID_BATTERY_DRIVER_TYPES)),)
+ $(call CATASTROPHIC_ERROR,Invalid BATTERY_DRIVER,BATTERY_DRIVER="$(BATTERY_DRIVER)" is not a valid battery driver)
+ endif
+
+ OPT_DEFS += -DBATTERY_DRIVER
+ OPT_DEFS += -DBATTERY_$(strip $(shell echo $(BATTERY_DRIVER) | tr '[:lower:]' '[:upper:]'))
+
+ COMMON_VPATH += $(DRIVER_PATH)/battery
+
+ SRC += battery.c
+ SRC += battery_$(strip $(BATTERY_DRIVER)).c
+
+ # add extra deps
+ ifeq ($(strip $(BATTERY_DRIVER)), adc)
+ ANALOG_DRIVER_REQUIRED = yes
+ endif
+endif
+
VALID_WS2812_DRIVER_TYPES := bitbang custom i2c pwm spi vendor
WS2812_DRIVER ?= bitbang
diff --git a/builddefs/converters.mk b/builddefs/converters.mk
index b1e5a1bed2..20ecea5cb9 100644
--- a/builddefs/converters.mk
+++ b/builddefs/converters.mk
@@ -1,10 +1,3 @@
-# Note for new boards -- CTPC and CONVERT_TO_PROTON_C are deprecated terms
-# and should not be replicated for new boards. These will be removed from
-# documentation as well as existing keymaps in due course.
-ifneq ($(findstring yes, $(CTPC)$(CONVERT_TO_PROTON_C)),)
-$(call CATASTROPHIC_ERROR,The `CONVERT_TO_PROTON_C` and `CTPC` options are now deprecated. `CONVERT_TO=proton_c` should be used instead.)
-endif
-
ifneq (,$(filter $(MCU),atmega32u4))
# TODO: opt in rather than assume everything uses a pro micro
PIN_COMPATIBLE ?= promicro
diff --git a/builddefs/generic_features.mk b/builddefs/generic_features.mk
index f14f440877..c826514431 100644
--- a/builddefs/generic_features.mk
+++ b/builddefs/generic_features.mk
@@ -25,6 +25,7 @@ GENERIC_FEATURES = \
CAPS_WORD \
COMBO \
COMMAND \
+ CONNECTION \
CRC \
DEFERRED_EXEC \
DIGITIZER \
@@ -34,6 +35,7 @@ GENERIC_FEATURES = \
DYNAMIC_TAPPING_TERM \
GRAVE_ESC \
HAPTIC \
+ KEYCODE_STRING \
KEY_LOCK \
KEY_OVERRIDE \
LAYER_LOCK \
@@ -60,6 +62,7 @@ define HANDLE_GENERIC_FEATURE
SRC += $$(wildcard $$(QUANTUM_DIR)/process_keycode/process_$2.c)
SRC += $$(wildcard $$(QUANTUM_DIR)/$2/$2.c)
SRC += $$(wildcard $$(QUANTUM_DIR)/$2.c)
+ SRC += $$(wildcard $$(QUANTUM_DIR)/nvm/$$(NVM_DRIVER_LOWER)/nvm_$2.c)
VPATH += $$(wildcard $$(QUANTUM_DIR)/$2/)
OPT_DEFS += -D$1_ENABLE
endef
diff --git a/data/constants/keycodes/extras/keycodes_belgian_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_belgian_0.0.1.hjson
index d2b8c1d7d9..11b68d16a0 100644
--- a/data/constants/keycodes/extras/keycodes_belgian_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_belgian_0.0.1.hjson
@@ -372,4 +372,4 @@
"label": "~",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_bepo_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_bepo_0.0.1.hjson
index 713f3f2829..7a9dea9d13 100644
--- a/data/constants/keycodes/extras/keycodes_bepo_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_bepo_0.0.1.hjson
@@ -629,4 +629,4 @@
"label": "(narrow non-breaking space)",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_brazilian_abnt2_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_brazilian_abnt2_0.0.1.hjson
index 17006a64df..e28970ed33 100644
--- a/data/constants/keycodes/extras/keycodes_brazilian_abnt2_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_brazilian_abnt2_0.0.1.hjson
@@ -376,4 +376,4 @@
"label": "₢",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_canadian_multilingual_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_canadian_multilingual_0.0.1.hjson
index bfe5d5b54c..a663088e22 100644
--- a/data/constants/keycodes/extras/keycodes_canadian_multilingual_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_canadian_multilingual_0.0.1.hjson
@@ -638,4 +638,4 @@
"label": "÷",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_colemak_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_colemak_0.0.1.hjson
index 1dc091584b..0bf0f3b221 100644
--- a/data/constants/keycodes/extras/keycodes_colemak_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_colemak_0.0.1.hjson
@@ -299,4 +299,4 @@
"label": "?",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_croatian_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_croatian_0.0.1.hjson
index 82632aa637..50464921fa 100644
--- a/data/constants/keycodes/extras/keycodes_croatian_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_croatian_0.0.1.hjson
@@ -400,4 +400,4 @@
"label": "§",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_czech_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_czech_0.0.1.hjson
index 9cfb88c489..8b1572bfcb 100644
--- a/data/constants/keycodes/extras/keycodes_czech_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_czech_0.0.1.hjson
@@ -432,4 +432,4 @@
"label": "*",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_danish_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_danish_0.0.1.hjson
index fffcd9f9ad..0e8f7a75c6 100644
--- a/data/constants/keycodes/extras/keycodes_danish_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_danish_0.0.1.hjson
@@ -356,4 +356,4 @@
"label": "µ",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_dvorak_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_dvorak_0.0.1.hjson
index 534f99c8e6..485d86aa21 100644
--- a/data/constants/keycodes/extras/keycodes_dvorak_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_dvorak_0.0.1.hjson
@@ -299,4 +299,4 @@
"label": ":",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_dvorak_fr_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_dvorak_fr_0.0.1.hjson
index 70c0b3c0aa..69ce14486e 100644
--- a/data/constants/keycodes/extras/keycodes_dvorak_fr_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_dvorak_fr_0.0.1.hjson
@@ -314,4 +314,4 @@
"label": "@",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_dvorak_programmer_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_dvorak_programmer_0.0.1.hjson
index 8a70dae7ef..6fa9868e4c 100644
--- a/data/constants/keycodes/extras/keycodes_dvorak_programmer_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_dvorak_programmer_0.0.1.hjson
@@ -299,4 +299,4 @@
"label": "\"",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_estonian_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_estonian_0.0.1.hjson
index bbf7512581..276d3fe664 100644
--- a/data/constants/keycodes/extras/keycodes_estonian_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_estonian_0.0.1.hjson
@@ -364,4 +364,4 @@
"label": "ž",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_eurkey_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_eurkey_0.0.1.hjson
index 9ff217cff2..9b4fa33053 100644
--- a/data/constants/keycodes/extras/keycodes_eurkey_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_eurkey_0.0.1.hjson
@@ -593,4 +593,4 @@
"label": "…",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_finnish_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_finnish_0.0.1.hjson
index b284192962..a4d3c99a6f 100644
--- a/data/constants/keycodes/extras/keycodes_finnish_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_finnish_0.0.1.hjson
@@ -356,4 +356,4 @@
"label": "µ",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_french_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_french_0.0.1.hjson
index 8ba7b35d2e..351dfe89d8 100644
--- a/data/constants/keycodes/extras/keycodes_french_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_french_0.0.1.hjson
@@ -364,4 +364,4 @@
"label": "¤",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_french_afnor_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_french_afnor_0.0.1.hjson
index 90981d085d..92646c4de8 100644
--- a/data/constants/keycodes/extras/keycodes_french_afnor_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_french_afnor_0.0.1.hjson
@@ -620,4 +620,4 @@
"label": "≠",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_french_mac_iso_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_french_mac_iso_0.0.1.hjson
index b698018d5b..bb924e9852 100644
--- a/data/constants/keycodes/extras/keycodes_french_mac_iso_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_french_mac_iso_0.0.1.hjson
@@ -673,4 +673,4 @@
"label": "±",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_german_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_german_0.0.1.hjson
index a1cfd44956..015438abb2 100644
--- a/data/constants/keycodes/extras/keycodes_german_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_german_0.0.1.hjson
@@ -356,4 +356,4 @@
"label": "µ",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_german_mac_iso_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_german_mac_iso_0.0.1.hjson
index 366ed5b9d1..fa3b8d67b5 100644
--- a/data/constants/keycodes/extras/keycodes_german_mac_iso_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_german_mac_iso_0.0.1.hjson
@@ -653,4 +653,4 @@
"label": "—",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_greek_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_greek_0.0.1.hjson
index 9c7f8796bf..b61a317b19 100644
--- a/data/constants/keycodes/extras/keycodes_greek_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_greek_0.0.1.hjson
@@ -388,4 +388,4 @@
"label": "©",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_hebrew_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_hebrew_0.0.1.hjson
index b519229f35..aaf0563623 100644
--- a/data/constants/keycodes/extras/keycodes_hebrew_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_hebrew_0.0.1.hjson
@@ -344,4 +344,4 @@
"label": "÷",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_hungarian_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_hungarian_0.0.1.hjson
index d4fc908dc0..e7ae0d340c 100644
--- a/data/constants/keycodes/extras/keycodes_hungarian_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_hungarian_0.0.1.hjson
@@ -432,4 +432,4 @@
"label": "*",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_icelandic_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_icelandic_0.0.1.hjson
index f4d6025a77..59478a1018 100644
--- a/data/constants/keycodes/extras/keycodes_icelandic_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_icelandic_0.0.1.hjson
@@ -352,4 +352,4 @@
"label": "µ",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_irish_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_irish_0.0.1.hjson
index 94e553469e..99487a5b90 100644
--- a/data/constants/keycodes/extras/keycodes_irish_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_irish_0.0.1.hjson
@@ -352,4 +352,4 @@
"label": "´ (dead)",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_italian_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_italian_0.0.1.hjson
index 951c564f62..8b859d6de8 100644
--- a/data/constants/keycodes/extras/keycodes_italian_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_italian_0.0.1.hjson
@@ -361,4 +361,4 @@
"label": "}",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_italian_mac_ansi_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_italian_mac_ansi_0.0.1.hjson
index 328755ca67..551f094974 100644
--- a/data/constants/keycodes/extras/keycodes_italian_mac_ansi_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_italian_mac_ansi_0.0.1.hjson
@@ -681,4 +681,4 @@
"label": "—",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_italian_mac_iso_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_italian_mac_iso_0.0.1.hjson
index 4beccd804a..aed90f203d 100644
--- a/data/constants/keycodes/extras/keycodes_italian_mac_iso_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_italian_mac_iso_0.0.1.hjson
@@ -685,4 +685,4 @@
"label": "—",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_japanese_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_japanese_0.0.1.hjson
index d95712abd9..779eef8a84 100644
--- a/data/constants/keycodes/extras/keycodes_japanese_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_japanese_0.0.1.hjson
@@ -327,4 +327,4 @@
"label": "_",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_korean_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_korean_0.0.1.hjson
index 5ee19c9e4e..8e04d8ed2a 100644
--- a/data/constants/keycodes/extras/keycodes_korean_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_korean_0.0.1.hjson
@@ -307,4 +307,4 @@
"label": "?",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_latvian_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_latvian_0.0.1.hjson
index ab80f0fdd9..510a2c83a7 100644
--- a/data/constants/keycodes/extras/keycodes_latvian_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_latvian_0.0.1.hjson
@@ -437,4 +437,4 @@
"label": "¨ (dead)",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_lithuanian_azerty_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_lithuanian_azerty_0.0.1.hjson
index dfb527878e..f6140d7f93 100644
--- a/data/constants/keycodes/extras/keycodes_lithuanian_azerty_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_lithuanian_azerty_0.0.1.hjson
@@ -372,4 +372,4 @@
"label": "\\",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_lithuanian_qwerty_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_lithuanian_qwerty_0.0.1.hjson
index a4ea30d592..2ab6f83c94 100644
--- a/data/constants/keycodes/extras/keycodes_lithuanian_qwerty_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_lithuanian_qwerty_0.0.1.hjson
@@ -365,4 +365,4 @@
"label": "+",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_neo2_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_neo2_0.0.1.hjson
index 980bddbf7a..88ede311a6 100644
--- a/data/constants/keycodes/extras/keycodes_neo2_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_neo2_0.0.1.hjson
@@ -214,4 +214,4 @@
"label": "(layer 4)",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_nordic_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_nordic_0.0.1.hjson
index fb3d1bc84b..8536a004de 100644
--- a/data/constants/keycodes/extras/keycodes_nordic_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_nordic_0.0.1.hjson
@@ -113,4 +113,4 @@
"key": "NO_MU"
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_norman_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_norman_0.0.1.hjson
index 98ea7e6aab..45cd26ae1c 100644
--- a/data/constants/keycodes/extras/keycodes_norman_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_norman_0.0.1.hjson
@@ -299,4 +299,4 @@
"label": "?",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_norwegian_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_norwegian_0.0.1.hjson
index 4e8cbb5d0e..0cc79c5631 100644
--- a/data/constants/keycodes/extras/keycodes_norwegian_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_norwegian_0.0.1.hjson
@@ -352,4 +352,4 @@
"label": "µ",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_plover_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_plover_0.0.1.hjson
index fb00ef0c62..78cfe9dd41 100644
--- a/data/constants/keycodes/extras/keycodes_plover_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_plover_0.0.1.hjson
@@ -83,4 +83,4 @@
"key": "PV_U"
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_plover_dvorak_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_plover_dvorak_0.0.1.hjson
index 9656dd9821..8e1fe29f8b 100644
--- a/data/constants/keycodes/extras/keycodes_plover_dvorak_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_plover_dvorak_0.0.1.hjson
@@ -70,4 +70,4 @@
"key": "PD_U"
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_polish_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_polish_0.0.1.hjson
index 609011b1f7..f09f2c9b64 100644
--- a/data/constants/keycodes/extras/keycodes_polish_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_polish_0.0.1.hjson
@@ -352,4 +352,4 @@
"label": "Ń",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_portuguese_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_portuguese_0.0.1.hjson
index c8e43065d2..ec773ddbb5 100644
--- a/data/constants/keycodes/extras/keycodes_portuguese_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_portuguese_0.0.1.hjson
@@ -352,4 +352,4 @@
"label": "€",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_portuguese_mac_iso_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_portuguese_mac_iso_0.0.1.hjson
index b1c9aaad98..503a3e92a6 100644
--- a/data/constants/keycodes/extras/keycodes_portuguese_mac_iso_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_portuguese_mac_iso_0.0.1.hjson
@@ -617,4 +617,4 @@
"label": "–",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_romanian_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_romanian_0.0.1.hjson
index 42b1e89d3b..f388523146 100644
--- a/data/constants/keycodes/extras/keycodes_romanian_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_romanian_0.0.1.hjson
@@ -441,4 +441,4 @@
"label": "»",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_russian_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_russian_0.0.1.hjson
index d83fc0f61f..41904be634 100644
--- a/data/constants/keycodes/extras/keycodes_russian_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_russian_0.0.1.hjson
@@ -288,4 +288,4 @@
"label": "₽",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_serbian_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_serbian_0.0.1.hjson
index 98957930a0..3ddd7f15df 100644
--- a/data/constants/keycodes/extras/keycodes_serbian_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_serbian_0.0.1.hjson
@@ -304,4 +304,4 @@
"label": "€",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_serbian_latin_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_serbian_latin_0.0.1.hjson
index ca4746b646..eec0877aa7 100644
--- a/data/constants/keycodes/extras/keycodes_serbian_latin_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_serbian_latin_0.0.1.hjson
@@ -404,4 +404,4 @@
"label": "§",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_slovak_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_slovak_0.0.1.hjson
index 14eb4b783a..dbf39b5f49 100644
--- a/data/constants/keycodes/extras/keycodes_slovak_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_slovak_0.0.1.hjson
@@ -440,4 +440,4 @@
"label": "}",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_slovenian_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_slovenian_0.0.1.hjson
index fd1a4eb4fc..d264d3d392 100644
--- a/data/constants/keycodes/extras/keycodes_slovenian_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_slovenian_0.0.1.hjson
@@ -400,4 +400,4 @@
"label": "§",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_spanish_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_spanish_0.0.1.hjson
index db3b068e97..9656e35674 100644
--- a/data/constants/keycodes/extras/keycodes_spanish_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_spanish_0.0.1.hjson
@@ -356,4 +356,4 @@
"label": "}",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_spanish_dvorak_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_spanish_dvorak_0.0.1.hjson
index 39119a6a91..fa0a93ff85 100644
--- a/data/constants/keycodes/extras/keycodes_spanish_dvorak_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_spanish_dvorak_0.0.1.hjson
@@ -356,4 +356,4 @@
"label": "}",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_spanish_latin_america_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_spanish_latin_america_0.0.1.hjson
index fb1de29e6e..51ad69a55a 100644
--- a/data/constants/keycodes/extras/keycodes_spanish_latin_america_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_spanish_latin_america_0.0.1.hjson
@@ -340,4 +340,4 @@
"label": "`",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_swedish_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_swedish_0.0.1.hjson
index 6db71ea241..f538a81bd9 100644
--- a/data/constants/keycodes/extras/keycodes_swedish_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_swedish_0.0.1.hjson
@@ -356,4 +356,4 @@
"label": "µ",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_swedish_mac_ansi_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_swedish_mac_ansi_0.0.1.hjson
index ab7c3ad8d1..59f0173e89 100644
--- a/data/constants/keycodes/extras/keycodes_swedish_mac_ansi_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_swedish_mac_ansi_0.0.1.hjson
@@ -639,4 +639,4 @@
"label": "—",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_swedish_mac_iso_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_swedish_mac_iso_0.0.1.hjson
index cafd815776..cf2c0d9fdf 100644
--- a/data/constants/keycodes/extras/keycodes_swedish_mac_iso_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_swedish_mac_iso_0.0.1.hjson
@@ -637,4 +637,4 @@
"label": "—",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_swedish_pro_mac_ansi_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_swedish_pro_mac_ansi_0.0.1.hjson
index c82c79c711..911cbc2be8 100644
--- a/data/constants/keycodes/extras/keycodes_swedish_pro_mac_ansi_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_swedish_pro_mac_ansi_0.0.1.hjson
@@ -639,4 +639,4 @@
"label": "—",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_swedish_pro_mac_iso_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_swedish_pro_mac_iso_0.0.1.hjson
index 4555739ccd..d8e532f792 100644
--- a/data/constants/keycodes/extras/keycodes_swedish_pro_mac_iso_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_swedish_pro_mac_iso_0.0.1.hjson
@@ -637,4 +637,4 @@
"label": "—",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_swiss_de_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_swiss_de_0.0.1.hjson
index ae260a5e56..e4a5f91158 100644
--- a/data/constants/keycodes/extras/keycodes_swiss_de_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_swiss_de_0.0.1.hjson
@@ -376,4 +376,4 @@
"label": "\\",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_swiss_fr_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_swiss_fr_0.0.1.hjson
index 83fb86e49c..e518658314 100644
--- a/data/constants/keycodes/extras/keycodes_swiss_fr_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_swiss_fr_0.0.1.hjson
@@ -376,4 +376,4 @@
"label": "\\",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_turkish_f_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_turkish_f_0.0.1.hjson
index 2689f10dbe..0f527e04d6 100644
--- a/data/constants/keycodes/extras/keycodes_turkish_f_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_turkish_f_0.0.1.hjson
@@ -477,4 +477,4 @@
"label": "º",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_turkish_q_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_turkish_q_0.0.1.hjson
index e00cee9ce3..e736bb52a2 100644
--- a/data/constants/keycodes/extras/keycodes_turkish_q_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_turkish_q_0.0.1.hjson
@@ -372,4 +372,4 @@
"label": "` (dead)",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_uk_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_uk_0.0.1.hjson
index 006bf5c59e..aa97e11fa9 100644
--- a/data/constants/keycodes/extras/keycodes_uk_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_uk_0.0.1.hjson
@@ -350,4 +350,4 @@
"label": "Á"
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_ukrainian_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_ukrainian_0.0.1.hjson
index 2e8629f58b..3596dc14e0 100644
--- a/data/constants/keycodes/extras/keycodes_ukrainian_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_ukrainian_0.0.1.hjson
@@ -292,4 +292,4 @@
"label": "ґ",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_us_extended_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_us_extended_0.0.1.hjson
index ecac6ca161..15b21dd526 100644
--- a/data/constants/keycodes/extras/keycodes_us_extended_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_us_extended_0.0.1.hjson
@@ -585,4 +585,4 @@
"label": "̉ (dead)",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_us_international_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_us_international_0.0.1.hjson
index 36a574a4ad..34328be8b8 100644
--- a/data/constants/keycodes/extras/keycodes_us_international_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_us_international_0.0.1.hjson
@@ -505,4 +505,4 @@
"label": "¢",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_us_international_linux_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_us_international_linux_0.0.1.hjson
index d6bdf2e02d..fcf848dd87 100644
--- a/data/constants/keycodes/extras/keycodes_us_international_linux_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_us_international_linux_0.0.1.hjson
@@ -573,4 +573,4 @@
"label": "̉ (dead)",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_workman_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_workman_0.0.1.hjson
index 27471a15e4..14220e560e 100644
--- a/data/constants/keycodes/extras/keycodes_workman_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_workman_0.0.1.hjson
@@ -299,4 +299,4 @@
"label": "?",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/extras/keycodes_workman_zxcvm_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_workman_zxcvm_0.0.1.hjson
index 86f6a5bffb..f05ec1a3ea 100644
--- a/data/constants/keycodes/extras/keycodes_workman_zxcvm_0.0.1.hjson
+++ b/data/constants/keycodes/extras/keycodes_workman_zxcvm_0.0.1.hjson
@@ -299,4 +299,4 @@
"label": "?",
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/keycodes_0.0.1.hjson b/data/constants/keycodes/keycodes_0.0.1.hjson
index 7ba1ecf201..c40baf13dc 100644
--- a/data/constants/keycodes/keycodes_0.0.1.hjson
+++ b/data/constants/keycodes/keycodes_0.0.1.hjson
@@ -93,4 +93,4 @@
"key": "SAFE_RANGE"
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/keycodes_0.0.1_joystick.hjson b/data/constants/keycodes/keycodes_0.0.1_joystick.hjson
index 0bda7c29f3..b851d72eef 100644
--- a/data/constants/keycodes/keycodes_0.0.1_joystick.hjson
+++ b/data/constants/keycodes/keycodes_0.0.1_joystick.hjson
@@ -225,4 +225,4 @@
]
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/keycodes_0.0.1_magic.hjson b/data/constants/keycodes/keycodes_0.0.1_magic.hjson
index 7ee1f2bce9..0e3e8dc55f 100644
--- a/data/constants/keycodes/keycodes_0.0.1_magic.hjson
+++ b/data/constants/keycodes/keycodes_0.0.1_magic.hjson
@@ -246,4 +246,4 @@
]
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/keycodes_0.0.1_programmable_button.hjson b/data/constants/keycodes/keycodes_0.0.1_programmable_button.hjson
index 645bcd6a39..7d031728a6 100644
--- a/data/constants/keycodes/keycodes_0.0.1_programmable_button.hjson
+++ b/data/constants/keycodes/keycodes_0.0.1_programmable_button.hjson
@@ -225,4 +225,4 @@
]
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/keycodes_0.0.1_sequencer.hjson b/data/constants/keycodes/keycodes_0.0.1_sequencer.hjson
index 039d09b2fa..85844ae99c 100644
--- a/data/constants/keycodes/keycodes_0.0.1_sequencer.hjson
+++ b/data/constants/keycodes/keycodes_0.0.1_sequencer.hjson
@@ -37,4 +37,4 @@
"key": "SQ_SCLR"
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/keycodes_0.0.2_basic.hjson b/data/constants/keycodes/keycodes_0.0.2_basic.hjson
index 2b5df85d99..d9cefe7e93 100644
--- a/data/constants/keycodes/keycodes_0.0.2_basic.hjson
+++ b/data/constants/keycodes/keycodes_0.0.2_basic.hjson
@@ -17,4 +17,4 @@
]
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/keycodes_0.0.2_magic.hjson b/data/constants/keycodes/keycodes_0.0.2_magic.hjson
index 81758975e3..2fc8ba038d 100644
--- a/data/constants/keycodes/keycodes_0.0.2_magic.hjson
+++ b/data/constants/keycodes/keycodes_0.0.2_magic.hjson
@@ -248,4 +248,4 @@
]
}
}
-} \ No newline at end of file
+}
diff --git a/data/constants/keycodes/keycodes_0.0.2_sequencer.hjson b/data/constants/keycodes/keycodes_0.0.2_sequencer.hjson
index eedaed166c..445a2c9328 100644
--- a/data/constants/keycodes/keycodes_0.0.2_sequencer.hjson
+++ b/data/constants/keycodes/keycodes_0.0.2_sequencer.hjson
@@ -66,4 +66,4 @@
]
}
}
-} \ No newline at end of file
+}
diff --git a/data/mappings/info_config.hjson b/data/mappings/info_config.hjson
index b643553b52..bab881583a 100644
--- a/data/mappings/info_config.hjson
+++ b/data/mappings/info_config.hjson
@@ -201,6 +201,7 @@
// Tapping
"CHORDAL_HOLD": {"info_key": "tapping.chordal_hold", "value_type": "flag"},
+ "FLOW_TAP_TERM": {"info_key": "tapping.flow_tap_term", "value_type": "int"},
"HOLD_ON_OTHER_KEY_PRESS": {"info_key": "tapping.hold_on_other_key_press", "value_type": "flag"},
"HOLD_ON_OTHER_KEY_PRESS_PER_KEY": {"info_key": "tapping.hold_on_other_key_press_per_key", "value_type": "flag"},
"PERMISSIVE_HOLD": {"info_key": "tapping.permissive_hold", "value_type": "flag"},
diff --git a/data/mappings/info_rules.hjson b/data/mappings/info_rules.hjson
index 00685b5b5f..238957f170 100644
--- a/data/mappings/info_rules.hjson
+++ b/data/mappings/info_rules.hjson
@@ -53,8 +53,8 @@
"WS2812_DRIVER": {"info_key": "ws2812.driver"},
// Items we want flagged in lint
- "CTPC": {"info_key": "_deprecated.ctpc", "deprecated": true, "replace_with": "CONVERT_TO=proton_c"},
- "CONVERT_TO_PROTON_C": {"info_key": "_deprecated.ctpc", "deprecated": true, "replace_with": "CONVERT_TO=proton_c"},
"DEFAULT_FOLDER": {"info_key": "_deprecated.default_folder", "deprecated": true},
+ "CTPC": {"info_key": "_invalid.ctpc", "invalid": true, "replace_with": "CONVERT_TO=proton_c"},
+ "CONVERT_TO_PROTON_C": {"info_key": "_invalid.ctpc", "invalid": true, "replace_with": "CONVERT_TO=proton_c"},
"VIAL_ENABLE": {"info_key": "_invalid.vial", "invalid": true}
}
diff --git a/data/mappings/keyboard_aliases.hjson b/data/mappings/keyboard_aliases.hjson
index b601a42761..0a640fd3e0 100644
--- a/data/mappings/keyboard_aliases.hjson
+++ b/data/mappings/keyboard_aliases.hjson
@@ -146,6 +146,9 @@
"daisy": {
"target": "ktec/daisy"
},
+ "deemen17/de60": {
+ "target": "deemen17/de60/r1"
+ },
"dp3000": {
"target": "dp3000/rev1"
},
@@ -347,6 +350,9 @@
"keycapsss/plaid_pad": {
"target": "keycapsss/plaid_pad/rev1"
},
+ "keyten/kt60hs_t": {
+ "target": "keyten/kt60hs_t/v1"
+ },
"kira75": {
"target": "kira/kira75"
},
@@ -581,6 +587,9 @@
"ploopyco/trackball": {
"target": "ploopyco/trackball/rev1_005"
},
+ "plywrks/ply8x": {
+ "target": "plywrks/ply8x/solder"
+ },
"polilla": {
"target": "polilla/rev1"
},
diff --git a/data/schemas/community_module.jsonschema b/data/schemas/community_module.jsonschema
index 3cdb6d6a42..feced00508 100644
--- a/data/schemas/community_module.jsonschema
+++ b/data/schemas/community_module.jsonschema
@@ -7,6 +7,7 @@
"properties": {
"module_name": {"$ref": "qmk.definitions.v1#/text_identifier"},
"maintainer": {"$ref": "qmk.definitions.v1#/text_identifier"},
+ "license": {"type": "string"},
"url": {
"type": "string",
"format": "uri"
diff --git a/data/schemas/keyboard.jsonschema b/data/schemas/keyboard.jsonschema
index 92a17e1ef8..4e8bae1084 100644
--- a/data/schemas/keyboard.jsonschema
+++ b/data/schemas/keyboard.jsonschema
@@ -319,7 +319,7 @@
"properties": {
"driver": {
"type": "string",
- "enum": ["custom", "embedded_flash", "legacy", "rp2040_flash", "spi_flash"]
+ "enum": ["none", "custom", "embedded_flash", "legacy", "rp2040_flash", "spi_flash"]
},
"backing_size": {"$ref": "qmk.definitions.v1#/unsigned_int"},
"logical_size": {"$ref": "qmk.definitions.v1#/unsigned_int"}
@@ -554,6 +554,7 @@
"items": {
"type": "object",
"additionalProperties": false,
+ "required": ["x", "y"],
"properties": {
"matrix": {
"type": "array",
@@ -640,6 +641,7 @@
"items": {
"type": "object",
"additionalProperties": false,
+ "required": ["x", "y"],
"properties": {
"matrix": {
"type": "array",
diff --git a/docs/_sidebar.json b/docs/_sidebar.json
index ae4d8fe4a9..f504f6f900 100644
--- a/docs/_sidebar.json
+++ b/docs/_sidebar.json
@@ -227,6 +227,7 @@
{ "text": "ADC Driver", "link": "/drivers/adc" },
{ "text": "APA102 Driver", "link": "/drivers/apa102" },
{ "text": "Audio Driver", "link": "/drivers/audio" },
+ { "text": "Battery Driver", "link": "/drivers/battery" },
{ "text": "EEPROM Driver", "link": "/drivers/eeprom" },
{ "text": "Flash Driver", "link": "/drivers/flash" },
{ "text": "I2C Driver", "link": "/drivers/i2c" },
diff --git a/docs/cli.md b/docs/cli.md
index 7d4c10cedd..36983d5e00 100644
--- a/docs/cli.md
+++ b/docs/cli.md
@@ -6,7 +6,7 @@ The QMK CLI (command line interface) makes building and working with QMK keyboar
### Requirements {#requirements}
-QMK requires Python 3.7 or greater. We try to keep the number of requirements small but you will also need to install the packages listed in [`requirements.txt`](https://github.com/qmk/qmk_firmware/blob/master/requirements.txt). These are installed automatically when you install the QMK CLI.
+QMK requires Python 3.9 or greater. We try to keep the number of requirements small but you will also need to install the packages listed in [`requirements.txt`](https://github.com/qmk/qmk_firmware/blob/master/requirements.txt). These are installed automatically when you install the QMK CLI.
### Install Using Homebrew (macOS, some Linux) {#install-using-homebrew}
@@ -20,7 +20,7 @@ qmk setup # This will clone `qmk/qmk_firmware` and optionally set up your build
### Install Using pip {#install-using-easy_install-or-pip}
-If your system is not listed above you can install QMK manually. First ensure that you have Python 3.7 (or later) installed and have installed pip. Then install QMK with this command:
+If your system is not listed above you can install QMK manually. First ensure that you have Python 3.9 (or later) installed and have installed pip. Then install QMK with this command:
```
python3 -m pip install qmk
diff --git a/docs/cli_development.md b/docs/cli_development.md
index 2e74220d4b..74ac53d327 100644
--- a/docs/cli_development.md
+++ b/docs/cli_development.md
@@ -44,7 +44,7 @@ def hello(cli):
First we import the `cli` object from `milc`. This is how we interact with the user and control the script's behavior. We use `@cli.argument()` to define a command line flag, `--name`. This also creates a configuration variable named `hello.name` (and the corresponding `user.name`) which the user can set so they don't have to specify the argument. The `cli.subcommand()` decorator designates this function as a subcommand. The name of the subcommand will be taken from the name of the function.
-Once inside our function we find a typical "Hello, World!" program. We use `cli.log` to access the underlying [Logger Object](https://docs.python.org/3.7/library/logging.html#logger-objects), whose behavior is user controllable. We also access the value for name supplied by the user as `cli.config.hello.name`. The value for `cli.config.hello.name` will be determined by looking at the `--name` argument supplied by the user, if not provided it will use the value in the `qmk.ini` config file, and if neither of those is provided it will fall back to the default supplied in the `cli.argument()` decorator.
+Once inside our function we find a typical "Hello, World!" program. We use `cli.log` to access the underlying [Logger Object](https://docs.python.org/3.9/library/logging.html#logger-objects), whose behavior is user controllable. We also access the value for name supplied by the user as `cli.config.hello.name`. The value for `cli.config.hello.name` will be determined by looking at the `--name` argument supplied by the user, if not provided it will use the value in the `qmk.ini` config file, and if neither of those is provided it will fall back to the default supplied in the `cli.argument()` decorator.
# User Interaction
@@ -56,13 +56,13 @@ There are two main methods for outputting text in a subcommand- `cli.log` and `c
You can use special tokens to colorize your text, to make it easier to understand the output of your program. See [Colorizing Text](#colorizing-text) below.
-Both of these methods support built-in string formatting using python's [printf style string format operations](https://docs.python.org/3.7/library/stdtypes.html#old-string-formatting). You can use tokens such as `%s` and `%d` within your text strings then pass the values as arguments. See our Hello, World program above for an example.
+Both of these methods support built-in string formatting using python's [printf style string format operations](https://docs.python.org/3.9/library/stdtypes.html#old-string-formatting). You can use tokens such as `%s` and `%d` within your text strings then pass the values as arguments. See our Hello, World program above for an example.
You should never use the format operator (`%`) directly, always pass values as arguments.
### Logging (`cli.log`)
-The `cli.log` object gives you access to a [Logger Object](https://docs.python.org/3.7/library/logging.html#logger-objects). We have configured our log output to show the user a nice emoji for each log level (or the log level name if their terminal does not support unicode.) This way the user can tell at a glance which messages are most important when something goes wrong.
+The `cli.log` object gives you access to a [Logger Object](https://docs.python.org/3.9/library/logging.html#logger-objects). We have configured our log output to show the user a nice emoji for each log level (or the log level name if their terminal does not support unicode.) This way the user can tell at a glance which messages are most important when something goes wrong.
The default log level is `INFO`. If the user runs `qmk -v <subcommand>` the default log level will be set to `DEBUG`.
diff --git a/docs/coding_conventions_python.md b/docs/coding_conventions_python.md
index 502ee9102e..b25466bf82 100644
--- a/docs/coding_conventions_python.md
+++ b/docs/coding_conventions_python.md
@@ -2,7 +2,7 @@
Most of our style follows PEP8 with some local modifications to make things less nit-picky.
-* We target Python 3.7 for compatibility with all supported platforms.
+* We target Python 3.9 for compatibility with all supported platforms.
* We indent using four (4) spaces (soft tabs)
* We encourage liberal use of comments
* Think of them as a story describing the feature
@@ -317,7 +317,7 @@ At the time of this writing our tests are not very comprehensive. Looking at the
## Integration Tests
-Integration tests can be found in `lib/python/qmk/tests/test_cli_commands.py`. This is where CLI commands are actually run and their overall behavior is verified. We use [`subprocess`](https://docs.python.org/3.7/library/subprocess.html#module-subprocess) to launch each CLI command and a combination of checking output and returncode to determine if the right thing happened.
+Integration tests can be found in `lib/python/qmk/tests/test_cli_commands.py`. This is where CLI commands are actually run and their overall behavior is verified. We use [`subprocess`](https://docs.python.org/3.9/library/subprocess.html#module-subprocess) to launch each CLI command and a combination of checking output and returncode to determine if the right thing happened.
## Unit Tests
diff --git a/docs/configurator_diagram.drawio b/docs/configurator_diagram.drawio
index 091a3a76b8..661f884def 100644
--- a/docs/configurator_diagram.drawio
+++ b/docs/configurator_diagram.drawio
@@ -1 +1 @@
-<mxfile host="Electron" modified="2021-08-09T19:46:29.036Z" agent="5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/14.6.13 Chrome/89.0.4389.128 Electron/12.0.7 Safari/537.36" etag="PQ2r34UrZa0TfW4Fw0EV" version="14.6.13" type="device"><diagram id="NEtccoSKIy4HskWlhJpu" name="Page-1">5VvbcqM4EP2a1O4+hOLqy2Ni5zKX1CTxzszOU0oG2dZEIBZEYu/XbwuEDQg7csZ2vFlXjQca0RLdR+eohXPiDML5VYLi2Q0LMD2xzWB+4gxPbNvqezb8JywLaTFtr7BMExJI28owIv/gsqG0ZiTAaa0hZ4xyEteNPosi7POaDSUJe643mzBa7zVGU6wYRj6iqvU7CfissPY8c2W/xmQ6K3u2THklRGVjaUhnKGDPFZNzceIMEsZ4cRTOB5iK6JVxKe67XHN1ObAER1znhgfT76Zzxxp3Z49j5+7zjw/z+NSS+XlCNJNPLEfLF2UIcAARkacs4TM2ZRGiFyvrecKyKMCiHxPOVm0+MxaD0QLjT8z5QqYXZZyBacZDKq/iKDgTyYLTiEW4sFwSSqXLAKWz3L9orD64jEXKssTHG57WlQBCyRTzTVGRDsWTV3qQcb3CLMQ8WUCDBFPEyVMdK0hCbrpst8oKHMjEbJEk9+UckTDHcTWm0jQk4RR6pWQM3z4l8QNKuDhkYZxxnKRw/J0ljymHJ2HRg2X35vDPiKPp2kA/4YTj+cbIyKunjmv0zMpHeljSQXH6XJla0jSrzKrStvPIei9Hdgm9HNoZpyTCgyXZmPWYI0qmERz7EDGcgIGiMaa3LCUittULIoQEaOZzo8GYcc7CSoMz6ZKLqXQOJBKLgYXzqSBc4xmPKcy11JgSPsvG0GLCIn6JQkJFiK8xfcLCjbwgJyDM+uJ8wChL8ud0ivSILnjCHnHblQlMyIp9kn/ADkMJCK55G14OL4YXmybrFhhyOzXQtKEGdMVwVeBUzDvHTjmKjdS54jWfojQlfpP3YCR/CRwZXnn6o3ptOJcgK84W8gwma8JVz7lZ0qZVI9Ff401PkzddTdqsJM5rme6lTZtdZQ+3jMCTLXFjlRkqyaZJI8Vzy7uqytl01Gk4chqOisAojnJYLR/7F5BWTpkV0gZUTDjgbnOUxTEorqCosxO7QyGG5+MEjqbiaDBLoPsTGzo2L0mCJ2yuNhri9FHQi21+iehCAfHzjHA8ilEOkWegnTqGm0QVkiDIVwU5950j/3Garw9Kdsjd7YYZlmurkhlUYrDNFoB19qUnltPCCUW40xhFZcBnnIvl65noTChxNCFT4+/w0ZiEZXOwV+9Qk9bmd0SiKYTeNm+F9AM2RKTX3tno4iN6QiM/IbFYHXz7eqHeOJI8AeM2YbTQDL4fiuFnCeIs0RvmNUt54eWqUK1iwOnaZ28Asr7cfC0894E/q2PYehDs7w2CGqtFdbndqklVRaoI1BpN2tEaXVdryql2JGKzTKiEgvdasXHchqNDi01XAz/vpiK0tOHW0YTbYUpC6/1ULj9TuH0XlWZ93riOuhjotsz/rmf09pWkjpKkuvI/4sWYoSRIG+K/ks9PsgV4ucEcBYgjXV2ekCR8hoiq7a+uoeGZX+RN3PQ1BsdiwXB2+wG+h629rFR7SKDaRPSLj4VIm7n2ptsuG2voPKRIu7Zt9N9apHtbiXRr7VirASVHVgtAc4cFoDZNekclypZnWK5p9Tp9y+v1up1y73nRQMbWBWHdz3LP90ASbav14HuW6L4m9spsHotE95Us3d18Kkm2mS5KSZziik76lGXBy+XNLpTTq8O5Y6rKadkts3Rv27JlZ2uFE8VkrWTeX4z+nGS0DLSeWILDTYp3jyJ/Bqsf2xRrFXP4Bb6+3fy2tegdUuc6pqenct29pVFjkfryDulhtzDLWXskCnbarCtd75WadaoUlpqqBelBi0qzWDRINwzZanTkOObmkTVv8Pq1G+CgGMNuRVSl53csonZXV0R7RyWitrobIasPMMoCRGF4WY807b+PnD+OS3idXh347fuHrdrbt8qWu4+5WpzU1RcE81QocLTwHcMPIiMoUsJEPtI8+obPWqRZRlNK7+kLoqskejut3UWCeg1msh3L6PYrn54qsf2WbO3thYOjrpTeTGK1Oea4ikSQ/EaSX7t1qwiZfeC9W6ft9dO71TSn/D3YS3hz7KPSNEct3+/vlDyVciS2/FLOEnwYSWpskXS7ai3YOSjB2WqwcEDEm+9cjEwRuqaGfGTineJdhrOW3c/2AjApnO6/BNxBkpqVXrfz1pWes91Lx73KkPZ+UTkP31qHyiw26zFt2fEacGiWiPtWHXWNXvwuIIwpETNmDbPhuZhhAcvG+RWrJj3Wm2x99Vt+QXLYrS9XXdAVu4YDCCehIpztbHefRVH+a07dX22sc/efoLy+/daU5+pswh+I8vRXQt3joDyZVbeW015ztaxLgHU3/eZbnT3Tn6uuULYGwoF/z+lo7wYdF16AHes00GuuO/V3Qxui2bP0ULP1bqjTYK5yS2Gvm5vu/6sQ1IVzKa67KwTXEJK3GVu6KLWd14H0ZRjB6eovj4rmqz/gci7+BQ==</diagram></mxfile> \ No newline at end of file
+<mxfile host="Electron" modified="2021-08-09T19:46:29.036Z" agent="5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/14.6.13 Chrome/89.0.4389.128 Electron/12.0.7 Safari/537.36" etag="PQ2r34UrZa0TfW4Fw0EV" version="14.6.13" type="device"><diagram id="NEtccoSKIy4HskWlhJpu" name="Page-1">5VvbcqM4EP2a1O4+hOLqy2Ni5zKX1CTxzszOU0oG2dZEIBZEYu/XbwuEDQg7csZ2vFlXjQca0RLdR+eohXPiDML5VYLi2Q0LMD2xzWB+4gxPbNvqezb8JywLaTFtr7BMExJI28owIv/gsqG0ZiTAaa0hZ4xyEteNPosi7POaDSUJe643mzBa7zVGU6wYRj6iqvU7CfissPY8c2W/xmQ6K3u2THklRGVjaUhnKGDPFZNzceIMEsZ4cRTOB5iK6JVxKe67XHN1ObAER1znhgfT76Zzxxp3Z49j5+7zjw/z+NSS+XlCNJNPLEfLF2UIcAARkacs4TM2ZRGiFyvrecKyKMCiHxPOVm0+MxaD0QLjT8z5QqYXZZyBacZDKq/iKDgTyYLTiEW4sFwSSqXLAKWz3L9orD64jEXKssTHG57WlQBCyRTzTVGRDsWTV3qQcb3CLMQ8WUCDBFPEyVMdK0hCbrpst8oKHMjEbJEk9+UckTDHcTWm0jQk4RR6pWQM3z4l8QNKuDhkYZxxnKRw/J0ljymHJ2HRg2X35vDPiKPp2kA/4YTj+cbIyKunjmv0zMpHeljSQXH6XJla0jSrzKrStvPIei9Hdgm9HNoZpyTCgyXZmPWYI0qmERz7EDGcgIGiMaa3LCUittULIoQEaOZzo8GYcc7CSoMz6ZKLqXQOJBKLgYXzqSBc4xmPKcy11JgSPsvG0GLCIn6JQkJFiK8xfcLCjbwgJyDM+uJ8wChL8ud0ivSILnjCHnHblQlMyIp9kn/ADkMJCK55G14OL4YXmybrFhhyOzXQtKEGdMVwVeBUzDvHTjmKjdS54jWfojQlfpP3YCR/CRwZXnn6o3ptOJcgK84W8gwma8JVz7lZ0qZVI9Ff401PkzddTdqsJM5rme6lTZtdZQ+3jMCTLXFjlRkqyaZJI8Vzy7uqytl01Gk4chqOisAojnJYLR/7F5BWTpkV0gZUTDjgbnOUxTEorqCosxO7QyGG5+MEjqbiaDBLoPsTGzo2L0mCJ2yuNhri9FHQi21+iehCAfHzjHA8ilEOkWegnTqGm0QVkiDIVwU5950j/3Garw9Kdsjd7YYZlmurkhlUYrDNFoB19qUnltPCCUW40xhFZcBnnIvl65noTChxNCFT4+/w0ZiEZXOwV+9Qk9bmd0SiKYTeNm+F9AM2RKTX3tno4iN6QiM/IbFYHXz7eqHeOJI8AeM2YbTQDL4fiuFnCeIs0RvmNUt54eWqUK1iwOnaZ28Asr7cfC0894E/q2PYehDs7w2CGqtFdbndqklVRaoI1BpN2tEaXVdryql2JGKzTKiEgvdasXHchqNDi01XAz/vpiK0tOHW0YTbYUpC6/1ULj9TuH0XlWZ93riOuhjotsz/rmf09pWkjpKkuvI/4sWYoSRIG+K/ks9PsgV4ucEcBYgjXV2ekCR8hoiq7a+uoeGZX+RN3PQ1BsdiwXB2+wG+h629rFR7SKDaRPSLj4VIm7n2ptsuG2voPKRIu7Zt9N9apHtbiXRr7VirASVHVgtAc4cFoDZNekclypZnWK5p9Tp9y+v1up1y73nRQMbWBWHdz3LP90ASbav14HuW6L4m9spsHotE95Us3d18Kkm2mS5KSZziik76lGXBy+XNLpTTq8O5Y6rKadkts3Rv27JlZ2uFE8VkrWTeX4z+nGS0DLSeWILDTYp3jyJ/Bqsf2xRrFXP4Bb6+3fy2tegdUuc6pqenct29pVFjkfryDulhtzDLWXskCnbarCtd75WadaoUlpqqBelBi0qzWDRINwzZanTkOObmkTVv8Pq1G+CgGMNuRVSl53csonZXV0R7RyWitrobIasPMMoCRGF4WY807b+PnD+OS3idXh347fuHrdrbt8qWu4+5WpzU1RcE81QocLTwHcMPIiMoUsJEPtI8+obPWqRZRlNK7+kLoqskejut3UWCeg1msh3L6PYrn54qsf2WbO3thYOjrpTeTGK1Oea4ikSQ/EaSX7t1qwiZfeC9W6ft9dO71TSn/D3YS3hz7KPSNEct3+/vlDyVciS2/FLOEnwYSWpskXS7ai3YOSjB2WqwcEDEm+9cjEwRuqaGfGTineJdhrOW3c/2AjApnO6/BNxBkpqVXrfz1pWes91Lx73KkPZ+UTkP31qHyiw26zFt2fEacGiWiPtWHXWNXvwuIIwpETNmDbPhuZhhAcvG+RWrJj3Wm2x99Vt+QXLYrS9XXdAVu4YDCCehIpztbHefRVH+a07dX22sc/efoLy+/daU5+pswh+I8vRXQt3joDyZVbeW015ztaxLgHU3/eZbnT3Tn6uuULYGwoF/z+lo7wYdF16AHes00GuuO/V3Qxui2bP0ULP1bqjTYK5yS2Gvm5vu/6sQ1IVzKa67KwTXEJK3GVu6KLWd14H0ZRjB6eovj4rmqz/gci7+BQ==</diagram></mxfile>
diff --git a/docs/configurator_diagram.svg b/docs/configurator_diagram.svg
index bcf0bf76d1..1e540d70a6 100644
--- a/docs/configurator_diagram.svg
+++ b/docs/configurator_diagram.svg
@@ -1,3 +1,3 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="1261px" height="991px" viewBox="-0.5 -0.5 1261 991" style="background-color: rgb(255, 255, 255);"><defs/><g><path d="M 885.2 40 L 1060 40" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><image x="804.7" y="-0.5" width="80" height="80" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHcAAAB8CAYAAABT/i9JAAAgAElEQVR4Xu19CbhdZXnuu/Y8n3k+OUPmhAyQQMJMQCZxqFpBvU7VKk6otQIq4BBBLVQF7a2ot/a2trW3j09br+3F1lZAJBBIQkLInJOcedjD2WfPwxrv8/3/+tdee+eckIRDCMcsnnCmvdfee73r/Yb3+77/l3D+OKMr0NbZ8xmfz/95p9PVkEonP5SMTf7zGZ3oVXyS9Cqee8GdurV10RKP3/tIMBS+0e3xegzDAP3TNA3pmcQTU+PD1wPQz5UPfh7cU0Cis6fvM35/6PPBcF0PXTACVNd19lWWy8hnZiBJBnKZ9NJ0On3sFE55Vh5yHtw5LnNbb29/wO3/fjBcd6PX5/MYugGdmGqCmkknIZcKcLlcYIDDQHomeR7cs3LbnuGL9PYvuSMQjNwVqqvvkSBxQA0dBG6pXER2ZpqB6XA5icKMvfSPvk+nzoN7hpf91Xtab29vv8cf/n64rv5Gnz9QxVLd0JFOJlAqFuBymyy1g0qcZdgayJwH99UD6XTP3L985R3BYPiu+vqmHkmqZmmxWEAqGWcG1+kklnIA6T9AgivYjIBHwkx8gjMYBO7MebN8uiDM5+N7e1f0B8OB74XrG28KBAMeXTdNq66zIGl6OoZSPgeX2819qQkcM71OP3zNfWjoXgU5n4YrN4TxwUOWWc6kz4M7n1id8rmWr1x9RzBSf2dDY0uvwyGBg0qAGigW8piOT7FzMZYyU8v/SZIL4dZeRDpWQPLVM4YSzvmZKbgZuAfNxwLZ8+CeMh6v+IG9K1b0hwOR7zU2Nt0UCIYqLDV0aJqORGwC+VwOHo+HvZYAlL66A/Vo6V2Ftv41cDg9KJZkZDIZ6Dx2QoHAzQ9h/LgJLgxk06nzZvkVo/YyJ1i5dv0ddZGGOxubW3slh8QiXcHSfD6H+NQEIJEvdVVFvJLkQF3HEnQsXofG1m4oGt0EGlRVR0kuI5PNmcETZ64nP4QxE1z6QzZzHtxXBdsVK9b1ByKB7zU1td4UDIc9PCel3FSHrumYmhhDPp+Bxy1YWvGnHn8EnUvXo2vxGji9PsZqTdVs4GoolRXkcjnOXBBzJ+HJD2Ps+AGL8edFjHmG9oILN3yqvr7xrpbW9l7J4aiw1CDFKIPo5Djzky6nqyo4oui4qXMpelduQFP7IqgalxFVk6nse12HqumMucVSGYVCocLc1CS8BO4xE1ycV6jmBdoV69b1RwJ1jzS3tt0citR5hMggWDoxNoxsJgOP12ulKcKf+gIRBmjv8rVwewMWeKqucoBVjTGXg0xgc/9cKJVQKpUrPtcEd/TYfitNymXPy49nDPCFGzZ/qr6p8a7Wts5eh5OzVChImVQKk+OjjKXXfOh+/Oaf/hKeUtxMU4C23mVYesElaOvuhaYbjI0MQAaiyVrxO12DRt/rOjSFMziXL0BRVM5cGCikphhzCVyhUOWymfMB1emgu27duv5AXdMjbe0dN4cZSyu+VFNVjA4PIZtJw+PzWcHRRW//LJ79xU8QCRhYdsElWLZ6A9xeP2MisdAeKHHTq3K2EqCqDk3nQRQBr+k6FFVDPl9gj+HRsoFiagqewjDGBji49F/+PLinBu2GzZd9qqGp5c6Oju4+J7HUVolJzyQxOjrMzCEJ99zkckaR8NDRuwyrL7wUnT39jKUc0IqJJbAoyJJNs0vfMxNMTNU0BiYPqkyfq2nI5nLs7OK1BLijA/vMmwrI584zd050N27c2BOINP5FW0fXTXX1DV6RvtBXYung8WPIpNPw2ljK5EDDgD8QxqqLLsXqdRvgDQQ5A22+U2GMNEEUv9cMzk4RGdvYave5ZI6LxRK7gbgbAIrpKXgLwyBwhVnO57LnzXItupsvu/pTTa0td3Z0L+pzOpxmaY3nptOJBEaHB7meSyy1q0eQsKh/OdZtuhy9vUu5L2UAqqZZ5X6zApQAU/yO/m76VxNwzlx+IxBzFV1DuVyGLJv+VoBLPrc4jNGjHFzmh8+Dy6HduPGKnkhj5C/auxfd1FDfyFlq1ksVVcXxo0eQTs3A6/NXqUeMpcEA1l9yJdZvuIQxlgdGnJVkfjViJDO5ZJJV5mPZ36tSHf547mvNnNZkNmO4Qv6W+95CscTlSlN6JL9LZtlXHMbI0ZcsX1/I536/mXv5Vdd9orm19e6unt4+l7OapYlEHEPHjgGSyVJbaY1qq71Ll+OSy67C4iXL2I0gIlpimshPK0ALQCnFqfhP5nuFiRZ+mBhKQJsstm4QAldRbSmQKO9xs+wrDGNk4CXLLP9egrvxiit6muoav9+5qOfmhoZmL+WjPOrVISsKBg4fQkqw1AKUqb3wBf245LKrccmmyxAMmixljDM4I8kEM8bZgiZbIMQZa/paK4etAC9ukEpqxNUp4a/LZQWKRia5Aixn7iT8xRGMHN1rBXPF3yfmXnXd9Z9obWu7e1Hv4j5SiOySYCw6hcFjA9TTUIl4TX8KQ8fiZStw5TXXYfnyFeziMT9oRb3cT3Jwud9UFDNgIp8pclcC3jLJFXYL9Ymdj8w3Oze/STioHGD6yoQLK5/m0iMLqKrA5RWkYiG/sM3yFVdc3xNuCn+/p6fv5sbmFq9oJBMsPXRgP2aSSfj8gSr1iEe8flx+1RZcfsWViETCDEBZsI5FtjxQ4nmq6StZ4MN9JmdfdZQs5EPL32oGT4PMKLk6guapEGezCkVWURbCRRVzDZTSU4y5w0f2WiXCBQ/uO9793rGGxqau1rYOKzedmpjAwNEjoKoLtaqIthSRQixZtgw33HgjVq9aRaS1BUAUDNnVJGKaWakxWSdECZbSMNZSMGQKEJZgMVt0LExvJdAiUO1gC9baAynx3jm4wwxc8TmKxcLCZu77PvyxeG//4uax0WHEo1FMT0/D5w9a2Y+4EJSrXnXNNbj22mvQ3NDIGMejWm5KeZAk2MhlQvY7FslW/KiIaK2giokWFSGCsZydi7OegWfLf4VvFWaeiRfEWkWDLCuWImX2wDGzTO6FwA3YwKXPVVro4L73Qx+N9/QtbiY0H/+vX3Pzazv6+vpww0034sK1a+GiDkK6WEziMwE10w8R1VI6Q6kRD5ooiCKpUKQ6Zgpk/syrOmbka/pny4eKn0VkzEAUNw/dUDxI48qUipKssL/XBlLiZwZuaRhDh1+0UrVUsbC0vJD7lt/zwY/Ee/r6GbhP/ua/q8D90r33oG9RdxXYdLE4YwkwzlpZ5TVY+j2XDSklqWay8LuCpZXASQBuD4wq0qMIwKwcl4HKH0vn1Ml/qypjrV2REoGUJT+mpxA0wRXWKFUqLmxw3/3+D8cXmeA+9cTjVeA+/N3vIBDgooQ4GAs1jQVOQh0SOSsPkipiv/V7M4iqmG0TGDNStgsT9BzdZL+9aCAKBdxPc/B1M/ImRUrTeVRczVyhYYOb5dIwhg+/aBXr06ni0nJ5AU8c3Pa+D8YX9XLmPv3bJyv+1jDw8MPfrQKXfJeIcJlPNVMYlp7Y81NmqvlNYEXLTOgXZtgWITOgeF22okqZ1R5xA9mKCKKNhqVBZI7LMmOyKERw9p4INIkYwfIwhg7tMaNlYMGDe+t7PxDv7ulj4G576in4AzyYIgY8UgOuAJD5VMZgEUjZgDHLcNznmt0RigbF9JeceVxmtAdglRJe5SawgLSlSyyNMvNbRVFs5riatSKQEoEVMVeAK8xyOp1aWi6XF+6s0Dvf/f54V08vA/fZbU/PCS4rxZkRseVXmVBfqavatWAC154GCVZyEcIwdWAOFPPXImUywWMmV3RWWDcK5bRmMUGjVhqhIdea4xOBrgWXAM4sdHDf/q73xrsXcXCfe/YZBq64sx955GHLLFdYWmEcz2lNFpPqRP6WRcgiIOK/48BWQKkKuMwAjD2PtGJR7WHacSXFYmKFGUyRby/LZVYsEMwUpb3aQEqY6LLF3N1WpSqTTi9s5r7ttv8R7+ruYeDueG67BS4B/D0TXJH6UDAlCuaWAFFlmm0yo5WbVoQGqwjAmtkoZeJF+EogZhbgrZaaSquq1QBH1kJRGbhz+dfZgC6lowiVhzF4aLdVFcpkFji4b33nuy1wd+143oyWeZRJ4Pr9/irBgphFqY9dThTlOqvSY9ZVrSBJiBmW6eV1V2Hm7W0yXDfm6RSPlrnIIfwvPZbMMd1oFaGCfz9bIMVbWw2UGbhDDFx6LP1vwYP7lne8K97ZvYgxd/eunQxcYZa/971H4PN5udIkhH+rX6kmmLKxzfKvTPcV5pgrViw3NWVHDj4PzERfVJV2bPZH2W+SsixDUXlOWwHUDnSl+8ICnylUUYTlIQwerJjlbCazsM3ym99+W7yjq5uB++LuXSwVEm2lBK7b4zEBsBUBqoA20x2rTYYLGcJ3iuqQAFAUCuzFBMHSSiHBrOmaUTI7HxUlFBlU0mP9WWaz+VyKFE+NKkATcwnc4wcrZjmbXeDg3vIH77TA3btnN/zEXLOU9/DDj7C5HCFYCKmQpzBmMGX6Tt7+woMpxjQKhsyynuWfRRXIVLaEbmw9h4EpqkmC8Sprx5FZEd6Mjq081sZSs7QnwK410eWMAPcFq312wYP7xre+Pd7eyZm7b++LXMQwC/Dfefi7cLu9VltMpUxnb5OxFwu4hsxNq6gQVboUuZRY8deiKM/0YUtSJDCrRQwCllpn2AyRrXXmZIqU+JsVLWeiiBBzD7xg3by5bHZhm+Wb3/y2eFtnFwP3wL6XTJ/LafDQt78Dt9drkxTt0XClJmtvRbVyU5EDW8NZwr9WTC4H19aDzIoDogdZlAE1FKgH2ZzLrTCSB0ovF0gJv0vMJXCPHXjBunlzuQUO7g1vemu8vYODe3D/PvjJ55pm+UEC1+0xi+vC5FZSlyoVik0BqDX1W5ORpuzIo+Na8EQzuVlNsqlRFHjl80WWMvEAt7p1xv5zrSJVy1w5O4WIPIxjB3ZVJg5yuYXN3OtveUu8rb2TgXv44IEqs/zNh/4cHg83y4o5wsFrtKLVxazO2HRh0azGW2LMdhhbK4zVzCYYPSvYPB2iQS4yyfao93QDKfFcOTOFiDKMY/t3WTdvfqGDe93Nb463tXcwcI8cOmhTqIAHvvUg3B4akaxow7WFc+GHyZyKgr09gOIaskh3KmadixKiVZXfJLrJfLIIpWKRFQVmTXdszeZzKVKVqQae/wpwj+/faVWP8vkFztzrbrol3trGwT165HCVWb7/mw+yybuqLguarhNRsa0PyqoSmZ0UvNtRtRrjeMDE/SvPdUWR3uxbZg1vvOpUpvHLYsEmSrycf62U9mrNsfhZJp+rEnN3Wj43n88vbLO85fo3xlva2xm4x44egT8Qsj78177xZ/AKcK2Jutq+qEqPlBjKEnJiRWUSEbJZkNerQefRMg+0ikUZ+WLeZoq5rz3TQEoU8AncOmaWd/IVbgwDCx7ca95wc7ylrY2Be/zYQFXh4CsPfAsej88c17D1RdkZa6U+tujZHNDibObpERveEqMf1jQBj46FAlUolFAoFq3A6Uz9a9XNYEbUHNwhDq6Z6hUKhYXN3KuvvSHe3MqZOzR4nINrRstf/vq3mELFxYlq32kv2tvbU63ujJrRSuZ3mY8VfpeLHkJuzOfzbGC6qlXGVnR/pUArWQ7ugM0sL3hwr9xyfby5hTN3eHgQAVby46bw3q3fYAFVVZ3W9Km8j8pe2hNdirwbUUTLHHgheoheK1H94QFVJptlyxxYooSpNonZ2kq0fOqKFE+NKumTBe6+ille8OBecfV18aaWVgbu6MgI/MGKQvWlrxK4PBWywLKNVVrihdmCWinOV1pnRI1WTAsIoEXnRSqTRtmMimcNhs5QkapSrwBUwN1hmeVikXqoFnAnxqVXbYk3N3Nwx8fGLLNMNLr7yw/wPFe0y1h9UnbW2vqWWbRrKk42MYJAJ0GiYr4pKFORSqVBVR4r3akRKuYjkGLlPQBqegwRbRxH9+2wAsYFD+7mK6+JNzW1MHAnJsZNs8xnae5i4FJVqDL6wUxx1VC0fSzEbGu1m2zb0gYCZCr4J2dmQD1QVVGwqUC9Uv8qmuXYDZWZRFudC35HGYdfeh6pxBSv58LAggd30+VXxxubmhm4U5OTVWb58/fcD4+XwDW7Gc31JrhpFUUC+9xPhZ21s0FiiYNyScb0TIpZA7vQMJ+BFK3z6FWT6GoJIzFxHGODh1HIpy3GmtGyoShKd6FQmLC37r6W38/7YtoXX3qlBS5N8lGey4r1MPC5e7ayqpCo2IgASvRFiaFnEh94p0QlcLJqtLaOi0w+j3Q6Bd3WY1xVmnsFgRSxVE6PoyXsgE+SMXL8AOKTI2w6QlS56GNpmlpQFOUXLpfrs9lsNvFagln72vMO7sZNV8QbmpoYc+PxWJVZ/uwXv8YUqkraU2lE57VYE0xWtxUMNhcfsXqkeH8zmeFcrrLol24GSifoxiL9OcVASs6n4JKT6Gj0Y3pqGBNDAygUshVAwZbANxRZPqqq6tdLpdI/nEuA2t/LvIO74ZJL4/WN3CzTehb2aPkzX/gqK/mxPFc0lZs9TlUdFvZ1KkTkbEqNpA/HE0m2t8Cp+teXC6RIgy6lJtDkB3yOMkaOH8Z0bLzCUjNPVxWlqCjqLyUJn8nlcrFzFVTxvuYd3Asv3hyvb+DMnUlOVxQqAJ+66ytmVagyNM0iXnsDnK1HSkzMi+Z1WmE1Pp1kAVm1f62RE08xkCJfKpUSaG/wIjE5gsmxQZQKOXZthOpELJXL5QFNUx/I5/M/PdcBfVWZu37DpnhdQyMDlxYsEX3LdLE++fmvcLM8h2Bhb2YTOS/N+VA6FJ9JIpXKVM3vnNCdaPlYW4ObKTyIiFmnbsfkOOo9GrwoY2x4ANMs4rX7UgOqIhdlWf5/uq5/Op/P88WYX2fHvDN3zUUXx+vrGxi4mXQGgWClQe7jf3ofPF6f2Rdlztra11q0lkGwLVtQlhGNxXhbjOhQPKl/5QvV15b2SoUMkIuhtc6D6alRRCeGUSoVqoIjtlaHrseKhfw92Wz2J68zLE94u/MO7gXrN8TrTHBz2SwfJzHXafro5+5jhYNKX5R9WEusmiq6KzQkEjOYTs+wIsGcddiTAE2RbWFmHM1BCX6HisGBQ4hHJ6tZSgGSpqG1vYMt2RAK10GSpD2Sw3HnQ1+/9zevZ4DnHdzV6y6KR+rqGXML+XyVWf7on9wLN61nzJrdbGU7q+rDa7O5bB6T0SiTEa1uf1vr6csFUqV8lvvSOi/KhQyGjh9FKpmoWoODgHe53Fi1dj1WrV4DWs6Xlumlfw766nDQumaPSU7X3Q9+5Yv7X48gzzu4K9est8AtFgoIBHmeS/8+8pkvmQ1yvKJjLZ5pBlS0StvkVBQz6fTc3f7WOo/VdVkCK58YQ71fQtCtMoaODB5jdV17gBQOR9DTv5hNPrR3LoLb464AKjlAK6vbAZYgaQ5J+gnc+le+ee+90dcTyPMO7orV6+LhSB1jbrlcqjLLH/r0l1i0LFZ0s5a91TQkkilMTEWZhFiVq1r9w5WKjD2QIpbqhThawy6UchmMjgwinZ6pUo8cDgfa2juwdPlKtHV0gn4mZvKNKxJo6ehgC4JWgVrDYkmScpLD8aBbLXz3a1/7WuH1APK8g7t85Zp4yARXUeSqYv0f3fEFuFgPVWXREYqAJ6Ixtp6xaC19Of9K60JlE2MIuxQEnBrisSgmxoeZ7xRWgs7h9nrQ0NCECy/eBJ/PB4fkYMDS7iQCYPqaTCRQLpXQ0Nw8K8AM9IrZHpck3OeQ8z/dunXrObMp42w327yDu3TF6ngozJmrqootWgY+8Mm7mc+lVGg6OYPxySjytqXlZ/OvdqCJpWo2hsaAA6VcGmPjo8hlM1XqEX0g1qclKygW8+jpW4INmy41QTXBZSBXA0zg0drN/kAAwVB4dhabAPMLKb0IA3c+8OW7/vtcZfG8g7tk+ap4MBRh4FJOaY+W3/vxu5ArlDA2MVUN6gmluUoRnViaSYwh6CjDCwWJ6TimJidgCJaa6hGtUEf+knYfoUkCJzHU6UR3Tx/WXrSxGlz6mwkwmWfOZh5QUU49NjKE5pZWVnsWwZUItsRXG6CPSbp+9/3nYNA17+D2L10ZD4bCDFwSBkRARY509eU3AU63JUScEPVa3Q4AsbScmkS9Fyjm0piITqCQy1vrTwiFihYHJfNPOavD4WSbPnGwnKCl8ju7erB67TrmYwWIVV/NyFj8ToCWz2URj8XQ2d3NFkezmWV2E9QcmgH8xJCUcyromldwN119dX9sIro/EAiyJWvoIthFjCUbroWXVYkqraXV/tVAKjoGr16AR5KZNh2P0z4FQm40d+miFcslHaV8nkXVgqUCUPbVZC4FUCtWrq7ysdXgmsAJM10D3HQ8xqYBW1rbuamuMs21GEs5SHjIpeS/cy4EXfMBrmPDpde8CZL0CYck3ZSIjjvEwmJ0IYIiFYKBCrjVMzmlYg6FxDjCbo2WkmfVpGKxWBXxinRGKZdRlkuzspSDyhnLvzrR2tbGlvC1TO9cDDZBo8fVHrRu5dO//Q0uv/o6C+CX8bPnRNB1xuCu2by5zWU4PwI4b3dIEtvFknxebGocPnMBbFrZnMyyqH8u2XgtPGZ9l8zqzNQYnGoOLrWImZkkkqmUuS+QuZceDA6S5MTMTIwNyJ6MpXbG0orrBHJTUwt6+vqqTPLcJrqS5xJ4M9PTeOrxX2N8lOq4Gj7xuS9YQscspnkWvF/boOu0wV170WXXGIyleIckSW4OKgUoPPmPTo3C6+ULiXncbgRCZrHeMLB443Xs99nYGIIuGflMBolkkilRQqIUqYzkcAOGxKbeqXsjl0pU+dLZWMqANxkr/G5jYxM6unhueyrspcfseWEH9u7aARJhhEsgkeTjf3J3le891ShZgvEr6MZdZzvoOiVwF2/cWOcp4wMOh/MTkkNaJVjKAg0TVK7sODA1MQKv18c+N00X2M1yZ9ciOHUFM+kUMtk83yLc0oZp7w8JDpfbWpeZZxyA2+VGLjPNgTN96WwstQMeCoVRV1ePYChkBlncX84FMAVQ23/3W4yPjbCXFRtR0Vc679JVq3HNdTdWJMpZzPfLgM2CLpeCr27devdZqTKdFNylqzZucDj0T0iS4z2SJAVrWTrbz5MTI0yFosPv99nMMtiFpfmeSpsKL/MQrLQvkJdNI3C50P7G6HmZ1HSVL52NpdQIEA6HEQ6H2KgoD35qo+QKyGRxjh46iAP79qBMkwkEqrmYJ1WIwqEINl56OfqXLKsKpuxp0amyVzwuMR17ZuTY4Gcf++U/7zzd557u408At69vi88TzL4L0D8JSJvECatSAZsZrmXxxNgQyw/pIOZQt6OYpamoR9SqwneQpqV5HU4XA4LSGL6Sa+VtsQ2KYTDhnwIk4UsFS2nPIV8giGAwwHz9bOkOdxsVkClt2rPrecSnJtlrWabX1MAX9fZh0+VXm6oWdzu1RYVZ8t05r72qqdmRweHdk1MT3bqmL5Ykx9uf/PW//eJ0wTrdx1tXcdWqC5dpDufHAf2PAKmx9kQ1Ehz/sDUgkyJE265RIENHQ2MT87sMVPqPrWuhmotqc2bVmkna9pRWvBE7T9N5SPyfmebgCl9KYykk/vu8fjhdTjOPrTa9tecfHx7CkcMHocilCqi0xL2usV1Q1qzfgP6ly04QLmYTMk6eEvGrl8lkjwwdHYimc5kNAKxFp88auGsvvvL6cqnwBRh4Q401rMLXbopqWazKMgqFPCvEq2yFGD58RR2ubreb7fBBoILYQwCZ+WIty+xRrJsi7VDQNNUypuNx9lwy+RRgkR+e3YdWA0wS6OH9+8znm/vSm6aXbhqq41548WYEA0F204mqEC8i1P5cw+JZ/K5uGPLE+NjO0ZGRkKqo62Zj21kD9+4vP/CrZ7Zt88ei0StpV++5qF8rv9lZ29HZxoKoYwPHWVWHDrlcZGaNWV8KlWyAchD5xZvTjJqsJrNOgRnN11JqZT1+luda53U4kIhFMTx0jNWOKVDjLoGvPkemfenKVSz/5Z9rllLfiVWhOYsK9AlLpfLEsWMDR5LTiQtgoOVkJvSsgXvf/Q89CQnXTCcSh5968reqoigXnAzg2Xxva0sz+pYsZd2Cx44exlQ0yvYqqD1OjFRnB3jOPHQWsd9+g1C1iWq4mUyS7WotACWtmRgcqW/AmvUXsQheuBWrzFcL8El+tlwUYCSmE7sHjx1XyuXyxScjB8mk1LrLbvWz5XMFuPSihmHoe/e8+PThQ4cuBBCZze/O5nu9Hg+WrVjOxjPZXVwsYuDoUbZzJW9I58eJ7K1UZ2pZPDvA1ZGuuFmyqRTb2Zr8Ov1O7CzGd0bRWfFARLyCpVYKZ4JYSenmDp6E79U0LT02MrInGo326rreNxcZyJcnEzEkopO44uprMT2Tfu3AFW+yWCzGnnj88YFcJnu5/Y1XmebaiFmSEAmH0Nm9yBLWU6kkRoaHWceFOE7qJ2tM7ckYTDdNdGoCxTz5eq+VwhCYskx15ACWr1xtle94SsTdw5mytpDNHhoaGYnnc7mNAKo3b7BdKOqpno5OIhGfYjVmOq678ZZzA1zxPkeHh3c9t/25Fl3Xe+zgzB1cSSxvrW+og9ndyp4WnRhn9VsisZ29zMRbEbMtELKBXAtwqVDAzEycbVPOtjE30xe2/qMio7WtHT39SyxfWgVoLUvnYK2dxYBRjsViO6cmp+o0VV1zMl+az2eRjEWRTiehq3wXMXGcc+DSG9M0rbT9mWe2j4+NE4s9p5IS0UXXVRk0eCBWSqfZn8mxURTLZaYVz60WmSDbAKa9/TKpJFRVhs9HC4XyKhGZXarYuBxOBmgoTEV2UzWzWMrNbAVkHjzNaZZNwGVZHpsYHxvIZDLrYOCE1FCARukdbc6cmo6xjIFuMhqFEYylfJzy8CXLVsDh4m7rNfG5J7srU+nU8acefyJTLqKbE1kAABnESURBVMsXWgm9LbkX8mOV76KdRwjkphYW6dJRLhURi0UhnQLApCuXcjl4KO91Ub5MfcU8L6XzhCMN6Fy0iIkfs4Fay9qTsph/FiOTSu2amooaiiKT6T2xRGReJCrqZ9NJZFI0OipzUNlmGRxcCuiC4QgaGltQ11B9b5w1cO/5+reeBKRrTgas/W+HDh54+uD+g6sBNL6sHGnqzTSLoyky/5BmvTSbSaGQL8JlyoSWiXY6UC7mmUZF7S52VUuWS2wHkbbOToTCETM1seeiZ8ZaXddnEtHY3pl0qh+GYbmg2a6JXC6D3nuRWn5UtYqpZEkI1EAogubWthP2VKoElmdJofriV7/xpAGcMrj0BmVZntm+bdu+dDpzpUSHmbPOHqxUEv8yWwtKZ7tp0kHApVNJSA4XnA6J3fmhcJCNeVZML63VmGcyZVtHFzfnZDrNEqMlNth+PiF4qg2mzJ+LxdKBRCyaLPE0hlc7ZjnIc9J7L+SyzGIIsyuYStE5WY9guI6BSgCf7DhrzL3zvq8/idMEV7zxeCy6d8+uFwKabiw9gcUma2urRvQzzRCR2iQ0aLlcQkMjN13C9CpyGaVSEfUNTQiGwxVATRD5eU+mKJ3IYjLLlKml06mdqZlko66DLNCcB92IVFCgjg9FUxhLLfNrrlZHMmmkrh71fDzqlI6zBu7nvvTVMwaXgyEp+/e9tG1qYmKTJEmBWr1ZiO48RzQBkSTmO6cTUWaWicEtra3say6bZooSBWPEAAbgSVg6K4vtKY/JUk1RRxLJxGC5WFoHCQ3VdadqTJhPp63MiaUmoPQ7+p7vJiqzsRgaZhQB4ymhCsQB4696+hb/NhQMLi97jL/564ceyp7ic0/7YdJn7rrvScA4LbM826sUi4WxPS/snpRl5ZITgysOai2LCTRqm0kkYgiFQwgEQqznypIELZZWhIUTXYDt3LYImV4LDkkv5nO7UjMpSdU0CpCqO6QYkSsVKMPgO12rCu3jZ2MpGwqnLVdlVmBoammzAsRTvOLPODyenyzu7fMVi4VPxafGVyfjMbR2dOY7FvX9eWPA9e1vf/vb1P03r4d0x59+8bR97sneweT4xPbBwUFSbdqrWGxjbS2La3+upC4V1lpm+OVY7CCroCdTM6mXivncEh3otheHOZS2SqfEc28KhmojXvqZfCwBS0sLU4O7dXvU3BhVZ+W3UN6A9LOmlub/bKxvuFZVlQ/s3L4trJQKLNqnm5hy8oA/gI7eJUmv3/tn5YDnL388j9MM0u2fveuHEvCx+bxlNE3LHTl0aFcum7tSckjO2Vg7G4urclErNz05a+1muVwu7UvPpNKKIlOAxIvK1kEozmaMJVairAaXctcUcxOhSB0DogJe9Y1hP7/5l8NOh/PHi/p6M3K5dPt0bOqS6OQ4K0vGYgkkE3G84YYboKsK/MEwvP4gMpkUktMJdHb3pLt6++53KcUfPPzww8VXigl7Px/91OduMyTpERjoeKUntD8/l8sdHKCty3V9lfCd88FaO4shGYVcLrsrl8mSkrayQqgTm0z43078Pfl2AleVy0ilZthD6hqabKZ37hvDNAKaA8YvA3X1/9La0rIWhvThPTu3NyvlIjQC0R9AS1s7/D4fSorC2mT9wRBe3PU8cmzBFo1V1do7OhCO1GHR4uVRj8f7zbDH+PHWrVup+HxGh/VJ3/vpT0c8Cr4BSJ88WfJ+Bq+iT0xMPp1MJC6SHI5wpQpTWxsVuq9dUZqbtZqmDqVnUsNluXAhINVxZs3NqmqzKT4FfzxpwflshqUzVDmiG7H2mOPGmJIcxl91dPYMGrrxgVQydnUiNiVRpA/JidGRYVx40QZEQgF4fQG4/UFk02lEJ8fgdLmZ7l4o5LDl2uuYDuALhFDX2MRSQ5pSbG3vjDW0tHw97NT/19atW+XTvfYn3Mbv/9gdFzt040cGQN0D83YoihIdGxo5LmvKZa+AxVqxkN+Zy6TdmqZdZNHQ/BTVzTnmWz+Fv1EN2uPm0qDN/lb9YJ2bf/OUx+/9WXt7d6dTcnx4dPh49/DgAIJ+P2skoFGUgN/sAPWHUd/YiL27d6GQy7BmBmo4oKnDYDCIbKGArq5uZinGx0YxNnycqV50UGlyyfIV6Fu6Ytztdj+Qirb95Mc//hgvmJ/CMWuD3K233ur0RhrvMAzpfgBccZinI5vJ7EzE4m2GJC2yWGwLtk4Ipihtgh7PpdP7S8XCcgPonO2t0PNmP05iUukJpwC++ZAcDPxdY3PbC+Fw+GbJgT+QHA4XvW6pUMS+vbtQzGWxfv06uL1+eHx+5LI5xKITkEslNrY6PHgcl11xJfxeNzxeP0J1DazbMzY5zpoItm97CjQ/fMEFa+AP+NmNEI7Uo62rh5lxSZKGHZLzgWRn49/++GMvD/JcV4Rdp1s/8PEuh6F9T5Lwh/OELTuNYRjFRDz+XLFUvEKSHKz3ebaIWZHLe7OZVE5V1YsloEKtGhpZGM3y++q/zf5xX+bGOOByuf6mvaPHZWjKRw0Y/V6/f1Ytu1SglQT8GBsdwfjIEJwSV65a2zoQCoWYOucLRtDY1Izp6STGR44hNc3XJaPmvvbOTszMpNDT08OYXNfYzHrJanu4HJI0CMl5v0cv/N3WrVt5u+gsx0nBFY+/9X1//CbdMP6nBMxZmD4T8BVFOZacTuQNA+sqZUTkC7ncC/l8rg3Ql4vzzpbCVP5W8zGqfqzyxLZwucaIV98YKgz8a6Sx8clIuP6yXDr5rnRq2p3PplkETWpUV89itkrAiX1WDlAd+8VdzzGjsOaC1Uyo8YfqWFVoOjaFQj6LaDTKRkbXX7gBrW0t0BQFAeq1bmpBmBg9W/tPrSLndAw4JOn+Q8v6/uHnt93GC8e245TApce/5S23B1zB0lcA/CkA95mAOcdzKNzdlslk6nO5dFIply+qcgX0Ic0uDhbVairrtLDnNdUf4gQ7a1re2YMtO/QSMCG5nX/T0tKZliS8Xy4V14wMDyI9k0RzcxNoYTwSW0gHd7q88Eco+JpDRHFItJ8uY6wsKzh6aB9ymRSrdzOdvL2DFz6cbpbvhusbWTOhJeBwqZSNz5ystZZbPRzRga+7lMI/2gfCTxlcAcyb3vX+NU5d/yGAK+YRYBw/fPBZWSlfNlsmSnd+fUMLwpEwa3SfmhjHDC1gYh5zmlXzxjjxfVYSXh4F44lAIPxv9Q2Ny7PZzAeLubSfgh9iKb02rUXpcjrQ39cHp9sHF3V50hLA0wnWLE8mtLWji0mS9u5JUcCgFqBnnnqC5csXb9zIblDKb8nnBiP1HECTlZSSxSfHMT46zFp0unr6sHTFakTqGqrOTT1hY0ODrOm/q6dXfMSDBrDVpeR/TiCfNrjiet7yjvf8sWQYD1Lpbz5AHjx66FlZLl9WNWrAmtaDfAxU54zt6e1HY1MTnnnqcbb8QrU1PfHjmODN1rWbgST9fXNz+5DT4/rDUi67maLmvXt2oq2tA93dXSy4IVAlGmPxBuF0uZgmfnDfbkDXaDyByZHNzS1s0+dQQwtcbm91O4+pbVNB5PjRI+js7EQgXHcCS8kMp2aS+N0T/4VgwM/UsvaOTkQidSBZdPHKdaybNJGI4/iRg5gYG2GPIZ9Oa30sX72WCS7msT83k7rrTMFl53jjG29t0d3StyUYH3ilAA8OHHpWIXBt4avTTbNGYXQtX4fCutuhJ44i8es/w7U33IznnnmKrWVxBrntXo/X9/PGptamQin/R3I+W0+1WWIplRPrG5swOT6B1ReshuT0wGHuYJahwvzMNMu+KOhJxKZw9ZZr4XI44PJ44PEF4fYFeIOersHt8tiYdmrdIJQf797xHEubbrjxRgYcBVWhSD0S8RgK+Rz27d3DzP2q1RegpbkFqlJmN1h7dy+aWtsxdGxgz9NP/qaYSiW1VwSuAPT6N79tCyD9UDKw4kxBHjl2+NmyLF9Web6ESFMrnNDRfNtf4uEPXoTb/3ECiR/ejLe+45147Jf/ilKxdlGZan9rC5lkhyT9S7Chca/fE7heLuev1TRVGjh6mPnA/v7FaG5uhsfthEEChsMNyUlThsDAkQNMYKAhClKRKNINBAJsRXYqyvsDYTjYCAyQmUliOj6F9Axf87Kzp5+ECNvYZ02T3hw9XbTKDpNRHE4cObAXk+OjFkvbu7rZ+yJz3NbWhsbWdrIo6Z3bt+05sPfFblVVyJL+raIoj84LuPQ+br31Vk8iU/4CgHtOVvieC/yRoSPPKuUKuOS7Orr6IZfyaLrlK1C6Lkfisfux3DfFZm5//dgvZ1u+QHgNEW+NOl2en9U1NzlVRX9fOZdqV2VaZtBgQUokUo9cIY+G+kaEIxEYEpchc9kUcmnePkNmdmJ8DIuXLEVbSxMLgJweH1xuHyShSasKsyQkOricEnt/kboIBToI1TXDH4qccg8XvT5p0ZT70g1EexD39S/BihXLmZRJAkhDcxvz8fFY9MD2p5+YjsdiGw3DOGjo+g8CgcA/jo2NMV163sAVoG256a1LdV37AQzccDosHhk88qyqVDO3b+lKNkhGA920q9cFa9ejb/FiPPFf/8GE9jn8LYXS/x0K1W/zhUIbNbl0i1IuOWkbmpGhY+jqWoTFSxbD66GeLAmaIUGXnIwZ5PMmRocQiYRBvdgNTU0IBripLasSbxpwcpbmqSkuGTfVJANOtwdTU1PYcNEGNutEAZMvGGYBGVWWqGBArCe/aEXYtrozQbF3907MJKZYaZFeh6lYgQAbd+1fshgNTa00slM4sPfFXftfeqFJluV+wzD+Sde0H0xPT++ovd7zDq54gSuvu/k9hoHvUunvVEAeGzr6rEJm2faOqD12+aq1LP0gVtAw2M7nt7Gm91ny3pTD5fw/4brWtNvpfGdyOrrE4+QTfHQxSZCncySmk+jo7ISmS0wVKhayKOYyoG4Qmjak9bBoVveySzczsyg5PMxEE0tpNqZUzGPw2FFks2k0NDSwf5FIhPleihHcviB8gQB7TRbVxydZdyQdNEvVt3gJ2jp7WHBmb5AvFgt4/D8fY1nAlVddzVhPTYGRhmbUN7eglM8d3/X8c6OTk+PrASNuAD8su93/Oz0ywrXKWY5XDVx6rS1bttSXNNc3IbGS4pydhPTYiaGBZ2WLuZQ78nfr8/vR2NwCTVYQjU7NIhdit88f+Y9AKLTE0NS3q0rJTWMbZEqpa2LDxosRCgZYpE27iSk6WEGemHpg7wusvSccCjL9l4bByKyWFMDjJ4C4j6RAJpua5mVAWjPS7WHKEQ23Le7vhdvjZ8EUsZduEirEU7F/z87nGdCrVq1mDfuGrrHzhuqaGOA0A0VsFJ0mFDGPjYzA63GioamFAiVl6PjAzv0v7faVi6W1hoF/16D/IDYxQWtfVZqiXwtwxWtuvPLazQ4dlBvTmMqsx/jIsSqzfJIUhp5flhyOfw3XNY+4Pd6bUsnEepfTgJvSFklCMBRhbKcV1ZubmlmQRNouFcppcRUq7XEm+dlyRGvWrmGjMDoooOI91RRoEai0xOHe3TvQ3tGFttZW5kvdNDIqOeDyhZlKRa9J62ck45NcqKBze7xoaW3DTCqFzi5Kq+qgGkB8apyNl1CeTMei3n70LF7G9oIQ/dTFYnH8wN4XjkyMj63WWaHZ+CtA//H4+PjYqVhB8ZhXlbn2N0LFiIHR2Gclw9gKIFT7JidGBbhzyYX0DGnI4/H/30C4vh7Qb4Mm+8nsFosltvDYilWr0dXZziYbSrKKssy3rtE1BSODx6HrKouKabQ0FAwykFRdgqyCm0kHFQGoyzHN/rHNKiAxWXBsbBSbLrmESYhkfknwp3acdDLBTHU6k8Hw8QG2AmxnZwdzB9QA6PWHQSaXbpQjhw8xxi5dvgytLa3WKCuZ3khDkx6dnNh16OBerZDNXwwYv9MM/dH2lpZf7Nq165QrQfbretbAFS+65pKrFzkN9fuA9Db7G5kcHXxWVSnPrZ2rh+FwSL8O1TXtd7m9W4rFwoZSPsPMHJluyoNp0oCku+RMGl5/gLFUpjZatcQqK3RQ/ZQW5I6Ew0xIoPElCqZ4WE2g5phydOjASwzo3t5eJjd63S72d8nlY8DSDUABz8jxo1BlPodMrCchg5ZootdobW2D5PJgcmwYM4kYmzCko4nci6azNKm1rZWJGU6Xe3rgyKG9k6NjS3RDrTMM/afQ9UeHh4cPng5LZ3vsWQdXvInVF136Vgn4CwCsCTw2PshEDJuUmHR5fP9SV98YgIS3GaocIEWI1s+gvQ5od83NmzcxlhZKMoolha2nQWMsJYqMB4+iqaUVvT29rG7qcbuYjFiQNVpWhYFEvjefmYFcypksBerqG1mgRfXYcF094HBBMjXtbHoG9I+WfCDN2eXyYPPmzTT9C6fbDbc3wN4f9WKTnrxz+za0d3Zh5coVLOCim4Raa8INTUjPpF4cOHo4W8hlLzEM4wB0PFoo+H4Wje6dt0a51wxcAnTdunVBGe6vwZD+ZHpqZIfCA6odi3r7/13RnVeVy6U3jA8PSPX1DWior2NTBiE2be/G6GSc+bWyrILaWRzg5pexlBrEQxGQi1q7di3KCm0Hx5fHJ42COi7lcoEt0z8+Nozu7h709fXB66V6CIMKuoMm93lRYODwfjgMPthFFoLGYwLBAOKJaSxa1MsYzfqg4lFQ5YgO6ujo6OzG8PAwli5ZAl8wBKfHm50YGdk1MTHaoatarwH955ru+MHQwMHtr5Sl5xRz7W9mxZoN62YSE39QKhT+I5PJ7PjyAw9+UtWMO5/bvj1/+MC+NYnoOGeI5GALg+aLZZbQQ6e1mQ1MjI+ynHXJkiVobGyEz+th+yjkiwrbaUyI+alEDJKhMnmQjlAowiLfTDaD3t4+aCygp8lBnXVNUHAkfDrVaC+97HIEA1QccDG/KyuUG8eZ36WeZqpatba3M0tBZ6IF1UjAKBaKh8ZGjk9lM9mLDRhR6PqPnJLx14cOHZp+NUA96wHV6XyI++5/6NOQ8H16TqGY3/27J55qzWRSXQQgXXQC1evhIxukq9KaU9RETr6PKjPFMi8yEKi6IkORi5YppUh4/foLEQz6mS5Nvlc1uMkk1k6Oj7BFRcmM08o6pDWHqAuCzLgmgQr1lBLxQIrLn8yyNDaxNIpAJ53Z5fWVpuOJHbHoWERV1DWGYfw/SPqjh/fv/89TSWNO53rN9djX1CzP9abuu//Bt0KS/skmYyrRyeiOZ5/Ztj42NR6cjk0wk7d8+TJWLiOfS/+ISWKsJTOTYKbaLIsyLZYqLJlsDvUNDdz0mguM0uBZMZ+BUi6B6kyxaBRt7e1Yurif2XHD4UapWAIVDzibeRBFqQ75ZrovXGauq6nGUHRqfDCXTq/VYbCFxRy6/KMDBw7w1cvO4nFOgkuf/55vPNzhNOQvGpBut0A2MHP40MFDe3bv3qwrZQfN6BTLZpZAn0SVoallJjTQ5si0l+DyFSvR0UErrgKyokNWxQZTBptFGjl+BPX1tF6WiwVT5NMpRcoWFDZlWCgUMDo0AI9LLL/UjPr6Or4GpYvrzA6XRy1kczvi8ahTU5WLYRhPazAeDbgd/3ymacx83APnLLjiw9391Qc7JahfhITbYfBGc03Tju18fkdxYnx8DTGV2JTPpljQ5Xa7LKmRFiCjdSgCwTBoOznKeij4kot5thYVyY0UYY+PjuLa665lfluHg90YZP6ZC5CcrIaay2WwZcu13DI4PRQcUaQ+mZqZPpjP5lbo0COGrv+dbjh+cODFHefEbibnPLgC5M997t4uzSV9CcBHxDRBoVja+cKO5zvSqZmueHScmeBNmy6BomiM0SRiUISsURSt6zh+7DDzz+FQgPlJ+p4YWyjTwmcuZqaPHnwJAb8PTqfE/l5X3wCf14tUNscGvxxON23/tiudTpVVRaZc7KChG48q5dzfHzhwgO8Vd44crxtwxfX6yKfv7pYM7UuAQSBTR6QynZx57sjBgxcqcilEXYSaOX2vKWXoSsmKjqndNJ/NoqOT5MAQFI2tH8Ua1sQefuRzJ8fHmCZNkTFVjCg6NuBKFgq5F0uFQo8OfZFh4Ocw9Ef3UDJ7jh6vO3DFdXz3hz65yOUwiMl/TCAbMKZj41OHJ6YmL6Vx8NjUGFOHSETo6uxka0NSYxvlvNlCmeXEtKsJjWlS4YDSF2Kp3+eFQYqVojPtWdP1veViPqkq6ibD0GPQ8SNddfxk9+7fxc9RTK239boFV3yCW299f4/mct4jAR8ikHXdODo5MV7M5/PraERE18pMSiRQafs5kgz52o8kdnBTTP3ES5csZmVAYq4OR05T5Z2qojRrurHaMIxfGZrx6K7nf/cr2obhXAdVvL/XPbjig9zyjnf0Grr7HgkGgexWVfX5eCLRqataNwVBtLz+8SMHmL67qLsbISrIu2ltZyBfUljkC0hHDF0b03Rtg2EYCnTjr6matX37k0OvF0Dt73PBgCs+1Jab39bnMLR7DQMfpE1TVUXens8XNlDHC4kOtGTwxg0bmM5Ma40aEsoOh+N5AwatgbQBhv6MAenRTKLx5wcO/Py0h6/OpZtgwYErLu6mq2/sd+jGvYZkfJC2U9B17bCu6ZfzxVhpXSrniNvlPCJJ0lrDMII6jL/XNf3R5373m73nEkCv5L0sWHDFRVl78ZWLAf1eCRK13x7zetxjfr8/YACUxhyiNMZQvD/dtu2Xr9raFK8EoFfy3AUPrrg4S9dsXOIwjPuCoWB3JBJKGJr06FOPP/bUK7l45/pzf2/AtYDYssWFJ5+cczLuXAfsdN7f/wfvVE4m+Gp+kAAAAABJRU5ErkJggg=="/><path d="M 845.33 302.4 C 815.12 302.4 794 277.79 794 251.59 C 794 220.27 819.22 200 845.71 200 C 871.22 200 896.4 220.93 896.4 251.18 C 896.4 278.28 874.84 302.4 845.33 302.4 Z" fill="#0d2636" stroke="none" pointer-events="all"/><path d="M 834.25 291.19 C 834.25 293.4 832.57 294.32 830.06 293.46 C 814.91 288.15 800.34 271.75 800.34 251.27 C 800.34 223.57 824.03 206.1 844.57 206.1 C 871.22 206.1 890.18 227.94 890.18 251 C 890.18 270.03 877.94 287.54 859.59 293.69 C 857.52 294.24 856.23 293.13 856.23 291.31 L 856.23 277.98 C 856.23 275.4 855.18 272.65 853.24 270.74 C 860.69 269.89 865.21 268.02 868.67 264.46 C 872.07 261.08 873.6 256.13 873.88 250.01 C 874.07 245.15 872.77 240.41 869.25 236.8 C 870.48 233.82 870.69 229.86 868.83 224.97 C 865.14 224.69 860.94 226.9 856.64 229.56 C 849.08 227.59 841.52 227.33 833.96 229.67 C 830.58 227.47 827.51 225 821.65 224.97 C 820.1 229.29 819.86 233.23 821.19 236.72 C 817 241.37 816.52 245.93 816.6 250.47 C 817.06 259.25 820.27 263.68 823.83 266.33 C 826.79 268.52 830.94 269.9 837.27 270.83 C 835.57 272.51 834.62 274.51 834.46 276.86 C 830.74 278.56 825.42 279.41 821.78 274.25 C 820.15 271.66 817.93 268.73 813.72 268.74 C 813.03 268.72 812.35 268.98 812.25 269.28 C 812.15 269.61 812.54 270.3 813.01 270.57 C 816.7 272.92 817.29 274.23 818.8 277.44 C 820.2 281.19 822.62 282.63 825.24 283.64 C 827.92 284.59 832.25 284.32 834.25 283.64 Z" fill="#ffffff" stroke="none" pointer-events="all"/><path d="M 845.2 193.63 L 845.2 86.37" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 845.2 198.88 L 841.7 191.88 L 845.2 193.63 L 848.7 191.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 845.2 81.12 L 848.7 88.12 L 845.2 86.37 L 841.7 88.12 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="1060" y="10" width="200" height="60" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 40px; margin-left: 1061px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: white; white-space: normal; word-wrap: normal; ">Clients Supported:<br />Chrome, Firefox<br />Desktop Only</div></div></div></foreignObject><text x="1160" y="44" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Clients Supported:...</text></switch></g><rect x="1060" y="206.2" width="200" height="90" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 251px; margin-left: 1061px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><span>https://config.qmk.fm</span><br /><span>Single Page Site<br /></span>JavaScript/VUE<br />Source: qmk/qmk_configurator<br /><span>Host: Github Pages</span></div></div></div></foreignObject><text x="1160" y="255" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">https://config.qmk.fm...</text></switch></g><path d="M 896.4 251.2 L 1060 251.2" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><path d="M 880 457.9 L 1060 457.9" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><path d="M 833.22 495.8 C 828.16 495.8 821.72 491.64 821.72 483.75 L 821.72 475.34 L 813.15 475.34 C 811.65 475.34 810 474.49 810.03 471.92 L 810.03 455.36 C 810.03 453.81 810.93 452.17 812.91 452.12 L 821.72 452.12 L 821.72 431.37 C 821.72 425.69 826.62 420 833.69 420 L 856.49 420 C 858.53 420 861.18 421.45 863.72 423.93 L 876.39 436.67 C 879.49 440.04 880 441.77 880 443.93 L 880 484.09 C 880 490.1 875.34 495.8 867.72 495.8 Z" fill="#000000" stroke="none" pointer-events="all"/><path d="M 850.47 469.58 L 850.47 457.06 L 854.43 457.06 L 858.82 463.99 L 858.82 457.06 L 861.89 457.06 L 861.89 469.58 L 858.67 469.58 L 853.58 461.29 L 853.58 469.58 Z M 844.7 463.4 C 844.69 461.89 844.28 459.4 841.65 459.33 C 839.7 459.3 838.71 461.33 838.71 463.26 C 838.77 466.2 840.13 467.37 841.74 467.37 C 843.53 467.33 844.68 465.87 844.7 463.4 Z M 835.26 462.55 C 835.34 459.28 837.91 457.1 840.4 456.87 C 843.13 456.63 844.5 457.13 845.74 457.91 C 847.41 459.11 848.53 461.32 848.06 464.79 C 847.61 467.23 846.07 469.6 842.36 469.85 C 841 469.92 838.36 469.99 836.56 467.58 C 835.73 466.38 835.22 465.51 835.26 462.55 Z M 823.19 465.77 L 823.65 465.72 C 825.75 467.29 827.29 467.4 828.78 467.35 C 829.66 467.23 830.41 467.01 830.47 466.24 C 830.51 465.69 829.93 465.31 829.36 465.17 C 827.6 464.71 826.16 464.86 824.34 463.46 C 822.89 462.1 822.96 460.46 823.66 459.16 C 824.9 457.24 827.05 456.94 828.36 456.83 C 830.57 456.81 832.33 457.19 833.44 457.73 L 833.43 460.67 L 832.94 460.71 C 831.93 459.92 830.82 459.41 829.27 459.32 C 828.41 459.31 827.38 459.3 826.76 460 C 826.43 461.17 827.29 461.25 828.04 461.42 C 830.02 461.87 831.13 461.99 832.65 462.95 C 834.58 464.43 833.97 466.96 832.96 468.1 C 831.63 469.39 830.35 469.86 827.92 469.85 C 826.52 469.83 824.81 469.63 823.17 468.83 Z M 813.29 466.83 C 814.07 467.09 814.63 467.45 816.44 467.23 C 817.09 467.05 817.76 466.56 817.76 465.57 L 817.76 459.51 L 814.91 459.51 L 814.91 457.06 L 821.13 457.06 L 821.13 466.31 C 820.87 468.24 819.78 469.26 818.09 469.59 C 816.91 469.84 815.53 469.98 813.29 469.57 Z M 827.52 475.34 L 862.48 475.34 C 864.3 475.34 865.44 473.93 865.44 472.17 L 865.44 455.09 C 865.44 453.39 864.22 452.12 862.32 452.12 L 827.52 452.12 L 827.52 431.76 C 827.52 427.61 830.96 425.79 833.33 425.79 L 854.21 425.79 C 856.33 425.79 856.7 428.23 856.7 429.52 L 856.71 440.31 C 856.71 442.3 858.38 443.31 859.64 443.31 L 870.53 443.31 C 872.02 443.31 874.24 443.77 874.24 446.39 L 874.24 483.83 C 874.24 487.16 872.07 489.95 868.16 489.95 L 833.53 489.95 C 830.7 489.95 827.52 487.95 827.52 483.92 Z" fill="#ffffff" stroke="none" pointer-events="all"/><rect x="1060" y="412.9" width="200" height="90" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 458px; margin-left: 1061px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">https://keyboards.qmk.fm<br />Keyboard Metadata<br />Source: qmk/qmk_firmware<br />GH Action: Update API Data<br />Host: DigitalOcean Spaces</div></div></div></foreignObject><text x="1160" y="462" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">https://keyboards.qmk.fm...</text></switch></g><path d="M 845.04 420 L 845.14 308.77" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 845.15 303.52 L 848.64 310.52 L 845.14 308.77 L 841.64 310.51 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 905 630 L 1060 630" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><path d="M 815 610 C 791 610 785 630 804.2 634 C 785 642.8 806.6 662 822.2 654 C 833 670 869 670 881 654 C 905 654 905 638 890 630 C 905 614 881 598 860 606 C 845 594 821 594 815 610 Z" fill="#ffffff" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 630px; margin-left: 786px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">QMK API</div></div></div></foreignObject><text x="845" y="634" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">QMK API</text></switch></g><rect x="1060" y="595" width="200" height="70" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 630px; margin-left: 1061px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">https://api.qmk.fm<br />RESTful API<br />Source: qmk/qmk_api<br />Host: Rancher on DO VM's</div></div></div></foreignObject><text x="1160" y="634" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">https://api.qmk.fm...</text></switch></g><path d="M 794 275.46 L 709.04 315.72 Q 700 320 700 330 L 700 570 Q 700 580 709.45 583.26 L 785.69 609.55" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 790.65 611.26 L 782.89 612.29 L 785.69 609.55 L 785.17 605.67 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 460 251.8 L 290 251.8" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><path d="M 490 229 C 466 229 460 251.8 479.2 256.36 C 460 266.39 481.6 288.28 497.2 279.16 C 508 297.4 544 297.4 556 279.16 C 580 279.16 580 260.92 565 251.8 C 580 233.56 556 215.32 535 224.44 C 520 210.76 496 210.76 490 229 Z" fill="#ffffff" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 252px; margin-left: 461px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Digital Ocean<br />Spaces<br />(S3)</div></div></div></foreignObject><text x="520" y="255" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Digital Ocean...</text></switch></g><rect x="0" y="221.8" width="290" height="60" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 288px; height: 1px; padding-top: 252px; margin-left: 1px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">https://qmk-api.nyc3.cdn.digitaloceanspaces.com<br />Space: qmk-api<br />Host: Digital Ocean</div></div></div></foreignObject><text x="145" y="255" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">https://qmk-api.nyc3.cdn.digitaloceanspaces.com...</text></switch></g><path d="M 580 251.8 L 787.63 251.31" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 792.88 251.3 L 785.89 254.81 L 787.63 251.31 L 785.87 247.81 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 875 790 L 1060 790" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><path d="M 815 768 C 815 757.33 875 757.33 875 768 L 875 812 C 875 822.67 815 822.67 815 812 Z" fill="#ffffff" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 815 768 C 815 776 875 776 875 768 M 815 772 C 815 780 875 780 875 772 M 815 776 C 815 784 875 784 875 776" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 800px; margin-left: 816px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">RQ</div></div></div></foreignObject><text x="845" y="804" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">RQ</text></switch></g><rect x="1060" y="755" width="200" height="70" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 790px; margin-left: 1061px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Redis / RQ<br />Job Queue<br />Source: qmk/qmk_redis<br />Host: Rancher on DO VM's</div></div></div></foreignObject><text x="1160" y="794" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Redis / RQ...</text></switch></g><path d="M 845 670 L 845 753.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 845 758.88 L 841.5 751.88 L 845 753.63 L 848.5 751.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="785" y="910" width="120" height="80" rx="12" ry="12" fill="#ffffff" stroke="#000000" pointer-events="all"/><rect x="787" y="912" width="116" height="76" rx="11.4" ry="11.4" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 114px; height: 1px; padding-top: 950px; margin-left: 788px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">qmk_complier</div></div></div></foreignObject><text x="845" y="954" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">qmk_complier</text></switch></g><rect x="1060" y="915" width="200" height="70" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 950px; margin-left: 1061px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">QMK Compiler<br />Job Runners<br />Source: qmk/qmk_compiler<br />Host: Rancher on DO VM's</div></div></div></foreignObject><text x="1160" y="954" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">QMK Compiler...</text></switch></g><path d="M 845 820 L 845 903.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 845 908.88 L 841.5 901.88 L 845 903.63 L 848.5 901.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 779.03 925.64 L 529.38 833.46 Q 520 830 520 820 L 520 303.77" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 783.95 927.46 L 776.17 928.32 L 779.03 925.64 L 778.6 921.75 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 520 298.52 L 523.5 305.52 L 520 303.77 L 516.5 305.52 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 905 950 L 1060 950" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Viewer does not support full SVG 1.1</text></a></switch></svg> \ No newline at end of file
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="1261px" height="991px" viewBox="-0.5 -0.5 1261 991" style="background-color: rgb(255, 255, 255);"><defs/><g><path d="M 885.2 40 L 1060 40" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><image x="804.7" y="-0.5" width="80" height="80" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHcAAAB8CAYAAABT/i9JAAAgAElEQVR4Xu19CbhdZXnuu/Y8n3k+OUPmhAyQQMJMQCZxqFpBvU7VKk6otQIq4BBBLVQF7a2ot/a2trW3j09br+3F1lZAJBBIQkLInJOcedjD2WfPwxrv8/3/+tdee+eckIRDCMcsnnCmvdfee73r/Yb3+77/l3D+OKMr0NbZ8xmfz/95p9PVkEonP5SMTf7zGZ3oVXyS9Cqee8GdurV10RKP3/tIMBS+0e3xegzDAP3TNA3pmcQTU+PD1wPQz5UPfh7cU0Cis6fvM35/6PPBcF0PXTACVNd19lWWy8hnZiBJBnKZ9NJ0On3sFE55Vh5yHtw5LnNbb29/wO3/fjBcd6PX5/MYugGdmGqCmkknIZcKcLlcYIDDQHomeR7cs3LbnuGL9PYvuSMQjNwVqqvvkSBxQA0dBG6pXER2ZpqB6XA5icKMvfSPvk+nzoN7hpf91Xtab29vv8cf/n64rv5Gnz9QxVLd0JFOJlAqFuBymyy1g0qcZdgayJwH99UD6XTP3L985R3BYPiu+vqmHkmqZmmxWEAqGWcG1+kklnIA6T9AgivYjIBHwkx8gjMYBO7MebN8uiDM5+N7e1f0B8OB74XrG28KBAMeXTdNq66zIGl6OoZSPgeX2819qQkcM71OP3zNfWjoXgU5n4YrN4TxwUOWWc6kz4M7n1id8rmWr1x9RzBSf2dDY0uvwyGBg0qAGigW8piOT7FzMZYyU8v/SZIL4dZeRDpWQPLVM4YSzvmZKbgZuAfNxwLZ8+CeMh6v+IG9K1b0hwOR7zU2Nt0UCIYqLDV0aJqORGwC+VwOHo+HvZYAlL66A/Vo6V2Ftv41cDg9KJZkZDIZ6Dx2QoHAzQ9h/LgJLgxk06nzZvkVo/YyJ1i5dv0ddZGGOxubW3slh8QiXcHSfD6H+NQEIJEvdVVFvJLkQF3HEnQsXofG1m4oGt0EGlRVR0kuI5PNmcETZ64nP4QxE1z6QzZzHtxXBdsVK9b1ByKB7zU1td4UDIc9PCel3FSHrumYmhhDPp+Bxy1YWvGnHn8EnUvXo2vxGji9PsZqTdVs4GoolRXkcjnOXBBzJ+HJD2Ps+AGL8edFjHmG9oILN3yqvr7xrpbW9l7J4aiw1CDFKIPo5Djzky6nqyo4oui4qXMpelduQFP7IqgalxFVk6nse12HqumMucVSGYVCocLc1CS8BO4xE1ycV6jmBdoV69b1RwJ1jzS3tt0citR5hMggWDoxNoxsJgOP12ulKcKf+gIRBmjv8rVwewMWeKqucoBVjTGXg0xgc/9cKJVQKpUrPtcEd/TYfitNymXPy49nDPCFGzZ/qr6p8a7Wts5eh5OzVChImVQKk+OjjKXXfOh+/Oaf/hKeUtxMU4C23mVYesElaOvuhaYbjI0MQAaiyVrxO12DRt/rOjSFMziXL0BRVM5cGCikphhzCVyhUOWymfMB1emgu27duv5AXdMjbe0dN4cZSyu+VFNVjA4PIZtJw+PzWcHRRW//LJ79xU8QCRhYdsElWLZ6A9xeP2MisdAeKHHTq3K2EqCqDk3nQRQBr+k6FFVDPl9gj+HRsoFiagqewjDGBji49F/+PLinBu2GzZd9qqGp5c6Oju4+J7HUVolJzyQxOjrMzCEJ99zkckaR8NDRuwyrL7wUnT39jKUc0IqJJbAoyJJNs0vfMxNMTNU0BiYPqkyfq2nI5nLs7OK1BLijA/vMmwrI584zd050N27c2BOINP5FW0fXTXX1DV6RvtBXYung8WPIpNPw2ljK5EDDgD8QxqqLLsXqdRvgDQQ5A22+U2GMNEEUv9cMzk4RGdvYave5ZI6LxRK7gbgbAIrpKXgLwyBwhVnO57LnzXItupsvu/pTTa0td3Z0L+pzOpxmaY3nptOJBEaHB7meSyy1q0eQsKh/OdZtuhy9vUu5L2UAqqZZ5X6zApQAU/yO/m76VxNwzlx+IxBzFV1DuVyGLJv+VoBLPrc4jNGjHFzmh8+Dy6HduPGKnkhj5C/auxfd1FDfyFlq1ksVVcXxo0eQTs3A6/NXqUeMpcEA1l9yJdZvuIQxlgdGnJVkfjViJDO5ZJJV5mPZ36tSHf547mvNnNZkNmO4Qv6W+95CscTlSlN6JL9LZtlXHMbI0ZcsX1/I536/mXv5Vdd9orm19e6unt4+l7OapYlEHEPHjgGSyVJbaY1qq71Ll+OSy67C4iXL2I0gIlpimshPK0ALQCnFqfhP5nuFiRZ+mBhKQJsstm4QAldRbSmQKO9xs+wrDGNk4CXLLP9egrvxiit6muoav9+5qOfmhoZmL+WjPOrVISsKBg4fQkqw1AKUqb3wBf245LKrccmmyxAMmixljDM4I8kEM8bZgiZbIMQZa/paK4etAC9ukEpqxNUp4a/LZQWKRia5Aixn7iT8xRGMHN1rBXPF3yfmXnXd9Z9obWu7e1Hv4j5SiOySYCw6hcFjA9TTUIl4TX8KQ8fiZStw5TXXYfnyFeziMT9oRb3cT3Jwud9UFDNgIp8pclcC3jLJFXYL9Ymdj8w3Oze/STioHGD6yoQLK5/m0iMLqKrA5RWkYiG/sM3yFVdc3xNuCn+/p6fv5sbmFq9oJBMsPXRgP2aSSfj8gSr1iEe8flx+1RZcfsWViETCDEBZsI5FtjxQ4nmq6StZ4MN9JmdfdZQs5EPL32oGT4PMKLk6guapEGezCkVWURbCRRVzDZTSU4y5w0f2WiXCBQ/uO9793rGGxqau1rYOKzedmpjAwNEjoKoLtaqIthSRQixZtgw33HgjVq9aRaS1BUAUDNnVJGKaWakxWSdECZbSMNZSMGQKEJZgMVt0LExvJdAiUO1gC9baAynx3jm4wwxc8TmKxcLCZu77PvyxeG//4uax0WHEo1FMT0/D5w9a2Y+4EJSrXnXNNbj22mvQ3NDIGMejWm5KeZAk2MhlQvY7FslW/KiIaK2giokWFSGCsZydi7OegWfLf4VvFWaeiRfEWkWDLCuWImX2wDGzTO6FwA3YwKXPVVro4L73Qx+N9/QtbiY0H/+vX3Pzazv6+vpww0034sK1a+GiDkK6WEziMwE10w8R1VI6Q6kRD5ooiCKpUKQ6Zgpk/syrOmbka/pny4eKn0VkzEAUNw/dUDxI48qUipKssL/XBlLiZwZuaRhDh1+0UrVUsbC0vJD7lt/zwY/Ee/r6GbhP/ua/q8D90r33oG9RdxXYdLE4YwkwzlpZ5TVY+j2XDSklqWay8LuCpZXASQBuD4wq0qMIwKwcl4HKH0vn1Ml/qypjrV2REoGUJT+mpxA0wRXWKFUqLmxw3/3+D8cXmeA+9cTjVeA+/N3vIBDgooQ4GAs1jQVOQh0SOSsPkipiv/V7M4iqmG0TGDNStgsT9BzdZL+9aCAKBdxPc/B1M/ImRUrTeVRczVyhYYOb5dIwhg+/aBXr06ni0nJ5AU8c3Pa+D8YX9XLmPv3bJyv+1jDw8MPfrQKXfJeIcJlPNVMYlp7Y81NmqvlNYEXLTOgXZtgWITOgeF22okqZ1R5xA9mKCKKNhqVBZI7LMmOyKERw9p4INIkYwfIwhg7tMaNlYMGDe+t7PxDv7ulj4G576in4AzyYIgY8UgOuAJD5VMZgEUjZgDHLcNznmt0RigbF9JeceVxmtAdglRJe5SawgLSlSyyNMvNbRVFs5riatSKQEoEVMVeAK8xyOp1aWi6XF+6s0Dvf/f54V08vA/fZbU/PCS4rxZkRseVXmVBfqavatWAC154GCVZyEcIwdWAOFPPXImUywWMmV3RWWDcK5bRmMUGjVhqhIdea4xOBrgWXAM4sdHDf/q73xrsXcXCfe/YZBq64sx955GHLLFdYWmEcz2lNFpPqRP6WRcgiIOK/48BWQKkKuMwAjD2PtGJR7WHacSXFYmKFGUyRby/LZVYsEMwUpb3aQEqY6LLF3N1WpSqTTi9s5r7ttv8R7+ruYeDueG67BS4B/D0TXJH6UDAlCuaWAFFlmm0yo5WbVoQGqwjAmtkoZeJF+EogZhbgrZaaSquq1QBH1kJRGbhz+dfZgC6lowiVhzF4aLdVFcpkFji4b33nuy1wd+143oyWeZRJ4Pr9/irBgphFqY9dThTlOqvSY9ZVrSBJiBmW6eV1V2Hm7W0yXDfm6RSPlrnIIfwvPZbMMd1oFaGCfz9bIMVbWw2UGbhDDFx6LP1vwYP7lne8K97ZvYgxd/eunQxcYZa/971H4PN5udIkhH+rX6kmmLKxzfKvTPcV5pgrViw3NWVHDj4PzERfVJV2bPZH2W+SsixDUXlOWwHUDnSl+8ICnylUUYTlIQwerJjlbCazsM3ym99+W7yjq5uB++LuXSwVEm2lBK7b4zEBsBUBqoA20x2rTYYLGcJ3iuqQAFAUCuzFBMHSSiHBrOmaUTI7HxUlFBlU0mP9WWaz+VyKFE+NKkATcwnc4wcrZjmbXeDg3vIH77TA3btnN/zEXLOU9/DDj7C5HCFYCKmQpzBmMGX6Tt7+woMpxjQKhsyynuWfRRXIVLaEbmw9h4EpqkmC8Sprx5FZEd6Mjq081sZSs7QnwK410eWMAPcFq312wYP7xre+Pd7eyZm7b++LXMQwC/Dfefi7cLu9VltMpUxnb5OxFwu4hsxNq6gQVboUuZRY8deiKM/0YUtSJDCrRQwCllpn2AyRrXXmZIqU+JsVLWeiiBBzD7xg3by5bHZhm+Wb3/y2eFtnFwP3wL6XTJ/LafDQt78Dt9drkxTt0XClJmtvRbVyU5EDW8NZwr9WTC4H19aDzIoDogdZlAE1FKgH2ZzLrTCSB0ovF0gJv0vMJXCPHXjBunlzuQUO7g1vemu8vYODe3D/PvjJ55pm+UEC1+0xi+vC5FZSlyoVik0BqDX1W5ORpuzIo+Na8EQzuVlNsqlRFHjl80WWMvEAt7p1xv5zrSJVy1w5O4WIPIxjB3ZVJg5yuYXN3OtveUu8rb2TgXv44IEqs/zNh/4cHg83y4o5wsFrtKLVxazO2HRh0azGW2LMdhhbK4zVzCYYPSvYPB2iQS4yyfao93QDKfFcOTOFiDKMY/t3WTdvfqGDe93Nb463tXcwcI8cOmhTqIAHvvUg3B4akaxow7WFc+GHyZyKgr09gOIaskh3KmadixKiVZXfJLrJfLIIpWKRFQVmTXdszeZzKVKVqQae/wpwj+/faVWP8vkFztzrbrol3trGwT165HCVWb7/mw+yybuqLguarhNRsa0PyqoSmZ0UvNtRtRrjeMDE/SvPdUWR3uxbZg1vvOpUpvHLYsEmSrycf62U9mrNsfhZJp+rEnN3Wj43n88vbLO85fo3xlva2xm4x44egT8Qsj78177xZ/AKcK2Jutq+qEqPlBjKEnJiRWUSEbJZkNerQefRMg+0ikUZ+WLeZoq5rz3TQEoU8AncOmaWd/IVbgwDCx7ca95wc7ylrY2Be/zYQFXh4CsPfAsej88c17D1RdkZa6U+tujZHNDibObpERveEqMf1jQBj46FAlUolFAoFq3A6Uz9a9XNYEbUHNwhDq6Z6hUKhYXN3KuvvSHe3MqZOzR4nINrRstf/vq3mELFxYlq32kv2tvbU63ujJrRSuZ3mY8VfpeLHkJuzOfzbGC6qlXGVnR/pUArWQ7ugM0sL3hwr9xyfby5hTN3eHgQAVby46bw3q3fYAFVVZ3W9Km8j8pe2hNdirwbUUTLHHgheoheK1H94QFVJptlyxxYooSpNonZ2kq0fOqKFE+NKumTBe6+ille8OBecfV18aaWVgbu6MgI/MGKQvWlrxK4PBWywLKNVVrihdmCWinOV1pnRI1WTAsIoEXnRSqTRtmMimcNhs5QkapSrwBUwN1hmeVikXqoFnAnxqVXbYk3N3Nwx8fGLLNMNLr7yw/wPFe0y1h9UnbW2vqWWbRrKk42MYJAJ0GiYr4pKFORSqVBVR4r3akRKuYjkGLlPQBqegwRbRxH9+2wAsYFD+7mK6+JNzW1MHAnJsZNs8xnae5i4FJVqDL6wUxx1VC0fSzEbGu1m2zb0gYCZCr4J2dmQD1QVVGwqUC9Uv8qmuXYDZWZRFudC35HGYdfeh6pxBSv58LAggd30+VXxxubmhm4U5OTVWb58/fcD4+XwDW7Gc31JrhpFUUC+9xPhZ21s0FiiYNyScb0TIpZA7vQMJ+BFK3z6FWT6GoJIzFxHGODh1HIpy3GmtGyoShKd6FQmLC37r6W38/7YtoXX3qlBS5N8lGey4r1MPC5e7ayqpCo2IgASvRFiaFnEh94p0QlcLJqtLaOi0w+j3Q6Bd3WY1xVmnsFgRSxVE6PoyXsgE+SMXL8AOKTI2w6QlS56GNpmlpQFOUXLpfrs9lsNvFagln72vMO7sZNV8QbmpoYc+PxWJVZ/uwXv8YUqkraU2lE57VYE0xWtxUMNhcfsXqkeH8zmeFcrrLol24GSifoxiL9OcVASs6n4JKT6Gj0Y3pqGBNDAygUshVAwZbANxRZPqqq6tdLpdI/nEuA2t/LvIO74ZJL4/WN3CzTehb2aPkzX/gqK/mxPFc0lZs9TlUdFvZ1KkTkbEqNpA/HE0m2t8Cp+teXC6RIgy6lJtDkB3yOMkaOH8Z0bLzCUjNPVxWlqCjqLyUJn8nlcrFzFVTxvuYd3Asv3hyvb+DMnUlOVxQqAJ+66ytmVagyNM0iXnsDnK1HSkzMi+Z1WmE1Pp1kAVm1f62RE08xkCJfKpUSaG/wIjE5gsmxQZQKOXZthOpELJXL5QFNUx/I5/M/PdcBfVWZu37DpnhdQyMDlxYsEX3LdLE++fmvcLM8h2Bhb2YTOS/N+VA6FJ9JIpXKVM3vnNCdaPlYW4ObKTyIiFmnbsfkOOo9GrwoY2x4ANMs4rX7UgOqIhdlWf5/uq5/Op/P88WYX2fHvDN3zUUXx+vrGxi4mXQGgWClQe7jf3ofPF6f2Rdlztra11q0lkGwLVtQlhGNxXhbjOhQPKl/5QvV15b2SoUMkIuhtc6D6alRRCeGUSoVqoIjtlaHrseKhfw92Wz2J68zLE94u/MO7gXrN8TrTHBz2SwfJzHXafro5+5jhYNKX5R9WEusmiq6KzQkEjOYTs+wIsGcddiTAE2RbWFmHM1BCX6HisGBQ4hHJ6tZSgGSpqG1vYMt2RAK10GSpD2Sw3HnQ1+/9zevZ4DnHdzV6y6KR+rqGXML+XyVWf7on9wLN61nzJrdbGU7q+rDa7O5bB6T0SiTEa1uf1vr6csFUqV8lvvSOi/KhQyGjh9FKpmoWoODgHe53Fi1dj1WrV4DWs6Xlumlfw766nDQumaPSU7X3Q9+5Yv7X48gzzu4K9est8AtFgoIBHmeS/8+8pkvmQ1yvKJjLZ5pBlS0StvkVBQz6fTc3f7WOo/VdVkCK58YQ71fQtCtMoaODB5jdV17gBQOR9DTv5hNPrR3LoLb464AKjlAK6vbAZYgaQ5J+gnc+le+ee+90dcTyPMO7orV6+LhSB1jbrlcqjLLH/r0l1i0LFZ0s5a91TQkkilMTEWZhFiVq1r9w5WKjD2QIpbqhThawy6UchmMjgwinZ6pUo8cDgfa2juwdPlKtHV0gn4mZvKNKxJo6ehgC4JWgVrDYkmScpLD8aBbLXz3a1/7WuH1APK8g7t85Zp4yARXUeSqYv0f3fEFuFgPVWXREYqAJ6Ixtp6xaC19Of9K60JlE2MIuxQEnBrisSgmxoeZ7xRWgs7h9nrQ0NCECy/eBJ/PB4fkYMDS7iQCYPqaTCRQLpXQ0Nw8K8AM9IrZHpck3OeQ8z/dunXrObMp42w327yDu3TF6ngozJmrqootWgY+8Mm7mc+lVGg6OYPxySjytqXlZ/OvdqCJpWo2hsaAA6VcGmPjo8hlM1XqEX0g1qclKygW8+jpW4INmy41QTXBZSBXA0zg0drN/kAAwVB4dhabAPMLKb0IA3c+8OW7/vtcZfG8g7tk+ap4MBRh4FJOaY+W3/vxu5ArlDA2MVUN6gmluUoRnViaSYwh6CjDCwWJ6TimJidgCJaa6hGtUEf+knYfoUkCJzHU6UR3Tx/WXrSxGlz6mwkwmWfOZh5QUU49NjKE5pZWVnsWwZUItsRXG6CPSbp+9/3nYNA17+D2L10ZD4bCDFwSBkRARY509eU3AU63JUScEPVa3Q4AsbScmkS9Fyjm0piITqCQy1vrTwiFihYHJfNPOavD4WSbPnGwnKCl8ju7erB67TrmYwWIVV/NyFj8ToCWz2URj8XQ2d3NFkezmWV2E9QcmgH8xJCUcyromldwN119dX9sIro/EAiyJWvoIthFjCUbroWXVYkqraXV/tVAKjoGr16AR5KZNh2P0z4FQm40d+miFcslHaV8nkXVgqUCUPbVZC4FUCtWrq7ysdXgmsAJM10D3HQ8xqYBW1rbuamuMs21GEs5SHjIpeS/cy4EXfMBrmPDpde8CZL0CYck3ZSIjjvEwmJ0IYIiFYKBCrjVMzmlYg6FxDjCbo2WkmfVpGKxWBXxinRGKZdRlkuzspSDyhnLvzrR2tbGlvC1TO9cDDZBo8fVHrRu5dO//Q0uv/o6C+CX8bPnRNB1xuCu2by5zWU4PwI4b3dIEtvFknxebGocPnMBbFrZnMyyqH8u2XgtPGZ9l8zqzNQYnGoOLrWImZkkkqmUuS+QuZceDA6S5MTMTIwNyJ6MpXbG0orrBHJTUwt6+vqqTPLcJrqS5xJ4M9PTeOrxX2N8lOq4Gj7xuS9YQscspnkWvF/boOu0wV170WXXGIyleIckSW4OKgUoPPmPTo3C6+ULiXncbgRCZrHeMLB443Xs99nYGIIuGflMBolkkilRQqIUqYzkcAOGxKbeqXsjl0pU+dLZWMqANxkr/G5jYxM6unhueyrspcfseWEH9u7aARJhhEsgkeTjf3J3le891ShZgvEr6MZdZzvoOiVwF2/cWOcp4wMOh/MTkkNaJVjKAg0TVK7sODA1MQKv18c+N00X2M1yZ9ciOHUFM+kUMtk83yLc0oZp7w8JDpfbWpeZZxyA2+VGLjPNgTN96WwstQMeCoVRV1ePYChkBlncX84FMAVQ23/3W4yPjbCXFRtR0Vc679JVq3HNdTdWJMpZzPfLgM2CLpeCr27devdZqTKdFNylqzZucDj0T0iS4z2SJAVrWTrbz5MTI0yFosPv99nMMtiFpfmeSpsKL/MQrLQvkJdNI3C50P7G6HmZ1HSVL52NpdQIEA6HEQ6H2KgoD35qo+QKyGRxjh46iAP79qBMkwkEqrmYJ1WIwqEINl56OfqXLKsKpuxp0amyVzwuMR17ZuTY4Gcf++U/7zzd557u408At69vi88TzL4L0D8JSJvECatSAZsZrmXxxNgQyw/pIOZQt6OYpamoR9SqwneQpqV5HU4XA4LSGL6Sa+VtsQ2KYTDhnwIk4UsFS2nPIV8giGAwwHz9bOkOdxsVkClt2rPrecSnJtlrWabX1MAX9fZh0+VXm6oWdzu1RYVZ8t05r72qqdmRweHdk1MT3bqmL5Ykx9uf/PW//eJ0wTrdx1tXcdWqC5dpDufHAf2PAKmx9kQ1Ehz/sDUgkyJE265RIENHQ2MT87sMVPqPrWuhmotqc2bVmkna9pRWvBE7T9N5SPyfmebgCl9KYykk/vu8fjhdTjOPrTa9tecfHx7CkcMHocilCqi0xL2usV1Q1qzfgP6ly04QLmYTMk6eEvGrl8lkjwwdHYimc5kNAKxFp88auGsvvvL6cqnwBRh4Q401rMLXbopqWazKMgqFPCvEq2yFGD58RR2ubreb7fBBoILYQwCZ+WIty+xRrJsi7VDQNNUypuNx9lwy+RRgkR+e3YdWA0wS6OH9+8znm/vSm6aXbhqq41548WYEA0F204mqEC8i1P5cw+JZ/K5uGPLE+NjO0ZGRkKqo62Zj21kD9+4vP/CrZ7Zt88ei0StpV++5qF8rv9lZ29HZxoKoYwPHWVWHDrlcZGaNWV8KlWyAchD5xZvTjJqsJrNOgRnN11JqZT1+luda53U4kIhFMTx0jNWOKVDjLoGvPkemfenKVSz/5Z9rllLfiVWhOYsK9AlLpfLEsWMDR5LTiQtgoOVkJvSsgXvf/Q89CQnXTCcSh5968reqoigXnAzg2Xxva0sz+pYsZd2Cx44exlQ0yvYqqD1OjFRnB3jOPHQWsd9+g1C1iWq4mUyS7WotACWtmRgcqW/AmvUXsQheuBWrzFcL8El+tlwUYCSmE7sHjx1XyuXyxScjB8mk1LrLbvWz5XMFuPSihmHoe/e8+PThQ4cuBBCZze/O5nu9Hg+WrVjOxjPZXVwsYuDoUbZzJW9I58eJ7K1UZ2pZPDvA1ZGuuFmyqRTb2Zr8Ov1O7CzGd0bRWfFARLyCpVYKZ4JYSenmDp6E79U0LT02MrInGo326rreNxcZyJcnEzEkopO44uprMT2Tfu3AFW+yWCzGnnj88YFcJnu5/Y1XmebaiFmSEAmH0Nm9yBLWU6kkRoaHWceFOE7qJ2tM7ckYTDdNdGoCxTz5eq+VwhCYskx15ACWr1xtle94SsTdw5mytpDNHhoaGYnnc7mNAKo3b7BdKOqpno5OIhGfYjVmOq678ZZzA1zxPkeHh3c9t/25Fl3Xe+zgzB1cSSxvrW+og9ndyp4WnRhn9VsisZ29zMRbEbMtELKBXAtwqVDAzEycbVPOtjE30xe2/qMio7WtHT39SyxfWgVoLUvnYK2dxYBRjsViO6cmp+o0VV1zMl+az2eRjEWRTiehq3wXMXGcc+DSG9M0rbT9mWe2j4+NE4s9p5IS0UXXVRk0eCBWSqfZn8mxURTLZaYVz60WmSDbAKa9/TKpJFRVhs9HC4XyKhGZXarYuBxOBmgoTEV2UzWzWMrNbAVkHjzNaZZNwGVZHpsYHxvIZDLrYOCE1FCARukdbc6cmo6xjIFuMhqFEYylfJzy8CXLVsDh4m7rNfG5J7srU+nU8acefyJTLqKbE1kAABnESURBVMsXWgm9LbkX8mOV76KdRwjkphYW6dJRLhURi0UhnQLApCuXcjl4KO91Ub5MfcU8L6XzhCMN6Fy0iIkfs4Fay9qTsph/FiOTSu2amooaiiKT6T2xRGReJCrqZ9NJZFI0OipzUNlmGRxcCuiC4QgaGltQ11B9b5w1cO/5+reeBKRrTgas/W+HDh54+uD+g6sBNL6sHGnqzTSLoyky/5BmvTSbSaGQL8JlyoSWiXY6UC7mmUZF7S52VUuWS2wHkbbOToTCETM1seeiZ8ZaXddnEtHY3pl0qh+GYbmg2a6JXC6D3nuRWn5UtYqpZEkI1EAogubWthP2VKoElmdJofriV7/xpAGcMrj0BmVZntm+bdu+dDpzpUSHmbPOHqxUEv8yWwtKZ7tp0kHApVNJSA4XnA6J3fmhcJCNeVZML63VmGcyZVtHFzfnZDrNEqMlNth+PiF4qg2mzJ+LxdKBRCyaLPE0hlc7ZjnIc9J7L+SyzGIIsyuYStE5WY9guI6BSgCf7DhrzL3zvq8/idMEV7zxeCy6d8+uFwKabiw9gcUma2urRvQzzRCR2iQ0aLlcQkMjN13C9CpyGaVSEfUNTQiGwxVATRD5eU+mKJ3IYjLLlKml06mdqZlko66DLNCcB92IVFCgjg9FUxhLLfNrrlZHMmmkrh71fDzqlI6zBu7nvvTVMwaXgyEp+/e9tG1qYmKTJEmBWr1ZiO48RzQBkSTmO6cTUWaWicEtra3say6bZooSBWPEAAbgSVg6K4vtKY/JUk1RRxLJxGC5WFoHCQ3VdadqTJhPp63MiaUmoPQ7+p7vJiqzsRgaZhQB4ymhCsQB4696+hb/NhQMLi97jL/564ceyp7ic0/7YdJn7rrvScA4LbM826sUi4WxPS/snpRl5ZITgysOai2LCTRqm0kkYgiFQwgEQqznypIELZZWhIUTXYDt3LYImV4LDkkv5nO7UjMpSdU0CpCqO6QYkSsVKMPgO12rCu3jZ2MpGwqnLVdlVmBoammzAsRTvOLPODyenyzu7fMVi4VPxafGVyfjMbR2dOY7FvX9eWPA9e1vf/vb1P03r4d0x59+8bR97sneweT4xPbBwUFSbdqrWGxjbS2La3+upC4V1lpm+OVY7CCroCdTM6mXivncEh3otheHOZS2SqfEc28KhmojXvqZfCwBS0sLU4O7dXvU3BhVZ+W3UN6A9LOmlub/bKxvuFZVlQ/s3L4trJQKLNqnm5hy8oA/gI7eJUmv3/tn5YDnL388j9MM0u2fveuHEvCx+bxlNE3LHTl0aFcum7tSckjO2Vg7G4urclErNz05a+1muVwu7UvPpNKKIlOAxIvK1kEozmaMJVairAaXctcUcxOhSB0DogJe9Y1hP7/5l8NOh/PHi/p6M3K5dPt0bOqS6OQ4K0vGYgkkE3G84YYboKsK/MEwvP4gMpkUktMJdHb3pLt6++53KcUfPPzww8VXigl7Px/91OduMyTpERjoeKUntD8/l8sdHKCty3V9lfCd88FaO4shGYVcLrsrl8mSkrayQqgTm0z43078Pfl2AleVy0ilZthD6hqabKZ37hvDNAKaA8YvA3X1/9La0rIWhvThPTu3NyvlIjQC0R9AS1s7/D4fSorC2mT9wRBe3PU8cmzBFo1V1do7OhCO1GHR4uVRj8f7zbDH+PHWrVup+HxGh/VJ3/vpT0c8Cr4BSJ88WfJ+Bq+iT0xMPp1MJC6SHI5wpQpTWxsVuq9dUZqbtZqmDqVnUsNluXAhINVxZs3NqmqzKT4FfzxpwflshqUzVDmiG7H2mOPGmJIcxl91dPYMGrrxgVQydnUiNiVRpA/JidGRYVx40QZEQgF4fQG4/UFk02lEJ8fgdLmZ7l4o5LDl2uuYDuALhFDX2MRSQ5pSbG3vjDW0tHw97NT/19atW+XTvfYn3Mbv/9gdFzt040cGQN0D83YoihIdGxo5LmvKZa+AxVqxkN+Zy6TdmqZdZNHQ/BTVzTnmWz+Fv1EN2uPm0qDN/lb9YJ2bf/OUx+/9WXt7d6dTcnx4dPh49/DgAIJ+P2skoFGUgN/sAPWHUd/YiL27d6GQy7BmBmo4oKnDYDCIbKGArq5uZinGx0YxNnycqV50UGlyyfIV6Fu6Ytztdj+Qirb95Mc//hgvmJ/CMWuD3K233ur0RhrvMAzpfgBccZinI5vJ7EzE4m2GJC2yWGwLtk4Ipihtgh7PpdP7S8XCcgPonO2t0PNmP05iUukJpwC++ZAcDPxdY3PbC+Fw+GbJgT+QHA4XvW6pUMS+vbtQzGWxfv06uL1+eHx+5LI5xKITkEslNrY6PHgcl11xJfxeNzxeP0J1DazbMzY5zpoItm97CjQ/fMEFa+AP+NmNEI7Uo62rh5lxSZKGHZLzgWRn49/++GMvD/JcV4Rdp1s/8PEuh6F9T5Lwh/OELTuNYRjFRDz+XLFUvEKSHKz3ebaIWZHLe7OZVE5V1YsloEKtGhpZGM3y++q/zf5xX+bGOOByuf6mvaPHZWjKRw0Y/V6/f1Ytu1SglQT8GBsdwfjIEJwSV65a2zoQCoWYOucLRtDY1Izp6STGR44hNc3XJaPmvvbOTszMpNDT08OYXNfYzHrJanu4HJI0CMl5v0cv/N3WrVt5u+gsx0nBFY+/9X1//CbdMP6nBMxZmD4T8BVFOZacTuQNA+sqZUTkC7ncC/l8rg3Ql4vzzpbCVP5W8zGqfqzyxLZwucaIV98YKgz8a6Sx8clIuP6yXDr5rnRq2p3PplkETWpUV89itkrAiX1WDlAd+8VdzzGjsOaC1Uyo8YfqWFVoOjaFQj6LaDTKRkbXX7gBrW0t0BQFAeq1bmpBmBg9W/tPrSLndAw4JOn+Q8v6/uHnt93GC8e245TApce/5S23B1zB0lcA/CkA95mAOcdzKNzdlslk6nO5dFIply+qcgX0Ic0uDhbVairrtLDnNdUf4gQ7a1re2YMtO/QSMCG5nX/T0tKZliS8Xy4V14wMDyI9k0RzcxNoYTwSW0gHd7q88Eco+JpDRHFItJ8uY6wsKzh6aB9ymRSrdzOdvL2DFz6cbpbvhusbWTOhJeBwqZSNz5ystZZbPRzRga+7lMI/2gfCTxlcAcyb3vX+NU5d/yGAK+YRYBw/fPBZWSlfNlsmSnd+fUMLwpEwa3SfmhjHDC1gYh5zmlXzxjjxfVYSXh4F44lAIPxv9Q2Ny7PZzAeLubSfgh9iKb02rUXpcjrQ39cHp9sHF3V50hLA0wnWLE8mtLWji0mS9u5JUcCgFqBnnnqC5csXb9zIblDKb8nnBiP1HECTlZSSxSfHMT46zFp0unr6sHTFakTqGqrOTT1hY0ODrOm/q6dXfMSDBrDVpeR/TiCfNrjiet7yjvf8sWQYD1Lpbz5AHjx66FlZLl9WNWrAmtaDfAxU54zt6e1HY1MTnnnqcbb8QrU1PfHjmODN1rWbgST9fXNz+5DT4/rDUi67maLmvXt2oq2tA93dXSy4IVAlGmPxBuF0uZgmfnDfbkDXaDyByZHNzS1s0+dQQwtcbm91O4+pbVNB5PjRI+js7EQgXHcCS8kMp2aS+N0T/4VgwM/UsvaOTkQidSBZdPHKdaybNJGI4/iRg5gYG2GPIZ9Oa30sX72WCS7msT83k7rrTMFl53jjG29t0d3StyUYH3ilAA8OHHpWIXBt4avTTbNGYXQtX4fCutuhJ44i8es/w7U33IznnnmKrWVxBrntXo/X9/PGptamQin/R3I+W0+1WWIplRPrG5swOT6B1ReshuT0wGHuYJahwvzMNMu+KOhJxKZw9ZZr4XI44PJ44PEF4fYFeIOersHt8tiYdmrdIJQf797xHEubbrjxRgYcBVWhSD0S8RgK+Rz27d3DzP2q1RegpbkFqlJmN1h7dy+aWtsxdGxgz9NP/qaYSiW1VwSuAPT6N79tCyD9UDKw4kxBHjl2+NmyLF9Web6ESFMrnNDRfNtf4uEPXoTb/3ECiR/ejLe+45147Jf/ilKxdlGZan9rC5lkhyT9S7Chca/fE7heLuev1TRVGjh6mPnA/v7FaG5uhsfthEEChsMNyUlThsDAkQNMYKAhClKRKNINBAJsRXYqyvsDYTjYCAyQmUliOj6F9Axf87Kzp5+ECNvYZ02T3hw9XbTKDpNRHE4cObAXk+OjFkvbu7rZ+yJz3NbWhsbWdrIo6Z3bt+05sPfFblVVyJL+raIoj84LuPQ+br31Vk8iU/4CgHtOVvieC/yRoSPPKuUKuOS7Orr6IZfyaLrlK1C6Lkfisfux3DfFZm5//dgvZ1u+QHgNEW+NOl2en9U1NzlVRX9fOZdqV2VaZtBgQUokUo9cIY+G+kaEIxEYEpchc9kUcmnePkNmdmJ8DIuXLEVbSxMLgJweH1xuHyShSasKsyQkOricEnt/kboIBToI1TXDH4qccg8XvT5p0ZT70g1EexD39S/BihXLmZRJAkhDcxvz8fFY9MD2p5+YjsdiGw3DOGjo+g8CgcA/jo2NMV163sAVoG256a1LdV37AQzccDosHhk88qyqVDO3b+lKNkhGA920q9cFa9ejb/FiPPFf/8GE9jn8LYXS/x0K1W/zhUIbNbl0i1IuOWkbmpGhY+jqWoTFSxbD66GeLAmaIUGXnIwZ5PMmRocQiYRBvdgNTU0IBripLasSbxpwcpbmqSkuGTfVJANOtwdTU1PYcNEGNutEAZMvGGYBGVWWqGBArCe/aEXYtrozQbF3907MJKZYaZFeh6lYgQAbd+1fshgNTa00slM4sPfFXftfeqFJluV+wzD+Sde0H0xPT++ovd7zDq54gSuvu/k9hoHvUunvVEAeGzr6rEJm2faOqD12+aq1LP0gVtAw2M7nt7Gm91ny3pTD5fw/4brWtNvpfGdyOrrE4+QTfHQxSZCncySmk+jo7ISmS0wVKhayKOYyoG4Qmjak9bBoVveySzczsyg5PMxEE0tpNqZUzGPw2FFks2k0NDSwf5FIhPleihHcviB8gQB7TRbVxydZdyQdNEvVt3gJ2jp7WHBmb5AvFgt4/D8fY1nAlVddzVhPTYGRhmbUN7eglM8d3/X8c6OTk+PrASNuAD8su93/Oz0ywrXKWY5XDVx6rS1bttSXNNc3IbGS4pydhPTYiaGBZ2WLuZQ78nfr8/vR2NwCTVYQjU7NIhdit88f+Y9AKLTE0NS3q0rJTWMbZEqpa2LDxosRCgZYpE27iSk6WEGemHpg7wusvSccCjL9l4bByKyWFMDjJ4C4j6RAJpua5mVAWjPS7WHKEQ23Le7vhdvjZ8EUsZduEirEU7F/z87nGdCrVq1mDfuGrrHzhuqaGOA0A0VsFJ0mFDGPjYzA63GioamFAiVl6PjAzv0v7faVi6W1hoF/16D/IDYxQWtfVZqiXwtwxWtuvPLazQ4dlBvTmMqsx/jIsSqzfJIUhp5flhyOfw3XNY+4Pd6bUsnEepfTgJvSFklCMBRhbKcV1ZubmlmQRNouFcppcRUq7XEm+dlyRGvWrmGjMDoooOI91RRoEai0xOHe3TvQ3tGFttZW5kvdNDIqOeDyhZlKRa9J62ck45NcqKBze7xoaW3DTCqFzi5Kq+qgGkB8apyNl1CeTMei3n70LF7G9oIQ/dTFYnH8wN4XjkyMj63WWaHZ+CtA//H4+PjYqVhB8ZhXlbn2N0LFiIHR2Gclw9gKIFT7JidGBbhzyYX0DGnI4/H/30C4vh7Qb4Mm+8nsFosltvDYilWr0dXZziYbSrKKssy3rtE1BSODx6HrKouKabQ0FAwykFRdgqyCm0kHFQGoyzHN/rHNKiAxWXBsbBSbLrmESYhkfknwp3acdDLBTHU6k8Hw8QG2AmxnZwdzB9QA6PWHQSaXbpQjhw8xxi5dvgytLa3WKCuZ3khDkx6dnNh16OBerZDNXwwYv9MM/dH2lpZf7Nq165QrQfbretbAFS+65pKrFzkN9fuA9Db7G5kcHXxWVSnPrZ2rh+FwSL8O1TXtd7m9W4rFwoZSPsPMHJluyoNp0oCku+RMGl5/gLFUpjZatcQqK3RQ/ZQW5I6Ew0xIoPElCqZ4WE2g5phydOjASwzo3t5eJjd63S72d8nlY8DSDUABz8jxo1BlPodMrCchg5ZootdobW2D5PJgcmwYM4kYmzCko4nci6azNKm1rZWJGU6Xe3rgyKG9k6NjS3RDrTMM/afQ9UeHh4cPng5LZ3vsWQdXvInVF136Vgn4CwCsCTw2PshEDJuUmHR5fP9SV98YgIS3GaocIEWI1s+gvQ5od83NmzcxlhZKMoolha2nQWMsJYqMB4+iqaUVvT29rG7qcbuYjFiQNVpWhYFEvjefmYFcypksBerqG1mgRfXYcF094HBBMjXtbHoG9I+WfCDN2eXyYPPmzTT9C6fbDbc3wN4f9WKTnrxz+za0d3Zh5coVLOCim4Raa8INTUjPpF4cOHo4W8hlLzEM4wB0PFoo+H4Wje6dt0a51wxcAnTdunVBGe6vwZD+ZHpqZIfCA6odi3r7/13RnVeVy6U3jA8PSPX1DWior2NTBiE2be/G6GSc+bWyrILaWRzg5pexlBrEQxGQi1q7di3KCm0Hx5fHJ42COi7lcoEt0z8+Nozu7h709fXB66V6CIMKuoMm93lRYODwfjgMPthFFoLGYwLBAOKJaSxa1MsYzfqg4lFQ5YgO6ujo6OzG8PAwli5ZAl8wBKfHm50YGdk1MTHaoatarwH955ru+MHQwMHtr5Sl5xRz7W9mxZoN62YSE39QKhT+I5PJ7PjyAw9+UtWMO5/bvj1/+MC+NYnoOGeI5GALg+aLZZbQQ6e1mQ1MjI+ynHXJkiVobGyEz+th+yjkiwrbaUyI+alEDJKhMnmQjlAowiLfTDaD3t4+aCygp8lBnXVNUHAkfDrVaC+97HIEA1QccDG/KyuUG8eZ36WeZqpatba3M0tBZ6IF1UjAKBaKh8ZGjk9lM9mLDRhR6PqPnJLx14cOHZp+NUA96wHV6XyI++5/6NOQ8H16TqGY3/27J55qzWRSXQQgXXQC1evhIxukq9KaU9RETr6PKjPFMi8yEKi6IkORi5YppUh4/foLEQz6mS5Nvlc1uMkk1k6Oj7BFRcmM08o6pDWHqAuCzLgmgQr1lBLxQIrLn8yyNDaxNIpAJ53Z5fWVpuOJHbHoWERV1DWGYfw/SPqjh/fv/89TSWNO53rN9djX1CzP9abuu//Bt0KS/skmYyrRyeiOZ5/Ztj42NR6cjk0wk7d8+TJWLiOfS/+ISWKsJTOTYKbaLIsyLZYqLJlsDvUNDdz0mguM0uBZMZ+BUi6B6kyxaBRt7e1Yurif2XHD4UapWAIVDzibeRBFqQ75ZrovXGauq6nGUHRqfDCXTq/VYbCFxRy6/KMDBw7w1cvO4nFOgkuf/55vPNzhNOQvGpBut0A2MHP40MFDe3bv3qwrZQfN6BTLZpZAn0SVoallJjTQ5si0l+DyFSvR0UErrgKyokNWxQZTBptFGjl+BPX1tF6WiwVT5NMpRcoWFDZlWCgUMDo0AI9LLL/UjPr6Or4GpYvrzA6XRy1kczvi8ahTU5WLYRhPazAeDbgd/3ymacx83APnLLjiw9391Qc7JahfhITbYfBGc03Tju18fkdxYnx8DTGV2JTPpljQ5Xa7LKmRFiCjdSgCwTBoOznKeij4kot5thYVyY0UYY+PjuLa665lfluHg90YZP6ZC5CcrIaay2WwZcu13DI4PRQcUaQ+mZqZPpjP5lbo0COGrv+dbjh+cODFHefEbibnPLgC5M997t4uzSV9CcBHxDRBoVja+cKO5zvSqZmueHScmeBNmy6BomiM0SRiUISsURSt6zh+7DDzz+FQgPlJ+p4YWyjTwmcuZqaPHnwJAb8PTqfE/l5X3wCf14tUNscGvxxON23/tiudTpVVRaZc7KChG48q5dzfHzhwgO8Vd44crxtwxfX6yKfv7pYM7UuAQSBTR6QynZx57sjBgxcqcilEXYSaOX2vKWXoSsmKjqndNJ/NoqOT5MAQFI2tH8Ua1sQefuRzJ8fHmCZNkTFVjCg6NuBKFgq5F0uFQo8OfZFh4Ocw9Ef3UDJ7jh6vO3DFdXz3hz65yOUwiMl/TCAbMKZj41OHJ6YmL6Vx8NjUGFOHSETo6uxka0NSYxvlvNlCmeXEtKsJjWlS4YDSF2Kp3+eFQYqVojPtWdP1veViPqkq6ibD0GPQ8SNddfxk9+7fxc9RTK239boFV3yCW299f4/mct4jAR8ikHXdODo5MV7M5/PraERE18pMSiRQafs5kgz52o8kdnBTTP3ES5csZmVAYq4OR05T5Z2qojRrurHaMIxfGZrx6K7nf/cr2obhXAdVvL/XPbjig9zyjnf0Grr7HgkGgexWVfX5eCLRqataNwVBtLz+8SMHmL67qLsbISrIu2ltZyBfUljkC0hHDF0b03Rtg2EYCnTjr6matX37k0OvF0Dt73PBgCs+1Jab39bnMLR7DQMfpE1TVUXens8XNlDHC4kOtGTwxg0bmM5Ma40aEsoOh+N5AwatgbQBhv6MAenRTKLx5wcO/Py0h6/OpZtgwYErLu6mq2/sd+jGvYZkfJC2U9B17bCu6ZfzxVhpXSrniNvlPCJJ0lrDMII6jL/XNf3R5373m73nEkCv5L0sWHDFRVl78ZWLAf1eCRK13x7zetxjfr8/YACUxhyiNMZQvD/dtu2Xr9raFK8EoFfy3AUPrrg4S9dsXOIwjPuCoWB3JBJKGJr06FOPP/bUK7l45/pzf2/AtYDYssWFJ5+cczLuXAfsdN7f/wfvVE4m+Gp+kAAAAABJRU5ErkJggg=="/><path d="M 845.33 302.4 C 815.12 302.4 794 277.79 794 251.59 C 794 220.27 819.22 200 845.71 200 C 871.22 200 896.4 220.93 896.4 251.18 C 896.4 278.28 874.84 302.4 845.33 302.4 Z" fill="#0d2636" stroke="none" pointer-events="all"/><path d="M 834.25 291.19 C 834.25 293.4 832.57 294.32 830.06 293.46 C 814.91 288.15 800.34 271.75 800.34 251.27 C 800.34 223.57 824.03 206.1 844.57 206.1 C 871.22 206.1 890.18 227.94 890.18 251 C 890.18 270.03 877.94 287.54 859.59 293.69 C 857.52 294.24 856.23 293.13 856.23 291.31 L 856.23 277.98 C 856.23 275.4 855.18 272.65 853.24 270.74 C 860.69 269.89 865.21 268.02 868.67 264.46 C 872.07 261.08 873.6 256.13 873.88 250.01 C 874.07 245.15 872.77 240.41 869.25 236.8 C 870.48 233.82 870.69 229.86 868.83 224.97 C 865.14 224.69 860.94 226.9 856.64 229.56 C 849.08 227.59 841.52 227.33 833.96 229.67 C 830.58 227.47 827.51 225 821.65 224.97 C 820.1 229.29 819.86 233.23 821.19 236.72 C 817 241.37 816.52 245.93 816.6 250.47 C 817.06 259.25 820.27 263.68 823.83 266.33 C 826.79 268.52 830.94 269.9 837.27 270.83 C 835.57 272.51 834.62 274.51 834.46 276.86 C 830.74 278.56 825.42 279.41 821.78 274.25 C 820.15 271.66 817.93 268.73 813.72 268.74 C 813.03 268.72 812.35 268.98 812.25 269.28 C 812.15 269.61 812.54 270.3 813.01 270.57 C 816.7 272.92 817.29 274.23 818.8 277.44 C 820.2 281.19 822.62 282.63 825.24 283.64 C 827.92 284.59 832.25 284.32 834.25 283.64 Z" fill="#ffffff" stroke="none" pointer-events="all"/><path d="M 845.2 193.63 L 845.2 86.37" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 845.2 198.88 L 841.7 191.88 L 845.2 193.63 L 848.7 191.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 845.2 81.12 L 848.7 88.12 L 845.2 86.37 L 841.7 88.12 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="1060" y="10" width="200" height="60" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 40px; margin-left: 1061px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: white; white-space: normal; word-wrap: normal; ">Clients Supported:<br />Chrome, Firefox<br />Desktop Only</div></div></div></foreignObject><text x="1160" y="44" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Clients Supported:...</text></switch></g><rect x="1060" y="206.2" width="200" height="90" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 251px; margin-left: 1061px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><span>https://config.qmk.fm</span><br /><span>Single Page Site<br /></span>JavaScript/VUE<br />Source: qmk/qmk_configurator<br /><span>Host: Github Pages</span></div></div></div></foreignObject><text x="1160" y="255" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">https://config.qmk.fm...</text></switch></g><path d="M 896.4 251.2 L 1060 251.2" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><path d="M 880 457.9 L 1060 457.9" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><path d="M 833.22 495.8 C 828.16 495.8 821.72 491.64 821.72 483.75 L 821.72 475.34 L 813.15 475.34 C 811.65 475.34 810 474.49 810.03 471.92 L 810.03 455.36 C 810.03 453.81 810.93 452.17 812.91 452.12 L 821.72 452.12 L 821.72 431.37 C 821.72 425.69 826.62 420 833.69 420 L 856.49 420 C 858.53 420 861.18 421.45 863.72 423.93 L 876.39 436.67 C 879.49 440.04 880 441.77 880 443.93 L 880 484.09 C 880 490.1 875.34 495.8 867.72 495.8 Z" fill="#000000" stroke="none" pointer-events="all"/><path d="M 850.47 469.58 L 850.47 457.06 L 854.43 457.06 L 858.82 463.99 L 858.82 457.06 L 861.89 457.06 L 861.89 469.58 L 858.67 469.58 L 853.58 461.29 L 853.58 469.58 Z M 844.7 463.4 C 844.69 461.89 844.28 459.4 841.65 459.33 C 839.7 459.3 838.71 461.33 838.71 463.26 C 838.77 466.2 840.13 467.37 841.74 467.37 C 843.53 467.33 844.68 465.87 844.7 463.4 Z M 835.26 462.55 C 835.34 459.28 837.91 457.1 840.4 456.87 C 843.13 456.63 844.5 457.13 845.74 457.91 C 847.41 459.11 848.53 461.32 848.06 464.79 C 847.61 467.23 846.07 469.6 842.36 469.85 C 841 469.92 838.36 469.99 836.56 467.58 C 835.73 466.38 835.22 465.51 835.26 462.55 Z M 823.19 465.77 L 823.65 465.72 C 825.75 467.29 827.29 467.4 828.78 467.35 C 829.66 467.23 830.41 467.01 830.47 466.24 C 830.51 465.69 829.93 465.31 829.36 465.17 C 827.6 464.71 826.16 464.86 824.34 463.46 C 822.89 462.1 822.96 460.46 823.66 459.16 C 824.9 457.24 827.05 456.94 828.36 456.83 C 830.57 456.81 832.33 457.19 833.44 457.73 L 833.43 460.67 L 832.94 460.71 C 831.93 459.92 830.82 459.41 829.27 459.32 C 828.41 459.31 827.38 459.3 826.76 460 C 826.43 461.17 827.29 461.25 828.04 461.42 C 830.02 461.87 831.13 461.99 832.65 462.95 C 834.58 464.43 833.97 466.96 832.96 468.1 C 831.63 469.39 830.35 469.86 827.92 469.85 C 826.52 469.83 824.81 469.63 823.17 468.83 Z M 813.29 466.83 C 814.07 467.09 814.63 467.45 816.44 467.23 C 817.09 467.05 817.76 466.56 817.76 465.57 L 817.76 459.51 L 814.91 459.51 L 814.91 457.06 L 821.13 457.06 L 821.13 466.31 C 820.87 468.24 819.78 469.26 818.09 469.59 C 816.91 469.84 815.53 469.98 813.29 469.57 Z M 827.52 475.34 L 862.48 475.34 C 864.3 475.34 865.44 473.93 865.44 472.17 L 865.44 455.09 C 865.44 453.39 864.22 452.12 862.32 452.12 L 827.52 452.12 L 827.52 431.76 C 827.52 427.61 830.96 425.79 833.33 425.79 L 854.21 425.79 C 856.33 425.79 856.7 428.23 856.7 429.52 L 856.71 440.31 C 856.71 442.3 858.38 443.31 859.64 443.31 L 870.53 443.31 C 872.02 443.31 874.24 443.77 874.24 446.39 L 874.24 483.83 C 874.24 487.16 872.07 489.95 868.16 489.95 L 833.53 489.95 C 830.7 489.95 827.52 487.95 827.52 483.92 Z" fill="#ffffff" stroke="none" pointer-events="all"/><rect x="1060" y="412.9" width="200" height="90" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 458px; margin-left: 1061px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">https://keyboards.qmk.fm<br />Keyboard Metadata<br />Source: qmk/qmk_firmware<br />GH Action: Update API Data<br />Host: DigitalOcean Spaces</div></div></div></foreignObject><text x="1160" y="462" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">https://keyboards.qmk.fm...</text></switch></g><path d="M 845.04 420 L 845.14 308.77" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 845.15 303.52 L 848.64 310.52 L 845.14 308.77 L 841.64 310.51 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 905 630 L 1060 630" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><path d="M 815 610 C 791 610 785 630 804.2 634 C 785 642.8 806.6 662 822.2 654 C 833 670 869 670 881 654 C 905 654 905 638 890 630 C 905 614 881 598 860 606 C 845 594 821 594 815 610 Z" fill="#ffffff" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 630px; margin-left: 786px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">QMK API</div></div></div></foreignObject><text x="845" y="634" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">QMK API</text></switch></g><rect x="1060" y="595" width="200" height="70" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 630px; margin-left: 1061px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">https://api.qmk.fm<br />RESTful API<br />Source: qmk/qmk_api<br />Host: Rancher on DO VM's</div></div></div></foreignObject><text x="1160" y="634" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">https://api.qmk.fm...</text></switch></g><path d="M 794 275.46 L 709.04 315.72 Q 700 320 700 330 L 700 570 Q 700 580 709.45 583.26 L 785.69 609.55" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 790.65 611.26 L 782.89 612.29 L 785.69 609.55 L 785.17 605.67 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 460 251.8 L 290 251.8" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><path d="M 490 229 C 466 229 460 251.8 479.2 256.36 C 460 266.39 481.6 288.28 497.2 279.16 C 508 297.4 544 297.4 556 279.16 C 580 279.16 580 260.92 565 251.8 C 580 233.56 556 215.32 535 224.44 C 520 210.76 496 210.76 490 229 Z" fill="#ffffff" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 252px; margin-left: 461px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Digital Ocean<br />Spaces<br />(S3)</div></div></div></foreignObject><text x="520" y="255" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Digital Ocean...</text></switch></g><rect x="0" y="221.8" width="290" height="60" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 288px; height: 1px; padding-top: 252px; margin-left: 1px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">https://qmk-api.nyc3.cdn.digitaloceanspaces.com<br />Space: qmk-api<br />Host: Digital Ocean</div></div></div></foreignObject><text x="145" y="255" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">https://qmk-api.nyc3.cdn.digitaloceanspaces.com...</text></switch></g><path d="M 580 251.8 L 787.63 251.31" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 792.88 251.3 L 785.89 254.81 L 787.63 251.31 L 785.87 247.81 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 875 790 L 1060 790" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><path d="M 815 768 C 815 757.33 875 757.33 875 768 L 875 812 C 875 822.67 815 822.67 815 812 Z" fill="#ffffff" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 815 768 C 815 776 875 776 875 768 M 815 772 C 815 780 875 780 875 772 M 815 776 C 815 784 875 784 875 776" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 800px; margin-left: 816px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">RQ</div></div></div></foreignObject><text x="845" y="804" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">RQ</text></switch></g><rect x="1060" y="755" width="200" height="70" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 790px; margin-left: 1061px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Redis / RQ<br />Job Queue<br />Source: qmk/qmk_redis<br />Host: Rancher on DO VM's</div></div></div></foreignObject><text x="1160" y="794" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Redis / RQ...</text></switch></g><path d="M 845 670 L 845 753.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 845 758.88 L 841.5 751.88 L 845 753.63 L 848.5 751.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="785" y="910" width="120" height="80" rx="12" ry="12" fill="#ffffff" stroke="#000000" pointer-events="all"/><rect x="787" y="912" width="116" height="76" rx="11.4" ry="11.4" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 114px; height: 1px; padding-top: 950px; margin-left: 788px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">qmk_complier</div></div></div></foreignObject><text x="845" y="954" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">qmk_complier</text></switch></g><rect x="1060" y="915" width="200" height="70" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 950px; margin-left: 1061px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">QMK Compiler<br />Job Runners<br />Source: qmk/qmk_compiler<br />Host: Rancher on DO VM's</div></div></div></foreignObject><text x="1160" y="954" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">QMK Compiler...</text></switch></g><path d="M 845 820 L 845 903.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 845 908.88 L 841.5 901.88 L 845 903.63 L 848.5 901.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 779.03 925.64 L 529.38 833.46 Q 520 830 520 820 L 520 303.77" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 783.95 927.46 L 776.17 928.32 L 779.03 925.64 L 778.6 921.75 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 520 298.52 L 523.5 305.52 L 520 303.77 L 516.5 305.52 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 905 950 L 1060 950" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Viewer does not support full SVG 1.1</text></a></switch></svg>
diff --git a/docs/drivers/battery.md b/docs/drivers/battery.md
new file mode 100644
index 0000000000..b1f75c1156
--- /dev/null
+++ b/docs/drivers/battery.md
@@ -0,0 +1,51 @@
+# Battery Driver
+
+This driver provides support for sampling battery level.
+
+## Usage
+
+To use this driver, add the following to your `rules.mk`:
+
+```make
+BATTERY_DRIVER_REQUIRED = yes
+```
+
+## Basic Configuration {#basic-configuration}
+
+Add the following to your `config.h`:
+
+|Define |Default |Description |
+|--------------------------|--------|--------------------------------------------------|
+|`BATTERY_SAMPLE_INTERVAL` |`30000` |The time between battery samples in milliseconds. |
+
+## Driver Configuration {#driver-configuration}
+
+Driver selection can be configured in `rules.mk` as `BATTERY_DRIVER`. Valid values are `adc` (default), `vendor`, or `custom`. See below for information on individual drivers.
+
+### ADC Driver {#adc-driver}
+
+This is the default battery driver. The default configuration assumes the battery is connected to a ADC capable pin through a voltage divider.
+
+```make
+BATTERY_DRIVER = adc
+```
+
+The following `#define`s apply only to the `adc` driver:
+
+|Define |Default |Description |
+|-----------------------------|--------------|--------------------------------------------------------------|
+|`BATTERY_PIN` |*Not defined* |The GPIO pin connected to the voltage divider. |
+|`BATTERY_REF_VOLTAGE_MV` |`3300` |The ADC reverence voltage, in millivolts. |
+|`BATTERY_VOLTAGE_DIVIDER_R1` |`100000` |The voltage divider resistance, in kOhm. Set to 0 to disable. |
+|`BATTERY_VOLTAGE_DIVIDER_R1` |`100000` |The voltage divider resistance, in kOhm. Set to 0 to disable. |
+|`BATTERY_ADC_RESOLUTION` |`10` |The ADC resolution configured for the ADC Driver. |
+
+## Functions
+
+### `uint8_t battery_get_percent(void)` {#api-battery-get-percent}
+
+Sample battery level.
+
+#### Return Value {#api-battery-get-percent-return}
+
+The battery percentage, in the range 0-100.
diff --git a/docs/faq_debug.md b/docs/faq_debug.md
index 35a4160e27..269049afb8 100644
--- a/docs/faq_debug.md
+++ b/docs/faq_debug.md
@@ -77,6 +77,17 @@ KL: kc: 172, col: 2, row: 0, pressed: 1, time: 16303, int: 0, count: 0
KL: kc: 172, col: 2, row: 0, pressed: 0, time: 16411, int: 0, count: 0
```
+### Which keycode is this keypress?
+
+Keycodes are logged in the example above as numerical codes, which may be difficult to interpret. For more readable logging, add `KEYCODE_STRING_ENABLE = yes` in your `rules.mk` and use `get_keycode_string(kc)`. For example:
+
+```c
+uprintf("kc: %s\n", get_keycode_string(keycode));
+```
+
+This logs the keycode as a human-readable string like "`LT(2,KC_D)`" rather than a numerical code like "`0x4207`." See the [Keycode String](unit_testing#keycode-string) section of the Unit Testing page for more information.
+
+
### How long did it take to scan for a keypress?
When testing performance issues, it can be useful to know the frequency at which the switch matrix is being scanned. To enable logging for this scenario, add the following code to your keymaps `config.h`
diff --git a/docs/features/community_modules.md b/docs/features/community_modules.md
index a28c5afaeb..52526c9fe8 100644
--- a/docs/features/community_modules.md
+++ b/docs/features/community_modules.md
@@ -72,6 +72,7 @@ A Community Module is denoted by a `qmk_module.json` file such as the following:
{
"module_name": "Hello World",
"maintainer": "QMK Maintainers",
+ "license": "GPL-2.0-or-later",
"features": {
"deferred_exec": true
},
@@ -86,6 +87,10 @@ A Community Module is denoted by a `qmk_module.json` file such as the following:
At minimum, the module must provide the `module_name` and `maintainer` fields.
+The `license` field is encouraged to indicate the terms for using and sharing the module. It is recommended to use a [SPDX license identifier](https://spdx.org/licenses/) like "`Apache-2.0`" or "`GPL-2.0-or-later`" if possible.
+
+The `url` field may specify a URL to more information about the module.
+
The use of `features` matches the definition normally provided within `keyboard.json` and `info.json`, allowing a module to signal to the build system that it has its own dependencies. In the example above, it enables the _deferred executor_ feature whenever the above module is used in a build.
The `keycodes` array allows a module to provide new keycodes (as well as corresponding aliases) to a keymap.
diff --git a/docs/features/pointing_device.md b/docs/features/pointing_device.md
index 0ecf82c8df..a139df9dc4 100644
--- a/docs/features/pointing_device.md
+++ b/docs/features/pointing_device.md
@@ -419,6 +419,32 @@ The `POINTING_DEVICE_CS_PIN`, `POINTING_DEVICE_SDIO_PIN`, and `POINTING_DEVICE_S
Any pointing device with a lift/contact status can integrate inertial cursor feature into its driver, controlled by `POINTING_DEVICE_GESTURES_CURSOR_GLIDE_ENABLE`. e.g. PMW3360 can use Lift_Stat from Motion register. Note that `POINTING_DEVICE_MOTION_PIN` cannot be used with this feature; continuous polling of `get_report()` is needed to generate glide reports.
:::
+## High Resolution Scrolling
+
+| Setting | Description | Default |
+| ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------- |
+| `POINTING_DEVICE_HIRES_SCROLL_ENABLE` | (Optional) Enables high resolution scrolling. | _not defined_ |
+| `POINTING_DEVICE_HIRES_SCROLL_MULTIPLIER`| (Optional) Resolution mutiplier value used by high resolution scrolling. Must be between 1 and 127, inclusive. | `120` |
+| `POINTING_DEVICE_HIRES_SCROLL_EXPONENT` | (Optional) Resolution exponent value used by high resolution scrolling. Must be between 0 and 127, inclusive. | `0` |
+
+The `POINTING_DEVICE_HIRES_SCROLL_ENABLE` setting enables smooth and continuous scrolling when using trackballs or high-end encoders as mouse wheels (as opposed to the typical stepped behavior of most mouse wheels).
+This works by adding a resolution multiplier to the HID descriptor for mouse wheel reports, causing the host computer to interpret each wheel tick sent by the keyboard as a fraction of a normal wheel tick.
+The resolution multiplier is set to `1 / (POINTING_DEVICE_HIRES_SCROLL_MULTIPLIER * (10 ^ POINTING_DEVICE_HIRES_SCROLL_EXPONENT))`, which is `1 / 120` by default.
+If even smoother scrolling than provided by this default value is desired, first try using `#define POINTING_DEVICE_HIRES_SCROLL_EXPONENT 1` which will result in a multiplier of `1 / 1200`.
+
+The function `pointing_device_get_hires_scroll_resolution()` can be called to get the pre-computed resolution multiplier value as a `uint16_t`.
+
+::: warning
+High resolution scrolling usually results in larger and/or more frequent mouse reports. This can result in overflow errors and overloading of the host computer's input buffer.
+To deal with these issues, define `WHEEL_EXTENDED_REPORT` and throttle the rate at which mouse reports are sent.
+:::
+
+::: warning
+Many programs, especially those that implement their own smoothing for scrolling, don't work well when they receive simultaneous vertical and horizontal wheel inputs (e.g. from high resolution drag-scroll using a trackball).
+These programs typically implement their smoothing in a way that assumes the user will only scroll in one axis at a time, resulting in slow or jittery motion when trying to scroll at an angle.
+This can be addressed by snapping scrolling to one axis at a time.
+:::
+
## Split Keyboard Configuration
The following configuration options are only available when using `SPLIT_POINTING_ENABLE` see [data sync options](split_keyboard#data-sync-options). The rotation and invert `*_RIGHT` options are only used with `POINTING_DEVICE_COMBINED`. If using `POINTING_DEVICE_LEFT` or `POINTING_DEVICE_RIGHT` use the common configuration above to configure your pointing device.
diff --git a/docs/public/badge-community-dark.svg b/docs/public/badge-community-dark.svg
index dba561dda1..5236cf1696 100644
--- a/docs/public/badge-community-dark.svg
+++ b/docs/public/badge-community-dark.svg
@@ -1 +1 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 1260 371" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;"><rect id="badge.-community.-dark" x="0" y="0.321" width="1260" height="370" style="fill:none;"/><clipPath id="_clip1"><rect x="0" y="0.321" width="1260" height="370"/></clipPath><g clip-path="url(#_clip1)"><path d="M1260,33.621c0,-18.379 -14.921,-33.3 -33.3,-33.3l-1193.4,0c-18.379,0 -33.3,14.921 -33.3,33.3l0,303.4c0,18.378 14.921,33.3 33.3,33.3l1193.4,0c18.379,0 33.3,-14.922 33.3,-33.3l0,-303.4Z" style="fill:#333;"/><path d="M118.018,302.021l-6.434,0c-1.775,0 -3.217,-1.441 -3.217,-3.217l0,-20.679l-4.548,0c-15.366,0 -27.841,-12.475 -27.841,-27.841l0,-4.548l-20.679,0c-1.776,0 -3.217,-1.442 -3.217,-3.217l0,-6.434c0,-1.775 1.441,-3.217 3.217,-3.217l20.679,0l0,-14.123l-20.679,0c-1.776,0 -3.217,-1.441 -3.217,-3.217l0,-6.434c0,-1.775 1.441,-3.217 3.217,-3.217l20.679,0l0,-14.123l-20.679,0c-1.776,0 -3.217,-1.441 -3.217,-3.216l0,-6.434c0,-1.776 1.441,-3.217 3.217,-3.217l20.679,0l0,-14.123l-20.679,0c-1.776,0 -3.217,-1.442 -3.217,-3.217l0,-6.434c0,-1.775 1.441,-3.217 3.217,-3.217l20.679,0l0,-14.123l-20.679,0c-1.776,0 -3.217,-1.441 -3.217,-3.217l0,-6.434c0,-1.775 1.441,-3.216 3.217,-3.217l20.679,0l0,-4.548c0,-15.366 12.475,-27.841 27.841,-27.841l4.548,0l0,-20.679c0,-1.776 1.442,-3.217 3.217,-3.217l6.434,0c1.776,0 3.217,1.441 3.217,3.217l0,20.679l14.123,0l0,-20.679c0,-1.776 1.441,-3.217 3.217,-3.217l6.434,0c1.775,0 3.217,1.441 3.217,3.217l0,20.679l14.123,0l0,-20.679c0,-1.776 1.441,-3.217 3.217,-3.217l6.433,0c1.776,0 3.217,1.441 3.217,3.217l0,20.679l14.123,0l0,-20.679c0,-1.776 1.442,-3.217 3.217,-3.217l6.434,0c1.776,0 3.217,1.441 3.217,3.217l0,20.679l14.123,0l0,-20.679c0,-1.776 1.441,-3.217 3.217,-3.217l6.434,0c1.775,0 3.217,1.441 3.217,3.217l0,20.679l4.548,0c15.366,0 27.841,12.475 27.841,27.841l0,4.548l20.679,0c1.776,0.001 3.217,1.442 3.217,3.217l0,6.434c0,1.775 -1.441,3.217 -3.217,3.217l-20.679,0l0,14.123l20.679,0c1.776,0.001 3.217,1.442 3.217,3.217l0,6.434c0,1.775 -1.441,3.216 -3.217,3.217l-20.679,0l0,14.123l20.679,0c1.776,0 3.217,1.442 3.217,3.217l0,6.434c0,1.775 -1.441,3.216 -3.217,3.216l-20.679,0l0,14.123l20.679,0c1.776,0.001 3.217,1.442 3.217,3.217l0,6.434c0,1.775 -1.441,3.217 -3.217,3.217l-20.679,0l0,14.123l20.679,0c1.776,0.001 3.217,1.442 3.217,3.217l0,6.434c0,1.775 -1.441,3.216 -3.217,3.217l-20.679,0l0,4.548c0,15.366 -12.475,27.841 -27.841,27.841l-4.548,0l0,20.679c0,1.776 -1.441,3.217 -3.217,3.217l-6.434,0c-1.776,0 -3.217,-1.441 -3.217,-3.217l0,-20.679l-14.123,0l0,20.679c0,1.776 -1.441,3.217 -3.217,3.217l-6.434,0c-1.775,0 -3.217,-1.441 -3.217,-3.217l0,-20.679l-14.123,0l0,20.679c0,1.776 -1.441,3.217 -3.217,3.217l-6.433,0c-1.776,0 -3.217,-1.441 -3.217,-3.217l0,-20.679l-14.123,0l0,20.679c0,1.776 -1.441,3.217 -3.217,3.217l-6.434,0c-1.775,0 -3.217,-1.441 -3.217,-3.217l0,-20.679l-14.123,0l0,20.679c0,1.776 -1.441,3.217 -3.217,3.217Zm103.74,-127.253c0,6.774 -1.062,12.845 -3.187,18.213c-2.124,5.368 -5.152,9.946 -9.085,13.735c-3.932,3.789 -8.697,6.717 -14.295,8.784c-5.597,2.067 -11.927,3.186 -18.988,3.359l0,20.581c0,0.459 -0.115,0.861 -0.345,1.206c-0.229,0.344 -0.631,0.617 -1.205,0.818c-0.574,0.201 -1.335,0.358 -2.282,0.473c-0.947,0.115 -2.139,0.173 -3.574,0.173c-1.435,0 -2.626,-0.058 -3.574,-0.173c-0.947,-0.115 -1.693,-0.272 -2.239,-0.473c-0.545,-0.201 -0.947,-0.474 -1.205,-0.818c-0.259,-0.345 -0.388,-0.747 -0.388,-1.206l0,-20.581c-7.176,-0.173 -13.577,-1.206 -19.203,-3.101c-5.627,-1.894 -10.392,-4.635 -14.295,-8.224c-3.904,-3.588 -6.89,-7.994 -8.956,-13.218c-2.067,-5.224 -3.101,-11.224 -3.101,-17.998l0,-44.005c0,-0.402 0.13,-0.775 0.388,-1.119c0.258,-0.345 0.66,-0.632 1.206,-0.861c0.545,-0.23 1.291,-0.402 2.239,-0.517c0.947,-0.115 2.138,-0.172 3.573,-0.172c1.436,0 2.627,0.057 3.574,0.172c0.947,0.115 1.708,0.287 2.282,0.517c0.574,0.229 0.976,0.516 1.206,0.861c0.229,0.344 0.344,0.717 0.344,1.119l0,42.713c0,4.765 0.632,9.057 1.895,12.874c1.263,3.818 3.157,7.062 5.683,9.731c2.526,2.67 5.727,4.737 9.602,6.201c3.875,1.463 8.396,2.253 13.563,2.368l0,-73.887c0,-0.402 0.129,-0.775 0.388,-1.119c0.258,-0.345 0.689,-0.632 1.291,-0.861c0.603,-0.23 1.378,-0.402 2.326,-0.517c0.947,-0.115 2.081,-0.172 3.401,-0.172c1.435,0 2.627,0.057 3.574,0.172c0.947,0.115 1.708,0.287 2.282,0.517c0.574,0.229 0.976,0.516 1.205,0.861c0.23,0.344 0.345,0.717 0.345,1.119l0,73.887c5.167,-0.058 9.673,-0.847 13.52,-2.368c3.846,-1.522 7.047,-3.617 9.602,-6.287c2.554,-2.669 4.478,-5.884 5.769,-9.645c1.292,-3.76 1.938,-7.937 1.938,-12.529l0,-43.058c0,-0.402 0.115,-0.775 0.344,-1.119c0.23,-0.345 0.632,-0.632 1.206,-0.861c0.574,-0.23 1.321,-0.402 2.239,-0.517c0.919,-0.115 2.124,-0.172 3.617,-0.172c1.378,0 2.54,0.057 3.488,0.172c0.947,0.115 1.693,0.287 2.239,0.517c0.545,0.229 0.947,0.516 1.205,0.861c0.258,0.344 0.388,0.717 0.388,1.119l0,42.455Z" style="fill:#fff;"/><path d="M426.392,189.328c0,1.077 -0.059,1.978 -0.176,2.704c-0.117,0.726 -0.293,1.288 -0.527,1.686c-0.234,0.398 -0.491,0.668 -0.772,0.808c-0.281,0.141 -0.563,0.211 -0.844,0.211c-0.936,0 -2.447,-0.386 -4.531,-1.159c-2.084,-0.773 -4.484,-1.897 -7.201,-3.372c-2.716,-1.476 -5.62,-3.267 -8.711,-5.375c-3.092,-2.107 -6.089,-4.566 -8.993,-7.376c-2.295,1.405 -5.199,2.622 -8.711,3.653c-3.513,1.03 -7.588,1.545 -12.224,1.545c-6.839,0 -12.752,-1.007 -17.74,-3.021c-4.988,-2.013 -9.109,-4.964 -12.364,-8.851c-3.255,-3.888 -5.679,-8.724 -7.272,-14.508c-1.592,-5.784 -2.388,-12.423 -2.388,-19.917c0,-7.213 0.866,-13.734 2.599,-19.566c1.733,-5.831 4.333,-10.795 7.798,-14.893c3.466,-4.098 7.799,-7.26 12.997,-9.485c5.199,-2.224 11.264,-3.337 18.196,-3.337c6.51,0 12.236,1.007 17.177,3.021c4.941,2.014 9.086,4.953 12.435,8.817c3.349,3.864 5.866,8.63 7.552,14.297c1.686,5.667 2.529,12.177 2.529,19.53c0,3.794 -0.222,7.424 -0.667,10.89c-0.445,3.466 -1.147,6.744 -2.108,9.835c-0.96,3.091 -2.166,5.948 -3.618,8.571c-1.452,2.623 -3.161,4.988 -5.128,7.096c3.419,2.81 6.416,5 8.992,6.569c2.576,1.569 4.707,2.751 6.393,3.547c1.687,0.797 2.998,1.37 3.935,1.722c0.936,0.351 1.639,0.749 2.107,1.194c0.469,0.445 0.796,1.077 0.984,1.897c0.187,0.819 0.281,1.908 0.281,3.267Zm-23.886,-53.745c0,-5.152 -0.457,-9.929 -1.37,-14.331c-0.914,-4.403 -2.436,-8.232 -4.567,-11.487c-2.131,-3.255 -4.976,-5.796 -8.536,-7.622c-3.559,-1.827 -7.962,-2.74 -13.207,-2.74c-5.246,0 -9.649,0.972 -13.208,2.915c-3.56,1.944 -6.452,4.567 -8.676,7.869c-2.225,3.302 -3.818,7.13 -4.778,11.486c-0.96,4.356 -1.44,8.969 -1.44,13.84c0,5.339 0.445,10.245 1.335,14.718c0.89,4.473 2.389,8.349 4.496,11.627c2.108,3.279 4.93,5.82 8.466,7.623c3.536,1.803 7.974,2.705 13.313,2.705c5.292,0 9.742,-0.984 13.348,-2.951c3.606,-1.967 6.51,-4.625 8.711,-7.974c2.202,-3.349 3.771,-7.236 4.707,-11.662c0.937,-4.426 1.406,-9.098 1.406,-14.016Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M534.723,179.492c0,0.375 -0.096,0.703 -0.289,0.984c-0.193,0.281 -0.531,0.503 -1.013,0.667c-0.483,0.164 -1.098,0.304 -1.846,0.421c-0.747,0.118 -1.724,0.176 -2.93,0.176c-1.109,0 -2.062,-0.058 -2.858,-0.176c-0.796,-0.117 -1.423,-0.257 -1.881,-0.421c-0.459,-0.164 -0.784,-0.386 -0.977,-0.667c-0.193,-0.281 -0.289,-0.609 -0.289,-0.984l0,-79.176l-0.141,0l-32.036,79.527c-0.14,0.328 -0.339,0.609 -0.597,0.843c-0.257,0.234 -0.632,0.434 -1.124,0.597c-0.492,0.164 -1.077,0.281 -1.756,0.352c-0.679,0.07 -1.487,0.105 -2.424,0.105c-0.984,0 -1.827,-0.047 -2.529,-0.14c-0.703,-0.094 -1.288,-0.223 -1.756,-0.387c-0.469,-0.164 -0.832,-0.363 -1.089,-0.597c-0.258,-0.234 -0.434,-0.492 -0.527,-0.773l-30.631,-79.527l-0.07,0l0,79.176c0,0.375 -0.097,0.703 -0.289,0.984c-0.193,0.281 -0.531,0.503 -1.014,0.667c-0.482,0.164 -1.109,0.304 -1.881,0.421c-0.772,0.118 -1.761,0.176 -2.967,0.176c-1.157,0 -2.122,-0.058 -2.894,-0.176c-0.772,-0.117 -1.387,-0.257 -1.845,-0.421c-0.459,-0.164 -0.772,-0.386 -0.941,-0.667c-0.169,-0.281 -0.253,-0.609 -0.253,-0.984l0,-83.602c0,-1.967 0.523,-3.372 1.569,-4.215c1.046,-0.843 2.212,-1.265 3.496,-1.265l7.419,0c1.522,0 2.853,0.141 3.995,0.422c1.142,0.281 2.14,0.726 2.996,1.335c0.856,0.608 1.569,1.381 2.14,2.318c0.571,0.937 1.07,2.037 1.499,3.302l25.994,65.828l0.351,0l27.047,-65.617c0.524,-1.405 1.095,-2.6 1.713,-3.583c0.619,-0.984 1.297,-1.768 2.035,-2.354c0.738,-0.585 1.558,-1.007 2.462,-1.264c0.904,-0.258 1.951,-0.387 3.141,-0.387l7.779,0c0.715,0 1.393,0.106 2.035,0.316c0.642,0.211 1.189,0.539 1.642,0.984c0.452,0.445 0.821,1.007 1.106,1.686c0.285,0.679 0.428,1.51 0.428,2.494l0,83.602Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M618.185,179.351c0,0.375 -0.082,0.715 -0.246,1.019c-0.164,0.305 -0.48,0.55 -0.949,0.738c-0.468,0.187 -1.1,0.339 -1.896,0.456c-0.797,0.118 -1.827,0.176 -3.092,0.176c-1.639,0 -2.974,-0.07 -4.004,-0.211c-1.031,-0.14 -1.803,-0.398 -2.318,-0.772c-0.516,-0.375 -0.937,-0.797 -1.265,-1.265l-33.441,-45.454l0,45.454c0,0.328 -0.094,0.644 -0.281,0.948c-0.187,0.305 -0.515,0.539 -0.983,0.703c-0.469,0.164 -1.089,0.304 -1.862,0.421c-0.773,0.118 -1.745,0.176 -2.916,0.176c-1.124,0 -2.084,-0.058 -2.88,-0.176c-0.796,-0.117 -1.429,-0.257 -1.897,-0.421c-0.468,-0.164 -0.796,-0.398 -0.983,-0.703c-0.188,-0.304 -0.282,-0.62 -0.282,-0.948l0,-87.255c0,-0.375 0.094,-0.703 0.282,-0.984c0.187,-0.281 0.515,-0.503 0.983,-0.667c0.468,-0.164 1.101,-0.305 1.897,-0.422c0.796,-0.117 1.756,-0.175 2.88,-0.175c1.171,0 2.143,0.058 2.916,0.175c0.773,0.117 1.393,0.258 1.862,0.422c0.468,0.164 0.796,0.386 0.983,0.667c0.187,0.281 0.281,0.609 0.281,0.984l0,40.396l32.176,-40.396c0.281,-0.422 0.609,-0.773 0.984,-1.054c0.375,-0.281 0.831,-0.504 1.37,-0.667c0.538,-0.164 1.194,-0.293 1.967,-0.387c0.773,-0.094 1.768,-0.14 2.986,-0.14c1.218,0 2.201,0.058 2.95,0.175c0.75,0.117 1.347,0.27 1.792,0.457c0.445,0.187 0.749,0.421 0.913,0.702c0.164,0.282 0.246,0.586 0.246,0.914c0,0.609 -0.152,1.218 -0.457,1.826c-0.304,0.609 -0.878,1.452 -1.721,2.53l-30.139,36.04l32.458,43.136c0.796,1.217 1.276,2.049 1.44,2.494c0.164,0.444 0.246,0.807 0.246,1.088Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M713.941,95.609c0,0.89 -0.047,1.663 -0.141,2.318c-0.094,0.656 -0.258,1.183 -0.492,1.581c-0.234,0.398 -0.503,0.691 -0.808,0.878c-0.304,0.188 -0.62,0.281 -0.948,0.281l-33.3,0l0,30.912l31.473,0c0.328,0 0.644,0.082 0.949,0.246c0.304,0.164 0.574,0.433 0.808,0.808c0.234,0.374 0.398,0.878 0.491,1.51c0.094,0.632 0.141,1.44 0.141,2.424c0,0.89 -0.047,1.651 -0.141,2.283c-0.093,0.632 -0.257,1.148 -0.491,1.546c-0.234,0.398 -0.504,0.702 -0.808,0.913c-0.305,0.211 -0.621,0.316 -0.949,0.316l-31.473,0l0,37.867c0,0.328 -0.094,0.644 -0.281,0.948c-0.188,0.305 -0.516,0.539 -0.984,0.703c-0.468,0.164 -1.077,0.304 -1.826,0.421c-0.75,0.118 -1.733,0.176 -2.951,0.176c-1.124,0 -2.084,-0.058 -2.881,-0.176c-0.796,-0.117 -1.428,-0.257 -1.896,-0.421c-0.469,-0.164 -0.797,-0.398 -0.984,-0.703c-0.187,-0.304 -0.281,-0.62 -0.281,-0.948l0,-84.164c0,-1.827 0.48,-3.103 1.44,-3.829c0.96,-0.726 1.979,-1.089 3.056,-1.089l40.888,0c0.328,0 0.644,0.094 0.948,0.281c0.305,0.188 0.574,0.492 0.808,0.914c0.234,0.421 0.398,0.971 0.492,1.65c0.094,0.68 0.141,1.464 0.141,2.354Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M742.534,179.562c0,0.375 -0.094,0.691 -0.281,0.949c-0.187,0.257 -0.492,0.48 -0.913,0.667c-0.422,0.187 -1.007,0.328 -1.757,0.422c-0.749,0.093 -1.709,0.14 -2.88,0.14c-1.124,0 -2.061,-0.047 -2.81,-0.14c-0.75,-0.094 -1.347,-0.235 -1.792,-0.422c-0.445,-0.187 -0.749,-0.41 -0.913,-0.667c-0.164,-0.258 -0.246,-0.574 -0.246,-0.949l0,-63.228c0,-0.328 0.082,-0.632 0.246,-0.913c0.164,-0.281 0.468,-0.516 0.913,-0.703c0.445,-0.187 1.042,-0.328 1.792,-0.422c0.749,-0.093 1.686,-0.14 2.81,-0.14c1.171,0 2.131,0.047 2.88,0.14c0.75,0.094 1.335,0.235 1.757,0.422c0.421,0.187 0.726,0.422 0.913,0.703c0.187,0.281 0.281,0.585 0.281,0.913l0,63.228Zm1.335,-84.585c0,2.716 -0.515,4.566 -1.546,5.55c-1.03,0.983 -2.927,1.475 -5.69,1.475c-2.717,0 -4.579,-0.48 -5.586,-1.44c-1.007,-0.96 -1.51,-2.775 -1.51,-5.445c0,-2.716 0.515,-4.566 1.546,-5.55c1.03,-0.983 2.927,-1.475 5.69,-1.475c2.717,0 4.578,0.48 5.585,1.44c1.007,0.96 1.511,2.775 1.511,5.445Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M800.915,120.479c0,1.03 -0.024,1.897 -0.07,2.599c-0.047,0.703 -0.141,1.253 -0.281,1.651c-0.141,0.398 -0.317,0.703 -0.527,0.913c-0.211,0.211 -0.504,0.317 -0.879,0.317c-0.374,0 -0.831,-0.106 -1.37,-0.317c-0.538,-0.21 -1.147,-0.421 -1.826,-0.632c-0.679,-0.211 -1.44,-0.41 -2.283,-0.597c-0.843,-0.187 -1.757,-0.281 -2.74,-0.281c-1.171,0 -2.319,0.234 -3.443,0.703c-1.124,0.468 -2.306,1.241 -3.548,2.318c-1.241,1.077 -2.54,2.506 -3.899,4.285c-1.358,1.78 -2.857,3.958 -4.496,6.534l0,41.59c0,0.375 -0.094,0.691 -0.281,0.949c-0.187,0.257 -0.492,0.48 -0.913,0.667c-0.422,0.187 -1.007,0.328 -1.756,0.422c-0.75,0.093 -1.71,0.14 -2.881,0.14c-1.124,0 -2.061,-0.047 -2.81,-0.14c-0.749,-0.094 -1.347,-0.235 -1.792,-0.422c-0.444,-0.187 -0.749,-0.41 -0.913,-0.667c-0.164,-0.258 -0.246,-0.574 -0.246,-0.949l0,-63.228c0,-0.375 0.071,-0.691 0.211,-0.949c0.141,-0.257 0.422,-0.491 0.843,-0.702c0.422,-0.211 0.96,-0.351 1.616,-0.422c0.656,-0.07 1.522,-0.105 2.599,-0.105c1.031,0 1.885,0.035 2.565,0.105c0.679,0.071 1.206,0.211 1.58,0.422c0.375,0.211 0.644,0.445 0.808,0.702c0.164,0.258 0.246,0.574 0.246,0.949l0,9.203c1.733,-2.529 3.361,-4.59 4.883,-6.182c1.522,-1.593 2.962,-2.846 4.32,-3.759c1.359,-0.913 2.705,-1.545 4.04,-1.897c1.335,-0.351 2.681,-0.527 4.04,-0.527c0.608,0 1.299,0.036 2.072,0.106c0.773,0.07 1.581,0.199 2.424,0.386c0.843,0.188 1.604,0.398 2.283,0.632c0.679,0.235 1.159,0.469 1.44,0.703c0.281,0.234 0.469,0.457 0.562,0.667c0.094,0.211 0.176,0.48 0.246,0.808c0.07,0.328 0.117,0.808 0.141,1.441c0.023,0.632 0.035,1.487 0.035,2.564Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M907.911,179.562c0,0.375 -0.093,0.691 -0.281,0.949c-0.187,0.257 -0.491,0.48 -0.913,0.667c-0.422,0.187 -1.007,0.328 -1.756,0.422c-0.75,0.093 -1.686,0.14 -2.811,0.14c-1.17,0 -2.131,-0.047 -2.88,-0.14c-0.749,-0.094 -1.346,-0.235 -1.791,-0.422c-0.445,-0.187 -0.761,-0.41 -0.949,-0.667c-0.187,-0.258 -0.281,-0.574 -0.281,-0.949l0,-38.429c0,-2.669 -0.234,-5.105 -0.702,-7.306c-0.469,-2.201 -1.218,-4.098 -2.248,-5.691c-1.031,-1.592 -2.342,-2.81 -3.935,-3.653c-1.592,-0.843 -3.466,-1.264 -5.62,-1.264c-2.67,0 -5.351,1.03 -8.044,3.091c-2.693,2.061 -5.655,5.082 -8.887,9.063l0,44.189c0,0.375 -0.094,0.691 -0.281,0.949c-0.188,0.257 -0.504,0.48 -0.949,0.667c-0.445,0.187 -1.042,0.328 -1.791,0.422c-0.749,0.093 -1.686,0.14 -2.81,0.14c-1.077,0 -2.002,-0.047 -2.775,-0.14c-0.773,-0.094 -1.382,-0.235 -1.827,-0.422c-0.445,-0.187 -0.749,-0.41 -0.913,-0.667c-0.164,-0.258 -0.246,-0.574 -0.246,-0.949l0,-38.429c0,-2.669 -0.258,-5.105 -0.773,-7.306c-0.515,-2.201 -1.288,-4.098 -2.318,-5.691c-1.031,-1.592 -2.33,-2.81 -3.899,-3.653c-1.569,-0.843 -3.431,-1.264 -5.585,-1.264c-2.67,0 -5.363,1.03 -8.08,3.091c-2.716,2.061 -5.667,5.082 -8.852,9.063l0,44.189c0,0.375 -0.093,0.691 -0.281,0.949c-0.187,0.257 -0.491,0.48 -0.913,0.667c-0.421,0.187 -1.007,0.328 -1.756,0.422c-0.75,0.093 -1.71,0.14 -2.881,0.14c-1.124,0 -2.06,-0.047 -2.81,-0.14c-0.749,-0.094 -1.346,-0.235 -1.791,-0.422c-0.445,-0.187 -0.75,-0.41 -0.914,-0.667c-0.164,-0.258 -0.246,-0.574 -0.246,-0.949l0,-63.228c0,-0.375 0.071,-0.691 0.211,-0.949c0.141,-0.257 0.422,-0.491 0.843,-0.702c0.422,-0.211 0.96,-0.351 1.616,-0.422c0.656,-0.07 1.522,-0.105 2.6,-0.105c1.03,0 1.885,0.035 2.564,0.105c0.679,0.071 1.206,0.211 1.581,0.422c0.374,0.211 0.643,0.445 0.807,0.702c0.164,0.258 0.246,0.574 0.246,0.949l0,8.36c3.56,-3.981 7.014,-6.897 10.363,-8.747c3.349,-1.85 6.732,-2.775 10.151,-2.775c2.623,0 4.977,0.305 7.061,0.914c2.084,0.609 3.922,1.463 5.515,2.564c1.592,1.101 2.951,2.412 4.075,3.934c1.124,1.522 2.06,3.22 2.81,5.094c2.107,-2.295 4.11,-4.239 6.006,-5.831c1.897,-1.593 3.724,-2.881 5.48,-3.864c1.757,-0.984 3.466,-1.698 5.129,-2.143c1.662,-0.445 3.337,-0.668 5.023,-0.668c4.075,0 7.494,0.715 10.257,2.143c2.763,1.429 5,3.337 6.709,5.726c1.71,2.388 2.927,5.187 3.653,8.395c0.726,3.208 1.089,6.592 1.089,10.152l0,39.974Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M1016.52,116.193c0,0.328 -0.047,0.726 -0.141,1.195c-0.094,0.468 -0.257,1.053 -0.492,1.756l-18.617,60.067c-0.14,0.515 -0.363,0.937 -0.667,1.265c-0.305,0.327 -0.726,0.585 -1.265,0.772c-0.538,0.188 -1.276,0.316 -2.213,0.387c-0.937,0.07 -2.107,0.105 -3.513,0.105c-1.451,0 -2.669,-0.047 -3.653,-0.14c-0.983,-0.094 -1.768,-0.235 -2.353,-0.422c-0.586,-0.187 -1.019,-0.445 -1.3,-0.773c-0.281,-0.328 -0.492,-0.726 -0.632,-1.194l-13.278,-45.876l-0.141,-0.632l-0.14,0.632l-12.295,45.876c-0.14,0.515 -0.363,0.937 -0.667,1.265c-0.304,0.327 -0.761,0.585 -1.37,0.772c-0.609,0.188 -1.393,0.316 -2.353,0.387c-0.961,0.07 -2.143,0.105 -3.548,0.105c-1.452,0 -2.635,-0.047 -3.548,-0.14c-0.913,-0.094 -1.663,-0.235 -2.248,-0.422c-0.586,-0.187 -1.019,-0.445 -1.3,-0.773c-0.281,-0.328 -0.492,-0.726 -0.632,-1.194l-18.477,-60.067c-0.234,-0.703 -0.398,-1.288 -0.492,-1.756c-0.093,-0.469 -0.14,-0.867 -0.14,-1.195c0,-0.421 0.093,-0.761 0.281,-1.018c0.187,-0.258 0.503,-0.469 0.948,-0.633c0.445,-0.164 1.042,-0.269 1.792,-0.316c0.749,-0.047 1.662,-0.07 2.74,-0.07c1.311,0 2.365,0.035 3.161,0.105c0.796,0.071 1.405,0.188 1.827,0.352c0.421,0.164 0.726,0.398 0.913,0.702c0.187,0.305 0.351,0.668 0.492,1.089l15.245,52.128l0.14,0.633l0.141,-0.633l13.98,-52.128c0.094,-0.421 0.246,-0.784 0.457,-1.089c0.211,-0.304 0.527,-0.538 0.948,-0.702c0.422,-0.164 0.996,-0.281 1.722,-0.352c0.726,-0.07 1.674,-0.105 2.845,-0.105c1.124,0 2.049,0.035 2.775,0.105c0.726,0.071 1.3,0.188 1.721,0.352c0.422,0.164 0.726,0.386 0.913,0.667c0.188,0.281 0.328,0.609 0.422,0.984l15.104,52.268l0.141,0.633l0.07,-0.633l15.035,-52.128c0.093,-0.421 0.245,-0.784 0.456,-1.089c0.211,-0.304 0.539,-0.538 0.984,-0.702c0.445,-0.164 1.054,-0.281 1.826,-0.352c0.773,-0.07 1.768,-0.105 2.986,-0.105c1.124,0 2.026,0.023 2.705,0.07c0.679,0.047 1.218,0.164 1.616,0.351c0.398,0.188 0.679,0.399 0.843,0.633c0.164,0.234 0.246,0.562 0.246,0.983Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M1076.94,179.632c0,0.563 -0.187,0.984 -0.562,1.265c-0.375,0.281 -0.89,0.492 -1.546,0.632c-0.655,0.141 -1.616,0.211 -2.88,0.211c-1.218,0 -2.19,-0.07 -2.916,-0.211c-0.726,-0.14 -1.252,-0.351 -1.58,-0.632c-0.328,-0.281 -0.492,-0.702 -0.492,-1.265l0,-6.322c-2.763,2.95 -5.843,5.245 -9.238,6.885c-3.396,1.639 -6.991,2.458 -10.784,2.458c-3.326,0 -6.335,-0.433 -9.028,-1.299c-2.693,-0.867 -4.988,-2.12 -6.885,-3.759c-1.897,-1.639 -3.372,-3.653 -4.426,-6.042c-1.054,-2.388 -1.581,-5.105 -1.581,-8.149c0,-3.56 0.726,-6.651 2.178,-9.274c1.452,-2.622 3.536,-4.8 6.253,-6.533c2.716,-1.733 6.042,-3.033 9.976,-3.899c3.934,-0.867 8.36,-1.3 13.278,-1.3l8.711,0l0,-4.918c0,-2.435 -0.257,-4.59 -0.772,-6.463c-0.516,-1.874 -1.347,-3.431 -2.495,-4.672c-1.147,-1.241 -2.634,-2.178 -4.461,-2.81c-1.826,-0.632 -4.074,-0.949 -6.744,-0.949c-2.857,0 -5.421,0.34 -7.693,1.019c-2.271,0.679 -4.262,1.429 -5.971,2.248c-1.71,0.82 -3.138,1.569 -4.286,2.248c-1.147,0.679 -2.002,1.019 -2.564,1.019c-0.375,0 -0.703,-0.094 -0.984,-0.281c-0.281,-0.187 -0.527,-0.468 -0.737,-0.843c-0.211,-0.375 -0.363,-0.855 -0.457,-1.44c-0.094,-0.586 -0.14,-1.23 -0.14,-1.932c0,-1.171 0.081,-2.096 0.245,-2.775c0.164,-0.679 0.562,-1.323 1.195,-1.932c0.632,-0.609 1.721,-1.323 3.267,-2.143c1.545,-0.82 3.325,-1.569 5.339,-2.248c2.014,-0.679 4.215,-1.241 6.604,-1.686c2.388,-0.445 4.8,-0.668 7.236,-0.668c4.543,0 8.407,0.516 11.592,1.546c3.185,1.03 5.761,2.541 7.728,4.531c1.967,1.991 3.395,4.461 4.285,7.412c0.89,2.951 1.335,6.393 1.335,10.327l0,42.644Zm-11.522,-28.874l-9.905,0c-3.185,0 -5.949,0.269 -8.29,0.808c-2.342,0.539 -4.286,1.335 -5.832,2.389c-1.545,1.054 -2.681,2.318 -3.407,3.793c-0.726,1.476 -1.089,3.174 -1.089,5.094c0,3.278 1.042,5.889 3.127,7.833c2.084,1.944 4.999,2.916 8.746,2.916c3.044,0 5.866,-0.773 8.466,-2.319c2.599,-1.545 5.327,-3.91 8.184,-7.095l0,-13.419Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M1135.18,120.479c0,1.03 -0.023,1.897 -0.07,2.599c-0.047,0.703 -0.14,1.253 -0.281,1.651c-0.14,0.398 -0.316,0.703 -0.527,0.913c-0.211,0.211 -0.503,0.317 -0.878,0.317c-0.375,0 -0.831,-0.106 -1.37,-0.317c-0.539,-0.21 -1.147,-0.421 -1.827,-0.632c-0.679,-0.211 -1.44,-0.41 -2.283,-0.597c-0.843,-0.187 -1.756,-0.281 -2.74,-0.281c-1.171,0 -2.318,0.234 -3.442,0.703c-1.124,0.468 -2.307,1.241 -3.548,2.318c-1.241,1.077 -2.541,2.506 -3.899,4.285c-1.358,1.78 -2.857,3.958 -4.496,6.534l0,41.59c0,0.375 -0.094,0.691 -0.281,0.949c-0.188,0.257 -0.492,0.48 -0.914,0.667c-0.421,0.187 -1.007,0.328 -1.756,0.422c-0.749,0.093 -1.709,0.14 -2.88,0.14c-1.124,0 -2.061,-0.047 -2.811,-0.14c-0.749,-0.094 -1.346,-0.235 -1.791,-0.422c-0.445,-0.187 -0.749,-0.41 -0.913,-0.667c-0.164,-0.258 -0.246,-0.574 -0.246,-0.949l0,-63.228c0,-0.375 0.07,-0.691 0.211,-0.949c0.14,-0.257 0.421,-0.491 0.843,-0.702c0.421,-0.211 0.96,-0.351 1.615,-0.422c0.656,-0.07 1.523,-0.105 2.6,-0.105c1.03,0 1.885,0.035 2.564,0.105c0.679,0.071 1.206,0.211 1.581,0.422c0.375,0.211 0.644,0.445 0.808,0.702c0.164,0.258 0.246,0.574 0.246,0.949l0,9.203c1.733,-2.529 3.36,-4.59 4.882,-6.182c1.522,-1.593 2.963,-2.846 4.321,-3.759c1.358,-0.913 2.705,-1.545 4.039,-1.897c1.335,-0.351 2.682,-0.527 4.04,-0.527c0.609,0 1.3,0.036 2.073,0.106c0.772,0.07 1.58,0.199 2.423,0.386c0.843,0.188 1.604,0.398 2.284,0.632c0.679,0.235 1.159,0.469 1.44,0.703c0.281,0.234 0.468,0.457 0.562,0.667c0.093,0.211 0.175,0.48 0.246,0.808c0.07,0.328 0.117,0.808 0.14,1.441c0.024,0.632 0.035,1.487 0.035,2.564Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M1200.45,145.208c0,1.827 -0.459,3.126 -1.376,3.899c-0.917,0.773 -1.964,1.159 -3.141,1.159l-41.64,0c0,3.513 0.353,6.675 1.059,9.485c0.706,2.81 1.882,5.222 3.53,7.236c1.647,2.014 3.789,3.559 6.424,4.637c2.636,1.077 5.86,1.615 9.672,1.615c3.012,0 5.694,-0.245 8.047,-0.737c2.354,-0.492 4.389,-1.042 6.107,-1.651c1.718,-0.609 3.13,-1.159 4.236,-1.651c1.106,-0.492 1.942,-0.738 2.507,-0.738c0.329,0 0.623,0.082 0.882,0.246c0.259,0.164 0.458,0.41 0.6,0.738c0.141,0.328 0.247,0.784 0.317,1.37c0.071,0.585 0.106,1.299 0.106,2.142c0,0.609 -0.023,1.136 -0.07,1.581c-0.047,0.445 -0.105,0.843 -0.175,1.194c-0.071,0.352 -0.188,0.668 -0.352,0.949c-0.164,0.281 -0.374,0.55 -0.632,0.808c-0.258,0.257 -1.019,0.679 -2.283,1.264c-1.265,0.586 -2.904,1.16 -4.918,1.722c-2.014,0.562 -4.344,1.065 -6.99,1.51c-2.647,0.445 -5.468,0.667 -8.466,0.667c-5.199,0 -9.753,-0.726 -13.664,-2.177c-3.911,-1.452 -7.201,-3.607 -9.871,-6.464c-2.67,-2.857 -4.683,-6.44 -6.042,-10.749c-1.358,-4.309 -2.037,-9.32 -2.037,-15.034c0,-5.433 0.702,-10.316 2.108,-14.648c1.405,-4.332 3.43,-8.009 6.077,-11.03c2.646,-3.021 5.842,-5.339 9.589,-6.955c3.747,-1.616 7.939,-2.424 12.576,-2.424c4.964,0 9.191,0.797 12.68,2.389c3.49,1.592 6.358,3.735 8.606,6.428c2.249,2.693 3.9,5.855 4.953,9.485c1.054,3.629 1.581,7.505 1.581,11.627l0,2.107Zm-11.662,-3.442c0.14,-6.089 -1.214,-10.866 -4.065,-14.332c-2.85,-3.466 -7.079,-5.199 -12.687,-5.199c-2.875,0 -5.396,0.539 -7.564,1.616c-2.167,1.077 -3.982,2.506 -5.443,4.285c-1.461,1.78 -2.592,3.853 -3.393,6.218c-0.801,2.365 -1.248,4.836 -1.343,7.412l34.495,0Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M379.752,276.089c0,0.493 -0.016,0.924 -0.047,1.294c-0.03,0.369 -0.084,0.693 -0.161,0.97c-0.077,0.277 -0.177,0.524 -0.301,0.739c-0.123,0.216 -0.338,0.478 -0.646,0.786c-0.308,0.308 -0.955,0.778 -1.941,1.409c-0.986,0.631 -2.21,1.247 -3.673,1.848c-1.463,0.601 -3.142,1.109 -5.036,1.525c-1.894,0.416 -3.966,0.623 -6.214,0.623c-3.881,0 -7.385,-0.646 -10.511,-1.94c-3.127,-1.294 -5.791,-3.203 -7.993,-5.729c-2.203,-2.526 -3.897,-5.645 -5.083,-9.356c-1.185,-3.712 -1.778,-7.985 -1.778,-12.821c0,-4.959 0.639,-9.379 1.917,-13.26c1.278,-3.881 3.072,-7.169 5.383,-9.865c2.31,-2.695 5.074,-4.751 8.293,-6.168c3.219,-1.417 6.784,-2.125 10.696,-2.125c1.725,0 3.403,0.162 5.036,0.485c1.632,0.324 3.142,0.732 4.528,1.225c1.386,0.492 2.618,1.062 3.696,1.709c1.078,0.647 1.825,1.178 2.241,1.594c0.416,0.416 0.685,0.732 0.808,0.947c0.123,0.216 0.224,0.47 0.301,0.763c0.077,0.292 0.138,0.639 0.184,1.039c0.047,0.4 0.07,0.878 0.07,1.432c0,0.616 -0.031,1.14 -0.093,1.571c-0.062,0.431 -0.155,0.793 -0.279,1.086c-0.124,0.293 -0.271,0.508 -0.441,0.647c-0.171,0.138 -0.38,0.208 -0.628,0.208c-0.433,0 -1.036,-0.301 -1.811,-0.901c-0.774,-0.601 -1.773,-1.263 -2.996,-1.987c-1.223,-0.724 -2.71,-1.386 -4.459,-1.987c-1.749,-0.6 -3.847,-0.901 -6.294,-0.901c-2.663,0 -5.086,0.532 -7.269,1.594c-2.183,1.063 -4.049,2.626 -5.597,4.69c-1.549,2.064 -2.748,4.582 -3.6,7.554c-0.852,2.972 -1.278,6.368 -1.278,10.188c0,3.788 0.411,7.138 1.231,10.049c0.821,2.91 1.998,5.344 3.53,7.3c1.533,1.956 3.415,3.434 5.644,4.435c2.23,1.001 4.753,1.502 7.571,1.502c2.384,0 4.467,-0.293 6.247,-0.878c1.781,-0.585 3.298,-1.24 4.552,-1.964c1.254,-0.724 2.283,-1.378 3.089,-1.963c0.805,-0.586 1.44,-0.878 1.904,-0.878c0.217,0 0.403,0.046 0.558,0.138c0.154,0.093 0.278,0.27 0.371,0.532c0.093,0.262 0.163,0.623 0.209,1.085c0.046,0.462 0.07,1.048 0.07,1.756Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M428.079,262.136c0,3.388 -0.446,6.507 -1.339,9.356c-0.894,2.849 -2.226,5.306 -3.997,7.369c-1.771,2.064 -3.989,3.673 -6.653,4.828c-2.664,1.156 -5.752,1.733 -9.264,1.733c-3.419,0 -6.399,-0.508 -8.94,-1.525c-2.541,-1.016 -4.659,-2.495 -6.353,-4.435c-1.694,-1.941 -2.957,-4.297 -3.788,-7.069c-0.832,-2.772 -1.248,-5.914 -1.248,-9.425c0,-3.388 0.439,-6.507 1.317,-9.356c0.878,-2.849 2.202,-5.306 3.973,-7.37c1.772,-2.063 3.982,-3.665 6.63,-4.805c2.649,-1.139 5.745,-1.709 9.287,-1.709c3.419,0 6.399,0.508 8.94,1.525c2.541,1.016 4.659,2.494 6.353,4.435c1.694,1.94 2.965,4.297 3.812,7.069c0.847,2.772 1.27,5.898 1.27,9.379Zm-7.9,0.508c0,-2.248 -0.21,-4.374 -0.63,-6.376c-0.419,-2.002 -1.111,-3.757 -2.074,-5.267c-0.964,-1.509 -2.269,-2.703 -3.917,-3.58c-1.647,-0.878 -3.698,-1.317 -6.153,-1.317c-2.269,0 -4.219,0.4 -5.851,1.201c-1.632,0.801 -2.976,1.933 -4.033,3.396c-1.056,1.463 -1.841,3.196 -2.354,5.198c-0.513,2.002 -0.769,4.189 -0.769,6.56c0,2.28 0.21,4.42 0.629,6.423c0.42,2.002 1.119,3.75 2.098,5.244c0.979,1.493 2.292,2.679 3.939,3.557c1.648,0.878 3.699,1.317 6.154,1.317c2.238,0 4.181,-0.401 5.828,-1.201c1.647,-0.801 2.999,-1.925 4.056,-3.373c1.056,-1.448 1.833,-3.173 2.331,-5.175c0.497,-2.002 0.746,-4.204 0.746,-6.607Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M500.987,283.389c0,0.247 -0.062,0.454 -0.185,0.624c-0.123,0.169 -0.323,0.316 -0.601,0.439c-0.277,0.123 -0.662,0.215 -1.155,0.277c-0.493,0.062 -1.109,0.092 -1.848,0.092c-0.77,0 -1.401,-0.03 -1.894,-0.092c-0.493,-0.062 -0.886,-0.154 -1.178,-0.277c-0.293,-0.123 -0.501,-0.27 -0.624,-0.439c-0.123,-0.17 -0.185,-0.377 -0.185,-0.624l0,-25.273c0,-1.755 -0.154,-3.357 -0.462,-4.805c-0.308,-1.447 -0.801,-2.695 -1.478,-3.742c-0.678,-1.047 -1.54,-1.848 -2.588,-2.403c-1.047,-0.554 -2.279,-0.831 -3.696,-0.831c-1.756,0 -3.519,0.677 -5.29,2.033c-1.771,1.355 -3.719,3.342 -5.845,5.96l0,29.061c0,0.247 -0.061,0.454 -0.184,0.624c-0.124,0.169 -0.332,0.316 -0.624,0.439c-0.293,0.123 -0.685,0.215 -1.178,0.277c-0.493,0.062 -1.109,0.092 -1.848,0.092c-0.709,0 -1.317,-0.03 -1.825,-0.092c-0.509,-0.062 -0.909,-0.154 -1.202,-0.277c-0.292,-0.123 -0.492,-0.27 -0.6,-0.439c-0.108,-0.17 -0.162,-0.377 -0.162,-0.624l0,-25.273c0,-1.755 -0.169,-3.357 -0.508,-4.805c-0.339,-1.447 -0.847,-2.695 -1.525,-3.742c-0.678,-1.047 -1.532,-1.848 -2.564,-2.403c-1.032,-0.554 -2.256,-0.831 -3.673,-0.831c-1.756,0 -3.527,0.677 -5.314,2.033c-1.786,1.355 -3.727,3.342 -5.821,5.96l0,29.061c0,0.247 -0.062,0.454 -0.185,0.624c-0.123,0.169 -0.323,0.316 -0.6,0.439c-0.278,0.123 -0.663,0.215 -1.156,0.277c-0.492,0.062 -1.124,0.092 -1.894,0.092c-0.739,0 -1.355,-0.03 -1.848,-0.092c-0.493,-0.062 -0.885,-0.154 -1.178,-0.277c-0.293,-0.123 -0.493,-0.27 -0.601,-0.439c-0.108,-0.17 -0.161,-0.377 -0.161,-0.624l0,-41.582c0,-0.246 0.046,-0.454 0.138,-0.624c0.093,-0.169 0.277,-0.323 0.555,-0.462c0.277,-0.138 0.631,-0.231 1.062,-0.277c0.432,-0.046 1.001,-0.069 1.71,-0.069c0.677,0 1.24,0.023 1.686,0.069c0.447,0.046 0.793,0.139 1.04,0.277c0.246,0.139 0.423,0.293 0.531,0.462c0.108,0.17 0.162,0.378 0.162,0.624l0,5.498c2.341,-2.618 4.612,-4.535 6.815,-5.752c2.202,-1.217 4.427,-1.825 6.676,-1.825c1.725,0 3.273,0.2 4.643,0.601c1.371,0.4 2.58,0.962 3.627,1.686c1.047,0.724 1.941,1.586 2.68,2.587c0.739,1.001 1.355,2.118 1.848,3.35c1.386,-1.509 2.703,-2.788 3.95,-3.835c1.248,-1.047 2.449,-1.894 3.604,-2.541c1.155,-0.647 2.279,-1.117 3.373,-1.409c1.093,-0.293 2.194,-0.439 3.303,-0.439c2.68,0 4.929,0.47 6.746,1.409c1.817,0.939 3.288,2.195 4.412,3.766c1.124,1.57 1.925,3.411 2.403,5.521c0.477,2.11 0.716,4.335 0.716,6.676l0,26.289Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M576.574,283.389c0,0.247 -0.062,0.454 -0.185,0.624c-0.123,0.169 -0.323,0.316 -0.601,0.439c-0.277,0.123 -0.662,0.215 -1.155,0.277c-0.492,0.062 -1.108,0.092 -1.848,0.092c-0.77,0 -1.401,-0.03 -1.894,-0.092c-0.493,-0.062 -0.886,-0.154 -1.178,-0.277c-0.293,-0.123 -0.501,-0.27 -0.624,-0.439c-0.123,-0.17 -0.185,-0.377 -0.185,-0.624l0,-25.273c0,-1.755 -0.154,-3.357 -0.462,-4.805c-0.308,-1.447 -0.801,-2.695 -1.478,-3.742c-0.678,-1.047 -1.54,-1.848 -2.588,-2.403c-1.047,-0.554 -2.279,-0.831 -3.696,-0.831c-1.755,0 -3.519,0.677 -5.29,2.033c-1.771,1.355 -3.719,3.342 -5.844,5.96l0,29.061c0,0.247 -0.062,0.454 -0.185,0.624c-0.124,0.169 -0.331,0.316 -0.624,0.439c-0.293,0.123 -0.685,0.215 -1.178,0.277c-0.493,0.062 -1.109,0.092 -1.848,0.092c-0.709,0 -1.317,-0.03 -1.825,-0.092c-0.509,-0.062 -0.909,-0.154 -1.202,-0.277c-0.292,-0.123 -0.492,-0.27 -0.6,-0.439c-0.108,-0.17 -0.162,-0.377 -0.162,-0.624l0,-25.273c0,-1.755 -0.169,-3.357 -0.508,-4.805c-0.339,-1.447 -0.847,-2.695 -1.525,-3.742c-0.677,-1.047 -1.532,-1.848 -2.564,-2.403c-1.032,-0.554 -2.256,-0.831 -3.673,-0.831c-1.756,0 -3.527,0.677 -5.313,2.033c-1.787,1.355 -3.727,3.342 -5.822,5.96l0,29.061c0,0.247 -0.061,0.454 -0.185,0.624c-0.123,0.169 -0.323,0.316 -0.6,0.439c-0.278,0.123 -0.663,0.215 -1.155,0.277c-0.493,0.062 -1.125,0.092 -1.895,0.092c-0.739,0 -1.355,-0.03 -1.848,-0.092c-0.493,-0.062 -0.885,-0.154 -1.178,-0.277c-0.293,-0.123 -0.493,-0.27 -0.601,-0.439c-0.107,-0.17 -0.161,-0.377 -0.161,-0.624l0,-41.582c0,-0.246 0.046,-0.454 0.138,-0.624c0.093,-0.169 0.278,-0.323 0.555,-0.462c0.277,-0.138 0.631,-0.231 1.062,-0.277c0.432,-0.046 1.001,-0.069 1.71,-0.069c0.678,0 1.24,0.023 1.686,0.069c0.447,0.046 0.793,0.139 1.04,0.277c0.246,0.139 0.423,0.293 0.531,0.462c0.108,0.17 0.162,0.378 0.162,0.624l0,5.498c2.341,-2.618 4.612,-4.535 6.815,-5.752c2.202,-1.217 4.427,-1.825 6.676,-1.825c1.725,0 3.273,0.2 4.643,0.601c1.371,0.4 2.58,0.962 3.627,1.686c1.047,0.724 1.941,1.586 2.68,2.587c0.739,1.001 1.355,2.118 1.848,3.35c1.386,-1.509 2.703,-2.788 3.95,-3.835c1.248,-1.047 2.449,-1.894 3.604,-2.541c1.155,-0.647 2.279,-1.117 3.373,-1.409c1.093,-0.293 2.195,-0.439 3.303,-0.439c2.68,0 4.929,0.47 6.746,1.409c1.817,0.939 3.288,2.195 4.412,3.766c1.125,1.57 1.925,3.411 2.403,5.521c0.477,2.11 0.716,4.335 0.716,6.676l0,26.289Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M626.103,283.389c0,0.247 -0.054,0.454 -0.162,0.624c-0.108,0.169 -0.3,0.316 -0.577,0.439c-0.278,0.123 -0.639,0.215 -1.086,0.277c-0.447,0.062 -0.993,0.092 -1.64,0.092c-0.709,0 -1.286,-0.03 -1.733,-0.092c-0.447,-0.062 -0.801,-0.154 -1.063,-0.277c-0.261,-0.123 -0.438,-0.27 -0.531,-0.439c-0.092,-0.17 -0.138,-0.377 -0.138,-0.624l0,-5.498c-2.372,2.618 -4.713,4.528 -7.023,5.729c-2.31,1.201 -4.651,1.802 -7.023,1.802c-2.772,0 -5.105,-0.462 -7,-1.386c-1.894,-0.924 -3.426,-2.179 -4.597,-3.766c-1.17,-1.586 -2.01,-3.434 -2.518,-5.544c-0.508,-2.11 -0.762,-4.674 -0.762,-7.693l0,-25.226c0,-0.246 0.054,-0.454 0.162,-0.624c0.107,-0.169 0.315,-0.323 0.623,-0.462c0.308,-0.138 0.709,-0.231 1.202,-0.277c0.492,-0.046 1.108,-0.069 1.848,-0.069c0.739,0 1.355,0.023 1.848,0.069c0.493,0.046 0.885,0.139 1.178,0.277c0.292,0.139 0.5,0.293 0.624,0.462c0.123,0.17 0.184,0.378 0.184,0.624l0,24.21c0,2.433 0.178,4.382 0.532,5.845c0.354,1.463 0.893,2.71 1.617,3.742c0.724,1.032 1.64,1.833 2.749,2.403c1.109,0.569 2.402,0.854 3.881,0.854c1.91,0 3.812,-0.677 5.706,-2.033c1.894,-1.355 3.904,-3.342 6.029,-5.96l0,-29.061c0,-0.246 0.054,-0.454 0.162,-0.624c0.108,-0.169 0.316,-0.323 0.624,-0.462c0.308,-0.138 0.7,-0.231 1.178,-0.277c0.477,-0.046 1.101,-0.069 1.871,-0.069c0.739,0 1.355,0.023 1.848,0.069c0.493,0.046 0.878,0.139 1.155,0.277c0.277,0.139 0.485,0.293 0.624,0.462c0.139,0.17 0.208,0.378 0.208,0.624l0,41.582Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M676.001,283.389c0,0.247 -0.061,0.454 -0.184,0.624c-0.124,0.169 -0.324,0.316 -0.601,0.439c-0.277,0.123 -0.662,0.215 -1.155,0.277c-0.493,0.062 -1.109,0.092 -1.848,0.092c-0.77,0 -1.402,-0.03 -1.894,-0.092c-0.493,-0.062 -0.878,-0.154 -1.155,-0.277c-0.278,-0.123 -0.478,-0.27 -0.601,-0.439c-0.123,-0.17 -0.185,-0.377 -0.185,-0.624l0,-24.349c0,-2.371 -0.185,-4.281 -0.554,-5.729c-0.37,-1.447 -0.909,-2.695 -1.617,-3.742c-0.709,-1.047 -1.625,-1.848 -2.749,-2.403c-1.125,-0.554 -2.426,-0.831 -3.905,-0.831c-1.909,0 -3.819,0.677 -5.729,2.033c-1.909,1.355 -3.911,3.342 -6.006,5.96l0,29.061c0,0.247 -0.062,0.454 -0.185,0.624c-0.123,0.169 -0.323,0.316 -0.6,0.439c-0.278,0.123 -0.663,0.215 -1.155,0.277c-0.493,0.062 -1.125,0.092 -1.895,0.092c-0.739,0 -1.355,-0.03 -1.848,-0.092c-0.493,-0.062 -0.885,-0.154 -1.178,-0.277c-0.293,-0.123 -0.493,-0.27 -0.601,-0.439c-0.107,-0.17 -0.161,-0.377 -0.161,-0.624l0,-41.582c0,-0.246 0.046,-0.454 0.138,-0.624c0.093,-0.169 0.277,-0.323 0.555,-0.462c0.277,-0.138 0.631,-0.231 1.062,-0.277c0.432,-0.046 1.001,-0.069 1.71,-0.069c0.677,0 1.24,0.023 1.686,0.069c0.447,0.046 0.793,0.139 1.04,0.277c0.246,0.139 0.423,0.293 0.531,0.462c0.108,0.17 0.162,0.378 0.162,0.624l0,5.498c2.341,-2.618 4.674,-4.535 6.999,-5.752c2.326,-1.217 4.675,-1.825 7.046,-1.825c2.772,0 5.106,0.47 7,1.409c1.894,0.939 3.427,2.195 4.597,3.766c1.171,1.57 2.01,3.411 2.518,5.521c0.508,2.11 0.762,4.643 0.762,7.6l0,25.365Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M697.532,283.389c0,0.247 -0.062,0.454 -0.185,0.624c-0.123,0.169 -0.323,0.316 -0.601,0.439c-0.277,0.123 -0.662,0.215 -1.155,0.277c-0.493,0.062 -1.124,0.092 -1.894,0.092c-0.739,0 -1.355,-0.03 -1.848,-0.092c-0.493,-0.062 -0.886,-0.154 -1.178,-0.277c-0.293,-0.123 -0.493,-0.27 -0.601,-0.439c-0.108,-0.17 -0.162,-0.377 -0.162,-0.624l0,-41.582c0,-0.216 0.054,-0.416 0.162,-0.601c0.108,-0.184 0.308,-0.338 0.601,-0.462c0.292,-0.123 0.685,-0.215 1.178,-0.277c0.493,-0.061 1.109,-0.092 1.848,-0.092c0.77,0 1.401,0.031 1.894,0.092c0.493,0.062 0.878,0.154 1.155,0.277c0.278,0.124 0.478,0.278 0.601,0.462c0.123,0.185 0.185,0.385 0.185,0.601l0,41.582Zm0.878,-55.628c0,1.787 -0.339,3.004 -1.017,3.65c-0.677,0.647 -1.925,0.971 -3.742,0.971c-1.787,0 -3.011,-0.316 -3.673,-0.947c-0.663,-0.632 -0.994,-1.825 -0.994,-3.581c0,-1.787 0.339,-3.003 1.017,-3.65c0.677,-0.647 1.925,-0.97 3.742,-0.97c1.787,0 3.011,0.315 3.673,0.947c0.663,0.631 0.994,1.825 0.994,3.58Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M733.246,280.34c0,0.893 -0.061,1.601 -0.185,2.125c-0.123,0.524 -0.308,0.909 -0.554,1.155c-0.246,0.247 -0.616,0.478 -1.109,0.693c-0.493,0.216 -1.055,0.393 -1.686,0.532c-0.632,0.138 -1.302,0.254 -2.01,0.346c-0.708,0.092 -1.417,0.139 -2.125,0.139c-2.156,0 -4.005,-0.285 -5.545,-0.855c-1.54,-0.57 -2.803,-1.432 -3.788,-2.587c-0.986,-1.155 -1.702,-2.619 -2.149,-4.39c-0.446,-1.771 -0.67,-3.858 -0.67,-6.26l0,-24.303l-5.821,0c-0.462,0 -0.832,-0.246 -1.109,-0.739c-0.277,-0.493 -0.416,-1.293 -0.416,-2.402c0,-0.586 0.039,-1.078 0.116,-1.479c0.077,-0.4 0.177,-0.731 0.3,-0.993c0.123,-0.262 0.285,-0.447 0.485,-0.555c0.2,-0.107 0.424,-0.161 0.67,-0.161l5.775,0l0,-9.888c0,-0.215 0.054,-0.415 0.162,-0.6c0.108,-0.185 0.308,-0.347 0.601,-0.485c0.292,-0.139 0.685,-0.239 1.178,-0.301c0.493,-0.061 1.109,-0.092 1.848,-0.092c0.77,0 1.401,0.031 1.894,0.092c0.493,0.062 0.878,0.162 1.155,0.301c0.278,0.138 0.478,0.3 0.601,0.485c0.123,0.185 0.185,0.385 0.185,0.6l0,9.888l10.673,0c0.246,0 0.462,0.054 0.646,0.161c0.185,0.108 0.347,0.293 0.486,0.555c0.138,0.262 0.238,0.593 0.3,0.993c0.061,0.401 0.092,0.893 0.092,1.479c0,1.109 -0.138,1.909 -0.416,2.402c-0.277,0.493 -0.646,0.739 -1.108,0.739l-10.673,0l0,23.194c0,2.865 0.423,5.028 1.27,6.491c0.847,1.464 2.364,2.195 4.551,2.195c0.709,0 1.34,-0.069 1.895,-0.208c0.554,-0.138 1.047,-0.285 1.478,-0.439c0.431,-0.154 0.801,-0.3 1.109,-0.439c0.308,-0.138 0.585,-0.208 0.832,-0.208c0.154,0 0.3,0.039 0.439,0.116c0.138,0.077 0.246,0.223 0.323,0.439c0.077,0.215 0.146,0.508 0.208,0.878c0.061,0.369 0.092,0.831 0.092,1.386Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M762.261,284.544l-5.544,15.293c-0.185,0.493 -0.654,0.87 -1.409,1.132c-0.755,0.262 -1.902,0.393 -3.442,0.393c-0.801,0 -1.448,-0.039 -1.941,-0.116c-0.493,-0.077 -0.87,-0.208 -1.132,-0.392c-0.261,-0.185 -0.408,-0.432 -0.439,-0.74c-0.03,-0.308 0.047,-0.677 0.231,-1.108l5.73,-14.462c-0.278,-0.123 -0.539,-0.323 -0.786,-0.6c-0.246,-0.278 -0.416,-0.57 -0.508,-0.878l-14.831,-39.734c-0.247,-0.647 -0.37,-1.155 -0.37,-1.525c0,-0.37 0.123,-0.662 0.37,-0.878c0.246,-0.215 0.647,-0.362 1.201,-0.439c0.555,-0.077 1.294,-0.115 2.218,-0.115c0.924,0 1.648,0.023 2.171,0.069c0.524,0.046 0.94,0.131 1.248,0.254c0.308,0.123 0.531,0.3 0.67,0.531c0.138,0.231 0.285,0.547 0.439,0.948l11.874,33.358l0.138,0l11.459,-33.543c0.184,-0.585 0.408,-0.963 0.669,-1.132c0.262,-0.17 0.655,-0.293 1.179,-0.37c0.523,-0.077 1.278,-0.115 2.264,-0.115c0.862,0 1.57,0.038 2.125,0.115c0.554,0.077 0.962,0.224 1.224,0.439c0.262,0.216 0.393,0.508 0.393,0.878c0,0.37 -0.092,0.832 -0.277,1.386l-14.924,41.351Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M840.528,267.773c0,2.803 -0.516,5.298 -1.548,7.485c-1.031,2.186 -2.464,4.042 -4.296,5.567c-1.833,1.525 -3.989,2.672 -6.469,3.442c-2.479,0.77 -5.151,1.155 -8.016,1.155c-2.002,0 -3.858,-0.169 -5.567,-0.508c-1.71,-0.339 -3.234,-0.755 -4.574,-1.248c-1.34,-0.492 -2.464,-1.001 -3.373,-1.524c-0.909,-0.524 -1.54,-0.971 -1.894,-1.34c-0.355,-0.37 -0.616,-0.84 -0.786,-1.409c-0.169,-0.57 -0.254,-1.333 -0.254,-2.287c0,-0.678 0.031,-1.24 0.093,-1.687c0.061,-0.446 0.154,-0.808 0.277,-1.086c0.123,-0.277 0.277,-0.469 0.462,-0.577c0.185,-0.108 0.4,-0.162 0.647,-0.162c0.431,0 1.039,0.262 1.825,0.786c0.785,0.523 1.794,1.093 3.026,1.709c1.232,0.616 2.718,1.194 4.458,1.733c1.741,0.539 3.75,0.808 6.03,0.808c1.725,0 3.303,-0.231 4.736,-0.693c1.432,-0.462 2.664,-1.116 3.696,-1.963c1.032,-0.847 1.825,-1.887 2.379,-3.119c0.555,-1.232 0.832,-2.634 0.832,-4.204c0,-1.695 -0.385,-3.142 -1.155,-4.343c-0.77,-1.202 -1.787,-2.257 -3.05,-3.165c-1.262,-0.909 -2.702,-1.741 -4.32,-2.495c-1.617,-0.755 -3.272,-1.525 -4.966,-2.31c-1.694,-0.786 -3.342,-1.656 -4.944,-2.611c-1.602,-0.955 -3.034,-2.079 -4.297,-3.373c-1.263,-1.293 -2.287,-2.81 -3.072,-4.551c-0.786,-1.74 -1.178,-3.827 -1.178,-6.26c0,-2.495 0.454,-4.72 1.363,-6.676c0.908,-1.956 2.171,-3.596 3.788,-4.921c1.617,-1.324 3.542,-2.333 5.775,-3.026c2.234,-0.693 4.644,-1.04 7.231,-1.04c1.325,0 2.657,0.116 3.997,0.347c1.34,0.231 2.602,0.539 3.788,0.924c1.186,0.385 2.241,0.816 3.165,1.294c0.924,0.477 1.532,0.862 1.825,1.155c0.293,0.292 0.485,0.523 0.578,0.693c0.092,0.169 0.169,0.385 0.231,0.647c0.061,0.261 0.107,0.577 0.138,0.947c0.031,0.369 0.046,0.847 0.046,1.432c0,0.554 -0.023,1.047 -0.069,1.479c-0.046,0.431 -0.115,0.793 -0.208,1.085c-0.092,0.293 -0.223,0.508 -0.392,0.647c-0.17,0.139 -0.362,0.208 -0.578,0.208c-0.339,0 -0.87,-0.216 -1.594,-0.647c-0.724,-0.431 -1.609,-0.916 -2.657,-1.455c-1.047,-0.539 -2.287,-1.032 -3.719,-1.479c-1.432,-0.446 -3.042,-0.67 -4.828,-0.67c-1.663,0 -3.111,0.224 -4.343,0.67c-1.232,0.447 -2.249,1.04 -3.049,1.779c-0.801,0.739 -1.402,1.617 -1.802,2.634c-0.401,1.016 -0.601,2.094 -0.601,3.234c0,1.663 0.385,3.095 1.155,4.297c0.77,1.201 1.794,2.264 3.073,3.188c1.278,0.924 2.733,1.771 4.366,2.541c1.632,0.77 3.295,1.548 4.99,2.333c1.694,0.785 3.357,1.648 4.989,2.587c1.633,0.94 3.088,2.049 4.367,3.327c1.278,1.278 2.31,2.787 3.095,4.528c0.786,1.74 1.178,3.796 1.178,6.168Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M886.638,283.389c0,0.247 -0.054,0.454 -0.161,0.624c-0.108,0.169 -0.301,0.316 -0.578,0.439c-0.277,0.123 -0.639,0.215 -1.086,0.277c-0.446,0.062 -0.993,0.092 -1.64,0.092c-0.708,0 -1.286,-0.03 -1.733,-0.092c-0.446,-0.062 -0.8,-0.154 -1.062,-0.277c-0.262,-0.123 -0.439,-0.27 -0.532,-0.439c-0.092,-0.17 -0.138,-0.377 -0.138,-0.624l0,-5.498c-2.372,2.618 -4.713,4.528 -7.023,5.729c-2.31,1.201 -4.651,1.802 -7.023,1.802c-2.772,0 -5.105,-0.462 -6.999,-1.386c-1.895,-0.924 -3.427,-2.179 -4.597,-3.766c-1.171,-1.586 -2.01,-3.434 -2.519,-5.544c-0.508,-2.11 -0.762,-4.674 -0.762,-7.693l0,-25.226c0,-0.246 0.054,-0.454 0.162,-0.624c0.108,-0.169 0.316,-0.323 0.624,-0.462c0.308,-0.138 0.708,-0.231 1.201,-0.277c0.493,-0.046 1.109,-0.069 1.848,-0.069c0.739,0 1.355,0.023 1.848,0.069c0.493,0.046 0.886,0.139 1.178,0.277c0.293,0.139 0.501,0.293 0.624,0.462c0.123,0.17 0.185,0.378 0.185,0.624l0,24.21c0,2.433 0.177,4.382 0.531,5.845c0.354,1.463 0.893,2.71 1.617,3.742c0.724,1.032 1.64,1.833 2.749,2.403c1.109,0.569 2.403,0.854 3.881,0.854c1.91,0 3.812,-0.677 5.706,-2.033c1.895,-1.355 3.904,-3.342 6.03,-5.96l0,-29.061c0,-0.246 0.054,-0.454 0.161,-0.624c0.108,-0.169 0.316,-0.323 0.624,-0.462c0.308,-0.138 0.701,-0.231 1.178,-0.277c0.478,-0.046 1.101,-0.069 1.871,-0.069c0.74,0 1.356,0.023 1.849,0.069c0.492,0.046 0.877,0.139 1.155,0.277c0.277,0.139 0.485,0.293 0.623,0.462c0.139,0.17 0.208,0.378 0.208,0.624l0,41.582Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M938.986,261.951c0,3.635 -0.393,6.9 -1.179,9.795c-0.785,2.895 -1.94,5.352 -3.465,7.369c-1.524,2.018 -3.411,3.573 -5.66,4.667c-2.248,1.093 -4.82,1.64 -7.715,1.64c-1.232,0 -2.372,-0.123 -3.419,-0.37c-1.048,-0.246 -2.072,-0.631 -3.073,-1.155c-1.001,-0.523 -1.994,-1.185 -2.98,-1.986c-0.986,-0.801 -2.033,-1.741 -3.142,-2.819l0,20.791c0,0.247 -0.061,0.462 -0.184,0.647c-0.124,0.185 -0.324,0.339 -0.601,0.462c-0.277,0.123 -0.662,0.216 -1.155,0.277c-0.493,0.062 -1.124,0.093 -1.894,0.093c-0.74,0 -1.356,-0.031 -1.849,-0.093c-0.492,-0.061 -0.885,-0.154 -1.178,-0.277c-0.292,-0.123 -0.493,-0.277 -0.6,-0.462c-0.108,-0.185 -0.162,-0.4 -0.162,-0.647l0,-58.076c0,-0.277 0.046,-0.501 0.139,-0.67c0.092,-0.169 0.277,-0.316 0.554,-0.439c0.277,-0.123 0.631,-0.208 1.063,-0.254c0.431,-0.046 0.954,-0.069 1.571,-0.069c0.646,0 1.178,0.023 1.594,0.069c0.415,0.046 0.762,0.131 1.039,0.254c0.277,0.123 0.47,0.27 0.578,0.439c0.107,0.169 0.161,0.393 0.161,0.67l0,5.59c1.263,-1.293 2.48,-2.417 3.65,-3.372c1.171,-0.955 2.349,-1.748 3.535,-2.38c1.186,-0.631 2.402,-1.109 3.65,-1.432c1.247,-0.323 2.564,-0.485 3.95,-0.485c3.019,0 5.591,0.585 7.716,1.756c2.125,1.17 3.858,2.772 5.198,4.805c1.34,2.033 2.317,4.397 2.933,7.092c0.617,2.695 0.925,5.552 0.925,8.57Zm-7.901,0.878c0,-2.125 -0.163,-4.181 -0.488,-6.168c-0.325,-1.987 -0.883,-3.75 -1.673,-5.29c-0.791,-1.54 -1.852,-2.772 -3.185,-3.696c-1.332,-0.924 -2.99,-1.386 -4.974,-1.386c-0.992,0 -1.968,0.146 -2.929,0.439c-0.96,0.292 -1.936,0.754 -2.928,1.386c-0.992,0.631 -2.03,1.463 -3.115,2.495c-1.085,1.031 -2.231,2.302 -3.44,3.811l0,16.541c2.108,2.556 4.107,4.512 5.997,5.867c1.891,1.356 3.874,2.033 5.95,2.033c1.922,0 3.572,-0.462 4.951,-1.386c1.379,-0.924 2.495,-2.156 3.347,-3.696c0.852,-1.54 1.48,-3.265 1.883,-5.175c0.403,-1.909 0.604,-3.834 0.604,-5.775Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M988.699,261.951c0,3.635 -0.392,6.9 -1.178,9.795c-0.785,2.895 -1.94,5.352 -3.465,7.369c-1.525,2.018 -3.411,3.573 -5.66,4.667c-2.248,1.093 -4.82,1.64 -7.716,1.64c-1.232,0 -2.371,-0.123 -3.419,-0.37c-1.047,-0.246 -2.071,-0.631 -3.072,-1.155c-1.001,-0.523 -1.994,-1.185 -2.98,-1.986c-0.986,-0.801 -2.033,-1.741 -3.142,-2.819l0,20.791c0,0.247 -0.061,0.462 -0.185,0.647c-0.123,0.185 -0.323,0.339 -0.6,0.462c-0.278,0.123 -0.663,0.216 -1.155,0.277c-0.493,0.062 -1.125,0.093 -1.895,0.093c-0.739,0 -1.355,-0.031 -1.848,-0.093c-0.493,-0.061 -0.885,-0.154 -1.178,-0.277c-0.293,-0.123 -0.493,-0.277 -0.601,-0.462c-0.107,-0.185 -0.161,-0.4 -0.161,-0.647l0,-58.076c0,-0.277 0.046,-0.501 0.138,-0.67c0.093,-0.169 0.278,-0.316 0.555,-0.439c0.277,-0.123 0.631,-0.208 1.062,-0.254c0.432,-0.046 0.955,-0.069 1.571,-0.069c0.647,0 1.178,0.023 1.594,0.069c0.416,0.046 0.763,0.131 1.04,0.254c0.277,0.123 0.47,0.27 0.577,0.439c0.108,0.169 0.162,0.393 0.162,0.67l0,5.59c1.263,-1.293 2.48,-2.417 3.65,-3.372c1.171,-0.955 2.349,-1.748 3.535,-2.38c1.185,-0.631 2.402,-1.109 3.65,-1.432c1.247,-0.323 2.564,-0.485 3.95,-0.485c3.018,0 5.59,0.585 7.716,1.756c2.125,1.17 3.858,2.772 5.197,4.805c1.34,2.033 2.318,4.397 2.934,7.092c0.616,2.695 0.924,5.552 0.924,8.57Zm-7.9,0.878c0,-2.125 -0.163,-4.181 -0.488,-6.168c-0.326,-1.987 -0.883,-3.75 -1.674,-5.29c-0.79,-1.54 -1.851,-2.772 -3.184,-3.696c-1.333,-0.924 -2.991,-1.386 -4.974,-1.386c-0.992,0 -1.968,0.146 -2.929,0.439c-0.96,0.292 -1.937,0.754 -2.928,1.386c-0.992,0.631 -2.03,1.463 -3.115,2.495c-1.085,1.031 -2.231,2.302 -3.44,3.811l0,16.541c2.108,2.556 4.107,4.512 5.997,5.867c1.891,1.356 3.874,2.033 5.95,2.033c1.921,0 3.571,-0.462 4.951,-1.386c1.379,-0.924 2.494,-2.156 3.347,-3.696c0.852,-1.54 1.48,-3.265 1.882,-5.175c0.403,-1.909 0.605,-3.834 0.605,-5.775Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M1038.83,262.136c0,3.388 -0.447,6.507 -1.34,9.356c-0.893,2.849 -2.225,5.306 -3.996,7.369c-1.772,2.064 -3.989,3.673 -6.654,4.828c-2.664,1.156 -5.752,1.733 -9.263,1.733c-3.419,0 -6.399,-0.508 -8.94,-1.525c-2.541,-1.016 -4.659,-2.495 -6.353,-4.435c-1.694,-1.941 -2.957,-4.297 -3.789,-7.069c-0.831,-2.772 -1.247,-5.914 -1.247,-9.425c0,-3.388 0.439,-6.507 1.317,-9.356c0.877,-2.849 2.202,-5.306 3.973,-7.37c1.771,-2.063 3.981,-3.665 6.63,-4.805c2.649,-1.139 5.744,-1.709 9.287,-1.709c3.419,0 6.399,0.508 8.94,1.525c2.541,1.016 4.659,2.494 6.353,4.435c1.694,1.94 2.964,4.297 3.811,7.069c0.847,2.772 1.271,5.898 1.271,9.379Zm-7.901,0.508c0,-2.248 -0.21,-4.374 -0.629,-6.376c-0.42,-2.002 -1.111,-3.757 -2.075,-5.267c-0.963,-1.509 -2.269,-2.703 -3.916,-3.58c-1.647,-0.878 -3.698,-1.317 -6.154,-1.317c-2.269,0 -4.219,0.4 -5.851,1.201c-1.631,0.801 -2.976,1.933 -4.032,3.396c-1.057,1.463 -1.842,3.196 -2.354,5.198c-0.513,2.002 -0.77,4.189 -0.77,6.56c0,2.28 0.21,4.42 0.63,6.423c0.42,2.002 1.119,3.75 2.098,5.244c0.979,1.493 2.292,2.679 3.939,3.557c1.647,0.878 3.698,1.317 6.154,1.317c2.238,0 4.18,-0.401 5.827,-1.201c1.648,-0.801 3,-1.925 4.056,-3.373c1.057,-1.448 1.834,-3.173 2.331,-5.175c0.498,-2.002 0.746,-4.204 0.746,-6.607Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M1074.36,244.533c0,0.678 -0.016,1.247 -0.047,1.709c-0.03,0.462 -0.092,0.824 -0.184,1.086c-0.093,0.262 -0.208,0.462 -0.347,0.601c-0.139,0.138 -0.331,0.208 -0.577,0.208c-0.247,0 -0.547,-0.07 -0.901,-0.208c-0.355,-0.139 -0.755,-0.277 -1.202,-0.416c-0.446,-0.139 -0.947,-0.27 -1.501,-0.393c-0.555,-0.123 -1.155,-0.185 -1.802,-0.185c-0.77,0 -1.525,0.154 -2.264,0.462c-0.739,0.308 -1.517,0.817 -2.333,1.525c-0.817,0.709 -1.671,1.648 -2.565,2.818c-0.893,1.171 -1.878,2.603 -2.956,4.297l0,27.352c0,0.247 -0.062,0.454 -0.185,0.624c-0.124,0.169 -0.324,0.316 -0.601,0.439c-0.277,0.123 -0.662,0.215 -1.155,0.277c-0.493,0.062 -1.124,0.092 -1.894,0.092c-0.74,0 -1.356,-0.03 -1.848,-0.092c-0.493,-0.062 -0.886,-0.154 -1.179,-0.277c-0.292,-0.123 -0.492,-0.27 -0.6,-0.439c-0.108,-0.17 -0.162,-0.377 -0.162,-0.624l0,-41.582c0,-0.246 0.046,-0.454 0.139,-0.624c0.092,-0.169 0.277,-0.323 0.554,-0.462c0.277,-0.138 0.632,-0.231 1.063,-0.277c0.431,-0.046 1.001,-0.069 1.709,-0.069c0.678,0 1.24,0.023 1.687,0.069c0.446,0.046 0.793,0.139 1.039,0.277c0.247,0.139 0.424,0.293 0.532,0.462c0.107,0.17 0.161,0.378 0.161,0.624l0,6.052c1.14,-1.663 2.21,-3.018 3.211,-4.065c1.001,-1.048 1.949,-1.872 2.842,-2.472c0.893,-0.601 1.779,-1.017 2.656,-1.248c0.878,-0.231 1.764,-0.346 2.657,-0.346c0.4,0 0.855,0.023 1.363,0.069c0.508,0.046 1.04,0.131 1.594,0.254c0.554,0.123 1.055,0.262 1.502,0.416c0.446,0.154 0.762,0.308 0.947,0.462c0.185,0.154 0.308,0.3 0.369,0.439c0.062,0.139 0.116,0.316 0.162,0.531c0.046,0.216 0.077,0.532 0.092,0.948c0.016,0.415 0.024,0.977 0.024,1.686Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M1104.67,280.34c0,0.893 -0.061,1.601 -0.184,2.125c-0.124,0.524 -0.308,0.909 -0.555,1.155c-0.246,0.247 -0.616,0.478 -1.109,0.693c-0.493,0.216 -1.055,0.393 -1.686,0.532c-0.632,0.138 -1.302,0.254 -2.01,0.346c-0.708,0.092 -1.417,0.139 -2.125,0.139c-2.156,0 -4.004,-0.285 -5.545,-0.855c-1.54,-0.57 -2.802,-1.432 -3.788,-2.587c-0.986,-1.155 -1.702,-2.619 -2.149,-4.39c-0.446,-1.771 -0.669,-3.858 -0.669,-6.26l0,-24.303l-5.822,0c-0.462,0 -0.832,-0.246 -1.109,-0.739c-0.277,-0.493 -0.416,-1.293 -0.416,-2.402c0,-0.586 0.039,-1.078 0.116,-1.479c0.077,-0.4 0.177,-0.731 0.3,-0.993c0.123,-0.262 0.285,-0.447 0.485,-0.555c0.2,-0.107 0.424,-0.161 0.67,-0.161l5.776,0l0,-9.888c0,-0.215 0.053,-0.415 0.161,-0.6c0.108,-0.185 0.308,-0.347 0.601,-0.485c0.292,-0.139 0.685,-0.239 1.178,-0.301c0.493,-0.061 1.109,-0.092 1.848,-0.092c0.77,0 1.402,0.031 1.894,0.092c0.493,0.062 0.878,0.162 1.155,0.301c0.278,0.138 0.478,0.3 0.601,0.485c0.123,0.185 0.185,0.385 0.185,0.6l0,9.888l10.673,0c0.246,0 0.462,0.054 0.646,0.161c0.185,0.108 0.347,0.293 0.486,0.555c0.138,0.262 0.238,0.593 0.3,0.993c0.062,0.401 0.092,0.893 0.092,1.479c0,1.109 -0.138,1.909 -0.415,2.402c-0.278,0.493 -0.647,0.739 -1.109,0.739l-10.673,0l0,23.194c0,2.865 0.423,5.028 1.27,6.491c0.848,1.464 2.364,2.195 4.551,2.195c0.709,0 1.34,-0.069 1.895,-0.208c0.554,-0.138 1.047,-0.285 1.478,-0.439c0.431,-0.154 0.801,-0.3 1.109,-0.439c0.308,-0.138 0.585,-0.208 0.832,-0.208c0.154,0 0.3,0.039 0.439,0.116c0.138,0.077 0.246,0.223 0.323,0.439c0.077,0.215 0.146,0.508 0.208,0.878c0.062,0.369 0.092,0.831 0.092,1.386Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M1149.21,260.796c0,1.201 -0.301,2.056 -0.904,2.564c-0.604,0.509 -1.292,0.763 -2.066,0.763l-27.385,0c0,2.31 0.233,4.389 0.697,6.237c0.464,1.848 1.238,3.434 2.321,4.759c1.083,1.324 2.492,2.341 4.225,3.049c1.733,0.709 3.854,1.063 6.36,1.063c1.981,0 3.746,-0.162 5.293,-0.485c1.548,-0.324 2.886,-0.686 4.016,-1.086c1.13,-0.4 2.059,-0.762 2.786,-1.086c0.727,-0.323 1.277,-0.485 1.649,-0.485c0.216,0 0.409,0.054 0.58,0.162c0.17,0.108 0.301,0.269 0.394,0.485c0.093,0.216 0.163,0.516 0.209,0.901c0.047,0.385 0.07,0.855 0.07,1.409c0,0.401 -0.016,0.747 -0.046,1.04c-0.031,0.292 -0.07,0.554 -0.116,0.785c-0.046,0.231 -0.123,0.439 -0.231,0.624c-0.108,0.185 -0.246,0.362 -0.416,0.531c-0.169,0.17 -0.67,0.447 -1.501,0.832c-0.832,0.385 -1.91,0.762 -3.235,1.132c-1.324,0.369 -2.856,0.701 -4.597,0.993c-1.74,0.293 -3.596,0.439 -5.567,0.439c-3.419,0 -6.414,-0.477 -8.986,-1.432c-2.572,-0.955 -4.736,-2.372 -6.492,-4.251c-1.756,-1.879 -3.08,-4.235 -3.973,-7.069c-0.894,-2.834 -1.34,-6.129 -1.34,-9.887c0,-3.573 0.462,-6.784 1.386,-9.633c0.924,-2.849 2.256,-5.267 3.996,-7.254c1.741,-1.987 3.843,-3.511 6.307,-4.574c2.464,-1.063 5.221,-1.594 8.27,-1.594c3.265,0 6.045,0.524 8.34,1.571c2.295,1.047 4.181,2.456 5.66,4.227c1.478,1.771 2.564,3.85 3.257,6.238c0.693,2.387 1.039,4.936 1.039,7.646l0,1.386Zm-7.669,-2.264c0.092,-4.004 -0.799,-7.146 -2.673,-9.425c-1.875,-2.279 -4.656,-3.419 -8.344,-3.419c-1.891,0 -3.549,0.354 -4.974,1.063c-1.426,0.708 -2.619,1.648 -3.58,2.818c-0.961,1.17 -1.705,2.533 -2.231,4.089c-0.527,1.555 -0.821,3.18 -0.884,4.874l22.686,0Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M1196.42,283.389c0,0.247 -0.054,0.462 -0.161,0.647c-0.108,0.185 -0.293,0.331 -0.555,0.439c-0.262,0.108 -0.608,0.192 -1.039,0.254c-0.432,0.062 -0.955,0.092 -1.571,0.092c-0.647,0 -1.186,-0.03 -1.617,-0.092c-0.432,-0.062 -0.786,-0.146 -1.063,-0.254c-0.277,-0.108 -0.477,-0.254 -0.601,-0.439c-0.123,-0.185 -0.184,-0.4 -0.184,-0.647l0,-5.498c-2.187,2.372 -4.459,4.22 -6.815,5.544c-2.357,1.325 -4.936,1.987 -7.739,1.987c-3.05,0 -5.652,-0.593 -7.808,-1.779c-2.157,-1.186 -3.905,-2.787 -5.244,-4.805c-1.34,-2.017 -2.318,-4.389 -2.934,-7.115c-0.616,-2.726 -0.924,-5.598 -0.924,-8.617c0,-3.573 0.385,-6.799 1.155,-9.679c0.77,-2.88 1.909,-5.336 3.419,-7.369c1.509,-2.033 3.38,-3.596 5.613,-4.69c2.233,-1.093 4.813,-1.64 7.739,-1.64c2.434,0 4.659,0.531 6.676,1.594c2.018,1.063 4.012,2.626 5.984,4.689l0,-24.163c0,-0.216 0.054,-0.424 0.161,-0.624c0.108,-0.2 0.316,-0.354 0.624,-0.462c0.308,-0.108 0.701,-0.2 1.178,-0.277c0.478,-0.077 1.086,-0.116 1.825,-0.116c0.77,0 1.402,0.039 1.895,0.116c0.492,0.077 0.877,0.169 1.155,0.277c0.277,0.108 0.485,0.262 0.623,0.462c0.139,0.2 0.208,0.408 0.208,0.624l0,61.541Zm-7.669,-29.246c-2.064,-2.557 -4.058,-4.505 -5.984,-5.845c-1.925,-1.339 -3.934,-2.009 -6.029,-2.009c-1.94,0 -3.588,0.462 -4.944,1.386c-1.355,0.924 -2.456,2.14 -3.303,3.65c-0.847,1.509 -1.463,3.218 -1.848,5.128c-0.385,1.91 -0.578,3.85 -0.578,5.822c0,2.094 0.162,4.142 0.485,6.145c0.324,2.002 0.886,3.78 1.687,5.336c0.801,1.555 1.863,2.803 3.188,3.742c1.324,0.94 2.988,1.41 4.99,1.41c1.016,0 1.994,-0.139 2.934,-0.416c0.939,-0.278 1.902,-0.74 2.887,-1.386c0.986,-0.647 2.018,-1.487 3.096,-2.518c1.078,-1.032 2.217,-2.303 3.419,-3.812l0,-16.633Z" style="fill:#fff;fill-rule:nonzero;"/></g></svg> \ No newline at end of file
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 1260 371" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;"><rect id="badge.-community.-dark" x="0" y="0.321" width="1260" height="370" style="fill:none;"/><clipPath id="_clip1"><rect x="0" y="0.321" width="1260" height="370"/></clipPath><g clip-path="url(#_clip1)"><path d="M1260,33.621c0,-18.379 -14.921,-33.3 -33.3,-33.3l-1193.4,0c-18.379,0 -33.3,14.921 -33.3,33.3l0,303.4c0,18.378 14.921,33.3 33.3,33.3l1193.4,0c18.379,0 33.3,-14.922 33.3,-33.3l0,-303.4Z" style="fill:#333;"/><path d="M118.018,302.021l-6.434,0c-1.775,0 -3.217,-1.441 -3.217,-3.217l0,-20.679l-4.548,0c-15.366,0 -27.841,-12.475 -27.841,-27.841l0,-4.548l-20.679,0c-1.776,0 -3.217,-1.442 -3.217,-3.217l0,-6.434c0,-1.775 1.441,-3.217 3.217,-3.217l20.679,0l0,-14.123l-20.679,0c-1.776,0 -3.217,-1.441 -3.217,-3.217l0,-6.434c0,-1.775 1.441,-3.217 3.217,-3.217l20.679,0l0,-14.123l-20.679,0c-1.776,0 -3.217,-1.441 -3.217,-3.216l0,-6.434c0,-1.776 1.441,-3.217 3.217,-3.217l20.679,0l0,-14.123l-20.679,0c-1.776,0 -3.217,-1.442 -3.217,-3.217l0,-6.434c0,-1.775 1.441,-3.217 3.217,-3.217l20.679,0l0,-14.123l-20.679,0c-1.776,0 -3.217,-1.441 -3.217,-3.217l0,-6.434c0,-1.775 1.441,-3.216 3.217,-3.217l20.679,0l0,-4.548c0,-15.366 12.475,-27.841 27.841,-27.841l4.548,0l0,-20.679c0,-1.776 1.442,-3.217 3.217,-3.217l6.434,0c1.776,0 3.217,1.441 3.217,3.217l0,20.679l14.123,0l0,-20.679c0,-1.776 1.441,-3.217 3.217,-3.217l6.434,0c1.775,0 3.217,1.441 3.217,3.217l0,20.679l14.123,0l0,-20.679c0,-1.776 1.441,-3.217 3.217,-3.217l6.433,0c1.776,0 3.217,1.441 3.217,3.217l0,20.679l14.123,0l0,-20.679c0,-1.776 1.442,-3.217 3.217,-3.217l6.434,0c1.776,0 3.217,1.441 3.217,3.217l0,20.679l14.123,0l0,-20.679c0,-1.776 1.441,-3.217 3.217,-3.217l6.434,0c1.775,0 3.217,1.441 3.217,3.217l0,20.679l4.548,0c15.366,0 27.841,12.475 27.841,27.841l0,4.548l20.679,0c1.776,0.001 3.217,1.442 3.217,3.217l0,6.434c0,1.775 -1.441,3.217 -3.217,3.217l-20.679,0l0,14.123l20.679,0c1.776,0.001 3.217,1.442 3.217,3.217l0,6.434c0,1.775 -1.441,3.216 -3.217,3.217l-20.679,0l0,14.123l20.679,0c1.776,0 3.217,1.442 3.217,3.217l0,6.434c0,1.775 -1.441,3.216 -3.217,3.216l-20.679,0l0,14.123l20.679,0c1.776,0.001 3.217,1.442 3.217,3.217l0,6.434c0,1.775 -1.441,3.217 -3.217,3.217l-20.679,0l0,14.123l20.679,0c1.776,0.001 3.217,1.442 3.217,3.217l0,6.434c0,1.775 -1.441,3.216 -3.217,3.217l-20.679,0l0,4.548c0,15.366 -12.475,27.841 -27.841,27.841l-4.548,0l0,20.679c0,1.776 -1.441,3.217 -3.217,3.217l-6.434,0c-1.776,0 -3.217,-1.441 -3.217,-3.217l0,-20.679l-14.123,0l0,20.679c0,1.776 -1.441,3.217 -3.217,3.217l-6.434,0c-1.775,0 -3.217,-1.441 -3.217,-3.217l0,-20.679l-14.123,0l0,20.679c0,1.776 -1.441,3.217 -3.217,3.217l-6.433,0c-1.776,0 -3.217,-1.441 -3.217,-3.217l0,-20.679l-14.123,0l0,20.679c0,1.776 -1.441,3.217 -3.217,3.217l-6.434,0c-1.775,0 -3.217,-1.441 -3.217,-3.217l0,-20.679l-14.123,0l0,20.679c0,1.776 -1.441,3.217 -3.217,3.217Zm103.74,-127.253c0,6.774 -1.062,12.845 -3.187,18.213c-2.124,5.368 -5.152,9.946 -9.085,13.735c-3.932,3.789 -8.697,6.717 -14.295,8.784c-5.597,2.067 -11.927,3.186 -18.988,3.359l0,20.581c0,0.459 -0.115,0.861 -0.345,1.206c-0.229,0.344 -0.631,0.617 -1.205,0.818c-0.574,0.201 -1.335,0.358 -2.282,0.473c-0.947,0.115 -2.139,0.173 -3.574,0.173c-1.435,0 -2.626,-0.058 -3.574,-0.173c-0.947,-0.115 -1.693,-0.272 -2.239,-0.473c-0.545,-0.201 -0.947,-0.474 -1.205,-0.818c-0.259,-0.345 -0.388,-0.747 -0.388,-1.206l0,-20.581c-7.176,-0.173 -13.577,-1.206 -19.203,-3.101c-5.627,-1.894 -10.392,-4.635 -14.295,-8.224c-3.904,-3.588 -6.89,-7.994 -8.956,-13.218c-2.067,-5.224 -3.101,-11.224 -3.101,-17.998l0,-44.005c0,-0.402 0.13,-0.775 0.388,-1.119c0.258,-0.345 0.66,-0.632 1.206,-0.861c0.545,-0.23 1.291,-0.402 2.239,-0.517c0.947,-0.115 2.138,-0.172 3.573,-0.172c1.436,0 2.627,0.057 3.574,0.172c0.947,0.115 1.708,0.287 2.282,0.517c0.574,0.229 0.976,0.516 1.206,0.861c0.229,0.344 0.344,0.717 0.344,1.119l0,42.713c0,4.765 0.632,9.057 1.895,12.874c1.263,3.818 3.157,7.062 5.683,9.731c2.526,2.67 5.727,4.737 9.602,6.201c3.875,1.463 8.396,2.253 13.563,2.368l0,-73.887c0,-0.402 0.129,-0.775 0.388,-1.119c0.258,-0.345 0.689,-0.632 1.291,-0.861c0.603,-0.23 1.378,-0.402 2.326,-0.517c0.947,-0.115 2.081,-0.172 3.401,-0.172c1.435,0 2.627,0.057 3.574,0.172c0.947,0.115 1.708,0.287 2.282,0.517c0.574,0.229 0.976,0.516 1.205,0.861c0.23,0.344 0.345,0.717 0.345,1.119l0,73.887c5.167,-0.058 9.673,-0.847 13.52,-2.368c3.846,-1.522 7.047,-3.617 9.602,-6.287c2.554,-2.669 4.478,-5.884 5.769,-9.645c1.292,-3.76 1.938,-7.937 1.938,-12.529l0,-43.058c0,-0.402 0.115,-0.775 0.344,-1.119c0.23,-0.345 0.632,-0.632 1.206,-0.861c0.574,-0.23 1.321,-0.402 2.239,-0.517c0.919,-0.115 2.124,-0.172 3.617,-0.172c1.378,0 2.54,0.057 3.488,0.172c0.947,0.115 1.693,0.287 2.239,0.517c0.545,0.229 0.947,0.516 1.205,0.861c0.258,0.344 0.388,0.717 0.388,1.119l0,42.455Z" style="fill:#fff;"/><path d="M426.392,189.328c0,1.077 -0.059,1.978 -0.176,2.704c-0.117,0.726 -0.293,1.288 -0.527,1.686c-0.234,0.398 -0.491,0.668 -0.772,0.808c-0.281,0.141 -0.563,0.211 -0.844,0.211c-0.936,0 -2.447,-0.386 -4.531,-1.159c-2.084,-0.773 -4.484,-1.897 -7.201,-3.372c-2.716,-1.476 -5.62,-3.267 -8.711,-5.375c-3.092,-2.107 -6.089,-4.566 -8.993,-7.376c-2.295,1.405 -5.199,2.622 -8.711,3.653c-3.513,1.03 -7.588,1.545 -12.224,1.545c-6.839,0 -12.752,-1.007 -17.74,-3.021c-4.988,-2.013 -9.109,-4.964 -12.364,-8.851c-3.255,-3.888 -5.679,-8.724 -7.272,-14.508c-1.592,-5.784 -2.388,-12.423 -2.388,-19.917c0,-7.213 0.866,-13.734 2.599,-19.566c1.733,-5.831 4.333,-10.795 7.798,-14.893c3.466,-4.098 7.799,-7.26 12.997,-9.485c5.199,-2.224 11.264,-3.337 18.196,-3.337c6.51,0 12.236,1.007 17.177,3.021c4.941,2.014 9.086,4.953 12.435,8.817c3.349,3.864 5.866,8.63 7.552,14.297c1.686,5.667 2.529,12.177 2.529,19.53c0,3.794 -0.222,7.424 -0.667,10.89c-0.445,3.466 -1.147,6.744 -2.108,9.835c-0.96,3.091 -2.166,5.948 -3.618,8.571c-1.452,2.623 -3.161,4.988 -5.128,7.096c3.419,2.81 6.416,5 8.992,6.569c2.576,1.569 4.707,2.751 6.393,3.547c1.687,0.797 2.998,1.37 3.935,1.722c0.936,0.351 1.639,0.749 2.107,1.194c0.469,0.445 0.796,1.077 0.984,1.897c0.187,0.819 0.281,1.908 0.281,3.267Zm-23.886,-53.745c0,-5.152 -0.457,-9.929 -1.37,-14.331c-0.914,-4.403 -2.436,-8.232 -4.567,-11.487c-2.131,-3.255 -4.976,-5.796 -8.536,-7.622c-3.559,-1.827 -7.962,-2.74 -13.207,-2.74c-5.246,0 -9.649,0.972 -13.208,2.915c-3.56,1.944 -6.452,4.567 -8.676,7.869c-2.225,3.302 -3.818,7.13 -4.778,11.486c-0.96,4.356 -1.44,8.969 -1.44,13.84c0,5.339 0.445,10.245 1.335,14.718c0.89,4.473 2.389,8.349 4.496,11.627c2.108,3.279 4.93,5.82 8.466,7.623c3.536,1.803 7.974,2.705 13.313,2.705c5.292,0 9.742,-0.984 13.348,-2.951c3.606,-1.967 6.51,-4.625 8.711,-7.974c2.202,-3.349 3.771,-7.236 4.707,-11.662c0.937,-4.426 1.406,-9.098 1.406,-14.016Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M534.723,179.492c0,0.375 -0.096,0.703 -0.289,0.984c-0.193,0.281 -0.531,0.503 -1.013,0.667c-0.483,0.164 -1.098,0.304 -1.846,0.421c-0.747,0.118 -1.724,0.176 -2.93,0.176c-1.109,0 -2.062,-0.058 -2.858,-0.176c-0.796,-0.117 -1.423,-0.257 -1.881,-0.421c-0.459,-0.164 -0.784,-0.386 -0.977,-0.667c-0.193,-0.281 -0.289,-0.609 -0.289,-0.984l0,-79.176l-0.141,0l-32.036,79.527c-0.14,0.328 -0.339,0.609 -0.597,0.843c-0.257,0.234 -0.632,0.434 -1.124,0.597c-0.492,0.164 -1.077,0.281 -1.756,0.352c-0.679,0.07 -1.487,0.105 -2.424,0.105c-0.984,0 -1.827,-0.047 -2.529,-0.14c-0.703,-0.094 -1.288,-0.223 -1.756,-0.387c-0.469,-0.164 -0.832,-0.363 -1.089,-0.597c-0.258,-0.234 -0.434,-0.492 -0.527,-0.773l-30.631,-79.527l-0.07,0l0,79.176c0,0.375 -0.097,0.703 -0.289,0.984c-0.193,0.281 -0.531,0.503 -1.014,0.667c-0.482,0.164 -1.109,0.304 -1.881,0.421c-0.772,0.118 -1.761,0.176 -2.967,0.176c-1.157,0 -2.122,-0.058 -2.894,-0.176c-0.772,-0.117 -1.387,-0.257 -1.845,-0.421c-0.459,-0.164 -0.772,-0.386 -0.941,-0.667c-0.169,-0.281 -0.253,-0.609 -0.253,-0.984l0,-83.602c0,-1.967 0.523,-3.372 1.569,-4.215c1.046,-0.843 2.212,-1.265 3.496,-1.265l7.419,0c1.522,0 2.853,0.141 3.995,0.422c1.142,0.281 2.14,0.726 2.996,1.335c0.856,0.608 1.569,1.381 2.14,2.318c0.571,0.937 1.07,2.037 1.499,3.302l25.994,65.828l0.351,0l27.047,-65.617c0.524,-1.405 1.095,-2.6 1.713,-3.583c0.619,-0.984 1.297,-1.768 2.035,-2.354c0.738,-0.585 1.558,-1.007 2.462,-1.264c0.904,-0.258 1.951,-0.387 3.141,-0.387l7.779,0c0.715,0 1.393,0.106 2.035,0.316c0.642,0.211 1.189,0.539 1.642,0.984c0.452,0.445 0.821,1.007 1.106,1.686c0.285,0.679 0.428,1.51 0.428,2.494l0,83.602Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M618.185,179.351c0,0.375 -0.082,0.715 -0.246,1.019c-0.164,0.305 -0.48,0.55 -0.949,0.738c-0.468,0.187 -1.1,0.339 -1.896,0.456c-0.797,0.118 -1.827,0.176 -3.092,0.176c-1.639,0 -2.974,-0.07 -4.004,-0.211c-1.031,-0.14 -1.803,-0.398 -2.318,-0.772c-0.516,-0.375 -0.937,-0.797 -1.265,-1.265l-33.441,-45.454l0,45.454c0,0.328 -0.094,0.644 -0.281,0.948c-0.187,0.305 -0.515,0.539 -0.983,0.703c-0.469,0.164 -1.089,0.304 -1.862,0.421c-0.773,0.118 -1.745,0.176 -2.916,0.176c-1.124,0 -2.084,-0.058 -2.88,-0.176c-0.796,-0.117 -1.429,-0.257 -1.897,-0.421c-0.468,-0.164 -0.796,-0.398 -0.983,-0.703c-0.188,-0.304 -0.282,-0.62 -0.282,-0.948l0,-87.255c0,-0.375 0.094,-0.703 0.282,-0.984c0.187,-0.281 0.515,-0.503 0.983,-0.667c0.468,-0.164 1.101,-0.305 1.897,-0.422c0.796,-0.117 1.756,-0.175 2.88,-0.175c1.171,0 2.143,0.058 2.916,0.175c0.773,0.117 1.393,0.258 1.862,0.422c0.468,0.164 0.796,0.386 0.983,0.667c0.187,0.281 0.281,0.609 0.281,0.984l0,40.396l32.176,-40.396c0.281,-0.422 0.609,-0.773 0.984,-1.054c0.375,-0.281 0.831,-0.504 1.37,-0.667c0.538,-0.164 1.194,-0.293 1.967,-0.387c0.773,-0.094 1.768,-0.14 2.986,-0.14c1.218,0 2.201,0.058 2.95,0.175c0.75,0.117 1.347,0.27 1.792,0.457c0.445,0.187 0.749,0.421 0.913,0.702c0.164,0.282 0.246,0.586 0.246,0.914c0,0.609 -0.152,1.218 -0.457,1.826c-0.304,0.609 -0.878,1.452 -1.721,2.53l-30.139,36.04l32.458,43.136c0.796,1.217 1.276,2.049 1.44,2.494c0.164,0.444 0.246,0.807 0.246,1.088Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M713.941,95.609c0,0.89 -0.047,1.663 -0.141,2.318c-0.094,0.656 -0.258,1.183 -0.492,1.581c-0.234,0.398 -0.503,0.691 -0.808,0.878c-0.304,0.188 -0.62,0.281 -0.948,0.281l-33.3,0l0,30.912l31.473,0c0.328,0 0.644,0.082 0.949,0.246c0.304,0.164 0.574,0.433 0.808,0.808c0.234,0.374 0.398,0.878 0.491,1.51c0.094,0.632 0.141,1.44 0.141,2.424c0,0.89 -0.047,1.651 -0.141,2.283c-0.093,0.632 -0.257,1.148 -0.491,1.546c-0.234,0.398 -0.504,0.702 -0.808,0.913c-0.305,0.211 -0.621,0.316 -0.949,0.316l-31.473,0l0,37.867c0,0.328 -0.094,0.644 -0.281,0.948c-0.188,0.305 -0.516,0.539 -0.984,0.703c-0.468,0.164 -1.077,0.304 -1.826,0.421c-0.75,0.118 -1.733,0.176 -2.951,0.176c-1.124,0 -2.084,-0.058 -2.881,-0.176c-0.796,-0.117 -1.428,-0.257 -1.896,-0.421c-0.469,-0.164 -0.797,-0.398 -0.984,-0.703c-0.187,-0.304 -0.281,-0.62 -0.281,-0.948l0,-84.164c0,-1.827 0.48,-3.103 1.44,-3.829c0.96,-0.726 1.979,-1.089 3.056,-1.089l40.888,0c0.328,0 0.644,0.094 0.948,0.281c0.305,0.188 0.574,0.492 0.808,0.914c0.234,0.421 0.398,0.971 0.492,1.65c0.094,0.68 0.141,1.464 0.141,2.354Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M742.534,179.562c0,0.375 -0.094,0.691 -0.281,0.949c-0.187,0.257 -0.492,0.48 -0.913,0.667c-0.422,0.187 -1.007,0.328 -1.757,0.422c-0.749,0.093 -1.709,0.14 -2.88,0.14c-1.124,0 -2.061,-0.047 -2.81,-0.14c-0.75,-0.094 -1.347,-0.235 -1.792,-0.422c-0.445,-0.187 -0.749,-0.41 -0.913,-0.667c-0.164,-0.258 -0.246,-0.574 -0.246,-0.949l0,-63.228c0,-0.328 0.082,-0.632 0.246,-0.913c0.164,-0.281 0.468,-0.516 0.913,-0.703c0.445,-0.187 1.042,-0.328 1.792,-0.422c0.749,-0.093 1.686,-0.14 2.81,-0.14c1.171,0 2.131,0.047 2.88,0.14c0.75,0.094 1.335,0.235 1.757,0.422c0.421,0.187 0.726,0.422 0.913,0.703c0.187,0.281 0.281,0.585 0.281,0.913l0,63.228Zm1.335,-84.585c0,2.716 -0.515,4.566 -1.546,5.55c-1.03,0.983 -2.927,1.475 -5.69,1.475c-2.717,0 -4.579,-0.48 -5.586,-1.44c-1.007,-0.96 -1.51,-2.775 -1.51,-5.445c0,-2.716 0.515,-4.566 1.546,-5.55c1.03,-0.983 2.927,-1.475 5.69,-1.475c2.717,0 4.578,0.48 5.585,1.44c1.007,0.96 1.511,2.775 1.511,5.445Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M800.915,120.479c0,1.03 -0.024,1.897 -0.07,2.599c-0.047,0.703 -0.141,1.253 -0.281,1.651c-0.141,0.398 -0.317,0.703 -0.527,0.913c-0.211,0.211 -0.504,0.317 -0.879,0.317c-0.374,0 -0.831,-0.106 -1.37,-0.317c-0.538,-0.21 -1.147,-0.421 -1.826,-0.632c-0.679,-0.211 -1.44,-0.41 -2.283,-0.597c-0.843,-0.187 -1.757,-0.281 -2.74,-0.281c-1.171,0 -2.319,0.234 -3.443,0.703c-1.124,0.468 -2.306,1.241 -3.548,2.318c-1.241,1.077 -2.54,2.506 -3.899,4.285c-1.358,1.78 -2.857,3.958 -4.496,6.534l0,41.59c0,0.375 -0.094,0.691 -0.281,0.949c-0.187,0.257 -0.492,0.48 -0.913,0.667c-0.422,0.187 -1.007,0.328 -1.756,0.422c-0.75,0.093 -1.71,0.14 -2.881,0.14c-1.124,0 -2.061,-0.047 -2.81,-0.14c-0.749,-0.094 -1.347,-0.235 -1.792,-0.422c-0.444,-0.187 -0.749,-0.41 -0.913,-0.667c-0.164,-0.258 -0.246,-0.574 -0.246,-0.949l0,-63.228c0,-0.375 0.071,-0.691 0.211,-0.949c0.141,-0.257 0.422,-0.491 0.843,-0.702c0.422,-0.211 0.96,-0.351 1.616,-0.422c0.656,-0.07 1.522,-0.105 2.599,-0.105c1.031,0 1.885,0.035 2.565,0.105c0.679,0.071 1.206,0.211 1.58,0.422c0.375,0.211 0.644,0.445 0.808,0.702c0.164,0.258 0.246,0.574 0.246,0.949l0,9.203c1.733,-2.529 3.361,-4.59 4.883,-6.182c1.522,-1.593 2.962,-2.846 4.32,-3.759c1.359,-0.913 2.705,-1.545 4.04,-1.897c1.335,-0.351 2.681,-0.527 4.04,-0.527c0.608,0 1.299,0.036 2.072,0.106c0.773,0.07 1.581,0.199 2.424,0.386c0.843,0.188 1.604,0.398 2.283,0.632c0.679,0.235 1.159,0.469 1.44,0.703c0.281,0.234 0.469,0.457 0.562,0.667c0.094,0.211 0.176,0.48 0.246,0.808c0.07,0.328 0.117,0.808 0.141,1.441c0.023,0.632 0.035,1.487 0.035,2.564Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M907.911,179.562c0,0.375 -0.093,0.691 -0.281,0.949c-0.187,0.257 -0.491,0.48 -0.913,0.667c-0.422,0.187 -1.007,0.328 -1.756,0.422c-0.75,0.093 -1.686,0.14 -2.811,0.14c-1.17,0 -2.131,-0.047 -2.88,-0.14c-0.749,-0.094 -1.346,-0.235 -1.791,-0.422c-0.445,-0.187 -0.761,-0.41 -0.949,-0.667c-0.187,-0.258 -0.281,-0.574 -0.281,-0.949l0,-38.429c0,-2.669 -0.234,-5.105 -0.702,-7.306c-0.469,-2.201 -1.218,-4.098 -2.248,-5.691c-1.031,-1.592 -2.342,-2.81 -3.935,-3.653c-1.592,-0.843 -3.466,-1.264 -5.62,-1.264c-2.67,0 -5.351,1.03 -8.044,3.091c-2.693,2.061 -5.655,5.082 -8.887,9.063l0,44.189c0,0.375 -0.094,0.691 -0.281,0.949c-0.188,0.257 -0.504,0.48 -0.949,0.667c-0.445,0.187 -1.042,0.328 -1.791,0.422c-0.749,0.093 -1.686,0.14 -2.81,0.14c-1.077,0 -2.002,-0.047 -2.775,-0.14c-0.773,-0.094 -1.382,-0.235 -1.827,-0.422c-0.445,-0.187 -0.749,-0.41 -0.913,-0.667c-0.164,-0.258 -0.246,-0.574 -0.246,-0.949l0,-38.429c0,-2.669 -0.258,-5.105 -0.773,-7.306c-0.515,-2.201 -1.288,-4.098 -2.318,-5.691c-1.031,-1.592 -2.33,-2.81 -3.899,-3.653c-1.569,-0.843 -3.431,-1.264 -5.585,-1.264c-2.67,0 -5.363,1.03 -8.08,3.091c-2.716,2.061 -5.667,5.082 -8.852,9.063l0,44.189c0,0.375 -0.093,0.691 -0.281,0.949c-0.187,0.257 -0.491,0.48 -0.913,0.667c-0.421,0.187 -1.007,0.328 -1.756,0.422c-0.75,0.093 -1.71,0.14 -2.881,0.14c-1.124,0 -2.06,-0.047 -2.81,-0.14c-0.749,-0.094 -1.346,-0.235 -1.791,-0.422c-0.445,-0.187 -0.75,-0.41 -0.914,-0.667c-0.164,-0.258 -0.246,-0.574 -0.246,-0.949l0,-63.228c0,-0.375 0.071,-0.691 0.211,-0.949c0.141,-0.257 0.422,-0.491 0.843,-0.702c0.422,-0.211 0.96,-0.351 1.616,-0.422c0.656,-0.07 1.522,-0.105 2.6,-0.105c1.03,0 1.885,0.035 2.564,0.105c0.679,0.071 1.206,0.211 1.581,0.422c0.374,0.211 0.643,0.445 0.807,0.702c0.164,0.258 0.246,0.574 0.246,0.949l0,8.36c3.56,-3.981 7.014,-6.897 10.363,-8.747c3.349,-1.85 6.732,-2.775 10.151,-2.775c2.623,0 4.977,0.305 7.061,0.914c2.084,0.609 3.922,1.463 5.515,2.564c1.592,1.101 2.951,2.412 4.075,3.934c1.124,1.522 2.06,3.22 2.81,5.094c2.107,-2.295 4.11,-4.239 6.006,-5.831c1.897,-1.593 3.724,-2.881 5.48,-3.864c1.757,-0.984 3.466,-1.698 5.129,-2.143c1.662,-0.445 3.337,-0.668 5.023,-0.668c4.075,0 7.494,0.715 10.257,2.143c2.763,1.429 5,3.337 6.709,5.726c1.71,2.388 2.927,5.187 3.653,8.395c0.726,3.208 1.089,6.592 1.089,10.152l0,39.974Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M1016.52,116.193c0,0.328 -0.047,0.726 -0.141,1.195c-0.094,0.468 -0.257,1.053 -0.492,1.756l-18.617,60.067c-0.14,0.515 -0.363,0.937 -0.667,1.265c-0.305,0.327 -0.726,0.585 -1.265,0.772c-0.538,0.188 -1.276,0.316 -2.213,0.387c-0.937,0.07 -2.107,0.105 -3.513,0.105c-1.451,0 -2.669,-0.047 -3.653,-0.14c-0.983,-0.094 -1.768,-0.235 -2.353,-0.422c-0.586,-0.187 -1.019,-0.445 -1.3,-0.773c-0.281,-0.328 -0.492,-0.726 -0.632,-1.194l-13.278,-45.876l-0.141,-0.632l-0.14,0.632l-12.295,45.876c-0.14,0.515 -0.363,0.937 -0.667,1.265c-0.304,0.327 -0.761,0.585 -1.37,0.772c-0.609,0.188 -1.393,0.316 -2.353,0.387c-0.961,0.07 -2.143,0.105 -3.548,0.105c-1.452,0 -2.635,-0.047 -3.548,-0.14c-0.913,-0.094 -1.663,-0.235 -2.248,-0.422c-0.586,-0.187 -1.019,-0.445 -1.3,-0.773c-0.281,-0.328 -0.492,-0.726 -0.632,-1.194l-18.477,-60.067c-0.234,-0.703 -0.398,-1.288 -0.492,-1.756c-0.093,-0.469 -0.14,-0.867 -0.14,-1.195c0,-0.421 0.093,-0.761 0.281,-1.018c0.187,-0.258 0.503,-0.469 0.948,-0.633c0.445,-0.164 1.042,-0.269 1.792,-0.316c0.749,-0.047 1.662,-0.07 2.74,-0.07c1.311,0 2.365,0.035 3.161,0.105c0.796,0.071 1.405,0.188 1.827,0.352c0.421,0.164 0.726,0.398 0.913,0.702c0.187,0.305 0.351,0.668 0.492,1.089l15.245,52.128l0.14,0.633l0.141,-0.633l13.98,-52.128c0.094,-0.421 0.246,-0.784 0.457,-1.089c0.211,-0.304 0.527,-0.538 0.948,-0.702c0.422,-0.164 0.996,-0.281 1.722,-0.352c0.726,-0.07 1.674,-0.105 2.845,-0.105c1.124,0 2.049,0.035 2.775,0.105c0.726,0.071 1.3,0.188 1.721,0.352c0.422,0.164 0.726,0.386 0.913,0.667c0.188,0.281 0.328,0.609 0.422,0.984l15.104,52.268l0.141,0.633l0.07,-0.633l15.035,-52.128c0.093,-0.421 0.245,-0.784 0.456,-1.089c0.211,-0.304 0.539,-0.538 0.984,-0.702c0.445,-0.164 1.054,-0.281 1.826,-0.352c0.773,-0.07 1.768,-0.105 2.986,-0.105c1.124,0 2.026,0.023 2.705,0.07c0.679,0.047 1.218,0.164 1.616,0.351c0.398,0.188 0.679,0.399 0.843,0.633c0.164,0.234 0.246,0.562 0.246,0.983Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M1076.94,179.632c0,0.563 -0.187,0.984 -0.562,1.265c-0.375,0.281 -0.89,0.492 -1.546,0.632c-0.655,0.141 -1.616,0.211 -2.88,0.211c-1.218,0 -2.19,-0.07 -2.916,-0.211c-0.726,-0.14 -1.252,-0.351 -1.58,-0.632c-0.328,-0.281 -0.492,-0.702 -0.492,-1.265l0,-6.322c-2.763,2.95 -5.843,5.245 -9.238,6.885c-3.396,1.639 -6.991,2.458 -10.784,2.458c-3.326,0 -6.335,-0.433 -9.028,-1.299c-2.693,-0.867 -4.988,-2.12 -6.885,-3.759c-1.897,-1.639 -3.372,-3.653 -4.426,-6.042c-1.054,-2.388 -1.581,-5.105 -1.581,-8.149c0,-3.56 0.726,-6.651 2.178,-9.274c1.452,-2.622 3.536,-4.8 6.253,-6.533c2.716,-1.733 6.042,-3.033 9.976,-3.899c3.934,-0.867 8.36,-1.3 13.278,-1.3l8.711,0l0,-4.918c0,-2.435 -0.257,-4.59 -0.772,-6.463c-0.516,-1.874 -1.347,-3.431 -2.495,-4.672c-1.147,-1.241 -2.634,-2.178 -4.461,-2.81c-1.826,-0.632 -4.074,-0.949 -6.744,-0.949c-2.857,0 -5.421,0.34 -7.693,1.019c-2.271,0.679 -4.262,1.429 -5.971,2.248c-1.71,0.82 -3.138,1.569 -4.286,2.248c-1.147,0.679 -2.002,1.019 -2.564,1.019c-0.375,0 -0.703,-0.094 -0.984,-0.281c-0.281,-0.187 -0.527,-0.468 -0.737,-0.843c-0.211,-0.375 -0.363,-0.855 -0.457,-1.44c-0.094,-0.586 -0.14,-1.23 -0.14,-1.932c0,-1.171 0.081,-2.096 0.245,-2.775c0.164,-0.679 0.562,-1.323 1.195,-1.932c0.632,-0.609 1.721,-1.323 3.267,-2.143c1.545,-0.82 3.325,-1.569 5.339,-2.248c2.014,-0.679 4.215,-1.241 6.604,-1.686c2.388,-0.445 4.8,-0.668 7.236,-0.668c4.543,0 8.407,0.516 11.592,1.546c3.185,1.03 5.761,2.541 7.728,4.531c1.967,1.991 3.395,4.461 4.285,7.412c0.89,2.951 1.335,6.393 1.335,10.327l0,42.644Zm-11.522,-28.874l-9.905,0c-3.185,0 -5.949,0.269 -8.29,0.808c-2.342,0.539 -4.286,1.335 -5.832,2.389c-1.545,1.054 -2.681,2.318 -3.407,3.793c-0.726,1.476 -1.089,3.174 -1.089,5.094c0,3.278 1.042,5.889 3.127,7.833c2.084,1.944 4.999,2.916 8.746,2.916c3.044,0 5.866,-0.773 8.466,-2.319c2.599,-1.545 5.327,-3.91 8.184,-7.095l0,-13.419Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M1135.18,120.479c0,1.03 -0.023,1.897 -0.07,2.599c-0.047,0.703 -0.14,1.253 -0.281,1.651c-0.14,0.398 -0.316,0.703 -0.527,0.913c-0.211,0.211 -0.503,0.317 -0.878,0.317c-0.375,0 -0.831,-0.106 -1.37,-0.317c-0.539,-0.21 -1.147,-0.421 -1.827,-0.632c-0.679,-0.211 -1.44,-0.41 -2.283,-0.597c-0.843,-0.187 -1.756,-0.281 -2.74,-0.281c-1.171,0 -2.318,0.234 -3.442,0.703c-1.124,0.468 -2.307,1.241 -3.548,2.318c-1.241,1.077 -2.541,2.506 -3.899,4.285c-1.358,1.78 -2.857,3.958 -4.496,6.534l0,41.59c0,0.375 -0.094,0.691 -0.281,0.949c-0.188,0.257 -0.492,0.48 -0.914,0.667c-0.421,0.187 -1.007,0.328 -1.756,0.422c-0.749,0.093 -1.709,0.14 -2.88,0.14c-1.124,0 -2.061,-0.047 -2.811,-0.14c-0.749,-0.094 -1.346,-0.235 -1.791,-0.422c-0.445,-0.187 -0.749,-0.41 -0.913,-0.667c-0.164,-0.258 -0.246,-0.574 -0.246,-0.949l0,-63.228c0,-0.375 0.07,-0.691 0.211,-0.949c0.14,-0.257 0.421,-0.491 0.843,-0.702c0.421,-0.211 0.96,-0.351 1.615,-0.422c0.656,-0.07 1.523,-0.105 2.6,-0.105c1.03,0 1.885,0.035 2.564,0.105c0.679,0.071 1.206,0.211 1.581,0.422c0.375,0.211 0.644,0.445 0.808,0.702c0.164,0.258 0.246,0.574 0.246,0.949l0,9.203c1.733,-2.529 3.36,-4.59 4.882,-6.182c1.522,-1.593 2.963,-2.846 4.321,-3.759c1.358,-0.913 2.705,-1.545 4.039,-1.897c1.335,-0.351 2.682,-0.527 4.04,-0.527c0.609,0 1.3,0.036 2.073,0.106c0.772,0.07 1.58,0.199 2.423,0.386c0.843,0.188 1.604,0.398 2.284,0.632c0.679,0.235 1.159,0.469 1.44,0.703c0.281,0.234 0.468,0.457 0.562,0.667c0.093,0.211 0.175,0.48 0.246,0.808c0.07,0.328 0.117,0.808 0.14,1.441c0.024,0.632 0.035,1.487 0.035,2.564Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M1200.45,145.208c0,1.827 -0.459,3.126 -1.376,3.899c-0.917,0.773 -1.964,1.159 -3.141,1.159l-41.64,0c0,3.513 0.353,6.675 1.059,9.485c0.706,2.81 1.882,5.222 3.53,7.236c1.647,2.014 3.789,3.559 6.424,4.637c2.636,1.077 5.86,1.615 9.672,1.615c3.012,0 5.694,-0.245 8.047,-0.737c2.354,-0.492 4.389,-1.042 6.107,-1.651c1.718,-0.609 3.13,-1.159 4.236,-1.651c1.106,-0.492 1.942,-0.738 2.507,-0.738c0.329,0 0.623,0.082 0.882,0.246c0.259,0.164 0.458,0.41 0.6,0.738c0.141,0.328 0.247,0.784 0.317,1.37c0.071,0.585 0.106,1.299 0.106,2.142c0,0.609 -0.023,1.136 -0.07,1.581c-0.047,0.445 -0.105,0.843 -0.175,1.194c-0.071,0.352 -0.188,0.668 -0.352,0.949c-0.164,0.281 -0.374,0.55 -0.632,0.808c-0.258,0.257 -1.019,0.679 -2.283,1.264c-1.265,0.586 -2.904,1.16 -4.918,1.722c-2.014,0.562 -4.344,1.065 -6.99,1.51c-2.647,0.445 -5.468,0.667 -8.466,0.667c-5.199,0 -9.753,-0.726 -13.664,-2.177c-3.911,-1.452 -7.201,-3.607 -9.871,-6.464c-2.67,-2.857 -4.683,-6.44 -6.042,-10.749c-1.358,-4.309 -2.037,-9.32 -2.037,-15.034c0,-5.433 0.702,-10.316 2.108,-14.648c1.405,-4.332 3.43,-8.009 6.077,-11.03c2.646,-3.021 5.842,-5.339 9.589,-6.955c3.747,-1.616 7.939,-2.424 12.576,-2.424c4.964,0 9.191,0.797 12.68,2.389c3.49,1.592 6.358,3.735 8.606,6.428c2.249,2.693 3.9,5.855 4.953,9.485c1.054,3.629 1.581,7.505 1.581,11.627l0,2.107Zm-11.662,-3.442c0.14,-6.089 -1.214,-10.866 -4.065,-14.332c-2.85,-3.466 -7.079,-5.199 -12.687,-5.199c-2.875,0 -5.396,0.539 -7.564,1.616c-2.167,1.077 -3.982,2.506 -5.443,4.285c-1.461,1.78 -2.592,3.853 -3.393,6.218c-0.801,2.365 -1.248,4.836 -1.343,7.412l34.495,0Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M379.752,276.089c0,0.493 -0.016,0.924 -0.047,1.294c-0.03,0.369 -0.084,0.693 -0.161,0.97c-0.077,0.277 -0.177,0.524 -0.301,0.739c-0.123,0.216 -0.338,0.478 -0.646,0.786c-0.308,0.308 -0.955,0.778 -1.941,1.409c-0.986,0.631 -2.21,1.247 -3.673,1.848c-1.463,0.601 -3.142,1.109 -5.036,1.525c-1.894,0.416 -3.966,0.623 -6.214,0.623c-3.881,0 -7.385,-0.646 -10.511,-1.94c-3.127,-1.294 -5.791,-3.203 -7.993,-5.729c-2.203,-2.526 -3.897,-5.645 -5.083,-9.356c-1.185,-3.712 -1.778,-7.985 -1.778,-12.821c0,-4.959 0.639,-9.379 1.917,-13.26c1.278,-3.881 3.072,-7.169 5.383,-9.865c2.31,-2.695 5.074,-4.751 8.293,-6.168c3.219,-1.417 6.784,-2.125 10.696,-2.125c1.725,0 3.403,0.162 5.036,0.485c1.632,0.324 3.142,0.732 4.528,1.225c1.386,0.492 2.618,1.062 3.696,1.709c1.078,0.647 1.825,1.178 2.241,1.594c0.416,0.416 0.685,0.732 0.808,0.947c0.123,0.216 0.224,0.47 0.301,0.763c0.077,0.292 0.138,0.639 0.184,1.039c0.047,0.4 0.07,0.878 0.07,1.432c0,0.616 -0.031,1.14 -0.093,1.571c-0.062,0.431 -0.155,0.793 -0.279,1.086c-0.124,0.293 -0.271,0.508 -0.441,0.647c-0.171,0.138 -0.38,0.208 -0.628,0.208c-0.433,0 -1.036,-0.301 -1.811,-0.901c-0.774,-0.601 -1.773,-1.263 -2.996,-1.987c-1.223,-0.724 -2.71,-1.386 -4.459,-1.987c-1.749,-0.6 -3.847,-0.901 -6.294,-0.901c-2.663,0 -5.086,0.532 -7.269,1.594c-2.183,1.063 -4.049,2.626 -5.597,4.69c-1.549,2.064 -2.748,4.582 -3.6,7.554c-0.852,2.972 -1.278,6.368 -1.278,10.188c0,3.788 0.411,7.138 1.231,10.049c0.821,2.91 1.998,5.344 3.53,7.3c1.533,1.956 3.415,3.434 5.644,4.435c2.23,1.001 4.753,1.502 7.571,1.502c2.384,0 4.467,-0.293 6.247,-0.878c1.781,-0.585 3.298,-1.24 4.552,-1.964c1.254,-0.724 2.283,-1.378 3.089,-1.963c0.805,-0.586 1.44,-0.878 1.904,-0.878c0.217,0 0.403,0.046 0.558,0.138c0.154,0.093 0.278,0.27 0.371,0.532c0.093,0.262 0.163,0.623 0.209,1.085c0.046,0.462 0.07,1.048 0.07,1.756Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M428.079,262.136c0,3.388 -0.446,6.507 -1.339,9.356c-0.894,2.849 -2.226,5.306 -3.997,7.369c-1.771,2.064 -3.989,3.673 -6.653,4.828c-2.664,1.156 -5.752,1.733 -9.264,1.733c-3.419,0 -6.399,-0.508 -8.94,-1.525c-2.541,-1.016 -4.659,-2.495 -6.353,-4.435c-1.694,-1.941 -2.957,-4.297 -3.788,-7.069c-0.832,-2.772 -1.248,-5.914 -1.248,-9.425c0,-3.388 0.439,-6.507 1.317,-9.356c0.878,-2.849 2.202,-5.306 3.973,-7.37c1.772,-2.063 3.982,-3.665 6.63,-4.805c2.649,-1.139 5.745,-1.709 9.287,-1.709c3.419,0 6.399,0.508 8.94,1.525c2.541,1.016 4.659,2.494 6.353,4.435c1.694,1.94 2.965,4.297 3.812,7.069c0.847,2.772 1.27,5.898 1.27,9.379Zm-7.9,0.508c0,-2.248 -0.21,-4.374 -0.63,-6.376c-0.419,-2.002 -1.111,-3.757 -2.074,-5.267c-0.964,-1.509 -2.269,-2.703 -3.917,-3.58c-1.647,-0.878 -3.698,-1.317 -6.153,-1.317c-2.269,0 -4.219,0.4 -5.851,1.201c-1.632,0.801 -2.976,1.933 -4.033,3.396c-1.056,1.463 -1.841,3.196 -2.354,5.198c-0.513,2.002 -0.769,4.189 -0.769,6.56c0,2.28 0.21,4.42 0.629,6.423c0.42,2.002 1.119,3.75 2.098,5.244c0.979,1.493 2.292,2.679 3.939,3.557c1.648,0.878 3.699,1.317 6.154,1.317c2.238,0 4.181,-0.401 5.828,-1.201c1.647,-0.801 2.999,-1.925 4.056,-3.373c1.056,-1.448 1.833,-3.173 2.331,-5.175c0.497,-2.002 0.746,-4.204 0.746,-6.607Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M500.987,283.389c0,0.247 -0.062,0.454 -0.185,0.624c-0.123,0.169 -0.323,0.316 -0.601,0.439c-0.277,0.123 -0.662,0.215 -1.155,0.277c-0.493,0.062 -1.109,0.092 -1.848,0.092c-0.77,0 -1.401,-0.03 -1.894,-0.092c-0.493,-0.062 -0.886,-0.154 -1.178,-0.277c-0.293,-0.123 -0.501,-0.27 -0.624,-0.439c-0.123,-0.17 -0.185,-0.377 -0.185,-0.624l0,-25.273c0,-1.755 -0.154,-3.357 -0.462,-4.805c-0.308,-1.447 -0.801,-2.695 -1.478,-3.742c-0.678,-1.047 -1.54,-1.848 -2.588,-2.403c-1.047,-0.554 -2.279,-0.831 -3.696,-0.831c-1.756,0 -3.519,0.677 -5.29,2.033c-1.771,1.355 -3.719,3.342 -5.845,5.96l0,29.061c0,0.247 -0.061,0.454 -0.184,0.624c-0.124,0.169 -0.332,0.316 -0.624,0.439c-0.293,0.123 -0.685,0.215 -1.178,0.277c-0.493,0.062 -1.109,0.092 -1.848,0.092c-0.709,0 -1.317,-0.03 -1.825,-0.092c-0.509,-0.062 -0.909,-0.154 -1.202,-0.277c-0.292,-0.123 -0.492,-0.27 -0.6,-0.439c-0.108,-0.17 -0.162,-0.377 -0.162,-0.624l0,-25.273c0,-1.755 -0.169,-3.357 -0.508,-4.805c-0.339,-1.447 -0.847,-2.695 -1.525,-3.742c-0.678,-1.047 -1.532,-1.848 -2.564,-2.403c-1.032,-0.554 -2.256,-0.831 -3.673,-0.831c-1.756,0 -3.527,0.677 -5.314,2.033c-1.786,1.355 -3.727,3.342 -5.821,5.96l0,29.061c0,0.247 -0.062,0.454 -0.185,0.624c-0.123,0.169 -0.323,0.316 -0.6,0.439c-0.278,0.123 -0.663,0.215 -1.156,0.277c-0.492,0.062 -1.124,0.092 -1.894,0.092c-0.739,0 -1.355,-0.03 -1.848,-0.092c-0.493,-0.062 -0.885,-0.154 -1.178,-0.277c-0.293,-0.123 -0.493,-0.27 -0.601,-0.439c-0.108,-0.17 -0.161,-0.377 -0.161,-0.624l0,-41.582c0,-0.246 0.046,-0.454 0.138,-0.624c0.093,-0.169 0.277,-0.323 0.555,-0.462c0.277,-0.138 0.631,-0.231 1.062,-0.277c0.432,-0.046 1.001,-0.069 1.71,-0.069c0.677,0 1.24,0.023 1.686,0.069c0.447,0.046 0.793,0.139 1.04,0.277c0.246,0.139 0.423,0.293 0.531,0.462c0.108,0.17 0.162,0.378 0.162,0.624l0,5.498c2.341,-2.618 4.612,-4.535 6.815,-5.752c2.202,-1.217 4.427,-1.825 6.676,-1.825c1.725,0 3.273,0.2 4.643,0.601c1.371,0.4 2.58,0.962 3.627,1.686c1.047,0.724 1.941,1.586 2.68,2.587c0.739,1.001 1.355,2.118 1.848,3.35c1.386,-1.509 2.703,-2.788 3.95,-3.835c1.248,-1.047 2.449,-1.894 3.604,-2.541c1.155,-0.647 2.279,-1.117 3.373,-1.409c1.093,-0.293 2.194,-0.439 3.303,-0.439c2.68,0 4.929,0.47 6.746,1.409c1.817,0.939 3.288,2.195 4.412,3.766c1.124,1.57 1.925,3.411 2.403,5.521c0.477,2.11 0.716,4.335 0.716,6.676l0,26.289Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M576.574,283.389c0,0.247 -0.062,0.454 -0.185,0.624c-0.123,0.169 -0.323,0.316 -0.601,0.439c-0.277,0.123 -0.662,0.215 -1.155,0.277c-0.492,0.062 -1.108,0.092 -1.848,0.092c-0.77,0 -1.401,-0.03 -1.894,-0.092c-0.493,-0.062 -0.886,-0.154 -1.178,-0.277c-0.293,-0.123 -0.501,-0.27 -0.624,-0.439c-0.123,-0.17 -0.185,-0.377 -0.185,-0.624l0,-25.273c0,-1.755 -0.154,-3.357 -0.462,-4.805c-0.308,-1.447 -0.801,-2.695 -1.478,-3.742c-0.678,-1.047 -1.54,-1.848 -2.588,-2.403c-1.047,-0.554 -2.279,-0.831 -3.696,-0.831c-1.755,0 -3.519,0.677 -5.29,2.033c-1.771,1.355 -3.719,3.342 -5.844,5.96l0,29.061c0,0.247 -0.062,0.454 -0.185,0.624c-0.124,0.169 -0.331,0.316 -0.624,0.439c-0.293,0.123 -0.685,0.215 -1.178,0.277c-0.493,0.062 -1.109,0.092 -1.848,0.092c-0.709,0 -1.317,-0.03 -1.825,-0.092c-0.509,-0.062 -0.909,-0.154 -1.202,-0.277c-0.292,-0.123 -0.492,-0.27 -0.6,-0.439c-0.108,-0.17 -0.162,-0.377 -0.162,-0.624l0,-25.273c0,-1.755 -0.169,-3.357 -0.508,-4.805c-0.339,-1.447 -0.847,-2.695 -1.525,-3.742c-0.677,-1.047 -1.532,-1.848 -2.564,-2.403c-1.032,-0.554 -2.256,-0.831 -3.673,-0.831c-1.756,0 -3.527,0.677 -5.313,2.033c-1.787,1.355 -3.727,3.342 -5.822,5.96l0,29.061c0,0.247 -0.061,0.454 -0.185,0.624c-0.123,0.169 -0.323,0.316 -0.6,0.439c-0.278,0.123 -0.663,0.215 -1.155,0.277c-0.493,0.062 -1.125,0.092 -1.895,0.092c-0.739,0 -1.355,-0.03 -1.848,-0.092c-0.493,-0.062 -0.885,-0.154 -1.178,-0.277c-0.293,-0.123 -0.493,-0.27 -0.601,-0.439c-0.107,-0.17 -0.161,-0.377 -0.161,-0.624l0,-41.582c0,-0.246 0.046,-0.454 0.138,-0.624c0.093,-0.169 0.278,-0.323 0.555,-0.462c0.277,-0.138 0.631,-0.231 1.062,-0.277c0.432,-0.046 1.001,-0.069 1.71,-0.069c0.678,0 1.24,0.023 1.686,0.069c0.447,0.046 0.793,0.139 1.04,0.277c0.246,0.139 0.423,0.293 0.531,0.462c0.108,0.17 0.162,0.378 0.162,0.624l0,5.498c2.341,-2.618 4.612,-4.535 6.815,-5.752c2.202,-1.217 4.427,-1.825 6.676,-1.825c1.725,0 3.273,0.2 4.643,0.601c1.371,0.4 2.58,0.962 3.627,1.686c1.047,0.724 1.941,1.586 2.68,2.587c0.739,1.001 1.355,2.118 1.848,3.35c1.386,-1.509 2.703,-2.788 3.95,-3.835c1.248,-1.047 2.449,-1.894 3.604,-2.541c1.155,-0.647 2.279,-1.117 3.373,-1.409c1.093,-0.293 2.195,-0.439 3.303,-0.439c2.68,0 4.929,0.47 6.746,1.409c1.817,0.939 3.288,2.195 4.412,3.766c1.125,1.57 1.925,3.411 2.403,5.521c0.477,2.11 0.716,4.335 0.716,6.676l0,26.289Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M626.103,283.389c0,0.247 -0.054,0.454 -0.162,0.624c-0.108,0.169 -0.3,0.316 -0.577,0.439c-0.278,0.123 -0.639,0.215 -1.086,0.277c-0.447,0.062 -0.993,0.092 -1.64,0.092c-0.709,0 -1.286,-0.03 -1.733,-0.092c-0.447,-0.062 -0.801,-0.154 -1.063,-0.277c-0.261,-0.123 -0.438,-0.27 -0.531,-0.439c-0.092,-0.17 -0.138,-0.377 -0.138,-0.624l0,-5.498c-2.372,2.618 -4.713,4.528 -7.023,5.729c-2.31,1.201 -4.651,1.802 -7.023,1.802c-2.772,0 -5.105,-0.462 -7,-1.386c-1.894,-0.924 -3.426,-2.179 -4.597,-3.766c-1.17,-1.586 -2.01,-3.434 -2.518,-5.544c-0.508,-2.11 -0.762,-4.674 -0.762,-7.693l0,-25.226c0,-0.246 0.054,-0.454 0.162,-0.624c0.107,-0.169 0.315,-0.323 0.623,-0.462c0.308,-0.138 0.709,-0.231 1.202,-0.277c0.492,-0.046 1.108,-0.069 1.848,-0.069c0.739,0 1.355,0.023 1.848,0.069c0.493,0.046 0.885,0.139 1.178,0.277c0.292,0.139 0.5,0.293 0.624,0.462c0.123,0.17 0.184,0.378 0.184,0.624l0,24.21c0,2.433 0.178,4.382 0.532,5.845c0.354,1.463 0.893,2.71 1.617,3.742c0.724,1.032 1.64,1.833 2.749,2.403c1.109,0.569 2.402,0.854 3.881,0.854c1.91,0 3.812,-0.677 5.706,-2.033c1.894,-1.355 3.904,-3.342 6.029,-5.96l0,-29.061c0,-0.246 0.054,-0.454 0.162,-0.624c0.108,-0.169 0.316,-0.323 0.624,-0.462c0.308,-0.138 0.7,-0.231 1.178,-0.277c0.477,-0.046 1.101,-0.069 1.871,-0.069c0.739,0 1.355,0.023 1.848,0.069c0.493,0.046 0.878,0.139 1.155,0.277c0.277,0.139 0.485,0.293 0.624,0.462c0.139,0.17 0.208,0.378 0.208,0.624l0,41.582Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M676.001,283.389c0,0.247 -0.061,0.454 -0.184,0.624c-0.124,0.169 -0.324,0.316 -0.601,0.439c-0.277,0.123 -0.662,0.215 -1.155,0.277c-0.493,0.062 -1.109,0.092 -1.848,0.092c-0.77,0 -1.402,-0.03 -1.894,-0.092c-0.493,-0.062 -0.878,-0.154 -1.155,-0.277c-0.278,-0.123 -0.478,-0.27 -0.601,-0.439c-0.123,-0.17 -0.185,-0.377 -0.185,-0.624l0,-24.349c0,-2.371 -0.185,-4.281 -0.554,-5.729c-0.37,-1.447 -0.909,-2.695 -1.617,-3.742c-0.709,-1.047 -1.625,-1.848 -2.749,-2.403c-1.125,-0.554 -2.426,-0.831 -3.905,-0.831c-1.909,0 -3.819,0.677 -5.729,2.033c-1.909,1.355 -3.911,3.342 -6.006,5.96l0,29.061c0,0.247 -0.062,0.454 -0.185,0.624c-0.123,0.169 -0.323,0.316 -0.6,0.439c-0.278,0.123 -0.663,0.215 -1.155,0.277c-0.493,0.062 -1.125,0.092 -1.895,0.092c-0.739,0 -1.355,-0.03 -1.848,-0.092c-0.493,-0.062 -0.885,-0.154 -1.178,-0.277c-0.293,-0.123 -0.493,-0.27 -0.601,-0.439c-0.107,-0.17 -0.161,-0.377 -0.161,-0.624l0,-41.582c0,-0.246 0.046,-0.454 0.138,-0.624c0.093,-0.169 0.277,-0.323 0.555,-0.462c0.277,-0.138 0.631,-0.231 1.062,-0.277c0.432,-0.046 1.001,-0.069 1.71,-0.069c0.677,0 1.24,0.023 1.686,0.069c0.447,0.046 0.793,0.139 1.04,0.277c0.246,0.139 0.423,0.293 0.531,0.462c0.108,0.17 0.162,0.378 0.162,0.624l0,5.498c2.341,-2.618 4.674,-4.535 6.999,-5.752c2.326,-1.217 4.675,-1.825 7.046,-1.825c2.772,0 5.106,0.47 7,1.409c1.894,0.939 3.427,2.195 4.597,3.766c1.171,1.57 2.01,3.411 2.518,5.521c0.508,2.11 0.762,4.643 0.762,7.6l0,25.365Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M697.532,283.389c0,0.247 -0.062,0.454 -0.185,0.624c-0.123,0.169 -0.323,0.316 -0.601,0.439c-0.277,0.123 -0.662,0.215 -1.155,0.277c-0.493,0.062 -1.124,0.092 -1.894,0.092c-0.739,0 -1.355,-0.03 -1.848,-0.092c-0.493,-0.062 -0.886,-0.154 -1.178,-0.277c-0.293,-0.123 -0.493,-0.27 -0.601,-0.439c-0.108,-0.17 -0.162,-0.377 -0.162,-0.624l0,-41.582c0,-0.216 0.054,-0.416 0.162,-0.601c0.108,-0.184 0.308,-0.338 0.601,-0.462c0.292,-0.123 0.685,-0.215 1.178,-0.277c0.493,-0.061 1.109,-0.092 1.848,-0.092c0.77,0 1.401,0.031 1.894,0.092c0.493,0.062 0.878,0.154 1.155,0.277c0.278,0.124 0.478,0.278 0.601,0.462c0.123,0.185 0.185,0.385 0.185,0.601l0,41.582Zm0.878,-55.628c0,1.787 -0.339,3.004 -1.017,3.65c-0.677,0.647 -1.925,0.971 -3.742,0.971c-1.787,0 -3.011,-0.316 -3.673,-0.947c-0.663,-0.632 -0.994,-1.825 -0.994,-3.581c0,-1.787 0.339,-3.003 1.017,-3.65c0.677,-0.647 1.925,-0.97 3.742,-0.97c1.787,0 3.011,0.315 3.673,0.947c0.663,0.631 0.994,1.825 0.994,3.58Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M733.246,280.34c0,0.893 -0.061,1.601 -0.185,2.125c-0.123,0.524 -0.308,0.909 -0.554,1.155c-0.246,0.247 -0.616,0.478 -1.109,0.693c-0.493,0.216 -1.055,0.393 -1.686,0.532c-0.632,0.138 -1.302,0.254 -2.01,0.346c-0.708,0.092 -1.417,0.139 -2.125,0.139c-2.156,0 -4.005,-0.285 -5.545,-0.855c-1.54,-0.57 -2.803,-1.432 -3.788,-2.587c-0.986,-1.155 -1.702,-2.619 -2.149,-4.39c-0.446,-1.771 -0.67,-3.858 -0.67,-6.26l0,-24.303l-5.821,0c-0.462,0 -0.832,-0.246 -1.109,-0.739c-0.277,-0.493 -0.416,-1.293 -0.416,-2.402c0,-0.586 0.039,-1.078 0.116,-1.479c0.077,-0.4 0.177,-0.731 0.3,-0.993c0.123,-0.262 0.285,-0.447 0.485,-0.555c0.2,-0.107 0.424,-0.161 0.67,-0.161l5.775,0l0,-9.888c0,-0.215 0.054,-0.415 0.162,-0.6c0.108,-0.185 0.308,-0.347 0.601,-0.485c0.292,-0.139 0.685,-0.239 1.178,-0.301c0.493,-0.061 1.109,-0.092 1.848,-0.092c0.77,0 1.401,0.031 1.894,0.092c0.493,0.062 0.878,0.162 1.155,0.301c0.278,0.138 0.478,0.3 0.601,0.485c0.123,0.185 0.185,0.385 0.185,0.6l0,9.888l10.673,0c0.246,0 0.462,0.054 0.646,0.161c0.185,0.108 0.347,0.293 0.486,0.555c0.138,0.262 0.238,0.593 0.3,0.993c0.061,0.401 0.092,0.893 0.092,1.479c0,1.109 -0.138,1.909 -0.416,2.402c-0.277,0.493 -0.646,0.739 -1.108,0.739l-10.673,0l0,23.194c0,2.865 0.423,5.028 1.27,6.491c0.847,1.464 2.364,2.195 4.551,2.195c0.709,0 1.34,-0.069 1.895,-0.208c0.554,-0.138 1.047,-0.285 1.478,-0.439c0.431,-0.154 0.801,-0.3 1.109,-0.439c0.308,-0.138 0.585,-0.208 0.832,-0.208c0.154,0 0.3,0.039 0.439,0.116c0.138,0.077 0.246,0.223 0.323,0.439c0.077,0.215 0.146,0.508 0.208,0.878c0.061,0.369 0.092,0.831 0.092,1.386Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M762.261,284.544l-5.544,15.293c-0.185,0.493 -0.654,0.87 -1.409,1.132c-0.755,0.262 -1.902,0.393 -3.442,0.393c-0.801,0 -1.448,-0.039 -1.941,-0.116c-0.493,-0.077 -0.87,-0.208 -1.132,-0.392c-0.261,-0.185 -0.408,-0.432 -0.439,-0.74c-0.03,-0.308 0.047,-0.677 0.231,-1.108l5.73,-14.462c-0.278,-0.123 -0.539,-0.323 -0.786,-0.6c-0.246,-0.278 -0.416,-0.57 -0.508,-0.878l-14.831,-39.734c-0.247,-0.647 -0.37,-1.155 -0.37,-1.525c0,-0.37 0.123,-0.662 0.37,-0.878c0.246,-0.215 0.647,-0.362 1.201,-0.439c0.555,-0.077 1.294,-0.115 2.218,-0.115c0.924,0 1.648,0.023 2.171,0.069c0.524,0.046 0.94,0.131 1.248,0.254c0.308,0.123 0.531,0.3 0.67,0.531c0.138,0.231 0.285,0.547 0.439,0.948l11.874,33.358l0.138,0l11.459,-33.543c0.184,-0.585 0.408,-0.963 0.669,-1.132c0.262,-0.17 0.655,-0.293 1.179,-0.37c0.523,-0.077 1.278,-0.115 2.264,-0.115c0.862,0 1.57,0.038 2.125,0.115c0.554,0.077 0.962,0.224 1.224,0.439c0.262,0.216 0.393,0.508 0.393,0.878c0,0.37 -0.092,0.832 -0.277,1.386l-14.924,41.351Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M840.528,267.773c0,2.803 -0.516,5.298 -1.548,7.485c-1.031,2.186 -2.464,4.042 -4.296,5.567c-1.833,1.525 -3.989,2.672 -6.469,3.442c-2.479,0.77 -5.151,1.155 -8.016,1.155c-2.002,0 -3.858,-0.169 -5.567,-0.508c-1.71,-0.339 -3.234,-0.755 -4.574,-1.248c-1.34,-0.492 -2.464,-1.001 -3.373,-1.524c-0.909,-0.524 -1.54,-0.971 -1.894,-1.34c-0.355,-0.37 -0.616,-0.84 -0.786,-1.409c-0.169,-0.57 -0.254,-1.333 -0.254,-2.287c0,-0.678 0.031,-1.24 0.093,-1.687c0.061,-0.446 0.154,-0.808 0.277,-1.086c0.123,-0.277 0.277,-0.469 0.462,-0.577c0.185,-0.108 0.4,-0.162 0.647,-0.162c0.431,0 1.039,0.262 1.825,0.786c0.785,0.523 1.794,1.093 3.026,1.709c1.232,0.616 2.718,1.194 4.458,1.733c1.741,0.539 3.75,0.808 6.03,0.808c1.725,0 3.303,-0.231 4.736,-0.693c1.432,-0.462 2.664,-1.116 3.696,-1.963c1.032,-0.847 1.825,-1.887 2.379,-3.119c0.555,-1.232 0.832,-2.634 0.832,-4.204c0,-1.695 -0.385,-3.142 -1.155,-4.343c-0.77,-1.202 -1.787,-2.257 -3.05,-3.165c-1.262,-0.909 -2.702,-1.741 -4.32,-2.495c-1.617,-0.755 -3.272,-1.525 -4.966,-2.31c-1.694,-0.786 -3.342,-1.656 -4.944,-2.611c-1.602,-0.955 -3.034,-2.079 -4.297,-3.373c-1.263,-1.293 -2.287,-2.81 -3.072,-4.551c-0.786,-1.74 -1.178,-3.827 -1.178,-6.26c0,-2.495 0.454,-4.72 1.363,-6.676c0.908,-1.956 2.171,-3.596 3.788,-4.921c1.617,-1.324 3.542,-2.333 5.775,-3.026c2.234,-0.693 4.644,-1.04 7.231,-1.04c1.325,0 2.657,0.116 3.997,0.347c1.34,0.231 2.602,0.539 3.788,0.924c1.186,0.385 2.241,0.816 3.165,1.294c0.924,0.477 1.532,0.862 1.825,1.155c0.293,0.292 0.485,0.523 0.578,0.693c0.092,0.169 0.169,0.385 0.231,0.647c0.061,0.261 0.107,0.577 0.138,0.947c0.031,0.369 0.046,0.847 0.046,1.432c0,0.554 -0.023,1.047 -0.069,1.479c-0.046,0.431 -0.115,0.793 -0.208,1.085c-0.092,0.293 -0.223,0.508 -0.392,0.647c-0.17,0.139 -0.362,0.208 -0.578,0.208c-0.339,0 -0.87,-0.216 -1.594,-0.647c-0.724,-0.431 -1.609,-0.916 -2.657,-1.455c-1.047,-0.539 -2.287,-1.032 -3.719,-1.479c-1.432,-0.446 -3.042,-0.67 -4.828,-0.67c-1.663,0 -3.111,0.224 -4.343,0.67c-1.232,0.447 -2.249,1.04 -3.049,1.779c-0.801,0.739 -1.402,1.617 -1.802,2.634c-0.401,1.016 -0.601,2.094 -0.601,3.234c0,1.663 0.385,3.095 1.155,4.297c0.77,1.201 1.794,2.264 3.073,3.188c1.278,0.924 2.733,1.771 4.366,2.541c1.632,0.77 3.295,1.548 4.99,2.333c1.694,0.785 3.357,1.648 4.989,2.587c1.633,0.94 3.088,2.049 4.367,3.327c1.278,1.278 2.31,2.787 3.095,4.528c0.786,1.74 1.178,3.796 1.178,6.168Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M886.638,283.389c0,0.247 -0.054,0.454 -0.161,0.624c-0.108,0.169 -0.301,0.316 -0.578,0.439c-0.277,0.123 -0.639,0.215 -1.086,0.277c-0.446,0.062 -0.993,0.092 -1.64,0.092c-0.708,0 -1.286,-0.03 -1.733,-0.092c-0.446,-0.062 -0.8,-0.154 -1.062,-0.277c-0.262,-0.123 -0.439,-0.27 -0.532,-0.439c-0.092,-0.17 -0.138,-0.377 -0.138,-0.624l0,-5.498c-2.372,2.618 -4.713,4.528 -7.023,5.729c-2.31,1.201 -4.651,1.802 -7.023,1.802c-2.772,0 -5.105,-0.462 -6.999,-1.386c-1.895,-0.924 -3.427,-2.179 -4.597,-3.766c-1.171,-1.586 -2.01,-3.434 -2.519,-5.544c-0.508,-2.11 -0.762,-4.674 -0.762,-7.693l0,-25.226c0,-0.246 0.054,-0.454 0.162,-0.624c0.108,-0.169 0.316,-0.323 0.624,-0.462c0.308,-0.138 0.708,-0.231 1.201,-0.277c0.493,-0.046 1.109,-0.069 1.848,-0.069c0.739,0 1.355,0.023 1.848,0.069c0.493,0.046 0.886,0.139 1.178,0.277c0.293,0.139 0.501,0.293 0.624,0.462c0.123,0.17 0.185,0.378 0.185,0.624l0,24.21c0,2.433 0.177,4.382 0.531,5.845c0.354,1.463 0.893,2.71 1.617,3.742c0.724,1.032 1.64,1.833 2.749,2.403c1.109,0.569 2.403,0.854 3.881,0.854c1.91,0 3.812,-0.677 5.706,-2.033c1.895,-1.355 3.904,-3.342 6.03,-5.96l0,-29.061c0,-0.246 0.054,-0.454 0.161,-0.624c0.108,-0.169 0.316,-0.323 0.624,-0.462c0.308,-0.138 0.701,-0.231 1.178,-0.277c0.478,-0.046 1.101,-0.069 1.871,-0.069c0.74,0 1.356,0.023 1.849,0.069c0.492,0.046 0.877,0.139 1.155,0.277c0.277,0.139 0.485,0.293 0.623,0.462c0.139,0.17 0.208,0.378 0.208,0.624l0,41.582Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M938.986,261.951c0,3.635 -0.393,6.9 -1.179,9.795c-0.785,2.895 -1.94,5.352 -3.465,7.369c-1.524,2.018 -3.411,3.573 -5.66,4.667c-2.248,1.093 -4.82,1.64 -7.715,1.64c-1.232,0 -2.372,-0.123 -3.419,-0.37c-1.048,-0.246 -2.072,-0.631 -3.073,-1.155c-1.001,-0.523 -1.994,-1.185 -2.98,-1.986c-0.986,-0.801 -2.033,-1.741 -3.142,-2.819l0,20.791c0,0.247 -0.061,0.462 -0.184,0.647c-0.124,0.185 -0.324,0.339 -0.601,0.462c-0.277,0.123 -0.662,0.216 -1.155,0.277c-0.493,0.062 -1.124,0.093 -1.894,0.093c-0.74,0 -1.356,-0.031 -1.849,-0.093c-0.492,-0.061 -0.885,-0.154 -1.178,-0.277c-0.292,-0.123 -0.493,-0.277 -0.6,-0.462c-0.108,-0.185 -0.162,-0.4 -0.162,-0.647l0,-58.076c0,-0.277 0.046,-0.501 0.139,-0.67c0.092,-0.169 0.277,-0.316 0.554,-0.439c0.277,-0.123 0.631,-0.208 1.063,-0.254c0.431,-0.046 0.954,-0.069 1.571,-0.069c0.646,0 1.178,0.023 1.594,0.069c0.415,0.046 0.762,0.131 1.039,0.254c0.277,0.123 0.47,0.27 0.578,0.439c0.107,0.169 0.161,0.393 0.161,0.67l0,5.59c1.263,-1.293 2.48,-2.417 3.65,-3.372c1.171,-0.955 2.349,-1.748 3.535,-2.38c1.186,-0.631 2.402,-1.109 3.65,-1.432c1.247,-0.323 2.564,-0.485 3.95,-0.485c3.019,0 5.591,0.585 7.716,1.756c2.125,1.17 3.858,2.772 5.198,4.805c1.34,2.033 2.317,4.397 2.933,7.092c0.617,2.695 0.925,5.552 0.925,8.57Zm-7.901,0.878c0,-2.125 -0.163,-4.181 -0.488,-6.168c-0.325,-1.987 -0.883,-3.75 -1.673,-5.29c-0.791,-1.54 -1.852,-2.772 -3.185,-3.696c-1.332,-0.924 -2.99,-1.386 -4.974,-1.386c-0.992,0 -1.968,0.146 -2.929,0.439c-0.96,0.292 -1.936,0.754 -2.928,1.386c-0.992,0.631 -2.03,1.463 -3.115,2.495c-1.085,1.031 -2.231,2.302 -3.44,3.811l0,16.541c2.108,2.556 4.107,4.512 5.997,5.867c1.891,1.356 3.874,2.033 5.95,2.033c1.922,0 3.572,-0.462 4.951,-1.386c1.379,-0.924 2.495,-2.156 3.347,-3.696c0.852,-1.54 1.48,-3.265 1.883,-5.175c0.403,-1.909 0.604,-3.834 0.604,-5.775Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M988.699,261.951c0,3.635 -0.392,6.9 -1.178,9.795c-0.785,2.895 -1.94,5.352 -3.465,7.369c-1.525,2.018 -3.411,3.573 -5.66,4.667c-2.248,1.093 -4.82,1.64 -7.716,1.64c-1.232,0 -2.371,-0.123 -3.419,-0.37c-1.047,-0.246 -2.071,-0.631 -3.072,-1.155c-1.001,-0.523 -1.994,-1.185 -2.98,-1.986c-0.986,-0.801 -2.033,-1.741 -3.142,-2.819l0,20.791c0,0.247 -0.061,0.462 -0.185,0.647c-0.123,0.185 -0.323,0.339 -0.6,0.462c-0.278,0.123 -0.663,0.216 -1.155,0.277c-0.493,0.062 -1.125,0.093 -1.895,0.093c-0.739,0 -1.355,-0.031 -1.848,-0.093c-0.493,-0.061 -0.885,-0.154 -1.178,-0.277c-0.293,-0.123 -0.493,-0.277 -0.601,-0.462c-0.107,-0.185 -0.161,-0.4 -0.161,-0.647l0,-58.076c0,-0.277 0.046,-0.501 0.138,-0.67c0.093,-0.169 0.278,-0.316 0.555,-0.439c0.277,-0.123 0.631,-0.208 1.062,-0.254c0.432,-0.046 0.955,-0.069 1.571,-0.069c0.647,0 1.178,0.023 1.594,0.069c0.416,0.046 0.763,0.131 1.04,0.254c0.277,0.123 0.47,0.27 0.577,0.439c0.108,0.169 0.162,0.393 0.162,0.67l0,5.59c1.263,-1.293 2.48,-2.417 3.65,-3.372c1.171,-0.955 2.349,-1.748 3.535,-2.38c1.185,-0.631 2.402,-1.109 3.65,-1.432c1.247,-0.323 2.564,-0.485 3.95,-0.485c3.018,0 5.59,0.585 7.716,1.756c2.125,1.17 3.858,2.772 5.197,4.805c1.34,2.033 2.318,4.397 2.934,7.092c0.616,2.695 0.924,5.552 0.924,8.57Zm-7.9,0.878c0,-2.125 -0.163,-4.181 -0.488,-6.168c-0.326,-1.987 -0.883,-3.75 -1.674,-5.29c-0.79,-1.54 -1.851,-2.772 -3.184,-3.696c-1.333,-0.924 -2.991,-1.386 -4.974,-1.386c-0.992,0 -1.968,0.146 -2.929,0.439c-0.96,0.292 -1.937,0.754 -2.928,1.386c-0.992,0.631 -2.03,1.463 -3.115,2.495c-1.085,1.031 -2.231,2.302 -3.44,3.811l0,16.541c2.108,2.556 4.107,4.512 5.997,5.867c1.891,1.356 3.874,2.033 5.95,2.033c1.921,0 3.571,-0.462 4.951,-1.386c1.379,-0.924 2.494,-2.156 3.347,-3.696c0.852,-1.54 1.48,-3.265 1.882,-5.175c0.403,-1.909 0.605,-3.834 0.605,-5.775Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M1038.83,262.136c0,3.388 -0.447,6.507 -1.34,9.356c-0.893,2.849 -2.225,5.306 -3.996,7.369c-1.772,2.064 -3.989,3.673 -6.654,4.828c-2.664,1.156 -5.752,1.733 -9.263,1.733c-3.419,0 -6.399,-0.508 -8.94,-1.525c-2.541,-1.016 -4.659,-2.495 -6.353,-4.435c-1.694,-1.941 -2.957,-4.297 -3.789,-7.069c-0.831,-2.772 -1.247,-5.914 -1.247,-9.425c0,-3.388 0.439,-6.507 1.317,-9.356c0.877,-2.849 2.202,-5.306 3.973,-7.37c1.771,-2.063 3.981,-3.665 6.63,-4.805c2.649,-1.139 5.744,-1.709 9.287,-1.709c3.419,0 6.399,0.508 8.94,1.525c2.541,1.016 4.659,2.494 6.353,4.435c1.694,1.94 2.964,4.297 3.811,7.069c0.847,2.772 1.271,5.898 1.271,9.379Zm-7.901,0.508c0,-2.248 -0.21,-4.374 -0.629,-6.376c-0.42,-2.002 -1.111,-3.757 -2.075,-5.267c-0.963,-1.509 -2.269,-2.703 -3.916,-3.58c-1.647,-0.878 -3.698,-1.317 -6.154,-1.317c-2.269,0 -4.219,0.4 -5.851,1.201c-1.631,0.801 -2.976,1.933 -4.032,3.396c-1.057,1.463 -1.842,3.196 -2.354,5.198c-0.513,2.002 -0.77,4.189 -0.77,6.56c0,2.28 0.21,4.42 0.63,6.423c0.42,2.002 1.119,3.75 2.098,5.244c0.979,1.493 2.292,2.679 3.939,3.557c1.647,0.878 3.698,1.317 6.154,1.317c2.238,0 4.18,-0.401 5.827,-1.201c1.648,-0.801 3,-1.925 4.056,-3.373c1.057,-1.448 1.834,-3.173 2.331,-5.175c0.498,-2.002 0.746,-4.204 0.746,-6.607Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M1074.36,244.533c0,0.678 -0.016,1.247 -0.047,1.709c-0.03,0.462 -0.092,0.824 -0.184,1.086c-0.093,0.262 -0.208,0.462 -0.347,0.601c-0.139,0.138 -0.331,0.208 -0.577,0.208c-0.247,0 -0.547,-0.07 -0.901,-0.208c-0.355,-0.139 -0.755,-0.277 -1.202,-0.416c-0.446,-0.139 -0.947,-0.27 -1.501,-0.393c-0.555,-0.123 -1.155,-0.185 -1.802,-0.185c-0.77,0 -1.525,0.154 -2.264,0.462c-0.739,0.308 -1.517,0.817 -2.333,1.525c-0.817,0.709 -1.671,1.648 -2.565,2.818c-0.893,1.171 -1.878,2.603 -2.956,4.297l0,27.352c0,0.247 -0.062,0.454 -0.185,0.624c-0.124,0.169 -0.324,0.316 -0.601,0.439c-0.277,0.123 -0.662,0.215 -1.155,0.277c-0.493,0.062 -1.124,0.092 -1.894,0.092c-0.74,0 -1.356,-0.03 -1.848,-0.092c-0.493,-0.062 -0.886,-0.154 -1.179,-0.277c-0.292,-0.123 -0.492,-0.27 -0.6,-0.439c-0.108,-0.17 -0.162,-0.377 -0.162,-0.624l0,-41.582c0,-0.246 0.046,-0.454 0.139,-0.624c0.092,-0.169 0.277,-0.323 0.554,-0.462c0.277,-0.138 0.632,-0.231 1.063,-0.277c0.431,-0.046 1.001,-0.069 1.709,-0.069c0.678,0 1.24,0.023 1.687,0.069c0.446,0.046 0.793,0.139 1.039,0.277c0.247,0.139 0.424,0.293 0.532,0.462c0.107,0.17 0.161,0.378 0.161,0.624l0,6.052c1.14,-1.663 2.21,-3.018 3.211,-4.065c1.001,-1.048 1.949,-1.872 2.842,-2.472c0.893,-0.601 1.779,-1.017 2.656,-1.248c0.878,-0.231 1.764,-0.346 2.657,-0.346c0.4,0 0.855,0.023 1.363,0.069c0.508,0.046 1.04,0.131 1.594,0.254c0.554,0.123 1.055,0.262 1.502,0.416c0.446,0.154 0.762,0.308 0.947,0.462c0.185,0.154 0.308,0.3 0.369,0.439c0.062,0.139 0.116,0.316 0.162,0.531c0.046,0.216 0.077,0.532 0.092,0.948c0.016,0.415 0.024,0.977 0.024,1.686Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M1104.67,280.34c0,0.893 -0.061,1.601 -0.184,2.125c-0.124,0.524 -0.308,0.909 -0.555,1.155c-0.246,0.247 -0.616,0.478 -1.109,0.693c-0.493,0.216 -1.055,0.393 -1.686,0.532c-0.632,0.138 -1.302,0.254 -2.01,0.346c-0.708,0.092 -1.417,0.139 -2.125,0.139c-2.156,0 -4.004,-0.285 -5.545,-0.855c-1.54,-0.57 -2.802,-1.432 -3.788,-2.587c-0.986,-1.155 -1.702,-2.619 -2.149,-4.39c-0.446,-1.771 -0.669,-3.858 -0.669,-6.26l0,-24.303l-5.822,0c-0.462,0 -0.832,-0.246 -1.109,-0.739c-0.277,-0.493 -0.416,-1.293 -0.416,-2.402c0,-0.586 0.039,-1.078 0.116,-1.479c0.077,-0.4 0.177,-0.731 0.3,-0.993c0.123,-0.262 0.285,-0.447 0.485,-0.555c0.2,-0.107 0.424,-0.161 0.67,-0.161l5.776,0l0,-9.888c0,-0.215 0.053,-0.415 0.161,-0.6c0.108,-0.185 0.308,-0.347 0.601,-0.485c0.292,-0.139 0.685,-0.239 1.178,-0.301c0.493,-0.061 1.109,-0.092 1.848,-0.092c0.77,0 1.402,0.031 1.894,0.092c0.493,0.062 0.878,0.162 1.155,0.301c0.278,0.138 0.478,0.3 0.601,0.485c0.123,0.185 0.185,0.385 0.185,0.6l0,9.888l10.673,0c0.246,0 0.462,0.054 0.646,0.161c0.185,0.108 0.347,0.293 0.486,0.555c0.138,0.262 0.238,0.593 0.3,0.993c0.062,0.401 0.092,0.893 0.092,1.479c0,1.109 -0.138,1.909 -0.415,2.402c-0.278,0.493 -0.647,0.739 -1.109,0.739l-10.673,0l0,23.194c0,2.865 0.423,5.028 1.27,6.491c0.848,1.464 2.364,2.195 4.551,2.195c0.709,0 1.34,-0.069 1.895,-0.208c0.554,-0.138 1.047,-0.285 1.478,-0.439c0.431,-0.154 0.801,-0.3 1.109,-0.439c0.308,-0.138 0.585,-0.208 0.832,-0.208c0.154,0 0.3,0.039 0.439,0.116c0.138,0.077 0.246,0.223 0.323,0.439c0.077,0.215 0.146,0.508 0.208,0.878c0.062,0.369 0.092,0.831 0.092,1.386Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M1149.21,260.796c0,1.201 -0.301,2.056 -0.904,2.564c-0.604,0.509 -1.292,0.763 -2.066,0.763l-27.385,0c0,2.31 0.233,4.389 0.697,6.237c0.464,1.848 1.238,3.434 2.321,4.759c1.083,1.324 2.492,2.341 4.225,3.049c1.733,0.709 3.854,1.063 6.36,1.063c1.981,0 3.746,-0.162 5.293,-0.485c1.548,-0.324 2.886,-0.686 4.016,-1.086c1.13,-0.4 2.059,-0.762 2.786,-1.086c0.727,-0.323 1.277,-0.485 1.649,-0.485c0.216,0 0.409,0.054 0.58,0.162c0.17,0.108 0.301,0.269 0.394,0.485c0.093,0.216 0.163,0.516 0.209,0.901c0.047,0.385 0.07,0.855 0.07,1.409c0,0.401 -0.016,0.747 -0.046,1.04c-0.031,0.292 -0.07,0.554 -0.116,0.785c-0.046,0.231 -0.123,0.439 -0.231,0.624c-0.108,0.185 -0.246,0.362 -0.416,0.531c-0.169,0.17 -0.67,0.447 -1.501,0.832c-0.832,0.385 -1.91,0.762 -3.235,1.132c-1.324,0.369 -2.856,0.701 -4.597,0.993c-1.74,0.293 -3.596,0.439 -5.567,0.439c-3.419,0 -6.414,-0.477 -8.986,-1.432c-2.572,-0.955 -4.736,-2.372 -6.492,-4.251c-1.756,-1.879 -3.08,-4.235 -3.973,-7.069c-0.894,-2.834 -1.34,-6.129 -1.34,-9.887c0,-3.573 0.462,-6.784 1.386,-9.633c0.924,-2.849 2.256,-5.267 3.996,-7.254c1.741,-1.987 3.843,-3.511 6.307,-4.574c2.464,-1.063 5.221,-1.594 8.27,-1.594c3.265,0 6.045,0.524 8.34,1.571c2.295,1.047 4.181,2.456 5.66,4.227c1.478,1.771 2.564,3.85 3.257,6.238c0.693,2.387 1.039,4.936 1.039,7.646l0,1.386Zm-7.669,-2.264c0.092,-4.004 -0.799,-7.146 -2.673,-9.425c-1.875,-2.279 -4.656,-3.419 -8.344,-3.419c-1.891,0 -3.549,0.354 -4.974,1.063c-1.426,0.708 -2.619,1.648 -3.58,2.818c-0.961,1.17 -1.705,2.533 -2.231,4.089c-0.527,1.555 -0.821,3.18 -0.884,4.874l22.686,0Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M1196.42,283.389c0,0.247 -0.054,0.462 -0.161,0.647c-0.108,0.185 -0.293,0.331 -0.555,0.439c-0.262,0.108 -0.608,0.192 -1.039,0.254c-0.432,0.062 -0.955,0.092 -1.571,0.092c-0.647,0 -1.186,-0.03 -1.617,-0.092c-0.432,-0.062 -0.786,-0.146 -1.063,-0.254c-0.277,-0.108 -0.477,-0.254 -0.601,-0.439c-0.123,-0.185 -0.184,-0.4 -0.184,-0.647l0,-5.498c-2.187,2.372 -4.459,4.22 -6.815,5.544c-2.357,1.325 -4.936,1.987 -7.739,1.987c-3.05,0 -5.652,-0.593 -7.808,-1.779c-2.157,-1.186 -3.905,-2.787 -5.244,-4.805c-1.34,-2.017 -2.318,-4.389 -2.934,-7.115c-0.616,-2.726 -0.924,-5.598 -0.924,-8.617c0,-3.573 0.385,-6.799 1.155,-9.679c0.77,-2.88 1.909,-5.336 3.419,-7.369c1.509,-2.033 3.38,-3.596 5.613,-4.69c2.233,-1.093 4.813,-1.64 7.739,-1.64c2.434,0 4.659,0.531 6.676,1.594c2.018,1.063 4.012,2.626 5.984,4.689l0,-24.163c0,-0.216 0.054,-0.424 0.161,-0.624c0.108,-0.2 0.316,-0.354 0.624,-0.462c0.308,-0.108 0.701,-0.2 1.178,-0.277c0.478,-0.077 1.086,-0.116 1.825,-0.116c0.77,0 1.402,0.039 1.895,0.116c0.492,0.077 0.877,0.169 1.155,0.277c0.277,0.108 0.485,0.262 0.623,0.462c0.139,0.2 0.208,0.408 0.208,0.624l0,61.541Zm-7.669,-29.246c-2.064,-2.557 -4.058,-4.505 -5.984,-5.845c-1.925,-1.339 -3.934,-2.009 -6.029,-2.009c-1.94,0 -3.588,0.462 -4.944,1.386c-1.355,0.924 -2.456,2.14 -3.303,3.65c-0.847,1.509 -1.463,3.218 -1.848,5.128c-0.385,1.91 -0.578,3.85 -0.578,5.822c0,2.094 0.162,4.142 0.485,6.145c0.324,2.002 0.886,3.78 1.687,5.336c0.801,1.555 1.863,2.803 3.188,3.742c1.324,0.94 2.988,1.41 4.99,1.41c1.016,0 1.994,-0.139 2.934,-0.416c0.939,-0.278 1.902,-0.74 2.887,-1.386c0.986,-0.647 2.018,-1.487 3.096,-2.518c1.078,-1.032 2.217,-2.303 3.419,-3.812l0,-16.633Z" style="fill:#fff;fill-rule:nonzero;"/></g></svg>
diff --git a/docs/public/badge-community-light.svg b/docs/public/badge-community-light.svg
index de4e0cf149..08c49f05b5 100644
--- a/docs/public/badge-community-light.svg
+++ b/docs/public/badge-community-light.svg
@@ -1 +1 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 1260 371" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;"><rect id="badge.-community.-light" x="0" y="0.321" width="1260" height="370" style="fill:none;"/><clipPath id="_clip1"><rect x="0" y="0.321" width="1260" height="370"/></clipPath><g clip-path="url(#_clip1)"><path d="M1260,33.621c0,-18.379 -14.921,-33.3 -33.3,-33.3l-1193.4,0c-18.379,0 -33.3,14.921 -33.3,33.3l0,303.4c0,18.378 14.921,33.3 33.3,33.3l1193.4,0c18.379,0 33.3,-14.922 33.3,-33.3l0,-303.4Z" style="fill:#fff;"/><path d="M426.392,189.328c0,1.077 -0.059,1.978 -0.176,2.704c-0.117,0.726 -0.293,1.288 -0.527,1.686c-0.234,0.398 -0.491,0.668 -0.772,0.808c-0.281,0.141 -0.563,0.211 -0.844,0.211c-0.936,0 -2.447,-0.386 -4.531,-1.159c-2.084,-0.773 -4.484,-1.897 -7.201,-3.372c-2.716,-1.476 -5.62,-3.267 -8.711,-5.375c-3.092,-2.107 -6.089,-4.566 -8.993,-7.376c-2.295,1.405 -5.199,2.622 -8.711,3.653c-3.513,1.03 -7.588,1.545 -12.224,1.545c-6.839,0 -12.752,-1.007 -17.74,-3.021c-4.988,-2.013 -9.109,-4.964 -12.364,-8.851c-3.255,-3.888 -5.679,-8.724 -7.272,-14.508c-1.592,-5.784 -2.388,-12.423 -2.388,-19.917c0,-7.213 0.866,-13.734 2.599,-19.566c1.733,-5.831 4.333,-10.795 7.798,-14.893c3.466,-4.098 7.799,-7.26 12.997,-9.485c5.199,-2.224 11.264,-3.337 18.196,-3.337c6.51,0 12.236,1.007 17.177,3.021c4.941,2.014 9.086,4.953 12.435,8.817c3.349,3.864 5.866,8.63 7.552,14.297c1.686,5.667 2.529,12.177 2.529,19.53c0,3.794 -0.222,7.424 -0.667,10.89c-0.445,3.466 -1.147,6.744 -2.108,9.835c-0.96,3.091 -2.166,5.948 -3.618,8.571c-1.452,2.623 -3.161,4.988 -5.128,7.096c3.419,2.81 6.416,5 8.992,6.569c2.576,1.569 4.707,2.751 6.393,3.547c1.687,0.797 2.998,1.37 3.935,1.722c0.936,0.351 1.639,0.749 2.107,1.194c0.469,0.445 0.796,1.077 0.984,1.897c0.187,0.819 0.281,1.908 0.281,3.267Zm-23.886,-53.745c0,-5.152 -0.457,-9.929 -1.37,-14.331c-0.914,-4.403 -2.436,-8.232 -4.567,-11.487c-2.131,-3.255 -4.976,-5.796 -8.536,-7.622c-3.559,-1.827 -7.962,-2.74 -13.207,-2.74c-5.246,0 -9.649,0.972 -13.208,2.915c-3.56,1.944 -6.452,4.567 -8.676,7.869c-2.225,3.302 -3.818,7.13 -4.778,11.486c-0.96,4.356 -1.44,8.969 -1.44,13.84c0,5.339 0.445,10.245 1.335,14.718c0.89,4.473 2.389,8.349 4.496,11.627c2.108,3.279 4.93,5.82 8.466,7.623c3.536,1.803 7.974,2.705 13.313,2.705c5.292,0 9.742,-0.984 13.348,-2.951c3.606,-1.967 6.51,-4.625 8.711,-7.974c2.202,-3.349 3.771,-7.236 4.707,-11.662c0.937,-4.426 1.406,-9.098 1.406,-14.016Z" style="fill:#333;fill-rule:nonzero;"/><path d="M534.723,179.492c0,0.375 -0.096,0.703 -0.289,0.984c-0.193,0.281 -0.531,0.503 -1.013,0.667c-0.483,0.164 -1.098,0.304 -1.846,0.421c-0.747,0.118 -1.724,0.176 -2.93,0.176c-1.109,0 -2.062,-0.058 -2.858,-0.176c-0.796,-0.117 -1.423,-0.257 -1.881,-0.421c-0.459,-0.164 -0.784,-0.386 -0.977,-0.667c-0.193,-0.281 -0.289,-0.609 -0.289,-0.984l0,-79.176l-0.141,0l-32.036,79.527c-0.14,0.328 -0.339,0.609 -0.597,0.843c-0.257,0.234 -0.632,0.434 -1.124,0.597c-0.492,0.164 -1.077,0.281 -1.756,0.352c-0.679,0.07 -1.487,0.105 -2.424,0.105c-0.984,0 -1.827,-0.047 -2.529,-0.14c-0.703,-0.094 -1.288,-0.223 -1.756,-0.387c-0.469,-0.164 -0.832,-0.363 -1.089,-0.597c-0.258,-0.234 -0.434,-0.492 -0.527,-0.773l-30.631,-79.527l-0.07,0l0,79.176c0,0.375 -0.097,0.703 -0.289,0.984c-0.193,0.281 -0.531,0.503 -1.014,0.667c-0.482,0.164 -1.109,0.304 -1.881,0.421c-0.772,0.118 -1.761,0.176 -2.967,0.176c-1.157,0 -2.122,-0.058 -2.894,-0.176c-0.772,-0.117 -1.387,-0.257 -1.845,-0.421c-0.459,-0.164 -0.772,-0.386 -0.941,-0.667c-0.169,-0.281 -0.253,-0.609 -0.253,-0.984l0,-83.602c0,-1.967 0.523,-3.372 1.569,-4.215c1.046,-0.843 2.212,-1.265 3.496,-1.265l7.419,0c1.522,0 2.853,0.141 3.995,0.422c1.142,0.281 2.14,0.726 2.996,1.335c0.856,0.608 1.569,1.381 2.14,2.318c0.571,0.937 1.07,2.037 1.499,3.302l25.994,65.828l0.351,0l27.047,-65.617c0.524,-1.405 1.095,-2.6 1.713,-3.583c0.619,-0.984 1.297,-1.768 2.035,-2.354c0.738,-0.585 1.558,-1.007 2.462,-1.264c0.904,-0.258 1.951,-0.387 3.141,-0.387l7.779,0c0.715,0 1.393,0.106 2.035,0.316c0.642,0.211 1.189,0.539 1.642,0.984c0.452,0.445 0.821,1.007 1.106,1.686c0.285,0.679 0.428,1.51 0.428,2.494l0,83.602Z" style="fill:#333;fill-rule:nonzero;"/><path d="M618.185,179.351c0,0.375 -0.082,0.715 -0.246,1.019c-0.164,0.305 -0.48,0.55 -0.949,0.738c-0.468,0.187 -1.1,0.339 -1.896,0.456c-0.797,0.118 -1.827,0.176 -3.092,0.176c-1.639,0 -2.974,-0.07 -4.004,-0.211c-1.031,-0.14 -1.803,-0.398 -2.318,-0.772c-0.516,-0.375 -0.937,-0.797 -1.265,-1.265l-33.441,-45.454l0,45.454c0,0.328 -0.094,0.644 -0.281,0.948c-0.187,0.305 -0.515,0.539 -0.983,0.703c-0.469,0.164 -1.089,0.304 -1.862,0.421c-0.773,0.118 -1.745,0.176 -2.916,0.176c-1.124,0 -2.084,-0.058 -2.88,-0.176c-0.796,-0.117 -1.429,-0.257 -1.897,-0.421c-0.468,-0.164 -0.796,-0.398 -0.983,-0.703c-0.188,-0.304 -0.282,-0.62 -0.282,-0.948l0,-87.255c0,-0.375 0.094,-0.703 0.282,-0.984c0.187,-0.281 0.515,-0.503 0.983,-0.667c0.468,-0.164 1.101,-0.305 1.897,-0.422c0.796,-0.117 1.756,-0.175 2.88,-0.175c1.171,0 2.143,0.058 2.916,0.175c0.773,0.117 1.393,0.258 1.862,0.422c0.468,0.164 0.796,0.386 0.983,0.667c0.187,0.281 0.281,0.609 0.281,0.984l0,40.396l32.176,-40.396c0.281,-0.422 0.609,-0.773 0.984,-1.054c0.375,-0.281 0.831,-0.504 1.37,-0.667c0.538,-0.164 1.194,-0.293 1.967,-0.387c0.773,-0.094 1.768,-0.14 2.986,-0.14c1.218,0 2.201,0.058 2.95,0.175c0.75,0.117 1.347,0.27 1.792,0.457c0.445,0.187 0.749,0.421 0.913,0.702c0.164,0.282 0.246,0.586 0.246,0.914c0,0.609 -0.152,1.218 -0.457,1.826c-0.304,0.609 -0.878,1.452 -1.721,2.53l-30.139,36.04l32.458,43.136c0.796,1.217 1.276,2.049 1.44,2.494c0.164,0.444 0.246,0.807 0.246,1.088Z" style="fill:#333;fill-rule:nonzero;"/><path d="M713.941,95.609c0,0.89 -0.047,1.663 -0.141,2.318c-0.094,0.656 -0.258,1.183 -0.492,1.581c-0.234,0.398 -0.503,0.691 -0.808,0.878c-0.304,0.188 -0.62,0.281 -0.948,0.281l-33.3,0l0,30.912l31.473,0c0.328,0 0.644,0.082 0.949,0.246c0.304,0.164 0.574,0.433 0.808,0.808c0.234,0.374 0.398,0.878 0.491,1.51c0.094,0.632 0.141,1.44 0.141,2.424c0,0.89 -0.047,1.651 -0.141,2.283c-0.093,0.632 -0.257,1.148 -0.491,1.546c-0.234,0.398 -0.504,0.702 -0.808,0.913c-0.305,0.211 -0.621,0.316 -0.949,0.316l-31.473,0l0,37.867c0,0.328 -0.094,0.644 -0.281,0.948c-0.188,0.305 -0.516,0.539 -0.984,0.703c-0.468,0.164 -1.077,0.304 -1.826,0.421c-0.75,0.118 -1.733,0.176 -2.951,0.176c-1.124,0 -2.084,-0.058 -2.881,-0.176c-0.796,-0.117 -1.428,-0.257 -1.896,-0.421c-0.469,-0.164 -0.797,-0.398 -0.984,-0.703c-0.187,-0.304 -0.281,-0.62 -0.281,-0.948l0,-84.164c0,-1.827 0.48,-3.103 1.44,-3.829c0.96,-0.726 1.979,-1.089 3.056,-1.089l40.888,0c0.328,0 0.644,0.094 0.948,0.281c0.305,0.188 0.574,0.492 0.808,0.914c0.234,0.421 0.398,0.971 0.492,1.65c0.094,0.68 0.141,1.464 0.141,2.354Z" style="fill:#333;fill-rule:nonzero;"/><path d="M742.534,179.562c0,0.375 -0.094,0.691 -0.281,0.949c-0.187,0.257 -0.492,0.48 -0.913,0.667c-0.422,0.187 -1.007,0.328 -1.757,0.422c-0.749,0.093 -1.709,0.14 -2.88,0.14c-1.124,0 -2.061,-0.047 -2.81,-0.14c-0.75,-0.094 -1.347,-0.235 -1.792,-0.422c-0.445,-0.187 -0.749,-0.41 -0.913,-0.667c-0.164,-0.258 -0.246,-0.574 -0.246,-0.949l0,-63.228c0,-0.328 0.082,-0.632 0.246,-0.913c0.164,-0.281 0.468,-0.516 0.913,-0.703c0.445,-0.187 1.042,-0.328 1.792,-0.422c0.749,-0.093 1.686,-0.14 2.81,-0.14c1.171,0 2.131,0.047 2.88,0.14c0.75,0.094 1.335,0.235 1.757,0.422c0.421,0.187 0.726,0.422 0.913,0.703c0.187,0.281 0.281,0.585 0.281,0.913l0,63.228Zm1.335,-84.585c0,2.716 -0.515,4.566 -1.546,5.55c-1.03,0.983 -2.927,1.475 -5.69,1.475c-2.717,0 -4.579,-0.48 -5.586,-1.44c-1.007,-0.96 -1.51,-2.775 -1.51,-5.445c0,-2.716 0.515,-4.566 1.546,-5.55c1.03,-0.983 2.927,-1.475 5.69,-1.475c2.717,0 4.578,0.48 5.585,1.44c1.007,0.96 1.511,2.775 1.511,5.445Z" style="fill:#333;fill-rule:nonzero;"/><path d="M800.915,120.479c0,1.03 -0.024,1.897 -0.07,2.599c-0.047,0.703 -0.141,1.253 -0.281,1.651c-0.141,0.398 -0.317,0.703 -0.527,0.913c-0.211,0.211 -0.504,0.317 -0.879,0.317c-0.374,0 -0.831,-0.106 -1.37,-0.317c-0.538,-0.21 -1.147,-0.421 -1.826,-0.632c-0.679,-0.211 -1.44,-0.41 -2.283,-0.597c-0.843,-0.187 -1.757,-0.281 -2.74,-0.281c-1.171,0 -2.319,0.234 -3.443,0.703c-1.124,0.468 -2.306,1.241 -3.548,2.318c-1.241,1.077 -2.54,2.506 -3.899,4.285c-1.358,1.78 -2.857,3.958 -4.496,6.534l0,41.59c0,0.375 -0.094,0.691 -0.281,0.949c-0.187,0.257 -0.492,0.48 -0.913,0.667c-0.422,0.187 -1.007,0.328 -1.756,0.422c-0.75,0.093 -1.71,0.14 -2.881,0.14c-1.124,0 -2.061,-0.047 -2.81,-0.14c-0.749,-0.094 -1.347,-0.235 -1.792,-0.422c-0.444,-0.187 -0.749,-0.41 -0.913,-0.667c-0.164,-0.258 -0.246,-0.574 -0.246,-0.949l0,-63.228c0,-0.375 0.071,-0.691 0.211,-0.949c0.141,-0.257 0.422,-0.491 0.843,-0.702c0.422,-0.211 0.96,-0.351 1.616,-0.422c0.656,-0.07 1.522,-0.105 2.599,-0.105c1.031,0 1.885,0.035 2.565,0.105c0.679,0.071 1.206,0.211 1.58,0.422c0.375,0.211 0.644,0.445 0.808,0.702c0.164,0.258 0.246,0.574 0.246,0.949l0,9.203c1.733,-2.529 3.361,-4.59 4.883,-6.182c1.522,-1.593 2.962,-2.846 4.32,-3.759c1.359,-0.913 2.705,-1.545 4.04,-1.897c1.335,-0.351 2.681,-0.527 4.04,-0.527c0.608,0 1.299,0.036 2.072,0.106c0.773,0.07 1.581,0.199 2.424,0.386c0.843,0.188 1.604,0.398 2.283,0.632c0.679,0.235 1.159,0.469 1.44,0.703c0.281,0.234 0.469,0.457 0.562,0.667c0.094,0.211 0.176,0.48 0.246,0.808c0.07,0.328 0.117,0.808 0.141,1.441c0.023,0.632 0.035,1.487 0.035,2.564Z" style="fill:#333;fill-rule:nonzero;"/><path d="M907.911,179.562c0,0.375 -0.093,0.691 -0.281,0.949c-0.187,0.257 -0.491,0.48 -0.913,0.667c-0.422,0.187 -1.007,0.328 -1.756,0.422c-0.75,0.093 -1.686,0.14 -2.811,0.14c-1.17,0 -2.131,-0.047 -2.88,-0.14c-0.749,-0.094 -1.346,-0.235 -1.791,-0.422c-0.445,-0.187 -0.761,-0.41 -0.949,-0.667c-0.187,-0.258 -0.281,-0.574 -0.281,-0.949l0,-38.429c0,-2.669 -0.234,-5.105 -0.702,-7.306c-0.469,-2.201 -1.218,-4.098 -2.248,-5.691c-1.031,-1.592 -2.342,-2.81 -3.935,-3.653c-1.592,-0.843 -3.466,-1.264 -5.62,-1.264c-2.67,0 -5.351,1.03 -8.044,3.091c-2.693,2.061 -5.655,5.082 -8.887,9.063l0,44.189c0,0.375 -0.094,0.691 -0.281,0.949c-0.188,0.257 -0.504,0.48 -0.949,0.667c-0.445,0.187 -1.042,0.328 -1.791,0.422c-0.749,0.093 -1.686,0.14 -2.81,0.14c-1.077,0 -2.002,-0.047 -2.775,-0.14c-0.773,-0.094 -1.382,-0.235 -1.827,-0.422c-0.445,-0.187 -0.749,-0.41 -0.913,-0.667c-0.164,-0.258 -0.246,-0.574 -0.246,-0.949l0,-38.429c0,-2.669 -0.258,-5.105 -0.773,-7.306c-0.515,-2.201 -1.288,-4.098 -2.318,-5.691c-1.031,-1.592 -2.33,-2.81 -3.899,-3.653c-1.569,-0.843 -3.431,-1.264 -5.585,-1.264c-2.67,0 -5.363,1.03 -8.08,3.091c-2.716,2.061 -5.667,5.082 -8.852,9.063l0,44.189c0,0.375 -0.093,0.691 -0.281,0.949c-0.187,0.257 -0.491,0.48 -0.913,0.667c-0.421,0.187 -1.007,0.328 -1.756,0.422c-0.75,0.093 -1.71,0.14 -2.881,0.14c-1.124,0 -2.06,-0.047 -2.81,-0.14c-0.749,-0.094 -1.346,-0.235 -1.791,-0.422c-0.445,-0.187 -0.75,-0.41 -0.914,-0.667c-0.164,-0.258 -0.246,-0.574 -0.246,-0.949l0,-63.228c0,-0.375 0.071,-0.691 0.211,-0.949c0.141,-0.257 0.422,-0.491 0.843,-0.702c0.422,-0.211 0.96,-0.351 1.616,-0.422c0.656,-0.07 1.522,-0.105 2.6,-0.105c1.03,0 1.885,0.035 2.564,0.105c0.679,0.071 1.206,0.211 1.581,0.422c0.374,0.211 0.643,0.445 0.807,0.702c0.164,0.258 0.246,0.574 0.246,0.949l0,8.36c3.56,-3.981 7.014,-6.897 10.363,-8.747c3.349,-1.85 6.732,-2.775 10.151,-2.775c2.623,0 4.977,0.305 7.061,0.914c2.084,0.609 3.922,1.463 5.515,2.564c1.592,1.101 2.951,2.412 4.075,3.934c1.124,1.522 2.06,3.22 2.81,5.094c2.107,-2.295 4.11,-4.239 6.006,-5.831c1.897,-1.593 3.724,-2.881 5.48,-3.864c1.757,-0.984 3.466,-1.698 5.129,-2.143c1.662,-0.445 3.337,-0.668 5.023,-0.668c4.075,0 7.494,0.715 10.257,2.143c2.763,1.429 5,3.337 6.709,5.726c1.71,2.388 2.927,5.187 3.653,8.395c0.726,3.208 1.089,6.592 1.089,10.152l0,39.974Z" style="fill:#333;fill-rule:nonzero;"/><path d="M1016.52,116.193c0,0.328 -0.047,0.726 -0.141,1.195c-0.094,0.468 -0.257,1.053 -0.492,1.756l-18.617,60.067c-0.14,0.515 -0.363,0.937 -0.667,1.265c-0.305,0.327 -0.726,0.585 -1.265,0.772c-0.538,0.188 -1.276,0.316 -2.213,0.387c-0.937,0.07 -2.107,0.105 -3.513,0.105c-1.451,0 -2.669,-0.047 -3.653,-0.14c-0.983,-0.094 -1.768,-0.235 -2.353,-0.422c-0.586,-0.187 -1.019,-0.445 -1.3,-0.773c-0.281,-0.328 -0.492,-0.726 -0.632,-1.194l-13.278,-45.876l-0.141,-0.632l-0.14,0.632l-12.295,45.876c-0.14,0.515 -0.363,0.937 -0.667,1.265c-0.304,0.327 -0.761,0.585 -1.37,0.772c-0.609,0.188 -1.393,0.316 -2.353,0.387c-0.961,0.07 -2.143,0.105 -3.548,0.105c-1.452,0 -2.635,-0.047 -3.548,-0.14c-0.913,-0.094 -1.663,-0.235 -2.248,-0.422c-0.586,-0.187 -1.019,-0.445 -1.3,-0.773c-0.281,-0.328 -0.492,-0.726 -0.632,-1.194l-18.477,-60.067c-0.234,-0.703 -0.398,-1.288 -0.492,-1.756c-0.093,-0.469 -0.14,-0.867 -0.14,-1.195c0,-0.421 0.093,-0.761 0.281,-1.018c0.187,-0.258 0.503,-0.469 0.948,-0.633c0.445,-0.164 1.042,-0.269 1.792,-0.316c0.749,-0.047 1.662,-0.07 2.74,-0.07c1.311,0 2.365,0.035 3.161,0.105c0.796,0.071 1.405,0.188 1.827,0.352c0.421,0.164 0.726,0.398 0.913,0.702c0.187,0.305 0.351,0.668 0.492,1.089l15.245,52.128l0.14,0.633l0.141,-0.633l13.98,-52.128c0.094,-0.421 0.246,-0.784 0.457,-1.089c0.211,-0.304 0.527,-0.538 0.948,-0.702c0.422,-0.164 0.996,-0.281 1.722,-0.352c0.726,-0.07 1.674,-0.105 2.845,-0.105c1.124,0 2.049,0.035 2.775,0.105c0.726,0.071 1.3,0.188 1.721,0.352c0.422,0.164 0.726,0.386 0.913,0.667c0.188,0.281 0.328,0.609 0.422,0.984l15.104,52.268l0.141,0.633l0.07,-0.633l15.035,-52.128c0.093,-0.421 0.245,-0.784 0.456,-1.089c0.211,-0.304 0.539,-0.538 0.984,-0.702c0.445,-0.164 1.054,-0.281 1.826,-0.352c0.773,-0.07 1.768,-0.105 2.986,-0.105c1.124,0 2.026,0.023 2.705,0.07c0.679,0.047 1.218,0.164 1.616,0.351c0.398,0.188 0.679,0.399 0.843,0.633c0.164,0.234 0.246,0.562 0.246,0.983Z" style="fill:#333;fill-rule:nonzero;"/><path d="M1076.94,179.632c0,0.563 -0.187,0.984 -0.562,1.265c-0.375,0.281 -0.89,0.492 -1.546,0.632c-0.655,0.141 -1.616,0.211 -2.88,0.211c-1.218,0 -2.19,-0.07 -2.916,-0.211c-0.726,-0.14 -1.252,-0.351 -1.58,-0.632c-0.328,-0.281 -0.492,-0.702 -0.492,-1.265l0,-6.322c-2.763,2.95 -5.843,5.245 -9.238,6.885c-3.396,1.639 -6.991,2.458 -10.784,2.458c-3.326,0 -6.335,-0.433 -9.028,-1.299c-2.693,-0.867 -4.988,-2.12 -6.885,-3.759c-1.897,-1.639 -3.372,-3.653 -4.426,-6.042c-1.054,-2.388 -1.581,-5.105 -1.581,-8.149c0,-3.56 0.726,-6.651 2.178,-9.274c1.452,-2.622 3.536,-4.8 6.253,-6.533c2.716,-1.733 6.042,-3.033 9.976,-3.899c3.934,-0.867 8.36,-1.3 13.278,-1.3l8.711,0l0,-4.918c0,-2.435 -0.257,-4.59 -0.772,-6.463c-0.516,-1.874 -1.347,-3.431 -2.495,-4.672c-1.147,-1.241 -2.634,-2.178 -4.461,-2.81c-1.826,-0.632 -4.074,-0.949 -6.744,-0.949c-2.857,0 -5.421,0.34 -7.693,1.019c-2.271,0.679 -4.262,1.429 -5.971,2.248c-1.71,0.82 -3.138,1.569 -4.286,2.248c-1.147,0.679 -2.002,1.019 -2.564,1.019c-0.375,0 -0.703,-0.094 -0.984,-0.281c-0.281,-0.187 -0.527,-0.468 -0.737,-0.843c-0.211,-0.375 -0.363,-0.855 -0.457,-1.44c-0.094,-0.586 -0.14,-1.23 -0.14,-1.932c0,-1.171 0.081,-2.096 0.245,-2.775c0.164,-0.679 0.562,-1.323 1.195,-1.932c0.632,-0.609 1.721,-1.323 3.267,-2.143c1.545,-0.82 3.325,-1.569 5.339,-2.248c2.014,-0.679 4.215,-1.241 6.604,-1.686c2.388,-0.445 4.8,-0.668 7.236,-0.668c4.543,0 8.407,0.516 11.592,1.546c3.185,1.03 5.761,2.541 7.728,4.531c1.967,1.991 3.395,4.461 4.285,7.412c0.89,2.951 1.335,6.393 1.335,10.327l0,42.644Zm-11.522,-28.874l-9.905,0c-3.185,0 -5.949,0.269 -8.29,0.808c-2.342,0.539 -4.286,1.335 -5.832,2.389c-1.545,1.054 -2.681,2.318 -3.407,3.793c-0.726,1.476 -1.089,3.174 -1.089,5.094c0,3.278 1.042,5.889 3.127,7.833c2.084,1.944 4.999,2.916 8.746,2.916c3.044,0 5.866,-0.773 8.466,-2.319c2.599,-1.545 5.327,-3.91 8.184,-7.095l0,-13.419Z" style="fill:#333;fill-rule:nonzero;"/><path d="M1135.18,120.479c0,1.03 -0.023,1.897 -0.07,2.599c-0.047,0.703 -0.14,1.253 -0.281,1.651c-0.14,0.398 -0.316,0.703 -0.527,0.913c-0.211,0.211 -0.503,0.317 -0.878,0.317c-0.375,0 -0.831,-0.106 -1.37,-0.317c-0.539,-0.21 -1.147,-0.421 -1.827,-0.632c-0.679,-0.211 -1.44,-0.41 -2.283,-0.597c-0.843,-0.187 -1.756,-0.281 -2.74,-0.281c-1.171,0 -2.318,0.234 -3.442,0.703c-1.124,0.468 -2.307,1.241 -3.548,2.318c-1.241,1.077 -2.541,2.506 -3.899,4.285c-1.358,1.78 -2.857,3.958 -4.496,6.534l0,41.59c0,0.375 -0.094,0.691 -0.281,0.949c-0.188,0.257 -0.492,0.48 -0.914,0.667c-0.421,0.187 -1.007,0.328 -1.756,0.422c-0.749,0.093 -1.709,0.14 -2.88,0.14c-1.124,0 -2.061,-0.047 -2.811,-0.14c-0.749,-0.094 -1.346,-0.235 -1.791,-0.422c-0.445,-0.187 -0.749,-0.41 -0.913,-0.667c-0.164,-0.258 -0.246,-0.574 -0.246,-0.949l0,-63.228c0,-0.375 0.07,-0.691 0.211,-0.949c0.14,-0.257 0.421,-0.491 0.843,-0.702c0.421,-0.211 0.96,-0.351 1.615,-0.422c0.656,-0.07 1.523,-0.105 2.6,-0.105c1.03,0 1.885,0.035 2.564,0.105c0.679,0.071 1.206,0.211 1.581,0.422c0.375,0.211 0.644,0.445 0.808,0.702c0.164,0.258 0.246,0.574 0.246,0.949l0,9.203c1.733,-2.529 3.36,-4.59 4.882,-6.182c1.522,-1.593 2.963,-2.846 4.321,-3.759c1.358,-0.913 2.705,-1.545 4.039,-1.897c1.335,-0.351 2.682,-0.527 4.04,-0.527c0.609,0 1.3,0.036 2.073,0.106c0.772,0.07 1.58,0.199 2.423,0.386c0.843,0.188 1.604,0.398 2.284,0.632c0.679,0.235 1.159,0.469 1.44,0.703c0.281,0.234 0.468,0.457 0.562,0.667c0.093,0.211 0.175,0.48 0.246,0.808c0.07,0.328 0.117,0.808 0.14,1.441c0.024,0.632 0.035,1.487 0.035,2.564Z" style="fill:#333;fill-rule:nonzero;"/><path d="M1200.45,145.208c0,1.827 -0.459,3.126 -1.376,3.899c-0.917,0.773 -1.964,1.159 -3.141,1.159l-41.64,0c0,3.513 0.353,6.675 1.059,9.485c0.706,2.81 1.882,5.222 3.53,7.236c1.647,2.014 3.789,3.559 6.424,4.637c2.636,1.077 5.86,1.615 9.672,1.615c3.012,0 5.694,-0.245 8.047,-0.737c2.354,-0.492 4.389,-1.042 6.107,-1.651c1.718,-0.609 3.13,-1.159 4.236,-1.651c1.106,-0.492 1.942,-0.738 2.507,-0.738c0.329,0 0.623,0.082 0.882,0.246c0.259,0.164 0.458,0.41 0.6,0.738c0.141,0.328 0.247,0.784 0.317,1.37c0.071,0.585 0.106,1.299 0.106,2.142c0,0.609 -0.023,1.136 -0.07,1.581c-0.047,0.445 -0.105,0.843 -0.175,1.194c-0.071,0.352 -0.188,0.668 -0.352,0.949c-0.164,0.281 -0.374,0.55 -0.632,0.808c-0.258,0.257 -1.019,0.679 -2.283,1.264c-1.265,0.586 -2.904,1.16 -4.918,1.722c-2.014,0.562 -4.344,1.065 -6.99,1.51c-2.647,0.445 -5.468,0.667 -8.466,0.667c-5.199,0 -9.753,-0.726 -13.664,-2.177c-3.911,-1.452 -7.201,-3.607 -9.871,-6.464c-2.67,-2.857 -4.683,-6.44 -6.042,-10.749c-1.358,-4.309 -2.037,-9.32 -2.037,-15.034c0,-5.433 0.702,-10.316 2.108,-14.648c1.405,-4.332 3.43,-8.009 6.077,-11.03c2.646,-3.021 5.842,-5.339 9.589,-6.955c3.747,-1.616 7.939,-2.424 12.576,-2.424c4.964,0 9.191,0.797 12.68,2.389c3.49,1.592 6.358,3.735 8.606,6.428c2.249,2.693 3.9,5.855 4.953,9.485c1.054,3.629 1.581,7.505 1.581,11.627l0,2.107Zm-11.662,-3.442c0.14,-6.089 -1.214,-10.866 -4.065,-14.332c-2.85,-3.466 -7.079,-5.199 -12.687,-5.199c-2.875,0 -5.396,0.539 -7.564,1.616c-2.167,1.077 -3.982,2.506 -5.443,4.285c-1.461,1.78 -2.592,3.853 -3.393,6.218c-0.801,2.365 -1.248,4.836 -1.343,7.412l34.495,0Z" style="fill:#333;fill-rule:nonzero;"/><path d="M379.752,276.089c0,0.493 -0.016,0.924 -0.047,1.294c-0.03,0.369 -0.084,0.693 -0.161,0.97c-0.077,0.277 -0.177,0.524 -0.301,0.739c-0.123,0.216 -0.338,0.478 -0.646,0.786c-0.308,0.308 -0.955,0.778 -1.941,1.409c-0.986,0.631 -2.21,1.247 -3.673,1.848c-1.463,0.601 -3.142,1.109 -5.036,1.525c-1.894,0.416 -3.966,0.623 -6.214,0.623c-3.881,0 -7.385,-0.646 -10.511,-1.94c-3.127,-1.294 -5.791,-3.203 -7.993,-5.729c-2.203,-2.526 -3.897,-5.645 -5.083,-9.356c-1.185,-3.712 -1.778,-7.985 -1.778,-12.821c0,-4.959 0.639,-9.379 1.917,-13.26c1.278,-3.881 3.072,-7.169 5.383,-9.865c2.31,-2.695 5.074,-4.751 8.293,-6.168c3.219,-1.417 6.784,-2.125 10.696,-2.125c1.725,0 3.403,0.162 5.036,0.485c1.632,0.324 3.142,0.732 4.528,1.225c1.386,0.492 2.618,1.062 3.696,1.709c1.078,0.647 1.825,1.178 2.241,1.594c0.416,0.416 0.685,0.732 0.808,0.947c0.123,0.216 0.224,0.47 0.301,0.763c0.077,0.292 0.138,0.639 0.184,1.039c0.047,0.4 0.07,0.878 0.07,1.432c0,0.616 -0.031,1.14 -0.093,1.571c-0.062,0.431 -0.155,0.793 -0.279,1.086c-0.124,0.293 -0.271,0.508 -0.441,0.647c-0.171,0.138 -0.38,0.208 -0.628,0.208c-0.433,0 -1.036,-0.301 -1.811,-0.901c-0.774,-0.601 -1.773,-1.263 -2.996,-1.987c-1.223,-0.724 -2.71,-1.386 -4.459,-1.987c-1.749,-0.6 -3.847,-0.901 -6.294,-0.901c-2.663,0 -5.086,0.532 -7.269,1.594c-2.183,1.063 -4.049,2.626 -5.597,4.69c-1.549,2.064 -2.748,4.582 -3.6,7.554c-0.852,2.972 -1.278,6.368 -1.278,10.188c0,3.788 0.411,7.138 1.231,10.049c0.821,2.91 1.998,5.344 3.53,7.3c1.533,1.956 3.415,3.434 5.644,4.435c2.23,1.001 4.753,1.502 7.571,1.502c2.384,0 4.467,-0.293 6.247,-0.878c1.781,-0.585 3.298,-1.24 4.552,-1.964c1.254,-0.724 2.283,-1.378 3.089,-1.963c0.805,-0.586 1.44,-0.878 1.904,-0.878c0.217,0 0.403,0.046 0.558,0.138c0.154,0.093 0.278,0.27 0.371,0.532c0.093,0.262 0.163,0.623 0.209,1.085c0.046,0.462 0.07,1.048 0.07,1.756Z" style="fill:#333;fill-rule:nonzero;"/><path d="M428.079,262.136c0,3.388 -0.446,6.507 -1.339,9.356c-0.894,2.849 -2.226,5.306 -3.997,7.369c-1.771,2.064 -3.989,3.673 -6.653,4.828c-2.664,1.156 -5.752,1.733 -9.264,1.733c-3.419,0 -6.399,-0.508 -8.94,-1.525c-2.541,-1.016 -4.659,-2.495 -6.353,-4.435c-1.694,-1.941 -2.957,-4.297 -3.788,-7.069c-0.832,-2.772 -1.248,-5.914 -1.248,-9.425c0,-3.388 0.439,-6.507 1.317,-9.356c0.878,-2.849 2.202,-5.306 3.973,-7.37c1.772,-2.063 3.982,-3.665 6.63,-4.805c2.649,-1.139 5.745,-1.709 9.287,-1.709c3.419,0 6.399,0.508 8.94,1.525c2.541,1.016 4.659,2.494 6.353,4.435c1.694,1.94 2.965,4.297 3.812,7.069c0.847,2.772 1.27,5.898 1.27,9.379Zm-7.9,0.508c0,-2.248 -0.21,-4.374 -0.63,-6.376c-0.419,-2.002 -1.111,-3.757 -2.074,-5.267c-0.964,-1.509 -2.269,-2.703 -3.917,-3.58c-1.647,-0.878 -3.698,-1.317 -6.153,-1.317c-2.269,0 -4.219,0.4 -5.851,1.201c-1.632,0.801 -2.976,1.933 -4.033,3.396c-1.056,1.463 -1.841,3.196 -2.354,5.198c-0.513,2.002 -0.769,4.189 -0.769,6.56c0,2.28 0.21,4.42 0.629,6.423c0.42,2.002 1.119,3.75 2.098,5.244c0.979,1.493 2.292,2.679 3.939,3.557c1.648,0.878 3.699,1.317 6.154,1.317c2.238,0 4.181,-0.401 5.828,-1.201c1.647,-0.801 2.999,-1.925 4.056,-3.373c1.056,-1.448 1.833,-3.173 2.331,-5.175c0.497,-2.002 0.746,-4.204 0.746,-6.607Z" style="fill:#333;fill-rule:nonzero;"/><path d="M500.987,283.389c0,0.247 -0.062,0.454 -0.185,0.624c-0.123,0.169 -0.323,0.316 -0.601,0.439c-0.277,0.123 -0.662,0.215 -1.155,0.277c-0.493,0.062 -1.109,0.092 -1.848,0.092c-0.77,0 -1.401,-0.03 -1.894,-0.092c-0.493,-0.062 -0.886,-0.154 -1.178,-0.277c-0.293,-0.123 -0.501,-0.27 -0.624,-0.439c-0.123,-0.17 -0.185,-0.377 -0.185,-0.624l0,-25.273c0,-1.755 -0.154,-3.357 -0.462,-4.805c-0.308,-1.447 -0.801,-2.695 -1.478,-3.742c-0.678,-1.047 -1.54,-1.848 -2.588,-2.403c-1.047,-0.554 -2.279,-0.831 -3.696,-0.831c-1.756,0 -3.519,0.677 -5.29,2.033c-1.771,1.355 -3.719,3.342 -5.845,5.96l0,29.061c0,0.247 -0.061,0.454 -0.184,0.624c-0.124,0.169 -0.332,0.316 -0.624,0.439c-0.293,0.123 -0.685,0.215 -1.178,0.277c-0.493,0.062 -1.109,0.092 -1.848,0.092c-0.709,0 -1.317,-0.03 -1.825,-0.092c-0.509,-0.062 -0.909,-0.154 -1.202,-0.277c-0.292,-0.123 -0.492,-0.27 -0.6,-0.439c-0.108,-0.17 -0.162,-0.377 -0.162,-0.624l0,-25.273c0,-1.755 -0.169,-3.357 -0.508,-4.805c-0.339,-1.447 -0.847,-2.695 -1.525,-3.742c-0.678,-1.047 -1.532,-1.848 -2.564,-2.403c-1.032,-0.554 -2.256,-0.831 -3.673,-0.831c-1.756,0 -3.527,0.677 -5.314,2.033c-1.786,1.355 -3.727,3.342 -5.821,5.96l0,29.061c0,0.247 -0.062,0.454 -0.185,0.624c-0.123,0.169 -0.323,0.316 -0.6,0.439c-0.278,0.123 -0.663,0.215 -1.156,0.277c-0.492,0.062 -1.124,0.092 -1.894,0.092c-0.739,0 -1.355,-0.03 -1.848,-0.092c-0.493,-0.062 -0.885,-0.154 -1.178,-0.277c-0.293,-0.123 -0.493,-0.27 -0.601,-0.439c-0.108,-0.17 -0.161,-0.377 -0.161,-0.624l0,-41.582c0,-0.246 0.046,-0.454 0.138,-0.624c0.093,-0.169 0.277,-0.323 0.555,-0.462c0.277,-0.138 0.631,-0.231 1.062,-0.277c0.432,-0.046 1.001,-0.069 1.71,-0.069c0.677,0 1.24,0.023 1.686,0.069c0.447,0.046 0.793,0.139 1.04,0.277c0.246,0.139 0.423,0.293 0.531,0.462c0.108,0.17 0.162,0.378 0.162,0.624l0,5.498c2.341,-2.618 4.612,-4.535 6.815,-5.752c2.202,-1.217 4.427,-1.825 6.676,-1.825c1.725,0 3.273,0.2 4.643,0.601c1.371,0.4 2.58,0.962 3.627,1.686c1.047,0.724 1.941,1.586 2.68,2.587c0.739,1.001 1.355,2.118 1.848,3.35c1.386,-1.509 2.703,-2.788 3.95,-3.835c1.248,-1.047 2.449,-1.894 3.604,-2.541c1.155,-0.647 2.279,-1.117 3.373,-1.409c1.093,-0.293 2.194,-0.439 3.303,-0.439c2.68,0 4.929,0.47 6.746,1.409c1.817,0.939 3.288,2.195 4.412,3.766c1.124,1.57 1.925,3.411 2.403,5.521c0.477,2.11 0.716,4.335 0.716,6.676l0,26.289Z" style="fill:#333;fill-rule:nonzero;"/><path d="M576.574,283.389c0,0.247 -0.062,0.454 -0.185,0.624c-0.123,0.169 -0.323,0.316 -0.601,0.439c-0.277,0.123 -0.662,0.215 -1.155,0.277c-0.492,0.062 -1.108,0.092 -1.848,0.092c-0.77,0 -1.401,-0.03 -1.894,-0.092c-0.493,-0.062 -0.886,-0.154 -1.178,-0.277c-0.293,-0.123 -0.501,-0.27 -0.624,-0.439c-0.123,-0.17 -0.185,-0.377 -0.185,-0.624l0,-25.273c0,-1.755 -0.154,-3.357 -0.462,-4.805c-0.308,-1.447 -0.801,-2.695 -1.478,-3.742c-0.678,-1.047 -1.54,-1.848 -2.588,-2.403c-1.047,-0.554 -2.279,-0.831 -3.696,-0.831c-1.755,0 -3.519,0.677 -5.29,2.033c-1.771,1.355 -3.719,3.342 -5.844,5.96l0,29.061c0,0.247 -0.062,0.454 -0.185,0.624c-0.124,0.169 -0.331,0.316 -0.624,0.439c-0.293,0.123 -0.685,0.215 -1.178,0.277c-0.493,0.062 -1.109,0.092 -1.848,0.092c-0.709,0 -1.317,-0.03 -1.825,-0.092c-0.509,-0.062 -0.909,-0.154 -1.202,-0.277c-0.292,-0.123 -0.492,-0.27 -0.6,-0.439c-0.108,-0.17 -0.162,-0.377 -0.162,-0.624l0,-25.273c0,-1.755 -0.169,-3.357 -0.508,-4.805c-0.339,-1.447 -0.847,-2.695 -1.525,-3.742c-0.677,-1.047 -1.532,-1.848 -2.564,-2.403c-1.032,-0.554 -2.256,-0.831 -3.673,-0.831c-1.756,0 -3.527,0.677 -5.313,2.033c-1.787,1.355 -3.727,3.342 -5.822,5.96l0,29.061c0,0.247 -0.061,0.454 -0.185,0.624c-0.123,0.169 -0.323,0.316 -0.6,0.439c-0.278,0.123 -0.663,0.215 -1.155,0.277c-0.493,0.062 -1.125,0.092 -1.895,0.092c-0.739,0 -1.355,-0.03 -1.848,-0.092c-0.493,-0.062 -0.885,-0.154 -1.178,-0.277c-0.293,-0.123 -0.493,-0.27 -0.601,-0.439c-0.107,-0.17 -0.161,-0.377 -0.161,-0.624l0,-41.582c0,-0.246 0.046,-0.454 0.138,-0.624c0.093,-0.169 0.278,-0.323 0.555,-0.462c0.277,-0.138 0.631,-0.231 1.062,-0.277c0.432,-0.046 1.001,-0.069 1.71,-0.069c0.678,0 1.24,0.023 1.686,0.069c0.447,0.046 0.793,0.139 1.04,0.277c0.246,0.139 0.423,0.293 0.531,0.462c0.108,0.17 0.162,0.378 0.162,0.624l0,5.498c2.341,-2.618 4.612,-4.535 6.815,-5.752c2.202,-1.217 4.427,-1.825 6.676,-1.825c1.725,0 3.273,0.2 4.643,0.601c1.371,0.4 2.58,0.962 3.627,1.686c1.047,0.724 1.941,1.586 2.68,2.587c0.739,1.001 1.355,2.118 1.848,3.35c1.386,-1.509 2.703,-2.788 3.95,-3.835c1.248,-1.047 2.449,-1.894 3.604,-2.541c1.155,-0.647 2.279,-1.117 3.373,-1.409c1.093,-0.293 2.195,-0.439 3.303,-0.439c2.68,0 4.929,0.47 6.746,1.409c1.817,0.939 3.288,2.195 4.412,3.766c1.125,1.57 1.925,3.411 2.403,5.521c0.477,2.11 0.716,4.335 0.716,6.676l0,26.289Z" style="fill:#333;fill-rule:nonzero;"/><path d="M626.103,283.389c0,0.247 -0.054,0.454 -0.162,0.624c-0.108,0.169 -0.3,0.316 -0.577,0.439c-0.278,0.123 -0.639,0.215 -1.086,0.277c-0.447,0.062 -0.993,0.092 -1.64,0.092c-0.709,0 -1.286,-0.03 -1.733,-0.092c-0.447,-0.062 -0.801,-0.154 -1.063,-0.277c-0.261,-0.123 -0.438,-0.27 -0.531,-0.439c-0.092,-0.17 -0.138,-0.377 -0.138,-0.624l0,-5.498c-2.372,2.618 -4.713,4.528 -7.023,5.729c-2.31,1.201 -4.651,1.802 -7.023,1.802c-2.772,0 -5.105,-0.462 -7,-1.386c-1.894,-0.924 -3.426,-2.179 -4.597,-3.766c-1.17,-1.586 -2.01,-3.434 -2.518,-5.544c-0.508,-2.11 -0.762,-4.674 -0.762,-7.693l0,-25.226c0,-0.246 0.054,-0.454 0.162,-0.624c0.107,-0.169 0.315,-0.323 0.623,-0.462c0.308,-0.138 0.709,-0.231 1.202,-0.277c0.492,-0.046 1.108,-0.069 1.848,-0.069c0.739,0 1.355,0.023 1.848,0.069c0.493,0.046 0.885,0.139 1.178,0.277c0.292,0.139 0.5,0.293 0.624,0.462c0.123,0.17 0.184,0.378 0.184,0.624l0,24.21c0,2.433 0.178,4.382 0.532,5.845c0.354,1.463 0.893,2.71 1.617,3.742c0.724,1.032 1.64,1.833 2.749,2.403c1.109,0.569 2.402,0.854 3.881,0.854c1.91,0 3.812,-0.677 5.706,-2.033c1.894,-1.355 3.904,-3.342 6.029,-5.96l0,-29.061c0,-0.246 0.054,-0.454 0.162,-0.624c0.108,-0.169 0.316,-0.323 0.624,-0.462c0.308,-0.138 0.7,-0.231 1.178,-0.277c0.477,-0.046 1.101,-0.069 1.871,-0.069c0.739,0 1.355,0.023 1.848,0.069c0.493,0.046 0.878,0.139 1.155,0.277c0.277,0.139 0.485,0.293 0.624,0.462c0.139,0.17 0.208,0.378 0.208,0.624l0,41.582Z" style="fill:#333;fill-rule:nonzero;"/><path d="M676.001,283.389c0,0.247 -0.061,0.454 -0.184,0.624c-0.124,0.169 -0.324,0.316 -0.601,0.439c-0.277,0.123 -0.662,0.215 -1.155,0.277c-0.493,0.062 -1.109,0.092 -1.848,0.092c-0.77,0 -1.402,-0.03 -1.894,-0.092c-0.493,-0.062 -0.878,-0.154 -1.155,-0.277c-0.278,-0.123 -0.478,-0.27 -0.601,-0.439c-0.123,-0.17 -0.185,-0.377 -0.185,-0.624l0,-24.349c0,-2.371 -0.185,-4.281 -0.554,-5.729c-0.37,-1.447 -0.909,-2.695 -1.617,-3.742c-0.709,-1.047 -1.625,-1.848 -2.749,-2.403c-1.125,-0.554 -2.426,-0.831 -3.905,-0.831c-1.909,0 -3.819,0.677 -5.729,2.033c-1.909,1.355 -3.911,3.342 -6.006,5.96l0,29.061c0,0.247 -0.062,0.454 -0.185,0.624c-0.123,0.169 -0.323,0.316 -0.6,0.439c-0.278,0.123 -0.663,0.215 -1.155,0.277c-0.493,0.062 -1.125,0.092 -1.895,0.092c-0.739,0 -1.355,-0.03 -1.848,-0.092c-0.493,-0.062 -0.885,-0.154 -1.178,-0.277c-0.293,-0.123 -0.493,-0.27 -0.601,-0.439c-0.107,-0.17 -0.161,-0.377 -0.161,-0.624l0,-41.582c0,-0.246 0.046,-0.454 0.138,-0.624c0.093,-0.169 0.277,-0.323 0.555,-0.462c0.277,-0.138 0.631,-0.231 1.062,-0.277c0.432,-0.046 1.001,-0.069 1.71,-0.069c0.677,0 1.24,0.023 1.686,0.069c0.447,0.046 0.793,0.139 1.04,0.277c0.246,0.139 0.423,0.293 0.531,0.462c0.108,0.17 0.162,0.378 0.162,0.624l0,5.498c2.341,-2.618 4.674,-4.535 6.999,-5.752c2.326,-1.217 4.675,-1.825 7.046,-1.825c2.772,0 5.106,0.47 7,1.409c1.894,0.939 3.427,2.195 4.597,3.766c1.171,1.57 2.01,3.411 2.518,5.521c0.508,2.11 0.762,4.643 0.762,7.6l0,25.365Z" style="fill:#333;fill-rule:nonzero;"/><path d="M697.532,283.389c0,0.247 -0.062,0.454 -0.185,0.624c-0.123,0.169 -0.323,0.316 -0.601,0.439c-0.277,0.123 -0.662,0.215 -1.155,0.277c-0.493,0.062 -1.124,0.092 -1.894,0.092c-0.739,0 -1.355,-0.03 -1.848,-0.092c-0.493,-0.062 -0.886,-0.154 -1.178,-0.277c-0.293,-0.123 -0.493,-0.27 -0.601,-0.439c-0.108,-0.17 -0.162,-0.377 -0.162,-0.624l0,-41.582c0,-0.216 0.054,-0.416 0.162,-0.601c0.108,-0.184 0.308,-0.338 0.601,-0.462c0.292,-0.123 0.685,-0.215 1.178,-0.277c0.493,-0.061 1.109,-0.092 1.848,-0.092c0.77,0 1.401,0.031 1.894,0.092c0.493,0.062 0.878,0.154 1.155,0.277c0.278,0.124 0.478,0.278 0.601,0.462c0.123,0.185 0.185,0.385 0.185,0.601l0,41.582Zm0.878,-55.628c0,1.787 -0.339,3.004 -1.017,3.65c-0.677,0.647 -1.925,0.971 -3.742,0.971c-1.787,0 -3.011,-0.316 -3.673,-0.947c-0.663,-0.632 -0.994,-1.825 -0.994,-3.581c0,-1.787 0.339,-3.003 1.017,-3.65c0.677,-0.647 1.925,-0.97 3.742,-0.97c1.787,0 3.011,0.315 3.673,0.947c0.663,0.631 0.994,1.825 0.994,3.58Z" style="fill:#333;fill-rule:nonzero;"/><path d="M733.246,280.34c0,0.893 -0.061,1.601 -0.185,2.125c-0.123,0.524 -0.308,0.909 -0.554,1.155c-0.246,0.247 -0.616,0.478 -1.109,0.693c-0.493,0.216 -1.055,0.393 -1.686,0.532c-0.632,0.138 -1.302,0.254 -2.01,0.346c-0.708,0.092 -1.417,0.139 -2.125,0.139c-2.156,0 -4.005,-0.285 -5.545,-0.855c-1.54,-0.57 -2.803,-1.432 -3.788,-2.587c-0.986,-1.155 -1.702,-2.619 -2.149,-4.39c-0.446,-1.771 -0.67,-3.858 -0.67,-6.26l0,-24.303l-5.821,0c-0.462,0 -0.832,-0.246 -1.109,-0.739c-0.277,-0.493 -0.416,-1.293 -0.416,-2.402c0,-0.586 0.039,-1.078 0.116,-1.479c0.077,-0.4 0.177,-0.731 0.3,-0.993c0.123,-0.262 0.285,-0.447 0.485,-0.555c0.2,-0.107 0.424,-0.161 0.67,-0.161l5.775,0l0,-9.888c0,-0.215 0.054,-0.415 0.162,-0.6c0.108,-0.185 0.308,-0.347 0.601,-0.485c0.292,-0.139 0.685,-0.239 1.178,-0.301c0.493,-0.061 1.109,-0.092 1.848,-0.092c0.77,0 1.401,0.031 1.894,0.092c0.493,0.062 0.878,0.162 1.155,0.301c0.278,0.138 0.478,0.3 0.601,0.485c0.123,0.185 0.185,0.385 0.185,0.6l0,9.888l10.673,0c0.246,0 0.462,0.054 0.646,0.161c0.185,0.108 0.347,0.293 0.486,0.555c0.138,0.262 0.238,0.593 0.3,0.993c0.061,0.401 0.092,0.893 0.092,1.479c0,1.109 -0.138,1.909 -0.416,2.402c-0.277,0.493 -0.646,0.739 -1.108,0.739l-10.673,0l0,23.194c0,2.865 0.423,5.028 1.27,6.491c0.847,1.464 2.364,2.195 4.551,2.195c0.709,0 1.34,-0.069 1.895,-0.208c0.554,-0.138 1.047,-0.285 1.478,-0.439c0.431,-0.154 0.801,-0.3 1.109,-0.439c0.308,-0.138 0.585,-0.208 0.832,-0.208c0.154,0 0.3,0.039 0.439,0.116c0.138,0.077 0.246,0.223 0.323,0.439c0.077,0.215 0.146,0.508 0.208,0.878c0.061,0.369 0.092,0.831 0.092,1.386Z" style="fill:#333;fill-rule:nonzero;"/><path d="M762.261,284.544l-5.544,15.293c-0.185,0.493 -0.654,0.87 -1.409,1.132c-0.755,0.262 -1.902,0.393 -3.442,0.393c-0.801,0 -1.448,-0.039 -1.941,-0.116c-0.493,-0.077 -0.87,-0.208 -1.132,-0.392c-0.261,-0.185 -0.408,-0.432 -0.439,-0.74c-0.03,-0.308 0.047,-0.677 0.231,-1.108l5.73,-14.462c-0.278,-0.123 -0.539,-0.323 -0.786,-0.6c-0.246,-0.278 -0.416,-0.57 -0.508,-0.878l-14.831,-39.734c-0.247,-0.647 -0.37,-1.155 -0.37,-1.525c0,-0.37 0.123,-0.662 0.37,-0.878c0.246,-0.215 0.647,-0.362 1.201,-0.439c0.555,-0.077 1.294,-0.115 2.218,-0.115c0.924,0 1.648,0.023 2.171,0.069c0.524,0.046 0.94,0.131 1.248,0.254c0.308,0.123 0.531,0.3 0.67,0.531c0.138,0.231 0.285,0.547 0.439,0.948l11.874,33.358l0.138,0l11.459,-33.543c0.184,-0.585 0.408,-0.963 0.669,-1.132c0.262,-0.17 0.655,-0.293 1.179,-0.37c0.523,-0.077 1.278,-0.115 2.264,-0.115c0.862,0 1.57,0.038 2.125,0.115c0.554,0.077 0.962,0.224 1.224,0.439c0.262,0.216 0.393,0.508 0.393,0.878c0,0.37 -0.092,0.832 -0.277,1.386l-14.924,41.351Z" style="fill:#333;fill-rule:nonzero;"/><path d="M840.528,267.773c0,2.803 -0.516,5.298 -1.548,7.485c-1.031,2.186 -2.464,4.042 -4.296,5.567c-1.833,1.525 -3.989,2.672 -6.469,3.442c-2.479,0.77 -5.151,1.155 -8.016,1.155c-2.002,0 -3.858,-0.169 -5.567,-0.508c-1.71,-0.339 -3.234,-0.755 -4.574,-1.248c-1.34,-0.492 -2.464,-1.001 -3.373,-1.524c-0.909,-0.524 -1.54,-0.971 -1.894,-1.34c-0.355,-0.37 -0.616,-0.84 -0.786,-1.409c-0.169,-0.57 -0.254,-1.333 -0.254,-2.287c0,-0.678 0.031,-1.24 0.093,-1.687c0.061,-0.446 0.154,-0.808 0.277,-1.086c0.123,-0.277 0.277,-0.469 0.462,-0.577c0.185,-0.108 0.4,-0.162 0.647,-0.162c0.431,0 1.039,0.262 1.825,0.786c0.785,0.523 1.794,1.093 3.026,1.709c1.232,0.616 2.718,1.194 4.458,1.733c1.741,0.539 3.75,0.808 6.03,0.808c1.725,0 3.303,-0.231 4.736,-0.693c1.432,-0.462 2.664,-1.116 3.696,-1.963c1.032,-0.847 1.825,-1.887 2.379,-3.119c0.555,-1.232 0.832,-2.634 0.832,-4.204c0,-1.695 -0.385,-3.142 -1.155,-4.343c-0.77,-1.202 -1.787,-2.257 -3.05,-3.165c-1.262,-0.909 -2.702,-1.741 -4.32,-2.495c-1.617,-0.755 -3.272,-1.525 -4.966,-2.31c-1.694,-0.786 -3.342,-1.656 -4.944,-2.611c-1.602,-0.955 -3.034,-2.079 -4.297,-3.373c-1.263,-1.293 -2.287,-2.81 -3.072,-4.551c-0.786,-1.74 -1.178,-3.827 -1.178,-6.26c0,-2.495 0.454,-4.72 1.363,-6.676c0.908,-1.956 2.171,-3.596 3.788,-4.921c1.617,-1.324 3.542,-2.333 5.775,-3.026c2.234,-0.693 4.644,-1.04 7.231,-1.04c1.325,0 2.657,0.116 3.997,0.347c1.34,0.231 2.602,0.539 3.788,0.924c1.186,0.385 2.241,0.816 3.165,1.294c0.924,0.477 1.532,0.862 1.825,1.155c0.293,0.292 0.485,0.523 0.578,0.693c0.092,0.169 0.169,0.385 0.231,0.647c0.061,0.261 0.107,0.577 0.138,0.947c0.031,0.369 0.046,0.847 0.046,1.432c0,0.554 -0.023,1.047 -0.069,1.479c-0.046,0.431 -0.115,0.793 -0.208,1.085c-0.092,0.293 -0.223,0.508 -0.392,0.647c-0.17,0.139 -0.362,0.208 -0.578,0.208c-0.339,0 -0.87,-0.216 -1.594,-0.647c-0.724,-0.431 -1.609,-0.916 -2.657,-1.455c-1.047,-0.539 -2.287,-1.032 -3.719,-1.479c-1.432,-0.446 -3.042,-0.67 -4.828,-0.67c-1.663,0 -3.111,0.224 -4.343,0.67c-1.232,0.447 -2.249,1.04 -3.049,1.779c-0.801,0.739 -1.402,1.617 -1.802,2.634c-0.401,1.016 -0.601,2.094 -0.601,3.234c0,1.663 0.385,3.095 1.155,4.297c0.77,1.201 1.794,2.264 3.073,3.188c1.278,0.924 2.733,1.771 4.366,2.541c1.632,0.77 3.295,1.548 4.99,2.333c1.694,0.785 3.357,1.648 4.989,2.587c1.633,0.94 3.088,2.049 4.367,3.327c1.278,1.278 2.31,2.787 3.095,4.528c0.786,1.74 1.178,3.796 1.178,6.168Z" style="fill:#333;fill-rule:nonzero;"/><path d="M886.638,283.389c0,0.247 -0.054,0.454 -0.161,0.624c-0.108,0.169 -0.301,0.316 -0.578,0.439c-0.277,0.123 -0.639,0.215 -1.086,0.277c-0.446,0.062 -0.993,0.092 -1.64,0.092c-0.708,0 -1.286,-0.03 -1.733,-0.092c-0.446,-0.062 -0.8,-0.154 -1.062,-0.277c-0.262,-0.123 -0.439,-0.27 -0.532,-0.439c-0.092,-0.17 -0.138,-0.377 -0.138,-0.624l0,-5.498c-2.372,2.618 -4.713,4.528 -7.023,5.729c-2.31,1.201 -4.651,1.802 -7.023,1.802c-2.772,0 -5.105,-0.462 -6.999,-1.386c-1.895,-0.924 -3.427,-2.179 -4.597,-3.766c-1.171,-1.586 -2.01,-3.434 -2.519,-5.544c-0.508,-2.11 -0.762,-4.674 -0.762,-7.693l0,-25.226c0,-0.246 0.054,-0.454 0.162,-0.624c0.108,-0.169 0.316,-0.323 0.624,-0.462c0.308,-0.138 0.708,-0.231 1.201,-0.277c0.493,-0.046 1.109,-0.069 1.848,-0.069c0.739,0 1.355,0.023 1.848,0.069c0.493,0.046 0.886,0.139 1.178,0.277c0.293,0.139 0.501,0.293 0.624,0.462c0.123,0.17 0.185,0.378 0.185,0.624l0,24.21c0,2.433 0.177,4.382 0.531,5.845c0.354,1.463 0.893,2.71 1.617,3.742c0.724,1.032 1.64,1.833 2.749,2.403c1.109,0.569 2.403,0.854 3.881,0.854c1.91,0 3.812,-0.677 5.706,-2.033c1.895,-1.355 3.904,-3.342 6.03,-5.96l0,-29.061c0,-0.246 0.054,-0.454 0.161,-0.624c0.108,-0.169 0.316,-0.323 0.624,-0.462c0.308,-0.138 0.701,-0.231 1.178,-0.277c0.478,-0.046 1.101,-0.069 1.871,-0.069c0.74,0 1.356,0.023 1.849,0.069c0.492,0.046 0.877,0.139 1.155,0.277c0.277,0.139 0.485,0.293 0.623,0.462c0.139,0.17 0.208,0.378 0.208,0.624l0,41.582Z" style="fill:#333;fill-rule:nonzero;"/><path d="M938.986,261.951c0,3.635 -0.393,6.9 -1.179,9.795c-0.785,2.895 -1.94,5.352 -3.465,7.369c-1.524,2.018 -3.411,3.573 -5.66,4.667c-2.248,1.093 -4.82,1.64 -7.715,1.64c-1.232,0 -2.372,-0.123 -3.419,-0.37c-1.048,-0.246 -2.072,-0.631 -3.073,-1.155c-1.001,-0.523 -1.994,-1.185 -2.98,-1.986c-0.986,-0.801 -2.033,-1.741 -3.142,-2.819l0,20.791c0,0.247 -0.061,0.462 -0.184,0.647c-0.124,0.185 -0.324,0.339 -0.601,0.462c-0.277,0.123 -0.662,0.216 -1.155,0.277c-0.493,0.062 -1.124,0.093 -1.894,0.093c-0.74,0 -1.356,-0.031 -1.849,-0.093c-0.492,-0.061 -0.885,-0.154 -1.178,-0.277c-0.292,-0.123 -0.493,-0.277 -0.6,-0.462c-0.108,-0.185 -0.162,-0.4 -0.162,-0.647l0,-58.076c0,-0.277 0.046,-0.501 0.139,-0.67c0.092,-0.169 0.277,-0.316 0.554,-0.439c0.277,-0.123 0.631,-0.208 1.063,-0.254c0.431,-0.046 0.954,-0.069 1.571,-0.069c0.646,0 1.178,0.023 1.594,0.069c0.415,0.046 0.762,0.131 1.039,0.254c0.277,0.123 0.47,0.27 0.578,0.439c0.107,0.169 0.161,0.393 0.161,0.67l0,5.59c1.263,-1.293 2.48,-2.417 3.65,-3.372c1.171,-0.955 2.349,-1.748 3.535,-2.38c1.186,-0.631 2.402,-1.109 3.65,-1.432c1.247,-0.323 2.564,-0.485 3.95,-0.485c3.019,0 5.591,0.585 7.716,1.756c2.125,1.17 3.858,2.772 5.198,4.805c1.34,2.033 2.317,4.397 2.933,7.092c0.617,2.695 0.925,5.552 0.925,8.57Zm-7.901,0.878c0,-2.125 -0.163,-4.181 -0.488,-6.168c-0.325,-1.987 -0.883,-3.75 -1.673,-5.29c-0.791,-1.54 -1.852,-2.772 -3.185,-3.696c-1.332,-0.924 -2.99,-1.386 -4.974,-1.386c-0.992,0 -1.968,0.146 -2.929,0.439c-0.96,0.292 -1.936,0.754 -2.928,1.386c-0.992,0.631 -2.03,1.463 -3.115,2.495c-1.085,1.031 -2.231,2.302 -3.44,3.811l0,16.541c2.108,2.556 4.107,4.512 5.997,5.867c1.891,1.356 3.874,2.033 5.95,2.033c1.922,0 3.572,-0.462 4.951,-1.386c1.379,-0.924 2.495,-2.156 3.347,-3.696c0.852,-1.54 1.48,-3.265 1.883,-5.175c0.403,-1.909 0.604,-3.834 0.604,-5.775Z" style="fill:#333;fill-rule:nonzero;"/><path d="M988.699,261.951c0,3.635 -0.392,6.9 -1.178,9.795c-0.785,2.895 -1.94,5.352 -3.465,7.369c-1.525,2.018 -3.411,3.573 -5.66,4.667c-2.248,1.093 -4.82,1.64 -7.716,1.64c-1.232,0 -2.371,-0.123 -3.419,-0.37c-1.047,-0.246 -2.071,-0.631 -3.072,-1.155c-1.001,-0.523 -1.994,-1.185 -2.98,-1.986c-0.986,-0.801 -2.033,-1.741 -3.142,-2.819l0,20.791c0,0.247 -0.061,0.462 -0.185,0.647c-0.123,0.185 -0.323,0.339 -0.6,0.462c-0.278,0.123 -0.663,0.216 -1.155,0.277c-0.493,0.062 -1.125,0.093 -1.895,0.093c-0.739,0 -1.355,-0.031 -1.848,-0.093c-0.493,-0.061 -0.885,-0.154 -1.178,-0.277c-0.293,-0.123 -0.493,-0.277 -0.601,-0.462c-0.107,-0.185 -0.161,-0.4 -0.161,-0.647l0,-58.076c0,-0.277 0.046,-0.501 0.138,-0.67c0.093,-0.169 0.278,-0.316 0.555,-0.439c0.277,-0.123 0.631,-0.208 1.062,-0.254c0.432,-0.046 0.955,-0.069 1.571,-0.069c0.647,0 1.178,0.023 1.594,0.069c0.416,0.046 0.763,0.131 1.04,0.254c0.277,0.123 0.47,0.27 0.577,0.439c0.108,0.169 0.162,0.393 0.162,0.67l0,5.59c1.263,-1.293 2.48,-2.417 3.65,-3.372c1.171,-0.955 2.349,-1.748 3.535,-2.38c1.185,-0.631 2.402,-1.109 3.65,-1.432c1.247,-0.323 2.564,-0.485 3.95,-0.485c3.018,0 5.59,0.585 7.716,1.756c2.125,1.17 3.858,2.772 5.197,4.805c1.34,2.033 2.318,4.397 2.934,7.092c0.616,2.695 0.924,5.552 0.924,8.57Zm-7.9,0.878c0,-2.125 -0.163,-4.181 -0.488,-6.168c-0.326,-1.987 -0.883,-3.75 -1.674,-5.29c-0.79,-1.54 -1.851,-2.772 -3.184,-3.696c-1.333,-0.924 -2.991,-1.386 -4.974,-1.386c-0.992,0 -1.968,0.146 -2.929,0.439c-0.96,0.292 -1.937,0.754 -2.928,1.386c-0.992,0.631 -2.03,1.463 -3.115,2.495c-1.085,1.031 -2.231,2.302 -3.44,3.811l0,16.541c2.108,2.556 4.107,4.512 5.997,5.867c1.891,1.356 3.874,2.033 5.95,2.033c1.921,0 3.571,-0.462 4.951,-1.386c1.379,-0.924 2.494,-2.156 3.347,-3.696c0.852,-1.54 1.48,-3.265 1.882,-5.175c0.403,-1.909 0.605,-3.834 0.605,-5.775Z" style="fill:#333;fill-rule:nonzero;"/><path d="M1038.83,262.136c0,3.388 -0.447,6.507 -1.34,9.356c-0.893,2.849 -2.225,5.306 -3.996,7.369c-1.772,2.064 -3.989,3.673 -6.654,4.828c-2.664,1.156 -5.752,1.733 -9.263,1.733c-3.419,0 -6.399,-0.508 -8.94,-1.525c-2.541,-1.016 -4.659,-2.495 -6.353,-4.435c-1.694,-1.941 -2.957,-4.297 -3.789,-7.069c-0.831,-2.772 -1.247,-5.914 -1.247,-9.425c0,-3.388 0.439,-6.507 1.317,-9.356c0.877,-2.849 2.202,-5.306 3.973,-7.37c1.771,-2.063 3.981,-3.665 6.63,-4.805c2.649,-1.139 5.744,-1.709 9.287,-1.709c3.419,0 6.399,0.508 8.94,1.525c2.541,1.016 4.659,2.494 6.353,4.435c1.694,1.94 2.964,4.297 3.811,7.069c0.847,2.772 1.271,5.898 1.271,9.379Zm-7.901,0.508c0,-2.248 -0.21,-4.374 -0.629,-6.376c-0.42,-2.002 -1.111,-3.757 -2.075,-5.267c-0.963,-1.509 -2.269,-2.703 -3.916,-3.58c-1.647,-0.878 -3.698,-1.317 -6.154,-1.317c-2.269,0 -4.219,0.4 -5.851,1.201c-1.631,0.801 -2.976,1.933 -4.032,3.396c-1.057,1.463 -1.842,3.196 -2.354,5.198c-0.513,2.002 -0.77,4.189 -0.77,6.56c0,2.28 0.21,4.42 0.63,6.423c0.42,2.002 1.119,3.75 2.098,5.244c0.979,1.493 2.292,2.679 3.939,3.557c1.647,0.878 3.698,1.317 6.154,1.317c2.238,0 4.18,-0.401 5.827,-1.201c1.648,-0.801 3,-1.925 4.056,-3.373c1.057,-1.448 1.834,-3.173 2.331,-5.175c0.498,-2.002 0.746,-4.204 0.746,-6.607Z" style="fill:#333;fill-rule:nonzero;"/><path d="M1074.36,244.533c0,0.678 -0.016,1.247 -0.047,1.709c-0.03,0.462 -0.092,0.824 -0.184,1.086c-0.093,0.262 -0.208,0.462 -0.347,0.601c-0.139,0.138 -0.331,0.208 -0.577,0.208c-0.247,0 -0.547,-0.07 -0.901,-0.208c-0.355,-0.139 -0.755,-0.277 -1.202,-0.416c-0.446,-0.139 -0.947,-0.27 -1.501,-0.393c-0.555,-0.123 -1.155,-0.185 -1.802,-0.185c-0.77,0 -1.525,0.154 -2.264,0.462c-0.739,0.308 -1.517,0.817 -2.333,1.525c-0.817,0.709 -1.671,1.648 -2.565,2.818c-0.893,1.171 -1.878,2.603 -2.956,4.297l0,27.352c0,0.247 -0.062,0.454 -0.185,0.624c-0.124,0.169 -0.324,0.316 -0.601,0.439c-0.277,0.123 -0.662,0.215 -1.155,0.277c-0.493,0.062 -1.124,0.092 -1.894,0.092c-0.74,0 -1.356,-0.03 -1.848,-0.092c-0.493,-0.062 -0.886,-0.154 -1.179,-0.277c-0.292,-0.123 -0.492,-0.27 -0.6,-0.439c-0.108,-0.17 -0.162,-0.377 -0.162,-0.624l0,-41.582c0,-0.246 0.046,-0.454 0.139,-0.624c0.092,-0.169 0.277,-0.323 0.554,-0.462c0.277,-0.138 0.632,-0.231 1.063,-0.277c0.431,-0.046 1.001,-0.069 1.709,-0.069c0.678,0 1.24,0.023 1.687,0.069c0.446,0.046 0.793,0.139 1.039,0.277c0.247,0.139 0.424,0.293 0.532,0.462c0.107,0.17 0.161,0.378 0.161,0.624l0,6.052c1.14,-1.663 2.21,-3.018 3.211,-4.065c1.001,-1.048 1.949,-1.872 2.842,-2.472c0.893,-0.601 1.779,-1.017 2.656,-1.248c0.878,-0.231 1.764,-0.346 2.657,-0.346c0.4,0 0.855,0.023 1.363,0.069c0.508,0.046 1.04,0.131 1.594,0.254c0.554,0.123 1.055,0.262 1.502,0.416c0.446,0.154 0.762,0.308 0.947,0.462c0.185,0.154 0.308,0.3 0.369,0.439c0.062,0.139 0.116,0.316 0.162,0.531c0.046,0.216 0.077,0.532 0.092,0.948c0.016,0.415 0.024,0.977 0.024,1.686Z" style="fill:#333;fill-rule:nonzero;"/><path d="M1104.67,280.34c0,0.893 -0.061,1.601 -0.184,2.125c-0.124,0.524 -0.308,0.909 -0.555,1.155c-0.246,0.247 -0.616,0.478 -1.109,0.693c-0.493,0.216 -1.055,0.393 -1.686,0.532c-0.632,0.138 -1.302,0.254 -2.01,0.346c-0.708,0.092 -1.417,0.139 -2.125,0.139c-2.156,0 -4.004,-0.285 -5.545,-0.855c-1.54,-0.57 -2.802,-1.432 -3.788,-2.587c-0.986,-1.155 -1.702,-2.619 -2.149,-4.39c-0.446,-1.771 -0.669,-3.858 -0.669,-6.26l0,-24.303l-5.822,0c-0.462,0 -0.832,-0.246 -1.109,-0.739c-0.277,-0.493 -0.416,-1.293 -0.416,-2.402c0,-0.586 0.039,-1.078 0.116,-1.479c0.077,-0.4 0.177,-0.731 0.3,-0.993c0.123,-0.262 0.285,-0.447 0.485,-0.555c0.2,-0.107 0.424,-0.161 0.67,-0.161l5.776,0l0,-9.888c0,-0.215 0.053,-0.415 0.161,-0.6c0.108,-0.185 0.308,-0.347 0.601,-0.485c0.292,-0.139 0.685,-0.239 1.178,-0.301c0.493,-0.061 1.109,-0.092 1.848,-0.092c0.77,0 1.402,0.031 1.894,0.092c0.493,0.062 0.878,0.162 1.155,0.301c0.278,0.138 0.478,0.3 0.601,0.485c0.123,0.185 0.185,0.385 0.185,0.6l0,9.888l10.673,0c0.246,0 0.462,0.054 0.646,0.161c0.185,0.108 0.347,0.293 0.486,0.555c0.138,0.262 0.238,0.593 0.3,0.993c0.062,0.401 0.092,0.893 0.092,1.479c0,1.109 -0.138,1.909 -0.415,2.402c-0.278,0.493 -0.647,0.739 -1.109,0.739l-10.673,0l0,23.194c0,2.865 0.423,5.028 1.27,6.491c0.848,1.464 2.364,2.195 4.551,2.195c0.709,0 1.34,-0.069 1.895,-0.208c0.554,-0.138 1.047,-0.285 1.478,-0.439c0.431,-0.154 0.801,-0.3 1.109,-0.439c0.308,-0.138 0.585,-0.208 0.832,-0.208c0.154,0 0.3,0.039 0.439,0.116c0.138,0.077 0.246,0.223 0.323,0.439c0.077,0.215 0.146,0.508 0.208,0.878c0.062,0.369 0.092,0.831 0.092,1.386Z" style="fill:#333;fill-rule:nonzero;"/><path d="M1149.21,260.796c0,1.201 -0.301,2.056 -0.904,2.564c-0.604,0.509 -1.292,0.763 -2.066,0.763l-27.385,0c0,2.31 0.233,4.389 0.697,6.237c0.464,1.848 1.238,3.434 2.321,4.759c1.083,1.324 2.492,2.341 4.225,3.049c1.733,0.709 3.854,1.063 6.36,1.063c1.981,0 3.746,-0.162 5.293,-0.485c1.548,-0.324 2.886,-0.686 4.016,-1.086c1.13,-0.4 2.059,-0.762 2.786,-1.086c0.727,-0.323 1.277,-0.485 1.649,-0.485c0.216,0 0.409,0.054 0.58,0.162c0.17,0.108 0.301,0.269 0.394,0.485c0.093,0.216 0.163,0.516 0.209,0.901c0.047,0.385 0.07,0.855 0.07,1.409c0,0.401 -0.016,0.747 -0.046,1.04c-0.031,0.292 -0.07,0.554 -0.116,0.785c-0.046,0.231 -0.123,0.439 -0.231,0.624c-0.108,0.185 -0.246,0.362 -0.416,0.531c-0.169,0.17 -0.67,0.447 -1.501,0.832c-0.832,0.385 -1.91,0.762 -3.235,1.132c-1.324,0.369 -2.856,0.701 -4.597,0.993c-1.74,0.293 -3.596,0.439 -5.567,0.439c-3.419,0 -6.414,-0.477 -8.986,-1.432c-2.572,-0.955 -4.736,-2.372 -6.492,-4.251c-1.756,-1.879 -3.08,-4.235 -3.973,-7.069c-0.894,-2.834 -1.34,-6.129 -1.34,-9.887c0,-3.573 0.462,-6.784 1.386,-9.633c0.924,-2.849 2.256,-5.267 3.996,-7.254c1.741,-1.987 3.843,-3.511 6.307,-4.574c2.464,-1.063 5.221,-1.594 8.27,-1.594c3.265,0 6.045,0.524 8.34,1.571c2.295,1.047 4.181,2.456 5.66,4.227c1.478,1.771 2.564,3.85 3.257,6.238c0.693,2.387 1.039,4.936 1.039,7.646l0,1.386Zm-7.669,-2.264c0.092,-4.004 -0.799,-7.146 -2.673,-9.425c-1.875,-2.279 -4.656,-3.419 -8.344,-3.419c-1.891,0 -3.549,0.354 -4.974,1.063c-1.426,0.708 -2.619,1.648 -3.58,2.818c-0.961,1.17 -1.705,2.533 -2.231,4.089c-0.527,1.555 -0.821,3.18 -0.884,4.874l22.686,0Z" style="fill:#333;fill-rule:nonzero;"/><path d="M1196.42,283.389c0,0.247 -0.054,0.462 -0.161,0.647c-0.108,0.185 -0.293,0.331 -0.555,0.439c-0.262,0.108 -0.608,0.192 -1.039,0.254c-0.432,0.062 -0.955,0.092 -1.571,0.092c-0.647,0 -1.186,-0.03 -1.617,-0.092c-0.432,-0.062 -0.786,-0.146 -1.063,-0.254c-0.277,-0.108 -0.477,-0.254 -0.601,-0.439c-0.123,-0.185 -0.184,-0.4 -0.184,-0.647l0,-5.498c-2.187,2.372 -4.459,4.22 -6.815,5.544c-2.357,1.325 -4.936,1.987 -7.739,1.987c-3.05,0 -5.652,-0.593 -7.808,-1.779c-2.157,-1.186 -3.905,-2.787 -5.244,-4.805c-1.34,-2.017 -2.318,-4.389 -2.934,-7.115c-0.616,-2.726 -0.924,-5.598 -0.924,-8.617c0,-3.573 0.385,-6.799 1.155,-9.679c0.77,-2.88 1.909,-5.336 3.419,-7.369c1.509,-2.033 3.38,-3.596 5.613,-4.69c2.233,-1.093 4.813,-1.64 7.739,-1.64c2.434,0 4.659,0.531 6.676,1.594c2.018,1.063 4.012,2.626 5.984,4.689l0,-24.163c0,-0.216 0.054,-0.424 0.161,-0.624c0.108,-0.2 0.316,-0.354 0.624,-0.462c0.308,-0.108 0.701,-0.2 1.178,-0.277c0.478,-0.077 1.086,-0.116 1.825,-0.116c0.77,0 1.402,0.039 1.895,0.116c0.492,0.077 0.877,0.169 1.155,0.277c0.277,0.108 0.485,0.262 0.623,0.462c0.139,0.2 0.208,0.408 0.208,0.624l0,61.541Zm-7.669,-29.246c-2.064,-2.557 -4.058,-4.505 -5.984,-5.845c-1.925,-1.339 -3.934,-2.009 -6.029,-2.009c-1.94,0 -3.588,0.462 -4.944,1.386c-1.355,0.924 -2.456,2.14 -3.303,3.65c-0.847,1.509 -1.463,3.218 -1.848,5.128c-0.385,1.91 -0.578,3.85 -0.578,5.822c0,2.094 0.162,4.142 0.485,6.145c0.324,2.002 0.886,3.78 1.687,5.336c0.801,1.555 1.863,2.803 3.188,3.742c1.324,0.94 2.988,1.41 4.99,1.41c1.016,0 1.994,-0.139 2.934,-0.416c0.939,-0.278 1.902,-0.74 2.887,-1.386c0.986,-0.647 2.018,-1.487 3.096,-2.518c1.078,-1.032 2.217,-2.303 3.419,-3.812l0,-16.633Z" style="fill:#333;fill-rule:nonzero;"/><g><g><path d="M280.884,219.245c1.765,0 3.198,-1.433 3.198,-3.198l0,-6.395c0,-1.765 -1.433,-3.197 -3.198,-3.197l-225.605,0c-1.764,0 -3.197,1.432 -3.197,3.197l0,6.395c0,1.765 1.433,3.198 3.197,3.198l225.605,0Z" style="fill:#8c8c8c;"/><path d="M280.884,165.588c1.765,0 3.198,-1.433 3.198,-3.198l0,-6.395c0,-1.765 -1.433,-3.197 -3.198,-3.197l-225.605,0c-1.764,0 -3.197,1.432 -3.197,3.197l0,6.395c0,1.765 1.433,3.198 3.197,3.198l225.605,0Z" style="fill:#8c8c8c;"/><path d="M280.884,192.416c1.765,0 3.198,-1.432 3.198,-3.197l0,-6.395c0,-1.765 -1.433,-3.198 -3.198,-3.198l-225.605,0c-1.764,0 -3.197,1.433 -3.197,3.198l0,6.395c0,1.765 1.433,3.197 3.197,3.197l225.605,0Z" style="fill:#8c8c8c;"/><path d="M280.884,138.759c1.765,0 3.198,-1.432 3.198,-3.197l0,-6.395c0,-1.765 -1.433,-3.198 -3.198,-3.198l-225.605,0c-1.764,0 -3.197,1.433 -3.197,3.198l0,6.395c0,1.765 1.433,3.197 3.197,3.197l225.605,0Z" style="fill:#8c8c8c;"/><path d="M280.884,246.074c1.765,0 3.198,-1.433 3.198,-3.198l0,-6.395c0,-1.765 -1.433,-3.198 -3.198,-3.198l-225.605,0c-1.764,0 -3.197,1.433 -3.197,3.198l0,6.395c0,1.765 1.433,3.198 3.197,3.198l225.605,0Z" style="fill:#8c8c8c;"/><path d="M134.858,298.824c0,1.764 1.433,3.197 3.198,3.197l6.395,0c1.765,0 3.197,-1.433 3.197,-3.197l0,-225.605c0,-1.765 -1.432,-3.198 -3.197,-3.198l-6.395,0c-1.765,0 -3.198,1.433 -3.198,3.198l0,225.605Z" style="fill:#8c8c8c;"/><path d="M188.515,298.824c0,1.764 1.433,3.197 3.198,3.197l6.395,0c1.765,0 3.198,-1.433 3.198,-3.197l0,-225.605c0,-1.765 -1.433,-3.198 -3.198,-3.198l-6.395,0c-1.765,0 -3.198,1.433 -3.198,3.198l0,225.605Z" style="fill:#8c8c8c;"/><path d="M161.687,298.824c0,1.764 1.432,3.197 3.197,3.197l6.395,0c1.765,0 3.198,-1.433 3.198,-3.197l0,-225.605c0,-1.765 -1.433,-3.198 -3.198,-3.198l-6.395,0c-1.765,0 -3.197,1.433 -3.197,3.198l0,225.605Z" style="fill:#8c8c8c;"/><path d="M215.344,298.824c0,1.764 1.433,3.197 3.197,3.197l6.396,0c1.764,0 3.197,-1.433 3.197,-3.197l0,-225.605c0,-1.765 -1.433,-3.198 -3.197,-3.198l-6.396,0c-1.764,0 -3.197,1.433 -3.197,3.198l0,225.605Z" style="fill:#8c8c8c;"/><path d="M108.029,298.824c0,1.764 1.433,3.197 3.198,3.197l6.395,0c1.765,0 3.198,-1.433 3.198,-3.197l0,-225.605c0,-1.765 -1.433,-3.198 -3.198,-3.198l-6.395,0c-1.765,0 -3.198,1.433 -3.198,3.198l0,225.605Z" style="fill:#8c8c8c;"/></g><path d="M232.655,278.269c15.274,0 27.674,-12.401 27.674,-27.674l0,-129.147c0,-15.274 -12.4,-27.674 -27.674,-27.674l-129.146,0c-15.274,0 -27.675,12.4 -27.675,27.674l0,129.147c0,15.273 12.401,27.674 27.675,27.674l129.146,0Z" style="fill:#333;"/><path d="M220.739,175.532c0,6.734 -1.056,12.768 -3.167,18.104c-2.112,5.335 -5.122,9.886 -9.031,13.653c-3.909,3.766 -8.645,6.676 -14.209,8.731c-5.564,2.054 -11.855,3.167 -18.874,3.338l0,20.458c0,0.456 -0.114,0.856 -0.343,1.198c-0.228,0.342 -0.627,0.614 -1.198,0.813c-0.571,0.2 -1.327,0.357 -2.268,0.471c-0.942,0.114 -2.126,0.171 -3.553,0.171c-1.426,0 -2.61,-0.057 -3.552,-0.171c-0.942,-0.114 -1.683,-0.271 -2.226,-0.471c-0.542,-0.199 -0.941,-0.471 -1.198,-0.813c-0.257,-0.342 -0.385,-0.742 -0.385,-1.198l0,-20.458c-7.133,-0.171 -13.496,-1.199 -19.088,-3.082c-5.593,-1.883 -10.329,-4.608 -14.21,-8.174c-3.88,-3.567 -6.847,-7.947 -8.902,-13.139c-2.054,-5.193 -3.081,-11.157 -3.081,-17.89l0,-43.741c0,-0.399 0.128,-0.77 0.385,-1.113c0.257,-0.342 0.656,-0.627 1.198,-0.856c0.542,-0.228 1.284,-0.399 2.226,-0.513c0.941,-0.114 2.125,-0.171 3.552,-0.171c1.427,0 2.611,0.057 3.552,0.171c0.942,0.114 1.698,0.285 2.269,0.513c0.57,0.229 0.97,0.514 1.198,0.856c0.228,0.343 0.343,0.714 0.343,1.113l0,42.457c0,4.736 0.627,9.002 1.883,12.796c1.255,3.795 3.138,7.019 5.649,9.673c2.511,2.654 5.692,4.708 9.544,6.163c3.852,1.455 8.346,2.24 13.482,2.354l0,-73.443c0,-0.399 0.128,-0.77 0.385,-1.113c0.257,-0.342 0.685,-0.627 1.284,-0.856c0.599,-0.228 1.37,-0.399 2.311,-0.513c0.942,-0.114 2.069,-0.171 3.381,-0.171c1.427,0 2.611,0.057 3.553,0.171c0.941,0.114 1.697,0.285 2.268,0.513c0.571,0.229 0.97,0.514 1.198,0.856c0.229,0.343 0.343,0.714 0.343,1.113l0,73.443c5.136,-0.057 9.615,-0.842 13.439,-2.354c3.823,-1.512 7.004,-3.595 9.544,-6.249c2.539,-2.653 4.451,-5.849 5.735,-9.587c1.284,-3.737 1.926,-7.889 1.926,-12.454l0,-42.799c0,-0.399 0.114,-0.77 0.342,-1.113c0.228,-0.342 0.628,-0.627 1.198,-0.856c0.571,-0.228 1.313,-0.399 2.226,-0.513c0.913,-0.114 2.111,-0.171 3.595,-0.171c1.37,0 2.525,0.057 3.467,0.171c0.941,0.114 1.683,0.285 2.225,0.513c0.542,0.229 0.942,0.514 1.199,0.856c0.256,0.343 0.385,0.714 0.385,1.113l0,42.2Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M220.739,175.532c0,6.734 -1.056,12.768 -3.167,18.104c-2.112,5.335 -5.122,9.886 -9.031,13.653c-3.909,3.766 -8.645,6.676 -14.209,8.731c-5.564,2.054 -11.855,3.167 -18.874,3.338l0,20.458c0,0.456 -0.114,0.856 -0.343,1.198c-0.228,0.342 -0.627,0.614 -1.198,0.813c-0.571,0.2 -1.327,0.357 -2.268,0.471c-0.942,0.114 -2.126,0.171 -3.553,0.171c-1.426,0 -2.61,-0.057 -3.552,-0.171c-0.942,-0.114 -1.683,-0.271 -2.226,-0.471c-0.542,-0.199 -0.941,-0.471 -1.198,-0.813c-0.257,-0.342 -0.385,-0.742 -0.385,-1.198l0,-20.458c-7.133,-0.171 -13.496,-1.199 -19.088,-3.082c-5.593,-1.883 -10.329,-4.608 -14.21,-8.174c-3.88,-3.567 -6.847,-7.947 -8.902,-13.139c-2.054,-5.193 -3.081,-11.157 -3.081,-17.89l0,-43.741c0,-0.399 0.128,-0.77 0.385,-1.113c0.257,-0.342 0.656,-0.627 1.198,-0.856c0.542,-0.228 1.284,-0.399 2.226,-0.513c0.941,-0.114 2.125,-0.171 3.552,-0.171c1.427,0 2.611,0.057 3.552,0.171c0.942,0.114 1.698,0.285 2.269,0.513c0.57,0.229 0.97,0.514 1.198,0.856c0.228,0.343 0.343,0.714 0.343,1.113l0,42.457c0,4.736 0.627,9.002 1.883,12.796c1.255,3.795 3.138,7.019 5.649,9.673c2.511,2.654 5.692,4.708 9.544,6.163c3.852,1.455 8.346,2.24 13.482,2.354l0,-73.443c0,-0.399 0.128,-0.77 0.385,-1.113c0.257,-0.342 0.685,-0.627 1.284,-0.856c0.599,-0.228 1.37,-0.399 2.311,-0.513c0.942,-0.114 2.069,-0.171 3.381,-0.171c1.427,0 2.611,0.057 3.553,0.171c0.941,0.114 1.697,0.285 2.268,0.513c0.571,0.229 0.97,0.514 1.198,0.856c0.229,0.343 0.343,0.714 0.343,1.113l0,73.443c5.136,-0.057 9.615,-0.842 13.439,-2.354c3.823,-1.512 7.004,-3.595 9.544,-6.249c2.539,-2.653 4.451,-5.849 5.735,-9.587c1.284,-3.737 1.926,-7.889 1.926,-12.454l0,-42.799c0,-0.399 0.114,-0.77 0.342,-1.113c0.228,-0.342 0.628,-0.627 1.198,-0.856c0.571,-0.228 1.313,-0.399 2.226,-0.513c0.913,-0.114 2.111,-0.171 3.595,-0.171c1.37,0 2.525,0.057 3.467,0.171c0.941,0.114 1.683,0.285 2.225,0.513c0.542,0.229 0.942,0.514 1.199,0.856c0.256,0.343 0.385,0.714 0.385,1.113l0,42.2Z" style="fill:#fff;fill-rule:nonzero;"/></g></g></svg> \ No newline at end of file
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 1260 371" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;"><rect id="badge.-community.-light" x="0" y="0.321" width="1260" height="370" style="fill:none;"/><clipPath id="_clip1"><rect x="0" y="0.321" width="1260" height="370"/></clipPath><g clip-path="url(#_clip1)"><path d="M1260,33.621c0,-18.379 -14.921,-33.3 -33.3,-33.3l-1193.4,0c-18.379,0 -33.3,14.921 -33.3,33.3l0,303.4c0,18.378 14.921,33.3 33.3,33.3l1193.4,0c18.379,0 33.3,-14.922 33.3,-33.3l0,-303.4Z" style="fill:#fff;"/><path d="M426.392,189.328c0,1.077 -0.059,1.978 -0.176,2.704c-0.117,0.726 -0.293,1.288 -0.527,1.686c-0.234,0.398 -0.491,0.668 -0.772,0.808c-0.281,0.141 -0.563,0.211 -0.844,0.211c-0.936,0 -2.447,-0.386 -4.531,-1.159c-2.084,-0.773 -4.484,-1.897 -7.201,-3.372c-2.716,-1.476 -5.62,-3.267 -8.711,-5.375c-3.092,-2.107 -6.089,-4.566 -8.993,-7.376c-2.295,1.405 -5.199,2.622 -8.711,3.653c-3.513,1.03 -7.588,1.545 -12.224,1.545c-6.839,0 -12.752,-1.007 -17.74,-3.021c-4.988,-2.013 -9.109,-4.964 -12.364,-8.851c-3.255,-3.888 -5.679,-8.724 -7.272,-14.508c-1.592,-5.784 -2.388,-12.423 -2.388,-19.917c0,-7.213 0.866,-13.734 2.599,-19.566c1.733,-5.831 4.333,-10.795 7.798,-14.893c3.466,-4.098 7.799,-7.26 12.997,-9.485c5.199,-2.224 11.264,-3.337 18.196,-3.337c6.51,0 12.236,1.007 17.177,3.021c4.941,2.014 9.086,4.953 12.435,8.817c3.349,3.864 5.866,8.63 7.552,14.297c1.686,5.667 2.529,12.177 2.529,19.53c0,3.794 -0.222,7.424 -0.667,10.89c-0.445,3.466 -1.147,6.744 -2.108,9.835c-0.96,3.091 -2.166,5.948 -3.618,8.571c-1.452,2.623 -3.161,4.988 -5.128,7.096c3.419,2.81 6.416,5 8.992,6.569c2.576,1.569 4.707,2.751 6.393,3.547c1.687,0.797 2.998,1.37 3.935,1.722c0.936,0.351 1.639,0.749 2.107,1.194c0.469,0.445 0.796,1.077 0.984,1.897c0.187,0.819 0.281,1.908 0.281,3.267Zm-23.886,-53.745c0,-5.152 -0.457,-9.929 -1.37,-14.331c-0.914,-4.403 -2.436,-8.232 -4.567,-11.487c-2.131,-3.255 -4.976,-5.796 -8.536,-7.622c-3.559,-1.827 -7.962,-2.74 -13.207,-2.74c-5.246,0 -9.649,0.972 -13.208,2.915c-3.56,1.944 -6.452,4.567 -8.676,7.869c-2.225,3.302 -3.818,7.13 -4.778,11.486c-0.96,4.356 -1.44,8.969 -1.44,13.84c0,5.339 0.445,10.245 1.335,14.718c0.89,4.473 2.389,8.349 4.496,11.627c2.108,3.279 4.93,5.82 8.466,7.623c3.536,1.803 7.974,2.705 13.313,2.705c5.292,0 9.742,-0.984 13.348,-2.951c3.606,-1.967 6.51,-4.625 8.711,-7.974c2.202,-3.349 3.771,-7.236 4.707,-11.662c0.937,-4.426 1.406,-9.098 1.406,-14.016Z" style="fill:#333;fill-rule:nonzero;"/><path d="M534.723,179.492c0,0.375 -0.096,0.703 -0.289,0.984c-0.193,0.281 -0.531,0.503 -1.013,0.667c-0.483,0.164 -1.098,0.304 -1.846,0.421c-0.747,0.118 -1.724,0.176 -2.93,0.176c-1.109,0 -2.062,-0.058 -2.858,-0.176c-0.796,-0.117 -1.423,-0.257 -1.881,-0.421c-0.459,-0.164 -0.784,-0.386 -0.977,-0.667c-0.193,-0.281 -0.289,-0.609 -0.289,-0.984l0,-79.176l-0.141,0l-32.036,79.527c-0.14,0.328 -0.339,0.609 -0.597,0.843c-0.257,0.234 -0.632,0.434 -1.124,0.597c-0.492,0.164 -1.077,0.281 -1.756,0.352c-0.679,0.07 -1.487,0.105 -2.424,0.105c-0.984,0 -1.827,-0.047 -2.529,-0.14c-0.703,-0.094 -1.288,-0.223 -1.756,-0.387c-0.469,-0.164 -0.832,-0.363 -1.089,-0.597c-0.258,-0.234 -0.434,-0.492 -0.527,-0.773l-30.631,-79.527l-0.07,0l0,79.176c0,0.375 -0.097,0.703 -0.289,0.984c-0.193,0.281 -0.531,0.503 -1.014,0.667c-0.482,0.164 -1.109,0.304 -1.881,0.421c-0.772,0.118 -1.761,0.176 -2.967,0.176c-1.157,0 -2.122,-0.058 -2.894,-0.176c-0.772,-0.117 -1.387,-0.257 -1.845,-0.421c-0.459,-0.164 -0.772,-0.386 -0.941,-0.667c-0.169,-0.281 -0.253,-0.609 -0.253,-0.984l0,-83.602c0,-1.967 0.523,-3.372 1.569,-4.215c1.046,-0.843 2.212,-1.265 3.496,-1.265l7.419,0c1.522,0 2.853,0.141 3.995,0.422c1.142,0.281 2.14,0.726 2.996,1.335c0.856,0.608 1.569,1.381 2.14,2.318c0.571,0.937 1.07,2.037 1.499,3.302l25.994,65.828l0.351,0l27.047,-65.617c0.524,-1.405 1.095,-2.6 1.713,-3.583c0.619,-0.984 1.297,-1.768 2.035,-2.354c0.738,-0.585 1.558,-1.007 2.462,-1.264c0.904,-0.258 1.951,-0.387 3.141,-0.387l7.779,0c0.715,0 1.393,0.106 2.035,0.316c0.642,0.211 1.189,0.539 1.642,0.984c0.452,0.445 0.821,1.007 1.106,1.686c0.285,0.679 0.428,1.51 0.428,2.494l0,83.602Z" style="fill:#333;fill-rule:nonzero;"/><path d="M618.185,179.351c0,0.375 -0.082,0.715 -0.246,1.019c-0.164,0.305 -0.48,0.55 -0.949,0.738c-0.468,0.187 -1.1,0.339 -1.896,0.456c-0.797,0.118 -1.827,0.176 -3.092,0.176c-1.639,0 -2.974,-0.07 -4.004,-0.211c-1.031,-0.14 -1.803,-0.398 -2.318,-0.772c-0.516,-0.375 -0.937,-0.797 -1.265,-1.265l-33.441,-45.454l0,45.454c0,0.328 -0.094,0.644 -0.281,0.948c-0.187,0.305 -0.515,0.539 -0.983,0.703c-0.469,0.164 -1.089,0.304 -1.862,0.421c-0.773,0.118 -1.745,0.176 -2.916,0.176c-1.124,0 -2.084,-0.058 -2.88,-0.176c-0.796,-0.117 -1.429,-0.257 -1.897,-0.421c-0.468,-0.164 -0.796,-0.398 -0.983,-0.703c-0.188,-0.304 -0.282,-0.62 -0.282,-0.948l0,-87.255c0,-0.375 0.094,-0.703 0.282,-0.984c0.187,-0.281 0.515,-0.503 0.983,-0.667c0.468,-0.164 1.101,-0.305 1.897,-0.422c0.796,-0.117 1.756,-0.175 2.88,-0.175c1.171,0 2.143,0.058 2.916,0.175c0.773,0.117 1.393,0.258 1.862,0.422c0.468,0.164 0.796,0.386 0.983,0.667c0.187,0.281 0.281,0.609 0.281,0.984l0,40.396l32.176,-40.396c0.281,-0.422 0.609,-0.773 0.984,-1.054c0.375,-0.281 0.831,-0.504 1.37,-0.667c0.538,-0.164 1.194,-0.293 1.967,-0.387c0.773,-0.094 1.768,-0.14 2.986,-0.14c1.218,0 2.201,0.058 2.95,0.175c0.75,0.117 1.347,0.27 1.792,0.457c0.445,0.187 0.749,0.421 0.913,0.702c0.164,0.282 0.246,0.586 0.246,0.914c0,0.609 -0.152,1.218 -0.457,1.826c-0.304,0.609 -0.878,1.452 -1.721,2.53l-30.139,36.04l32.458,43.136c0.796,1.217 1.276,2.049 1.44,2.494c0.164,0.444 0.246,0.807 0.246,1.088Z" style="fill:#333;fill-rule:nonzero;"/><path d="M713.941,95.609c0,0.89 -0.047,1.663 -0.141,2.318c-0.094,0.656 -0.258,1.183 -0.492,1.581c-0.234,0.398 -0.503,0.691 -0.808,0.878c-0.304,0.188 -0.62,0.281 -0.948,0.281l-33.3,0l0,30.912l31.473,0c0.328,0 0.644,0.082 0.949,0.246c0.304,0.164 0.574,0.433 0.808,0.808c0.234,0.374 0.398,0.878 0.491,1.51c0.094,0.632 0.141,1.44 0.141,2.424c0,0.89 -0.047,1.651 -0.141,2.283c-0.093,0.632 -0.257,1.148 -0.491,1.546c-0.234,0.398 -0.504,0.702 -0.808,0.913c-0.305,0.211 -0.621,0.316 -0.949,0.316l-31.473,0l0,37.867c0,0.328 -0.094,0.644 -0.281,0.948c-0.188,0.305 -0.516,0.539 -0.984,0.703c-0.468,0.164 -1.077,0.304 -1.826,0.421c-0.75,0.118 -1.733,0.176 -2.951,0.176c-1.124,0 -2.084,-0.058 -2.881,-0.176c-0.796,-0.117 -1.428,-0.257 -1.896,-0.421c-0.469,-0.164 -0.797,-0.398 -0.984,-0.703c-0.187,-0.304 -0.281,-0.62 -0.281,-0.948l0,-84.164c0,-1.827 0.48,-3.103 1.44,-3.829c0.96,-0.726 1.979,-1.089 3.056,-1.089l40.888,0c0.328,0 0.644,0.094 0.948,0.281c0.305,0.188 0.574,0.492 0.808,0.914c0.234,0.421 0.398,0.971 0.492,1.65c0.094,0.68 0.141,1.464 0.141,2.354Z" style="fill:#333;fill-rule:nonzero;"/><path d="M742.534,179.562c0,0.375 -0.094,0.691 -0.281,0.949c-0.187,0.257 -0.492,0.48 -0.913,0.667c-0.422,0.187 -1.007,0.328 -1.757,0.422c-0.749,0.093 -1.709,0.14 -2.88,0.14c-1.124,0 -2.061,-0.047 -2.81,-0.14c-0.75,-0.094 -1.347,-0.235 -1.792,-0.422c-0.445,-0.187 -0.749,-0.41 -0.913,-0.667c-0.164,-0.258 -0.246,-0.574 -0.246,-0.949l0,-63.228c0,-0.328 0.082,-0.632 0.246,-0.913c0.164,-0.281 0.468,-0.516 0.913,-0.703c0.445,-0.187 1.042,-0.328 1.792,-0.422c0.749,-0.093 1.686,-0.14 2.81,-0.14c1.171,0 2.131,0.047 2.88,0.14c0.75,0.094 1.335,0.235 1.757,0.422c0.421,0.187 0.726,0.422 0.913,0.703c0.187,0.281 0.281,0.585 0.281,0.913l0,63.228Zm1.335,-84.585c0,2.716 -0.515,4.566 -1.546,5.55c-1.03,0.983 -2.927,1.475 -5.69,1.475c-2.717,0 -4.579,-0.48 -5.586,-1.44c-1.007,-0.96 -1.51,-2.775 -1.51,-5.445c0,-2.716 0.515,-4.566 1.546,-5.55c1.03,-0.983 2.927,-1.475 5.69,-1.475c2.717,0 4.578,0.48 5.585,1.44c1.007,0.96 1.511,2.775 1.511,5.445Z" style="fill:#333;fill-rule:nonzero;"/><path d="M800.915,120.479c0,1.03 -0.024,1.897 -0.07,2.599c-0.047,0.703 -0.141,1.253 -0.281,1.651c-0.141,0.398 -0.317,0.703 -0.527,0.913c-0.211,0.211 -0.504,0.317 -0.879,0.317c-0.374,0 -0.831,-0.106 -1.37,-0.317c-0.538,-0.21 -1.147,-0.421 -1.826,-0.632c-0.679,-0.211 -1.44,-0.41 -2.283,-0.597c-0.843,-0.187 -1.757,-0.281 -2.74,-0.281c-1.171,0 -2.319,0.234 -3.443,0.703c-1.124,0.468 -2.306,1.241 -3.548,2.318c-1.241,1.077 -2.54,2.506 -3.899,4.285c-1.358,1.78 -2.857,3.958 -4.496,6.534l0,41.59c0,0.375 -0.094,0.691 -0.281,0.949c-0.187,0.257 -0.492,0.48 -0.913,0.667c-0.422,0.187 -1.007,0.328 -1.756,0.422c-0.75,0.093 -1.71,0.14 -2.881,0.14c-1.124,0 -2.061,-0.047 -2.81,-0.14c-0.749,-0.094 -1.347,-0.235 -1.792,-0.422c-0.444,-0.187 -0.749,-0.41 -0.913,-0.667c-0.164,-0.258 -0.246,-0.574 -0.246,-0.949l0,-63.228c0,-0.375 0.071,-0.691 0.211,-0.949c0.141,-0.257 0.422,-0.491 0.843,-0.702c0.422,-0.211 0.96,-0.351 1.616,-0.422c0.656,-0.07 1.522,-0.105 2.599,-0.105c1.031,0 1.885,0.035 2.565,0.105c0.679,0.071 1.206,0.211 1.58,0.422c0.375,0.211 0.644,0.445 0.808,0.702c0.164,0.258 0.246,0.574 0.246,0.949l0,9.203c1.733,-2.529 3.361,-4.59 4.883,-6.182c1.522,-1.593 2.962,-2.846 4.32,-3.759c1.359,-0.913 2.705,-1.545 4.04,-1.897c1.335,-0.351 2.681,-0.527 4.04,-0.527c0.608,0 1.299,0.036 2.072,0.106c0.773,0.07 1.581,0.199 2.424,0.386c0.843,0.188 1.604,0.398 2.283,0.632c0.679,0.235 1.159,0.469 1.44,0.703c0.281,0.234 0.469,0.457 0.562,0.667c0.094,0.211 0.176,0.48 0.246,0.808c0.07,0.328 0.117,0.808 0.141,1.441c0.023,0.632 0.035,1.487 0.035,2.564Z" style="fill:#333;fill-rule:nonzero;"/><path d="M907.911,179.562c0,0.375 -0.093,0.691 -0.281,0.949c-0.187,0.257 -0.491,0.48 -0.913,0.667c-0.422,0.187 -1.007,0.328 -1.756,0.422c-0.75,0.093 -1.686,0.14 -2.811,0.14c-1.17,0 -2.131,-0.047 -2.88,-0.14c-0.749,-0.094 -1.346,-0.235 -1.791,-0.422c-0.445,-0.187 -0.761,-0.41 -0.949,-0.667c-0.187,-0.258 -0.281,-0.574 -0.281,-0.949l0,-38.429c0,-2.669 -0.234,-5.105 -0.702,-7.306c-0.469,-2.201 -1.218,-4.098 -2.248,-5.691c-1.031,-1.592 -2.342,-2.81 -3.935,-3.653c-1.592,-0.843 -3.466,-1.264 -5.62,-1.264c-2.67,0 -5.351,1.03 -8.044,3.091c-2.693,2.061 -5.655,5.082 -8.887,9.063l0,44.189c0,0.375 -0.094,0.691 -0.281,0.949c-0.188,0.257 -0.504,0.48 -0.949,0.667c-0.445,0.187 -1.042,0.328 -1.791,0.422c-0.749,0.093 -1.686,0.14 -2.81,0.14c-1.077,0 -2.002,-0.047 -2.775,-0.14c-0.773,-0.094 -1.382,-0.235 -1.827,-0.422c-0.445,-0.187 -0.749,-0.41 -0.913,-0.667c-0.164,-0.258 -0.246,-0.574 -0.246,-0.949l0,-38.429c0,-2.669 -0.258,-5.105 -0.773,-7.306c-0.515,-2.201 -1.288,-4.098 -2.318,-5.691c-1.031,-1.592 -2.33,-2.81 -3.899,-3.653c-1.569,-0.843 -3.431,-1.264 -5.585,-1.264c-2.67,0 -5.363,1.03 -8.08,3.091c-2.716,2.061 -5.667,5.082 -8.852,9.063l0,44.189c0,0.375 -0.093,0.691 -0.281,0.949c-0.187,0.257 -0.491,0.48 -0.913,0.667c-0.421,0.187 -1.007,0.328 -1.756,0.422c-0.75,0.093 -1.71,0.14 -2.881,0.14c-1.124,0 -2.06,-0.047 -2.81,-0.14c-0.749,-0.094 -1.346,-0.235 -1.791,-0.422c-0.445,-0.187 -0.75,-0.41 -0.914,-0.667c-0.164,-0.258 -0.246,-0.574 -0.246,-0.949l0,-63.228c0,-0.375 0.071,-0.691 0.211,-0.949c0.141,-0.257 0.422,-0.491 0.843,-0.702c0.422,-0.211 0.96,-0.351 1.616,-0.422c0.656,-0.07 1.522,-0.105 2.6,-0.105c1.03,0 1.885,0.035 2.564,0.105c0.679,0.071 1.206,0.211 1.581,0.422c0.374,0.211 0.643,0.445 0.807,0.702c0.164,0.258 0.246,0.574 0.246,0.949l0,8.36c3.56,-3.981 7.014,-6.897 10.363,-8.747c3.349,-1.85 6.732,-2.775 10.151,-2.775c2.623,0 4.977,0.305 7.061,0.914c2.084,0.609 3.922,1.463 5.515,2.564c1.592,1.101 2.951,2.412 4.075,3.934c1.124,1.522 2.06,3.22 2.81,5.094c2.107,-2.295 4.11,-4.239 6.006,-5.831c1.897,-1.593 3.724,-2.881 5.48,-3.864c1.757,-0.984 3.466,-1.698 5.129,-2.143c1.662,-0.445 3.337,-0.668 5.023,-0.668c4.075,0 7.494,0.715 10.257,2.143c2.763,1.429 5,3.337 6.709,5.726c1.71,2.388 2.927,5.187 3.653,8.395c0.726,3.208 1.089,6.592 1.089,10.152l0,39.974Z" style="fill:#333;fill-rule:nonzero;"/><path d="M1016.52,116.193c0,0.328 -0.047,0.726 -0.141,1.195c-0.094,0.468 -0.257,1.053 -0.492,1.756l-18.617,60.067c-0.14,0.515 -0.363,0.937 -0.667,1.265c-0.305,0.327 -0.726,0.585 -1.265,0.772c-0.538,0.188 -1.276,0.316 -2.213,0.387c-0.937,0.07 -2.107,0.105 -3.513,0.105c-1.451,0 -2.669,-0.047 -3.653,-0.14c-0.983,-0.094 -1.768,-0.235 -2.353,-0.422c-0.586,-0.187 -1.019,-0.445 -1.3,-0.773c-0.281,-0.328 -0.492,-0.726 -0.632,-1.194l-13.278,-45.876l-0.141,-0.632l-0.14,0.632l-12.295,45.876c-0.14,0.515 -0.363,0.937 -0.667,1.265c-0.304,0.327 -0.761,0.585 -1.37,0.772c-0.609,0.188 -1.393,0.316 -2.353,0.387c-0.961,0.07 -2.143,0.105 -3.548,0.105c-1.452,0 -2.635,-0.047 -3.548,-0.14c-0.913,-0.094 -1.663,-0.235 -2.248,-0.422c-0.586,-0.187 -1.019,-0.445 -1.3,-0.773c-0.281,-0.328 -0.492,-0.726 -0.632,-1.194l-18.477,-60.067c-0.234,-0.703 -0.398,-1.288 -0.492,-1.756c-0.093,-0.469 -0.14,-0.867 -0.14,-1.195c0,-0.421 0.093,-0.761 0.281,-1.018c0.187,-0.258 0.503,-0.469 0.948,-0.633c0.445,-0.164 1.042,-0.269 1.792,-0.316c0.749,-0.047 1.662,-0.07 2.74,-0.07c1.311,0 2.365,0.035 3.161,0.105c0.796,0.071 1.405,0.188 1.827,0.352c0.421,0.164 0.726,0.398 0.913,0.702c0.187,0.305 0.351,0.668 0.492,1.089l15.245,52.128l0.14,0.633l0.141,-0.633l13.98,-52.128c0.094,-0.421 0.246,-0.784 0.457,-1.089c0.211,-0.304 0.527,-0.538 0.948,-0.702c0.422,-0.164 0.996,-0.281 1.722,-0.352c0.726,-0.07 1.674,-0.105 2.845,-0.105c1.124,0 2.049,0.035 2.775,0.105c0.726,0.071 1.3,0.188 1.721,0.352c0.422,0.164 0.726,0.386 0.913,0.667c0.188,0.281 0.328,0.609 0.422,0.984l15.104,52.268l0.141,0.633l0.07,-0.633l15.035,-52.128c0.093,-0.421 0.245,-0.784 0.456,-1.089c0.211,-0.304 0.539,-0.538 0.984,-0.702c0.445,-0.164 1.054,-0.281 1.826,-0.352c0.773,-0.07 1.768,-0.105 2.986,-0.105c1.124,0 2.026,0.023 2.705,0.07c0.679,0.047 1.218,0.164 1.616,0.351c0.398,0.188 0.679,0.399 0.843,0.633c0.164,0.234 0.246,0.562 0.246,0.983Z" style="fill:#333;fill-rule:nonzero;"/><path d="M1076.94,179.632c0,0.563 -0.187,0.984 -0.562,1.265c-0.375,0.281 -0.89,0.492 -1.546,0.632c-0.655,0.141 -1.616,0.211 -2.88,0.211c-1.218,0 -2.19,-0.07 -2.916,-0.211c-0.726,-0.14 -1.252,-0.351 -1.58,-0.632c-0.328,-0.281 -0.492,-0.702 -0.492,-1.265l0,-6.322c-2.763,2.95 -5.843,5.245 -9.238,6.885c-3.396,1.639 -6.991,2.458 -10.784,2.458c-3.326,0 -6.335,-0.433 -9.028,-1.299c-2.693,-0.867 -4.988,-2.12 -6.885,-3.759c-1.897,-1.639 -3.372,-3.653 -4.426,-6.042c-1.054,-2.388 -1.581,-5.105 -1.581,-8.149c0,-3.56 0.726,-6.651 2.178,-9.274c1.452,-2.622 3.536,-4.8 6.253,-6.533c2.716,-1.733 6.042,-3.033 9.976,-3.899c3.934,-0.867 8.36,-1.3 13.278,-1.3l8.711,0l0,-4.918c0,-2.435 -0.257,-4.59 -0.772,-6.463c-0.516,-1.874 -1.347,-3.431 -2.495,-4.672c-1.147,-1.241 -2.634,-2.178 -4.461,-2.81c-1.826,-0.632 -4.074,-0.949 -6.744,-0.949c-2.857,0 -5.421,0.34 -7.693,1.019c-2.271,0.679 -4.262,1.429 -5.971,2.248c-1.71,0.82 -3.138,1.569 -4.286,2.248c-1.147,0.679 -2.002,1.019 -2.564,1.019c-0.375,0 -0.703,-0.094 -0.984,-0.281c-0.281,-0.187 -0.527,-0.468 -0.737,-0.843c-0.211,-0.375 -0.363,-0.855 -0.457,-1.44c-0.094,-0.586 -0.14,-1.23 -0.14,-1.932c0,-1.171 0.081,-2.096 0.245,-2.775c0.164,-0.679 0.562,-1.323 1.195,-1.932c0.632,-0.609 1.721,-1.323 3.267,-2.143c1.545,-0.82 3.325,-1.569 5.339,-2.248c2.014,-0.679 4.215,-1.241 6.604,-1.686c2.388,-0.445 4.8,-0.668 7.236,-0.668c4.543,0 8.407,0.516 11.592,1.546c3.185,1.03 5.761,2.541 7.728,4.531c1.967,1.991 3.395,4.461 4.285,7.412c0.89,2.951 1.335,6.393 1.335,10.327l0,42.644Zm-11.522,-28.874l-9.905,0c-3.185,0 -5.949,0.269 -8.29,0.808c-2.342,0.539 -4.286,1.335 -5.832,2.389c-1.545,1.054 -2.681,2.318 -3.407,3.793c-0.726,1.476 -1.089,3.174 -1.089,5.094c0,3.278 1.042,5.889 3.127,7.833c2.084,1.944 4.999,2.916 8.746,2.916c3.044,0 5.866,-0.773 8.466,-2.319c2.599,-1.545 5.327,-3.91 8.184,-7.095l0,-13.419Z" style="fill:#333;fill-rule:nonzero;"/><path d="M1135.18,120.479c0,1.03 -0.023,1.897 -0.07,2.599c-0.047,0.703 -0.14,1.253 -0.281,1.651c-0.14,0.398 -0.316,0.703 -0.527,0.913c-0.211,0.211 -0.503,0.317 -0.878,0.317c-0.375,0 -0.831,-0.106 -1.37,-0.317c-0.539,-0.21 -1.147,-0.421 -1.827,-0.632c-0.679,-0.211 -1.44,-0.41 -2.283,-0.597c-0.843,-0.187 -1.756,-0.281 -2.74,-0.281c-1.171,0 -2.318,0.234 -3.442,0.703c-1.124,0.468 -2.307,1.241 -3.548,2.318c-1.241,1.077 -2.541,2.506 -3.899,4.285c-1.358,1.78 -2.857,3.958 -4.496,6.534l0,41.59c0,0.375 -0.094,0.691 -0.281,0.949c-0.188,0.257 -0.492,0.48 -0.914,0.667c-0.421,0.187 -1.007,0.328 -1.756,0.422c-0.749,0.093 -1.709,0.14 -2.88,0.14c-1.124,0 -2.061,-0.047 -2.811,-0.14c-0.749,-0.094 -1.346,-0.235 -1.791,-0.422c-0.445,-0.187 -0.749,-0.41 -0.913,-0.667c-0.164,-0.258 -0.246,-0.574 -0.246,-0.949l0,-63.228c0,-0.375 0.07,-0.691 0.211,-0.949c0.14,-0.257 0.421,-0.491 0.843,-0.702c0.421,-0.211 0.96,-0.351 1.615,-0.422c0.656,-0.07 1.523,-0.105 2.6,-0.105c1.03,0 1.885,0.035 2.564,0.105c0.679,0.071 1.206,0.211 1.581,0.422c0.375,0.211 0.644,0.445 0.808,0.702c0.164,0.258 0.246,0.574 0.246,0.949l0,9.203c1.733,-2.529 3.36,-4.59 4.882,-6.182c1.522,-1.593 2.963,-2.846 4.321,-3.759c1.358,-0.913 2.705,-1.545 4.039,-1.897c1.335,-0.351 2.682,-0.527 4.04,-0.527c0.609,0 1.3,0.036 2.073,0.106c0.772,0.07 1.58,0.199 2.423,0.386c0.843,0.188 1.604,0.398 2.284,0.632c0.679,0.235 1.159,0.469 1.44,0.703c0.281,0.234 0.468,0.457 0.562,0.667c0.093,0.211 0.175,0.48 0.246,0.808c0.07,0.328 0.117,0.808 0.14,1.441c0.024,0.632 0.035,1.487 0.035,2.564Z" style="fill:#333;fill-rule:nonzero;"/><path d="M1200.45,145.208c0,1.827 -0.459,3.126 -1.376,3.899c-0.917,0.773 -1.964,1.159 -3.141,1.159l-41.64,0c0,3.513 0.353,6.675 1.059,9.485c0.706,2.81 1.882,5.222 3.53,7.236c1.647,2.014 3.789,3.559 6.424,4.637c2.636,1.077 5.86,1.615 9.672,1.615c3.012,0 5.694,-0.245 8.047,-0.737c2.354,-0.492 4.389,-1.042 6.107,-1.651c1.718,-0.609 3.13,-1.159 4.236,-1.651c1.106,-0.492 1.942,-0.738 2.507,-0.738c0.329,0 0.623,0.082 0.882,0.246c0.259,0.164 0.458,0.41 0.6,0.738c0.141,0.328 0.247,0.784 0.317,1.37c0.071,0.585 0.106,1.299 0.106,2.142c0,0.609 -0.023,1.136 -0.07,1.581c-0.047,0.445 -0.105,0.843 -0.175,1.194c-0.071,0.352 -0.188,0.668 -0.352,0.949c-0.164,0.281 -0.374,0.55 -0.632,0.808c-0.258,0.257 -1.019,0.679 -2.283,1.264c-1.265,0.586 -2.904,1.16 -4.918,1.722c-2.014,0.562 -4.344,1.065 -6.99,1.51c-2.647,0.445 -5.468,0.667 -8.466,0.667c-5.199,0 -9.753,-0.726 -13.664,-2.177c-3.911,-1.452 -7.201,-3.607 -9.871,-6.464c-2.67,-2.857 -4.683,-6.44 -6.042,-10.749c-1.358,-4.309 -2.037,-9.32 -2.037,-15.034c0,-5.433 0.702,-10.316 2.108,-14.648c1.405,-4.332 3.43,-8.009 6.077,-11.03c2.646,-3.021 5.842,-5.339 9.589,-6.955c3.747,-1.616 7.939,-2.424 12.576,-2.424c4.964,0 9.191,0.797 12.68,2.389c3.49,1.592 6.358,3.735 8.606,6.428c2.249,2.693 3.9,5.855 4.953,9.485c1.054,3.629 1.581,7.505 1.581,11.627l0,2.107Zm-11.662,-3.442c0.14,-6.089 -1.214,-10.866 -4.065,-14.332c-2.85,-3.466 -7.079,-5.199 -12.687,-5.199c-2.875,0 -5.396,0.539 -7.564,1.616c-2.167,1.077 -3.982,2.506 -5.443,4.285c-1.461,1.78 -2.592,3.853 -3.393,6.218c-0.801,2.365 -1.248,4.836 -1.343,7.412l34.495,0Z" style="fill:#333;fill-rule:nonzero;"/><path d="M379.752,276.089c0,0.493 -0.016,0.924 -0.047,1.294c-0.03,0.369 -0.084,0.693 -0.161,0.97c-0.077,0.277 -0.177,0.524 -0.301,0.739c-0.123,0.216 -0.338,0.478 -0.646,0.786c-0.308,0.308 -0.955,0.778 -1.941,1.409c-0.986,0.631 -2.21,1.247 -3.673,1.848c-1.463,0.601 -3.142,1.109 -5.036,1.525c-1.894,0.416 -3.966,0.623 -6.214,0.623c-3.881,0 -7.385,-0.646 -10.511,-1.94c-3.127,-1.294 -5.791,-3.203 -7.993,-5.729c-2.203,-2.526 -3.897,-5.645 -5.083,-9.356c-1.185,-3.712 -1.778,-7.985 -1.778,-12.821c0,-4.959 0.639,-9.379 1.917,-13.26c1.278,-3.881 3.072,-7.169 5.383,-9.865c2.31,-2.695 5.074,-4.751 8.293,-6.168c3.219,-1.417 6.784,-2.125 10.696,-2.125c1.725,0 3.403,0.162 5.036,0.485c1.632,0.324 3.142,0.732 4.528,1.225c1.386,0.492 2.618,1.062 3.696,1.709c1.078,0.647 1.825,1.178 2.241,1.594c0.416,0.416 0.685,0.732 0.808,0.947c0.123,0.216 0.224,0.47 0.301,0.763c0.077,0.292 0.138,0.639 0.184,1.039c0.047,0.4 0.07,0.878 0.07,1.432c0,0.616 -0.031,1.14 -0.093,1.571c-0.062,0.431 -0.155,0.793 -0.279,1.086c-0.124,0.293 -0.271,0.508 -0.441,0.647c-0.171,0.138 -0.38,0.208 -0.628,0.208c-0.433,0 -1.036,-0.301 -1.811,-0.901c-0.774,-0.601 -1.773,-1.263 -2.996,-1.987c-1.223,-0.724 -2.71,-1.386 -4.459,-1.987c-1.749,-0.6 -3.847,-0.901 -6.294,-0.901c-2.663,0 -5.086,0.532 -7.269,1.594c-2.183,1.063 -4.049,2.626 -5.597,4.69c-1.549,2.064 -2.748,4.582 -3.6,7.554c-0.852,2.972 -1.278,6.368 -1.278,10.188c0,3.788 0.411,7.138 1.231,10.049c0.821,2.91 1.998,5.344 3.53,7.3c1.533,1.956 3.415,3.434 5.644,4.435c2.23,1.001 4.753,1.502 7.571,1.502c2.384,0 4.467,-0.293 6.247,-0.878c1.781,-0.585 3.298,-1.24 4.552,-1.964c1.254,-0.724 2.283,-1.378 3.089,-1.963c0.805,-0.586 1.44,-0.878 1.904,-0.878c0.217,0 0.403,0.046 0.558,0.138c0.154,0.093 0.278,0.27 0.371,0.532c0.093,0.262 0.163,0.623 0.209,1.085c0.046,0.462 0.07,1.048 0.07,1.756Z" style="fill:#333;fill-rule:nonzero;"/><path d="M428.079,262.136c0,3.388 -0.446,6.507 -1.339,9.356c-0.894,2.849 -2.226,5.306 -3.997,7.369c-1.771,2.064 -3.989,3.673 -6.653,4.828c-2.664,1.156 -5.752,1.733 -9.264,1.733c-3.419,0 -6.399,-0.508 -8.94,-1.525c-2.541,-1.016 -4.659,-2.495 -6.353,-4.435c-1.694,-1.941 -2.957,-4.297 -3.788,-7.069c-0.832,-2.772 -1.248,-5.914 -1.248,-9.425c0,-3.388 0.439,-6.507 1.317,-9.356c0.878,-2.849 2.202,-5.306 3.973,-7.37c1.772,-2.063 3.982,-3.665 6.63,-4.805c2.649,-1.139 5.745,-1.709 9.287,-1.709c3.419,0 6.399,0.508 8.94,1.525c2.541,1.016 4.659,2.494 6.353,4.435c1.694,1.94 2.965,4.297 3.812,7.069c0.847,2.772 1.27,5.898 1.27,9.379Zm-7.9,0.508c0,-2.248 -0.21,-4.374 -0.63,-6.376c-0.419,-2.002 -1.111,-3.757 -2.074,-5.267c-0.964,-1.509 -2.269,-2.703 -3.917,-3.58c-1.647,-0.878 -3.698,-1.317 -6.153,-1.317c-2.269,0 -4.219,0.4 -5.851,1.201c-1.632,0.801 -2.976,1.933 -4.033,3.396c-1.056,1.463 -1.841,3.196 -2.354,5.198c-0.513,2.002 -0.769,4.189 -0.769,6.56c0,2.28 0.21,4.42 0.629,6.423c0.42,2.002 1.119,3.75 2.098,5.244c0.979,1.493 2.292,2.679 3.939,3.557c1.648,0.878 3.699,1.317 6.154,1.317c2.238,0 4.181,-0.401 5.828,-1.201c1.647,-0.801 2.999,-1.925 4.056,-3.373c1.056,-1.448 1.833,-3.173 2.331,-5.175c0.497,-2.002 0.746,-4.204 0.746,-6.607Z" style="fill:#333;fill-rule:nonzero;"/><path d="M500.987,283.389c0,0.247 -0.062,0.454 -0.185,0.624c-0.123,0.169 -0.323,0.316 -0.601,0.439c-0.277,0.123 -0.662,0.215 -1.155,0.277c-0.493,0.062 -1.109,0.092 -1.848,0.092c-0.77,0 -1.401,-0.03 -1.894,-0.092c-0.493,-0.062 -0.886,-0.154 -1.178,-0.277c-0.293,-0.123 -0.501,-0.27 -0.624,-0.439c-0.123,-0.17 -0.185,-0.377 -0.185,-0.624l0,-25.273c0,-1.755 -0.154,-3.357 -0.462,-4.805c-0.308,-1.447 -0.801,-2.695 -1.478,-3.742c-0.678,-1.047 -1.54,-1.848 -2.588,-2.403c-1.047,-0.554 -2.279,-0.831 -3.696,-0.831c-1.756,0 -3.519,0.677 -5.29,2.033c-1.771,1.355 -3.719,3.342 -5.845,5.96l0,29.061c0,0.247 -0.061,0.454 -0.184,0.624c-0.124,0.169 -0.332,0.316 -0.624,0.439c-0.293,0.123 -0.685,0.215 -1.178,0.277c-0.493,0.062 -1.109,0.092 -1.848,0.092c-0.709,0 -1.317,-0.03 -1.825,-0.092c-0.509,-0.062 -0.909,-0.154 -1.202,-0.277c-0.292,-0.123 -0.492,-0.27 -0.6,-0.439c-0.108,-0.17 -0.162,-0.377 -0.162,-0.624l0,-25.273c0,-1.755 -0.169,-3.357 -0.508,-4.805c-0.339,-1.447 -0.847,-2.695 -1.525,-3.742c-0.678,-1.047 -1.532,-1.848 -2.564,-2.403c-1.032,-0.554 -2.256,-0.831 -3.673,-0.831c-1.756,0 -3.527,0.677 -5.314,2.033c-1.786,1.355 -3.727,3.342 -5.821,5.96l0,29.061c0,0.247 -0.062,0.454 -0.185,0.624c-0.123,0.169 -0.323,0.316 -0.6,0.439c-0.278,0.123 -0.663,0.215 -1.156,0.277c-0.492,0.062 -1.124,0.092 -1.894,0.092c-0.739,0 -1.355,-0.03 -1.848,-0.092c-0.493,-0.062 -0.885,-0.154 -1.178,-0.277c-0.293,-0.123 -0.493,-0.27 -0.601,-0.439c-0.108,-0.17 -0.161,-0.377 -0.161,-0.624l0,-41.582c0,-0.246 0.046,-0.454 0.138,-0.624c0.093,-0.169 0.277,-0.323 0.555,-0.462c0.277,-0.138 0.631,-0.231 1.062,-0.277c0.432,-0.046 1.001,-0.069 1.71,-0.069c0.677,0 1.24,0.023 1.686,0.069c0.447,0.046 0.793,0.139 1.04,0.277c0.246,0.139 0.423,0.293 0.531,0.462c0.108,0.17 0.162,0.378 0.162,0.624l0,5.498c2.341,-2.618 4.612,-4.535 6.815,-5.752c2.202,-1.217 4.427,-1.825 6.676,-1.825c1.725,0 3.273,0.2 4.643,0.601c1.371,0.4 2.58,0.962 3.627,1.686c1.047,0.724 1.941,1.586 2.68,2.587c0.739,1.001 1.355,2.118 1.848,3.35c1.386,-1.509 2.703,-2.788 3.95,-3.835c1.248,-1.047 2.449,-1.894 3.604,-2.541c1.155,-0.647 2.279,-1.117 3.373,-1.409c1.093,-0.293 2.194,-0.439 3.303,-0.439c2.68,0 4.929,0.47 6.746,1.409c1.817,0.939 3.288,2.195 4.412,3.766c1.124,1.57 1.925,3.411 2.403,5.521c0.477,2.11 0.716,4.335 0.716,6.676l0,26.289Z" style="fill:#333;fill-rule:nonzero;"/><path d="M576.574,283.389c0,0.247 -0.062,0.454 -0.185,0.624c-0.123,0.169 -0.323,0.316 -0.601,0.439c-0.277,0.123 -0.662,0.215 -1.155,0.277c-0.492,0.062 -1.108,0.092 -1.848,0.092c-0.77,0 -1.401,-0.03 -1.894,-0.092c-0.493,-0.062 -0.886,-0.154 -1.178,-0.277c-0.293,-0.123 -0.501,-0.27 -0.624,-0.439c-0.123,-0.17 -0.185,-0.377 -0.185,-0.624l0,-25.273c0,-1.755 -0.154,-3.357 -0.462,-4.805c-0.308,-1.447 -0.801,-2.695 -1.478,-3.742c-0.678,-1.047 -1.54,-1.848 -2.588,-2.403c-1.047,-0.554 -2.279,-0.831 -3.696,-0.831c-1.755,0 -3.519,0.677 -5.29,2.033c-1.771,1.355 -3.719,3.342 -5.844,5.96l0,29.061c0,0.247 -0.062,0.454 -0.185,0.624c-0.124,0.169 -0.331,0.316 -0.624,0.439c-0.293,0.123 -0.685,0.215 -1.178,0.277c-0.493,0.062 -1.109,0.092 -1.848,0.092c-0.709,0 -1.317,-0.03 -1.825,-0.092c-0.509,-0.062 -0.909,-0.154 -1.202,-0.277c-0.292,-0.123 -0.492,-0.27 -0.6,-0.439c-0.108,-0.17 -0.162,-0.377 -0.162,-0.624l0,-25.273c0,-1.755 -0.169,-3.357 -0.508,-4.805c-0.339,-1.447 -0.847,-2.695 -1.525,-3.742c-0.677,-1.047 -1.532,-1.848 -2.564,-2.403c-1.032,-0.554 -2.256,-0.831 -3.673,-0.831c-1.756,0 -3.527,0.677 -5.313,2.033c-1.787,1.355 -3.727,3.342 -5.822,5.96l0,29.061c0,0.247 -0.061,0.454 -0.185,0.624c-0.123,0.169 -0.323,0.316 -0.6,0.439c-0.278,0.123 -0.663,0.215 -1.155,0.277c-0.493,0.062 -1.125,0.092 -1.895,0.092c-0.739,0 -1.355,-0.03 -1.848,-0.092c-0.493,-0.062 -0.885,-0.154 -1.178,-0.277c-0.293,-0.123 -0.493,-0.27 -0.601,-0.439c-0.107,-0.17 -0.161,-0.377 -0.161,-0.624l0,-41.582c0,-0.246 0.046,-0.454 0.138,-0.624c0.093,-0.169 0.278,-0.323 0.555,-0.462c0.277,-0.138 0.631,-0.231 1.062,-0.277c0.432,-0.046 1.001,-0.069 1.71,-0.069c0.678,0 1.24,0.023 1.686,0.069c0.447,0.046 0.793,0.139 1.04,0.277c0.246,0.139 0.423,0.293 0.531,0.462c0.108,0.17 0.162,0.378 0.162,0.624l0,5.498c2.341,-2.618 4.612,-4.535 6.815,-5.752c2.202,-1.217 4.427,-1.825 6.676,-1.825c1.725,0 3.273,0.2 4.643,0.601c1.371,0.4 2.58,0.962 3.627,1.686c1.047,0.724 1.941,1.586 2.68,2.587c0.739,1.001 1.355,2.118 1.848,3.35c1.386,-1.509 2.703,-2.788 3.95,-3.835c1.248,-1.047 2.449,-1.894 3.604,-2.541c1.155,-0.647 2.279,-1.117 3.373,-1.409c1.093,-0.293 2.195,-0.439 3.303,-0.439c2.68,0 4.929,0.47 6.746,1.409c1.817,0.939 3.288,2.195 4.412,3.766c1.125,1.57 1.925,3.411 2.403,5.521c0.477,2.11 0.716,4.335 0.716,6.676l0,26.289Z" style="fill:#333;fill-rule:nonzero;"/><path d="M626.103,283.389c0,0.247 -0.054,0.454 -0.162,0.624c-0.108,0.169 -0.3,0.316 -0.577,0.439c-0.278,0.123 -0.639,0.215 -1.086,0.277c-0.447,0.062 -0.993,0.092 -1.64,0.092c-0.709,0 -1.286,-0.03 -1.733,-0.092c-0.447,-0.062 -0.801,-0.154 -1.063,-0.277c-0.261,-0.123 -0.438,-0.27 -0.531,-0.439c-0.092,-0.17 -0.138,-0.377 -0.138,-0.624l0,-5.498c-2.372,2.618 -4.713,4.528 -7.023,5.729c-2.31,1.201 -4.651,1.802 -7.023,1.802c-2.772,0 -5.105,-0.462 -7,-1.386c-1.894,-0.924 -3.426,-2.179 -4.597,-3.766c-1.17,-1.586 -2.01,-3.434 -2.518,-5.544c-0.508,-2.11 -0.762,-4.674 -0.762,-7.693l0,-25.226c0,-0.246 0.054,-0.454 0.162,-0.624c0.107,-0.169 0.315,-0.323 0.623,-0.462c0.308,-0.138 0.709,-0.231 1.202,-0.277c0.492,-0.046 1.108,-0.069 1.848,-0.069c0.739,0 1.355,0.023 1.848,0.069c0.493,0.046 0.885,0.139 1.178,0.277c0.292,0.139 0.5,0.293 0.624,0.462c0.123,0.17 0.184,0.378 0.184,0.624l0,24.21c0,2.433 0.178,4.382 0.532,5.845c0.354,1.463 0.893,2.71 1.617,3.742c0.724,1.032 1.64,1.833 2.749,2.403c1.109,0.569 2.402,0.854 3.881,0.854c1.91,0 3.812,-0.677 5.706,-2.033c1.894,-1.355 3.904,-3.342 6.029,-5.96l0,-29.061c0,-0.246 0.054,-0.454 0.162,-0.624c0.108,-0.169 0.316,-0.323 0.624,-0.462c0.308,-0.138 0.7,-0.231 1.178,-0.277c0.477,-0.046 1.101,-0.069 1.871,-0.069c0.739,0 1.355,0.023 1.848,0.069c0.493,0.046 0.878,0.139 1.155,0.277c0.277,0.139 0.485,0.293 0.624,0.462c0.139,0.17 0.208,0.378 0.208,0.624l0,41.582Z" style="fill:#333;fill-rule:nonzero;"/><path d="M676.001,283.389c0,0.247 -0.061,0.454 -0.184,0.624c-0.124,0.169 -0.324,0.316 -0.601,0.439c-0.277,0.123 -0.662,0.215 -1.155,0.277c-0.493,0.062 -1.109,0.092 -1.848,0.092c-0.77,0 -1.402,-0.03 -1.894,-0.092c-0.493,-0.062 -0.878,-0.154 -1.155,-0.277c-0.278,-0.123 -0.478,-0.27 -0.601,-0.439c-0.123,-0.17 -0.185,-0.377 -0.185,-0.624l0,-24.349c0,-2.371 -0.185,-4.281 -0.554,-5.729c-0.37,-1.447 -0.909,-2.695 -1.617,-3.742c-0.709,-1.047 -1.625,-1.848 -2.749,-2.403c-1.125,-0.554 -2.426,-0.831 -3.905,-0.831c-1.909,0 -3.819,0.677 -5.729,2.033c-1.909,1.355 -3.911,3.342 -6.006,5.96l0,29.061c0,0.247 -0.062,0.454 -0.185,0.624c-0.123,0.169 -0.323,0.316 -0.6,0.439c-0.278,0.123 -0.663,0.215 -1.155,0.277c-0.493,0.062 -1.125,0.092 -1.895,0.092c-0.739,0 -1.355,-0.03 -1.848,-0.092c-0.493,-0.062 -0.885,-0.154 -1.178,-0.277c-0.293,-0.123 -0.493,-0.27 -0.601,-0.439c-0.107,-0.17 -0.161,-0.377 -0.161,-0.624l0,-41.582c0,-0.246 0.046,-0.454 0.138,-0.624c0.093,-0.169 0.277,-0.323 0.555,-0.462c0.277,-0.138 0.631,-0.231 1.062,-0.277c0.432,-0.046 1.001,-0.069 1.71,-0.069c0.677,0 1.24,0.023 1.686,0.069c0.447,0.046 0.793,0.139 1.04,0.277c0.246,0.139 0.423,0.293 0.531,0.462c0.108,0.17 0.162,0.378 0.162,0.624l0,5.498c2.341,-2.618 4.674,-4.535 6.999,-5.752c2.326,-1.217 4.675,-1.825 7.046,-1.825c2.772,0 5.106,0.47 7,1.409c1.894,0.939 3.427,2.195 4.597,3.766c1.171,1.57 2.01,3.411 2.518,5.521c0.508,2.11 0.762,4.643 0.762,7.6l0,25.365Z" style="fill:#333;fill-rule:nonzero;"/><path d="M697.532,283.389c0,0.247 -0.062,0.454 -0.185,0.624c-0.123,0.169 -0.323,0.316 -0.601,0.439c-0.277,0.123 -0.662,0.215 -1.155,0.277c-0.493,0.062 -1.124,0.092 -1.894,0.092c-0.739,0 -1.355,-0.03 -1.848,-0.092c-0.493,-0.062 -0.886,-0.154 -1.178,-0.277c-0.293,-0.123 -0.493,-0.27 -0.601,-0.439c-0.108,-0.17 -0.162,-0.377 -0.162,-0.624l0,-41.582c0,-0.216 0.054,-0.416 0.162,-0.601c0.108,-0.184 0.308,-0.338 0.601,-0.462c0.292,-0.123 0.685,-0.215 1.178,-0.277c0.493,-0.061 1.109,-0.092 1.848,-0.092c0.77,0 1.401,0.031 1.894,0.092c0.493,0.062 0.878,0.154 1.155,0.277c0.278,0.124 0.478,0.278 0.601,0.462c0.123,0.185 0.185,0.385 0.185,0.601l0,41.582Zm0.878,-55.628c0,1.787 -0.339,3.004 -1.017,3.65c-0.677,0.647 -1.925,0.971 -3.742,0.971c-1.787,0 -3.011,-0.316 -3.673,-0.947c-0.663,-0.632 -0.994,-1.825 -0.994,-3.581c0,-1.787 0.339,-3.003 1.017,-3.65c0.677,-0.647 1.925,-0.97 3.742,-0.97c1.787,0 3.011,0.315 3.673,0.947c0.663,0.631 0.994,1.825 0.994,3.58Z" style="fill:#333;fill-rule:nonzero;"/><path d="M733.246,280.34c0,0.893 -0.061,1.601 -0.185,2.125c-0.123,0.524 -0.308,0.909 -0.554,1.155c-0.246,0.247 -0.616,0.478 -1.109,0.693c-0.493,0.216 -1.055,0.393 -1.686,0.532c-0.632,0.138 -1.302,0.254 -2.01,0.346c-0.708,0.092 -1.417,0.139 -2.125,0.139c-2.156,0 -4.005,-0.285 -5.545,-0.855c-1.54,-0.57 -2.803,-1.432 -3.788,-2.587c-0.986,-1.155 -1.702,-2.619 -2.149,-4.39c-0.446,-1.771 -0.67,-3.858 -0.67,-6.26l0,-24.303l-5.821,0c-0.462,0 -0.832,-0.246 -1.109,-0.739c-0.277,-0.493 -0.416,-1.293 -0.416,-2.402c0,-0.586 0.039,-1.078 0.116,-1.479c0.077,-0.4 0.177,-0.731 0.3,-0.993c0.123,-0.262 0.285,-0.447 0.485,-0.555c0.2,-0.107 0.424,-0.161 0.67,-0.161l5.775,0l0,-9.888c0,-0.215 0.054,-0.415 0.162,-0.6c0.108,-0.185 0.308,-0.347 0.601,-0.485c0.292,-0.139 0.685,-0.239 1.178,-0.301c0.493,-0.061 1.109,-0.092 1.848,-0.092c0.77,0 1.401,0.031 1.894,0.092c0.493,0.062 0.878,0.162 1.155,0.301c0.278,0.138 0.478,0.3 0.601,0.485c0.123,0.185 0.185,0.385 0.185,0.6l0,9.888l10.673,0c0.246,0 0.462,0.054 0.646,0.161c0.185,0.108 0.347,0.293 0.486,0.555c0.138,0.262 0.238,0.593 0.3,0.993c0.061,0.401 0.092,0.893 0.092,1.479c0,1.109 -0.138,1.909 -0.416,2.402c-0.277,0.493 -0.646,0.739 -1.108,0.739l-10.673,0l0,23.194c0,2.865 0.423,5.028 1.27,6.491c0.847,1.464 2.364,2.195 4.551,2.195c0.709,0 1.34,-0.069 1.895,-0.208c0.554,-0.138 1.047,-0.285 1.478,-0.439c0.431,-0.154 0.801,-0.3 1.109,-0.439c0.308,-0.138 0.585,-0.208 0.832,-0.208c0.154,0 0.3,0.039 0.439,0.116c0.138,0.077 0.246,0.223 0.323,0.439c0.077,0.215 0.146,0.508 0.208,0.878c0.061,0.369 0.092,0.831 0.092,1.386Z" style="fill:#333;fill-rule:nonzero;"/><path d="M762.261,284.544l-5.544,15.293c-0.185,0.493 -0.654,0.87 -1.409,1.132c-0.755,0.262 -1.902,0.393 -3.442,0.393c-0.801,0 -1.448,-0.039 -1.941,-0.116c-0.493,-0.077 -0.87,-0.208 -1.132,-0.392c-0.261,-0.185 -0.408,-0.432 -0.439,-0.74c-0.03,-0.308 0.047,-0.677 0.231,-1.108l5.73,-14.462c-0.278,-0.123 -0.539,-0.323 -0.786,-0.6c-0.246,-0.278 -0.416,-0.57 -0.508,-0.878l-14.831,-39.734c-0.247,-0.647 -0.37,-1.155 -0.37,-1.525c0,-0.37 0.123,-0.662 0.37,-0.878c0.246,-0.215 0.647,-0.362 1.201,-0.439c0.555,-0.077 1.294,-0.115 2.218,-0.115c0.924,0 1.648,0.023 2.171,0.069c0.524,0.046 0.94,0.131 1.248,0.254c0.308,0.123 0.531,0.3 0.67,0.531c0.138,0.231 0.285,0.547 0.439,0.948l11.874,33.358l0.138,0l11.459,-33.543c0.184,-0.585 0.408,-0.963 0.669,-1.132c0.262,-0.17 0.655,-0.293 1.179,-0.37c0.523,-0.077 1.278,-0.115 2.264,-0.115c0.862,0 1.57,0.038 2.125,0.115c0.554,0.077 0.962,0.224 1.224,0.439c0.262,0.216 0.393,0.508 0.393,0.878c0,0.37 -0.092,0.832 -0.277,1.386l-14.924,41.351Z" style="fill:#333;fill-rule:nonzero;"/><path d="M840.528,267.773c0,2.803 -0.516,5.298 -1.548,7.485c-1.031,2.186 -2.464,4.042 -4.296,5.567c-1.833,1.525 -3.989,2.672 -6.469,3.442c-2.479,0.77 -5.151,1.155 -8.016,1.155c-2.002,0 -3.858,-0.169 -5.567,-0.508c-1.71,-0.339 -3.234,-0.755 -4.574,-1.248c-1.34,-0.492 -2.464,-1.001 -3.373,-1.524c-0.909,-0.524 -1.54,-0.971 -1.894,-1.34c-0.355,-0.37 -0.616,-0.84 -0.786,-1.409c-0.169,-0.57 -0.254,-1.333 -0.254,-2.287c0,-0.678 0.031,-1.24 0.093,-1.687c0.061,-0.446 0.154,-0.808 0.277,-1.086c0.123,-0.277 0.277,-0.469 0.462,-0.577c0.185,-0.108 0.4,-0.162 0.647,-0.162c0.431,0 1.039,0.262 1.825,0.786c0.785,0.523 1.794,1.093 3.026,1.709c1.232,0.616 2.718,1.194 4.458,1.733c1.741,0.539 3.75,0.808 6.03,0.808c1.725,0 3.303,-0.231 4.736,-0.693c1.432,-0.462 2.664,-1.116 3.696,-1.963c1.032,-0.847 1.825,-1.887 2.379,-3.119c0.555,-1.232 0.832,-2.634 0.832,-4.204c0,-1.695 -0.385,-3.142 -1.155,-4.343c-0.77,-1.202 -1.787,-2.257 -3.05,-3.165c-1.262,-0.909 -2.702,-1.741 -4.32,-2.495c-1.617,-0.755 -3.272,-1.525 -4.966,-2.31c-1.694,-0.786 -3.342,-1.656 -4.944,-2.611c-1.602,-0.955 -3.034,-2.079 -4.297,-3.373c-1.263,-1.293 -2.287,-2.81 -3.072,-4.551c-0.786,-1.74 -1.178,-3.827 -1.178,-6.26c0,-2.495 0.454,-4.72 1.363,-6.676c0.908,-1.956 2.171,-3.596 3.788,-4.921c1.617,-1.324 3.542,-2.333 5.775,-3.026c2.234,-0.693 4.644,-1.04 7.231,-1.04c1.325,0 2.657,0.116 3.997,0.347c1.34,0.231 2.602,0.539 3.788,0.924c1.186,0.385 2.241,0.816 3.165,1.294c0.924,0.477 1.532,0.862 1.825,1.155c0.293,0.292 0.485,0.523 0.578,0.693c0.092,0.169 0.169,0.385 0.231,0.647c0.061,0.261 0.107,0.577 0.138,0.947c0.031,0.369 0.046,0.847 0.046,1.432c0,0.554 -0.023,1.047 -0.069,1.479c-0.046,0.431 -0.115,0.793 -0.208,1.085c-0.092,0.293 -0.223,0.508 -0.392,0.647c-0.17,0.139 -0.362,0.208 -0.578,0.208c-0.339,0 -0.87,-0.216 -1.594,-0.647c-0.724,-0.431 -1.609,-0.916 -2.657,-1.455c-1.047,-0.539 -2.287,-1.032 -3.719,-1.479c-1.432,-0.446 -3.042,-0.67 -4.828,-0.67c-1.663,0 -3.111,0.224 -4.343,0.67c-1.232,0.447 -2.249,1.04 -3.049,1.779c-0.801,0.739 -1.402,1.617 -1.802,2.634c-0.401,1.016 -0.601,2.094 -0.601,3.234c0,1.663 0.385,3.095 1.155,4.297c0.77,1.201 1.794,2.264 3.073,3.188c1.278,0.924 2.733,1.771 4.366,2.541c1.632,0.77 3.295,1.548 4.99,2.333c1.694,0.785 3.357,1.648 4.989,2.587c1.633,0.94 3.088,2.049 4.367,3.327c1.278,1.278 2.31,2.787 3.095,4.528c0.786,1.74 1.178,3.796 1.178,6.168Z" style="fill:#333;fill-rule:nonzero;"/><path d="M886.638,283.389c0,0.247 -0.054,0.454 -0.161,0.624c-0.108,0.169 -0.301,0.316 -0.578,0.439c-0.277,0.123 -0.639,0.215 -1.086,0.277c-0.446,0.062 -0.993,0.092 -1.64,0.092c-0.708,0 -1.286,-0.03 -1.733,-0.092c-0.446,-0.062 -0.8,-0.154 -1.062,-0.277c-0.262,-0.123 -0.439,-0.27 -0.532,-0.439c-0.092,-0.17 -0.138,-0.377 -0.138,-0.624l0,-5.498c-2.372,2.618 -4.713,4.528 -7.023,5.729c-2.31,1.201 -4.651,1.802 -7.023,1.802c-2.772,0 -5.105,-0.462 -6.999,-1.386c-1.895,-0.924 -3.427,-2.179 -4.597,-3.766c-1.171,-1.586 -2.01,-3.434 -2.519,-5.544c-0.508,-2.11 -0.762,-4.674 -0.762,-7.693l0,-25.226c0,-0.246 0.054,-0.454 0.162,-0.624c0.108,-0.169 0.316,-0.323 0.624,-0.462c0.308,-0.138 0.708,-0.231 1.201,-0.277c0.493,-0.046 1.109,-0.069 1.848,-0.069c0.739,0 1.355,0.023 1.848,0.069c0.493,0.046 0.886,0.139 1.178,0.277c0.293,0.139 0.501,0.293 0.624,0.462c0.123,0.17 0.185,0.378 0.185,0.624l0,24.21c0,2.433 0.177,4.382 0.531,5.845c0.354,1.463 0.893,2.71 1.617,3.742c0.724,1.032 1.64,1.833 2.749,2.403c1.109,0.569 2.403,0.854 3.881,0.854c1.91,0 3.812,-0.677 5.706,-2.033c1.895,-1.355 3.904,-3.342 6.03,-5.96l0,-29.061c0,-0.246 0.054,-0.454 0.161,-0.624c0.108,-0.169 0.316,-0.323 0.624,-0.462c0.308,-0.138 0.701,-0.231 1.178,-0.277c0.478,-0.046 1.101,-0.069 1.871,-0.069c0.74,0 1.356,0.023 1.849,0.069c0.492,0.046 0.877,0.139 1.155,0.277c0.277,0.139 0.485,0.293 0.623,0.462c0.139,0.17 0.208,0.378 0.208,0.624l0,41.582Z" style="fill:#333;fill-rule:nonzero;"/><path d="M938.986,261.951c0,3.635 -0.393,6.9 -1.179,9.795c-0.785,2.895 -1.94,5.352 -3.465,7.369c-1.524,2.018 -3.411,3.573 -5.66,4.667c-2.248,1.093 -4.82,1.64 -7.715,1.64c-1.232,0 -2.372,-0.123 -3.419,-0.37c-1.048,-0.246 -2.072,-0.631 -3.073,-1.155c-1.001,-0.523 -1.994,-1.185 -2.98,-1.986c-0.986,-0.801 -2.033,-1.741 -3.142,-2.819l0,20.791c0,0.247 -0.061,0.462 -0.184,0.647c-0.124,0.185 -0.324,0.339 -0.601,0.462c-0.277,0.123 -0.662,0.216 -1.155,0.277c-0.493,0.062 -1.124,0.093 -1.894,0.093c-0.74,0 -1.356,-0.031 -1.849,-0.093c-0.492,-0.061 -0.885,-0.154 -1.178,-0.277c-0.292,-0.123 -0.493,-0.277 -0.6,-0.462c-0.108,-0.185 -0.162,-0.4 -0.162,-0.647l0,-58.076c0,-0.277 0.046,-0.501 0.139,-0.67c0.092,-0.169 0.277,-0.316 0.554,-0.439c0.277,-0.123 0.631,-0.208 1.063,-0.254c0.431,-0.046 0.954,-0.069 1.571,-0.069c0.646,0 1.178,0.023 1.594,0.069c0.415,0.046 0.762,0.131 1.039,0.254c0.277,0.123 0.47,0.27 0.578,0.439c0.107,0.169 0.161,0.393 0.161,0.67l0,5.59c1.263,-1.293 2.48,-2.417 3.65,-3.372c1.171,-0.955 2.349,-1.748 3.535,-2.38c1.186,-0.631 2.402,-1.109 3.65,-1.432c1.247,-0.323 2.564,-0.485 3.95,-0.485c3.019,0 5.591,0.585 7.716,1.756c2.125,1.17 3.858,2.772 5.198,4.805c1.34,2.033 2.317,4.397 2.933,7.092c0.617,2.695 0.925,5.552 0.925,8.57Zm-7.901,0.878c0,-2.125 -0.163,-4.181 -0.488,-6.168c-0.325,-1.987 -0.883,-3.75 -1.673,-5.29c-0.791,-1.54 -1.852,-2.772 -3.185,-3.696c-1.332,-0.924 -2.99,-1.386 -4.974,-1.386c-0.992,0 -1.968,0.146 -2.929,0.439c-0.96,0.292 -1.936,0.754 -2.928,1.386c-0.992,0.631 -2.03,1.463 -3.115,2.495c-1.085,1.031 -2.231,2.302 -3.44,3.811l0,16.541c2.108,2.556 4.107,4.512 5.997,5.867c1.891,1.356 3.874,2.033 5.95,2.033c1.922,0 3.572,-0.462 4.951,-1.386c1.379,-0.924 2.495,-2.156 3.347,-3.696c0.852,-1.54 1.48,-3.265 1.883,-5.175c0.403,-1.909 0.604,-3.834 0.604,-5.775Z" style="fill:#333;fill-rule:nonzero;"/><path d="M988.699,261.951c0,3.635 -0.392,6.9 -1.178,9.795c-0.785,2.895 -1.94,5.352 -3.465,7.369c-1.525,2.018 -3.411,3.573 -5.66,4.667c-2.248,1.093 -4.82,1.64 -7.716,1.64c-1.232,0 -2.371,-0.123 -3.419,-0.37c-1.047,-0.246 -2.071,-0.631 -3.072,-1.155c-1.001,-0.523 -1.994,-1.185 -2.98,-1.986c-0.986,-0.801 -2.033,-1.741 -3.142,-2.819l0,20.791c0,0.247 -0.061,0.462 -0.185,0.647c-0.123,0.185 -0.323,0.339 -0.6,0.462c-0.278,0.123 -0.663,0.216 -1.155,0.277c-0.493,0.062 -1.125,0.093 -1.895,0.093c-0.739,0 -1.355,-0.031 -1.848,-0.093c-0.493,-0.061 -0.885,-0.154 -1.178,-0.277c-0.293,-0.123 -0.493,-0.277 -0.601,-0.462c-0.107,-0.185 -0.161,-0.4 -0.161,-0.647l0,-58.076c0,-0.277 0.046,-0.501 0.138,-0.67c0.093,-0.169 0.278,-0.316 0.555,-0.439c0.277,-0.123 0.631,-0.208 1.062,-0.254c0.432,-0.046 0.955,-0.069 1.571,-0.069c0.647,0 1.178,0.023 1.594,0.069c0.416,0.046 0.763,0.131 1.04,0.254c0.277,0.123 0.47,0.27 0.577,0.439c0.108,0.169 0.162,0.393 0.162,0.67l0,5.59c1.263,-1.293 2.48,-2.417 3.65,-3.372c1.171,-0.955 2.349,-1.748 3.535,-2.38c1.185,-0.631 2.402,-1.109 3.65,-1.432c1.247,-0.323 2.564,-0.485 3.95,-0.485c3.018,0 5.59,0.585 7.716,1.756c2.125,1.17 3.858,2.772 5.197,4.805c1.34,2.033 2.318,4.397 2.934,7.092c0.616,2.695 0.924,5.552 0.924,8.57Zm-7.9,0.878c0,-2.125 -0.163,-4.181 -0.488,-6.168c-0.326,-1.987 -0.883,-3.75 -1.674,-5.29c-0.79,-1.54 -1.851,-2.772 -3.184,-3.696c-1.333,-0.924 -2.991,-1.386 -4.974,-1.386c-0.992,0 -1.968,0.146 -2.929,0.439c-0.96,0.292 -1.937,0.754 -2.928,1.386c-0.992,0.631 -2.03,1.463 -3.115,2.495c-1.085,1.031 -2.231,2.302 -3.44,3.811l0,16.541c2.108,2.556 4.107,4.512 5.997,5.867c1.891,1.356 3.874,2.033 5.95,2.033c1.921,0 3.571,-0.462 4.951,-1.386c1.379,-0.924 2.494,-2.156 3.347,-3.696c0.852,-1.54 1.48,-3.265 1.882,-5.175c0.403,-1.909 0.605,-3.834 0.605,-5.775Z" style="fill:#333;fill-rule:nonzero;"/><path d="M1038.83,262.136c0,3.388 -0.447,6.507 -1.34,9.356c-0.893,2.849 -2.225,5.306 -3.996,7.369c-1.772,2.064 -3.989,3.673 -6.654,4.828c-2.664,1.156 -5.752,1.733 -9.263,1.733c-3.419,0 -6.399,-0.508 -8.94,-1.525c-2.541,-1.016 -4.659,-2.495 -6.353,-4.435c-1.694,-1.941 -2.957,-4.297 -3.789,-7.069c-0.831,-2.772 -1.247,-5.914 -1.247,-9.425c0,-3.388 0.439,-6.507 1.317,-9.356c0.877,-2.849 2.202,-5.306 3.973,-7.37c1.771,-2.063 3.981,-3.665 6.63,-4.805c2.649,-1.139 5.744,-1.709 9.287,-1.709c3.419,0 6.399,0.508 8.94,1.525c2.541,1.016 4.659,2.494 6.353,4.435c1.694,1.94 2.964,4.297 3.811,7.069c0.847,2.772 1.271,5.898 1.271,9.379Zm-7.901,0.508c0,-2.248 -0.21,-4.374 -0.629,-6.376c-0.42,-2.002 -1.111,-3.757 -2.075,-5.267c-0.963,-1.509 -2.269,-2.703 -3.916,-3.58c-1.647,-0.878 -3.698,-1.317 -6.154,-1.317c-2.269,0 -4.219,0.4 -5.851,1.201c-1.631,0.801 -2.976,1.933 -4.032,3.396c-1.057,1.463 -1.842,3.196 -2.354,5.198c-0.513,2.002 -0.77,4.189 -0.77,6.56c0,2.28 0.21,4.42 0.63,6.423c0.42,2.002 1.119,3.75 2.098,5.244c0.979,1.493 2.292,2.679 3.939,3.557c1.647,0.878 3.698,1.317 6.154,1.317c2.238,0 4.18,-0.401 5.827,-1.201c1.648,-0.801 3,-1.925 4.056,-3.373c1.057,-1.448 1.834,-3.173 2.331,-5.175c0.498,-2.002 0.746,-4.204 0.746,-6.607Z" style="fill:#333;fill-rule:nonzero;"/><path d="M1074.36,244.533c0,0.678 -0.016,1.247 -0.047,1.709c-0.03,0.462 -0.092,0.824 -0.184,1.086c-0.093,0.262 -0.208,0.462 -0.347,0.601c-0.139,0.138 -0.331,0.208 -0.577,0.208c-0.247,0 -0.547,-0.07 -0.901,-0.208c-0.355,-0.139 -0.755,-0.277 -1.202,-0.416c-0.446,-0.139 -0.947,-0.27 -1.501,-0.393c-0.555,-0.123 -1.155,-0.185 -1.802,-0.185c-0.77,0 -1.525,0.154 -2.264,0.462c-0.739,0.308 -1.517,0.817 -2.333,1.525c-0.817,0.709 -1.671,1.648 -2.565,2.818c-0.893,1.171 -1.878,2.603 -2.956,4.297l0,27.352c0,0.247 -0.062,0.454 -0.185,0.624c-0.124,0.169 -0.324,0.316 -0.601,0.439c-0.277,0.123 -0.662,0.215 -1.155,0.277c-0.493,0.062 -1.124,0.092 -1.894,0.092c-0.74,0 -1.356,-0.03 -1.848,-0.092c-0.493,-0.062 -0.886,-0.154 -1.179,-0.277c-0.292,-0.123 -0.492,-0.27 -0.6,-0.439c-0.108,-0.17 -0.162,-0.377 -0.162,-0.624l0,-41.582c0,-0.246 0.046,-0.454 0.139,-0.624c0.092,-0.169 0.277,-0.323 0.554,-0.462c0.277,-0.138 0.632,-0.231 1.063,-0.277c0.431,-0.046 1.001,-0.069 1.709,-0.069c0.678,0 1.24,0.023 1.687,0.069c0.446,0.046 0.793,0.139 1.039,0.277c0.247,0.139 0.424,0.293 0.532,0.462c0.107,0.17 0.161,0.378 0.161,0.624l0,6.052c1.14,-1.663 2.21,-3.018 3.211,-4.065c1.001,-1.048 1.949,-1.872 2.842,-2.472c0.893,-0.601 1.779,-1.017 2.656,-1.248c0.878,-0.231 1.764,-0.346 2.657,-0.346c0.4,0 0.855,0.023 1.363,0.069c0.508,0.046 1.04,0.131 1.594,0.254c0.554,0.123 1.055,0.262 1.502,0.416c0.446,0.154 0.762,0.308 0.947,0.462c0.185,0.154 0.308,0.3 0.369,0.439c0.062,0.139 0.116,0.316 0.162,0.531c0.046,0.216 0.077,0.532 0.092,0.948c0.016,0.415 0.024,0.977 0.024,1.686Z" style="fill:#333;fill-rule:nonzero;"/><path d="M1104.67,280.34c0,0.893 -0.061,1.601 -0.184,2.125c-0.124,0.524 -0.308,0.909 -0.555,1.155c-0.246,0.247 -0.616,0.478 -1.109,0.693c-0.493,0.216 -1.055,0.393 -1.686,0.532c-0.632,0.138 -1.302,0.254 -2.01,0.346c-0.708,0.092 -1.417,0.139 -2.125,0.139c-2.156,0 -4.004,-0.285 -5.545,-0.855c-1.54,-0.57 -2.802,-1.432 -3.788,-2.587c-0.986,-1.155 -1.702,-2.619 -2.149,-4.39c-0.446,-1.771 -0.669,-3.858 -0.669,-6.26l0,-24.303l-5.822,0c-0.462,0 -0.832,-0.246 -1.109,-0.739c-0.277,-0.493 -0.416,-1.293 -0.416,-2.402c0,-0.586 0.039,-1.078 0.116,-1.479c0.077,-0.4 0.177,-0.731 0.3,-0.993c0.123,-0.262 0.285,-0.447 0.485,-0.555c0.2,-0.107 0.424,-0.161 0.67,-0.161l5.776,0l0,-9.888c0,-0.215 0.053,-0.415 0.161,-0.6c0.108,-0.185 0.308,-0.347 0.601,-0.485c0.292,-0.139 0.685,-0.239 1.178,-0.301c0.493,-0.061 1.109,-0.092 1.848,-0.092c0.77,0 1.402,0.031 1.894,0.092c0.493,0.062 0.878,0.162 1.155,0.301c0.278,0.138 0.478,0.3 0.601,0.485c0.123,0.185 0.185,0.385 0.185,0.6l0,9.888l10.673,0c0.246,0 0.462,0.054 0.646,0.161c0.185,0.108 0.347,0.293 0.486,0.555c0.138,0.262 0.238,0.593 0.3,0.993c0.062,0.401 0.092,0.893 0.092,1.479c0,1.109 -0.138,1.909 -0.415,2.402c-0.278,0.493 -0.647,0.739 -1.109,0.739l-10.673,0l0,23.194c0,2.865 0.423,5.028 1.27,6.491c0.848,1.464 2.364,2.195 4.551,2.195c0.709,0 1.34,-0.069 1.895,-0.208c0.554,-0.138 1.047,-0.285 1.478,-0.439c0.431,-0.154 0.801,-0.3 1.109,-0.439c0.308,-0.138 0.585,-0.208 0.832,-0.208c0.154,0 0.3,0.039 0.439,0.116c0.138,0.077 0.246,0.223 0.323,0.439c0.077,0.215 0.146,0.508 0.208,0.878c0.062,0.369 0.092,0.831 0.092,1.386Z" style="fill:#333;fill-rule:nonzero;"/><path d="M1149.21,260.796c0,1.201 -0.301,2.056 -0.904,2.564c-0.604,0.509 -1.292,0.763 -2.066,0.763l-27.385,0c0,2.31 0.233,4.389 0.697,6.237c0.464,1.848 1.238,3.434 2.321,4.759c1.083,1.324 2.492,2.341 4.225,3.049c1.733,0.709 3.854,1.063 6.36,1.063c1.981,0 3.746,-0.162 5.293,-0.485c1.548,-0.324 2.886,-0.686 4.016,-1.086c1.13,-0.4 2.059,-0.762 2.786,-1.086c0.727,-0.323 1.277,-0.485 1.649,-0.485c0.216,0 0.409,0.054 0.58,0.162c0.17,0.108 0.301,0.269 0.394,0.485c0.093,0.216 0.163,0.516 0.209,0.901c0.047,0.385 0.07,0.855 0.07,1.409c0,0.401 -0.016,0.747 -0.046,1.04c-0.031,0.292 -0.07,0.554 -0.116,0.785c-0.046,0.231 -0.123,0.439 -0.231,0.624c-0.108,0.185 -0.246,0.362 -0.416,0.531c-0.169,0.17 -0.67,0.447 -1.501,0.832c-0.832,0.385 -1.91,0.762 -3.235,1.132c-1.324,0.369 -2.856,0.701 -4.597,0.993c-1.74,0.293 -3.596,0.439 -5.567,0.439c-3.419,0 -6.414,-0.477 -8.986,-1.432c-2.572,-0.955 -4.736,-2.372 -6.492,-4.251c-1.756,-1.879 -3.08,-4.235 -3.973,-7.069c-0.894,-2.834 -1.34,-6.129 -1.34,-9.887c0,-3.573 0.462,-6.784 1.386,-9.633c0.924,-2.849 2.256,-5.267 3.996,-7.254c1.741,-1.987 3.843,-3.511 6.307,-4.574c2.464,-1.063 5.221,-1.594 8.27,-1.594c3.265,0 6.045,0.524 8.34,1.571c2.295,1.047 4.181,2.456 5.66,4.227c1.478,1.771 2.564,3.85 3.257,6.238c0.693,2.387 1.039,4.936 1.039,7.646l0,1.386Zm-7.669,-2.264c0.092,-4.004 -0.799,-7.146 -2.673,-9.425c-1.875,-2.279 -4.656,-3.419 -8.344,-3.419c-1.891,0 -3.549,0.354 -4.974,1.063c-1.426,0.708 -2.619,1.648 -3.58,2.818c-0.961,1.17 -1.705,2.533 -2.231,4.089c-0.527,1.555 -0.821,3.18 -0.884,4.874l22.686,0Z" style="fill:#333;fill-rule:nonzero;"/><path d="M1196.42,283.389c0,0.247 -0.054,0.462 -0.161,0.647c-0.108,0.185 -0.293,0.331 -0.555,0.439c-0.262,0.108 -0.608,0.192 -1.039,0.254c-0.432,0.062 -0.955,0.092 -1.571,0.092c-0.647,0 -1.186,-0.03 -1.617,-0.092c-0.432,-0.062 -0.786,-0.146 -1.063,-0.254c-0.277,-0.108 -0.477,-0.254 -0.601,-0.439c-0.123,-0.185 -0.184,-0.4 -0.184,-0.647l0,-5.498c-2.187,2.372 -4.459,4.22 -6.815,5.544c-2.357,1.325 -4.936,1.987 -7.739,1.987c-3.05,0 -5.652,-0.593 -7.808,-1.779c-2.157,-1.186 -3.905,-2.787 -5.244,-4.805c-1.34,-2.017 -2.318,-4.389 -2.934,-7.115c-0.616,-2.726 -0.924,-5.598 -0.924,-8.617c0,-3.573 0.385,-6.799 1.155,-9.679c0.77,-2.88 1.909,-5.336 3.419,-7.369c1.509,-2.033 3.38,-3.596 5.613,-4.69c2.233,-1.093 4.813,-1.64 7.739,-1.64c2.434,0 4.659,0.531 6.676,1.594c2.018,1.063 4.012,2.626 5.984,4.689l0,-24.163c0,-0.216 0.054,-0.424 0.161,-0.624c0.108,-0.2 0.316,-0.354 0.624,-0.462c0.308,-0.108 0.701,-0.2 1.178,-0.277c0.478,-0.077 1.086,-0.116 1.825,-0.116c0.77,0 1.402,0.039 1.895,0.116c0.492,0.077 0.877,0.169 1.155,0.277c0.277,0.108 0.485,0.262 0.623,0.462c0.139,0.2 0.208,0.408 0.208,0.624l0,61.541Zm-7.669,-29.246c-2.064,-2.557 -4.058,-4.505 -5.984,-5.845c-1.925,-1.339 -3.934,-2.009 -6.029,-2.009c-1.94,0 -3.588,0.462 -4.944,1.386c-1.355,0.924 -2.456,2.14 -3.303,3.65c-0.847,1.509 -1.463,3.218 -1.848,5.128c-0.385,1.91 -0.578,3.85 -0.578,5.822c0,2.094 0.162,4.142 0.485,6.145c0.324,2.002 0.886,3.78 1.687,5.336c0.801,1.555 1.863,2.803 3.188,3.742c1.324,0.94 2.988,1.41 4.99,1.41c1.016,0 1.994,-0.139 2.934,-0.416c0.939,-0.278 1.902,-0.74 2.887,-1.386c0.986,-0.647 2.018,-1.487 3.096,-2.518c1.078,-1.032 2.217,-2.303 3.419,-3.812l0,-16.633Z" style="fill:#333;fill-rule:nonzero;"/><g><g><path d="M280.884,219.245c1.765,0 3.198,-1.433 3.198,-3.198l0,-6.395c0,-1.765 -1.433,-3.197 -3.198,-3.197l-225.605,0c-1.764,0 -3.197,1.432 -3.197,3.197l0,6.395c0,1.765 1.433,3.198 3.197,3.198l225.605,0Z" style="fill:#8c8c8c;"/><path d="M280.884,165.588c1.765,0 3.198,-1.433 3.198,-3.198l0,-6.395c0,-1.765 -1.433,-3.197 -3.198,-3.197l-225.605,0c-1.764,0 -3.197,1.432 -3.197,3.197l0,6.395c0,1.765 1.433,3.198 3.197,3.198l225.605,0Z" style="fill:#8c8c8c;"/><path d="M280.884,192.416c1.765,0 3.198,-1.432 3.198,-3.197l0,-6.395c0,-1.765 -1.433,-3.198 -3.198,-3.198l-225.605,0c-1.764,0 -3.197,1.433 -3.197,3.198l0,6.395c0,1.765 1.433,3.197 3.197,3.197l225.605,0Z" style="fill:#8c8c8c;"/><path d="M280.884,138.759c1.765,0 3.198,-1.432 3.198,-3.197l0,-6.395c0,-1.765 -1.433,-3.198 -3.198,-3.198l-225.605,0c-1.764,0 -3.197,1.433 -3.197,3.198l0,6.395c0,1.765 1.433,3.197 3.197,3.197l225.605,0Z" style="fill:#8c8c8c;"/><path d="M280.884,246.074c1.765,0 3.198,-1.433 3.198,-3.198l0,-6.395c0,-1.765 -1.433,-3.198 -3.198,-3.198l-225.605,0c-1.764,0 -3.197,1.433 -3.197,3.198l0,6.395c0,1.765 1.433,3.198 3.197,3.198l225.605,0Z" style="fill:#8c8c8c;"/><path d="M134.858,298.824c0,1.764 1.433,3.197 3.198,3.197l6.395,0c1.765,0 3.197,-1.433 3.197,-3.197l0,-225.605c0,-1.765 -1.432,-3.198 -3.197,-3.198l-6.395,0c-1.765,0 -3.198,1.433 -3.198,3.198l0,225.605Z" style="fill:#8c8c8c;"/><path d="M188.515,298.824c0,1.764 1.433,3.197 3.198,3.197l6.395,0c1.765,0 3.198,-1.433 3.198,-3.197l0,-225.605c0,-1.765 -1.433,-3.198 -3.198,-3.198l-6.395,0c-1.765,0 -3.198,1.433 -3.198,3.198l0,225.605Z" style="fill:#8c8c8c;"/><path d="M161.687,298.824c0,1.764 1.432,3.197 3.197,3.197l6.395,0c1.765,0 3.198,-1.433 3.198,-3.197l0,-225.605c0,-1.765 -1.433,-3.198 -3.198,-3.198l-6.395,0c-1.765,0 -3.197,1.433 -3.197,3.198l0,225.605Z" style="fill:#8c8c8c;"/><path d="M215.344,298.824c0,1.764 1.433,3.197 3.197,3.197l6.396,0c1.764,0 3.197,-1.433 3.197,-3.197l0,-225.605c0,-1.765 -1.433,-3.198 -3.197,-3.198l-6.396,0c-1.764,0 -3.197,1.433 -3.197,3.198l0,225.605Z" style="fill:#8c8c8c;"/><path d="M108.029,298.824c0,1.764 1.433,3.197 3.198,3.197l6.395,0c1.765,0 3.198,-1.433 3.198,-3.197l0,-225.605c0,-1.765 -1.433,-3.198 -3.198,-3.198l-6.395,0c-1.765,0 -3.198,1.433 -3.198,3.198l0,225.605Z" style="fill:#8c8c8c;"/></g><path d="M232.655,278.269c15.274,0 27.674,-12.401 27.674,-27.674l0,-129.147c0,-15.274 -12.4,-27.674 -27.674,-27.674l-129.146,0c-15.274,0 -27.675,12.4 -27.675,27.674l0,129.147c0,15.273 12.401,27.674 27.675,27.674l129.146,0Z" style="fill:#333;"/><path d="M220.739,175.532c0,6.734 -1.056,12.768 -3.167,18.104c-2.112,5.335 -5.122,9.886 -9.031,13.653c-3.909,3.766 -8.645,6.676 -14.209,8.731c-5.564,2.054 -11.855,3.167 -18.874,3.338l0,20.458c0,0.456 -0.114,0.856 -0.343,1.198c-0.228,0.342 -0.627,0.614 -1.198,0.813c-0.571,0.2 -1.327,0.357 -2.268,0.471c-0.942,0.114 -2.126,0.171 -3.553,0.171c-1.426,0 -2.61,-0.057 -3.552,-0.171c-0.942,-0.114 -1.683,-0.271 -2.226,-0.471c-0.542,-0.199 -0.941,-0.471 -1.198,-0.813c-0.257,-0.342 -0.385,-0.742 -0.385,-1.198l0,-20.458c-7.133,-0.171 -13.496,-1.199 -19.088,-3.082c-5.593,-1.883 -10.329,-4.608 -14.21,-8.174c-3.88,-3.567 -6.847,-7.947 -8.902,-13.139c-2.054,-5.193 -3.081,-11.157 -3.081,-17.89l0,-43.741c0,-0.399 0.128,-0.77 0.385,-1.113c0.257,-0.342 0.656,-0.627 1.198,-0.856c0.542,-0.228 1.284,-0.399 2.226,-0.513c0.941,-0.114 2.125,-0.171 3.552,-0.171c1.427,0 2.611,0.057 3.552,0.171c0.942,0.114 1.698,0.285 2.269,0.513c0.57,0.229 0.97,0.514 1.198,0.856c0.228,0.343 0.343,0.714 0.343,1.113l0,42.457c0,4.736 0.627,9.002 1.883,12.796c1.255,3.795 3.138,7.019 5.649,9.673c2.511,2.654 5.692,4.708 9.544,6.163c3.852,1.455 8.346,2.24 13.482,2.354l0,-73.443c0,-0.399 0.128,-0.77 0.385,-1.113c0.257,-0.342 0.685,-0.627 1.284,-0.856c0.599,-0.228 1.37,-0.399 2.311,-0.513c0.942,-0.114 2.069,-0.171 3.381,-0.171c1.427,0 2.611,0.057 3.553,0.171c0.941,0.114 1.697,0.285 2.268,0.513c0.571,0.229 0.97,0.514 1.198,0.856c0.229,0.343 0.343,0.714 0.343,1.113l0,73.443c5.136,-0.057 9.615,-0.842 13.439,-2.354c3.823,-1.512 7.004,-3.595 9.544,-6.249c2.539,-2.653 4.451,-5.849 5.735,-9.587c1.284,-3.737 1.926,-7.889 1.926,-12.454l0,-42.799c0,-0.399 0.114,-0.77 0.342,-1.113c0.228,-0.342 0.628,-0.627 1.198,-0.856c0.571,-0.228 1.313,-0.399 2.226,-0.513c0.913,-0.114 2.111,-0.171 3.595,-0.171c1.37,0 2.525,0.057 3.467,0.171c0.941,0.114 1.683,0.285 2.225,0.513c0.542,0.229 0.942,0.514 1.199,0.856c0.256,0.343 0.385,0.714 0.385,1.113l0,42.2Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M220.739,175.532c0,6.734 -1.056,12.768 -3.167,18.104c-2.112,5.335 -5.122,9.886 -9.031,13.653c-3.909,3.766 -8.645,6.676 -14.209,8.731c-5.564,2.054 -11.855,3.167 -18.874,3.338l0,20.458c0,0.456 -0.114,0.856 -0.343,1.198c-0.228,0.342 -0.627,0.614 -1.198,0.813c-0.571,0.2 -1.327,0.357 -2.268,0.471c-0.942,0.114 -2.126,0.171 -3.553,0.171c-1.426,0 -2.61,-0.057 -3.552,-0.171c-0.942,-0.114 -1.683,-0.271 -2.226,-0.471c-0.542,-0.199 -0.941,-0.471 -1.198,-0.813c-0.257,-0.342 -0.385,-0.742 -0.385,-1.198l0,-20.458c-7.133,-0.171 -13.496,-1.199 -19.088,-3.082c-5.593,-1.883 -10.329,-4.608 -14.21,-8.174c-3.88,-3.567 -6.847,-7.947 -8.902,-13.139c-2.054,-5.193 -3.081,-11.157 -3.081,-17.89l0,-43.741c0,-0.399 0.128,-0.77 0.385,-1.113c0.257,-0.342 0.656,-0.627 1.198,-0.856c0.542,-0.228 1.284,-0.399 2.226,-0.513c0.941,-0.114 2.125,-0.171 3.552,-0.171c1.427,0 2.611,0.057 3.552,0.171c0.942,0.114 1.698,0.285 2.269,0.513c0.57,0.229 0.97,0.514 1.198,0.856c0.228,0.343 0.343,0.714 0.343,1.113l0,42.457c0,4.736 0.627,9.002 1.883,12.796c1.255,3.795 3.138,7.019 5.649,9.673c2.511,2.654 5.692,4.708 9.544,6.163c3.852,1.455 8.346,2.24 13.482,2.354l0,-73.443c0,-0.399 0.128,-0.77 0.385,-1.113c0.257,-0.342 0.685,-0.627 1.284,-0.856c0.599,-0.228 1.37,-0.399 2.311,-0.513c0.942,-0.114 2.069,-0.171 3.381,-0.171c1.427,0 2.611,0.057 3.553,0.171c0.941,0.114 1.697,0.285 2.268,0.513c0.571,0.229 0.97,0.514 1.198,0.856c0.229,0.343 0.343,0.714 0.343,1.113l0,73.443c5.136,-0.057 9.615,-0.842 13.439,-2.354c3.823,-1.512 7.004,-3.595 9.544,-6.249c2.539,-2.653 4.451,-5.849 5.735,-9.587c1.284,-3.737 1.926,-7.889 1.926,-12.454l0,-42.799c0,-0.399 0.114,-0.77 0.342,-1.113c0.228,-0.342 0.628,-0.627 1.198,-0.856c0.571,-0.228 1.313,-0.399 2.226,-0.513c0.913,-0.114 2.111,-0.171 3.595,-0.171c1.37,0 2.525,0.057 3.467,0.171c0.941,0.114 1.683,0.285 2.225,0.513c0.542,0.229 0.942,0.514 1.199,0.856c0.256,0.343 0.385,0.714 0.385,1.113l0,42.2Z" style="fill:#fff;fill-rule:nonzero;"/></g></g></svg>
diff --git a/docs/tap_hold.md b/docs/tap_hold.md
index 254d5de5ec..f1af753eba 100644
--- a/docs/tap_hold.md
+++ b/docs/tap_hold.md
@@ -425,6 +425,89 @@ uint16_t get_quick_tap_term(uint16_t keycode, keyrecord_t *record) {
If `QUICK_TAP_TERM` is set higher than `TAPPING_TERM`, it will default to `TAPPING_TERM`.
:::
+## Flow Tap
+
+Flow Tap modifies mod-tap `MT` and layer-tap `LT` keys such that when pressed within a short timeout of the preceding key, the tapping behavior is triggered. This is particularly useful for home row mods to avoid accidental mod triggers. It basically disables the hold behavior during fast typing, creating a "flow of taps." This also helps to reduce the input lag of tap-hold keys during fast typing, since the tapped behavior is sent immediately.
+
+Flow Tap is enabled by defining `FLOW_TAP_TERM` in your `config.h` with the desired timeout in milliseconds. A timeout of 150&nbsp;ms is recommended as a starting point:
+
+```c
+#define FLOW_TAP_TERM 150
+```
+
+By default, Flow Tap is enabled when:
+
+* The tap-hold key is pressed within `FLOW_TAP_TERM` milliseconds of the previous key press.
+
+* The tapping keycodes of the previous key and tap-hold key are *both* among `KC_A`&ndash;`KC_Z`, `KC_COMM`, `KC_DOT`, `KC_SCLN`, `KC_SLSH` (the main alphas area of a conventional QWERTY layout) or `KC_SPC`.
+
+As an exception to the above, Flow Tap is temporarily disabled while a tap-hold key is undecided. This is to allow chording multiple mod-tap keys without having to wait out the Flow Tap term.
+
+
+### is_flow_tap_key()
+
+Optionally, define the `is_flow_tap_key()` callback to specify where Flow Tap is enabled. The callback is called for both the tap-hold key *and* the key press immediately preceding it, and if the callback returns true for both keycodes, Flow Tap is enabled.
+
+The default implementation of this callback is:
+
+```.c
+bool is_flow_tap_key(uint16_t keycode) {
+ if ((get_mods() & (MOD_MASK_CG | MOD_BIT_LALT)) != 0) {
+ return false; // Disable Flow Tap on hotkeys.
+ }
+ switch (get_tap_keycode(keycode)) {
+ case KC_SPC:
+ case KC_A ... KC_Z:
+ case KC_DOT:
+ case KC_COMM:
+ case KC_SCLN:
+ case KC_SLSH:
+ return true;
+ }
+ return false;
+}
+```
+
+Copy the above to your `keymap.c` and edit to customize. For instance, remove the `case KC_SPC` line to disable Flow Tap for the Space key.
+
+### get_flow_tap_term()
+
+Optionally, for further flexibility, define the `get_flow_tap_term()` callback. Flow Tap acts only when key events are closer together than the time returned by the callback. Return a time of 0 to disable filtering. In this way, Flow Tap may be disabled for certain tap-hold keys, or when following certain previous keys.
+
+The default implementation of this callback is
+
+```.c
+uint16_t get_flow_tap_term(uint16_t keycode, keyrecord_t* record,
+ uint16_t prev_keycode) {
+ if (is_flow_tap_key(keycode) && is_flow_tap_key(prev_keycode)) {
+ return FLOW_TAP_TERM;
+ }
+ return 0;
+}
+```
+
+In this callback, `keycode` and `record` correspond to the current tap-hold key, and `prev_keycode` is the keycode of the previous key. Return the timeout to use. Returning `0` disables Flow Tap. This callback enables setting per-key timeouts. It is also possible to enable or disable Flow Tap for certain tap-hold keys or when following certain previous keys. Example:
+
+```c
+uint16_t get_flow_tap_term(uint16_t keycode, keyrecord_t* record,
+ uint16_t prev_keycode) {
+ if (is_flow_tap_key(keycode) && is_flow_tap_key(prev_keycode)) {
+ switch (keycode) {
+ case LCTL_T(KC_F):
+ case RCTL_T(KC_H):
+ return FLOW_TAP_TERM - 25; // Short timeout on these keys.
+
+ default:
+ return FLOW_TAP_TERM; // Longer timeout otherwise.
+ }
+ }
+ return 0; // Disable Flow Tap.
+}
+```
+
+::: tip If you define both `is_flow_tap_key()` and `get_flow_tap_term()`, then the latter takes precedence.
+:::
+
## Chordal Hold
Chordal Hold is intended to be used together with either Permissive Hold or Hold
diff --git a/docs/unit_testing.md b/docs/unit_testing.md
index 3e4c914bf1..aec4ec8334 100644
--- a/docs/unit_testing.md
+++ b/docs/unit_testing.md
@@ -58,6 +58,34 @@ It's not yet possible to do a full integration test, where you would compile the
In that model you would emulate the input, and expect a certain output from the emulated keyboard.
+# Keycode String {#keycode-string}
+
+It's much nicer to read keycodes as names like "`LT(2,KC_D)`" than numerical codes like "`0x4207`." To convert keycodes to human-readable strings, add `KEYCODE_STRING_ENABLE = yes` to the `rules.mk` file, then use the `get_keycode_string(kc)` function to convert a given 16-bit keycode to a string.
+
+```c
+const char *key_name = get_keycode_string(keycode);
+dprintf("kc: %s\n", key_name);
+```
+
+The stringified keycode may then be logged to console output with `dprintf()` or elsewhere.
+
+::: warning
+Use the result of `get_keycode_string()` immediately. Subsequent invocations reuse the same static buffer and overwrite the previous contents.
+:::
+
+Many common QMK keycodes are recognized by `get_keycode_string()`, but not all. These include some common basic keycodes, layer switch keycodes, mod-taps, one-shot keycodes, tap dance keycodes, and Unicode keycodes. As a fallback, an unrecognized keycode is written as a hex number.
+
+Optionally, `KEYCODE_STRING_NAMES_USER` may be defined to add names for additional keycodes. For example, supposing keymap.c defines `MYMACRO1` and `MYMACRO2` as custom keycodes, the following adds their names:
+
+```c
+KEYCODE_STRING_NAMES_USER(
+ KEYCODE_STRING_NAME(MYMACRO1),
+ KEYCODE_STRING_NAME(MYMACRO2),
+);
+```
+
+Similarly, `KEYCODE_STRING_NAMES_KB` may be defined to add names at the keyboard level.
+
# Tracing Variables {#tracing-variables}
Sometimes you might wonder why a variable gets changed and where, and this can be quite tricky to track down without having a debugger. It's of course possible to manually add print statements to track it, but you can also enable the variable trace feature. This works for both variables that are changed by the code, and when the variable is changed by some memory corruption.
diff --git a/drivers/battery/battery.c b/drivers/battery/battery.c
new file mode 100644
index 0000000000..65497399e8
--- /dev/null
+++ b/drivers/battery/battery.c
@@ -0,0 +1,31 @@
+// Copyright 2025 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "battery_driver.h"
+#include "battery.h"
+#include "timer.h"
+
+#ifndef BATTERY_SAMPLE_INTERVAL
+# define BATTERY_SAMPLE_INTERVAL 30000
+#endif
+
+static uint8_t last_bat_level = 100;
+
+void battery_init(void) {
+ battery_driver_init();
+
+ last_bat_level = battery_driver_sample_percent();
+}
+
+void battery_task(void) {
+ static uint32_t bat_timer = 0;
+ if (timer_elapsed32(bat_timer) > BATTERY_SAMPLE_INTERVAL) {
+ last_bat_level = battery_driver_sample_percent();
+
+ bat_timer = timer_read32();
+ }
+}
+
+uint8_t battery_get_percent(void) {
+ return last_bat_level;
+}
diff --git a/drivers/battery/battery.h b/drivers/battery/battery.h
new file mode 100644
index 0000000000..831b1f07e5
--- /dev/null
+++ b/drivers/battery/battery.h
@@ -0,0 +1,34 @@
+// Copyright 2025 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include <stdint.h>
+
+/**
+ * \file
+ *
+ * \defgroup battery Battery API
+ *
+ * \brief API to query battery status.
+ * \{
+ */
+
+/**
+ * \brief Initialize the battery driver.
+ */
+void battery_init(void);
+
+/**
+ * \brief Perform housekeeping tasks.
+ */
+void battery_task(void);
+
+/**
+ * \brief Sample battery level.
+ *
+ * \return The battery percentage, in the range 0-100.
+ */
+uint8_t battery_get_percent(void);
+
+/** \} */
diff --git a/drivers/battery/battery_adc.c b/drivers/battery/battery_adc.c
new file mode 100644
index 0000000000..cf0e69cb48
--- /dev/null
+++ b/drivers/battery/battery_adc.c
@@ -0,0 +1,55 @@
+// Copyright 2025 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "analog.h"
+#include "gpio.h"
+
+#ifndef BATTERY_PIN
+# error("BATTERY_PIN not configured!")
+#endif
+
+#ifndef BATTERY_REF_VOLTAGE_MV
+# define BATTERY_REF_VOLTAGE_MV 3300
+#endif
+
+#ifndef BATTERY_VOLTAGE_DIVIDER_R1
+# define BATTERY_VOLTAGE_DIVIDER_R1 100
+#endif
+
+#ifndef BATTERY_VOLTAGE_DIVIDER_R2
+# define BATTERY_VOLTAGE_DIVIDER_R2 100
+#endif
+
+// TODO: infer from adc config?
+#ifndef BATTERY_ADC_RESOLUTION
+# define BATTERY_ADC_RESOLUTION 10
+#endif
+
+void battery_driver_init(void) {
+ gpio_set_pin_input(BATTERY_PIN);
+}
+
+uint16_t battery_driver_get_mv(void) {
+ uint32_t raw = analogReadPin(BATTERY_PIN);
+
+ uint32_t bat_mv = raw * BATTERY_REF_VOLTAGE_MV / (1 << BATTERY_ADC_RESOLUTION);
+
+#if BATTERY_VOLTAGE_DIVIDER_R1 > 0 && BATTERY_VOLTAGE_DIVIDER_R2 > 0
+ bat_mv = bat_mv * (BATTERY_VOLTAGE_DIVIDER_R1 + BATTERY_VOLTAGE_DIVIDER_R2) / BATTERY_VOLTAGE_DIVIDER_R2;
+#endif
+
+ return bat_mv;
+}
+
+uint8_t battery_driver_sample_percent(void) {
+ uint16_t bat_mv = battery_driver_get_mv();
+
+ // https://github.com/zmkfirmware/zmk/blob/3f7c9d7cc4f46617faad288421025ea2a6b0bd28/app/module/drivers/sensor/battery/battery_common.c#L33
+ if (bat_mv >= 4200) {
+ return 100;
+ } else if (bat_mv <= 3450) {
+ return 0;
+ }
+
+ return bat_mv * 2 / 15 - 459;
+}
diff --git a/drivers/battery/battery_driver.h b/drivers/battery/battery_driver.h
new file mode 100644
index 0000000000..c2ee75e966
--- /dev/null
+++ b/drivers/battery/battery_driver.h
@@ -0,0 +1,29 @@
+// Copyright 2025 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include <stdint.h>
+
+/**
+ * \file
+ *
+ * \defgroup battery Battery Driver API
+ *
+ * \brief API to query battery status.
+ * \{
+ */
+
+/**
+ * \brief Initialize the battery driver. This function must be called only once, before any of the below functions can be called.
+ */
+void battery_driver_init(void);
+
+/**
+ * \brief Sample battery level.
+ *
+ * \return The battery percentage, in the range 0-100.
+ */
+uint8_t battery_driver_sample_percent(void);
+
+/** \} */
diff --git a/drivers/bluetooth/bluefruit_le.cpp b/drivers/bluetooth/bluefruit_le.cpp
index 218eca2195..5fdd104dcf 100644
--- a/drivers/bluetooth/bluefruit_le.cpp
+++ b/drivers/bluetooth/bluefruit_le.cpp
@@ -32,13 +32,8 @@
# define BLUEFRUIT_LE_SCK_DIVISOR 2 // 4MHz SCK/8MHz CPU, calculated for Feather 32U4 BLE
#endif
-#define SAMPLE_BATTERY
#define ConnectionUpdateInterval 1000 /* milliseconds */
-#ifndef BATTERY_LEVEL_PIN
-# define BATTERY_LEVEL_PIN B5
-#endif
-
static struct {
bool is_connected;
bool initialized;
@@ -48,10 +43,6 @@ static struct {
#define UsingEvents 2
bool event_flags;
-#ifdef SAMPLE_BATTERY
- uint16_t last_battery_update;
- uint32_t vbat;
-#endif
uint16_t last_connection_update;
} state;
@@ -549,14 +540,6 @@ void bluefruit_le_task(void) {
set_connected(atoi(resbuf));
}
}
-
-#ifdef SAMPLE_BATTERY
- if (timer_elapsed(state.last_battery_update) > BatteryUpdateInterval && resp_buf.empty()) {
- state.last_battery_update = timer_read();
-
- state.vbat = analogReadPin(BATTERY_LEVEL_PIN);
- }
-#endif
}
static bool process_queue_item(struct queue_item *item, uint16_t timeout) {
@@ -655,10 +638,6 @@ void bluefruit_le_send_mouse(report_mouse_t *report) {
}
}
-uint32_t bluefruit_le_read_battery_voltage(void) {
- return state.vbat;
-}
-
bool bluefruit_le_set_mode_leds(bool on) {
if (!state.configured) {
return false;
diff --git a/drivers/bluetooth/bluefruit_le.h b/drivers/bluetooth/bluefruit_le.h
index a3de03c35c..5efe92b6e0 100644
--- a/drivers/bluetooth/bluefruit_le.h
+++ b/drivers/bluetooth/bluefruit_le.h
@@ -45,10 +45,6 @@ extern void bluefruit_le_send_consumer(uint16_t usage);
* change. */
extern void bluefruit_le_send_mouse(report_mouse_t *report);
-/* Compute battery voltage by reading an analog pin.
- * Returns the integer number of millivolts */
-extern uint32_t bluefruit_le_read_battery_voltage(void);
-
extern bool bluefruit_le_set_mode_leds(bool on);
extern bool bluefruit_le_set_power_level(int8_t level);
diff --git a/drivers/bluetooth/outputselect.c b/drivers/bluetooth/outputselect.c
deleted file mode 100644
index b986ba274e..0000000000
--- a/drivers/bluetooth/outputselect.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
-Copyright 2017 Priyadi Iman Nurcahyo
-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 "outputselect.h"
-#include "usb_util.h"
-
-#ifdef BLUETOOTH_BLUEFRUIT_LE
-# include "bluefruit_le.h"
-#endif
-
-uint8_t desired_output = OUTPUT_DEFAULT;
-
-/** \brief Set Output
- *
- * FIXME: Needs doc
- */
-void set_output(uint8_t output) {
- set_output_user(output);
- desired_output = output;
-}
-
-/** \brief Set Output User
- *
- * FIXME: Needs doc
- */
-__attribute__((weak)) void set_output_user(uint8_t output) {}
-
-/** \brief Auto Detect Output
- *
- * FIXME: Needs doc
- */
-uint8_t auto_detect_output(void) {
- if (usb_connected_state()) {
- return OUTPUT_USB;
- }
-
-#ifdef BLUETOOTH_BLUEFRUIT_LE
- if (bluefruit_le_is_connected()) {
- return OUTPUT_BLUETOOTH;
- }
-#endif
-
-#ifdef BLUETOOTH_ENABLE
- return OUTPUT_BLUETOOTH; // should check if BT is connected here
-#endif
-
- return OUTPUT_NONE;
-}
-
-/** \brief Where To Send
- *
- * FIXME: Needs doc
- */
-uint8_t where_to_send(void) {
- if (desired_output == OUTPUT_AUTO) {
- return auto_detect_output();
- }
- return desired_output;
-}
diff --git a/drivers/bluetooth/outputselect.h b/drivers/bluetooth/outputselect.h
index c4548e1122..25f063bbff 100644
--- a/drivers/bluetooth/outputselect.h
+++ b/drivers/bluetooth/outputselect.h
@@ -14,21 +14,17 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#pragma once
-#include <stdint.h>
+#include "connection.h"
-enum outputs {
- OUTPUT_AUTO,
+// DEPRECATED - DO NOT USE
- OUTPUT_NONE,
- OUTPUT_USB,
- OUTPUT_BLUETOOTH
-};
+#define OUTPUT_AUTO CONNECTION_HOST_AUTO
+#define OUTPUT_NONE CONNECTION_HOST_NONE
+#define OUTPUT_USB CONNECTION_HOST_USB
+#define OUTPUT_BLUETOOTH CONNECTION_HOST_BLUETOOTH
-#ifndef OUTPUT_DEFAULT
-# define OUTPUT_DEFAULT OUTPUT_AUTO
-#endif
+#define set_output connection_set_host_noeeprom
+#define where_to_send connection_get_host
+#define auto_detect_output connection_auto_detect_host
-void set_output(uint8_t output);
-void set_output_user(uint8_t output);
-uint8_t auto_detect_output(void);
-uint8_t where_to_send(void);
+void set_output_user(uint8_t output);
diff --git a/drivers/eeprom/eeprom_transient.h b/drivers/eeprom/eeprom_transient.h
index 687b8619fe..0483fd58b9 100644
--- a/drivers/eeprom/eeprom_transient.h
+++ b/drivers/eeprom/eeprom_transient.h
@@ -20,6 +20,6 @@
The size of the transient EEPROM buffer size.
*/
#ifndef TRANSIENT_EEPROM_SIZE
-# include "eeconfig.h"
+# include "nvm_eeprom_eeconfig_internal.h"
# define TRANSIENT_EEPROM_SIZE (((EECONFIG_SIZE + 3) / 4) * 4) // based off eeconfig's current usage, aligned to 4-byte sizes, to deal with LTO
#endif
diff --git a/drivers/painter/gc9xxx/qp_gc9a01_opcodes.h b/drivers/painter/gc9xxx/qp_gc9a01_opcodes.h
index 5853902e68..31de5ee9e3 100644
--- a/drivers/painter/gc9xxx/qp_gc9a01_opcodes.h
+++ b/drivers/painter/gc9xxx/qp_gc9a01_opcodes.h
@@ -101,4 +101,4 @@
#define GC9A01_GRAM_INTERFACE_RGB 0b00000010
#define GC9A01_RGB_INTERFACE_MODE_1_TRANSFER 0b00000000
-#define GC9A01_RGB_INTERFACE_MODE_3_TRANSFER 0b00000001 \ No newline at end of file
+#define GC9A01_RGB_INTERFACE_MODE_3_TRANSFER 0b00000001
diff --git a/drivers/painter/ili9xxx/qp_ili9486.c b/drivers/painter/ili9xxx/qp_ili9486.c
index c4f3c15cec..48db779c04 100644
--- a/drivers/painter/ili9xxx/qp_ili9486.c
+++ b/drivers/painter/ili9xxx/qp_ili9486.c
@@ -75,9 +75,9 @@ static void qp_comms_spi_dc_reset_send_command_odd_cs_pulse(painter_device_t dev
painter_driver_t * driver = (painter_driver_t *)device;
qp_comms_spi_dc_reset_config_t *comms_config = (qp_comms_spi_dc_reset_config_t *)driver->comms_config;
- writePinLow(comms_config->spi_config.chip_select_pin);
+ gpio_write_pin_low(comms_config->spi_config.chip_select_pin);
qp_comms_spi_dc_reset_send_command(device, cmd);
- writePinHigh(comms_config->spi_config.chip_select_pin);
+ gpio_write_pin_high(comms_config->spi_config.chip_select_pin);
}
static uint32_t qp_comms_spi_send_data_odd_cs_pulse(painter_device_t device, const void *data, uint32_t byte_count) {
@@ -88,20 +88,20 @@ static uint32_t qp_comms_spi_send_data_odd_cs_pulse(painter_device_t device, con
const uint8_t *p = (const uint8_t *)data;
uint32_t max_msg_length = 1024;
- writePinHigh(comms_config->dc_pin);
+ gpio_write_pin_high(comms_config->dc_pin);
while (bytes_remaining > 0) {
uint32_t bytes_this_loop = QP_MIN(bytes_remaining, max_msg_length);
bool odd_bytes = bytes_this_loop & 1;
// send data
- writePinLow(comms_config->spi_config.chip_select_pin);
+ gpio_write_pin_low(comms_config->spi_config.chip_select_pin);
spi_transmit(p, bytes_this_loop);
p += bytes_this_loop;
// extra CS toggle, for alignment
if (odd_bytes) {
- writePinHigh(comms_config->spi_config.chip_select_pin);
- writePinLow(comms_config->spi_config.chip_select_pin);
+ gpio_write_pin_high(comms_config->spi_config.chip_select_pin);
+ gpio_write_pin_low(comms_config->spi_config.chip_select_pin);
}
bytes_remaining -= bytes_this_loop;
@@ -116,9 +116,9 @@ static uint32_t qp_ili9486_send_data_toggling(painter_device_t device, const uin
uint32_t ret;
for (uint8_t j = 0; j < byte_count; ++j) {
- writePinLow(comms_config->spi_config.chip_select_pin);
+ gpio_write_pin_low(comms_config->spi_config.chip_select_pin);
ret = qp_comms_spi_dc_reset_send_data(device, &data[j], 1);
- writePinHigh(comms_config->spi_config.chip_select_pin);
+ gpio_write_pin_high(comms_config->spi_config.chip_select_pin);
}
return ret;
diff --git a/drivers/painter/ld7032/qp_ld7032.h b/drivers/painter/ld7032/qp_ld7032.h
index 967eb7999c..9af80dd468 100644
--- a/drivers/painter/ld7032/qp_ld7032.h
+++ b/drivers/painter/ld7032/qp_ld7032.h
@@ -63,4 +63,4 @@ painter_device_t qp_ld7032_make_spi_device(uint16_t panel_width, uint16_t panel_
*/
painter_device_t qp_ld7032_make_i2c_device(uint16_t panel_width, uint16_t panel_height, uint8_t i2c_address);
-#endif // QUANTUM_PAINTER_LD7032_I2C_ENABLE \ No newline at end of file
+#endif // QUANTUM_PAINTER_LD7032_I2C_ENABLE
diff --git a/drivers/painter/ld7032/qp_ld7032_opcodes.h b/drivers/painter/ld7032/qp_ld7032_opcodes.h
index 08ab77d6f8..ed8b397c67 100644
--- a/drivers/painter/ld7032/qp_ld7032_opcodes.h
+++ b/drivers/painter/ld7032/qp_ld7032_opcodes.h
@@ -42,4 +42,4 @@ typedef enum {
LD7032_S_START_STOP = 0xCD,
LD7032_S_SELECT = 0xCE,
LD7032_TESTCNT1 = 0xF0, //-0xFF
-} ld7032_opcodes; \ No newline at end of file
+} ld7032_opcodes;
diff --git a/drivers/sensors/pimoroni_trackball.c b/drivers/sensors/pimoroni_trackball.c
index afbe3d5b77..06e5042953 100644
--- a/drivers/sensors/pimoroni_trackball.c
+++ b/drivers/sensors/pimoroni_trackball.c
@@ -101,12 +101,12 @@ int16_t pimoroni_trackball_get_offsets(uint8_t negative_dir, uint8_t positive_di
}
mouse_xy_report_t pimoroni_trackball_adapt_values(xy_clamp_range_t *offset) {
- if (*offset > XY_REPORT_MAX) {
- *offset -= XY_REPORT_MAX;
- return (mouse_xy_report_t)XY_REPORT_MAX;
- } else if (*offset < XY_REPORT_MIN) {
- *offset += XY_REPORT_MAX;
- return (mouse_xy_report_t)XY_REPORT_MIN;
+ if (*offset > MOUSE_REPORT_XY_MAX) {
+ *offset -= MOUSE_REPORT_XY_MAX;
+ return (mouse_xy_report_t)MOUSE_REPORT_XY_MAX;
+ } else if (*offset < MOUSE_REPORT_XY_MIN) {
+ *offset += MOUSE_REPORT_XY_MAX;
+ return (mouse_xy_report_t)MOUSE_REPORT_XY_MIN;
} else {
mouse_xy_report_t temp_return = *offset;
*offset = 0;
diff --git a/drivers/usbpd.h b/drivers/usbpd.h
index df4f29bb9d..e9dca67f66 100644
--- a/drivers/usbpd.h
+++ b/drivers/usbpd.h
@@ -26,4 +26,4 @@ typedef enum {
void usbpd_init(void);
// Gets the current state of the USBPD allowance
-usbpd_allowance_t usbpd_get_allowance(void); \ No newline at end of file
+usbpd_allowance_t usbpd_get_allowance(void);
diff --git a/keyboards/0_sixty/info.json b/keyboards/0_sixty/info.json
index ce76f808b2..ebe4d39625 100644
--- a/keyboards/0_sixty/info.json
+++ b/keyboards/0_sixty/info.json
@@ -1,6 +1,5 @@
{
"manufacturer": "ven0mtr0n",
- "url": "",
"maintainer": "vinamarora8",
"usb": {
"vid": "0x7654",
diff --git a/keyboards/0xc7/61key/keyboard.json b/keyboards/0xc7/61key/keyboard.json
index ab5127db38..6b1e2e809e 100644
--- a/keyboards/0xc7/61key/keyboard.json
+++ b/keyboards/0xc7/61key/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "61Key",
"manufacturer": "0xC7",
- "url": "",
"maintainer": "RealEmanGaming",
"usb": {
"vid": "0xE117",
diff --git a/keyboards/0xcb/tutelpad/keyboard.json b/keyboards/0xcb/tutelpad/keyboard.json
index 2885377262..2367e6ce2e 100644
--- a/keyboards/0xcb/tutelpad/keyboard.json
+++ b/keyboards/0xcb/tutelpad/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "TutelPad",
"manufacturer": "ItsFiremanSam",
- "url": "",
"maintainer": "ItsFiremanSam",
"usb": {
"vid": "0xCB00",
diff --git a/keyboards/1k/keyboard.json b/keyboards/1k/keyboard.json
index 440856d0bd..269f11782a 100644
--- a/keyboards/1k/keyboard.json
+++ b/keyboards/1k/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "1K",
"manufacturer": "MakotoKurauchi",
- "url": "",
"maintainer": "MakotoKurauchi",
"usb": {
"vid": "0x0009",
diff --git a/keyboards/1upkeyboards/1up60hse/keyboard.json b/keyboards/1upkeyboards/1up60hse/keyboard.json
index 990b51c1f8..9f1d0c0ff4 100644
--- a/keyboards/1upkeyboards/1up60hse/keyboard.json
+++ b/keyboards/1upkeyboards/1up60hse/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "1up60hse",
"manufacturer": "1upkeyboards",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x6F75",
diff --git a/keyboards/1upkeyboards/1up60rgb/keyboard.json b/keyboards/1upkeyboards/1up60rgb/keyboard.json
index f4ba111251..5b0d9ef5d4 100644
--- a/keyboards/1upkeyboards/1up60rgb/keyboard.json
+++ b/keyboards/1upkeyboards/1up60rgb/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "1UP RGB Underglow PCB",
"manufacturer": "1upkeyboards",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x6F75",
diff --git a/keyboards/1upkeyboards/super16/keyboard.json b/keyboards/1upkeyboards/super16/keyboard.json
index 9da4168d47..f43d5d7037 100644
--- a/keyboards/1upkeyboards/super16/keyboard.json
+++ b/keyboards/1upkeyboards/super16/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "super16",
"manufacturer": "1upkeyboards",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x6F75",
diff --git a/keyboards/1upkeyboards/super16v2/keyboard.json b/keyboards/1upkeyboards/super16v2/keyboard.json
index 652b03006e..2e423d7d5a 100644
--- a/keyboards/1upkeyboards/super16v2/keyboard.json
+++ b/keyboards/1upkeyboards/super16v2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "super16v2",
"manufacturer": "1upkeyboards",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x6F75",
diff --git a/keyboards/1upkeyboards/sweet16/info.json b/keyboards/1upkeyboards/sweet16/info.json
index 5fb70bb8e9..65ce40a658 100644
--- a/keyboards/1upkeyboards/sweet16/info.json
+++ b/keyboards/1upkeyboards/sweet16/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Sweet16",
"manufacturer": "1up Keyboards",
- "url": "",
"maintainer": "skullydazed",
"features": {
"bootmagic": false,
diff --git a/keyboards/1upkeyboards/sweet16/v1/keyboard.json b/keyboards/1upkeyboards/sweet16/v1/keyboard.json
index 3ac73ce8eb..161ca65950 100644
--- a/keyboards/1upkeyboards/sweet16/v1/keyboard.json
+++ b/keyboards/1upkeyboards/sweet16/v1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Sweet16",
"manufacturer": "1up Keyboards",
- "url": "",
"maintainer": "skullydazed",
"usb": {
"vid": "0x6F75",
diff --git a/keyboards/2key2crawl/keyboard.json b/keyboards/2key2crawl/keyboard.json
index fec55c811a..252f619e34 100644
--- a/keyboards/2key2crawl/keyboard.json
+++ b/keyboards/2key2crawl/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "2Key2Crawl",
"manufacturer": "WoodKeys.click",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/30wer/keyboard.json b/keyboards/30wer/keyboard.json
index 606c13f7aa..7c0326125c 100644
--- a/keyboards/30wer/keyboard.json
+++ b/keyboards/30wer/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "30wer",
"manufacturer": "8o7wer",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x1234",
diff --git a/keyboards/40percentclub/25/keyboard.json b/keyboards/40percentclub/25/keyboard.json
index e23d0578c3..ceaff11454 100644
--- a/keyboards/40percentclub/25/keyboard.json
+++ b/keyboards/40percentclub/25/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "The 5x5 Keyboard",
"manufacturer": "di0ib",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4025",
diff --git a/keyboards/40percentclub/4pack/keyboard.json b/keyboards/40percentclub/4pack/keyboard.json
index a114e97dbb..6be4ab5e8a 100644
--- a/keyboards/40percentclub/4pack/keyboard.json
+++ b/keyboards/40percentclub/4pack/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "4pack",
"manufacturer": "40percentclub",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4025",
diff --git a/keyboards/40percentclub/4x4/keyboard.json b/keyboards/40percentclub/4x4/keyboard.json
index 735a3865da..cd5e0f4c0c 100644
--- a/keyboards/40percentclub/4x4/keyboard.json
+++ b/keyboards/40percentclub/4x4/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "The 4x4 Keyboard",
"manufacturer": "di0ib",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4025",
diff --git a/keyboards/40percentclub/5x5/keyboard.json b/keyboards/40percentclub/5x5/keyboard.json
index 039d9fe47b..1a76644489 100644
--- a/keyboards/40percentclub/5x5/keyboard.json
+++ b/keyboards/40percentclub/5x5/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "The 5x5 Keyboard",
"manufacturer": "di0ib",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4025",
diff --git a/keyboards/40percentclub/6lit/keyboard.json b/keyboards/40percentclub/6lit/keyboard.json
index 52a8914d7d..96644a7a44 100644
--- a/keyboards/40percentclub/6lit/keyboard.json
+++ b/keyboards/40percentclub/6lit/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "The 6lit Macropad",
"manufacturer": "di0ib",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4025",
diff --git a/keyboards/40percentclub/foobar/keyboard.json b/keyboards/40percentclub/foobar/keyboard.json
index ec568b2382..c0a77c4e9a 100644
--- a/keyboards/40percentclub/foobar/keyboard.json
+++ b/keyboards/40percentclub/foobar/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "The foobar Keyboard",
"manufacturer": "di0ib",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4025",
diff --git a/keyboards/40percentclub/gherkin/info.json b/keyboards/40percentclub/gherkin/info.json
index 0c9f609cdc..644001bc05 100644
--- a/keyboards/40percentclub/gherkin/info.json
+++ b/keyboards/40percentclub/gherkin/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Gherkin",
"manufacturer": "40 Percent Club",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4025",
diff --git a/keyboards/40percentclub/half_n_half/keyboard.json b/keyboards/40percentclub/half_n_half/keyboard.json
index 4f18d235b2..21ca55f162 100644
--- a/keyboards/40percentclub/half_n_half/keyboard.json
+++ b/keyboards/40percentclub/half_n_half/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "half_n_half",
"manufacturer": "di0ib",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4025",
diff --git a/keyboards/40percentclub/i75/info.json b/keyboards/40percentclub/i75/info.json
index a7124adec2..197667cba5 100644
--- a/keyboards/40percentclub/i75/info.json
+++ b/keyboards/40percentclub/i75/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "i75",
"manufacturer": "di0ib",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4025",
diff --git a/keyboards/40percentclub/luddite/keyboard.json b/keyboards/40percentclub/luddite/keyboard.json
index a9f79d7369..774aed72db 100644
--- a/keyboards/40percentclub/luddite/keyboard.json
+++ b/keyboards/40percentclub/luddite/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Luddite",
"manufacturer": "di0ib",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4025",
diff --git a/keyboards/40percentclub/mf68/keyboard.json b/keyboards/40percentclub/mf68/keyboard.json
index 45585d5e47..161c4345af 100644
--- a/keyboards/40percentclub/mf68/keyboard.json
+++ b/keyboards/40percentclub/mf68/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "MF68",
"manufacturer": "di0ib",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4025",
diff --git a/keyboards/40percentclub/nano/keyboard.json b/keyboards/40percentclub/nano/keyboard.json
index 547aed16f9..39aa46098f 100644
--- a/keyboards/40percentclub/nano/keyboard.json
+++ b/keyboards/40percentclub/nano/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Nano",
"manufacturer": "di0ib",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4025",
diff --git a/keyboards/40percentclub/nori/keyboard.json b/keyboards/40percentclub/nori/keyboard.json
index 968e74e19e..feb66f9501 100644
--- a/keyboards/40percentclub/nori/keyboard.json
+++ b/keyboards/40percentclub/nori/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "The nori Keyboard",
"manufacturer": "di0ib",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4025",
diff --git a/keyboards/40percentclub/polyandry/info.json b/keyboards/40percentclub/polyandry/info.json
index 49b8bedbe3..25e560f780 100644
--- a/keyboards/40percentclub/polyandry/info.json
+++ b/keyboards/40percentclub/polyandry/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Polypad",
"manufacturer": "di0ib",
- "url": "",
"maintainer": "QMK",
"features": {
"bootmagic": true,
diff --git a/keyboards/40percentclub/tomato/keyboard.json b/keyboards/40percentclub/tomato/keyboard.json
index c0b526cbc6..ecc7b19570 100644
--- a/keyboards/40percentclub/tomato/keyboard.json
+++ b/keyboards/40percentclub/tomato/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Tomato",
"manufacturer": "40 Percent Club",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4025",
diff --git a/keyboards/40percentclub/ut47/keyboard.json b/keyboards/40percentclub/ut47/keyboard.json
index 62e4a940a1..00c8edef69 100644
--- a/keyboards/40percentclub/ut47/keyboard.json
+++ b/keyboards/40percentclub/ut47/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "ut47",
"manufacturer": "40percent.club",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4025",
diff --git a/keyboards/45_ats/keyboard.json b/keyboards/45_ats/keyboard.json
index 5e5465f264..17ef036999 100644
--- a/keyboards/45_ats/keyboard.json
+++ b/keyboards/45_ats/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "45ATS",
"manufacturer": "Abec13",
- "url": "",
"maintainer": "The-Royal",
"usb": {
"vid": "0xAB13",
diff --git a/keyboards/4pplet/aekiso60/info.json b/keyboards/4pplet/aekiso60/info.json
index 80d5ab233d..50dd5e55df 100644
--- a/keyboards/4pplet/aekiso60/info.json
+++ b/keyboards/4pplet/aekiso60/info.json
@@ -1,6 +1,5 @@
{
"manufacturer": "4pplet",
- "url": "",
"maintainer": "4pplet",
"usb": {
"vid": "0x4444"
diff --git a/keyboards/4pplet/perk60_iso/rev_a/keyboard.json b/keyboards/4pplet/perk60_iso/rev_a/keyboard.json
index 56e7a25de4..50babdab71 100644
--- a/keyboards/4pplet/perk60_iso/rev_a/keyboard.json
+++ b/keyboards/4pplet/perk60_iso/rev_a/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Perk60 ISO Rev A",
"manufacturer": "4pplet",
- "url": "",
"maintainer": "4pplet",
"usb": {
"vid": "0x4444",
diff --git a/keyboards/4pplet/waffling80/info.json b/keyboards/4pplet/waffling80/info.json
index 72fcd4615b..c003b16fed 100644
--- a/keyboards/4pplet/waffling80/info.json
+++ b/keyboards/4pplet/waffling80/info.json
@@ -1,6 +1,5 @@
{
"manufacturer": "4pplet",
- "url": "",
"maintainer": "4pplet",
"usb": {
"vid": "0x4444"
diff --git a/keyboards/5keys/keyboard.json b/keyboards/5keys/keyboard.json
index 7a40d1014d..7282db2922 100644
--- a/keyboards/5keys/keyboard.json
+++ b/keyboards/5keys/keyboard.json
@@ -14,7 +14,6 @@
["F4","F5","F6","F7","B1"]
]
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0001",
diff --git a/keyboards/7c8/framework/keyboard.json b/keyboards/7c8/framework/keyboard.json
index 33f9cfc591..a6ebdfbfc6 100644
--- a/keyboards/7c8/framework/keyboard.json
+++ b/keyboards/7c8/framework/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Framework",
"manufacturer": "7c8",
- "url": "",
"maintainer": "stevennguyen",
"usb": {
"vid": "0x77C8",
diff --git a/keyboards/9key/keyboard.json b/keyboards/9key/keyboard.json
index c1e95e3f08..f63fdf3607 100644
--- a/keyboards/9key/keyboard.json
+++ b/keyboards/9key/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "9Key",
"manufacturer": "Bishop Keyboards",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/abatskeyboardclub/nayeon/keyboard.json b/keyboards/abatskeyboardclub/nayeon/keyboard.json
index a3fac207f4..4949b17072 100644
--- a/keyboards/abatskeyboardclub/nayeon/keyboard.json
+++ b/keyboards/abatskeyboardclub/nayeon/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Nayeon",
"manufacturer": "Abats Keyboard Club",
- "url": "",
"maintainer": "ramonimbao",
"layout_aliases": {
"LAYOUT_ansi": "LAYOUT_tkl_f13_ansi_tsangan",
diff --git a/keyboards/acheron/apollo/87h/info.json b/keyboards/acheron/apollo/87h/info.json
index ac47f594b5..41606da15f 100644
--- a/keyboards/acheron/apollo/87h/info.json
+++ b/keyboards/acheron/apollo/87h/info.json
@@ -1,6 +1,5 @@
{
"manufacturer": "AcheronProject",
- "url": "",
"maintainer": "Gondolindrim",
"usb": {
"vid": "0x4150"
diff --git a/keyboards/acheron/apollo/87htsc/keyboard.json b/keyboards/acheron/apollo/87htsc/keyboard.json
index 55229706b1..e40f18da92 100644
--- a/keyboards/acheron/apollo/87htsc/keyboard.json
+++ b/keyboards/acheron/apollo/87htsc/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Apollo87H-T-SC",
"manufacturer": "AcheronProject",
- "url": "",
"maintainer": "Gondolindrim",
"usb": {
"vid": "0x4150",
diff --git a/keyboards/acheron/apollo/88htsc/keyboard.json b/keyboards/acheron/apollo/88htsc/keyboard.json
index 9b9482874f..02831f8c62 100644
--- a/keyboards/acheron/apollo/88htsc/keyboard.json
+++ b/keyboards/acheron/apollo/88htsc/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Apollo88H-T-SC",
"manufacturer": "AcheronProject",
- "url": "",
"maintainer": "Gondolindrim",
"usb": {
"vid": "0x4150",
diff --git a/keyboards/acheron/athena/info.json b/keyboards/acheron/athena/info.json
index 4f9d3b61e6..e10cb288f0 100644
--- a/keyboards/acheron/athena/info.json
+++ b/keyboards/acheron/athena/info.json
@@ -1,6 +1,5 @@
{
"manufacturer": "AcheronProject",
- "url": "",
"maintainer": "Gondolindrim",
"usb": {
"vid": "0xAC11"
diff --git a/keyboards/acheron/austin/keyboard.json b/keyboards/acheron/austin/keyboard.json
index a3df5dd75d..140e398cce 100755
--- a/keyboards/acheron/austin/keyboard.json
+++ b/keyboards/acheron/austin/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Austin",
"manufacturer": "DriftMechanics",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xAC11",
diff --git a/keyboards/acheron/lasgweloth/keyboard.json b/keyboards/acheron/lasgweloth/keyboard.json
index 35d30e89b2..85769d0732 100644
--- a/keyboards/acheron/lasgweloth/keyboard.json
+++ b/keyboards/acheron/lasgweloth/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Lasgweloth",
"manufacturer": "AcheronProject",
- "url": "",
"maintainer": "Gondolindrim",
"usb": {
"vid": "0x4150",
diff --git a/keyboards/acheron/themis/info.json b/keyboards/acheron/themis/info.json
index 4f9d3b61e6..e10cb288f0 100644
--- a/keyboards/acheron/themis/info.json
+++ b/keyboards/acheron/themis/info.json
@@ -1,6 +1,5 @@
{
"manufacturer": "AcheronProject",
- "url": "",
"maintainer": "Gondolindrim",
"usb": {
"vid": "0xAC11"
diff --git a/keyboards/ada/ada1800mini/keyboard.json b/keyboards/ada/ada1800mini/keyboard.json
index 80e8ee64aa..37c0be1582 100644
--- a/keyboards/ada/ada1800mini/keyboard.json
+++ b/keyboards/ada/ada1800mini/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "ada1800mini",
"manufacturer": "Ada",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xADA0",
diff --git a/keyboards/ada/infinity81/keyboard.json b/keyboards/ada/infinity81/keyboard.json
index 40c5bd2f18..f1f928697b 100644
--- a/keyboards/ada/infinity81/keyboard.json
+++ b/keyboards/ada/infinity81/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "infinity81",
"manufacturer": "Ada",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xADA0",
diff --git a/keyboards/adkb96/rev1/keyboard.json b/keyboards/adkb96/rev1/keyboard.json
index 7cf92f1516..5def3c9da3 100644
--- a/keyboards/adkb96/rev1/keyboard.json
+++ b/keyboards/adkb96/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "ADKB96",
"manufacturer": "Bit Trade One",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x00A5",
diff --git a/keyboards/adm42/rev4/keyboard.json b/keyboards/adm42/rev4/keyboard.json
index efb0eea029..827c127b86 100644
--- a/keyboards/adm42/rev4/keyboard.json
+++ b/keyboards/adm42/rev4/keyboard.json
@@ -82,7 +82,6 @@
{"matrix": [0, 10], "x": 194, "y": 13, "flags": 4},
{"matrix": [0, 11], "x": 210, "y": 11, "flags": 4}
],
- "led_flush_limit": 16,
"led_process_limit": 21,
"max_brightness": 170,
"sat_steps": 24,
diff --git a/keyboards/aeboards/aegis/keyboard.json b/keyboards/aeboards/aegis/keyboard.json
index 26f5f2a0c1..63705b7043 100644
--- a/keyboards/aeboards/aegis/keyboard.json
+++ b/keyboards/aeboards/aegis/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Aegis",
"manufacturer": "AEboards",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4145",
diff --git a/keyboards/aeboards/constellation/rev1/keyboard.json b/keyboards/aeboards/constellation/rev1/keyboard.json
index 5a43568d57..4c21a8f3b9 100644
--- a/keyboards/aeboards/constellation/rev1/keyboard.json
+++ b/keyboards/aeboards/constellation/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Constellation Rev1",
"manufacturer": "AEBoards",
- "url": "",
"maintainer": "Xelus22",
"usb": {
"vid": "0x4145",
diff --git a/keyboards/aeboards/constellation/rev2/keyboard.json b/keyboards/aeboards/constellation/rev2/keyboard.json
index f296b523e0..e4add7a63a 100644
--- a/keyboards/aeboards/constellation/rev2/keyboard.json
+++ b/keyboards/aeboards/constellation/rev2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Constellation Rev2",
"manufacturer": "AEBoards",
- "url": "",
"maintainer": "Xelus22",
"usb": {
"vid": "0x4145",
diff --git a/keyboards/aeboards/constellation/rev3/keyboard.json b/keyboards/aeboards/constellation/rev3/keyboard.json
index ab39641b74..306561409c 100644
--- a/keyboards/aeboards/constellation/rev3/keyboard.json
+++ b/keyboards/aeboards/constellation/rev3/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Constellation Rev3",
"manufacturer": "AEBoards",
- "url": "",
"maintainer": "Xelus22",
"usb": {
"vid": "0x4145",
diff --git a/keyboards/aeboards/ext65/info.json b/keyboards/aeboards/ext65/info.json
index 3f4b0bbc00..e4c57bd144 100644
--- a/keyboards/aeboards/ext65/info.json
+++ b/keyboards/aeboards/ext65/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Ext65",
"manufacturer": "AEBoards",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4145"
diff --git a/keyboards/aeboards/ext65/rev1/keyboard.json b/keyboards/aeboards/ext65/rev1/keyboard.json
index 1d105505e5..80370f6045 100644
--- a/keyboards/aeboards/ext65/rev1/keyboard.json
+++ b/keyboards/aeboards/ext65/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Ext65 Rev1",
"manufacturer": "AEBoards",
- "url": "",
"maintainer": "qmk",
"usb": {
"pid": "0xAE65",
diff --git a/keyboards/aeboards/ext65/rev2/keyboard.json b/keyboards/aeboards/ext65/rev2/keyboard.json
index ab7cceeefb..ca2777d36c 100644
--- a/keyboards/aeboards/ext65/rev2/keyboard.json
+++ b/keyboards/aeboards/ext65/rev2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Ext65 Rev2",
"manufacturer": "AEBoards",
- "url": "",
"maintainer": "qmk",
"usb": {
"pid": "0xA652",
diff --git a/keyboards/aeboards/ext65/rev3/keyboard.json b/keyboards/aeboards/ext65/rev3/keyboard.json
index 8c8051fc44..867e46e519 100644
--- a/keyboards/aeboards/ext65/rev3/keyboard.json
+++ b/keyboards/aeboards/ext65/rev3/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Ext65 Rev3",
"manufacturer": "AEBoards",
- "url": "",
"maintainer": "qmk",
"usb": {
"pid": "0xA653",
diff --git a/keyboards/aeboards/satellite/rev1/keyboard.json b/keyboards/aeboards/satellite/rev1/keyboard.json
index 8b90704efa..f9355171fb 100644
--- a/keyboards/aeboards/satellite/rev1/keyboard.json
+++ b/keyboards/aeboards/satellite/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Satellite Rev1",
"manufacturer": "AEBoards",
- "url": "",
"maintainer": "Xelus22",
"usb": {
"vid": "0x4145",
diff --git a/keyboards/ah/haven80/info.json b/keyboards/ah/haven80/info.json
index bd87815154..1a8c33890a 100644
--- a/keyboards/ah/haven80/info.json
+++ b/keyboards/ah/haven80/info.json
@@ -1,6 +1,5 @@
{
"manufacturer": "Atelier_Haven",
- "url": "",
"maintainer": "Freather",
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
diff --git a/keyboards/ai/keyboard.json b/keyboards/ai/keyboard.json
index 8f4039b4d2..d25459b507 100644
--- a/keyboards/ai/keyboard.json
+++ b/keyboards/ai/keyboard.json
@@ -17,7 +17,6 @@
"rows": ["D0", "D4", "C6", "D7", "D1"]
},
"processor": "atmega32u4",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0000",
diff --git a/keyboards/ai03/andromeda/keyboard.json b/keyboards/ai03/andromeda/keyboard.json
index d085b91ad1..0ad082436a 100644
--- a/keyboards/ai03/andromeda/keyboard.json
+++ b/keyboards/ai03/andromeda/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Andromeda",
"manufacturer": "ai03 Design Studio",
- "url": "",
"maintainer": "ai03",
"usb": {
"vid": "0xA103",
diff --git a/keyboards/ai03/equinox/info.json b/keyboards/ai03/equinox/info.json
index 7c2cc46500..a6c424e187 100644
--- a/keyboards/ai03/equinox/info.json
+++ b/keyboards/ai03/equinox/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Equinox",
"manufacturer": "ai03 Design Studio",
- "url": "",
"maintainer": "ai03",
"usb": {
"vid": "0xA103",
diff --git a/keyboards/ai03/orbit_x/keyboard.json b/keyboards/ai03/orbit_x/keyboard.json
index d039969b37..859ff47085 100644
--- a/keyboards/ai03/orbit_x/keyboard.json
+++ b/keyboards/ai03/orbit_x/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "OrbitX",
"manufacturer": "ai03 Design Studio",
- "url": "",
"maintainer": "ai03",
"usb": {
"vid": "0xA103",
diff --git a/keyboards/nix_studio/lilith/config.h b/keyboards/akb/vero/board.h
index 225e6ac51b..2a370fe2e0 100644
--- a/keyboards/nix_studio/lilith/config.h
+++ b/keyboards/akb/vero/board.h
@@ -1,7 +1,8 @@
// Copyright 2022 Martin Arnstad (@arnstadm)
// SPDX-License-Identifier: GPL-2.0-or-later
-
#pragma once
-/* Set HSE clock since it differs from F411 default */
-#define STM32_HSECLK 16000000
+#include_next <board.h>
+
+#undef STM32_HSECLK
+#define STM32_HSECLK 16000000U
diff --git a/keyboards/akb/vero/config.h b/keyboards/akb/vero/config.h
deleted file mode 100644
index bb6d15d92c..0000000000
--- a/keyboards/akb/vero/config.h
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright 2022 Martin Arnstad (@arnstadm)
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#pragma once
-
-/*
- * 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
-
-/* Set HSE clock since it differs from F411 default */
-#define STM32_HSECLK 16000000
diff --git a/keyboards/akko/5087/5087.c b/keyboards/akko/5087/5087.c
index 996f8c2585..27439c20ef 100644
--- a/keyboards/akko/5087/5087.c
+++ b/keyboards/akko/5087/5087.c
@@ -164,7 +164,7 @@ bool process_record_kb(uint16_t keycode, keyrecord_t* record) {
if (record->event.pressed) {
set_single_persistent_default_layer(MAC_B);
keymap_config.no_gui = 0;
- eeconfig_update_keymap(keymap_config.raw);
+ eeconfig_update_keymap(&keymap_config);
}
return false;
case QK_RGB_MATRIX_TOGGLE:
diff --git a/keyboards/al1/keyboard.json b/keyboards/al1/keyboard.json
index 7e6440560f..aed02e8ade 100644
--- a/keyboards/al1/keyboard.json
+++ b/keyboards/al1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "AL1",
"manufacturer": "Alsoran",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x544C",
diff --git a/keyboards/alf/x11/keyboard.json b/keyboards/alf/x11/keyboard.json
index c571705dc1..0396093435 100644
--- a/keyboards/alf/x11/keyboard.json
+++ b/keyboards/alf/x11/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "X1.1",
"manufacturer": "ALF",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4146",
diff --git a/keyboards/alf/x2/keyboard.json b/keyboards/alf/x2/keyboard.json
index 9dd011c7f1..ec3eae179a 100644
--- a/keyboards/alf/x2/keyboard.json
+++ b/keyboards/alf/x2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "X2",
"manufacturer": "ALF",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/alhenkb/macropad5x4/keyboard.json b/keyboards/alhenkb/macropad5x4/keyboard.json
index 1fb472255d..7415068b2c 100644
--- a/keyboards/alhenkb/macropad5x4/keyboard.json
+++ b/keyboards/alhenkb/macropad5x4/keyboard.json
@@ -16,7 +16,6 @@
"rows": ["F5", "F7", "B3", "B6", "B5"],
"cols": ["F4", "F6", "B1", "B2"]
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0001",
diff --git a/keyboards/alpine65/keyboard.json b/keyboards/alpine65/keyboard.json
index 36bba880a8..ae372d2a08 100644
--- a/keyboards/alpine65/keyboard.json
+++ b/keyboards/alpine65/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Alpine65",
"manufacturer": "Bitmap Designs",
- "url": "",
"maintainer": "Gondolindrim",
"usb": {
"vid": "0x6680",
diff --git a/keyboards/alps64/keyboard.json b/keyboards/alps64/keyboard.json
index a6a60478f8..d8f5fb22b5 100644
--- a/keyboards/alps64/keyboard.json
+++ b/keyboards/alps64/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Alps64",
"manufacturer": "Hasu",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x6873",
diff --git a/keyboards/amjkeyboard/amj40/keyboard.json b/keyboards/amjkeyboard/amj40/keyboard.json
index de536cb55e..c3bbe72039 100644
--- a/keyboards/amjkeyboard/amj40/keyboard.json
+++ b/keyboards/amjkeyboard/amj40/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "AMJ40",
"manufacturer": "Han Chen",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x00D8",
diff --git a/keyboards/amjkeyboard/amj60/keyboard.json b/keyboards/amjkeyboard/amj60/keyboard.json
index a2cfd1b6e1..f16d178b06 100644
--- a/keyboards/amjkeyboard/amj60/keyboard.json
+++ b/keyboards/amjkeyboard/amj60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "AMJ60",
"manufacturer": "Han Chen",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x00D8",
diff --git a/keyboards/amjkeyboard/amj66/keyboard.json b/keyboards/amjkeyboard/amj66/keyboard.json
index 72646e4fc7..f674452f32 100644
--- a/keyboards/amjkeyboard/amj66/keyboard.json
+++ b/keyboards/amjkeyboard/amj66/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "AMJ66",
"manufacturer": "AMJKeyboard",
- "url": "",
"maintainer": "FSund, qmk",
"usb": {
"vid": "0x00D8",
diff --git a/keyboards/amjkeyboard/amj84/keyboard.json b/keyboards/amjkeyboard/amj84/keyboard.json
index b544ffc8b3..d5f1f11a4d 100644
--- a/keyboards/amjkeyboard/amj84/keyboard.json
+++ b/keyboards/amjkeyboard/amj84/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "AMJ84",
"manufacturer": "Han Chen",
- "url": "",
"maintainer": "peepeetee",
"usb": {
"vid": "0x00D8",
diff --git a/keyboards/amjkeyboard/amj96/keyboard.json b/keyboards/amjkeyboard/amj96/keyboard.json
index 23a131c615..ea02e6170c 100644
--- a/keyboards/amjkeyboard/amj96/keyboard.json
+++ b/keyboards/amjkeyboard/amj96/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "AMJ96",
"manufacturer": "Han Chen",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x00D8",
diff --git a/keyboards/amjkeyboard/amjpad/keyboard.json b/keyboards/amjkeyboard/amjpad/keyboard.json
index e331f3af19..3fa60ed3d7 100644
--- a/keyboards/amjkeyboard/amjpad/keyboard.json
+++ b/keyboards/amjkeyboard/amjpad/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "PAD",
"manufacturer": "AMJ",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x00D8",
diff --git a/keyboards/anavi/knobs3/keyboard.json b/keyboards/anavi/knobs3/keyboard.json
index 11081ee086..86aaadf98f 100644
--- a/keyboards/anavi/knobs3/keyboard.json
+++ b/keyboards/anavi/knobs3/keyboard.json
@@ -23,9 +23,6 @@
"rgblight": {
"led_count": 1,
"hue_steps": 10,
- "saturation_steps": 17,
- "brightness_steps": 17,
- "max_brightness": 255,
"animations": {
"alternating": true,
"breathing": true,
diff --git a/keyboards/anavi/macropad10/keyboard.json b/keyboards/anavi/macropad10/keyboard.json
index a355fdd549..2e1218d45f 100644
--- a/keyboards/anavi/macropad10/keyboard.json
+++ b/keyboards/anavi/macropad10/keyboard.json
@@ -22,9 +22,6 @@
"rgblight": {
"led_count": 4,
"hue_steps": 10,
- "saturation_steps": 17,
- "brightness_steps": 17,
- "max_brightness": 255,
"animations": {
"alternating": true,
"breathing": true,
diff --git a/keyboards/anavi/macropad8/keyboard.json b/keyboards/anavi/macropad8/keyboard.json
index 50381ce8a8..27d34c18f3 100644
--- a/keyboards/anavi/macropad8/keyboard.json
+++ b/keyboards/anavi/macropad8/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Macro Pad 8",
"manufacturer": "ANAVI",
- "url": "",
"maintainer": "leon-anavi",
"usb": {
"vid": "0xCEEB",
diff --git a/keyboards/aplyard/aplx6/info.json b/keyboards/aplyard/aplx6/info.json
index 9f86182a33..a0624a7d49 100644
--- a/keyboards/aplyard/aplx6/info.json
+++ b/keyboards/aplyard/aplx6/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Aplx6",
"manufacturer": "Aplyard",
- "url": "",
"maintainer": "Aplyard",
"usb": {
"vid": "0xE0E0"
diff --git a/keyboards/arabica37/rev1/keyboard.json b/keyboards/arabica37/rev1/keyboard.json
index 63c4fe2940..d1db9a276c 100644
--- a/keyboards/arabica37/rev1/keyboard.json
+++ b/keyboards/arabica37/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Arabica3/7",
"manufacturer": "CalciumNitride",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/archetype/minervalx/keyboard.json b/keyboards/archetype/minervalx/keyboard.json
index 0d01ccf485..3523e95afb 100644
--- a/keyboards/archetype/minervalx/keyboard.json
+++ b/keyboards/archetype/minervalx/keyboard.json
@@ -18,7 +18,6 @@
"rows": ["GP11", "GP12", "GP13", "GP14", "GP15"]
},
"processor": "RP2040",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0100",
diff --git a/keyboards/ares/keyboard.json b/keyboards/ares/keyboard.json
index f1e650397e..b6e5544511 100644
--- a/keyboards/ares/keyboard.json
+++ b/keyboards/ares/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Ares",
"manufacturer": "LSJ",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x20A0",
diff --git a/keyboards/artemis/paragon/info.json b/keyboards/artemis/paragon/info.json
index 63fefe8c55..93c547faa9 100644
--- a/keyboards/artemis/paragon/info.json
+++ b/keyboards/artemis/paragon/info.json
@@ -17,7 +17,6 @@
"lto": true
},
"processor": "atmega32u4",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x3449",
diff --git a/keyboards/ashwing66/keyboard.json b/keyboards/ashwing66/keyboard.json
index 27a5799964..427eebcd96 100644
--- a/keyboards/ashwing66/keyboard.json
+++ b/keyboards/ashwing66/keyboard.json
@@ -75,7 +75,6 @@
{"matrix": [0, 14], "x": 206, "y": 1, "flags": 4},
{"matrix": [0, 15], "x": 223, "y": 0, "flags": 4}
],
- "led_flush_limit": 16,
"led_process_limit": 5,
"max_brightness": 125,
"sleep": true
diff --git a/keyboards/ask55/keyboard.json b/keyboards/ask55/keyboard.json
index 66efb1749a..53451e5329 100644
--- a/keyboards/ask55/keyboard.json
+++ b/keyboards/ask55/keyboard.json
@@ -36,9 +36,7 @@
"static_gradient": true
},
"brightness_steps": 8,
- "hue_steps": 8,
"led_count": 8,
- "max_brightness": 255,
"saturation_steps": 8,
"sleep": true
},
diff --git a/keyboards/at_at/660m/keyboard.json b/keyboards/at_at/660m/keyboard.json
index a9c5af73f8..f42c0b7cbb 100644
--- a/keyboards/at_at/660m/keyboard.json
+++ b/keyboards/at_at/660m/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "660M",
"manufacturer": "AT-AT",
- "url": "",
"maintainer": "adrientetar",
"usb": {
"vid": "0xA22A",
diff --git a/keyboards/atreus/info.json b/keyboards/atreus/info.json
index 1a33591ab5..cf53b506a0 100644
--- a/keyboards/atreus/info.json
+++ b/keyboards/atreus/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Atreus",
"manufacturer": "Technomancy",
- "url": "",
"maintainer": "qmk",
"features": {
"bootmagic": false,
diff --git a/keyboards/atreus62/keyboard.json b/keyboards/atreus62/keyboard.json
index c24c02e71e..5fb786fa98 100644
--- a/keyboards/atreus62/keyboard.json
+++ b/keyboards/atreus62/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Atreus62",
"manufacturer": "Profet",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x5072",
diff --git a/keyboards/aves65/keyboard.json b/keyboards/aves65/keyboard.json
index 3ad686f83a..9d8a70b78c 100644
--- a/keyboards/aves65/keyboard.json
+++ b/keyboards/aves65/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Aves65",
"manufacturer": "I/O Keyboards",
- "url": "",
"maintainer": "Hund",
"usb": {
"vid": "0x9991",
diff --git a/keyboards/axolstudio/helpo/keyboard.json b/keyboards/axolstudio/helpo/keyboard.json
index c90c967788..4af362c596 100644
--- a/keyboards/axolstudio/helpo/keyboard.json
+++ b/keyboards/axolstudio/helpo/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Helpo",
"manufacturer": "Axolstudio",
- "url": "",
"maintainer": "kb-elmo",
"usb": {
"vid": "0x525C",
diff --git a/keyboards/baguette/keyboard.json b/keyboards/baguette/keyboard.json
index 001757f861..1d86c43ad9 100644
--- a/keyboards/baguette/keyboard.json
+++ b/keyboards/baguette/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Baguette",
"manufacturer": "Yiancar",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/bahm/aster_ergo/keyboard.json b/keyboards/bahm/aster_ergo/keyboard.json
index 5545e02409..963764d497 100644
--- a/keyboards/bahm/aster_ergo/keyboard.json
+++ b/keyboards/bahm/aster_ergo/keyboard.json
@@ -17,7 +17,6 @@
"cols": ["A10", "A9", "A8", "B15", "B14", "B13", "B12", "B1", "B0", "A7", "A6", "B4", "B3", "A15", "A5", "A2", "A1"],
"rows": ["B7", "B6", "B5", "B11", "B10", "A4"]
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x8701",
diff --git a/keyboards/balloondogcaps/tr90/keyboard.json b/keyboards/balloondogcaps/tr90/keyboard.json
index 42071ba3f0..957953fd69 100644
--- a/keyboards/balloondogcaps/tr90/keyboard.json
+++ b/keyboards/balloondogcaps/tr90/keyboard.json
@@ -17,7 +17,6 @@
"rows": ["F0", "F1", "F4"]
},
"processor": "atmega32u4",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0001",
diff --git a/keyboards/balloondogcaps/tr90pm/keyboard.json b/keyboards/balloondogcaps/tr90pm/keyboard.json
index c5badb7836..e095c1eda1 100644
--- a/keyboards/balloondogcaps/tr90pm/keyboard.json
+++ b/keyboards/balloondogcaps/tr90pm/keyboard.json
@@ -17,7 +17,6 @@
"rows": ["C6", "D7", "E6"]
},
"processor": "atmega32u4",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0002",
diff --git a/keyboards/bantam44/keyboard.json b/keyboards/bantam44/keyboard.json
index ac534af6a9..d5deffa01b 100644
--- a/keyboards/bantam44/keyboard.json
+++ b/keyboards/bantam44/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Bantam44",
"manufacturer": "Bantam Keyboards",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/bastardkb/charybdis/3x5/v1/elitec/keyboard.json b/keyboards/bastardkb/charybdis/3x5/v1/elitec/keyboard.json
index 4a94d023d4..2fd99fb5ab 100644
--- a/keyboards/bastardkb/charybdis/3x5/v1/elitec/keyboard.json
+++ b/keyboards/bastardkb/charybdis/3x5/v1/elitec/keyboard.json
@@ -26,7 +26,9 @@
"diode_direction": "ROW2COL",
"split": {
"enabled": true,
- "soft_serial_pin": "D2",
+ "serial": {
+ "pin": "D2"
+ },
"matrix_pins": {
"right": {
"cols": ["C7", "B7", "D7", "E6", "B4"],
diff --git a/keyboards/bastardkb/charybdis/3x5/v2/elitec/keyboard.json b/keyboards/bastardkb/charybdis/3x5/v2/elitec/keyboard.json
index bc95061ced..51f6cedf51 100644
--- a/keyboards/bastardkb/charybdis/3x5/v2/elitec/keyboard.json
+++ b/keyboards/bastardkb/charybdis/3x5/v2/elitec/keyboard.json
@@ -26,7 +26,9 @@
"diode_direction": "ROW2COL",
"split": {
"enabled": true,
- "soft_serial_pin": "D2"
+ "serial": {
+ "pin": "D2"
+ }
},
"processor": "atmega32u4",
"bootloader": "atmel-dfu"
diff --git a/keyboards/bastardkb/charybdis/3x5/v2/splinky_2/keyboard.json b/keyboards/bastardkb/charybdis/3x5/v2/splinky_2/keyboard.json
index cc990d3f21..cf800062b3 100644
--- a/keyboards/bastardkb/charybdis/3x5/v2/splinky_2/keyboard.json
+++ b/keyboards/bastardkb/charybdis/3x5/v2/splinky_2/keyboard.json
@@ -20,7 +20,9 @@
"diode_direction": "ROW2COL",
"split": {
"enabled": true,
- "soft_serial_pin": "GP1"
+ "serial": {
+ "pin": "GP1"
+ }
},
"ws2812": {
"pin": "GP0",
diff --git a/keyboards/bastardkb/charybdis/3x5/v2/splinky_3/keyboard.json b/keyboards/bastardkb/charybdis/3x5/v2/splinky_3/keyboard.json
index 6719b21196..d9039f7591 100644
--- a/keyboards/bastardkb/charybdis/3x5/v2/splinky_3/keyboard.json
+++ b/keyboards/bastardkb/charybdis/3x5/v2/splinky_3/keyboard.json
@@ -20,7 +20,9 @@
"diode_direction": "ROW2COL",
"split": {
"enabled": true,
- "soft_serial_pin": "GP1"
+ "serial": {
+ "pin": "GP1"
+ }
},
"ws2812": {
"pin": "GP0",
diff --git a/keyboards/bastardkb/charybdis/3x5/v2/stemcell/keyboard.json b/keyboards/bastardkb/charybdis/3x5/v2/stemcell/keyboard.json
index 2de77b07f0..ca48cc0f3c 100644
--- a/keyboards/bastardkb/charybdis/3x5/v2/stemcell/keyboard.json
+++ b/keyboards/bastardkb/charybdis/3x5/v2/stemcell/keyboard.json
@@ -30,7 +30,9 @@
"diode_direction": "ROW2COL",
"split": {
"enabled": true,
- "soft_serial_pin": "A3"
+ "serial": {
+ "pin": "A3"
+ }
},
"development_board": "stemcell"
}
diff --git a/keyboards/bastardkb/charybdis/3x6/v1/elitec/keyboard.json b/keyboards/bastardkb/charybdis/3x6/v1/elitec/keyboard.json
index dcc454366c..cef4eab72f 100644
--- a/keyboards/bastardkb/charybdis/3x6/v1/elitec/keyboard.json
+++ b/keyboards/bastardkb/charybdis/3x6/v1/elitec/keyboard.json
@@ -26,7 +26,9 @@
"diode_direction": "ROW2COL",
"split": {
"enabled": true,
- "soft_serial_pin": "D2",
+ "serial": {
+ "pin": "D2"
+ },
"matrix_pins": {
"right": {
"cols": ["F1", "C7", "B7", "D7", "E6", "B4"],
diff --git a/keyboards/bastardkb/charybdis/3x6/v2/elitec/keyboard.json b/keyboards/bastardkb/charybdis/3x6/v2/elitec/keyboard.json
index ce74b2dc6d..fdfd2c38f9 100644
--- a/keyboards/bastardkb/charybdis/3x6/v2/elitec/keyboard.json
+++ b/keyboards/bastardkb/charybdis/3x6/v2/elitec/keyboard.json
@@ -26,7 +26,9 @@
"diode_direction": "ROW2COL",
"split": {
"enabled": true,
- "soft_serial_pin": "D2"
+ "serial": {
+ "pin": "D2"
+ }
},
"processor": "atmega32u4",
"bootloader": "atmel-dfu"
diff --git a/keyboards/bastardkb/charybdis/3x6/v2/splinky_2/keyboard.json b/keyboards/bastardkb/charybdis/3x6/v2/splinky_2/keyboard.json
index 825508475c..650bf46481 100644
--- a/keyboards/bastardkb/charybdis/3x6/v2/splinky_2/keyboard.json
+++ b/keyboards/bastardkb/charybdis/3x6/v2/splinky_2/keyboard.json
@@ -20,7 +20,9 @@
"diode_direction": "ROW2COL",
"split": {
"enabled": true,
- "soft_serial_pin": "GP1"
+ "serial": {
+ "pin": "GP1"
+ }
},
"ws2812": {
"pin": "GP0",
diff --git a/keyboards/bastardkb/charybdis/3x6/v2/splinky_3/keyboard.json b/keyboards/bastardkb/charybdis/3x6/v2/splinky_3/keyboard.json
index 4d9cfb616d..b2a4890f56 100644
--- a/keyboards/bastardkb/charybdis/3x6/v2/splinky_3/keyboard.json
+++ b/keyboards/bastardkb/charybdis/3x6/v2/splinky_3/keyboard.json
@@ -20,7 +20,9 @@
"diode_direction": "ROW2COL",
"split": {
"enabled": true,
- "soft_serial_pin": "GP1"
+ "serial": {
+ "pin": "GP1"
+ }
},
"ws2812": {
"pin": "GP0",
diff --git a/keyboards/bastardkb/charybdis/3x6/v2/stemcell/keyboard.json b/keyboards/bastardkb/charybdis/3x6/v2/stemcell/keyboard.json
index 05d82b2445..a405395438 100644
--- a/keyboards/bastardkb/charybdis/3x6/v2/stemcell/keyboard.json
+++ b/keyboards/bastardkb/charybdis/3x6/v2/stemcell/keyboard.json
@@ -30,7 +30,9 @@
"diode_direction": "ROW2COL",
"split": {
"enabled": true,
- "soft_serial_pin": "A3"
+ "serial": {
+ "pin": "A3"
+ }
},
"development_board": "stemcell"
}
diff --git a/keyboards/bastardkb/charybdis/4x6/v1/elitec/keyboard.json b/keyboards/bastardkb/charybdis/4x6/v1/elitec/keyboard.json
index b90b144c8b..6b0caff82e 100644
--- a/keyboards/bastardkb/charybdis/4x6/v1/elitec/keyboard.json
+++ b/keyboards/bastardkb/charybdis/4x6/v1/elitec/keyboard.json
@@ -26,7 +26,9 @@
"diode_direction": "ROW2COL",
"split": {
"enabled": true,
- "soft_serial_pin": "D2",
+ "serial": {
+ "pin": "D2"
+ },
"matrix_pins": {
"right": {
"cols": ["F1", "C7", "B7", "D7", "E6", "B4"],
diff --git a/keyboards/bastardkb/charybdis/4x6/v2/elitec/keyboard.json b/keyboards/bastardkb/charybdis/4x6/v2/elitec/keyboard.json
index 8ae66d083b..4163f9d476 100644
--- a/keyboards/bastardkb/charybdis/4x6/v2/elitec/keyboard.json
+++ b/keyboards/bastardkb/charybdis/4x6/v2/elitec/keyboard.json
@@ -26,7 +26,9 @@
"diode_direction": "ROW2COL",
"split": {
"enabled": true,
- "soft_serial_pin": "D2"
+ "serial": {
+ "pin": "D2"
+ }
},
"processor": "atmega32u4",
"bootloader": "atmel-dfu"
diff --git a/keyboards/bastardkb/charybdis/4x6/v2/splinky_2/keyboard.json b/keyboards/bastardkb/charybdis/4x6/v2/splinky_2/keyboard.json
index b0c98389f7..0da7d0b442 100644
--- a/keyboards/bastardkb/charybdis/4x6/v2/splinky_2/keyboard.json
+++ b/keyboards/bastardkb/charybdis/4x6/v2/splinky_2/keyboard.json
@@ -20,7 +20,9 @@
"diode_direction": "ROW2COL",
"split": {
"enabled": true,
- "soft_serial_pin": "GP1"
+ "serial": {
+ "pin": "GP1"
+ }
},
"ws2812": {
"pin": "GP0",
diff --git a/keyboards/bastardkb/charybdis/4x6/v2/splinky_3/keyboard.json b/keyboards/bastardkb/charybdis/4x6/v2/splinky_3/keyboard.json
index 1e072db85b..026684eb92 100644
--- a/keyboards/bastardkb/charybdis/4x6/v2/splinky_3/keyboard.json
+++ b/keyboards/bastardkb/charybdis/4x6/v2/splinky_3/keyboard.json
@@ -20,7 +20,9 @@
"diode_direction": "ROW2COL",
"split": {
"enabled": true,
- "soft_serial_pin": "GP1"
+ "serial": {
+ "pin": "GP1"
+ }
},
"ws2812": {
"pin": "GP0",
diff --git a/keyboards/bastardkb/charybdis/4x6/v2/stemcell/keyboard.json b/keyboards/bastardkb/charybdis/4x6/v2/stemcell/keyboard.json
index ab145e0f95..ed929f7fb7 100644
--- a/keyboards/bastardkb/charybdis/4x6/v2/stemcell/keyboard.json
+++ b/keyboards/bastardkb/charybdis/4x6/v2/stemcell/keyboard.json
@@ -30,7 +30,9 @@
"diode_direction": "ROW2COL",
"split": {
"enabled": true,
- "soft_serial_pin": "A3"
+ "serial": {
+ "pin": "A3"
+ }
},
"development_board": "stemcell"
}
diff --git a/keyboards/bastardkb/dilemma/3x5_2/assembled/keyboard.json b/keyboards/bastardkb/dilemma/3x5_2/assembled/keyboard.json
index ac52a86eb5..366deac293 100644
--- a/keyboards/bastardkb/dilemma/3x5_2/assembled/keyboard.json
+++ b/keyboards/bastardkb/dilemma/3x5_2/assembled/keyboard.json
@@ -13,7 +13,9 @@
"diode_direction": "ROW2COL",
"split": {
"enabled": true,
- "soft_serial_pin": "GP1"
+ "serial": {
+ "pin": "GP1"
+ }
},
"processor": "RP2040",
"bootloader": "rp2040"
diff --git a/keyboards/bastardkb/dilemma/3x5_2/splinky/keyboard.json b/keyboards/bastardkb/dilemma/3x5_2/splinky/keyboard.json
index 3c4c559cb6..e954f4f657 100644
--- a/keyboards/bastardkb/dilemma/3x5_2/splinky/keyboard.json
+++ b/keyboards/bastardkb/dilemma/3x5_2/splinky/keyboard.json
@@ -13,7 +13,9 @@
"diode_direction": "ROW2COL",
"split": {
"enabled": true,
- "soft_serial_pin": "GP1"
+ "serial": {
+ "pin": "GP1"
+ }
},
"processor": "RP2040",
"bootloader": "rp2040"
diff --git a/keyboards/bastardkb/dilemma/3x5_3/keyboard.json b/keyboards/bastardkb/dilemma/3x5_3/keyboard.json
index 12e336f023..3ae31d0b46 100644
--- a/keyboards/bastardkb/dilemma/3x5_3/keyboard.json
+++ b/keyboards/bastardkb/dilemma/3x5_3/keyboard.json
@@ -14,7 +14,9 @@
"diode_direction": "ROW2COL",
"split": {
"enabled": true,
- "soft_serial_pin": "GP1",
+ "serial": {
+ "pin": "GP1"
+ },
"bootmagic": {
"matrix": [4, 0]
},
diff --git a/keyboards/bastardkb/dilemma/4x6_4/keyboard.json b/keyboards/bastardkb/dilemma/4x6_4/keyboard.json
index 7e40208a5d..4f0ea648c8 100644
--- a/keyboards/bastardkb/dilemma/4x6_4/keyboard.json
+++ b/keyboards/bastardkb/dilemma/4x6_4/keyboard.json
@@ -14,7 +14,9 @@
"diode_direction": "ROW2COL",
"split": {
"enabled": true,
- "soft_serial_pin": "GP1",
+ "serial": {
+ "pin": "GP1"
+ },
"bootmagic": {
"matrix": [5, 0]
},
diff --git a/keyboards/bastardkb/scylla/v1/elitec/keyboard.json b/keyboards/bastardkb/scylla/v1/elitec/keyboard.json
index 17b6b7fc36..25963f006c 100644
--- a/keyboards/bastardkb/scylla/v1/elitec/keyboard.json
+++ b/keyboards/bastardkb/scylla/v1/elitec/keyboard.json
@@ -22,7 +22,9 @@
"diode_direction": "ROW2COL",
"split": {
"enabled": true,
- "soft_serial_pin": "D0"
+ "serial": {
+ "pin": "D0"
+ }
},
"processor": "atmega32u4",
"bootloader": "atmel-dfu"
diff --git a/keyboards/bastardkb/scylla/v2/elitec/keyboard.json b/keyboards/bastardkb/scylla/v2/elitec/keyboard.json
index 7bfb7ff5a4..316606b17b 100644
--- a/keyboards/bastardkb/scylla/v2/elitec/keyboard.json
+++ b/keyboards/bastardkb/scylla/v2/elitec/keyboard.json
@@ -22,7 +22,9 @@
"diode_direction": "ROW2COL",
"split": {
"enabled": true,
- "soft_serial_pin": "D2"
+ "serial": {
+ "pin": "D2"
+ }
},
"processor": "atmega32u4",
"bootloader": "atmel-dfu"
diff --git a/keyboards/bastardkb/scylla/v2/splinky_2/keyboard.json b/keyboards/bastardkb/scylla/v2/splinky_2/keyboard.json
index 2b9022d24e..2c0beb5c1d 100644
--- a/keyboards/bastardkb/scylla/v2/splinky_2/keyboard.json
+++ b/keyboards/bastardkb/scylla/v2/splinky_2/keyboard.json
@@ -19,7 +19,9 @@
"diode_direction": "ROW2COL",
"split": {
"enabled": true,
- "soft_serial_pin": "GP1"
+ "serial": {
+ "pin": "GP1"
+ }
},
"ws2812": {
"pin": "GP0",
diff --git a/keyboards/bastardkb/scylla/v2/splinky_3/keyboard.json b/keyboards/bastardkb/scylla/v2/splinky_3/keyboard.json
index cd4da3ac41..ed92be5a45 100644
--- a/keyboards/bastardkb/scylla/v2/splinky_3/keyboard.json
+++ b/keyboards/bastardkb/scylla/v2/splinky_3/keyboard.json
@@ -19,7 +19,9 @@
"diode_direction": "ROW2COL",
"split": {
"enabled": true,
- "soft_serial_pin": "GP1"
+ "serial": {
+ "pin": "GP1"
+ }
},
"ws2812": {
"pin": "GP0",
diff --git a/keyboards/bastardkb/scylla/v2/stemcell/keyboard.json b/keyboards/bastardkb/scylla/v2/stemcell/keyboard.json
index 06bfeda7d2..80325bfea3 100644
--- a/keyboards/bastardkb/scylla/v2/stemcell/keyboard.json
+++ b/keyboards/bastardkb/scylla/v2/stemcell/keyboard.json
@@ -26,7 +26,9 @@
"diode_direction": "ROW2COL",
"split": {
"enabled": true,
- "soft_serial_pin": "A3"
+ "serial": {
+ "pin": "A3"
+ }
},
"development_board": "stemcell"
}
diff --git a/keyboards/bastardkb/skeletyl/v1/elitec/keyboard.json b/keyboards/bastardkb/skeletyl/v1/elitec/keyboard.json
index 2910d80b2f..3bbba6d310 100644
--- a/keyboards/bastardkb/skeletyl/v1/elitec/keyboard.json
+++ b/keyboards/bastardkb/skeletyl/v1/elitec/keyboard.json
@@ -22,7 +22,9 @@
"diode_direction": "ROW2COL",
"split": {
"enabled": true,
- "soft_serial_pin": "D0"
+ "serial": {
+ "pin": "D0"
+ }
},
"processor": "atmega32u4",
"bootloader": "atmel-dfu"
diff --git a/keyboards/bastardkb/skeletyl/v2/elitec/keyboard.json b/keyboards/bastardkb/skeletyl/v2/elitec/keyboard.json
index dec2537b65..43675db36d 100644
--- a/keyboards/bastardkb/skeletyl/v2/elitec/keyboard.json
+++ b/keyboards/bastardkb/skeletyl/v2/elitec/keyboard.json
@@ -22,7 +22,9 @@
"diode_direction": "ROW2COL",
"split": {
"enabled": true,
- "soft_serial_pin": "D2"
+ "serial": {
+ "pin": "D2"
+ }
},
"processor": "atmega32u4",
"bootloader": "atmel-dfu"
diff --git a/keyboards/bastardkb/skeletyl/v2/splinky_2/keyboard.json b/keyboards/bastardkb/skeletyl/v2/splinky_2/keyboard.json
index 897f195a31..32030dbd00 100644
--- a/keyboards/bastardkb/skeletyl/v2/splinky_2/keyboard.json
+++ b/keyboards/bastardkb/skeletyl/v2/splinky_2/keyboard.json
@@ -19,7 +19,9 @@
"diode_direction": "ROW2COL",
"split": {
"enabled": true,
- "soft_serial_pin": "GP1"
+ "serial": {
+ "pin": "GP1"
+ }
},
"ws2812": {
"pin": "GP0",
diff --git a/keyboards/bastardkb/skeletyl/v2/splinky_3/keyboard.json b/keyboards/bastardkb/skeletyl/v2/splinky_3/keyboard.json
index 06a93dfbeb..51227f5065 100644
--- a/keyboards/bastardkb/skeletyl/v2/splinky_3/keyboard.json
+++ b/keyboards/bastardkb/skeletyl/v2/splinky_3/keyboard.json
@@ -19,7 +19,9 @@
"diode_direction": "ROW2COL",
"split": {
"enabled": true,
- "soft_serial_pin": "GP1"
+ "serial": {
+ "pin": "GP1"
+ }
},
"ws2812": {
"pin": "GP0",
diff --git a/keyboards/bastardkb/skeletyl/v2/stemcell/keyboard.json b/keyboards/bastardkb/skeletyl/v2/stemcell/keyboard.json
index 6dd86bcc12..2e9745b7f2 100644
--- a/keyboards/bastardkb/skeletyl/v2/stemcell/keyboard.json
+++ b/keyboards/bastardkb/skeletyl/v2/stemcell/keyboard.json
@@ -26,7 +26,9 @@
"diode_direction": "ROW2COL",
"split": {
"enabled": true,
- "soft_serial_pin": "A3"
+ "serial": {
+ "pin": "A3"
+ }
},
"development_board": "stemcell"
}
diff --git a/keyboards/bastardkb/tbkmini/v1/elitec/keyboard.json b/keyboards/bastardkb/tbkmini/v1/elitec/keyboard.json
index 59988074ba..5110ea0d74 100644
--- a/keyboards/bastardkb/tbkmini/v1/elitec/keyboard.json
+++ b/keyboards/bastardkb/tbkmini/v1/elitec/keyboard.json
@@ -22,7 +22,9 @@
"diode_direction": "ROW2COL",
"split": {
"enabled": true,
- "soft_serial_pin": "D0"
+ "serial": {
+ "pin": "D0"
+ }
},
"processor": "atmega32u4",
"bootloader": "atmel-dfu"
diff --git a/keyboards/bastardkb/tbkmini/v2/elitec/keyboard.json b/keyboards/bastardkb/tbkmini/v2/elitec/keyboard.json
index 01679bcff9..701ec6af28 100644
--- a/keyboards/bastardkb/tbkmini/v2/elitec/keyboard.json
+++ b/keyboards/bastardkb/tbkmini/v2/elitec/keyboard.json
@@ -22,7 +22,9 @@
"diode_direction": "ROW2COL",
"split": {
"enabled": true,
- "soft_serial_pin": "D2"
+ "serial": {
+ "pin": "D2"
+ }
},
"processor": "atmega32u4",
"bootloader": "atmel-dfu"
diff --git a/keyboards/bastardkb/tbkmini/v2/splinky_2/keyboard.json b/keyboards/bastardkb/tbkmini/v2/splinky_2/keyboard.json
index 2048db6251..15db3db6e8 100644
--- a/keyboards/bastardkb/tbkmini/v2/splinky_2/keyboard.json
+++ b/keyboards/bastardkb/tbkmini/v2/splinky_2/keyboard.json
@@ -19,7 +19,9 @@
"diode_direction": "ROW2COL",
"split": {
"enabled": true,
- "soft_serial_pin": "GP1"
+ "serial": {
+ "pin": "GP1"
+ }
},
"ws2812": {
"pin": "GP0",
diff --git a/keyboards/bastardkb/tbkmini/v2/splinky_3/keyboard.json b/keyboards/bastardkb/tbkmini/v2/splinky_3/keyboard.json
index 8dd21b7591..3936b9368a 100644
--- a/keyboards/bastardkb/tbkmini/v2/splinky_3/keyboard.json
+++ b/keyboards/bastardkb/tbkmini/v2/splinky_3/keyboard.json
@@ -19,7 +19,9 @@
"diode_direction": "ROW2COL",
"split": {
"enabled": true,
- "soft_serial_pin": "GP1"
+ "serial": {
+ "pin": "GP1"
+ }
},
"ws2812": {
"pin": "GP0",
diff --git a/keyboards/bastardkb/tbkmini/v2/stemcell/keyboard.json b/keyboards/bastardkb/tbkmini/v2/stemcell/keyboard.json
index 41abba96cb..2cbee7fe17 100644
--- a/keyboards/bastardkb/tbkmini/v2/stemcell/keyboard.json
+++ b/keyboards/bastardkb/tbkmini/v2/stemcell/keyboard.json
@@ -26,7 +26,9 @@
"diode_direction": "ROW2COL",
"split": {
"enabled": true,
- "soft_serial_pin": "A3"
+ "serial": {
+ "pin": "A3"
+ }
},
"development_board": "stemcell"
}
diff --git a/keyboards/beatervan/keyboard.json b/keyboards/beatervan/keyboard.json
index 27d0f3e535..5bc27c8265 100644
--- a/keyboards/beatervan/keyboard.json
+++ b/keyboards/beatervan/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "beatervan",
"manufacturer": "OJ",
- "url": "",
"maintainer": "OJ",
"usb": {
"vid": "0x6F7A",
diff --git a/keyboards/beekeeb/piantor_pro/keyboard.json b/keyboards/beekeeb/piantor_pro/keyboard.json
index ad4890ae68..e7605acd1a 100644
--- a/keyboards/beekeeb/piantor_pro/keyboard.json
+++ b/keyboards/beekeeb/piantor_pro/keyboard.json
@@ -17,7 +17,6 @@
"rows": ["GP7", "GP8", "GP9", "GP10"]
},
"processor": "RP2040",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0002",
diff --git a/keyboards/bestway/keyboard.json b/keyboards/bestway/keyboard.json
index 66856115f8..2f4541b268 100644
--- a/keyboards/bestway/keyboard.json
+++ b/keyboards/bestway/keyboard.json
@@ -35,7 +35,6 @@
"led_count": 3,
"saturation_steps": 8
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0xBB05",
diff --git a/keyboards/bfake/keyboard.json b/keyboards/bfake/keyboard.json
index 4774e282d7..8892d81112 100644
--- a/keyboards/bfake/keyboard.json
+++ b/keyboards/bfake/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "B.fake",
"manufacturer": "NotWinkeyless",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x20A0",
diff --git a/keyboards/biacco42/ergo42/rev1/keyboard.json b/keyboards/biacco42/ergo42/rev1/keyboard.json
index c75e9d1c51..4639bf9639 100644
--- a/keyboards/biacco42/ergo42/rev1/keyboard.json
+++ b/keyboards/biacco42/ergo42/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Ergo42",
"manufacturer": "Biacco42",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xBC42",
diff --git a/keyboards/biacco42/meishi/keyboard.json b/keyboards/biacco42/meishi/keyboard.json
index b7d751d83e..99f7c5debb 100644
--- a/keyboards/biacco42/meishi/keyboard.json
+++ b/keyboards/biacco42/meishi/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Meishi",
"manufacturer": "Biacco42",
- "url": "",
"maintainer": "Biacco42",
"usb": {
"vid": "0xBC42",
diff --git a/keyboards/biacco42/meishi2/keyboard.json b/keyboards/biacco42/meishi2/keyboard.json
index 2f553681bc..137c429ff1 100644
--- a/keyboards/biacco42/meishi2/keyboard.json
+++ b/keyboards/biacco42/meishi2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "meishi2",
"manufacturer": "Biacco42",
- "url": "",
"maintainer": "biacco42",
"usb": {
"vid": "0xBC42",
diff --git a/keyboards/bioi/f60/keyboard.json b/keyboards/bioi/f60/keyboard.json
index 8974a68e02..67fa1c1c9a 100644
--- a/keyboards/bioi/f60/keyboard.json
+++ b/keyboards/bioi/f60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "BIOI F60",
"manufacturer": "Basic IO Instruments",
- "url": "",
"maintainer": "kb-elmo",
"usb": {
"vid": "0x8101",
diff --git a/keyboards/bioi/g60ble/keyboard.json b/keyboards/bioi/g60ble/keyboard.json
index 8b24556b37..ad1aed6048 100644
--- a/keyboards/bioi/g60ble/keyboard.json
+++ b/keyboards/bioi/g60ble/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "BIOI G60 BLE",
"manufacturer": "Basic IO Instruments",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x6583",
diff --git a/keyboards/bioi/morgan65/keyboard.json b/keyboards/bioi/morgan65/keyboard.json
index 5606233f2a..0182392706 100644
--- a/keyboards/bioi/morgan65/keyboard.json
+++ b/keyboards/bioi/morgan65/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Morgan65",
"manufacturer": "Basic IO Instruments",
- "url": "",
"maintainer": "scottywei",
"usb": {
"vid": "0x8101",
diff --git a/keyboards/bioi/s65/keyboard.json b/keyboards/bioi/s65/keyboard.json
index 56d53b54cf..73baaf98c4 100644
--- a/keyboards/bioi/s65/keyboard.json
+++ b/keyboards/bioi/s65/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "BIOI S65",
"manufacturer": "Basic IO Instruments",
- "url": "",
"maintainer": "scottywei",
"usb": {
"vid": "0x8101",
diff --git a/keyboards/blank/blank01/keyboard.json b/keyboards/blank/blank01/keyboard.json
index 672a292def..5e29f192f2 100644
--- a/keyboards/blank/blank01/keyboard.json
+++ b/keyboards/blank/blank01/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "BLANK.01",
"manufacturer": "BLANK",
- "url": "",
"maintainer": "gkeyboard",
"usb": {
"vid": "0x424C",
diff --git a/keyboards/blaster75/keyboard.json b/keyboards/blaster75/keyboard.json
index 81cc789da6..93288150ba 100644
--- a/keyboards/blaster75/keyboard.json
+++ b/keyboards/blaster75/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Blaster 75",
"manufacturer": "Altain",
- "url": "",
"maintainer": "Altain",
"usb": {
"vid": "0xA122",
diff --git a/keyboards/blockboy/ac980mini/keyboard.json b/keyboards/blockboy/ac980mini/keyboard.json
index ad844102dc..8675daad8d 100644
--- a/keyboards/blockboy/ac980mini/keyboard.json
+++ b/keyboards/blockboy/ac980mini/keyboard.json
@@ -21,7 +21,6 @@
"rows": ["D0", "D1", "D2", "D3", "D5"]
},
"processor": "atmega32u4",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x6060",
diff --git a/keyboards/blockey/keyboard.json b/keyboards/blockey/keyboard.json
index 9710606a52..e9c5ceafa1 100644
--- a/keyboards/blockey/keyboard.json
+++ b/keyboards/blockey/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "BlocKey",
"manufacturer": "Eucalyn",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/boardwalk/keyboard.json b/keyboards/boardwalk/keyboard.json
index 6fb7673ec8..d0cb4b1383 100644
--- a/keyboards/boardwalk/keyboard.json
+++ b/keyboards/boardwalk/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Boardwalk",
"manufacturer": "shensmobile",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xCDCD",
diff --git a/keyboards/bobpad/keyboard.json b/keyboards/bobpad/keyboard.json
index feddbbf222..d96c875011 100644
--- a/keyboards/bobpad/keyboard.json
+++ b/keyboards/bobpad/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "bobPad",
"manufacturer": "Desiboards",
- "url": "",
"maintainer": "Ananya Kirti",
"usb": {
"vid": "0x416B",
diff --git a/keyboards/bolsa/bolsalice/keyboard.json b/keyboards/bolsa/bolsalice/keyboard.json
index 8ada9b5546..377da8a1d2 100644
--- a/keyboards/bolsa/bolsalice/keyboard.json
+++ b/keyboards/bolsa/bolsalice/keyboard.json
@@ -42,7 +42,6 @@
"diode_direction": "COL2ROW",
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
- "url": "",
"maintainer": "qmk",
"community_layouts": ["alice", "alice_split_bs"],
"layouts": {
diff --git a/keyboards/bolsa/damapad/keyboard.json b/keyboards/bolsa/damapad/keyboard.json
index 5a47d12322..a5d95add81 100644
--- a/keyboards/bolsa/damapad/keyboard.json
+++ b/keyboards/bolsa/damapad/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Damapad",
"manufacturer": "Bolsa Keyboard Supply",
- "url": "",
"maintainer": "matthewdias",
"usb": {
"vid": "0x6D64",
diff --git a/keyboards/boston_meetup/2019/keyboard.json b/keyboards/boston_meetup/2019/keyboard.json
index 40a390b0a8..4f07e0c631 100644
--- a/keyboards/boston_meetup/2019/keyboard.json
+++ b/keyboards/boston_meetup/2019/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Boston Meetup Board",
"manufacturer": "ishtob",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFB30",
diff --git a/keyboards/botanicalkeyboards/fm2u/keyboard.json b/keyboards/botanicalkeyboards/fm2u/keyboard.json
index 907d5d46b8..8c2714ade3 100644
--- a/keyboards/botanicalkeyboards/fm2u/keyboard.json
+++ b/keyboards/botanicalkeyboards/fm2u/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "FM2U",
"manufacturer": "Botanical Keyboards",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x6969",
diff --git a/keyboards/box75/keyboard.json b/keyboards/box75/keyboard.json
index 89afff1716..9c5c245f20 100644
--- a/keyboards/box75/keyboard.json
+++ b/keyboards/box75/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "BOX75",
"manufacturer": "Lin Design",
- "url": "",
"maintainer": "Gondolindrim",
"usb": {
"vid": "0x7668",
diff --git a/keyboards/bpiphany/four_banger/keyboard.json b/keyboards/bpiphany/four_banger/keyboard.json
index a368fbfe61..d74864d18f 100644
--- a/keyboards/bpiphany/four_banger/keyboard.json
+++ b/keyboards/bpiphany/four_banger/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Four Banger",
"manufacturer": "1up Keyboards",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/bpiphany/frosty_flake/info.json b/keyboards/bpiphany/frosty_flake/info.json
index 33a2f792d9..bfec449931 100644
--- a/keyboards/bpiphany/frosty_flake/info.json
+++ b/keyboards/bpiphany/frosty_flake/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Frosty Flake",
"manufacturer": "Bathroom Epiphanies",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/bpiphany/ghost_squid/keyboard.json b/keyboards/bpiphany/ghost_squid/keyboard.json
index 85f6f0fa8e..68901ba316 100644
--- a/keyboards/bpiphany/ghost_squid/keyboard.json
+++ b/keyboards/bpiphany/ghost_squid/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Ghost Squid",
"manufacturer": "Bathroom Epiphanies",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/bpiphany/hid_liber/keyboard.json b/keyboards/bpiphany/hid_liber/keyboard.json
index 67c8416849..2f8f3ea4ce 100644
--- a/keyboards/bpiphany/hid_liber/keyboard.json
+++ b/keyboards/bpiphany/hid_liber/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "HIDLiberation",
"manufacturer": "bpiphany",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/bpiphany/kitten_paw/keyboard.json b/keyboards/bpiphany/kitten_paw/keyboard.json
index 829129d406..42c6cb8732 100644
--- a/keyboards/bpiphany/kitten_paw/keyboard.json
+++ b/keyboards/bpiphany/kitten_paw/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Kitten Paw",
"manufacturer": "bpiphany",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/bpiphany/pegasushoof/info.json b/keyboards/bpiphany/pegasushoof/info.json
index 1e9e9db306..a28f68e63e 100644
--- a/keyboards/bpiphany/pegasushoof/info.json
+++ b/keyboards/bpiphany/pegasushoof/info.json
@@ -1,6 +1,5 @@
{
"manufacturer": "Filco",
- "url": "",
"maintainer": "qmk",
"features": {
"bootmagic": true,
diff --git a/keyboards/bpiphany/tiger_lily/keyboard.json b/keyboards/bpiphany/tiger_lily/keyboard.json
index 118f89f39d..f260f84c71 100644
--- a/keyboards/bpiphany/tiger_lily/keyboard.json
+++ b/keyboards/bpiphany/tiger_lily/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "tiger_lily",
"manufacturer": "Bathroom Epiphanies",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4245",
diff --git a/keyboards/bt66tech/bt66tech60/keyboard.json b/keyboards/bt66tech/bt66tech60/keyboard.json
index 778e27fe67..9f747397c3 100644
--- a/keyboards/bt66tech/bt66tech60/keyboard.json
+++ b/keyboards/bt66tech/bt66tech60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "bt66tech 60%",
"manufacturer": "bt66tech",
- "url": "",
"maintainer": "bt66tech",
"usb": {
"vid": "0x4254",
diff --git a/keyboards/bubble75/hotswap/keyboard.json b/keyboards/bubble75/hotswap/keyboard.json
index 011ce33ec4..92f57144ce 100644
--- a/keyboards/bubble75/hotswap/keyboard.json
+++ b/keyboards/bubble75/hotswap/keyboard.json
@@ -1,6 +1,5 @@
{
"keyboard_name": "bubble75",
- "url": "",
"manufacturer": "phl",
"maintainer": "velocifire",
"usb": {
diff --git a/keyboards/budgy/keyboard.json b/keyboards/budgy/keyboard.json
index 0dc45c9da0..cfb60d85ae 100644
--- a/keyboards/budgy/keyboard.json
+++ b/keyboards/budgy/keyboard.json
@@ -12,7 +12,6 @@
"nkro": true
},
"processor": "RP2040",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0117",
diff --git a/keyboards/buildakb/mw60/keyboard.json b/keyboards/buildakb/mw60/keyboard.json
index 9969768345..9c944277de 100644
--- a/keyboards/buildakb/mw60/keyboard.json
+++ b/keyboards/buildakb/mw60/keyboard.json
@@ -17,7 +17,6 @@
"rows": ["E6", "D1", "F7", "F4", "F1"]
},
"processor": "atmega32u4",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0004",
diff --git a/keyboards/caffeinated/serpent65/keyboard.json b/keyboards/caffeinated/serpent65/keyboard.json
index add4854720..ef0f926759 100644
--- a/keyboards/caffeinated/serpent65/keyboard.json
+++ b/keyboards/caffeinated/serpent65/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Serpent65",
"manufacturer": "Caffeinated Studios",
- "url": "",
"maintainer": "jrfhoutx",
"usb": {
"vid": "0x4353",
diff --git a/keyboards/canary/canary60rgb/v1/keyboard.json b/keyboards/canary/canary60rgb/v1/keyboard.json
index ac1ba67de0..4980a6f224 100644
--- a/keyboards/canary/canary60rgb/v1/keyboard.json
+++ b/keyboards/canary/canary60rgb/v1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "CANARY60RGB",
"manufacturer": "CANARY",
- "url": "",
"maintainer": "tuananhnguyen204",
"usb": {
"vid": "0x4341",
diff --git a/keyboards/cannonkeys/adelie/keyboard.json b/keyboards/cannonkeys/adelie/keyboard.json
index 6b36af3082..c6792f4c90 100644
--- a/keyboards/cannonkeys/adelie/keyboard.json
+++ b/keyboards/cannonkeys/adelie/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Adelie",
"manufacturer": "Abec13",
- "url": "",
"maintainer": "Abec13",
"usb": {
"vid": "0xCA04",
diff --git a/keyboards/cannonkeys/lib/satisfaction75/satisfaction_core.c b/keyboards/cannonkeys/lib/satisfaction75/satisfaction_core.c
index 6f76582e4b..a410480d7d 100644
--- a/keyboards/cannonkeys/lib/satisfaction75/satisfaction_core.c
+++ b/keyboards/cannonkeys/lib/satisfaction75/satisfaction_core.c
@@ -53,10 +53,26 @@ void board_init(void) {
SYSCFG->CFGR1 &= ~(SYSCFG_CFGR1_SPI2_DMA_RMP);
}
+uint32_t read_custom_config(void *data, uint32_t offset, uint32_t length) {
+#ifdef VIA_ENABLE
+ return via_read_custom_config(data, offset, length);
+#else
+ return eeconfig_read_kb_datablock(data, offset, length);
+#endif
+}
+
+uint32_t write_custom_config(const void *data, uint32_t offset, uint32_t length) {
+#ifdef VIA_ENABLE
+ return via_update_custom_config(data, offset, length);
+#else
+ return eeconfig_update_kb_datablock(data, offset, length);
+#endif
+}
+
void keyboard_post_init_kb(void) {
/*
This is a workaround to some really weird behavior
- Without this code, the OLED will turn on, but not when you initially plug the keyboard in.
+ Without this code, the OLED will turn on, but not when you initially plug the keyboard in.
You have to manually trigger a user reset to get the OLED to initialize properly
I'm not sure what the root cause is at this time, but this workaround fixes it.
*/
@@ -74,11 +90,11 @@ void keyboard_post_init_kb(void) {
void custom_set_value(uint8_t *data) {
uint8_t *value_id = &(data[0]);
uint8_t *value_data = &(data[1]);
-
+
switch ( *value_id ) {
case id_oled_default_mode:
{
- eeprom_update_byte((uint8_t*)EEPROM_DEFAULT_OLED, value_data[0]);
+ write_custom_config(&value_data[0], EEPROM_DEFAULT_OLED_OFFSET, 1);
break;
}
case id_oled_mode:
@@ -92,7 +108,7 @@ void custom_set_value(uint8_t *data) {
uint8_t index = value_data[0];
uint8_t enable = value_data[1];
enabled_encoder_modes = (enabled_encoder_modes & ~(1<<index)) | (enable<<index);
- eeprom_update_byte((uint8_t*)EEPROM_ENABLED_ENCODER_MODES, enabled_encoder_modes);
+ write_custom_config(&enabled_encoder_modes, EEPROM_ENABLED_ENCODER_MODES_OFFSET, 1);
break;
}
case id_encoder_custom:
@@ -109,11 +125,12 @@ void custom_set_value(uint8_t *data) {
void custom_get_value(uint8_t *data) {
uint8_t *value_id = &(data[0]);
uint8_t *value_data = &(data[1]);
-
+
switch ( *value_id ) {
case id_oled_default_mode:
{
- uint8_t default_oled = eeprom_read_byte((uint8_t*)EEPROM_DEFAULT_OLED);
+ uint8_t default_oled;
+ read_custom_config(&default_oled, EEPROM_DEFAULT_OLED_OFFSET, 1);
value_data[0] = default_oled;
break;
}
@@ -179,7 +196,6 @@ void via_custom_value_command_kb(uint8_t *data, uint8_t length) {
}
#endif
-
void read_host_led_state(void) {
led_t led_state = host_keyboard_led_state();
if (led_state.num_lock) {
@@ -290,25 +306,25 @@ bool encoder_update_kb(uint8_t index, bool clockwise) {
}
void custom_config_reset(void){
- void *p = (void*)(VIA_EEPROM_CUSTOM_CONFIG_ADDR);
- void *end = (void*)(VIA_EEPROM_CUSTOM_CONFIG_ADDR+VIA_EEPROM_CUSTOM_CONFIG_SIZE);
- while ( p != end ) {
- eeprom_update_byte(p, 0);
- ++p;
+ for(int i = 0; i < VIA_EEPROM_CUSTOM_CONFIG_SIZE; ++i) {
+ uint8_t dummy = 0;
+ write_custom_config(&dummy, i, 1);
}
- eeprom_update_byte((uint8_t*)EEPROM_ENABLED_ENCODER_MODES, 0x1F);
+
+ uint8_t encoder_modes = 0x1F;
+ write_custom_config(&encoder_modes, EEPROM_ENABLED_ENCODER_MODES_OFFSET, 1);
}
void custom_config_load(void){
#ifdef DYNAMIC_KEYMAP_ENABLE
- oled_mode = eeprom_read_byte((uint8_t*)EEPROM_DEFAULT_OLED);
- enabled_encoder_modes = eeprom_read_byte((uint8_t*)EEPROM_ENABLED_ENCODER_MODES);
+ read_custom_config(&oled_mode, EEPROM_DEFAULT_OLED_OFFSET, 1);
+ read_custom_config(&enabled_encoder_modes, EEPROM_ENABLED_ENCODER_MODES_OFFSET, 1);
#endif
}
// Called from via_init() if VIA_ENABLE
// Called from matrix_init_kb() if not VIA_ENABLE
-void via_init_kb(void)
+void satisfaction_core_init(void)
{
// This checks both an EEPROM reset (from bootmagic lite, keycodes)
// and also firmware build date (from via_eeprom_is_valid())
@@ -326,8 +342,7 @@ void via_init_kb(void)
void matrix_init_kb(void)
{
#ifndef VIA_ENABLE
- via_init_kb();
- via_eeprom_set_valid(true);
+ satisfaction_core_init();
#endif // VIA_ENABLE
rtcGetTime(&RTCD1, &last_timespec);
@@ -335,6 +350,11 @@ void matrix_init_kb(void)
oled_request_wakeup();
}
+#ifdef VIA_ENABLE
+void via_init_kb(void) {
+ satisfaction_core_init();
+}
+#endif // VIA_ENABLE
void housekeeping_task_kb(void) {
rtcGetTime(&RTCD1, &last_timespec);
@@ -345,52 +365,3 @@ void housekeeping_task_kb(void) {
oled_request_repaint();
}
}
-
-//
-// In the case of VIA being disabled, we still need to check if
-// keyboard level EEPROM memory is valid before loading.
-// Thus these are copies of the same functions in VIA, since
-// the backlight settings reuse VIA's EEPROM magic/version,
-// and the ones in via.c won't be compiled in.
-//
-// Yes, this is sub-optimal, and is only here for completeness
-// (i.e. catering to the 1% of people that want wilba.tech LED bling
-// AND want persistent settings BUT DON'T want to use dynamic keymaps/VIA).
-//
-#ifndef VIA_ENABLE
-
-bool via_eeprom_is_valid(void)
-{
- char *p = QMK_BUILDDATE; // e.g. "2019-11-05-11:29:54"
- uint8_t magic0 = ( ( p[2] & 0x0F ) << 4 ) | ( p[3] & 0x0F );
- uint8_t magic1 = ( ( p[5] & 0x0F ) << 4 ) | ( p[6] & 0x0F );
- uint8_t magic2 = ( ( p[8] & 0x0F ) << 4 ) | ( p[9] & 0x0F );
-
- return (eeprom_read_byte( (void*)VIA_EEPROM_MAGIC_ADDR+0 ) == magic0 &&
- eeprom_read_byte( (void*)VIA_EEPROM_MAGIC_ADDR+1 ) == magic1 &&
- eeprom_read_byte( (void*)VIA_EEPROM_MAGIC_ADDR+2 ) == magic2 );
-}
-
-// Sets VIA/keyboard level usage of EEPROM to valid/invalid
-// Keyboard level code (eg. via_init_kb()) should not call this
-void via_eeprom_set_valid(bool valid)
-{
- char *p = QMK_BUILDDATE; // e.g. "2019-11-05-11:29:54"
- uint8_t magic0 = ( ( p[2] & 0x0F ) << 4 ) | ( p[3] & 0x0F );
- uint8_t magic1 = ( ( p[5] & 0x0F ) << 4 ) | ( p[6] & 0x0F );
- uint8_t magic2 = ( ( p[8] & 0x0F ) << 4 ) | ( p[9] & 0x0F );
-
- eeprom_update_byte( (void*)VIA_EEPROM_MAGIC_ADDR+0, valid ? magic0 : 0xFF);
- eeprom_update_byte( (void*)VIA_EEPROM_MAGIC_ADDR+1, valid ? magic1 : 0xFF);
- eeprom_update_byte( (void*)VIA_EEPROM_MAGIC_ADDR+2, valid ? magic2 : 0xFF);
-}
-
-void via_eeprom_reset(void)
-{
- // Set the VIA specific EEPROM state as invalid.
- via_eeprom_set_valid(false);
- // Set the TMK/QMK EEPROM state as invalid.
- eeconfig_disable();
-}
-
-#endif // VIA_ENABLE
diff --git a/keyboards/cannonkeys/lib/satisfaction75/satisfaction_core.h b/keyboards/cannonkeys/lib/satisfaction75/satisfaction_core.h
index 70ee2a3fda..163aa27fad 100644
--- a/keyboards/cannonkeys/lib/satisfaction75/satisfaction_core.h
+++ b/keyboards/cannonkeys/lib/satisfaction75/satisfaction_core.h
@@ -6,12 +6,14 @@
#include <stdint.h>
#include <stdbool.h>
+#include <hal.h>
+
#include "via.h" // only for EEPROM address
#include "satisfaction_keycodes.h"
-#define EEPROM_ENABLED_ENCODER_MODES (VIA_EEPROM_CUSTOM_CONFIG_ADDR)
-#define EEPROM_DEFAULT_OLED (VIA_EEPROM_CUSTOM_CONFIG_ADDR+1)
-#define EEPROM_CUSTOM_ENCODER (VIA_EEPROM_CUSTOM_CONFIG_ADDR+2)
+#define EEPROM_ENABLED_ENCODER_MODES_OFFSET 0
+#define EEPROM_DEFAULT_OLED_OFFSET 1
+#define EEPROM_CUSTOM_ENCODER_OFFSET 2
enum s75_keyboard_value_id {
id_encoder_modes = 1,
@@ -94,3 +96,6 @@ void oled_request_repaint(void);
bool oled_task_needs_to_repaint(void);
void custom_config_load(void);
+
+uint32_t read_custom_config(void *data, uint32_t offset, uint32_t length);
+uint32_t write_custom_config(const void *data, uint32_t offset, uint32_t length);
diff --git a/keyboards/cannonkeys/lib/satisfaction75/satisfaction_encoder.c b/keyboards/cannonkeys/lib/satisfaction75/satisfaction_encoder.c
index 7e0b82e9e7..87ff87ea66 100644
--- a/keyboards/cannonkeys/lib/satisfaction75/satisfaction_encoder.c
+++ b/keyboards/cannonkeys/lib/satisfaction75/satisfaction_encoder.c
@@ -215,10 +215,13 @@ uint16_t handle_encoder_press(void){
uint16_t retrieve_custom_encoder_config(uint8_t encoder_idx, uint8_t behavior){
#ifdef DYNAMIC_KEYMAP_ENABLE
- void* addr = (void*)(EEPROM_CUSTOM_ENCODER + (encoder_idx * 6) + (behavior * 2));
+ uint32_t offset = EEPROM_CUSTOM_ENCODER_OFFSET + (encoder_idx * 6) + (behavior * 2);
//big endian
- uint16_t keycode = eeprom_read_byte(addr) << 8;
- keycode |= eeprom_read_byte(addr + 1);
+ uint8_t hi, lo;
+ read_custom_config(&hi, offset+0, 1);
+ read_custom_config(&lo, offset+1, 1);
+ uint16_t keycode = hi << 8;
+ keycode |= lo;
return keycode;
#else
return 0;
@@ -227,8 +230,10 @@ uint16_t retrieve_custom_encoder_config(uint8_t encoder_idx, uint8_t behavior){
void set_custom_encoder_config(uint8_t encoder_idx, uint8_t behavior, uint16_t new_code){
#ifdef DYNAMIC_KEYMAP_ENABLE
- void* addr = (void*)(EEPROM_CUSTOM_ENCODER + (encoder_idx * 6) + (behavior * 2));
- eeprom_update_byte(addr, (uint8_t)(new_code >> 8));
- eeprom_update_byte(addr + 1, (uint8_t)(new_code & 0xFF));
+ uint32_t offset = EEPROM_CUSTOM_ENCODER_OFFSET + (encoder_idx * 6) + (behavior * 2);
+ uint8_t hi = new_code >> 8;
+ uint8_t lo = new_code & 0xFF;
+ write_custom_config(&hi, offset+0, 1);
+ write_custom_config(&lo, offset+1, 1);
#endif
}
diff --git a/keyboards/cannonkeys/lib/satisfaction75/satisfaction_oled.c b/keyboards/cannonkeys/lib/satisfaction75/satisfaction_oled.c
index 0361453c52..815e84901d 100644
--- a/keyboards/cannonkeys/lib/satisfaction75/satisfaction_oled.c
+++ b/keyboards/cannonkeys/lib/satisfaction75/satisfaction_oled.c
@@ -8,7 +8,6 @@
#include "matrix.h"
#include "led.h"
#include "host.h"
-#include "oled_driver.h"
#include "progmem.h"
#include <stdio.h>
@@ -16,6 +15,7 @@ void draw_default(void);
void draw_clock(void);
#ifdef OLED_ENABLE
+#include "oled_driver.h"
oled_rotation_t oled_init_kb(oled_rotation_t rotation) { return OLED_ROTATION_0; }
diff --git a/keyboards/cannonkeys/nearfield/keyboard.json b/keyboards/cannonkeys/nearfield/keyboard.json
index e516198f09..784d26bd6f 100644
--- a/keyboards/cannonkeys/nearfield/keyboard.json
+++ b/keyboards/cannonkeys/nearfield/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Nearfield",
"manufacturer": "JLC",
- "url": "",
"maintainer": "tominabox1",
"usb": {
"vid": "0x0004",
diff --git a/keyboards/cannonkeys/ortho48/keyboard.json b/keyboards/cannonkeys/ortho48/keyboard.json
index 2e045c183e..34f295fcd3 100644
--- a/keyboards/cannonkeys/ortho48/keyboard.json
+++ b/keyboards/cannonkeys/ortho48/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Ortho48",
"manufacturer": "CannonKeys",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xCA04",
diff --git a/keyboards/cannonkeys/ortho60/keyboard.json b/keyboards/cannonkeys/ortho60/keyboard.json
index 2e8ad77297..874dc9efae 100644
--- a/keyboards/cannonkeys/ortho60/keyboard.json
+++ b/keyboards/cannonkeys/ortho60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Ortho60",
"manufacturer": "CannonKeys",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xCA04",
diff --git a/keyboards/cannonkeys/ortho75/keyboard.json b/keyboards/cannonkeys/ortho75/keyboard.json
index af09fd47a7..e46b255b79 100644
--- a/keyboards/cannonkeys/ortho75/keyboard.json
+++ b/keyboards/cannonkeys/ortho75/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Ortho75",
"manufacturer": "CannonKeys",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/cannonkeys/practice60/keyboard.json b/keyboards/cannonkeys/practice60/keyboard.json
index ad8cde6d6b..9cd29cb2c5 100644
--- a/keyboards/cannonkeys/practice60/keyboard.json
+++ b/keyboards/cannonkeys/practice60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Practice 60",
"manufacturer": "CannonKeys",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xCA04",
diff --git a/keyboards/cannonkeys/ripple/keyboard.json b/keyboards/cannonkeys/ripple/keyboard.json
index 3dc11719a1..bce98e226c 100644
--- a/keyboards/cannonkeys/ripple/keyboard.json
+++ b/keyboards/cannonkeys/ripple/keyboard.json
@@ -36,8 +36,6 @@
"rgblight": {
"led_count": 20,
"hue_steps": 17,
- "saturation_steps": 17,
- "brightness_steps": 17,
"animations": {
"static_gradient": true,
"twinkle": true,
diff --git a/keyboards/cannonkeys/satisfaction75/config.h b/keyboards/cannonkeys/satisfaction75/config.h
index 969206b19a..28bc6b286a 100644
--- a/keyboards/cannonkeys/satisfaction75/config.h
+++ b/keyboards/cannonkeys/satisfaction75/config.h
@@ -42,4 +42,7 @@
// 6 for 3x custom encoder settings, left, right, and press (18 bytes)
#define VIA_EEPROM_CUSTOM_CONFIG_SIZE 20
-
+// And if VIA isn't enabled, fall back to using standard QMK for configuration
+#ifndef VIA_ENABLE
+#define EECONFIG_KB_DATA_SIZE VIA_EEPROM_CUSTOM_CONFIG_SIZE
+#endif
diff --git a/keyboards/cannonkeys/satisfaction75_hs/config.h b/keyboards/cannonkeys/satisfaction75_hs/config.h
index 658babd3c0..26c3e4080c 100644
--- a/keyboards/cannonkeys/satisfaction75_hs/config.h
+++ b/keyboards/cannonkeys/satisfaction75_hs/config.h
@@ -40,5 +40,10 @@
// 6 for 3x custom encoder settings, left, right, and press (18 bytes)
#define VIA_EEPROM_CUSTOM_CONFIG_SIZE 20
+// And if VIA isn't enabled, fall back to using standard QMK for configuration
+#ifndef VIA_ENABLE
+#define EECONFIG_KB_DATA_SIZE VIA_EEPROM_CUSTOM_CONFIG_SIZE
+#endif
+
// VIA lighting is handled by the keyboard-level code
#define VIA_CUSTOM_LIGHTING_ENABLE
diff --git a/keyboards/cannonkeys/savage65/keyboard.json b/keyboards/cannonkeys/savage65/keyboard.json
index bc9c1d77e5..471b785633 100644
--- a/keyboards/cannonkeys/savage65/keyboard.json
+++ b/keyboards/cannonkeys/savage65/keyboard.json
@@ -1,63 +1,63 @@
{
- "keyboard_name": "Savage65",
"manufacturer": "CannonKeys",
- "url": "https://cannonkeys.com",
+ "keyboard_name": "Savage65",
"maintainer": "awkannan",
- "usb": {
- "vid": "0xCA04",
- "pid": "0x5A65",
- "device_version": "0.0.1"
+ "backlight": {
+ "breathing": true,
+ "levels": 6,
+ "pin": "A6"
+ },
+ "bootloader": "stm32-dfu",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "backlight": true,
+ "bootmagic": true,
+ "command": true,
+ "console": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": true
},
"matrix_pins": {
"cols": ["A5", "B10", "A3", "A2", "B0", "A9", "C13", "B9", "B8", "B7", "B6", "B5", "B4", "B3", "A15", "A14"],
"rows": ["B12", "B11", "B14", "A8", "A1"]
},
- "diode_direction": "COL2ROW",
- "backlight": {
- "pin": "A6",
- "levels": 6,
- "breathing": true
+ "processor": "STM32F072",
+ "qmk": {
+ "locking": {
+ "enabled": true,
+ "resync": true
+ }
},
"rgblight": {
- "led_count": 20,
"animations": {
+ "alternating": true,
"breathing": true,
+ "christmas": true,
+ "knight": true,
"rainbow_mood": true,
"rainbow_swirl": true,
+ "rgb_test": true,
"snake": true,
- "knight": true,
- "christmas": true,
"static_gradient": true,
- "rgb_test": true,
- "alternating": true,
"twinkle": true
- }
- },
- "ws2812": {
- "pin": "B15",
- "driver": "spi"
+ },
+ "led_count": 20
},
- "processor": "STM32F072",
- "bootloader": "stm32-dfu",
- "features": {
- "bootmagic": true,
- "mousekey": true,
- "extrakey": true,
- "console": true,
- "command": true,
- "nkro": true,
- "backlight": true,
- "rgblight": true
+ "url": "https://cannonkeys.com",
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x5A65",
+ "vid": "0xCA04"
},
- "qmk": {
- "locking": {
- "enabled": true,
- "resync": true
- }
+ "ws2812": {
+ "driver": "spi",
+ "pin": "B15"
},
- "community_layouts": ["65_ansi_blocker", "65_ansi_blocker_split_bs", "65_ansi_blocker_tsangan", "65_iso_blocker"],
+ "community_layouts": ["65_ansi_blocker", "65_ansi_blocker_split_bs", "65_ansi_blocker_tsangan", "65_ansi_blocker_tsangan_split_bs", "65_iso_blocker"],
"layouts": {
- "LAYOUT_default": {
+ "LAYOUT_65_ansi_blocker": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
@@ -72,10 +72,8 @@
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
- {"matrix": [0, 13], "x": 13, "y": 0},
- {"matrix": [0, 14], "x": 14, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
{"matrix": [0, 15], "x": 15, "y": 0},
-
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
@@ -91,7 +89,6 @@
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [1, 15], "x": 15, "y": 1},
-
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
@@ -104,12 +101,9 @@
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
- {"matrix": [2, 12], "x": 12.75, "y": 2},
- {"matrix": [2, 13], "x": 13.75, "y": 2, "w": 1.25},
+ {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [2, 15], "x": 15, "y": 2},
-
- {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
- {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
@@ -123,7 +117,6 @@
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"matrix": [3, 15], "x": 15, "y": 3},
-
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
{"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
@@ -135,7 +128,7 @@
{"matrix": [4, 15], "x": 15, "y": 4}
]
},
- "LAYOUT_65_ansi_blocker": {
+ "LAYOUT_65_ansi_blocker_split_bs": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
@@ -150,9 +143,9 @@
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
- {"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
{"matrix": [0, 15], "x": 15, "y": 0},
-
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
@@ -168,7 +161,6 @@
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [1, 15], "x": 15, "y": 1},
-
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
@@ -183,7 +175,6 @@
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [2, 15], "x": 15, "y": 2},
-
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
@@ -198,7 +189,6 @@
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"matrix": [3, 15], "x": 15, "y": 3},
-
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
{"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
@@ -210,7 +200,7 @@
{"matrix": [4, 15], "x": 15, "y": 4}
]
},
- "LAYOUT_65_ansi_blocker_split_bs": {
+ "LAYOUT_65_ansi_blocker_tsangan": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
@@ -225,10 +215,8 @@
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
- {"matrix": [0, 13], "x": 13, "y": 0},
- {"matrix": [0, 14], "x": 14, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
{"matrix": [0, 15], "x": 15, "y": 0},
-
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
@@ -244,7 +232,6 @@
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [1, 15], "x": 15, "y": 1},
-
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
@@ -259,7 +246,6 @@
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [2, 15], "x": 15, "y": 2},
-
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
@@ -274,19 +260,17 @@
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"matrix": [3, 15], "x": 15, "y": 3},
-
- {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
- {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
- {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
- {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
- {"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
- {"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 12], "x": 13, "y": 4},
{"matrix": [4, 13], "x": 14, "y": 4},
{"matrix": [4, 15], "x": 15, "y": 4}
]
},
- "LAYOUT_65_ansi_blocker_tsangan": {
+ "LAYOUT_65_ansi_blocker_tsangan_split_bs": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
@@ -301,9 +285,9 @@
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
- {"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
{"matrix": [0, 15], "x": 15, "y": 0},
-
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
@@ -319,7 +303,6 @@
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [1, 15], "x": 15, "y": 1},
-
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
@@ -334,7 +317,6 @@
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [2, 15], "x": 15, "y": 2},
-
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
@@ -349,7 +331,6 @@
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"matrix": [3, 15], "x": 15, "y": 3},
-
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
{"matrix": [4, 1], "x": 1.5, "y": 4},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
@@ -377,7 +358,6 @@
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
{"matrix": [0, 15], "x": 15, "y": 0},
-
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
@@ -392,7 +372,6 @@
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 15], "x": 15, "y": 1},
-
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
@@ -408,7 +387,6 @@
{"matrix": [2, 12], "x": 12.75, "y": 2},
{"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
{"matrix": [2, 15], "x": 15, "y": 2},
-
{"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
{"matrix": [3, 1], "x": 1.25, "y": 3},
{"matrix": [3, 2], "x": 2.25, "y": 3},
@@ -424,7 +402,80 @@
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"matrix": [3, 15], "x": 15, "y": 3},
-
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 12], "x": 13, "y": 4},
+ {"matrix": [4, 13], "x": 14, "y": 4},
+ {"matrix": [4, 15], "x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_default": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
+ {"matrix": [0, 15], "x": 15, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 15], "x": 15, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 2, "w": 1.25},
+ {"matrix": [2, 15], "x": 15, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [3, 15], "x": 15, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
{"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
diff --git a/keyboards/cannonkeys/vector/keyboard.json b/keyboards/cannonkeys/vector/keyboard.json
index 46fc0b4578..1c3e6e0ac2 100644
--- a/keyboards/cannonkeys/vector/keyboard.json
+++ b/keyboards/cannonkeys/vector/keyboard.json
@@ -21,7 +21,6 @@
"on_state": 0
},
"processor": "STM32F072",
- "url": "",
"usb": {
"device_version": "1.0.0",
"vid": "0xCA04",
diff --git a/keyboards/capsunlocked/cu24/keyboard.json b/keyboards/capsunlocked/cu24/keyboard.json
index ceec64611c..db367ceba3 100644
--- a/keyboards/capsunlocked/cu24/keyboard.json
+++ b/keyboards/capsunlocked/cu24/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "CU24",
"manufacturer": "Yiancar/CapsUnlocked",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/capsunlocked/cu65/keyboard.json b/keyboards/capsunlocked/cu65/keyboard.json
index 80f1149661..aa45e9e498 100644
--- a/keyboards/capsunlocked/cu65/keyboard.json
+++ b/keyboards/capsunlocked/cu65/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "CU65",
"manufacturer": "CapsUnlocked",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4355",
diff --git a/keyboards/capsunlocked/cu75/keyboard.json b/keyboards/capsunlocked/cu75/keyboard.json
index f7a8356bcc..b226f74bf9 100644
--- a/keyboards/capsunlocked/cu75/keyboard.json
+++ b/keyboards/capsunlocked/cu75/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "CU75",
"manufacturer": "LFKeyboards/CapsUnlocked",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/centromere/keyboard.json b/keyboards/centromere/keyboard.json
index c190bd84d7..01dd6c9875 100644
--- a/keyboards/centromere/keyboard.json
+++ b/keyboards/centromere/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Centromere",
"manufacturer": "Southpaw Design",
- "url": "",
"maintainer": "spe2",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/checkerboards/axon40/keyboard.json b/keyboards/checkerboards/axon40/keyboard.json
index c0b67b611d..432602659e 100644
--- a/keyboards/checkerboards/axon40/keyboard.json
+++ b/keyboards/checkerboards/axon40/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Axon40",
"manufacturer": "Nasp",
- "url": "",
"maintainer": "nasp",
"usb": {
"vid": "0x7070",
diff --git a/keyboards/checkerboards/candybar_ortho/keyboard.json b/keyboards/checkerboards/candybar_ortho/keyboard.json
index d7908a04f4..1b9e264653 100644
--- a/keyboards/checkerboards/candybar_ortho/keyboard.json
+++ b/keyboards/checkerboards/candybar_ortho/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "CandyBar Ortho",
"manufacturer": "Nasp",
- "url": "",
"maintainer": "nasp",
"usb": {
"vid": "0x7070",
diff --git a/keyboards/checkerboards/g_idb60/keyboard.json b/keyboards/checkerboards/g_idb60/keyboard.json
index 16f70dc868..cf1530b50b 100644
--- a/keyboards/checkerboards/g_idb60/keyboard.json
+++ b/keyboards/checkerboards/g_idb60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "G_IDB60",
"manufacturer": "Nasp",
- "url": "",
"maintainer": "npspears",
"usb": {
"vid": "0x7070",
diff --git a/keyboards/checkerboards/nop60/keyboard.json b/keyboards/checkerboards/nop60/keyboard.json
index 9b86a3936a..fb0e7b23df 100644
--- a/keyboards/checkerboards/nop60/keyboard.json
+++ b/keyboards/checkerboards/nop60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "NOP60",
"manufacturer": "Nasp",
- "url": "",
"maintainer": "nasp",
"usb": {
"vid": "0x7070",
diff --git a/keyboards/checkerboards/plexus75/keyboard.json b/keyboards/checkerboards/plexus75/keyboard.json
index 14bd4deb75..e457f7f3e6 100644
--- a/keyboards/checkerboards/plexus75/keyboard.json
+++ b/keyboards/checkerboards/plexus75/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Plexus75",
"manufacturer": "Nasp",
- "url": "",
"maintainer": "npspears",
"usb": {
"vid": "0x7070",
diff --git a/keyboards/checkerboards/quark/keyboard.json b/keyboards/checkerboards/quark/keyboard.json
index 4bb7c7fef7..90d378b528 100644
--- a/keyboards/checkerboards/quark/keyboard.json
+++ b/keyboards/checkerboards/quark/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "QUARK",
"manufacturer": "Nasp",
- "url": "",
"maintainer": "nasp",
"usb": {
"vid": "0x7070",
diff --git a/keyboards/checkerboards/ud40_ortho_alt/keyboard.json b/keyboards/checkerboards/ud40_ortho_alt/keyboard.json
index 2aae3d1cc8..aaf5fb3e61 100644
--- a/keyboards/checkerboards/ud40_ortho_alt/keyboard.json
+++ b/keyboards/checkerboards/ud40_ortho_alt/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "UD40_Ortho_Alt",
"manufacturer": "Nasp",
- "url": "",
"maintainer": "nasp",
"usb": {
"vid": "0x7070",
diff --git a/keyboards/chickenman/ciel/keyboard.json b/keyboards/chickenman/ciel/keyboard.json
index f28995794c..45c4c76048 100644
--- a/keyboards/chickenman/ciel/keyboard.json
+++ b/keyboards/chickenman/ciel/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Ciel",
"manufacturer": "ChickenMan",
- "url": "",
"maintainer": "ramonimbao",
"usb": {
"vid": "0xC41C",
diff --git a/keyboards/chickenman/ciel65/keyboard.json b/keyboards/chickenman/ciel65/keyboard.json
index 8c316759a8..7943e44311 100644
--- a/keyboards/chickenman/ciel65/keyboard.json
+++ b/keyboards/chickenman/ciel65/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Ciel65",
"manufacturer": "ChickenMan",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xC41C",
@@ -26,10 +25,8 @@
},
"rgblight": {
"led_count": 14,
- "hue_steps": 8,
"saturation_steps": 8,
"brightness_steps": 8,
- "max_brightness": 255,
"sleep": true,
"animations": {
"alternating": true,
diff --git a/keyboards/cipulot/common/ec_board.c b/keyboards/cipulot/common/ec_board.c
index 0ccb9f6d3c..b15543e49e 100644
--- a/keyboards/cipulot/common/ec_board.c
+++ b/keyboards/cipulot/common/ec_board.c
@@ -36,7 +36,7 @@ void eeconfig_init_kb(void) {
}
}
// Write default value to EEPROM now
- eeconfig_update_kb_datablock(&eeprom_ec_config);
+ eeconfig_update_kb_datablock(&eeprom_ec_config, 0, EECONFIG_KB_DATA_SIZE);
eeconfig_init_user();
}
@@ -44,7 +44,7 @@ void eeconfig_init_kb(void) {
// On Keyboard startup
void keyboard_post_init_kb(void) {
// Read custom menu variables from memory
- eeconfig_read_kb_datablock(&eeprom_ec_config);
+ eeconfig_read_kb_datablock(&eeprom_ec_config, 0, EECONFIG_KB_DATA_SIZE);
// Set runtime values to EEPROM values
ec_config.actuation_mode = eeprom_ec_config.actuation_mode;
diff --git a/keyboards/cipulot/common/eeprom_tools.h b/keyboards/cipulot/common/eeprom_tools.h
deleted file mode 100644
index b3c90d8759..0000000000
--- a/keyboards/cipulot/common/eeprom_tools.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/* Copyright 2023 Cipulot
- *
- * 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 3 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 "eeprom.h"
-
-#if (EECONFIG_KB_DATA_SIZE) > 0
-# define EEPROM_KB_PARTIAL_UPDATE(__struct, __field) eeprom_update_block(&(__struct.__field), (void *)((void *)(EECONFIG_KB_DATABLOCK) + offsetof(typeof(__struct), __field)), sizeof(__struct.__field))
-#endif
-
-#if (EECONFIG_USER_DATA_SIZE) > 0
-# define EEPROM_USER_PARTIAL_UPDATE(__struct, __field) eeprom_update_block(&(__struct.__field), (void *)((void *)(EECONFIG_USER_DATABLOCK) + offsetof(typeof(__struct), __field)), sizeof(__struct.__field))
-#endif
diff --git a/keyboards/cipulot/common/via_ec.c b/keyboards/cipulot/common/via_ec.c
index ed34a579b2..7be6edd026 100644
--- a/keyboards/cipulot/common/via_ec.c
+++ b/keyboards/cipulot/common/via_ec.c
@@ -13,7 +13,6 @@
* 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 "eeprom_tools.h"
#include "ec_switch_matrix.h"
#include "action.h"
#include "print.h"
@@ -73,7 +72,7 @@ void via_config_set_value(uint8_t *data) {
uprintf("# Actuation Mode: Rapid Trigger #\n");
uprintf("#################################\n");
}
- EEPROM_KB_PARTIAL_UPDATE(eeprom_ec_config, actuation_mode);
+ eeconfig_update_kb_datablock_field(eeprom_ec_config, actuation_mode);
break;
}
case id_mode_0_actuation_threshold: {
@@ -293,7 +292,7 @@ void ec_save_threshold_data(uint8_t option) {
ec_rescale_values(3);
ec_rescale_values(4);
}
- eeconfig_update_kb_datablock(&eeprom_ec_config);
+ eeconfig_update_kb_datablock(&eeprom_ec_config, 0, EECONFIG_KB_DATA_SIZE);
uprintf("####################################\n");
uprintf("# New thresholds applied and saved #\n");
uprintf("####################################\n");
@@ -321,7 +320,7 @@ void ec_save_bottoming_reading(void) {
ec_rescale_values(2);
ec_rescale_values(3);
ec_rescale_values(4);
- eeconfig_update_kb_datablock(&eeprom_ec_config);
+ eeconfig_update_kb_datablock(&eeprom_ec_config, 0, EECONFIG_KB_DATA_SIZE);
}
// Show the calibration data
diff --git a/keyboards/cipulot/ec_980c/ec_980c.c b/keyboards/cipulot/ec_980c/ec_980c.c
index eaa636ede6..7a2062a4e4 100644
--- a/keyboards/cipulot/ec_980c/ec_980c.c
+++ b/keyboards/cipulot/ec_980c/ec_980c.c
@@ -44,7 +44,7 @@ void eeconfig_init_kb(void) {
}
}
// Write default value to EEPROM now
- eeconfig_update_kb_datablock(&eeprom_ec_config);
+ eeconfig_update_kb_datablock(&eeprom_ec_config, 0, EECONFIG_KB_DATA_SIZE);
eeconfig_init_user();
}
@@ -52,7 +52,7 @@ void eeconfig_init_kb(void) {
// On Keyboard startup
void keyboard_post_init_kb(void) {
// Read custom menu variables from memory
- eeconfig_read_kb_datablock(&eeprom_ec_config);
+ eeconfig_read_kb_datablock(&eeprom_ec_config, 0, EECONFIG_KB_DATA_SIZE);
// Set runtime values to EEPROM values
ec_config.actuation_mode = eeprom_ec_config.actuation_mode;
diff --git a/keyboards/cipulot/ec_typek/ec_typek.c b/keyboards/cipulot/ec_typek/ec_typek.c
index d4241f66f1..31616afc02 100644
--- a/keyboards/cipulot/ec_typek/ec_typek.c
+++ b/keyboards/cipulot/ec_typek/ec_typek.c
@@ -44,7 +44,7 @@ void eeconfig_init_kb(void) {
}
}
// Write default value to EEPROM now
- eeconfig_update_kb_datablock(&eeprom_ec_config);
+ eeconfig_update_kb_datablock(&eeprom_ec_config, 0, EECONFIG_KB_DATA_SIZE);
eeconfig_init_user();
}
@@ -52,7 +52,7 @@ void eeconfig_init_kb(void) {
// On Keyboard startup
void keyboard_post_init_kb(void) {
// Read custom menu variables from memory
- eeconfig_read_kb_datablock(&eeprom_ec_config);
+ eeconfig_read_kb_datablock(&eeprom_ec_config, 0, EECONFIG_KB_DATA_SIZE);
// Set runtime values to EEPROM values
ec_config.actuation_mode = eeprom_ec_config.actuation_mode;
diff --git a/keyboards/cipulot/kallos/keyboard.json b/keyboards/cipulot/kallos/keyboard.json
index 731b37fda9..8a2e45e012 100644
--- a/keyboards/cipulot/kallos/keyboard.json
+++ b/keyboards/cipulot/kallos/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Kallos",
"manufacturer": "Cipulot",
- "url": "",
"maintainer": "Cipulot",
"usb": {
"vid": "0x6369",
diff --git a/keyboards/ck60i/keyboard.json b/keyboards/ck60i/keyboard.json
index 72b57598a4..70535c5a76 100644
--- a/keyboards/ck60i/keyboard.json
+++ b/keyboards/ck60i/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "CK60i",
"manufacturer": "CandyKeys",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x434B",
diff --git a/keyboards/ckeys/nakey/keyboard.json b/keyboards/ckeys/nakey/keyboard.json
index 85f744217f..e9cbced1f1 100644
--- a/keyboards/ckeys/nakey/keyboard.json
+++ b/keyboards/ckeys/nakey/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "naKey",
"manufacturer": "cKeys",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/ckeys/obelus/keyboard.json b/keyboards/ckeys/obelus/keyboard.json
index 797bb870b9..39e3cbb115 100644
--- a/keyboards/ckeys/obelus/keyboard.json
+++ b/keyboards/ckeys/obelus/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Obelus",
"manufacturer": "cKeys",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/clawsome/bookerboard/keyboard.json b/keyboards/clawsome/bookerboard/keyboard.json
index a72260eb60..7e3065863a 100644
--- a/keyboards/clawsome/bookerboard/keyboard.json
+++ b/keyboards/clawsome/bookerboard/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Bookerboard",
"manufacturer": "AlisGraveNil",
- "url": "",
"maintainer": "AlisGraveNil",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/clawsome/sidekick/keyboard.json b/keyboards/clawsome/sidekick/keyboard.json
index 4f535d09aa..f2712a367d 100644
--- a/keyboards/clawsome/sidekick/keyboard.json
+++ b/keyboards/clawsome/sidekick/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Sidekick",
"manufacturer": "AlisGraveNil",
- "url": "",
"maintainer": "AlisGraveNil",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/clueboard/17/keyboard.json b/keyboards/clueboard/17/keyboard.json
index d6aec9cfcc..0da234142d 100644
--- a/keyboards/clueboard/17/keyboard.json
+++ b/keyboards/clueboard/17/keyboard.json
@@ -32,15 +32,12 @@
"static_gradient": true,
"twinkle": true
},
- "brightness_steps": 17,
"hue_steps": 10,
- "led_count": 4,
- "saturation_steps": 17
+ "led_count": 4
},
"ws2812": {
"pin": "F6"
},
- "url": "",
"usb": {
"device_version": "0.0.1",
"pid": "0x2312",
diff --git a/keyboards/clueboard/2x1800/2018/keyboard.json b/keyboards/clueboard/2x1800/2018/keyboard.json
index 1a926c62b9..e7b4c95ce3 100644
--- a/keyboards/clueboard/2x1800/2018/keyboard.json
+++ b/keyboards/clueboard/2x1800/2018/keyboard.json
@@ -44,7 +44,6 @@
"twinkle": true
},
"brightness_steps": 8,
- "hue_steps": 8,
"led_count": 16,
"saturation_steps": 8
},
diff --git a/keyboards/clueboard/66/rev1/keyboard.json b/keyboards/clueboard/66/rev1/keyboard.json
index ca1e3a6553..4743a125b9 100644
--- a/keyboards/clueboard/66/rev1/keyboard.json
+++ b/keyboards/clueboard/66/rev1/keyboard.json
@@ -33,10 +33,8 @@
"static_gradient": true,
"twinkle": true
},
- "brightness_steps": 17,
"hue_steps": 10,
- "led_count": 14,
- "saturation_steps": 17
+ "led_count": 14
},
"ws2812": {
"pin": "B2"
diff --git a/keyboards/clueboard/66/rev2/keyboard.json b/keyboards/clueboard/66/rev2/keyboard.json
index fea4f8d39b..39ca7c4841 100644
--- a/keyboards/clueboard/66/rev2/keyboard.json
+++ b/keyboards/clueboard/66/rev2/keyboard.json
@@ -34,10 +34,8 @@
"static_gradient": true,
"twinkle": true
},
- "brightness_steps": 17,
"hue_steps": 32,
- "led_count": 14,
- "saturation_steps": 17
+ "led_count": 14
},
"ws2812": {
"pin": "D7"
diff --git a/keyboards/clueboard/66/rev3/keyboard.json b/keyboards/clueboard/66/rev3/keyboard.json
index 4553979d8a..7713c73481 100644
--- a/keyboards/clueboard/66/rev3/keyboard.json
+++ b/keyboards/clueboard/66/rev3/keyboard.json
@@ -34,10 +34,8 @@
"static_gradient": true,
"twinkle": true
},
- "brightness_steps": 17,
"hue_steps": 32,
- "led_count": 18,
- "saturation_steps": 17
+ "led_count": 18
},
"ws2812": {
"pin": "D7"
diff --git a/keyboards/clueboard/66/rev4/keyboard.json b/keyboards/clueboard/66/rev4/keyboard.json
index dbc1b94915..d834b688f9 100644
--- a/keyboards/clueboard/66/rev4/keyboard.json
+++ b/keyboards/clueboard/66/rev4/keyboard.json
@@ -32,10 +32,8 @@
"static_gradient": true,
"twinkle": true
},
- "brightness_steps": 17,
"hue_steps": 32,
- "led_count": 18,
- "saturation_steps": 17
+ "led_count": 18
},
"ws2812": {
"pin": "D7"
diff --git a/keyboards/clueboard/66_hotswap/prototype/keyboard.json b/keyboards/clueboard/66_hotswap/prototype/keyboard.json
index 9d0b0dd27c..1325612ed3 100644
--- a/keyboards/clueboard/66_hotswap/prototype/keyboard.json
+++ b/keyboards/clueboard/66_hotswap/prototype/keyboard.json
@@ -39,10 +39,8 @@
"static_gradient": true,
"twinkle": true
},
- "brightness_steps": 17,
"hue_steps": 32,
- "led_count": 26,
- "saturation_steps": 17
+ "led_count": 26
},
"ws2812": {
"pin": "D7"
diff --git a/keyboards/clueboard/california/keyboard.json b/keyboards/clueboard/california/keyboard.json
index 66b4b484e2..15467d4deb 100644
--- a/keyboards/clueboard/california/keyboard.json
+++ b/keyboards/clueboard/california/keyboard.json
@@ -1,6 +1,5 @@
{
"keyboard_name": "Clueboard California",
- "url": "",
"maintainer": "skullydazed",
"processor": "STM32F303",
"board": "QMK_PROTON_C",
diff --git a/keyboards/clueboard/card/keyboard.json b/keyboards/clueboard/card/keyboard.json
index 0425819ed7..3929c073d7 100644
--- a/keyboards/clueboard/card/keyboard.json
+++ b/keyboards/clueboard/card/keyboard.json
@@ -25,10 +25,8 @@
"rows": ["F0", "F5", "F4", "B4"]
},
"rgblight": {
- "brightness_steps": 17,
"hue_steps": 10,
- "led_count": 4,
- "saturation_steps": 17
+ "led_count": 4
},
"ws2812": {
"pin": "E6"
diff --git a/keyboards/cmm_studio/fuji65/keyboard.json b/keyboards/cmm_studio/fuji65/keyboard.json
index c4f1e5156e..84e539a636 100644
--- a/keyboards/cmm_studio/fuji65/keyboard.json
+++ b/keyboards/cmm_studio/fuji65/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Fuji65",
"manufacturer": "CMM.Studio",
- "url": "",
"maintainer": "CMMS-Freather",
"usb": {
"vid": "0x434D",
diff --git a/keyboards/cmm_studio/saka68/hotswap/keyboard.json b/keyboards/cmm_studio/saka68/hotswap/keyboard.json
index 6dc3ec639a..8ea3185bf7 100644
--- a/keyboards/cmm_studio/saka68/hotswap/keyboard.json
+++ b/keyboards/cmm_studio/saka68/hotswap/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Saka68 Hotswap",
"manufacturer": "CMM.Studio",
- "url": "",
"maintainer": "CMMS-Freather",
"usb": {
"vid": "0x434D",
diff --git a/keyboards/cmm_studio/saka68/solder/keyboard.json b/keyboards/cmm_studio/saka68/solder/keyboard.json
index d5aea40763..1ce357aabf 100644
--- a/keyboards/cmm_studio/saka68/solder/keyboard.json
+++ b/keyboards/cmm_studio/saka68/solder/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Saka68 Solder",
"manufacturer": "CMM.Studio",
- "url": "",
"maintainer": "CMMS-Freather",
"usb": {
"vid": "0x434D",
diff --git a/keyboards/coarse/ixora/keyboard.json b/keyboards/coarse/ixora/keyboard.json
index 33ba2270ac..ebcc345d52 100644
--- a/keyboards/coarse/ixora/keyboard.json
+++ b/keyboards/coarse/ixora/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Ixora Rev1",
"manufacturer": "PeiorisBoards",
- "url": "",
"maintainer": "Peioris",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/coarse/vinta/keyboard.json b/keyboards/coarse/vinta/keyboard.json
index df9aa7e5a1..07d5edb29b 100644
--- a/keyboards/coarse/vinta/keyboard.json
+++ b/keyboards/coarse/vinta/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Vinta R1",
"manufacturer": "PeiorisBoards",
- "url": "",
"maintainer": "Peioris",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/concreteflowers/cor/keyboard.json b/keyboards/concreteflowers/cor/keyboard.json
index c2fa4379df..a4553229a7 100644
--- a/keyboards/concreteflowers/cor/keyboard.json
+++ b/keyboards/concreteflowers/cor/keyboard.json
@@ -17,7 +17,6 @@
"cols": ["F5", "F6", "F7", "C6", "C7", "B1", "B7", "B5", "B4", "D7", "D6", "D4", "D5", "D3", "D2", "D1", "D0"]
},
"processor": "atmega32u4",
- "url": "",
"usb": {
"device_version": "1.0.0",
"vid": "0x5001",
diff --git a/keyboards/concreteflowers/cor_tkl/keyboard.json b/keyboards/concreteflowers/cor_tkl/keyboard.json
index 6a797d644c..3d98077e13 100644
--- a/keyboards/concreteflowers/cor_tkl/keyboard.json
+++ b/keyboards/concreteflowers/cor_tkl/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Cor TKL",
"manufacturer": "concreteflowers",
- "url": "",
"maintainer": "ramonimbao",
"community_layouts": [
"tkl_f13_ansi",
diff --git a/keyboards/contra/keyboard.json b/keyboards/contra/keyboard.json
index ffa32d6555..b3179564fe 100644
--- a/keyboards/contra/keyboard.json
+++ b/keyboards/contra/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Contra",
"manufacturer": "Cartel",
- "url": "",
"maintainer": "qmk",
"features": {
"bootmagic": true,
diff --git a/keyboards/contra/keymaps/default/keymap.c b/keyboards/contra/keymaps/default/keymap.c
index 415e22e81a..645005769a 100644
--- a/keyboards/contra/keymaps/default/keymap.c
+++ b/keyboards/contra/keymaps/default/keymap.c
@@ -222,9 +222,9 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (!eeconfig_is_enabled()) {
eeconfig_init();
}
- keymap_config.raw = eeconfig_read_keymap();
+ eeconfig_read_keymap(&keymap_config);
keymap_config.nkro = 1;
- eeconfig_update_keymap(keymap_config.raw);
+ eeconfig_update_keymap(&keymap_config);
}
return false;
break;
diff --git a/keyboards/converter/adb_usb/info.json b/keyboards/converter/adb_usb/info.json
index 3fbe2c0c74..3452efd709 100644
--- a/keyboards/converter/adb_usb/info.json
+++ b/keyboards/converter/adb_usb/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "ADB to USB Keyboard Converter",
"manufacturer": "QMK",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/converter/ibm_terminal/keyboard.json b/keyboards/converter/ibm_terminal/keyboard.json
index b95ea58d20..d37bb2b147 100644
--- a/keyboards/converter/ibm_terminal/keyboard.json
+++ b/keyboards/converter/ibm_terminal/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "IBM Terminal to USB Keyboard Converter",
"manufacturer": "QMK",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/converter/m0110_usb/keyboard.json b/keyboards/converter/m0110_usb/keyboard.json
index 11b83bbb18..c4803b6e88 100644
--- a/keyboards/converter/m0110_usb/keyboard.json
+++ b/keyboards/converter/m0110_usb/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Apple M0110(A) to USB Keyboard Converter",
"manufacturer": "QMK",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/converter/numeric_keypad_iie/keyboard.json b/keyboards/converter/numeric_keypad_iie/keyboard.json
index 6dcffe7e21..6d64654846 100644
--- a/keyboards/converter/numeric_keypad_iie/keyboard.json
+++ b/keyboards/converter/numeric_keypad_iie/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Numeric Keypad IIe",
"manufacturer": "Apple Inc.",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/converter/palm_usb/stowaway/keyboard.json b/keyboards/converter/palm_usb/stowaway/keyboard.json
index c93957b7d8..6488b5c23c 100644
--- a/keyboards/converter/palm_usb/stowaway/keyboard.json
+++ b/keyboards/converter/palm_usb/stowaway/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Stowaway Converter",
"manufacturer": "QMK",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/converter/siemens_tastatur/keyboard.json b/keyboards/converter/siemens_tastatur/keyboard.json
index 710a2902cb..8f9f31bef1 100644
--- a/keyboards/converter/siemens_tastatur/keyboard.json
+++ b/keyboards/converter/siemens_tastatur/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Siemens Tastatur",
"manufacturer": "Yiancar-Designs",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x8968",
diff --git a/keyboards/converter/sun_usb/info.json b/keyboards/converter/sun_usb/info.json
index e4031595ad..57c38520ff 100644
--- a/keyboards/converter/sun_usb/info.json
+++ b/keyboards/converter/sun_usb/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Sun Keyboard Converter",
"manufacturer": "QMK",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/converter/usb_usb/info.json b/keyboards/converter/usb_usb/info.json
index 747fd49782..97d048160f 100644
--- a/keyboards/converter/usb_usb/info.json
+++ b/keyboards/converter/usb_usb/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "USB to USB Converter",
"manufacturer": "QMK",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/converter/xt_usb/keyboard.json b/keyboards/converter/xt_usb/keyboard.json
index 649b283329..08e697b8e9 100644
--- a/keyboards/converter/xt_usb/keyboard.json
+++ b/keyboards/converter/xt_usb/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "IBM PC XT Keyboard Converter",
"manufacturer": "QMK",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/crawlpad/keyboard.json b/keyboards/crawlpad/keyboard.json
index d4f1c43971..a10d1ca9c3 100644
--- a/keyboards/crawlpad/keyboard.json
+++ b/keyboards/crawlpad/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Crawlpad",
"manufacturer": "WoodKeys.Click",
- "url": "",
"maintainer": "colemarkham",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/crazy_keyboard_68/keyboard.json b/keyboards/crazy_keyboard_68/keyboard.json
index a53013bfb9..f87a3675af 100644
--- a/keyboards/crazy_keyboard_68/keyboard.json
+++ b/keyboards/crazy_keyboard_68/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Crazy_Keyboard 68",
"manufacturer": "chent7",
- "url": "",
"maintainer": "chent7",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/creatkeebs/glacier/keyboard.json b/keyboards/creatkeebs/glacier/keyboard.json
index 61e6bd9136..e1e94ab8eb 100644
--- a/keyboards/creatkeebs/glacier/keyboard.json
+++ b/keyboards/creatkeebs/glacier/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "glacier",
"manufacturer": "creatkeebs",
- "url": "",
"maintainer": "Timliuzhaolu",
"usb": {
"vid": "0x0410",
diff --git a/keyboards/crimsonkeyboards/resume1800/keyboard.json b/keyboards/crimsonkeyboards/resume1800/keyboard.json
index aa54b04801..9b68049c6d 100644
--- a/keyboards/crimsonkeyboards/resume1800/keyboard.json
+++ b/keyboards/crimsonkeyboards/resume1800/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Resume1800",
"manufacturer": "CrimsonKeyboards",
- "url": "",
"maintainer": "CrimsonKeyboards",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/crowboard/keyboard.json b/keyboards/crowboard/keyboard.json
index 1a9502cbd1..2686a3d99c 100644
--- a/keyboards/crowboard/keyboard.json
+++ b/keyboards/crowboard/keyboard.json
@@ -15,7 +15,6 @@
"rows": ["GP14", "GP15", "GP16", "GP17"]
},
"processor": "RP2040",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0000",
diff --git a/keyboards/cutie_club/borsdorf/keyboard.json b/keyboards/cutie_club/borsdorf/keyboard.json
index 30b5a74d64..ddf8dfeda4 100644
--- a/keyboards/cutie_club/borsdorf/keyboard.json
+++ b/keyboards/cutie_club/borsdorf/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Borsdorf",
"manufacturer": "Cutie Club",
- "url": "",
"maintainer": "Cutie Club",
"usb": {
"vid": "0xFB9C",
diff --git a/keyboards/cutie_club/fidelity/keyboard.json b/keyboards/cutie_club/fidelity/keyboard.json
index 905460d64e..e1ca2a430e 100644
--- a/keyboards/cutie_club/fidelity/keyboard.json
+++ b/keyboards/cutie_club/fidelity/keyboard.json
@@ -25,7 +25,6 @@
"resync": true
}
},
- "url": "",
"usb": {
"device_version": "0.0.1",
"pid": "0x4D1B",
diff --git a/keyboards/cutie_club/giant_macro_pad/keyboard.json b/keyboards/cutie_club/giant_macro_pad/keyboard.json
index f5cde334c0..2eb2542603 100644
--- a/keyboards/cutie_club/giant_macro_pad/keyboard.json
+++ b/keyboards/cutie_club/giant_macro_pad/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Cupar19 Giant Macro Pad",
"manufacturer": "Cutie Club",
- "url": "",
"maintainer": "cutie-club",
"usb": {
"vid": "0xFB9C",
diff --git a/keyboards/cutie_club/keebcats/denis/keyboard.json b/keyboards/cutie_club/keebcats/denis/keyboard.json
index 098ae39cd2..052e22c1b1 100644
--- a/keyboards/cutie_club/keebcats/denis/keyboard.json
+++ b/keyboards/cutie_club/keebcats/denis/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Keebcats Denis 80",
"manufacturer": "Cutie Club",
- "url": "",
"maintainer": "Cutie Club",
"usb": {
"vid": "0xFB9C",
diff --git a/keyboards/cutie_club/keebcats/dougal/keyboard.json b/keyboards/cutie_club/keebcats/dougal/keyboard.json
index 915e3ad15c..c607977564 100644
--- a/keyboards/cutie_club/keebcats/dougal/keyboard.json
+++ b/keyboards/cutie_club/keebcats/dougal/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Keebcats Dougal 65",
"manufacturer": "Cutie Club",
- "url": "",
"maintainer": "Cutie Club",
"usb": {
"vid": "0xFB9C",
diff --git a/keyboards/cutie_club/novus/keyboard.json b/keyboards/cutie_club/novus/keyboard.json
index 97bb81a71f..a5f47f8d51 100644
--- a/keyboards/cutie_club/novus/keyboard.json
+++ b/keyboards/cutie_club/novus/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Novus",
"manufacturer": "Cutie Club",
- "url": "",
"maintainer": "Cutie Club",
"usb": {
"vid": "0xFB9C",
diff --git a/keyboards/cutie_club/wraith/keyboard.json b/keyboards/cutie_club/wraith/keyboard.json
index 7cc29caf25..6da586acfe 100644
--- a/keyboards/cutie_club/wraith/keyboard.json
+++ b/keyboards/cutie_club/wraith/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Wraith",
"manufacturer": "Amber",
- "url": "",
"maintainer": "amberstarlight",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/cx60/keyboard.json b/keyboards/cx60/keyboard.json
index 9748d934a6..24bbee5a28 100644
--- a/keyboards/cx60/keyboard.json
+++ b/keyboards/cx60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "CX60",
"manufacturer": "CX60",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4358",
diff --git a/keyboards/cxt_studio/12e3/keyboard.json b/keyboards/cxt_studio/12e3/keyboard.json
index 763f6bd5b9..0b8949cda7 100644
--- a/keyboards/cxt_studio/12e3/keyboard.json
+++ b/keyboards/cxt_studio/12e3/keyboard.json
@@ -64,7 +64,6 @@
{"flags": 4, "matrix": [2, 0], "x": 0, "y": 2}
]
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x12E3",
diff --git a/keyboards/cxt_studio/12e4/keyboard.json b/keyboards/cxt_studio/12e4/keyboard.json
index b48e75f4ca..45d2835af4 100644
--- a/keyboards/cxt_studio/12e4/keyboard.json
+++ b/keyboards/cxt_studio/12e4/keyboard.json
@@ -66,7 +66,6 @@
{"flags": 4, "matrix": [2, 0], "x": 0, "y": 2}
]
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0xC401",
diff --git a/keyboards/dailycraft/bat43/info.json b/keyboards/dailycraft/bat43/info.json
index 19aaa540dd..6b4026f6d4 100644
--- a/keyboards/dailycraft/bat43/info.json
+++ b/keyboards/dailycraft/bat43/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "bat43",
"manufacturer": "yfuku",
- "url": "",
"maintainer": "yfuku",
"usb": {
"vid": "0x5946",
diff --git a/keyboards/dailycraft/claw44/rev1/keyboard.json b/keyboards/dailycraft/claw44/rev1/keyboard.json
index 62b069a490..2391bc262f 100644
--- a/keyboards/dailycraft/claw44/rev1/keyboard.json
+++ b/keyboards/dailycraft/claw44/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "claw44",
"manufacturer": "yfuku",
- "url": "",
"maintainer": "yfuku",
"usb": {
"vid": "0x5946",
diff --git a/keyboards/dailycraft/owl8/keyboard.json b/keyboards/dailycraft/owl8/keyboard.json
index a4a1a70e3e..482a3d905f 100644
--- a/keyboards/dailycraft/owl8/keyboard.json
+++ b/keyboards/dailycraft/owl8/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "owl8",
"manufacturer": "yfuku",
- "url": "",
"maintainer": "yfuku",
"usb": {
"vid": "0x5946",
diff --git a/keyboards/dailycraft/sandbox/rev1/keyboard.json b/keyboards/dailycraft/sandbox/rev1/keyboard.json
index 8658de96df..50a114457d 100644
--- a/keyboards/dailycraft/sandbox/rev1/keyboard.json
+++ b/keyboards/dailycraft/sandbox/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "sandbox rev1",
"manufacturer": "yfuku",
- "url": "",
"maintainer": "yfuku",
"usb": {
"vid": "0x5946",
diff --git a/keyboards/dailycraft/sandbox/rev2/keyboard.json b/keyboards/dailycraft/sandbox/rev2/keyboard.json
index 1eb61ee12c..b1991cf56c 100644
--- a/keyboards/dailycraft/sandbox/rev2/keyboard.json
+++ b/keyboards/dailycraft/sandbox/rev2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "sandbox rev2",
"manufacturer": "yfuku",
- "url": "",
"maintainer": "yfuku",
"usb": {
"vid": "0x5946",
diff --git a/keyboards/dailycraft/stickey4/keyboard.json b/keyboards/dailycraft/stickey4/keyboard.json
index d0e2a491d3..d6ec02f784 100644
--- a/keyboards/dailycraft/stickey4/keyboard.json
+++ b/keyboards/dailycraft/stickey4/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "stickey4",
"manufacturer": "yfuku",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x5946",
diff --git a/keyboards/dailycraft/wings42/rev1/keyboard.json b/keyboards/dailycraft/wings42/rev1/keyboard.json
index f4a3949c61..307b675d06 100644
--- a/keyboards/dailycraft/wings42/rev1/keyboard.json
+++ b/keyboards/dailycraft/wings42/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "wings42 rev1",
"manufacturer": "yfuku",
- "url": "",
"maintainer": "yfuku",
"usb": {
"vid": "0x5946",
diff --git a/keyboards/dailycraft/wings42/rev1_extkeys/keyboard.json b/keyboards/dailycraft/wings42/rev1_extkeys/keyboard.json
index bebe264cc0..ef5b4331b1 100644
--- a/keyboards/dailycraft/wings42/rev1_extkeys/keyboard.json
+++ b/keyboards/dailycraft/wings42/rev1_extkeys/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "wings42 rev1_extkeys",
"manufacturer": "yfuku",
- "url": "",
"maintainer": "yfuku",
"usb": {
"vid": "0x5946",
diff --git a/keyboards/dailycraft/wings42/rev2/keyboard.json b/keyboards/dailycraft/wings42/rev2/keyboard.json
index 3f2cb1b766..4d41f54f3b 100644
--- a/keyboards/dailycraft/wings42/rev2/keyboard.json
+++ b/keyboards/dailycraft/wings42/rev2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "wings42 rev2",
"manufacturer": "yfuku",
- "url": "",
"maintainer": "yfuku",
"usb": {
"vid": "0x5946",
diff --git a/keyboards/daji/seis_cinco/keyboard.json b/keyboards/daji/seis_cinco/keyboard.json
index 358dfc17ce..3957dd4d0c 100644
--- a/keyboards/daji/seis_cinco/keyboard.json
+++ b/keyboards/daji/seis_cinco/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Seis Cinco",
"manufacturer": "Daji",
- "url": "",
"maintainer": "toraifu",
"usb": {
"vid": "0xBF00",
diff --git a/keyboards/dark/magnum_ergo_1/keyboard.json b/keyboards/dark/magnum_ergo_1/keyboard.json
index a52de6decc..6d3b3a5592 100644
--- a/keyboards/dark/magnum_ergo_1/keyboard.json
+++ b/keyboards/dark/magnum_ergo_1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Magnum Ergo 1",
"manufacturer": "Gondolindrim X Dark",
- "url": "",
"maintainer": "Gondolindrim",
"usb": {
"vid": "0x4744",
diff --git a/keyboards/darkproject/kd83a_bfg_edition/keyboard.json b/keyboards/darkproject/kd83a_bfg_edition/keyboard.json
index 23bd2b6981..9f2ad70f12 100644
--- a/keyboards/darkproject/kd83a_bfg_edition/keyboard.json
+++ b/keyboards/darkproject/kd83a_bfg_edition/keyboard.json
@@ -174,7 +174,6 @@
],
"sleep": true
},
- "url": "",
"usb": {
"device_version": "0.0.3",
"pid": "0xE392",
diff --git a/keyboards/darkproject/kd87a_bfg_edition/keyboard.json b/keyboards/darkproject/kd87a_bfg_edition/keyboard.json
index 1e0d7f5e8b..cd6ae14108 100644
--- a/keyboards/darkproject/kd87a_bfg_edition/keyboard.json
+++ b/keyboards/darkproject/kd87a_bfg_edition/keyboard.json
@@ -180,7 +180,6 @@
],
"sleep": true
},
- "url": "",
"usb": {
"device_version": "0.0.3",
"pid": "0xE393",
diff --git a/keyboards/darmoshark/k3/keyboard.json b/keyboards/darmoshark/k3/keyboard.json
index ff5047b93a..e62d1908ed 100644
--- a/keyboards/darmoshark/k3/keyboard.json
+++ b/keyboards/darmoshark/k3/keyboard.json
@@ -2,7 +2,6 @@
"manufacturer": "Darmoshark",
"keyboard_name": "K3 QMK",
"maintainer": "Proceee",
- "url": "",
"processor": "WB32FQ95",
"bootloader": "wb32-dfu",
"usb": {
diff --git a/keyboards/dasky/reverb/keyboard.json b/keyboards/dasky/reverb/keyboard.json
index e7e203ebf6..bfeb9ef675 100644
--- a/keyboards/dasky/reverb/keyboard.json
+++ b/keyboards/dasky/reverb/keyboard.json
@@ -124,7 +124,6 @@
{"matrix": [3, 0], "x": 129, "y": 13, "flags": 4}
]
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0001",
diff --git a/keyboards/dc01/arrow/keyboard.json b/keyboards/dc01/arrow/keyboard.json
index f56646367f..c8a2b229ea 100644
--- a/keyboards/dc01/arrow/keyboard.json
+++ b/keyboards/dc01/arrow/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "DC01 Arrow",
"manufacturer": "Mechboards",
- "url": "",
"maintainer": "Yiancar-Designs",
"usb": {
"vid": "0x8968",
diff --git a/keyboards/dc01/left/keyboard.json b/keyboards/dc01/left/keyboard.json
index 2238f67564..01942c099c 100644
--- a/keyboards/dc01/left/keyboard.json
+++ b/keyboards/dc01/left/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "DC01 Left",
"manufacturer": "Mechboards",
- "url": "",
"maintainer": "Yiancar-Designs",
"usb": {
"vid": "0x8968",
diff --git a/keyboards/dc01/numpad/keyboard.json b/keyboards/dc01/numpad/keyboard.json
index 900af6e542..b78d8b9ee5 100644
--- a/keyboards/dc01/numpad/keyboard.json
+++ b/keyboards/dc01/numpad/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "DC01 Numpad",
"manufacturer": "Mechboards",
- "url": "",
"maintainer": "Yiancar-Designs",
"usb": {
"vid": "0x8968",
diff --git a/keyboards/dc01/right/keyboard.json b/keyboards/dc01/right/keyboard.json
index 36dc7a7056..3811ec3331 100644
--- a/keyboards/dc01/right/keyboard.json
+++ b/keyboards/dc01/right/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "DC01 Right",
"manufacturer": "Mechboards",
- "url": "",
"maintainer": "Yiancar-Designs",
"usb": {
"vid": "0x8968",
diff --git a/keyboards/deemen17/de60fs/config.h b/keyboards/deemen17/de60/r1/config.h
index e21d4ae373..e21d4ae373 100644
--- a/keyboards/deemen17/de60fs/config.h
+++ b/keyboards/deemen17/de60/r1/config.h
diff --git a/keyboards/deemen17/de60fs/keyboard.json b/keyboards/deemen17/de60/r1/keyboard.json
index 573c012baa..62de2691ce 100644
--- a/keyboards/deemen17/de60fs/keyboard.json
+++ b/keyboards/deemen17/de60/r1/keyboard.json
@@ -1,6 +1,6 @@
{
- "manufacturer": "Deemen17",
- "keyboard_name": "De60fs",
+ "manufacturer": "Deemen17 Works",
+ "keyboard_name": "DE60 R1",
"maintainer": "Deemen17",
"bootloader": "rp2040",
"build": {
diff --git a/keyboards/deemen17/de60fs/keymaps/default/keymap.c b/keyboards/deemen17/de60/r1/keymaps/default/keymap.c
index f93f61d768..f93f61d768 100644
--- a/keyboards/deemen17/de60fs/keymaps/default/keymap.c
+++ b/keyboards/deemen17/de60/r1/keymaps/default/keymap.c
diff --git a/keyboards/deemen17/de60fs/readme.md b/keyboards/deemen17/de60/r1/readme.md
index e5135691a8..e71a2fc412 100644
--- a/keyboards/deemen17/de60fs/readme.md
+++ b/keyboards/deemen17/de60/r1/readme.md
@@ -1,6 +1,6 @@
-# De60fs
+# DE60 Round 1
-![De60fs](https://i.imgur.com/7hpYaoXh.jpg)
+![DE60 R1](https://i.imgur.com/7hpYaoXh.jpg)
A GH60 form factor PCB for 60% keyboards. Uses a Left USB Type C connector or 5 JST SH positions for daughter board.
@@ -10,11 +10,11 @@ A GH60 form factor PCB for 60% keyboards. Uses a Left USB Type C connector or 5
Make example for this keyboard (after setting up your build environment):
- make deemen17/de60fs:default
+ make deemen17/de60/r1:default
Flashing example for this keyboard:
- make deemen17/de60fs:default:flash
+ make deemen17/de60/r1:default:flash
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/deemen17/de60/readme.md b/keyboards/deemen17/de60/readme.md
new file mode 100644
index 0000000000..c5ea64a6a6
--- /dev/null
+++ b/keyboards/deemen17/de60/readme.md
@@ -0,0 +1,17 @@
+# DE60
+
+Deemen17 Works's 60% PCB Platform, which works as the base for our 60%-layout PCB designs.
+
+* Keyboard Maintainer: [Deemen17](https://github.com/Deemen17)
+* Hardware Supported: DE60 PCBs
+* Hardware Availability: [Deemen17 Facebook Page](https://www.facebook.com/deemen17/), [Deemen17 Works Instagram](https://www.instagram.com/deemen17.works)
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (ESC/Escape) and plug in the keyboard
+* **Physical reset button**: Double tap the button RESET on the back of the PCB
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available \ No newline at end of file
diff --git a/keyboards/delikeeb/flatbread60/keyboard.json b/keyboards/delikeeb/flatbread60/keyboard.json
index b0cf794dfb..2de307ab2a 100644
--- a/keyboards/delikeeb/flatbread60/keyboard.json
+++ b/keyboards/delikeeb/flatbread60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Flatbread60",
"manufacturer": "delikeeb",
- "url": "",
"maintainer": "noclew",
"usb": {
"vid": "0x9906",
diff --git a/keyboards/delikeeb/vaguettelite/keyboard.json b/keyboards/delikeeb/vaguettelite/keyboard.json
index 56919958f2..e438fd9bfb 100644
--- a/keyboards/delikeeb/vaguettelite/keyboard.json
+++ b/keyboards/delikeeb/vaguettelite/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Vaguette Lite",
"manufacturer": "dELIKEEb",
- "url": "",
"maintainer": "noclew",
"usb": {
"vid": "0x9906",
diff --git a/keyboards/delikeeb/vanana/info.json b/keyboards/delikeeb/vanana/info.json
index 520cd92b09..0ba67d4af5 100644
--- a/keyboards/delikeeb/vanana/info.json
+++ b/keyboards/delikeeb/vanana/info.json
@@ -1,6 +1,5 @@
{
"manufacturer": "dELIKEEb",
- "url": "",
"maintainer": "noclew",
"usb": {
"vid": "0x9906",
diff --git a/keyboards/delikeeb/waaffle/rev3/info.json b/keyboards/delikeeb/waaffle/rev3/info.json
index 1201411d46..761c2dc3c7 100644
--- a/keyboards/delikeeb/waaffle/rev3/info.json
+++ b/keyboards/delikeeb/waaffle/rev3/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Waaffle rev3",
"manufacturer": "dELIKEEb",
- "url": "",
"maintainer": "noclew",
"usb": {
"vid": "0x9906",
diff --git a/keyboards/deltapad/keyboard.json b/keyboards/deltapad/keyboard.json
index 23683bbd1e..262f6bc41b 100644
--- a/keyboards/deltapad/keyboard.json
+++ b/keyboards/deltapad/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "deltapad",
"manufacturer": "Richard Snijder",
- "url": "",
"maintainer": "Richard Snijder",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/demiurge/keyboard.json b/keyboards/demiurge/keyboard.json
index ad5264323b..80b1b477e1 100644
--- a/keyboards/demiurge/keyboard.json
+++ b/keyboards/demiurge/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Demiurge",
"manufacturer": "ojthetiny",
- "url": "",
"maintainer": "ojthetiny",
"usb": {
"vid": "0x6F6A",
diff --git a/keyboards/deng/djam/keyboard.json b/keyboards/deng/djam/keyboard.json
index 94e2aca2ec..0589af4938 100644
--- a/keyboards/deng/djam/keyboard.json
+++ b/keyboards/deng/djam/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "DJam",
"manufacturer": "Leo Deng",
- "url": "",
"maintainer": "myst729",
"usb": {
"vid": "0xDE29",
diff --git a/keyboards/deng/thirty/keyboard.json b/keyboards/deng/thirty/keyboard.json
index a26d727f12..da36ae19f5 100644
--- a/keyboards/deng/thirty/keyboard.json
+++ b/keyboards/deng/thirty/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Thirty",
"manufacturer": "Leo Deng",
- "url": "",
"maintainer": "myst729",
"usb": {
"vid": "0xDE29",
diff --git a/keyboards/densus/alveus/mx/keyboard.json b/keyboards/densus/alveus/mx/keyboard.json
index 839c84fb45..dd3f1bde05 100644
--- a/keyboards/densus/alveus/mx/keyboard.json
+++ b/keyboards/densus/alveus/mx/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Alveus",
"manufacturer": "Mechlovin Studio",
- "url": "",
"usb": {
"vid": "0xDE00",
"pid": "0x0F70",
diff --git a/keyboards/dichotomy/keyboard.json b/keyboards/dichotomy/keyboard.json
index bc3546a082..33a799b0e3 100644
--- a/keyboards/dichotomy/keyboard.json
+++ b/keyboards/dichotomy/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Dichotomy",
"manufacturer": "Broekhuijsen",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/dk60/keyboard.json b/keyboards/dk60/keyboard.json
index a88920814d..990cd7cfcc 100644
--- a/keyboards/dk60/keyboard.json
+++ b/keyboards/dk60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "DK60",
"manufacturer": "DARKOU",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/dm9records/ergoinu/keyboard.json b/keyboards/dm9records/ergoinu/keyboard.json
index 1f91a06600..0e124d1a21 100644
--- a/keyboards/dm9records/ergoinu/keyboard.json
+++ b/keyboards/dm9records/ergoinu/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Ergoinu",
"manufacturer": "Dm9Records",
- "url": "",
"maintainer": "hsgw(Takuya Urakawa)",
"usb": {
"vid": "0x04D8",
diff --git a/keyboards/dm9records/plaid/keymaps/default/keymap.c b/keyboards/dm9records/plaid/keymaps/default/keymap.c
index 0d8d24c575..3ee327f65e 100644
--- a/keyboards/dm9records/plaid/keymaps/default/keymap.c
+++ b/keyboards/dm9records/plaid/keymaps/default/keymap.c
@@ -311,9 +311,9 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (!eeconfig_is_enabled()) {
eeconfig_init();
}
- keymap_config.raw = eeconfig_read_keymap();
+ eeconfig_read_keymap(&keymap_config);
keymap_config.nkro = 1;
- eeconfig_update_keymap(keymap_config.raw);
+ eeconfig_update_keymap(&keymap_config);
}
return false;
break;
diff --git a/keyboards/do60/keyboard.json b/keyboards/do60/keyboard.json
index 2a7d585f65..88cf1873e5 100644
--- a/keyboards/do60/keyboard.json
+++ b/keyboards/do60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Do60",
"manufacturer": "Doyu Studio",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4453",
diff --git a/keyboards/doio/kb09/keyboard.json b/keyboards/doio/kb09/keyboard.json
index e3012f510c..f80f19cfda 100644
--- a/keyboards/doio/kb09/keyboard.json
+++ b/keyboards/doio/kb09/keyboard.json
@@ -88,7 +88,6 @@
"max_brightness": 200,
"sleep": true
},
- "url": "",
"usb": {
"device_version": "0.0.1",
"pid": "0x0901",
diff --git a/keyboards/doio/kb12/keyboard.json b/keyboards/doio/kb12/keyboard.json
index c87d5f9544..fa450de512 100644
--- a/keyboards/doio/kb12/keyboard.json
+++ b/keyboards/doio/kb12/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "KB12-01",
"manufacturer": "DOIO",
- "url": "",
"maintainer": "DOIO2022",
"usb": {
"vid": "0xD010",
diff --git a/keyboards/doio/kb19/keyboard.json b/keyboards/doio/kb19/keyboard.json
index faaaedd36f..6b97350b31 100644
--- a/keyboards/doio/kb19/keyboard.json
+++ b/keyboards/doio/kb19/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "KB19-01",
"manufacturer": "DOIO",
- "url": "",
"maintainer": "DOIO2022",
"usb": {
"vid": "0xD010",
diff --git a/keyboards/doio/kb30/keyboard.json b/keyboards/doio/kb30/keyboard.json
index 388df2d9e3..68b79d0393 100644
--- a/keyboards/doio/kb30/keyboard.json
+++ b/keyboards/doio/kb30/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "KB30-01",
"manufacturer": "DOIO",
- "url": "",
"maintainer": "DOIO2022",
"usb": {
"vid": "0xD010",
diff --git a/keyboards/doio/kb3x/keyboard.json b/keyboards/doio/kb3x/keyboard.json
index be0d138439..eb9e843745 100644
--- a/keyboards/doio/kb3x/keyboard.json
+++ b/keyboards/doio/kb3x/keyboard.json
@@ -86,7 +86,6 @@
"max_brightness": 200,
"sleep": true
},
- "url": "",
"usb": {
"device_version": "0.0.1",
"pid": "0x3F01",
diff --git a/keyboards/donutcables/budget96/keyboard.json b/keyboards/donutcables/budget96/keyboard.json
index eaba1b7c46..972149440d 100644
--- a/keyboards/donutcables/budget96/keyboard.json
+++ b/keyboards/donutcables/budget96/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Budget96",
"manufacturer": "DonutCables",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4443",
diff --git a/keyboards/donutcables/scrabblepad/keyboard.json b/keyboards/donutcables/scrabblepad/keyboard.json
index aa03523ed8..9ee05346a0 100644
--- a/keyboards/donutcables/scrabblepad/keyboard.json
+++ b/keyboards/donutcables/scrabblepad/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "ScrabblePad",
"manufacturer": "DonutCables",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4443",
diff --git a/keyboards/doppelganger/keyboard.json b/keyboards/doppelganger/keyboard.json
index 8856927012..72b3604596 100644
--- a/keyboards/doppelganger/keyboard.json
+++ b/keyboards/doppelganger/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Doppelganger",
"manufacturer": "Yiancar-Designs",
- "url": "",
"maintainer": "yiancar",
"usb": {
"vid": "0x8968",
diff --git a/keyboards/doro67/multi/keyboard.json b/keyboards/doro67/multi/keyboard.json
index a3a652e40b..6749a234cf 100644
--- a/keyboards/doro67/multi/keyboard.json
+++ b/keyboards/doro67/multi/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Doro67 Multi",
"manufacturer": "Backprop Studio",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4250",
diff --git a/keyboards/doro67/rgb/keyboard.json b/keyboards/doro67/rgb/keyboard.json
index 8f372dc9c7..520ffbc870 100644
--- a/keyboards/doro67/rgb/keyboard.json
+++ b/keyboards/doro67/rgb/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Doro67 RGB",
"manufacturer": "Backprop Studio",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4250",
diff --git a/keyboards/dp60/keyboard.json b/keyboards/dp60/keyboard.json
index 51a2c08d47..2c42747bb4 100644
--- a/keyboards/dp60/keyboard.json
+++ b/keyboards/dp60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "DP60",
"manufacturer": "astro",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x60BE",
diff --git a/keyboards/draculad/keyboard.json b/keyboards/draculad/keyboard.json
index 3ba2f0efae..c72bda7c38 100644
--- a/keyboards/draculad/keyboard.json
+++ b/keyboards/draculad/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "DracuLad",
"manufacturer": "MangoIV",
- "url": "",
"maintainer": "MangoIV",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/dtisaac/cg108/keyboard.json b/keyboards/dtisaac/cg108/keyboard.json
index 28e5563111..b2d7ed34fe 100644
--- a/keyboards/dtisaac/cg108/keyboard.json
+++ b/keyboards/dtisaac/cg108/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "CG108",
"manufacturer": "DTIsaac",
- "url": "",
"maintainer": "daotakisaac",
"usb": {
"vid": "0x4454",
diff --git a/keyboards/dtisaac/dosa40rgb/keyboard.json b/keyboards/dtisaac/dosa40rgb/keyboard.json
index 5f3654d2c5..6795625260 100644
--- a/keyboards/dtisaac/dosa40rgb/keyboard.json
+++ b/keyboards/dtisaac/dosa40rgb/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": ">_Dosa40",
"manufacturer": "DTIsaac",
- "url": "",
"maintainer": "DTIsaac",
"usb": {
"vid": "0x4454",
diff --git a/keyboards/dtisaac/dtisaac01/keyboard.json b/keyboards/dtisaac/dtisaac01/keyboard.json
index 0b4b1b3057..a9650a8112 100644
--- a/keyboards/dtisaac/dtisaac01/keyboard.json
+++ b/keyboards/dtisaac/dtisaac01/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "dtisaac01",
"manufacturer": "DTIsaac",
- "url": "",
"maintainer": "DTIsaac",
"usb": {
"vid": "0x4454",
diff --git a/keyboards/duck/jetfire/keyboard.json b/keyboards/duck/jetfire/keyboard.json
index a97ff193a8..d9adf05ca4 100644
--- a/keyboards/duck/jetfire/keyboard.json
+++ b/keyboards/duck/jetfire/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Jetfire",
"manufacturer": "Duck",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x444B",
diff --git a/keyboards/duck/lightsaver/keyboard.json b/keyboards/duck/lightsaver/keyboard.json
index d4e1cd1e35..978e0c6e23 100644
--- a/keyboards/duck/lightsaver/keyboard.json
+++ b/keyboards/duck/lightsaver/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Lightsaver V3",
"manufacturer": "Duck",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x444B",
diff --git a/keyboards/duck/octagon/v1/keyboard.json b/keyboards/duck/octagon/v1/keyboard.json
index 47f3acdc4d..7dfd9ec3ea 100644
--- a/keyboards/duck/octagon/v1/keyboard.json
+++ b/keyboards/duck/octagon/v1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Octagon V1",
"manufacturer": "Duck",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x444B",
diff --git a/keyboards/duck/octagon/v2/keyboard.json b/keyboards/duck/octagon/v2/keyboard.json
index 4afbc42d47..b3a1eb784d 100644
--- a/keyboards/duck/octagon/v2/keyboard.json
+++ b/keyboards/duck/octagon/v2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Octagon V2",
"manufacturer": "Duck",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x444B",
diff --git a/keyboards/duck/orion/v3/keyboard.json b/keyboards/duck/orion/v3/keyboard.json
index ba479aa0a2..9a7251c650 100644
--- a/keyboards/duck/orion/v3/keyboard.json
+++ b/keyboards/duck/orion/v3/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Orion V3",
"manufacturer": "Duck",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x444B",
diff --git a/keyboards/duck/tcv3/keyboard.json b/keyboards/duck/tcv3/keyboard.json
index c03142b4db..699a44e69b 100644
--- a/keyboards/duck/tcv3/keyboard.json
+++ b/keyboards/duck/tcv3/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "TC-V3",
"manufacturer": "Duck",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x444B",
diff --git a/keyboards/dumbo/keyboard.json b/keyboards/dumbo/keyboard.json
index b833915d80..8026f22790 100644
--- a/keyboards/dumbo/keyboard.json
+++ b/keyboards/dumbo/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Dumbo",
"manufacturer": "trip_trap",
- "url": "",
"maintainer": "adamnaldal",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/dz60/keyboard.json b/keyboards/dz60/keyboard.json
index 8a8e631f1b..3bf56b90f1 100644
--- a/keyboards/dz60/keyboard.json
+++ b/keyboards/dz60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "DZ60",
"manufacturer": "KBDFans",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x445A",
diff --git a/keyboards/dztech/bocc/keyboard.json b/keyboards/dztech/bocc/keyboard.json
index a6208b2bf7..e05e1828a3 100644
--- a/keyboards/dztech/bocc/keyboard.json
+++ b/keyboards/dztech/bocc/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "BOCC",
"manufacturer": "DZTECH",
- "url": "",
"maintainer": "DZTECH",
"usb": {
"vid": "0x445A",
diff --git a/keyboards/dztech/duo_s/keyboard.json b/keyboards/dztech/duo_s/keyboard.json
index 7bf8b0bfdd..76cbb57261 100644
--- a/keyboards/dztech/duo_s/keyboard.json
+++ b/keyboards/dztech/duo_s/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "DUO-S",
"manufacturer": "DZTECH",
- "url": "",
"maintainer": "moyi4681",
"usb": {
"vid": "0x445A",
diff --git a/keyboards/dztech/dz60rgb/info.json b/keyboards/dztech/dz60rgb/info.json
index 17439e3443..1bcc77c605 100644
--- a/keyboards/dztech/dz60rgb/info.json
+++ b/keyboards/dztech/dz60rgb/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "DZ60RGB",
"manufacturer": "DZTECH",
- "url": "",
"maintainer": "dztech",
"usb": {
"vid": "0x445A"
diff --git a/keyboards/dztech/dz60rgb_ansi/info.json b/keyboards/dztech/dz60rgb_ansi/info.json
index 12fefa5d87..dddbd47315 100644
--- a/keyboards/dztech/dz60rgb_ansi/info.json
+++ b/keyboards/dztech/dz60rgb_ansi/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "DZ60RGB_ANSI",
"manufacturer": "DZTECH",
- "url": "",
"maintainer": "dztech",
"usb": {
"vid": "0x445A"
diff --git a/keyboards/dztech/dz60rgb_wkl/info.json b/keyboards/dztech/dz60rgb_wkl/info.json
index ca43c1cbd7..a4dfb63c7a 100644
--- a/keyboards/dztech/dz60rgb_wkl/info.json
+++ b/keyboards/dztech/dz60rgb_wkl/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "DZ60RGB_WKL",
"manufacturer": "DZTECH",
- "url": "",
"maintainer": "dztech",
"usb": {
"vid": "0x445A"
diff --git a/keyboards/dztech/dz64rgb/keyboard.json b/keyboards/dztech/dz64rgb/keyboard.json
index ea22af59db..ef95b52400 100644
--- a/keyboards/dztech/dz64rgb/keyboard.json
+++ b/keyboards/dztech/dz64rgb/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "DZ64RGB",
"manufacturer": "DZTECH",
- "url": "",
"maintainer": "moyi4681",
"usb": {
"vid": "0x445A",
diff --git a/keyboards/dztech/dz65rgb/info.json b/keyboards/dztech/dz65rgb/info.json
index d3a127251b..39e1242af4 100644
--- a/keyboards/dztech/dz65rgb/info.json
+++ b/keyboards/dztech/dz65rgb/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "DZ65RGB",
"manufacturer": "DZTECH",
- "url": "",
"maintainer": "dztech",
"usb": {
"vid": "0x445A"
diff --git a/keyboards/dztech/dz96/keyboard.json b/keyboards/dztech/dz96/keyboard.json
index ef2de26a70..e51f574419 100644
--- a/keyboards/dztech/dz96/keyboard.json
+++ b/keyboards/dztech/dz96/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "DZ96",
"manufacturer": "DZTECH",
- "url": "",
"maintainer": "kb-elmo",
"usb": {
"vid": "0x445A",
diff --git a/keyboards/dztech/endless80/keyboard.json b/keyboards/dztech/endless80/keyboard.json
index 9387b67ead..835ef0d652 100644
--- a/keyboards/dztech/endless80/keyboard.json
+++ b/keyboards/dztech/endless80/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "endless80",
"manufacturer": "dztech",
- "url": "",
"maintainer": "moyi4681",
"usb": {
"vid": "0x445A",
diff --git a/keyboards/e88/keyboard.json b/keyboards/e88/keyboard.json
index 32ee42aefd..941eb42729 100644
--- a/keyboards/e88/keyboard.json
+++ b/keyboards/e88/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "e88",
"manufacturer": "Pink Labs",
- "url": "",
"maintainer": "2-n",
"usb": {
"vid": "0x4705",
diff --git a/keyboards/eason/aeroboard/keyboard.json b/keyboards/eason/aeroboard/keyboard.json
index 3d8c2a6db6..cc0771f82c 100644
--- a/keyboards/eason/aeroboard/keyboard.json
+++ b/keyboards/eason/aeroboard/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "AeroBoard",
"manufacturer": "Eason",
- "url": "",
"maintainer": "EasonQian1",
"usb": {
"vid": "0x8954",
diff --git a/keyboards/eason/capsule65/keyboard.json b/keyboards/eason/capsule65/keyboard.json
index 87b7b94568..9f51508a70 100644
--- a/keyboards/eason/capsule65/keyboard.json
+++ b/keyboards/eason/capsule65/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "capsule65",
"manufacturer": "eason",
- "url": "",
"maintainer": "EasonQian1",
"usb": {
"vid": "0xF21E",
diff --git a/keyboards/eason/meow65/keyboard.json b/keyboards/eason/meow65/keyboard.json
index 340a741040..df995ea359 100644
--- a/keyboards/eason/meow65/keyboard.json
+++ b/keyboards/eason/meow65/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Meow65",
"manufacturer": "Eason",
- "url": "",
"maintainer": "Eason",
"usb": {
"vid": "0x68F4",
diff --git a/keyboards/eason/void65h/keyboard.json b/keyboards/eason/void65h/keyboard.json
index 7b6a7fe2fb..664cfac81b 100644
--- a/keyboards/eason/void65h/keyboard.json
+++ b/keyboards/eason/void65h/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Void65h",
"manufacturer": "Eason",
- "url": "",
"maintainer": "Eason",
"usb": {
"vid": "0x51D7",
diff --git a/keyboards/eco/info.json b/keyboards/eco/info.json
index 1bb5c79eb2..f62d91a01f 100644
--- a/keyboards/eco/info.json
+++ b/keyboards/eco/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "The ECO Keyboard",
"manufacturer": "Bishop Keyboards",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x1337",
diff --git a/keyboards/edc40/keyboard.json b/keyboards/edc40/keyboard.json
index 7ad2fdd3b8..a9a2527520 100644
--- a/keyboards/edc40/keyboard.json
+++ b/keyboards/edc40/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "edc40",
"manufacturer": "OJ",
- "url": "",
"maintainer": "ojthetiny",
"usb": {
"vid": "0x4F4A",
diff --git a/keyboards/edi/standaside/keyboard.json b/keyboards/edi/standaside/keyboard.json
index 410f8f693a..744f5fbe1e 100644
--- a/keyboards/edi/standaside/keyboard.json
+++ b/keyboards/edi/standaside/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Stand Aside",
"manufacturer": "Fate Everywhere",
- "url": "",
"maintainer": "fateeverywhere",
"usb": {
"vid": "0xF7E0",
diff --git a/keyboards/eek/info.json b/keyboards/eek/info.json
index 86ff284347..0e510e282a 100644
--- a/keyboards/eek/info.json
+++ b/keyboards/eek/info.json
@@ -13,7 +13,6 @@
"val": 150
},
"driver": "ws2812",
- "led_flush_limit": 16,
"max_brightness": 200
},
"features": {
diff --git a/keyboards/efreet/keyboard.json b/keyboards/efreet/keyboard.json
index 7dac78cc39..0e42253c47 100644
--- a/keyboards/efreet/keyboard.json
+++ b/keyboards/efreet/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Efreet",
"manufacturer": "Soran",
- "url": "",
"maintainer": "amberstarlight",
"usb": {
"vid": "0x534F",
diff --git a/keyboards/ein_60/keyboard.json b/keyboards/ein_60/keyboard.json
index a7902af490..b1e48f1747 100644
--- a/keyboards/ein_60/keyboard.json
+++ b/keyboards/ein_60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Ein_60",
"manufacturer": "klackygears",
- "url": "",
"maintainer": "klackygears",
"usb": {
"vid": "0x4A53",
@@ -13,7 +12,6 @@
"val": 150
},
"driver": "ws2812",
- "led_flush_limit": 16,
"max_brightness": 200
},
"rgblight": {
diff --git a/keyboards/emi20/keyboard.json b/keyboards/emi20/keyboard.json
index 56f13af875..d6fd12356a 100644
--- a/keyboards/emi20/keyboard.json
+++ b/keyboards/emi20/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Emi20",
"manufacturer": "Aquacylinder",
- "url": "",
"maintainer": "Aquacylinder",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/emptystring/nqg/keyboard.json b/keyboards/emptystring/nqg/keyboard.json
index 96f9391dcc..52fae23604 100644
--- a/keyboards/emptystring/nqg/keyboard.json
+++ b/keyboards/emptystring/nqg/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "NQG",
"manufacturer": "emptystring",
- "url": "",
"maintainer": "culturalsnow",
"usb": {
"vid": "0x0076",
diff --git a/keyboards/eniigmakeyboards/ek60/keyboard.json b/keyboards/eniigmakeyboards/ek60/keyboard.json
index 6446dbce34..09e34dfbc1 100644
--- a/keyboards/eniigmakeyboards/ek60/keyboard.json
+++ b/keyboards/eniigmakeyboards/ek60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "EK60",
"manufacturer": "Eniigma Keyboards",
- "url": "",
"maintainer": "adamws",
"usb": {
"vid": "0x454B",
diff --git a/keyboards/eniigmakeyboards/ek65/keyboard.json b/keyboards/eniigmakeyboards/ek65/keyboard.json
index fa6ad3566a..cd158f3b9a 100644
--- a/keyboards/eniigmakeyboards/ek65/keyboard.json
+++ b/keyboards/eniigmakeyboards/ek65/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "EK65",
"manufacturer": "Eniigma Keyboards",
- "url": "",
"maintainer": "adamws",
"usb": {
"vid": "0x454B",
diff --git a/keyboards/eniigmakeyboards/ek87/keyboard.json b/keyboards/eniigmakeyboards/ek87/keyboard.json
index 900a74a4b6..a136d53729 100644
--- a/keyboards/eniigmakeyboards/ek87/keyboard.json
+++ b/keyboards/eniigmakeyboards/ek87/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "EK87",
"manufacturer": "Eniigma Keyboards",
- "url": "",
"maintainer": "adamws",
"usb": {
"vid": "0x454B",
diff --git a/keyboards/epomaker/tide65/keyboard.json b/keyboards/epomaker/tide65/keyboard.json
index 60f1b46f70..7a384f180f 100644
--- a/keyboards/epomaker/tide65/keyboard.json
+++ b/keyboards/epomaker/tide65/keyboard.json
@@ -141,7 +141,6 @@
{"matrix": [4, 14], "x": 224, "y": 64, "flags": 4}
]
},
- "url": "",
"usb": {
"device_version": "0.0.1",
"force_nkro": true,
diff --git a/keyboards/era/divine/keyboard.json b/keyboards/era/divine/keyboard.json
index d02241da78..cc67932131 100644
--- a/keyboards/era/divine/keyboard.json
+++ b/keyboards/era/divine/keyboard.json
@@ -31,7 +31,6 @@
"rows": ["GP11", "GP10", "GP9", "GP8", "GP4"]
},
"processor": "RP2040",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0002",
diff --git a/keyboards/era/era65/keyboard.json b/keyboards/era/era65/keyboard.json
index d5fd612767..63b96666c1 100644
--- a/keyboards/era/era65/keyboard.json
+++ b/keyboards/era/era65/keyboard.json
@@ -32,7 +32,6 @@
"rows": ["GP1", "GP2", "GP4", "GP10", "GP11"]
},
"processor": "RP2040",
- "url": "",
"usb": {
"device_version": "1.0.4",
"pid": "0x0001",
diff --git a/keyboards/era/linx3/fave65s/keyboard.json b/keyboards/era/linx3/fave65s/keyboard.json
index 87f4fdf513..af44df9850 100644
--- a/keyboards/era/linx3/fave65s/keyboard.json
+++ b/keyboards/era/linx3/fave65s/keyboard.json
@@ -109,7 +109,6 @@
],
"sleep": true
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0011",
diff --git a/keyboards/era/linx3/n86/keyboard.json b/keyboards/era/linx3/n86/keyboard.json
index c0b8b5525a..354a358470 100644
--- a/keyboards/era/linx3/n86/keyboard.json
+++ b/keyboards/era/linx3/n86/keyboard.json
@@ -161,7 +161,6 @@
],
"sleep": true
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0008",
diff --git a/keyboards/era/linx3/n87/keyboard.json b/keyboards/era/linx3/n87/keyboard.json
index 548a37fadd..5a03a5cbc5 100644
--- a/keyboards/era/linx3/n87/keyboard.json
+++ b/keyboards/era/linx3/n87/keyboard.json
@@ -162,7 +162,6 @@
],
"sleep": true
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0009",
diff --git a/keyboards/era/linx3/n8x/keyboard.json b/keyboards/era/linx3/n8x/keyboard.json
index ae0d608ffa..c018874bd1 100644
--- a/keyboards/era/linx3/n8x/keyboard.json
+++ b/keyboards/era/linx3/n8x/keyboard.json
@@ -29,7 +29,6 @@
"rows": ["GP4", "GP5", "GP6", "GP7", "GP10", "GP9"]
},
"processor": "RP2040",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0007",
diff --git a/keyboards/era/sirind/brick65s/keyboard.json b/keyboards/era/sirind/brick65s/keyboard.json
index 5d6768a93c..489b0da323 100644
--- a/keyboards/era/sirind/brick65s/keyboard.json
+++ b/keyboards/era/sirind/brick65s/keyboard.json
@@ -27,7 +27,6 @@
],
"sleep": true
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0012",
diff --git a/keyboards/era/sirind/chickpad/keyboard.json b/keyboards/era/sirind/chickpad/keyboard.json
index fe76df006d..c662d8241a 100644
--- a/keyboards/era/sirind/chickpad/keyboard.json
+++ b/keyboards/era/sirind/chickpad/keyboard.json
@@ -88,7 +88,6 @@
],
"sleep": true
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0015",
diff --git a/keyboards/era/sirind/klein_hs/keyboard.json b/keyboards/era/sirind/klein_hs/keyboard.json
index 6d677f6748..01395c3af1 100644
--- a/keyboards/era/sirind/klein_hs/keyboard.json
+++ b/keyboards/era/sirind/klein_hs/keyboard.json
@@ -28,7 +28,6 @@
"rows": ["GP18", "GP19", "GP20", "GP21", "GP14", "GP5", "GP6", "GP4", "GP13", "GP12"]
},
"processor": "RP2040",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0004",
diff --git a/keyboards/era/sirind/klein_sd/keyboard.json b/keyboards/era/sirind/klein_sd/keyboard.json
index 62b8f78865..b2fbe33290 100644
--- a/keyboards/era/sirind/klein_sd/keyboard.json
+++ b/keyboards/era/sirind/klein_sd/keyboard.json
@@ -149,7 +149,6 @@
],
"sleep": true
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0005",
diff --git a/keyboards/era/sirind/tomak/keyboard.json b/keyboards/era/sirind/tomak/keyboard.json
index cfd933bfe6..9f4993614b 100644
--- a/keyboards/era/sirind/tomak/keyboard.json
+++ b/keyboards/era/sirind/tomak/keyboard.json
@@ -196,7 +196,6 @@
}
}
},
- "url": "",
"usb": {
"device_version": "1.0.2",
"pid": "0x0006",
diff --git a/keyboards/era/sirind/tomak79h/keyboard.json b/keyboards/era/sirind/tomak79h/keyboard.json
index 216250f850..d1764bb668 100644
--- a/keyboards/era/sirind/tomak79h/keyboard.json
+++ b/keyboards/era/sirind/tomak79h/keyboard.json
@@ -197,7 +197,6 @@
}
}
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0014",
diff --git a/keyboards/era/sirind/tomak79s/keyboard.json b/keyboards/era/sirind/tomak79s/keyboard.json
index 9011a359ad..2e68ad788d 100644
--- a/keyboards/era/sirind/tomak79s/keyboard.json
+++ b/keyboards/era/sirind/tomak79s/keyboard.json
@@ -203,7 +203,6 @@
}
}
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0013",
diff --git a/keyboards/esca/getawayvan/keyboard.json b/keyboards/esca/getawayvan/keyboard.json
index 6105e5850d..999430307b 100644
--- a/keyboards/esca/getawayvan/keyboard.json
+++ b/keyboards/esca/getawayvan/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "GetawayVan",
"manufacturer": "esca",
- "url": "",
"maintainer": "esca",
"usb": {
"vid": "0xE5CA",
diff --git a/keyboards/esca/getawayvan_f042/keyboard.json b/keyboards/esca/getawayvan_f042/keyboard.json
index 6b934e16c7..cf27a89693 100644
--- a/keyboards/esca/getawayvan_f042/keyboard.json
+++ b/keyboards/esca/getawayvan_f042/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "GetawayVan",
"manufacturer": "esca",
- "url": "",
"maintainer": "esca",
"usb": {
"vid": "0xE5CA",
diff --git a/keyboards/eve/meteor/keyboard.json b/keyboards/eve/meteor/keyboard.json
index a8136496f0..4b3239c38c 100644
--- a/keyboards/eve/meteor/keyboard.json
+++ b/keyboards/eve/meteor/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Meteor",
"manufacturer": "EVE",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4556",
diff --git a/keyboards/evil80/keyboard.json b/keyboards/evil80/keyboard.json
index 9610718b34..c5a6283716 100644
--- a/keyboards/evil80/keyboard.json
+++ b/keyboards/evil80/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Evil80",
"manufacturer": "Evil",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/evolv/keyboard.json b/keyboards/evolv/keyboard.json
index 8373bbb536..872f80085d 100644
--- a/keyboards/evolv/keyboard.json
+++ b/keyboards/evolv/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Evolv75",
"manufacturer": "NathanAlpha",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x7865",
diff --git a/keyboards/evyd13/atom47/rev2/keyboard.json b/keyboards/evyd13/atom47/rev2/keyboard.json
index 6466c1b7b8..8b1af5ede6 100644
--- a/keyboards/evyd13/atom47/rev2/keyboard.json
+++ b/keyboards/evyd13/atom47/rev2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Atom47 rev2",
"manufacturer": "Evyd13",
- "url": "",
"maintainer": "evyd13",
"usb": {
"vid": "0x4705",
diff --git a/keyboards/evyd13/atom47/rev3/keyboard.json b/keyboards/evyd13/atom47/rev3/keyboard.json
index 009c3ef534..e2c6a1e1ba 100644
--- a/keyboards/evyd13/atom47/rev3/keyboard.json
+++ b/keyboards/evyd13/atom47/rev3/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Atom47 rev3",
"manufacturer": "Evyd13",
- "url": "",
"maintainer": "evyd13",
"usb": {
"vid": "0x4705",
diff --git a/keyboards/evyd13/atom47/rev4/keyboard.json b/keyboards/evyd13/atom47/rev4/keyboard.json
index cea416e1a6..9a5d7b1ce4 100644
--- a/keyboards/evyd13/atom47/rev4/keyboard.json
+++ b/keyboards/evyd13/atom47/rev4/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Atom47 rev4",
"manufacturer": "Evyd13",
- "url": "",
"maintainer": "evyd13",
"usb": {
"vid": "0x4705",
diff --git a/keyboards/evyd13/atom47/rev5/keyboard.json b/keyboards/evyd13/atom47/rev5/keyboard.json
index 074d34ab43..86ff90c19c 100644
--- a/keyboards/evyd13/atom47/rev5/keyboard.json
+++ b/keyboards/evyd13/atom47/rev5/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Atom47 rev5",
"manufacturer": "Evyd13",
- "url": "",
"maintainer": "evyd13",
"usb": {
"vid": "0x4705",
diff --git a/keyboards/evyd13/eon65/keyboard.json b/keyboards/evyd13/eon65/keyboard.json
index 05506e0ea8..328e0e4885 100644
--- a/keyboards/evyd13/eon65/keyboard.json
+++ b/keyboards/evyd13/eon65/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Eon65",
"manufacturer": "Evyd13",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4705",
diff --git a/keyboards/evyd13/eon75/keyboard.json b/keyboards/evyd13/eon75/keyboard.json
index fe6ee01832..d91e1267fb 100644
--- a/keyboards/evyd13/eon75/keyboard.json
+++ b/keyboards/evyd13/eon75/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Eon75",
"manufacturer": "Evyd13",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4705",
diff --git a/keyboards/evyd13/eon87/keyboard.json b/keyboards/evyd13/eon87/keyboard.json
index a0d73d442e..a53c2c130e 100644
--- a/keyboards/evyd13/eon87/keyboard.json
+++ b/keyboards/evyd13/eon87/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Eon87",
"manufacturer": "Evyd13",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4705",
diff --git a/keyboards/evyd13/eon95/keyboard.json b/keyboards/evyd13/eon95/keyboard.json
index 20be437ea1..4da4cad0d1 100644
--- a/keyboards/evyd13/eon95/keyboard.json
+++ b/keyboards/evyd13/eon95/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Eon95",
"manufacturer": "Evyd13",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4705",
diff --git a/keyboards/evyd13/fin_pad/keyboard.json b/keyboards/evyd13/fin_pad/keyboard.json
index 01b24ccfd0..79d87d7153 100644
--- a/keyboards/evyd13/fin_pad/keyboard.json
+++ b/keyboards/evyd13/fin_pad/keyboard.json
@@ -21,7 +21,6 @@
"ortho_6x4"
],
"processor": "atmega32u2",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0xA6E2",
diff --git a/keyboards/evyd13/minitomic/keyboard.json b/keyboards/evyd13/minitomic/keyboard.json
index 7a8d6d8c23..97bc0dd050 100644
--- a/keyboards/evyd13/minitomic/keyboard.json
+++ b/keyboards/evyd13/minitomic/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Minitomic",
"manufacturer": "Evyd13",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4705",
diff --git a/keyboards/evyd13/nt650/keyboard.json b/keyboards/evyd13/nt650/keyboard.json
index 6f2910b630..54f3f8cce0 100644
--- a/keyboards/evyd13/nt650/keyboard.json
+++ b/keyboards/evyd13/nt650/keyboard.json
@@ -22,7 +22,6 @@
"rows": ["F7", "D6", "D4", "F1", "D5", "F0", "D3", "D2"]
},
"processor": "atmega32u4",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0xD5DF",
diff --git a/keyboards/evyd13/nt660/keyboard.json b/keyboards/evyd13/nt660/keyboard.json
index 142e9f2920..a0a330ae40 100644
--- a/keyboards/evyd13/nt660/keyboard.json
+++ b/keyboards/evyd13/nt660/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "nt660",
"manufacturer": "Evyd13",
- "url": "",
"maintainer": "evyd13",
"usb": {
"vid": "0x4705",
diff --git a/keyboards/evyd13/nt980/keyboard.json b/keyboards/evyd13/nt980/keyboard.json
index 65ba93d73d..b51a67903e 100644
--- a/keyboards/evyd13/nt980/keyboard.json
+++ b/keyboards/evyd13/nt980/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "nt980",
"manufacturer": "Evyd13",
- "url": "",
"maintainer": "evyd13",
"usb": {
"vid": "0x4705",
diff --git a/keyboards/evyd13/omrontkl/keyboard.json b/keyboards/evyd13/omrontkl/keyboard.json
index 1ea340acaa..2f41f3f14c 100644
--- a/keyboards/evyd13/omrontkl/keyboard.json
+++ b/keyboards/evyd13/omrontkl/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "OmronTKL",
"manufacturer": "Evyd13",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4705",
diff --git a/keyboards/evyd13/plain60/keyboard.json b/keyboards/evyd13/plain60/keyboard.json
index ce08a523ed..dd59768dbf 100644
--- a/keyboards/evyd13/plain60/keyboard.json
+++ b/keyboards/evyd13/plain60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Plain60",
"manufacturer": "Evyd13",
- "url": "",
"maintainer": "evyd13",
"usb": {
"vid": "0x4705",
diff --git a/keyboards/evyd13/ta65/keyboard.json b/keyboards/evyd13/ta65/keyboard.json
index 1f58de0200..87f7bbfbc8 100644
--- a/keyboards/evyd13/ta65/keyboard.json
+++ b/keyboards/evyd13/ta65/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "ta-65",
"manufacturer": "Evyd13",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4705",
diff --git a/keyboards/evyd13/wonderland/keyboard.json b/keyboards/evyd13/wonderland/keyboard.json
index 526416fd71..b15ad66f41 100644
--- a/keyboards/evyd13/wonderland/keyboard.json
+++ b/keyboards/evyd13/wonderland/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Wonderland",
"manufacturer": "Evyd13",
- "url": "",
"maintainer": "evyd13",
"usb": {
"vid": "0x4705",
diff --git a/keyboards/exclusive/e65/keyboard.json b/keyboards/exclusive/e65/keyboard.json
index 9735155abe..6efd89e94f 100644
--- a/keyboards/exclusive/e65/keyboard.json
+++ b/keyboards/exclusive/e65/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "E6.5",
"manufacturer": "Exclusive / E-Team",
- "url": "",
"maintainer": "masterzen",
"usb": {
"vid": "0x4558",
diff --git a/keyboards/exclusive/e6_rgb/keyboard.json b/keyboards/exclusive/e6_rgb/keyboard.json
index 401bee9aba..5e6e3999be 100644
--- a/keyboards/exclusive/e6_rgb/keyboard.json
+++ b/keyboards/exclusive/e6_rgb/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "E6 RGB",
"manufacturer": "astro",
- "url": "",
"maintainer": "yulei",
"usb": {
"vid": "0x4154",
diff --git a/keyboards/exclusive/e6v2/le/keyboard.json b/keyboards/exclusive/e6v2/le/keyboard.json
index e6d551126e..aa6be48997 100644
--- a/keyboards/exclusive/e6v2/le/keyboard.json
+++ b/keyboards/exclusive/e6v2/le/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "E6-V2 LE",
"manufacturer": "Exclusive / E-Team",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/exclusive/e6v2/oe/keyboard.json b/keyboards/exclusive/e6v2/oe/keyboard.json
index 587205d2df..e619e542b1 100644
--- a/keyboards/exclusive/e6v2/oe/keyboard.json
+++ b/keyboards/exclusive/e6v2/oe/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "E6-V2 OE",
"manufacturer": "Exclusive / E-Team",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/exclusive/e7v1/keyboard.json b/keyboards/exclusive/e7v1/keyboard.json
index ac0eb5549a..711d1e3908 100644
--- a/keyboards/exclusive/e7v1/keyboard.json
+++ b/keyboards/exclusive/e7v1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "E7-V1",
"manufacturer": "Exclusive / E-Team",
- "url": "",
"maintainer": "masterzen",
"usb": {
"vid": "0x4558",
diff --git a/keyboards/exclusive/e85/hotswap/keyboard.json b/keyboards/exclusive/e85/hotswap/keyboard.json
index 7fcd61c843..72e578c04e 100644
--- a/keyboards/exclusive/e85/hotswap/keyboard.json
+++ b/keyboards/exclusive/e85/hotswap/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "E8.5 Hotswap",
"manufacturer": "Exclusive",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4558",
diff --git a/keyboards/exclusive/e85/soldered/keyboard.json b/keyboards/exclusive/e85/soldered/keyboard.json
index dfd6d18826..eaffa08933 100644
--- a/keyboards/exclusive/e85/soldered/keyboard.json
+++ b/keyboards/exclusive/e85/soldered/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "E8.5 Soldered",
"manufacturer": "Exclusive",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4558",
diff --git a/keyboards/exent/keyboard.json b/keyboards/exent/keyboard.json
index 1fcd11084b..e6ac763d13 100644
--- a/keyboards/exent/keyboard.json
+++ b/keyboards/exent/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Exent",
"manufacturer": "Quadcube",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x5143",
diff --git a/keyboards/eyeohdesigns/babyv/keyboard.json b/keyboards/eyeohdesigns/babyv/keyboard.json
index 1197533189..849d59a227 100644
--- a/keyboards/eyeohdesigns/babyv/keyboard.json
+++ b/keyboards/eyeohdesigns/babyv/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "babyv",
"manufacturer": "Eye Oh Designs",
- "url": "",
"maintainer": "eye oh designs",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/eyeohdesigns/theboulevard/keyboard.json b/keyboards/eyeohdesigns/theboulevard/keyboard.json
index 94007dd2c5..cb2cd6b3c2 100644
--- a/keyboards/eyeohdesigns/theboulevard/keyboard.json
+++ b/keyboards/eyeohdesigns/theboulevard/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "the boulevard",
"manufacturer": "eye oh designs",
- "url": "",
"maintainer": "eye oh designs",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/facew/keyboard.json b/keyboards/facew/keyboard.json
index a8a7543b7a..395207d348 100644
--- a/keyboards/facew/keyboard.json
+++ b/keyboards/facew/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "FaceW",
"manufacturer": "SPRiT",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x20A0",
diff --git a/keyboards/falsonix/fx19/keyboard.json b/keyboards/falsonix/fx19/keyboard.json
index 4ef4730a5d..b940c914af 100644
--- a/keyboards/falsonix/fx19/keyboard.json
+++ b/keyboards/falsonix/fx19/keyboard.json
@@ -31,7 +31,6 @@
"rows": ["F0", "F1", "F4", "F5", "F6"]
},
"processor": "atmega32u4",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0000",
diff --git a/keyboards/fatotesa/keyboard.json b/keyboards/fatotesa/keyboard.json
index ba6fc08d0c..dd74076812 100644
--- a/keyboards/fatotesa/keyboard.json
+++ b/keyboards/fatotesa/keyboard.json
@@ -42,7 +42,6 @@
"cols": ["F5", "F6", "F7", "B1", "B3", "B2", "B6", null],
"rows": ["D4", "C6", "D7", "E6", "B4", "B5"]
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0000",
diff --git a/keyboards/fc660c/keyboard.json b/keyboards/fc660c/keyboard.json
index 6c573fef88..6486bf0587 100644
--- a/keyboards/fc660c/keyboard.json
+++ b/keyboards/fc660c/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "FC660C",
"manufacturer": "Hasu",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4853",
diff --git a/keyboards/fc980c/keyboard.json b/keyboards/fc980c/keyboard.json
index 9944dd3899..b22747ba15 100644
--- a/keyboards/fc980c/keyboard.json
+++ b/keyboards/fc980c/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "FC980C",
"manufacturer": "Hasu",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4853",
diff --git a/keyboards/flehrad/numbrero/keyboard.json b/keyboards/flehrad/numbrero/keyboard.json
index f72b06ca7c..723204fbc1 100644
--- a/keyboards/flehrad/numbrero/keyboard.json
+++ b/keyboards/flehrad/numbrero/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Numbrero",
"manufacturer": "Flehrad",
- "url": "",
"maintainer": "Flehrad",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/flehrad/snagpad/keyboard.json b/keyboards/flehrad/snagpad/keyboard.json
index 1b2a2c4ae1..48022f5518 100644
--- a/keyboards/flehrad/snagpad/keyboard.json
+++ b/keyboards/flehrad/snagpad/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Snagpad",
"manufacturer": "Flehrad",
- "url": "",
"maintainer": "Flehrad",
"usb": {
"vid": "0x4443",
diff --git a/keyboards/flehrad/tradestation/keyboard.json b/keyboards/flehrad/tradestation/keyboard.json
index 757325ceaf..f99ee313d3 100644
--- a/keyboards/flehrad/tradestation/keyboard.json
+++ b/keyboards/flehrad/tradestation/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Trade Station",
"manufacturer": "Flehrad",
- "url": "",
"maintainer": "Flehrad",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/fluorite/keyboard.json b/keyboards/fluorite/keyboard.json
index 37e74c387c..17824c36b7 100644
--- a/keyboards/fluorite/keyboard.json
+++ b/keyboards/fluorite/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "fluorite",
"manufacturer": "ihotsuno",
- "url": "",
"maintainer": "ihotsuno, qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/flx/virgo/keyboard.json b/keyboards/flx/virgo/keyboard.json
index 996425282d..73100da1e9 100644
--- a/keyboards/flx/virgo/keyboard.json
+++ b/keyboards/flx/virgo/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Virgo",
"manufacturer": "FLX",
- "url": "",
"maintainer": "mechmerlin",
"usb": {
"vid": "0x4658",
diff --git a/keyboards/foostan/cornelius/keyboard.json b/keyboards/foostan/cornelius/keyboard.json
index 75cf098c4d..4f9312825e 100644
--- a/keyboards/foostan/cornelius/keyboard.json
+++ b/keyboards/foostan/cornelius/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Cornelius",
"manufacturer": "Yushakobo",
- "url": "",
"maintainer": "foostan",
"usb": {
"vid": "0x3265",
diff --git a/keyboards/fortitude60/rev1/keyboard.json b/keyboards/fortitude60/rev1/keyboard.json
index 4ad8a723b7..3970a78404 100644
--- a/keyboards/fortitude60/rev1/keyboard.json
+++ b/keyboards/fortitude60/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Fortitude60",
"manufacturer": "Pekaso",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xCB10",
diff --git a/keyboards/foxlab/key65/hotswap/keyboard.json b/keyboards/foxlab/key65/hotswap/keyboard.json
index b21893fa88..c635903804 100644
--- a/keyboards/foxlab/key65/hotswap/keyboard.json
+++ b/keyboards/foxlab/key65/hotswap/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Key 65 Hotswap",
"manufacturer": "Fox Lab",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x464C",
diff --git a/keyboards/foxlab/key65/universal/keyboard.json b/keyboards/foxlab/key65/universal/keyboard.json
index daaa1b37b1..94cc4c94c2 100644
--- a/keyboards/foxlab/key65/universal/keyboard.json
+++ b/keyboards/foxlab/key65/universal/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Key 65 Universal",
"manufacturer": "Fox Lab",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x464C",
diff --git a/keyboards/foxlab/leaf60/hotswap/keyboard.json b/keyboards/foxlab/leaf60/hotswap/keyboard.json
index 55639853e9..20dd487c27 100644
--- a/keyboards/foxlab/leaf60/hotswap/keyboard.json
+++ b/keyboards/foxlab/leaf60/hotswap/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Leaf 60 Hotswap",
"manufacturer": "Fox Lab",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x464C",
diff --git a/keyboards/foxlab/leaf60/universal/keyboard.json b/keyboards/foxlab/leaf60/universal/keyboard.json
index 93bfe45cce..758e949aa2 100644
--- a/keyboards/foxlab/leaf60/universal/keyboard.json
+++ b/keyboards/foxlab/leaf60/universal/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Leaf 60 Universal",
"manufacturer": "Fox Lab",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x464C",
diff --git a/keyboards/foxlab/time80/keyboard.json b/keyboards/foxlab/time80/keyboard.json
index 9902ed770d..d4111207ed 100644
--- a/keyboards/foxlab/time80/keyboard.json
+++ b/keyboards/foxlab/time80/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Time80",
"manufacturer": "Fox Lab",
- "url": "",
"maintainer": "lukelex",
"usb": {
"vid": "0x464C",
diff --git a/keyboards/foxlab/time_re/hotswap/keyboard.json b/keyboards/foxlab/time_re/hotswap/keyboard.json
index cfef3317f2..2391284ee0 100644
--- a/keyboards/foxlab/time_re/hotswap/keyboard.json
+++ b/keyboards/foxlab/time_re/hotswap/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Time 80 Reforged",
"manufacturer": "Fox Lab",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x464C",
diff --git a/keyboards/foxlab/time_re/universal/keyboard.json b/keyboards/foxlab/time_re/universal/keyboard.json
index b53364a589..cd4fca6df8 100644
--- a/keyboards/foxlab/time_re/universal/keyboard.json
+++ b/keyboards/foxlab/time_re/universal/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Time 80 Reforged",
"manufacturer": "Fox Lab",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x464C",
diff --git a/keyboards/fs_streampad/keyboard.json b/keyboards/fs_streampad/keyboard.json
index 5adefff443..bf4f36a950 100644
--- a/keyboards/fs_streampad/keyboard.json
+++ b/keyboards/fs_streampad/keyboard.json
@@ -76,9 +76,6 @@
"pixel_flow": true,
"pixel_rain": true
},
- "default": {
- "animation": "cycle_left_right"
- },
"sleep": true,
"layout": [
{"matrix": [0, 0], "flags": 4, "x": 0, "y": 0 },
diff --git a/keyboards/ft/mars65/keyboard.json b/keyboards/ft/mars65/keyboard.json
index 3b6f5ec8a9..ab5e968b90 100644
--- a/keyboards/ft/mars65/keyboard.json
+++ b/keyboards/ft/mars65/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Mars 6.5",
"manufacturer": "FT",
- "url": "",
"maintainer": "wonderbeel",
"usb": {
"vid": "0x20A0",
diff --git a/keyboards/ft/mars80/keyboard.json b/keyboards/ft/mars80/keyboard.json
index 1d5e53dcbe..4862e84ab9 100644
--- a/keyboards/ft/mars80/keyboard.json
+++ b/keyboards/ft/mars80/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Mars 8.0",
"manufacturer": "FT",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x20A0",
diff --git a/keyboards/funky40/keyboard.json b/keyboards/funky40/keyboard.json
index d76b9eee2e..0aafa58041 100644
--- a/keyboards/funky40/keyboard.json
+++ b/keyboards/funky40/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Funky40",
"manufacturer": "TheFourthCow",
- "url": "",
"maintainer": "TheFourthCow",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/gami_studio/lex60/keyboard.json b/keyboards/gami_studio/lex60/keyboard.json
index be1715c844..d458d6a667 100644
--- a/keyboards/gami_studio/lex60/keyboard.json
+++ b/keyboards/gami_studio/lex60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Lex60",
"manufacturer": "Evyd13",
- "url": "",
"maintainer": "GamiStudio",
"usb": {
"vid": "0x7353",
diff --git a/keyboards/gboards/butterstick/keyboard.json b/keyboards/gboards/butterstick/keyboard.json
index 59d703925b..80204f6ba9 100644
--- a/keyboards/gboards/butterstick/keyboard.json
+++ b/keyboards/gboards/butterstick/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Butter Stick",
"manufacturer": "g Heavy Industries",
- "url": "",
"maintainer": "germ",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/gboards/gergoplex/keyboard.json b/keyboards/gboards/gergoplex/keyboard.json
index cf1e451392..111f7b8f2c 100644
--- a/keyboards/gboards/gergoplex/keyboard.json
+++ b/keyboards/gboards/gergoplex/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "GergoPlex",
"manufacturer": "g Heavy Industries",
- "url": "",
"maintainer": "germ",
"usb": {
"vid": "0x6B0A",
diff --git a/keyboards/geekboards/macropad_v2/keyboard.json b/keyboards/geekboards/macropad_v2/keyboard.json
index 54d779570a..31f21b97bf 100644
--- a/keyboards/geekboards/macropad_v2/keyboard.json
+++ b/keyboards/geekboards/macropad_v2/keyboard.json
@@ -47,7 +47,6 @@
},
"default": {
"animation": "cycle_up_down",
- "sat": 255,
"speed": 30,
"val": 192
},
diff --git a/keyboards/geekboards/tester/keyboard.json b/keyboards/geekboards/tester/keyboard.json
index 743e5e2392..57073ebdc0 100644
--- a/keyboards/geekboards/tester/keyboard.json
+++ b/keyboards/geekboards/tester/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Tester",
"manufacturer": "Geekboards",
- "url": "",
"maintainer": "moyi4681",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/ggkeyboards/genesis/hotswap/keyboard.json b/keyboards/ggkeyboards/genesis/hotswap/keyboard.json
index 5cd4f07716..cb5e94cf38 100644
--- a/keyboards/ggkeyboards/genesis/hotswap/keyboard.json
+++ b/keyboards/ggkeyboards/genesis/hotswap/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Genesis Hotswap",
"manufacturer": "GG Keyboards",
- "url": "",
"maintainer": "Spooknik",
"usb": {
"vid": "0xBB00",
diff --git a/keyboards/ggkeyboards/genesis/solder/keyboard.json b/keyboards/ggkeyboards/genesis/solder/keyboard.json
index 485be430e5..15fcc2334b 100644
--- a/keyboards/ggkeyboards/genesis/solder/keyboard.json
+++ b/keyboards/ggkeyboards/genesis/solder/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Genesis Solder",
"manufacturer": "GG Keyboards",
- "url": "",
"maintainer": "Spooknik",
"usb": {
"vid": "0xBB00",
diff --git a/keyboards/gh60/revc/keyboard.json b/keyboards/gh60/revc/keyboard.json
index 4f90f2540c..8e1c03c151 100644
--- a/keyboards/gh60/revc/keyboard.json
+++ b/keyboards/gh60/revc/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "GH60 Rev C",
"manufacturer": "geekhack",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4335",
diff --git a/keyboards/gh60/satan/keyboard.json b/keyboards/gh60/satan/keyboard.json
index e3f2685297..864e5fa90d 100644
--- a/keyboards/gh60/satan/keyboard.json
+++ b/keyboards/gh60/satan/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "GH60 Satan",
"manufacturer": "SATAN",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4335",
diff --git a/keyboards/gh60/v1p3/keyboard.json b/keyboards/gh60/v1p3/keyboard.json
index 18ac7608bb..34d8c992b4 100644
--- a/keyboards/gh60/v1p3/keyboard.json
+++ b/keyboards/gh60/v1p3/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "GH60 v1.3",
"manufacturer": "Unknown",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/gh80_3000/keyboard.json b/keyboards/gh80_3000/keyboard.json
index c88f5c8232..929f11f7c0 100644
--- a/keyboards/gh80_3000/keyboard.json
+++ b/keyboards/gh80_3000/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "GH80-3000",
"manufacturer": "farmakon",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/ghs/jem/info.json b/keyboards/ghs/jem/info.json
index b90655647d..4bda443ac5 100644
--- a/keyboards/ghs/jem/info.json
+++ b/keyboards/ghs/jem/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "GHS.JEM",
"manufacturer": "Gone Hacking Studio",
- "url": "",
"maintainer": "ramonimbao",
"usb": {
"vid": "0x0645",
@@ -29,8 +28,6 @@
"rgblight": {
"led_count": 22,
"hue_steps": 10,
- "saturation_steps": 17,
- "brightness_steps": 17,
"animations": {
"breathing": true,
"rainbow_mood": true,
diff --git a/keyboards/ghs/xls/keyboard.json b/keyboards/ghs/xls/keyboard.json
index f062f32af8..acd916884a 100644
--- a/keyboards/ghs/xls/keyboard.json
+++ b/keyboards/ghs/xls/keyboard.json
@@ -19,7 +19,6 @@
"indicators": {
"num_lock": "B0"
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0002",
diff --git a/keyboards/gkeyboard/gkb_m16/keyboard.json b/keyboards/gkeyboard/gkb_m16/keyboard.json
index 1f1fe50a67..fe846b4bd2 100644
--- a/keyboards/gkeyboard/gkb_m16/keyboard.json
+++ b/keyboards/gkeyboard/gkb_m16/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "GKB-M16",
"manufacturer": "gkeyboard",
- "url": "",
"maintainer": "gkeyboard",
"usb": {
"vid": "0x474B",
diff --git a/keyboards/gl516/xr63gl/keyboard.json b/keyboards/gl516/xr63gl/keyboard.json
index ddeb425462..808bd9d1b1 100644
--- a/keyboards/gl516/xr63gl/keyboard.json
+++ b/keyboards/gl516/xr63gl/keyboard.json
@@ -17,7 +17,6 @@
"rows": ["GP26", "GP27", "GP28", "GP29", "GP0", "GP3", "GP4", "GP2", "GP1"]
},
"processor": "RP2040",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0001",
diff --git a/keyboards/glenpickle/chimera_ergo/keyboard.json b/keyboards/glenpickle/chimera_ergo/keyboard.json
index 038498fd10..d2b4d93b9d 100644
--- a/keyboards/glenpickle/chimera_ergo/keyboard.json
+++ b/keyboards/glenpickle/chimera_ergo/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Chimera Ergo",
"manufacturer": "Unknown",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/glenpickle/chimera_ls/keyboard.json b/keyboards/glenpickle/chimera_ls/keyboard.json
index b0d6a52912..23c870c74d 100644
--- a/keyboards/glenpickle/chimera_ls/keyboard.json
+++ b/keyboards/glenpickle/chimera_ls/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Chimera Lets Split",
"manufacturer": "Unknown",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/gon/nerd60/keyboard.json b/keyboards/gon/nerd60/keyboard.json
index 590b3f3d9e..01cbaf3cd0 100644
--- a/keyboards/gon/nerd60/keyboard.json
+++ b/keyboards/gon/nerd60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "NerD 60",
"manufacturer": "GON",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4E45",
diff --git a/keyboards/gon/nerdtkl/keyboard.json b/keyboards/gon/nerdtkl/keyboard.json
index ccf13ec325..ae9db2553b 100644
--- a/keyboards/gon/nerdtkl/keyboard.json
+++ b/keyboards/gon/nerdtkl/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "NerD TKL",
"manufacturer": "GON",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4E45",
diff --git a/keyboards/gopolar/gg86/keyboard.json b/keyboards/gopolar/gg86/keyboard.json
index b704582aa6..a9944beea9 100644
--- a/keyboards/gopolar/gg86/keyboard.json
+++ b/keyboards/gopolar/gg86/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "GG86 Tai-Chi",
"manufacturer": "Gopolar",
- "url": "",
"maintainer": "Gopolar",
"usb": {
"vid": "0x0007",
diff --git a/keyboards/gray_studio/cod67/keyboard.json b/keyboards/gray_studio/cod67/keyboard.json
index fa946d9b33..e0a71c6703 100644
--- a/keyboards/gray_studio/cod67/keyboard.json
+++ b/keyboards/gray_studio/cod67/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "COD67",
"manufacturer": "Graystudio",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4753",
diff --git a/keyboards/gray_studio/hb85/keyboard.json b/keyboards/gray_studio/hb85/keyboard.json
index 61387a2709..0fcf30a925 100644
--- a/keyboards/gray_studio/hb85/keyboard.json
+++ b/keyboards/gray_studio/hb85/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "HB85",
"manufacturer": "Gray Studio",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4753",
diff --git a/keyboards/gray_studio/space65/keyboard.json b/keyboards/gray_studio/space65/keyboard.json
index ffe825ff4c..6534f165a8 100644
--- a/keyboards/gray_studio/space65/keyboard.json
+++ b/keyboards/gray_studio/space65/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Space65",
"manufacturer": "Graystudio",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4753",
diff --git a/keyboards/gray_studio/think65/hotswap/keyboard.json b/keyboards/gray_studio/think65/hotswap/keyboard.json
index c2dba58190..a38f648eca 100644
--- a/keyboards/gray_studio/think65/hotswap/keyboard.json
+++ b/keyboards/gray_studio/think65/hotswap/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Think6.5\u00b0 Hotswap",
"manufacturer": "Graystudio",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4753",
diff --git a/keyboards/gray_studio/think65/solder/keyboard.json b/keyboards/gray_studio/think65/solder/keyboard.json
index 09096a854e..283516b60a 100644
--- a/keyboards/gray_studio/think65/solder/keyboard.json
+++ b/keyboards/gray_studio/think65/solder/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Think6.5\u00b0",
"manufacturer": "Graystudio",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4753",
diff --git a/keyboards/grid600/press/keyboard.json b/keyboards/grid600/press/keyboard.json
index 74c3e7aad1..8e8ae09f1c 100644
--- a/keyboards/grid600/press/keyboard.json
+++ b/keyboards/grid600/press/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "PRESS",
"manufacturer": "Grid",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/gvalchca/ga150/keyboard.json b/keyboards/gvalchca/ga150/keyboard.json
index 38028799fa..cdea8ea976 100644
--- a/keyboards/gvalchca/ga150/keyboard.json
+++ b/keyboards/gvalchca/ga150/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "GA15.0",
"manufacturer": "Gvalchca",
- "url": "",
"maintainer": "Gvalchca",
"usb": {
"vid": "0x6776",
diff --git a/keyboards/h0oni/deskpad/keyboard.json b/keyboards/h0oni/deskpad/keyboard.json
index d7ad53cd43..1d84fe3ee4 100644
--- a/keyboards/h0oni/deskpad/keyboard.json
+++ b/keyboards/h0oni/deskpad/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Deskpad",
"manufacturer": "Hydrogen",
- "url": "",
"maintainer": "Hydrogen BD",
"usb": {
"vid": "0x4D53",
diff --git a/keyboards/h0oni/hotduck/keyboard.json b/keyboards/h0oni/hotduck/keyboard.json
index bdb2386021..a2a709d71d 100644
--- a/keyboards/h0oni/hotduck/keyboard.json
+++ b/keyboards/h0oni/hotduck/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "hotDuck",
"manufacturer": "h0oni",
- "url": "",
"maintainer": "h0oni",
"usb": {
"vid": "0x4D53",
diff --git a/keyboards/hadron/info.json b/keyboards/hadron/info.json
index 1d25e18f30..1268c24a10 100644
--- a/keyboards/hadron/info.json
+++ b/keyboards/hadron/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Hadron",
"manufacturer": "ishtob",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFB30",
diff --git a/keyboards/halokeys/elemental75/keyboard.json b/keyboards/halokeys/elemental75/keyboard.json
index 866916b69b..b26d094c4b 100644
--- a/keyboards/halokeys/elemental75/keyboard.json
+++ b/keyboards/halokeys/elemental75/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Elemental75",
"manufacturer": "Halokeys",
- "url": "",
"maintainer": "shamit05",
"usb": {
"vid": "0xEA0B",
diff --git a/keyboards/handwired/108key_trackpoint/keyboard.json b/keyboards/handwired/108key_trackpoint/keyboard.json
index 94acb1a26c..0e8e1a0963 100644
--- a/keyboards/handwired/108key_trackpoint/keyboard.json
+++ b/keyboards/handwired/108key_trackpoint/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "108Key-TrackPoint",
"manufacturer": "QMK",
- "url": "",
"maintainer": "mkem114",
"usb": {
"vid": "0x1234",
diff --git a/keyboards/handwired/2x5keypad/keyboard.json b/keyboards/handwired/2x5keypad/keyboard.json
index 0b146f165b..f4ee815c10 100644
--- a/keyboards/handwired/2x5keypad/keyboard.json
+++ b/keyboards/handwired/2x5keypad/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "2x5keypad",
"manufacturer": "Jonathan Cameron",
- "url": "",
"maintainer": "jmcameron",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/3dfoxc/keyboard.json b/keyboards/handwired/3dfoxc/keyboard.json
index 7675acd73b..1475d52ab4 100644
--- a/keyboards/handwired/3dfoxc/keyboard.json
+++ b/keyboards/handwired/3dfoxc/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "3dfoxc",
"manufacturer": "dlgoodr",
- "url": "",
"maintainer": "dlgoodr",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/3dortho14u/rev1/keyboard.json b/keyboards/handwired/3dortho14u/rev1/keyboard.json
index 63773d405f..3a3c872d3a 100644
--- a/keyboards/handwired/3dortho14u/rev1/keyboard.json
+++ b/keyboards/handwired/3dortho14u/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"manufacturer": "xia0",
"keyboard_name": "3dortho14u",
- "url": "",
"maintainer": "xia0",
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
diff --git a/keyboards/handwired/3dortho14u/rev2/keyboard.json b/keyboards/handwired/3dortho14u/rev2/keyboard.json
index 9e048d643d..831e24e118 100644
--- a/keyboards/handwired/3dortho14u/rev2/keyboard.json
+++ b/keyboards/handwired/3dortho14u/rev2/keyboard.json
@@ -1,7 +1,6 @@
{
"manufacturer": "xia0",
"keyboard_name": "3dortho14u",
- "url": "",
"maintainer": "xia0",
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
diff --git a/keyboards/handwired/3dp660/keyboard.json b/keyboards/handwired/3dp660/keyboard.json
index c1c4c13e7e..5b26aaecc6 100644
--- a/keyboards/handwired/3dp660/keyboard.json
+++ b/keyboards/handwired/3dp660/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "3dp660",
"manufacturer": "gooberpsycho",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x676F",
diff --git a/keyboards/handwired/3dp660_oled/keyboard.json b/keyboards/handwired/3dp660_oled/keyboard.json
index ef863b3b52..c687a8bbb4 100644
--- a/keyboards/handwired/3dp660_oled/keyboard.json
+++ b/keyboards/handwired/3dp660_oled/keyboard.json
@@ -22,7 +22,6 @@
"rows": ["D5", "B0", "B5", "B4", "E6", "D7", "C6", "D4", "D2", "D3"]
},
"processor": "atmega32u4",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x3661",
diff --git a/keyboards/handwired/412_64/keyboard.json b/keyboards/handwired/412_64/keyboard.json
index c0f27dcb91..f80611178e 100644
--- a/keyboards/handwired/412_64/keyboard.json
+++ b/keyboards/handwired/412_64/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "412-64 Model 00",
"manufacturer": "EDI/SCI",
- "url": "",
"maintainer": "fateeverywhere",
"usb": {
"vid": "0xF7E0",
diff --git a/keyboards/handwired/42/keyboard.json b/keyboards/handwired/42/keyboard.json
index 45801b7773..7dbb5827df 100644
--- a/keyboards/handwired/42/keyboard.json
+++ b/keyboards/handwired/42/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "42",
"manufacturer": "nglgzz",
- "url": "",
"maintainer": "nglgzz",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/6macro/keyboard.json b/keyboards/handwired/6macro/keyboard.json
index 702008de34..10c59bbbac 100644
--- a/keyboards/handwired/6macro/keyboard.json
+++ b/keyboards/handwired/6macro/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "6macro",
"manufacturer": "joaofbmaia",
- "url": "",
"maintainer": "joaofbmaia",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/aek64/keyboard.json b/keyboards/handwired/aek64/keyboard.json
index a06ed6decc..0a57e17927 100644
--- a/keyboards/handwired/aek64/keyboard.json
+++ b/keyboards/handwired/aek64/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "AEK64",
"manufacturer": "4sStylZ and others makers",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/alcor_dactyl/keyboard.json b/keyboards/handwired/alcor_dactyl/keyboard.json
index b38d39bfcc..81d0228dd6 100644
--- a/keyboards/handwired/alcor_dactyl/keyboard.json
+++ b/keyboards/handwired/alcor_dactyl/keyboard.json
@@ -4,7 +4,6 @@
"maintainer": "rocketstrong",
"bootloader": "rp2040",
"processor": "RP2040",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0000",
diff --git a/keyboards/handwired/aplx2/keyboard.json b/keyboards/handwired/aplx2/keyboard.json
index 6a9d7130bd..3e43576f58 100644
--- a/keyboards/handwired/aplx2/keyboard.json
+++ b/keyboards/handwired/aplx2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Aplx2",
"manufacturer": "Aplyard",
- "url": "",
"maintainer": "Aplyard",
"usb": {
"vid": "0xE0E0",
diff --git a/keyboards/handwired/arrow_pad/keyboard.json b/keyboards/handwired/arrow_pad/keyboard.json
index 237c1f0749..f70645fe2a 100644
--- a/keyboards/handwired/arrow_pad/keyboard.json
+++ b/keyboards/handwired/arrow_pad/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "GoldPad",
"manufacturer": "Nobody",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/atreus50/keyboard.json b/keyboards/handwired/atreus50/keyboard.json
index 961d1959b0..029d622f98 100644
--- a/keyboards/handwired/atreus50/keyboard.json
+++ b/keyboards/handwired/atreus50/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Atreus50",
"manufacturer": "Hexwire",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xBB80",
diff --git a/keyboards/handwired/bdn9_ble/keyboard.json b/keyboards/handwired/bdn9_ble/keyboard.json
index 20f020504c..27ed008f43 100644
--- a/keyboards/handwired/bdn9_ble/keyboard.json
+++ b/keyboards/handwired/bdn9_ble/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "BDN9-BLE",
"manufacturer": "KeyPCB/Keebio",
- "url": "",
"maintainer": "merlin04",
"usb": {
"vid": "0xCB10",
diff --git a/keyboards/handwired/bigmac/keyboard.json b/keyboards/handwired/bigmac/keyboard.json
index 8eff62a7ea..40592658a1 100644
--- a/keyboards/handwired/bigmac/keyboard.json
+++ b/keyboards/handwired/bigmac/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "BigMac",
"manufacturer": "Taylore101",
- "url": "",
"maintainer": "Taylore101",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/boss566y/redragon_vara/keyboard.json b/keyboards/handwired/boss566y/redragon_vara/keyboard.json
index b75caa6544..579cfe0576 100644
--- a/keyboards/handwired/boss566y/redragon_vara/keyboard.json
+++ b/keyboards/handwired/boss566y/redragon_vara/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Redragon Vara",
"manufacturer": "PH",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x5048",
diff --git a/keyboards/handwired/brain/keyboard.json b/keyboards/handwired/brain/keyboard.json
index c5f8c3682c..9593ad4471 100644
--- a/keyboards/handwired/brain/keyboard.json
+++ b/keyboards/handwired/brain/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Brain",
"manufacturer": "Klackygears",
- "url": "",
"maintainer": "Klackygears",
"usb": {
"vid": "0x4A53",
diff --git a/keyboards/handwired/cans12er/keyboard.json b/keyboards/handwired/cans12er/keyboard.json
index 9d08706423..31fe7ebc83 100644
--- a/keyboards/handwired/cans12er/keyboard.json
+++ b/keyboards/handwired/cans12er/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Cans12er",
"manufacturer": "Can",
- "url": "",
"maintainer": "canbaytok",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/chiron/keyboard.json b/keyboards/handwired/chiron/keyboard.json
index 1685a9d477..7000421646 100644
--- a/keyboards/handwired/chiron/keyboard.json
+++ b/keyboards/handwired/chiron/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Chiron",
"manufacturer": "Mike Hix",
- "url": "",
"maintainer": "musl",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/ck4x4/keyboard.json b/keyboards/handwired/ck4x4/keyboard.json
index 642408cc0e..717820f9fc 100644
--- a/keyboards/handwired/ck4x4/keyboard.json
+++ b/keyboards/handwired/ck4x4/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "CK4x4",
"manufacturer": "QMK",
- "url": "",
"maintainer": "awkannan",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/cmd60/keyboard.json b/keyboards/handwired/cmd60/keyboard.json
index f9733a7582..05872439c9 100644
--- a/keyboards/handwired/cmd60/keyboard.json
+++ b/keyboards/handwired/cmd60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "CMD60",
"manufacturer": "cmd",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/colorlice/keyboard.json b/keyboards/handwired/colorlice/keyboard.json
index 4ccc10527c..7292137dff 100644
--- a/keyboards/handwired/colorlice/keyboard.json
+++ b/keyboards/handwired/colorlice/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "ColorLice",
"manufacturer": "marhalloweenvt",
- "url": "",
"maintainer": "marhalloweenvt",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/croxsplit44/keyboard.json b/keyboards/handwired/croxsplit44/keyboard.json
index d497942b95..0d29f6fd66 100644
--- a/keyboards/handwired/croxsplit44/keyboard.json
+++ b/keyboards/handwired/croxsplit44/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "splitcustom44",
"manufacturer": "Samux6146",
- "url": "",
"maintainer": "Samux6146",
"usb": {
"vid": "0xB62C",
diff --git a/keyboards/handwired/curiosity/keyboard.json b/keyboards/handwired/curiosity/keyboard.json
index e95fa25e71..85428b33ca 100644
--- a/keyboards/handwired/curiosity/keyboard.json
+++ b/keyboards/handwired/curiosity/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Curiosity",
"manufacturer": "Spaceman",
- "url": "",
"maintainer": "Spaceman",
"usb": {
"vid": "0x5342",
diff --git a/keyboards/handwired/d48/keyboard.json b/keyboards/handwired/d48/keyboard.json
index 99c8a67326..a0266e475e 100644
--- a/keyboards/handwired/d48/keyboard.json
+++ b/keyboards/handwired/d48/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "D48",
"manufacturer": "Andrew Dunai",
- "url": "",
"maintainer": "and3rson",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/dactyl/keyboard.json b/keyboards/handwired/dactyl/keyboard.json
index 58baf228ca..6026469176 100644
--- a/keyboards/handwired/dactyl/keyboard.json
+++ b/keyboards/handwired/dactyl/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Dactyl",
"manufacturer": "Adereth",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/dactyl_cc/keyboard.json b/keyboards/handwired/dactyl_cc/keyboard.json
index e607bfad1a..f4097b0487 100644
--- a/keyboards/handwired/dactyl_cc/keyboard.json
+++ b/keyboards/handwired/dactyl_cc/keyboard.json
@@ -23,7 +23,9 @@
"diode_direction": "COL2ROW",
"split": {
"enabled": true,
- "soft_serial_pin": "D0"
+ "serial": {
+ "pin": "D0"
+ }
},
"development_board": "promicro",
"layouts": {
diff --git a/keyboards/handwired/dactyl_kinesis/keyboard.json b/keyboards/handwired/dactyl_kinesis/keyboard.json
index ee68a2c515..a536159532 100644
--- a/keyboards/handwired/dactyl_kinesis/keyboard.json
+++ b/keyboards/handwired/dactyl_kinesis/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Dactyl Kinesis",
"manufacturer": "dmik",
- "url": "",
"maintainer": "dmik",
"usb": {
"vid": "0x444D",
@@ -29,7 +28,9 @@
"diode_direction": "COL2ROW",
"split": {
"enabled": true,
- "soft_serial_pin": "D0"
+ "serial": {
+ "pin": "D0"
+ }
},
"development_board": "promicro",
"layouts": {
diff --git a/keyboards/handwired/dactyl_left/keyboard.json b/keyboards/handwired/dactyl_left/keyboard.json
index cfb3ad1489..2a2254f578 100644
--- a/keyboards/handwired/dactyl_left/keyboard.json
+++ b/keyboards/handwired/dactyl_left/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "dactyl_left",
"manufacturer": "RedForty",
- "url": "",
"maintainer": "RedForty",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/dactyl_lightcycle/keyboard.json b/keyboards/handwired/dactyl_lightcycle/keyboard.json
index 1b5f2dd39a..6e56b18f6f 100644
--- a/keyboards/handwired/dactyl_lightcycle/keyboard.json
+++ b/keyboards/handwired/dactyl_lightcycle/keyboard.json
@@ -26,7 +26,9 @@
"diode_direction": "COL2ROW",
"split": {
"enabled": true,
- "soft_serial_pin": "D0"
+ "serial": {
+ "pin": "D0"
+ }
},
"development_board": "promicro",
"community_layouts": ["split_3x6_3", "split_3x5_3"],
diff --git a/keyboards/handwired/dactyl_manuform/4x5/keyboard.json b/keyboards/handwired/dactyl_manuform/4x5/keyboard.json
index e0a1b531a5..e66bfa2ff6 100644
--- a/keyboards/handwired/dactyl_manuform/4x5/keyboard.json
+++ b/keyboards/handwired/dactyl_manuform/4x5/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Dactyl Manuform 4x5",
"manufacturer": "tshort",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x444D",
@@ -35,7 +34,9 @@
"diode_direction": "COL2ROW",
"split": {
"enabled": true,
- "soft_serial_pin": "D0"
+ "serial": {
+ "pin": "D0"
+ }
},
"processor": "atmega32u4",
"bootloader": "caterina",
diff --git a/keyboards/handwired/dactyl_manuform/4x5_5/keyboard.json b/keyboards/handwired/dactyl_manuform/4x5_5/keyboard.json
index 7efc4718ad..134793cac8 100644
--- a/keyboards/handwired/dactyl_manuform/4x5_5/keyboard.json
+++ b/keyboards/handwired/dactyl_manuform/4x5_5/keyboard.json
@@ -29,7 +29,9 @@
"diode_direction": "COL2ROW",
"split": {
"enabled": true,
- "soft_serial_pin": "D0"
+ "serial": {
+ "pin": "D0"
+ }
},
"development_board": "promicro",
"layouts": {
diff --git a/keyboards/handwired/dactyl_manuform/4x6/keyboard.json b/keyboards/handwired/dactyl_manuform/4x6/keyboard.json
index d589c532a8..f69fb8d426 100644
--- a/keyboards/handwired/dactyl_manuform/4x6/keyboard.json
+++ b/keyboards/handwired/dactyl_manuform/4x6/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Dactyl Manuform 4x6",
"manufacturer": "tshort",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x444D",
@@ -35,7 +34,9 @@
"diode_direction": "COL2ROW",
"split": {
"enabled": true,
- "soft_serial_pin": "D0"
+ "serial": {
+ "pin": "D0"
+ }
},
"processor": "atmega32u4",
"bootloader": "caterina",
diff --git a/keyboards/handwired/dactyl_manuform/4x6_4_3/keyboard.json b/keyboards/handwired/dactyl_manuform/4x6_4_3/keyboard.json
index c0c24a8966..1846f2a661 100644
--- a/keyboards/handwired/dactyl_manuform/4x6_4_3/keyboard.json
+++ b/keyboards/handwired/dactyl_manuform/4x6_4_3/keyboard.json
@@ -32,7 +32,9 @@
"diode_direction": "COL2ROW",
"split": {
"enabled": true,
- "soft_serial_pin": "D0"
+ "serial": {
+ "pin": "D0"
+ }
},
"development_board": "promicro",
"layouts": {
diff --git a/keyboards/handwired/dactyl_manuform/4x6_5/keyboard.json b/keyboards/handwired/dactyl_manuform/4x6_5/keyboard.json
index 47ad7aa920..d4674042a2 100644
--- a/keyboards/handwired/dactyl_manuform/4x6_5/keyboard.json
+++ b/keyboards/handwired/dactyl_manuform/4x6_5/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Dactyl Manuform 4x6 5 thumb keys",
"manufacturer": "tshort",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x444D",
@@ -35,7 +34,9 @@
"diode_direction": "COL2ROW",
"split": {
"enabled": true,
- "soft_serial_pin": "D0"
+ "serial": {
+ "pin": "D0"
+ }
},
"processor": "atmega32u4",
"bootloader": "caterina",
diff --git a/keyboards/handwired/dactyl_manuform/5x6/keyboard.json b/keyboards/handwired/dactyl_manuform/5x6/keyboard.json
index 353b148126..020bf43fdd 100644
--- a/keyboards/handwired/dactyl_manuform/5x6/keyboard.json
+++ b/keyboards/handwired/dactyl_manuform/5x6/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Dactyl-Manuform (5x6)",
"manufacturer": "tshort",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x444D",
@@ -35,7 +34,9 @@
"diode_direction": "COL2ROW",
"split": {
"enabled": true,
- "soft_serial_pin": "D0"
+ "serial": {
+ "pin": "D0"
+ }
},
"processor": "atmega32u4",
"bootloader": "caterina",
diff --git a/keyboards/handwired/dactyl_manuform/5x6_2_5/keyboard.json b/keyboards/handwired/dactyl_manuform/5x6_2_5/keyboard.json
index 620ffdec06..739eb573ff 100644
--- a/keyboards/handwired/dactyl_manuform/5x6_2_5/keyboard.json
+++ b/keyboards/handwired/dactyl_manuform/5x6_2_5/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Dactyl-Manuform (5x6+2)",
"manufacturer": "tshort",
- "url": "",
"maintainer": "jceb",
"usb": {
"vid": "0x444D",
@@ -29,7 +28,9 @@
"diode_direction": "COL2ROW",
"split": {
"enabled": true,
- "soft_serial_pin": "D0",
+ "serial": {
+ "pin": "D0"
+ },
"bootmagic": {
"matrix": [6, 5]
}
diff --git a/keyboards/handwired/dactyl_manuform/5x6_5/keyboard.json b/keyboards/handwired/dactyl_manuform/5x6_5/keyboard.json
index fc7676aa4b..7c89289bb2 100644
--- a/keyboards/handwired/dactyl_manuform/5x6_5/keyboard.json
+++ b/keyboards/handwired/dactyl_manuform/5x6_5/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Dactyl-Manuform (5x6)",
"manufacturer": "tshort",
- "url": "",
"maintainer": "jceb",
"usb": {
"vid": "0x444D",
@@ -29,7 +28,9 @@
"diode_direction": "COL2ROW",
"split": {
"enabled": true,
- "soft_serial_pin": "D0",
+ "serial": {
+ "pin": "D0"
+ },
"bootmagic": {
"matrix": [6, 5]
}
diff --git a/keyboards/handwired/dactyl_manuform/5x6_6/keyboard.json b/keyboards/handwired/dactyl_manuform/5x6_6/keyboard.json
index 974f1b8bc3..ae73995d49 100644
--- a/keyboards/handwired/dactyl_manuform/5x6_6/keyboard.json
+++ b/keyboards/handwired/dactyl_manuform/5x6_6/keyboard.json
@@ -29,7 +29,9 @@
"diode_direction": "COL2ROW",
"split": {
"enabled": true,
- "soft_serial_pin": "D3"
+ "serial": {
+ "pin": "D3"
+ }
},
"processor": "atmega32u4",
"bootloader": "caterina",
diff --git a/keyboards/handwired/dactyl_manuform/5x6_68/keyboard.json b/keyboards/handwired/dactyl_manuform/5x6_68/keyboard.json
index 5b6bdfb86e..33d8c3c080 100644
--- a/keyboards/handwired/dactyl_manuform/5x6_68/keyboard.json
+++ b/keyboards/handwired/dactyl_manuform/5x6_68/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Dactyl-Manuform (5x6) 68 Keys",
"manufacturer": "kpagratis",
- "url": "",
"maintainer": "kpagratis",
"development_board": "promicro",
"usb": {
@@ -25,7 +24,9 @@
},
"split": {
"enabled": true,
- "soft_serial_pin": "D0"
+ "serial": {
+ "pin": "D0"
+ }
},
"matrix_pins": {
"cols": ["D4", "C6", "D7", "E6", "B4", "B5"],
diff --git a/keyboards/handwired/dactyl_manuform/5x7/keyboard.json b/keyboards/handwired/dactyl_manuform/5x7/keyboard.json
index d40a45dfa7..2534a76d78 100644
--- a/keyboards/handwired/dactyl_manuform/5x7/keyboard.json
+++ b/keyboards/handwired/dactyl_manuform/5x7/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Dactyl-Manuform (5x7)",
"manufacturer": "tshort",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x444D",
@@ -35,7 +34,9 @@
"diode_direction": "COL2ROW",
"split": {
"enabled": true,
- "soft_serial_pin": "D0"
+ "serial": {
+ "pin": "D0"
+ }
},
"processor": "atmega32u4",
"bootloader": "caterina",
diff --git a/keyboards/handwired/dactyl_manuform/5x8/keyboard.json b/keyboards/handwired/dactyl_manuform/5x8/keyboard.json
index 24ac4924ac..2ac3010717 100644
--- a/keyboards/handwired/dactyl_manuform/5x8/keyboard.json
+++ b/keyboards/handwired/dactyl_manuform/5x8/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Dactyl-Manuform (5x8)",
"manufacturer": "tshort",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x444D",
diff --git a/keyboards/handwired/dactyl_manuform/6x6/info.json b/keyboards/handwired/dactyl_manuform/6x6/info.json
index 080e4e1942..3a26d38af1 100644
--- a/keyboards/handwired/dactyl_manuform/6x6/info.json
+++ b/keyboards/handwired/dactyl_manuform/6x6/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Dactyl-Manuform (6x6)",
"manufacturer": "tshort",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x444D",
diff --git a/keyboards/handwired/dactyl_manuform/6x6/promicro/keyboard.json b/keyboards/handwired/dactyl_manuform/6x6/promicro/keyboard.json
index 213a3c29f5..44ae441270 100644
--- a/keyboards/handwired/dactyl_manuform/6x6/promicro/keyboard.json
+++ b/keyboards/handwired/dactyl_manuform/6x6/promicro/keyboard.json
@@ -6,7 +6,9 @@
"diode_direction": "COL2ROW",
"split": {
"enabled": true,
- "soft_serial_pin": "D0"
+ "serial": {
+ "pin": "D0"
+ }
},
"rgblight": {
"led_count": 12
diff --git a/keyboards/handwired/dactyl_manuform/6x6_4/keyboard.json b/keyboards/handwired/dactyl_manuform/6x6_4/keyboard.json
index 98e96c9639..e60fa249f4 100644
--- a/keyboards/handwired/dactyl_manuform/6x6_4/keyboard.json
+++ b/keyboards/handwired/dactyl_manuform/6x6_4/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Dactyl-Manuform (6x6+4)",
"manufacturer": "tshort",
- "url": "",
"maintainer": "dmik",
"usb": {
"vid": "0x444D",
@@ -35,7 +34,9 @@
"diode_direction": "COL2ROW",
"split": {
"enabled": true,
- "soft_serial_pin": "D0"
+ "serial": {
+ "pin": "D0"
+ }
},
"processor": "atmega32u4",
"bootloader": "caterina",
diff --git a/keyboards/handwired/dactyl_manuform/6x7/keyboard.json b/keyboards/handwired/dactyl_manuform/6x7/keyboard.json
index 153b6c75c4..7d1e72ff9e 100644
--- a/keyboards/handwired/dactyl_manuform/6x7/keyboard.json
+++ b/keyboards/handwired/dactyl_manuform/6x7/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Dactyl-Manuform (6x7)",
"manufacturer": "tshort",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x444D",
@@ -32,7 +31,9 @@
"diode_direction": "COL2ROW",
"split": {
"enabled": true,
- "soft_serial_pin": "D0"
+ "serial": {
+ "pin": "D0"
+ }
},
"rgblight": {
"led_count": 12
diff --git a/keyboards/handwired/dactyl_maximus/keyboard.json b/keyboards/handwired/dactyl_maximus/keyboard.json
index 081fab571a..f9f5160ee6 100644
--- a/keyboards/handwired/dactyl_maximus/keyboard.json
+++ b/keyboards/handwired/dactyl_maximus/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Dactyl Maximus",
"manufacturer": "handwired",
- "url": "",
"maintainer": "dunk2k",
"usb": {
"vid": "0x444C",
@@ -26,7 +25,9 @@
"diode_direction": "COL2ROW",
"split": {
"enabled": true,
- "soft_serial_pin": "D1"
+ "serial": {
+ "pin": "D1"
+ }
},
"development_board": "promicro",
"layouts": {
diff --git a/keyboards/handwired/dactyl_minidox/keyboard.json b/keyboards/handwired/dactyl_minidox/keyboard.json
index 5bd5c5c05a..b488bac4b0 100644
--- a/keyboards/handwired/dactyl_minidox/keyboard.json
+++ b/keyboards/handwired/dactyl_minidox/keyboard.json
@@ -67,7 +67,9 @@
"diode_direction": "ROW2COL",
"split": {
"enabled": true,
- "soft_serial_pin": "D0"
+ "serial": {
+ "pin": "D0"
+ }
},
"development_board": "promicro",
"community_layouts": ["split_3x5_3"],
diff --git a/keyboards/handwired/dactyl_promicro/keyboard.json b/keyboards/handwired/dactyl_promicro/keyboard.json
index 824ffe7e7e..86576b3e09 100644
--- a/keyboards/handwired/dactyl_promicro/keyboard.json
+++ b/keyboards/handwired/dactyl_promicro/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Dactyl Ergo(6x6)",
"manufacturer": "tshort",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
@@ -29,7 +28,9 @@
"diode_direction": "COL2ROW",
"split": {
"enabled": true,
- "soft_serial_pin": "D0"
+ "serial": {
+ "pin": "D0"
+ }
},
"rgblight": {
"led_count": 12
diff --git a/keyboards/handwired/dactyl_rah/keyboard.json b/keyboards/handwired/dactyl_rah/keyboard.json
index 3bc5dc0854..903aafc973 100644
--- a/keyboards/handwired/dactyl_rah/keyboard.json
+++ b/keyboards/handwired/dactyl_rah/keyboard.json
@@ -29,7 +29,9 @@
"diode_direction": "COL2ROW",
"split": {
"enabled": true,
- "soft_serial_pin": "D0"
+ "serial": {
+ "pin": "D0"
+ }
},
"processor": "atmega32u4",
"bootloader": "caterina",
diff --git a/keyboards/handwired/dactyl_tracer/keyboard.json b/keyboards/handwired/dactyl_tracer/keyboard.json
index 29e5990666..92a8a2c76b 100644
--- a/keyboards/handwired/dactyl_tracer/keyboard.json
+++ b/keyboards/handwired/dactyl_tracer/keyboard.json
@@ -24,7 +24,9 @@
"development_board": "promicro",
"split": {
"enabled": true,
- "soft_serial_pin": "D0"
+ "serial": {
+ "pin": "D0"
+ }
},
"layouts": {
"LAYOUT" : {
diff --git a/keyboards/handwired/daishi/keyboard.json b/keyboards/handwired/daishi/keyboard.json
index 22044faab3..d774f13a5b 100644
--- a/keyboards/handwired/daishi/keyboard.json
+++ b/keyboards/handwired/daishi/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Daishi",
"manufacturer": "MetaMechs",
- "url": "",
"maintainer": "Croktopus",
"usb": {
"vid": "0x6D6D",
diff --git a/keyboards/handwired/daskeyboard/daskeyboard4/keyboard.json b/keyboards/handwired/daskeyboard/daskeyboard4/keyboard.json
index 8308506512..d40ef0210b 100644
--- a/keyboards/handwired/daskeyboard/daskeyboard4/keyboard.json
+++ b/keyboards/handwired/daskeyboard/daskeyboard4/keyboard.json
@@ -43,114 +43,233 @@
"tapping": {
"toggle": 2
},
+ "community_layouts": ["fullsize_ansi", "fullsize_iso"],
"layouts": {
+ "LAYOUT_fullsize_ansi": {
+ "layout": [
+ {"matrix": [5, 16], "x": 0, "y": 0},
+ {"matrix": [2, 4], "x": 2, "y": 0},
+ {"matrix": [2, 5], "x": 3, "y": 0},
+ {"matrix": [3, 5], "x": 4, "y": 0},
+ {"matrix": [5, 5], "x": 5, "y": 0},
+ {"matrix": [0, 1], "x": 6.5, "y": 0},
+ {"matrix": [5, 8], "x": 7.5, "y": 0},
+ {"matrix": [3, 3], "x": 8.5, "y": 0},
+ {"matrix": [2, 3], "x": 9.5, "y": 0},
+ {"matrix": [2, 2], "x": 11, "y": 0},
+ {"matrix": [0, 2], "x": 12, "y": 0},
+ {"matrix": [5, 2], "x": 13, "y": 0},
+ {"matrix": [6, 2], "x": 14, "y": 0},
+ {"matrix": [0, 0], "x": 15.25, "y": 0},
+ {"matrix": [1, 0], "x": 16.25, "y": 0},
+ {"matrix": [1, 1], "x": 17.25, "y": 0},
+
+ {"matrix": [2, 16], "x": 0, "y": 1.25},
+ {"matrix": [0, 16], "x": 1, "y": 1.25},
+ {"matrix": [0, 4], "x": 2, "y": 1.25},
+ {"matrix": [0, 5], "x": 3, "y": 1.25},
+ {"matrix": [0, 6], "x": 4, "y": 1.25},
+ {"matrix": [2, 6], "x": 5, "y": 1.25},
+ {"matrix": [2, 7], "x": 6, "y": 1.25},
+ {"matrix": [0, 7], "x": 7, "y": 1.25},
+ {"matrix": [0, 8], "x": 8, "y": 1.25},
+ {"matrix": [0, 3], "x": 9, "y": 1.25},
+ {"matrix": [0, 9], "x": 10, "y": 1.25},
+ {"matrix": [2, 9], "x": 11, "y": 1.25},
+ {"matrix": [2, 8], "x": 12, "y": 1.25},
+ {"matrix": [3, 2], "w": 2, "x": 13, "y": 1.25},
+ {"matrix": [2, 11], "x": 15.25, "y": 1.25},
+ {"matrix": [2, 15], "x": 16.25, "y": 1.25},
+ {"matrix": [2, 14], "x": 17.25, "y": 1.25},
+ {"matrix": [4, 10], "x": 18.5, "y": 1.25},
+ {"matrix": [4, 11], "x": 19.5, "y": 1.25},
+ {"matrix": [4, 14], "x": 20.5, "y": 1.25},
+ {"matrix": [6, 14], "x": 21.5, "y": 1.25},
+
+ {"matrix": [3, 16], "w": 1.5, "x": 0, "y": 2.25},
+ {"matrix": [1, 16], "x": 1.5, "y": 2.25},
+ {"matrix": [1, 4], "x": 2.5, "y": 2.25},
+ {"matrix": [1, 5], "x": 3.5, "y": 2.25},
+ {"matrix": [1, 6], "x": 4.5, "y": 2.25},
+ {"matrix": [3, 6], "x": 5.5, "y": 2.25},
+ {"matrix": [3, 7], "x": 6.5, "y": 2.25},
+ {"matrix": [1, 7], "x": 7.5, "y": 2.25},
+ {"matrix": [1, 8], "x": 8.5, "y": 2.25},
+ {"matrix": [1, 3], "x": 9.5, "y": 2.25},
+ {"matrix": [1, 9], "x": 10.5, "y": 2.25},
+ {"matrix": [3, 9], "x": 11.5, "y": 2.25},
+ {"matrix": [3, 8], "x": 12.5, "y": 2.25},
+ {"matrix": [7, 2], "x": 13.5, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 10], "x": 15.25, "y": 2.25},
+ {"matrix": [0, 15], "x": 16.25, "y": 2.25},
+ {"matrix": [0, 14], "x": 17.25, "y": 2.25},
+ {"matrix": [1, 10], "x": 18.5, "y": 2.25},
+ {"matrix": [1, 11], "x": 19.5, "y": 2.25},
+ {"matrix": [1, 14], "x": 20.5, "y": 2.25},
+ {"matrix": [1, 15], "x": 21.5, "y": 2.25, "h": 2},
+
+ {"matrix": [3, 4], "w": 1.75, "x": 0, "y": 3.25},
+ {"matrix": [7, 16], "x": 1.75, "y": 3.25},
+ {"matrix": [7, 4], "x": 2.75, "y": 3.25},
+ {"matrix": [7, 5], "x": 3.75, "y": 3.25},
+ {"matrix": [7, 6], "x": 4.75, "y": 3.25},
+ {"matrix": [5, 6], "x": 5.75, "y": 3.25},
+ {"matrix": [5, 7], "x": 6.75, "y": 3.25},
+ {"matrix": [7, 7], "x": 7.75, "y": 3.25},
+ {"matrix": [7, 8], "x": 8.75, "y": 3.25},
+ {"matrix": [7, 3], "x": 9.75, "y": 3.25},
+ {"matrix": [7, 9], "x": 10.75, "y": 3.25},
+ {"matrix": [5, 9], "x": 11.75, "y": 3.25},
+ {"matrix": [4, 2], "w": 2.25, "x": 12.75, "y": 3.25},
+ {"matrix": [3, 10], "x": 18.5, "y": 3.25},
+ {"matrix": [3, 11], "x": 19.5, "y": 3.25},
+ {"matrix": [3, 14], "x": 20.5, "y": 3.25},
+
+ {"matrix": [3, 13], "w": 2.25, "x": 0, "y": 4.25},
+ {"matrix": [4, 16], "x": 2.25, "y": 4.25},
+ {"matrix": [4, 4], "x": 3.25, "y": 4.25},
+ {"matrix": [4, 5], "x": 4.25, "y": 4.25},
+ {"matrix": [4, 6], "x": 5.25, "y": 4.25},
+ {"matrix": [6, 6], "x": 6.25, "y": 4.25},
+ {"matrix": [6, 7], "x": 7.25, "y": 4.25},
+ {"matrix": [4, 7], "x": 8.25, "y": 4.25},
+ {"matrix": [4, 8], "x": 9.25, "y": 4.25},
+ {"matrix": [4, 3], "x": 10.25, "y": 4.25},
+ {"matrix": [6, 9], "x": 11.25, "y": 4.25},
+ {"matrix": [7, 13], "w": 2.75, "x": 12.25, "y": 4.25},
+ {"matrix": [5, 15], "x": 16.25, "y": 4.25},
+ {"matrix": [7, 10], "x": 18.5, "y": 4.25},
+ {"matrix": [7, 11], "x": 19.5, "y": 4.25},
+ {"matrix": [7, 14], "x": 20.5, "y": 4.25},
+ {"matrix": [7, 15], "x": 21.5, "y": 4.25, "h": 2},
+
+ {"matrix": [2, 1], "w": 1.25, "x": 0, "y": 5.25},
+ {"matrix": [3, 12], "w": 1.25, "x": 1.25, "y": 5.25},
+ {"matrix": [5, 0], "w": 1.25, "x": 2.5, "y": 5.25},
+ {"matrix": [5, 10], "w": 6.25, "x": 3.75, "y": 5.25},
+ {"matrix": [6, 0], "w": 1.25, "x": 10, "y": 5.25},
+ {"matrix": [7, 12], "w": 1.25, "x": 11.25, "y": 5.25},
+ {"matrix": [6, 3], "w": 1.25, "x": 12.5, "y": 5.25},
+ {"matrix": [4, 1], "w": 1.25, "x": 13.75, "y": 5.25},
+ {"matrix": [6, 15], "x": 15.25, "y": 5.25},
+ {"matrix": [6, 10], "x": 16.25, "y": 5.25},
+ {"matrix": [6, 11], "x": 17.25, "y": 5.25},
+ {"matrix": [5, 11], "w": 2, "x": 18.5, "y": 5.25},
+ {"matrix": [5, 14], "x": 20.5, "y": 5.25}
+ ]
+ },
"LAYOUT_fullsize_iso": {
"layout": [
- {"label": "Esc", "matrix": [5, 16], "x": 0, "y": 0},
- {"label": "F1", "matrix": [2, 4], "x": 2, "y": 0},
- {"label": "F2", "matrix": [2, 5], "x": 3, "y": 0},
- {"label": "F3", "matrix": [3, 5], "x": 4, "y": 0},
- {"label": "F4", "matrix": [5, 5], "x": 5, "y": 0},
- {"label": "F5", "matrix": [0, 1], "x": 6.5, "y": 0},
- {"label": "F6", "matrix": [5, 8], "x": 7.5, "y": 0},
- {"label": "F7", "matrix": [3, 3], "x": 8.5, "y": 0},
- {"label": "F8", "matrix": [2, 3], "x": 9.5, "y": 0},
- {"label": "F9", "matrix": [2, 2], "x": 11, "y": 0},
- {"label": "F10", "matrix": [0, 2], "x": 12, "y": 0},
- {"label": "F11", "matrix": [5, 2], "x": 13, "y": 0},
- {"label": "F12", "matrix": [6, 2], "x": 14, "y": 0},
- {"label": "Prt Sc", "matrix": [0, 0], "x": 15.25, "y": 0},
- {"label": "Scr Lk", "matrix": [1, 0], "x": 16.25, "y": 0},
- {"label": "Pause", "matrix": [1, 1], "x": 17.25, "y": 0},
- {"label": "`", "matrix": [2, 16], "x": 0, "y": 1.25},
- {"label": "1", "matrix": [0, 16], "x": 1, "y": 1.25},
- {"label": "2", "matrix": [0, 4], "x": 2, "y": 1.25},
- {"label": "3", "matrix": [0, 5], "x": 3, "y": 1.25},
- {"label": "4", "matrix": [0, 6], "x": 4, "y": 1.25},
- {"label": "5", "matrix": [2, 6], "x": 5, "y": 1.25},
- {"label": "6", "matrix": [2, 7], "x": 6, "y": 1.25},
- {"label": "7", "matrix": [0, 7], "x": 7, "y": 1.25},
- {"label": "8", "matrix": [0, 8], "x": 8, "y": 1.25},
- {"label": "9", "matrix": [0, 3], "x": 9, "y": 1.25},
- {"label": "0", "matrix": [0, 9], "x": 10, "y": 1.25},
- {"label": "-", "matrix": [2, 9], "x": 11, "y": 1.25},
- {"label": "=", "matrix": [2, 8], "x": 12, "y": 1.25},
- {"label": "Backspace", "matrix": [3, 2], "w": 2, "x": 13, "y": 1.25},
- {"label": "Ins", "matrix": [2, 11], "x": 15.25, "y": 1.25},
- {"label": "Home", "matrix": [2, 15], "x": 16.25, "y": 1.25},
- {"label": "Page Up", "matrix": [2, 14], "x": 17.25, "y": 1.25},
- {"label": "Num Lk", "matrix": [4, 10], "x": 18.5, "y": 1.25},
- {"label": "/", "matrix": [4, 11], "x": 19.5, "y": 1.25},
- {"label": "*", "matrix": [4, 14], "x": 20.5, "y": 1.25},
- {"label": "-", "matrix": [6, 14], "x": 21.5, "y": 1.25},
- {"label": "Tab", "matrix": [3, 16], "w": 1.5, "x": 0, "y": 2.25},
- {"label": "Q", "matrix": [1, 16], "x": 1.5, "y": 2.25},
- {"label": "W", "matrix": [1, 4], "x": 2.5, "y": 2.25},
- {"label": "E", "matrix": [1, 5], "x": 3.5, "y": 2.25},
- {"label": "R", "matrix": [1, 6], "x": 4.5, "y": 2.25},
- {"label": "T", "matrix": [3, 6], "x": 5.5, "y": 2.25},
- {"label": "Y", "matrix": [3, 7], "x": 6.5, "y": 2.25},
- {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 2.25},
- {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 2.25},
- {"label": "O", "matrix": [1, 3], "x": 9.5, "y": 2.25},
- {"label": "P", "matrix": [1, 9], "x": 10.5, "y": 2.25},
- {"label": "[", "matrix": [3, 9], "x": 11.5, "y": 2.25},
- {"label": "]", "matrix": [3, 8], "x": 12.5, "y": 2.25},
- {"label": "Del", "matrix": [2, 10], "x": 15.25, "y": 2.25},
- {"label": "End", "matrix": [0, 15], "x": 16.25, "y": 2.25},
- {"label": "Page Down", "matrix": [0, 14], "x": 17.25, "y": 2.25},
- {"label": "7", "matrix": [1, 10], "x": 18.5, "y": 2.25},
- {"label": "8", "matrix": [1, 11], "x": 19.5, "y": 2.25},
- {"label": "9", "matrix": [1, 14], "x": 20.5, "y": 2.25},
- {"label": "+", "h": 2, "matrix": [1, 15], "x": 21.5, "y": 2.25},
- {"label": "Caps Lock", "matrix": [3, 4], "w": 1.75, "x": 0, "y": 3.25},
- {"label": "A", "matrix": [7, 16], "x": 1.75, "y": 3.25},
- {"label": "S", "matrix": [7, 4], "x": 2.75, "y": 3.25},
- {"label": "D", "matrix": [7, 5], "x": 3.75, "y": 3.25},
- {"label": "F", "matrix": [7, 6], "x": 4.75, "y": 3.25},
- {"label": "G", "matrix": [5, 6], "x": 5.75, "y": 3.25},
- {"label": "H", "matrix": [5, 7], "x": 6.75, "y": 3.25},
- {"label": "J", "matrix": [7, 7], "x": 7.75, "y": 3.25},
- {"label": "K", "matrix": [7, 8], "x": 8.75, "y": 3.25},
- {"label": "L", "matrix": [7, 3], "x": 9.75, "y": 3.25},
- {"label": ";", "matrix": [7, 9], "x": 10.75, "y": 3.25},
- {"label": "'", "matrix": [5, 9], "x": 11.75, "y": 3.25},
- {"label": "#", "matrix": [1, 2], "x": 12.75, "y": 3.25},
- {"label": "Return", "h": 2, "matrix": [4, 2], "w": 1.25, "x": 13.75, "y": 2.25},
- {"label": "4", "matrix": [3, 10], "x": 18.5, "y": 3.25},
- {"label": "5", "matrix": [3, 11], "x": 19.5, "y": 3.25},
- {"label": "6", "matrix": [3, 14], "x": 20.5, "y": 3.25},
- {"label": "Shift L", "matrix": [3, 13], "w": 1.25, "x": 0, "y": 4.25},
- {"label": "\\", "matrix": [5, 4], "x": 1.25, "y": 4.25},
- {"label": "Z", "matrix": [4, 16], "x": 2.25, "y": 4.25},
- {"label": "X", "matrix": [4, 4], "x": 3.25, "y": 4.25},
- {"label": "C", "matrix": [4, 5], "x": 4.25, "y": 4.25},
- {"label": "V", "matrix": [4, 6], "x": 5.25, "y": 4.25},
- {"label": "B", "matrix": [6, 6], "x": 6.25, "y": 4.25},
- {"label": "N", "matrix": [6, 7], "x": 7.25, "y": 4.25},
- {"label": "M", "matrix": [4, 7], "x": 8.25, "y": 4.25},
- {"label": ",", "matrix": [4, 8], "x": 9.25, "y": 4.25},
- {"label": ".", "matrix": [4, 3], "x": 10.25, "y": 4.25},
- {"label": "/", "matrix": [6, 9], "x": 11.25, "y": 4.25},
- {"label": "Shift R", "matrix": [7, 13], "w": 2.75, "x": 12.25, "y": 4.25},
- {"label": "Up", "matrix": [5, 15], "x": 16.25, "y": 4.25},
- {"label": "1", "matrix": [7, 10], "x": 18.5, "y": 4.25},
- {"label": "2", "matrix": [7, 11], "x": 19.5, "y": 4.25},
- {"label": "3", "matrix": [7, 14], "x": 20.5, "y": 4.25},
- {"label": "Enter", "h": 2, "matrix": [7, 15], "x": 21.5, "y": 4.25},
- {"label": "Control L", "matrix": [2, 1], "w": 1.25, "x": 0, "y": 5.25},
- {"label": "Super L", "matrix": [3, 12], "w": 1.25, "x": 1.25, "y": 5.25},
- {"label": "Alt L", "matrix": [5, 0], "w": 1.25, "x": 2.5, "y": 5.25},
- {"label": " ", "matrix": [5, 10], "w": 6.25, "x": 3.75, "y": 5.25},
- {"label": "Alt R", "matrix": [6, 0], "w": 1.25, "x": 10, "y": 5.25},
- {"label": "Super R", "matrix": [7, 12], "w": 1.25, "x": 11.25, "y": 5.25},
- {"label": "Menu", "matrix": [6, 3], "w": 1.25, "x": 12.5, "y": 5.25},
- {"label": "Control R", "matrix": [4, 1], "w": 1.25, "x": 13.75, "y": 5.25},
- {"label": "Left", "matrix": [6, 15], "x": 15.25, "y": 5.25},
- {"label": "Down", "matrix": [6, 10], "x": 16.25, "y": 5.25},
- {"label": "Right", "matrix": [6, 11], "x": 17.25, "y": 5.25},
- {"label": "0", "matrix": [5, 11], "w": 2, "x": 18.5, "y": 5.25},
- {"label": "Del", "matrix": [5, 14], "x": 20.5, "y": 5.25}
+ {"matrix": [5, 16], "x": 0, "y": 0},
+ {"matrix": [2, 4], "x": 2, "y": 0},
+ {"matrix": [2, 5], "x": 3, "y": 0},
+ {"matrix": [3, 5], "x": 4, "y": 0},
+ {"matrix": [5, 5], "x": 5, "y": 0},
+ {"matrix": [0, 1], "x": 6.5, "y": 0},
+ {"matrix": [5, 8], "x": 7.5, "y": 0},
+ {"matrix": [3, 3], "x": 8.5, "y": 0},
+ {"matrix": [2, 3], "x": 9.5, "y": 0},
+ {"matrix": [2, 2], "x": 11, "y": 0},
+ {"matrix": [0, 2], "x": 12, "y": 0},
+ {"matrix": [5, 2], "x": 13, "y": 0},
+ {"matrix": [6, 2], "x": 14, "y": 0},
+ {"matrix": [0, 0], "x": 15.25, "y": 0},
+ {"matrix": [1, 0], "x": 16.25, "y": 0},
+ {"matrix": [1, 1], "x": 17.25, "y": 0},
+
+ {"matrix": [2, 16], "x": 0, "y": 1.25},
+ {"matrix": [0, 16], "x": 1, "y": 1.25},
+ {"matrix": [0, 4], "x": 2, "y": 1.25},
+ {"matrix": [0, 5], "x": 3, "y": 1.25},
+ {"matrix": [0, 6], "x": 4, "y": 1.25},
+ {"matrix": [2, 6], "x": 5, "y": 1.25},
+ {"matrix": [2, 7], "x": 6, "y": 1.25},
+ {"matrix": [0, 7], "x": 7, "y": 1.25},
+ {"matrix": [0, 8], "x": 8, "y": 1.25},
+ {"matrix": [0, 3], "x": 9, "y": 1.25},
+ {"matrix": [0, 9], "x": 10, "y": 1.25},
+ {"matrix": [2, 9], "x": 11, "y": 1.25},
+ {"matrix": [2, 8], "x": 12, "y": 1.25},
+ {"matrix": [3, 2], "w": 2, "x": 13, "y": 1.25},
+ {"matrix": [2, 11], "x": 15.25, "y": 1.25},
+ {"matrix": [2, 15], "x": 16.25, "y": 1.25},
+ {"matrix": [2, 14], "x": 17.25, "y": 1.25},
+ {"matrix": [4, 10], "x": 18.5, "y": 1.25},
+ {"matrix": [4, 11], "x": 19.5, "y": 1.25},
+ {"matrix": [4, 14], "x": 20.5, "y": 1.25},
+ {"matrix": [6, 14], "x": 21.5, "y": 1.25},
+
+ {"matrix": [3, 16], "w": 1.5, "x": 0, "y": 2.25},
+ {"matrix": [1, 16], "x": 1.5, "y": 2.25},
+ {"matrix": [1, 4], "x": 2.5, "y": 2.25},
+ {"matrix": [1, 5], "x": 3.5, "y": 2.25},
+ {"matrix": [1, 6], "x": 4.5, "y": 2.25},
+ {"matrix": [3, 6], "x": 5.5, "y": 2.25},
+ {"matrix": [3, 7], "x": 6.5, "y": 2.25},
+ {"matrix": [1, 7], "x": 7.5, "y": 2.25},
+ {"matrix": [1, 8], "x": 8.5, "y": 2.25},
+ {"matrix": [1, 3], "x": 9.5, "y": 2.25},
+ {"matrix": [1, 9], "x": 10.5, "y": 2.25},
+ {"matrix": [3, 9], "x": 11.5, "y": 2.25},
+ {"matrix": [3, 8], "x": 12.5, "y": 2.25},
+ {"matrix": [2, 10], "x": 15.25, "y": 2.25},
+ {"matrix": [0, 15], "x": 16.25, "y": 2.25},
+ {"matrix": [0, 14], "x": 17.25, "y": 2.25},
+ {"matrix": [1, 10], "x": 18.5, "y": 2.25},
+ {"matrix": [1, 11], "x": 19.5, "y": 2.25},
+ {"matrix": [1, 14], "x": 20.5, "y": 2.25},
+ {"matrix": [1, 15], "x": 21.5, "y": 2.25, "h": 2},
+
+ {"matrix": [3, 4], "w": 1.75, "x": 0, "y": 3.25},
+ {"matrix": [7, 16], "x": 1.75, "y": 3.25},
+ {"matrix": [7, 4], "x": 2.75, "y": 3.25},
+ {"matrix": [7, 5], "x": 3.75, "y": 3.25},
+ {"matrix": [7, 6], "x": 4.75, "y": 3.25},
+ {"matrix": [5, 6], "x": 5.75, "y": 3.25},
+ {"matrix": [5, 7], "x": 6.75, "y": 3.25},
+ {"matrix": [7, 7], "x": 7.75, "y": 3.25},
+ {"matrix": [7, 8], "x": 8.75, "y": 3.25},
+ {"matrix": [7, 3], "x": 9.75, "y": 3.25},
+ {"matrix": [7, 9], "x": 10.75, "y": 3.25},
+ {"matrix": [5, 9], "x": 11.75, "y": 3.25},
+ {"matrix": [1, 2], "x": 12.75, "y": 3.25},
+ {"matrix": [4, 2], "w": 1.25, "x": 13.75, "y": 2.25, "h": 2},
+ {"matrix": [3, 10], "x": 18.5, "y": 3.25},
+ {"matrix": [3, 11], "x": 19.5, "y": 3.25},
+ {"matrix": [3, 14], "x": 20.5, "y": 3.25},
+
+ {"matrix": [3, 13], "w": 1.25, "x": 0, "y": 4.25},
+ {"matrix": [5, 4], "x": 1.25, "y": 4.25},
+ {"matrix": [4, 16], "x": 2.25, "y": 4.25},
+ {"matrix": [4, 4], "x": 3.25, "y": 4.25},
+ {"matrix": [4, 5], "x": 4.25, "y": 4.25},
+ {"matrix": [4, 6], "x": 5.25, "y": 4.25},
+ {"matrix": [6, 6], "x": 6.25, "y": 4.25},
+ {"matrix": [6, 7], "x": 7.25, "y": 4.25},
+ {"matrix": [4, 7], "x": 8.25, "y": 4.25},
+ {"matrix": [4, 8], "x": 9.25, "y": 4.25},
+ {"matrix": [4, 3], "x": 10.25, "y": 4.25},
+ {"matrix": [6, 9], "x": 11.25, "y": 4.25},
+ {"matrix": [7, 13], "w": 2.75, "x": 12.25, "y": 4.25},
+ {"matrix": [5, 15], "x": 16.25, "y": 4.25},
+ {"matrix": [7, 10], "x": 18.5, "y": 4.25},
+ {"matrix": [7, 11], "x": 19.5, "y": 4.25},
+ {"matrix": [7, 14], "x": 20.5, "y": 4.25},
+ {"matrix": [7, 15], "x": 21.5, "y": 4.25, "h": 2},
+
+ {"matrix": [2, 1], "w": 1.25, "x": 0, "y": 5.25},
+ {"matrix": [3, 12], "w": 1.25, "x": 1.25, "y": 5.25},
+ {"matrix": [5, 0], "w": 1.25, "x": 2.5, "y": 5.25},
+ {"matrix": [5, 10], "w": 6.25, "x": 3.75, "y": 5.25},
+ {"matrix": [6, 0], "w": 1.25, "x": 10, "y": 5.25},
+ {"matrix": [7, 12], "w": 1.25, "x": 11.25, "y": 5.25},
+ {"matrix": [6, 3], "w": 1.25, "x": 12.5, "y": 5.25},
+ {"matrix": [4, 1], "w": 1.25, "x": 13.75, "y": 5.25},
+ {"matrix": [6, 15], "x": 15.25, "y": 5.25},
+ {"matrix": [6, 10], "x": 16.25, "y": 5.25},
+ {"matrix": [6, 11], "x": 17.25, "y": 5.25},
+ {"matrix": [5, 11], "w": 2, "x": 18.5, "y": 5.25},
+ {"matrix": [5, 14], "x": 20.5, "y": 5.25}
]
}
}
diff --git a/keyboards/handwired/datahand/keyboard.json b/keyboards/handwired/datahand/keyboard.json
index c2c7dab421..1f1ebc07ee 100644
--- a/keyboards/handwired/datahand/keyboard.json
+++ b/keyboards/handwired/datahand/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "DataHand",
"manufacturer": "DataHand",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x13BA",
diff --git a/keyboards/handwired/ddg_56/keyboard.json b/keyboards/handwired/ddg_56/keyboard.json
index e211821dae..5d4a21bba6 100644
--- a/keyboards/handwired/ddg_56/keyboard.json
+++ b/keyboards/handwired/ddg_56/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "DDG_56",
"manufacturer": "Spaceman",
- "url": "",
"maintainer": "spaceman",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/eagleii/keyboard.json b/keyboards/handwired/eagleii/keyboard.json
index 4179a4cdd6..43a4d5a2f7 100644
--- a/keyboards/handwired/eagleii/keyboard.json
+++ b/keyboards/handwired/eagleii/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "II",
"manufacturer": "Eagle",
- "url": "",
"maintainer": "Spaceman",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/elrgo_s/keyboard.json b/keyboards/handwired/elrgo_s/keyboard.json
index c0ae4beadb..2a0e57dabe 100644
--- a/keyboards/handwired/elrgo_s/keyboard.json
+++ b/keyboards/handwired/elrgo_s/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Elrgo S",
"manufacturer": "Eloren",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x454C",
diff --git a/keyboards/handwired/ergocheap/keyboard.json b/keyboards/handwired/ergocheap/keyboard.json
index 8728b486a8..879cf8a4d1 100644
--- a/keyboards/handwired/ergocheap/keyboard.json
+++ b/keyboards/handwired/ergocheap/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Ergocheap",
"manufacturer": "xSteins",
- "url": "",
"maintainer": "xSteins",
"usb": {
"vid": "0xFEDE",
diff --git a/keyboards/handwired/fc200rt_qmk/keyboard.json b/keyboards/handwired/fc200rt_qmk/keyboard.json
index aab792e7bd..7e45cbdb62 100644
--- a/keyboards/handwired/fc200rt_qmk/keyboard.json
+++ b/keyboards/handwired/fc200rt_qmk/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "fc200rt_qmk",
"manufacturer": "NaCly",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xBEEF",
diff --git a/keyboards/handwired/fivethirteen/keyboard.json b/keyboards/handwired/fivethirteen/keyboard.json
index 9046fc53ba..f6492d3e0b 100644
--- a/keyboards/handwired/fivethirteen/keyboard.json
+++ b/keyboards/handwired/fivethirteen/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "fivethirteen",
"manufacturer": "rdg",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/gamenum/keyboard.json b/keyboards/handwired/gamenum/keyboard.json
index 50a3962108..010f9526db 100644
--- a/keyboards/handwired/gamenum/keyboard.json
+++ b/keyboards/handwired/gamenum/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "GameNum",
"manufacturer": "Seth-Senpai",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x1234",
diff --git a/keyboards/handwired/hacked_motospeed/keyboard.json b/keyboards/handwired/hacked_motospeed/keyboard.json
index 1a38cdafdc..17f85a7e9d 100644
--- a/keyboards/handwired/hacked_motospeed/keyboard.json
+++ b/keyboards/handwired/hacked_motospeed/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Hacked Motospeed",
"manufacturer": "MMO_Corp",
- "url": "",
"maintainer": "Deckweiss",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/hexon38/keyboard.json b/keyboards/handwired/hexon38/keyboard.json
index dfc11eb532..1d3595aa38 100644
--- a/keyboards/handwired/hexon38/keyboard.json
+++ b/keyboards/handwired/hexon38/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "hexon38",
"manufacturer": "pepaslabs",
- "url": "",
"maintainer": "cellularmitosis",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/hnah108/keyboard.json b/keyboards/handwired/hnah108/keyboard.json
index 3099ed8548..b4daac3fab 100644
--- a/keyboards/handwired/hnah108/keyboard.json
+++ b/keyboards/handwired/hnah108/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Hnah108",
"manufacturer": "HnahKB",
- "url": "",
"maintainer": "HnahKB",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/hnah40rgb/keyboard.json b/keyboards/handwired/hnah40rgb/keyboard.json
index 753b5dd00a..4775259f35 100644
--- a/keyboards/handwired/hnah40rgb/keyboard.json
+++ b/keyboards/handwired/hnah40rgb/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Hnah40V2",
"manufacturer": "HnahKB",
- "url": "",
"maintainer": "HnahKB",
"usb": {
"vid": "0xFEED",
@@ -61,7 +60,6 @@
"animation": "cycle_pinwheel"
},
"driver": "ws2812",
- "led_flush_limit": 16,
"max_brightness": 200,
"react_on_keyup": true
},
diff --git a/keyboards/handwired/hwpm87/keyboard.json b/keyboards/handwired/hwpm87/keyboard.json
index 0dbbb0472a..302dc23316 100644
--- a/keyboards/handwired/hwpm87/keyboard.json
+++ b/keyboards/handwired/hwpm87/keyboard.json
@@ -2,7 +2,6 @@
"manufacturer": "KD-MM2",
"keyboard_name": "hwpm87",
"maintainer": "KD-MM2",
- "url": "",
"usb": {
"vid": "0xFEED",
"pid": "0x0001",
diff --git a/keyboards/handwired/iso85k/keyboard.json b/keyboards/handwired/iso85k/keyboard.json
index 625a356e30..415bcf54f0 100644
--- a/keyboards/handwired/iso85k/keyboard.json
+++ b/keyboards/handwired/iso85k/keyboard.json
@@ -17,7 +17,6 @@
"rows": ["C7", "C6", "B15", "B14", "B13", "B12"]
},
"processor": "STM32F072",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0xCAFE",
diff --git a/keyboards/handwired/itstleo9/info.json b/keyboards/handwired/itstleo9/info.json
index ba9de4d774..dba1078701 100644
--- a/keyboards/handwired/itstleo9/info.json
+++ b/keyboards/handwired/itstleo9/info.json
@@ -11,7 +11,6 @@
"mousekey": true,
"nkro": true
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0001",
diff --git a/keyboards/handwired/jankrp2040dactyl/keyboard.json b/keyboards/handwired/jankrp2040dactyl/keyboard.json
index 0d155a70bd..ff49cef6a2 100644
--- a/keyboards/handwired/jankrp2040dactyl/keyboard.json
+++ b/keyboards/handwired/jankrp2040dactyl/keyboard.json
@@ -6,9 +6,9 @@
"diode_direction": "COL2ROW",
"split": {
"enabled": true,
- "soft_serial_pin": "GP0",
"serial": {
- "driver": "vendor"
+ "driver": "vendor",
+ "pin": "GP0"
}
},
@@ -25,7 +25,6 @@
},
"processor": "RP2040",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0000",
diff --git a/keyboards/handwired/jn68m/keyboard.json b/keyboards/handwired/jn68m/keyboard.json
index e2c833b002..d2c506c8c9 100644
--- a/keyboards/handwired/jn68m/keyboard.json
+++ b/keyboards/handwired/jn68m/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "JN68M",
"manufacturer": "MxBlue",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xC714",
diff --git a/keyboards/handwired/jot50/keyboard.json b/keyboards/handwired/jot50/keyboard.json
index d272ffc6b1..a3c1c1fbe1 100644
--- a/keyboards/handwired/jot50/keyboard.json
+++ b/keyboards/handwired/jot50/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Jot50",
"manufacturer": "Jotix",
- "url": "",
"maintainer": "jotix",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/jotpad16/keyboard.json b/keyboards/handwired/jotpad16/keyboard.json
index 6a8a5db44c..c5f8511da8 100644
--- a/keyboards/handwired/jotpad16/keyboard.json
+++ b/keyboards/handwired/jotpad16/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "JotPad16",
"manufacturer": "Jotix",
- "url": "",
"maintainer": "jotix",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/jtallbean/split_65/keyboard.json b/keyboards/handwired/jtallbean/split_65/keyboard.json
index b10e6c6cc0..86d4de0195 100644
--- a/keyboards/handwired/jtallbean/split_65/keyboard.json
+++ b/keyboards/handwired/jtallbean/split_65/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "split_65",
"manufacturer": "jtallbean",
- "url": "",
"maintainer": "samlli",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/k8split/keyboard.json b/keyboards/handwired/k8split/keyboard.json
index 62ea64604a..186cf804e1 100644
--- a/keyboards/handwired/k8split/keyboard.json
+++ b/keyboards/handwired/k8split/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "k8split",
"manufacturer": "Ckat",
- "url": "",
"maintainer": "Ckath",
"usb": {
"vid": "0xC81D",
diff --git a/keyboards/handwired/k_numpad17/keyboard.json b/keyboards/handwired/k_numpad17/keyboard.json
index 7d48cd1f3e..de52ca88af 100644
--- a/keyboards/handwired/k_numpad17/keyboard.json
+++ b/keyboards/handwired/k_numpad17/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "K-Numpad17",
"manufacturer": "Handwired",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/kbod/keyboard.json b/keyboards/handwired/kbod/keyboard.json
index 91926b554d..a025952119 100644
--- a/keyboards/handwired/kbod/keyboard.json
+++ b/keyboards/handwired/kbod/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "kbod",
"manufacturer": "fudanchii",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/ks63/keyboard.json b/keyboards/handwired/ks63/keyboard.json
index 09e59975e8..da0d2e0a3f 100644
--- a/keyboards/handwired/ks63/keyboard.json
+++ b/keyboards/handwired/ks63/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "ks63",
"manufacturer": "kleshwong",
- "url": "",
"maintainer": "Klesh Wong",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/lemonpad/keyboard.json b/keyboards/handwired/lemonpad/keyboard.json
index aab7b94692..dea15dcc3c 100644
--- a/keyboards/handwired/lemonpad/keyboard.json
+++ b/keyboards/handwired/lemonpad/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "lemonpad",
"manufacturer": "dari-studios",
- "url": "",
"maintainer": "dari-studios",
"usb": {
"vid": "0x6473",
diff --git a/keyboards/handwired/macroboard/info.json b/keyboards/handwired/macroboard/info.json
index 5c27c96ae9..adef955b9d 100644
--- a/keyboards/handwired/macroboard/info.json
+++ b/keyboards/handwired/macroboard/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Macroboard",
"manufacturer": "QMK",
- "url": "",
"maintainer": "Micha\u0142 Szczepaniak",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/magicforce61/keyboard.json b/keyboards/handwired/magicforce61/keyboard.json
index e15cc0590e..e66f9dfe9c 100644
--- a/keyboards/handwired/magicforce61/keyboard.json
+++ b/keyboards/handwired/magicforce61/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Magicforce 61",
"manufacturer": "Hexwire",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/magicforce68/keyboard.json b/keyboards/handwired/magicforce68/keyboard.json
index 6567c8b1cf..1101dd6001 100644
--- a/keyboards/handwired/magicforce68/keyboard.json
+++ b/keyboards/handwired/magicforce68/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Magicforce 68",
"manufacturer": "Hexwire",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/marek128b/ergosplit44/keyboard.json b/keyboards/handwired/marek128b/ergosplit44/keyboard.json
index f9a88576a7..7e14cbc172 100644
--- a/keyboards/handwired/marek128b/ergosplit44/keyboard.json
+++ b/keyboards/handwired/marek128b/ergosplit44/keyboard.json
@@ -21,7 +21,6 @@
"rows": ["GP2", "GP3", "GP4", "GP5"]
},
"processor": "RP2040",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0001",
diff --git a/keyboards/handwired/mechboards_micropad/keyboard.json b/keyboards/handwired/mechboards_micropad/keyboard.json
index 65ef6fb5b4..7f830771c3 100644
--- a/keyboards/handwired/mechboards_micropad/keyboard.json
+++ b/keyboards/handwired/mechboards_micropad/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Mechboards Micropad",
"manufacturer": "Yiancar",
- "url": "",
"maintainer": "yiancar",
"usb": {
"vid": "0x8968",
diff --git a/keyboards/handwired/minorca/keyboard.json b/keyboards/handwired/minorca/keyboard.json
index 9ac1f52d13..0d27200cb1 100644
--- a/keyboards/handwired/minorca/keyboard.json
+++ b/keyboards/handwired/minorca/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Minorca",
"manufacturer": "panc.co",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/ms_sculpt_mobile/info.json b/keyboards/handwired/ms_sculpt_mobile/info.json
index 918f166c61..33e250b682 100644
--- a/keyboards/handwired/ms_sculpt_mobile/info.json
+++ b/keyboards/handwired/ms_sculpt_mobile/info.json
@@ -1,6 +1,5 @@
{
"manufacturer": "Microsoftplus",
- "url": "",
"maintainer": "qmk",
"features": {
"bootmagic": false,
diff --git a/keyboards/handwired/myskeeb/keyboard.json b/keyboards/handwired/myskeeb/keyboard.json
index c75f40cf46..d6805a400c 100644
--- a/keyboards/handwired/myskeeb/keyboard.json
+++ b/keyboards/handwired/myskeeb/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "MySKeeb",
"manufacturer": "DAG3",
- "url": "",
"maintainer": "su8044",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/nicekey/keyboard.json b/keyboards/handwired/nicekey/keyboard.json
index fe7267ab84..66866de548 100644
--- a/keyboards/handwired/nicekey/keyboard.json
+++ b/keyboards/handwired/nicekey/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "nicekey",
"manufacturer": "Lukas",
- "url": "",
"maintainer": "spydon",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/nortontechpad/keyboard.json b/keyboards/handwired/nortontechpad/keyboard.json
index e90b6b5482..25fceb93da 100644
--- a/keyboards/handwired/nortontechpad/keyboard.json
+++ b/keyboards/handwired/nortontechpad/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "NortonTechPad",
"manufacturer": "NortonTech",
- "url": "",
"maintainer": "NortonTech",
"usb": {
"vid": "0x9879",
diff --git a/keyboards/handwired/not_so_minidox/keyboard.json b/keyboards/handwired/not_so_minidox/keyboard.json
index fa68a823af..abd1f43708 100644
--- a/keyboards/handwired/not_so_minidox/keyboard.json
+++ b/keyboards/handwired/not_so_minidox/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Not So MiniDox",
"manufacturer": "mtdjr",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/novem/keyboard.json b/keyboards/handwired/novem/keyboard.json
index c824f7809c..47c0a1bca6 100644
--- a/keyboards/handwired/novem/keyboard.json
+++ b/keyboards/handwired/novem/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "novem",
"manufacturer": "Jose I. Martinez",
- "url": "",
"maintainer": "Jose I. Martinez",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/nozbe_macro/keyboard.json b/keyboards/handwired/nozbe_macro/keyboard.json
index 584509ad18..494d52d221 100644
--- a/keyboards/handwired/nozbe_macro/keyboard.json
+++ b/keyboards/handwired/nozbe_macro/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Nozbe Reunion Pad",
"manufacturer": "Leon Omelan",
- "url": "",
"maintainer": "Leon Omelan",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/numpad20/keyboard.json b/keyboards/handwired/numpad20/keyboard.json
index e47cfc5df5..4f4254cf12 100644
--- a/keyboards/handwired/numpad20/keyboard.json
+++ b/keyboards/handwired/numpad20/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Numpad 20",
"manufacturer": "Hexwire",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xBB80",
diff --git a/keyboards/handwired/obuwunkunubi/spaget/keyboard.json b/keyboards/handwired/obuwunkunubi/spaget/keyboard.json
index 238736705d..44d22e71d6 100644
--- a/keyboards/handwired/obuwunkunubi/spaget/keyboard.json
+++ b/keyboards/handwired/obuwunkunubi/spaget/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "spaget",
"manufacturer": "obuwunkunubi",
- "url": "",
"maintainer": "obuwunkunubi",
"usb": {
"vid": "0x1337",
diff --git a/keyboards/handwired/onekey/info.json b/keyboards/handwired/onekey/info.json
index 5cf7c600ee..577cb68a6b 100644
--- a/keyboards/handwired/onekey/info.json
+++ b/keyboards/handwired/onekey/info.json
@@ -1,6 +1,5 @@
{
"manufacturer": "QMK",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/onekey/keymaps/battery/config.h b/keyboards/handwired/onekey/keymaps/battery/config.h
new file mode 100644
index 0000000000..8a1c05d436
--- /dev/null
+++ b/keyboards/handwired/onekey/keymaps/battery/config.h
@@ -0,0 +1,6 @@
+// Copyright 2024 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define BATTERY_PIN ADC_PIN
diff --git a/keyboards/handwired/onekey/keymaps/battery/keymap.c b/keyboards/handwired/onekey/keymaps/battery/keymap.c
new file mode 100644
index 0000000000..74191e83fc
--- /dev/null
+++ b/keyboards/handwired/onekey/keymaps/battery/keymap.c
@@ -0,0 +1,28 @@
+// Copyright 2024 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+#include "battery.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ LAYOUT_ortho_1x1(KC_A)
+};
+
+void keyboard_post_init_user(void) {
+ // Customise these values to desired behaviour
+ debug_enable=true;
+// debug_matrix=false;
+// debug_keyboard=true;
+// debug_mouse=false;
+
+ battery_init();
+}
+
+void housekeeping_task_user(void) {
+ static uint32_t last = 0;
+ if (timer_elapsed32(last) > 2000) {
+ uprintf("Bat: %d!\n", battery_get_percent());
+
+ last = timer_read32();
+ }
+}
diff --git a/keyboards/handwired/onekey/keymaps/battery/keymap.json b/keyboards/handwired/onekey/keymaps/battery/keymap.json
new file mode 100644
index 0000000000..c641dfe773
--- /dev/null
+++ b/keyboards/handwired/onekey/keymaps/battery/keymap.json
@@ -0,0 +1,7 @@
+{
+ "config": {
+ "features": {
+ "console": true
+ }
+ }
+}
diff --git a/keyboards/handwired/onekey/keymaps/battery/rules.mk b/keyboards/handwired/onekey/keymaps/battery/rules.mk
new file mode 100644
index 0000000000..06908179ae
--- /dev/null
+++ b/keyboards/handwired/onekey/keymaps/battery/rules.mk
@@ -0,0 +1 @@
+BATTERY_DRIVER_REQUIRED = yes
diff --git a/keyboards/handwired/onekey/keymaps/via_ci/config.h b/keyboards/handwired/onekey/keymaps/via_ci/config.h
new file mode 100644
index 0000000000..ec6f1e1ec0
--- /dev/null
+++ b/keyboards/handwired/onekey/keymaps/via_ci/config.h
@@ -0,0 +1,4 @@
+// Copyright 2025 Nick Brassel (@tzarc)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+#define TRANSIENT_EEPROM_SIZE 160
diff --git a/keyboards/handwired/onekey/keymaps/via_ci/keymap.c b/keyboards/handwired/onekey/keymaps/via_ci/keymap.c
new file mode 100644
index 0000000000..8261fc6329
--- /dev/null
+++ b/keyboards/handwired/onekey/keymaps/via_ci/keymap.c
@@ -0,0 +1,30 @@
+// Copyright 2025 Nick Brassel (@tzarc)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#include QMK_KEYBOARD_H
+
+enum custom_keycodes {
+ KC_HELLO = SAFE_RANGE,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ LAYOUT_ortho_1x1(KC_HELLO)
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case KC_HELLO:
+ if (record->event.pressed) {
+ send_string_P("Hello world!");
+ }
+ return false;
+ }
+ return true;
+}
+
+void keyboard_post_init_user(void) {
+ // Customise these values to desired behaviour
+ debug_enable=true;
+ debug_matrix=true;
+ //debug_keyboard=true;
+ //debug_mouse=true;
+}
diff --git a/keyboards/handwired/onekey/keymaps/via_ci/keymap.json b/keyboards/handwired/onekey/keymaps/via_ci/keymap.json
new file mode 100644
index 0000000000..edb78b5742
--- /dev/null
+++ b/keyboards/handwired/onekey/keymaps/via_ci/keymap.json
@@ -0,0 +1,7 @@
+{
+ "config": {
+ "features": {
+ "via": true
+ }
+ }
+}
diff --git a/keyboards/handwired/onekey/teensy_32/rules.mk b/keyboards/handwired/onekey/teensy_32/rules.mk
new file mode 100644
index 0000000000..d5978ba6f5
--- /dev/null
+++ b/keyboards/handwired/onekey/teensy_32/rules.mk
@@ -0,0 +1 @@
+EEPROM_DRIVER = transient
diff --git a/keyboards/handwired/onekey/teensy_lc/rules.mk b/keyboards/handwired/onekey/teensy_lc/rules.mk
index abd2f7fce9..d1a53e95d7 100644
--- a/keyboards/handwired/onekey/teensy_lc/rules.mk
+++ b/keyboards/handwired/onekey/teensy_lc/rules.mk
@@ -1,2 +1,2 @@
USE_CHIBIOS_CONTRIB = yes
-
+EEPROM_DRIVER = transient
diff --git a/keyboards/handwired/ortho5x13/keyboard.json b/keyboards/handwired/ortho5x13/keyboard.json
index 23591b5046..6dea79ab92 100644
--- a/keyboards/handwired/ortho5x13/keyboard.json
+++ b/keyboards/handwired/ortho5x13/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Ortho 5x13",
"manufacturer": "Hexwire",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xBB80",
diff --git a/keyboards/handwired/ortho5x14/keyboard.json b/keyboards/handwired/ortho5x14/keyboard.json
index 1e6828190b..281ad1c0e0 100644
--- a/keyboards/handwired/ortho5x14/keyboard.json
+++ b/keyboards/handwired/ortho5x14/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Ortho5 x14",
"manufacturer": "MPInc",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xBB80",
diff --git a/keyboards/handwired/ortho_brass/keyboard.json b/keyboards/handwired/ortho_brass/keyboard.json
index 5cd01b1f6d..2f0fe7b685 100644
--- a/keyboards/handwired/ortho_brass/keyboard.json
+++ b/keyboards/handwired/ortho_brass/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Ortho Brass",
"manufacturer": "BifbofII",
- "url": "",
"maintainer": "BifbofII",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/ortho_brass/keymaps/default/keymap.c b/keyboards/handwired/ortho_brass/keymaps/default/keymap.c
index fc43167211..47f731c2c9 100644
--- a/keyboards/handwired/ortho_brass/keymaps/default/keymap.c
+++ b/keyboards/handwired/ortho_brass/keymaps/default/keymap.c
@@ -182,9 +182,9 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (!eeconfig_is_enabled()) {
eeconfig_init();
}
- keymap_config.raw = eeconfig_read_keymap();
+ eeconfig_read_keymap(&keymap_config);
keymap_config.nkro = 1;
- eeconfig_update_keymap(keymap_config.raw);
+ eeconfig_update_keymap(&keymap_config);
}
return false;
break;
diff --git a/keyboards/handwired/osborne1/keyboard.json b/keyboards/handwired/osborne1/keyboard.json
index 8cbcb3cc8b..eacc77ff59 100644
--- a/keyboards/handwired/osborne1/keyboard.json
+++ b/keyboards/handwired/osborne1/keyboard.json
@@ -21,7 +21,6 @@
"rows": ["D0", "B7", "B5", "C6", "D1", "B6", "D7", "D6"]
},
"processor": "atmega32u4",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x239A",
diff --git a/keyboards/handwired/p65rgb/keyboard.json b/keyboards/handwired/p65rgb/keyboard.json
index b80a1e7f49..a0c75b7e4f 100644
--- a/keyboards/handwired/p65rgb/keyboard.json
+++ b/keyboards/handwired/p65rgb/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "p65rgb",
"manufacturer": "marhalloweenvt",
- "url": "",
"maintainer": "marhalloweenvt",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/pilcrow/keyboard.json b/keyboards/handwired/pilcrow/keyboard.json
index b44a4e2d3d..f490ac33b6 100644
--- a/keyboards/handwired/pilcrow/keyboard.json
+++ b/keyboards/handwired/pilcrow/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "pilcrow",
"manufacturer": "Unknown",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/postageboard/info.json b/keyboards/handwired/postageboard/info.json
index 2f4e674d59..b34c2b3fbe 100644
--- a/keyboards/handwired/postageboard/info.json
+++ b/keyboards/handwired/postageboard/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Postage Board",
"manufacturer": "LifeIsOnTheWire",
- "url": "",
"maintainer": "LifeIsOnTheWire",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/promethium/config.h b/keyboards/handwired/promethium/config.h
index 806726b5eb..974a4f951f 100644
--- a/keyboards/handwired/promethium/config.h
+++ b/keyboards/handwired/promethium/config.h
@@ -63,9 +63,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_ONESHOT
#define PS2_MOUSE_INIT_DELAY 2000
-#define BATTERY_POLL 30000
-#define MAX_VOLTAGE 4.2
-#define MIN_VOLTAGE 3.2
+
+#define BATTERY_PIN B5
#ifndef __ASSEMBLER__ // assembler doesn't like enum in .h file
enum led_sequence {
diff --git a/keyboards/handwired/promethium/keyboard.json b/keyboards/handwired/promethium/keyboard.json
index 6ee1ed8ca1..fa72908039 100644
--- a/keyboards/handwired/promethium/keyboard.json
+++ b/keyboards/handwired/promethium/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Promethium",
"manufacturer": "Priyadi",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x17EF",
diff --git a/keyboards/handwired/promethium/promethium.c b/keyboards/handwired/promethium/promethium.c
index 63139ac09d..c94a27a4de 100644
--- a/keyboards/handwired/promethium/promethium.c
+++ b/keyboards/handwired/promethium/promethium.c
@@ -1,16 +1,15 @@
-#include "promethium.h"
-#include "analog.h"
+#include "keyboard.h"
#include "timer.h"
-#include "matrix.h"
-#include "bluefruit_le.h"
+#include "battery.h"
-// cubic fit {3.3, 0}, {3.5, 2.9}, {3.6, 5}, {3.7, 8.6}, {3.8, 36}, {3.9, 62}, {4.0, 73}, {4.05, 83}, {4.1, 89}, {4.15, 94}, {4.2, 100}
+#ifndef BATTERY_POLL
+# define BATTERY_POLL 30000
+#endif
uint8_t battery_level(void) {
- float voltage = bluefruit_le_read_battery_voltage() * 2 * 3.3 / 1024;
- if (voltage < MIN_VOLTAGE) return 0;
- if (voltage > MAX_VOLTAGE) return 255;
- return (voltage - MIN_VOLTAGE) / (MAX_VOLTAGE - MIN_VOLTAGE) * 255;
+ // maintain legacy behaviour and scale 0-100 percent to 0-255
+ uint16_t percent = battery_get_percent();
+ return (percent * 255) / 100;
}
__attribute__ ((weak))
diff --git a/keyboards/handwired/promethium/rules.mk b/keyboards/handwired/promethium/rules.mk
index 7f20880066..4012f8ca29 100644
--- a/keyboards/handwired/promethium/rules.mk
+++ b/keyboards/handwired/promethium/rules.mk
@@ -5,7 +5,7 @@ PS2_DRIVER = interrupt
CUSTOM_MATRIX = yes
WS2812_DRIVER_REQUIRED = yes
-ANALOG_DRIVER_REQUIRED = yes
+BATTERY_DRIVER_REQUIRED = yes
SRC += rgbsps.c
SRC += matrix.c
diff --git a/keyboards/handwired/protype/keyboard.json b/keyboards/handwired/protype/keyboard.json
index 69f196abc4..dbbc17ba86 100644
--- a/keyboards/handwired/protype/keyboard.json
+++ b/keyboards/handwired/protype/keyboard.json
@@ -15,7 +15,6 @@
"cols": ["GP12", "GP9", "GP10", "GP0", "GP1", "GP5", "GP6", "GP2", "GP3", "GP4"]
},
"processor": "RP2040",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0xB7D7",
diff --git a/keyboards/handwired/pteron/keyboard.json b/keyboards/handwired/pteron/keyboard.json
index 7aa2470cc1..acaa1b7d62 100644
--- a/keyboards/handwired/pteron/keyboard.json
+++ b/keyboards/handwired/pteron/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Pteron",
"manufacturer": "QMK",
- "url": "",
"maintainer": "FSund",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/pteron38/keyboard.json b/keyboards/handwired/pteron38/keyboard.json
index 266aefec1f..f0c219f2e2 100644
--- a/keyboards/handwired/pteron38/keyboard.json
+++ b/keyboards/handwired/pteron38/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Pteron38",
"manufacturer": "QMK",
- "url": "",
"maintainer": "fidelcoria",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/pteron44/keyboard.json b/keyboards/handwired/pteron44/keyboard.json
index 26321317eb..497fd95f58 100644
--- a/keyboards/handwired/pteron44/keyboard.json
+++ b/keyboards/handwired/pteron44/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Pteron44",
"manufacturer": "QMK",
- "url": "",
"maintainer": "fidelcoria",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/qc60/proto/keyboard.json b/keyboards/handwired/qc60/proto/keyboard.json
index 810df8b7ae..b9919c4465 100644
--- a/keyboards/handwired/qc60/proto/keyboard.json
+++ b/keyboards/handwired/qc60/proto/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "QC60",
"manufacturer": "PeiorisBoards",
- "url": "",
"maintainer": "coarse",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/rd_61_qmk/keyboard.json b/keyboards/handwired/rd_61_qmk/keyboard.json
index be07d95924..bca23af959 100644
--- a/keyboards/handwired/rd_61_qmk/keyboard.json
+++ b/keyboards/handwired/rd_61_qmk/keyboard.json
@@ -52,7 +52,6 @@
"led_count": 1,
"saturation_steps": 8
},
- "url": "",
"ws2812": {
"pin": "C7"
},
diff --git a/keyboards/handwired/retro_refit/keyboard.json b/keyboards/handwired/retro_refit/keyboard.json
index 7acdb48b44..73e747fffa 100644
--- a/keyboards/handwired/retro_refit/keyboard.json
+++ b/keyboards/handwired/retro_refit/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "retro_refit",
"manufacturer": "Nobody",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/riblee_f401/keyboard.json b/keyboards/handwired/riblee_f401/keyboard.json
index 53fc613760..6fc3fbe474 100644
--- a/keyboards/handwired/riblee_f401/keyboard.json
+++ b/keyboards/handwired/riblee_f401/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Handwired F401",
"manufacturer": "Riblee",
- "url": "",
"maintainer": "riblee",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/riblee_f411/keyboard.json b/keyboards/handwired/riblee_f411/keyboard.json
index 47d6349ba7..1688220573 100644
--- a/keyboards/handwired/riblee_f411/keyboard.json
+++ b/keyboards/handwired/riblee_f411/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Handwired F411",
"manufacturer": "Riblee",
- "url": "",
"maintainer": "riblee",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/riblee_split/keyboard.json b/keyboards/handwired/riblee_split/keyboard.json
index f24dbe2ce6..9748bf1ec2 100644
--- a/keyboards/handwired/riblee_split/keyboard.json
+++ b/keyboards/handwired/riblee_split/keyboard.json
@@ -17,7 +17,6 @@
"rows": ["A4", "A3", "A2", "A1", "A0"]
},
"development_board": "blackpill_f411",
- "url": "",
"usb": {
"device_version": "1.0.0",
"vid": "0xFEED",
diff --git a/keyboards/handwired/rs60/keyboard.json b/keyboards/handwired/rs60/keyboard.json
index 1536474343..5bbabd8bbd 100644
--- a/keyboards/handwired/rs60/keyboard.json
+++ b/keyboards/handwired/rs60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "rs60",
"manufacturer": "rs",
- "url": "",
"maintainer": "rs",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/sejin_eat1010r2/keyboard.json b/keyboards/handwired/sejin_eat1010r2/keyboard.json
index f2cfef37a8..e31a0063b5 100644
--- a/keyboards/handwired/sejin_eat1010r2/keyboard.json
+++ b/keyboards/handwired/sejin_eat1010r2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "EAT-1010R2",
"manufacturer": "Sejin",
- "url": "",
"maintainer": "DmNosachev",
"usb": {
"vid": "0x515A",
diff --git a/keyboards/handwired/sick68/keyboard.json b/keyboards/handwired/sick68/keyboard.json
index 339484791f..81a9577f36 100644
--- a/keyboards/handwired/sick68/keyboard.json
+++ b/keyboards/handwired/sick68/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "sick68",
"manufacturer": "umbynos",
- "url": "",
"maintainer": "umbynos",
"usb": {
"vid": "0x5E68",
diff --git a/keyboards/handwired/skakunm_dactyl/keyboard.json b/keyboards/handwired/skakunm_dactyl/keyboard.json
index cc6f70b482..d14023e6c0 100644
--- a/keyboards/handwired/skakunm_dactyl/keyboard.json
+++ b/keyboards/handwired/skakunm_dactyl/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Dactyl Min (3x5_5)",
"manufacturer": "skakunm",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
@@ -29,7 +28,9 @@
"diode_direction": "COL2ROW",
"split": {
"enabled": true,
- "soft_serial_pin": "D0"
+ "serial": {
+ "pin": "D0"
+ }
},
"processor": "atmega32u4",
"bootloader": "caterina",
diff --git a/keyboards/handwired/slash/keyboard.json b/keyboards/handwired/slash/keyboard.json
index a682624d8e..ea1248c48e 100644
--- a/keyboards/handwired/slash/keyboard.json
+++ b/keyboards/handwired/slash/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Slash",
"manufacturer": "asdftemp",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/snatchpad/keyboard.json b/keyboards/handwired/snatchpad/keyboard.json
index d06fe2c003..61a8555135 100644
--- a/keyboards/handwired/snatchpad/keyboard.json
+++ b/keyboards/handwired/snatchpad/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "snatchpad",
"manufacturer": "xia0",
- "url": "",
"maintainer": "xia0",
"usb": {
"vid": "0x6662",
diff --git a/keyboards/handwired/sono1/info.json b/keyboards/handwired/sono1/info.json
index 85e86051c3..6eed0e45d5 100644
--- a/keyboards/handwired/sono1/info.json
+++ b/keyboards/handwired/sono1/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Sono1",
"manufacturer": "ASKeyboard",
- "url": "",
"maintainer": "DmNosachev",
"features": {
"bootmagic": true,
diff --git a/keyboards/handwired/space_oddity/keyboard.json b/keyboards/handwired/space_oddity/keyboard.json
index ca4e10d16b..a432372d97 100644
--- a/keyboards/handwired/space_oddity/keyboard.json
+++ b/keyboards/handwired/space_oddity/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Space Oddity",
"manufacturer": "James Taylor",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/splittest/info.json b/keyboards/handwired/splittest/info.json
index 07cac23aad..bbfe538255 100644
--- a/keyboards/handwired/splittest/info.json
+++ b/keyboards/handwired/splittest/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Split Tester",
"manufacturer": "Keebio",
- "url": "",
"maintainer": "nooges",
"usb": {
"vid": "0xCB10",
diff --git a/keyboards/handwired/splittest/promicro/keyboard.json b/keyboards/handwired/splittest/promicro/keyboard.json
index 8aca1c3de7..93f09a47ca 100644
--- a/keyboards/handwired/splittest/promicro/keyboard.json
+++ b/keyboards/handwired/splittest/promicro/keyboard.json
@@ -8,7 +8,9 @@
"handedness": {
"pin": "F6"
},
- "soft_serial_pin": "D1"
+ "serial": {
+ "pin": "D1"
+ }
},
"ws2812": {
"pin": "D3"
diff --git a/keyboards/handwired/splittest/teensy_2/keyboard.json b/keyboards/handwired/splittest/teensy_2/keyboard.json
index c10b20a173..78d6c5f9a3 100644
--- a/keyboards/handwired/splittest/teensy_2/keyboard.json
+++ b/keyboards/handwired/splittest/teensy_2/keyboard.json
@@ -8,7 +8,9 @@
"handedness": {
"pin": "F0"
},
- "soft_serial_pin": "D1"
+ "serial": {
+ "pin": "D1"
+ }
},
"ws2812": {
"pin": "D3"
diff --git a/keyboards/handwired/steamvan/rev1/keyboard.json b/keyboards/handwired/steamvan/rev1/keyboard.json
index 9c4593bca7..575f5f1a7c 100644
--- a/keyboards/handwired/steamvan/rev1/keyboard.json
+++ b/keyboards/handwired/steamvan/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "SteamVan rev1",
"manufacturer": "John M Daly",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/stef9998/split_5x7/rev1/keyboard.json b/keyboards/handwired/stef9998/split_5x7/rev1/keyboard.json
index 5f524ea445..2dc64b445e 100644
--- a/keyboards/handwired/stef9998/split_5x7/rev1/keyboard.json
+++ b/keyboards/handwired/stef9998/split_5x7/rev1/keyboard.json
@@ -1,6 +1,5 @@
{
"keyboard_name": "Split_5x7",
- "url": "",
"maintainer": "stef9998",
"manufacturer": "Stef9998",
"usb": {
diff --git a/keyboards/handwired/sticc14/keyboard.json b/keyboards/handwired/sticc14/keyboard.json
index b3fb4a06e5..4fd89780ee 100644
--- a/keyboards/handwired/sticc14/keyboard.json
+++ b/keyboards/handwired/sticc14/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Sticc14",
"manufacturer": "u/ergorius",
- "url": "",
"maintainer": "erkhal",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/swiftrax/cowfish/keyboard.json b/keyboards/handwired/swiftrax/cowfish/keyboard.json
index efa8c39d19..b4387bb94b 100644
--- a/keyboards/handwired/swiftrax/cowfish/keyboard.json
+++ b/keyboards/handwired/swiftrax/cowfish/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "CowFish",
"manufacturer": "Swiftrax",
- "url": "",
"maintainer": "swiftrax",
"usb": {
"vid": "0x04D8",
diff --git a/keyboards/handwired/symmetric70_proto/info.json b/keyboards/handwired/symmetric70_proto/info.json
index ecd0d38c24..e0bd2f9c91 100644
--- a/keyboards/handwired/symmetric70_proto/info.json
+++ b/keyboards/handwired/symmetric70_proto/info.json
@@ -1,6 +1,5 @@
{
"manufacturer": "mtei",
- "url": "",
"maintainer": "mtei",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/symmetric70_proto/promicro/info.json b/keyboards/handwired/symmetric70_proto/promicro/info.json
index f143f518eb..43ecb4c1c0 100644
--- a/keyboards/handwired/symmetric70_proto/promicro/info.json
+++ b/keyboards/handwired/symmetric70_proto/promicro/info.json
@@ -12,7 +12,9 @@
}
},
"split": {
- "soft_serial_pin": "D0"
+ "serial": {
+ "pin": "D0"
+ }
},
"processor": "atmega32u4",
"bootloader": "caterina"
diff --git a/keyboards/handwired/symmetry60/keyboard.json b/keyboards/handwired/symmetry60/keyboard.json
index 40afdf88c9..461e412457 100644
--- a/keyboards/handwired/symmetry60/keyboard.json
+++ b/keyboards/handwired/symmetry60/keyboard.json
@@ -1,7 +1,6 @@
{
"Keyboard_name": "Symmetry60",
"manufacturer": "Marhalloweenvt",
- "url": "",
"maintainer": "marhalloweenvt",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/t111/keyboard.json b/keyboards/handwired/t111/keyboard.json
index f65a3f087e..a43968e062 100644
--- a/keyboards/handwired/t111/keyboard.json
+++ b/keyboards/handwired/t111/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "T111",
"manufacturer": "FUJITSU",
- "url": "",
"maintainer": "DmNosachev",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/terminus_mini/keyboard.json b/keyboards/handwired/terminus_mini/keyboard.json
index 09346c81bf..0e1fdcee91 100644
--- a/keyboards/handwired/terminus_mini/keyboard.json
+++ b/keyboards/handwired/terminus_mini/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Terminus Mini",
"manufacturer": "James Morgan",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/tkk/keyboard.json b/keyboards/handwired/tkk/keyboard.json
index 91e495081f..3cf67ce24e 100644
--- a/keyboards/handwired/tkk/keyboard.json
+++ b/keyboards/handwired/tkk/keyboard.json
@@ -17,7 +17,6 @@
]
},
"processor": "atmega32u4",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0000",
diff --git a/keyboards/handwired/trackpoint/keyboard.json b/keyboards/handwired/trackpoint/keyboard.json
index 09fadd1dc6..1cd10dbb47 100644
--- a/keyboards/handwired/trackpoint/keyboard.json
+++ b/keyboards/handwired/trackpoint/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Trackpoint Demo",
"manufacturer": "QMK",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x1234",
diff --git a/keyboards/handwired/tractyl_manuform/4x6_right/keyboard.json b/keyboards/handwired/tractyl_manuform/4x6_right/keyboard.json
index e5730a4586..cc651bec95 100644
--- a/keyboards/handwired/tractyl_manuform/4x6_right/keyboard.json
+++ b/keyboards/handwired/tractyl_manuform/4x6_right/keyboard.json
@@ -1,6 +1,5 @@
{
"keyboard_name": "Tractyl Manuform (4x6)",
- "url": "",
"maintainer": "drashna",
"usb": {
"pid": "0x3537",
@@ -22,7 +21,9 @@
"handedness": {
"pin": "A6"
},
- "soft_serial_pin": "D3",
+ "serial": {
+ "pin": "D3"
+ },
"bootmagic": {
"matrix": [4, 5]
}
diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/arduinomicro/keyboard.json b/keyboards/handwired/tractyl_manuform/5x6_right/arduinomicro/keyboard.json
index df810f2881..bd4c41e17b 100644
--- a/keyboards/handwired/tractyl_manuform/5x6_right/arduinomicro/keyboard.json
+++ b/keyboards/handwired/tractyl_manuform/5x6_right/arduinomicro/keyboard.json
@@ -6,7 +6,9 @@
},
"diode_direction": "COL2ROW",
"split": {
- "soft_serial_pin": "D0",
+ "serial": {
+ "pin": "D0"
+ },
"matrix_pins": {
"right": {
"cols": ["D6", "D7", "B4", "D3", "C6", "C7"],
diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/elite_c/keyboard.json b/keyboards/handwired/tractyl_manuform/5x6_right/elite_c/keyboard.json
index e6c0e42bde..739aad07ba 100644
--- a/keyboards/handwired/tractyl_manuform/5x6_right/elite_c/keyboard.json
+++ b/keyboards/handwired/tractyl_manuform/5x6_right/elite_c/keyboard.json
@@ -11,7 +11,9 @@
]
},
"split": {
- "soft_serial_pin": "D2"
+ "serial": {
+ "pin": "D2"
+ }
},
"ws2812": {
"pin": "D3"
diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/info.json b/keyboards/handwired/tractyl_manuform/5x6_right/info.json
index b28f309fdb..fe3f2432ca 100644
--- a/keyboards/handwired/tractyl_manuform/5x6_right/info.json
+++ b/keyboards/handwired/tractyl_manuform/5x6_right/info.json
@@ -1,5 +1,4 @@
{
- "url": "",
"usb": {
"pid": "0x3536",
"device_version": "0.0.1"
diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/teensy2pp/keyboard.json b/keyboards/handwired/tractyl_manuform/5x6_right/teensy2pp/keyboard.json
index a131ac085b..5a091996b6 100644
--- a/keyboards/handwired/tractyl_manuform/5x6_right/teensy2pp/keyboard.json
+++ b/keyboards/handwired/tractyl_manuform/5x6_right/teensy2pp/keyboard.json
@@ -11,7 +11,9 @@
]
},
"split": {
- "soft_serial_pin": "D2"
+ "serial": {
+ "pin": "D2"
+ }
},
"ws2812": {
"pin": "E7"
diff --git a/keyboards/handwired/traveller/keyboard.json b/keyboards/handwired/traveller/keyboard.json
index e6941036f5..31161efe64 100644
--- a/keyboards/handwired/traveller/keyboard.json
+++ b/keyboards/handwired/traveller/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Traveller",
"manufacturer": "Unknown",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/twig/twig50/keyboard.json b/keyboards/handwired/twig/twig50/keyboard.json
index f1cc2f5a96..67054b6795 100644
--- a/keyboards/handwired/twig/twig50/keyboard.json
+++ b/keyboards/handwired/twig/twig50/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "twig50",
"manufacturer": "Twig",
- "url": "",
"maintainer": "nodatk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/unicomp_mini_m/keyboard.json b/keyboards/handwired/unicomp_mini_m/keyboard.json
index 50ae033028..b66b50ab46 100644
--- a/keyboards/handwired/unicomp_mini_m/keyboard.json
+++ b/keyboards/handwired/unicomp_mini_m/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Unicomp Mini M",
"manufacturer": "stevendlander",
- "url": "",
"maintainer": "stevendlander",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/uthol/info.json b/keyboards/handwired/uthol/info.json
index 7270e23172..a5c1a0c0c9 100644
--- a/keyboards/handwired/uthol/info.json
+++ b/keyboards/handwired/uthol/info.json
@@ -1,6 +1,5 @@
{
"manufacturer": "Uthol",
- "url": "",
"maintainer": "uthol",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/woodpad/keyboard.json b/keyboards/handwired/woodpad/keyboard.json
index e6c07b2c42..baf30d0bdc 100644
--- a/keyboards/handwired/woodpad/keyboard.json
+++ b/keyboards/handwired/woodpad/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Woodpad",
"manufacturer": "WoodKeys.click",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/wulkan/keyboard.json b/keyboards/handwired/wulkan/keyboard.json
index eceeb5c145..c804409b7d 100644
--- a/keyboards/handwired/wulkan/keyboard.json
+++ b/keyboards/handwired/wulkan/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Handwired48Keys",
"manufacturer": "Wulkan",
- "url": "",
"maintainer": "Napoleon Wulkan",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/wwa/helios/keyboard.json b/keyboards/handwired/wwa/helios/keyboard.json
index 64b2010396..af894cad64 100644
--- a/keyboards/handwired/wwa/helios/keyboard.json
+++ b/keyboards/handwired/wwa/helios/keyboard.json
@@ -17,7 +17,6 @@
"rows": ["GP4", "GP5", "GP6"]
},
"processor": "RP2040",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0001",
diff --git a/keyboards/handwired/wwa/kepler/keyboard.json b/keyboards/handwired/wwa/kepler/keyboard.json
index f962d632b4..2b1ac39337 100644
--- a/keyboards/handwired/wwa/kepler/keyboard.json
+++ b/keyboards/handwired/wwa/kepler/keyboard.json
@@ -17,7 +17,6 @@
"rows": ["GP9", "GP10", "GP11"]
},
"processor": "RP2040",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0002",
diff --git a/keyboards/handwired/wwa/mercury/keyboard.json b/keyboards/handwired/wwa/mercury/keyboard.json
index bb89858da2..2a31875b01 100644
--- a/keyboards/handwired/wwa/mercury/keyboard.json
+++ b/keyboards/handwired/wwa/mercury/keyboard.json
@@ -17,7 +17,6 @@
"rows": ["GP4", "GP5"]
},
"processor": "RP2040",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0003",
diff --git a/keyboards/handwired/wwa/soyuz/keyboard.json b/keyboards/handwired/wwa/soyuz/keyboard.json
index 9670f312a6..1783782754 100644
--- a/keyboards/handwired/wwa/soyuz/keyboard.json
+++ b/keyboards/handwired/wwa/soyuz/keyboard.json
@@ -17,7 +17,6 @@
"rows": ["GP7", "GP8", "GP9"]
},
"processor": "RP2040",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0004",
diff --git a/keyboards/handwired/wwa/soyuzxl/keyboard.json b/keyboards/handwired/wwa/soyuzxl/keyboard.json
index 9180344176..98f4bc649d 100644
--- a/keyboards/handwired/wwa/soyuzxl/keyboard.json
+++ b/keyboards/handwired/wwa/soyuzxl/keyboard.json
@@ -17,7 +17,6 @@
"rows": ["B5", "B2", "B3"]
},
"processor": "atmega32u4",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0005",
diff --git a/keyboards/handwired/xealous/rev1/keyboard.json b/keyboards/handwired/xealous/rev1/keyboard.json
index 9f926a3602..55e99eeb54 100644
--- a/keyboards/handwired/xealous/rev1/keyboard.json
+++ b/keyboards/handwired/xealous/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "XeaL60",
"manufacturer": "XeaLouS",
- "url": "",
"maintainer": "alex-ong",
"usb": {
"vid": "0x4131",
diff --git a/keyboards/handwired/z150/keyboard.json b/keyboards/handwired/z150/keyboard.json
index 38c92a6537..e3e7b5c769 100644
--- a/keyboards/handwired/z150/keyboard.json
+++ b/keyboards/handwired/z150/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Z150",
"manufacturer": "ALPS",
- "url": "",
"maintainer": "DmNosachev",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/handwired/ziyoulang_k3_mod/keyboard.json b/keyboards/handwired/ziyoulang_k3_mod/keyboard.json
index 5d4ca7a254..decb70c78e 100644
--- a/keyboards/handwired/ziyoulang_k3_mod/keyboard.json
+++ b/keyboards/handwired/ziyoulang_k3_mod/keyboard.json
@@ -141,6 +141,5 @@
}
},
"manufacturer": "Coom",
- "maintainer": "coomstoolbox",
- "url": ""
+ "maintainer": "coomstoolbox"
}
diff --git a/keyboards/hardlineworks/otd_plus/keyboard.json b/keyboards/hardlineworks/otd_plus/keyboard.json
index e0afc03893..38d9f40ae8 100644
--- a/keyboards/hardlineworks/otd_plus/keyboard.json
+++ b/keyboards/hardlineworks/otd_plus/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "OTD-PLUS",
"manufacturer": "Hardlineworks",
- "url": "",
"maintainer": "Hardlineworks",
"usb": {
"vid": "0x484C",
diff --git a/keyboards/heliar/wm1_hotswap/keyboard.json b/keyboards/heliar/wm1_hotswap/keyboard.json
index 789a3c7d2b..704710d948 100644
--- a/keyboards/heliar/wm1_hotswap/keyboard.json
+++ b/keyboards/heliar/wm1_hotswap/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "wm1 hotswap",
"manufacturer": "Heliar",
- "url": "",
"maintainer": "heliar",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/helix/pico/info.json b/keyboards/helix/pico/info.json
index d4fabc756e..7909bb0b30 100644
--- a/keyboards/helix/pico/info.json
+++ b/keyboards/helix/pico/info.json
@@ -10,7 +10,9 @@
},
"split": {
"enabled": true,
- "soft_serial_pin": "D2"
+ "serial": {
+ "pin": "D2"
+ }
},
"tapping": {
"term": 100
diff --git a/keyboards/helix/rev2/info.json b/keyboards/helix/rev2/info.json
index fd829782c0..a8bdb23e41 100644
--- a/keyboards/helix/rev2/info.json
+++ b/keyboards/helix/rev2/info.json
@@ -15,7 +15,9 @@
"diode_direction": "COL2ROW",
"split": {
"enabled": true,
- "soft_serial_pin": "D2",
+ "serial": {
+ "pin": "D2"
+ },
"transport": {
"sync": {
"indicators": true,
diff --git a/keyboards/helix/rev2/rev2.c b/keyboards/helix/rev2/rev2.c
index ded22bbe93..7502ad0552 100644
--- a/keyboards/helix/rev2/rev2.c
+++ b/keyboards/helix/rev2/rev2.c
@@ -32,7 +32,7 @@ void set_mac_mode_kb(bool macmode) {
* https://github.com/qmk/qmk_firmware/blob/fb4a6ad30ea7a648acd59793ed4a30c3a8d8dc32/quantum/process_keycode/process_magic.c#L80-L81
*/
keymap_config.swap_lalt_lgui = keymap_config.swap_ralt_rgui = !macmode;
- eeconfig_update_keymap(keymap_config.raw);
+ eeconfig_update_keymap(&keymap_config);
}
void matrix_init_kb(void) {
diff --git a/keyboards/helix/rev3_4rows/keyboard.json b/keyboards/helix/rev3_4rows/keyboard.json
index 5e9fd2dcd8..3d44e8fe78 100644
--- a/keyboards/helix/rev3_4rows/keyboard.json
+++ b/keyboards/helix/rev3_4rows/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Helix rev3 4rows",
"manufacturer": "yushakobo",
- "url": "",
"maintainer": "yushakobo",
"usb": {
"vid": "0x3265",
@@ -33,7 +32,9 @@
},
"split": {
"enabled": true,
- "soft_serial_pin": "D2"
+ "serial": {
+ "pin": "D2"
+ }
},
"ws2812": {
"pin": "D3"
diff --git a/keyboards/helix/rev3_4rows/rev3_4rows.c b/keyboards/helix/rev3_4rows/rev3_4rows.c
index ff61027a96..7f655b6852 100644
--- a/keyboards/helix/rev3_4rows/rev3_4rows.c
+++ b/keyboards/helix/rev3_4rows/rev3_4rows.c
@@ -27,7 +27,7 @@ void set_mac_mode(bool macmode) {
* https://github.com/qmk/qmk_firmware/blob/fb4a6ad30ea7a648acd59793ed4a30c3a8d8dc32/quantum/process_keycode/process_magic.c#L80-L81
*/
keymap_config.swap_lalt_lgui = keymap_config.swap_ralt_rgui = !macmode;
- eeconfig_update_keymap(keymap_config.raw);
+ eeconfig_update_keymap(&keymap_config);
}
#ifdef DIP_SWITCH_ENABLE
diff --git a/keyboards/helix/rev3_5rows/keyboard.json b/keyboards/helix/rev3_5rows/keyboard.json
index b61db7df86..12328ea86d 100644
--- a/keyboards/helix/rev3_5rows/keyboard.json
+++ b/keyboards/helix/rev3_5rows/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Helix rev3 5rows",
"manufacturer": "yushakobo",
- "url": "",
"maintainer": "yushakobo",
"usb": {
"vid": "0x3265",
@@ -99,7 +98,9 @@
},
"split": {
"enabled": true,
- "soft_serial_pin": "D2"
+ "serial": {
+ "pin": "D2"
+ }
},
"ws2812": {
"pin": "D3"
diff --git a/keyboards/helix/rev3_5rows/rev3_5rows.c b/keyboards/helix/rev3_5rows/rev3_5rows.c
index 28fa314a7b..af7276a2b5 100644
--- a/keyboards/helix/rev3_5rows/rev3_5rows.c
+++ b/keyboards/helix/rev3_5rows/rev3_5rows.c
@@ -27,7 +27,7 @@ void set_mac_mode(bool macmode) {
* https://github.com/qmk/qmk_firmware/blob/fb4a6ad30ea7a648acd59793ed4a30c3a8d8dc32/quantum/process_keycode/process_magic.c#L80-L81
*/
keymap_config.swap_lalt_lgui = keymap_config.swap_ralt_rgui = !macmode;
- eeconfig_update_keymap(keymap_config.raw);
+ eeconfig_update_keymap(&keymap_config);
}
#ifdef DIP_SWITCH_ENABLE
diff --git a/keyboards/herevoland/buff75/keyboard.json b/keyboards/herevoland/buff75/keyboard.json
index 15f3e27ac1..32b17cff61 100644
--- a/keyboards/herevoland/buff75/keyboard.json
+++ b/keyboards/herevoland/buff75/keyboard.json
@@ -3,7 +3,6 @@
"processor": "STM32F103",
"bootloader": "stm32duino",
"manufacturer": "HereVoLand",
- "url": "",
"maintainer": "Here VoLand @Vem",
"usb": {
"vid": "0xB727",
diff --git a/keyboards/hfdkb/ac001/keyboard.json b/keyboards/hfdkb/ac001/keyboard.json
index 87f6e40bc3..b5fd8eb4a9 100644
--- a/keyboards/hfdkb/ac001/keyboard.json
+++ b/keyboards/hfdkb/ac001/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "ac001",
"manufacturer": "hfd",
- "url": "",
"maintainer": "jonylee@hfd",
"usb": {
"vid": "0xFFFE",
diff --git a/keyboards/hhkb/ansi/info.json b/keyboards/hhkb/ansi/info.json
index 16349fc6e2..ff2c1bba6e 100644
--- a/keyboards/hhkb/ansi/info.json
+++ b/keyboards/hhkb/ansi/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "ANSI",
"manufacturer": "HHKB",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4848",
diff --git a/keyboards/hhkb/jp/keyboard.json b/keyboards/hhkb/jp/keyboard.json
index d745f21d20..db96a92a6c 100644
--- a/keyboards/hhkb/jp/keyboard.json
+++ b/keyboards/hhkb/jp/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "JP",
"manufacturer": "HHKB",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4848",
diff --git a/keyboards/hhkb/yang/keyboard.json b/keyboards/hhkb/yang/keyboard.json
index a5725d6afa..7af8a62934 100644
--- a/keyboards/hhkb/yang/keyboard.json
+++ b/keyboards/hhkb/yang/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "HHKB BLE",
"manufacturer": "YANG",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4848",
diff --git a/keyboards/hhkb_lite_2/keyboard.json b/keyboards/hhkb_lite_2/keyboard.json
index 3e9099f0e5..df69582b65 100644
--- a/keyboards/hhkb_lite_2/keyboard.json
+++ b/keyboards/hhkb_lite_2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "HHKB Lite 2",
"manufacturer": "PFU",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x88B2",
diff --git a/keyboards/hillside/46/0_1/keyboard.json b/keyboards/hillside/46/0_1/keyboard.json
index 663eeb25f4..7d3967c8c3 100644
--- a/keyboards/hillside/46/0_1/keyboard.json
+++ b/keyboards/hillside/46/0_1/keyboard.json
@@ -40,7 +40,6 @@
"rgblight": {
"led_count": 4,
"split": true,
- "hue_steps": 8,
"saturation_steps": 8,
"brightness_steps": 8,
"sleep": true
diff --git a/keyboards/hillside/48/0_1/keyboard.json b/keyboards/hillside/48/0_1/keyboard.json
index 4dd2e01361..acae16f347 100644
--- a/keyboards/hillside/48/0_1/keyboard.json
+++ b/keyboards/hillside/48/0_1/keyboard.json
@@ -40,7 +40,6 @@
"rgblight": {
"led_count": 5,
"split": true,
- "hue_steps": 8,
"saturation_steps": 8,
"brightness_steps": 8,
"sleep": true
diff --git a/keyboards/hillside/52/0_1/keyboard.json b/keyboards/hillside/52/0_1/keyboard.json
index c8db3917d6..469e6c5844 100644
--- a/keyboards/hillside/52/0_1/keyboard.json
+++ b/keyboards/hillside/52/0_1/keyboard.json
@@ -40,7 +40,6 @@
"rgblight": {
"led_count": 5,
"split": true,
- "hue_steps": 8,
"saturation_steps": 8,
"brightness_steps": 8,
"sleep": true
diff --git a/keyboards/hineybush/h08_ocelot/keyboard.json b/keyboards/hineybush/h08_ocelot/keyboard.json
index bca579aab8..46de9a63f8 100644
--- a/keyboards/hineybush/h08_ocelot/keyboard.json
+++ b/keyboards/hineybush/h08_ocelot/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "h08",
"manufacturer": "Hiney LLC",
- "url": "",
"maintainer": "hineybush",
"usb": {
"vid": "0x04D8",
diff --git a/keyboards/hineybush/h10/keyboard.json b/keyboards/hineybush/h10/keyboard.json
index 63a109f484..b29061b51b 100644
--- a/keyboards/hineybush/h10/keyboard.json
+++ b/keyboards/hineybush/h10/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "h10",
"manufacturer": "hineybush",
- "url": "",
"maintainer": "hineybush",
"usb": {
"vid": "0x04D8",
diff --git a/keyboards/hineybush/h101/keyboard.json b/keyboards/hineybush/h101/keyboard.json
index d1f8fa32a0..7d17c1922f 100644
--- a/keyboards/hineybush/h101/keyboard.json
+++ b/keyboards/hineybush/h101/keyboard.json
@@ -17,7 +17,6 @@
"rows": ["C13", "C14", "C15", "A0", "A1", "A2"]
},
"processor": "STM32F072",
- "url": "",
"usb": {
"device_version": "0.0.1",
"vid": "0x4069",
diff --git a/keyboards/hineybush/h60/keyboard.json b/keyboards/hineybush/h60/keyboard.json
index b7b24b2626..3ee6d66c17 100644
--- a/keyboards/hineybush/h60/keyboard.json
+++ b/keyboards/hineybush/h60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "h60",
"manufacturer": "hineybush",
- "url": "",
"maintainer": "hineybush",
"usb": {
"vid": "0x04D8",
diff --git a/keyboards/hineybush/h65/keyboard.json b/keyboards/hineybush/h65/keyboard.json
index 8560c7774c..0c85733e7d 100644
--- a/keyboards/hineybush/h65/keyboard.json
+++ b/keyboards/hineybush/h65/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "h65",
"manufacturer": "Hiney LLC",
- "url": "",
"maintainer": "hineybush",
"usb": {
"vid": "0x04D8",
diff --git a/keyboards/hineybush/h65_hotswap/keyboard.json b/keyboards/hineybush/h65_hotswap/keyboard.json
index 510836f22f..12e7f65330 100644
--- a/keyboards/hineybush/h65_hotswap/keyboard.json
+++ b/keyboards/hineybush/h65_hotswap/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "h65 hotswap",
"manufacturer": "Hiney LLC",
- "url": "",
"maintainer": "hineybush",
"usb": {
"vid": "0x04D8",
diff --git a/keyboards/hineybush/h660s/keyboard.json b/keyboards/hineybush/h660s/keyboard.json
index 44e8c8c21a..c1ca43de5b 100644
--- a/keyboards/hineybush/h660s/keyboard.json
+++ b/keyboards/hineybush/h660s/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "h660s",
"manufacturer": "hineybush",
- "url": "",
"maintainer": "Josh Hinnebusch",
"usb": {
"vid": "0x04D8",
diff --git a/keyboards/hineybush/h75_singa/keyboard.json b/keyboards/hineybush/h75_singa/keyboard.json
index 0c3ca31e28..02d2b13d09 100644
--- a/keyboards/hineybush/h75_singa/keyboard.json
+++ b/keyboards/hineybush/h75_singa/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "h75_singa",
"manufacturer": "Singa Keyboards",
- "url": "",
"maintainer": "hineybush",
"usb": {
"vid": "0x04D8",
diff --git a/keyboards/hineybush/h87_g2/keyboard.json b/keyboards/hineybush/h87_g2/keyboard.json
index 13c17caa98..ae97c5aadd 100644
--- a/keyboards/hineybush/h87_g2/keyboard.json
+++ b/keyboards/hineybush/h87_g2/keyboard.json
@@ -25,7 +25,6 @@
"rows": ["A15", "B3", "B4", "A0", "B6", "B7"]
},
"processor": "STM32F072",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0001",
diff --git a/keyboards/hineybush/h87a/keyboard.json b/keyboards/hineybush/h87a/keyboard.json
index 42a50bf001..a03727e4f5 100644
--- a/keyboards/hineybush/h87a/keyboard.json
+++ b/keyboards/hineybush/h87a/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "h87a",
"manufacturer": "hineybush",
- "url": "",
"maintainer": "hineybush",
"usb": {
"vid": "0x04D8",
diff --git a/keyboards/hineybush/h88/keyboard.json b/keyboards/hineybush/h88/keyboard.json
index 6a9b3142e3..c623416e7a 100644
--- a/keyboards/hineybush/h88/keyboard.json
+++ b/keyboards/hineybush/h88/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "h88",
"manufacturer": "hineybush",
- "url": "",
"maintainer": "hineybush",
"usb": {
"vid": "0x04D8",
diff --git a/keyboards/hineybush/h88_g2/keyboard.json b/keyboards/hineybush/h88_g2/keyboard.json
index 983cbcc1f5..a23216bd86 100644
--- a/keyboards/hineybush/h88_g2/keyboard.json
+++ b/keyboards/hineybush/h88_g2/keyboard.json
@@ -48,7 +48,6 @@
"saturation_steps": 8,
"sleep": true
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0002",
diff --git a/keyboards/hineybush/hbcp/keyboard.json b/keyboards/hineybush/hbcp/keyboard.json
index e8771ea9a7..1ad6755e42 100644
--- a/keyboards/hineybush/hbcp/keyboard.json
+++ b/keyboards/hineybush/hbcp/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "hbcp",
"manufacturer": "hineybush",
- "url": "",
"maintainer": "hineybush",
"usb": {
"vid": "0x04D8",
diff --git a/keyboards/hineybush/hineyg80/keyboard.json b/keyboards/hineybush/hineyg80/keyboard.json
index 933d689225..863be1d23b 100644
--- a/keyboards/hineybush/hineyg80/keyboard.json
+++ b/keyboards/hineybush/hineyg80/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "hineyG80",
"manufacturer": "hineybush",
- "url": "",
"maintainer": "hineybush",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/hineybush/ibis/keyboard.json b/keyboards/hineybush/ibis/keyboard.json
index 8c2f6ca3fe..40cba1c8f9 100644
--- a/keyboards/hineybush/ibis/keyboard.json
+++ b/keyboards/hineybush/ibis/keyboard.json
@@ -17,7 +17,6 @@
"rows": ["B0", "B1", "B2", "B3", "C7", "C6", "B4", "D7", "D5", "D3"]
},
"processor": "atmega32u4",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0xEAA9",
diff --git a/keyboards/hineybush/physix/keyboard.json b/keyboards/hineybush/physix/keyboard.json
index 79a0bea7ab..ee6c5f3978 100644
--- a/keyboards/hineybush/physix/keyboard.json
+++ b/keyboards/hineybush/physix/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "PhysiX",
"manufacturer": "LZ",
- "url": "",
"maintainer": "hineybush",
"usb": {
"vid": "0x04D8",
diff --git a/keyboards/hineybush/sm68/keyboard.json b/keyboards/hineybush/sm68/keyboard.json
index 8350ca0380..f499fa605c 100644
--- a/keyboards/hineybush/sm68/keyboard.json
+++ b/keyboards/hineybush/sm68/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "sm68",
"manufacturer": "hineybush",
- "url": "",
"maintainer": "hineybush",
"usb": {
"vid": "0x04D8",
diff --git a/keyboards/hnahkb/freyr/keyboard.json b/keyboards/hnahkb/freyr/keyboard.json
index 635c9d5989..ff83ecb532 100644
--- a/keyboards/hnahkb/freyr/keyboard.json
+++ b/keyboards/hnahkb/freyr/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Freyr",
"manufacturer": "HnahKB",
- "url": "",
"maintainer": "vuhopkep",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/hnahkb/stella/keyboard.json b/keyboards/hnahkb/stella/keyboard.json
index 7c69ec3de2..0a7ac5c109 100644
--- a/keyboards/hnahkb/stella/keyboard.json
+++ b/keyboards/hnahkb/stella/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Stella",
"manufacturer": "HnahKB",
- "url": "",
"maintainer": "VGS",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/holyswitch/lightweight65/keyboard.json b/keyboards/holyswitch/lightweight65/keyboard.json
index 16a9f73737..bc2fdc9504 100644
--- a/keyboards/holyswitch/lightweight65/keyboard.json
+++ b/keyboards/holyswitch/lightweight65/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Lightweight65",
"manufacturer": "HolySwitch",
- "url": "",
"maintainer": "DeskDaily",
"usb": {
"vid": "0x484F",
diff --git a/keyboards/holyswitch/southpaw75/keyboard.json b/keyboards/holyswitch/southpaw75/keyboard.json
index 1483e1fc31..e735895f20 100644
--- a/keyboards/holyswitch/southpaw75/keyboard.json
+++ b/keyboards/holyswitch/southpaw75/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "southpaw default",
"manufacturer": "drewguy",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x484F",
diff --git a/keyboards/horrortroll/chinese_pcb/black_e65/keyboard.json b/keyboards/horrortroll/chinese_pcb/black_e65/keyboard.json
index cef69593d7..6e8f7a00ff 100644
--- a/keyboards/horrortroll/chinese_pcb/black_e65/keyboard.json
+++ b/keyboards/horrortroll/chinese_pcb/black_e65/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Black E6.5",
"manufacturer": "HorrorTroll",
- "url": "",
"maintainer": "HorrorTroll",
"usb": {
"vid": "0x7516",
diff --git a/keyboards/horrortroll/chinese_pcb/devil68_pro/keyboard.json b/keyboards/horrortroll/chinese_pcb/devil68_pro/keyboard.json
index 77eac52ebd..f19a338721 100644
--- a/keyboards/horrortroll/chinese_pcb/devil68_pro/keyboard.json
+++ b/keyboards/horrortroll/chinese_pcb/devil68_pro/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Devil68 Pro",
"manufacturer": "HorrorTroll",
- "url": "",
"maintainer": "HorrorTroll",
"usb": {
"vid": "0x7516",
diff --git a/keyboards/horrortroll/handwired_k552/keyboard.json b/keyboards/horrortroll/handwired_k552/keyboard.json
index 213cdf8086..97f8ec822c 100644
--- a/keyboards/horrortroll/handwired_k552/keyboard.json
+++ b/keyboards/horrortroll/handwired_k552/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "K552 Kumara",
"manufacturer": "HorrorTroll",
- "url": "",
"maintainer": "HorrorTroll",
"usb": {
"vid": "0x7516",
diff --git a/keyboards/horrortroll/lemon40/keyboard.json b/keyboards/horrortroll/lemon40/keyboard.json
index 6303fb70bb..1c9993ca77 100644
--- a/keyboards/horrortroll/lemon40/keyboard.json
+++ b/keyboards/horrortroll/lemon40/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Lemon40",
"manufacturer": "HorrorTroll",
- "url": "",
"maintainer": "HorrorTroll",
"usb": {
"vid": "0x7516",
diff --git a/keyboards/horrortroll/nyx/rev1/lib/startup_swirl_anim.h b/keyboards/horrortroll/nyx/rev1/lib/startup_swirl_anim.h
index f26f07fe12..87e2e813a4 100644
--- a/keyboards/horrortroll/nyx/rev1/lib/startup_swirl_anim.h
+++ b/keyboards/horrortroll/nyx/rev1/lib/startup_swirl_anim.h
@@ -18,6 +18,7 @@
#include <string.h>
#include <math.h>
#include <lib/lib8tion/lib8tion.h>
+#include "eeconfig.h"
#define LED_TRAIL 10
@@ -105,7 +106,7 @@ static void swirl_set_color(hsv_t hsv) {
traverse_matrix();
if (!(top <= bottom && left <= right)) {
- eeprom_read_block(&rgb_matrix_config, EECONFIG_RGB_MATRIX, sizeof(rgb_matrix_config));
+ eeconfig_read_rgb_matrix(&rgb_matrix_config);
rgb_matrix_mode_noeeprom(rgb_matrix_config.mode);
return;
}
diff --git a/keyboards/hp69/keyboard.json b/keyboards/hp69/keyboard.json
index 83ed922a27..577606be5d 100644
--- a/keyboards/hp69/keyboard.json
+++ b/keyboards/hp69/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "hp69",
"manufacturer": "Desiboards",
- "url": "",
"maintainer": "Ananya Kirti",
"usb": {
"vid": "0x416B",
diff --git a/keyboards/hs60/v1/info.json b/keyboards/hs60/v1/info.json
index c6ebae97ce..4c4e7d4e47 100644
--- a/keyboards/hs60/v1/info.json
+++ b/keyboards/hs60/v1/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "HS60",
"manufacturer": "Yiancar-Designs",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/hs60/v2/ansi/keyboard.json b/keyboards/hs60/v2/ansi/keyboard.json
index e0781ef54b..d0ec52a50d 100644
--- a/keyboards/hs60/v2/ansi/keyboard.json
+++ b/keyboards/hs60/v2/ansi/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "HS60 V2",
"manufacturer": "Yiancar-Designs",
- "url": "",
"maintainer": "yiancar",
"usb": {
"vid": "0x8968",
diff --git a/keyboards/hs60/v2/hhkb/keyboard.json b/keyboards/hs60/v2/hhkb/keyboard.json
index 9bd4d111c2..327359b697 100644
--- a/keyboards/hs60/v2/hhkb/keyboard.json
+++ b/keyboards/hs60/v2/hhkb/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "HS60 V2",
"manufacturer": "Yiancar-Designs",
- "url": "",
"maintainer": "yiancar",
"usb": {
"vid": "0x8968",
diff --git a/keyboards/hs60/v2/iso/keyboard.json b/keyboards/hs60/v2/iso/keyboard.json
index a51dac05fa..e31ff53d7b 100644
--- a/keyboards/hs60/v2/iso/keyboard.json
+++ b/keyboards/hs60/v2/iso/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "HS60 V2",
"manufacturer": "Yiancar-Designs",
- "url": "",
"maintainer": "yiancar",
"usb": {
"vid": "0x8968",
diff --git a/keyboards/hubble/keyboard.json b/keyboards/hubble/keyboard.json
index 735cf4237d..2b75235cbb 100644
--- a/keyboards/hubble/keyboard.json
+++ b/keyboards/hubble/keyboard.json
@@ -37,7 +37,6 @@
"cols": ["F5", "F6", "B4", "E6", "D7", "C6", "D4", "D0"],
"rows": ["D1", "F4", "F7", "B5", "B1", "B3", "B6", "B2"]
},
- "url": "",
"usb": {
"vid": "0x4680",
"pid": "0x1357",
diff --git a/keyboards/ibm/model_m_4th_gen/overnumpad_1xb/board.h b/keyboards/ibm/model_m_4th_gen/overnumpad_1xb/board.h
new file mode 100644
index 0000000000..5b80eb2230
--- /dev/null
+++ b/keyboards/ibm/model_m_4th_gen/overnumpad_1xb/board.h
@@ -0,0 +1,8 @@
+// Copyright 2020 Purdea Andrei
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#include_next <board.h>
+
+#undef STM32_HSECLK
+#define STM32_HSECLK 16000000U
diff --git a/keyboards/ibm/model_m_4th_gen/overnumpad_1xb/config.h b/keyboards/ibm/model_m_4th_gen/overnumpad_1xb/config.h
index 71e60e9cfe..c10d26b9b2 100644
--- a/keyboards/ibm/model_m_4th_gen/overnumpad_1xb/config.h
+++ b/keyboards/ibm/model_m_4th_gen/overnumpad_1xb/config.h
@@ -21,8 +21,6 @@
#define SERIAL_NUMBER DEF_SERIAL_NUMBER
#endif
-#define STM32_HSECLK 16000000
-
#define SOLENOID_PIN B5
#define HAPTIC_ENABLE_PIN C13
#define SOLENOID_DEFAULT_DWELL 20
diff --git a/keyboards/icebreaker/hotswap/keyboard.json b/keyboards/icebreaker/hotswap/keyboard.json
new file mode 100644
index 0000000000..5102da60c1
--- /dev/null
+++ b/keyboards/icebreaker/hotswap/keyboard.json
@@ -0,0 +1,239 @@
+{
+ "manufacturer": "Serene Studio",
+ "keyboard_name": "Icebreaker HS",
+ "maintainer": "Matthijs Muller",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "encoder": {
+ "rotary": [
+ {"pin_a": "GP26", "pin_b": "GP27"}
+ ]
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "encoder": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "cols": ["GP24", "GP19", "GP18", "GP17", "GP29", "GP0", "GP12", "GP11", "GP10", "GP7", "GP6", "GP5", "GP4", "GP3", "GP2"],
+ "rows": ["GP25", "GP22", "GP28", "GP23", "GP1"]
+ },
+ "processor": "RP2040",
+ "qmk": {
+ "locking": {
+ "enabled": true,
+ "resync": true
+ }
+ },
+ "rgb_matrix": {
+ "animations": {
+ "alphas_mods": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_sat": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "band_val": true,
+ "breathing": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "cycle_up_down": true,
+ "digital_rain": true,
+ "dual_beacon": true,
+ "fractal": true,
+ "gradient_left_right": true,
+ "gradient_up_down": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "jellybean_raindrops": true,
+ "multisplash": true,
+ "pixel_flow": true,
+ "pixel_rain": true,
+ "rainbow_beacon": true,
+ "rainbow_moving_chevron": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "solid_multisplash": true,
+ "solid_reactive": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_multinexus": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_simple": true,
+ "solid_reactive_wide": true,
+ "solid_splash": true,
+ "splash": true,
+ "typing_heatmap": true
+ },
+ "default": {
+ "sat": 100,
+ "val": 80
+ },
+ "driver": "ws2812",
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4},
+ {"matrix": [0, 1], "x": 16, "y": 0, "flags": 4},
+ {"matrix": [0, 2], "x": 32, "y": 0, "flags": 4},
+ {"matrix": [0, 3], "x": 48, "y": 0, "flags": 4},
+ {"matrix": [0, 4], "x": 64, "y": 0, "flags": 4},
+ {"matrix": [0, 5], "x": 80, "y": 0, "flags": 4},
+ {"matrix": [0, 6], "x": 96, "y": 0, "flags": 4},
+ {"matrix": [0, 7], "x": 112, "y": 0, "flags": 4},
+ {"matrix": [0, 8], "x": 128, "y": 0, "flags": 4},
+ {"matrix": [0, 9], "x": 144, "y": 0, "flags": 4},
+ {"matrix": [0, 10], "x": 160, "y": 0, "flags": 4},
+ {"matrix": [0, 11], "x": 176, "y": 0, "flags": 4},
+ {"matrix": [0, 12], "x": 192, "y": 0, "flags": 4},
+ {"matrix": [0, 13], "x": 208, "y": 0, "flags": 4},
+ {"matrix": [2, 13], "x": 224, "y": 0, "flags": 4},
+ {"matrix": [0, 14], "x": 240, "y": 0, "flags": 4},
+ {"matrix": [1, 14], "x": 0, "y": 16, "flags": 4},
+ {"matrix": [1, 13], "x": 24, "y": 16, "flags": 4},
+ {"matrix": [1, 12], "x": 40, "y": 16, "flags": 4},
+ {"matrix": [1, 11], "x": 56, "y": 16, "flags": 4},
+ {"matrix": [1, 10], "x": 72, "y": 16, "flags": 4},
+ {"matrix": [1, 9], "x": 88, "y": 16, "flags": 4},
+ {"matrix": [1, 8], "x": 104, "y": 16, "flags": 4},
+ {"matrix": [1, 7], "x": 120, "y": 16, "flags": 4},
+ {"matrix": [1, 6], "x": 136, "y": 16, "flags": 4},
+ {"matrix": [1, 5], "x": 152, "y": 16, "flags": 4},
+ {"matrix": [1, 4], "x": 168, "y": 16, "flags": 4},
+ {"matrix": [1, 3], "x": 184, "y": 16, "flags": 4},
+ {"matrix": [1, 2], "x": 200, "y": 16, "flags": 4},
+ {"matrix": [1, 1], "x": 216, "y": 16, "flags": 4},
+ {"matrix": [1, 0], "x": 240, "y": 16, "flags": 4},
+ {"matrix": [2, 0], "x": 0, "y": 32, "flags": 4},
+ {"matrix": [2, 1], "x": 28, "y": 32, "flags": 4},
+ {"matrix": [2, 2], "x": 44, "y": 32, "flags": 4},
+ {"matrix": [2, 3], "x": 60, "y": 32, "flags": 4},
+ {"matrix": [2, 4], "x": 76, "y": 32, "flags": 4},
+ {"matrix": [2, 5], "x": 92, "y": 32, "flags": 4},
+ {"matrix": [2, 6], "x": 108, "y": 32, "flags": 4},
+ {"matrix": [2, 7], "x": 124, "y": 32, "flags": 4},
+ {"matrix": [2, 8], "x": 140, "y": 32, "flags": 4},
+ {"matrix": [2, 9], "x": 156, "y": 32, "flags": 4},
+ {"matrix": [2, 10], "x": 172, "y": 32, "flags": 4},
+ {"matrix": [2, 11], "x": 188, "y": 32, "flags": 4},
+ {"matrix": [2, 12], "x": 204, "y": 32, "flags": 4},
+ {"matrix": [2, 14], "x": 240, "y": 32, "flags": 4},
+ {"matrix": [3, 14], "x": 0, "y": 48, "flags": 4},
+ {"matrix": [3, 13], "x": 36, "y": 48, "flags": 4},
+ {"matrix": [3, 12], "x": 52, "y": 48, "flags": 4},
+ {"matrix": [3, 11], "x": 68, "y": 48, "flags": 4},
+ {"matrix": [3, 10], "x": 84, "y": 48, "flags": 4},
+ {"matrix": [3, 9], "x": 100, "y": 48, "flags": 4},
+ {"matrix": [3, 8], "x": 116, "y": 48, "flags": 4},
+ {"matrix": [3, 7], "x": 132, "y": 48, "flags": 4},
+ {"matrix": [3, 6], "x": 148, "y": 48, "flags": 4},
+ {"matrix": [3, 5], "x": 164, "y": 48, "flags": 4},
+ {"matrix": [3, 4], "x": 180, "y": 48, "flags": 4},
+ {"matrix": [3, 3], "x": 196, "y": 48, "flags": 4},
+ {"matrix": [3, 2], "x": 224, "y": 48, "flags": 4},
+ {"matrix": [3, 0], "x": 240, "y": 48, "flags": 4},
+ {"matrix": [4, 0], "x": 0, "y": 64, "flags": 4},
+ {"matrix": [4, 1], "x": 24, "y": 64, "flags": 4},
+ {"matrix": [4, 6], "x": 48, "y": 64, "flags": 4},
+ {"matrix": [4, 10], "x": 160, "y": 64, "flags": 4},
+ {"matrix": [4, 11], "x": 184, "y": 64, "flags": 4},
+ {"matrix": [4, 12], "x": 208, "y": 64, "flags": 4},
+ {"matrix": [4, 13], "x": 224, "y": 64, "flags": 4},
+ {"matrix": [4, 14], "x": 240, "y": 64, "flags": 4}
+ ],
+ "max_brightness": 120
+ },
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x6503",
+ "vid": "0x5363"
+ },
+ "ws2812": {
+ "driver": "vendor",
+ "pin": "GP13"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [2, 13], "x": 14, "y": 0},
+ {"matrix": [0, 14], "x": 15, "y": 0},
+ {"label": "encoder", "matrix": [3, 1], "x": 16, "y": 0, "encoder": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [1, 14], "x": 15, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [2, 14], "x": 15, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [3, 14], "x": 15, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 1], "x": 1.5, "y": 4, "w": 1},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 10], "x": 11, "y": 4},
+ {"matrix": [4, 11], "x": 12, "y": 4},
+ {"matrix": [4, 12], "x": 13, "y": 4},
+ {"matrix": [4, 13], "x": 14, "y": 4},
+ {"matrix": [4, 14], "x": 15, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/icebreaker/hotswap/keymaps/default/keymap.c b/keyboards/icebreaker/hotswap/keymaps/default/keymap.c
new file mode 100644
index 0000000000..058210fff4
--- /dev/null
+++ b/keyboards/icebreaker/hotswap/keymaps/default/keymap.c
@@ -0,0 +1,43 @@
+/*
+Copyright 2024 Matthijs Muller
+
+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] = {
+
+ [0] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL, KC_GRV, KC_MUTE,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RGUI, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, RM_TOGG, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_END,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_VOLU, _______,
+ _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT
+ )
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [1] = { ENCODER_CCW_CW(RM_SATD, RM_SATU) },
+};
+#endif
diff --git a/keyboards/icebreaker/hotswap/keymaps/default/rules.mk b/keyboards/icebreaker/hotswap/keymaps/default/rules.mk
new file mode 100644
index 0000000000..ee32568148
--- /dev/null
+++ b/keyboards/icebreaker/hotswap/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/icebreaker/readme.md b/keyboards/icebreaker/readme.md
new file mode 100644
index 0000000000..439756f1b3
--- /dev/null
+++ b/keyboards/icebreaker/readme.md
@@ -0,0 +1,26 @@
+# Icebreaker
+
+![Icebreaker](https://i.imgur.com/vSRfEOD.png)
+
+
+
+* Keyboard Maintainer: [Matthijs Muller](https://github.com/SmollChungus)
+* Hardware Supported: Icebreaker Hotswap PCB
+
+Make example for this keyboard (after setting up your build environment):
+
+ make icebreaker:default
+
+Flashing example for this keyboard:
+
+ make icebreaker:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available \ No newline at end of file
diff --git a/keyboards/idobao/id75/v1/keyboard.json b/keyboards/idobao/id75/v1/keyboard.json
index f52938d0d8..ed3cae1305 100644
--- a/keyboards/idobao/id75/v1/keyboard.json
+++ b/keyboards/idobao/id75/v1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "ID75",
"manufacturer": "IDOBAO",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x6964",
diff --git a/keyboards/idobao/id75/v2/keyboard.json b/keyboards/idobao/id75/v2/keyboard.json
index 09e24dbd47..69cbc037c4 100644
--- a/keyboards/idobao/id75/v2/keyboard.json
+++ b/keyboards/idobao/id75/v2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "ID75",
"manufacturer": "IDOBAO",
- "url": "",
"maintainer": "peepeetee",
"usb": {
"vid": "0x6964",
diff --git a/keyboards/idobao/id80/v2/info.json b/keyboards/idobao/id80/v2/info.json
index 4d6e0773d8..66123fcb2a 100644
--- a/keyboards/idobao/id80/v2/info.json
+++ b/keyboards/idobao/id80/v2/info.json
@@ -1,6 +1,5 @@
{
"manufacturer": "IDOBAO",
- "url": "",
"maintainer": "IDOBAOKB",
"usb": {
"vid": "0x6964",
diff --git a/keyboards/igloo/keyboard.json b/keyboards/igloo/keyboard.json
index 6e0cba498b..cf64823104 100644
--- a/keyboards/igloo/keyboard.json
+++ b/keyboards/igloo/keyboard.json
@@ -19,7 +19,6 @@
"rows": ["B7", "D0", "D1", "D2", "D3"]
},
"processor": "atmega32u4",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0001",
diff --git a/keyboards/illuminati/is0/keyboard.json b/keyboards/illuminati/is0/keyboard.json
index ee90646b19..78bbe029ab 100644
--- a/keyboards/illuminati/is0/keyboard.json
+++ b/keyboards/illuminati/is0/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "iS0",
"manufacturer": "Illuminati Works",
- "url": "",
"maintainer": "ai03",
"usb": {
"vid": "0xA103",
diff --git a/keyboards/illusion/rosa/keyboard.json b/keyboards/illusion/rosa/keyboard.json
index 29b7a2124d..f1077ecdbd 100644
--- a/keyboards/illusion/rosa/keyboard.json
+++ b/keyboards/illusion/rosa/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Rosa",
"manufacturer": "illusion keyboards",
- "url": "",
"maintainer": "illusion",
"usb": {
"vid": "0x694B",
diff --git a/keyboards/ilumkb/primus75/keyboard.json b/keyboards/ilumkb/primus75/keyboard.json
index 15831ffda6..52d2982097 100644
--- a/keyboards/ilumkb/primus75/keyboard.json
+++ b/keyboards/ilumkb/primus75/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Primus75",
"manufacturer": "moyi4681",
- "url": "",
"maintainer": "moyi4681",
"usb": {
"vid": "0x445A",
diff --git a/keyboards/ilumkb/simpler61/keyboard.json b/keyboards/ilumkb/simpler61/keyboard.json
index 8e7680fb9f..a9fc9913c8 100644
--- a/keyboards/ilumkb/simpler61/keyboard.json
+++ b/keyboards/ilumkb/simpler61/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Simpler61",
"manufacturer": "Equalz",
- "url": "",
"maintainer": "Equalz",
"usb": {
"vid": "0xC3C3",
diff --git a/keyboards/ilumkb/simpler64/keyboard.json b/keyboards/ilumkb/simpler64/keyboard.json
index 65aa627b04..30ec37c977 100644
--- a/keyboards/ilumkb/simpler64/keyboard.json
+++ b/keyboards/ilumkb/simpler64/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Simpler64",
"manufacturer": "Equalz",
- "url": "",
"maintainer": "Equalz",
"usb": {
"vid": "0xC3C3",
diff --git a/keyboards/ilumkb/volcano660/keyboard.json b/keyboards/ilumkb/volcano660/keyboard.json
index fa74e46fed..e353c8cce0 100644
--- a/keyboards/ilumkb/volcano660/keyboard.json
+++ b/keyboards/ilumkb/volcano660/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Volcano660",
"manufacturer": "DZTech",
- "url": "",
"maintainer": "moyi4681",
"usb": {
"vid": "0x445A",
diff --git a/keyboards/inett_studio/sqx/hotswap/keyboard.json b/keyboards/inett_studio/sqx/hotswap/keyboard.json
index 432112e7f4..6c04e4fbe5 100644
--- a/keyboards/inett_studio/sqx/hotswap/keyboard.json
+++ b/keyboards/inett_studio/sqx/hotswap/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "SQUARE.X",
"manufacturer": "iNETT Studio",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x694E",
diff --git a/keyboards/inett_studio/sqx/universal/keyboard.json b/keyboards/inett_studio/sqx/universal/keyboard.json
index 11bb224a0f..7c7b4e479e 100644
--- a/keyboards/inett_studio/sqx/universal/keyboard.json
+++ b/keyboards/inett_studio/sqx/universal/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "SQUARE.X",
"manufacturer": "iNETT Studio",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x694E",
diff --git a/keyboards/inland/kb83/kb83.c b/keyboards/inland/kb83/kb83.c
index 1052131a91..41a3ad8df7 100644
--- a/keyboards/inland/kb83/kb83.c
+++ b/keyboards/inland/kb83/kb83.c
@@ -317,7 +317,7 @@ bool dip_switch_update_kb(uint8_t index, bool active) {
}
if(active){
keymap_config.no_gui = 0;
- eeconfig_update_keymap(keymap_config.raw);
+ eeconfig_update_keymap(&keymap_config);
}
return true;
}
diff --git a/keyboards/inland/mk47/keyboard.json b/keyboards/inland/mk47/keyboard.json
index b6404f58b2..de6f792f6d 100644
--- a/keyboards/inland/mk47/keyboard.json
+++ b/keyboards/inland/mk47/keyboard.json
@@ -2,7 +2,6 @@
"keyboard_name": "MK47",
"manufacturer": "Inland",
"maintainer": "jonylee@hfd",
- "url":"",
"usb": {
"vid": "0xFFFE",
"pid": "0x0002",
diff --git a/keyboards/input_club/k_type/keyboard.json b/keyboards/input_club/k_type/keyboard.json
index a4e8e2419e..3769bdae83 100644
--- a/keyboards/input_club/k_type/keyboard.json
+++ b/keyboards/input_club/k_type/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "K-Type (QMK)",
"manufacturer": "Input:Club",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x1C11",
diff --git a/keyboards/irene/keyboard.json b/keyboards/irene/keyboard.json
index 3280c34c03..b9189bc864 100644
--- a/keyboards/irene/keyboard.json
+++ b/keyboards/irene/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Irene",
"manufacturer": "Andrei Collado",
- "url": "",
"maintainer": "Andrei Collado",
"usb": {
"vid": "0x1434",
diff --git a/keyboards/iriskeyboards/keyboard.json b/keyboards/iriskeyboards/keyboard.json
index 200c3a3f6a..c568e8e232 100644
--- a/keyboards/iriskeyboards/keyboard.json
+++ b/keyboards/iriskeyboards/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Iris Rev0",
"manufacturer": "SonOfAres",
- "url": "",
"maintainer": "SonOfAres",
"usb": {
"vid": "0x494B",
diff --git a/keyboards/iron180/keyboard.json b/keyboards/iron180/keyboard.json
index 8daae1b1eb..90593faf8a 100644
--- a/keyboards/iron180/keyboard.json
+++ b/keyboards/iron180/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Iron180",
"manufacturer": "SmithRune",
- "url": "",
"maintainer": "Gondolindrim",
"usb": {
"vid": "0x8384",
diff --git a/keyboards/j80/keyboard.json b/keyboards/j80/keyboard.json
index 72745d262f..c7fee83834 100644
--- a/keyboards/j80/keyboard.json
+++ b/keyboards/j80/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "J80",
"manufacturer": "JER",
- "url": "",
"maintainer": "oeywil",
"usb": {
"vid": "0x20A0",
diff --git a/keyboards/jae/j01/keyboard.json b/keyboards/jae/j01/keyboard.json
index fd16f2a46e..2375122bd8 100644
--- a/keyboards/jae/j01/keyboard.json
+++ b/keyboards/jae/j01/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "J-01",
"manufacturer": "Evyd13",
- "url": "",
"maintainer": "MechMerlin",
"usb": {
"vid": "0x4705",
diff --git a/keyboards/jagdpietr/drakon/keyboard.json b/keyboards/jagdpietr/drakon/keyboard.json
index 2d2b68a41a..dfb38ac200 100644
--- a/keyboards/jagdpietr/drakon/keyboard.json
+++ b/keyboards/jagdpietr/drakon/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "drakon",
"manufacturer": "jagdpietr",
- "url": "",
"maintainer": "jagdpietr",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/jaykeeb/aumz_work/info.json b/keyboards/jaykeeb/aumz_work/info.json
index 7ca2eb32b8..8a1107127a 100644
--- a/keyboards/jaykeeb/aumz_work/info.json
+++ b/keyboards/jaykeeb/aumz_work/info.json
@@ -3,7 +3,6 @@
"maintainer": "Alabahuy",
"processor": "RP2040",
"bootloader": "rp2040",
- "url": "",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
diff --git a/keyboards/jaykeeb/jk60/keyboard.json b/keyboards/jaykeeb/jk60/keyboard.json
index 3899d90699..813f4d1e87 100644
--- a/keyboards/jaykeeb/jk60/keyboard.json
+++ b/keyboards/jaykeeb/jk60/keyboard.json
@@ -21,7 +21,6 @@
"on_state": 0
},
"processor": "RP2040",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x7760",
diff --git a/keyboards/jaykeeb/jk60rgb/keyboard.json b/keyboards/jaykeeb/jk60rgb/keyboard.json
index fd6876d563..45a708615e 100644
--- a/keyboards/jaykeeb/jk60rgb/keyboard.json
+++ b/keyboards/jaykeeb/jk60rgb/keyboard.json
@@ -154,7 +154,6 @@
]
},
"processor": "RP2040",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x7762",
diff --git a/keyboards/jaykeeb/jk65/keyboard.json b/keyboards/jaykeeb/jk65/keyboard.json
index 0be07caacd..320725509e 100644
--- a/keyboards/jaykeeb/jk65/keyboard.json
+++ b/keyboards/jaykeeb/jk65/keyboard.json
@@ -21,7 +21,6 @@
"on_state": 0
},
"processor": "RP2040",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x7765",
diff --git a/keyboards/jaykeeb/joker/keyboard.json b/keyboards/jaykeeb/joker/keyboard.json
index ed8b59d03f..3d3663d38d 100644
--- a/keyboards/jaykeeb/joker/keyboard.json
+++ b/keyboards/jaykeeb/joker/keyboard.json
@@ -23,7 +23,6 @@
"on_state": 0
},
"processor": "RP2040",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0795",
diff --git a/keyboards/jaykeeb/kamigakushi/keyboard.json b/keyboards/jaykeeb/kamigakushi/keyboard.json
index 7ab02d2c66..72c6d19937 100644
--- a/keyboards/jaykeeb/kamigakushi/keyboard.json
+++ b/keyboards/jaykeeb/kamigakushi/keyboard.json
@@ -19,10 +19,8 @@
},
"rgblight": {
"led_count": 2,
- "hue_steps": 8,
"saturation_steps": 8,
"brightness_steps": 8,
- "max_brightness": 255,
"animations": {
"alternating": true,
"breathing": true,
@@ -45,7 +43,6 @@
"rows": ["GP24", "GP29", "GP6", "GP15", "GP16"]
},
"processor": "RP2040",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0765",
diff --git a/keyboards/jaykeeb/orba/keyboard.json b/keyboards/jaykeeb/orba/keyboard.json
index b437667b14..8d6a27d90b 100644
--- a/keyboards/jaykeeb/orba/keyboard.json
+++ b/keyboards/jaykeeb/orba/keyboard.json
@@ -17,7 +17,6 @@
"rows": ["GP11", "GP10", "GP18", "GP19", "GP0" ]
},
"processor": "RP2040",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0769",
diff --git a/keyboards/jaykeeb/sebelas/keyboard.json b/keyboards/jaykeeb/sebelas/keyboard.json
index e88607703e..4e5dc822b9 100644
--- a/keyboards/jaykeeb/sebelas/keyboard.json
+++ b/keyboards/jaykeeb/sebelas/keyboard.json
@@ -41,7 +41,6 @@
}
},
"processor": "RP2040",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0767",
diff --git a/keyboards/jaykeeb/skyline/keyboard.json b/keyboards/jaykeeb/skyline/keyboard.json
index 068c11a874..66d3390fc8 100644
--- a/keyboards/jaykeeb/skyline/keyboard.json
+++ b/keyboards/jaykeeb/skyline/keyboard.json
@@ -22,7 +22,6 @@
"rows": ["GP13", "GP27", "GP26", "GP25", "GP22", "GP23"]
},
"processor": "RP2040",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0799",
diff --git a/keyboards/jaykeeb/sriwedari70/keyboard.json b/keyboards/jaykeeb/sriwedari70/keyboard.json
index c9569a9724..20f7e00ba4 100644
--- a/keyboards/jaykeeb/sriwedari70/keyboard.json
+++ b/keyboards/jaykeeb/sriwedari70/keyboard.json
@@ -30,10 +30,8 @@
},
"rgblight": {
"led_count": 8,
- "hue_steps": 8,
"saturation_steps": 8,
"brightness_steps": 8,
- "max_brightness": 255,
"animations": {
"alternating": true,
"breathing": true,
diff --git a/keyboards/jaykeeb/tokki/keyboard.json b/keyboards/jaykeeb/tokki/keyboard.json
index 0ab1150017..82c8056ebc 100644
--- a/keyboards/jaykeeb/tokki/keyboard.json
+++ b/keyboards/jaykeeb/tokki/keyboard.json
@@ -41,7 +41,6 @@
}
},
"processor": "RP2040",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0768",
diff --git a/keyboards/jc65/v32a/keyboard.json b/keyboards/jc65/v32a/keyboard.json
index 7fd13e0626..4cb14e54d4 100644
--- a/keyboards/jc65/v32a/keyboard.json
+++ b/keyboards/jc65/v32a/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "JC65 BMC",
"manufacturer": "RAMA",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x1234",
diff --git a/keyboards/jc65/v32u4/keyboard.json b/keyboards/jc65/v32u4/keyboard.json
index 6a8d923507..0abdbf6a18 100644
--- a/keyboards/jc65/v32u4/keyboard.json
+++ b/keyboards/jc65/v32u4/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "JC65",
"manufacturer": "dou",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/jd40/keyboard.json b/keyboards/jd40/keyboard.json
index f56602b215..062972d43f 100644
--- a/keyboards/jd40/keyboard.json
+++ b/keyboards/jd40/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "jd40",
"manufacturer": "geekhack",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/jd45/keyboard.json b/keyboards/jd45/keyboard.json
index 6c103ec6dd..559c5f1d26 100644
--- a/keyboards/jd45/keyboard.json
+++ b/keyboards/jd45/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "JD45",
"manufacturer": "geekhack",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/jels/boaty/keyboard.json b/keyboards/jels/boaty/keyboard.json
index 36fa9288ab..6bfcf25f16 100644
--- a/keyboards/jels/boaty/keyboard.json
+++ b/keyboards/jels/boaty/keyboard.json
@@ -6,7 +6,6 @@
"pid": "0x000B",
"device_version": "1.0.0"
},
- "url": "",
"maintainer": "Jels",
"processor": "atmega328p",
"bootloader": "usbasploader",
diff --git a/keyboards/jels/jels60/info.json b/keyboards/jels/jels60/info.json
index 7194542d48..8f3e05e581 100644
--- a/keyboards/jels/jels60/info.json
+++ b/keyboards/jels/jels60/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Jels60",
"manufacturer": "Jels",
- "url": "",
"maintainer": "Jels",
"usb": {
"vid": "0x006A",
diff --git a/keyboards/jels/jels88/keyboard.json b/keyboards/jels/jels88/keyboard.json
index e4d2c6e273..430396ccf1 100644
--- a/keyboards/jels/jels88/keyboard.json
+++ b/keyboards/jels/jels88/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Jels88",
"manufacturer": "Jels",
- "url": "",
"maintainer": "Jels",
"usb": {
"vid": "0x006A",
diff --git a/keyboards/jian/keymaps/advanced/keymap.c b/keyboards/jian/keymaps/advanced/keymap.c
index eaf57cdd78..e3e58a0e9f 100644
--- a/keyboards/jian/keymaps/advanced/keymap.c
+++ b/keyboards/jian/keymaps/advanced/keymap.c
@@ -472,9 +472,9 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (!eeconfig_is_enabled()) {
eeconfig_init();
}
- keymap_config.raw = eeconfig_read_keymap();
+ eeconfig_read_keymap(&keymap_config);
keymap_config.nkro = 1;
- eeconfig_update_keymap(keymap_config.raw);
+ eeconfig_update_keymap(&keymap_config);
}
return false;
case EXT_PLV:
diff --git a/keyboards/jolofsor/denial75/keyboard.json b/keyboards/jolofsor/denial75/keyboard.json
index df7c3157c9..14fbb07328 100644
--- a/keyboards/jolofsor/denial75/keyboard.json
+++ b/keyboards/jolofsor/denial75/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "denial75",
"manufacturer": "jsor-hpoli",
- "url": "",
"maintainer": "jolofsor",
"usb": {
"vid": "0x4A48",
diff --git a/keyboards/jukaie/jk01/keyboard.json b/keyboards/jukaie/jk01/keyboard.json
index cde0b38034..3a6845258a 100644
--- a/keyboards/jukaie/jk01/keyboard.json
+++ b/keyboards/jukaie/jk01/keyboard.json
@@ -181,7 +181,6 @@
],
"sleep": true
},
- "url": "",
"usb": {
"device_version": "0.0.2",
"pid": "0x0002",
diff --git a/keyboards/kabedon/kabedon78s/keyboard.json b/keyboards/kabedon/kabedon78s/keyboard.json
index b875f9b35a..393dcd4b3e 100644
--- a/keyboards/kabedon/kabedon78s/keyboard.json
+++ b/keyboards/kabedon/kabedon78s/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "78S",
"manufacturer": "Kabe_Don",
- "url": "",
"maintainer": "370490639",
"usb": {
"vid": "0x4B44",
diff --git a/keyboards/kabedon/kabedon98e/keyboard.json b/keyboards/kabedon/kabedon98e/keyboard.json
index beff70d5d9..85cc538d7d 100644
--- a/keyboards/kabedon/kabedon98e/keyboard.json
+++ b/keyboards/kabedon/kabedon98e/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "98e",
"manufacturer": "Kabe_Don",
- "url": "",
"maintainer": "370490639",
"usb": {
"vid": "0x4B44",
diff --git a/keyboards/kagizaraya/chidori/keyboard.json b/keyboards/kagizaraya/chidori/keyboard.json
index 2f9066149d..0187d55eec 100644
--- a/keyboards/kagizaraya/chidori/keyboard.json
+++ b/keyboards/kagizaraya/chidori/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Chidori",
"manufacturer": "Kagizaraya",
- "url": "",
"maintainer": "ka2hiro",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/kagizaraya/halberd/keyboard.json b/keyboards/kagizaraya/halberd/keyboard.json
index c8c5b5e214..da82556271 100644
--- a/keyboards/kagizaraya/halberd/keyboard.json
+++ b/keyboards/kagizaraya/halberd/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Halberd",
"manufacturer": "Kagizaraya",
- "url": "",
"maintainer": "ka2hiro",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/kagizaraya/miniaxe/keyboard.json b/keyboards/kagizaraya/miniaxe/keyboard.json
index b2e3b14d0e..52ecbbac5a 100644
--- a/keyboards/kagizaraya/miniaxe/keyboard.json
+++ b/keyboards/kagizaraya/miniaxe/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "MiniAxe",
"manufacturer": "ENDO Katsuhiro",
- "url": "",
"maintainer": "ka2hiro",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/kagizaraya/scythe/keyboard.json b/keyboards/kagizaraya/scythe/keyboard.json
index ed1bd99f66..eddb54315d 100644
--- a/keyboards/kagizaraya/scythe/keyboard.json
+++ b/keyboards/kagizaraya/scythe/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Scythe",
"manufacturer": "Kagizaraya",
- "url": "",
"maintainer": "ka2hiro",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/kakunpc/business_card/alpha/keyboard.json b/keyboards/kakunpc/business_card/alpha/keyboard.json
index 17c42ebb31..c357ae3a00 100644
--- a/keyboards/kakunpc/business_card/alpha/keyboard.json
+++ b/keyboards/kakunpc/business_card/alpha/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "business_card alpha",
"manufacturer": "kakunpc",
- "url": "",
"maintainer": "kakunpc",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/kakunpc/business_card/beta/keyboard.json b/keyboards/kakunpc/business_card/beta/keyboard.json
index 5b6a77f358..0e8fda9f58 100644
--- a/keyboards/kakunpc/business_card/beta/keyboard.json
+++ b/keyboards/kakunpc/business_card/beta/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "business_card beta",
"manufacturer": "kakunpc",
- "url": "",
"maintainer": "kakunpc",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/kb_elmo/67mk_e/keyboard.json b/keyboards/kb_elmo/67mk_e/keyboard.json
index 4e842f28e6..046b08c667 100644
--- a/keyboards/kb_elmo/67mk_e/keyboard.json
+++ b/keyboards/kb_elmo/67mk_e/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "67mk_E",
"manufacturer": "kb_elmo",
- "url": "",
"maintainer": "kb-elmo",
"usb": {
"vid": "0xA68C",
diff --git a/keyboards/kb_elmo/isolation/keyboard.json b/keyboards/kb_elmo/isolation/keyboard.json
index e7a40a55e6..1152675912 100644
--- a/keyboards/kb_elmo/isolation/keyboard.json
+++ b/keyboards/kb_elmo/isolation/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "ISOlation",
"manufacturer": "kb-elmo",
- "url": "",
"maintainer": "kb-elmo",
"usb": {
"vid": "0xA68C",
diff --git a/keyboards/kb_elmo/qez/keyboard.json b/keyboards/kb_elmo/qez/keyboard.json
index ab1f823043..fa53745b31 100644
--- a/keyboards/kb_elmo/qez/keyboard.json
+++ b/keyboards/kb_elmo/qez/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "QEZ",
"manufacturer": "kb_elmo",
- "url": "",
"maintainer": "kb-elmo<[email protected]>",
"usb": {
"vid": "0xA68C",
diff --git a/keyboards/kb_elmo/vertex/keyboard.json b/keyboards/kb_elmo/vertex/keyboard.json
index 5585386296..c40e87ad62 100644
--- a/keyboards/kb_elmo/vertex/keyboard.json
+++ b/keyboards/kb_elmo/vertex/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Vertex",
"manufacturer": "kb_elmo",
- "url": "",
"maintainer": "kb-elmo",
"usb": {
"vid": "0xA68C",
diff --git a/keyboards/kbdfans/bella/rgb/keyboard.json b/keyboards/kbdfans/bella/rgb/keyboard.json
index 50310e3667..2ca18d2851 100644
--- a/keyboards/kbdfans/bella/rgb/keyboard.json
+++ b/keyboards/kbdfans/bella/rgb/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Bella RGB ANSI",
"manufacturer": "KBDfans",
- "url": "",
"maintainer": "moyi4681",
"usb": {
"vid": "0x4B42",
diff --git a/keyboards/kbdfans/bella/rgb_iso/keyboard.json b/keyboards/kbdfans/bella/rgb_iso/keyboard.json
index 20b00283ed..c7dd6423b5 100644
--- a/keyboards/kbdfans/bella/rgb_iso/keyboard.json
+++ b/keyboards/kbdfans/bella/rgb_iso/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Bella RGB ISO",
"manufacturer": "KBDfans",
- "url": "",
"maintainer": "moyi4681",
"usb": {
"vid": "0x4B42",
diff --git a/keyboards/kbdfans/bella/soldered/keyboard.json b/keyboards/kbdfans/bella/soldered/keyboard.json
index aa5d915980..e99a4fb224 100644
--- a/keyboards/kbdfans/bella/soldered/keyboard.json
+++ b/keyboards/kbdfans/bella/soldered/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Bella Soldered",
"manufacturer": "KBDfans",
- "url": "",
"maintainer": "kbdfans",
"usb": {
"vid": "0x4B42",
diff --git a/keyboards/kbdfans/boop65/rgb/keyboard.json b/keyboards/kbdfans/boop65/rgb/keyboard.json
index 49fa78b315..6fbd28816b 100644
--- a/keyboards/kbdfans/boop65/rgb/keyboard.json
+++ b/keyboards/kbdfans/boop65/rgb/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Boop65 RGB",
"manufacturer": "KBDfans",
- "url": "",
"maintainer": "moyi4681",
"usb": {
"vid": "0x4B42",
diff --git a/keyboards/kbdfans/bounce/75/soldered/keyboard.json b/keyboards/kbdfans/bounce/75/soldered/keyboard.json
index e1610872e1..73c6d63d3a 100644
--- a/keyboards/kbdfans/bounce/75/soldered/keyboard.json
+++ b/keyboards/kbdfans/bounce/75/soldered/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Bounce75 Soldered",
"manufacturer": "KBDfans",
- "url": "",
"maintainer": "moyi4681",
"usb": {
"vid": "0x4B42",
diff --git a/keyboards/kbdfans/jm60/keyboard.json b/keyboards/kbdfans/jm60/keyboard.json
index ffa205daa0..6bc60c308c 100644
--- a/keyboards/kbdfans/jm60/keyboard.json
+++ b/keyboards/kbdfans/jm60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "JM60",
"manufacturer": "JMWS",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/kbdfans/kbd4x/keyboard.json b/keyboards/kbdfans/kbd4x/keyboard.json
index 77abf71f28..1f3d5ce25e 100644
--- a/keyboards/kbdfans/kbd4x/keyboard.json
+++ b/keyboards/kbdfans/kbd4x/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "KBD4x",
"manufacturer": "KBDfans",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/kbdfans/kbd66/keyboard.json b/keyboards/kbdfans/kbd66/keyboard.json
index 2b614442a0..57cbab49fd 100644
--- a/keyboards/kbdfans/kbd66/keyboard.json
+++ b/keyboards/kbdfans/kbd66/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "KBD66",
"manufacturer": "KBDfans",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/kbdfans/kbd67/hotswap/keyboard.json b/keyboards/kbdfans/kbd67/hotswap/keyboard.json
index fb0c165d14..4620d06a16 100644
--- a/keyboards/kbdfans/kbd67/hotswap/keyboard.json
+++ b/keyboards/kbdfans/kbd67/hotswap/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "KBD67 Hotswap",
"manufacturer": "KBDFans",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4B42",
diff --git a/keyboards/kbdfans/kbd67/mkii_soldered/keyboard.json b/keyboards/kbdfans/kbd67/mkii_soldered/keyboard.json
index 397f525f7a..f4bc2437d9 100644
--- a/keyboards/kbdfans/kbd67/mkii_soldered/keyboard.json
+++ b/keyboards/kbdfans/kbd67/mkii_soldered/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "KBD67-MKII Soldered",
"manufacturer": "KBDfans",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xA103",
diff --git a/keyboards/kbdfans/kbd67/mkiirgb/info.json b/keyboards/kbdfans/kbd67/mkiirgb/info.json
index 683503b4ee..1371370357 100644
--- a/keyboards/kbdfans/kbd67/mkiirgb/info.json
+++ b/keyboards/kbdfans/kbd67/mkiirgb/info.json
@@ -1,6 +1,5 @@
{
"manufacturer": "KBDfans",
- "url": "",
"maintainer": "moyi4681",
"usb": {
"vid": "0x4B42"
diff --git a/keyboards/kbdfans/kbd67/mkiirgb_iso/keyboard.json b/keyboards/kbdfans/kbd67/mkiirgb_iso/keyboard.json
index b8e9fdaf1c..5000f8fb0a 100644
--- a/keyboards/kbdfans/kbd67/mkiirgb_iso/keyboard.json
+++ b/keyboards/kbdfans/kbd67/mkiirgb_iso/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "KBD67MKIIRGB ISO",
"manufacturer": "KBDfans",
- "url": "",
"maintainer": "moyi4681",
"usb": {
"vid": "0x4B42",
diff --git a/keyboards/kbdfans/kbd67/rev1/keyboard.json b/keyboards/kbdfans/kbd67/rev1/keyboard.json
index ba91317906..04f88cecd2 100644
--- a/keyboards/kbdfans/kbd67/rev1/keyboard.json
+++ b/keyboards/kbdfans/kbd67/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "KBD67 Rev1",
"manufacturer": "KBDfans",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4B42",
diff --git a/keyboards/kbdfans/kbd67/rev2/keyboard.json b/keyboards/kbdfans/kbd67/rev2/keyboard.json
index 1e9d87ba0d..1190d3bd8a 100644
--- a/keyboards/kbdfans/kbd67/rev2/keyboard.json
+++ b/keyboards/kbdfans/kbd67/rev2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "KBD67 Rev2",
"manufacturer": "KBDfans",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4B42",
diff --git a/keyboards/kbdfans/kbd6x/keyboard.json b/keyboards/kbdfans/kbd6x/keyboard.json
index c2b9f28b63..e603cb64ff 100644
--- a/keyboards/kbdfans/kbd6x/keyboard.json
+++ b/keyboards/kbdfans/kbd6x/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "KBD6X",
"manufacturer": "KBDfans",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4B42",
diff --git a/keyboards/kbdfans/kbd75/rev1/keyboard.json b/keyboards/kbdfans/kbd75/rev1/keyboard.json
index 01429c8ebb..900e5dbd78 100644
--- a/keyboards/kbdfans/kbd75/rev1/keyboard.json
+++ b/keyboards/kbdfans/kbd75/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "KBD75 rev1",
"manufacturer": "KBDfans",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4B42",
diff --git a/keyboards/kbdfans/kbd75/rev2/keyboard.json b/keyboards/kbdfans/kbd75/rev2/keyboard.json
index 322eba661a..e0f862d40f 100644
--- a/keyboards/kbdfans/kbd75/rev2/keyboard.json
+++ b/keyboards/kbdfans/kbd75/rev2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "KBD75 rev2",
"manufacturer": "KBDfans",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4B42",
diff --git a/keyboards/kbdfans/kbd75rgb/keyboard.json b/keyboards/kbdfans/kbd75rgb/keyboard.json
index 9a5f7a6908..b30fb22126 100644
--- a/keyboards/kbdfans/kbd75rgb/keyboard.json
+++ b/keyboards/kbdfans/kbd75rgb/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "KBD75RGB",
"manufacturer": "KBDfans",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4B42",
diff --git a/keyboards/kbdfans/kbd8x/keyboard.json b/keyboards/kbdfans/kbd8x/keyboard.json
index fe0106165d..b8d34f8277 100644
--- a/keyboards/kbdfans/kbd8x/keyboard.json
+++ b/keyboards/kbdfans/kbd8x/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "KBD8X",
"manufacturer": "KBDfans",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/kbdfans/kbdmini/keyboard.json b/keyboards/kbdfans/kbdmini/keyboard.json
index 8f2dade705..2f47097309 100644
--- a/keyboards/kbdfans/kbdmini/keyboard.json
+++ b/keyboards/kbdfans/kbdmini/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "KBDMINI",
"manufacturer": "DZTECH",
- "url": "",
"maintainer": "KBDFans",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/kbdfans/maja/keyboard.json b/keyboards/kbdfans/maja/keyboard.json
index c307f78637..a1ba96af51 100644
--- a/keyboards/kbdfans/maja/keyboard.json
+++ b/keyboards/kbdfans/maja/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Maja",
"manufacturer": "KBDFans",
- "url": "",
"maintainer": "DZTECH",
"usb": {
"vid": "0x4B42",
diff --git a/keyboards/kbdfans/maja_soldered/keyboard.json b/keyboards/kbdfans/maja_soldered/keyboard.json
index f182ef97d1..7879fd9962 100644
--- a/keyboards/kbdfans/maja_soldered/keyboard.json
+++ b/keyboards/kbdfans/maja_soldered/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Maja Soldered",
"manufacturer": "KBDFans",
- "url": "",
"maintainer": "DZTECH",
"usb": {
"vid": "0x4B42",
diff --git a/keyboards/kbdfans/niu_mini/keyboard.json b/keyboards/kbdfans/niu_mini/keyboard.json
index 4c7d6f6d50..766d63d366 100644
--- a/keyboards/kbdfans/niu_mini/keyboard.json
+++ b/keyboards/kbdfans/niu_mini/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "NIU Mini",
"manufacturer": "KBDFans",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x6E6D",
diff --git a/keyboards/kbdfans/odin/rgb/keyboard.json b/keyboards/kbdfans/odin/rgb/keyboard.json
index 1777e2cdc0..f1a0e7b8e8 100644
--- a/keyboards/kbdfans/odin/rgb/keyboard.json
+++ b/keyboards/kbdfans/odin/rgb/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Odin RGB",
"manufacturer": "KBDFans",
- "url": "",
"maintainer": "moyi4681",
"usb": {
"vid": "0x4B42",
diff --git a/keyboards/kbdfans/odin/soldered/keyboard.json b/keyboards/kbdfans/odin/soldered/keyboard.json
index 42a8a0e056..4832e90096 100644
--- a/keyboards/kbdfans/odin/soldered/keyboard.json
+++ b/keyboards/kbdfans/odin/soldered/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Odin Soldered",
"manufacturer": "KBDFans",
- "url": "",
"maintainer": "moyi4681",
"usb": {
"vid": "0x4B42",
diff --git a/keyboards/kbdfans/odin/v2/keyboard.json b/keyboards/kbdfans/odin/v2/keyboard.json
index 595a5596fe..4ac47226bc 100644
--- a/keyboards/kbdfans/odin/v2/keyboard.json
+++ b/keyboards/kbdfans/odin/v2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Odin V2",
"manufacturer": "KBDFans",
- "url": "",
"maintainer": "lexbrugman",
"usb": {
"vid": "0x4B42",
diff --git a/keyboards/kbdfans/odinmini/keyboard.json b/keyboards/kbdfans/odinmini/keyboard.json
index a9cb1a798f..34002e83d8 100644
--- a/keyboards/kbdfans/odinmini/keyboard.json
+++ b/keyboards/kbdfans/odinmini/keyboard.json
@@ -35,7 +35,6 @@
"twinkle": true
},
"brightness_steps": 8,
- "hue_steps": 8,
"led_count": 4,
"max_brightness": 180,
"saturation_steps": 8,
diff --git a/keyboards/kbdfans/phaseone/keyboard.json b/keyboards/kbdfans/phaseone/keyboard.json
index fcc6bdc7b3..ff6b3fe6d1 100644
--- a/keyboards/kbdfans/phaseone/keyboard.json
+++ b/keyboards/kbdfans/phaseone/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Phase One",
"manufacturer": "KBDFans",
- "url": "",
"maintainer": "moyi4681",
"usb": {
"vid": "0x4B42",
diff --git a/keyboards/kbdfans/tiger80/keyboard.json b/keyboards/kbdfans/tiger80/keyboard.json
index 9761cb892d..ccef4de81a 100644
--- a/keyboards/kbdfans/tiger80/keyboard.json
+++ b/keyboards/kbdfans/tiger80/keyboard.json
@@ -48,7 +48,6 @@
"ws2812": {
"pin": "B3"
},
- "url": "",
"usb": {
"device_version": "0.0.1",
"pid": "0x0011",
diff --git a/keyboards/kc60/keyboard.json b/keyboards/kc60/keyboard.json
index fc21477163..f7ee4e785b 100644
--- a/keyboards/kc60/keyboard.json
+++ b/keyboards/kc60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "KC60",
"manufacturer": "NPKC",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x530A",
diff --git a/keyboards/kc60se/keyboard.json b/keyboards/kc60se/keyboard.json
index c8bdf24a4b..c7c18b4a76 100644
--- a/keyboards/kc60se/keyboard.json
+++ b/keyboards/kc60se/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "kc60se",
"manufacturer": "Unknown",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/keebformom/keyboard.json b/keyboards/keebformom/keyboard.json
index b1ffee0f3d..7fbaa5737f 100644
--- a/keyboards/keebformom/keyboard.json
+++ b/keyboards/keebformom/keyboard.json
@@ -1,6 +1,5 @@
{
"keyboard_name": "Keeb For Mom",
- "url": "",
"maintainer": "qmk",
"manufacturer": "nendezkombet/sandipratama",
"usb": {
diff --git a/keyboards/keebio/dilly/keyboard.json b/keyboards/keebio/dilly/keyboard.json
index 83bf1eac9d..223228a8e0 100644
--- a/keyboards/keebio/dilly/keyboard.json
+++ b/keyboards/keebio/dilly/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Dilly",
"manufacturer": "Keebio",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xCB10",
diff --git a/keyboards/keebmonkey/kbmg68/keyboard.json b/keyboards/keebmonkey/kbmg68/keyboard.json
index 5cb0fa0e45..110da77d37 100644
--- a/keyboards/keebmonkey/kbmg68/keyboard.json
+++ b/keyboards/keebmonkey/kbmg68/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "kbmg68",
"manufacturer": "KeebMonkey",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/keebsforall/freebird60/keyboard.json b/keyboards/keebsforall/freebird60/keyboard.json
index 3c4df7472a..813275857d 100644
--- a/keyboards/keebsforall/freebird60/keyboard.json
+++ b/keyboards/keebsforall/freebird60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Freebird60",
"manufacturer": "KnoblesseOblige",
- "url": "",
"maintainer": "KnoblesseOblige",
"usb": {
"vid": "0xADAD",
diff --git a/keyboards/keebsforall/freebird75/keyboard.json b/keyboards/keebsforall/freebird75/keyboard.json
index 1e92ad7063..2bd9579f60 100644
--- a/keyboards/keebsforall/freebird75/keyboard.json
+++ b/keyboards/keebsforall/freebird75/keyboard.json
@@ -17,7 +17,6 @@
"rows": ["C7", "C6", "B6", "B5", "B4", "D7"]
},
"processor": "atmega32u4",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x7575",
diff --git a/keyboards/keebwerk/mega/ansi/keyboard.json b/keyboards/keebwerk/mega/ansi/keyboard.json
index e5a12585df..01f158da9a 100755
--- a/keyboards/keebwerk/mega/ansi/keyboard.json
+++ b/keyboards/keebwerk/mega/ansi/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Keebwerk Mega ANSI",
"manufacturer": "Yiancar-Designs",
- "url": "",
"maintainer": "Yiancar",
"usb": {
"vid": "0x8968",
diff --git a/keyboards/keebwerk/nano_slider/keyboard.json b/keyboards/keebwerk/nano_slider/keyboard.json
index 64f59d6c10..e44a2feb3e 100644
--- a/keyboards/keebwerk/nano_slider/keyboard.json
+++ b/keyboards/keebwerk/nano_slider/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "nano. slider",
"manufacturer": "keebwerk.",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x03A8",
diff --git a/keyboards/keebzdotnet/fme/keyboard.json b/keyboards/keebzdotnet/fme/keyboard.json
index d7b9ebca0c..5d6a908a81 100644
--- a/keyboards/keebzdotnet/fme/keyboard.json
+++ b/keyboards/keebzdotnet/fme/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "FMe",
"manufacturer": "keebzdotnet",
- "url": "",
"maintainer": "keebzdotnet",
"usb": {
"vid": "0x4B5A",
diff --git a/keyboards/kelwin/utopia88/keyboard.json b/keyboards/kelwin/utopia88/keyboard.json
index 406642d41c..fb4640e2bb 100644
--- a/keyboards/kelwin/utopia88/keyboard.json
+++ b/keyboards/kelwin/utopia88/keyboard.json
@@ -23,7 +23,6 @@
"rows": ["B7", "D5", "D3", "D2", "D1", "D0"]
},
"processor": "atmega32u4",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0001",
diff --git a/keyboards/keybage/radpad/keyboard.json b/keyboards/keybage/radpad/keyboard.json
index 84407a9310..6fa5163bee 100644
--- a/keyboards/keybage/radpad/keyboard.json
+++ b/keyboards/keybage/radpad/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "RadPad",
"manufacturer": "Keybage",
- "url": "",
"maintainer": "Brandon Schlack",
"usb": {
"vid": "0x4253",
diff --git a/keyboards/keybee/keybee65/keyboard.json b/keyboards/keybee/keybee65/keyboard.json
index 7952378b15..56c5d33175 100644
--- a/keyboards/keybee/keybee65/keyboard.json
+++ b/keyboards/keybee/keybee65/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "KeyBee65",
"manufacturer": "KeyBee",
- "url": "",
"maintainer": "ToastyStoemp",
"usb": {
"vid": "0x6265",
diff --git a/keyboards/keyboardio/atreus/keyboard.json b/keyboards/keyboardio/atreus/keyboard.json
index 5185d9ee28..7fee6ec54d 100644
--- a/keyboards/keyboardio/atreus/keyboard.json
+++ b/keyboards/keyboardio/atreus/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Atreus",
"manufacturer": "Keyboardio",
- "url": "",
"maintainer": "keyboardio",
"usb": {
"vid": "0x1209",
diff --git a/keyboards/keycapsss/3w6_2040/keyboard.json b/keyboards/keycapsss/3w6_2040/keyboard.json
index f29b3753c6..e481b98894 100644
--- a/keyboards/keycapsss/3w6_2040/keyboard.json
+++ b/keyboards/keycapsss/3w6_2040/keyboard.json
@@ -42,7 +42,6 @@
"sat": 232,
"speed": 2
},
- "hue_steps": 8,
"led_count": 2,
"max_brightness": 100,
"saturation_steps": 8,
diff --git a/keyboards/keychron/c1_pro_v2/board.h b/keyboards/keychron/c1_pro_v2/board.h
new file mode 100644
index 0000000000..e6cf0b2856
--- /dev/null
+++ b/keyboards/keychron/c1_pro_v2/board.h
@@ -0,0 +1,8 @@
+// Copyright 2025 @ Keychron (https://www.keychron.com)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#include_next <board.h>
+
+#undef STM32_HSECLK
+#define STM32_HSECLK 16000000U
diff --git a/keyboards/keychron/c1_pro_v2/mcuconf.h b/keyboards/keychron/c1_pro_v2/mcuconf.h
index ca470fb5b3..95966a32ce 100644
--- a/keyboards/keychron/c1_pro_v2/mcuconf.h
+++ b/keyboards/keychron/c1_pro_v2/mcuconf.h
@@ -18,9 +18,6 @@
#include_next <mcuconf.h>
-#undef STM32_HSECLK
-#define STM32_HSECLK 16000000U
-
#undef STM32_PLLM_VALUE
#define STM32_PLLM_VALUE 8
diff --git a/keyboards/keychron/c2_pro_v2/board.h b/keyboards/keychron/c2_pro_v2/board.h
new file mode 100644
index 0000000000..e6cf0b2856
--- /dev/null
+++ b/keyboards/keychron/c2_pro_v2/board.h
@@ -0,0 +1,8 @@
+// Copyright 2025 @ Keychron (https://www.keychron.com)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#include_next <board.h>
+
+#undef STM32_HSECLK
+#define STM32_HSECLK 16000000U
diff --git a/keyboards/keychron/c2_pro_v2/mcuconf.h b/keyboards/keychron/c2_pro_v2/mcuconf.h
index ca470fb5b3..95966a32ce 100644
--- a/keyboards/keychron/c2_pro_v2/mcuconf.h
+++ b/keyboards/keychron/c2_pro_v2/mcuconf.h
@@ -18,9 +18,6 @@
#include_next <mcuconf.h>
-#undef STM32_HSECLK
-#define STM32_HSECLK 16000000U
-
#undef STM32_PLLM_VALUE
#define STM32_PLLM_VALUE 8
diff --git a/keyboards/keychron/c3_pro/board.h b/keyboards/keychron/c3_pro/board.h
new file mode 100644
index 0000000000..60d25b93b8
--- /dev/null
+++ b/keyboards/keychron/c3_pro/board.h
@@ -0,0 +1,8 @@
+// Copyright 2024 @ Keychron (https://www.keychron.com)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#include_next <board.h>
+
+#undef STM32_HSECLK
+#define STM32_HSECLK 16000000U
diff --git a/keyboards/keychron/c3_pro/mcuconf.h b/keyboards/keychron/c3_pro/mcuconf.h
index b2b81df855..ad75926a14 100644
--- a/keyboards/keychron/c3_pro/mcuconf.h
+++ b/keyboards/keychron/c3_pro/mcuconf.h
@@ -18,9 +18,6 @@
#include_next <mcuconf.h>
-#undef STM32_HSECLK
-#define STM32_HSECLK 16000000U
-
#undef STM32_PLLM_VALUE
#define STM32_PLLM_VALUE 8
diff --git a/keyboards/keycult/keycult1800/keyboard.json b/keyboards/keycult/keycult1800/keyboard.json
index a50b77d104..8ed6e6e2fa 100644
--- a/keyboards/keycult/keycult1800/keyboard.json
+++ b/keyboards/keycult/keycult1800/keyboard.json
@@ -96,7 +96,8 @@
{ "matrix": [3, 15], "x": 16.5, "y": 3.5 },
{ "matrix": [3, 16], "x": 17.5, "y": 3.5 },
{ "matrix": [3, 17], "x": 18.5, "y": 3.5 },
- { "matrix": [4, 0], "w": 2.25, "x": 0, "y": 4.5 },
+ { "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4.5 },
+ { "matrix": [4, 1], "x": 1.25, "y": 4.5 },
{ "matrix": [4, 2], "x": 2.25, "y": 4.5 },
{ "matrix": [4, 3], "x": 3.25, "y": 4.5 },
{ "matrix": [4, 4], "x": 4.25, "y": 4.5 },
diff --git a/keyboards/keycult/keycult1800/keymaps/default/keymap.c b/keyboards/keycult/keycult1800/keymaps/default/keymap.c
index e596ff2db0..79570b73a2 100644
--- a/keyboards/keycult/keycult1800/keymaps/default/keymap.c
+++ b/keyboards/keycult/keycult1800/keymaps/default/keymap.c
@@ -21,7 +21,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_PPLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT),
[1] = LAYOUT( /* FN */
@@ -29,7 +29,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
};
diff --git a/keyboards/keyhive/honeycomb/keyboard.json b/keyboards/keyhive/honeycomb/keyboard.json
index 768f08275d..69907fccc1 100644
--- a/keyboards/keyhive/honeycomb/keyboard.json
+++ b/keyboards/keyhive/honeycomb/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Honeycomb",
"manufacturer": "Keyhive",
- "url": "",
"maintainer": "filoxo",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/keyhive/lattice60/keyboard.json b/keyboards/keyhive/lattice60/keyboard.json
index b805a73357..fce9453e34 100644
--- a/keyboards/keyhive/lattice60/keyboard.json
+++ b/keyboards/keyhive/lattice60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "LATTICE60",
"manufacturer": "emdarcher",
- "url": "",
"maintainer": "emdarcher",
"usb": {
"vid": "0x16C0",
diff --git a/keyboards/keyhive/navi10/info.json b/keyboards/keyhive/navi10/info.json
index e5df0c68e1..25c9f14f27 100644
--- a/keyboards/keyhive/navi10/info.json
+++ b/keyboards/keyhive/navi10/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Navi10",
"manufacturer": "emdarcher",
- "url": "",
"maintainer": "emdarcher",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/keyhive/southpole/keyboard.json b/keyboards/keyhive/southpole/keyboard.json
index 7136675881..38cb349ef9 100644
--- a/keyboards/keyhive/southpole/keyboard.json
+++ b/keyboards/keyhive/southpole/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "southpole",
"manufacturer": "u/waxpoetic",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/keyhive/ut472/keyboard.json b/keyboards/keyhive/ut472/keyboard.json
index 828058a955..4fc67962da 100644
--- a/keyboards/keyhive/ut472/keyboard.json
+++ b/keyboards/keyhive/ut472/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "UT47.2",
"manufacturer": "Keyhive",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xA103",
diff --git a/keyboards/keyprez/bison/keyboard.json b/keyboards/keyprez/bison/keyboard.json
index 5fd2de1ff5..1dfe883880 100644
--- a/keyboards/keyprez/bison/keyboard.json
+++ b/keyboards/keyprez/bison/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "bison",
"manufacturer": "csandven",
- "url": "",
"maintainer": "Christian Sandven",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/keyprez/corgi/keyboard.json b/keyboards/keyprez/corgi/keyboard.json
index 8e664de03d..4dc9af92a2 100644
--- a/keyboards/keyprez/corgi/keyboard.json
+++ b/keyboards/keyprez/corgi/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "corgi",
"manufacturer": "Christian Sandven",
- "url": "",
"maintainer": "Christian Sandven",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/keyprez/rhino/keyboard.json b/keyboards/keyprez/rhino/keyboard.json
index 75854f6f99..c00219c119 100644
--- a/keyboards/keyprez/rhino/keyboard.json
+++ b/keyboards/keyprez/rhino/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "rhino",
"manufacturer": "Christian Sandven",
- "url": "",
"maintainer": "Christian Sandven",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/keyprez/unicorn/keyboard.json b/keyboards/keyprez/unicorn/keyboard.json
index 7fa855e240..9b10351081 100644
--- a/keyboards/keyprez/unicorn/keyboard.json
+++ b/keyboards/keyprez/unicorn/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Unicorn",
"manufacturer": "Keyprez",
- "url": "",
"maintainer": "Keyprez",
"usb": {
"vid": "0x6B7A",
diff --git a/keyboards/keysofkings/twokey/keyboard.json b/keyboards/keysofkings/twokey/keyboard.json
index 2b75891329..3163a30e6b 100644
--- a/keyboards/keysofkings/twokey/keyboard.json
+++ b/keyboards/keysofkings/twokey/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Twokey",
"manufacturer": "Keys of Kings",
- "url": "",
"maintainer": "Keys of Kings",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/keyspensory/kp60/keyboard.json b/keyboards/keyspensory/kp60/keyboard.json
index 1172e14d45..8672cf10e8 100644
--- a/keyboards/keyspensory/kp60/keyboard.json
+++ b/keyboards/keyspensory/kp60/keyboard.json
@@ -26,7 +26,6 @@
},
"rgblight": {
"led_count": 8,
- "hue_steps": 8,
"saturation_steps": 8,
"brightness_steps": 8,
"animations": {
diff --git a/keyboards/keyten/aperture/keyboard.json b/keyboards/keyten/aperture/keyboard.json
index 7648e46cc0..5ed3ecfb8e 100644
--- a/keyboards/keyten/aperture/keyboard.json
+++ b/keyboards/keyten/aperture/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Aperture",
"manufacturer": "Bizunow",
- "url": "",
"maintainer": "key10iq",
"usb": {
"vid": "0xEB69",
diff --git a/keyboards/keyten/kt3700/keyboard.json b/keyboards/keyten/kt3700/keyboard.json
index 9f89ee1453..83df8285d0 100644
--- a/keyboards/keyten/kt3700/keyboard.json
+++ b/keyboards/keyten/kt3700/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "kt3700",
"manufacturer": "keyten",
- "url": "",
"maintainer": "key10iq",
"usb": {
"vid": "0xEB69",
diff --git a/keyboards/keyten/kt60_m/keyboard.json b/keyboards/keyten/kt60_m/keyboard.json
index f72deeebbd..5426bff85f 100644
--- a/keyboards/keyten/kt60_m/keyboard.json
+++ b/keyboards/keyten/kt60_m/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "kt60-M",
"manufacturer": "keyten",
- "url": "",
"maintainer": "key10iq",
"usb": {
"vid": "0xEB69",
diff --git a/keyboards/keyten/kt60hs_t/info.json b/keyboards/keyten/kt60hs_t/info.json
new file mode 100644
index 0000000000..97b4f7d222
--- /dev/null
+++ b/keyboards/keyten/kt60hs_t/info.json
@@ -0,0 +1,14 @@
+{
+ "manufacturer": "keyten",
+ "keyboard_name": "kt60HS-T",
+ "maintainer": "key10iq",
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "usb": {
+ "vid": "0xEB69"
+ }
+}
diff --git a/keyboards/keyten/kt60hs_t/readme.md b/keyboards/keyten/kt60hs_t/readme.md
index 75ccbc3b69..eb02f6bb8f 100644
--- a/keyboards/keyten/kt60hs_t/readme.md
+++ b/keyboards/keyten/kt60hs_t/readme.md
@@ -2,30 +2,15 @@
60% MX Hot-Swap Tsangan PCB
-![kt60HS-T image](https://i.imgur.com/Iqrf6tHh.jpg)
-
-* Keyboard Maintainer: [keyten](https://github.com/key10iq)
-* Hardware Supported: keyten kt60HS-T
-* Hardware Availability: private GB
+![kt60HS-T image](https://i.imgur.com/vM32aoX.jpeg)
Supports:
1. Split Backspace
2. Stepped Caps Lock
-Make example for this keyboard (after setting up your build environment):
-
- make keyten/kt60hs_t:default
-
-Flashing example for this keyboard:
-
- make keyten/kt60hs_t:default:flash
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
-
-## Bootloader
-
-Enter the bootloader in 3 ways:
+There are two versions of the PCB available.
-* Bootmagic reset: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
-* Keycode in layout: Press the key mapped to `QK_BOOT` if it is available
-* Physical reset button: Hold the button on the back of the PCB
+|Version| Features |
+|-------|-------------------------------------------|
+|v1 |Blue/Purple PCB / ARM STM32F401 controller |
+|v2 |Purple PCB / ARM STM32F072 controller |
diff --git a/keyboards/keyten/kt60hs_t/keyboard.json b/keyboards/keyten/kt60hs_t/v1/keyboard.json
index 63a755d698..b5b90304b2 100644
--- a/keyboards/keyten/kt60hs_t/keyboard.json
+++ b/keyboards/keyten/kt60hs_t/v1/keyboard.json
@@ -1,17 +1,6 @@
{
- "manufacturer": "keyten",
- "keyboard_name": "kt60HS-T",
- "maintainer": "key10iq",
"bootloader": "stm32-dfu",
"diode_direction": "COL2ROW",
- "features": {
- "bootmagic": true,
- "command": false,
- "console": false,
- "extrakey": true,
- "mousekey": true,
- "nkro": true
- },
"matrix_pins": {
"cols": ["A3", "A4", "A5", "A6", "A7", "B9", "B8", "B7", "B6", "B5", "B4", "B3", "A15", "A14"],
"rows": ["B15", "B14", "B12", "B13", "B0"]
@@ -19,8 +8,7 @@
"processor": "STM32F401",
"usb": {
"device_version": "0.0.1",
- "pid": "0x6004",
- "vid": "0xEB69"
+ "pid": "0x6004"
},
"community_layouts": [
"60_ansi_wkl_split_bs_rshift",
@@ -28,7 +16,8 @@
"60_ansi_tsangan_split_bs_rshift"
],
"layout_aliases": {
- "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ "LAYOUT_60_tsangan_hhkb": "LAYOUT_60_ansi_tsangan_split_bs_rshift",
+ "LAYOUT_all": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
},
"layouts": {
"LAYOUT_60_ansi_wkl_split_bs_rshift": {
@@ -224,6 +213,71 @@
{"matrix": [4, 11], "x": 12.5, "y": 4},
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
+ },
+ "LAYOUT_60_ansi_tsangan_split_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [2, 13], "x": 13, "y": 0, "w": 2},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 1], "x": 2.25, "y": 3},
+ {"matrix": [3, 2], "x": 3.25, "y": 3},
+ {"matrix": [3, 3], "x": 4.25, "y": 3},
+ {"matrix": [3, 4], "x": 5.25, "y": 3},
+ {"matrix": [3, 5], "x": 6.25, "y": 3},
+ {"matrix": [3, 6], "x": 7.25, "y": 3},
+ {"matrix": [3, 7], "x": 8.25, "y": 3},
+ {"matrix": [3, 8], "x": 9.25, "y": 3},
+ {"matrix": [3, 9], "x": 10.25, "y": 3},
+ {"matrix": [3, 10], "x": 11.25, "y": 3},
+ {"matrix": [4, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 11], "x": 12.5, "y": 4},
+ {"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
}
}
}
diff --git a/keyboards/keyten/kt60hs_t/v1/readme.md b/keyboards/keyten/kt60hs_t/v1/readme.md
new file mode 100644
index 0000000000..2f31dbf4bf
--- /dev/null
+++ b/keyboards/keyten/kt60hs_t/v1/readme.md
@@ -0,0 +1,29 @@
+# keyten kt60HS-T V1
+
+60% MX Hot-Swap Tsangan PCB
+
+![kt60HS-T image](https://i.imgur.com/tOej7ND.jpeg)
+
+**Note: This firmware only supports the PCB version with STM32F401 controller**
+
+* Keyboard Maintainer: [keyten](https://github.com/key10iq)
+* Hardware Supported: keyten kt60HS-T
+* Hardware Availability: private GB
+
+Make example for this keyboard (after setting up your build environment):
+
+ make keyten/kt60hs_t/v1:default
+
+Flashing example for this keyboard:
+
+ make keyten/kt60hs_t/v1:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* Bootmagic reset: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* Keycode in layout: Press the key mapped to `QK_BOOT` if it is available
+* Physical reset button: Hold the button on the back of the PCB
diff --git a/keyboards/keyten/kt60hs_t/v2/keyboard.json b/keyboards/keyten/kt60hs_t/v2/keyboard.json
new file mode 100644
index 0000000000..728bd90fe8
--- /dev/null
+++ b/keyboards/keyten/kt60hs_t/v2/keyboard.json
@@ -0,0 +1,282 @@
+{
+ "bootloader": "stm32-dfu",
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": ["A3", "A4", "A5", "A6", "A7", "B9", "B8", "B7", "B6", "B5", "B4", "B3", "A15", "A14"],
+ "rows": ["B15", "B14", "B12", "B13", "B0"]
+ },
+ "processor": "STM32F072",
+ "usb": {
+ "device_version": "2.0.0",
+ "pid": "0x6007"
+ },
+ "community_layouts": [
+ "60_ansi_wkl_split_bs_rshift",
+ "60_hhkb",
+ "60_ansi_tsangan_split_bs_rshift"
+ ],
+ "layout_aliases": {
+ "LAYOUT_all": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
+ },
+ "layouts": {
+ "LAYOUT_60_ansi_wkl_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [2, 13], "x": 14, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 1], "x": 2.25, "y": 3},
+ {"matrix": [3, 2], "x": 3.25, "y": 3},
+ {"matrix": [3, 3], "x": 4.25, "y": 3},
+ {"matrix": [3, 4], "x": 5.25, "y": 3},
+ {"matrix": [3, 5], "x": 6.25, "y": 3},
+ {"matrix": [3, 6], "x": 7.25, "y": 3},
+ {"matrix": [3, 7], "x": 8.25, "y": 3},
+ {"matrix": [3, 8], "x": 9.25, "y": 3},
+ {"matrix": [3, 9], "x": 10.25, "y": 3},
+ {"matrix": [3, 10], "x": 11.25, "y": 3},
+ {"matrix": [4, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_hhkb": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [2, 13], "x": 14, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 1], "x": 2.25, "y": 3},
+ {"matrix": [3, 2], "x": 3.25, "y": 3},
+ {"matrix": [3, 3], "x": 4.25, "y": 3},
+ {"matrix": [3, 4], "x": 5.25, "y": 3},
+ {"matrix": [3, 5], "x": 6.25, "y": 3},
+ {"matrix": [3, 6], "x": 7.25, "y": 3},
+ {"matrix": [3, 7], "x": 8.25, "y": 3},
+ {"matrix": [3, 8], "x": 9.25, "y": 3},
+ {"matrix": [3, 9], "x": 10.25, "y": 3},
+ {"matrix": [3, 10], "x": 11.25, "y": 3},
+ {"matrix": [4, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 11], "x": 12.5, "y": 4}
+ ]
+ },
+ "LAYOUT_60_ansi_tsangan_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [2, 13], "x": 14, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 1], "x": 2.25, "y": 3},
+ {"matrix": [3, 2], "x": 3.25, "y": 3},
+ {"matrix": [3, 3], "x": 4.25, "y": 3},
+ {"matrix": [3, 4], "x": 5.25, "y": 3},
+ {"matrix": [3, 5], "x": 6.25, "y": 3},
+ {"matrix": [3, 6], "x": 7.25, "y": 3},
+ {"matrix": [3, 7], "x": 8.25, "y": 3},
+ {"matrix": [3, 8], "x": 9.25, "y": 3},
+ {"matrix": [3, 9], "x": 10.25, "y": 3},
+ {"matrix": [3, 10], "x": 11.25, "y": 3},
+ {"matrix": [4, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 11], "x": 12.5, "y": 4},
+ {"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_ansi_tsangan_split_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [2, 13], "x": 13, "y": 0, "w": 2},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 1], "x": 2.25, "y": 3},
+ {"matrix": [3, 2], "x": 3.25, "y": 3},
+ {"matrix": [3, 3], "x": 4.25, "y": 3},
+ {"matrix": [3, 4], "x": 5.25, "y": 3},
+ {"matrix": [3, 5], "x": 6.25, "y": 3},
+ {"matrix": [3, 6], "x": 7.25, "y": 3},
+ {"matrix": [3, 7], "x": 8.25, "y": 3},
+ {"matrix": [3, 8], "x": 9.25, "y": 3},
+ {"matrix": [3, 9], "x": 10.25, "y": 3},
+ {"matrix": [3, 10], "x": 11.25, "y": 3},
+ {"matrix": [4, 12], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 11], "x": 12.5, "y": 4},
+ {"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/keyten/kt60hs_t/v2/readme.md b/keyboards/keyten/kt60hs_t/v2/readme.md
new file mode 100644
index 0000000000..db2b8afccf
--- /dev/null
+++ b/keyboards/keyten/kt60hs_t/v2/readme.md
@@ -0,0 +1,29 @@
+# keyten kt60HS-T V2
+
+60% MX Hot-Swap Tsangan PCB
+
+![kt60HS-T image](https://i.imgur.com/vM32aoX.jpeg)
+
+**Note: This firmware only supports the PCB version with STM32F072 controller**
+
+* Keyboard Maintainer: [keyten](https://github.com/key10iq)
+* Hardware Supported: keyten kt60HS-T V2
+* Hardware Availability: private GB
+
+Make example for this keyboard (after setting up your build environment):
+
+ make keyten/kt60hs_t/v2:default
+
+Flashing example for this keyboard:
+
+ make keyten/kt60hs_t/v2:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* Bootmagic reset: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* Keycode in layout: Press the key mapped to `QK_BOOT` if it is available
+* Physical reset button: Hold the button on the back of the PCB
diff --git a/keyboards/kezewa/enter67/keyboard.json b/keyboards/kezewa/enter67/keyboard.json
index df1d7f6b5b..eca9311377 100644
--- a/keyboards/kezewa/enter67/keyboard.json
+++ b/keyboards/kezewa/enter67/keyboard.json
@@ -19,7 +19,6 @@
"rows": ["A1", "A2", "A3", "A4", "A5"]
},
"processor": "STM32F072",
- "url": "",
"usb": {
"device_version": "0.0.1",
"pid": "0xAA66",
diff --git a/keyboards/kezewa/enter80/keyboard.json b/keyboards/kezewa/enter80/keyboard.json
index a4fe83b3ac..9e62163192 100644
--- a/keyboards/kezewa/enter80/keyboard.json
+++ b/keyboards/kezewa/enter80/keyboard.json
@@ -19,7 +19,6 @@
"cols": ["A1", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "B11", "B12", "B13", "B14", "A8", "A9", "A10", "A15", "B3"],
"rows": ["B4", "B5", "B6", "B15", "B10", "B7"]
},
- "url": "",
"usb": {
"device_version": "0.0.1",
"pid": "0xFF65",
diff --git a/keyboards/kibou/fukuro/keyboard.json b/keyboards/kibou/fukuro/keyboard.json
index fa50cca964..97dcaaac4b 100644
--- a/keyboards/kibou/fukuro/keyboard.json
+++ b/keyboards/kibou/fukuro/keyboard.json
@@ -17,7 +17,6 @@
"rows": ["A9", "A10", "C13", "A0", "A6"]
},
"processor": "STM32F072",
- "url": "",
"usb": {
"device_version": "0.0.1",
"pid": "0x0003",
diff --git a/keyboards/kikkou/keyboard.json b/keyboards/kikkou/keyboard.json
index af684bbc29..7e018aa62b 100644
--- a/keyboards/kikkou/keyboard.json
+++ b/keyboards/kikkou/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Kikkou",
"manufacturer": "Mechwerkes",
- "url": "",
"maintainer": "Mechwerkes",
"usb": {
"vid": "0x6D65",
diff --git a/keyboards/kinesis/info.json b/keyboards/kinesis/info.json
index 49025977bd..066f072ebd 100644
--- a/keyboards/kinesis/info.json
+++ b/keyboards/kinesis/info.json
@@ -1,5 +1,4 @@
{
- "url": "",
"maintainer": "qmk",
"qmk": {
"locking": {
diff --git a/keyboards/kineticlabs/emu/hotswap/keyboard.json b/keyboards/kineticlabs/emu/hotswap/keyboard.json
index ec53c2f6bf..a199af4805 100644
--- a/keyboards/kineticlabs/emu/hotswap/keyboard.json
+++ b/keyboards/kineticlabs/emu/hotswap/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Emu Hotswap",
"manufacturer": "Kineticlabs",
- "url": "",
"maintainer": "kb-elmo<[email protected]>",
"usb": {
"vid": "0xE015",
diff --git a/keyboards/kineticlabs/emu/soldered/keyboard.json b/keyboards/kineticlabs/emu/soldered/keyboard.json
index 4aaf523d2a..59de15184a 100644
--- a/keyboards/kineticlabs/emu/soldered/keyboard.json
+++ b/keyboards/kineticlabs/emu/soldered/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Emu Soldered",
"manufacturer": "Kineticlabs",
- "url": "",
"maintainer": "kb-elmo<[email protected]>",
"usb": {
"vid": "0xE015",
diff --git a/keyboards/kingly_keys/ave/ortho/keyboard.json b/keyboards/kingly_keys/ave/ortho/keyboard.json
index 27fb2666a2..d945664ba2 100644
--- a/keyboards/kingly_keys/ave/ortho/keyboard.json
+++ b/keyboards/kingly_keys/ave/ortho/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "The Ave. Ortholinear",
"manufacturer": "Kingly-Keys",
- "url": "",
"maintainer": "the-royal",
"usb": {
"vid": "0x4B4B",
diff --git a/keyboards/kingly_keys/ave/staggered/keyboard.json b/keyboards/kingly_keys/ave/staggered/keyboard.json
index 5fcb1657e3..6296e8c8d1 100644
--- a/keyboards/kingly_keys/ave/staggered/keyboard.json
+++ b/keyboards/kingly_keys/ave/staggered/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "The Ave. Staggered",
"manufacturer": "Kingly-Keys",
- "url": "",
"maintainer": "the-royal",
"usb": {
"vid": "0x4B4B",
diff --git a/keyboards/kingly_keys/little_foot/keyboard.json b/keyboards/kingly_keys/little_foot/keyboard.json
index a511d48905..ddbe877b6d 100644
--- a/keyboards/kingly_keys/little_foot/keyboard.json
+++ b/keyboards/kingly_keys/little_foot/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "The Little Foot",
"manufacturer": "Kingly-Keys",
- "url": "",
"maintainer": "TheRoyalSweatshirt",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/kingly_keys/romac/keyboard.json b/keyboards/kingly_keys/romac/keyboard.json
index 9927bdc25f..8088152db7 100644
--- a/keyboards/kingly_keys/romac/keyboard.json
+++ b/keyboards/kingly_keys/romac/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "RoMac",
"manufacturer": "TheRoyalSweatshirt",
- "url": "",
"maintainer": "TheRoyalSweatshirt",
"usb": {
"vid": "0x4B4B",
diff --git a/keyboards/kingly_keys/romac_plus/keyboard.json b/keyboards/kingly_keys/romac_plus/keyboard.json
index 8b6c43333d..920ed39fa2 100644
--- a/keyboards/kingly_keys/romac_plus/keyboard.json
+++ b/keyboards/kingly_keys/romac_plus/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "RoMac+",
"manufacturer": "TheRoyalSweatshirt",
- "url": "",
"maintainer": "TheRoyalSweatshirt",
"usb": {
"vid": "0x4B4B",
diff --git a/keyboards/kingly_keys/smd_milk/keyboard.json b/keyboards/kingly_keys/smd_milk/keyboard.json
index 9f8a10a5bf..943599dad1 100644
--- a/keyboards/kingly_keys/smd_milk/keyboard.json
+++ b/keyboards/kingly_keys/smd_milk/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "SMD-2% Milk",
"manufacturer": "Kingly-Keys",
- "url": "",
"maintainer": "TheRoyalSweatshirt",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/kira/kira75/keyboard.json b/keyboards/kira/kira75/keyboard.json
index fb4c90a8b5..a974b10161 100644
--- a/keyboards/kira/kira75/keyboard.json
+++ b/keyboards/kira/kira75/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Kira 75",
"manufacturer": "thesiscamper",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/kira/kira80/keyboard.json b/keyboards/kira/kira80/keyboard.json
index 137e1f6565..858b500408 100644
--- a/keyboards/kira/kira80/keyboard.json
+++ b/keyboards/kira/kira80/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Kira80",
"manufacturer": "EVE",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x6986",
diff --git a/keyboards/kk/65/keyboard.json b/keyboards/kk/65/keyboard.json
index 49c52eec80..d7fd74ec9f 100644
--- a/keyboards/kk/65/keyboard.json
+++ b/keyboards/kk/65/keyboard.json
@@ -23,7 +23,6 @@
"rows": ["D7", "B4", "B5", "B6", "B7"]
},
"processor": "atmega32u4",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0001",
diff --git a/keyboards/knobgoblin/keyboard.json b/keyboards/knobgoblin/keyboard.json
index 8494eea465..4886a47da3 100644
--- a/keyboards/knobgoblin/keyboard.json
+++ b/keyboards/knobgoblin/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Knob Goblin",
"manufacturer": "MrT1ddl3s",
- "url": "",
"maintainer": "MrT1ddl3s",
"usb": {
"vid": "0x4B47",
diff --git a/keyboards/kona_classic/keyboard.json b/keyboards/kona_classic/keyboard.json
index 79bef89bb6..716df4759f 100644
--- a/keyboards/kona_classic/keyboard.json
+++ b/keyboards/kona_classic/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Kona Classic",
"manufacturer": "Dangerous Parts",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/kopibeng/xt60/keyboard.json b/keyboards/kopibeng/xt60/keyboard.json
index 24dc8f490b..7b0b74db0e 100644
--- a/keyboards/kopibeng/xt60/keyboard.json
+++ b/keyboards/kopibeng/xt60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "XT60",
"manufacturer": "kopibeng",
- "url": "",
"maintainer": "Kopibeng",
"usb": {
"vid": "0x4B50",
diff --git a/keyboards/kopibeng/xt60_singa/keyboard.json b/keyboards/kopibeng/xt60_singa/keyboard.json
index b1d239cd20..7f717adf35 100644
--- a/keyboards/kopibeng/xt60_singa/keyboard.json
+++ b/keyboards/kopibeng/xt60_singa/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "XT60_SINGA",
"manufacturer": "kopibeng",
- "url": "",
"maintainer": "Kopibeng",
"usb": {
"vid": "0x4B50",
diff --git a/keyboards/kopibeng/xt65/keyboard.json b/keyboards/kopibeng/xt65/keyboard.json
index c73ff703d5..60fff35ca1 100644
--- a/keyboards/kopibeng/xt65/keyboard.json
+++ b/keyboards/kopibeng/xt65/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "XT65",
"manufacturer": "kopibeng",
- "url": "",
"maintainer": "kopibeng",
"usb": {
"vid": "0x4B50",
diff --git a/keyboards/kopibeng/xt8x/keyboard.json b/keyboards/kopibeng/xt8x/keyboard.json
index 7167cb1d07..ad6c044982 100644
--- a/keyboards/kopibeng/xt8x/keyboard.json
+++ b/keyboards/kopibeng/xt8x/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "XT8x",
"manufacturer": "kopibeng",
- "url": "",
"maintainer": "kopibeng",
"usb": {
"vid": "0x4B50",
diff --git a/keyboards/kprepublic/bm16a/v1/keyboard.json b/keyboards/kprepublic/bm16a/v1/keyboard.json
index 85173a89cc..fba123ccb7 100644
--- a/keyboards/kprepublic/bm16a/v1/keyboard.json
+++ b/keyboards/kprepublic/bm16a/v1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "bm16a",
"manufacturer": "KPrepublic",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4B50",
diff --git a/keyboards/kprepublic/bm16a/v2/keyboard.json b/keyboards/kprepublic/bm16a/v2/keyboard.json
index e922d0b9ee..ac65e4affb 100644
--- a/keyboards/kprepublic/bm16a/v2/keyboard.json
+++ b/keyboards/kprepublic/bm16a/v2/keyboard.json
@@ -22,7 +22,6 @@
"rows": ["A8", "A9", "B5", "B3"]
},
"processor": "STM32F103", // GD32F303CCT6
- "url": "",
"usb": {
"device_version": "0.0.2",
"pid": "0x016C",
diff --git a/keyboards/kprepublic/bm16s/keyboard.json b/keyboards/kprepublic/bm16s/keyboard.json
index 8c6ce05bb9..d7b31b5651 100644
--- a/keyboards/kprepublic/bm16s/keyboard.json
+++ b/keyboards/kprepublic/bm16s/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "bm16s",
"manufacturer": "KPrepublic",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4B50",
diff --git a/keyboards/kprepublic/bm40hsrgb/rev1/keyboard.json b/keyboards/kprepublic/bm40hsrgb/rev1/keyboard.json
index 7bdeafbcad..430d525a71 100644
--- a/keyboards/kprepublic/bm40hsrgb/rev1/keyboard.json
+++ b/keyboards/kprepublic/bm40hsrgb/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "BM40 Hotswap RGB",
"manufacturer": "KPRepublic",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4B50",
diff --git a/keyboards/kprepublic/bm40hsrgb/rev2/keyboard.json b/keyboards/kprepublic/bm40hsrgb/rev2/keyboard.json
index 525a6088ed..21689cb958 100644
--- a/keyboards/kprepublic/bm40hsrgb/rev2/keyboard.json
+++ b/keyboards/kprepublic/bm40hsrgb/rev2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "BM40 Hotswap RGB",
"manufacturer": "KPRepublic",
- "url": "",
"maintainer": "qmk",
"features": {
"bootmagic": true,
diff --git a/keyboards/kprepublic/bm43a/keyboard.json b/keyboards/kprepublic/bm43a/keyboard.json
index 79c089c68c..28c8f259d1 100644
--- a/keyboards/kprepublic/bm43a/keyboard.json
+++ b/keyboards/kprepublic/bm43a/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "BM43A",
"manufacturer": "KPRepublic",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/kprepublic/bm43hsrgb/keyboard.json b/keyboards/kprepublic/bm43hsrgb/keyboard.json
index 9fa40bdd9c..9dff2d8ddc 100755
--- a/keyboards/kprepublic/bm43hsrgb/keyboard.json
+++ b/keyboards/kprepublic/bm43hsrgb/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "BM43 Hotswap RGB",
"manufacturer": "KPRepublic",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4B50",
diff --git a/keyboards/kprepublic/bm60hsrgb/rev1/keyboard.json b/keyboards/kprepublic/bm60hsrgb/rev1/keyboard.json
index 5fe5d21014..3640dad2a8 100644
--- a/keyboards/kprepublic/bm60hsrgb/rev1/keyboard.json
+++ b/keyboards/kprepublic/bm60hsrgb/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "BM60HSRGB",
"manufacturer": "KP Republic",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4B50",
diff --git a/keyboards/kprepublic/bm60hsrgb/rev2/keyboard.json b/keyboards/kprepublic/bm60hsrgb/rev2/keyboard.json
index a82d5159cf..3783ebb8b2 100644
--- a/keyboards/kprepublic/bm60hsrgb/rev2/keyboard.json
+++ b/keyboards/kprepublic/bm60hsrgb/rev2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "BM60V2",
"manufacturer": "KP Republic",
- "url": "",
"maintainer": "bdtc123",
"usb": {
"vid": "0x4B50",
diff --git a/keyboards/kprepublic/bm60hsrgb_ec/rev1/keyboard.json b/keyboards/kprepublic/bm60hsrgb_ec/rev1/keyboard.json
index 0a9b283131..e93a616c95 100644
--- a/keyboards/kprepublic/bm60hsrgb_ec/rev1/keyboard.json
+++ b/keyboards/kprepublic/bm60hsrgb_ec/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "BM60HSRGB_EC Rev1",
"manufacturer": "KP Republic",
- "url": "",
"maintainer": "peepeetee",
"usb": {
"vid": "0x4B50",
diff --git a/keyboards/kprepublic/bm60hsrgb_ec/rev2/keyboard.json b/keyboards/kprepublic/bm60hsrgb_ec/rev2/keyboard.json
index 09124e03a9..1f0dffa260 100644
--- a/keyboards/kprepublic/bm60hsrgb_ec/rev2/keyboard.json
+++ b/keyboards/kprepublic/bm60hsrgb_ec/rev2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "BM60HSRGB_EC Rev2",
"manufacturer": "KP Republic",
- "url": "",
"maintainer": "peepeetee",
"usb": {
"vid": "0x4B50",
diff --git a/keyboards/kprepublic/bm60hsrgb_iso/rev1/keyboard.json b/keyboards/kprepublic/bm60hsrgb_iso/rev1/keyboard.json
index 4cd2c48440..8cdb855aa2 100644
--- a/keyboards/kprepublic/bm60hsrgb_iso/rev1/keyboard.json
+++ b/keyboards/kprepublic/bm60hsrgb_iso/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "BM60HSRGB_ISO Rev1",
"manufacturer": "KPRepublic",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4B50",
diff --git a/keyboards/kprepublic/bm60hsrgb_iso/rev2/keyboard.json b/keyboards/kprepublic/bm60hsrgb_iso/rev2/keyboard.json
index e84817122e..3a0df3e414 100644
--- a/keyboards/kprepublic/bm60hsrgb_iso/rev2/keyboard.json
+++ b/keyboards/kprepublic/bm60hsrgb_iso/rev2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "BM60HSRGB_ISO Rev2",
"manufacturer": "KPRepublic",
- "url": "",
"maintainer": "kp republic",
"usb": {
"vid": "0x4B50",
diff --git a/keyboards/kprepublic/bm60hsrgb_poker/rev1/keyboard.json b/keyboards/kprepublic/bm60hsrgb_poker/rev1/keyboard.json
index d7923b8432..d1f5c9fb53 100644
--- a/keyboards/kprepublic/bm60hsrgb_poker/rev1/keyboard.json
+++ b/keyboards/kprepublic/bm60hsrgb_poker/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "BM60HSRGB Poker Rev1",
"manufacturer": "KPrepublic",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4B50",
diff --git a/keyboards/kprepublic/bm60hsrgb_poker/rev2/keyboard.json b/keyboards/kprepublic/bm60hsrgb_poker/rev2/keyboard.json
index 62ff452a68..f3edf59fec 100644
--- a/keyboards/kprepublic/bm60hsrgb_poker/rev2/keyboard.json
+++ b/keyboards/kprepublic/bm60hsrgb_poker/rev2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "BM60HSRGB Poker Rev2",
"manufacturer": "KPrepublic",
- "url": "",
"maintainer": "bdtc123",
"usb": {
"vid": "0x4B50",
diff --git a/keyboards/kprepublic/bm65hsrgb/rev1/keyboard.json b/keyboards/kprepublic/bm65hsrgb/rev1/keyboard.json
index dc63acfa41..c5fa1d9026 100644
--- a/keyboards/kprepublic/bm65hsrgb/rev1/keyboard.json
+++ b/keyboards/kprepublic/bm65hsrgb/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "BM65HSRGB",
"manufacturer": "KPrepublic",
- "url": "",
"maintainer": "bytesapart",
"usb": {
"vid": "0x4B50",
diff --git a/keyboards/kprepublic/bm65hsrgb_iso/rev1/keyboard.json b/keyboards/kprepublic/bm65hsrgb_iso/rev1/keyboard.json
index 53b132713c..43d213a1a7 100644
--- a/keyboards/kprepublic/bm65hsrgb_iso/rev1/keyboard.json
+++ b/keyboards/kprepublic/bm65hsrgb_iso/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "BM65HSRGB ISO",
"manufacturer": "KPrepublic",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4B50",
diff --git a/keyboards/kprepublic/bm68hsrgb/rev1/keyboard.json b/keyboards/kprepublic/bm68hsrgb/rev1/keyboard.json
index 6e2d3a9208..9b6975bddc 100644
--- a/keyboards/kprepublic/bm68hsrgb/rev1/keyboard.json
+++ b/keyboards/kprepublic/bm68hsrgb/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "BM68HSRGB Rev1",
"manufacturer": "KPrepublic",
- "url": "",
"maintainer": "peepeetee",
"usb": {
"vid": "0x4B50",
diff --git a/keyboards/kprepublic/bm68hsrgb/rev2/keyboard.json b/keyboards/kprepublic/bm68hsrgb/rev2/keyboard.json
index 7df1af5902..e294562e0d 100644
--- a/keyboards/kprepublic/bm68hsrgb/rev2/keyboard.json
+++ b/keyboards/kprepublic/bm68hsrgb/rev2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "BM68HSRGB Rev2",
"manufacturer": "KPrepublic",
- "url": "",
"maintainer": "bdtc123",
"usb": {
"vid": "0x4B50",
diff --git a/keyboards/kprepublic/bm80hsrgb/keyboard.json b/keyboards/kprepublic/bm80hsrgb/keyboard.json
index 5a4d65fbcd..8c51e2ea98 100644
--- a/keyboards/kprepublic/bm80hsrgb/keyboard.json
+++ b/keyboards/kprepublic/bm80hsrgb/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "BM80HSRGB",
"manufacturer": "KPRepublic",
- "url": "",
"maintainer": "peepeetee",
"usb": {
"vid": "0x4B50",
diff --git a/keyboards/kprepublic/bm80v2/keyboard.json b/keyboards/kprepublic/bm80v2/keyboard.json
index dd985550bb..e8f061115f 100644
--- a/keyboards/kprepublic/bm80v2/keyboard.json
+++ b/keyboards/kprepublic/bm80v2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "BM80v2",
"manufacturer": "KPrepublic",
- "url": "",
"maintainer": "edwardslau",
"usb": {
"vid": "0x4B50",
diff --git a/keyboards/kprepublic/bm80v2_iso/keyboard.json b/keyboards/kprepublic/bm80v2_iso/keyboard.json
index 46ab7a5e8b..9143f9df07 100644
--- a/keyboards/kprepublic/bm80v2_iso/keyboard.json
+++ b/keyboards/kprepublic/bm80v2_iso/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "BM80v2 ISO",
"manufacturer": "KPrepublic",
- "url": "",
"maintainer": "edwardslau",
"usb": {
"vid": "0x4B50",
diff --git a/keyboards/kprepublic/bm980hsrgb/keyboard.json b/keyboards/kprepublic/bm980hsrgb/keyboard.json
index 8ee498b7b6..addd87de4f 100644
--- a/keyboards/kprepublic/bm980hsrgb/keyboard.json
+++ b/keyboards/kprepublic/bm980hsrgb/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "BM980 Hotswap RGB",
"manufacturer": "KPrepublic",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4B50",
diff --git a/keyboards/kprepublic/cospad/keyboard.json b/keyboards/kprepublic/cospad/keyboard.json
index 51a824b816..8d65d30271 100644
--- a/keyboards/kprepublic/cospad/keyboard.json
+++ b/keyboards/kprepublic/cospad/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Cospad",
"manufacturer": "KPrepublic",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4B5C",
diff --git a/keyboards/kprepublic/cstc40/info.json b/keyboards/kprepublic/cstc40/info.json
index 44d12fc22f..bd79ef2afe 100644
--- a/keyboards/kprepublic/cstc40/info.json
+++ b/keyboards/kprepublic/cstc40/info.json
@@ -15,7 +15,6 @@
"rgb_matrix": true
},
"processor": "STM32F401",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0040",
diff --git a/keyboards/kprepublic/jj40/rev1/keyboard.json b/keyboards/kprepublic/jj40/rev1/keyboard.json
index 3ac3e2f02c..201f916ee3 100644
--- a/keyboards/kprepublic/jj40/rev1/keyboard.json
+++ b/keyboards/kprepublic/jj40/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "JJ40 rev1",
"manufacturer": "KPrepublic",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4B50",
diff --git a/keyboards/kprepublic/jj4x4/keyboard.json b/keyboards/kprepublic/jj4x4/keyboard.json
index 2f53db2e88..d7d785b054 100644
--- a/keyboards/kprepublic/jj4x4/keyboard.json
+++ b/keyboards/kprepublic/jj4x4/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "JJ4x4",
"manufacturer": "KPrepublic",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4B50",
diff --git a/keyboards/kprepublic/jj50/rev1/keyboard.json b/keyboards/kprepublic/jj50/rev1/keyboard.json
index c9f191ef9c..7eed1349e0 100644
--- a/keyboards/kprepublic/jj50/rev1/keyboard.json
+++ b/keyboards/kprepublic/jj50/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "JJ50 rev1",
"manufacturer": "KPrepublic",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4B50",
diff --git a/keyboards/kprepublic/jj50/rev2/keyboard.json b/keyboards/kprepublic/jj50/rev2/keyboard.json
index b739c20713..4327c4be97 100644
--- a/keyboards/kprepublic/jj50/rev2/keyboard.json
+++ b/keyboards/kprepublic/jj50/rev2/keyboard.json
@@ -39,11 +39,9 @@
"twinkle": true
},
"brightness_steps": 8,
- "hue_steps": 8,
"led_count": 6,
"saturation_steps": 8
},
- "url": "",
"usb": {
"device_version": "2.0.0",
"pid": "0x0050",
diff --git a/keyboards/ktec/daisy/keyboard.json b/keyboards/ktec/daisy/keyboard.json
index d0a24f5b0d..8ca734534e 100644
--- a/keyboards/ktec/daisy/keyboard.json
+++ b/keyboards/ktec/daisy/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Daisy",
"manufacturer": "KTEC",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4B50",
diff --git a/keyboards/ktec/staryu/keyboard.json b/keyboards/ktec/staryu/keyboard.json
index a2799703be..9272642c3e 100644
--- a/keyboards/ktec/staryu/keyboard.json
+++ b/keyboards/ktec/staryu/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Staryu",
"manufacturer": "K.T.E.C.",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x1209",
diff --git a/keyboards/kumaokobo/kudox_game/info.json b/keyboards/kumaokobo/kudox_game/info.json
index 6968b5e427..8750facede 100644
--- a/keyboards/kumaokobo/kudox_game/info.json
+++ b/keyboards/kumaokobo/kudox_game/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "The Kudox Game Keyboard",
"manufacturer": "Kumao Kobo",
- "url": "",
"maintainer": "Kumao Kobo",
"usb": {
"vid": "0xABBA",
diff --git a/keyboards/kuro/kuro65/keyboard.json b/keyboards/kuro/kuro65/keyboard.json
index 72549735d9..8ca2310692 100644
--- a/keyboards/kuro/kuro65/keyboard.json
+++ b/keyboards/kuro/kuro65/keyboard.json
@@ -2,7 +2,6 @@
"keyboard_name": "Kuro65",
"manufacturer": "Kuro",
"maintainer": "0x544D",
- "url": "",
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
"diode_direction": "COL2ROW",
diff --git a/keyboards/kv/revt/keyboard.json b/keyboards/kv/revt/keyboard.json
index 8553dcdd35..20d9c38fbe 100644
--- a/keyboards/kv/revt/keyboard.json
+++ b/keyboards/kv/revt/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "KVT",
"manufacturer": "Hybrid",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x6565",
diff --git a/keyboards/kwstudio/pisces/keyboard.json b/keyboards/kwstudio/pisces/keyboard.json
index 48f4e6a4f6..e69993b963 100644
--- a/keyboards/kwstudio/pisces/keyboard.json
+++ b/keyboards/kwstudio/pisces/keyboard.json
@@ -20,7 +20,6 @@
"rows": ["B7", "D5", "D3", "D2", "D1", "D0"]
},
"processor": "atmega32u4",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0001",
diff --git a/keyboards/kwstudio/scorpio/keyboard.json b/keyboards/kwstudio/scorpio/keyboard.json
index 82262afb1b..4d94b3a6b9 100644
--- a/keyboards/kwstudio/scorpio/keyboard.json
+++ b/keyboards/kwstudio/scorpio/keyboard.json
@@ -35,7 +35,6 @@
"led_count": 9,
"sleep": true
},
- "url": "",
"usb": {
"device_version": "0.0.1",
"pid": "0x0002",
diff --git a/keyboards/kwstudio/scorpio_rev2/keyboard.json b/keyboards/kwstudio/scorpio_rev2/keyboard.json
index d1b41b1d4f..b4cf901d1f 100644
--- a/keyboards/kwstudio/scorpio_rev2/keyboard.json
+++ b/keyboards/kwstudio/scorpio_rev2/keyboard.json
@@ -38,7 +38,6 @@
"led_count": 9,
"saturation_steps": 8
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0003",
diff --git a/keyboards/labbe/labbeminiv1/keyboard.json b/keyboards/labbe/labbeminiv1/keyboard.json
index da53de3da5..d976ea5d36 100644
--- a/keyboards/labbe/labbeminiv1/keyboard.json
+++ b/keyboards/labbe/labbeminiv1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Labbe Mini V1",
"manufacturer": "Labbe",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xABBE",
diff --git a/keyboards/labyrinth75/keyboard.json b/keyboards/labyrinth75/keyboard.json
index 1e70a8318d..99f79b9a2b 100644
--- a/keyboards/labyrinth75/keyboard.json
+++ b/keyboards/labyrinth75/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "labyrinth75",
"manufacturer": "Livi",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4F53",
diff --git a/keyboards/laneware/lpad/keyboard.json b/keyboards/laneware/lpad/keyboard.json
index 464205846b..a42ba2c13f 100644
--- a/keyboards/laneware/lpad/keyboard.json
+++ b/keyboards/laneware/lpad/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "L-PAD",
"manufacturer": "Laneware Peripherals",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4C50",
diff --git a/keyboards/laneware/lw67/keyboard.json b/keyboards/laneware/lw67/keyboard.json
index e48506f58e..d1b85ea50d 100644
--- a/keyboards/laneware/lw67/keyboard.json
+++ b/keyboards/laneware/lw67/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "LW-67",
"manufacturer": "Laneware Peripherals",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4C50",
diff --git a/keyboards/laneware/lw75/keyboard.json b/keyboards/laneware/lw75/keyboard.json
index 27601d1e28..6aee9461a8 100644
--- a/keyboards/laneware/lw75/keyboard.json
+++ b/keyboards/laneware/lw75/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "LW-75",
"manufacturer": "Laneware Peripherals",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4C50",
diff --git a/keyboards/laneware/macro1/keyboard.json b/keyboards/laneware/macro1/keyboard.json
index a432db5915..12fce7b920 100644
--- a/keyboards/laneware/macro1/keyboard.json
+++ b/keyboards/laneware/macro1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "MACRO-1",
"manufacturer": "Laneware Peripherals",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4C50",
diff --git a/keyboards/laser_ninja/pumpkinpad/keyboard.json b/keyboards/laser_ninja/pumpkinpad/keyboard.json
index 64e62911a6..96b4049121 100644
--- a/keyboards/laser_ninja/pumpkinpad/keyboard.json
+++ b/keyboards/laser_ninja/pumpkinpad/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Pumpkinpad",
"manufacturer": "Laser Ninja",
- "url": "",
"maintainer": "Jels",
"processor": "STM32F072",
"bootloader": "stm32-dfu",
diff --git a/keyboards/latincompass/latin17rgb/keyboard.json b/keyboards/latincompass/latin17rgb/keyboard.json
index 161672aea4..934653b6fe 100644
--- a/keyboards/latincompass/latin17rgb/keyboard.json
+++ b/keyboards/latincompass/latin17rgb/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Latin17RGB",
"manufacturer": "18438880",
- "url": "",
"maintainer": "18438880",
"usb": {
"vid": "0x7C88",
diff --git a/keyboards/latincompass/latin47ble/keyboard.json b/keyboards/latincompass/latin47ble/keyboard.json
index ac07f68152..f5d53dbbe8 100644
--- a/keyboards/latincompass/latin47ble/keyboard.json
+++ b/keyboards/latincompass/latin47ble/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Latin47BLE",
"manufacturer": "latincompass",
- "url": "",
"maintainer": "latincompass",
"usb": {
"vid": "0x6C63",
diff --git a/keyboards/latincompass/latin60rgb/keyboard.json b/keyboards/latincompass/latin60rgb/keyboard.json
index 764a7c882a..4252387c12 100644
--- a/keyboards/latincompass/latin60rgb/keyboard.json
+++ b/keyboards/latincompass/latin60rgb/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Latin60RGB",
"manufacturer": "latincompass",
- "url": "",
"maintainer": "latincompass",
"usb": {
"vid": "0x6C63",
diff --git a/keyboards/latincompass/latin64ble/keyboard.json b/keyboards/latincompass/latin64ble/keyboard.json
index b2563569d3..3a7a93c4a3 100644
--- a/keyboards/latincompass/latin64ble/keyboard.json
+++ b/keyboards/latincompass/latin64ble/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Latin64BLE",
"manufacturer": "latincompass",
- "url": "",
"maintainer": "latincompass",
"usb": {
"vid": "0x6C63",
diff --git a/keyboards/latincompass/latin6rgb/keyboard.json b/keyboards/latincompass/latin6rgb/keyboard.json
index 42aa82a030..d2708df399 100644
--- a/keyboards/latincompass/latin6rgb/keyboard.json
+++ b/keyboards/latincompass/latin6rgb/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Latin6rgb",
"manufacturer": "18438880",
- "url": "",
"maintainer": "18438880",
"usb": {
"vid": "0x7C88",
diff --git a/keyboards/leafcutterlabs/bigknob/keyboard.json b/keyboards/leafcutterlabs/bigknob/keyboard.json
index 8250f7eb61..7d1fc6fb72 100644
--- a/keyboards/leafcutterlabs/bigknob/keyboard.json
+++ b/keyboards/leafcutterlabs/bigknob/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "bigKNOB",
"manufacturer": "leafcutterlabs",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xCEEB",
diff --git a/keyboards/leeku/finger65/keyboard.json b/keyboards/leeku/finger65/keyboard.json
index c9b7338856..cdb67f0e36 100644
--- a/keyboards/leeku/finger65/keyboard.json
+++ b/keyboards/leeku/finger65/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Finger65",
"manufacturer": "LeeKu",
- "url": "",
"maintainer": "sidcarter",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/lets_split/info.json b/keyboards/lets_split/info.json
index a92a948abd..9152226cab 100644
--- a/keyboards/lets_split/info.json
+++ b/keyboards/lets_split/info.json
@@ -1,5 +1,4 @@
{
- "url": "",
"maintainer": "qmk",
"processor": "atmega32u4",
"bootloader": "caterina",
diff --git a/keyboards/lfkeyboards/lfk78/revb/keyboard.json b/keyboards/lfkeyboards/lfk78/revb/keyboard.json
index a4c0d83902..d5c4656928 100644
--- a/keyboards/lfkeyboards/lfk78/revb/keyboard.json
+++ b/keyboards/lfkeyboards/lfk78/revb/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "LFK78 Rev B",
"manufacturer": "LFKeyboards",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4C46",
diff --git a/keyboards/lfkeyboards/lfk78/revc/keyboard.json b/keyboards/lfkeyboards/lfk78/revc/keyboard.json
index 56ab9b49be..0906307fe7 100644
--- a/keyboards/lfkeyboards/lfk78/revc/keyboard.json
+++ b/keyboards/lfkeyboards/lfk78/revc/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "LFK7 Rev C-H",
"manufacturer": "LFKeyboards",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4C46",
diff --git a/keyboards/lfkeyboards/lfk78/revj/keyboard.json b/keyboards/lfkeyboards/lfk78/revj/keyboard.json
index df8ac8d0f6..2657a21b8c 100644
--- a/keyboards/lfkeyboards/lfk78/revj/keyboard.json
+++ b/keyboards/lfkeyboards/lfk78/revj/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "LFK78 Rev J",
"manufacturer": "LFKeyboards",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4C46",
diff --git a/keyboards/lfkeyboards/lfk87/info.json b/keyboards/lfkeyboards/lfk87/info.json
index 9b10936df8..d38a397da3 100644
--- a/keyboards/lfkeyboards/lfk87/info.json
+++ b/keyboards/lfkeyboards/lfk87/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "LFK87",
"manufacturer": "LFKeyboards",
- "url": "",
"maintainer": "qmk",
"features": {
"audio": true,
diff --git a/keyboards/lfkeyboards/lfkpad/keyboard.json b/keyboards/lfkeyboards/lfkpad/keyboard.json
index 6de415b8e0..f422507a5b 100644
--- a/keyboards/lfkeyboards/lfkpad/keyboard.json
+++ b/keyboards/lfkeyboards/lfkpad/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "LFKPad",
"manufacturer": "LFKeyboards",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4C46",
diff --git a/keyboards/lfkeyboards/mini1800/info.json b/keyboards/lfkeyboards/mini1800/info.json
index 35bb1c15a8..a7ee5324b6 100644
--- a/keyboards/lfkeyboards/mini1800/info.json
+++ b/keyboards/lfkeyboards/mini1800/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Mini1800",
"manufacturer": "LFKeyboards",
- "url": "",
"maintainer": "lfkeyboards",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/lfkeyboards/smk65/info.json b/keyboards/lfkeyboards/smk65/info.json
index 0ecbf2ab95..e80ef7b7eb 100644
--- a/keyboards/lfkeyboards/smk65/info.json
+++ b/keyboards/lfkeyboards/smk65/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "SMK65v2",
"manufacturer": "LFKeyboards",
- "url": "",
"maintainer": "qmk",
"features": {
"bootmagic": true,
diff --git a/keyboards/lily58/lite_rev3/keyboard.json b/keyboards/lily58/lite_rev3/keyboard.json
index ddb1f1877e..839cf4fe78 100644
--- a/keyboards/lily58/lite_rev3/keyboard.json
+++ b/keyboards/lily58/lite_rev3/keyboard.json
@@ -2,7 +2,6 @@
"keyboard_name": "Lily58 Lite Rev3",
"manufacturer": "Liliums",
"maintainer": "yuchi",
- "url": "",
"processor": "RP2040",
"bootloader": "rp2040",
"diode_direction": "COL2ROW",
diff --git a/keyboards/lily58/r2g/keyboard.json b/keyboards/lily58/r2g/keyboard.json
index bb825b1d9e..6bd8f7b916 100644
--- a/keyboards/lily58/r2g/keyboard.json
+++ b/keyboards/lily58/r2g/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Lily58 R2G",
"manufacturer": "Mechboards UK",
- "url": "",
"maintainer": "Elliot Powell",
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
diff --git a/keyboards/lily58/rev1/keyboard.json b/keyboards/lily58/rev1/keyboard.json
index 9ee51b8ba3..3488b0e2b5 100644
--- a/keyboards/lily58/rev1/keyboard.json
+++ b/keyboards/lily58/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Lily58",
"manufacturer": "liliums",
- "url": "",
"maintainer": "liliums",
"usb": {
"vid": "0x04D8",
diff --git a/keyboards/linworks/fave104/keyboard.json b/keyboards/linworks/fave104/keyboard.json
index c71fdd5661..01c49af4c9 100644
--- a/keyboards/linworks/fave104/keyboard.json
+++ b/keyboards/linworks/fave104/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "FAVE-104",
"manufacturer": "Lx3",
- "url": "",
"maintainer": "keydler",
"usb": {
"vid": "0x4C58",
diff --git a/keyboards/linworks/fave60/keyboard.json b/keyboards/linworks/fave60/keyboard.json
index 38c5458445..eb72e9c3e2 100644
--- a/keyboards/linworks/fave60/keyboard.json
+++ b/keyboards/linworks/fave60/keyboard.json
@@ -43,7 +43,6 @@
"cols": ["D6", "D4", "B5", "B4", "B6", "C6", "C7", "F4", "F0", "E6", "D1", "D2", "D3", "D5", "B0"],
"rows": ["F6", "F7", "D7", "F1", "D0"]
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x000D",
diff --git a/keyboards/linworks/fave60a/keyboard.json b/keyboards/linworks/fave60a/keyboard.json
index 7972e94bae..8a505aaae2 100644
--- a/keyboards/linworks/fave60a/keyboard.json
+++ b/keyboards/linworks/fave60a/keyboard.json
@@ -161,7 +161,6 @@
"max_brightness": 120,
"sleep": true
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x000C",
diff --git a/keyboards/linworks/fave65h/keyboard.json b/keyboards/linworks/fave65h/keyboard.json
index 6e35f55a4b..212bd0a37b 100644
--- a/keyboards/linworks/fave65h/keyboard.json
+++ b/keyboards/linworks/fave65h/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "FAve 65H",
"manufacturer": "Lx3",
- "url": "",
"maintainer": "ToastyStoemp",
"usb": {
"vid": "0x4C58",
diff --git a/keyboards/linworks/fave84h/keyboard.json b/keyboards/linworks/fave84h/keyboard.json
index 1ca6cb911a..6b66dd946c 100644
--- a/keyboards/linworks/fave84h/keyboard.json
+++ b/keyboards/linworks/fave84h/keyboard.json
@@ -198,7 +198,6 @@
"max_brightness": 120,
"sleep": true
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0004",
diff --git a/keyboards/linworks/fave87h/keyboard.json b/keyboards/linworks/fave87h/keyboard.json
index 5fb1d4d42a..4bb6e42de4 100644
--- a/keyboards/linworks/fave87h/keyboard.json
+++ b/keyboards/linworks/fave87h/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "FAve 87H",
"manufacturer": "Lx3",
- "url": "",
"maintainer": "ToastyStoemp",
"usb": {
"vid": "0x4C58",
diff --git a/keyboards/linworks/favepada/keyboard.json b/keyboards/linworks/favepada/keyboard.json
index 2b5adcf0a6..e468f88779 100644
--- a/keyboards/linworks/favepada/keyboard.json
+++ b/keyboards/linworks/favepada/keyboard.json
@@ -107,7 +107,6 @@
"ws2812": {
"pin": "B1"
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x000B",
diff --git a/keyboards/littlealby/mute/keyboard.json b/keyboards/littlealby/mute/keyboard.json
index 96c2e26a74..3bd6ab3747 100644
--- a/keyboards/littlealby/mute/keyboard.json
+++ b/keyboards/littlealby/mute/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Mute",
"manufacturer": "Little Alby",
- "url": "",
"maintainer": "albybarber",
"usb": {
"vid": "0x4142",
diff --git a/keyboards/lm_keyboard/lm60n/keyboard.json b/keyboards/lm_keyboard/lm60n/keyboard.json
index f12bdec031..317c61aee2 100644
--- a/keyboards/lm_keyboard/lm60n/keyboard.json
+++ b/keyboards/lm_keyboard/lm60n/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "L+M 60N",
"manufacturer": "L+M Keyboard",
- "url": "",
"maintainer": "gkeyboard",
"usb": {
"vid": "0x4C4D",
diff --git a/keyboards/lxxt/keyboard.json b/keyboards/lxxt/keyboard.json
index 3a2700883d..57c8350b2a 100644
--- a/keyboards/lxxt/keyboard.json
+++ b/keyboards/lxxt/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "LXXT",
"manufacturer": "DeskDaily",
- "url": "",
"maintainer": "DeskDaily",
"usb": {
"vid": "0x5003",
@@ -26,10 +25,8 @@
},
"rgblight": {
"led_count": 16,
- "hue_steps": 8,
"saturation_steps": 8,
"brightness_steps": 8,
- "max_brightness": 255,
"sleep": true,
"animations": {
"alternating": true,
diff --git a/keyboards/lyso1/lefishe/keyboard.json b/keyboards/lyso1/lefishe/keyboard.json
index 6104f47e47..677fb11e18 100644
--- a/keyboards/lyso1/lefishe/keyboard.json
+++ b/keyboards/lyso1/lefishe/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Le_Fishe",
"manufacturer": "Lyso1",
- "url": "",
"maintainer": "Lyso1",
"usb": {
"vid": "0x7856",
diff --git a/keyboards/lz/erghost/keyboard.json b/keyboards/lz/erghost/keyboard.json
index ac5ce2edf2..7722e4fc62 100644
--- a/keyboards/lz/erghost/keyboard.json
+++ b/keyboards/lz/erghost/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "erGhost",
"manufacturer": "Mechlovin Studio",
- "url": "",
"maintainer": "Mechlovin' Studio",
"usb": {
"vid": "0x6C7A",
diff --git a/keyboards/m10a/keyboard.json b/keyboards/m10a/keyboard.json
index 544d2535ed..e0ba10e096 100644
--- a/keyboards/m10a/keyboard.json
+++ b/keyboards/m10a/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "M10-A",
"manufacturer": "RAMA WORKS",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x5241",
diff --git a/keyboards/magic_force/mf34/keyboard.json b/keyboards/magic_force/mf34/keyboard.json
index 7178d0405e..44d1a4ec92 100644
--- a/keyboards/magic_force/mf34/keyboard.json
+++ b/keyboards/magic_force/mf34/keyboard.json
@@ -1,6 +1,5 @@
{
"keyboard_name": "MagicForce",
- "url": "",
"maintainer": "MagicForce",
"manufacturer": "MagicForce",
"usb": {
diff --git a/keyboards/makrosu/keyboard.json b/keyboards/makrosu/keyboard.json
index ec6b8a3bfd..a9790e22d2 100644
--- a/keyboards/makrosu/keyboard.json
+++ b/keyboards/makrosu/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "MakrOSU",
"manufacturer": "Valdydesu_",
- "url": "",
"maintainer": "Valdydesu_",
"usb": {
"vid": "0xAB69",
diff --git a/keyboards/malevolti/lyra/rev1/keyboard.json b/keyboards/malevolti/lyra/rev1/keyboard.json
index cce0ad7bb7..6a4a993d76 100644
--- a/keyboards/malevolti/lyra/rev1/keyboard.json
+++ b/keyboards/malevolti/lyra/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Lyra",
"manufacturer": "Dom",
- "url": "",
"maintainer": "malevolti",
"usb": {
"vid": "0x4443",
diff --git a/keyboards/malevolti/superlyra/rev1/keyboard.json b/keyboards/malevolti/superlyra/rev1/keyboard.json
index 61ef7c605d..4db7558302 100644
--- a/keyboards/malevolti/superlyra/rev1/keyboard.json
+++ b/keyboards/malevolti/superlyra/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "SuperLyra",
"manufacturer": "Dom",
- "url": "",
"maintainer": "malevolti",
"usb": {
"vid": "0x4443",
diff --git a/keyboards/maple_computing/6ball/keyboard.json b/keyboards/maple_computing/6ball/keyboard.json
index 3f125c75c4..0db90d176e 100644
--- a/keyboards/maple_computing/6ball/keyboard.json
+++ b/keyboards/maple_computing/6ball/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "6-Ball",
"manufacturer": "That-Canadian",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xCEEB",
diff --git a/keyboards/maple_computing/c39/keyboard.json b/keyboards/maple_computing/c39/keyboard.json
index de4cbc6aeb..f2f396ccd7 100755
--- a/keyboards/maple_computing/c39/keyboard.json
+++ b/keyboards/maple_computing/c39/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "C39",
"manufacturer": "Maple Computing",
- "url": "",
"maintainer": "Space Cat",
"usb": {
"vid": "0xCA17",
diff --git a/keyboards/maple_computing/ivy/rev1/keyboard.json b/keyboards/maple_computing/ivy/rev1/keyboard.json
index aac35a5dcc..e5bc6beae7 100644
--- a/keyboards/maple_computing/ivy/rev1/keyboard.json
+++ b/keyboards/maple_computing/ivy/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Ivy",
"manufacturer": "Maple Computing",
- "url": "",
"maintainer": "That-Canadian",
"usb": {
"vid": "0x1337",
diff --git a/keyboards/maple_computing/jnao/keyboard.json b/keyboards/maple_computing/jnao/keyboard.json
index 97b51a7680..012d51f8f5 100644
--- a/keyboards/maple_computing/jnao/keyboard.json
+++ b/keyboards/maple_computing/jnao/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "JNAO",
"manufacturer": "Maple Computing",
- "url": "",
"maintainer": "That-Canadian",
"usb": {
"vid": "0x1337",
diff --git a/keyboards/maple_computing/launchpad/rev1/keyboard.json b/keyboards/maple_computing/launchpad/rev1/keyboard.json
index 8c75561179..272a2eef6d 100644
--- a/keyboards/maple_computing/launchpad/rev1/keyboard.json
+++ b/keyboards/maple_computing/launchpad/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Launch Pad",
"manufacturer": "Maple Computing",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x1337",
diff --git a/keyboards/maple_computing/lets_split_eh/keyboard.json b/keyboards/maple_computing/lets_split_eh/keyboard.json
index 42a1cf3e77..90965090b1 100644
--- a/keyboards/maple_computing/lets_split_eh/keyboard.json
+++ b/keyboards/maple_computing/lets_split_eh/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Lets Split Eh?",
"manufacturer": "That-Canadian",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/maple_computing/minidox/rev1/keyboard.json b/keyboards/maple_computing/minidox/rev1/keyboard.json
index b64f26e834..340a8bd39e 100644
--- a/keyboards/maple_computing/minidox/rev1/keyboard.json
+++ b/keyboards/maple_computing/minidox/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "MiniDox",
"manufacturer": "That-Canadian",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/maple_computing/the_ruler/keyboard.json b/keyboards/maple_computing/the_ruler/keyboard.json
index 7d15bb9bb8..a6c9304d60 100644
--- a/keyboards/maple_computing/the_ruler/keyboard.json
+++ b/keyboards/maple_computing/the_ruler/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "The Ruler",
"manufacturer": "Maple Computing",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x1337",
diff --git a/keyboards/marcopad/keyboard.json b/keyboards/marcopad/keyboard.json
index c0a8ca37c0..50dc3c1ed0 100644
--- a/keyboards/marcopad/keyboard.json
+++ b/keyboards/marcopad/keyboard.json
@@ -34,8 +34,7 @@
"animation": "splash",
"hue": 132,
"sat": 102,
- "speed": 80,
- "val": 255
+ "speed": 80
},
"driver": "ws2812",
"layout": [
diff --git a/keyboards/mariorion_v25/prod/keyboard.json b/keyboards/mariorion_v25/prod/keyboard.json
index dd014be03a..6c2ba94ec1 100644
--- a/keyboards/mariorion_v25/prod/keyboard.json
+++ b/keyboards/mariorion_v25/prod/keyboard.json
@@ -44,7 +44,6 @@
"rows": ["B5", "B4", "B3", "A2", "C13", "B8"]
},
"processor": "STM32F072",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0002",
diff --git a/keyboards/mariorion_v25/proto/keyboard.json b/keyboards/mariorion_v25/proto/keyboard.json
index be00d447d2..5e46f64754 100644
--- a/keyboards/mariorion_v25/proto/keyboard.json
+++ b/keyboards/mariorion_v25/proto/keyboard.json
@@ -44,7 +44,6 @@
"rows": ["B5", "B4", "B3", "A2", "C13", "B8"]
},
"processor": "STM32F072",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0001",
diff --git a/keyboards/matrix/abelx/keyboard.json b/keyboards/matrix/abelx/keyboard.json
index 7fcad281da..19f7d23b61 100644
--- a/keyboards/matrix/abelx/keyboard.json
+++ b/keyboards/matrix/abelx/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "ABELX",
"manufacturer": "Matrix",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4D58",
diff --git a/keyboards/matrix/cain_re/keyboard.json b/keyboards/matrix/cain_re/keyboard.json
index 7d93e806c2..e806e9a427 100644
--- a/keyboards/matrix/cain_re/keyboard.json
+++ b/keyboards/matrix/cain_re/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Cain",
"manufacturer": "Matrix",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4D58",
diff --git a/keyboards/matrix/falcon/config.h b/keyboards/matrix/falcon/config.h
index 9065dd0770..66787658fd 100644
--- a/keyboards/matrix/falcon/config.h
+++ b/keyboards/matrix/falcon/config.h
@@ -29,4 +29,3 @@
//pin setting
#define LED_POWER_PIN D5
#define CHG_EN_PIN E6
-#define BATTERY_LEVEL_PIN F0
diff --git a/keyboards/matrix/falcon/keyboard.json b/keyboards/matrix/falcon/keyboard.json
index 0c387f5bc2..bf5fc640ce 100644
--- a/keyboards/matrix/falcon/keyboard.json
+++ b/keyboards/matrix/falcon/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Falcon",
"manufacturer": "Matrix Lab",
- "url": "",
"maintainer": "yulei (Astro)",
"usb": {
"vid": "0x4D58",
diff --git a/keyboards/matrix/m12og/rev1/keyboard.json b/keyboards/matrix/m12og/rev1/keyboard.json
index c956720a8d..7d1fccdad6 100644
--- a/keyboards/matrix/m12og/rev1/keyboard.json
+++ b/keyboards/matrix/m12og/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "m12og_v1",
"manufacturer": "Matrix",
- "url": "",
"maintainer": "kb-elmo",
"usb": {
"vid": "0x4D58",
diff --git a/keyboards/matrix/m12og/rev2/keyboard.json b/keyboards/matrix/m12og/rev2/keyboard.json
index 45fcffe9eb..5a04161d1b 100644
--- a/keyboards/matrix/m12og/rev2/keyboard.json
+++ b/keyboards/matrix/m12og/rev2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "M12OG",
"manufacturer": "Matrix",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4D58",
diff --git a/keyboards/matrix/m20add/keyboard.json b/keyboards/matrix/m20add/keyboard.json
index fc58d242e6..31cc936b9c 100644
--- a/keyboards/matrix/m20add/keyboard.json
+++ b/keyboards/matrix/m20add/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "8XV2.0 Additional",
"manufacturer": "Matrix",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4D58",
diff --git a/keyboards/matrix/me/keyboard.json b/keyboards/matrix/me/keyboard.json
index 8349fbd7e6..6abfe38435 100644
--- a/keyboards/matrix/me/keyboard.json
+++ b/keyboards/matrix/me/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Matrix ME",
"manufacturer": "Matrix Lab",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4D58",
diff --git a/keyboards/matrix/noah/keyboard.json b/keyboards/matrix/noah/keyboard.json
index 53c8dc2458..d9d4ce3976 100644
--- a/keyboards/matrix/noah/keyboard.json
+++ b/keyboards/matrix/noah/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "NOAH",
"manufacturer": "Matrix",
- "url": "",
"maintainer": "astro",
"usb": {
"vid": "0x4D58",
diff --git a/keyboards/maxipad/info.json b/keyboards/maxipad/info.json
index bf054e4b83..73b563edc1 100644
--- a/keyboards/maxipad/info.json
+++ b/keyboards/maxipad/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "maxipad",
"manufacturer": "wootpatoot",
- "url": "",
"maintainer": "qmk",
"features": {
"bootmagic": true,
diff --git a/keyboards/mazestudio/jocker/keyboard.json b/keyboards/mazestudio/jocker/keyboard.json
index 7257866f21..51c09eea32 100644
--- a/keyboards/mazestudio/jocker/keyboard.json
+++ b/keyboards/mazestudio/jocker/keyboard.json
@@ -4,7 +4,6 @@
"maintainer": "mazestd",
"bootloader": "atmel-dfu",
"processor": "atmega32u4",
- "url": "",
"usb": {
"vid": "0x70F5",
"pid": "0x4A01",
diff --git a/keyboards/mb44/keyboard.json b/keyboards/mb44/keyboard.json
index c349d11d38..f6ab714a5c 100644
--- a/keyboards/mb44/keyboard.json
+++ b/keyboards/mb44/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "MB-44",
"manufacturer": "melonbred",
- "url": "",
"maintainer": "melonbred",
"usb": {
"vid": "0x6D62",
diff --git a/keyboards/mechanickeys/miniashen40/keyboard.json b/keyboards/mechanickeys/miniashen40/keyboard.json
index 2adee31c1d..8e5821cc29 100644
--- a/keyboards/mechanickeys/miniashen40/keyboard.json
+++ b/keyboards/mechanickeys/miniashen40/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Mini Ashen 40",
"manufacturer": "MechanicKeys",
- "url": "",
"maintainer": "jfescobar18",
"usb": {
"vid": "0x4D4B",
diff --git a/keyboards/mechanickeys/undead60m/keyboard.json b/keyboards/mechanickeys/undead60m/keyboard.json
index 7dc27c29ed..9f88f13346 100644
--- a/keyboards/mechanickeys/undead60m/keyboard.json
+++ b/keyboards/mechanickeys/undead60m/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Undead 60-M",
"manufacturer": "MechanicKeys",
- "url": "",
"maintainer": "jfescobar18",
"usb": {
"vid": "0x4D4B",
diff --git a/keyboards/mechboards/crkbd/pro/keyboard.json b/keyboards/mechboards/crkbd/pro/keyboard.json
index 05bca63993..69a04760de 100644
--- a/keyboards/mechboards/crkbd/pro/keyboard.json
+++ b/keyboards/mechboards/crkbd/pro/keyboard.json
@@ -30,9 +30,6 @@
"animations": {
"cycle_left_right": true
},
- "default": {
- "animation": "cycle_left_right"
- },
"driver": "ws2812",
"layout": [
{"x": 85, "y": 16, "flags": 2},
diff --git a/keyboards/mechboards/lily58/pro/keyboard.json b/keyboards/mechboards/lily58/pro/keyboard.json
index d655377f19..ca620c67d8 100644
--- a/keyboards/mechboards/lily58/pro/keyboard.json
+++ b/keyboards/mechboards/lily58/pro/keyboard.json
@@ -30,9 +30,6 @@
"animations": {
"cycle_left_right": true
},
- "default": {
- "animation": "cycle_left_right"
- },
"driver": "ws2812",
"layout": [
{"matrix": [0, 5], "x": 72, "y": 4, "flags": 4},
diff --git a/keyboards/mechboards/sofle/pro/keyboard.json b/keyboards/mechboards/sofle/pro/keyboard.json
index dbc339d9a1..e1da038644 100644
--- a/keyboards/mechboards/sofle/pro/keyboard.json
+++ b/keyboards/mechboards/sofle/pro/keyboard.json
@@ -30,9 +30,6 @@
"animations": {
"cycle_left_right": true
},
- "default": {
- "animation": "cycle_left_right"
- },
"driver": "ws2812",
"layout": [
{"matrix": [4, 0], "x": 32, "y": 57, "flags": 4},
diff --git a/keyboards/mechbrewery/mb65h/keyboard.json b/keyboards/mechbrewery/mb65h/keyboard.json
index 8b4049be4d..99d49d698d 100644
--- a/keyboards/mechbrewery/mb65h/keyboard.json
+++ b/keyboards/mechbrewery/mb65h/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "MB65H",
"manufacturer": "MechBrewery",
- "url": "",
"maintainer": "AnthonyNguyen168",
"usb": {
"vid": "0x4252",
diff --git a/keyboards/mechbrewery/mb65s/keyboard.json b/keyboards/mechbrewery/mb65s/keyboard.json
index e043d95860..eeafcaba1a 100644
--- a/keyboards/mechbrewery/mb65s/keyboard.json
+++ b/keyboards/mechbrewery/mb65s/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "MB65S",
"manufacturer": "MechBrewery",
- "url": "",
"maintainer": "AnthonyNguyen168",
"usb": {
"vid": "0x4252",
diff --git a/keyboards/mechkeys/acr60/keyboard.json b/keyboards/mechkeys/acr60/keyboard.json
index 6486b21f12..0be2ec47c1 100644
--- a/keyboards/mechkeys/acr60/keyboard.json
+++ b/keyboards/mechkeys/acr60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "ACR60",
"manufacturer": "MechKeys",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/mechkeys/alu84/keyboard.json b/keyboards/mechkeys/alu84/keyboard.json
index 30f70b17c9..1d7d8cbee2 100644
--- a/keyboards/mechkeys/alu84/keyboard.json
+++ b/keyboards/mechkeys/alu84/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "ALU84",
"manufacturer": "MechKeys",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/mechkeys/espectro/keyboard.json b/keyboards/mechkeys/espectro/keyboard.json
index f4d2aa29bb..d9a7dda165 100644
--- a/keyboards/mechkeys/espectro/keyboard.json
+++ b/keyboards/mechkeys/espectro/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Espectro",
"manufacturer": "MechKeys",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/mechkeys/mechmini/v1/keyboard.json b/keyboards/mechkeys/mechmini/v1/keyboard.json
index 8d3a4a9b84..a1338c9ba9 100644
--- a/keyboards/mechkeys/mechmini/v1/keyboard.json
+++ b/keyboards/mechkeys/mechmini/v1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "MechMini",
"manufacturer": "MechKeys",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/mechkeys/mk60/keyboard.json b/keyboards/mechkeys/mk60/keyboard.json
index e47d7def2c..bb9a69daf5 100644
--- a/keyboards/mechkeys/mk60/keyboard.json
+++ b/keyboards/mechkeys/mk60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "MK60",
"manufacturer": "MechKeys",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/mechlovin/adelais/info.json b/keyboards/mechlovin/adelais/info.json
index 42b16d6398..84ca6403ce 100644
--- a/keyboards/mechlovin/adelais/info.json
+++ b/keyboards/mechlovin/adelais/info.json
@@ -1,6 +1,5 @@
{
"manufacturer": "Team.Mechlovin",
- "url": "",
"maintainer": "mechlovin",
"usb": {
"vid": "0x4D4C",
diff --git a/keyboards/mechlovin/delphine/info.json b/keyboards/mechlovin/delphine/info.json
index baeeab6f18..2fe90c7629 100644
--- a/keyboards/mechlovin/delphine/info.json
+++ b/keyboards/mechlovin/delphine/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Delphine",
"manufacturer": "Mechlovin",
- "url": "",
"maintainer": "mechlovin",
"usb": {
"vid": "0x4D4C"
diff --git a/keyboards/mechlovin/foundation/keyboard.json b/keyboards/mechlovin/foundation/keyboard.json
index 3bd05add2f..00cf464255 100644
--- a/keyboards/mechlovin/foundation/keyboard.json
+++ b/keyboards/mechlovin/foundation/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Foundation FRL",
"manufacturer": "Mechlovin Studio",
- "url": "",
"maintainer": "Protozoa",
"usb": {
"vid": "0x4D4C",
diff --git a/keyboards/mechlovin/hannah60rgb/rev1/keyboard.json b/keyboards/mechlovin/hannah60rgb/rev1/keyboard.json
index 4fb4dc2eef..e2b0ae715e 100644
--- a/keyboards/mechlovin/hannah60rgb/rev1/keyboard.json
+++ b/keyboards/mechlovin/hannah60rgb/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Hannah60 RGB",
"manufacturer": "Team.Mechlovin",
- "url": "",
"maintainer": "mechlovin",
"usb": {
"vid": "0x4D4C",
diff --git a/keyboards/mechlovin/hannah60rgb/rev2/keyboard.json b/keyboards/mechlovin/hannah60rgb/rev2/keyboard.json
index 06bb71a348..066422b3e3 100644
--- a/keyboards/mechlovin/hannah60rgb/rev2/keyboard.json
+++ b/keyboards/mechlovin/hannah60rgb/rev2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Hannah60 RGB Rev.2",
"manufacturer": "Team.Mechlovin",
- "url": "",
"maintainer": "mechlovin",
"usb": {
"vid": "0x4D4C",
diff --git a/keyboards/mechlovin/hannah65/rev1/haus/keyboard.json b/keyboards/mechlovin/hannah65/rev1/haus/keyboard.json
index 7a935fc1a5..14ca49f207 100644
--- a/keyboards/mechlovin/hannah65/rev1/haus/keyboard.json
+++ b/keyboards/mechlovin/hannah65/rev1/haus/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Haus Rev. 1",
"manufacturer": "Team Mechlovin",
- "url": "",
"maintainer": "Team Mechlovin",
"usb": {
"vid": "0x4D4C",
diff --git a/keyboards/mechlovin/hannah910/rev1/keyboard.json b/keyboards/mechlovin/hannah910/rev1/keyboard.json
index 61cf365337..44dedd57c3 100644
--- a/keyboards/mechlovin/hannah910/rev1/keyboard.json
+++ b/keyboards/mechlovin/hannah910/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Hannah910",
"manufacturer": "Mechlovin",
- "url": "",
"maintainer": "Mechlovin'",
"usb": {
"vid": "0x4D4C",
diff --git a/keyboards/mechlovin/hannah910/rev2/keyboard.json b/keyboards/mechlovin/hannah910/rev2/keyboard.json
index 9fb5847124..8a01f6bb8b 100644
--- a/keyboards/mechlovin/hannah910/rev2/keyboard.json
+++ b/keyboards/mechlovin/hannah910/rev2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Hannah910",
"manufacturer": "Mechlovin",
- "url": "",
"maintainer": "Team Mechlovin'",
"usb": {
"vid": "0x4D4C",
diff --git a/keyboards/mechlovin/hannah910/rev3/keyboard.json b/keyboards/mechlovin/hannah910/rev3/keyboard.json
index ba88319890..668b31328f 100644
--- a/keyboards/mechlovin/hannah910/rev3/keyboard.json
+++ b/keyboards/mechlovin/hannah910/rev3/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Hannah910",
"manufacturer": "Mechlovin",
- "url": "",
"maintainer": "Team Mechlovin'",
"usb": {
"vid": "0x4D4C",
diff --git a/keyboards/mechlovin/hex4b/info.json b/keyboards/mechlovin/hex4b/info.json
index 9964736255..de7f03bab9 100644
--- a/keyboards/mechlovin/hex4b/info.json
+++ b/keyboards/mechlovin/hex4b/info.json
@@ -1,6 +1,5 @@
{
"manufacturer": "Mechlovin Studio",
- "url": "",
"maintainer": "Hex-Keyboard&Mechlovin",
"usb": {
"vid": "0x4D4C",
diff --git a/keyboards/mechlovin/hex6c/keyboard.json b/keyboards/mechlovin/hex6c/keyboard.json
index e068420b81..c951cf242d 100644
--- a/keyboards/mechlovin/hex6c/keyboard.json
+++ b/keyboards/mechlovin/hex6c/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Hex6C",
"manufacturer": "Mechlovin Studio and Hex Keyboard",
- "url": "",
"maintainer": "Mechlovin' Studio",
"usb": {
"vid": "0x4D4C",
diff --git a/keyboards/mechlovin/infinity87/rev1/rogue87/keyboard.json b/keyboards/mechlovin/infinity87/rev1/rogue87/keyboard.json
index 2ac0510dbf..840f8a0392 100644
--- a/keyboards/mechlovin/infinity87/rev1/rogue87/keyboard.json
+++ b/keyboards/mechlovin/infinity87/rev1/rogue87/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Rogue87 Rev.1",
"manufacturer": "Mechlovin.Studio",
- "url": "",
"maintainer": "Mechlovin' Studio",
"usb": {
"vid": "0x4D4C",
diff --git a/keyboards/mechlovin/infinity87/rev1/rouge87/keyboard.json b/keyboards/mechlovin/infinity87/rev1/rouge87/keyboard.json
index 6b947f0f1f..1eec53ebb9 100644
--- a/keyboards/mechlovin/infinity87/rev1/rouge87/keyboard.json
+++ b/keyboards/mechlovin/infinity87/rev1/rouge87/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Rouge87 Rev.1",
"manufacturer": "Mechlovin.Studio",
- "url": "",
"maintainer": "Mechlovin' Studio",
"usb": {
"vid": "0x4D4C",
diff --git a/keyboards/mechlovin/infinity87/rev1/standard/keyboard.json b/keyboards/mechlovin/infinity87/rev1/standard/keyboard.json
index a0cb10fac2..941f6ec955 100644
--- a/keyboards/mechlovin/infinity87/rev1/standard/keyboard.json
+++ b/keyboards/mechlovin/infinity87/rev1/standard/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "infinity87 Rev.1",
"manufacturer": "Mechlovin.Studio",
- "url": "",
"maintainer": "Team Mechlovin'",
"usb": {
"vid": "0x4D4C",
diff --git a/keyboards/mechlovin/infinity87/rev2/keyboard.json b/keyboards/mechlovin/infinity87/rev2/keyboard.json
index fdc6686988..618b9397bf 100644
--- a/keyboards/mechlovin/infinity87/rev2/keyboard.json
+++ b/keyboards/mechlovin/infinity87/rev2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Infinity87 Rev.2",
"manufacturer": "Mechlovin.Studio",
- "url": "",
"maintainer": "Mechlovin' Studio",
"usb": {
"vid": "0x4D4C",
diff --git a/keyboards/mechlovin/infinity87/rgb_rev1/keyboard.json b/keyboards/mechlovin/infinity87/rgb_rev1/keyboard.json
index 2d177949dc..2ca5e03b36 100644
--- a/keyboards/mechlovin/infinity87/rgb_rev1/keyboard.json
+++ b/keyboards/mechlovin/infinity87/rgb_rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Infinity87 RGB Rev1",
"manufacturer": "Mechlovin.Studio",
- "url": "",
"maintainer": "Team Mechlovin'",
"usb": {
"vid": "0x4D4C",
diff --git a/keyboards/mechlovin/infinity875/keyboard.json b/keyboards/mechlovin/infinity875/keyboard.json
index 73bdb0af13..1016178caa 100644
--- a/keyboards/mechlovin/infinity875/keyboard.json
+++ b/keyboards/mechlovin/infinity875/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Infinity87.5",
"manufacturer": "Mechlovin.Studio",
- "url": "",
"maintainer": "Mechlovin' Studio",
"usb": {
"vid": "0x4D4C",
diff --git a/keyboards/mechlovin/infinity88/keyboard.json b/keyboards/mechlovin/infinity88/keyboard.json
index 14371d2459..3691c6d836 100644
--- a/keyboards/mechlovin/infinity88/keyboard.json
+++ b/keyboards/mechlovin/infinity88/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Infinity 88",
"manufacturer": "Team.Mechlovin",
- "url": "",
"maintainer": "mechlovin",
"usb": {
"vid": "0x4D4C",
diff --git a/keyboards/mechlovin/infinityce/keyboard.json b/keyboards/mechlovin/infinityce/keyboard.json
index 5b10e056ba..2de1bde499 100644
--- a/keyboards/mechlovin/infinityce/keyboard.json
+++ b/keyboards/mechlovin/infinityce/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Infinity CE",
"manufacturer": "Team.Mechlovin",
- "url": "",
"maintainer": "Team Mechlovin'",
"usb": {
"vid": "0x4D4C",
diff --git a/keyboards/mechlovin/jay60/keyboard.json b/keyboards/mechlovin/jay60/keyboard.json
index 75bf190d88..2b7e9ef914 100644
--- a/keyboards/mechlovin/jay60/keyboard.json
+++ b/keyboards/mechlovin/jay60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Jay60",
"manufacturer": "Mechlovin Studio",
- "url": "",
"maintainer": "Mechlovin' Studio",
"usb": {
"vid": "0x4D4C",
diff --git a/keyboards/mechlovin/kanu/keyboard.json b/keyboards/mechlovin/kanu/keyboard.json
index 10cd22319a..233b82f71e 100644
--- a/keyboards/mechlovin/kanu/keyboard.json
+++ b/keyboards/mechlovin/kanu/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Kanu",
"manufacturer": "Mechlovin",
- "url": "",
"maintainer": "Team Mechlovin'",
"usb": {
"vid": "0x4D4C",
diff --git a/keyboards/mechlovin/kay60/keyboard.json b/keyboards/mechlovin/kay60/keyboard.json
index 7c38273947..b42fd73b88 100644
--- a/keyboards/mechlovin/kay60/keyboard.json
+++ b/keyboards/mechlovin/kay60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Kay60",
"manufacturer": "Mechlovin Studio",
- "url": "",
"maintainer": "Mechlovin' Studio",
"usb": {
"vid": "0x4D4C",
diff --git a/keyboards/mechlovin/kay65/keyboard.json b/keyboards/mechlovin/kay65/keyboard.json
index f5d5897939..d5008ec48f 100644
--- a/keyboards/mechlovin/kay65/keyboard.json
+++ b/keyboards/mechlovin/kay65/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Kay65 Rev. 1",
"manufacturer": "Team Mechlovin",
- "url": "",
"maintainer": "Mechlovin' Studio",
"usb": {
"vid": "0x4D4C",
diff --git a/keyboards/mechlovin/mechlovin9/info.json b/keyboards/mechlovin/mechlovin9/info.json
index 41133813ef..6783f0a323 100644
--- a/keyboards/mechlovin/mechlovin9/info.json
+++ b/keyboards/mechlovin/mechlovin9/info.json
@@ -1,6 +1,5 @@
{
"manufacturer": "Mechlovin Studio",
- "url": "",
"maintainer": "Team Mechlovin",
"usb": {
"vid": "0x4D4C"
diff --git a/keyboards/mechlovin/olly/bb/keyboard.json b/keyboards/mechlovin/olly/bb/keyboard.json
index ac08e94c3c..de3eb16c1d 100644
--- a/keyboards/mechlovin/olly/bb/keyboard.json
+++ b/keyboards/mechlovin/olly/bb/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Olly BB",
"manufacturer": "Mechlovin.Studio",
- "url": "",
"maintainer": "Mechlovin' Studio",
"usb": {
"vid": "0x4D4C",
diff --git a/keyboards/mechlovin/olly/jf/info.json b/keyboards/mechlovin/olly/jf/info.json
index 315191e840..c5a70f44ba 100644
--- a/keyboards/mechlovin/olly/jf/info.json
+++ b/keyboards/mechlovin/olly/jf/info.json
@@ -1,6 +1,5 @@
{
"manufacturer": "Mechlovin.Studio",
- "url": "",
"maintainer": "Mechlovin' Studio",
"usb": {
"vid": "0x4D4C"
diff --git a/keyboards/mechlovin/olly/octagon/keyboard.json b/keyboards/mechlovin/olly/octagon/keyboard.json
index 4bc7d88ed7..6df26bad09 100644
--- a/keyboards/mechlovin/olly/octagon/keyboard.json
+++ b/keyboards/mechlovin/olly/octagon/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Olly Octagon",
"manufacturer": "Mechlovin Studio",
- "url": "",
"maintainer": "Mechlovin' Studio",
"usb": {
"vid": "0x4D4C",
@@ -170,11 +169,12 @@
"processor": "STM32F103",
"bootloader": "stm32duino",
"layout_aliases": {
- "LAYOUT": "LAYOUT_split_bs",
- "LAYOUT_all": "LAYOUT_split_bs"
+ "LAYOUT": "LAYOUT_all",
+ "LAYOUT_split_bs": "LAYOUT_all"
},
+ "community_layouts": ["75_ansi", "75_iso"],
"layouts": {
- "LAYOUT_split_bs": {
+ "LAYOUT_all": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
@@ -269,6 +269,750 @@
{"matrix": [5, 14], "x": 14, "y": 5},
{"matrix": [5, 15], "x": 15, "y": 5}
]
+ },
+ "LAYOUT_75_ansi": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
+ {"matrix": [0, 15], "x": 15, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [1, 6], "x": 6, "y": 1},
+ {"matrix": [1, 7], "x": 7, "y": 1},
+ {"matrix": [1, 8], "x": 8, "y": 1},
+ {"matrix": [1, 9], "x": 9, "y": 1},
+ {"matrix": [1, 10], "x": 10, "y": 1},
+ {"matrix": [1, 11], "x": 11, "y": 1},
+ {"matrix": [1, 12], "x": 12, "y": 1},
+ {"matrix": [1, 13], "x": 13, "y": 1, "w": 2},
+ {"matrix": [1, 15], "x": 15, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2},
+ {"matrix": [2, 2], "x": 2.5, "y": 2},
+ {"matrix": [2, 3], "x": 3.5, "y": 2},
+ {"matrix": [2, 4], "x": 4.5, "y": 2},
+ {"matrix": [2, 5], "x": 5.5, "y": 2},
+ {"matrix": [2, 6], "x": 6.5, "y": 2},
+ {"matrix": [2, 7], "x": 7.5, "y": 2},
+ {"matrix": [2, 8], "x": 8.5, "y": 2},
+ {"matrix": [2, 9], "x": 9.5, "y": 2},
+ {"matrix": [2, 10], "x": 10.5, "y": 2},
+ {"matrix": [2, 11], "x": 11.5, "y": 2},
+ {"matrix": [2, 12], "x": 12.5, "y": 2},
+ {"matrix": [2, 14], "x": 13.5, "y": 2, "w": 1.5},
+ {"matrix": [2, 15], "x": 15, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3},
+ {"matrix": [3, 2], "x": 2.75, "y": 3},
+ {"matrix": [3, 3], "x": 3.75, "y": 3},
+ {"matrix": [3, 4], "x": 4.75, "y": 3},
+ {"matrix": [3, 5], "x": 5.75, "y": 3},
+ {"matrix": [3, 6], "x": 6.75, "y": 3},
+ {"matrix": [3, 7], "x": 7.75, "y": 3},
+ {"matrix": [3, 8], "x": 8.75, "y": 3},
+ {"matrix": [3, 9], "x": 9.75, "y": 3},
+ {"matrix": [3, 10], "x": 10.75, "y": 3},
+ {"matrix": [3, 11], "x": 11.75, "y": 3},
+ {"matrix": [3, 13], "x": 12.75, "y": 3, "w": 2.25},
+ {"matrix": [3, 15], "x": 15, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4},
+ {"matrix": [4, 3], "x": 3.25, "y": 4},
+ {"matrix": [4, 4], "x": 4.25, "y": 4},
+ {"matrix": [4, 5], "x": 5.25, "y": 4},
+ {"matrix": [4, 6], "x": 6.25, "y": 4},
+ {"matrix": [4, 7], "x": 7.25, "y": 4},
+ {"matrix": [4, 8], "x": 8.25, "y": 4},
+ {"matrix": [4, 9], "x": 9.25, "y": 4},
+ {"matrix": [4, 10], "x": 10.25, "y": 4},
+ {"matrix": [4, 11], "x": 11.25, "y": 4},
+ {"matrix": [4, 12], "x": 12.25, "y": 4, "w": 1.75},
+ {"matrix": [4, 14], "x": 14, "y": 4},
+ {"matrix": [4, 15], "x": 15, "y": 4},
+
+ {"matrix": [5, 0], "x": 0, "y": 5, "w": 1.25},
+ {"matrix": [5, 1], "x": 1.25, "y": 5, "w": 1.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5, "w": 1.25},
+ {"matrix": [5, 6], "x": 3.75, "y": 5, "w": 6.25},
+ {"matrix": [5, 10], "x": 10, "y": 5},
+ {"matrix": [5, 11], "x": 11, "y": 5},
+ {"matrix": [5, 12], "x": 12, "y": 5},
+ {"matrix": [5, 13], "x": 13, "y": 5},
+ {"matrix": [5, 14], "x": 14, "y": 5},
+ {"matrix": [5, 15], "x": 15, "y": 5}
+ ]
+ },
+ "LAYOUT_75_ansi_split_bs": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
+ {"matrix": [0, 15], "x": 15, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [1, 6], "x": 6, "y": 1},
+ {"matrix": [1, 7], "x": 7, "y": 1},
+ {"matrix": [1, 8], "x": 8, "y": 1},
+ {"matrix": [1, 9], "x": 9, "y": 1},
+ {"matrix": [1, 10], "x": 10, "y": 1},
+ {"matrix": [1, 11], "x": 11, "y": 1},
+ {"matrix": [1, 12], "x": 12, "y": 1},
+ {"matrix": [1, 13], "x": 13, "y": 1},
+ {"matrix": [1, 14], "x": 14, "y": 1},
+ {"matrix": [1, 15], "x": 15, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2},
+ {"matrix": [2, 2], "x": 2.5, "y": 2},
+ {"matrix": [2, 3], "x": 3.5, "y": 2},
+ {"matrix": [2, 4], "x": 4.5, "y": 2},
+ {"matrix": [2, 5], "x": 5.5, "y": 2},
+ {"matrix": [2, 6], "x": 6.5, "y": 2},
+ {"matrix": [2, 7], "x": 7.5, "y": 2},
+ {"matrix": [2, 8], "x": 8.5, "y": 2},
+ {"matrix": [2, 9], "x": 9.5, "y": 2},
+ {"matrix": [2, 10], "x": 10.5, "y": 2},
+ {"matrix": [2, 11], "x": 11.5, "y": 2},
+ {"matrix": [2, 12], "x": 12.5, "y": 2},
+ {"matrix": [2, 14], "x": 13.5, "y": 2, "w": 1.5},
+ {"matrix": [2, 15], "x": 15, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3},
+ {"matrix": [3, 2], "x": 2.75, "y": 3},
+ {"matrix": [3, 3], "x": 3.75, "y": 3},
+ {"matrix": [3, 4], "x": 4.75, "y": 3},
+ {"matrix": [3, 5], "x": 5.75, "y": 3},
+ {"matrix": [3, 6], "x": 6.75, "y": 3},
+ {"matrix": [3, 7], "x": 7.75, "y": 3},
+ {"matrix": [3, 8], "x": 8.75, "y": 3},
+ {"matrix": [3, 9], "x": 9.75, "y": 3},
+ {"matrix": [3, 10], "x": 10.75, "y": 3},
+ {"matrix": [3, 11], "x": 11.75, "y": 3},
+ {"matrix": [3, 13], "x": 12.75, "y": 3, "w": 2.25},
+ {"matrix": [3, 15], "x": 15, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4},
+ {"matrix": [4, 3], "x": 3.25, "y": 4},
+ {"matrix": [4, 4], "x": 4.25, "y": 4},
+ {"matrix": [4, 5], "x": 5.25, "y": 4},
+ {"matrix": [4, 6], "x": 6.25, "y": 4},
+ {"matrix": [4, 7], "x": 7.25, "y": 4},
+ {"matrix": [4, 8], "x": 8.25, "y": 4},
+ {"matrix": [4, 9], "x": 9.25, "y": 4},
+ {"matrix": [4, 10], "x": 10.25, "y": 4},
+ {"matrix": [4, 11], "x": 11.25, "y": 4},
+ {"matrix": [4, 12], "x": 12.25, "y": 4, "w": 1.75},
+ {"matrix": [4, 14], "x": 14, "y": 4},
+ {"matrix": [4, 15], "x": 15, "y": 4},
+
+ {"matrix": [5, 0], "x": 0, "y": 5, "w": 1.25},
+ {"matrix": [5, 1], "x": 1.25, "y": 5, "w": 1.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5, "w": 1.25},
+ {"matrix": [5, 6], "x": 3.75, "y": 5, "w": 6.25},
+ {"matrix": [5, 10], "x": 10, "y": 5},
+ {"matrix": [5, 11], "x": 11, "y": 5},
+ {"matrix": [5, 12], "x": 12, "y": 5},
+ {"matrix": [5, 13], "x": 13, "y": 5},
+ {"matrix": [5, 14], "x": 14, "y": 5},
+ {"matrix": [5, 15], "x": 15, "y": 5}
+ ]
+ },
+ "LAYOUT_75_ansi_wkl": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
+ {"matrix": [0, 15], "x": 15, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [1, 6], "x": 6, "y": 1},
+ {"matrix": [1, 7], "x": 7, "y": 1},
+ {"matrix": [1, 8], "x": 8, "y": 1},
+ {"matrix": [1, 9], "x": 9, "y": 1},
+ {"matrix": [1, 10], "x": 10, "y": 1},
+ {"matrix": [1, 11], "x": 11, "y": 1},
+ {"matrix": [1, 12], "x": 12, "y": 1},
+ {"matrix": [1, 13], "x": 13, "y": 1, "w": 2},
+ {"matrix": [1, 15], "x": 15, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2},
+ {"matrix": [2, 2], "x": 2.5, "y": 2},
+ {"matrix": [2, 3], "x": 3.5, "y": 2},
+ {"matrix": [2, 4], "x": 4.5, "y": 2},
+ {"matrix": [2, 5], "x": 5.5, "y": 2},
+ {"matrix": [2, 6], "x": 6.5, "y": 2},
+ {"matrix": [2, 7], "x": 7.5, "y": 2},
+ {"matrix": [2, 8], "x": 8.5, "y": 2},
+ {"matrix": [2, 9], "x": 9.5, "y": 2},
+ {"matrix": [2, 10], "x": 10.5, "y": 2},
+ {"matrix": [2, 11], "x": 11.5, "y": 2},
+ {"matrix": [2, 12], "x": 12.5, "y": 2},
+ {"matrix": [2, 14], "x": 13.5, "y": 2, "w": 1.5},
+ {"matrix": [2, 15], "x": 15, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3},
+ {"matrix": [3, 2], "x": 2.75, "y": 3},
+ {"matrix": [3, 3], "x": 3.75, "y": 3},
+ {"matrix": [3, 4], "x": 4.75, "y": 3},
+ {"matrix": [3, 5], "x": 5.75, "y": 3},
+ {"matrix": [3, 6], "x": 6.75, "y": 3},
+ {"matrix": [3, 7], "x": 7.75, "y": 3},
+ {"matrix": [3, 8], "x": 8.75, "y": 3},
+ {"matrix": [3, 9], "x": 9.75, "y": 3},
+ {"matrix": [3, 10], "x": 10.75, "y": 3},
+ {"matrix": [3, 11], "x": 11.75, "y": 3},
+ {"matrix": [3, 13], "x": 12.75, "y": 3, "w": 2.25},
+ {"matrix": [3, 15], "x": 15, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4},
+ {"matrix": [4, 3], "x": 3.25, "y": 4},
+ {"matrix": [4, 4], "x": 4.25, "y": 4},
+ {"matrix": [4, 5], "x": 5.25, "y": 4},
+ {"matrix": [4, 6], "x": 6.25, "y": 4},
+ {"matrix": [4, 7], "x": 7.25, "y": 4},
+ {"matrix": [4, 8], "x": 8.25, "y": 4},
+ {"matrix": [4, 9], "x": 9.25, "y": 4},
+ {"matrix": [4, 10], "x": 10.25, "y": 4},
+ {"matrix": [4, 11], "x": 11.25, "y": 4},
+ {"matrix": [4, 12], "x": 12.25, "y": 4, "w": 1.75},
+ {"matrix": [4, 14], "x": 14, "y": 4},
+ {"matrix": [4, 15], "x": 15, "y": 4},
+
+ {"matrix": [5, 0], "x": 0, "y": 5, "w": 1.5},
+ {"matrix": [5, 1], "x": 1.5, "y": 5, "w": 1.5},
+ {"matrix": [5, 6], "x": 3, "y": 5, "w": 7},
+ {"matrix": [5, 10], "x": 10, "y": 5, "w": 1.5},
+ {"matrix": [5, 12], "x": 11.5, "y": 5, "w": 1.5},
+ {"matrix": [5, 13], "x": 13, "y": 5},
+ {"matrix": [5, 14], "x": 14, "y": 5},
+ {"matrix": [5, 15], "x": 15, "y": 5}
+ ]
+ },
+ "LAYOUT_75_ansi_wkl_split_bs": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
+ {"matrix": [0, 15], "x": 15, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [1, 6], "x": 6, "y": 1},
+ {"matrix": [1, 7], "x": 7, "y": 1},
+ {"matrix": [1, 8], "x": 8, "y": 1},
+ {"matrix": [1, 9], "x": 9, "y": 1},
+ {"matrix": [1, 10], "x": 10, "y": 1},
+ {"matrix": [1, 11], "x": 11, "y": 1},
+ {"matrix": [1, 12], "x": 12, "y": 1},
+ {"matrix": [1, 13], "x": 13, "y": 1},
+ {"matrix": [1, 14], "x": 14, "y": 1},
+ {"matrix": [1, 15], "x": 15, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2},
+ {"matrix": [2, 2], "x": 2.5, "y": 2},
+ {"matrix": [2, 3], "x": 3.5, "y": 2},
+ {"matrix": [2, 4], "x": 4.5, "y": 2},
+ {"matrix": [2, 5], "x": 5.5, "y": 2},
+ {"matrix": [2, 6], "x": 6.5, "y": 2},
+ {"matrix": [2, 7], "x": 7.5, "y": 2},
+ {"matrix": [2, 8], "x": 8.5, "y": 2},
+ {"matrix": [2, 9], "x": 9.5, "y": 2},
+ {"matrix": [2, 10], "x": 10.5, "y": 2},
+ {"matrix": [2, 11], "x": 11.5, "y": 2},
+ {"matrix": [2, 12], "x": 12.5, "y": 2},
+ {"matrix": [2, 14], "x": 13.5, "y": 2, "w": 1.5},
+ {"matrix": [2, 15], "x": 15, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3},
+ {"matrix": [3, 2], "x": 2.75, "y": 3},
+ {"matrix": [3, 3], "x": 3.75, "y": 3},
+ {"matrix": [3, 4], "x": 4.75, "y": 3},
+ {"matrix": [3, 5], "x": 5.75, "y": 3},
+ {"matrix": [3, 6], "x": 6.75, "y": 3},
+ {"matrix": [3, 7], "x": 7.75, "y": 3},
+ {"matrix": [3, 8], "x": 8.75, "y": 3},
+ {"matrix": [3, 9], "x": 9.75, "y": 3},
+ {"matrix": [3, 10], "x": 10.75, "y": 3},
+ {"matrix": [3, 11], "x": 11.75, "y": 3},
+ {"matrix": [3, 13], "x": 12.75, "y": 3, "w": 2.25},
+ {"matrix": [3, 15], "x": 15, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4},
+ {"matrix": [4, 3], "x": 3.25, "y": 4},
+ {"matrix": [4, 4], "x": 4.25, "y": 4},
+ {"matrix": [4, 5], "x": 5.25, "y": 4},
+ {"matrix": [4, 6], "x": 6.25, "y": 4},
+ {"matrix": [4, 7], "x": 7.25, "y": 4},
+ {"matrix": [4, 8], "x": 8.25, "y": 4},
+ {"matrix": [4, 9], "x": 9.25, "y": 4},
+ {"matrix": [4, 10], "x": 10.25, "y": 4},
+ {"matrix": [4, 11], "x": 11.25, "y": 4},
+ {"matrix": [4, 12], "x": 12.25, "y": 4, "w": 1.75},
+ {"matrix": [4, 14], "x": 14, "y": 4},
+ {"matrix": [4, 15], "x": 15, "y": 4},
+
+ {"matrix": [5, 0], "x": 0, "y": 5, "w": 1.5},
+ {"matrix": [5, 1], "x": 1.5, "y": 5, "w": 1.5},
+ {"matrix": [5, 6], "x": 3, "y": 5, "w": 7},
+ {"matrix": [5, 10], "x": 10, "y": 5, "w": 1.5},
+ {"matrix": [5, 12], "x": 11.5, "y": 5, "w": 1.5},
+ {"matrix": [5, 13], "x": 13, "y": 5},
+ {"matrix": [5, 14], "x": 14, "y": 5},
+ {"matrix": [5, 15], "x": 15, "y": 5}
+ ]
+ },
+ "LAYOUT_75_iso": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
+ {"matrix": [0, 15], "x": 15, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [1, 6], "x": 6, "y": 1},
+ {"matrix": [1, 7], "x": 7, "y": 1},
+ {"matrix": [1, 8], "x": 8, "y": 1},
+ {"matrix": [1, 9], "x": 9, "y": 1},
+ {"matrix": [1, 10], "x": 10, "y": 1},
+ {"matrix": [1, 11], "x": 11, "y": 1},
+ {"matrix": [1, 12], "x": 12, "y": 1},
+ {"matrix": [1, 13], "x": 13, "y": 1, "w": 2},
+ {"matrix": [1, 15], "x": 15, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2},
+ {"matrix": [2, 2], "x": 2.5, "y": 2},
+ {"matrix": [2, 3], "x": 3.5, "y": 2},
+ {"matrix": [2, 4], "x": 4.5, "y": 2},
+ {"matrix": [2, 5], "x": 5.5, "y": 2},
+ {"matrix": [2, 6], "x": 6.5, "y": 2},
+ {"matrix": [2, 7], "x": 7.5, "y": 2},
+ {"matrix": [2, 8], "x": 8.5, "y": 2},
+ {"matrix": [2, 9], "x": 9.5, "y": 2},
+ {"matrix": [2, 10], "x": 10.5, "y": 2},
+ {"matrix": [2, 11], "x": 11.5, "y": 2},
+ {"matrix": [2, 12], "x": 12.5, "y": 2},
+ {"matrix": [2, 15], "x": 15, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3},
+ {"matrix": [3, 2], "x": 2.75, "y": 3},
+ {"matrix": [3, 3], "x": 3.75, "y": 3},
+ {"matrix": [3, 4], "x": 4.75, "y": 3},
+ {"matrix": [3, 5], "x": 5.75, "y": 3},
+ {"matrix": [3, 6], "x": 6.75, "y": 3},
+ {"matrix": [3, 7], "x": 7.75, "y": 3},
+ {"matrix": [3, 8], "x": 8.75, "y": 3},
+ {"matrix": [3, 9], "x": 9.75, "y": 3},
+ {"matrix": [3, 10], "x": 10.75, "y": 3},
+ {"matrix": [3, 11], "x": 11.75, "y": 3},
+ {"matrix": [3, 12], "x": 12.75, "y": 3},
+ {"matrix": [2, 14], "x": 13.75, "y": 2, "w": 1.25, "h": 2},
+ {"matrix": [3, 15], "x": 15, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4},
+ {"matrix": [4, 2], "x": 2.25, "y": 4},
+ {"matrix": [4, 3], "x": 3.25, "y": 4},
+ {"matrix": [4, 4], "x": 4.25, "y": 4},
+ {"matrix": [4, 5], "x": 5.25, "y": 4},
+ {"matrix": [4, 6], "x": 6.25, "y": 4},
+ {"matrix": [4, 7], "x": 7.25, "y": 4},
+ {"matrix": [4, 8], "x": 8.25, "y": 4},
+ {"matrix": [4, 9], "x": 9.25, "y": 4},
+ {"matrix": [4, 10], "x": 10.25, "y": 4},
+ {"matrix": [4, 11], "x": 11.25, "y": 4},
+ {"matrix": [4, 12], "x": 12.25, "y": 4, "w": 1.75},
+ {"matrix": [4, 14], "x": 14, "y": 4},
+ {"matrix": [4, 15], "x": 15, "y": 4},
+
+ {"matrix": [5, 0], "x": 0, "y": 5, "w": 1.25},
+ {"matrix": [5, 1], "x": 1.25, "y": 5, "w": 1.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5, "w": 1.25},
+ {"matrix": [5, 6], "x": 3.75, "y": 5, "w": 6.25},
+ {"matrix": [5, 10], "x": 10, "y": 5},
+ {"matrix": [5, 11], "x": 11, "y": 5},
+ {"matrix": [5, 12], "x": 12, "y": 5},
+ {"matrix": [5, 13], "x": 13, "y": 5},
+ {"matrix": [5, 14], "x": 14, "y": 5},
+ {"matrix": [5, 15], "x": 15, "y": 5}
+ ]
+ },
+ "LAYOUT_75_iso_split_bs": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
+ {"matrix": [0, 15], "x": 15, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [1, 6], "x": 6, "y": 1},
+ {"matrix": [1, 7], "x": 7, "y": 1},
+ {"matrix": [1, 8], "x": 8, "y": 1},
+ {"matrix": [1, 9], "x": 9, "y": 1},
+ {"matrix": [1, 10], "x": 10, "y": 1},
+ {"matrix": [1, 11], "x": 11, "y": 1},
+ {"matrix": [1, 12], "x": 12, "y": 1},
+ {"matrix": [1, 13], "x": 13, "y": 1},
+ {"matrix": [1, 14], "x": 14, "y": 1},
+ {"matrix": [1, 15], "x": 15, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2},
+ {"matrix": [2, 2], "x": 2.5, "y": 2},
+ {"matrix": [2, 3], "x": 3.5, "y": 2},
+ {"matrix": [2, 4], "x": 4.5, "y": 2},
+ {"matrix": [2, 5], "x": 5.5, "y": 2},
+ {"matrix": [2, 6], "x": 6.5, "y": 2},
+ {"matrix": [2, 7], "x": 7.5, "y": 2},
+ {"matrix": [2, 8], "x": 8.5, "y": 2},
+ {"matrix": [2, 9], "x": 9.5, "y": 2},
+ {"matrix": [2, 10], "x": 10.5, "y": 2},
+ {"matrix": [2, 11], "x": 11.5, "y": 2},
+ {"matrix": [2, 12], "x": 12.5, "y": 2},
+ {"matrix": [2, 15], "x": 15, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3},
+ {"matrix": [3, 2], "x": 2.75, "y": 3},
+ {"matrix": [3, 3], "x": 3.75, "y": 3},
+ {"matrix": [3, 4], "x": 4.75, "y": 3},
+ {"matrix": [3, 5], "x": 5.75, "y": 3},
+ {"matrix": [3, 6], "x": 6.75, "y": 3},
+ {"matrix": [3, 7], "x": 7.75, "y": 3},
+ {"matrix": [3, 8], "x": 8.75, "y": 3},
+ {"matrix": [3, 9], "x": 9.75, "y": 3},
+ {"matrix": [3, 10], "x": 10.75, "y": 3},
+ {"matrix": [3, 11], "x": 11.75, "y": 3},
+ {"matrix": [3, 12], "x": 12.75, "y": 3},
+ {"matrix": [2, 14], "x": 13.75, "y": 2, "w": 1.25, "h": 2},
+ {"matrix": [3, 15], "x": 15, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4},
+ {"matrix": [4, 2], "x": 2.25, "y": 4},
+ {"matrix": [4, 3], "x": 3.25, "y": 4},
+ {"matrix": [4, 4], "x": 4.25, "y": 4},
+ {"matrix": [4, 5], "x": 5.25, "y": 4},
+ {"matrix": [4, 6], "x": 6.25, "y": 4},
+ {"matrix": [4, 7], "x": 7.25, "y": 4},
+ {"matrix": [4, 8], "x": 8.25, "y": 4},
+ {"matrix": [4, 9], "x": 9.25, "y": 4},
+ {"matrix": [4, 10], "x": 10.25, "y": 4},
+ {"matrix": [4, 11], "x": 11.25, "y": 4},
+ {"matrix": [4, 12], "x": 12.25, "y": 4, "w": 1.75},
+ {"matrix": [4, 14], "x": 14, "y": 4},
+ {"matrix": [4, 15], "x": 15, "y": 4},
+
+ {"matrix": [5, 0], "x": 0, "y": 5, "w": 1.25},
+ {"matrix": [5, 1], "x": 1.25, "y": 5, "w": 1.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5, "w": 1.25},
+ {"matrix": [5, 6], "x": 3.75, "y": 5, "w": 6.25},
+ {"matrix": [5, 10], "x": 10, "y": 5},
+ {"matrix": [5, 11], "x": 11, "y": 5},
+ {"matrix": [5, 12], "x": 12, "y": 5},
+ {"matrix": [5, 13], "x": 13, "y": 5},
+ {"matrix": [5, 14], "x": 14, "y": 5},
+ {"matrix": [5, 15], "x": 15, "y": 5}
+ ]
+ },
+ "LAYOUT_75_iso_wkl": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
+ {"matrix": [0, 15], "x": 15, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [1, 6], "x": 6, "y": 1},
+ {"matrix": [1, 7], "x": 7, "y": 1},
+ {"matrix": [1, 8], "x": 8, "y": 1},
+ {"matrix": [1, 9], "x": 9, "y": 1},
+ {"matrix": [1, 10], "x": 10, "y": 1},
+ {"matrix": [1, 11], "x": 11, "y": 1},
+ {"matrix": [1, 12], "x": 12, "y": 1},
+ {"matrix": [1, 13], "x": 13, "y": 1, "w": 2},
+ {"matrix": [1, 15], "x": 15, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2},
+ {"matrix": [2, 2], "x": 2.5, "y": 2},
+ {"matrix": [2, 3], "x": 3.5, "y": 2},
+ {"matrix": [2, 4], "x": 4.5, "y": 2},
+ {"matrix": [2, 5], "x": 5.5, "y": 2},
+ {"matrix": [2, 6], "x": 6.5, "y": 2},
+ {"matrix": [2, 7], "x": 7.5, "y": 2},
+ {"matrix": [2, 8], "x": 8.5, "y": 2},
+ {"matrix": [2, 9], "x": 9.5, "y": 2},
+ {"matrix": [2, 10], "x": 10.5, "y": 2},
+ {"matrix": [2, 11], "x": 11.5, "y": 2},
+ {"matrix": [2, 12], "x": 12.5, "y": 2},
+ {"matrix": [2, 15], "x": 15, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3},
+ {"matrix": [3, 2], "x": 2.75, "y": 3},
+ {"matrix": [3, 3], "x": 3.75, "y": 3},
+ {"matrix": [3, 4], "x": 4.75, "y": 3},
+ {"matrix": [3, 5], "x": 5.75, "y": 3},
+ {"matrix": [3, 6], "x": 6.75, "y": 3},
+ {"matrix": [3, 7], "x": 7.75, "y": 3},
+ {"matrix": [3, 8], "x": 8.75, "y": 3},
+ {"matrix": [3, 9], "x": 9.75, "y": 3},
+ {"matrix": [3, 10], "x": 10.75, "y": 3},
+ {"matrix": [3, 11], "x": 11.75, "y": 3},
+ {"matrix": [3, 12], "x": 12.75, "y": 3},
+ {"matrix": [2, 14], "x": 13.75, "y": 2, "w": 1.25, "h": 2},
+ {"matrix": [3, 15], "x": 15, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4},
+ {"matrix": [4, 2], "x": 2.25, "y": 4},
+ {"matrix": [4, 3], "x": 3.25, "y": 4},
+ {"matrix": [4, 4], "x": 4.25, "y": 4},
+ {"matrix": [4, 5], "x": 5.25, "y": 4},
+ {"matrix": [4, 6], "x": 6.25, "y": 4},
+ {"matrix": [4, 7], "x": 7.25, "y": 4},
+ {"matrix": [4, 8], "x": 8.25, "y": 4},
+ {"matrix": [4, 9], "x": 9.25, "y": 4},
+ {"matrix": [4, 10], "x": 10.25, "y": 4},
+ {"matrix": [4, 11], "x": 11.25, "y": 4},
+ {"matrix": [4, 12], "x": 12.25, "y": 4, "w": 1.75},
+ {"matrix": [4, 14], "x": 14, "y": 4},
+ {"matrix": [4, 15], "x": 15, "y": 4},
+
+ {"matrix": [5, 0], "x": 0, "y": 5, "w": 1.5},
+ {"matrix": [5, 1], "x": 1.5, "y": 5, "w": 1.5},
+ {"matrix": [5, 6], "x": 3, "y": 5, "w": 7},
+ {"matrix": [5, 10], "x": 10, "y": 5, "w": 1.5},
+ {"matrix": [5, 12], "x": 11.5, "y": 5, "w": 1.5},
+ {"matrix": [5, 13], "x": 13, "y": 5},
+ {"matrix": [5, 14], "x": 14, "y": 5},
+ {"matrix": [5, 15], "x": 15, "y": 5}
+ ]
+ },
+ "LAYOUT_75_iso_wkl_split_bs": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
+ {"matrix": [0, 15], "x": 15, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [1, 6], "x": 6, "y": 1},
+ {"matrix": [1, 7], "x": 7, "y": 1},
+ {"matrix": [1, 8], "x": 8, "y": 1},
+ {"matrix": [1, 9], "x": 9, "y": 1},
+ {"matrix": [1, 10], "x": 10, "y": 1},
+ {"matrix": [1, 11], "x": 11, "y": 1},
+ {"matrix": [1, 12], "x": 12, "y": 1},
+ {"matrix": [1, 13], "x": 13, "y": 1},
+ {"matrix": [1, 14], "x": 14, "y": 1},
+ {"matrix": [1, 15], "x": 15, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2},
+ {"matrix": [2, 2], "x": 2.5, "y": 2},
+ {"matrix": [2, 3], "x": 3.5, "y": 2},
+ {"matrix": [2, 4], "x": 4.5, "y": 2},
+ {"matrix": [2, 5], "x": 5.5, "y": 2},
+ {"matrix": [2, 6], "x": 6.5, "y": 2},
+ {"matrix": [2, 7], "x": 7.5, "y": 2},
+ {"matrix": [2, 8], "x": 8.5, "y": 2},
+ {"matrix": [2, 9], "x": 9.5, "y": 2},
+ {"matrix": [2, 10], "x": 10.5, "y": 2},
+ {"matrix": [2, 11], "x": 11.5, "y": 2},
+ {"matrix": [2, 12], "x": 12.5, "y": 2},
+ {"matrix": [2, 15], "x": 15, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3},
+ {"matrix": [3, 2], "x": 2.75, "y": 3},
+ {"matrix": [3, 3], "x": 3.75, "y": 3},
+ {"matrix": [3, 4], "x": 4.75, "y": 3},
+ {"matrix": [3, 5], "x": 5.75, "y": 3},
+ {"matrix": [3, 6], "x": 6.75, "y": 3},
+ {"matrix": [3, 7], "x": 7.75, "y": 3},
+ {"matrix": [3, 8], "x": 8.75, "y": 3},
+ {"matrix": [3, 9], "x": 9.75, "y": 3},
+ {"matrix": [3, 10], "x": 10.75, "y": 3},
+ {"matrix": [3, 11], "x": 11.75, "y": 3},
+ {"matrix": [3, 12], "x": 12.75, "y": 3},
+ {"matrix": [2, 14], "x": 13.75, "y": 2, "w": 1.25, "h": 2},
+ {"matrix": [3, 15], "x": 15, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4},
+ {"matrix": [4, 2], "x": 2.25, "y": 4},
+ {"matrix": [4, 3], "x": 3.25, "y": 4},
+ {"matrix": [4, 4], "x": 4.25, "y": 4},
+ {"matrix": [4, 5], "x": 5.25, "y": 4},
+ {"matrix": [4, 6], "x": 6.25, "y": 4},
+ {"matrix": [4, 7], "x": 7.25, "y": 4},
+ {"matrix": [4, 8], "x": 8.25, "y": 4},
+ {"matrix": [4, 9], "x": 9.25, "y": 4},
+ {"matrix": [4, 10], "x": 10.25, "y": 4},
+ {"matrix": [4, 11], "x": 11.25, "y": 4},
+ {"matrix": [4, 12], "x": 12.25, "y": 4, "w": 1.75},
+ {"matrix": [4, 14], "x": 14, "y": 4},
+ {"matrix": [4, 15], "x": 15, "y": 4},
+
+ {"matrix": [5, 0], "x": 0, "y": 5, "w": 1.5},
+ {"matrix": [5, 1], "x": 1.5, "y": 5, "w": 1.5},
+ {"matrix": [5, 6], "x": 3, "y": 5, "w": 7},
+ {"matrix": [5, 10], "x": 10, "y": 5, "w": 1.5},
+ {"matrix": [5, 12], "x": 11.5, "y": 5, "w": 1.5},
+ {"matrix": [5, 13], "x": 13, "y": 5},
+ {"matrix": [5, 14], "x": 14, "y": 5},
+ {"matrix": [5, 15], "x": 15, "y": 5}
+ ]
}
}
}
diff --git a/keyboards/mechlovin/olly/octagon/keymaps/default/keymap.c b/keyboards/mechlovin/olly/octagon/keymaps/default/keymap.c
index 353f5f5d6d..19cd554ac3 100644
--- a/keyboards/mechlovin/olly/octagon/keymaps/default/keymap.c
+++ b/keyboards/mechlovin/olly/octagon/keymaps/default/keymap.c
@@ -16,12 +16,12 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_split_bs(
+ [0] = LAYOUT_all(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_PAUS, KC_DEL,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_HOME,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGDN,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, KC_UP, KC_END,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, _______, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
- )
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
};
diff --git a/keyboards/mechlovin/olly/octagon/matrix_diagram.md b/keyboards/mechlovin/olly/octagon/matrix_diagram.md
new file mode 100644
index 0000000000..426e0691d1
--- /dev/null
+++ b/keyboards/mechlovin/olly/octagon/matrix_diagram.md
@@ -0,0 +1,26 @@
+# Matrix Diagram for Mechlovin Olly Octagon
+
+```
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+│00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │0E │0F │
+├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤ ┌───────┐
+│10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │1D │1E │1F │ │1D │ 2u Backspace
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┼───┤ └─┬─────┤
+│20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2C │2E │2F │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤ ┌──┴┐2E │ ISO Enter
+│30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3D │3F │ │3C │ │
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤ └───┴────┘
+│40 │41 │42 │43 │44 │45 │46 │47 │48 │49 │4A │4B │4C │4E │4F │
+├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┼───┼───┤
+│50 │51 │52 │56 │5A │5B │5C │5D │5E │5F │
+└────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┘
+┌────────┐
+│40 │ 2.25u LShift
+└────────┘
+┌────┬───┬────┬────────────────────────┬────┬───┬───┬───┬───┬───┐
+│50 │51 │52 │56 │5A │5B │5C │5D │5E │5F │ Alternative
+└────┴───┴────┴────────────────────────┴────┴───┴───┴───┴───┴───┘
+┌─────┬─────┬───────────────────────────┬─────┬─────┬───┬───┬───┐
+│50 │51 │56 │5A │5C │5D │5E │5F │ WKL
+└─────┴─────┴───────────────────────────┴─────┴─────┴───┴───┴───┘
+```
diff --git a/keyboards/mechlovin/olly/orion/keyboard.json b/keyboards/mechlovin/olly/orion/keyboard.json
index 2780e21949..408d904899 100644
--- a/keyboards/mechlovin/olly/orion/keyboard.json
+++ b/keyboards/mechlovin/olly/orion/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Olly Orion",
"manufacturer": "Mechlovin.Studio",
- "url": "",
"maintainer": "Mechlovin' Studio",
"usb": {
"vid": "0x4D4C",
diff --git a/keyboards/mechlovin/pisces/keyboard.json b/keyboards/mechlovin/pisces/keyboard.json
index 37915826e6..b24afb6465 100644
--- a/keyboards/mechlovin/pisces/keyboard.json
+++ b/keyboards/mechlovin/pisces/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Pisces65",
"manufacturer": "Team.Mechlovin",
- "url": "",
"maintainer": "mechlovin",
"usb": {
"vid": "0x4D4C",
diff --git a/keyboards/mechlovin/serratus/keyboard.json b/keyboards/mechlovin/serratus/keyboard.json
index c283c48a35..8cf0778c1d 100644
--- a/keyboards/mechlovin/serratus/keyboard.json
+++ b/keyboards/mechlovin/serratus/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Serratus Rev.1",
"manufacturer": "Mechlovin Studio",
- "url": "",
"maintainer": "Mechlovin' Studio",
"usb": {
"vid": "0x4D4C",
diff --git a/keyboards/mechlovin/th1800/keyboard.json b/keyboards/mechlovin/th1800/keyboard.json
index 66b7487545..8162deca81 100644
--- a/keyboards/mechlovin/th1800/keyboard.json
+++ b/keyboards/mechlovin/th1800/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "th-1800",
"manufacturer": "Team Mechlovin",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4D4C",
diff --git a/keyboards/mechlovin/zed1800/info.json b/keyboards/mechlovin/zed1800/info.json
index 9de42c2442..aecaf6d922 100644
--- a/keyboards/mechlovin/zed1800/info.json
+++ b/keyboards/mechlovin/zed1800/info.json
@@ -1,6 +1,5 @@
{
"manufacturer": "Mechlovin Studio",
- "url": "",
"maintainer": "Mechlovin' Studio",
"usb": {
"vid": "0x4D4C",
diff --git a/keyboards/mechlovin/zed60/keyboard.json b/keyboards/mechlovin/zed60/keyboard.json
index 136170eec6..480517a301 100644
--- a/keyboards/mechlovin/zed60/keyboard.json
+++ b/keyboards/mechlovin/zed60/keyboard.json
@@ -38,7 +38,6 @@
"saturation_steps": 8,
"sleep": true
},
- "url": "",
"usb": {
"device_version": "0.0.1",
"pid": "0x0602",
diff --git a/keyboards/mechlovin/zed65/mono_led/keyboard.json b/keyboards/mechlovin/zed65/mono_led/keyboard.json
index 763fbe9f4c..e33db35a7a 100644
--- a/keyboards/mechlovin/zed65/mono_led/keyboard.json
+++ b/keyboards/mechlovin/zed65/mono_led/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Zed65-MonoLED",
"manufacturer": "Mechlovin Studio",
- "url": "",
"maintainer": "Mechlovin' Studio",
"usb": {
"vid": "0x4D4C",
diff --git a/keyboards/mechlovin/zed65/no_backlight/cor65/keyboard.json b/keyboards/mechlovin/zed65/no_backlight/cor65/keyboard.json
index 4b3ed831c5..56103e44db 100644
--- a/keyboards/mechlovin/zed65/no_backlight/cor65/keyboard.json
+++ b/keyboards/mechlovin/zed65/no_backlight/cor65/keyboard.json
@@ -11,7 +11,6 @@
"cols": ["B11", "B10", "B2", "B1", "B0", "A6", "A5", "A4", "A3", "A2", "C13", "B7", "B6", "B5", "B4", "B3"],
"rows": ["B12", "B13", "B14", "B15", "A1"]
},
- "url": "",
"usb": {
"device_version": "0.0.1",
"pid": "0x6504",
diff --git a/keyboards/mechlovin/zed65/no_backlight/retro66/keyboard.json b/keyboards/mechlovin/zed65/no_backlight/retro66/keyboard.json
index 49ed44f0a1..8fcfde5db9 100644
--- a/keyboards/mechlovin/zed65/no_backlight/retro66/keyboard.json
+++ b/keyboards/mechlovin/zed65/no_backlight/retro66/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Retro66",
"manufacturer": "Mechlovin Studio",
- "url": "",
"maintainer": "Mechlovin' Studio",
"usb": {
"vid": "0x4D4C",
diff --git a/keyboards/mechlovin/zed65/no_backlight/wearhaus66/keyboard.json b/keyboards/mechlovin/zed65/no_backlight/wearhaus66/keyboard.json
index c9c9e0ddb1..c2b75fd1e4 100644
--- a/keyboards/mechlovin/zed65/no_backlight/wearhaus66/keyboard.json
+++ b/keyboards/mechlovin/zed65/no_backlight/wearhaus66/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Wearhaus66",
"manufacturer": "Mechlovin Studio",
- "url": "",
"maintainer": "mechlovin",
"usb": {
"vid": "0x4D4C",
diff --git a/keyboards/mechwild/bde/info.json b/keyboards/mechwild/bde/info.json
index 918c792aa7..edecde1eba 100644
--- a/keyboards/mechwild/bde/info.json
+++ b/keyboards/mechwild/bde/info.json
@@ -10,8 +10,7 @@
},
"development_board": "promicro",
"rgblight": {
- "sleep": true,
- "max_brightness": 255
+ "sleep": true
},
"tapping": {
"tap_keycode_delay": 10,
diff --git a/keyboards/mechwild/bde/rev2/keyboard.json b/keyboards/mechwild/bde/rev2/keyboard.json
index 932f99f0e9..b166934e1e 100644
--- a/keyboards/mechwild/bde/rev2/keyboard.json
+++ b/keyboards/mechwild/bde/rev2/keyboard.json
@@ -34,7 +34,6 @@
"animations": {
"rainbow_swirl": true
},
- "hue_steps": 8,
"saturation_steps": 8,
"brightness_steps": 8
},
diff --git a/keyboards/mechwild/sugarglider/info.json b/keyboards/mechwild/sugarglider/info.json
index 80004f35d1..0b796f7c21 100644
--- a/keyboards/mechwild/sugarglider/info.json
+++ b/keyboards/mechwild/sugarglider/info.json
@@ -18,8 +18,6 @@
},
"rgblight": {
"led_count": 10,
- "max_brightness": 255,
- "hue_steps": 8,
"saturation_steps": 8,
"brightness_steps": 8,
"animations": {
diff --git a/keyboards/meetlab/kafka60/keyboard.json b/keyboards/meetlab/kafka60/keyboard.json
index 5dbf3f5642..2c7c41b23d 100644
--- a/keyboards/meetlab/kafka60/keyboard.json
+++ b/keyboards/meetlab/kafka60/keyboard.json
@@ -13,7 +13,6 @@
"cols": ["A15", "B3", "B4", "B5", "B6", "B7", "B8", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "B11"],
"rows": ["B15", "A8", "B13", "B12", "A9"]
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0xBF06",
diff --git a/keyboards/meetlab/kafka68/keyboard.json b/keyboards/meetlab/kafka68/keyboard.json
index 3836edc3c9..418749ed43 100644
--- a/keyboards/meetlab/kafka68/keyboard.json
+++ b/keyboards/meetlab/kafka68/keyboard.json
@@ -14,7 +14,6 @@
"cols": ["A10", "B7", "B6", "B5", "B4", "B3", "A15", "B0", "A7", "A6", "A5", "A4", "A3", "B1", "B10", "B11"],
"rows": ["B13", "B14", "B15", "A8", "A9"]
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0xAA07",
diff --git a/keyboards/meetlab/kafkasplit/keyboard.json b/keyboards/meetlab/kafkasplit/keyboard.json
index 375d4f7a03..0ac90a56fb 100644
--- a/keyboards/meetlab/kafkasplit/keyboard.json
+++ b/keyboards/meetlab/kafkasplit/keyboard.json
@@ -143,7 +143,6 @@
}
}
},
- "url": "",
"usb": {
"device_version": "0.0.1",
"pid": "0xBFC2",
diff --git a/keyboards/meetlab/kalice/keyboard.json b/keyboards/meetlab/kalice/keyboard.json
index 5e53fe4904..eb91d64466 100644
--- a/keyboards/meetlab/kalice/keyboard.json
+++ b/keyboards/meetlab/kalice/keyboard.json
@@ -31,7 +31,6 @@
"led_count": 11,
"saturation_steps": 8
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0xBB04",
diff --git a/keyboards/meetlab/rena/keyboard.json b/keyboards/meetlab/rena/keyboard.json
index cf28f6d5f0..8787fb0ee8 100644
--- a/keyboards/meetlab/rena/keyboard.json
+++ b/keyboards/meetlab/rena/keyboard.json
@@ -39,7 +39,6 @@
"led_count": 1,
"saturation_steps": 8
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0xAB06",
diff --git a/keyboards/mehkee96/keyboard.json b/keyboards/mehkee96/keyboard.json
index 4f4d4853c8..326e91670d 100644
--- a/keyboards/mehkee96/keyboard.json
+++ b/keyboards/mehkee96/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "96KEE",
"manufacturer": "Mehkee",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x20A0",
diff --git a/keyboards/melgeek/mach80/info.json b/keyboards/melgeek/mach80/info.json
index ade831fc36..d8a565b2e4 100755
--- a/keyboards/melgeek/mach80/info.json
+++ b/keyboards/melgeek/mach80/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Mach80",
"manufacturer": "MelGeek",
- "url": "",
"maintainer": "melgeek001365",
"usb": {
"vid": "0xEDED",
diff --git a/keyboards/melgeek/mj61/info.json b/keyboards/melgeek/mj61/info.json
index d34dc59364..9a3e86d5e0 100644
--- a/keyboards/melgeek/mj61/info.json
+++ b/keyboards/melgeek/mj61/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "MJ61",
"manufacturer": "MelGeek",
- "url": "",
"maintainer": "melgeek001365",
"usb": {
"vid": "0xEDED",
diff --git a/keyboards/melgeek/mj63/info.json b/keyboards/melgeek/mj63/info.json
index c81bf9f867..af59bf8a59 100644
--- a/keyboards/melgeek/mj63/info.json
+++ b/keyboards/melgeek/mj63/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "MJ63",
"manufacturer": "MelGeek",
- "url": "",
"maintainer": "melgeek001365",
"usb": {
"vid": "0xEDED",
diff --git a/keyboards/melgeek/mj64/info.json b/keyboards/melgeek/mj64/info.json
index 731996ef84..25d908db5d 100644
--- a/keyboards/melgeek/mj64/info.json
+++ b/keyboards/melgeek/mj64/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "MJ64",
"manufacturer": "MelGeek",
- "url": "",
"maintainer": "melgeek001365",
"usb": {
"vid": "0xEDED",
diff --git a/keyboards/melgeek/mj65/rev3/keyboard.json b/keyboards/melgeek/mj65/rev3/keyboard.json
index adf0ef94bc..a4513b45e7 100644
--- a/keyboards/melgeek/mj65/rev3/keyboard.json
+++ b/keyboards/melgeek/mj65/rev3/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "MJ65",
"manufacturer": "MelGeek",
- "url": "",
"maintainer": "melgeek001365",
"usb": {
"vid": "0xEDED",
diff --git a/keyboards/melgeek/mj6xy/info.json b/keyboards/melgeek/mj6xy/info.json
index 0dd1212354..3b13337aae 100755
--- a/keyboards/melgeek/mj6xy/info.json
+++ b/keyboards/melgeek/mj6xy/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "MJ6XY",
"manufacturer": "MelGeek",
- "url": "",
"maintainer": "melgeek001365",
"usb": {
"vid": "0xEDED",
diff --git a/keyboards/melgeek/mojo68/rev1/keyboard.json b/keyboards/melgeek/mojo68/rev1/keyboard.json
index 7f21839292..d6388b089d 100755
--- a/keyboards/melgeek/mojo68/rev1/keyboard.json
+++ b/keyboards/melgeek/mojo68/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "MoJo68",
"manufacturer": "MelGeek",
- "url": "",
"maintainer": "melgeek001365",
"usb": {
"vid": "0xEDED",
diff --git a/keyboards/melgeek/mojo75/rev1/keyboard.json b/keyboards/melgeek/mojo75/rev1/keyboard.json
index a1b93afb69..dbc6cbceee 100644
--- a/keyboards/melgeek/mojo75/rev1/keyboard.json
+++ b/keyboards/melgeek/mojo75/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "MoJo75",
"manufacturer": "MelGeek",
- "url": "",
"maintainer": "melgeek001365",
"usb": {
"vid": "0xEDED",
diff --git a/keyboards/melgeek/tegic/rev1/keyboard.json b/keyboards/melgeek/tegic/rev1/keyboard.json
index 0a2e9306f6..c15a54b39f 100644
--- a/keyboards/melgeek/tegic/rev1/keyboard.json
+++ b/keyboards/melgeek/tegic/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "tegic",
"manufacturer": "MelGeek",
- "url": "",
"maintainer": "melgeek001365",
"usb": {
"vid": "0xEDED",
diff --git a/keyboards/melgeek/z70ultra/rev1/keyboard.json b/keyboards/melgeek/z70ultra/rev1/keyboard.json
index de1b1df646..8f79b395fc 100644
--- a/keyboards/melgeek/z70ultra/rev1/keyboard.json
+++ b/keyboards/melgeek/z70ultra/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Z70Ultra",
"manufacturer": "MelGeek",
- "url": "",
"maintainer": "melgeek001365",
"usb": {
"vid": "0xEDED",
diff --git a/keyboards/meme/keyboard.json b/keyboards/meme/keyboard.json
index 27acfc5a33..5be88543dd 100644
--- a/keyboards/meme/keyboard.json
+++ b/keyboards/meme/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Meme",
"manufacturer": "Switchmod Keyboards",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/merge/iso_macro/keyboard.json b/keyboards/merge/iso_macro/keyboard.json
index 1c6d905282..bdf3737906 100644
--- a/keyboards/merge/iso_macro/keyboard.json
+++ b/keyboards/merge/iso_macro/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "ISO Macro",
"manufacturer": "Merge",
- "url": "",
"maintainer": "duoshock",
"usb": {
"vid": "0x4D65",
diff --git a/keyboards/mexsistor/ludmila/keyboard.json b/keyboards/mexsistor/ludmila/keyboard.json
index 71202208c5..61c4cca2ab 100644
--- a/keyboards/mexsistor/ludmila/keyboard.json
+++ b/keyboards/mexsistor/ludmila/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Ludmila Macropad",
"manufacturer": "Kevin M.",
- "url": "",
"maintainer": "Kevin M.",
"usb": {
"vid": "0x69CC",
diff --git a/keyboards/miller/gm862/keyboard.json b/keyboards/miller/gm862/keyboard.json
index b8c32cf16a..210b37b7b0 100644
--- a/keyboards/miller/gm862/keyboard.json
+++ b/keyboards/miller/gm862/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "GM862",
"manufacturer": "MILLER",
- "url": "",
"maintainer": "MILLER",
"usb": {
"vid": "0x4B42",
diff --git a/keyboards/millet/doksin/keyboard.json b/keyboards/millet/doksin/keyboard.json
index 7a848662cd..a472eebc79 100644
--- a/keyboards/millet/doksin/keyboard.json
+++ b/keyboards/millet/doksin/keyboard.json
@@ -14,7 +14,6 @@
]
},
"processor": "atmega32u2",
- "url": "",
"usb": {
"device_version": "0.0.1",
"pid": "0x1919",
diff --git a/keyboards/mincedshon/ecila/keyboard.json b/keyboards/mincedshon/ecila/keyboard.json
index fe7173e34a..73e52b7590 100644
--- a/keyboards/mincedshon/ecila/keyboard.json
+++ b/keyboards/mincedshon/ecila/keyboard.json
@@ -45,7 +45,6 @@
"rows": ["E6", "B3", "B5", "B4", "D7"]
},
"processor": "atmega32u4",
- "url": "",
"layouts": {
"LAYOUT": {
"layout": [
diff --git a/keyboards/minimacro5/keyboard.json b/keyboards/minimacro5/keyboard.json
index 32be6abd5f..e500efa251 100644
--- a/keyboards/minimacro5/keyboard.json
+++ b/keyboards/minimacro5/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "miniMACRO5",
"manufacturer": "leafcutterlabs",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xCEEB",
diff --git a/keyboards/mint60/keyboard.json b/keyboards/mint60/keyboard.json
index c5bfe27365..9fa69f5a3c 100644
--- a/keyboards/mint60/keyboard.json
+++ b/keyboards/mint60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Mint60",
"manufacturer": "Eucalyn",
- "url": "",
"maintainer": "eucalyn",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/misterknife/knife66/keyboard.json b/keyboards/misterknife/knife66/keyboard.json
index 9e3d0c66b7..3670b8a07f 100644
--- a/keyboards/misterknife/knife66/keyboard.json
+++ b/keyboards/misterknife/knife66/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Knife66",
"manufacturer": "MisterKnife",
- "url": "",
"maintainer": "afewyards",
"usb": {
"vid": "0xAC11",
diff --git a/keyboards/misterknife/knife66_iso/keyboard.json b/keyboards/misterknife/knife66_iso/keyboard.json
index 88f8746109..3370afa1b5 100644
--- a/keyboards/misterknife/knife66_iso/keyboard.json
+++ b/keyboards/misterknife/knife66_iso/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Knife66 ISO",
"manufacturer": "MisterKnife",
- "url": "",
"maintainer": "afewyards",
"usb": {
"vid": "0xAC11",
diff --git a/keyboards/mitosis/keyboard.json b/keyboards/mitosis/keyboard.json
index c69d1d30cd..310c0ebd1a 100644
--- a/keyboards/mitosis/keyboard.json
+++ b/keyboards/mitosis/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Mitosis",
"manufacturer": "Unknown",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/miuni32/keyboard.json b/keyboards/miuni32/keyboard.json
index 0b52b058fa..b105d2f2b8 100644
--- a/keyboards/miuni32/keyboard.json
+++ b/keyboards/miuni32/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Miuni32",
"manufacturer": "Bigtuna.io",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/mk65/keyboard.json b/keyboards/mk65/keyboard.json
index 9135deaf19..0a768ece5e 100644
--- a/keyboards/mk65/keyboard.json
+++ b/keyboards/mk65/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "MK-65",
"manufacturer": "mangooo",
- "url": "",
"maintainer": "DeskDaily",
"usb": {
"vid": "0x5004",
@@ -34,10 +33,8 @@
},
"rgblight": {
"led_count": 7,
- "hue_steps": 8,
"saturation_steps": 8,
"brightness_steps": 8,
- "max_brightness": 255,
"sleep": true,
"animations": {
"alternating": true,
diff --git a/keyboards/mlego/m65/rev1/keyboard.json b/keyboards/mlego/m65/rev1/keyboard.json
index 2f77137eec..b763c2e2cf 100644
--- a/keyboards/mlego/m65/rev1/keyboard.json
+++ b/keyboards/mlego/m65/rev1/keyboard.json
@@ -42,7 +42,6 @@
"static_gradient": true,
"twinkle": true
},
- "hue_steps": 8,
"layers": {
"enabled": true
},
diff --git a/keyboards/mlego/m65/rev2/keyboard.json b/keyboards/mlego/m65/rev2/keyboard.json
index 0014767309..f07f1280a4 100644
--- a/keyboards/mlego/m65/rev2/keyboard.json
+++ b/keyboards/mlego/m65/rev2/keyboard.json
@@ -41,7 +41,6 @@
"static_gradient": true,
"twinkle": true
},
- "hue_steps": 8,
"layers": {
"enabled": true
},
diff --git a/keyboards/mlego/m65/rev3/keyboard.json b/keyboards/mlego/m65/rev3/keyboard.json
index 4b7980b63b..168a214a88 100644
--- a/keyboards/mlego/m65/rev3/keyboard.json
+++ b/keyboards/mlego/m65/rev3/keyboard.json
@@ -42,7 +42,6 @@
"static_gradient": true,
"twinkle": true
},
- "hue_steps": 8,
"layers": {
"enabled": true
},
diff --git a/keyboards/mlego/m65/rev4/keyboard.json b/keyboards/mlego/m65/rev4/keyboard.json
index ab2a708ba8..a83f363bb1 100644
--- a/keyboards/mlego/m65/rev4/keyboard.json
+++ b/keyboards/mlego/m65/rev4/keyboard.json
@@ -44,7 +44,6 @@
"static_gradient": true,
"twinkle": true
},
- "hue_steps": 8,
"layers": {
"enabled": true
},
diff --git a/keyboards/mmkzoo65/keyboard.json b/keyboards/mmkzoo65/keyboard.json
index f023f34ef0..6e1c33273c 100644
--- a/keyboards/mmkzoo65/keyboard.json
+++ b/keyboards/mmkzoo65/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "MMKZOO65",
"manufacturer": "MWStudio",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x7BA1",
diff --git a/keyboards/mode/m256ws/keyboard.json b/keyboards/mode/m256ws/keyboard.json
index 820ed536c2..3a754fe7db 100644
--- a/keyboards/mode/m256ws/keyboard.json
+++ b/keyboards/mode/m256ws/keyboard.json
@@ -36,7 +36,6 @@
"twinkle": true
}
},
- "url": "",
"usb": {
"device_version": "0.0.1",
"pid": "0x5753",
diff --git a/keyboards/mode/m60h/keyboard.json b/keyboards/mode/m60h/keyboard.json
index b33ea3a9c3..26095bb828 100644
--- a/keyboards/mode/m60h/keyboard.json
+++ b/keyboards/mode/m60h/keyboard.json
@@ -39,7 +39,6 @@
"max_brightness": 120,
"sleep": true
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0062",
diff --git a/keyboards/mode/m60h_f/keyboard.json b/keyboards/mode/m60h_f/keyboard.json
index 014472bc68..8a9a64ee65 100644
--- a/keyboards/mode/m60h_f/keyboard.json
+++ b/keyboards/mode/m60h_f/keyboard.json
@@ -39,7 +39,6 @@
"max_brightness": 120,
"sleep": true
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0061",
diff --git a/keyboards/mode/m60s/keyboard.json b/keyboards/mode/m60s/keyboard.json
index 6a03219427..4a435967d6 100644
--- a/keyboards/mode/m60s/keyboard.json
+++ b/keyboards/mode/m60s/keyboard.json
@@ -39,7 +39,6 @@
"max_brightness": 120,
"sleep": true
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0060",
diff --git a/keyboards/mode/m65ha_alpha/keyboard.json b/keyboards/mode/m65ha_alpha/keyboard.json
index cc5271b5c2..acf8845cd7 100644
--- a/keyboards/mode/m65ha_alpha/keyboard.json
+++ b/keyboards/mode/m65ha_alpha/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "SixtyFive HA",
"manufacturer": "Mode",
- "url": "",
"maintainer": "Gondolindrim",
"usb": {
"vid": "0x00DE",
diff --git a/keyboards/mode/m65hi_alpha/keyboard.json b/keyboards/mode/m65hi_alpha/keyboard.json
index c0c843d4de..f85e1f3756 100644
--- a/keyboards/mode/m65hi_alpha/keyboard.json
+++ b/keyboards/mode/m65hi_alpha/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "SixtyFive HI",
"manufacturer": "Mode",
- "url": "",
"maintainer": "Gondolindrim",
"usb": {
"vid": "0x00DE",
diff --git a/keyboards/mode/m65s/keyboard.json b/keyboards/mode/m65s/keyboard.json
index ae8df282ad..bd11e38bf4 100644
--- a/keyboards/mode/m65s/keyboard.json
+++ b/keyboards/mode/m65s/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "SixtyFive S",
"manufacturer": "Mode",
- "url": "",
"maintainer": "Gondolindrim",
"usb": {
"vid": "0x00DE",
diff --git a/keyboards/mode/m75h/keyboard.json b/keyboards/mode/m75h/keyboard.json
index 5d4d8249e6..6df6f28ab0 100644
--- a/keyboards/mode/m75h/keyboard.json
+++ b/keyboards/mode/m75h/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "M75H",
"manufacturer": "Mode",
- "url": "",
"maintainer": "Gondolindrim",
"usb": {
"vid": "0x00DE",
diff --git a/keyboards/mode/m75s/keyboard.json b/keyboards/mode/m75s/keyboard.json
index aff38dc622..f345874bbf 100644
--- a/keyboards/mode/m75s/keyboard.json
+++ b/keyboards/mode/m75s/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "75S",
"manufacturer": "Mode",
- "url": "",
"maintainer": "Gondolindrim",
"usb": {
"vid": "0x00DE",
diff --git a/keyboards/mode/m80v1/m80h/keyboard.json b/keyboards/mode/m80v1/m80h/keyboard.json
index dcebcb6d49..9b7eeb85d2 100644
--- a/keyboards/mode/m80v1/m80h/keyboard.json
+++ b/keyboards/mode/m80v1/m80h/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Eighty",
"manufacturer": "Mode",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x00DE",
diff --git a/keyboards/mode/m80v1/m80s/keyboard.json b/keyboards/mode/m80v1/m80s/keyboard.json
index 25bfd3c70a..4f93ef676c 100644
--- a/keyboards/mode/m80v1/m80s/keyboard.json
+++ b/keyboards/mode/m80v1/m80s/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Eighty",
"manufacturer": "Mode",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x00DE",
diff --git a/keyboards/mokey/ginkgo65/keyboard.json b/keyboards/mokey/ginkgo65/keyboard.json
index 311d91f2d3..bdee6ebf80 100644
--- a/keyboards/mokey/ginkgo65/keyboard.json
+++ b/keyboards/mokey/ginkgo65/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "ginkgo 65",
"manufacturer": "Mokey",
- "url": "",
"maintainer": "rhmokey",
"usb": {
"vid": "0x6653",
diff --git a/keyboards/mokey/ginkgo65hot/keyboard.json b/keyboards/mokey/ginkgo65hot/keyboard.json
index 1674607310..c42c2a87ff 100644
--- a/keyboards/mokey/ginkgo65hot/keyboard.json
+++ b/keyboards/mokey/ginkgo65hot/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "ginkgo65hot",
"manufacturer": "Mokey",
- "url": "",
"maintainer": "mokey",
"usb": {
"vid": "0x6653",
diff --git a/keyboards/mokey/ibis80/keyboard.json b/keyboards/mokey/ibis80/keyboard.json
index d6cd985d01..536de9aab6 100644
--- a/keyboards/mokey/ibis80/keyboard.json
+++ b/keyboards/mokey/ibis80/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "ibis 80",
"manufacturer": "Mokey",
- "url": "",
"maintainer": "Runheme",
"usb": {
"vid": "0x6653",
diff --git a/keyboards/mokey/luckycat70/keyboard.json b/keyboards/mokey/luckycat70/keyboard.json
index 2f9ab6a1e5..81d077f8a5 100644
--- a/keyboards/mokey/luckycat70/keyboard.json
+++ b/keyboards/mokey/luckycat70/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Lucky Cat 70",
"manufacturer": "qmk",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x6653",
diff --git a/keyboards/mokey/mokey12x2/keyboard.json b/keyboards/mokey/mokey12x2/keyboard.json
index 6f22429e72..489856a264 100644
--- a/keyboards/mokey/mokey12x2/keyboard.json
+++ b/keyboards/mokey/mokey12x2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Mokey12x2",
"manufacturer": "Mokey",
- "url": "",
"maintainer": "Mokey",
"development_board": "bluepill",
"diode_direction": "COL2ROW",
diff --git a/keyboards/mokey/mokey63/keyboard.json b/keyboards/mokey/mokey63/keyboard.json
index bebc600510..40b45bcd41 100644
--- a/keyboards/mokey/mokey63/keyboard.json
+++ b/keyboards/mokey/mokey63/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Mokey63",
"manufacturer": "Mokey",
- "url": "",
"maintainer": "mokey",
"usb": {
"vid": "0x6653",
diff --git a/keyboards/mokey/mokey64/keyboard.json b/keyboards/mokey/mokey64/keyboard.json
index 0234cf6292..fbc50d4fd8 100644
--- a/keyboards/mokey/mokey64/keyboard.json
+++ b/keyboards/mokey/mokey64/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Mokey64",
"manufacturer": "Mokey",
- "url": "",
"maintainer": "mokey",
"usb": {
"vid": "0x6653",
diff --git a/keyboards/mokey/xox70/keyboard.json b/keyboards/mokey/xox70/keyboard.json
index 4f8f5439f5..41980ed4ad 100644
--- a/keyboards/mokey/xox70/keyboard.json
+++ b/keyboards/mokey/xox70/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "XOX 70",
"manufacturer": "Mokey",
- "url": "",
"maintainer": "Mokey",
"usb": {
"vid": "0x6653",
diff --git a/keyboards/mokey/xox70hot/keyboard.json b/keyboards/mokey/xox70hot/keyboard.json
index 7d5f338b62..011e031ffe 100644
--- a/keyboards/mokey/xox70hot/keyboard.json
+++ b/keyboards/mokey/xox70hot/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "XOX 70 Hotswap",
"manufacturer": "Mokey",
- "url": "",
"maintainer": "rhmokey",
"usb": {
"vid": "0x6653",
diff --git a/keyboards/moky/moky67/keyboard.json b/keyboards/moky/moky67/keyboard.json
index 8737790b69..869dfc3389 100644
--- a/keyboards/moky/moky67/keyboard.json
+++ b/keyboards/moky/moky67/keyboard.json
@@ -1,7 +1,6 @@
{
"manufacturer": "moky",
"keyboard_name": "moky67",
- "url": "",
"processor": "WB32FQ95",
"bootloader": "wb32-dfu",
"usb": {
diff --git a/keyboards/moky/moky88/keyboard.json b/keyboards/moky/moky88/keyboard.json
index 38ed4dbd28..1db4c5247c 100644
--- a/keyboards/moky/moky88/keyboard.json
+++ b/keyboards/moky/moky88/keyboard.json
@@ -1,7 +1,6 @@
{
"manufacturer": "moky",
"keyboard_name": "moky88",
- "url": "",
"processor": "WB32FQ95",
"bootloader": "wb32-dfu",
"usb": {
diff --git a/keyboards/momoka_ergo/keyboard.json b/keyboards/momoka_ergo/keyboard.json
index a24430ee82..23e0535d61 100644
--- a/keyboards/momoka_ergo/keyboard.json
+++ b/keyboards/momoka_ergo/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Momoka Ergo",
"manufacturer": "StefanGrindelwald",
- "url": "",
"maintainer": "StefanGrindelwald",
"usb": {
"vid": "0x4F4D",
diff --git a/keyboards/momokai/aurora/keyboard.json b/keyboards/momokai/aurora/keyboard.json
index 84ecbdeb4a..572d302663 100644
--- a/keyboards/momokai/aurora/keyboard.json
+++ b/keyboards/momokai/aurora/keyboard.json
@@ -24,7 +24,6 @@
]
},
"processor": "atmega32u4",
- "url": "",
"usb": {
"device_version": "0.0.1",
"pid": "0x0009",
@@ -45,7 +44,6 @@
"rgb_matrix": {
"default": {
"animation": "solid_color",
- "hue": 0,
"sat": 0,
"val": 200
},
diff --git a/keyboards/momokai/tap_duo/keyboard.json b/keyboards/momokai/tap_duo/keyboard.json
index f5351dd031..7658a7c5c6 100644
--- a/keyboards/momokai/tap_duo/keyboard.json
+++ b/keyboards/momokai/tap_duo/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Tap Duo",
"manufacturer": "Momokai",
- "url": "",
"maintainer": "peepeetee",
"usb": {
"vid": "0x69F9",
@@ -14,7 +13,6 @@
"rgb_matrix": {
"default": {
"animation": "solid_color",
- "hue": 0,
"sat": 0,
"val": 200
},
diff --git a/keyboards/momokai/tap_trio/keyboard.json b/keyboards/momokai/tap_trio/keyboard.json
index f61de25c10..9ce41ff5ad 100644
--- a/keyboards/momokai/tap_trio/keyboard.json
+++ b/keyboards/momokai/tap_trio/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Tap Trio",
"manufacturer": "Momokai",
- "url": "",
"maintainer": "peepeetee",
"usb": {
"vid": "0x69F9",
@@ -14,7 +13,6 @@
"rgb_matrix": {
"default": {
"animation": "solid_color",
- "hue": 0,
"sat": 0,
"val": 200
},
diff --git a/keyboards/monarch/keyboard.json b/keyboards/monarch/keyboard.json
index c42db64a26..b7237ec613 100644
--- a/keyboards/monarch/keyboard.json
+++ b/keyboards/monarch/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Monarch",
"manufacturer": "DoCallMeKing",
- "url": "",
"maintainer": "Ramon Imbao",
"usb": {
"vid": "0x4011",
diff --git a/keyboards/monoflex60/keyboard.json b/keyboards/monoflex60/keyboard.json
index 4c6fca7524..9be4b39202 100644
--- a/keyboards/monoflex60/keyboard.json
+++ b/keyboards/monoflex60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Monoflex 60",
"manufacturer": "SantiGo Customs",
- "url": "",
"maintainer": "key10iq",
"usb": {
"vid": "0xDEB4",
diff --git a/keyboards/monsgeek/m1/m1.c b/keyboards/monsgeek/m1/m1.c
index 60479ab801..2f7365e562 100644
--- a/keyboards/monsgeek/m1/m1.c
+++ b/keyboards/monsgeek/m1/m1.c
@@ -190,7 +190,7 @@ bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
set_single_persistent_default_layer(MAC_B);
layer_state_set(1<<MAC_B);
keymap_config.no_gui = 0;
- eeconfig_update_keymap(keymap_config.raw);
+ eeconfig_update_keymap(&keymap_config);
}
return false;
case QK_RGB_MATRIX_TOGGLE:
diff --git a/keyboards/monsgeek/m3/m3.c b/keyboards/monsgeek/m3/m3.c
index 4dd9a55f3c..bf5e038b3d 100644
--- a/keyboards/monsgeek/m3/m3.c
+++ b/keyboards/monsgeek/m3/m3.c
@@ -163,7 +163,7 @@ bool process_record_kb(uint16_t keycode, keyrecord_t* record) {
if (record->event.pressed) {
set_single_persistent_default_layer(MAC_B);
keymap_config.no_gui = 0;
- eeconfig_update_keymap(keymap_config.raw);
+ eeconfig_update_keymap(&keymap_config);
}
return false;
case GU_TOGG:
diff --git a/keyboards/mothwing/keyboard.json b/keyboards/mothwing/keyboard.json
index c52d9df00e..5a584c7cb2 100644
--- a/keyboards/mothwing/keyboard.json
+++ b/keyboards/mothwing/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "mothwing",
"manufacturer": "Luana co.ltd.",
- "url": "",
"maintainer": "tan-t",
"usb": {
"vid": "0x4D77",
diff --git a/keyboards/mountainblocks/mb17/keyboard.json b/keyboards/mountainblocks/mb17/keyboard.json
index 9e9bb98406..9103f7775f 100644
--- a/keyboards/mountainblocks/mb17/keyboard.json
+++ b/keyboards/mountainblocks/mb17/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "MB17",
"manufacturer": "Mountainblocks",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4D42",
diff --git a/keyboards/mountainmechdesigns/teton_78/keyboard.json b/keyboards/mountainmechdesigns/teton_78/keyboard.json
index d6f5ce9cd8..61ae4ac495 100644
--- a/keyboards/mountainmechdesigns/teton_78/keyboard.json
+++ b/keyboards/mountainmechdesigns/teton_78/keyboard.json
@@ -20,7 +20,6 @@
"rows": ["D0", "D1", "D2", "D3", "D5"]
},
"processor": "atmega32u4",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x3349",
diff --git a/keyboards/ms_sculpt/keyboard.json b/keyboards/ms_sculpt/keyboard.json
index 5353a0df7e..4fa0dcca48 100644
--- a/keyboards/ms_sculpt/keyboard.json
+++ b/keyboards/ms_sculpt/keyboard.json
@@ -22,7 +22,6 @@
"io_delay": 5
},
"debounce": 3,
- "url": "",
"usb": {
"polling_interval": 1,
"device_version": "1.0.0",
diff --git a/keyboards/mss_studio/m63_rgb/keyboard.json b/keyboards/mss_studio/m63_rgb/keyboard.json
index 1b1745bc20..7647896711 100644
--- a/keyboards/mss_studio/m63_rgb/keyboard.json
+++ b/keyboards/mss_studio/m63_rgb/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "M63 RGB",
"manufacturer": "Mss Studio",
- "url": "",
"maintainer": "HorrorTroll",
"usb": {
"vid": "0x4D4B",
diff --git a/keyboards/mss_studio/m64_rgb/keyboard.json b/keyboards/mss_studio/m64_rgb/keyboard.json
index eb1cabb305..885d55055e 100644
--- a/keyboards/mss_studio/m64_rgb/keyboard.json
+++ b/keyboards/mss_studio/m64_rgb/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "M64 RGB",
"manufacturer": "Mss Studio",
- "url": "",
"maintainer": "HorrorTroll",
"usb": {
"vid": "0x4D4B",
diff --git a/keyboards/mt/blocked65/keyboard.json b/keyboards/mt/blocked65/keyboard.json
index 9a0ce52043..d07ca870ae 100644
--- a/keyboards/mt/blocked65/keyboard.json
+++ b/keyboards/mt/blocked65/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Blocked65",
"manufacturer": "Dou",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x5746",
diff --git a/keyboards/mt/mt40/keyboard.json b/keyboards/mt/mt40/keyboard.json
index d1700389f7..e02109b1cc 100644
--- a/keyboards/mt/mt40/keyboard.json
+++ b/keyboards/mt/mt40/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "MT40",
"manufacturer": "ThomasDehaeze",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x20A0",
diff --git a/keyboards/mt/mt64rgb/keyboard.json b/keyboards/mt/mt64rgb/keyboard.json
index 451be59f8f..bac2c213aa 100644
--- a/keyboards/mt/mt64rgb/keyboard.json
+++ b/keyboards/mt/mt64rgb/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "MT64RGB",
"manufacturer": "MT",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4D54",
diff --git a/keyboards/mt/mt84/keyboard.json b/keyboards/mt/mt84/keyboard.json
index 26f66b31db..1f73f1d5a2 100644
--- a/keyboards/mt/mt84/keyboard.json
+++ b/keyboards/mt/mt84/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "MT84",
"manufacturer": "MT",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4D54",
diff --git a/keyboards/mt/split75/keyboard.json b/keyboards/mt/split75/keyboard.json
index c13fa28b80..611e25bb6f 100644
--- a/keyboards/mt/split75/keyboard.json
+++ b/keyboards/mt/split75/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Split75",
"manufacturer": "YMDK",
- "url": "",
"maintainer": "Michael L. Walker",
"usb": {
"vid": "0x594D",
diff --git a/keyboards/murcielago/rev1/keyboard.json b/keyboards/murcielago/rev1/keyboard.json
index 4d3a82ef2c..bba7cf9089 100644
--- a/keyboards/murcielago/rev1/keyboard.json
+++ b/keyboards/murcielago/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Murci\u00e9lago",
"manufacturer": "elagil",
- "url": "",
"maintainer": "elagil",
"usb": {
"vid": "0x6166",
diff --git a/keyboards/mwstudio/mmk_3/keyboard.json b/keyboards/mwstudio/mmk_3/keyboard.json
index c63bd69f62..b812cb7e3b 100644
--- a/keyboards/mwstudio/mmk_3/keyboard.json
+++ b/keyboards/mwstudio/mmk_3/keyboard.json
@@ -31,7 +31,6 @@
"hue_steps": 10,
"led_count": 5
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x3001",
diff --git a/keyboards/mwstudio/mw65_black/keyboard.json b/keyboards/mwstudio/mw65_black/keyboard.json
index 8955cf9688..6ae4b6055e 100644
--- a/keyboards/mwstudio/mw65_black/keyboard.json
+++ b/keyboards/mwstudio/mw65_black/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "MW65 Black",
"manufacturer": "MWStudio",
- "url": "",
"maintainer": "TW59420",
"usb": {
"vid": "0x7BA1",
diff --git a/keyboards/mwstudio/mw65_rgb/keyboard.json b/keyboards/mwstudio/mw65_rgb/keyboard.json
index f1a8190948..25a33783f5 100644
--- a/keyboards/mwstudio/mw65_rgb/keyboard.json
+++ b/keyboards/mwstudio/mw65_rgb/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "MW65 RGB",
"manufacturer": "MWStudio",
- "url": "",
"maintainer": "TW59420",
"usb": {
"vid": "0x7BA1",
diff --git a/keyboards/mwstudio/mw660/keyboard.json b/keyboards/mwstudio/mw660/keyboard.json
index fdbd7564a7..629eea2820 100644
--- a/keyboards/mwstudio/mw660/keyboard.json
+++ b/keyboards/mwstudio/mw660/keyboard.json
@@ -24,7 +24,6 @@
},
"processor": "STM32F103",
"bootloader": "stm32duino",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x6601",
diff --git a/keyboards/mwstudio/mw75/keyboard.json b/keyboards/mwstudio/mw75/keyboard.json
index d9e540bca4..2d826b1c99 100644
--- a/keyboards/mwstudio/mw75/keyboard.json
+++ b/keyboards/mwstudio/mw75/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "MW75",
"manufacturer": "MWStudio",
- "url": "",
"maintainer": "TW59420",
"usb": {
"vid": "0x7BA1",
diff --git a/keyboards/mwstudio/mw75r2/keyboard.json b/keyboards/mwstudio/mw75r2/keyboard.json
index ae227830e5..144a848b18 100644
--- a/keyboards/mwstudio/mw75r2/keyboard.json
+++ b/keyboards/mwstudio/mw75r2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "MW75R2",
"manufacturer": "MWStudio",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x7BA1",
diff --git a/keyboards/mwstudio/mw80/keyboard.json b/keyboards/mwstudio/mw80/keyboard.json
index 829e97591c..423ec94e0e 100644
--- a/keyboards/mwstudio/mw80/keyboard.json
+++ b/keyboards/mwstudio/mw80/keyboard.json
@@ -18,7 +18,6 @@
},
"processor": "STM32F103",
"bootloader": "stm32duino",
- "url": "",
"indicators": {
"caps_lock": "A0"
},
@@ -29,8 +28,6 @@
"rgblight": {
"led_count": 16,
"hue_steps": 10,
- "saturation_steps": 17,
- "brightness_steps": 17,
"animations": {
"alternating": true,
"breathing": true,
diff --git a/keyboards/mykeyclub/jris65/hotswap/keyboard.json b/keyboards/mykeyclub/jris65/hotswap/keyboard.json
index 3ed56136d1..134edbf4f0 100644
--- a/keyboards/mykeyclub/jris65/hotswap/keyboard.json
+++ b/keyboards/mykeyclub/jris65/hotswap/keyboard.json
@@ -15,7 +15,6 @@
"rows": ["F7", "F6", "F5", "B2", "F4"]
},
"processor": "atmega32u4",
- "url": "",
"usb": {
"device_version": "0.1.0",
"pid": "0x4953",
diff --git a/keyboards/nacly/splitreus62/keyboard.json b/keyboards/nacly/splitreus62/keyboard.json
index a3b1544b9a..e91b4bdc75 100644
--- a/keyboards/nacly/splitreus62/keyboard.json
+++ b/keyboards/nacly/splitreus62/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Splitreus62",
"manufacturer": "NaCly",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xBEEF",
diff --git a/keyboards/nacly/ua62/keyboard.json b/keyboards/nacly/ua62/keyboard.json
index 43f2e9e662..0bf01308f5 100644
--- a/keyboards/nacly/ua62/keyboard.json
+++ b/keyboards/nacly/ua62/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "UA62",
"manufacturer": "NaCly",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xBEEF",
diff --git a/keyboards/navi60/keyboard.json b/keyboards/navi60/keyboard.json
index 42c3e5da1d..8d41c7a1b3 100644
--- a/keyboards/navi60/keyboard.json
+++ b/keyboards/navi60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Navi60",
"manufacturer": "Navi60",
- "url": "",
"maintainer": "DeskDaily",
"usb": {
"vid": "0x5001",
diff --git a/keyboards/ncc1701kb/keyboard.json b/keyboards/ncc1701kb/keyboard.json
index f30b85f47a..753db62d7f 100644
--- a/keyboards/ncc1701kb/keyboard.json
+++ b/keyboards/ncc1701kb/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "NCC-1701-KB",
"manufacturer": "J2L Designs",
- "url": "",
"maintainer": "jessel92",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/nek_type_a/keyboard.json b/keyboards/nek_type_a/keyboard.json
index 39bad11a18..a99a6b0301 100644
--- a/keyboards/nek_type_a/keyboard.json
+++ b/keyboards/nek_type_a/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "NEK Type A",
"manufacturer": "miker",
- "url": "",
"maintainer": "ecopoesis",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/nemui/keyboard.json b/keyboards/nemui/keyboard.json
index fb2adb6ae4..5d607ee61e 100644
--- a/keyboards/nemui/keyboard.json
+++ b/keyboards/nemui/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Nemui",
"manufacturer": "Bachoo",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x6400",
diff --git a/keyboards/neokeys/g67/element_hs/keyboard.json b/keyboards/neokeys/g67/element_hs/keyboard.json
index f477c33d6a..489e2d90ed 100644
--- a/keyboards/neokeys/g67/element_hs/keyboard.json
+++ b/keyboards/neokeys/g67/element_hs/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Element G67 Hotswap",
"manufacturer": "NEO Keys",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4E4B",
diff --git a/keyboards/neokeys/g67/hotswap/keyboard.json b/keyboards/neokeys/g67/hotswap/keyboard.json
index 937e802fa0..ec28fdabb7 100644
--- a/keyboards/neokeys/g67/hotswap/keyboard.json
+++ b/keyboards/neokeys/g67/hotswap/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Palette G67 Hotswap",
"manufacturer": "NEO Keys",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4E4B",
diff --git a/keyboards/neokeys/g67/soldered/keyboard.json b/keyboards/neokeys/g67/soldered/keyboard.json
index 541f07ee09..8944ff3d7b 100644
--- a/keyboards/neokeys/g67/soldered/keyboard.json
+++ b/keyboards/neokeys/g67/soldered/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Palette G67 Soldered",
"manufacturer": "NEO Keys",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4E4B",
diff --git a/keyboards/neson_design/700e/keyboard.json b/keyboards/neson_design/700e/keyboard.json
index 64a18f436b..4cd7de0d81 100644
--- a/keyboards/neson_design/700e/keyboard.json
+++ b/keyboards/neson_design/700e/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "700E",
"manufacturer": "Neson Design",
- "url": "",
"maintainer": "yulei",
"usb": {
"vid": "0x4E65",
diff --git a/keyboards/neson_design/810e/board.h b/keyboards/neson_design/810e/board.h
new file mode 100644
index 0000000000..681350a0ea
--- /dev/null
+++ b/keyboards/neson_design/810e/board.h
@@ -0,0 +1,8 @@
+// Copyright 2024 astro
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#include_next <board.h>
+
+#undef STM32_HSECLK
+#define STM32_HSECLK 16000000U
diff --git a/keyboards/neson_design/810e/config.h b/keyboards/neson_design/810e/config.h
deleted file mode 100644
index c6409b1ece..0000000000
--- a/keyboards/neson_design/810e/config.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/**
- * Copyright 2024 astro
- *
- * 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 BOARD_OTG_NOVBUSSENS 1
-#define STM32_HSECLK 16000000U
diff --git a/keyboards/neson_design/810e/keyboard.json b/keyboards/neson_design/810e/keyboard.json
index 2c62eb1f88..ab52c1539e 100644
--- a/keyboards/neson_design/810e/keyboard.json
+++ b/keyboards/neson_design/810e/keyboard.json
@@ -19,7 +19,6 @@
"rows": ["C13", "C14", "A6", "A7", "A5"]
},
"processor": "STM32F411",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x810E",
diff --git a/keyboards/neson_design/n6/keyboard.json b/keyboards/neson_design/n6/keyboard.json
index 66e6fb740c..9f7d3fb1c0 100644
--- a/keyboards/neson_design/n6/keyboard.json
+++ b/keyboards/neson_design/n6/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "N6",
"manufacturer": "Neson Design",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4E65",
diff --git a/keyboards/neson_design/nico/keyboard.json b/keyboards/neson_design/nico/keyboard.json
index 477ac3ba7c..6efa5ee703 100644
--- a/keyboards/neson_design/nico/keyboard.json
+++ b/keyboards/neson_design/nico/keyboard.json
@@ -27,7 +27,6 @@
"rgblight": {
"led_count": 5
},
- "url": "",
"usb": {
"device_version": "0.0.1",
"no_startup_check": true,
diff --git a/keyboards/newgame40/keyboard.json b/keyboards/newgame40/keyboard.json
index 063260b99f..63ae114f2e 100644
--- a/keyboards/newgame40/keyboard.json
+++ b/keyboards/newgame40/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "NEWGAME40",
"manufacturer": "GoTakigawa",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/nibell/micropad4x4/keyboard.json b/keyboards/nibell/micropad4x4/keyboard.json
index b992f501cf..0305412f8c 100644
--- a/keyboards/nibell/micropad4x4/keyboard.json
+++ b/keyboards/nibell/micropad4x4/keyboard.json
@@ -15,7 +15,6 @@
"rows": ["GP10", "GP11", "GP12", "GP13"]
},
"processor": "RP2040",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0xFEED",
diff --git a/keyboards/nibiria/stream15/keyboard.json b/keyboards/nibiria/stream15/keyboard.json
index 9daeef7cf9..6edcb70183 100644
--- a/keyboards/nibiria/stream15/keyboard.json
+++ b/keyboards/nibiria/stream15/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Stream15",
"manufacturer": "Nibiria",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4E49",
diff --git a/keyboards/nightly_boards/adellein/keyboard.json b/keyboards/nightly_boards/adellein/keyboard.json
index 3f873ba5f5..64b345f073 100644
--- a/keyboards/nightly_boards/adellein/keyboard.json
+++ b/keyboards/nightly_boards/adellein/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Adellein",
"manufacturer": "Neil Brian Ramirez",
- "url": "",
"maintainer": "Neil Brian Ramirez",
"usb": {
"vid": "0xD812",
diff --git a/keyboards/nightly_boards/alter/rev1/keyboard.json b/keyboards/nightly_boards/alter/rev1/keyboard.json
index e02e7e5b1b..3f4d3055f6 100644
--- a/keyboards/nightly_boards/alter/rev1/keyboard.json
+++ b/keyboards/nightly_boards/alter/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Alter",
"manufacturer": "Neil Brian Ramirez",
- "url": "",
"maintainer": "Neil Brian Ramirez",
"usb": {
"vid": "0x0717",
diff --git a/keyboards/nightly_boards/alter_lite/keyboard.json b/keyboards/nightly_boards/alter_lite/keyboard.json
index d06dd3aacd..8e51d6ae6b 100644
--- a/keyboards/nightly_boards/alter_lite/keyboard.json
+++ b/keyboards/nightly_boards/alter_lite/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Alter Lite",
"manufacturer": "DeskDaily",
- "url": "",
"maintainer": "DeskDaily",
"usb": {
"vid": "0xD812",
diff --git a/keyboards/nightly_boards/conde60/keyboard.json b/keyboards/nightly_boards/conde60/keyboard.json
index 38e7b8383a..0c78a269b3 100644
--- a/keyboards/nightly_boards/conde60/keyboard.json
+++ b/keyboards/nightly_boards/conde60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Conde60",
"manufacturer": "DeskDaily",
- "url": "",
"maintainer": "DeskDaily",
"usb": {
"vid": "0xD812",
diff --git a/keyboards/nightly_boards/n2/keyboard.json b/keyboards/nightly_boards/n2/keyboard.json
index 4aa554716f..db52cde6f9 100644
--- a/keyboards/nightly_boards/n2/keyboard.json
+++ b/keyboards/nightly_boards/n2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "[n]2",
"manufacturer": "Neil Brian Ramirez",
- "url": "",
"maintainer": "Neil Brian Ramirez",
"usb": {
"vid": "0x0717",
diff --git a/keyboards/nightly_boards/n40_o/keyboard.json b/keyboards/nightly_boards/n40_o/keyboard.json
index f749c143eb..c1b8381669 100644
--- a/keyboards/nightly_boards/n40_o/keyboard.json
+++ b/keyboards/nightly_boards/n40_o/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "[n]40-o",
"manufacturer": "Neil Brian Ramirez",
- "url": "",
"maintainer": "Neil Brian Ramirez",
"features": {
"bootmagic": true,
diff --git a/keyboards/nightly_boards/n60_s/keyboard.json b/keyboards/nightly_boards/n60_s/keyboard.json
index f6e235fec5..664ff84c18 100644
--- a/keyboards/nightly_boards/n60_s/keyboard.json
+++ b/keyboards/nightly_boards/n60_s/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "[n]60-S",
"manufacturer": "Neil Brian Ramirez",
- "url": "",
"maintainer": "Neil Brian Ramirez",
"usb": {
"vid": "0xD812",
diff --git a/keyboards/nightly_boards/n87/keyboard.json b/keyboards/nightly_boards/n87/keyboard.json
index ddfd27125c..150022038c 100644
--- a/keyboards/nightly_boards/n87/keyboard.json
+++ b/keyboards/nightly_boards/n87/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "[n]87",
"manufacturer": "Neil Brian Ramirez",
- "url": "",
"maintainer": "Neil Brian Ramirez",
"usb": {
"vid": "0x0717",
diff --git a/keyboards/nightly_boards/n9/keyboard.json b/keyboards/nightly_boards/n9/keyboard.json
index 83f9495445..23d09fbfb6 100644
--- a/keyboards/nightly_boards/n9/keyboard.json
+++ b/keyboards/nightly_boards/n9/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "[n]9",
"manufacturer": "Neil Brian Ramirez",
- "url": "",
"maintainer": "Neil Brian Ramirez",
"usb": {
"vid": "0xD812",
diff --git a/keyboards/nightly_boards/octopad/keyboard.json b/keyboards/nightly_boards/octopad/keyboard.json
index 797f26a2c2..9b0128e3d0 100644
--- a/keyboards/nightly_boards/octopad/keyboard.json
+++ b/keyboards/nightly_boards/octopad/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Octopad",
"manufacturer": "Neil Brian Ramirez",
- "url": "",
"maintainer": "Neil Brian Ramirez",
"usb": {
"vid": "0xD812",
diff --git a/keyboards/nightly_boards/octopadplus/keyboard.json b/keyboards/nightly_boards/octopadplus/keyboard.json
index ca5a7cdad1..5ba2d414b6 100644
--- a/keyboards/nightly_boards/octopadplus/keyboard.json
+++ b/keyboards/nightly_boards/octopadplus/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Octopad+",
"manufacturer": "DeskDaily",
- "url": "",
"maintainer": "DeskDaily",
"usb": {
"vid": "0xD812",
@@ -52,9 +51,7 @@
"twinkle": true
},
"brightness_steps": 8,
- "hue_steps": 8,
"led_count": 8,
- "max_brightness": 255,
"saturation_steps": 8,
"sleep": true
},
diff --git a/keyboards/nightly_boards/paraluman/keyboard.json b/keyboards/nightly_boards/paraluman/keyboard.json
index f18cefe601..78fd1e6853 100644
--- a/keyboards/nightly_boards/paraluman/keyboard.json
+++ b/keyboards/nightly_boards/paraluman/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Paraluman",
"manufacturer": "DeskDaily",
- "url": "",
"maintainer": "DeskDaily",
"usb": {
"vid": "0xD812",
diff --git a/keyboards/ning/tiny_board/tb16_rgb/keyboard.json b/keyboards/ning/tiny_board/tb16_rgb/keyboard.json
index 57a2438c3d..3756537772 100644
--- a/keyboards/ning/tiny_board/tb16_rgb/keyboard.json
+++ b/keyboards/ning/tiny_board/tb16_rgb/keyboard.json
@@ -29,7 +29,6 @@
"pin": "B5"
},
"development_board": "promicro",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0000",
diff --git a/keyboards/nix_studio/lilith/board.h b/keyboards/nix_studio/lilith/board.h
new file mode 100644
index 0000000000..2a370fe2e0
--- /dev/null
+++ b/keyboards/nix_studio/lilith/board.h
@@ -0,0 +1,8 @@
+// Copyright 2022 Martin Arnstad (@arnstadm)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#include_next <board.h>
+
+#undef STM32_HSECLK
+#define STM32_HSECLK 16000000U
diff --git a/keyboards/nix_studio/n60_a/keyboard.json b/keyboards/nix_studio/n60_a/keyboard.json
index 3f9b4dd086..de5507c692 100644
--- a/keyboards/nix_studio/n60_a/keyboard.json
+++ b/keyboards/nix_studio/n60_a/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "N60A",
"manufacturer": "Nix Studio",
- "url": "",
"maintainer": "Nix Studio",
"usb": {
"vid": "0x6E78",
diff --git a/keyboards/nix_studio/oxalys80/keyboard.json b/keyboards/nix_studio/oxalys80/keyboard.json
index 470c43ea2f..8cd4598957 100644
--- a/keyboards/nix_studio/oxalys80/keyboard.json
+++ b/keyboards/nix_studio/oxalys80/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "OXALYS80",
"manufacturer": "Nix Studio",
- "url": "",
"maintainer": "Nix Studio",
"usb": {
"vid": "0x6E78",
diff --git a/keyboards/novelkeys/nk65/info.json b/keyboards/novelkeys/nk65/info.json
index e3bff19346..ae02d3ac05 100755
--- a/keyboards/novelkeys/nk65/info.json
+++ b/keyboards/novelkeys/nk65/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "NK65",
"manufacturer": "Yiancar-Designs",
- "url": "",
"maintainer": "yiancar",
"usb": {
"vid": "0x8968",
diff --git a/keyboards/novelkeys/novelpad/keyboard.json b/keyboards/novelkeys/novelpad/keyboard.json
index bb190dd284..9cdaa81e5f 100644
--- a/keyboards/novelkeys/novelpad/keyboard.json
+++ b/keyboards/novelkeys/novelpad/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "NovelPad",
"manufacturer": "NovelKeys.xyz",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/noxary/220/keyboard.json b/keyboards/noxary/220/keyboard.json
index 3565316999..60e68305d3 100644
--- a/keyboards/noxary/220/keyboard.json
+++ b/keyboards/noxary/220/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "220",
"manufacturer": "Noxary",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4E58",
diff --git a/keyboards/noxary/260/keyboard.json b/keyboards/noxary/260/keyboard.json
index d5353d4244..e5af9b3095 100644
--- a/keyboards/noxary/260/keyboard.json
+++ b/keyboards/noxary/260/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "260",
"manufacturer": "Noxary",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4E58",
diff --git a/keyboards/noxary/268_2/keyboard.json b/keyboards/noxary/268_2/keyboard.json
index 08daee6d63..378d216f29 100644
--- a/keyboards/noxary/268_2/keyboard.json
+++ b/keyboards/noxary/268_2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "268.2",
"manufacturer": "Noxary",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4E58",
diff --git a/keyboards/noxary/268_2_rgb/keyboard.json b/keyboards/noxary/268_2_rgb/keyboard.json
index 380a772767..a36c530863 100644
--- a/keyboards/noxary/268_2_rgb/keyboard.json
+++ b/keyboards/noxary/268_2_rgb/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "268.2 RGB",
"manufacturer": "Noxary",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4E58",
diff --git a/keyboards/noxary/280/keyboard.json b/keyboards/noxary/280/keyboard.json
index 4bd9257152..88bf9e2123 100644
--- a/keyboards/noxary/280/keyboard.json
+++ b/keyboards/noxary/280/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "280",
"manufacturer": "Noxary",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4E58",
diff --git a/keyboards/noxary/378/keyboard.json b/keyboards/noxary/378/keyboard.json
index 3502604d6c..7c66448832 100644
--- a/keyboards/noxary/378/keyboard.json
+++ b/keyboards/noxary/378/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "378",
"manufacturer": "Noxary",
- "url": "",
"maintainer": "Gondolindrim",
"usb": {
"vid": "0x4E58",
diff --git a/keyboards/noxary/valhalla/keyboard.json b/keyboards/noxary/valhalla/keyboard.json
index 3bc3d80a34..817a46ed29 100644
--- a/keyboards/noxary/valhalla/keyboard.json
+++ b/keyboards/noxary/valhalla/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Valhalla",
"manufacturer": "Noxary",
- "url": "",
"maintainer": "Gondolindrim",
"usb": {
"vid": "0x4E58",
diff --git a/keyboards/noxary/valhalla_v2/keyboard.json b/keyboards/noxary/valhalla_v2/keyboard.json
index 671bd0b775..88ae2b8997 100644
--- a/keyboards/noxary/valhalla_v2/keyboard.json
+++ b/keyboards/noxary/valhalla_v2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Valhalla V2",
"manufacturer": "Noxary",
- "url": "",
"maintainer": "Gondolindrim",
"usb": {
"vid": "0x4E58",
diff --git a/keyboards/noxary/x268/keyboard.json b/keyboards/noxary/x268/keyboard.json
index 7ca5799de2..bc690815a6 100644
--- a/keyboards/noxary/x268/keyboard.json
+++ b/keyboards/noxary/x268/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "x268",
"manufacturer": "Noxary",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4E58",
diff --git a/keyboards/numatreus/keyboard.json b/keyboards/numatreus/keyboard.json
index 3120b48f55..3441a769e1 100644
--- a/keyboards/numatreus/keyboard.json
+++ b/keyboards/numatreus/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "NumAtreus",
"manufacturer": "yohewi",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/obosob/arch_36/keyboard.json b/keyboards/obosob/arch_36/keyboard.json
index 290446dd22..d24bab7334 100644
--- a/keyboards/obosob/arch_36/keyboard.json
+++ b/keyboards/obosob/arch_36/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Arch-36",
"manufacturer": "obosob",
- "url": "",
"maintainer": "obosob",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/ocean/gin_v2/keyboard.json b/keyboards/ocean/gin_v2/keyboard.json
index b6f22b813b..9485af7df6 100644
--- a/keyboards/ocean/gin_v2/keyboard.json
+++ b/keyboards/ocean/gin_v2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Gin V2",
"manufacturer": "Ocean",
- "url": "",
"maintainer": "Ocean",
"usb": {
"vid": "0x9624",
diff --git a/keyboards/ocean/slamz/keyboard.json b/keyboards/ocean/slamz/keyboard.json
index 6712077763..56344963f1 100644
--- a/keyboards/ocean/slamz/keyboard.json
+++ b/keyboards/ocean/slamz/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Slamz",
"manufacturer": "Ocean",
- "url": "",
"maintainer": "Ocean",
"usb": {
"vid": "0x9624",
diff --git a/keyboards/ocean/stealth/keyboard.json b/keyboards/ocean/stealth/keyboard.json
index b094a5f4bf..f5ed562fab 100644
--- a/keyboards/ocean/stealth/keyboard.json
+++ b/keyboards/ocean/stealth/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Stealth",
"manufacturer": "Ocean",
- "url": "",
"maintainer": "Ocean",
"usb": {
"vid": "0x9624",
diff --git a/keyboards/ocean/wang_ergo/keyboard.json b/keyboards/ocean/wang_ergo/keyboard.json
index 5debc4396d..758544e522 100644
--- a/keyboards/ocean/wang_ergo/keyboard.json
+++ b/keyboards/ocean/wang_ergo/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Wang Ergo",
"manufacturer": "Ocean",
- "url": "",
"maintainer": "oceeean",
"usb": {
"vid": "0x9624",
diff --git a/keyboards/ocean/wang_v2/keyboard.json b/keyboards/ocean/wang_v2/keyboard.json
index 6e80932ce2..1507d8634b 100644
--- a/keyboards/ocean/wang_v2/keyboard.json
+++ b/keyboards/ocean/wang_v2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Wang V2",
"manufacturer": "Ocean",
- "url": "",
"maintainer": "Ocean",
"usb": {
"vid": "0x9624",
diff --git a/keyboards/odelia/keyboard.json b/keyboards/odelia/keyboard.json
index 3c187b5c18..671d750e4e 100644
--- a/keyboards/odelia/keyboard.json
+++ b/keyboards/odelia/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Odelia",
"manufacturer": "InterpolKeeb",
- "url": "",
"maintainer": "kb-elmo",
"usb": {
"vid": "0x6BE3",
diff --git a/keyboards/ogre/ergo_single/keyboard.json b/keyboards/ogre/ergo_single/keyboard.json
index 3ebd88b0d2..9fbc54db42 100644
--- a/keyboards/ogre/ergo_single/keyboard.json
+++ b/keyboards/ogre/ergo_single/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Ogre Ergo Single",
"manufacturer": "ctrlshiftba",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/ogre/ergo_split/keyboard.json b/keyboards/ogre/ergo_split/keyboard.json
index 4dc3caa530..5c5d750add 100644
--- a/keyboards/ogre/ergo_split/keyboard.json
+++ b/keyboards/ogre/ergo_split/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Ogre Ergo Split",
"manufacturer": "ctrlshiftba",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/ok60/keyboard.json b/keyboards/ok60/keyboard.json
index 5cf55b666d..98d19c77b7 100644
--- a/keyboards/ok60/keyboard.json
+++ b/keyboards/ok60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "OK60",
"manufacturer": "OK60",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4B36",
diff --git a/keyboards/omkbd/ergodash/mini/keyboard.json b/keyboards/omkbd/ergodash/mini/keyboard.json
index 7c15c4f6f7..ea12ea5a9e 100644
--- a/keyboards/omkbd/ergodash/mini/keyboard.json
+++ b/keyboards/omkbd/ergodash/mini/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "ErgoDash Mini",
"manufacturer": "Omkbd",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/omkbd/ergodash/rev1/keyboard.json b/keyboards/omkbd/ergodash/rev1/keyboard.json
index 6a61950ba6..a25610be9c 100644
--- a/keyboards/omkbd/ergodash/rev1/keyboard.json
+++ b/keyboards/omkbd/ergodash/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "ErgoDash rev1.2",
"manufacturer": "Omkbd",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/omkbd/runner3680/3x6/keyboard.json b/keyboards/omkbd/runner3680/3x6/keyboard.json
index 44c5ce35a0..4b8c71a156 100644
--- a/keyboards/omkbd/runner3680/3x6/keyboard.json
+++ b/keyboards/omkbd/runner3680/3x6/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "runner3680 3x6",
"manufacturer": "Omkbd",
- "url": "",
"maintainer": "omkbd",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/omkbd/runner3680/3x7/keyboard.json b/keyboards/omkbd/runner3680/3x7/keyboard.json
index 8a4c55ca71..974147f732 100644
--- a/keyboards/omkbd/runner3680/3x7/keyboard.json
+++ b/keyboards/omkbd/runner3680/3x7/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "runner3680 3x7",
"manufacturer": "Omkbd",
- "url": "",
"maintainer": "omkbd",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/omkbd/runner3680/3x8/keyboard.json b/keyboards/omkbd/runner3680/3x8/keyboard.json
index 11fe738a8a..04fadf854b 100644
--- a/keyboards/omkbd/runner3680/3x8/keyboard.json
+++ b/keyboards/omkbd/runner3680/3x8/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "runner3680 3x8",
"manufacturer": "Omkbd",
- "url": "",
"maintainer": "omkbd",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/omkbd/runner3680/4x6/keyboard.json b/keyboards/omkbd/runner3680/4x6/keyboard.json
index 2449f3431e..7f8ecd0239 100644
--- a/keyboards/omkbd/runner3680/4x6/keyboard.json
+++ b/keyboards/omkbd/runner3680/4x6/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "runner3680 4x6",
"manufacturer": "Omkbd",
- "url": "",
"maintainer": "omkbd",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/omkbd/runner3680/4x7/keyboard.json b/keyboards/omkbd/runner3680/4x7/keyboard.json
index 01acfad1e7..5bee706192 100644
--- a/keyboards/omkbd/runner3680/4x7/keyboard.json
+++ b/keyboards/omkbd/runner3680/4x7/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "runner3680 4x7",
"manufacturer": "Omkbd",
- "url": "",
"maintainer": "omkbd",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/omkbd/runner3680/4x8/keyboard.json b/keyboards/omkbd/runner3680/4x8/keyboard.json
index 748fc05508..e9142eec3d 100644
--- a/keyboards/omkbd/runner3680/4x8/keyboard.json
+++ b/keyboards/omkbd/runner3680/4x8/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "runner3680 4x8",
"manufacturer": "Omkbd",
- "url": "",
"maintainer": "omkbd",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/omkbd/runner3680/5x6/keyboard.json b/keyboards/omkbd/runner3680/5x6/keyboard.json
index 9b043c7e19..5d2d22d7fa 100644
--- a/keyboards/omkbd/runner3680/5x6/keyboard.json
+++ b/keyboards/omkbd/runner3680/5x6/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "runner3680 5x6",
"manufacturer": "Omkbd",
- "url": "",
"maintainer": "omkbd",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/omkbd/runner3680/5x6_5x8/keyboard.json b/keyboards/omkbd/runner3680/5x6_5x8/keyboard.json
index b8a361f1b2..2d912a1445 100644
--- a/keyboards/omkbd/runner3680/5x6_5x8/keyboard.json
+++ b/keyboards/omkbd/runner3680/5x6_5x8/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "runner3680 5x6+5x8",
"manufacturer": "Omkbd",
- "url": "",
"maintainer": "omkbd",
"usb": {
"vid": "0x3680",
diff --git a/keyboards/omkbd/runner3680/5x7/keyboard.json b/keyboards/omkbd/runner3680/5x7/keyboard.json
index 41df797770..41de1f80f5 100644
--- a/keyboards/omkbd/runner3680/5x7/keyboard.json
+++ b/keyboards/omkbd/runner3680/5x7/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "runner3680 5x7",
"manufacturer": "Omkbd",
- "url": "",
"maintainer": "omkbd",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/omkbd/runner3680/5x8/keyboard.json b/keyboards/omkbd/runner3680/5x8/keyboard.json
index 04294371d7..11857942b8 100644
--- a/keyboards/omkbd/runner3680/5x8/keyboard.json
+++ b/keyboards/omkbd/runner3680/5x8/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "runner3680 5x8",
"manufacturer": "Omkbd",
- "url": "",
"maintainer": "omkbd",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/omnikeyish/dynamic_macro.c b/keyboards/omnikeyish/dynamic_macro.c
index b990a09a13..99b6d173b8 100644
--- a/keyboards/omnikeyish/dynamic_macro.c
+++ b/keyboards/omnikeyish/dynamic_macro.c
@@ -1,5 +1,6 @@
#include "omnikeyish.h"
#include <string.h>
+#include "eeprom.h"
dynamic_macro_t dynamic_macros[DYNAMIC_MACRO_COUNT];
diff --git a/keyboards/orange75/keyboard.json b/keyboards/orange75/keyboard.json
index a0ef819651..e7941d242f 100644
--- a/keyboards/orange75/keyboard.json
+++ b/keyboards/orange75/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Orange75",
"manufacturer": "Fox-Lab",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEEB",
diff --git a/keyboards/org60/keyboard.json b/keyboards/org60/keyboard.json
index 2586d16b08..d5c5260700 100644
--- a/keyboards/org60/keyboard.json
+++ b/keyboards/org60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Org60",
"manufacturer": "\u5927\u6a58\u5b50\u5916\u8bbe (Large orange peripherals)",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/owlab/jelly_evolv/info.json b/keyboards/owlab/jelly_evolv/info.json
index 999bcca477..cd67a95a8d 100644
--- a/keyboards/owlab/jelly_evolv/info.json
+++ b/keyboards/owlab/jelly_evolv/info.json
@@ -1,6 +1,5 @@
{
"manufacturer": "OwLab",
- "url": "",
"maintainer": "Owlab",
"usb": {
"vid": "0x4F53"
diff --git a/keyboards/owlab/spring/keyboard.json b/keyboards/owlab/spring/keyboard.json
index 7dcb6ec717..7e2ce90bd4 100644
--- a/keyboards/owlab/spring/keyboard.json
+++ b/keyboards/owlab/spring/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Spring",
"manufacturer": "OwLab",
- "url": "",
"maintainer": "OwLab",
"usb": {
"vid": "0x4F53",
diff --git a/keyboards/owlab/suit80/ansi/keyboard.json b/keyboards/owlab/suit80/ansi/keyboard.json
index 22bf9f78cd..c76c9d16dd 100644
--- a/keyboards/owlab/suit80/ansi/keyboard.json
+++ b/keyboards/owlab/suit80/ansi/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Suit80 ANSI",
"manufacturer": "OwLab",
- "url": "",
"maintainer": "Owlab",
"usb": {
"vid": "0x4F53",
diff --git a/keyboards/owlab/suit80/iso/keyboard.json b/keyboards/owlab/suit80/iso/keyboard.json
index 87e95e9bee..5bdd1cbacc 100644
--- a/keyboards/owlab/suit80/iso/keyboard.json
+++ b/keyboards/owlab/suit80/iso/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Suit80 ISO",
"manufacturer": "OwLab",
- "url": "",
"maintainer": "Owlab",
"usb": {
"vid": "0x4F53",
diff --git a/keyboards/p3d/eu_isolation/keyboard.json b/keyboards/p3d/eu_isolation/keyboard.json
index 715515c42d..c8f305a131 100644
--- a/keyboards/p3d/eu_isolation/keyboard.json
+++ b/keyboards/p3d/eu_isolation/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "EU ISOlation",
"manufacturer": "TuckTuckFloof",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/p3d/q4z/keyboard.json b/keyboards/p3d/q4z/keyboard.json
index 9dfa123c6c..0ba3ff129b 100644
--- a/keyboards/p3d/q4z/keyboard.json
+++ b/keyboards/p3d/q4z/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "q4z",
"manufacturer": "drmmr",
- "url": "",
"maintainer": "rjboone",
"usb": {
"vid": "0x0001",
diff --git a/keyboards/p3d/spacey/keyboard.json b/keyboards/p3d/spacey/keyboard.json
index ed23c327ad..07e1ebf818 100644
--- a/keyboards/p3d/spacey/keyboard.json
+++ b/keyboards/p3d/spacey/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "spacey",
"manufacturer": "vanilla",
- "url": "",
"maintainer": "vanilla",
"usb": {
"vid": "0x5641",
diff --git a/keyboards/p3d/synapse/keyboard.json b/keyboards/p3d/synapse/keyboard.json
index accd9ad47e..a73b3d4315 100644
--- a/keyboards/p3d/synapse/keyboard.json
+++ b/keyboards/p3d/synapse/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "synapse",
"manufacturer": "drmmr",
- "url": "",
"maintainer": "qpockets",
"usb": {
"vid": "0x7170",
diff --git a/keyboards/pabile/p20/info.json b/keyboards/pabile/p20/info.json
index 2584130637..0bac40f010 100644
--- a/keyboards/pabile/p20/info.json
+++ b/keyboards/pabile/p20/info.json
@@ -1,6 +1,5 @@
{
"manufacturer": "Pabile",
- "url": "",
"maintainer": "pabile",
"usb": {
"vid": "0x6666",
diff --git a/keyboards/panc40/keyboard.json b/keyboards/panc40/keyboard.json
index fe98da7f2e..9aef199fb3 100644
--- a/keyboards/panc40/keyboard.json
+++ b/keyboards/panc40/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Panc40",
"manufacturer": "Panc Interactive",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/panc60/keyboard.json b/keyboards/panc60/keyboard.json
index e0f3a491c8..a1e61b7999 100644
--- a/keyboards/panc60/keyboard.json
+++ b/keyboards/panc60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Panc60",
"manufacturer": "Panc Interactive",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x20A0",
diff --git a/keyboards/papercranekeyboards/gerald65/keyboard.json b/keyboards/papercranekeyboards/gerald65/keyboard.json
index 255727d508..55d42eb93c 100644
--- a/keyboards/papercranekeyboards/gerald65/keyboard.json
+++ b/keyboards/papercranekeyboards/gerald65/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "gerald65",
"manufacturer": "PaperCraneKeyboards",
- "url": "",
"maintainer": "PaperCraneKeyboards",
"usb": {
"vid": "0x5012",
diff --git a/keyboards/pauperboards/brick/keyboard.json b/keyboards/pauperboards/brick/keyboard.json
index 8ebe32ded4..d1267f0891 100644
--- a/keyboards/pauperboards/brick/keyboard.json
+++ b/keyboards/pauperboards/brick/keyboard.json
@@ -35,7 +35,6 @@
},
"rgblight": {
"led_count": 8,
- "hue_steps": 8,
"brightness_steps": 8,
"saturation_steps": 8,
"animations": {
diff --git a/keyboards/pdxkbc/keyboard.json b/keyboards/pdxkbc/keyboard.json
index 642adc0878..7921c67190 100644
--- a/keyboards/pdxkbc/keyboard.json
+++ b/keyboards/pdxkbc/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "pdxkbc",
"manufacturer": "Franklin Harding",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x5044",
diff --git a/keyboards/pearlboards/atlas/keyboard.json b/keyboards/pearlboards/atlas/keyboard.json
index 6886885e03..ea9f86ec51 100644
--- a/keyboards/pearlboards/atlas/keyboard.json
+++ b/keyboards/pearlboards/atlas/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Atlas",
"manufacturer": "Koobaczech",
- "url": "",
"maintainer": "Koobaczech",
"usb": {
"vid": "0x6963",
diff --git a/keyboards/pearlboards/pandora/keyboard.json b/keyboards/pearlboards/pandora/keyboard.json
index 670aa6f75a..59dc1ed955 100644
--- a/keyboards/pearlboards/pandora/keyboard.json
+++ b/keyboards/pearlboards/pandora/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Pandora",
"manufacturer": "Koobaczech",
- "url": "",
"maintainer": "Koobaczech",
"usb": {
"vid": "0x6963",
diff --git a/keyboards/pearlboards/pearl/keyboard.json b/keyboards/pearlboards/pearl/keyboard.json
index e91192475f..3f35aec006 100644
--- a/keyboards/pearlboards/pearl/keyboard.json
+++ b/keyboards/pearlboards/pearl/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Pearl",
"manufacturer": "Koobaczech",
- "url": "",
"maintainer": "Koobaczech",
"usb": {
"vid": "0x6963",
diff --git a/keyboards/pearlboards/zeus/keyboard.json b/keyboards/pearlboards/zeus/keyboard.json
index 9a3e7ead5f..72751a5fec 100644
--- a/keyboards/pearlboards/zeus/keyboard.json
+++ b/keyboards/pearlboards/zeus/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Zeus",
"manufacturer": "Koobaczech",
- "url": "",
"maintainer": "Koobaczech",
"usb": {
"vid": "0x6963",
diff --git a/keyboards/pearlboards/zeuspad/keyboard.json b/keyboards/pearlboards/zeuspad/keyboard.json
index 93e1e64433..0e1c626782 100644
--- a/keyboards/pearlboards/zeuspad/keyboard.json
+++ b/keyboards/pearlboards/zeuspad/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Zeuspad",
"manufacturer": "Koobaczech",
- "url": "",
"maintainer": "Koobaczech",
"usb": {
"vid": "0x6963",
diff --git a/keyboards/pegasus/keyboard.json b/keyboards/pegasus/keyboard.json
index 4de1631379..9c12de8ea0 100644
--- a/keyboards/pegasus/keyboard.json
+++ b/keyboards/pegasus/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Pegasus",
"manufacturer": "melonbred",
- "url": "",
"maintainer": "melonbred",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/percent/booster/keyboard.json b/keyboards/percent/booster/keyboard.json
index edd9afd18d..82701646ff 100644
--- a/keyboards/percent/booster/keyboard.json
+++ b/keyboards/percent/booster/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Booster",
"manufacturer": "Percent Studio",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x5053",
diff --git a/keyboards/percent/canoe/keyboard.json b/keyboards/percent/canoe/keyboard.json
index 656f73f904..d88225c656 100644
--- a/keyboards/percent/canoe/keyboard.json
+++ b/keyboards/percent/canoe/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "CANOE",
"manufacturer": "Percent Studios",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x5053",
diff --git a/keyboards/percent/canoe_gen2/keyboard.json b/keyboards/percent/canoe_gen2/keyboard.json
index 85fbfd28b9..b6a8a47a5f 100644
--- a/keyboards/percent/canoe_gen2/keyboard.json
+++ b/keyboards/percent/canoe_gen2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Canoe Gen2",
"manufacturer": "Percent Studio",
- "url": "",
"maintainer": "evyd13",
"usb": {
"vid": "0x9C12",
diff --git a/keyboards/percent/skog/keyboard.json b/keyboards/percent/skog/keyboard.json
index 823c1638ac..56751e56b7 100644
--- a/keyboards/percent/skog/keyboard.json
+++ b/keyboards/percent/skog/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Skog TKL",
"manufacturer": "Percent Studios",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x5053",
diff --git a/keyboards/percent/skog_lite/keyboard.json b/keyboards/percent/skog_lite/keyboard.json
index e52d910845..798ed34a5d 100644
--- a/keyboards/percent/skog_lite/keyboard.json
+++ b/keyboards/percent/skog_lite/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Skog Lite",
"manufacturer": "Percent Studios",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x5053",
diff --git a/keyboards/phase_studio/titan65/hotswap/keyboard.json b/keyboards/phase_studio/titan65/hotswap/keyboard.json
index 956f508701..c9d1b0f726 100644
--- a/keyboards/phase_studio/titan65/hotswap/keyboard.json
+++ b/keyboards/phase_studio/titan65/hotswap/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Titan 65 (hotswap)",
"manufacturer": "Phase Studio",
- "url": "",
"maintainer": "drashna",
"usb": {
"vid": "0x5054",
diff --git a/keyboards/phase_studio/titan65/soldered/keyboard.json b/keyboards/phase_studio/titan65/soldered/keyboard.json
index c60c689932..8bb0f6f19c 100644
--- a/keyboards/phase_studio/titan65/soldered/keyboard.json
+++ b/keyboards/phase_studio/titan65/soldered/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Titan 65 (soldered)",
"manufacturer": "Phase Studio",
- "url": "",
"maintainer": "drashna",
"usb": {
"vid": "0x5054",
diff --git a/keyboards/phdesign/phac/keyboard.json b/keyboards/phdesign/phac/keyboard.json
index 660cf6c2ad..5e5db876c0 100644
--- a/keyboards/phdesign/phac/keyboard.json
+++ b/keyboards/phdesign/phac/keyboard.json
@@ -24,7 +24,6 @@
]
},
"processor": "RP2040",
- "url": "",
"usb": {
"device_version": "2.2.0",
"pid": "0x0001",
diff --git a/keyboards/phentech/rpk_001/keyboard.json b/keyboards/phentech/rpk_001/keyboard.json
index 0ce2993897..ce822295b2 100644
--- a/keyboards/phentech/rpk_001/keyboard.json
+++ b/keyboards/phentech/rpk_001/keyboard.json
@@ -2,7 +2,6 @@
"manufacturer": "HENGCANG ELECTRONIC",
"keyboard_name": "RPK-001",
"maintainer": "JoyLee",
- "url": "",
"processor": "WB32FQ95",
"bootloader": "wb32-dfu",
"usb": {
diff --git a/keyboards/pimentoso/paddino02/rev1/keyboard.json b/keyboards/pimentoso/paddino02/rev1/keyboard.json
index 74f11ab7ad..20c144c795 100644
--- a/keyboards/pimentoso/paddino02/rev1/keyboard.json
+++ b/keyboards/pimentoso/paddino02/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Paddino02 rev1",
"manufacturer": "Pimentoso",
- "url": "",
"maintainer": "Pimentoso",
"usb": {
"vid": "0xD00D",
diff --git a/keyboards/pimentoso/paddino02/rev2/left/keyboard.json b/keyboards/pimentoso/paddino02/rev2/left/keyboard.json
index 8ba456e29e..00447c549b 100644
--- a/keyboards/pimentoso/paddino02/rev2/left/keyboard.json
+++ b/keyboards/pimentoso/paddino02/rev2/left/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Paddino02 rev2 (left)",
"manufacturer": "Pimentoso",
- "url": "",
"maintainer": "Pimentoso",
"usb": {
"vid": "0xD00D",
diff --git a/keyboards/pimentoso/paddino02/rev2/right/keyboard.json b/keyboards/pimentoso/paddino02/rev2/right/keyboard.json
index 4da270119b..4c12bc23fa 100644
--- a/keyboards/pimentoso/paddino02/rev2/right/keyboard.json
+++ b/keyboards/pimentoso/paddino02/rev2/right/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Paddino02 rev2 (right)",
"manufacturer": "Pimentoso",
- "url": "",
"maintainer": "Pimentoso",
"usb": {
"vid": "0xD00D",
diff --git a/keyboards/pinky/3/keyboard.json b/keyboards/pinky/3/keyboard.json
index 32e1f893e5..f02b6c72d0 100644
--- a/keyboards/pinky/3/keyboard.json
+++ b/keyboards/pinky/3/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Pinky3",
"manufacturer": "tamanishi",
- "url": "",
"maintainer": "tamanishi",
"usb": {
"vid": "0x544E",
diff --git a/keyboards/pinky/4/keyboard.json b/keyboards/pinky/4/keyboard.json
index 20f86e3f38..68b1dcb14c 100644
--- a/keyboards/pinky/4/keyboard.json
+++ b/keyboards/pinky/4/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Pinky4",
"manufacturer": "tamanishi",
- "url": "",
"maintainer": "tamanishi",
"usb": {
"vid": "0x544E",
diff --git a/keyboards/pixelspace/capsule65i/keyboard.json b/keyboards/pixelspace/capsule65i/keyboard.json
index f8c9dc9c1d..f23f36018a 100644
--- a/keyboards/pixelspace/capsule65i/keyboard.json
+++ b/keyboards/pixelspace/capsule65i/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Capsule65i",
"manufacturer": "PixelSpace",
- "url": "",
"maintainer": "PixelSpace",
"usb": {
"vid": "0xE061",
diff --git a/keyboards/pixelspace/shadow80/keyboard.json b/keyboards/pixelspace/shadow80/keyboard.json
index c7c4901745..7644c9d6ac 100644
--- a/keyboards/pixelspace/shadow80/keyboard.json
+++ b/keyboards/pixelspace/shadow80/keyboard.json
@@ -3,7 +3,6 @@
"processor": "STM32F103",
"bootloader": "stm32duino",
"manufacturer": "Here VoLand",
- "url": "",
"maintainer": "Here VoLand @Vem",
"usb": {
"vid": "0x0011",
diff --git a/keyboards/pkb65/keyboard.json b/keyboards/pkb65/keyboard.json
index d645d278b7..394401328e 100644
--- a/keyboards/pkb65/keyboard.json
+++ b/keyboards/pkb65/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "PKB65",
"manufacturer": "MCKeebs",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4D43",
diff --git a/keyboards/planck/keymaps/default/keymap.c b/keyboards/planck/keymaps/default/keymap.c
index cc8a69ceca..c08e58653a 100644
--- a/keyboards/planck/keymaps/default/keymap.c
+++ b/keyboards/planck/keymaps/default/keymap.c
@@ -215,9 +215,9 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (!eeconfig_is_enabled()) {
eeconfig_init();
}
- keymap_config.raw = eeconfig_read_keymap();
+ eeconfig_read_keymap(&keymap_config);
keymap_config.nkro = 1;
- eeconfig_update_keymap(keymap_config.raw);
+ eeconfig_update_keymap(&keymap_config);
}
return false;
break;
diff --git a/keyboards/planck/rev7/keymaps/default/keymap.c b/keyboards/planck/rev7/keymaps/default/keymap.c
index 47ded8aba5..6880e2fa94 100644
--- a/keyboards/planck/rev7/keymaps/default/keymap.c
+++ b/keyboards/planck/rev7/keymaps/default/keymap.c
@@ -255,9 +255,9 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (!eeconfig_is_enabled()) {
eeconfig_init();
}
- keymap_config.raw = eeconfig_read_keymap();
+ eeconfig_read_keymap(&keymap_config);
keymap_config.nkro = 1;
- eeconfig_update_keymap(keymap_config.raw);
+ eeconfig_update_keymap(&keymap_config);
}
return false;
break;
diff --git a/keyboards/playkbtw/ca66/keyboard.json b/keyboards/playkbtw/ca66/keyboard.json
index d94a8d6b4d..e28876fb9a 100644
--- a/keyboards/playkbtw/ca66/keyboard.json
+++ b/keyboards/playkbtw/ca66/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "CA66",
"manufacturer": "Barry",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x5457",
diff --git a/keyboards/playkbtw/helen80/keyboard.json b/keyboards/playkbtw/helen80/keyboard.json
index 47f7e48ef6..be01d21da2 100644
--- a/keyboards/playkbtw/helen80/keyboard.json
+++ b/keyboards/playkbtw/helen80/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Helen 80",
"manufacturer": "Play Keyboard",
- "url": "",
"maintainer": "yj7272098",
"usb": {
"vid": "0x706B",
diff --git a/keyboards/playkbtw/pk60/keyboard.json b/keyboards/playkbtw/pk60/keyboard.json
index 15de711ad1..de4f7a23f3 100644
--- a/keyboards/playkbtw/pk60/keyboard.json
+++ b/keyboards/playkbtw/pk60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "pk60",
"manufacturer": "Play Keyboard",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/playkbtw/pk64rgb/keyboard.json b/keyboards/playkbtw/pk64rgb/keyboard.json
index 81ac5be596..49ef2f57b2 100644
--- a/keyboards/playkbtw/pk64rgb/keyboard.json
+++ b/keyboards/playkbtw/pk64rgb/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "PK64RGB",
"manufacturer": "Play Keyboard",
- "url": "",
"maintainer": "yj7272098",
"usb": {
"vid": "0x706B",
diff --git a/keyboards/plume/plume65/keyboard.json b/keyboards/plume/plume65/keyboard.json
index 46f264e43e..9828a766f6 100644
--- a/keyboards/plume/plume65/keyboard.json
+++ b/keyboards/plume/plume65/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Plume65",
"manufacturer": "Plume Keyboards LLC",
- "url": "",
"maintainer": "evyd13",
"usb": {
"vid": "0x5D66",
diff --git a/keyboards/plut0nium/0x3e/keyboard.json b/keyboards/plut0nium/0x3e/keyboard.json
index eb0a4fbe55..fe9c43ce4b 100644
--- a/keyboards/plut0nium/0x3e/keyboard.json
+++ b/keyboards/plut0nium/0x3e/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "0x3E",
"manufacturer": "plut0nium",
- "url": "",
"maintainer": "plut0nium",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/plywrks/ahgase/keyboard.json b/keyboards/plywrks/ahgase/keyboard.json
index 9c1da6d579..05ed4e6ff2 100644
--- a/keyboards/plywrks/ahgase/keyboard.json
+++ b/keyboards/plywrks/ahgase/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Ahgase",
"manufacturer": "plywrks",
- "url": "",
"maintainer": "Ramon Imbao (ramonimbao)",
"usb": {
"vid": "0x706C",
diff --git a/keyboards/plywrks/allaro/keyboard.json b/keyboards/plywrks/allaro/keyboard.json
index fecc15f73b..ca94fc8318 100644
--- a/keyboards/plywrks/allaro/keyboard.json
+++ b/keyboards/plywrks/allaro/keyboard.json
@@ -17,7 +17,6 @@
"cols": ["F0", "F7", "F6", "C7", "C6", "B6", "B5", "B4", "D7", "D6", "D4", "D5", "D3", "D2", "D1"],
"rows": ["F1", "B7", "B0", "D0", "F5"]
},
- "url": "",
"usb": {
"vid": "0x706C",
"pid": "0x7903",
@@ -26,8 +25,6 @@
"rgblight": {
"led_count": 16,
"hue_steps": 10,
- "saturation_steps": 17,
- "brightness_steps": 17,
"animations": {
"alternating": true,
"breathing": true,
diff --git a/keyboards/plywrks/ji_eun/keyboard.json b/keyboards/plywrks/ji_eun/keyboard.json
index b470e29ebd..59355277f7 100644
--- a/keyboards/plywrks/ji_eun/keyboard.json
+++ b/keyboards/plywrks/ji_eun/keyboard.json
@@ -17,7 +17,6 @@
"rows": ["D7", "B4", "B0", "D4", "D3"]
},
"processor": "atmega32u4",
- "url": "",
"usb": {
"device_version": "1.0.0",
"vid": "0x706C",
diff --git a/keyboards/plywrks/lune/keyboard.json b/keyboards/plywrks/lune/keyboard.json
index 5ec1d97c6b..fa05b5110b 100644
--- a/keyboards/plywrks/lune/keyboard.json
+++ b/keyboards/plywrks/lune/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Lune",
"manufacturer": "plywrks",
- "url": "",
"maintainer": "ramonimbao",
"usb": {
"vid": "0x706C",
diff --git a/keyboards/plywrks/ply8x/config.h b/keyboards/plywrks/ply8x/hotswap/config.h
index 3fc4de978d..3fc4de978d 100644
--- a/keyboards/plywrks/ply8x/config.h
+++ b/keyboards/plywrks/ply8x/hotswap/config.h
diff --git a/keyboards/plywrks/ply8x/halconf.h b/keyboards/plywrks/ply8x/hotswap/halconf.h
index e215e323c5..e215e323c5 100644
--- a/keyboards/plywrks/ply8x/halconf.h
+++ b/keyboards/plywrks/ply8x/hotswap/halconf.h
diff --git a/keyboards/plywrks/ply8x/hotswap/keyboard.json b/keyboards/plywrks/ply8x/hotswap/keyboard.json
new file mode 100644
index 0000000000..c4d3e9424e
--- /dev/null
+++ b/keyboards/plywrks/ply8x/hotswap/keyboard.json
@@ -0,0 +1,559 @@
+{
+ "manufacturer": "plywrks",
+ "keyboard_name": "ply8x",
+ "maintainer": "ramonimbao",
+ "bootloader": "stm32-dfu",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "rows": ["B2", "B1", "B0", "A7", "A10", "A2"],
+ "cols": ["A9", "A8", "B12", "B11", "B10", "A6", "A5", "A4", "A15", "C14", "C13", "B9", "B6", "B7", "B5", "B4", "B3"]
+ },
+ "processor": "STM32F072",
+ "usb": {
+ "device_version": "1.0.0",
+ "vid": "0x706C",
+ "pid": "0x7915"
+ },
+ "ws2812": {
+ "pin": "B15",
+ "driver": "spi"
+ },
+ "rgb_matrix": {
+ "animations": {
+ "alphas_mods": true,
+ "gradient_up_down": true,
+ "gradient_left_right": true,
+ "breathing": true,
+ "band_sat": true,
+ "band_val": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "rainbow_moving_chevron": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "dual_beacon": true,
+ "rainbow_beacon": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "jellybean_raindrops": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "pixel_rain": true,
+ "pixel_flow": true,
+ "pixel_fractal": true,
+ "typing_heatmap": true,
+ "digital_rain": true,
+ "solid_reactive_simple": true,
+ "solid_reactive": true,
+ "solid_reactive_wide": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_multinexus": true,
+ "splash": true,
+ "multisplash": true,
+ "solid_splash": true,
+ "solid_multisplash": true
+ },
+ "driver": "ws2812",
+ "layout": [
+ {"flags": 2, "x":224, "y":37},
+ {"flags": 2, "x":224, "y":43},
+ {"flags": 2, "x":218, "y":43},
+ {"flags": 2, "x":218, "y":37},
+
+ {"flags": 2, "matrix": [0, 0], "x":0, "y": 0},
+ {"flags": 2, "matrix": [0, 2], "x":26, "y": 0},
+ {"flags": 2, "matrix": [0, 3], "x":38, "y": 0},
+ {"flags": 2, "matrix": [0, 4], "x":51, "y": 0},
+ {"flags": 2, "matrix": [0, 5], "x":64, "y": 0},
+ {"flags": 2, "matrix": [0, 6], "x":83, "y": 0},
+ {"flags": 2, "matrix": [0, 7], "x":96, "y": 0},
+ {"flags": 2, "matrix": [0, 8], "x":109, "y": 0},
+ {"flags": 2, "matrix": [0, 9], "x":122, "y": 0},
+ {"flags": 2, "matrix": [0,10], "x":141, "y": 0},
+ {"flags": 2, "matrix": [0,11], "x":154, "y": 0},
+ {"flags": 2, "matrix": [0,12], "x":166, "y": 0},
+ {"flags": 2, "matrix": [0,13], "x":179, "y": 0},
+ {"flags": 2, "matrix": [0,14], "x":195, "y": 0},
+ {"flags": 2, "matrix": [0,15], "x":208, "y": 0},
+ {"flags": 2, "matrix": [0,16], "x":221, "y": 0},
+
+ {"flags": 2, "matrix": [1, 0], "x":0, "y": 15},
+ {"flags": 2, "matrix": [1, 1], "x":13, "y": 15},
+ {"flags": 2, "matrix": [1, 2], "x":26, "y": 15},
+ {"flags": 2, "matrix": [1, 3], "x":38, "y": 15},
+ {"flags": 2, "matrix": [1, 4], "x":51, "y": 15},
+ {"flags": 2, "matrix": [1, 5], "x":64, "y": 15},
+ {"flags": 2, "matrix": [1, 6], "x":77, "y": 15},
+ {"flags": 2, "matrix": [1, 7], "x":90, "y": 15},
+ {"flags": 2, "matrix": [1, 8], "x":102, "y": 15},
+ {"flags": 2, "matrix": [1, 9], "x":115, "y": 15},
+ {"flags": 2, "matrix": [1,10], "x":128, "y": 15},
+ {"flags": 2, "matrix": [1,11], "x":141, "y": 15},
+ {"flags": 2, "matrix": [1,12], "x":154, "y": 15},
+ {"flags": 2, "matrix": [1,13], "x":166, "y": 15},
+ {"flags": 2, "matrix": [3,13], "x":179, "y": 15},
+ {"flags": 2, "matrix": [1,14], "x":195, "y": 15},
+ {"flags": 2, "matrix": [1,15], "x":208, "y": 15},
+ {"flags": 2, "matrix": [1,16], "x":221, "y": 15},
+
+ {"flags": 2, "matrix": [2, 0], "x":3, "y": 27},
+ {"flags": 2, "matrix": [2, 1], "x":19, "y": 27},
+ {"flags": 2, "matrix": [2, 2], "x":32, "y": 27},
+ {"flags": 2, "matrix": [2, 3], "x":45, "y": 27},
+ {"flags": 2, "matrix": [2, 4], "x":58, "y": 27},
+ {"flags": 2, "matrix": [2, 5], "x":70, "y": 27},
+ {"flags": 2, "matrix": [2, 6], "x":83, "y": 27},
+ {"flags": 2, "matrix": [2, 7], "x":96, "y": 27},
+ {"flags": 2, "matrix": [2, 8], "x":109, "y": 27},
+ {"flags": 2, "matrix": [2, 9], "x":122, "y": 27},
+ {"flags": 2, "matrix": [2,10], "x":134, "y": 27},
+ {"flags": 2, "matrix": [2,11], "x":147, "y": 27},
+ {"flags": 2, "matrix": [2,12], "x":160, "y": 27},
+ {"flags": 2, "matrix": [2,13], "x":176, "y": 27},
+ {"flags": 2, "matrix": [2,14], "x":195, "y": 27},
+ {"flags": 2, "matrix": [2,15], "x":208, "y": 27},
+ {"flags": 2, "matrix": [2,16], "x":221, "y": 27},
+
+ {"flags": 2, "matrix": [3, 0], "x":5, "y":40},
+ {"flags": 2, "matrix": [3, 1], "x":23, "y": 40},
+ {"flags": 2, "matrix": [3, 2], "x":36, "y": 40},
+ {"flags": 2, "matrix": [3, 3], "x":49, "y": 40},
+ {"flags": 2, "matrix": [3, 4], "x":62, "y": 40},
+ {"flags": 2, "matrix": [3, 5], "x":75, "y": 40},
+ {"flags": 2, "matrix": [3, 6], "x":88, "y": 40},
+ {"flags": 2, "matrix": [3, 7], "x":101, "y": 40},
+ {"flags": 2, "matrix": [3, 8], "x":114, "y": 40},
+ {"flags": 2, "matrix": [3, 9], "x":127, "y": 40},
+ {"flags": 2, "matrix": [3,10], "x":140, "y": 40},
+ {"flags": 2, "matrix": [3,11], "x":153, "y": 40},
+ {"flags": 2, "matrix": [3,12], "x":166, "y": 40},
+
+ {"flags": 2, "matrix": [4, 0], "x":8, "y": 52},
+ {"flags": 2, "matrix": [4, 2], "x":29, "y": 52},
+ {"flags": 2, "matrix": [4, 3], "x":42, "y": 52},
+ {"flags": 2, "matrix": [4, 4], "x":54, "y": 52},
+ {"flags": 2, "matrix": [4, 5], "x":67, "y": 52},
+ {"flags": 2, "matrix": [4, 6], "x":80, "y": 52},
+ {"flags": 2, "matrix": [4, 7], "x":93, "y": 52},
+ {"flags": 2, "matrix": [4, 8], "x":106, "y": 52},
+ {"flags": 2, "matrix": [4, 9], "x":118, "y": 52},
+ {"flags": 2, "matrix": [4,10], "x":131, "y": 52},
+ {"flags": 2, "matrix": [4,11], "x":144, "y": 52},
+ {"flags": 2, "matrix": [4,12], "x":162, "y": 52},
+ {"flags": 2, "matrix": [4,13], "x":179, "y": 52},
+ {"flags": 2, "matrix": [4,15], "x":208, "y": 52},
+
+ {"flags": 2, "matrix": [5, 0], "x":2, "y": 64},
+ {"flags": 2, "matrix": [5, 1], "x":18, "y": 64},
+ {"flags": 2, "matrix": [5, 2], "x":34, "y": 64},
+ {"flags": 2, "matrix": [5, 7], "x":82, "y": 64},
+ {"flags": 2, "matrix": [5,11], "x":146, "y": 64},
+ {"flags": 2, "matrix": [5,12], "x":162, "y": 64},
+ {"flags": 2, "matrix": [5,13], "x":178, "y": 64},
+ {"flags": 2, "matrix": [5,14], "x":195, "y": 64},
+ {"flags": 2, "matrix": [5,15], "x":208, "y": 64},
+ {"flags": 2, "matrix": [5,16], "x":221, "y": 64}
+ ]
+ },
+ "community_layouts": ["tkl_ansi_tsangan", "tkl_ansi_tsangan_split_bs_rshift", "tkl_ansi_wkl", "tkl_ansi_wkl_split_bs_rshift"],
+ "layouts": {
+ "LAYOUT_tkl_ansi_tsangan": {
+ "layout": [
+ {"matrix": [0, 0], "x":0, "y":0},
+ {"matrix": [0, 2], "x":2, "y":0},
+ {"matrix": [0, 3], "x":3, "y":0},
+ {"matrix": [0, 4], "x":4, "y":0},
+ {"matrix": [0, 5], "x":5, "y":0},
+ {"matrix": [0, 6], "x":6.5, "y":0},
+ {"matrix": [0, 7], "x":7.5, "y":0},
+ {"matrix": [0, 8], "x":8.5, "y":0},
+ {"matrix": [0, 9], "x":9.5, "y":0},
+ {"matrix": [0,10], "x":11, "y":0},
+ {"matrix": [0,11], "x":12, "y":0},
+ {"matrix": [0,12], "x":13, "y":0},
+ {"matrix": [0,13], "x":14, "y":0},
+ {"matrix": [0,14], "x":15.25, "y":0},
+ {"matrix": [0,15], "x":16.25, "y":0},
+ {"matrix": [0,16], "x":17.25, "y":0},
+
+ {"matrix": [1, 0], "x":0, "y":1.25},
+ {"matrix": [1, 1], "x":1, "y":1.25},
+ {"matrix": [1, 2], "x":2, "y":1.25},
+ {"matrix": [1, 3], "x":3, "y":1.25},
+ {"matrix": [1, 4], "x":4, "y":1.25},
+ {"matrix": [1, 5], "x":5, "y":1.25},
+ {"matrix": [1, 6], "x":6, "y":1.25},
+ {"matrix": [1, 7], "x":7, "y":1.25},
+ {"matrix": [1, 8], "x":8, "y":1.25},
+ {"matrix": [1, 9], "x":9, "y":1.25},
+ {"matrix": [1,10], "x":10, "y":1.25},
+ {"matrix": [1,11], "x":11, "y":1.25},
+ {"matrix": [1,12], "x":12, "y":1.25},
+ {"matrix": [1,13], "x":13, "y":1.25, "w":2},
+ {"matrix": [1,14], "x":15.25, "y":1.25},
+ {"matrix": [1,15], "x":16.25, "y":1.25},
+ {"matrix": [1,16], "x":17.25, "y":1.25},
+
+ {"matrix": [2, 0], "x":0, "y":2.25, "w":1.5},
+ {"matrix": [2, 1], "x":1.5, "y":2.25},
+ {"matrix": [2, 2], "x":2.5, "y":2.25},
+ {"matrix": [2, 3], "x":3.5, "y":2.25},
+ {"matrix": [2, 4], "x":4.5, "y":2.25},
+ {"matrix": [2, 5], "x":5.5, "y":2.25},
+ {"matrix": [2, 6], "x":6.5, "y":2.25},
+ {"matrix": [2, 7], "x":7.5, "y":2.25},
+ {"matrix": [2, 8], "x":8.5, "y":2.25},
+ {"matrix": [2, 9], "x":9.5, "y":2.25},
+ {"matrix": [2,10], "x":10.5, "y":2.25},
+ {"matrix": [2,11], "x":11.5, "y":2.25},
+ {"matrix": [2,12], "x":12.5, "y":2.25},
+ {"matrix": [2,13], "x":13.5, "y":2.25, "w":1.5},
+ {"matrix": [2,14], "x":15.25, "y":2.25},
+ {"matrix": [2,15], "x":16.25, "y":2.25},
+ {"matrix": [2,16], "x":17.25, "y":2.25},
+
+ {"matrix": [3, 0], "x":0, "y":3.25, "w":1.75},
+ {"matrix": [3, 1], "x":1.75, "y":3.25},
+ {"matrix": [3, 2], "x":2.75, "y":3.25},
+ {"matrix": [3, 3], "x":3.75, "y":3.25},
+ {"matrix": [3, 4], "x":4.75, "y":3.25},
+ {"matrix": [3, 5], "x":5.75, "y":3.25},
+ {"matrix": [3, 6], "x":6.75, "y":3.25},
+ {"matrix": [3, 7], "x":7.75, "y":3.25},
+ {"matrix": [3, 8], "x":8.75, "y":3.25},
+ {"matrix": [3, 9], "x":9.75, "y":3.25},
+ {"matrix": [3,10], "x":10.75, "y":3.25},
+ {"matrix": [3,11], "x":11.75, "y":3.25},
+ {"matrix": [3,12], "x":12.75, "y":3.25, "w":2.25},
+
+ {"matrix": [4, 0], "x":0, "y":4.25, "w":2.25},
+ {"matrix": [4, 2], "x":2.25, "y":4.25},
+ {"matrix": [4, 3], "x":3.25, "y":4.25},
+ {"matrix": [4, 4], "x":4.25, "y":4.25},
+ {"matrix": [4, 5], "x":5.25, "y":4.25},
+ {"matrix": [4, 6], "x":6.25, "y":4.25},
+ {"matrix": [4, 7], "x":7.25, "y":4.25},
+ {"matrix": [4, 8], "x":8.25, "y":4.25},
+ {"matrix": [4, 9], "x":9.25, "y":4.25},
+ {"matrix": [4,10], "x":10.25, "y":4.25},
+ {"matrix": [4,11], "x":11.25, "y":4.25},
+ {"matrix": [4,12], "x":12.25, "y":4.25, "w":2.75},
+ {"matrix": [4,15], "x":16.25, "y":4.25},
+
+ {"matrix": [5, 0], "x":0, "y":5.25, "w":1.5},
+ {"matrix": [5, 1], "x":1.5, "y":5.25},
+ {"matrix": [5, 2], "x":2.5, "y":5.25, "w":1.5},
+ {"matrix": [5, 7], "x":4, "y":5.25, "w":7},
+ {"matrix": [5,11], "x":11, "y":5.25, "w":1.5},
+ {"matrix": [5,12], "x":12.5, "y":5.25},
+ {"matrix": [5,13], "x":13.5, "y":5.25, "w":1.5},
+ {"matrix": [5,14], "x":15.25, "y":5.25},
+ {"matrix": [5,15], "x":16.25, "y":5.25},
+ {"matrix": [5,16], "x":17.25, "y":5.25}
+ ]
+ },
+ "LAYOUT_tkl_ansi_tsangan_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x":0, "y":0},
+ {"matrix": [0, 2], "x":2, "y":0},
+ {"matrix": [0, 3], "x":3, "y":0},
+ {"matrix": [0, 4], "x":4, "y":0},
+ {"matrix": [0, 5], "x":5, "y":0},
+ {"matrix": [0, 6], "x":6.5, "y":0},
+ {"matrix": [0, 7], "x":7.5, "y":0},
+ {"matrix": [0, 8], "x":8.5, "y":0},
+ {"matrix": [0, 9], "x":9.5, "y":0},
+ {"matrix": [0,10], "x":11, "y":0},
+ {"matrix": [0,11], "x":12, "y":0},
+ {"matrix": [0,12], "x":13, "y":0},
+ {"matrix": [0,13], "x":14, "y":0},
+ {"matrix": [0,14], "x":15.25, "y":0},
+ {"matrix": [0,15], "x":16.25, "y":0},
+ {"matrix": [0,16], "x":17.25, "y":0},
+
+ {"matrix": [1, 0], "x":0, "y":1.25},
+ {"matrix": [1, 1], "x":1, "y":1.25},
+ {"matrix": [1, 2], "x":2, "y":1.25},
+ {"matrix": [1, 3], "x":3, "y":1.25},
+ {"matrix": [1, 4], "x":4, "y":1.25},
+ {"matrix": [1, 5], "x":5, "y":1.25},
+ {"matrix": [1, 6], "x":6, "y":1.25},
+ {"matrix": [1, 7], "x":7, "y":1.25},
+ {"matrix": [1, 8], "x":8, "y":1.25},
+ {"matrix": [1, 9], "x":9, "y":1.25},
+ {"matrix": [1,10], "x":10, "y":1.25},
+ {"matrix": [1,11], "x":11, "y":1.25},
+ {"matrix": [1,12], "x":12, "y":1.25},
+ {"matrix": [1,13], "x":13, "y":1.25},
+ {"matrix": [3,13], "x":14, "y":1.25},
+ {"matrix": [1,14], "x":15.25, "y":1.25},
+ {"matrix": [1,15], "x":16.25, "y":1.25},
+ {"matrix": [1,16], "x":17.25, "y":1.25},
+
+ {"matrix": [2, 0], "x":0, "y":2.25, "w":1.5},
+ {"matrix": [2, 1], "x":1.5, "y":2.25},
+ {"matrix": [2, 2], "x":2.5, "y":2.25},
+ {"matrix": [2, 3], "x":3.5, "y":2.25},
+ {"matrix": [2, 4], "x":4.5, "y":2.25},
+ {"matrix": [2, 5], "x":5.5, "y":2.25},
+ {"matrix": [2, 6], "x":6.5, "y":2.25},
+ {"matrix": [2, 7], "x":7.5, "y":2.25},
+ {"matrix": [2, 8], "x":8.5, "y":2.25},
+ {"matrix": [2, 9], "x":9.5, "y":2.25},
+ {"matrix": [2,10], "x":10.5, "y":2.25},
+ {"matrix": [2,11], "x":11.5, "y":2.25},
+ {"matrix": [2,12], "x":12.5, "y":2.25},
+ {"matrix": [2,13], "x":13.5, "y":2.25, "w":1.5},
+ {"matrix": [2,14], "x":15.25, "y":2.25},
+ {"matrix": [2,15], "x":16.25, "y":2.25},
+ {"matrix": [2,16], "x":17.25, "y":2.25},
+
+ {"matrix": [3, 0], "x":0, "y":3.25, "w":1.75},
+ {"matrix": [3, 1], "x":1.75, "y":3.25},
+ {"matrix": [3, 2], "x":2.75, "y":3.25},
+ {"matrix": [3, 3], "x":3.75, "y":3.25},
+ {"matrix": [3, 4], "x":4.75, "y":3.25},
+ {"matrix": [3, 5], "x":5.75, "y":3.25},
+ {"matrix": [3, 6], "x":6.75, "y":3.25},
+ {"matrix": [3, 7], "x":7.75, "y":3.25},
+ {"matrix": [3, 8], "x":8.75, "y":3.25},
+ {"matrix": [3, 9], "x":9.75, "y":3.25},
+ {"matrix": [3,10], "x":10.75, "y":3.25},
+ {"matrix": [3,11], "x":11.75, "y":3.25},
+ {"matrix": [3,12], "x":12.75, "y":3.25, "w":2.25},
+
+ {"matrix": [4, 0], "x":0, "y":4.25, "w":2.25},
+ {"matrix": [4, 2], "x":2.25, "y":4.25},
+ {"matrix": [4, 3], "x":3.25, "y":4.25},
+ {"matrix": [4, 4], "x":4.25, "y":4.25},
+ {"matrix": [4, 5], "x":5.25, "y":4.25},
+ {"matrix": [4, 6], "x":6.25, "y":4.25},
+ {"matrix": [4, 7], "x":7.25, "y":4.25},
+ {"matrix": [4, 8], "x":8.25, "y":4.25},
+ {"matrix": [4, 9], "x":9.25, "y":4.25},
+ {"matrix": [4,10], "x":10.25, "y":4.25},
+ {"matrix": [4,11], "x":11.25, "y":4.25},
+ {"matrix": [4,12], "x":12.25, "y":4.25, "w":1.75},
+ {"matrix": [4,13], "x":14, "y":4.25},
+ {"matrix": [4,15], "x":16.25, "y":4.25},
+
+ {"matrix": [5, 0], "x":0, "y":5.25, "w":1.5},
+ {"matrix": [5, 1], "x":1.5, "y":5.25},
+ {"matrix": [5, 2], "x":2.5, "y":5.25, "w":1.5},
+ {"matrix": [5, 7], "x":4, "y":5.25, "w":7},
+ {"matrix": [5,11], "x":11, "y":5.25, "w":1.5},
+ {"matrix": [5,12], "x":12.5, "y":5.25},
+ {"matrix": [5,13], "x":13.5, "y":5.25, "w":1.5},
+ {"matrix": [5,14], "x":15.25, "y":5.25},
+ {"matrix": [5,15], "x":16.25, "y":5.25},
+ {"matrix": [5,16], "x":17.25, "y":5.25}
+ ]
+ },
+ "LAYOUT_tkl_ansi_wkl": {
+ "layout": [
+ {"matrix": [0, 0], "x":0, "y":0},
+ {"matrix": [0, 2], "x":2, "y":0},
+ {"matrix": [0, 3], "x":3, "y":0},
+ {"matrix": [0, 4], "x":4, "y":0},
+ {"matrix": [0, 5], "x":5, "y":0},
+ {"matrix": [0, 6], "x":6.5, "y":0},
+ {"matrix": [0, 7], "x":7.5, "y":0},
+ {"matrix": [0, 8], "x":8.5, "y":0},
+ {"matrix": [0, 9], "x":9.5, "y":0},
+ {"matrix": [0,10], "x":11, "y":0},
+ {"matrix": [0,11], "x":12, "y":0},
+ {"matrix": [0,12], "x":13, "y":0},
+ {"matrix": [0,13], "x":14, "y":0},
+ {"matrix": [0,14], "x":15.25, "y":0},
+ {"matrix": [0,15], "x":16.25, "y":0},
+ {"matrix": [0,16], "x":17.25, "y":0},
+
+ {"matrix": [1, 0], "x":0, "y":1.25},
+ {"matrix": [1, 1], "x":1, "y":1.25},
+ {"matrix": [1, 2], "x":2, "y":1.25},
+ {"matrix": [1, 3], "x":3, "y":1.25},
+ {"matrix": [1, 4], "x":4, "y":1.25},
+ {"matrix": [1, 5], "x":5, "y":1.25},
+ {"matrix": [1, 6], "x":6, "y":1.25},
+ {"matrix": [1, 7], "x":7, "y":1.25},
+ {"matrix": [1, 8], "x":8, "y":1.25},
+ {"matrix": [1, 9], "x":9, "y":1.25},
+ {"matrix": [1,10], "x":10, "y":1.25},
+ {"matrix": [1,11], "x":11, "y":1.25},
+ {"matrix": [1,12], "x":12, "y":1.25},
+ {"matrix": [1,13], "x":13, "y":1.25, "w":2},
+ {"matrix": [1,14], "x":15.25, "y":1.25},
+ {"matrix": [1,15], "x":16.25, "y":1.25},
+ {"matrix": [1,16], "x":17.25, "y":1.25},
+
+ {"matrix": [2, 0], "x":0, "y":2.25, "w":1.5},
+ {"matrix": [2, 1], "x":1.5, "y":2.25},
+ {"matrix": [2, 2], "x":2.5, "y":2.25},
+ {"matrix": [2, 3], "x":3.5, "y":2.25},
+ {"matrix": [2, 4], "x":4.5, "y":2.25},
+ {"matrix": [2, 5], "x":5.5, "y":2.25},
+ {"matrix": [2, 6], "x":6.5, "y":2.25},
+ {"matrix": [2, 7], "x":7.5, "y":2.25},
+ {"matrix": [2, 8], "x":8.5, "y":2.25},
+ {"matrix": [2, 9], "x":9.5, "y":2.25},
+ {"matrix": [2,10], "x":10.5, "y":2.25},
+ {"matrix": [2,11], "x":11.5, "y":2.25},
+ {"matrix": [2,12], "x":12.5, "y":2.25},
+ {"matrix": [2,13], "x":13.5, "y":2.25, "w":1.5},
+ {"matrix": [2,14], "x":15.25, "y":2.25},
+ {"matrix": [2,15], "x":16.25, "y":2.25},
+ {"matrix": [2,16], "x":17.25, "y":2.25},
+
+ {"matrix": [3, 0], "x":0, "y":3.25, "w":1.75},
+ {"matrix": [3, 1], "x":1.75, "y":3.25},
+ {"matrix": [3, 2], "x":2.75, "y":3.25},
+ {"matrix": [3, 3], "x":3.75, "y":3.25},
+ {"matrix": [3, 4], "x":4.75, "y":3.25},
+ {"matrix": [3, 5], "x":5.75, "y":3.25},
+ {"matrix": [3, 6], "x":6.75, "y":3.25},
+ {"matrix": [3, 7], "x":7.75, "y":3.25},
+ {"matrix": [3, 8], "x":8.75, "y":3.25},
+ {"matrix": [3, 9], "x":9.75, "y":3.25},
+ {"matrix": [3,10], "x":10.75, "y":3.25},
+ {"matrix": [3,11], "x":11.75, "y":3.25},
+ {"matrix": [3,12], "x":12.75, "y":3.25, "w":2.25},
+
+ {"matrix": [4, 0], "x":0, "y":4.25, "w":2.25},
+ {"matrix": [4, 2], "x":2.25, "y":4.25},
+ {"matrix": [4, 3], "x":3.25, "y":4.25},
+ {"matrix": [4, 4], "x":4.25, "y":4.25},
+ {"matrix": [4, 5], "x":5.25, "y":4.25},
+ {"matrix": [4, 6], "x":6.25, "y":4.25},
+ {"matrix": [4, 7], "x":7.25, "y":4.25},
+ {"matrix": [4, 8], "x":8.25, "y":4.25},
+ {"matrix": [4, 9], "x":9.25, "y":4.25},
+ {"matrix": [4,10], "x":10.25, "y":4.25},
+ {"matrix": [4,11], "x":11.25, "y":4.25},
+ {"matrix": [4,12], "x":12.25, "y":4.25, "w":2.75},
+ {"matrix": [4,15], "x":16.25, "y":4.25},
+
+ {"matrix": [5, 0], "x":0, "y":5.25, "w":1.5},
+ {"matrix": [5, 2], "x":2.5, "y":5.25, "w":1.5},
+ {"matrix": [5, 7], "x":4, "y":5.25, "w":7},
+ {"matrix": [5,11], "x":11, "y":5.25, "w":1.5},
+ {"matrix": [5,13], "x":13.5, "y":5.25, "w":1.5},
+ {"matrix": [5,14], "x":15.25, "y":5.25},
+ {"matrix": [5,15], "x":16.25, "y":5.25},
+ {"matrix": [5,16], "x":17.25, "y":5.25}
+ ]
+ },
+ "LAYOUT_tkl_ansi_wkl_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x":0, "y":0},
+ {"matrix": [0, 2], "x":2, "y":0},
+ {"matrix": [0, 3], "x":3, "y":0},
+ {"matrix": [0, 4], "x":4, "y":0},
+ {"matrix": [0, 5], "x":5, "y":0},
+ {"matrix": [0, 6], "x":6.5, "y":0},
+ {"matrix": [0, 7], "x":7.5, "y":0},
+ {"matrix": [0, 8], "x":8.5, "y":0},
+ {"matrix": [0, 9], "x":9.5, "y":0},
+ {"matrix": [0,10], "x":11, "y":0},
+ {"matrix": [0,11], "x":12, "y":0},
+ {"matrix": [0,12], "x":13, "y":0},
+ {"matrix": [0,13], "x":14, "y":0},
+ {"matrix": [0,14], "x":15.25, "y":0},
+ {"matrix": [0,15], "x":16.25, "y":0},
+ {"matrix": [0,16], "x":17.25, "y":0},
+
+ {"matrix": [1, 0], "x":0, "y":1.25},
+ {"matrix": [1, 1], "x":1, "y":1.25},
+ {"matrix": [1, 2], "x":2, "y":1.25},
+ {"matrix": [1, 3], "x":3, "y":1.25},
+ {"matrix": [1, 4], "x":4, "y":1.25},
+ {"matrix": [1, 5], "x":5, "y":1.25},
+ {"matrix": [1, 6], "x":6, "y":1.25},
+ {"matrix": [1, 7], "x":7, "y":1.25},
+ {"matrix": [1, 8], "x":8, "y":1.25},
+ {"matrix": [1, 9], "x":9, "y":1.25},
+ {"matrix": [1,10], "x":10, "y":1.25},
+ {"matrix": [1,11], "x":11, "y":1.25},
+ {"matrix": [1,12], "x":12, "y":1.25},
+ {"matrix": [1,13], "x":13, "y":1.25},
+ {"matrix": [3,13], "x":14, "y":1.25},
+ {"matrix": [1,14], "x":15.25, "y":1.25},
+ {"matrix": [1,15], "x":16.25, "y":1.25},
+ {"matrix": [1,16], "x":17.25, "y":1.25},
+
+ {"matrix": [2, 0], "x":0, "y":2.25, "w":1.5},
+ {"matrix": [2, 1], "x":1.5, "y":2.25},
+ {"matrix": [2, 2], "x":2.5, "y":2.25},
+ {"matrix": [2, 3], "x":3.5, "y":2.25},
+ {"matrix": [2, 4], "x":4.5, "y":2.25},
+ {"matrix": [2, 5], "x":5.5, "y":2.25},
+ {"matrix": [2, 6], "x":6.5, "y":2.25},
+ {"matrix": [2, 7], "x":7.5, "y":2.25},
+ {"matrix": [2, 8], "x":8.5, "y":2.25},
+ {"matrix": [2, 9], "x":9.5, "y":2.25},
+ {"matrix": [2,10], "x":10.5, "y":2.25},
+ {"matrix": [2,11], "x":11.5, "y":2.25},
+ {"matrix": [2,12], "x":12.5, "y":2.25},
+ {"matrix": [2,13], "x":13.5, "y":2.25, "w":1.5},
+ {"matrix": [2,14], "x":15.25, "y":2.25},
+ {"matrix": [2,15], "x":16.25, "y":2.25},
+ {"matrix": [2,16], "x":17.25, "y":2.25},
+
+ {"matrix": [3, 0], "x":0, "y":3.25, "w":1.75},
+ {"matrix": [3, 1], "x":1.75, "y":3.25},
+ {"matrix": [3, 2], "x":2.75, "y":3.25},
+ {"matrix": [3, 3], "x":3.75, "y":3.25},
+ {"matrix": [3, 4], "x":4.75, "y":3.25},
+ {"matrix": [3, 5], "x":5.75, "y":3.25},
+ {"matrix": [3, 6], "x":6.75, "y":3.25},
+ {"matrix": [3, 7], "x":7.75, "y":3.25},
+ {"matrix": [3, 8], "x":8.75, "y":3.25},
+ {"matrix": [3, 9], "x":9.75, "y":3.25},
+ {"matrix": [3,10], "x":10.75, "y":3.25},
+ {"matrix": [3,11], "x":11.75, "y":3.25},
+ {"matrix": [3,12], "x":12.75, "y":3.25, "w":2.25},
+
+ {"matrix": [4, 0], "x":0, "y":4.25, "w":2.25},
+ {"matrix": [4, 2], "x":2.25, "y":4.25},
+ {"matrix": [4, 3], "x":3.25, "y":4.25},
+ {"matrix": [4, 4], "x":4.25, "y":4.25},
+ {"matrix": [4, 5], "x":5.25, "y":4.25},
+ {"matrix": [4, 6], "x":6.25, "y":4.25},
+ {"matrix": [4, 7], "x":7.25, "y":4.25},
+ {"matrix": [4, 8], "x":8.25, "y":4.25},
+ {"matrix": [4, 9], "x":9.25, "y":4.25},
+ {"matrix": [4,10], "x":10.25, "y":4.25},
+ {"matrix": [4,11], "x":11.25, "y":4.25},
+ {"matrix": [4,12], "x":12.25, "y":4.25, "w":1.75},
+ {"matrix": [4,13], "x":14, "y":4.25},
+ {"matrix": [4,15], "x":16.25, "y":4.25},
+
+ {"matrix": [5, 0], "x":0, "y":5.25, "w":1.5},
+ {"matrix": [5, 2], "x":2.5, "y":5.25, "w":1.5},
+ {"matrix": [5, 7], "x":4, "y":5.25, "w":7},
+ {"matrix": [5,11], "x":11, "y":5.25, "w":1.5},
+ {"matrix": [5,13], "x":13.5, "y":5.25, "w":1.5},
+ {"matrix": [5,14], "x":15.25, "y":5.25},
+ {"matrix": [5,15], "x":16.25, "y":5.25},
+ {"matrix": [5,16], "x":17.25, "y":5.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/plywrks/ply8x/hotswap/keymaps/default/keymap.c b/keyboards/plywrks/ply8x/hotswap/keymaps/default/keymap.c
new file mode 100644
index 0000000000..0da2588ea7
--- /dev/null
+++ b/keyboards/plywrks/ply8x/hotswap/keymaps/default/keymap.c
@@ -0,0 +1,32 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐
+ * │Esc│ │F1 │F2 │F3 │F4 │ │F5 │F6 │F7 │F8 │ │F9 │F10│F11│F12│ │PSc│Scr│Pse│
+ * └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ ┌───┬───┬───┐
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│ │Ins│Hom│PgU│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ ├───┼───┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │ │Del│End│PgD│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ ┌───┐
+ * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift │ │ ↑ │
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴───┴───┼───┴┬────┬────┤ ┌───┼───┼───┐
+ * │Ctrl│GUI │Alt │ │ Alt│ GUI│Ctrl│ │ ← │ ↓ │ → │
+ * └────┴────┴────┴─────────────────────────────┴────┴────┴────┘ └───┴───┴───┘
+ */
+ [0] = LAYOUT_tkl_ansi_tsangan(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
diff --git a/keyboards/plywrks/ply8x/mcuconf.h b/keyboards/plywrks/ply8x/hotswap/mcuconf.h
index aceb2e3dfc..aceb2e3dfc 100644
--- a/keyboards/plywrks/ply8x/mcuconf.h
+++ b/keyboards/plywrks/ply8x/hotswap/mcuconf.h
diff --git a/keyboards/plywrks/ply8x/solder/config.h b/keyboards/plywrks/ply8x/solder/config.h
new file mode 100644
index 0000000000..3fc4de978d
--- /dev/null
+++ b/keyboards/plywrks/ply8x/solder/config.h
@@ -0,0 +1,10 @@
+// Copyright 2023 Ramon Imbao (@ramonimbao)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define WS2812_SPI_DRIVER SPID2
+#define WS2812_SPI_MOSI_PAL_MODE 0
+#define WS2812_SPI_SCK_PIN B13
+#define WS2812_SPI_SCK_PAL_MODE 0
+#define WS2812_EXTERNAL_PULLUP
diff --git a/keyboards/plywrks/ply8x/solder/halconf.h b/keyboards/plywrks/ply8x/solder/halconf.h
new file mode 100644
index 0000000000..e215e323c5
--- /dev/null
+++ b/keyboards/plywrks/ply8x/solder/halconf.h
@@ -0,0 +1,8 @@
+// Copyright 2023 Ramon Imbao (@ramonimbao)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define HAL_USE_SPI TRUE
+
+#include_next <halconf.h>
diff --git a/keyboards/plywrks/ply8x/keyboard.json b/keyboards/plywrks/ply8x/solder/keyboard.json
index 7c0717ade0..435319dec8 100644
--- a/keyboards/plywrks/ply8x/keyboard.json
+++ b/keyboards/plywrks/ply8x/solder/keyboard.json
@@ -18,11 +18,10 @@
"cols": ["A9", "A8", "B12", "B11", "B10", "A6", "A5", "A4", "A15", "C13", "C14", "B9", "B7", "B6", "B5", "B4", "B3"]
},
"processor": "STM32F072",
- "url": "",
"usb": {
"device_version": "1.0.0",
- "pid": "0x7905",
- "vid": "0x706C"
+ "vid": "0x706C",
+ "pid": "0x7905"
},
"ws2812": {
"pin": "B15",
@@ -76,12 +75,106 @@
},
"driver": "ws2812",
"layout": [
- {"flags": 8, "matrix": [3, 0], "x":2, "y":27},
- {"flags": 8, "matrix": [0,15], "x":211, "y":0},
- {"flags": 2, "x":0, "y":0},
- {"flags": 2, "x":10, "y":0},
- {"flags": 2, "x":20, "y":0},
- {"flags": 2, "x":30, "y":0}
+ {"flags": 8, "matrix": [3, 0], "x":5, "y":40},
+ {"flags": 8, "matrix": [0,15], "x":208, "y":0},
+ {"flags": 2, "x":224, "y":37},
+ {"flags": 2, "x":224, "y":43},
+ {"flags": 2, "x":218, "y":43},
+ {"flags": 2, "x":218, "y":37},
+
+ {"flags": 2, "matrix": [0, 0], "x":0, "y": 0},
+ {"flags": 2, "matrix": [0, 2], "x":26, "y": 0},
+ {"flags": 2, "matrix": [0, 3], "x":38, "y": 0},
+ {"flags": 2, "matrix": [0, 4], "x":51, "y": 0},
+ {"flags": 2, "matrix": [0, 5], "x":64, "y": 0},
+ {"flags": 2, "matrix": [0, 6], "x":83, "y": 0},
+ {"flags": 2, "matrix": [0, 7], "x":96, "y": 0},
+ {"flags": 2, "matrix": [0, 8], "x":109, "y": 0},
+ {"flags": 2, "matrix": [0, 9], "x":122, "y": 0},
+ {"flags": 2, "matrix": [0,10], "x":141, "y": 0},
+ {"flags": 2, "matrix": [0,11], "x":154, "y": 0},
+ {"flags": 2, "matrix": [0,12], "x":166, "y": 0},
+ {"flags": 2, "matrix": [0,13], "x":179, "y": 0},
+ {"flags": 2, "matrix": [0,14], "x":195, "y": 0},
+ {"flags": 2, "matrix": [0,16], "x":221, "y": 0},
+
+ {"flags": 2, "matrix": [1, 0], "x":0, "y": 15},
+ {"flags": 2, "matrix": [1, 1], "x":13, "y": 15},
+ {"flags": 2, "matrix": [1, 2], "x":26, "y": 15},
+ {"flags": 2, "matrix": [1, 3], "x":38, "y": 15},
+ {"flags": 2, "matrix": [1, 4], "x":51, "y": 15},
+ {"flags": 2, "matrix": [1, 5], "x":64, "y": 15},
+ {"flags": 2, "matrix": [1, 6], "x":77, "y": 15},
+ {"flags": 2, "matrix": [1, 7], "x":90, "y": 15},
+ {"flags": 2, "matrix": [1, 8], "x":102, "y": 15},
+ {"flags": 2, "matrix": [1, 9], "x":115, "y": 15},
+ {"flags": 2, "matrix": [1,10], "x":128, "y": 15},
+ {"flags": 2, "matrix": [1,11], "x":141, "y": 15},
+ {"flags": 2, "matrix": [1,12], "x":154, "y": 15},
+ {"flags": 2, "matrix": [1,13], "x":166, "y": 15},
+ {"flags": 2, "matrix": [3,13], "x":179, "y": 15},
+ {"flags": 2, "matrix": [1,14], "x":195, "y": 15},
+ {"flags": 2, "matrix": [1,15], "x":208, "y": 15},
+ {"flags": 2, "matrix": [1,16], "x":221, "y": 15},
+
+ {"flags": 2, "matrix": [2, 0], "x":3, "y": 27},
+ {"flags": 2, "matrix": [2, 1], "x":19, "y": 27},
+ {"flags": 2, "matrix": [2, 2], "x":32, "y": 27},
+ {"flags": 2, "matrix": [2, 3], "x":45, "y": 27},
+ {"flags": 2, "matrix": [2, 4], "x":58, "y": 27},
+ {"flags": 2, "matrix": [2, 5], "x":70, "y": 27},
+ {"flags": 2, "matrix": [2, 6], "x":83, "y": 27},
+ {"flags": 2, "matrix": [2, 7], "x":96, "y": 27},
+ {"flags": 2, "matrix": [2, 8], "x":109, "y": 27},
+ {"flags": 2, "matrix": [2, 9], "x":122, "y": 27},
+ {"flags": 2, "matrix": [2,10], "x":134, "y": 27},
+ {"flags": 2, "matrix": [2,11], "x":147, "y": 27},
+ {"flags": 2, "matrix": [2,12], "x":160, "y": 27},
+ {"flags": 2, "matrix": [2,13], "x":176, "y": 27},
+ {"flags": 2, "matrix": [2,14], "x":195, "y": 27},
+ {"flags": 2, "matrix": [2,15], "x":208, "y": 27},
+ {"flags": 2, "matrix": [2,16], "x":221, "y": 27},
+
+ {"flags": 2, "matrix": [3, 1], "x":23, "y": 40},
+ {"flags": 2, "matrix": [3, 2], "x":36, "y": 40},
+ {"flags": 2, "matrix": [3, 3], "x":49, "y": 40},
+ {"flags": 2, "matrix": [3, 4], "x":62, "y": 40},
+ {"flags": 2, "matrix": [3, 5], "x":75, "y": 40},
+ {"flags": 2, "matrix": [3, 6], "x":88, "y": 40},
+ {"flags": 2, "matrix": [3, 7], "x":101, "y": 40},
+ {"flags": 2, "matrix": [3, 8], "x":114, "y": 40},
+ {"flags": 2, "matrix": [3, 9], "x":127, "y": 40},
+ {"flags": 2, "matrix": [3,10], "x":140, "y": 40},
+ {"flags": 2, "matrix": [3,11], "x":153, "y": 40},
+ {"flags": 2, "matrix": [3,12], "x":166, "y": 40},
+
+ {"flags": 2, "matrix": [4, 0], "x":2, "y": 52},
+ {"flags": 2, "matrix": [4, 1], "x":16, "y": 52},
+ {"flags": 2, "matrix": [4, 2], "x":29, "y": 52},
+ {"flags": 2, "matrix": [4, 3], "x":42, "y": 52},
+ {"flags": 2, "matrix": [4, 4], "x":54, "y": 52},
+ {"flags": 2, "matrix": [4, 5], "x":67, "y": 52},
+ {"flags": 2, "matrix": [4, 6], "x":80, "y": 52},
+ {"flags": 2, "matrix": [4, 7], "x":93, "y": 52},
+ {"flags": 2, "matrix": [4, 8], "x":106, "y": 52},
+ {"flags": 2, "matrix": [4, 9], "x":118, "y": 52},
+ {"flags": 2, "matrix": [4,10], "x":131, "y": 52},
+ {"flags": 2, "matrix": [4,11], "x":144, "y": 52},
+ {"flags": 2, "matrix": [4,12], "x":162, "y": 52},
+ {"flags": 2, "matrix": [4,13], "x":179, "y": 52},
+ {"flags": 2, "matrix": [4,15], "x":208, "y": 52},
+
+ {"flags": 2, "matrix": [5, 0], "x":2, "y": 64},
+ {"flags": 2, "matrix": [5, 1], "x":18, "y": 64},
+ {"flags": 2, "matrix": [5, 2], "x":34, "y": 64},
+ {"flags": 2, "matrix": [5, 6], "x":82, "y": 64},
+ {"flags": 2, "matrix": [5,10], "x":130, "y": 64},
+ {"flags": 2, "matrix": [5,11], "x":146, "y": 64},
+ {"flags": 2, "matrix": [5,12], "x":162, "y": 64},
+ {"flags": 2, "matrix": [5,13], "x":178, "y": 64},
+ {"flags": 2, "matrix": [5,14], "x":195, "y": 64},
+ {"flags": 2, "matrix": [5,15], "x":208, "y": 64},
+ {"flags": 2, "matrix": [5,16], "x":221, "y": 64}
]
},
"layout_aliases": {
@@ -92,11 +185,15 @@
"tkl_ansi",
"tkl_ansi_split_bs_rshift",
"tkl_ansi_tsangan",
+ "tkl_ansi_wkl",
"tkl_ansi_tsangan_split_bs_rshift",
+ "tkl_ansi_wkl_split_bs_rshift",
"tkl_iso",
"tkl_iso_split_bs_rshift",
"tkl_iso_tsangan",
- "tkl_iso_tsangan_split_bs_rshift"
+ "tkl_iso_wkl",
+ "tkl_iso_tsangan_split_bs_rshift",
+ "tkl_iso_wkl_split_bs_rshift"
],
"layouts": {
"LAYOUT_tkl_ansi": {
@@ -388,6 +485,99 @@
{"matrix": [5,16], "x":17.25, "y":5.25}
]
},
+ "LAYOUT_tkl_ansi_wkl": {
+ "layout": [
+ {"matrix": [0, 0], "x":0, "y":0},
+ {"matrix": [0, 2], "x":2, "y":0},
+ {"matrix": [0, 3], "x":3, "y":0},
+ {"matrix": [0, 4], "x":4, "y":0},
+ {"matrix": [0, 5], "x":5, "y":0},
+ {"matrix": [0, 6], "x":6.5, "y":0},
+ {"matrix": [0, 7], "x":7.5, "y":0},
+ {"matrix": [0, 8], "x":8.5, "y":0},
+ {"matrix": [0, 9], "x":9.5, "y":0},
+ {"matrix": [0,10], "x":11, "y":0},
+ {"matrix": [0,11], "x":12, "y":0},
+ {"matrix": [0,12], "x":13, "y":0},
+ {"matrix": [0,13], "x":14, "y":0},
+ {"matrix": [0,14], "x":15.25, "y":0},
+ {"matrix": [0,15], "x":16.25, "y":0},
+ {"matrix": [0,16], "x":17.25, "y":0},
+
+ {"matrix": [1, 0], "x":0, "y":1.25},
+ {"matrix": [1, 1], "x":1, "y":1.25},
+ {"matrix": [1, 2], "x":2, "y":1.25},
+ {"matrix": [1, 3], "x":3, "y":1.25},
+ {"matrix": [1, 4], "x":4, "y":1.25},
+ {"matrix": [1, 5], "x":5, "y":1.25},
+ {"matrix": [1, 6], "x":6, "y":1.25},
+ {"matrix": [1, 7], "x":7, "y":1.25},
+ {"matrix": [1, 8], "x":8, "y":1.25},
+ {"matrix": [1, 9], "x":9, "y":1.25},
+ {"matrix": [1,10], "x":10, "y":1.25},
+ {"matrix": [1,11], "x":11, "y":1.25},
+ {"matrix": [1,12], "x":12, "y":1.25},
+ {"matrix": [1,13], "x":13, "y":1.25, "w":2},
+ {"matrix": [1,14], "x":15.25, "y":1.25},
+ {"matrix": [1,15], "x":16.25, "y":1.25},
+ {"matrix": [1,16], "x":17.25, "y":1.25},
+
+ {"matrix": [2, 0], "x":0, "y":2.25, "w":1.5},
+ {"matrix": [2, 1], "x":1.5, "y":2.25},
+ {"matrix": [2, 2], "x":2.5, "y":2.25},
+ {"matrix": [2, 3], "x":3.5, "y":2.25},
+ {"matrix": [2, 4], "x":4.5, "y":2.25},
+ {"matrix": [2, 5], "x":5.5, "y":2.25},
+ {"matrix": [2, 6], "x":6.5, "y":2.25},
+ {"matrix": [2, 7], "x":7.5, "y":2.25},
+ {"matrix": [2, 8], "x":8.5, "y":2.25},
+ {"matrix": [2, 9], "x":9.5, "y":2.25},
+ {"matrix": [2,10], "x":10.5, "y":2.25},
+ {"matrix": [2,11], "x":11.5, "y":2.25},
+ {"matrix": [2,12], "x":12.5, "y":2.25},
+ {"matrix": [2,13], "x":13.5, "y":2.25, "w":1.5},
+ {"matrix": [2,14], "x":15.25, "y":2.25},
+ {"matrix": [2,15], "x":16.25, "y":2.25},
+ {"matrix": [2,16], "x":17.25, "y":2.25},
+
+ {"matrix": [3, 0], "x":0, "y":3.25, "w":1.75},
+ {"matrix": [3, 1], "x":1.75, "y":3.25},
+ {"matrix": [3, 2], "x":2.75, "y":3.25},
+ {"matrix": [3, 3], "x":3.75, "y":3.25},
+ {"matrix": [3, 4], "x":4.75, "y":3.25},
+ {"matrix": [3, 5], "x":5.75, "y":3.25},
+ {"matrix": [3, 6], "x":6.75, "y":3.25},
+ {"matrix": [3, 7], "x":7.75, "y":3.25},
+ {"matrix": [3, 8], "x":8.75, "y":3.25},
+ {"matrix": [3, 9], "x":9.75, "y":3.25},
+ {"matrix": [3,10], "x":10.75, "y":3.25},
+ {"matrix": [3,11], "x":11.75, "y":3.25},
+ {"matrix": [3,12], "x":12.75, "y":3.25, "w":2.25},
+
+ {"matrix": [4, 0], "x":0, "y":4.25, "w":2.25},
+ {"matrix": [4, 2], "x":2.25, "y":4.25},
+ {"matrix": [4, 3], "x":3.25, "y":4.25},
+ {"matrix": [4, 4], "x":4.25, "y":4.25},
+ {"matrix": [4, 5], "x":5.25, "y":4.25},
+ {"matrix": [4, 6], "x":6.25, "y":4.25},
+ {"matrix": [4, 7], "x":7.25, "y":4.25},
+ {"matrix": [4, 8], "x":8.25, "y":4.25},
+ {"matrix": [4, 9], "x":9.25, "y":4.25},
+ {"matrix": [4,10], "x":10.25, "y":4.25},
+ {"matrix": [4,11], "x":11.25, "y":4.25},
+ {"matrix": [4,12], "x":12.25, "y":4.25, "w":2.75},
+ {"matrix": [4,15], "x":16.25, "y":4.25},
+
+ {"matrix": [5, 0], "x":0, "y":5.25, "w":1.5},
+ {"matrix": [5, 2], "x":2.5, "y":5.25, "w":1.5},
+ {"matrix": [5, 6], "x":4, "y":5.25, "w":7},
+ {"matrix": [5,11], "x":11, "y":5.25, "w":1.5},
+ {"matrix": [5,13], "x":13.5, "y":5.25, "w":1.5},
+ {"matrix": [5,14], "x":15.25, "y":5.25},
+ {"matrix": [5,15], "x":16.25, "y":5.25},
+ {"matrix": [5,16], "x":17.25, "y":5.25}
+ ]
+ },
"LAYOUT_tkl_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x":0, "y":0},
@@ -485,6 +675,101 @@
{"matrix": [5,16], "x":17.25, "y":5.25}
]
},
+ "LAYOUT_tkl_ansi_wkl_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x":0, "y":0},
+ {"matrix": [0, 2], "x":2, "y":0},
+ {"matrix": [0, 3], "x":3, "y":0},
+ {"matrix": [0, 4], "x":4, "y":0},
+ {"matrix": [0, 5], "x":5, "y":0},
+ {"matrix": [0, 6], "x":6.5, "y":0},
+ {"matrix": [0, 7], "x":7.5, "y":0},
+ {"matrix": [0, 8], "x":8.5, "y":0},
+ {"matrix": [0, 9], "x":9.5, "y":0},
+ {"matrix": [0,10], "x":11, "y":0},
+ {"matrix": [0,11], "x":12, "y":0},
+ {"matrix": [0,12], "x":13, "y":0},
+ {"matrix": [0,13], "x":14, "y":0},
+ {"matrix": [0,14], "x":15.25, "y":0},
+ {"matrix": [0,15], "x":16.25, "y":0},
+ {"matrix": [0,16], "x":17.25, "y":0},
+
+ {"matrix": [1, 0], "x":0, "y":1.25},
+ {"matrix": [1, 1], "x":1, "y":1.25},
+ {"matrix": [1, 2], "x":2, "y":1.25},
+ {"matrix": [1, 3], "x":3, "y":1.25},
+ {"matrix": [1, 4], "x":4, "y":1.25},
+ {"matrix": [1, 5], "x":5, "y":1.25},
+ {"matrix": [1, 6], "x":6, "y":1.25},
+ {"matrix": [1, 7], "x":7, "y":1.25},
+ {"matrix": [1, 8], "x":8, "y":1.25},
+ {"matrix": [1, 9], "x":9, "y":1.25},
+ {"matrix": [1,10], "x":10, "y":1.25},
+ {"matrix": [1,11], "x":11, "y":1.25},
+ {"matrix": [1,12], "x":12, "y":1.25},
+ {"matrix": [1,13], "x":13, "y":1.25},
+ {"matrix": [3,13], "x":14, "y":1.25},
+ {"matrix": [1,14], "x":15.25, "y":1.25},
+ {"matrix": [1,15], "x":16.25, "y":1.25},
+ {"matrix": [1,16], "x":17.25, "y":1.25},
+
+ {"matrix": [2, 0], "x":0, "y":2.25, "w":1.5},
+ {"matrix": [2, 1], "x":1.5, "y":2.25},
+ {"matrix": [2, 2], "x":2.5, "y":2.25},
+ {"matrix": [2, 3], "x":3.5, "y":2.25},
+ {"matrix": [2, 4], "x":4.5, "y":2.25},
+ {"matrix": [2, 5], "x":5.5, "y":2.25},
+ {"matrix": [2, 6], "x":6.5, "y":2.25},
+ {"matrix": [2, 7], "x":7.5, "y":2.25},
+ {"matrix": [2, 8], "x":8.5, "y":2.25},
+ {"matrix": [2, 9], "x":9.5, "y":2.25},
+ {"matrix": [2,10], "x":10.5, "y":2.25},
+ {"matrix": [2,11], "x":11.5, "y":2.25},
+ {"matrix": [2,12], "x":12.5, "y":2.25},
+ {"matrix": [2,13], "x":13.5, "y":2.25, "w":1.5},
+ {"matrix": [2,14], "x":15.25, "y":2.25},
+ {"matrix": [2,15], "x":16.25, "y":2.25},
+ {"matrix": [2,16], "x":17.25, "y":2.25},
+
+ {"matrix": [3, 0], "x":0, "y":3.25, "w":1.75},
+ {"matrix": [3, 1], "x":1.75, "y":3.25},
+ {"matrix": [3, 2], "x":2.75, "y":3.25},
+ {"matrix": [3, 3], "x":3.75, "y":3.25},
+ {"matrix": [3, 4], "x":4.75, "y":3.25},
+ {"matrix": [3, 5], "x":5.75, "y":3.25},
+ {"matrix": [3, 6], "x":6.75, "y":3.25},
+ {"matrix": [3, 7], "x":7.75, "y":3.25},
+ {"matrix": [3, 8], "x":8.75, "y":3.25},
+ {"matrix": [3, 9], "x":9.75, "y":3.25},
+ {"matrix": [3,10], "x":10.75, "y":3.25},
+ {"matrix": [3,11], "x":11.75, "y":3.25},
+ {"matrix": [3,12], "x":12.75, "y":3.25, "w":2.25},
+
+ {"matrix": [4, 0], "x":0, "y":4.25, "w":2.25},
+ {"matrix": [4, 2], "x":2.25, "y":4.25},
+ {"matrix": [4, 3], "x":3.25, "y":4.25},
+ {"matrix": [4, 4], "x":4.25, "y":4.25},
+ {"matrix": [4, 5], "x":5.25, "y":4.25},
+ {"matrix": [4, 6], "x":6.25, "y":4.25},
+ {"matrix": [4, 7], "x":7.25, "y":4.25},
+ {"matrix": [4, 8], "x":8.25, "y":4.25},
+ {"matrix": [4, 9], "x":9.25, "y":4.25},
+ {"matrix": [4,10], "x":10.25, "y":4.25},
+ {"matrix": [4,11], "x":11.25, "y":4.25},
+ {"matrix": [4,12], "x":12.25, "y":4.25, "w":1.75},
+ {"matrix": [4,13], "x":14, "y":4.25},
+ {"matrix": [4,15], "x":16.25, "y":4.25},
+
+ {"matrix": [5, 0], "x":0, "y":5.25, "w":1.5},
+ {"matrix": [5, 2], "x":2.5, "y":5.25, "w":1.5},
+ {"matrix": [5, 6], "x":4, "y":5.25, "w":7},
+ {"matrix": [5,11], "x":11, "y":5.25, "w":1.5},
+ {"matrix": [5,13], "x":13.5, "y":5.25, "w":1.5},
+ {"matrix": [5,14], "x":15.25, "y":5.25},
+ {"matrix": [5,15], "x":16.25, "y":5.25},
+ {"matrix": [5,16], "x":17.25, "y":5.25}
+ ]
+ },
"LAYOUT_tkl_iso": {
"layout": [
{"matrix": [0, 0], "x":0, "y":0},
@@ -777,6 +1062,100 @@
{"matrix": [5,16], "x":17.25, "y":5.25}
]
},
+ "LAYOUT_tkl_iso_wkl": {
+ "layout": [
+ {"matrix": [0, 0], "x":0, "y":0},
+ {"matrix": [0, 2], "x":2, "y":0},
+ {"matrix": [0, 3], "x":3, "y":0},
+ {"matrix": [0, 4], "x":4, "y":0},
+ {"matrix": [0, 5], "x":5, "y":0},
+ {"matrix": [0, 6], "x":6.5, "y":0},
+ {"matrix": [0, 7], "x":7.5, "y":0},
+ {"matrix": [0, 8], "x":8.5, "y":0},
+ {"matrix": [0, 9], "x":9.5, "y":0},
+ {"matrix": [0,10], "x":11, "y":0},
+ {"matrix": [0,11], "x":12, "y":0},
+ {"matrix": [0,12], "x":13, "y":0},
+ {"matrix": [0,13], "x":14, "y":0},
+ {"matrix": [0,14], "x":15.25, "y":0},
+ {"matrix": [0,15], "x":16.25, "y":0},
+ {"matrix": [0,16], "x":17.25, "y":0},
+
+ {"matrix": [1, 0], "x":0, "y":1.25},
+ {"matrix": [1, 1], "x":1, "y":1.25},
+ {"matrix": [1, 2], "x":2, "y":1.25},
+ {"matrix": [1, 3], "x":3, "y":1.25},
+ {"matrix": [1, 4], "x":4, "y":1.25},
+ {"matrix": [1, 5], "x":5, "y":1.25},
+ {"matrix": [1, 6], "x":6, "y":1.25},
+ {"matrix": [1, 7], "x":7, "y":1.25},
+ {"matrix": [1, 8], "x":8, "y":1.25},
+ {"matrix": [1, 9], "x":9, "y":1.25},
+ {"matrix": [1,10], "x":10, "y":1.25},
+ {"matrix": [1,11], "x":11, "y":1.25},
+ {"matrix": [1,12], "x":12, "y":1.25},
+ {"matrix": [1,13], "x":13, "y":1.25, "w":2},
+ {"matrix": [1,14], "x":15.25, "y":1.25},
+ {"matrix": [1,15], "x":16.25, "y":1.25},
+ {"matrix": [1,16], "x":17.25, "y":1.25},
+
+ {"matrix": [2, 0], "x":0, "y":2.25, "w":1.5},
+ {"matrix": [2, 1], "x":1.5, "y":2.25},
+ {"matrix": [2, 2], "x":2.5, "y":2.25},
+ {"matrix": [2, 3], "x":3.5, "y":2.25},
+ {"matrix": [2, 4], "x":4.5, "y":2.25},
+ {"matrix": [2, 5], "x":5.5, "y":2.25},
+ {"matrix": [2, 6], "x":6.5, "y":2.25},
+ {"matrix": [2, 7], "x":7.5, "y":2.25},
+ {"matrix": [2, 8], "x":8.5, "y":2.25},
+ {"matrix": [2, 9], "x":9.5, "y":2.25},
+ {"matrix": [2,10], "x":10.5, "y":2.25},
+ {"matrix": [2,11], "x":11.5, "y":2.25},
+ {"matrix": [2,12], "x":12.5, "y":2.25},
+ {"matrix": [2,14], "x":15.25, "y":2.25},
+ {"matrix": [2,15], "x":16.25, "y":2.25},
+ {"matrix": [2,16], "x":17.25, "y":2.25},
+
+ {"matrix": [3, 0], "x":0, "y":3.25, "w":1.75},
+ {"matrix": [3, 1], "x":1.75, "y":3.25},
+ {"matrix": [3, 2], "x":2.75, "y":3.25},
+ {"matrix": [3, 3], "x":3.75, "y":3.25},
+ {"matrix": [3, 4], "x":4.75, "y":3.25},
+ {"matrix": [3, 5], "x":5.75, "y":3.25},
+ {"matrix": [3, 6], "x":6.75, "y":3.25},
+ {"matrix": [3, 7], "x":7.75, "y":3.25},
+ {"matrix": [3, 8], "x":8.75, "y":3.25},
+ {"matrix": [3, 9], "x":9.75, "y":3.25},
+ {"matrix": [3,10], "x":10.75, "y":3.25},
+ {"matrix": [3,11], "x":11.75, "y":3.25},
+ {"matrix": [3,12], "x":12.75, "y":3.25},
+ {"matrix": [2,13], "x":13.75, "y":2.25, "w":1.25, "h":2},
+
+ {"matrix": [4, 0], "x":0, "y":4.25, "w":1.25},
+ {"matrix": [4, 1], "x":1.25, "y":4.25},
+ {"matrix": [4, 2], "x":2.25, "y":4.25},
+ {"matrix": [4, 3], "x":3.25, "y":4.25},
+ {"matrix": [4, 4], "x":4.25, "y":4.25},
+ {"matrix": [4, 5], "x":5.25, "y":4.25},
+ {"matrix": [4, 6], "x":6.25, "y":4.25},
+ {"matrix": [4, 7], "x":7.25, "y":4.25},
+ {"matrix": [4, 8], "x":8.25, "y":4.25},
+ {"matrix": [4, 9], "x":9.25, "y":4.25},
+ {"matrix": [4,10], "x":10.25, "y":4.25},
+ {"matrix": [4,11], "x":11.25, "y":4.25},
+ {"matrix": [4,12], "x":12.25, "y":4.25, "w":2.75},
+ {"matrix": [4,15], "x":16.25, "y":4.25},
+
+ {"matrix": [5, 0], "x":0, "y":5.25, "w":1.5},
+ {"matrix": [5, 2], "x":2.5, "y":5.25, "w":1.5},
+ {"matrix": [5, 6], "x":4, "y":5.25, "w":7},
+ {"matrix": [5,11], "x":11, "y":5.25, "w":1.5},
+ {"matrix": [5,13], "x":13.5, "y":5.25, "w":1.5},
+ {"matrix": [5,14], "x":15.25, "y":5.25},
+ {"matrix": [5,15], "x":16.25, "y":5.25},
+ {"matrix": [5,16], "x":17.25, "y":5.25}
+ ]
+ },
"LAYOUT_tkl_iso_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x":0, "y":0},
@@ -875,6 +1254,102 @@
{"matrix": [5,16], "x":17.25, "y":5.25}
]
},
+ "LAYOUT_tkl_iso_wkl_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x":0, "y":0},
+ {"matrix": [0, 2], "x":2, "y":0},
+ {"matrix": [0, 3], "x":3, "y":0},
+ {"matrix": [0, 4], "x":4, "y":0},
+ {"matrix": [0, 5], "x":5, "y":0},
+ {"matrix": [0, 6], "x":6.5, "y":0},
+ {"matrix": [0, 7], "x":7.5, "y":0},
+ {"matrix": [0, 8], "x":8.5, "y":0},
+ {"matrix": [0, 9], "x":9.5, "y":0},
+ {"matrix": [0,10], "x":11, "y":0},
+ {"matrix": [0,11], "x":12, "y":0},
+ {"matrix": [0,12], "x":13, "y":0},
+ {"matrix": [0,13], "x":14, "y":0},
+ {"matrix": [0,14], "x":15.25, "y":0},
+ {"matrix": [0,15], "x":16.25, "y":0},
+ {"matrix": [0,16], "x":17.25, "y":0},
+
+ {"matrix": [1, 0], "x":0, "y":1.25},
+ {"matrix": [1, 1], "x":1, "y":1.25},
+ {"matrix": [1, 2], "x":2, "y":1.25},
+ {"matrix": [1, 3], "x":3, "y":1.25},
+ {"matrix": [1, 4], "x":4, "y":1.25},
+ {"matrix": [1, 5], "x":5, "y":1.25},
+ {"matrix": [1, 6], "x":6, "y":1.25},
+ {"matrix": [1, 7], "x":7, "y":1.25},
+ {"matrix": [1, 8], "x":8, "y":1.25},
+ {"matrix": [1, 9], "x":9, "y":1.25},
+ {"matrix": [1,10], "x":10, "y":1.25},
+ {"matrix": [1,11], "x":11, "y":1.25},
+ {"matrix": [1,12], "x":12, "y":1.25},
+ {"matrix": [1,13], "x":13, "y":1.25},
+ {"matrix": [3,13], "x":14, "y":1.25},
+ {"matrix": [1,14], "x":15.25, "y":1.25},
+ {"matrix": [1,15], "x":16.25, "y":1.25},
+ {"matrix": [1,16], "x":17.25, "y":1.25},
+
+ {"matrix": [2, 0], "x":0, "y":2.25, "w":1.5},
+ {"matrix": [2, 1], "x":1.5, "y":2.25},
+ {"matrix": [2, 2], "x":2.5, "y":2.25},
+ {"matrix": [2, 3], "x":3.5, "y":2.25},
+ {"matrix": [2, 4], "x":4.5, "y":2.25},
+ {"matrix": [2, 5], "x":5.5, "y":2.25},
+ {"matrix": [2, 6], "x":6.5, "y":2.25},
+ {"matrix": [2, 7], "x":7.5, "y":2.25},
+ {"matrix": [2, 8], "x":8.5, "y":2.25},
+ {"matrix": [2, 9], "x":9.5, "y":2.25},
+ {"matrix": [2,10], "x":10.5, "y":2.25},
+ {"matrix": [2,11], "x":11.5, "y":2.25},
+ {"matrix": [2,12], "x":12.5, "y":2.25},
+ {"matrix": [2,14], "x":15.25, "y":2.25},
+ {"matrix": [2,15], "x":16.25, "y":2.25},
+ {"matrix": [2,16], "x":17.25, "y":2.25},
+
+ {"matrix": [3, 0], "x":0, "y":3.25, "w":1.75},
+ {"matrix": [3, 1], "x":1.75, "y":3.25},
+ {"matrix": [3, 2], "x":2.75, "y":3.25},
+ {"matrix": [3, 3], "x":3.75, "y":3.25},
+ {"matrix": [3, 4], "x":4.75, "y":3.25},
+ {"matrix": [3, 5], "x":5.75, "y":3.25},
+ {"matrix": [3, 6], "x":6.75, "y":3.25},
+ {"matrix": [3, 7], "x":7.75, "y":3.25},
+ {"matrix": [3, 8], "x":8.75, "y":3.25},
+ {"matrix": [3, 9], "x":9.75, "y":3.25},
+ {"matrix": [3,10], "x":10.75, "y":3.25},
+ {"matrix": [3,11], "x":11.75, "y":3.25},
+ {"matrix": [3,12], "x":12.75, "y":3.25},
+ {"matrix": [2,13], "x":13.75, "y":2.25, "w":1.25, "h":2},
+
+ {"matrix": [4, 0], "x":0, "y":4.25, "w":1.25},
+ {"matrix": [4, 1], "x":1.25, "y":4.25},
+ {"matrix": [4, 2], "x":2.25, "y":4.25},
+ {"matrix": [4, 3], "x":3.25, "y":4.25},
+ {"matrix": [4, 4], "x":4.25, "y":4.25},
+ {"matrix": [4, 5], "x":5.25, "y":4.25},
+ {"matrix": [4, 6], "x":6.25, "y":4.25},
+ {"matrix": [4, 7], "x":7.25, "y":4.25},
+ {"matrix": [4, 8], "x":8.25, "y":4.25},
+ {"matrix": [4, 9], "x":9.25, "y":4.25},
+ {"matrix": [4,10], "x":10.25, "y":4.25},
+ {"matrix": [4,11], "x":11.25, "y":4.25},
+ {"matrix": [4,12], "x":12.25, "y":4.25, "w":1.75},
+ {"matrix": [4,13], "x":14, "y":4.25},
+ {"matrix": [4,15], "x":16.25, "y":4.25},
+
+ {"matrix": [5, 0], "x":0, "y":5.25, "w":1.5},
+ {"matrix": [5, 2], "x":2.5, "y":5.25, "w":1.5},
+ {"matrix": [5, 6], "x":4, "y":5.25, "w":7},
+ {"matrix": [5,11], "x":11, "y":5.25, "w":1.5},
+ {"matrix": [5,13], "x":13.5, "y":5.25, "w":1.5},
+ {"matrix": [5,14], "x":15.25, "y":5.25},
+ {"matrix": [5,15], "x":16.25, "y":5.25},
+ {"matrix": [5,16], "x":17.25, "y":5.25}
+ ]
+ },
"LAYOUT_all": {
"layout": [
{"matrix": [0, 0], "x":0, "y":0},
diff --git a/keyboards/plywrks/ply8x/keymaps/default/keymap.c b/keyboards/plywrks/ply8x/solder/keymaps/default/keymap.c
index 4ca5b29581..4ca5b29581 100644
--- a/keyboards/plywrks/ply8x/keymaps/default/keymap.c
+++ b/keyboards/plywrks/ply8x/solder/keymaps/default/keymap.c
diff --git a/keyboards/plywrks/ply8x/solder/mcuconf.h b/keyboards/plywrks/ply8x/solder/mcuconf.h
new file mode 100644
index 0000000000..aceb2e3dfc
--- /dev/null
+++ b/keyboards/plywrks/ply8x/solder/mcuconf.h
@@ -0,0 +1,9 @@
+// Copyright 2023 Ramon Imbao (@ramonimbao)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include_next <mcuconf.h>
+
+#undef STM32_SPI_USE_SPI2
+#define STM32_SPI_USE_SPI2 TRUE
diff --git a/keyboards/poker87c/keyboard.json b/keyboards/poker87c/keyboard.json
index ab626c8be9..08355d8a2b 100644
--- a/keyboards/poker87c/keyboard.json
+++ b/keyboards/poker87c/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "POKER-87C Hotswap",
"manufacturer": "mfkiiyd",
- "url": "",
"maintainer": "mfkiiyd",
"usb": {
"vid": "0x6D66",
diff --git a/keyboards/poker87d/keyboard.json b/keyboards/poker87d/keyboard.json
index 61710aac2c..7e6f08d82c 100644
--- a/keyboards/poker87d/keyboard.json
+++ b/keyboards/poker87d/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "POKER-87D Hotswap",
"manufacturer": "mfkiiyd",
- "url": "",
"maintainer": "mfkiiyd",
"usb": {
"vid": "0x6D66",
diff --git a/keyboards/polilla/rev1/keyboard.json b/keyboards/polilla/rev1/keyboard.json
index 746f47963e..27132202d2 100644
--- a/keyboards/polilla/rev1/keyboard.json
+++ b/keyboards/polilla/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Polilla",
"manufacturer": "elagil",
- "url": "",
"maintainer": "elagil",
"usb": {
"vid": "0x6166",
diff --git a/keyboards/polycarbdiet/s20/keyboard.json b/keyboards/polycarbdiet/s20/keyboard.json
index f87429b4a7..07cc8acc48 100644
--- a/keyboards/polycarbdiet/s20/keyboard.json
+++ b/keyboards/polycarbdiet/s20/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "S20 revA",
"manufacturer": "polycarbdiet",
- "url": "",
"maintainer": "polycarbdiet",
"usb": {
"vid": "0x5040",
diff --git a/keyboards/primekb/prime_r/keyboard.json b/keyboards/primekb/prime_r/keyboard.json
index b2a7ecec7a..d92903b897 100644
--- a/keyboards/primekb/prime_r/keyboard.json
+++ b/keyboards/primekb/prime_r/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Prime_R",
"manufacturer": "PrimeKB",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/printedpad/keyboard.json b/keyboards/printedpad/keyboard.json
index 90a42c7313..d9fc996f33 100644
--- a/keyboards/printedpad/keyboard.json
+++ b/keyboards/printedpad/keyboard.json
@@ -18,7 +18,6 @@
"rows": ["A10", "C9", "A8", "A9"]
},
"processor": "STM32F072",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0001",
diff --git a/keyboards/program_yoink/ortho/keyboard.json b/keyboards/program_yoink/ortho/keyboard.json
index e9d5fd3e80..2d50640a41 100644
--- a/keyboards/program_yoink/ortho/keyboard.json
+++ b/keyboards/program_yoink/ortho/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Program Yoink! Ortho",
"manufacturer": "melonbred",
- "url": "",
"maintainer": "melonbred",
"usb": {
"vid": "0x7079",
diff --git a/keyboards/program_yoink/staggered/keyboard.json b/keyboards/program_yoink/staggered/keyboard.json
index c20e2c9fc7..82f41d8e27 100644
--- a/keyboards/program_yoink/staggered/keyboard.json
+++ b/keyboards/program_yoink/staggered/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Program Yoink! Staggered",
"manufacturer": "melonbred",
- "url": "",
"maintainer": "melonbred",
"usb": {
"vid": "0x7079",
diff --git a/keyboards/projectcain/relic/keyboard.json b/keyboards/projectcain/relic/keyboard.json
index f9df6770d1..428240f923 100644
--- a/keyboards/projectcain/relic/keyboard.json
+++ b/keyboards/projectcain/relic/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Relic",
"manufacturer": "projectcain",
- "url": "",
"maintainer": "projectcain",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/projectcain/vault45/keyboard.json b/keyboards/projectcain/vault45/keyboard.json
index 2ab3e010e7..66199a620d 100644
--- a/keyboards/projectcain/vault45/keyboard.json
+++ b/keyboards/projectcain/vault45/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Vault45",
"manufacturer": "projectcain",
- "url": "",
"maintainer": "projectcain",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/projectd/65/projectd_65_ansi/keyboard.json b/keyboards/projectd/65/projectd_65_ansi/keyboard.json
index 32a95f965e..1e1f5cce2a 100644
--- a/keyboards/projectd/65/projectd_65_ansi/keyboard.json
+++ b/keyboards/projectd/65/projectd_65_ansi/keyboard.json
@@ -161,7 +161,6 @@
],
"sleep": true
},
- "url": "",
"usb": {
"device_version": "0.0.4",
"pid": "0x5319",
diff --git a/keyboards/projectd/75/ansi/keyboard.json b/keyboards/projectd/75/ansi/keyboard.json
index d94db22bfc..3040981378 100644
--- a/keyboards/projectd/75/ansi/keyboard.json
+++ b/keyboards/projectd/75/ansi/keyboard.json
@@ -182,7 +182,6 @@
],
"sleep": true
},
- "url": "",
"usb": {
"device_version": "0.0.2",
"pid": "0x000F",
diff --git a/keyboards/projectd/75/iso/keyboard.json b/keyboards/projectd/75/iso/keyboard.json
index d42e8c4b33..a4d5e909c1 100644
--- a/keyboards/projectd/75/iso/keyboard.json
+++ b/keyboards/projectd/75/iso/keyboard.json
@@ -176,7 +176,6 @@
{ "flags": 4, "matrix": [0, 5], "x": 152, "y": 52 }
]
},
- "url": "",
"usb": {
"device_version": "0.0.2",
"pid": "0x0011",
diff --git a/keyboards/projectkb/signature87/keyboard.json b/keyboards/projectkb/signature87/keyboard.json
index 2b18bf4572..adb3fd5fd7 100644
--- a/keyboards/projectkb/signature87/keyboard.json
+++ b/keyboards/projectkb/signature87/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Signature87",
"manufacturer": "Project Keyboard",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x0159",
diff --git a/keyboards/prototypist/oceanographer/keyboard.json b/keyboards/prototypist/oceanographer/keyboard.json
index 8b0209d451..f76980499e 100644
--- a/keyboards/prototypist/oceanographer/keyboard.json
+++ b/keyboards/prototypist/oceanographer/keyboard.json
@@ -29,8 +29,6 @@
"led_count": 3,
"sleep": true,
"hue_steps": 10,
- "saturation_steps": 17,
- "brightness_steps": 17,
"max_brightness": 155,
"animations": {
"alternating": true,
@@ -49,7 +47,6 @@
"rows": ["B0", "D5", "D3", "D2"]
},
"processor": "atmega32u4",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0002",
diff --git a/keyboards/prototypist/pt60/keyboard.json b/keyboards/prototypist/pt60/keyboard.json
index 8018350e6f..2ae193c924 100644
--- a/keyboards/prototypist/pt60/keyboard.json
+++ b/keyboards/prototypist/pt60/keyboard.json
@@ -17,7 +17,6 @@
"rows": ["B0", "B1", "B2", "B10", "B11"]
},
"processor": "STM32F303",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0001",
diff --git a/keyboards/prototypist/pt80/keyboard.json b/keyboards/prototypist/pt80/keyboard.json
index cb58643e3f..af7d6093cb 100644
--- a/keyboards/prototypist/pt80/keyboard.json
+++ b/keyboards/prototypist/pt80/keyboard.json
@@ -17,7 +17,6 @@
"rows": ["B14", "A8", "A9", "B13", "B11", "B12"]
},
"processor": "STM32F303",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0000",
diff --git a/keyboards/pteron36/keyboard.json b/keyboards/pteron36/keyboard.json
index 2000593e62..25c4dc8c54 100644
--- a/keyboards/pteron36/keyboard.json
+++ b/keyboards/pteron36/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Pteron36",
"manufacturer": "Harshit Goel",
- "url": "",
"maintainer": "harshitgoel96",
"usb": {
"vid": "0x4847",
diff --git a/keyboards/pteropus/keyboard.json b/keyboards/pteropus/keyboard.json
index 76cbe67eee..09356d1a99 100644
--- a/keyboards/pteropus/keyboard.json
+++ b/keyboards/pteropus/keyboard.json
@@ -17,7 +17,6 @@
"rows": ["B10", "B2", "B1", "B0"]
},
"processor": "STM32F072",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0000",
diff --git a/keyboards/puck/keyboard.json b/keyboards/puck/keyboard.json
index 4ec04d72be..e69c7755d3 100644
--- a/keyboards/puck/keyboard.json
+++ b/keyboards/puck/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Puck",
"manufacturer": "OkKeebs LLC",
- "url": "",
"maintainer": "john-pettigrew",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/punk75/keyboard.json b/keyboards/punk75/keyboard.json
index c7082e564f..62501a885c 100644
--- a/keyboards/punk75/keyboard.json
+++ b/keyboards/punk75/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "punk75",
"manufacturer": "dsanchezseco",
- "url": "",
"maintainer": "dsanchezseco",
"usb": {
"vid": "0xDEED",
diff --git a/keyboards/purin/keyboard.json b/keyboards/purin/keyboard.json
index 08a8b06e34..8da928ed03 100644
--- a/keyboards/purin/keyboard.json
+++ b/keyboards/purin/keyboard.json
@@ -17,7 +17,6 @@
"rows": ["F6", "F7", "D4", "D5", "D3"]
},
"processor": "atmega32u4",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0000",
diff --git a/keyboards/qck75/v1/keyboard.json b/keyboards/qck75/v1/keyboard.json
index a8ae853ab3..04cc5dc3c1 100644
--- a/keyboards/qck75/v1/keyboard.json
+++ b/keyboards/qck75/v1/keyboard.json
@@ -25,7 +25,6 @@
"rows": ["C3", "A0", "A1", "A2", "B10", "A15"]
},
"processor": "STM32F072",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0001",
diff --git a/keyboards/qpockets/eggman/keyboard.json b/keyboards/qpockets/eggman/keyboard.json
index 32cb76fc88..b784c6aec3 100644
--- a/keyboards/qpockets/eggman/keyboard.json
+++ b/keyboards/qpockets/eggman/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "eggman",
"manufacturer": "qpockets",
- "url": "",
"maintainer": "qpockets",
"usb": {
"vid": "0x7170",
diff --git a/keyboards/qpockets/space_space/rev1/keyboard.json b/keyboards/qpockets/space_space/rev1/keyboard.json
index cc8cda49a8..5284230e61 100644
--- a/keyboards/qpockets/space_space/rev1/keyboard.json
+++ b/keyboards/qpockets/space_space/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "space_space",
"manufacturer": "qpockets",
- "url": "",
"maintainer": "qpockets",
"usb": {
"vid": "0x7170",
diff --git a/keyboards/qpockets/space_space/rev2/keyboard.json b/keyboards/qpockets/space_space/rev2/keyboard.json
index e2f24032a3..7374ed4728 100644
--- a/keyboards/qpockets/space_space/rev2/keyboard.json
+++ b/keyboards/qpockets/space_space/rev2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "space_space",
"manufacturer": "qpockets",
- "url": "",
"maintainer": "qpockets",
"usb": {
"vid": "0x7170",
diff --git a/keyboards/qpockets/wanten/keyboard.json b/keyboards/qpockets/wanten/keyboard.json
index 86bfe02300..e1c21b5d0f 100644
--- a/keyboards/qpockets/wanten/keyboard.json
+++ b/keyboards/qpockets/wanten/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "wanten",
"manufacturer": "qpockets",
- "url": "",
"maintainer": "qpockets",
"usb": {
"vid": "0x7170",
diff --git a/keyboards/quad_h/lb75/keyboard.json b/keyboards/quad_h/lb75/keyboard.json
index e88ba4b3a4..3dc43bdb69 100644
--- a/keyboards/quad_h/lb75/keyboard.json
+++ b/keyboards/quad_h/lb75/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "LB75",
"manufacturer": "QUADH",
- "url": "",
"maintainer": "ai03",
"usb": {
"vid": "0xA103",
diff --git a/keyboards/quadrum/delta/keyboard.json b/keyboards/quadrum/delta/keyboard.json
index bfdc0afd62..6766bd2875 100644
--- a/keyboards/quadrum/delta/keyboard.json
+++ b/keyboards/quadrum/delta/keyboard.json
@@ -21,7 +21,6 @@
"rows": ["F5", "F4", "F1", "F0", "D2"]
},
"processor": "atmega32u4",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0002",
diff --git a/keyboards/quantrik/kyuu/keyboard.json b/keyboards/quantrik/kyuu/keyboard.json
index 5827f08d21..b7a2a01807 100644
--- a/keyboards/quantrik/kyuu/keyboard.json
+++ b/keyboards/quantrik/kyuu/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Kyuu",
"manufacturer": "Quantrik",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x5154",
diff --git a/keyboards/qwertlekeys/calice/keyboard.json b/keyboards/qwertlekeys/calice/keyboard.json
index 676ca7a433..6e57f37892 100644
--- a/keyboards/qwertlekeys/calice/keyboard.json
+++ b/keyboards/qwertlekeys/calice/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Calice",
"manufacturer": "QwertleKeys",
- "url": "",
"maintainer": "Jels02",
"usb": {
"vid": "0x716B",
diff --git a/keyboards/qwertykeys/qk65/hotswap/keyboard.json b/keyboards/qwertykeys/qk65/hotswap/keyboard.json
index 7c786a7038..a641e3cc7a 100644
--- a/keyboards/qwertykeys/qk65/hotswap/keyboard.json
+++ b/keyboards/qwertykeys/qk65/hotswap/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "QK65 Hotswap",
"manufacturer": "qwertykeys",
- "url": "",
"maintainer": "qwertykeys",
"usb": {
"vid": "0x4F53",
diff --git a/keyboards/qwertykeys/qk65/solder/keyboard.json b/keyboards/qwertykeys/qk65/solder/keyboard.json
index b1795474d3..deb2c987b5 100644
--- a/keyboards/qwertykeys/qk65/solder/keyboard.json
+++ b/keyboards/qwertykeys/qk65/solder/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "QK65 Solder",
"manufacturer": "qwertykeys",
- "url": "",
"maintainer": "qwertykeys",
"usb": {
"vid": "0x4F53",
diff --git a/keyboards/qwertyydox/rev1/keyboard.json b/keyboards/qwertyydox/rev1/keyboard.json
index 24284ff8c0..0010f9f7e8 100644
--- a/keyboards/qwertyydox/rev1/keyboard.json
+++ b/keyboards/qwertyydox/rev1/keyboard.json
@@ -2,7 +2,6 @@
"keyboard_name": "QWERTYYdox",
"manufacturer": "AYDENandDAD Youtube",
"identifier": "0x1256",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xCEEB",
diff --git a/keyboards/rabbit/rabbit68/keyboard.json b/keyboards/rabbit/rabbit68/keyboard.json
index ce35a7d3c2..016e453199 100644
--- a/keyboards/rabbit/rabbit68/keyboard.json
+++ b/keyboards/rabbit/rabbit68/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Rabbit68",
"manufacturer": "Kai Eckert",
- "url": "",
"maintainer": "kaiec",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/rainkeebs/rainkeeb/keyboard.json b/keyboards/rainkeebs/rainkeeb/keyboard.json
index a291d61d3b..af6021bc1a 100644
--- a/keyboards/rainkeebs/rainkeeb/keyboard.json
+++ b/keyboards/rainkeebs/rainkeeb/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "rainkeeb",
"manufacturer": "rainkeebs",
- "url": "",
"maintainer": "rain",
"usb": {
"vid": "0x726B",
diff --git a/keyboards/ramlord/witf/keyboard.json b/keyboards/ramlord/witf/keyboard.json
index 55049a3ffa..2e8b05eee9 100644
--- a/keyboards/ramlord/witf/keyboard.json
+++ b/keyboards/ramlord/witf/keyboard.json
@@ -22,7 +22,6 @@
"scroll_lock": "A4"
},
"processor": "STM32F072",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x343F",
diff --git a/keyboards/rart/rart45/keyboard.json b/keyboards/rart/rart45/keyboard.json
index 42a5d054d7..a1cf03341e 100644
--- a/keyboards/rart/rart45/keyboard.json
+++ b/keyboards/rart/rart45/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Rart45",
"manufacturer": "Alabahuy",
- "url": "",
"maintainer": "Alabahuy",
"usb": {
"vid": "0x414C",
diff --git a/keyboards/rart/rart4x4/keyboard.json b/keyboards/rart/rart4x4/keyboard.json
index c38e2103de..edd5ed12fe 100644
--- a/keyboards/rart/rart4x4/keyboard.json
+++ b/keyboards/rart/rart4x4/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "RART4X4",
"manufacturer": "Alabahuy",
- "url": "",
"maintainer": "Alabahuy",
"usb": {
"vid": "0x414C",
diff --git a/keyboards/rart/rart60/keyboard.json b/keyboards/rart/rart60/keyboard.json
index d5cc7bf0b4..474c3512af 100644
--- a/keyboards/rart/rart60/keyboard.json
+++ b/keyboards/rart/rart60/keyboard.json
@@ -23,7 +23,6 @@
"rows": ["GP23", "GP25", "GP15", "GP16", "GP17"]
},
"processor": "RP2040",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0060",
diff --git a/keyboards/rart/rart67/keyboard.json b/keyboards/rart/rart67/keyboard.json
index 6651561743..e911a783be 100644
--- a/keyboards/rart/rart67/keyboard.json
+++ b/keyboards/rart/rart67/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "RART67",
"manufacturer": "Alabahuy",
- "url": "",
"maintainer": "Alabahuy",
"usb": {
"vid": "0x414C",
diff --git a/keyboards/rart/rart67m/keyboard.json b/keyboards/rart/rart67m/keyboard.json
index 0d6cfdeed1..83ff7f30a1 100644
--- a/keyboards/rart/rart67m/keyboard.json
+++ b/keyboards/rart/rart67m/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "RART67M",
"manufacturer": "Alabahuy",
- "url": "",
"maintainer": "Alabahuy",
"usb": {
"vid": "0x414C",
diff --git a/keyboards/rart/rart75/keyboard.json b/keyboards/rart/rart75/keyboard.json
index beb8a7cc39..a087298e0a 100644
--- a/keyboards/rart/rart75/keyboard.json
+++ b/keyboards/rart/rart75/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "RART75",
"manufacturer": "Alabahuy",
- "url": "",
"maintainer": "Alabahuy",
"usb": {
"vid": "0x414C",
diff --git a/keyboards/rart/rart75hs/keyboard.json b/keyboards/rart/rart75hs/keyboard.json
index f8763bfbee..9371daacf2 100644
--- a/keyboards/rart/rart75hs/keyboard.json
+++ b/keyboards/rart/rart75hs/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "RART75 Hotswap",
"manufacturer": "Alabahuy",
- "url": "",
"maintainer": "Alabahuy",
"usb": {
"vid": "0x414C",
diff --git a/keyboards/rart/rart75m/keyboard.json b/keyboards/rart/rart75m/keyboard.json
index 925e8dff5e..3af82c9bc5 100644
--- a/keyboards/rart/rart75m/keyboard.json
+++ b/keyboards/rart/rart75m/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "RART75M",
"manufacturer": "Alabahuy",
- "url": "",
"maintainer": "Alabahuy",
"usb": {
"vid": "0x414C",
diff --git a/keyboards/rart/rart80/keyboard.json b/keyboards/rart/rart80/keyboard.json
index 06fbd1add6..a2d4a7f3eb 100644
--- a/keyboards/rart/rart80/keyboard.json
+++ b/keyboards/rart/rart80/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "RART80 Hotswap",
"manufacturer": "Alabahuy",
- "url": "",
"maintainer": "Alabahuy",
"usb": {
"vid": "0x414C",
diff --git a/keyboards/rart/rartand/keyboard.json b/keyboards/rart/rartand/keyboard.json
index 330beca3e1..57ff3f068f 100644
--- a/keyboards/rart/rartand/keyboard.json
+++ b/keyboards/rart/rartand/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Rartand",
"manufacturer": "Alabahuy",
- "url": "",
"maintainer": "Alabahuy",
"usb": {
"vid": "0x414C",
diff --git a/keyboards/rart/rartlice/keyboard.json b/keyboards/rart/rartlice/keyboard.json
index c55919e6a6..f568fbba47 100644
--- a/keyboards/rart/rartlice/keyboard.json
+++ b/keyboards/rart/rartlice/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Rartlice",
"manufacturer": "Alabahuy",
- "url": "",
"maintainer": "Alabahuy",
"usb": {
"vid": "0x414C",
diff --git a/keyboards/rart/rartlite/keyboard.json b/keyboards/rart/rartlite/keyboard.json
index f542654db7..baf65530d6 100644
--- a/keyboards/rart/rartlite/keyboard.json
+++ b/keyboards/rart/rartlite/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "RARTLITE",
"manufacturer": "Alabahuy",
- "url": "",
"maintainer": "Alabahuy",
"usb": {
"vid": "0x414C",
diff --git a/keyboards/rart/rartpad/keyboard.json b/keyboards/rart/rartpad/keyboard.json
index ac9b2a38f1..dd4f778e26 100644
--- a/keyboards/rart/rartpad/keyboard.json
+++ b/keyboards/rart/rartpad/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "RARTPAD",
"manufacturer": "Alabahuy",
- "url": "",
"maintainer": "Alabahuy",
"usb": {
"vid": "0x414C",
diff --git a/keyboards/rastersoft/minitkl/keyboard.json b/keyboards/rastersoft/minitkl/keyboard.json
index e8d0691959..6b0869bc63 100644
--- a/keyboards/rastersoft/minitkl/keyboard.json
+++ b/keyboards/rastersoft/minitkl/keyboard.json
@@ -24,7 +24,6 @@
"rgblight": {
"led_count": 3,
"pin": "B2",
- "hue_steps": 8,
"saturation_steps": 8,
"brightness_steps": 8,
"animations": {
diff --git a/keyboards/rate/pistachio/info.json b/keyboards/rate/pistachio/info.json
index 0eaea7885d..7136860260 100644
--- a/keyboards/rate/pistachio/info.json
+++ b/keyboards/rate/pistachio/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "pistachio",
"manufacturer": "rate",
- "url": "",
"maintainer": "rate",
"usb": {
"vid": "0x5255",
diff --git a/keyboards/rate/pistachio_mp/keyboard.json b/keyboards/rate/pistachio_mp/keyboard.json
index dadb936942..dc016ffecb 100644
--- a/keyboards/rate/pistachio_mp/keyboard.json
+++ b/keyboards/rate/pistachio_mp/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "pistachio_mp",
"manufacturer": "rate",
- "url": "",
"maintainer": "rate",
"usb": {
"vid": "0x5255",
diff --git a/keyboards/rationalist/ratio65_hotswap/rev_a/keyboard.json b/keyboards/rationalist/ratio65_hotswap/rev_a/keyboard.json
index fe40f12f46..eb8da169c4 100644
--- a/keyboards/rationalist/ratio65_hotswap/rev_a/keyboard.json
+++ b/keyboards/rationalist/ratio65_hotswap/rev_a/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Ratio65 Hotswap Rev A",
"manufacturer": "4pplet",
- "url": "",
"maintainer": "4pplet",
"usb": {
"vid": "0x4446",
diff --git a/keyboards/rationalist/ratio65_solder/rev_a/keyboard.json b/keyboards/rationalist/ratio65_solder/rev_a/keyboard.json
index 6953636dee..384760e535 100644
--- a/keyboards/rationalist/ratio65_solder/rev_a/keyboard.json
+++ b/keyboards/rationalist/ratio65_solder/rev_a/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Ratio65 Solder Rev A",
"manufacturer": "4pplet",
- "url": "",
"maintainer": "4pplet",
"usb": {
"vid": "0x4446",
diff --git a/keyboards/rect44/keyboard.json b/keyboards/rect44/keyboard.json
index d331e48bd9..fd543f5299 100644
--- a/keyboards/rect44/keyboard.json
+++ b/keyboards/rect44/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Rect44",
"manufacturer": "koshinoya",
- "url": "",
"maintainer": "koshinoya",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/redox/rev1/info.json b/keyboards/redox/rev1/info.json
index ee9786d838..b5df079969 100644
--- a/keyboards/redox/rev1/info.json
+++ b/keyboards/redox/rev1/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Redox",
"manufacturer": "Falbatech",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4D44",
diff --git a/keyboards/redox/wireless/keyboard.json b/keyboards/redox/wireless/keyboard.json
index 86977f4602..7f167240b6 100644
--- a/keyboards/redox/wireless/keyboard.json
+++ b/keyboards/redox/wireless/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Redox Wireless",
"manufacturer": "Mattia Dal Ben",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4D44",
diff --git a/keyboards/redox_media/keyboard.json b/keyboards/redox_media/keyboard.json
index 83057da79f..dba5657ea2 100644
--- a/keyboards/redox_media/keyboard.json
+++ b/keyboards/redox_media/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Redox Media",
"manufacturer": "shiftux",
- "url": "",
"maintainer": "shiftux",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/redscarf_i/keyboard.json b/keyboards/redscarf_i/keyboard.json
index 6a186dff0b..0e5dbd76a8 100644
--- a/keyboards/redscarf_i/keyboard.json
+++ b/keyboards/redscarf_i/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Red Scarf I",
"manufacturer": "Red Scarf",
- "url": "",
"maintainer": "qmk, defying",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/redscarf_iiplus/verb/keyboard.json b/keyboards/redscarf_iiplus/verb/keyboard.json
index 99d763e39a..2bb3910fb5 100644
--- a/keyboards/redscarf_iiplus/verb/keyboard.json
+++ b/keyboards/redscarf_iiplus/verb/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "RedScarfII+ Ver.B (RS78)",
"manufacturer": "RedScarf",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/redscarf_iiplus/verc/keyboard.json b/keyboards/redscarf_iiplus/verc/keyboard.json
index a6defe4851..c9b960e7ba 100644
--- a/keyboards/redscarf_iiplus/verc/keyboard.json
+++ b/keyboards/redscarf_iiplus/verc/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "RedScarfII+ Ver.C (RS68)",
"manufacturer": "RedScarf",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/redscarf_iiplus/verd/keyboard.json b/keyboards/redscarf_iiplus/verd/keyboard.json
index d0ba57553a..fbb0b14402 100644
--- a/keyboards/redscarf_iiplus/verd/keyboard.json
+++ b/keyboards/redscarf_iiplus/verd/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "RedScarfII+ Ver.D",
"manufacturer": "RedScarf",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/reedskeebs/alish40/keyboard.json b/keyboards/reedskeebs/alish40/keyboard.json
index 1a4b9f4afe..564d4eeeda 100644
--- a/keyboards/reedskeebs/alish40/keyboard.json
+++ b/keyboards/reedskeebs/alish40/keyboard.json
@@ -34,10 +34,8 @@
"static_gradient": true,
"twinkle": true
},
- "brightness_steps": 17,
"hue_steps": 10,
- "led_count": 10,
- "saturation_steps": 17
+ "led_count": 10
},
"ws2812": {
"pin": "F5"
diff --git a/keyboards/relapsekb/or87/keyboard.json b/keyboards/relapsekb/or87/keyboard.json
index 0ac5022aca..67ff9cd19b 100644
--- a/keyboards/relapsekb/or87/keyboard.json
+++ b/keyboards/relapsekb/or87/keyboard.json
@@ -15,7 +15,6 @@
"cols": ["F7", "C7", "C6", "B6", "B5", "B4", "D7", "D0", "B7"]
},
"processor": "atmega32u4",
- "url": "",
"usb": {
"device_version": "1.0.0",
"vid": "0x722D",
diff --git a/keyboards/retro_75/keyboard.json b/keyboards/retro_75/keyboard.json
index e077be2ee9..1e29a5a0fc 100644
--- a/keyboards/retro_75/keyboard.json
+++ b/keyboards/retro_75/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Retro75",
"manufacturer": "PheonixStarr",
- "url": "",
"maintainer": "zvecr",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/reversestudio/decadepad/keyboard.json b/keyboards/reversestudio/decadepad/keyboard.json
index 601122aa37..e3f587d5dd 100644
--- a/keyboards/reversestudio/decadepad/keyboard.json
+++ b/keyboards/reversestudio/decadepad/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "DecadePad",
"manufacturer": "ReverseStudio",
- "url": "",
"maintainer": "huajijam",
"usb": {
"vid": "0x5253",
diff --git a/keyboards/reviung/reviung33/keyboard.json b/keyboards/reviung/reviung33/keyboard.json
index 0b5ceb4e54..ab0df0195b 100644
--- a/keyboards/reviung/reviung33/keyboard.json
+++ b/keyboards/reviung/reviung33/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "reviung33",
"manufacturer": "gtips",
- "url": "",
"maintainer": "gtips",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/reviung/reviung34/keyboard.json b/keyboards/reviung/reviung34/keyboard.json
index 8b354c00df..7495b7cc9d 100755
--- a/keyboards/reviung/reviung34/keyboard.json
+++ b/keyboards/reviung/reviung34/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "reviung34",
"manufacturer": "gtips",
- "url": "",
"maintainer": "gtips",
"usb": {
"vid": "0x6774",
diff --git a/keyboards/reviung/reviung39/keyboard.json b/keyboards/reviung/reviung39/keyboard.json
index 04cbe909c3..e18c1c163e 100644
--- a/keyboards/reviung/reviung39/keyboard.json
+++ b/keyboards/reviung/reviung39/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "reviung39",
"manufacturer": "gtips",
- "url": "",
"maintainer": "gtips",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/reviung/reviung41/keyboard.json b/keyboards/reviung/reviung41/keyboard.json
index 8e72ff5762..b44827c3d2 100644
--- a/keyboards/reviung/reviung41/keyboard.json
+++ b/keyboards/reviung/reviung41/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "reviung41",
"manufacturer": "gtips",
- "url": "",
"maintainer": "gtips",
"usb": {
"vid": "0x7807",
diff --git a/keyboards/reviung/reviung5/keyboard.json b/keyboards/reviung/reviung5/keyboard.json
index 5c932020a2..78c37f4992 100644
--- a/keyboards/reviung/reviung5/keyboard.json
+++ b/keyboards/reviung/reviung5/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "reviung5",
"manufacturer": "gtips",
- "url": "",
"maintainer": "gtips",
"usb": {
"vid": "0x5C06",
diff --git a/keyboards/reviung/reviung53/keyboard.json b/keyboards/reviung/reviung53/keyboard.json
index 33eec7d828..dfa2866f12 100644
--- a/keyboards/reviung/reviung53/keyboard.json
+++ b/keyboards/reviung/reviung53/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "reviung53",
"manufacturer": "gtips",
- "url": "",
"maintainer": "gtips",
"usb": {
"vid": "0x4E94",
diff --git a/keyboards/reviung/reviung61/keyboard.json b/keyboards/reviung/reviung61/keyboard.json
index 99a297bde4..09497b203e 100644
--- a/keyboards/reviung/reviung61/keyboard.json
+++ b/keyboards/reviung/reviung61/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "reviung61",
"manufacturer": "gtips",
- "url": "",
"maintainer": "gtips",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/rgbkb/sol/rev1/keyboard.json b/keyboards/rgbkb/sol/rev1/keyboard.json
index 38932a78e1..9a4c538e55 100644
--- a/keyboards/rgbkb/sol/rev1/keyboard.json
+++ b/keyboards/rgbkb/sol/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Sol",
"manufacturer": "RGBKB",
- "url": "",
"maintainer": "Legonut",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/rgbkb/sol/rev2/keyboard.json b/keyboards/rgbkb/sol/rev2/keyboard.json
index b6bad358e3..140ea1cd69 100644
--- a/keyboards/rgbkb/sol/rev2/keyboard.json
+++ b/keyboards/rgbkb/sol/rev2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Sol",
"manufacturer": "RGBKB",
- "url": "",
"maintainer": "Legonut",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/rgbkb/sol3/rev1/keyboard.json b/keyboards/rgbkb/sol3/rev1/keyboard.json
index 775e3f8629..dc9e6d4035 100644
--- a/keyboards/rgbkb/sol3/rev1/keyboard.json
+++ b/keyboards/rgbkb/sol3/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Sol 3",
"manufacturer": "RGBKB",
- "url": "",
"maintainer": "XScorpion2, rgbkb",
"usb": {
"vid": "0x3535",
diff --git a/keyboards/rgbkb/zen/rev1/keyboard.json b/keyboards/rgbkb/zen/rev1/keyboard.json
index 91d127de58..b35381f607 100644
--- a/keyboards/rgbkb/zen/rev1/keyboard.json
+++ b/keyboards/rgbkb/zen/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Project Zen",
"manufacturer": "Legonut",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/rgbkb/zen/rev2/keyboard.json b/keyboards/rgbkb/zen/rev2/keyboard.json
index b59af6dfdd..917274f186 100644
--- a/keyboards/rgbkb/zen/rev2/keyboard.json
+++ b/keyboards/rgbkb/zen/rev2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Project Zen",
"manufacturer": "Legonut",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/rmi_kb/aelith/keyboard.json b/keyboards/rmi_kb/aelith/keyboard.json
index de16e5ac31..b3f688913e 100644
--- a/keyboards/rmi_kb/aelith/keyboard.json
+++ b/keyboards/rmi_kb/aelith/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "AELITH",
"manufacturer": "RMI-KB",
- "url": "",
"maintainer": "ramonimbao",
"usb": {
"vid": "0xB16B",
diff --git a/keyboards/rmi_kb/chevron/keyboard.json b/keyboards/rmi_kb/chevron/keyboard.json
index 8eda552902..8ae5c12ae1 100644
--- a/keyboards/rmi_kb/chevron/keyboard.json
+++ b/keyboards/rmi_kb/chevron/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Chevron",
"manufacturer": "RMI-KB",
- "url": "",
"maintainer": "ramonimbao",
"usb": {
"vid": "0xB16B",
diff --git a/keyboards/rmi_kb/equator/keyboard.json b/keyboards/rmi_kb/equator/keyboard.json
index 9e1ccab0fb..4eccede555 100644
--- a/keyboards/rmi_kb/equator/keyboard.json
+++ b/keyboards/rmi_kb/equator/keyboard.json
@@ -18,7 +18,6 @@
"rows": ["B12", "B10", "A15", "A10", "B1"]
},
"processor": "STM32F072",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0xE0A1",
diff --git a/keyboards/rmi_kb/herringbone/pro/keyboard.json b/keyboards/rmi_kb/herringbone/pro/keyboard.json
index 5303185692..a49983db07 100644
--- a/keyboards/rmi_kb/herringbone/pro/keyboard.json
+++ b/keyboards/rmi_kb/herringbone/pro/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Herringbone Pro",
"manufacturer": "RMI-KB",
- "url": "",
"maintainer": "ramonimbao",
"usb": {
"vid": "0xB16B",
diff --git a/keyboards/rmi_kb/herringbone/v1/keyboard.json b/keyboards/rmi_kb/herringbone/v1/keyboard.json
index 2883f341ab..0f624dbc99 100644
--- a/keyboards/rmi_kb/herringbone/v1/keyboard.json
+++ b/keyboards/rmi_kb/herringbone/v1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Herringbone",
"manufacturer": "RMI-KB",
- "url": "",
"maintainer": "ramonimbao",
"usb": {
"vid": "0xB16B",
diff --git a/keyboards/rmi_kb/mona/v1/keyboard.json b/keyboards/rmi_kb/mona/v1/keyboard.json
index 9d8f66af2f..f56986df1a 100644
--- a/keyboards/rmi_kb/mona/v1/keyboard.json
+++ b/keyboards/rmi_kb/mona/v1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Mona",
"manufacturer": "RMI-KB",
- "url": "",
"maintainer": "ramonimbao",
"usb": {
"vid": "0xB16B",
diff --git a/keyboards/rmi_kb/mona/v1_1/keyboard.json b/keyboards/rmi_kb/mona/v1_1/keyboard.json
index b1e1f27fc0..95f7b9706e 100644
--- a/keyboards/rmi_kb/mona/v1_1/keyboard.json
+++ b/keyboards/rmi_kb/mona/v1_1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Mona",
"manufacturer": "RMI-KB",
- "url": "",
"maintainer": "ramonimbao",
"usb": {
"vid": "0xB16B",
diff --git a/keyboards/rmi_kb/mona/v32a/keyboard.json b/keyboards/rmi_kb/mona/v32a/keyboard.json
index e4b7760813..84a301d173 100644
--- a/keyboards/rmi_kb/mona/v32a/keyboard.json
+++ b/keyboards/rmi_kb/mona/v32a/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Mona",
"manufacturer": "RMI-KB",
- "url": "",
"maintainer": "ramonimbao",
"usb": {
"vid": "0xB16B",
diff --git a/keyboards/rmi_kb/squishy65/keyboard.json b/keyboards/rmi_kb/squishy65/keyboard.json
index adc83200d3..aecaaf9c04 100644
--- a/keyboards/rmi_kb/squishy65/keyboard.json
+++ b/keyboards/rmi_kb/squishy65/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Squishy65",
"manufacturer": "RMI-KB",
- "url": "",
"maintainer": "ramonimbao",
"usb": {
"vid": "0xB16B",
diff --git a/keyboards/rmi_kb/squishyfrl/keyboard.json b/keyboards/rmi_kb/squishyfrl/keyboard.json
index 8a14a2a4ed..5f5d305c6f 100644
--- a/keyboards/rmi_kb/squishyfrl/keyboard.json
+++ b/keyboards/rmi_kb/squishyfrl/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "SquishyFRL",
"manufacturer": "RMI-KB",
- "url": "",
"maintainer": "ramonimbao",
"usb": {
"vid": "0xB16B",
diff --git a/keyboards/rmi_kb/squishytkl/keyboard.json b/keyboards/rmi_kb/squishytkl/keyboard.json
index ae63d83c5d..6fc61e6b3c 100644
--- a/keyboards/rmi_kb/squishytkl/keyboard.json
+++ b/keyboards/rmi_kb/squishytkl/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "SquishyTKL",
"manufacturer": "RMI-KB",
- "url": "",
"maintainer": "ramonimbao",
"usb": {
"vid": "0xB16B",
diff --git a/keyboards/rmi_kb/tkl_ff/info.json b/keyboards/rmi_kb/tkl_ff/info.json
index a4fe24cab7..96bbeb8159 100644
--- a/keyboards/rmi_kb/tkl_ff/info.json
+++ b/keyboards/rmi_kb/tkl_ff/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "TKL FF",
"manufacturer": "RMI-KB",
- "url": "",
"maintainer": "ramonimbao",
"usb": {
"vid": "0xB16B",
diff --git a/keyboards/rmi_kb/wete/v1/keyboard.json b/keyboards/rmi_kb/wete/v1/keyboard.json
index c9a54f76c2..ff18fac5b5 100644
--- a/keyboards/rmi_kb/wete/v1/keyboard.json
+++ b/keyboards/rmi_kb/wete/v1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Wete",
"manufacturer": "RMI-KB",
- "url": "",
"maintainer": "ramonimbao",
"usb": {
"vid": "0xB16B",
diff --git a/keyboards/rmi_kb/wete/v2/keyboard.json b/keyboards/rmi_kb/wete/v2/keyboard.json
index 2c925ee919..3ad1fc9a73 100644
--- a/keyboards/rmi_kb/wete/v2/keyboard.json
+++ b/keyboards/rmi_kb/wete/v2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Wete R2",
"manufacturer": "RMI-KB",
- "url": "",
"maintainer": "ramonimbao",
"usb": {
"vid": "0xB16B",
diff --git a/keyboards/rmkeebs/rm_fullsize/keyboard.json b/keyboards/rmkeebs/rm_fullsize/keyboard.json
index f9ff4dd5b8..a7e6ff99cb 100644
--- a/keyboards/rmkeebs/rm_fullsize/keyboard.json
+++ b/keyboards/rmkeebs/rm_fullsize/keyboard.json
@@ -18,7 +18,6 @@
"rows": ["GP8", "GP7", "GP9", "GP20", "GP18", "GP19"]
},
"processor": "RP2040",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0000",
diff --git a/keyboards/rocketboard_16/keyboard.json b/keyboards/rocketboard_16/keyboard.json
index 4831911f4f..cacd37d1c3 100644
--- a/keyboards/rocketboard_16/keyboard.json
+++ b/keyboards/rocketboard_16/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Rocketboard-16",
"manufacturer": "Rocketboard",
- "url": "",
"maintainer": "fl3tching101",
"usb": {
"vid": "0xB034",
diff --git a/keyboards/rocketboard_16/keycode_lookup.c b/keyboards/rocketboard_16/keycode_lookup.c
index 41fd5c8537..a29808d04d 100644
--- a/keyboards/rocketboard_16/keycode_lookup.c
+++ b/keyboards/rocketboard_16/keycode_lookup.c
@@ -14,6 +14,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#include <stdlib.h>
#include "keycode_lookup.h"
#include "quantum_keycodes.h"
#include "keymap_us.h"
diff --git a/keyboards/rominronin/katana60/rev1/keyboard.json b/keyboards/rominronin/katana60/rev1/keyboard.json
index 0a9bb4ea49..b8d9df35a7 100644
--- a/keyboards/rominronin/katana60/rev1/keyboard.json
+++ b/keyboards/rominronin/katana60/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Katana60 rev1",
"manufacturer": "RominRonin CandyKeys",
- "url": "",
"maintainer": "rominronin",
"usb": {
"vid": "0x7272",
diff --git a/keyboards/rot13labs/rotc0n/keyboard.json b/keyboards/rot13labs/rotc0n/keyboard.json
index a9dc27a471..a340c37d62 100644
--- a/keyboards/rot13labs/rotc0n/keyboard.json
+++ b/keyboards/rot13labs/rotc0n/keyboard.json
@@ -17,7 +17,6 @@
"rows": ["B1", "B0"]
},
"processor": "atmega328p",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0xBEEF",
diff --git a/keyboards/rot13labs/veilid_sao/keyboard.json b/keyboards/rot13labs/veilid_sao/keyboard.json
index 751345d264..0a0d8eecab 100644
--- a/keyboards/rot13labs/veilid_sao/keyboard.json
+++ b/keyboards/rot13labs/veilid_sao/keyboard.json
@@ -31,9 +31,6 @@
"cycle_left_right": true
},
"driver": "ws2812",
- "default": {
- "animation": "cycle_left_right"
- },
"layout": [
{"flags": 4, "matrix": [0, 0], "x": 0, "y": 0}
],
diff --git a/keyboards/rpiguy9907/southpaw66/keyboard.json b/keyboards/rpiguy9907/southpaw66/keyboard.json
index f2fdf4f5ff..c751ee6d8e 100644
--- a/keyboards/rpiguy9907/southpaw66/keyboard.json
+++ b/keyboards/rpiguy9907/southpaw66/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Southpaw66",
"manufacturer": "rpiguy9907",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x9907",
diff --git a/keyboards/ryanbaekr/rb1/keyboard.json b/keyboards/ryanbaekr/rb1/keyboard.json
index 31f2fa20c4..dd54bd2998 100644
--- a/keyboards/ryanbaekr/rb1/keyboard.json
+++ b/keyboards/ryanbaekr/rb1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "rb1",
"manufacturer": "ryanbaekr",
- "url": "",
"maintainer": "ryanbaekr",
"usb": {
"vid": "0x7262",
diff --git a/keyboards/ryanbaekr/rb18/keyboard.json b/keyboards/ryanbaekr/rb18/keyboard.json
index 03a1335c7b..cf9539c462 100644
--- a/keyboards/ryanbaekr/rb18/keyboard.json
+++ b/keyboards/ryanbaekr/rb18/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "rb18",
"manufacturer": "ryanbaekr",
- "url": "",
"maintainer": "ryanbaekr",
"usb": {
"vid": "0x7262",
diff --git a/keyboards/ryanbaekr/rb69/keyboard.json b/keyboards/ryanbaekr/rb69/keyboard.json
index c1cce7508e..3a5fd3fee3 100644
--- a/keyboards/ryanbaekr/rb69/keyboard.json
+++ b/keyboards/ryanbaekr/rb69/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "rb69",
"manufacturer": "ryanbaekr",
- "url": "",
"maintainer": "ryanbaekr",
"usb": {
"vid": "0x7262",
diff --git a/keyboards/ryanbaekr/rb86/keyboard.json b/keyboards/ryanbaekr/rb86/keyboard.json
index 5813a2fa7b..6cc5f0f9b0 100644
--- a/keyboards/ryanbaekr/rb86/keyboard.json
+++ b/keyboards/ryanbaekr/rb86/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "rb86",
"manufacturer": "ryanbaekr",
- "url": "",
"maintainer": "ryanbaekr",
"usb": {
"vid": "0x7262",
diff --git a/keyboards/ryanbaekr/rb87/keyboard.json b/keyboards/ryanbaekr/rb87/keyboard.json
index 6d19c3c29d..42114b29d8 100644
--- a/keyboards/ryanbaekr/rb87/keyboard.json
+++ b/keyboards/ryanbaekr/rb87/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "rb87",
"manufacturer": "ryanbaekr",
- "url": "",
"maintainer": "ryanbaekr",
"development_board": "elite_c",
"pin_compatible": "elite_c",
diff --git a/keyboards/ryanskidmore/rskeys100/keyboard.json b/keyboards/ryanskidmore/rskeys100/keyboard.json
index c77d3f4c90..27eae84a6e 100644
--- a/keyboards/ryanskidmore/rskeys100/keyboard.json
+++ b/keyboards/ryanskidmore/rskeys100/keyboard.json
@@ -158,7 +158,6 @@
},
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
- "url": "",
"maintainer": "ryanskidmore",
"community_layouts": ["fullsize_iso"],
"layouts": {
diff --git a/keyboards/sakura_workshop/fuji75/info.json b/keyboards/sakura_workshop/fuji75/info.json
index 7b56fd4d72..604c504641 100644
--- a/keyboards/sakura_workshop/fuji75/info.json
+++ b/keyboards/sakura_workshop/fuji75/info.json
@@ -1,6 +1,5 @@
{
"manufacturer": "SakuraWorkshop",
- "url": "",
"maintainer": "Freather",
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
diff --git a/keyboards/salane/ncr80alpsskfl/keyboard.json b/keyboards/salane/ncr80alpsskfl/keyboard.json
index ce3f10c685..5f7bae802a 100644
--- a/keyboards/salane/ncr80alpsskfl/keyboard.json
+++ b/keyboards/salane/ncr80alpsskfl/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "NCR80 ALPS SKFL",
"manufacturer": "Salane",
- "url": "",
"maintainer": "Mai The San",
"processor": "RP2040",
"bootloader": "rp2040",
diff --git a/keyboards/salane/starryfrl/keyboard.json b/keyboards/salane/starryfrl/keyboard.json
index 43e434cb02..fa8bd1224b 100644
--- a/keyboards/salane/starryfrl/keyboard.json
+++ b/keyboards/salane/starryfrl/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Starry FRL",
"manufacturer": "Salane",
- "url": "",
"maintainer": "Mai The San",
"processor": "RP2040",
"bootloader": "rp2040",
diff --git a/keyboards/salicylic_acid3/guide68/keyboard.json b/keyboards/salicylic_acid3/guide68/keyboard.json
index 0714262858..8bdb68f8c1 100644
--- a/keyboards/salicylic_acid3/guide68/keyboard.json
+++ b/keyboards/salicylic_acid3/guide68/keyboard.json
@@ -18,7 +18,6 @@
"rows": ["D4", "C6", "D7", "E6", "B4"]
},
"processor": "atmega32u4",
- "url": "",
"usb": {
"vid": "0x04D8",
"pid": "0xE6DD",
@@ -39,7 +38,6 @@
"twinkle": true
},
"sleep": true,
- "max_brightness": 255,
"split": true,
"split_count": [6, 6]
},
diff --git a/keyboards/sam/s80/keyboard.json b/keyboards/sam/s80/keyboard.json
index c721efdbd7..846ae198dd 100644
--- a/keyboards/sam/s80/keyboard.json
+++ b/keyboards/sam/s80/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "s8",
"manufacturer": "Sam",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x534D",
diff --git a/keyboards/sam/sg81m/keyboard.json b/keyboards/sam/sg81m/keyboard.json
index 66e0f1ab9c..4909a62569 100644
--- a/keyboards/sam/sg81m/keyboard.json
+++ b/keyboards/sam/sg81m/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "SG81M",
"manufacturer": "Sam",
- "url": "",
"maintainer": "CMMS-Freather",
"usb": {
"vid": "0x534D",
diff --git a/keyboards/sanctified/dystopia/keyboard.json b/keyboards/sanctified/dystopia/keyboard.json
index 1911081fc2..a7ae1a8ebb 100644
--- a/keyboards/sanctified/dystopia/keyboard.json
+++ b/keyboards/sanctified/dystopia/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Dystopia",
"manufacturer": "Sanctified.Works",
- "url": "",
"maintainer": "Sanctified",
"usb": {
"vid": "0x5357",
diff --git a/keyboards/sandwich/keeb68/keyboard.json b/keyboards/sandwich/keeb68/keyboard.json
index ad3ced0da2..cb03d5a256 100644
--- a/keyboards/sandwich/keeb68/keyboard.json
+++ b/keyboards/sandwich/keeb68/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Keeb68 (Patron Saint Edition)",
"manufacturer": "sandwich",
- "url": "",
"maintainer": "SandwichRising",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/satt/comet46/keyboard.json b/keyboards/satt/comet46/keyboard.json
index 0092f19c79..cd96686d6c 100644
--- a/keyboards/satt/comet46/keyboard.json
+++ b/keyboards/satt/comet46/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Comet46",
"manufacturer": "SatT",
- "url": "",
"maintainer": "SatT",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/satt/vision/keyboard.json b/keyboards/satt/vision/keyboard.json
index 88ec732cd6..15bbced9f5 100644
--- a/keyboards/satt/vision/keyboard.json
+++ b/keyboards/satt/vision/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Vision",
"manufacturer": "SatT",
- "url": "",
"maintainer": "SatT",
"usb": {
"vid": "0x5454",
diff --git a/keyboards/sauce/mild/keyboard.json b/keyboards/sauce/mild/keyboard.json
index 5f827ec4be..125fee6734 100644
--- a/keyboards/sauce/mild/keyboard.json
+++ b/keyboards/sauce/mild/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Mild",
"manufacturer": "Sauce",
- "url": "",
"maintainer": "andyywz",
"usb": {
"vid": "0x8367",
diff --git a/keyboards/sawnsprojects/amber80/solder/keyboard.json b/keyboards/sawnsprojects/amber80/solder/keyboard.json
index dc8e718fd6..37f8382f53 100644
--- a/keyboards/sawnsprojects/amber80/solder/keyboard.json
+++ b/keyboards/sawnsprojects/amber80/solder/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Amber80 Solder",
"manufacturer": "SawnsProjects X Yuutsu X Zlane",
- "url": "",
"maintainer": "SawnsProjects",
"usb": {
"vid": "0x5350",
diff --git a/keyboards/sawnsprojects/bunnygirl65/keyboard.json b/keyboards/sawnsprojects/bunnygirl65/keyboard.json
index 92dca8693d..3fab84c557 100644
--- a/keyboards/sawnsprojects/bunnygirl65/keyboard.json
+++ b/keyboards/sawnsprojects/bunnygirl65/keyboard.json
@@ -15,7 +15,6 @@
"rows": ["B4", "A15", "A3", "A8", "B14"]
},
"processor": "STM32F072",
- "url": "",
"usb": {
"device_version": "1.0.0",
"force_nkro": true,
diff --git a/keyboards/sawnsprojects/eclipse/eclipse60/keyboard.json b/keyboards/sawnsprojects/eclipse/eclipse60/keyboard.json
index 7586ed5a34..7647131d9a 100644
--- a/keyboards/sawnsprojects/eclipse/eclipse60/keyboard.json
+++ b/keyboards/sawnsprojects/eclipse/eclipse60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Eclipse60",
"manufacturer": "Salane",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x534C",
@@ -26,10 +25,8 @@
},
"rgblight": {
"led_count": 18,
- "hue_steps": 8,
"saturation_steps": 8,
"brightness_steps": 8,
- "max_brightness": 255,
"sleep": true,
"animations": {
"alternating": true,
diff --git a/keyboards/sawnsprojects/eclipse/tinyneko/keyboard.json b/keyboards/sawnsprojects/eclipse/tinyneko/keyboard.json
index 80ae2558f2..360b42ead9 100644
--- a/keyboards/sawnsprojects/eclipse/tinyneko/keyboard.json
+++ b/keyboards/sawnsprojects/eclipse/tinyneko/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "tinyneko",
"manufacturer": "Salane",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x534C",
@@ -26,10 +25,8 @@
},
"rgblight": {
"led_count": 18,
- "hue_steps": 8,
"saturation_steps": 8,
"brightness_steps": 8,
- "max_brightness": 255,
"sleep": true,
"animations": {
"alternating": true,
diff --git a/keyboards/sawnsprojects/krush/krush65/hotswap/keyboard.json b/keyboards/sawnsprojects/krush/krush65/hotswap/keyboard.json
index ccb9165c5b..3f1b8f622f 100644
--- a/keyboards/sawnsprojects/krush/krush65/hotswap/keyboard.json
+++ b/keyboards/sawnsprojects/krush/krush65/hotswap/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Krush65 - Hotswap",
"manufacturer": "SawnsProjects",
- "url": "",
"maintainer": "MaiTheSan",
"usb": {
"vid": "0x5350",
diff --git a/keyboards/sawnsprojects/krush/krush65/solder/keyboard.json b/keyboards/sawnsprojects/krush/krush65/solder/keyboard.json
index a72c903d8c..bb4964f22c 100644
--- a/keyboards/sawnsprojects/krush/krush65/solder/keyboard.json
+++ b/keyboards/sawnsprojects/krush/krush65/solder/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Krush65 - Solder",
"manufacturer": "SawnsProjects",
- "url": "",
"maintainer": "MaiTheSan",
"usb": {
"vid": "0x5350",
diff --git a/keyboards/sawnsprojects/okayu/info.json b/keyboards/sawnsprojects/okayu/info.json
index 08c5afe688..74c5874b61 100644
--- a/keyboards/sawnsprojects/okayu/info.json
+++ b/keyboards/sawnsprojects/okayu/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Okayu",
"manufacturer": "Salane",
- "url": "",
"maintainer": "Mai The San",
"usb": {
"vid": "0x5350",
diff --git a/keyboards/sawnsprojects/plaque80/keyboard.json b/keyboards/sawnsprojects/plaque80/keyboard.json
index dd18cc12ee..6e7784e090 100644
--- a/keyboards/sawnsprojects/plaque80/keyboard.json
+++ b/keyboards/sawnsprojects/plaque80/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Plaque80",
"manufacturer": "SawnsProjects",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x5350",
diff --git a/keyboards/sawnsprojects/re65/keyboard.json b/keyboards/sawnsprojects/re65/keyboard.json
index 45e874db6d..04f050cfe5 100644
--- a/keyboards/sawnsprojects/re65/keyboard.json
+++ b/keyboards/sawnsprojects/re65/keyboard.json
@@ -2,7 +2,6 @@
"keyboard_name": "RE65",
"maintainer": "Salane",
"manufacturer": "Mai The San",
- "url": "",
"processor": "RP2040",
"bootloader": "rp2040",
"usb": {
diff --git a/keyboards/sawnsprojects/satxri6key/keyboard.json b/keyboards/sawnsprojects/satxri6key/keyboard.json
index 7049be25cf..717ea2c1f4 100644
--- a/keyboards/sawnsprojects/satxri6key/keyboard.json
+++ b/keyboards/sawnsprojects/satxri6key/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Satxri6key",
"manufacturer": "MaiTheSan",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x5350",
diff --git a/keyboards/sawnsprojects/vcl65/solder/keyboard.json b/keyboards/sawnsprojects/vcl65/solder/keyboard.json
index 4fc0f29766..10c10da8f2 100644
--- a/keyboards/sawnsprojects/vcl65/solder/keyboard.json
+++ b/keyboards/sawnsprojects/vcl65/solder/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "VCL65",
"manufacturer": "VCL x SawnsProjects",
- "url": "",
"maintainer": "MaiTheSan",
"usb": {
"vid": "0x5350",
diff --git a/keyboards/sck/gtm/keyboard.json b/keyboards/sck/gtm/keyboard.json
index 7ed3915114..88744edc84 100644
--- a/keyboards/sck/gtm/keyboard.json
+++ b/keyboards/sck/gtm/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "GTM Pad",
"manufacturer": "SpaceCityKeyboards",
- "url": "",
"maintainer": "jrfhoutx",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/sck/neiso/keyboard.json b/keyboards/sck/neiso/keyboard.json
index 15cec58849..28ea132e2f 100644
--- a/keyboards/sck/neiso/keyboard.json
+++ b/keyboards/sck/neiso/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "NEISO",
"manufacturer": "Space City Keyboards",
- "url": "",
"maintainer": "jrfhoutx",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/sck/osa/keyboard.json b/keyboards/sck/osa/keyboard.json
index 1cdd59367b..caff86da75 100644
--- a/keyboards/sck/osa/keyboard.json
+++ b/keyboards/sck/osa/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "OSA",
"manufacturer": "Space City Keyboards",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x5343",
diff --git a/keyboards/sentraq/s60_x/info.json b/keyboards/sentraq/s60_x/info.json
index 11ebdcd7d1..f8a28d9e85 100644
--- a/keyboards/sentraq/s60_x/info.json
+++ b/keyboards/sentraq/s60_x/info.json
@@ -1,6 +1,5 @@
{
"manufacturer": "Sentraq",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/sentraq/s65_plus/keyboard.json b/keyboards/sentraq/s65_plus/keyboard.json
index 01e2f0a275..c3f8851144 100644
--- a/keyboards/sentraq/s65_plus/keyboard.json
+++ b/keyboards/sentraq/s65_plus/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "S65-Plus",
"manufacturer": "Sentraq",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/sentraq/s65_x/keyboard.json b/keyboards/sentraq/s65_x/keyboard.json
index 0d0b0fc5fd..0329d36a49 100644
--- a/keyboards/sentraq/s65_x/keyboard.json
+++ b/keyboards/sentraq/s65_x/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "S65-X PCB",
"manufacturer": "Sentraq",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/shambles/keyboard.json b/keyboards/shambles/keyboard.json
index 34ec240cae..5f0e296ee8 100644
--- a/keyboards/shambles/keyboard.json
+++ b/keyboards/shambles/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Shambles TKL",
"manufacturer": "OsciX",
- "url": "",
"maintainer": "OsciX",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/shandoncodes/mino_plus/hotswap/keyboard.json b/keyboards/shandoncodes/mino_plus/hotswap/keyboard.json
index f181c610ed..e06f1adf7d 100644
--- a/keyboards/shandoncodes/mino_plus/hotswap/keyboard.json
+++ b/keyboards/shandoncodes/mino_plus/hotswap/keyboard.json
@@ -19,7 +19,6 @@
"rows": ["B14", "B10", "F0", "C15", "C14"]
},
"processor": "STM32F072",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0004",
diff --git a/keyboards/shandoncodes/mino_plus/soldered/keyboard.json b/keyboards/shandoncodes/mino_plus/soldered/keyboard.json
index 2b717c4c59..ef145046ef 100644
--- a/keyboards/shandoncodes/mino_plus/soldered/keyboard.json
+++ b/keyboards/shandoncodes/mino_plus/soldered/keyboard.json
@@ -19,7 +19,6 @@
"rows": ["B9", "B8", "A2", "A1", "A0"]
},
"processor": "STM32F072",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0003",
diff --git a/keyboards/shandoncodes/riot_pad/keyboard.json b/keyboards/shandoncodes/riot_pad/keyboard.json
index 7ecb52d8e0..8a019115d3 100644
--- a/keyboards/shandoncodes/riot_pad/keyboard.json
+++ b/keyboards/shandoncodes/riot_pad/keyboard.json
@@ -32,7 +32,6 @@
},
"led_count": 12
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x1000",
diff --git a/keyboards/sharkoon/skiller_sgk50_s2/keyboard.json b/keyboards/sharkoon/skiller_sgk50_s2/keyboard.json
index 39d59ffa55..f98fd659c3 100644
--- a/keyboards/sharkoon/skiller_sgk50_s2/keyboard.json
+++ b/keyboards/sharkoon/skiller_sgk50_s2/keyboard.json
@@ -185,7 +185,6 @@
"val_steps": 28,
"sleep": true
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x3662",
diff --git a/keyboards/sharkoon/skiller_sgk50_s3/keyboard.json b/keyboards/sharkoon/skiller_sgk50_s3/keyboard.json
index 6535ec63b7..cfc24397e9 100644
--- a/keyboards/sharkoon/skiller_sgk50_s3/keyboard.json
+++ b/keyboards/sharkoon/skiller_sgk50_s3/keyboard.json
@@ -169,7 +169,6 @@
"val_steps": 28,
"sleep": true
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x3663",
diff --git a/keyboards/sharkoon/skiller_sgk50_s4/keyboard.json b/keyboards/sharkoon/skiller_sgk50_s4/keyboard.json
index b7a628fd78..d6e42880ac 100644
--- a/keyboards/sharkoon/skiller_sgk50_s4/keyboard.json
+++ b/keyboards/sharkoon/skiller_sgk50_s4/keyboard.json
@@ -152,7 +152,6 @@
"sleep": true,
"val_steps": 28
},
- "url": "",
"usb": {
"device_version": "1.1.0",
"pid": "0x1020",
diff --git a/keyboards/shorty/keyboard.json b/keyboards/shorty/keyboard.json
index 158648badd..8310891c84 100644
--- a/keyboards/shorty/keyboard.json
+++ b/keyboards/shorty/keyboard.json
@@ -22,7 +22,6 @@
"rows": ["GP11", "GP10", "GP9", "GP29", "GP2"]
},
"processor": "RP2040",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x5400",
diff --git a/keyboards/shostudio/arc/keyboard.json b/keyboards/shostudio/arc/keyboard.json
index 33f9deb866..c1dd12e3db 100644
--- a/keyboards/shostudio/arc/keyboard.json
+++ b/keyboards/shostudio/arc/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "ARC",
"manufacturer": "Mechlovin Studio",
- "url": "",
"maintainer": "Shostudio",
"usb": {
"vid": "0x5050",
diff --git a/keyboards/sidderskb/majbritt/rev1/keyboard.json b/keyboards/sidderskb/majbritt/rev1/keyboard.json
index 717b4e85a0..bb18c1bb00 100644
--- a/keyboards/sidderskb/majbritt/rev1/keyboard.json
+++ b/keyboards/sidderskb/majbritt/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Majbritt Rev1",
"manufacturer": "SiddersKb",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x534B",
diff --git a/keyboards/sirius/uni660/rev1/keyboard.json b/keyboards/sirius/uni660/rev1/keyboard.json
index 793edcc685..c98c121bb8 100644
--- a/keyboards/sirius/uni660/rev1/keyboard.json
+++ b/keyboards/sirius/uni660/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Uni660",
"manufacturer": "SiRius",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x5352",
diff --git a/keyboards/sirius/uni660/rev2/ansi/keyboard.json b/keyboards/sirius/uni660/rev2/ansi/keyboard.json
index 3db9fb966a..df039af1dc 100644
--- a/keyboards/sirius/uni660/rev2/ansi/keyboard.json
+++ b/keyboards/sirius/uni660/rev2/ansi/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Uni660 V2 ANSI",
"manufacturer": "SiRius",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x5352",
diff --git a/keyboards/sirius/uni660/rev2/iso/keyboard.json b/keyboards/sirius/uni660/rev2/iso/keyboard.json
index 0e5958c117..062ca4f07e 100644
--- a/keyboards/sirius/uni660/rev2/iso/keyboard.json
+++ b/keyboards/sirius/uni660/rev2/iso/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Uni660 V2 ISO",
"manufacturer": "SiRius",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x5352",
diff --git a/keyboards/sixkeyboard/keyboard.json b/keyboards/sixkeyboard/keyboard.json
index 1c103e03b3..5c29dee16f 100644
--- a/keyboards/sixkeyboard/keyboard.json
+++ b/keyboards/sixkeyboard/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "SixKeyBoard",
"manufacturer": "TechKeys",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x746B",
diff --git a/keyboards/skeletn87/hotswap/keyboard.json b/keyboards/skeletn87/hotswap/keyboard.json
index b0af230668..f90716fcbf 100644
--- a/keyboards/skeletn87/hotswap/keyboard.json
+++ b/keyboards/skeletn87/hotswap/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Skeletn87 Hotswap",
"manufacturer": "BredWorks",
- "url": "",
"maintainer": "kb-elmo<[email protected]>",
"usb": {
"vid": "0xF984",
diff --git a/keyboards/skeletn87/soldered/keyboard.json b/keyboards/skeletn87/soldered/keyboard.json
index 292914d8b4..a50eeb8b68 100644
--- a/keyboards/skeletn87/soldered/keyboard.json
+++ b/keyboards/skeletn87/soldered/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Skeletn87",
"manufacturer": "BredWorks",
- "url": "",
"maintainer": "kb-elmo<[email protected]>",
"usb": {
"vid": "0xF984",
diff --git a/keyboards/skippys_custom_pcs/roopad/keyboard.json b/keyboards/skippys_custom_pcs/roopad/keyboard.json
index 0da722ff12..92cb0d1979 100644
--- a/keyboards/skippys_custom_pcs/roopad/keyboard.json
+++ b/keyboards/skippys_custom_pcs/roopad/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "RooPad",
"manufacturer": "ToastyStoemp",
- "url": "",
"maintainer": "ToastyStoemp",
"usb": {
"vid": "0x36B6",
diff --git a/keyboards/smallkeyboard/keyboard.json b/keyboards/smallkeyboard/keyboard.json
index 9963d83a47..dfbdee1cdd 100644
--- a/keyboards/smallkeyboard/keyboard.json
+++ b/keyboards/smallkeyboard/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "smallkeyboard",
"manufacturer": "zhouqiong19840119",
- "url": "",
"maintainer": "zhouqiong19840119",
"usb": {
"vid": "0x7A71",
diff --git a/keyboards/smithrune/iron160/iron160_h/keyboard.json b/keyboards/smithrune/iron160/iron160_h/keyboard.json
index c1dd4c9f54..c0c0eb1221 100644
--- a/keyboards/smithrune/iron160/iron160_h/keyboard.json
+++ b/keyboards/smithrune/iron160/iron160_h/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "I160-H",
"manufacturer": "SmithRune",
- "url": "",
"maintainer": "Gondolindrim",
"usb": {
"vid": "0x8384",
diff --git a/keyboards/smithrune/iron160/iron160_s/keyboard.json b/keyboards/smithrune/iron160/iron160_s/keyboard.json
index fc14114826..d247ce3253 100644
--- a/keyboards/smithrune/iron160/iron160_s/keyboard.json
+++ b/keyboards/smithrune/iron160/iron160_s/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "I160-S",
"manufacturer": "SmithRune",
- "url": "",
"maintainer": "Gondolindrim",
"usb": {
"vid": "0x8384",
diff --git a/keyboards/smithrune/iron165r2/info.json b/keyboards/smithrune/iron165r2/info.json
index cff9a97cb7..c0fb3634c3 100644
--- a/keyboards/smithrune/iron165r2/info.json
+++ b/keyboards/smithrune/iron165r2/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Iron165R2",
"manufacturer": "SmithRune",
- "url": "",
"maintainer": "Gondolindrim",
"usb": {
"vid": "0x8384",
diff --git a/keyboards/smithrune/iron180/keyboard.json b/keyboards/smithrune/iron180/keyboard.json
index b0c6e1a8ff..23ffa323af 100644
--- a/keyboards/smithrune/iron180/keyboard.json
+++ b/keyboards/smithrune/iron180/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Iron180 V1",
"manufacturer": "SmithRune",
- "url": "",
"maintainer": "Gondolindrim",
"usb": {
"vid": "0x8384",
diff --git a/keyboards/smithrune/iron180v2/v2h/keyboard.json b/keyboards/smithrune/iron180v2/v2h/keyboard.json
index 1580a12b8c..cf2d7163ed 100644
--- a/keyboards/smithrune/iron180v2/v2h/keyboard.json
+++ b/keyboards/smithrune/iron180v2/v2h/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Iron180H v2",
"manufacturer": "SmithRune",
- "url": "",
"maintainer": "Gondolindrim",
"usb": {
"vid": "0x8384",
diff --git a/keyboards/smithrune/iron180v2/v2s/keyboard.json b/keyboards/smithrune/iron180v2/v2s/keyboard.json
index f8f27f4cc1..2e21e17f28 100644
--- a/keyboards/smithrune/iron180v2/v2s/keyboard.json
+++ b/keyboards/smithrune/iron180v2/v2s/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Iron180 Sv2",
"manufacturer": "SmithRune",
- "url": "",
"maintainer": "Gondolindrim",
"usb": {
"vid": "0x8384",
diff --git a/keyboards/smithrune/magnus/m75h/keyboard.json b/keyboards/smithrune/magnus/m75h/keyboard.json
index 325db7d1da..c8b2e47069 100644
--- a/keyboards/smithrune/magnus/m75h/keyboard.json
+++ b/keyboards/smithrune/magnus/m75h/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Magnus M75H",
"manufacturer": "SmithRune",
- "url": "",
"maintainer": "Gondolindrim",
"usb": {
"vid": "0x8384",
diff --git a/keyboards/smithrune/magnus/m75s/keyboard.json b/keyboards/smithrune/magnus/m75s/keyboard.json
index 352b529bb0..a678c7eeaa 100644
--- a/keyboards/smithrune/magnus/m75s/keyboard.json
+++ b/keyboards/smithrune/magnus/m75s/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Magnus M75S",
"manufacturer": "SmithRune",
- "url": "",
"maintainer": "Gondolindrim",
"usb": {
"vid": "0x8384",
diff --git a/keyboards/smk60/keyboard.json b/keyboards/smk60/keyboard.json
index 67265a667c..13c81a21de 100644
--- a/keyboards/smk60/keyboard.json
+++ b/keyboards/smk60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "SMK60",
"manufacturer": "astro",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xDEAD",
diff --git a/keyboards/snampad/keyboard.json b/keyboards/snampad/keyboard.json
index e2a269d5c7..b835f0bf35 100644
--- a/keyboards/snampad/keyboard.json
+++ b/keyboards/snampad/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "snampad",
"manufacturer": "Snamellit",
- "url": "",
"maintainer": "ptillemans",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/snes_macropad/keyboard.json b/keyboards/snes_macropad/keyboard.json
index 91ee332357..c9d5e2aa59 100644
--- a/keyboards/snes_macropad/keyboard.json
+++ b/keyboards/snes_macropad/keyboard.json
@@ -19,7 +19,6 @@
"driver": "vendor"
},
"processor": "RP2040",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0000",
diff --git a/keyboards/soda/cherish/keyboard.json b/keyboards/soda/cherish/keyboard.json
index b256e93965..9235fe3b3e 100644
--- a/keyboards/soda/cherish/keyboard.json
+++ b/keyboards/soda/cherish/keyboard.json
@@ -1,6 +1,5 @@
{
"keyboard_name": "Cherish-75",
- "url": "",
"maintainer": "gezhaoyou",
"manufacturer": "gezhaoyou",
"usb": {
diff --git a/keyboards/sofle/keyhive/keyboard.json b/keyboards/sofle/keyhive/keyboard.json
index 8c76e875b0..720327b75d 100644
--- a/keyboards/sofle/keyhive/keyboard.json
+++ b/keyboards/sofle/keyhive/keyboard.json
@@ -1,5 +1,4 @@
{
- "keyboard_name": "Sofle",
"manufacturer": "Keyhive",
"development_board": "elite_c",
"usb": {
diff --git a/keyboards/sofle/keyhive/readme.md b/keyboards/sofle/keyhive/readme.md
deleted file mode 100644
index 3847dfe6bb..0000000000
--- a/keyboards/sofle/keyhive/readme.md
+++ /dev/null
@@ -1,54 +0,0 @@
-# Keyhive Sofle Keyboard
-
-![SofleKeyboard version 2.1 RGB Keyhive](https://i.imgur.com/WH9OoWuh.jpg)
-
-Sofle is 6×4+5 keys column-staggered split keyboard. Based on Lily58, Corne and Helix keyboards.
-
-For details about the keyboard design, refer to Josef's blog: [Sofle Keyboard - a split keyboard based on Lily58 and Crkbd](https://josef-adamcik.cz/electronics/let-me-introduce-you-sofle-keyboard-split-keyboard-based-on-lily58.html)
-
-Build guide: [Keyhive Sofle RGB build guide](https://github.com/keyhive/build_guides/blob/master/docs/keyboards/sofle-rgb.md)
-
-* Keyboard Maintainer: [Winder](https://github.com/winder)
-* Hardware Supported: Keyhive Sofle RGB, ProMicro / Elite-C
-* Hardware Availability: [Keyhive](https://keyhive.xyz/shop/sofle)
-
-### Acknowledgements
-
-* Solartempest - the image on this page and most of the code is either copied directly or inspired by their fork. [Solartempest's fork.](https://github.com/solartempest/qmk_firmware/tree/master/keyboards/solartempest/sofle).
-* [Keyhive fork](https://github.com/keyhive/qmk_firmware) defined all of the board settings.
-
-# Supported Keymaps
-
-The keyhive schematic has been slightly modified compared to the open source sofle and not all keymaps are compatible.
-
-* **default**: Basic functionality, no rgb, no VIA.
-* [keyhive_via](../keymaps/keyhive_via/readme.md) - Includes rgblighting and special support for remapping encoders with VIA.
-* **Other**: may work but backwards compatibility is not guaranteed or tested.
-
-# VIA Support
-As of 1.3.1, the VIA tool does not support Keyhive/Sofle V2 out of the box.
-See [keyhive_via](../keymaps/keyhive_via/readme.md) for details about configuring and using VIA.
-
-# Compiling
-
-Make example for this keyboard (after setting up your build environment):
-
- make sofle/keyhive:default
-
-## Flashing
-
-Flash using the correct command below (or use QMK Toolbox). These commands can be mixed if, for example, you have an Elite C on the left and a pro micro on the right.
-
-Press reset button on the keyboard when asked.
-
-Disconnect the first half, connect the second one and repeat the process.
-
- # for Pro Micro-based builds
- make sofle/keyhive:default:avrdude-split-left
- make sofle/keyhive:default:avrdude-split-right
-
- # for Elite C or DFU bootloader builds
- make sofle/keyhive:default:dfu-split-left
- make sofle/keyhive:default:dfu-split-right
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/sofle/keymaps/rgb_default/config.h b/keyboards/sofle/keymaps/rgb_default/config.h
deleted file mode 100644
index 564133ce7a..0000000000
--- a/keyboards/sofle/keymaps/rgb_default/config.h
+++ /dev/null
@@ -1,124 +0,0 @@
- /* Copyright 2021 Dane Evans
- *
- * 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 */
-
-///https://thomasbaart.nl/2018/12/01/reducing-firmware-size-in-qmk/
-
-#define CUSTOM_FONT
-
-#define CUSTOM_LAYER_READ //if you remove this it causes issues - needs better guarding
-
-
-#define QUICK_TAP_TERM 0
-#ifdef TAPPING_TERM
- #undef TAPPING_TERM
- #define TAPPING_TERM 200
-#endif
-#define ENCODER_DIRECTION_FLIP
-
-
-#define RGBLIGHT_SLEEP
-//
-#define RGBLIGHT_LAYERS
-
-/* ws2812 RGB LED */
-#define WS2812_DI_PIN D3
-
-
-#ifdef RGB_MATRIX_ENABLE
-#define RGBLIGHT_LED_COUNT 35 // Number of LEDs
-#define RGBLIGHT_LED_COUNT 35 // Number of LEDs
-#define RGB_MATRIX_LED_COUNT RGBLIGHT_LED_COUNT
-#endif
-
-#ifdef RGBLIGHT_ENABLE
- #undef RGBLIGHT_LED_COUNT
-
- //#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
- //#define RGBLIGHT_EFFECT_TWINKLE
-
- #define RGBLIGHT_LED_COUNT 70
- #undef RGBLED_SPLIT
- #define RGBLED_SPLIT { 35, 35 } // haven't figured out how to use this yet
-
- //#define RGBLIGHT_LED_COUNT 30
- #undef RGBLIGHT_LIMIT_VAL
- #define RGBLIGHT_LIMIT_VAL 120
- #define RGBLIGHT_HUE_STEP 10
- #define RGBLIGHT_SAT_STEP 17
- #define RGBLIGHT_VAL_STEP 17
-#endif
-
-#ifdef RGB_MATRIX_ENABLE
-# define RGB_MATRIX_KEYPRESSES // reacts to keypresses
-// # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses)
-# define RGB_MATRIX_SLEEP // turn off effects when suspended
-# define RGB_MATRIX_FRAMEBUFFER_EFFECTS
-// # define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness)
-// # define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness)
-# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 // limits maximum brightness of LEDs to 150 out of 255. Higher may cause the controller to crash.
-
-#define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_GRADIENT_LEFT_RIGHT
-
-# define RGB_MATRIX_HUE_STEP 8
-# define RGB_MATRIX_SAT_STEP 8
-# define RGB_MATRIX_VAL_STEP 8
-# define RGB_MATRIX_SPD_STEP 10
-
-/* Disable the animations you don't want/need. You will need to disable a good number of these *
- * because they take up a lot of space. Disable until you can successfully compile your firmware. */
- // # undef ENABLE_RGB_MATRIX_ALPHAS_MODS
- // # undef ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
- // # undef ENABLE_RGB_MATRIX_BREATHING
- // # undef ENABLE_RGB_MATRIX_CYCLE_ALL
- // # undef ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
- // # undef ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
- // # undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN
- // # undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
- // # undef ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
- // # undef ENABLE_RGB_MATRIX_DUAL_BEACON
- // # undef ENABLE_RGB_MATRIX_RAINBOW_BEACON
- // # undef ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
- // # undef ENABLE_RGB_MATRIX_RAINDROPS
- // # undef ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
- // # undef ENABLE_RGB_MATRIX_TYPING_HEATMAP
- // # undef ENABLE_RGB_MATRIX_DIGITAL_RAIN
- // # undef ENABLE_RGB_MATRIX_SOLID_REACTIVE
- // # undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
- // # undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
- // # undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
- // # undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
- // # undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
- // # undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
- // # undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
- // # undef ENABLE_RGB_MATRIX_SPLASH
- // # undef ENABLE_RGB_MATRIX_MULTISPLASH
- // # undef ENABLE_RGB_MATRIX_SOLID_SPLASH
- // # undef ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
-#endif
diff --git a/keyboards/sofle/keymaps/rgb_default/keymap.c b/keyboards/sofle/keymaps/rgb_default/keymap.c
deleted file mode 100644
index e992cf9adb..0000000000
--- a/keyboards/sofle/keymaps/rgb_default/keymap.c
+++ /dev/null
@@ -1,559 +0,0 @@
-
- /* Copyright 2021 Dane Evans
- *
- * 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/>.
- */
- // SOFLE RGB
-#include <stdio.h>
-
-#include QMK_KEYBOARD_H
-
-#define INDICATOR_BRIGHTNESS 30
-
-#define HSV_OVERRIDE_HELP(h, s, v, Override) h, s , Override
-#define HSV_OVERRIDE(hsv, Override) HSV_OVERRIDE_HELP(hsv,Override)
-
-// Light combinations
-#define SET_INDICATORS(hsv) \
- {0, 1, HSV_OVERRIDE_HELP(hsv, INDICATOR_BRIGHTNESS)}, \
- {35+0, 1, hsv}
-#define SET_UNDERGLOW(hsv) \
- {1, 6, hsv}, \
- {35+1, 6,hsv}
-#define SET_NUMPAD(hsv) \
- {35+15, 5, hsv},\
- {35+22, 3, hsv},\
- {35+27, 3, hsv}
-#define SET_NUMROW(hsv) \
- {10, 2, hsv}, \
- {20, 2, hsv}, \
- {30, 2, hsv}, \
- {35+ 10, 2, hsv}, \
- {35+ 20, 2, hsv}, \
- {35+ 30, 2, hsv}
-#define SET_INNER_COL(hsv) \
- {33, 4, hsv}, \
- {35+ 33, 4, hsv}
-
-#define SET_OUTER_COL(hsv) \
- {7, 4, hsv}, \
- {35+ 7, 4, hsv}
-#define SET_THUMB_CLUSTER(hsv) \
- {25, 2, hsv}, \
- {35+ 25, 2, hsv}
-#define SET_LAYER_ID(hsv) \
- {0, 1, HSV_OVERRIDE_HELP(hsv, INDICATOR_BRIGHTNESS)}, \
- {35+0, 1, HSV_OVERRIDE_HELP(hsv, INDICATOR_BRIGHTNESS)}, \
- {1, 6, hsv}, \
- {35+1, 6, hsv}, \
- {7, 4, hsv}, \
- {35+ 7, 4, hsv}, \
- {25, 2, hsv}, \
- {35+ 25, 2, hsv}
-
-
-enum sofle_layers {
- _DEFAULTS = 0,
- _QWERTY = 0,
- _COLEMAK,
- _COLEMAKDH,
- _LOWER,
- _RAISE,
- _ADJUST,
- _NUMPAD,
- _SWITCH
-};
-
-enum custom_keycodes {
- KC_LOWER = SAFE_RANGE,
- KC_RAISE,
- KC_ADJUST,
- KC_D_MUTE
-};
-
-#define KC_QWERTY PDF(_QWERTY)
-#define KC_COLEMAK PDF(_COLEMAK)
-#define KC_COLEMAKDH PDF(_COLEMAKDH)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/*
- * QWERTY
- * ,-----------------------------------------. ,-----------------------------------------.
- * | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | TAB | Q | W | E | R | T | | Y | U | I | O | P | Bspc |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * |LShift| A | S | D | F | G |-------. ,-------| H | J | K | L | ; | ' |
- * |------+------+------+------+------+------| MUTE | |DISCORD|------+------+------+------+------+------|
- * | LCTR | Z | X | C | V | B |-------| |-------| N | M | , | . | / |LShift|
- * `-----------------------------------------/ / \ \-----------------------------------------'
- * | Bspc | WIN |LOWER | Enter| /Space / \Enter \ |SPACE |RAISE | RCTR | RAlt |
- * | | | | |/ / \ \ | | | | |
- * `----------------------------------' '------''---------------------------'
- */
- [_QWERTY] = LAYOUT(
- //,------------------------------------------------. ,---------------------------------------------------.
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, LT(_SWITCH,KC_6), KC_7, KC_8, KC_9, KC_0, KC_GRV,
- //|------+-------+--------+--------+--------+------| |--------+-------+--------+--------+--------+---------|
- LT(_NUMPAD,KC_TAB),KC_Q,KC_W,KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
- //|------+-------+--------+--------+--------+------| |--------+-------+--------+--------+--------+---------|
- 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_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MUTE, KC_D_MUTE,KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT,
- //|------+-------+--------+--------+--------+------| === | | === |--------+-------+--------+--------+--------+---------|
- KC_BSPC, KC_LGUI, KC_LOWER, KC_SPC, KC_ENT , KC_SPC, KC_ENT , KC_RAISE, KC_RCTL, KC_RALT
- // \--------+--------+--------+---------+-------| |--------+---------+--------+---------+-------/
-),
-
-/*
- * COLEMAK
- * ,-----------------------------------------. ,-----------------------------------------.
- * | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | TAB | Q | W | F | P | G | | J | L | U | Y | ; | Bspc |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * |LShift| A | R | S | T | D |-------. ,-------| H | N | E | I | O | ' |
- * |------+------+------+------+------+------| MUTE | |DISCORD|------+------+------+------+------+------|
- * | LCTR | Z | X | C | V | B |-------| |-------| K | M | , | . | / |LShift|
- * `-----------------------------------------/ / \ \-----------------------------------------'
- * | Bspc | WIN |LOWER | Enter| /Space / \Enter \ |SPACE |RAISE | RCTR | RAlt |
- * | | | | |/ / \ \ | | | | |
- * `----------------------------------' '------''---------------------------'
- */
-[_COLEMAK] = LAYOUT(
- //,------------------------------------------------. ,---------------------------------------------------.
- KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, LT(_SWITCH,KC_6), KC_7, KC_8, KC_9, KC_0, KC_TRNS,
- //|------+-------+--------+--------+--------+------| |--------+-------+--------+--------+--------+---------|
- KC_TRNS, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_TRNS,
- //|------+-------+--------+--------+--------+------| |--------+-------+--------+--------+--------+---------|
- KC_TRNS, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_TRNS,
- //|------+-------+--------+--------+--------+------| === | | === |--------+-------+--------+--------+--------+---------|
- KC_TRNS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_TRNS, KC_TRNS,KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_TRNS,
- //|------+-------+--------+--------+--------+------| === | | === |--------+-------+--------+--------+--------+---------|
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
- // \--------+--------+--------+---------+-------| |--------+---------+--------+---------+-------/
-),
-
-/*
- * COLEMAK-DH
- * ,-----------------------------------------. ,-----------------------------------------.
- * | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | TAB | Q | W | F | P | B | | J | L | U | Y | ; | Bspc |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * |LShift| A | R | S | T | G |-------. ,-------| M | N | E | I | O | ' |
- * |------+------+------+------+------+------| MUTE | |DISCORD|------+------+------+------+------+------|
- * | LCTR | Z | X | C | D | V |-------| |-------| K | H | , | . | / |LShift|
- * `-----------------------------------------/ / \ \-----------------------------------------'
- * | Bspc | WIN |LOWER | Enter| /Space / \Enter \ |SPACE |RAISE | RCTR | RAlt |
- * | | | | |/ / \ \ | | | | |
- * `----------------------------------' '------''---------------------------'
- */
-[_COLEMAKDH] = LAYOUT(
- //,------------------------------------------------. ,---------------------------------------------------.
- KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, LT(_SWITCH,KC_6), KC_7, KC_8, KC_9, KC_0, KC_TRNS,
- //|------+-------+--------+--------+--------+------| |--------+-------+--------+--------+--------+---------|
- KC_TRNS, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_TRNS,
- //|------+-------+--------+--------+--------+------| |--------+-------+--------+--------+--------+---------|
- KC_TRNS, KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O, KC_TRNS,
- //|------+-------+--------+--------+--------+------| === | | === |--------+-------+--------+--------+--------+---------|
- KC_TRNS, KC_Z, KC_X, KC_C, KC_D, KC_V, KC_TRNS, KC_TRNS,KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_TRNS,
- //|------+-------+--------+--------+--------+------| === | | === |--------+-------+--------+--------+--------+---------|
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
- // \--------+--------+--------+---------+-------| |--------+---------+--------+---------+-------/
-),
-
-/* LOWER
- * ,-----------------------------------------. ,-----------------------------------------.
- * | trans| F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | F12 |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | trans| ! | @ | # | $ | % |-------. ,-------| ^ | & | * | ( | ) | | |
- * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------|
- * | trans| = | - | + | { | } |-------| |-------| [ | ] | ; | : | \ | Shift|
- * `-----------------------------------------/ / \ \-----------------------------------------'
- * | Bspc | WIN |LOWER | Enter| /Space / \Enter \ |SPACE |RAISE | RCTR | RAlt |
- * | | | | |/ / \ \ | | | | |
- * `----------------------------------' '------''---------------------------'
- */
-[_LOWER] = LAYOUT(
- //,------------------------------------------------. ,---------------------------------------------------.
- _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
- //|------+-------+--------+--------+--------+------| |--------+-------+--------+--------+--------+---------|
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
- //|------+-------+--------+--------+--------+------| |--------+-------+--------+--------+--------+---------|
- _______, KC_NO, KC_NO, KC_NO, KC_WH_U, KC_PGUP, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_NO, KC_DEL,
- //|------+-------+--------+--------+--------+------| === | | === |--------+-------+--------+--------+--------+---------|
- _______, KC_NO, KC_NO, KC_NO, KC_WH_D, KC_PGDN,_______, _______,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, _______,
- //|------+-------+--------+--------+--------+------| === | | === |--------+-------+--------+--------+--------+---------|
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
- // \--------+--------+--------+---------+-------| |--------+---------+--------+---------+-------/
-),
-/* RAISE
- * ,----------------------------------------. ,-----------------------------------------.
- * | | | | | | | | | | | | | |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | Esc | Ins | Pscr | Menu | | | | | PWrd | Up | NWrd | DLine| Bspc |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | Tab | LAt | LCtl |LShift| | Caps |-------. ,-------| | Left | Down | Rigth| Del | Bspc |
- * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------|
- * |Shift | Undo | Cut | Copy | Paste| |-------| |-------| | LStr | | LEnd | | Shift|
- * `-----------------------------------------/ / \ \-----------------------------------------'
- * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
- * | | | | |/ / \ \ | | | | |
- * `----------------------------------' '------''---------------------------'
- */
-[_RAISE] = LAYOUT(
- //,------------------------------------------------. ,---------------------------------------------------.
- _______, _______ , _______ , _______ , _______ , _______, _______, _______ , _______, _______ , _______ ,_______,
- //|------+-------+--------+--------+--------+------| |--------+-------+--------+--------+--------+---------|
- _______, KC_INS, KC_PSCR, KC_APP, XXXXXXX, XXXXXXX, KC_CIRC, KC_AMPR,KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
- //|------+-------+--------+--------+--------+------| |--------+-------+--------+--------+--------+---------|
- _______, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, KC_CAPS, KC_MINS, KC_EQL, KC_LCBR, KC_RCBR, KC_PIPE, KC_GRV,
- //|------+-------+--------+--------+--------+------| === | | === |--------+-------+--------+--------+--------+---------|
- _______,KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, XXXXXXX,_______, _______,KC_UNDS, KC_PLUS,KC_LBRC, KC_RBRC, KC_BSLS, KC_TILD,
- //|------+-------+--------+--------+--------+------| === | | === |--------+-------+--------+--------+--------+---------|
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
- // \--------+--------+--------+---------+-------| |--------+---------+--------+---------+-------/
-),
-/* ADJUST
- * ,-----------------------------------------. ,-----------------------------------------.
- * | | | | | | | | | | | | | |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | QK_BOOT| | | | | | | | | | | | |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * |UG_TOGG|hue^ |sat ^ | bri ^| |COLEMAK|-------. ,-------|desk <| | |desk >| | |
- * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------|
- * | mode | hue dn|sat d|bri dn| |QWERTY|-------| |-------| | PREV | PLAY | NEXT | | |
- * `-----------------------------------------/ / \ \-----------------------------------------'
- * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
- * | | | | |/ / \ \ | | | | |
- * `----------------------------------' '------''---------------------------'
- */
- [_ADJUST] = LAYOUT(
- //,------------------------------------------------. ,---------------------------------------------------.
- EE_CLR, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- //|------+-------+--------+--------+--------+------| |--------+-------+--------+--------+--------+---------|
- QK_BOOT, XXXXXXX,XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- //|------+-------+--------+--------+--------+------| |--------+-------+--------+--------+--------+---------|
- UG_TOGG, UG_HUEU,UG_SATU, UG_VALU, KC_COLEMAKDH,KC_COLEMAK, C(G(KC_LEFT)),KC_NO,KC_NO,C(G(KC_RGHT)),XXXXXXX, XXXXXXX,
- //|------+-------+--------+--------+--------+------| === | | === |--------+-------+--------+--------+--------+---------|
- UG_NEXT, UG_HUED,UG_SATD, UG_VALD, XXXXXXX,KC_QWERTY,XXXXXXX, XXXXXXX, XXXXXXX, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, XXXXXXX,
- //|------+-------+--------+--------+--------+------| === | | === |--------+-------+--------+--------+--------+---------|
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
- // \--------+--------+--------+---------+-------| |--------+---------+--------+---------+-------/
-),
-/* NUMPAD
- * ,-----------------------------------------. ,-----------------------------------------.
- * | trans| | | | | | | |NumLck| | | | |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | ` | | | | | | | ^ | 7 | 8 | 9 | * | |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | trans| | | | | |-------. ,-------| - | 4 | 5 | 6 | | | |
- * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------|
- * | trans| | | | | |-------| |-------| + | 1 | 2 | 3 | \ | Shift|
- * `-----------------------------------------/ / \ \-----------------------------------------'
- * | Bspc | WIN |LOWER | Enter| /Space / \Enter \ |SPACE | 0 | . | RAlt |
- * | | | | |/ / \ \ | | | | |
- * `----------------------------------' '------''---------------------------'
- */
-[_NUMPAD] = LAYOUT(
- //,------------------------------------------------. ,---------------------------------------------------.
- _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, KC_NUM, XXXXXXX, XXXXXXX,XXXXXXX, XXXXXXX,
- //|------+-------+--------+--------+--------+------| |--------+-------+--------+--------+--------+---------|
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_CIRC, KC_P7, KC_P8, KC_P9, KC_ASTR, XXXXXXX,
- //|------+-------+--------+--------+--------+------| |--------+-------+--------+--------+--------+---------|
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MINS, KC_P4, KC_P5, KC_P6, KC_EQL, KC_PIPE,
- //|------+-------+--------+--------+--------+------| === | | === |--------+-------+--------+--------+--------+---------|
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,_______, _______,KC_PLUS, KC_P1, KC_P2, KC_P3, KC_SLSH, _______,
- //|------+-------+--------+--------+--------+------| === | | === |--------+-------+--------+--------+--------+---------|
- _______, OSM(MOD_MEH), _______, _______, _______, _______, _______, KC_P0, KC_PDOT, _______
- // \--------+--------+--------+---------+-------| |--------+---------+--------+---------+-------/
-),
-
-/* SWITCH
- * ,-----------------------------------------. ,-----------------------------------------.
- * | | | | | | | | | | | | | |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | qwer | cole |col_dh| low | raise| adj | |numpad| | | | |QK_BOOT |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | | | | | |-------. ,-------| | | | | |EE_CLR|
- * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------|
- * | SLEEP| | | | | |-------| |-------| | | | | | |
- * `-----------------------------------------/ / \ \-----------------------------------------'
- * | Bspc | WIN |LOWER | Enter| /Space / \Enter \ |SPACE | 0 | . | RAlt |
- * | | | | |/ / \ \ | | | | |
- * `----------------------------------' '------''---------------------------'
- */
- // layer switcher
-[_SWITCH] = LAYOUT(
- //,------------------------------------------------. ,---------------------------------------------------.
- _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,XXXXXXX, XXXXXXX,
- //|------+-------+--------+--------+--------+------| |--------+-------+--------+--------+--------+---------|
- TO(0), TO(1), TO(2), TO(3), TO(4), TO(5), TO(6), KC_NO, KC_NO, KC_NO, KC_NO, QK_BOOT,
- //|------+-------+--------+--------+--------+------| |--------+-------+--------+--------+--------+---------|
- KC_NO, KC_NO, KC_BRIU, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, EE_CLR,
- //|------+-------+--------+--------+--------+------| === | | === |--------+-------+--------+--------+--------+---------|
- KC_SYSTEM_SLEEP,KC_NO,KC_NO,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
- //|------+-------+--------+--------+--------+------| === | | === |--------+-------+--------+--------+--------+---------|
- KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
- // \--------+--------+--------+---------+-------| |--------+---------+--------+---------+-------/
-
- ),
-};
-
-#ifdef RGBLIGHT_ENABLE
-char layer_state_str[70];
-// Now define the array of layers. Later layers take precedence
-
-// QWERTY,
-// Light on inner column and underglow
-const rgblight_segment_t PROGMEM layer_qwerty_lights[] = RGBLIGHT_LAYER_SEGMENTS(
- SET_LAYER_ID(HSV_RED)
-
-);
-const rgblight_segment_t PROGMEM layer_colemakdh_lights[] = RGBLIGHT_LAYER_SEGMENTS(
- SET_LAYER_ID(HSV_PINK)
-);
-
-// _NUM,
-// Light on outer column and underglow
-const rgblight_segment_t PROGMEM layer_num_lights[] = RGBLIGHT_LAYER_SEGMENTS(
- SET_LAYER_ID(HSV_TEAL)
-
-);
-// _SYMBOL,
-// Light on inner column and underglow
-const rgblight_segment_t PROGMEM layer_symbol_lights[] = RGBLIGHT_LAYER_SEGMENTS(
- SET_LAYER_ID(HSV_BLUE)
-
- );
-// _COMMAND,
-// Light on inner column and underglow
-const rgblight_segment_t PROGMEM layer_command_lights[] = RGBLIGHT_LAYER_SEGMENTS(
- SET_LAYER_ID(HSV_PURPLE)
-);
-
-//_NUMPAD
-const rgblight_segment_t PROGMEM layer_numpad_lights[] = RGBLIGHT_LAYER_SEGMENTS(
- SET_INDICATORS(HSV_ORANGE),
- SET_UNDERGLOW(HSV_ORANGE),
- SET_NUMPAD(HSV_BLUE),
- {7, 4, HSV_ORANGE},
- {25, 2, HSV_ORANGE},
- {35+6, 4, HSV_ORANGE},
- {35+25, 2, HSV_ORANGE}
- );
-// _SWITCHER // light up top row
-const rgblight_segment_t PROGMEM layer_switcher_lights[] = RGBLIGHT_LAYER_SEGMENTS(
- SET_LAYER_ID(HSV_GREEN),
- SET_NUMROW(HSV_GREEN)
-);
-
-const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(
-
- layer_qwerty_lights,
- layer_num_lights,// overrides layer 1
- layer_symbol_lights,
- layer_command_lights,
- layer_numpad_lights,
- layer_switcher_lights, // Overrides other layers
- layer_colemakdh_lights
-);
-
-layer_state_t layer_state_set_user(layer_state_t state) {
- rgblight_set_layer_state(0, layer_state_cmp(state, _DEFAULTS) && layer_state_cmp(default_layer_state,_QWERTY));
- rgblight_set_layer_state(7, layer_state_cmp(state, _DEFAULTS) && layer_state_cmp(default_layer_state,_COLEMAKDH));
-
-
- rgblight_set_layer_state(1, layer_state_cmp(state, _LOWER));
- rgblight_set_layer_state(2, layer_state_cmp(state, _RAISE));
- rgblight_set_layer_state(3, layer_state_cmp(state, _ADJUST));
- rgblight_set_layer_state(4, layer_state_cmp(state, _NUMPAD));
- rgblight_set_layer_state(5, layer_state_cmp(state, _SWITCH));
- return state;
-}
-void keyboard_post_init_user(void) {
- // Enable the LED layers
- rgblight_layers = my_rgb_layers;
-
- rgblight_mode(10);// haven't found a way to set this in a more useful way
-
-}
-#endif
-
-#ifdef OLED_ENABLE
-
-static void render_logo(void) {
- static const char PROGMEM qmk_logo[] = {
- 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94,
- 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4,
- 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0x00
- };
-
- oled_write_P(qmk_logo, false);
-}
-
-static void print_status_narrow(void) {
- // Print current mode
- oled_write_P(PSTR("\n\n"), false);
- oled_write_ln_P(PSTR("Dane\nEvans"), false);
-
- oled_write_ln_P(PSTR(""), false);
-
- //snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Undef-%ld", layer_state)
-
-
- switch (get_highest_layer(default_layer_state)) {
- case _QWERTY:
- oled_write_ln_P(PSTR("Qwrt"), false);
- break;
- case _COLEMAK:
- oled_write_ln_P(PSTR("Clmk"), false);
- break;
- case _COLEMAKDH:
- oled_write_ln_P(PSTR("CmkDH"), false);
- break;
-
- default:
- oled_write_ln_P(PSTR("Undef"), false);
- }
- oled_write_P(PSTR("\n\n"), false);
- // Print current layer
- oled_write_ln_P(PSTR("LAYER"), false);
- switch (get_highest_layer(layer_state)) {
- case _COLEMAK:
- case _QWERTY:
- case _COLEMAKDH:
- oled_write_P(PSTR("Base\n"), false);
- break;
- case _RAISE:
- oled_write_P(PSTR("Raise"), false);
- break;
- case _LOWER:
- oled_write_P(PSTR("Lower"), false);
- break;
- case _ADJUST:
- oled_write_P(PSTR("Adj\n"), false);
- break;
- case _NUMPAD:
- oled_write_P(PSTR("Nump\n"), false);
- break;
- case _SWITCH:
- oled_write_P(PSTR("Swit\n"), false);
- break;
- default:
- oled_write_ln_P(PSTR("Undef"), false);
- }
-}
-
-oled_rotation_t oled_init_user(oled_rotation_t rotation) {
- if (is_keyboard_master()) {
- return OLED_ROTATION_270;
- }
- return rotation;
-}
-
-bool oled_task_user(void) {
- if (is_keyboard_master()) {
- print_status_narrow();
- } else {
- render_logo();
- }
- return false;
-}
-
-#endif
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case KC_LOWER:
- if (record->event.pressed) {
- layer_on(_LOWER);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- } else {
- layer_off(_LOWER);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- }
- return false;
- case KC_RAISE:
- if (record->event.pressed) {
- layer_on(_RAISE);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- } else {
- layer_off(_RAISE);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- }
- return false;
- case KC_ADJUST:
- if (record->event.pressed) {
- layer_on(_ADJUST);
- } else {
- layer_off(_ADJUST);
- }
- return false;
- case KC_D_MUTE:
- if (record->event.pressed) {
- register_mods(mod_config(MOD_MEH));
- register_code(KC_UP);
- } else {
- unregister_mods(mod_config(MOD_MEH));
- unregister_code(KC_UP);
- }
- }
- return true;
-}
-
-#ifdef ENCODER_ENABLE
-
-bool encoder_update_user(uint8_t index, bool clockwise) {
- if (index == 0) {
- if (clockwise) {
- tap_code(KC_VOLU);
- } else {
- tap_code(KC_VOLD);
- }
- } else if (index == 1) {
- switch (get_highest_layer(layer_state)) {
- case _COLEMAK:
- case _QWERTY:
- case _COLEMAKDH:
- if (clockwise) {
- tap_code(KC_PGDN);
- } else {
- tap_code(KC_PGUP);
- }
- break;
- case _RAISE:
- case _LOWER:
- if (clockwise) {
- tap_code(KC_DOWN);
- } else {
- tap_code(KC_UP);
- }
- break;
- default:
- if (clockwise) {
- tap_code(KC_WH_D);
- } else {
- tap_code(KC_WH_U);
- }
- break;
- }
- }
- return true;
-}
-
-#endif
diff --git a/keyboards/sofle/keymaps/rgb_default/rules.mk b/keyboards/sofle/keymaps/rgb_default/rules.mk
deleted file mode 100644
index 0d18161a0d..0000000000
--- a/keyboards/sofle/keymaps/rgb_default/rules.mk
+++ /dev/null
@@ -1,7 +0,0 @@
-MOUSEKEY_ENABLE = yes
-EXTRAKEY_ENABLE = yes
-CONSOLE_ENABLE = no
-RGBLIGHT_ENABLE = yes
-ENCODER_ENABLE = yes
-LTO_ENABLE = yes
-OLED_ENABLE = yes
diff --git a/keyboards/sofle/readme.md b/keyboards/sofle/readme.md
index 7e8ef215c2..6af2a93ec5 100644
--- a/keyboards/sofle/readme.md
+++ b/keyboards/sofle/readme.md
@@ -4,24 +4,37 @@
Sofle is 6×4+5 keys column-staggered split keyboard. Based on Lily58, Corne and Helix keyboards.
-More details about the keyboard on my blog: [Let me introduce you SofleKeyboard - a split keyboard based on Lily58 and Crkbd](https://josef-adamcik.cz/electronics/let-me-introduce-you-sofle-keyboard-split-keyboard-based-on-lily58.html)
-
-The current (temporary) build guide and a build log is available here: [SofleKeyboard build log/guide](https://josef-adamcik.cz/electronics/soflekeyboard-build-log-and-build-guide.html)
+More details about the keyboard and build guides can be found here: [Sofle Keyboard Build Log and Guide](https://josefadamcik.github.io/SofleKeyboard)
* Keyboard Maintainer: [Josef Adamcik](https://josef-adamcik.cz) [Twitter:@josefadamcik](https://twitter.com/josefadamcik)
* Hardware Supported: SofleKeyboard PCB, ProMicro
* Hardware Availability: [PCB & Case Data](https://github.com/josefadamcik/SofleKeyboard)
+## Firmware Revisions
+- `sofle/rev1` is used for v1, v2, and RGB PCBs (**NOT** RGB PCBs purchased from [Keyhive](https://keyhive.xyz))
+- `sofle/keyhive` is used for PCBs purchased from [Keyhive](https://keyhive.xyz/shop/sofle)
+- [`keyboards/sofle_choc`](../sofle_choc/) is used for Choc PCBs
+
Make example for this keyboard (after setting up your build environment):
- make sofle:default
+ make sofle/rev1:default
+ make sofle/keyhive:default
-Flash the default keymap:
+Flashing example for this keyboard:
- make sofle:default:avrdude
+ make sofle/rev1:default:flash
+ make sofle/keyhive:default:flash
Press reset button on he keyboard when asked.
Disconnect the first half, connect the second one and repeat the process.
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix
+* **Physical reset button**: Briefly press the button near the TRRS connector. Quickly double-tap if you are using Pro Micro.
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/sofle/rev1/readme.md b/keyboards/sofle/rev1/readme.md
deleted file mode 100644
index 1d229030c4..0000000000
--- a/keyboards/sofle/rev1/readme.md
+++ /dev/null
@@ -1,27 +0,0 @@
-# Sofle Keyboard
-
-![SofleKeyboard version 1](https://i.imgur.com/S5GTKth.jpeg)
-
-Sofle is 6×4+5 keys column-staggered split keyboard. Based on Lily58, Corne and Helix keyboards.
-
-More details about the keyboard on my blog: [Let me introduce you SofleKeyboard - a split keyboard based on Lily58 and Crkbd](https://josef-adamcik.cz/electronics/let-me-introduce-you-sofle-keyboard-split-keyboard-based-on-lily58.html)
-
-The current (temporary) build guide and a build log is available here: [SofleKeyboard build log/guide](https://josef-adamcik.cz/electronics/soflekeyboard-build-log-and-build-guide.html)
-
-* Keyboard Maintainer: [Josef Adamcik](https://josef-adamcik.cz) [Twitter:@josefadamcik](https://twitter.com/josefadamcik)
-* Hardware Supported: SofleKeyboard PCB, ProMicro
-* Hardware Availability: [PCB & Case Data](https://github.com/josefadamcik/SofleKeyboard)
-
-Make example for this keyboard (after setting up your build environment):
-
- make sofle:default
-
-Flashing example for this keyboard:
-
- make sofle:default:flash
-
-Press reset button on he keyboard when asked.
-
-Disconnect the first half, connect the second one and repeat the process.
-
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/soy20/keyboard.json b/keyboards/soy20/keyboard.json
index 77524eff6c..3a61743326 100644
--- a/keyboards/soy20/keyboard.json
+++ b/keyboards/soy20/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Soy20",
"manufacturer": "drewkeys",
- "url": "",
"maintainer": "twholt",
"usb": {
"vid": "0x4452",
diff --git a/keyboards/spaceholdings/nebula12/keyboard.json b/keyboards/spaceholdings/nebula12/keyboard.json
index 2b170e8e61..7157cfc05b 100755
--- a/keyboards/spaceholdings/nebula12/keyboard.json
+++ b/keyboards/spaceholdings/nebula12/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "NEBULA12",
"manufacturer": "Yiancar-Designs",
- "url": "",
"maintainer": "yiancar",
"usb": {
"vid": "0x8968",
diff --git a/keyboards/spaceholdings/nebula12b/keyboard.json b/keyboards/spaceholdings/nebula12b/keyboard.json
index 961e971885..38320bd1ea 100755
--- a/keyboards/spaceholdings/nebula12b/keyboard.json
+++ b/keyboards/spaceholdings/nebula12b/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "NEBULA12B",
"manufacturer": "Yiancar-Designs",
- "url": "",
"maintainer": "yiancar",
"usb": {
"vid": "0x8968",
diff --git a/keyboards/spaceholdings/nebula68/keyboard.json b/keyboards/spaceholdings/nebula68/keyboard.json
index 47cab7a5b0..8eb6d67a03 100755
--- a/keyboards/spaceholdings/nebula68/keyboard.json
+++ b/keyboards/spaceholdings/nebula68/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "NEBULA68",
"manufacturer": "Yiancar-Designs",
- "url": "",
"maintainer": "yiancar",
"usb": {
"vid": "0x8968",
diff --git a/keyboards/spaceholdings/nebula68b/info.json b/keyboards/spaceholdings/nebula68b/info.json
index 3a7f6f9b25..b41a21f971 100644
--- a/keyboards/spaceholdings/nebula68b/info.json
+++ b/keyboards/spaceholdings/nebula68b/info.json
@@ -1,6 +1,5 @@
{
"manufacturer": "Yiancar-Designs",
- "url": "",
"maintainer": "yiancar",
"usb": {
"vid": "0x8968",
diff --git a/keyboards/spaceman/2_milk/keyboard.json b/keyboards/spaceman/2_milk/keyboard.json
index 4fdef6bace..aed735c58f 100644
--- a/keyboards/spaceman/2_milk/keyboard.json
+++ b/keyboards/spaceman/2_milk/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "2% Milk",
"manufacturer": "Spaceman",
- "url": "",
"maintainer": "Spaceman",
"usb": {
"vid": "0x5342",
diff --git a/keyboards/spaceman/pancake/rev1/info.json b/keyboards/spaceman/pancake/rev1/info.json
index 0814e11244..9d6f30ab51 100644
--- a/keyboards/spaceman/pancake/rev1/info.json
+++ b/keyboards/spaceman/pancake/rev1/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Pancake",
"manufacturer": "Spaceman",
- "url": "",
"maintainer": "Spaceman",
"usb": {
"vid": "0x5342",
diff --git a/keyboards/spaceman/pancake/rev2/keyboard.json b/keyboards/spaceman/pancake/rev2/keyboard.json
index 88bf2a0b9f..2e7dd8f6b4 100644
--- a/keyboards/spaceman/pancake/rev2/keyboard.json
+++ b/keyboards/spaceman/pancake/rev2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Pancake 2",
"manufacturer": "Spaceman",
- "url": "",
"maintainer": "Spaceman",
"usb": {
"vid": "0x5342",
diff --git a/keyboards/spaceman/yun65/keyboard.json b/keyboards/spaceman/yun65/keyboard.json
index 017de06abb..1f57af8e0d 100644
--- a/keyboards/spaceman/yun65/keyboard.json
+++ b/keyboards/spaceman/yun65/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Yun 65",
"manufacturer": "Spaceman",
- "url": "",
"maintainer": "Spaceman",
"usb": {
"vid": "0x5342",
diff --git a/keyboards/specskeys/keyboard.json b/keyboards/specskeys/keyboard.json
index 104b1ea13d..73d34e4a39 100644
--- a/keyboards/specskeys/keyboard.json
+++ b/keyboards/specskeys/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Specskeys",
"manufacturer": "Specs32",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xCAFE",
diff --git a/keyboards/spiderisland/split78/keyboard.json b/keyboards/spiderisland/split78/keyboard.json
index cd49755b0f..4a818470f8 100644
--- a/keyboards/spiderisland/split78/keyboard.json
+++ b/keyboards/spiderisland/split78/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Split 78-key",
"manufacturer": "SpiderIsland",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/split67/keyboard.json b/keyboards/split67/keyboard.json
index 46b571420a..6462149d3b 100644
--- a/keyboards/split67/keyboard.json
+++ b/keyboards/split67/keyboard.json
@@ -37,7 +37,6 @@
"pin": "D0"
}
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0xBBBC",
diff --git a/keyboards/splitish/keyboard.json b/keyboards/splitish/keyboard.json
index 3df635e6bc..9b9701a853 100644
--- a/keyboards/splitish/keyboard.json
+++ b/keyboards/splitish/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Splitish",
"manufacturer": "Reid Schneyer",
- "url": "",
"maintainer": "RSchneyer",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/splitkb/halcyon/kyria/rev4/keyboard.json b/keyboards/splitkb/halcyon/kyria/rev4/keyboard.json
index aca43a8a16..7f699f2584 100755
--- a/keyboards/splitkb/halcyon/kyria/rev4/keyboard.json
+++ b/keyboards/splitkb/halcyon/kyria/rev4/keyboard.json
@@ -65,9 +65,6 @@
"splash": true,
"typing_heatmap": true
},
- "default": {
- "animation": "cycle_left_right"
- },
"driver": "ws2812",
"layout": [
{"x": 75, "y": 2, "flags": 2},
diff --git a/keyboards/splitography/keymaps/default/keymap.c b/keyboards/splitography/keymaps/default/keymap.c
index 9c6c7d6b26..5d26eb9682 100644
--- a/keyboards/splitography/keymaps/default/keymap.c
+++ b/keyboards/splitography/keymaps/default/keymap.c
@@ -214,9 +214,9 @@ void plover(keyrecord_t *record) {
if (!eeconfig_is_enabled()) {
eeconfig_init();
}
- keymap_config.raw = eeconfig_read_keymap();
+ eeconfig_read_keymap(&keymap_config);
keymap_config.nkro = 1;
- eeconfig_update_keymap(keymap_config.raw);
+ eeconfig_update_keymap(&keymap_config);
}
}
diff --git a/keyboards/splitography/keymaps/default_with_ctl_shft_alt_switched/keymap.c b/keyboards/splitography/keymaps/default_with_ctl_shft_alt_switched/keymap.c
index 787f448ffb..a3cb183758 100644
--- a/keyboards/splitography/keymaps/default_with_ctl_shft_alt_switched/keymap.c
+++ b/keyboards/splitography/keymaps/default_with_ctl_shft_alt_switched/keymap.c
@@ -214,9 +214,9 @@ void plover(keyrecord_t *record) {
if (!eeconfig_is_enabled()) {
eeconfig_init();
}
- keymap_config.raw = eeconfig_read_keymap();
+ eeconfig_read_keymap(&keymap_config);
keymap_config.nkro = 1;
- eeconfig_update_keymap(keymap_config.raw);
+ eeconfig_update_keymap(&keymap_config);
}
}
diff --git a/keyboards/splitography/keymaps/dvorak/keymap.c b/keyboards/splitography/keymaps/dvorak/keymap.c
index 992cfd0abb..0edec7043c 100644
--- a/keyboards/splitography/keymaps/dvorak/keymap.c
+++ b/keyboards/splitography/keymaps/dvorak/keymap.c
@@ -214,9 +214,9 @@ void plover(keyrecord_t *record) {
if (!eeconfig_is_enabled()) {
eeconfig_init();
}
- keymap_config.raw = eeconfig_read_keymap();
+ eeconfig_read_keymap(&keymap_config);
keymap_config.nkro = 1;
- eeconfig_update_keymap(keymap_config.raw);
+ eeconfig_update_keymap(&keymap_config);
}
}
diff --git a/keyboards/stello65/beta/keyboard.json b/keyboards/stello65/beta/keyboard.json
index 5dbc3b1338..d6bf574b9a 100644
--- a/keyboards/stello65/beta/keyboard.json
+++ b/keyboards/stello65/beta/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Stello65",
"manufacturer": "@wekey",
- "url": "",
"maintainer": "@wekey",
"usb": {
"vid": "0x5559",
diff --git a/keyboards/stello65/hs_rev1/keyboard.json b/keyboards/stello65/hs_rev1/keyboard.json
index 783b73c599..bf502de563 100644
--- a/keyboards/stello65/hs_rev1/keyboard.json
+++ b/keyboards/stello65/hs_rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Stello65",
"manufacturer": "@wekey",
- "url": "",
"maintainer": "@wekey",
"usb": {
"vid": "0x5559",
diff --git a/keyboards/stello65/sl_rev1/keyboard.json b/keyboards/stello65/sl_rev1/keyboard.json
index 8be7b07d0a..e8ac4ea7de 100644
--- a/keyboards/stello65/sl_rev1/keyboard.json
+++ b/keyboards/stello65/sl_rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Stello65",
"manufacturer": "@wekey",
- "url": "",
"maintainer": "@wekey",
"usb": {
"vid": "0x5559",
diff --git a/keyboards/stratos/keyboard.json b/keyboards/stratos/keyboard.json
index 842c9b87a3..20a057ba88 100644
--- a/keyboards/stratos/keyboard.json
+++ b/keyboards/stratos/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "stratos",
"manufacturer": "eggyolk",
- "url": "",
"maintainer": "kb-elmo",
"usb": {
"vid": "0xD5D0",
diff --git a/keyboards/studiokestra/frl84/keyboard.json b/keyboards/studiokestra/frl84/keyboard.json
index d131b09eac..3bb51c7606 100644
--- a/keyboards/studiokestra/frl84/keyboard.json
+++ b/keyboards/studiokestra/frl84/keyboard.json
@@ -45,7 +45,6 @@
}
},
"processor": "atmega32u4",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0F84",
diff --git a/keyboards/studiokestra/galatea/rev1/keyboard.json b/keyboards/studiokestra/galatea/rev1/keyboard.json
index ff2adbce4d..320b381e82 100644
--- a/keyboards/studiokestra/galatea/rev1/keyboard.json
+++ b/keyboards/studiokestra/galatea/rev1/keyboard.json
@@ -23,7 +23,6 @@
"rows": ["D1", "D0", "B0", "B7", "E6", "B3", "B6", "C6", "D6", "D7", "B4", "D3"]
},
"processor": "atmega32u4",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x8801",
diff --git a/keyboards/studiokestra/galatea/rev2/keyboard.json b/keyboards/studiokestra/galatea/rev2/keyboard.json
index 115b5684cd..6d59e14e64 100644
--- a/keyboards/studiokestra/galatea/rev2/keyboard.json
+++ b/keyboards/studiokestra/galatea/rev2/keyboard.json
@@ -24,7 +24,6 @@
"rows": ["D1", "D0", "B0", "B7", "E6", "B3", "B6", "C6", "D6", "D7", "B4", "D3"]
},
"processor": "atmega32u4",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x8802",
@@ -40,7 +39,6 @@
},
"rgblight": {
"led_count": 24,
- "hue_steps": 8,
"saturation_steps": 8,
"brightness_steps": 8,
"max_brightness": 200,
diff --git a/keyboards/studiokestra/galatea/rev3/keyboard.json b/keyboards/studiokestra/galatea/rev3/keyboard.json
index a4b07bb4df..1b948f426d 100644
--- a/keyboards/studiokestra/galatea/rev3/keyboard.json
+++ b/keyboards/studiokestra/galatea/rev3/keyboard.json
@@ -24,7 +24,6 @@
"rows": ["GP3", "GP4", "GP1", "GP2", "GP5", "GP29", "GP20", "GP19", "GP17", "GP16", "GP13", "GP12"]
},
"processor": "RP2040",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x8803",
@@ -36,7 +35,6 @@
},
"rgblight": {
"led_count": 24,
- "hue_steps": 8,
"saturation_steps": 8,
"brightness_steps": 8,
"max_brightness": 200,
diff --git a/keyboards/suavity/ehan/keyboard.json b/keyboards/suavity/ehan/keyboard.json
index 5a6675bfc3..acc470c8b6 100755
--- a/keyboards/suavity/ehan/keyboard.json
+++ b/keyboards/suavity/ehan/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "ehan",
"manufacturer": "Suavity Designs",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x5344",
diff --git a/keyboards/subatomic/keyboard.json b/keyboards/subatomic/keyboard.json
index 0816130bbb..20313a1318 100644
--- a/keyboards/subatomic/keyboard.json
+++ b/keyboards/subatomic/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Subatomic",
"manufacturer": "OLKB",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/superuser/ext/keyboard.json b/keyboards/superuser/ext/keyboard.json
index c08213a13f..5a0ac65d64 100644
--- a/keyboards/superuser/ext/keyboard.json
+++ b/keyboards/superuser/ext/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "ext",
"manufacturer": "superuser",
- "url": "",
"maintainer": "kaylanm",
"usb": {
"vid": "0x5355",
diff --git a/keyboards/superuser/frl/keyboard.json b/keyboards/superuser/frl/keyboard.json
index 4ede02d20d..d540622b69 100644
--- a/keyboards/superuser/frl/keyboard.json
+++ b/keyboards/superuser/frl/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "frl",
"manufacturer": "superuser",
- "url": "",
"maintainer": "superuser",
"usb": {
"vid": "0x5355",
diff --git a/keyboards/superuser/tkl/keyboard.json b/keyboards/superuser/tkl/keyboard.json
index 79df5bac09..ecf8dc713b 100644
--- a/keyboards/superuser/tkl/keyboard.json
+++ b/keyboards/superuser/tkl/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "tkl",
"manufacturer": "superuser",
- "url": "",
"maintainer": "kaylanm",
"usb": {
"vid": "0x5355",
diff --git a/keyboards/swiss/keyboard.json b/keyboards/swiss/keyboard.json
index 039153cd7f..74f9ff23e3 100644
--- a/keyboards/swiss/keyboard.json
+++ b/keyboards/swiss/keyboard.json
@@ -17,7 +17,6 @@
"rows": ["D6", "D4", "D5", "B2", "D7"]
},
"processor": "atmega32u4",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0420",
diff --git a/keyboards/switchplate/southpaw_fullsize/keyboard.json b/keyboards/switchplate/southpaw_fullsize/keyboard.json
index 84942ccfa4..9f61bc9abc 100644
--- a/keyboards/switchplate/southpaw_fullsize/keyboard.json
+++ b/keyboards/switchplate/southpaw_fullsize/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Southpaw Fullsize",
"manufacturer": "Switchplate Peripherals",
- "url": "",
"maintainer": "ai03",
"usb": {
"vid": "0xA103",
diff --git a/keyboards/switchplate/switchplate910/keyboard.json b/keyboards/switchplate/switchplate910/keyboard.json
index 47353fe81e..43150834f5 100644
--- a/keyboards/switchplate/switchplate910/keyboard.json
+++ b/keyboards/switchplate/switchplate910/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "910",
"manufacturer": "Switchplate Peripherals",
- "url": "",
"maintainer": "MxBluE",
"usb": {
"vid": "0x54F3",
diff --git a/keyboards/sx60/keyboard.json b/keyboards/sx60/keyboard.json
index ba5b439cec..9d3663fecf 100644
--- a/keyboards/sx60/keyboard.json
+++ b/keyboards/sx60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "SX60",
"manufacturer": "Quantrik",
- "url": "",
"maintainer": "https://github.com/amnobis",
"usb": {
"vid": "0x5154",
diff --git a/keyboards/synthandkeys/bento_box/keyboard.json b/keyboards/synthandkeys/bento_box/keyboard.json
index 3cdc7a5870..3fb784da75 100644
--- a/keyboards/synthandkeys/bento_box/keyboard.json
+++ b/keyboards/synthandkeys/bento_box/keyboard.json
@@ -31,7 +31,6 @@
]
},
"processor": "STM32F072",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0000",
diff --git a/keyboards/synthandkeys/the_debit_card/keyboard.json b/keyboards/synthandkeys/the_debit_card/keyboard.json
index a2d0a6964f..1d3798291b 100644
--- a/keyboards/synthandkeys/the_debit_card/keyboard.json
+++ b/keyboards/synthandkeys/the_debit_card/keyboard.json
@@ -19,7 +19,6 @@
]
},
"processor": "RP2040",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0000",
diff --git a/keyboards/system76/launch_1/keyboard.json b/keyboards/system76/launch_1/keyboard.json
index 929b8c9794..b5317dd9bc 100644
--- a/keyboards/system76/launch_1/keyboard.json
+++ b/keyboards/system76/launch_1/keyboard.json
@@ -44,9 +44,7 @@
},
"default": {
"animation": "rainbow_moving_chevron",
- "hue": 142,
- "sat": 255,
- "speed": 127
+ "hue": 142
},
"driver": "ws2812",
"max_brightness": 176,
diff --git a/keyboards/system76/launch_1/launch_1.c b/keyboards/system76/launch_1/launch_1.c
index c9af479bf5..c01fb7b01d 100644
--- a/keyboards/system76/launch_1/launch_1.c
+++ b/keyboards/system76/launch_1/launch_1.c
@@ -16,6 +16,7 @@
*/
#include "quantum.h"
+#include "eeprom.h"
#include "usb_mux.h"
@@ -73,7 +74,7 @@ led_config_t g_led_config = { {
} };
#endif // RGB_MATRIX_ENABLE
-bool eeprom_is_valid(void) {
+bool eeprom_is_valid(void) {
return (
eeprom_read_word(((void *)EEPROM_MAGIC_ADDR)) == EEPROM_MAGIC &&
eeprom_read_byte(((void *)EEPROM_VERSION_ADDR)) == EEPROM_VERSION
diff --git a/keyboards/tada68/keyboard.json b/keyboards/tada68/keyboard.json
index 641def01a3..1daf936b53 100644
--- a/keyboards/tada68/keyboard.json
+++ b/keyboards/tada68/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "TADA68",
"manufacturer": "TADA",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x5441",
diff --git a/keyboards/takashicompany/baumkuchen/keyboard.json b/keyboards/takashicompany/baumkuchen/keyboard.json
index 2c8b77851b..2cb3566703 100644
--- a/keyboards/takashicompany/baumkuchen/keyboard.json
+++ b/keyboards/takashicompany/baumkuchen/keyboard.json
@@ -45,7 +45,6 @@
"ws2812": {
"pin": "D3"
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0045",
diff --git a/keyboards/takashicompany/center_enter/keyboard.json b/keyboards/takashicompany/center_enter/keyboard.json
index b8188bd718..7d660eaca8 100644
--- a/keyboards/takashicompany/center_enter/keyboard.json
+++ b/keyboards/takashicompany/center_enter/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Center x Enter",
"manufacturer": "takashicompany",
- "url": "",
"maintainer": "takashicompany",
"usb": {
"vid": "0x7463",
diff --git a/keyboards/takashicompany/ejectix/keyboard.json b/keyboards/takashicompany/ejectix/keyboard.json
index 560c253326..4767be03a6 100644
--- a/keyboards/takashicompany/ejectix/keyboard.json
+++ b/keyboards/takashicompany/ejectix/keyboard.json
@@ -36,7 +36,6 @@
"led_count": 11,
"sleep": true
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0049",
diff --git a/keyboards/takashicompany/ergomirage/keyboard.json b/keyboards/takashicompany/ergomirage/keyboard.json
index 1e34505b01..9bcff45e76 100644
--- a/keyboards/takashicompany/ergomirage/keyboard.json
+++ b/keyboards/takashicompany/ergomirage/keyboard.json
@@ -16,7 +16,6 @@
"cols": ["D4", "C6", "D7", "E6", "B4", "B5"],
"rows": ["F4", "F5", "F6", "F7", "B1", "B3", "B2", "B6"]
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0044",
diff --git a/keyboards/takashicompany/goat51/keyboard.json b/keyboards/takashicompany/goat51/keyboard.json
index c424685713..8ef4c54343 100644
--- a/keyboards/takashicompany/goat51/keyboard.json
+++ b/keyboards/takashicompany/goat51/keyboard.json
@@ -32,8 +32,6 @@
"rgblight": {
"led_count": 11,
"hue_steps": 10,
- "saturation_steps": 17,
- "brightness_steps": 17,
"animations": {
"alternating": true,
"breathing": true,
diff --git a/keyboards/takashicompany/jourkey/keyboard.json b/keyboards/takashicompany/jourkey/keyboard.json
index 01847cfa53..4201969219 100644
--- a/keyboards/takashicompany/jourkey/keyboard.json
+++ b/keyboards/takashicompany/jourkey/keyboard.json
@@ -23,7 +23,6 @@
["D4", "C6", "D7", "E6", "B4", "F5", "F6", "F7", "B5", "B1", "B3", "B2", "B6"]
]
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0062",
diff --git a/keyboards/takashicompany/klec_01/keyboard.json b/keyboards/takashicompany/klec_01/keyboard.json
index 36baa8bf60..b04f43ed1f 100644
--- a/keyboards/takashicompany/klec_01/keyboard.json
+++ b/keyboards/takashicompany/klec_01/keyboard.json
@@ -16,7 +16,6 @@
"cols": ["F4", "F5", "F6", "F7", "B1", "B3", "B2", "B6"],
"rows": ["D4", "C6", "D7", "E6", "B4", "B5"]
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x1001",
diff --git a/keyboards/takashicompany/klec_02/keyboard.json b/keyboards/takashicompany/klec_02/keyboard.json
index 045c4ef315..22cea40ec7 100644
--- a/keyboards/takashicompany/klec_02/keyboard.json
+++ b/keyboards/takashicompany/klec_02/keyboard.json
@@ -22,7 +22,6 @@
"pin": "D2"
}
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x1002",
diff --git a/keyboards/takashicompany/minidivide/keyboard.json b/keyboards/takashicompany/minidivide/keyboard.json
index d258baa694..5ac4dd7e9b 100644
--- a/keyboards/takashicompany/minidivide/keyboard.json
+++ b/keyboards/takashicompany/minidivide/keyboard.json
@@ -50,7 +50,6 @@
"pin": "D2"
}
},
- "url": "",
"usb": {
"device_version": "0.0.1",
"pid": "0x0037",
diff --git a/keyboards/takashicompany/minidivide_max/keyboard.json b/keyboards/takashicompany/minidivide_max/keyboard.json
index 54f9dbaf78..73f941c896 100644
--- a/keyboards/takashicompany/minidivide_max/keyboard.json
+++ b/keyboards/takashicompany/minidivide_max/keyboard.json
@@ -49,7 +49,6 @@
"pin": "D2"
}
},
- "url": "",
"usb": {
"device_version": "0.0.1",
"pid": "0x0054",
diff --git a/keyboards/takashicompany/palmslave/keyboard.json b/keyboards/takashicompany/palmslave/keyboard.json
index 03d3f3e849..4b452d678a 100644
--- a/keyboards/takashicompany/palmslave/keyboard.json
+++ b/keyboards/takashicompany/palmslave/keyboard.json
@@ -31,7 +31,6 @@
"pin": "D2"
}
},
- "url": "",
"usb": {
"device_version": "0.0.1",
"pid": "0x0063",
diff --git a/keyboards/takashicompany/spreadwriter/keyboard.json b/keyboards/takashicompany/spreadwriter/keyboard.json
index 2c9fcd1619..59c78c4532 100644
--- a/keyboards/takashicompany/spreadwriter/keyboard.json
+++ b/keyboards/takashicompany/spreadwriter/keyboard.json
@@ -31,8 +31,6 @@
"rgblight": {
"led_count": 53,
"hue_steps": 10,
- "saturation_steps": 17,
- "brightness_steps": 17,
"animations": {
"alternating": true,
"breathing": true,
diff --git a/keyboards/takashicompany/tightwriter/keyboard.json b/keyboards/takashicompany/tightwriter/keyboard.json
index 201e3f6ed5..c3684d9cf6 100644
--- a/keyboards/takashicompany/tightwriter/keyboard.json
+++ b/keyboards/takashicompany/tightwriter/keyboard.json
@@ -17,7 +17,6 @@
"cols": ["D4", "C6", "D7", "E6", "B4", "B5"],
"rows": ["F6", "F7", "B1", "B3", "B2", "B6"]
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0025",
diff --git a/keyboards/takashiski/otaku_split/rev0/keyboard.json b/keyboards/takashiski/otaku_split/rev0/keyboard.json
index 193254aa1a..911d883eb3 100644
--- a/keyboards/takashiski/otaku_split/rev0/keyboard.json
+++ b/keyboards/takashiski/otaku_split/rev0/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "otaku split rev.0",
"manufacturer": "takashiski",
- "url": "",
"maintainer": "takashiski",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/taleguers/taleguers75/keyboard.json b/keyboards/taleguers/taleguers75/keyboard.json
index 8c3a1565e2..0798ea9637 100644
--- a/keyboards/taleguers/taleguers75/keyboard.json
+++ b/keyboards/taleguers/taleguers75/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Taleguers75",
"manufacturer": "Taleguers",
- "url": "",
"maintainer": "borlopjim",
"usb": {
"vid": "0x8476",
diff --git a/keyboards/tanuki/keyboard.json b/keyboards/tanuki/keyboard.json
index 0c4045e320..2bc01addb6 100644
--- a/keyboards/tanuki/keyboard.json
+++ b/keyboards/tanuki/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Tanuki",
"manufacturer": "Seth",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/tau4/keyboard.json b/keyboards/tau4/keyboard.json
index f5acdbddd3..9a8e280905 100644
--- a/keyboards/tau4/keyboard.json
+++ b/keyboards/tau4/keyboard.json
@@ -47,7 +47,6 @@
"twinkle": true
},
"brightness_steps": 8,
- "hue_steps": 8,
"layers": {
"blink": false,
"enabled": true,
diff --git a/keyboards/technika/keyboard.json b/keyboards/technika/keyboard.json
index a6f3c2bd01..fc894fefb5 100644
--- a/keyboards/technika/keyboard.json
+++ b/keyboards/technika/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Technika",
"manufacturer": "TealTechnik",
- "url": "",
"maintainer": "Gondolindrim",
"usb": {
"vid": "0x8484",
diff --git a/keyboards/teleport/native/board.h b/keyboards/teleport/native/board.h
new file mode 100644
index 0000000000..41efeb2c1a
--- /dev/null
+++ b/keyboards/teleport/native/board.h
@@ -0,0 +1,8 @@
+// Copyright 2022 Moritz Plattner
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#include_next <board.h>
+
+#undef STM32_HSECLK
+#define STM32_HSECLK 16000000U
diff --git a/keyboards/teleport/native/config.h b/keyboards/teleport/native/config.h
index 31d0025883..cd823d725e 100644
--- a/keyboards/teleport/native/config.h
+++ b/keyboards/teleport/native/config.h
@@ -67,6 +67,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifdef ENABLE_RGB_MATRIX_TYPING_HEATMAP
#define RGB_MATRIX_TYPING_HEATMAP_SLIM
#endif
-
-/* Set HSE clock since it differs from F411 default */
-#define STM32_HSECLK 16000000
diff --git a/keyboards/telophase/keyboard.json b/keyboards/telophase/keyboard.json
index 8efbae5519..d3a86ebcbf 100644
--- a/keyboards/telophase/keyboard.json
+++ b/keyboards/telophase/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Telophase",
"manufacturer": "Unknown",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/terrazzo/keyboard.json b/keyboards/terrazzo/keyboard.json
index fb8bc6b483..d2ea20b51a 100644
--- a/keyboards/terrazzo/keyboard.json
+++ b/keyboards/terrazzo/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Terrazzo",
"manufacturer": "MsMustard",
- "url": "",
"maintainer": "MsMustard",
"usb": {
"vid": "0x4D4D",
diff --git a/keyboards/tetris/keyboard.json b/keyboards/tetris/keyboard.json
index 57cfd42c70..3702172518 100644
--- a/keyboards/tetris/keyboard.json
+++ b/keyboards/tetris/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Tetris",
"manufacturer": "Fengz",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/tg4x/keyboard.json b/keyboards/tg4x/keyboard.json
index ae4cd53a28..31c16ee08d 100644
--- a/keyboards/tg4x/keyboard.json
+++ b/keyboards/tg4x/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "TG4x",
"manufacturer": "MythosMann",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x4D4D",
diff --git a/keyboards/tg67/keyboard.json b/keyboards/tg67/keyboard.json
index 8c860e5996..308f16cc99 100644
--- a/keyboards/tg67/keyboard.json
+++ b/keyboards/tg67/keyboard.json
@@ -33,7 +33,6 @@
"led_count": 69,
"saturation_steps": 8
},
- "url": "",
"usb": {
"device_version": "0.0.1",
"pid": "0x6667",
diff --git a/keyboards/tgr/910/keyboard.json b/keyboards/tgr/910/keyboard.json
index 072eb07ea1..7277c89b38 100644
--- a/keyboards/tgr/910/keyboard.json
+++ b/keyboards/tgr/910/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "TGR-910",
"manufacturer": "Quadcube",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x5447",
diff --git a/keyboards/tgr/910ce/keyboard.json b/keyboards/tgr/910ce/keyboard.json
index 4d70a5b5db..088eed218b 100644
--- a/keyboards/tgr/910ce/keyboard.json
+++ b/keyboards/tgr/910ce/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "910CE",
"manufacturer": "TGR",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x5447",
diff --git a/keyboards/tgr/alice/keyboard.json b/keyboards/tgr/alice/keyboard.json
index d78185106b..83902990d1 100644
--- a/keyboards/tgr/alice/keyboard.json
+++ b/keyboards/tgr/alice/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Alice",
"manufacturer": "TGR",
- "url": "",
"maintainer": "Felipe Coury",
"usb": {
"vid": "0x20A0",
diff --git a/keyboards/tgr/jane/v2/keyboard.json b/keyboards/tgr/jane/v2/keyboard.json
index dc36757eb5..efa3a88b3f 100644
--- a/keyboards/tgr/jane/v2/keyboard.json
+++ b/keyboards/tgr/jane/v2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Jane v2",
"manufacturer": "TGR",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x5447",
diff --git a/keyboards/tgr/jane/v2ce/keyboard.json b/keyboards/tgr/jane/v2ce/keyboard.json
index 107e2dee9e..62f6a37857 100644
--- a/keyboards/tgr/jane/v2ce/keyboard.json
+++ b/keyboards/tgr/jane/v2ce/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Jane v2 CE",
"manufacturer": "TGR",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x5447",
diff --git a/keyboards/tgr/tris/keyboard.json b/keyboards/tgr/tris/keyboard.json
index 7776c7b2c9..5ce2fbe568 100644
--- a/keyboards/tgr/tris/keyboard.json
+++ b/keyboards/tgr/tris/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Tris",
"manufacturer": "TGR",
- "url": "",
"maintainer": "halfenergized",
"usb": {
"vid": "0x5447",
diff --git a/keyboards/the_royal/liminal/keyboard.json b/keyboards/the_royal/liminal/keyboard.json
index 0a5bd361e7..66a61eceea 100644
--- a/keyboards/the_royal/liminal/keyboard.json
+++ b/keyboards/the_royal/liminal/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Liminal",
"manufacturer": "TheRoyalSweatshirt",
- "url": "",
"maintainer": "TheRoyalSweatshirt",
"usb": {
"vid": "0x4B4B",
diff --git a/keyboards/thevankeyboards/bananasplit/keyboard.json b/keyboards/thevankeyboards/bananasplit/keyboard.json
index 1fb7fc5054..b8845f165c 100644
--- a/keyboards/thevankeyboards/bananasplit/keyboard.json
+++ b/keyboards/thevankeyboards/bananasplit/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "BananaSplit 60",
"manufacturer": "TheVan Keyboards",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEAE",
diff --git a/keyboards/thevankeyboards/caravan/keyboard.json b/keyboards/thevankeyboards/caravan/keyboard.json
index a5c00abf4e..5dce31e1ea 100644
--- a/keyboards/thevankeyboards/caravan/keyboard.json
+++ b/keyboards/thevankeyboards/caravan/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Caravan",
"manufacturer": "TheVan Keyboards",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEAE",
diff --git a/keyboards/thevankeyboards/jetvan/keyboard.json b/keyboards/thevankeyboards/jetvan/keyboard.json
index a5a9b96ac8..e8a8605bf6 100644
--- a/keyboards/thevankeyboards/jetvan/keyboard.json
+++ b/keyboards/thevankeyboards/jetvan/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "JetVan",
"manufacturer": "evangs",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEAE",
diff --git a/keyboards/thevankeyboards/minivan/keyboard.json b/keyboards/thevankeyboards/minivan/keyboard.json
index 53b3e0d89c..554cbe0154 100644
--- a/keyboards/thevankeyboards/minivan/keyboard.json
+++ b/keyboards/thevankeyboards/minivan/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Minivan",
"manufacturer": "Evan Sailer",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEAE",
diff --git a/keyboards/thevankeyboards/roadkit/keyboard.json b/keyboards/thevankeyboards/roadkit/keyboard.json
index e3c282bffe..a5ad593cc2 100644
--- a/keyboards/thevankeyboards/roadkit/keyboard.json
+++ b/keyboards/thevankeyboards/roadkit/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Roadkit Micro",
"manufacturer": "TheVan Keyboards",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEAE",
diff --git a/keyboards/tkc/california/keyboard.json b/keyboards/tkc/california/keyboard.json
index 465544bc03..5052b48f92 100644
--- a/keyboards/tkc/california/keyboard.json
+++ b/keyboards/tkc/california/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "California",
"manufacturer": "TKC",
- "url": "",
"maintainer": "TerryMathews",
"usb": {
"vid": "0x544B",
diff --git a/keyboards/tkc/candybar/lefty/keyboard.json b/keyboards/tkc/candybar/lefty/keyboard.json
index fe8814e54b..988338a095 100644
--- a/keyboards/tkc/candybar/lefty/keyboard.json
+++ b/keyboards/tkc/candybar/lefty/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Candybar",
"manufacturer": "The Key Company",
- "url": "",
"maintainer": "terrymathews",
"usb": {
"vid": "0x544B",
diff --git a/keyboards/tkc/candybar/lefty_r3/keyboard.json b/keyboards/tkc/candybar/lefty_r3/keyboard.json
index b09412ffc9..22ddc2f125 100644
--- a/keyboards/tkc/candybar/lefty_r3/keyboard.json
+++ b/keyboards/tkc/candybar/lefty_r3/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Candybar",
"manufacturer": "The Key Company",
- "url": "",
"maintainer": "terrymathews",
"usb": {
"vid": "0x544B",
diff --git a/keyboards/tkc/candybar/righty/keyboard.json b/keyboards/tkc/candybar/righty/keyboard.json
index f529ac936f..1f10532a78 100644
--- a/keyboards/tkc/candybar/righty/keyboard.json
+++ b/keyboards/tkc/candybar/righty/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Candybar",
"manufacturer": "The Key Company",
- "url": "",
"maintainer": "terrymathews",
"usb": {
"vid": "0x544B",
diff --git a/keyboards/tkc/candybar/righty_r3/keyboard.json b/keyboards/tkc/candybar/righty_r3/keyboard.json
index 8064672583..81da5f1e20 100644
--- a/keyboards/tkc/candybar/righty_r3/keyboard.json
+++ b/keyboards/tkc/candybar/righty_r3/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Candybar",
"manufacturer": "The Key Company",
- "url": "",
"maintainer": "terrymathews",
"usb": {
"vid": "0x544B",
diff --git a/keyboards/tkc/godspeed75/keyboard.json b/keyboards/tkc/godspeed75/keyboard.json
index 48cf06f3ca..b078a09efd 100644
--- a/keyboards/tkc/godspeed75/keyboard.json
+++ b/keyboards/tkc/godspeed75/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "GodSpeed75",
"manufacturer": "The Key Company",
- "url": "",
"maintainer": "terrymathews",
"usb": {
"vid": "0x544B",
diff --git a/keyboards/tkc/m0lly/keyboard.json b/keyboards/tkc/m0lly/keyboard.json
index ae76f1e6d9..fda904c4f4 100644
--- a/keyboards/tkc/m0lly/keyboard.json
+++ b/keyboards/tkc/m0lly/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "M0lly",
"manufacturer": "The Key Company",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x544B",
diff --git a/keyboards/tkc/osav2/keyboard.json b/keyboards/tkc/osav2/keyboard.json
index ef4c789797..8e9c685b49 100644
--- a/keyboards/tkc/osav2/keyboard.json
+++ b/keyboards/tkc/osav2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "OSA v2",
"manufacturer": "The Key Company",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x544B",
diff --git a/keyboards/tkc/portico/keyboard.json b/keyboards/tkc/portico/keyboard.json
index 29b7d8246b..49efe0a942 100644
--- a/keyboards/tkc/portico/keyboard.json
+++ b/keyboards/tkc/portico/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Portico",
"manufacturer": "TKC",
- "url": "",
"maintainer": "TerryMathews",
"usb": {
"vid": "0x544B",
diff --git a/keyboards/tkc/portico68v2/keyboard.json b/keyboards/tkc/portico68v2/keyboard.json
index 914dee8760..5b9e5e3324 100644
--- a/keyboards/tkc/portico68v2/keyboard.json
+++ b/keyboards/tkc/portico68v2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Portico68 v2",
"manufacturer": "TKC",
- "url": "",
"maintainer": "TerryMathews",
"usb": {
"vid": "0x544B",
diff --git a/keyboards/tkc/portico75/keyboard.json b/keyboards/tkc/portico75/keyboard.json
index 4228f20145..1e84f25ebe 100644
--- a/keyboards/tkc/portico75/keyboard.json
+++ b/keyboards/tkc/portico75/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Portico75",
"manufacturer": "TKC",
- "url": "",
"maintainer": "TerryMathews",
"usb": {
"vid": "0x544B",
diff --git a/keyboards/tkc/tkc1800/keyboard.json b/keyboards/tkc/tkc1800/keyboard.json
index 2965c61d83..1b98e8e090 100644
--- a/keyboards/tkc/tkc1800/keyboard.json
+++ b/keyboards/tkc/tkc1800/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "TKC1800",
"manufacturer": "The Key Company",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x544B",
diff --git a/keyboards/tkc/tkl_ab87/keyboard.json b/keyboards/tkc/tkl_ab87/keyboard.json
index c3d14bd8cf..c8f9631827 100644
--- a/keyboards/tkc/tkl_ab87/keyboard.json
+++ b/keyboards/tkc/tkl_ab87/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "TKL A/B87",
"manufacturer": "TKC",
- "url": "",
"maintainer": "TerryMathews",
"usb": {
"vid": "0x544B",
diff --git a/keyboards/tmo50/keyboard.json b/keyboards/tmo50/keyboard.json
index dbb79802ca..5398595d56 100644
--- a/keyboards/tmo50/keyboard.json
+++ b/keyboards/tmo50/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "TMO50",
"manufacturer": "funderburker",
- "url": "",
"maintainer": "funderburker",
"usb": {
"vid": "0xFBFB",
diff --git a/keyboards/toad/keyboard.json b/keyboards/toad/keyboard.json
index 073fa6411c..52b7c26387 100644
--- a/keyboards/toad/keyboard.json
+++ b/keyboards/toad/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Toad",
"manufacturer": "farmakon",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/toffee_studio/blueberry/keyboard.json b/keyboards/toffee_studio/blueberry/keyboard.json
index 99a87b0a95..1b2308c3da 100644
--- a/keyboards/toffee_studio/blueberry/keyboard.json
+++ b/keyboards/toffee_studio/blueberry/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Blueberry",
"manufacturer": "Toffee Studio",
- "url": "",
"maintainer": "Toffee Studio",
"usb": {
"vid": "0x1067",
diff --git a/keyboards/tokyokeyboard/alix40/config.h b/keyboards/tokyokeyboard/alix40/config.h
deleted file mode 100644
index 51d446c6d2..0000000000
--- a/keyboards/tokyokeyboard/alix40/config.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
-Copyright 2021 quadcube <[email protected]>
-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
-
-/* Bluetooth */
-#define BATTERY_LEVEL_PIN B6
diff --git a/keyboards/tominabox1/bigboy/keyboard.json b/keyboards/tominabox1/bigboy/keyboard.json
index a25189f35e..4862e216df 100644
--- a/keyboards/tominabox1/bigboy/keyboard.json
+++ b/keyboards/tominabox1/bigboy/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "BigBoy",
"manufacturer": "tominabox1",
- "url": "",
"maintainer": "tominabox1",
"usb": {
"vid": "0x7431",
diff --git a/keyboards/tominabox1/le_chiffre/info.json b/keyboards/tominabox1/le_chiffre/info.json
index cb4097d61d..c521928adf 100644
--- a/keyboards/tominabox1/le_chiffre/info.json
+++ b/keyboards/tominabox1/le_chiffre/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Le Chiffre",
"manufacturer": "tominabox1",
- "url": "",
"maintainer": "tominabox1",
"features": {
"bootmagic": true,
diff --git a/keyboards/tominabox1/littlefoot_lx/rev1/keyboard.json b/keyboards/tominabox1/littlefoot_lx/rev1/keyboard.json
index b021ba9c8d..9ccfb5f27b 100644
--- a/keyboards/tominabox1/littlefoot_lx/rev1/keyboard.json
+++ b/keyboards/tominabox1/littlefoot_lx/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Littlefoot LX",
"manufacturer": "tominabox1",
- "url": "",
"maintainer": "tominabox1",
"usb": {
"vid": "0x7431",
diff --git a/keyboards/tominabox1/littlefoot_lx/rev2/keyboard.json b/keyboards/tominabox1/littlefoot_lx/rev2/keyboard.json
index fe1cf6e596..38d1d62345 100644
--- a/keyboards/tominabox1/littlefoot_lx/rev2/keyboard.json
+++ b/keyboards/tominabox1/littlefoot_lx/rev2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Littlefoot LX",
"manufacturer": "tominabox1",
- "url": "",
"maintainer": "tominabox1",
"usb": {
"vid": "0x7431",
diff --git a/keyboards/tominabox1/qaz/keyboard.json b/keyboards/tominabox1/qaz/keyboard.json
index 9e18f0ddf4..9e3ea95ad4 100644
--- a/keyboards/tominabox1/qaz/keyboard.json
+++ b/keyboards/tominabox1/qaz/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "qaz",
"manufacturer": "whydobearsexplod",
- "url": "",
"maintainer": "tominabox1",
"usb": {
"vid": "0x7431",
diff --git a/keyboards/tominabox1/underscore33/rev1/keyboard.json b/keyboards/tominabox1/underscore33/rev1/keyboard.json
index 221ecccb04..d13e20a7c6 100644
--- a/keyboards/tominabox1/underscore33/rev1/keyboard.json
+++ b/keyboards/tominabox1/underscore33/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "underscore33",
"manufacturer": "tominabox1",
- "url": "",
"maintainer": "tominabox1",
"usb": {
"vid": "0x7431",
diff --git a/keyboards/tominabox1/underscore33/rev2/keyboard.json b/keyboards/tominabox1/underscore33/rev2/keyboard.json
index 4375116963..d4b922e240 100644
--- a/keyboards/tominabox1/underscore33/rev2/keyboard.json
+++ b/keyboards/tominabox1/underscore33/rev2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "underscore33",
"manufacturer": "tominabox1",
- "url": "",
"maintainer": "tominabox1",
"usb": {
"vid": "0x7431",
diff --git a/keyboards/touchpad/keyboard.json b/keyboards/touchpad/keyboard.json
index 5429b5844d..0d2b450782 100644
--- a/keyboards/touchpad/keyboard.json
+++ b/keyboards/touchpad/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "TouchPad",
"manufacturer": "JacoBurge",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x16D0",
diff --git a/keyboards/tr60w/keyboard.json b/keyboards/tr60w/keyboard.json
index ef483ed2e2..dcfc8f48d6 100644
--- a/keyboards/tr60w/keyboard.json
+++ b/keyboards/tr60w/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "TR60W",
"manufacturer": "Triangle Lab",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/trainpad/keyboard.json b/keyboards/trainpad/keyboard.json
index e7e74b0e91..346fd54027 100644
--- a/keyboards/trainpad/keyboard.json
+++ b/keyboards/trainpad/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "TrainPad",
"manufacturer": "Ananya Kirti",
- "url": "",
"maintainer": "AnanyaKirti",
"usb": {
"vid": "0x416B",
diff --git a/keyboards/treasure/type9/keyboard.json b/keyboards/treasure/type9/keyboard.json
index 0c1ee1987a..ab7599730f 100644
--- a/keyboards/treasure/type9/keyboard.json
+++ b/keyboards/treasure/type9/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Type-9",
"manufacturer": "Treasure",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/treasure/type9s3/keyboard.json b/keyboards/treasure/type9s3/keyboard.json
index cb2bcf3a7a..350746e00c 100644
--- a/keyboards/treasure/type9s3/keyboard.json
+++ b/keyboards/treasure/type9s3/keyboard.json
@@ -21,7 +21,6 @@
]
},
"processor": "atmega32u2",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x5493",
diff --git a/keyboards/trnthsn/e8ghty/info.json b/keyboards/trnthsn/e8ghty/info.json
index ec4e724878..bce77e0a5f 100644
--- a/keyboards/trnthsn/e8ghty/info.json
+++ b/keyboards/trnthsn/e8ghty/info.json
@@ -37,7 +37,6 @@
"indicators": {
"caps_lock": "B4"
},
- "url": "",
"usb": {
"vid": "0x5453",
"pid": "0x3830",
diff --git a/keyboards/trnthsn/e8ghtyneo/info.json b/keyboards/trnthsn/e8ghtyneo/info.json
index fef6259d24..eb1244c9cb 100644
--- a/keyboards/trnthsn/e8ghtyneo/info.json
+++ b/keyboards/trnthsn/e8ghtyneo/info.json
@@ -40,7 +40,6 @@
"indicators": {
"caps_lock": "B3"
},
- "url": "",
"usb": {
"vid": "0x5453",
"pid": "0x3845",
diff --git a/keyboards/trnthsn/s6xty/keyboard.json b/keyboards/trnthsn/s6xty/keyboard.json
index 3ec2f87f3d..ef1f5113bf 100644
--- a/keyboards/trnthsn/s6xty/keyboard.json
+++ b/keyboards/trnthsn/s6xty/keyboard.json
@@ -35,7 +35,6 @@
"led_count": 22,
"sleep": true
},
- "url": "",
"usb": {
"device_version": "0.0.1",
"pid": "0x5336",
diff --git a/keyboards/trnthsn/s6xty5neor2/info.json b/keyboards/trnthsn/s6xty5neor2/info.json
index ba20dbc2ba..47f09623cc 100644
--- a/keyboards/trnthsn/s6xty5neor2/info.json
+++ b/keyboards/trnthsn/s6xty5neor2/info.json
@@ -18,7 +18,6 @@
"indicators": {
"caps_lock": "C13"
},
- "url": "",
"usb": {
"vid": "0x5453",
"pid": "0x4E45",
diff --git a/keyboards/tweetydabird/lbs4/keyboard.json b/keyboards/tweetydabird/lbs4/keyboard.json
index 3176520772..e223289a3c 100644
--- a/keyboards/tweetydabird/lbs4/keyboard.json
+++ b/keyboards/tweetydabird/lbs4/keyboard.json
@@ -36,9 +36,6 @@
},
"rgblight": {
"led_count": 6,
- "hue_steps": 8,
- "saturation_steps": 17,
- "brightness_steps": 17,
"max_brightness": 175,
"animations": {
"alternating": true,
diff --git a/keyboards/tweetydabird/lbs6/keyboard.json b/keyboards/tweetydabird/lbs6/keyboard.json
index 1714e9b6c4..57be9289f8 100644
--- a/keyboards/tweetydabird/lbs6/keyboard.json
+++ b/keyboards/tweetydabird/lbs6/keyboard.json
@@ -39,9 +39,6 @@
},
"rgblight": {
"led_count": 8,
- "hue_steps": 8,
- "saturation_steps": 17,
- "brightness_steps": 17,
"max_brightness": 200,
"animations": {
"alternating": true,
diff --git a/keyboards/ubest/vn/keyboard.json b/keyboards/ubest/vn/keyboard.json
index c50ceebbba..477c16fb96 100644
--- a/keyboards/ubest/vn/keyboard.json
+++ b/keyboards/ubest/vn/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "vn",
"manufacturer": "ubest",
- "url": "",
"maintainer": "mfkiiyd",
"usb": {
"vid": "0x6D66",
diff --git a/keyboards/uk78/keyboard.json b/keyboards/uk78/keyboard.json
index 673497ca9c..ea1e030b2c 100644
--- a/keyboards/uk78/keyboard.json
+++ b/keyboards/uk78/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "UK78",
"manufacturer": "UK Keyboards",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x554B",
diff --git a/keyboards/unicomp/classic_ultracl_post_2013/overnumpad_1xb/board.h b/keyboards/unicomp/classic_ultracl_post_2013/overnumpad_1xb/board.h
new file mode 100644
index 0000000000..5b80eb2230
--- /dev/null
+++ b/keyboards/unicomp/classic_ultracl_post_2013/overnumpad_1xb/board.h
@@ -0,0 +1,8 @@
+// Copyright 2020 Purdea Andrei
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#include_next <board.h>
+
+#undef STM32_HSECLK
+#define STM32_HSECLK 16000000U
diff --git a/keyboards/unicomp/classic_ultracl_post_2013/overnumpad_1xb/config.h b/keyboards/unicomp/classic_ultracl_post_2013/overnumpad_1xb/config.h
index 71e60e9cfe..c10d26b9b2 100644
--- a/keyboards/unicomp/classic_ultracl_post_2013/overnumpad_1xb/config.h
+++ b/keyboards/unicomp/classic_ultracl_post_2013/overnumpad_1xb/config.h
@@ -21,8 +21,6 @@
#define SERIAL_NUMBER DEF_SERIAL_NUMBER
#endif
-#define STM32_HSECLK 16000000
-
#define SOLENOID_PIN B5
#define HAPTIC_ENABLE_PIN C13
#define SOLENOID_DEFAULT_DWELL 20
diff --git a/keyboards/unicomp/classic_ultracl_pre_2013/overnumpad_1xb/board.h b/keyboards/unicomp/classic_ultracl_pre_2013/overnumpad_1xb/board.h
new file mode 100644
index 0000000000..5b80eb2230
--- /dev/null
+++ b/keyboards/unicomp/classic_ultracl_pre_2013/overnumpad_1xb/board.h
@@ -0,0 +1,8 @@
+// Copyright 2020 Purdea Andrei
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#include_next <board.h>
+
+#undef STM32_HSECLK
+#define STM32_HSECLK 16000000U
diff --git a/keyboards/unicomp/classic_ultracl_pre_2013/overnumpad_1xb/config.h b/keyboards/unicomp/classic_ultracl_pre_2013/overnumpad_1xb/config.h
index 71e60e9cfe..c10d26b9b2 100644
--- a/keyboards/unicomp/classic_ultracl_pre_2013/overnumpad_1xb/config.h
+++ b/keyboards/unicomp/classic_ultracl_pre_2013/overnumpad_1xb/config.h
@@ -21,8 +21,6 @@
#define SERIAL_NUMBER DEF_SERIAL_NUMBER
#endif
-#define STM32_HSECLK 16000000
-
#define SOLENOID_PIN B5
#define HAPTIC_ENABLE_PIN C13
#define SOLENOID_DEFAULT_DWELL 20
diff --git a/keyboards/unicomp/pc122/overnumpad_1xb/board.h b/keyboards/unicomp/pc122/overnumpad_1xb/board.h
new file mode 100644
index 0000000000..5b80eb2230
--- /dev/null
+++ b/keyboards/unicomp/pc122/overnumpad_1xb/board.h
@@ -0,0 +1,8 @@
+// Copyright 2020 Purdea Andrei
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#include_next <board.h>
+
+#undef STM32_HSECLK
+#define STM32_HSECLK 16000000U
diff --git a/keyboards/unicomp/pc122/overnumpad_1xb/config.h b/keyboards/unicomp/pc122/overnumpad_1xb/config.h
index 71e60e9cfe..c10d26b9b2 100644
--- a/keyboards/unicomp/pc122/overnumpad_1xb/config.h
+++ b/keyboards/unicomp/pc122/overnumpad_1xb/config.h
@@ -21,8 +21,6 @@
#define SERIAL_NUMBER DEF_SERIAL_NUMBER
#endif
-#define STM32_HSECLK 16000000
-
#define SOLENOID_PIN B5
#define HAPTIC_ENABLE_PIN C13
#define SOLENOID_DEFAULT_DWELL 20
diff --git a/keyboards/unicomp/spacesaver_m_post_2013/overnumpad_1xb/board.h b/keyboards/unicomp/spacesaver_m_post_2013/overnumpad_1xb/board.h
new file mode 100644
index 0000000000..5b80eb2230
--- /dev/null
+++ b/keyboards/unicomp/spacesaver_m_post_2013/overnumpad_1xb/board.h
@@ -0,0 +1,8 @@
+// Copyright 2020 Purdea Andrei
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#include_next <board.h>
+
+#undef STM32_HSECLK
+#define STM32_HSECLK 16000000U
diff --git a/keyboards/unicomp/spacesaver_m_post_2013/overnumpad_1xb/config.h b/keyboards/unicomp/spacesaver_m_post_2013/overnumpad_1xb/config.h
index 71e60e9cfe..c10d26b9b2 100644
--- a/keyboards/unicomp/spacesaver_m_post_2013/overnumpad_1xb/config.h
+++ b/keyboards/unicomp/spacesaver_m_post_2013/overnumpad_1xb/config.h
@@ -21,8 +21,6 @@
#define SERIAL_NUMBER DEF_SERIAL_NUMBER
#endif
-#define STM32_HSECLK 16000000
-
#define SOLENOID_PIN B5
#define HAPTIC_ENABLE_PIN C13
#define SOLENOID_DEFAULT_DWELL 20
diff --git a/keyboards/unicomp/spacesaver_m_pre_2013/overnumpad_1xb/board.h b/keyboards/unicomp/spacesaver_m_pre_2013/overnumpad_1xb/board.h
new file mode 100644
index 0000000000..5b80eb2230
--- /dev/null
+++ b/keyboards/unicomp/spacesaver_m_pre_2013/overnumpad_1xb/board.h
@@ -0,0 +1,8 @@
+// Copyright 2020 Purdea Andrei
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#include_next <board.h>
+
+#undef STM32_HSECLK
+#define STM32_HSECLK 16000000U
diff --git a/keyboards/unicomp/spacesaver_m_pre_2013/overnumpad_1xb/config.h b/keyboards/unicomp/spacesaver_m_pre_2013/overnumpad_1xb/config.h
index 71e60e9cfe..c10d26b9b2 100644
--- a/keyboards/unicomp/spacesaver_m_pre_2013/overnumpad_1xb/config.h
+++ b/keyboards/unicomp/spacesaver_m_pre_2013/overnumpad_1xb/config.h
@@ -21,8 +21,6 @@
#define SERIAL_NUMBER DEF_SERIAL_NUMBER
#endif
-#define STM32_HSECLK 16000000
-
#define SOLENOID_PIN B5
#define HAPTIC_ENABLE_PIN C13
#define SOLENOID_DEFAULT_DWELL 20
diff --git a/keyboards/unikeyboard/diverge3/keyboard.json b/keyboards/unikeyboard/diverge3/keyboard.json
index 767f44b198..e50bdfa129 100644
--- a/keyboards/unikeyboard/diverge3/keyboard.json
+++ b/keyboards/unikeyboard/diverge3/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Diverge3",
"manufacturer": "UniKeyboard",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/unikeyboard/divergetm2/keyboard.json b/keyboards/unikeyboard/divergetm2/keyboard.json
index 09d481149c..8a7b5bb2df 100644
--- a/keyboards/unikeyboard/divergetm2/keyboard.json
+++ b/keyboards/unikeyboard/divergetm2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Diverge TM 2",
"manufacturer": "UniKeyboard",
- "url": "",
"maintainer": "islandman93, xton",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/unikeyboard/felix/keyboard.json b/keyboards/unikeyboard/felix/keyboard.json
index b55138a15c..8daef4227e 100644
--- a/keyboards/unikeyboard/felix/keyboard.json
+++ b/keyboards/unikeyboard/felix/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Felix",
"manufacturer": "UniKeyboard",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/unikorn/keyboard.json b/keyboards/unikorn/keyboard.json
index 1a3c46d691..77eaa81cbf 100644
--- a/keyboards/unikorn/keyboard.json
+++ b/keyboards/unikorn/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Unikorn60",
"manufacturer": "Singa x TGR",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x5354",
diff --git a/keyboards/uranuma/keyboard.json b/keyboards/uranuma/keyboard.json
index b24ce74d9f..670823bda9 100644
--- a/keyboards/uranuma/keyboard.json
+++ b/keyboards/uranuma/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "UraNuma",
"manufacturer": "yohewi",
- "url": "",
"maintainer": "yohewi",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/utd80/keyboard.json b/keyboards/utd80/keyboard.json
index 41bd35c66a..7c618e96b1 100644
--- a/keyboards/utd80/keyboard.json
+++ b/keyboards/utd80/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "UTD80",
"manufacturer": "UTD",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/v60_type_r/keyboard.json b/keyboards/v60_type_r/keyboard.json
index eba729220a..c186167ff2 100644
--- a/keyboards/v60_type_r/keyboard.json
+++ b/keyboards/v60_type_r/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "V60 Type R",
"manufacturer": "KB Paradise",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x7432",
diff --git a/keyboards/vertex/angle65/keyboard.json b/keyboards/vertex/angle65/keyboard.json
index ef0aacfef4..3047d82dfa 100644
--- a/keyboards/vertex/angle65/keyboard.json
+++ b/keyboards/vertex/angle65/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "ANGLE65",
"manufacturer": "vertex",
- "url": "",
"maintainer": "EasonQian1, Vertex-kb",
"usb": {
"vid": "0x9954",
diff --git a/keyboards/vertex/arc60/keyboard.json b/keyboards/vertex/arc60/keyboard.json
index ab98c446f0..7bca331f44 100644
--- a/keyboards/vertex/arc60/keyboard.json
+++ b/keyboards/vertex/arc60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "ARC60",
"manufacturer": "vertex",
- "url": "",
"maintainer": "EasonQian1, Vertex-kb",
"usb": {
"vid": "0x8354",
diff --git a/keyboards/vertex/arc60h/keyboard.json b/keyboards/vertex/arc60h/keyboard.json
index e6fed06bc1..684bbb9538 100644
--- a/keyboards/vertex/arc60h/keyboard.json
+++ b/keyboards/vertex/arc60h/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "ARC60H",
"manufacturer": "vertex",
- "url": "",
"maintainer": "EasonQian1, Vertex-kb",
"usb": {
"vid": "0x7374",
diff --git a/keyboards/vertex/cycle8/keyboard.json b/keyboards/vertex/cycle8/keyboard.json
index 100c2d21f1..6531e0f6fa 100644
--- a/keyboards/vertex/cycle8/keyboard.json
+++ b/keyboards/vertex/cycle8/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Cycle8",
"manufacturer": "vertex",
- "url": "",
"maintainer": "Eason",
"usb": {
"vid": "0x8A94",
diff --git a/keyboards/viktus/omnikey_bh/keyboard.json b/keyboards/viktus/omnikey_bh/keyboard.json
index 3356bf1eb2..af2b596bf8 100644
--- a/keyboards/viktus/omnikey_bh/keyboard.json
+++ b/keyboards/viktus/omnikey_bh/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Omnikey Blackheart",
"manufacturer": "blindassassin111",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/viktus/smolka/keyboard.json b/keyboards/viktus/smolka/keyboard.json
index e2cd55a405..a5f5735e09 100644
--- a/keyboards/viktus/smolka/keyboard.json
+++ b/keyboards/viktus/smolka/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Smolka",
"manufacturer": "Viktus Design LLC",
- "url": "",
"maintainer": "jrfhoutx",
"usb": {
"vid": "0x5644",
diff --git a/keyboards/viktus/sp_mini/keyboard.json b/keyboards/viktus/sp_mini/keyboard.json
index 25aa4c9494..6b9627b462 100644
--- a/keyboards/viktus/sp_mini/keyboard.json
+++ b/keyboards/viktus/sp_mini/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "SP_Mini",
"manufacturer": "Viktus Design LLC",
- "url": "",
"maintainer": "jrfhoutx",
"usb": {
"vid": "0x5644",
diff --git a/keyboards/viktus/vkr94/keyboard.json b/keyboards/viktus/vkr94/keyboard.json
index 31fd8ee1c7..a3f4ff35a2 100644
--- a/keyboards/viktus/vkr94/keyboard.json
+++ b/keyboards/viktus/vkr94/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "VKR 94",
"manufacturer": "Viktus Design",
- "url": "",
"maintainer": "BlindAssassin111",
"usb": {
"vid": "0x5644",
diff --git a/keyboards/viktus/z150_bh/keyboard.json b/keyboards/viktus/z150_bh/keyboard.json
index 27754da543..bbd7c1c1c3 100644
--- a/keyboards/viktus/z150_bh/keyboard.json
+++ b/keyboards/viktus/z150_bh/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Z-150 Blackheart",
"manufacturer": "blindassassin111",
- "url": "",
"maintainer": "qmk, blindassassin111",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/vinhcatba/uncertainty/keyboard.json b/keyboards/vinhcatba/uncertainty/keyboard.json
index 5f35a144d8..004e998966 100644
--- a/keyboards/vinhcatba/uncertainty/keyboard.json
+++ b/keyboards/vinhcatba/uncertainty/keyboard.json
@@ -47,10 +47,8 @@
"override_rgb": true
},
"led_count": 14,
- "max_brightness": 255,
"sleep": true
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0000",
diff --git a/keyboards/vitamins_included/info.json b/keyboards/vitamins_included/info.json
index 60907cdba3..d293e7c940 100644
--- a/keyboards/vitamins_included/info.json
+++ b/keyboards/vitamins_included/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Vitamins Included",
"manufacturer": "Duckle29",
- "url": "",
"maintainer": "Duckle29",
"build": {
"lto": true
diff --git a/keyboards/vitamins_included/rev2/rev2.c b/keyboards/vitamins_included/rev2/rev2.c
index e445a3da45..28bd73cc75 100644
--- a/keyboards/vitamins_included/rev2/rev2.c
+++ b/keyboards/vitamins_included/rev2/rev2.c
@@ -12,7 +12,7 @@ bool is_keyboard_left(void) {
gpio_set_pin_input(SPLIT_HAND_PIN);
return x;
#elif defined(EE_HANDS)
- return eeprom_read_byte(EECONFIG_HANDEDNESS);
+ return eeconfig_read_handedness();
#endif
return is_keyboard_master();
diff --git a/keyboards/void/voidhhkb_hotswap/keyboard.json b/keyboards/void/voidhhkb_hotswap/keyboard.json
index 460454cc5f..1e29c220dc 100644
--- a/keyboards/void/voidhhkb_hotswap/keyboard.json
+++ b/keyboards/void/voidhhkb_hotswap/keyboard.json
@@ -17,7 +17,6 @@
"rows": ["B11", "B10", "B2", "B1", "B0"]
},
"processor": "STM32F072",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0002",
diff --git a/keyboards/waterfowl/keyboard.json b/keyboards/waterfowl/keyboard.json
index 73f62a77eb..9e08da57c0 100644
--- a/keyboards/waterfowl/keyboard.json
+++ b/keyboards/waterfowl/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Waterfowl",
"manufacturer": "CyanDuck",
- "url": "",
"maintainer": "JW2586",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/wavtype/foundation/keyboard.json b/keyboards/wavtype/foundation/keyboard.json
index 4b1dd1d348..d8e9782f7e 100644
--- a/keyboards/wavtype/foundation/keyboard.json
+++ b/keyboards/wavtype/foundation/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "foundation",
"manufacturer": "protozoa.studio",
- "url": "",
"maintainer": "wavtype",
"usb": {
"vid": "0x03A7",
diff --git a/keyboards/wavtype/p01_ultra/keyboard.json b/keyboards/wavtype/p01_ultra/keyboard.json
index c44f0bd3bd..73633ee460 100644
--- a/keyboards/wavtype/p01_ultra/keyboard.json
+++ b/keyboards/wavtype/p01_ultra/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "p01_ultra",
"manufacturer": "wavtype",
- "url": "",
"maintainer": "wavtype",
"usb": {
"vid": "0x03A7",
diff --git a/keyboards/weirdo/geminate60/keyboard.json b/keyboards/weirdo/geminate60/keyboard.json
index 12bc42b30d..336f25fdc8 100644
--- a/keyboards/weirdo/geminate60/keyboard.json
+++ b/keyboards/weirdo/geminate60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Geminate60",
"manufacturer": "Weirdo",
- "url": "",
"maintainer": "Weirdo-F",
"usb": {
"vid": "0x7764",
diff --git a/keyboards/weirdo/kelowna/rgb64/keyboard.json b/keyboards/weirdo/kelowna/rgb64/keyboard.json
index 4822f979fe..d4d3294f50 100644
--- a/keyboards/weirdo/kelowna/rgb64/keyboard.json
+++ b/keyboards/weirdo/kelowna/rgb64/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "kelownaRGB64",
"manufacturer": "Weirdo",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x7764",
diff --git a/keyboards/weirdo/ls_60/keyboard.json b/keyboards/weirdo/ls_60/keyboard.json
index 7ab1f2f6cb..3325dc057d 100644
--- a/keyboards/weirdo/ls_60/keyboard.json
+++ b/keyboards/weirdo/ls_60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "LS_60",
"manufacturer": "Weirdo",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x7764",
diff --git a/keyboards/weirdo/naiping/np64/keyboard.json b/keyboards/weirdo/naiping/np64/keyboard.json
index f620fb1169..f7cdff55b5 100644
--- a/keyboards/weirdo/naiping/np64/keyboard.json
+++ b/keyboards/weirdo/naiping/np64/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "NP64",
"manufacturer": "Weirdo",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x7764",
diff --git a/keyboards/weirdo/naiping/nphhkb/keyboard.json b/keyboards/weirdo/naiping/nphhkb/keyboard.json
index cc791374b4..ed5485d9de 100644
--- a/keyboards/weirdo/naiping/nphhkb/keyboard.json
+++ b/keyboards/weirdo/naiping/nphhkb/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "NPhhkb",
"manufacturer": "Weirdo",
- "url": "",
"maintainer": "weirdo-f",
"usb": {
"vid": "0x7764",
diff --git a/keyboards/weirdo/naiping/npminila/keyboard.json b/keyboards/weirdo/naiping/npminila/keyboard.json
index b4048a52cf..e5ed93e193 100644
--- a/keyboards/weirdo/naiping/npminila/keyboard.json
+++ b/keyboards/weirdo/naiping/npminila/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "NPminila",
"manufacturer": "Weirdo",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x7764",
diff --git a/keyboards/weirdo/tiger910/keyboard.json b/keyboards/weirdo/tiger910/keyboard.json
index ca24561ebd..34bd01970a 100644
--- a/keyboards/weirdo/tiger910/keyboard.json
+++ b/keyboards/weirdo/tiger910/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "tiger910",
"manufacturer": "Weirdo",
- "url": "",
"maintainer": "Weirdo",
"usb": {
"vid": "0x7764",
diff --git a/keyboards/wekey/polaris/keyboard.json b/keyboards/wekey/polaris/keyboard.json
index c3fe12f144..4fd5b5f46d 100644
--- a/keyboards/wekey/polaris/keyboard.json
+++ b/keyboards/wekey/polaris/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Polaris",
"manufacturer": "@wekey",
- "url": "",
"maintainer": "@wekey.dev",
"usb": {
"vid": "0x5559",
diff --git a/keyboards/wekey/we27/keyboard.json b/keyboards/wekey/we27/keyboard.json
index d8cb7b0f80..91731cdc39 100644
--- a/keyboards/wekey/we27/keyboard.json
+++ b/keyboards/wekey/we27/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "We27",
"manufacturer": "@wekey",
- "url": "",
"maintainer": "@wekey.dev",
"usb": {
"vid": "0x5559",
diff --git a/keyboards/werk_technica/one/board.h b/keyboards/werk_technica/one/board.h
new file mode 100644
index 0000000000..3ad450d023
--- /dev/null
+++ b/keyboards/werk_technica/one/board.h
@@ -0,0 +1,8 @@
+// Copyright 2022 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#include_next <board.h>
+
+#undef STM32_HSECLK
+#define STM32_HSECLK 16000000U
diff --git a/keyboards/werk_technica/one/config.h b/keyboards/werk_technica/one/config.h
deleted file mode 100644
index 765e70851b..0000000000
--- a/keyboards/werk_technica/one/config.h
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright 2022 QMK
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#pragma once
-
-/* Set HSE clock since it differs from F411 default */
-#define STM32_HSECLK 16000000 \ No newline at end of file
diff --git a/keyboards/westfoxtrot/aanzee/keyboard.json b/keyboards/westfoxtrot/aanzee/keyboard.json
index 3a15014c4e..303ead3367 100644
--- a/keyboards/westfoxtrot/aanzee/keyboard.json
+++ b/keyboards/westfoxtrot/aanzee/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "aanzee",
"manufacturer": "westfoxtrot",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x21FF",
diff --git a/keyboards/westfoxtrot/cyclops/keyboard.json b/keyboards/westfoxtrot/cyclops/keyboard.json
index a74926511d..bf08026551 100644
--- a/keyboards/westfoxtrot/cyclops/keyboard.json
+++ b/keyboards/westfoxtrot/cyclops/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "cyclops",
"manufacturer": "westfoxtrot",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x21FF",
diff --git a/keyboards/westfoxtrot/prophet/keyboard.json b/keyboards/westfoxtrot/prophet/keyboard.json
index b431adddae..50a7583736 100644
--- a/keyboards/westfoxtrot/prophet/keyboard.json
+++ b/keyboards/westfoxtrot/prophet/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "prophet",
"manufacturer": "westfoxtrot",
- "url": "",
"maintainer": "westfoxtrot",
"usb": {
"vid": "0xFF21",
diff --git a/keyboards/wilba_tech/wt_main.c b/keyboards/wilba_tech/wt_main.c
index 92c43c794d..7e56d98356 100644
--- a/keyboards/wilba_tech/wt_main.c
+++ b/keyboards/wilba_tech/wt_main.c
@@ -33,7 +33,7 @@
// Called from via_init() if VIA_ENABLE
// Called from matrix_init_kb() if not VIA_ENABLE
-void via_init_kb(void)
+void wt_main_init(void)
{
// This checks both an EEPROM reset (from bootmagic lite, keycodes)
// and also firmware build date (from via_eeprom_is_valid())
@@ -64,11 +64,9 @@ void via_init_kb(void)
void matrix_init_kb(void)
{
// If VIA is disabled, we still need to load backlight settings.
- // Call via_init_kb() the same way as via_init(), with setting
- // EEPROM valid afterwards.
+ // Call via_init_kb() the same way as via_init_kb() does.
#ifndef VIA_ENABLE
- via_init_kb();
- via_eeprom_set_valid(true);
+ wt_main_init();
#endif // VIA_ENABLE
matrix_init_user();
@@ -109,6 +107,10 @@ void suspend_wakeup_init_kb(void)
// Moving this to the bottom of this source file is a workaround
// for an intermittent compiler error for Atmel compiler.
#ifdef VIA_ENABLE
+void via_init_kb(void) {
+ wt_main_init();
+}
+
void via_custom_value_command_kb(uint8_t *data, uint8_t length) {
uint8_t *command_id = &(data[0]);
uint8_t *channel_id = &(data[1]);
@@ -159,50 +161,3 @@ void via_set_device_indication(uint8_t value)
}
#endif // VIA_ENABLE
-
-//
-// In the case of VIA being disabled, we still need to check if
-// keyboard level EEPROM memory is valid before loading.
-// Thus these are copies of the same functions in VIA, since
-// the backlight settings reuse VIA's EEPROM magic/version,
-// and the ones in via.c won't be compiled in.
-//
-// Yes, this is sub-optimal, and is only here for completeness
-// (i.e. catering to the 1% of people that want wilba.tech LED bling
-// AND want persistent settings BUT DON'T want to use dynamic keymaps/VIA).
-//
-#ifndef VIA_ENABLE
-
-bool via_eeprom_is_valid(void)
-{
- char *p = QMK_BUILDDATE; // e.g. "2019-11-05-11:29:54"
- uint8_t magic0 = ( ( p[2] & 0x0F ) << 4 ) | ( p[3] & 0x0F );
- uint8_t magic1 = ( ( p[5] & 0x0F ) << 4 ) | ( p[6] & 0x0F );
- uint8_t magic2 = ( ( p[8] & 0x0F ) << 4 ) | ( p[9] & 0x0F );
-
- return (eeprom_read_byte( (void*)VIA_EEPROM_MAGIC_ADDR+0 ) == magic0 &&
- eeprom_read_byte( (void*)VIA_EEPROM_MAGIC_ADDR+1 ) == magic1 &&
- eeprom_read_byte( (void*)VIA_EEPROM_MAGIC_ADDR+2 ) == magic2 );
-}
-
-void via_eeprom_set_valid(bool valid)
-{
- char *p = QMK_BUILDDATE; // e.g. "2019-11-05-11:29:54"
- uint8_t magic0 = ( ( p[2] & 0x0F ) << 4 ) | ( p[3] & 0x0F );
- uint8_t magic1 = ( ( p[5] & 0x0F ) << 4 ) | ( p[6] & 0x0F );
- uint8_t magic2 = ( ( p[8] & 0x0F ) << 4 ) | ( p[9] & 0x0F );
-
- eeprom_update_byte( (void*)VIA_EEPROM_MAGIC_ADDR+0, valid ? magic0 : 0xFF);
- eeprom_update_byte( (void*)VIA_EEPROM_MAGIC_ADDR+1, valid ? magic1 : 0xFF);
- eeprom_update_byte( (void*)VIA_EEPROM_MAGIC_ADDR+2, valid ? magic2 : 0xFF);
-}
-
-void via_eeprom_reset(void)
-{
- // Set the VIA specific EEPROM state as invalid.
- via_eeprom_set_valid(false);
- // Set the TMK/QMK EEPROM state as invalid.
- eeconfig_disable();
-}
-
-#endif // VIA_ENABLE
diff --git a/keyboards/wilba_tech/wt_mono_backlight.c b/keyboards/wilba_tech/wt_mono_backlight.c
index 01fefc8ecc..8359aab135 100644
--- a/keyboards/wilba_tech/wt_mono_backlight.c
+++ b/keyboards/wilba_tech/wt_mono_backlight.c
@@ -25,6 +25,8 @@
#include "progmem.h"
#include "eeprom.h"
+#include "nvm_eeprom_eeconfig_internal.h" // expose EEPROM addresses, no appetite to move legacy/deprecated code to nvm
+#include "nvm_eeprom_via_internal.h" // expose EEPROM addresses, no appetite to move legacy/deprecated code to nvm
#include "via.h" // uses EEPROM address, lighting value IDs
#define MONO_BACKLIGHT_CONFIG_EEPROM_ADDR (VIA_EEPROM_CUSTOM_CONFIG_ADDR)
diff --git a/keyboards/wilba_tech/wt_rgb_backlight.c b/keyboards/wilba_tech/wt_rgb_backlight.c
index e52d002060..744bcb262d 100644
--- a/keyboards/wilba_tech/wt_rgb_backlight.c
+++ b/keyboards/wilba_tech/wt_rgb_backlight.c
@@ -66,6 +66,8 @@
#include "quantum/color.h"
#include "eeprom.h"
+#include "nvm_eeprom_eeconfig_internal.h" // expose EEPROM addresses, no appetite to move legacy/deprecated code to nvm
+#include "nvm_eeprom_via_internal.h" // expose EEPROM addresses, no appetite to move legacy/deprecated code to nvm
#include "via.h" // uses EEPROM address, lighting value IDs
#define RGB_BACKLIGHT_CONFIG_EEPROM_ADDR (VIA_EEPROM_CUSTOM_CONFIG_ADDR)
diff --git a/keyboards/windstudio/wind_x/r1/keyboard.json b/keyboards/windstudio/wind_x/r1/keyboard.json
index 1b5f34fe3e..44202e9685 100644
--- a/keyboards/windstudio/wind_x/r1/keyboard.json
+++ b/keyboards/windstudio/wind_x/r1/keyboard.json
@@ -15,7 +15,6 @@
"rows": ["F0", "F1", "D2", "D1", "D0"]
},
"processor": "atmega32u4",
- "url": "",
"usb": {
"device_version": "0.0.1",
"pid": "0x6801",
diff --git a/keyboards/winkeyless/b87/keyboard.json b/keyboards/winkeyless/b87/keyboard.json
index a941445d72..5977058d44 100644
--- a/keyboards/winkeyless/b87/keyboard.json
+++ b/keyboards/winkeyless/b87/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "B87",
"manufacturer": "Winkeyless",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x20A0",
diff --git a/keyboards/winkeyless/bface/keyboard.json b/keyboards/winkeyless/bface/keyboard.json
index cc5194ef34..d6599722c9 100644
--- a/keyboards/winkeyless/bface/keyboard.json
+++ b/keyboards/winkeyless/bface/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "B.face",
"manufacturer": "Winkeyless",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x20A0",
diff --git a/keyboards/winkeyless/bmini/keyboard.json b/keyboards/winkeyless/bmini/keyboard.json
index 6fdaf62182..f5bf8d40cf 100644
--- a/keyboards/winkeyless/bmini/keyboard.json
+++ b/keyboards/winkeyless/bmini/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "B.mini",
"manufacturer": "Winkeyless",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x20A0",
diff --git a/keyboards/winry/winry25tc/keyboard.json b/keyboards/winry/winry25tc/keyboard.json
index 9a83aded2c..2f9f88ea4a 100644
--- a/keyboards/winry/winry25tc/keyboard.json
+++ b/keyboards/winry/winry25tc/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Winry 25tc",
"manufacturer": "SpiderIsland",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/winry/winry315/keyboard.json b/keyboards/winry/winry315/keyboard.json
index 81971b339f..3f57dbe802 100644
--- a/keyboards/winry/winry315/keyboard.json
+++ b/keyboards/winry/winry315/keyboard.json
@@ -2,7 +2,6 @@
"manufacturer": "Winry",
"keyboard_name": "Winry315",
"maintainer": "sigprof",
- "url": "",
"usb": {
"device_version": "0.0.1",
"pid": "0x0315",
diff --git a/keyboards/wolf/kuku65/keyboard.json b/keyboards/wolf/kuku65/keyboard.json
index 5146d77d1b..93321a2e0b 100644
--- a/keyboards/wolf/kuku65/keyboard.json
+++ b/keyboards/wolf/kuku65/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "kuku65",
"manufacturer": "ToastyStoemp",
- "url": "",
"maintainer": "ToastyStoemp",
"usb": {
"vid": "0x5453",
diff --git a/keyboards/wolf/m60_b/keyboard.json b/keyboards/wolf/m60_b/keyboard.json
index 474974d383..ba25ebaa92 100644
--- a/keyboards/wolf/m60_b/keyboard.json
+++ b/keyboards/wolf/m60_b/keyboard.json
@@ -134,7 +134,6 @@
"max_brightness": 120,
"sleep": true
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0059",
diff --git a/keyboards/wolf/m6_c/keyboard.json b/keyboards/wolf/m6_c/keyboard.json
index f6f2416902..8c1d361f8c 100644
--- a/keyboards/wolf/m6_c/keyboard.json
+++ b/keyboards/wolf/m6_c/keyboard.json
@@ -82,7 +82,6 @@
],
"sleep": true
},
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0060",
diff --git a/keyboards/wolf/neely65/keyboard.json b/keyboards/wolf/neely65/keyboard.json
index 9a90105b96..5e55bf7bfc 100644
--- a/keyboards/wolf/neely65/keyboard.json
+++ b/keyboards/wolf/neely65/keyboard.json
@@ -17,7 +17,6 @@
"rows": ["D5", "D3", "D2", "D1", "D0"]
},
"processor": "atmega32u4",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0071",
diff --git a/keyboards/wolf/ryujin/keyboard.json b/keyboards/wolf/ryujin/keyboard.json
index 8e72cccd9e..f34cebb4f6 100644
--- a/keyboards/wolf/ryujin/keyboard.json
+++ b/keyboards/wolf/ryujin/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Ryujin",
"manufacturer": "Miroticaps",
- "url": "",
"maintainer": "ToastyStoemp",
"usb": {
"vid": "0x5453",
diff --git a/keyboards/wolf/sabre/keyboard.json b/keyboards/wolf/sabre/keyboard.json
index 11b235efe7..02c298a59e 100644
--- a/keyboards/wolf/sabre/keyboard.json
+++ b/keyboards/wolf/sabre/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Sabre",
"manufacturer": "ToastyStoemp",
- "url": "",
"maintainer": "ToastyStoemp",
"usb": {
"vid": "0x5453",
diff --git a/keyboards/wolf/silhouette/keyboard.json b/keyboards/wolf/silhouette/keyboard.json
index 548a89aa19..83c2d03999 100644
--- a/keyboards/wolf/silhouette/keyboard.json
+++ b/keyboards/wolf/silhouette/keyboard.json
@@ -20,7 +20,6 @@
"rows": ["GP27", "GP26", "GP25", "GP13", "GP3"]
},
"processor": "RP2040",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0080",
diff --git a/keyboards/wolf/twilight/keyboard.json b/keyboards/wolf/twilight/keyboard.json
index ed426e85d9..8a90b3656e 100644
--- a/keyboards/wolf/twilight/keyboard.json
+++ b/keyboards/wolf/twilight/keyboard.json
@@ -17,7 +17,6 @@
"rows": ["GP28", "GP27", "GP26", "GP25", "GP13", "GP3"]
},
"processor": "RP2040",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0077",
diff --git a/keyboards/wolf/ziggurat/keyboard.json b/keyboards/wolf/ziggurat/keyboard.json
index bb12d5ab2f..32627b479f 100644
--- a/keyboards/wolf/ziggurat/keyboard.json
+++ b/keyboards/wolf/ziggurat/keyboard.json
@@ -17,7 +17,6 @@
"rows": ["GP11", "GP10", "GP7", "GP6", "GP23", "GP24", "GP25", "GP26", "GP19", "GP18"]
},
"processor": "RP2040",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0084",
diff --git a/keyboards/wolfmarkclub/wm1/keyboard.json b/keyboards/wolfmarkclub/wm1/keyboard.json
index 0cea5546c8..6b0c896266 100644
--- a/keyboards/wolfmarkclub/wm1/keyboard.json
+++ b/keyboards/wolfmarkclub/wm1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "WM1",
"manufacturer": "Wolfmark Club",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/woodkeys/bigseries/1key/keyboard.json b/keyboards/woodkeys/bigseries/1key/keyboard.json
index 2440b1974b..c3f545e53c 100644
--- a/keyboards/woodkeys/bigseries/1key/keyboard.json
+++ b/keyboards/woodkeys/bigseries/1key/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "BigSeries 1-Key",
"manufacturer": "WoodKeys.click",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/woodkeys/bigseries/2key/keyboard.json b/keyboards/woodkeys/bigseries/2key/keyboard.json
index 9c8c34914a..bb4ac4db64 100644
--- a/keyboards/woodkeys/bigseries/2key/keyboard.json
+++ b/keyboards/woodkeys/bigseries/2key/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "BigSeries 2-Key",
"manufacturer": "WoodKeys.click",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/woodkeys/bigseries/3key/keyboard.json b/keyboards/woodkeys/bigseries/3key/keyboard.json
index 17870d98ad..35f94cb27f 100644
--- a/keyboards/woodkeys/bigseries/3key/keyboard.json
+++ b/keyboards/woodkeys/bigseries/3key/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "BigSeries 3-Key",
"manufacturer": "WoodKeys.click",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/woodkeys/bigseries/4key/keyboard.json b/keyboards/woodkeys/bigseries/4key/keyboard.json
index 1e44fc2375..5637e1ab5a 100644
--- a/keyboards/woodkeys/bigseries/4key/keyboard.json
+++ b/keyboards/woodkeys/bigseries/4key/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "BigSeries 4-Key",
"manufacturer": "WoodKeys.click",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/woodkeys/meira/info.json b/keyboards/woodkeys/meira/info.json
index 3ad2918d8e..0b73ffd7e6 100644
--- a/keyboards/woodkeys/meira/info.json
+++ b/keyboards/woodkeys/meira/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Meira",
"manufacturer": "WoodKeys.click",
- "url": "",
"maintainer": "colemarkham",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/woodkeys/scarletbandana/keyboard.json b/keyboards/woodkeys/scarletbandana/keyboard.json
index f6c4342efa..155ca508e7 100644
--- a/keyboards/woodkeys/scarletbandana/keyboard.json
+++ b/keyboards/woodkeys/scarletbandana/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Scarlet Bandana Version IV Mark 2",
"manufacturer": "WoodKeys.click",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/work_louder/micro/keyboard.json b/keyboards/work_louder/micro/keyboard.json
index 1b57ca82e8..b9ba6227bd 100644
--- a/keyboards/work_louder/micro/keyboard.json
+++ b/keyboards/work_louder/micro/keyboard.json
@@ -38,7 +38,6 @@
"hue": 213
},
"brightness_steps": 8,
- "hue_steps": 8,
"led_count": 8,
"max_brightness": 150,
"saturation_steps": 8,
diff --git a/keyboards/work_louder/numpad/keyboard.json b/keyboards/work_louder/numpad/keyboard.json
index bd615c4080..08bf7295da 100644
--- a/keyboards/work_louder/numpad/keyboard.json
+++ b/keyboards/work_louder/numpad/keyboard.json
@@ -99,7 +99,6 @@
"hue": 213
},
"brightness_steps": 8,
- "hue_steps": 8,
"led_count": 8,
"max_brightness": 120,
"saturation_steps": 8,
diff --git a/keyboards/wsk/alpha9/keyboard.json b/keyboards/wsk/alpha9/keyboard.json
index 41b95130c6..79c01c4c2a 100644
--- a/keyboards/wsk/alpha9/keyboard.json
+++ b/keyboards/wsk/alpha9/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Alpha9",
"manufacturer": "Worldspawn00",
- "url": "",
"maintainer": "Worldspawn00",
"usb": {
"vid": "0x5753",
diff --git a/keyboards/wsk/g4m3ralpha/keyboard.json b/keyboards/wsk/g4m3ralpha/keyboard.json
index b5cdb7ce10..d2ba034be1 100644
--- a/keyboards/wsk/g4m3ralpha/keyboard.json
+++ b/keyboards/wsk/g4m3ralpha/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "G4M3Ralpha",
"manufacturer": "Worldspawn00",
- "url": "",
"maintainer": "Worldspawn00",
"usb": {
"vid": "0x5753",
diff --git a/keyboards/x16/keyboard.json b/keyboards/x16/keyboard.json
index 4d407e5332..d8aa2468ca 100644
--- a/keyboards/x16/keyboard.json
+++ b/keyboards/x16/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "x16",
"manufacturer": "yinxianwei",
- "url": "",
"maintainer": "yinxianwei",
"usb": {
"vid": "0x4B50",
diff --git a/keyboards/xbows/knight/keyboard.json b/keyboards/xbows/knight/keyboard.json
index b675ee1946..b5adc0b946 100644
--- a/keyboards/xbows/knight/keyboard.json
+++ b/keyboards/xbows/knight/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "KNIGHT",
"manufacturer": "X-BOWS",
- "url": "",
"maintainer": "xbows-qmk",
"usb": {
"vid": "0x5842",
diff --git a/keyboards/xbows/knight_plus/keyboard.json b/keyboards/xbows/knight_plus/keyboard.json
index 0d1600c614..b3c43645d9 100644
--- a/keyboards/xbows/knight_plus/keyboard.json
+++ b/keyboards/xbows/knight_plus/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "KNIGHT_PLUS",
"manufacturer": "X-BOWS",
- "url": "",
"maintainer": "xbows-qmk",
"usb": {
"vid": "0x5842",
diff --git a/keyboards/xbows/nature/keyboard.json b/keyboards/xbows/nature/keyboard.json
index 6e28c9de30..7f23e781d2 100644
--- a/keyboards/xbows/nature/keyboard.json
+++ b/keyboards/xbows/nature/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "NATURE",
"manufacturer": "X-BOWS",
- "url": "",
"maintainer": "xbows-qmk",
"usb": {
"vid": "0x5842",
diff --git a/keyboards/xbows/numpad/keyboard.json b/keyboards/xbows/numpad/keyboard.json
index 070cc3a288..7be91ae2a4 100644
--- a/keyboards/xbows/numpad/keyboard.json
+++ b/keyboards/xbows/numpad/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "NUMPAD",
"manufacturer": "X-BOWS",
- "url": "",
"maintainer": "xbows-qmk",
"usb": {
"vid": "0x5842",
diff --git a/keyboards/xbows/ranger/keyboard.json b/keyboards/xbows/ranger/keyboard.json
index 945eaafcba..c5a47413ec 100644
--- a/keyboards/xbows/ranger/keyboard.json
+++ b/keyboards/xbows/ranger/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Ranger",
"manufacturer": "X-BOWS",
- "url": "",
"maintainer": "xbows-qmk",
"usb": {
"vid": "0x5842",
diff --git a/keyboards/xbows/woody/keyboard.json b/keyboards/xbows/woody/keyboard.json
index 538354507e..da403bacaf 100644
--- a/keyboards/xbows/woody/keyboard.json
+++ b/keyboards/xbows/woody/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "WOO-DY",
"manufacturer": "X-BOWS",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/xelus/dawn60/info.json b/keyboards/xelus/dawn60/info.json
index 2c71fef898..2eca36e46c 100644
--- a/keyboards/xelus/dawn60/info.json
+++ b/keyboards/xelus/dawn60/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Dawn60",
"manufacturer": "Xelus",
- "url": "",
"maintainer": "Xelus22",
"usb": {
"vid": "0x5845",
diff --git a/keyboards/xelus/dharma/keyboard.json b/keyboards/xelus/dharma/keyboard.json
index 8d6b746527..0e5fd1217b 100644
--- a/keyboards/xelus/dharma/keyboard.json
+++ b/keyboards/xelus/dharma/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Dharma",
"manufacturer": "Xelus",
- "url": "",
"maintainer": "Xelus22",
"usb": {
"vid": "0x5845",
diff --git a/keyboards/xelus/la_plus/keyboard.json b/keyboards/xelus/la_plus/keyboard.json
index 902364471f..78e16d59dc 100644
--- a/keyboards/xelus/la_plus/keyboard.json
+++ b/keyboards/xelus/la_plus/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "MechaMaker La+",
"manufacturer": "Xelus",
- "url": "",
"maintainer": "Xelus22",
"usb": {
"vid": "0x5845",
diff --git a/keyboards/xelus/la_plus/rgb_matrix_kb.inc b/keyboards/xelus/la_plus/rgb_matrix_kb.inc
index 88dd2ab0a2..93d52ec9d0 100644
--- a/keyboards/xelus/la_plus/rgb_matrix_kb.inc
+++ b/keyboards/xelus/la_plus/rgb_matrix_kb.inc
@@ -31,7 +31,7 @@ static void startup_animation_setleds(effect_params_t* params, bool dots) {
} else if (num == 0 || num == 1 || num == 2) {
return;
} else if (num >= 22) {
- eeprom_read_block(&rgb_matrix_config, EECONFIG_RGB_MATRIX, sizeof(rgb_matrix_config));
+ eeconfig_read_rgb_matrix(&rgb_matrix_config);
rgb_matrix_mode_noeeprom(rgb_matrix_config.mode);
return;
}
diff --git a/keyboards/xelus/ninjin/keyboard.json b/keyboards/xelus/ninjin/keyboard.json
index 2e7b1640df..cf601d8a80 100644
--- a/keyboards/xelus/ninjin/keyboard.json
+++ b/keyboards/xelus/ninjin/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Ninjin",
"manufacturer": "Xelus",
- "url": "",
"maintainer": "Xelus",
"usb": {
"vid": "0x5845",
diff --git a/keyboards/xelus/pachi/mini_32u4/keyboard.json b/keyboards/xelus/pachi/mini_32u4/keyboard.json
index 590b32de6b..c3144bca15 100644
--- a/keyboards/xelus/pachi/mini_32u4/keyboard.json
+++ b/keyboards/xelus/pachi/mini_32u4/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Pachi Mini",
"manufacturer": "Xelus",
- "url": "",
"maintainer": "Xelus22",
"usb": {
"vid": "0x5845",
diff --git a/keyboards/xelus/pachi/rev1/keyboard.json b/keyboards/xelus/pachi/rev1/keyboard.json
index 98b59c8641..fff3be7646 100644
--- a/keyboards/xelus/pachi/rev1/keyboard.json
+++ b/keyboards/xelus/pachi/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Pachi Rev 1",
"manufacturer": "Xelus",
- "url": "",
"maintainer": "Xelus22",
"usb": {
"vid": "0x5845",
diff --git a/keyboards/xelus/pachi/rgb/rev1/keyboard.json b/keyboards/xelus/pachi/rgb/rev1/keyboard.json
index fe88e695be..a27bcae0fc 100644
--- a/keyboards/xelus/pachi/rgb/rev1/keyboard.json
+++ b/keyboards/xelus/pachi/rgb/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Pachi RGB Rev 1",
"manufacturer": "Xelus",
- "url": "",
"maintainer": "Xelus22",
"usb": {
"vid": "0x5845",
diff --git a/keyboards/xelus/pachi/rgb/rev2/keyboard.json b/keyboards/xelus/pachi/rgb/rev2/keyboard.json
index ea712b78d8..8d97dfe49b 100644
--- a/keyboards/xelus/pachi/rgb/rev2/keyboard.json
+++ b/keyboards/xelus/pachi/rgb/rev2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Pachi RGB Rev 2",
"manufacturer": "Xelus",
- "url": "",
"maintainer": "Xelus22",
"usb": {
"vid": "0x5845",
diff --git a/keyboards/xelus/rs108/board.h b/keyboards/xelus/rs108/board.h
new file mode 100644
index 0000000000..cce4af40f9
--- /dev/null
+++ b/keyboards/xelus/rs108/board.h
@@ -0,0 +1,8 @@
+// Copyright 2022 Harrison Chan (Xelus)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#include_next <board.h>
+
+#undef STM32_HSECLK
+#define STM32_HSECLK 16000000U
diff --git a/keyboards/xelus/rs108/config.h b/keyboards/xelus/rs108/config.h
index 3d3bc49228..883ed2b9aa 100644
--- a/keyboards/xelus/rs108/config.h
+++ b/keyboards/xelus/rs108/config.h
@@ -28,6 +28,3 @@
// Hardware Defines
#define EARLY_INIT_PERFORM_BOOTLOADER_JUMP TRUE
-
-// HSE CLK
-#define STM32_HSECLK 16000000
diff --git a/keyboards/xelus/rs108/keyboard.json b/keyboards/xelus/rs108/keyboard.json
index 12ffbb3fdc..c524ae09ed 100644
--- a/keyboards/xelus/rs108/keyboard.json
+++ b/keyboards/xelus/rs108/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "RS108",
"manufacturer": "Xelus",
- "url": "",
"maintainer": "xelus22",
"usb": {
"vid": "0x5845",
diff --git a/keyboards/xelus/rs60/info.json b/keyboards/xelus/rs60/info.json
index c36d968d37..a62157826e 100644
--- a/keyboards/xelus/rs60/info.json
+++ b/keyboards/xelus/rs60/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "RS60",
"manufacturer": "Xelus",
- "url": "",
"maintainer": "Xelus22",
"usb": {
"vid": "0x5845",
diff --git a/keyboards/xelus/rs60/rev2_0/board.h b/keyboards/xelus/rs60/rev2_0/board.h
new file mode 100644
index 0000000000..cce4af40f9
--- /dev/null
+++ b/keyboards/xelus/rs60/rev2_0/board.h
@@ -0,0 +1,8 @@
+// Copyright 2022 Harrison Chan (Xelus)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#include_next <board.h>
+
+#undef STM32_HSECLK
+#define STM32_HSECLK 16000000U
diff --git a/keyboards/xelus/rs60/rev2_0/config.h b/keyboards/xelus/rs60/rev2_0/config.h
index 3d3bc49228..883ed2b9aa 100644
--- a/keyboards/xelus/rs60/rev2_0/config.h
+++ b/keyboards/xelus/rs60/rev2_0/config.h
@@ -28,6 +28,3 @@
// Hardware Defines
#define EARLY_INIT_PERFORM_BOOTLOADER_JUMP TRUE
-
-// HSE CLK
-#define STM32_HSECLK 16000000
diff --git a/keyboards/xelus/snap96/keyboard.json b/keyboards/xelus/snap96/keyboard.json
index 0be9968c5a..e32b7db4e0 100644
--- a/keyboards/xelus/snap96/keyboard.json
+++ b/keyboards/xelus/snap96/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Snap96",
"manufacturer": "Xelus",
- "url": "",
"maintainer": "Xelus22",
"usb": {
"vid": "0x5845",
diff --git a/keyboards/xelus/trinityxttkl/keyboard.json b/keyboards/xelus/trinityxttkl/keyboard.json
index eea94c5979..c650626e4b 100644
--- a/keyboards/xelus/trinityxttkl/keyboard.json
+++ b/keyboards/xelus/trinityxttkl/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Trinity XT TKL",
"manufacturer": "Xelus",
- "url": "",
"maintainer": "Xelus22",
"usb": {
"vid": "0x5845",
diff --git a/keyboards/xelus/valor/rev1/keyboard.json b/keyboards/xelus/valor/rev1/keyboard.json
index 5b5695f34b..e85f9b2aaa 100644
--- a/keyboards/xelus/valor/rev1/keyboard.json
+++ b/keyboards/xelus/valor/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Valor Rev1",
"manufacturer": "Xelus",
- "url": "",
"maintainer": "Xelus22",
"usb": {
"vid": "0x5845",
diff --git a/keyboards/xelus/valor/rev2/keyboard.json b/keyboards/xelus/valor/rev2/keyboard.json
index 21de5fb4a2..451eeb99ff 100644
--- a/keyboards/xelus/valor/rev2/keyboard.json
+++ b/keyboards/xelus/valor/rev2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Valor Rev2",
"manufacturer": "Xelus",
- "url": "",
"maintainer": "Xelus22",
"usb": {
"vid": "0x5845",
diff --git a/keyboards/xelus/valor/rev3/keyboard.json b/keyboards/xelus/valor/rev3/keyboard.json
index 52954fb784..002cdeff5c 100644
--- a/keyboards/xelus/valor/rev3/keyboard.json
+++ b/keyboards/xelus/valor/rev3/keyboard.json
@@ -45,7 +45,6 @@
"max_brightness": 200,
"saturation_steps": 8
},
- "url": "",
"usb": {
"device_version": "0.0.1",
"pid": "0x5652",
diff --git a/keyboards/xelus/valor_frl_tkl/info.json b/keyboards/xelus/valor_frl_tkl/info.json
index a0b7a70a89..9c909634f7 100644
--- a/keyboards/xelus/valor_frl_tkl/info.json
+++ b/keyboards/xelus/valor_frl_tkl/info.json
@@ -1,6 +1,5 @@
{
"manufacturer": "Xelus",
- "url": "",
"maintainer": "Xelus22",
"usb": {
"vid": "0x5845",
diff --git a/keyboards/xelus/valor_frl_tkl/rev2_0/board.h b/keyboards/xelus/valor_frl_tkl/rev2_0/board.h
new file mode 100644
index 0000000000..cce4af40f9
--- /dev/null
+++ b/keyboards/xelus/valor_frl_tkl/rev2_0/board.h
@@ -0,0 +1,8 @@
+// Copyright 2022 Harrison Chan (Xelus)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#include_next <board.h>
+
+#undef STM32_HSECLK
+#define STM32_HSECLK 16000000U
diff --git a/keyboards/xelus/valor_frl_tkl/rev2_1/board.h b/keyboards/xelus/valor_frl_tkl/rev2_1/board.h
new file mode 100644
index 0000000000..cce4af40f9
--- /dev/null
+++ b/keyboards/xelus/valor_frl_tkl/rev2_1/board.h
@@ -0,0 +1,8 @@
+// Copyright 2022 Harrison Chan (Xelus)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#include_next <board.h>
+
+#undef STM32_HSECLK
+#define STM32_HSECLK 16000000U
diff --git a/keyboards/xelus/xs108/keyboard.json b/keyboards/xelus/xs108/keyboard.json
index 14d442d197..d4a022ce7f 100644
--- a/keyboards/xelus/xs108/keyboard.json
+++ b/keyboards/xelus/xs108/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "XS108",
"manufacturer": "Xelus",
- "url": "",
"maintainer": "xelus22",
"usb": {
"vid": "0x5845",
diff --git a/keyboards/xelus/xs60/hotswap/keyboard.json b/keyboards/xelus/xs60/hotswap/keyboard.json
index 45a5e57542..3cceb144ae 100644
--- a/keyboards/xelus/xs60/hotswap/keyboard.json
+++ b/keyboards/xelus/xs60/hotswap/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "XS60 Hotswap",
"manufacturer": "Xelus",
- "url": "",
"maintainer": "Xelus22",
"usb": {
"vid": "0x5845",
diff --git a/keyboards/xelus/xs60/soldered/keyboard.json b/keyboards/xelus/xs60/soldered/keyboard.json
index 41af87ba7c..8dace88ce8 100644
--- a/keyboards/xelus/xs60/soldered/keyboard.json
+++ b/keyboards/xelus/xs60/soldered/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "XS60 Soldered",
"manufacturer": "Xelus",
- "url": "",
"maintainer": "Xelus22",
"usb": {
"vid": "0x5845",
diff --git a/keyboards/xiaomi/mk02/keyboard.json b/keyboards/xiaomi/mk02/keyboard.json
index 28d5d8a17d..60326a335b 100644
--- a/keyboards/xiaomi/mk02/keyboard.json
+++ b/keyboards/xiaomi/mk02/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "MK02",
"manufacturer": "Xiaomi",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/xiudi/xd68/keyboard.json b/keyboards/xiudi/xd68/keyboard.json
index 620c0b5963..35fc7f61dd 100644
--- a/keyboards/xiudi/xd68/keyboard.json
+++ b/keyboards/xiudi/xd68/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "XD68",
"manufacturer": "xiudi",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x7844",
diff --git a/keyboards/xiudi/xd75/keyboard.json b/keyboards/xiudi/xd75/keyboard.json
index df1ec33577..95aaa6f182 100644
--- a/keyboards/xiudi/xd75/keyboard.json
+++ b/keyboards/xiudi/xd75/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "XD75",
"manufacturer": "xiudi",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x7844",
diff --git a/keyboards/xiudi/xd84/keyboard.json b/keyboards/xiudi/xd84/keyboard.json
index 0411869633..7c9fc32865 100644
--- a/keyboards/xiudi/xd84/keyboard.json
+++ b/keyboards/xiudi/xd84/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "XD84",
"manufacturer": "KPrepublic",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x7844",
diff --git a/keyboards/xiudi/xd84pro/keyboard.json b/keyboards/xiudi/xd84pro/keyboard.json
index 5388d8f7c2..070dd32396 100644
--- a/keyboards/xiudi/xd84pro/keyboard.json
+++ b/keyboards/xiudi/xd84pro/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "XD84 Pro",
"manufacturer": "KPrepublic",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x7844",
diff --git a/keyboards/xiudi/xd96/keyboard.json b/keyboards/xiudi/xd96/keyboard.json
index df1fd1cfd4..cae3f223b0 100644
--- a/keyboards/xiudi/xd96/keyboard.json
+++ b/keyboards/xiudi/xd96/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "XD96",
"manufacturer": "KPrepublic",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x7844",
diff --git a/keyboards/xmmx/keyboard.json b/keyboards/xmmx/keyboard.json
index 2e6813520c..bb8d7e0977 100644
--- a/keyboards/xmmx/keyboard.json
+++ b/keyboards/xmmx/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "XMMX",
"manufacturer": "farmakon",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/xw60/keyboard.json b/keyboards/xw60/keyboard.json
index 3bd11e21c1..5c428f4f5b 100644
--- a/keyboards/xw60/keyboard.json
+++ b/keyboards/xw60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "XW60",
"manufacturer": "Drclick",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/yampad/keyboard.json b/keyboards/yampad/keyboard.json
index 76efef72ad..789565e342 100644
--- a/keyboards/yampad/keyboard.json
+++ b/keyboards/yampad/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Yampad",
"manufacturer": "Mattia Dal Ben",
- "url": "",
"maintainer": "mattdibi",
"usb": {
"vid": "0x5950",
diff --git a/keyboards/ydkb/chili/keyboard.json b/keyboards/ydkb/chili/keyboard.json
index 92552d96a3..13b46d8b12 100644
--- a/keyboards/ydkb/chili/keyboard.json
+++ b/keyboards/ydkb/chili/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Chili",
"manufacturer": "YDKB",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x5945",
diff --git a/keyboards/ydkb/just60/keyboard.json b/keyboards/ydkb/just60/keyboard.json
index 586ea80f21..f8bd5a3503 100644
--- a/keyboards/ydkb/just60/keyboard.json
+++ b/keyboards/ydkb/just60/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Just60",
"manufacturer": "YDKB",
- "url": "",
"maintainer": "thinxer",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/ydkb/yd68/keyboard.json b/keyboards/ydkb/yd68/keyboard.json
index a3542e72c2..439272a927 100644
--- a/keyboards/ydkb/yd68/keyboard.json
+++ b/keyboards/ydkb/yd68/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "YD68v2",
"manufacturer": "YANG",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/ydkb/ydpm40/keyboard.json b/keyboards/ydkb/ydpm40/keyboard.json
index b0916f297c..f19139d566 100644
--- a/keyboards/ydkb/ydpm40/keyboard.json
+++ b/keyboards/ydkb/ydpm40/keyboard.json
@@ -17,7 +17,6 @@
"rows": ["D4", "D5", "D6", "D7"]
},
"processor": "atmega328p",
- "url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0240",
diff --git a/keyboards/ymdk/bface/keyboard.json b/keyboards/ymdk/bface/keyboard.json
index 8a0025c01a..9662adaba2 100644
--- a/keyboards/ymdk/bface/keyboard.json
+++ b/keyboards/ymdk/bface/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "B.face",
"manufacturer": "YMDK",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x594D",
diff --git a/keyboards/ymdk/id75/f103/keyboard.json b/keyboards/ymdk/id75/f103/keyboard.json
index 5b1974b3f2..07088ee7cc 100644
--- a/keyboards/ymdk/id75/f103/keyboard.json
+++ b/keyboards/ymdk/id75/f103/keyboard.json
@@ -1,5 +1,4 @@
{
- "manufacturer": "YMDK",
"bootloader": "uf2boot",
"matrix_pins": {
"cols": ["A10", "A9", "A8", "B15", "B14", "B13", "B12", "A5", "A6", "A4", "A3", "A2", "A1", "A0", "A15"],
diff --git a/keyboards/ymdk/id75/info.json b/keyboards/ymdk/id75/info.json
index bbe4d1c73e..e409743abb 100644
--- a/keyboards/ymdk/id75/info.json
+++ b/keyboards/ymdk/id75/info.json
@@ -1,6 +1,8 @@
{
+ "manufacturer": "YMDK",
"keyboard_name": "Idobao x YMDK ID75",
"maintainer": "qmk",
+ "bootloader_instructions": "Press the button on the back of the PCB twice in quick succession.",
"diode_direction": "ROW2COL",
"features": {
"bootmagic": true,
diff --git a/keyboards/ymdk/id75/readme.md b/keyboards/ymdk/id75/readme.md
index 4f7e779458..f94d4c14cf 100644
--- a/keyboards/ymdk/id75/readme.md
+++ b/keyboards/ymdk/id75/readme.md
@@ -8,15 +8,18 @@ A 75-key, 5-row ortholinear keyboard with per-key and underglow RGB LEDs.
* Hardware Supported: [Idobao x YMDK ID75](https://www.aliexpress.com/item/3256804537842097.html). **This is not the same PCB as `idobao/id75` or `ymdk/ymd75`.**
This keyboard has had multiple PCB revisions, some of which may not work with the firmware in this repository. **Check your PCB before flashing.**
* `f103`: (Geehy APM32F103CBT6, uf2boot)
+ * `rp2040`: (RP2040, rp2040)
* Hardware Availability: [YMDK](https://ymdkey.com/products/id75-75-keys-ortholinear-layout-qmk-anodized-aluminum-case-plate-hot-swappable-hot-swap-type-c-pcb-mechanical-keyboard-kit), [AliExpress (YMDK Store)](https://www.aliexpress.com/item/2255800125183974.html), [Amazon](https://www.amazon.com/Ortholinear-Anodized-Aluminum-hot-swappable-Mechanical/dp/B07ZQ8CD88)
Make example for this keyboard (after setting up your build environment):
make ymdk/id75/f103:default
+ make ymdk/id75/rp2040:default
Flashing example for this keyboard:
make ymdk/id75/f103:default:flash
+ make ymdk/id75/rp2040:default:flash
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
@@ -30,3 +33,4 @@ Enter the bootloader in 3 ways:
After entering the bootloader through one of the three methods above, the keyboard will appear as a USB mass storage device. If the CLI is unable to find this device, the compiled `.uf2` file can be manually copied to it. The keyboard will reboot on completion with the new firmware loaded.
- `f103`: The volume name is `MT.KEY`.
+- `rp2040`: The volume name is `RPI-RP2`.
diff --git a/keyboards/sofle/keyhive/config.h b/keyboards/ymdk/id75/rp2040/config.h
index cda0be789e..b7a25de160 100644
--- a/keyboards/sofle/keyhive/config.h
+++ b/keyboards/ymdk/id75/rp2040/config.h
@@ -1,6 +1,4 @@
-/* Copyright
- * 2021 solartempest
- * 2021 QMK
+/* Copyright 2021 Mike Tsao
*
* 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
@@ -18,6 +16,5 @@
#pragma once
-// OLED settings
-#define OLED_TIMEOUT 80000
-#define OLED_BRIGHTNESS 90
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U
diff --git a/keyboards/ymdk/id75/rp2040/keyboard.json b/keyboards/ymdk/id75/rp2040/keyboard.json
new file mode 100644
index 0000000000..f153203cd0
--- /dev/null
+++ b/keyboards/ymdk/id75/rp2040/keyboard.json
@@ -0,0 +1,12 @@
+{
+ "bootloader": "rp2040",
+ "matrix_pins": {
+ "cols": ["GP26", "GP27", "GP4", "GP5", "GP1", "GP23", "GP22", "GP21", "GP28", "GP3", "GP7", "GP12", "GP13", "GP14", "GP15"],
+ "rows": ["GP8", "GP6", "GP19", "GP20", "GP18"]
+ },
+ "processor": "RP2040",
+ "ws2812": {
+ "driver": "vendor",
+ "pin": "GP2"
+ }
+}
diff --git a/keyboards/ymdk/melody96/hotswap/keyboard.json b/keyboards/ymdk/melody96/hotswap/keyboard.json
index 6a00e05050..901afc8651 100644
--- a/keyboards/ymdk/melody96/hotswap/keyboard.json
+++ b/keyboards/ymdk/melody96/hotswap/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Melody96 Hotswap",
"manufacturer": "YMDK",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x594D",
diff --git a/keyboards/ymdk/melody96/soldered/keyboard.json b/keyboards/ymdk/melody96/soldered/keyboard.json
index dbb2ddc32b..6a47c6c685 100644
--- a/keyboards/ymdk/melody96/soldered/keyboard.json
+++ b/keyboards/ymdk/melody96/soldered/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Melody96 Soldered",
"manufacturer": "YMDK",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x594D",
diff --git a/keyboards/ymdk/sp64/keyboard.json b/keyboards/ymdk/sp64/keyboard.json
index bfb140873a..d1d0d8296c 100644
--- a/keyboards/ymdk/sp64/keyboard.json
+++ b/keyboards/ymdk/sp64/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "SP64",
"manufacturer": "YMDK",
- "url": "",
"maintainer": "walston",
"usb": {
"vid": "0x594D",
diff --git a/keyboards/ymdk/yd60mq/info.json b/keyboards/ymdk/yd60mq/info.json
index 1af04be687..d5a3a20c71 100644
--- a/keyboards/ymdk/yd60mq/info.json
+++ b/keyboards/ymdk/yd60mq/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "YD60MQ",
"manufacturer": "YMDK",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x594D",
diff --git a/keyboards/ymdk/ym68/keyboard.json b/keyboards/ymdk/ym68/keyboard.json
index 5bea9b2e48..032774b282 100644
--- a/keyboards/ymdk/ym68/keyboard.json
+++ b/keyboards/ymdk/ym68/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "YM68",
"manufacturer": "YMDK",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x594D",
diff --git a/keyboards/ymdk/ymd21/v2/keyboard.json b/keyboards/ymdk/ymd21/v2/keyboard.json
index 3e2e992ccc..d7c4b75855 100644
--- a/keyboards/ymdk/ymd21/v2/keyboard.json
+++ b/keyboards/ymdk/ymd21/v2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "YMD21 v2",
"manufacturer": "YMDK",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x45D4",
diff --git a/keyboards/ymdk/ymd40/air40/keyboard.json b/keyboards/ymdk/ymd40/air40/keyboard.json
index aaca80156b..0adc965cc7 100644
--- a/keyboards/ymdk/ymd40/air40/keyboard.json
+++ b/keyboards/ymdk/ymd40/air40/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "YMDK Air40",
"manufacturer": "YMDK",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x45D4",
diff --git a/keyboards/ymdk/ymd40/v2/keyboard.json b/keyboards/ymdk/ymd40/v2/keyboard.json
index 08f5f0a4e3..baecfbb579 100644
--- a/keyboards/ymdk/ymd40/v2/keyboard.json
+++ b/keyboards/ymdk/ymd40/v2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "YMD40 v2",
"manufacturer": "YMDK",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x594D",
diff --git a/keyboards/ymdk/ymd75/rev1/keyboard.json b/keyboards/ymdk/ymd75/rev1/keyboard.json
index f2b664c67f..fd46bf0d99 100644
--- a/keyboards/ymdk/ymd75/rev1/keyboard.json
+++ b/keyboards/ymdk/ymd75/rev1/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "YMD75 / MT84",
"manufacturer": "YMDK",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x20A0",
diff --git a/keyboards/ymdk/ymd75/rev2/keyboard.json b/keyboards/ymdk/ymd75/rev2/keyboard.json
index 272140fd82..3bee673ceb 100644
--- a/keyboards/ymdk/ymd75/rev2/keyboard.json
+++ b/keyboards/ymdk/ymd75/rev2/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "YMD75 / MT84",
"manufacturer": "YMDK",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x20A0",
diff --git a/keyboards/ymdk/ymd75/rev3/keyboard.json b/keyboards/ymdk/ymd75/rev3/keyboard.json
index ae8c20990b..4377fbd742 100644
--- a/keyboards/ymdk/ymd75/rev3/keyboard.json
+++ b/keyboards/ymdk/ymd75/rev3/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "YMD75 / MT84",
"manufacturer": "YMDK",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x20A0",
diff --git a/keyboards/ymdk/ymd75/rev4/iso/keyboard.json b/keyboards/ymdk/ymd75/rev4/iso/keyboard.json
index 180c68beaa..21c688bc82 100644
--- a/keyboards/ymdk/ymd75/rev4/iso/keyboard.json
+++ b/keyboards/ymdk/ymd75/rev4/iso/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "YMD75 V4",
"manufacturer": "YMDK",
- "url": "",
"maintainer": "zvecr",
"processor": "STM32F103",
"bootloader": "uf2boot",
diff --git a/keyboards/ymdk/ymd96/keyboard.json b/keyboards/ymdk/ymd96/keyboard.json
index ed7edd490a..7ff17de0c2 100644
--- a/keyboards/ymdk/ymd96/keyboard.json
+++ b/keyboards/ymdk/ymd96/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "YMD96",
"manufacturer": "YMDK",
- "url": "",
"maintainer": "sparkyman215",
"usb": {
"vid": "0x20A0",
diff --git a/keyboards/yncognito/batpad/keyboard.json b/keyboards/yncognito/batpad/keyboard.json
index 06a1f9b090..6e962aefce 100644
--- a/keyboards/yncognito/batpad/keyboard.json
+++ b/keyboards/yncognito/batpad/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Batpad",
"manufacturer": "Yncognito",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x7979",
diff --git a/keyboards/yoichiro/lunakey_macro/keyboard.json b/keyboards/yoichiro/lunakey_macro/keyboard.json
index 7268dd3143..3742a4d467 100644
--- a/keyboards/yoichiro/lunakey_macro/keyboard.json
+++ b/keyboards/yoichiro/lunakey_macro/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Lunakey Macro",
"manufacturer": "yoichiro",
- "url": "",
"maintainer": "Yoichiro Tanaka",
"usb": {
"vid": "0x5954",
diff --git a/keyboards/yoichiro/lunakey_mini/keyboard.json b/keyboards/yoichiro/lunakey_mini/keyboard.json
index 177b3afaa6..41503fe598 100644
--- a/keyboards/yoichiro/lunakey_mini/keyboard.json
+++ b/keyboards/yoichiro/lunakey_mini/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Lunakey Mini",
"manufacturer": "yoichiro",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0x5954",
diff --git a/keyboards/yoichiro/lunakey_pico/keyboard.json b/keyboards/yoichiro/lunakey_pico/keyboard.json
index 39070d615a..a6db26fde0 100644
--- a/keyboards/yoichiro/lunakey_pico/keyboard.json
+++ b/keyboards/yoichiro/lunakey_pico/keyboard.json
@@ -41,10 +41,8 @@
"static_gradient": true,
"twinkle": true
},
- "hue_steps": 8,
"saturation_steps": 8,
- "brightness_steps": 8,
- "max_brightness": 255
+ "brightness_steps": 8
},
"split": {
"enabled": true,
diff --git a/keyboards/yushakobo/ergo68/keyboard.json b/keyboards/yushakobo/ergo68/keyboard.json
index bc61e979b7..ac86eae70b 100644
--- a/keyboards/yushakobo/ergo68/keyboard.json
+++ b/keyboards/yushakobo/ergo68/keyboard.json
@@ -14,7 +14,6 @@
"cols": ["F4", "F5", "F6", "F7", "B1", "B3", "B2"],
"rows": ["D4", "C6", "D7", "E6", "B4"]
},
- "url": "",
"usb": {
"vid": "0x3265",
"pid": "0x0011",
diff --git a/keyboards/yushakobo/navpad/10_helix_r/keyboard.json b/keyboards/yushakobo/navpad/10_helix_r/keyboard.json
index e91f96f0ac..89613390c1 100644
--- a/keyboards/yushakobo/navpad/10_helix_r/keyboard.json
+++ b/keyboards/yushakobo/navpad/10_helix_r/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "navpad 1.0 with helix keyboard",
"manufacturer": "yushakobo",
- "url": "",
"maintainer": "yushakobo",
"usb": {
"vid": "0x3265",
diff --git a/keyboards/yushakobo/quick7/keyboard.json b/keyboards/yushakobo/quick7/keyboard.json
index ba4854015b..146397d088 100644
--- a/keyboards/yushakobo/quick7/keyboard.json
+++ b/keyboards/yushakobo/quick7/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "quick7",
"manufacturer": "yushakobo",
- "url": "",
"maintainer": "yushakobo",
"usb": {
"vid": "0x3265",
diff --git a/keyboards/ziggurat/keyboard.json b/keyboards/ziggurat/keyboard.json
index 11ae657256..ef86511b36 100644
--- a/keyboards/ziggurat/keyboard.json
+++ b/keyboards/ziggurat/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Ziggurat",
"manufacturer": "LaminarWoob",
- "url": "",
"maintainer": "kb-elmo",
"usb": {
"vid": "0x8F5D",
diff --git a/keyboards/zlant/keyboard.json b/keyboards/zlant/keyboard.json
index 965a259c3b..4185d22d94 100644
--- a/keyboards/zlant/keyboard.json
+++ b/keyboards/zlant/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Zlant",
"manufacturer": "Matthew Cordier",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
diff --git a/keyboards/zsa/moonlander/matrix.c b/keyboards/zsa/moonlander/matrix.c
index 867fa85a66..4e5c120950 100644
--- a/keyboards/zsa/moonlander/matrix.c
+++ b/keyboards/zsa/moonlander/matrix.c
@@ -127,7 +127,7 @@ bool matrix_scan_custom(matrix_row_t current_matrix[]) {
matrix_io_delay();
}
// read col data
- data = ((readPin(A0) << 0) | (readPin(A1) << 1) | (readPin(A2) << 2) | (readPin(A3) << 3) | (readPin(A6) << 4) | (readPin(A7) << 5) | (readPin(B0) << 6));
+ data = ((gpio_read_pin(A0) << 0) | (gpio_read_pin(A1) << 1) | (gpio_read_pin(A2) << 2) | (gpio_read_pin(A3) << 3) | (gpio_read_pin(A6) << 4) | (gpio_read_pin(A7) << 5) | (gpio_read_pin(B0) << 6));
// unstrobe row
switch (row) {
case 0:
diff --git a/keyboards/zvecr/split_blackpill/keyboard.json b/keyboards/zvecr/split_blackpill/keyboard.json
index d22914d3bd..407314b71a 100644
--- a/keyboards/zvecr/split_blackpill/keyboard.json
+++ b/keyboards/zvecr/split_blackpill/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "split_blackpill",
"manufacturer": "zvecr",
- "url": "",
"maintainer": "zvecr",
"usb": {
"vid": "0x5A56",
diff --git a/keyboards/zvecr/zv48/info.json b/keyboards/zvecr/zv48/info.json
index 39a05a61e6..0a6e8f7ae9 100644
--- a/keyboards/zvecr/zv48/info.json
+++ b/keyboards/zvecr/zv48/info.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "zv48",
"manufacturer": "zvecr",
- "url": "",
"maintainer": "zvecr",
"usb": {
"vid": "0x5A56",
diff --git a/keyboards/zwag/zwag75/keyboard.json b/keyboards/zwag/zwag75/keyboard.json
index 03b97cefc8..899e21dfa5 100644
--- a/keyboards/zwag/zwag75/keyboard.json
+++ b/keyboards/zwag/zwag75/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "Zwag75",
"manufacturer": "Zwag.gg",
- "url": "",
"maintainer": "DeskDaily",
"usb": {
"vid": "0x5102",
diff --git a/layouts/community/75_ansi/layout.json b/layouts/community/75_ansi/layout.json
index 4b7c5a0d88..72be23b486 100644
--- a/layouts/community/75_ansi/layout.json
+++ b/layouts/community/75_ansi/layout.json
@@ -3,4 +3,4 @@
[{w:1.5},"","","","","","","","","","","","","",{w:1.5},"",""],
[{w:1.75},"","","","","","","","","","","","",{w:2.25},"",""],
[{w:2.25},"","","","","","","","","","","",{w:1.75},"","",""],
-[{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:6.25},"","","","","","",""] \ No newline at end of file
+[{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:6.25},"","","","","","",""]
diff --git a/layouts/community/ortho_1x4/layout.json b/layouts/community/ortho_1x4/layout.json
index 6103c7e248..833ff19d4f 100644
--- a/layouts/community/ortho_1x4/layout.json
+++ b/layouts/community/ortho_1x4/layout.json
@@ -1 +1 @@
-["","","",""] \ No newline at end of file
+["","","",""]
diff --git a/layouts/community/ortho_4x12/layout.json b/layouts/community/ortho_4x12/layout.json
index 9439b6e0be..961b080642 100644
--- a/layouts/community/ortho_4x12/layout.json
+++ b/layouts/community/ortho_4x12/layout.json
@@ -1,4 +1,4 @@
["","","","","","","","","","","",""],
["","","","","","","","","","","",""],
["","","","","","","","","","","",""],
-["","","","","","","","","","","",""] \ No newline at end of file
+["","","","","","","","","","","",""]
diff --git a/layouts/default/60_ansi_arrow/layout.json b/layouts/default/60_ansi_arrow/layout.json
index 7fc631c3d1..163107fda4 100644
--- a/layouts/default/60_ansi_arrow/layout.json
+++ b/layouts/default/60_ansi_arrow/layout.json
@@ -3,4 +3,4 @@
[{w:1.75},"","","","","","","","","","","","",{w:2.25},""],
[{w:2.25},"","","","","","","","","","",{w:1.75},"","",""],
[{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:6.25},"","","","","",""]
- \ No newline at end of file
+
diff --git a/layouts/default/ortho_5x5/readme.md b/layouts/default/ortho_5x5/readme.md
index 3dd75765d1..2922976d3a 100644
--- a/layouts/default/ortho_5x5/readme.md
+++ b/layouts/default/ortho_5x5/readme.md
@@ -1,3 +1,3 @@
# ortho_5x5
- LAYOUT_ortho_5x5 \ No newline at end of file
+ LAYOUT_ortho_5x5
diff --git a/lib/pico-sdk b/lib/pico-sdk
-Subproject a3398d8d3a772f37fef44a74743a1de69770e9c
+Subproject d0c5cac430cc955b65efa0e899748853d9a8092
diff --git a/lib/python/qmk/cli/__init__.py b/lib/python/qmk/cli/__init__.py
index 3f2ba9ce3c..26905ec134 100644
--- a/lib/python/qmk/cli/__init__.py
+++ b/lib/python/qmk/cli/__init__.py
@@ -58,7 +58,6 @@ subcommands = [
'qmk.cli.generate.keyboard_c',
'qmk.cli.generate.keyboard_h',
'qmk.cli.generate.keycodes',
- 'qmk.cli.generate.keycodes_tests',
'qmk.cli.generate.keymap_h',
'qmk.cli.generate.make_dependencies',
'qmk.cli.generate.rgb_breathe_table',
@@ -215,7 +214,7 @@ if sys.version_info[0] != 3 or sys.version_info[1] < 9:
milc_version = __VERSION__.split('.')
-if int(milc_version[0]) < 2 and int(milc_version[1]) < 4:
+if int(milc_version[0]) < 2 and int(milc_version[1]) < 9:
requirements = Path('requirements.txt').resolve()
_eprint(f'Your MILC library is too old! Please upgrade: python3 -m pip install -U -r {str(requirements)}')
diff --git a/lib/python/qmk/cli/generate/community_modules.py b/lib/python/qmk/cli/generate/community_modules.py
index 23678a2fb5..e12daccf1c 100644
--- a/lib/python/qmk/cli/generate/community_modules.py
+++ b/lib/python/qmk/cli/generate/community_modules.py
@@ -8,7 +8,7 @@ import qmk.path
from qmk.info import get_modules
from qmk.keyboard import keyboard_completer, keyboard_folder
from qmk.commands import dump_lines
-from qmk.constants import GPL2_HEADER_C_LIKE, GENERATED_HEADER_C_LIKE
+from qmk.constants import GPL2_HEADER_C_LIKE, GENERATED_HEADER_C_LIKE, GPL2_HEADER_SH_LIKE, GENERATED_HEADER_SH_LIKE
from qmk.community_modules import module_api_list, load_module_jsons, find_module_path
@@ -121,6 +121,69 @@ def _render_core_implementation(api, modules):
return lines
+def _generate_features_rules(features_dict):
+ lines = []
+ for feature, enabled in features_dict.items():
+ feature = feature.upper()
+ enabled = 'yes' if enabled else 'no'
+ lines.append(f'{feature}_ENABLE={enabled}')
+ return lines
+
+
+def _generate_modules_rules(keyboard, filename):
+ lines = []
+ modules = get_modules(keyboard, filename)
+ if len(modules) > 0:
+ lines.append('')
+ lines.append('OPT_DEFS += -DCOMMUNITY_MODULES_ENABLE=TRUE')
+ for module in modules:
+ module_path = qmk.path.unix_style_path(find_module_path(module))
+ if not module_path:
+ raise FileNotFoundError(f"Module '{module}' not found.")
+ lines.append('')
+ lines.append(f'COMMUNITY_MODULES += {module_path.name}') # use module_path here instead of module as it may be a subdirectory
+ lines.append(f'OPT_DEFS += -DCOMMUNITY_MODULE_{module_path.name.upper()}_ENABLE=TRUE')
+ lines.append(f'COMMUNITY_MODULE_PATHS += {module_path}')
+ lines.append(f'VPATH += {module_path}')
+ lines.append(f'SRC += $(wildcard {module_path}/{module_path.name}.c)')
+ lines.append(f'MODULE_NAME_{module_path.name.upper()} := {module_path.name}')
+ lines.append(f'MODULE_PATH_{module_path.name.upper()} := {module_path}')
+ lines.append(f'-include {module_path}/rules.mk')
+
+ module_jsons = load_module_jsons(modules)
+ for module_json in module_jsons:
+ if 'features' in module_json:
+ lines.append('')
+ lines.append(f'# Module: {module_json["module_name"]}')
+ lines.extend(_generate_features_rules(module_json['features']))
+ return lines
+
+
[email protected]('-o', '--output', arg_only=True, type=qmk.path.normpath, help='File to write to')
[email protected]('-q', '--quiet', arg_only=True, action='store_true', help="Quiet mode, only output error messages")
[email protected]('-e', '--escape', arg_only=True, action='store_true', help="Escape spaces in quiet mode")
[email protected]('-kb', '--keyboard', arg_only=True, type=keyboard_folder, completer=keyboard_completer, help='Keyboard to generate rules.mk for.')
[email protected]('filename', nargs='?', arg_only=True, type=qmk.path.FileType('r'), completer=FilesCompleter('.json'), help='A configurator export JSON to be compiled and flashed or a pre-compiled binary firmware file (bin/hex) to be flashed.')
[email protected]('Creates a community_modules_rules_mk from a keymap.json file.')
+def generate_community_modules_rules_mk(cli):
+
+ rules_mk_lines = [GPL2_HEADER_SH_LIKE, GENERATED_HEADER_SH_LIKE]
+
+ rules_mk_lines.extend(_generate_modules_rules(cli.args.keyboard, cli.args.filename))
+
+ # Show the results
+ dump_lines(cli.args.output, rules_mk_lines)
+
+ if cli.args.output:
+ if cli.args.quiet:
+ if cli.args.escape:
+ print(cli.args.output.as_posix().replace(' ', '\\ '))
+ else:
+ print(cli.args.output)
+ else:
+ cli.log.info('Wrote rules.mk to %s.', cli.args.output)
+
+
@cli.argument('-o', '--output', arg_only=True, type=qmk.path.normpath, help='File to write to')
@cli.argument('-q', '--quiet', arg_only=True, action='store_true', help="Quiet mode, only output error messages")
@cli.argument('-kb', '--keyboard', arg_only=True, type=keyboard_folder, completer=keyboard_completer, help='Keyboard to generate community_modules.h for.')
diff --git a/lib/python/qmk/cli/generate/keycodes_tests.py b/lib/python/qmk/cli/generate/keycodes_tests.py
deleted file mode 100644
index 453b4693a7..0000000000
--- a/lib/python/qmk/cli/generate/keycodes_tests.py
+++ /dev/null
@@ -1,39 +0,0 @@
-"""Used by the make system to generate a keycode lookup table from keycodes_{version}.json
-"""
-from milc import cli
-
-from qmk.constants import GPL2_HEADER_C_LIKE, GENERATED_HEADER_C_LIKE
-from qmk.commands import dump_lines
-from qmk.path import normpath
-from qmk.keycodes import load_spec
-
-
-def _generate_defines(lines, keycodes):
- lines.append('')
- lines.append('std::map<uint16_t, std::string> KEYCODE_ID_TABLE = {')
- for key, value in keycodes["keycodes"].items():
- lines.append(f' {{{value.get("key")}, "{value.get("key")}"}},')
- lines.append('};')
-
-
[email protected]('-v', '--version', arg_only=True, required=True, help='Version of keycodes to generate.')
[email protected]('-o', '--output', arg_only=True, type=normpath, help='File to write to')
[email protected]('-q', '--quiet', arg_only=True, action='store_true', help="Quiet mode, only output error messages")
[email protected]('Used by the make system to generate a keycode lookup table from keycodes_{version}.json', hidden=True)
-def generate_keycodes_tests(cli):
- """Generates a keycode to identifier lookup table for unit test output.
- """
-
- # Build the keycodes.h file.
- keycodes_h_lines = [GPL2_HEADER_C_LIKE, GENERATED_HEADER_C_LIKE, '// clang-format off']
- keycodes_h_lines.append('extern "C" {\n#include <keycode.h>\n}')
- keycodes_h_lines.append('#include <map>')
- keycodes_h_lines.append('#include <string>')
- keycodes_h_lines.append('#include <cstdint>')
-
- keycodes = load_spec(cli.args.version)
-
- _generate_defines(keycodes_h_lines, keycodes)
-
- # Show the results
- dump_lines(cli.args.output, keycodes_h_lines, cli.args.quiet)
diff --git a/lib/python/qmk/cli/generate/rules_mk.py b/lib/python/qmk/cli/generate/rules_mk.py
index ef4101d77f..358a22fd1d 100755
--- a/lib/python/qmk/cli/generate/rules_mk.py
+++ b/lib/python/qmk/cli/generate/rules_mk.py
@@ -6,13 +6,12 @@ from dotty_dict import dotty
from argcomplete.completers import FilesCompleter
from milc import cli
-from qmk.info import info_json, get_modules
+from qmk.info import info_json
from qmk.json_schema import json_load
from qmk.keyboard import keyboard_completer, keyboard_folder
from qmk.commands import dump_lines, parse_configurator_json
-from qmk.path import normpath, unix_style_path, FileType
+from qmk.path import normpath, FileType
from qmk.constants import GPL2_HEADER_SH_LIKE, GENERATED_HEADER_SH_LIKE
-from qmk.community_modules import find_module_path, load_module_jsons
def generate_rule(rules_key, rules_value):
@@ -56,33 +55,6 @@ def generate_features_rules(features_dict):
return lines
-def generate_modules_rules(keyboard, filename):
- lines = []
- modules = get_modules(keyboard, filename)
- if len(modules) > 0:
- lines.append('')
- lines.append('OPT_DEFS += -DCOMMUNITY_MODULES_ENABLE=TRUE')
- for module in modules:
- module_path = unix_style_path(find_module_path(module))
- if not module_path:
- raise FileNotFoundError(f"Module '{module}' not found.")
- lines.append('')
- lines.append(f'COMMUNITY_MODULES += {module_path.name}') # use module_path here instead of module as it may be a subdirectory
- lines.append(f'OPT_DEFS += -DCOMMUNITY_MODULE_{module_path.name.upper()}_ENABLE=TRUE')
- lines.append(f'COMMUNITY_MODULE_PATHS += {module_path}')
- lines.append(f'VPATH += {module_path}')
- lines.append(f'SRC += $(wildcard {module_path}/{module_path.name}.c)')
- lines.append(f'-include {module_path}/rules.mk')
-
- module_jsons = load_module_jsons(modules)
- for module_json in module_jsons:
- if 'features' in module_json:
- lines.append('')
- lines.append(f'# Module: {module_json["module_name"]}')
- lines.extend(generate_features_rules(module_json['features']))
- return lines
-
-
@cli.argument('filename', nargs='?', arg_only=True, type=FileType('r'), completer=FilesCompleter('.json'), help='A configurator export JSON to be compiled and flashed or a pre-compiled binary firmware file (bin/hex) to be flashed.')
@cli.argument('-o', '--output', arg_only=True, type=normpath, help='File to write to')
@cli.argument('-q', '--quiet', arg_only=True, action='store_true', help="Quiet mode, only output error messages")
@@ -133,8 +105,6 @@ def generate_rules_mk(cli):
if converter:
rules_mk_lines.append(generate_rule('CONVERT_TO', converter))
- rules_mk_lines.extend(generate_modules_rules(cli.args.keyboard, cli.args.filename))
-
# Show the results
dump_lines(cli.args.output, rules_mk_lines)
diff --git a/lib/python/qmk/cli/lint.py b/lib/python/qmk/cli/lint.py
index bcf905f579..e2c76e4465 100644
--- a/lib/python/qmk/cli/lint.py
+++ b/lib/python/qmk/cli/lint.py
@@ -26,7 +26,7 @@ def _list_defaultish_keymaps(kb):
defaultish.extend(INVALID_KM_NAMES)
keymaps = set()
- for x in list_keymaps(kb):
+ for x in list_keymaps(kb, include_userspace=False):
if x in defaultish or x.startswith('default'):
keymaps.add(x)
@@ -171,6 +171,14 @@ def _handle_invalid_features(kb, info):
return ok
+def _handle_invalid_config(kb, info):
+ """Check for invalid keyboard level config
+ """
+ if info.get('url') == "":
+ cli.log.warning(f'{kb}: Invalid keyboard level config detected - Optional field "url" should not be empty.')
+ return True
+
+
def _chibios_conf_includenext_check(target):
"""Check the ChibiOS conf.h for the correct inclusion of the next conf.h
"""
@@ -255,6 +263,9 @@ def keyboard_check(kb): # noqa C901
if not _handle_invalid_features(kb, kb_info):
ok = False
+ if not _handle_invalid_config(kb, kb_info):
+ ok = False
+
invalid_files = git_get_ignored_files(f'keyboards/{kb}/')
for file in invalid_files:
if 'keymap' in file:
diff --git a/lib/python/qmk/cli/new/keymap.py b/lib/python/qmk/cli/new/keymap.py
index 8b7160f5f2..16865ceb00 100755
--- a/lib/python/qmk/cli/new/keymap.py
+++ b/lib/python/qmk/cli/new/keymap.py
@@ -1,10 +1,12 @@
"""This script automates the copying of the default keymap into your own keymap.
"""
import re
+import json
import shutil
+from pathlib import Path
from milc import cli
-from milc.questions import question
+from milc.questions import question, choice
from qmk.constants import HAS_QMK_USERSPACE, QMK_USERSPACE
from qmk.path import is_keyboard, keymaps, keymap
@@ -12,6 +14,34 @@ from qmk.git import git_get_username
from qmk.decorators import automagic_keyboard, automagic_keymap
from qmk.keyboard import keyboard_completer, keyboard_folder
from qmk.userspace import UserspaceDefs
+from qmk.json_schema import json_load
+from qmk.json_encoders import KeymapJSONEncoder
+from qmk.info import info_json
+
+
+def _list_available_converters(kb_name):
+ """Search for converters that can be applied to a given keyboard
+ """
+ if not is_keyboard(kb_name):
+ return None
+
+ info = info_json(kb_name)
+ pin_compatible = info.get('pin_compatible')
+ if not pin_compatible:
+ return None
+
+ return sorted(folder.name.split('_to_')[-1] for folder in Path('platforms').glob(f'*/converters/{pin_compatible}_to_*'))
+
+
+def _set_converter(file, converter):
+ """add/overwrite any existing converter specified in keymap.json
+ """
+ json_data = json_load(file) if file.exists() else {}
+
+ json_data['converter'] = converter
+
+ output = json.dumps(json_data, cls=KeymapJSONEncoder, sort_keys=True)
+ file.write_text(output + '\n', encoding='utf-8')
def validate_keymap_name(name):
@@ -37,8 +67,28 @@ Keymap name? """
return question(prompt, default=git_get_username())
+def prompt_converter(kb_name):
+ prompt = """
+{fg_yellow}Configure Development Board{style_reset_all}
+For more information, see:
+https://docs.qmk.fm/feature_converters
+
+Use converter? """
+
+ converters = _list_available_converters(kb_name)
+ if not converters:
+ return None
+
+ choices = ['No (default)', *converters]
+
+ answer = choice(prompt, options=choices, default=0)
+ return None if choices.index(answer) == 0 else answer
+
+
@cli.argument('-kb', '--keyboard', type=keyboard_folder, completer=keyboard_completer, help='Specify keyboard name. Example: 1upkeyboards/1up60hse')
@cli.argument('-km', '--keymap', help='Specify the name for the new keymap directory')
[email protected]('--converter', help='Specify the name of a converter to configure')
[email protected]('--skip-converter', arg_only=True, action='store_true', help='Skip converter')
@cli.subcommand('Creates a new keymap for the keyboard of your choosing')
@automagic_keyboard
@automagic_keymap
@@ -51,6 +101,7 @@ def new_keymap(cli):
# ask for user input if keyboard or keymap was not provided in the command line
kb_name = cli.config.new_keymap.keyboard if cli.config.new_keymap.keyboard else prompt_keyboard()
user_name = cli.config.new_keymap.keymap if cli.config.new_keymap.keymap else prompt_user()
+ converter = cli.config.new_keymap.converter if cli.args.skip_converter or cli.config.new_keymap.converter else prompt_converter(kb_name)
# check directories
if not is_keyboard(kb_name):
@@ -77,6 +128,9 @@ def new_keymap(cli):
# create user directory with default keymap files
shutil.copytree(keymap_path_default, keymap_path_new, symlinks=True)
+ if converter:
+ _set_converter(keymap_path_new / 'keymap.json', converter)
+
# end message to user
cli.log.info(f'{{fg_green}}Created a new keymap called {{fg_cyan}}{user_name}{{fg_green}} in: {{fg_cyan}}{keymap_path_new}.{{fg_reset}}')
cli.log.info(f"Compile a firmware with your new keymap by typing: {{fg_yellow}}qmk compile -kb {kb_name} -km {user_name}{{fg_reset}}.")
diff --git a/lib/python/qmk/info.py b/lib/python/qmk/info.py
index 93eba7376a..d95fd3d799 100644
--- a/lib/python/qmk/info.py
+++ b/lib/python/qmk/info.py
@@ -1066,23 +1066,13 @@ def get_modules(keyboard, keymap_filename):
"""
modules = []
+ kb_info_json = info_json(keyboard)
+ modules.extend(kb_info_json.get('modules', []))
+
if keymap_filename:
keymap_json = parse_configurator_json(keymap_filename)
if keymap_json:
- kb = keymap_json.get('keyboard', None)
- if not kb:
- kb = keyboard
-
- if kb:
- kb_info_json = info_json(kb)
- if kb_info_json:
- modules.extend(kb_info_json.get('modules', []))
-
modules.extend(keymap_json.get('modules', []))
- elif keyboard:
- kb_info_json = info_json(keyboard)
- modules.extend(kb_info_json.get('modules', []))
-
return list(dict.fromkeys(modules)) # remove dupes
diff --git a/lib/python/qmk/json_encoders.py b/lib/python/qmk/json_encoders.py
index e83a381d52..e8bcf48996 100755
--- a/lib/python/qmk/json_encoders.py
+++ b/lib/python/qmk/json_encoders.py
@@ -250,12 +250,14 @@ class CommunityModuleJSONEncoder(QMKJSONEncoder):
return '00module_name'
if key == 'maintainer':
return '01maintainer'
+ if key == 'license':
+ return '02license'
if key == 'url':
- return '02url'
+ return '03url'
if key == 'features':
- return '03features'
+ return '04features'
if key == 'keycodes':
- return '04keycodes'
+ return '05keycodes'
elif self.indentation_level == 3: # keycodes
if key == 'key':
return '00key'
diff --git a/lib/python/qmk/keymap.py b/lib/python/qmk/keymap.py
index 8e36461722..b7138aa4a1 100644
--- a/lib/python/qmk/keymap.py
+++ b/lib/python/qmk/keymap.py
@@ -399,7 +399,7 @@ def is_keymap_target(keyboard, keymap):
return False
-def list_keymaps(keyboard, c=True, json=True, additional_files=None, fullpath=False):
+def list_keymaps(keyboard, c=True, json=True, additional_files=None, fullpath=False, include_userspace=True):
"""List the available keymaps for a keyboard.
Args:
@@ -418,14 +418,19 @@ def list_keymaps(keyboard, c=True, json=True, additional_files=None, fullpath=Fa
fullpath
When set to True the full path of the keymap relative to the `qmk_firmware` root will be provided.
+ include_userspace
+ When set to True, also search userspace for available keymaps
+
Returns:
a sorted list of valid keymap names.
"""
names = set()
+ has_userspace = HAS_QMK_USERSPACE and include_userspace
+
# walk up the directory tree until keyboards_dir
# and collect all directories' name with keymap.c file in it
- for search_dir in [QMK_FIRMWARE, QMK_USERSPACE] if HAS_QMK_USERSPACE else [QMK_FIRMWARE]:
+ for search_dir in [QMK_FIRMWARE, QMK_USERSPACE] if has_userspace else [QMK_FIRMWARE]:
keyboards_dir = search_dir / Path('keyboards')
kb_path = keyboards_dir / keyboard
@@ -443,7 +448,7 @@ def list_keymaps(keyboard, c=True, json=True, additional_files=None, fullpath=Fa
info = info_json(keyboard)
community_parents = list(Path('layouts').glob('*/'))
- if HAS_QMK_USERSPACE and (Path(QMK_USERSPACE) / "layouts").exists():
+ if has_userspace and (Path(QMK_USERSPACE) / "layouts").exists():
community_parents.append(Path(QMK_USERSPACE) / "layouts")
for community_parent in community_parents:
diff --git a/modules/qmk/hello_world/qmk_module.json b/modules/qmk/hello_world/qmk_module.json
index fd855a6e23..bbd00f3fcc 100644
--- a/modules/qmk/hello_world/qmk_module.json
+++ b/modules/qmk/hello_world/qmk_module.json
@@ -1,6 +1,7 @@
{
"module_name": "Hello World",
"maintainer": "QMK Maintainers",
+ "license": "GPL-2.0-or-later",
"features": {
"console": true,
"deferred_exec": true
diff --git a/modules/qmk/super_alt_tab/qmk_module.json b/modules/qmk/super_alt_tab/qmk_module.json
index 002f7fb69e..142613a23e 100644
--- a/modules/qmk/super_alt_tab/qmk_module.json
+++ b/modules/qmk/super_alt_tab/qmk_module.json
@@ -1,6 +1,7 @@
{
"module_name": "Super Alt Tab",
"maintainer": "QMK Maintainers",
+ "license": "GPL-2.0-or-later",
"keycodes": [
{
"key": "COMMUNITY_MODULE_SUPER_ALT_TAB",
diff --git a/platforms/avr/drivers/i2c_master.c b/platforms/avr/drivers/i2c_master.c
index 64083d862a..9136f4a7b9 100644
--- a/platforms/avr/drivers/i2c_master.c
+++ b/platforms/avr/drivers/i2c_master.c
@@ -315,4 +315,4 @@ __attribute__((weak)) i2c_status_t i2c_ping_address(uint8_t address, uint16_t ti
i2c_status_t status = i2c_start(address, timeout);
i2c_stop();
return status;
-} \ No newline at end of file
+}
diff --git a/platforms/chibios/boards/BONSAI_C4/configs/board.h b/platforms/chibios/boards/BONSAI_C4/configs/board.h
index 372b9bb8bc..81c80b2773 100644
--- a/platforms/chibios/boards/BONSAI_C4/configs/board.h
+++ b/platforms/chibios/boards/BONSAI_C4/configs/board.h
@@ -17,4 +17,4 @@
#include_next <board.h>
-#undef STM32_HSE_BYPASS \ No newline at end of file
+#undef STM32_HSE_BYPASS
diff --git a/platforms/chibios/boards/BONSAI_C4/configs/config.h b/platforms/chibios/boards/BONSAI_C4/configs/config.h
index e933cd6fd1..e0e95eda25 100644
--- a/platforms/chibios/boards/BONSAI_C4/configs/config.h
+++ b/platforms/chibios/boards/BONSAI_C4/configs/config.h
@@ -87,4 +87,4 @@
#ifndef USB_VBUS_PIN
# define USB_VBUS_PIN PAL_LINE(GPIOA, 9)
-#endif \ No newline at end of file
+#endif
diff --git a/platforms/chibios/boards/BONSAI_C4/configs/halconf.h b/platforms/chibios/boards/BONSAI_C4/configs/halconf.h
index 6bab6fbcff..55bafe5cfa 100644
--- a/platforms/chibios/boards/BONSAI_C4/configs/halconf.h
+++ b/platforms/chibios/boards/BONSAI_C4/configs/halconf.h
@@ -46,4 +46,4 @@
# define SPI_USE_WAIT TRUE
#endif
-#include_next <halconf.h> \ No newline at end of file
+#include_next <halconf.h>
diff --git a/platforms/chibios/boards/GENERIC_STM32_F405XG/board/board.mk b/platforms/chibios/boards/GENERIC_STM32_F405XG/board/board.mk
index 6c837bb8ee..00cc9b20b2 100644
--- a/platforms/chibios/boards/GENERIC_STM32_F405XG/board/board.mk
+++ b/platforms/chibios/boards/GENERIC_STM32_F405XG/board/board.mk
@@ -6,4 +6,4 @@ BOARDINC = $(CHIBIOS)/os/hal/boards/ST_STM32F4_DISCOVERY
# Shared variables
ALLCSRC += $(BOARDSRC)
-ALLINC += $(BOARDINC) \ No newline at end of file
+ALLINC += $(BOARDINC)
diff --git a/platforms/chibios/boards/GENERIC_STM32_F407XE/board/board.mk b/platforms/chibios/boards/GENERIC_STM32_F407XE/board/board.mk
index 6c837bb8ee..00cc9b20b2 100644
--- a/platforms/chibios/boards/GENERIC_STM32_F407XE/board/board.mk
+++ b/platforms/chibios/boards/GENERIC_STM32_F407XE/board/board.mk
@@ -6,4 +6,4 @@ BOARDINC = $(CHIBIOS)/os/hal/boards/ST_STM32F4_DISCOVERY
# Shared variables
ALLCSRC += $(BOARDSRC)
-ALLINC += $(BOARDINC) \ No newline at end of file
+ALLINC += $(BOARDINC)
diff --git a/platforms/chibios/boards/GENERIC_STM32_F407XE/configs/board.h b/platforms/chibios/boards/GENERIC_STM32_F407XE/configs/board.h
index a0d53d86e7..c2f25db810 100644
--- a/platforms/chibios/boards/GENERIC_STM32_F407XE/configs/board.h
+++ b/platforms/chibios/boards/GENERIC_STM32_F407XE/configs/board.h
@@ -21,4 +21,4 @@
#include_next <board.h>
-#undef STM32_HSE_BYPASS \ No newline at end of file
+#undef STM32_HSE_BYPASS
diff --git a/platforms/chibios/boards/GENERIC_STM32_G474XE/configs/config.h b/platforms/chibios/boards/GENERIC_STM32_G474XE/configs/config.h
index eb74d68e85..da0a634bb5 100644
--- a/platforms/chibios/boards/GENERIC_STM32_G474XE/configs/config.h
+++ b/platforms/chibios/boards/GENERIC_STM32_G474XE/configs/config.h
@@ -27,4 +27,4 @@
#if 0
#define STM32_BOOTLOADER_DUAL_BANK TRUE
#define STM32_BOOTLOADER_DUAL_BANK_GPIO B7
-#endif \ No newline at end of file
+#endif
diff --git a/platforms/chibios/boards/GENERIC_WB32_F3G71XX/configs/chconf.h b/platforms/chibios/boards/GENERIC_WB32_F3G71XX/configs/chconf.h
index e4afddb6a5..fa0b6f11d0 100644
--- a/platforms/chibios/boards/GENERIC_WB32_F3G71XX/configs/chconf.h
+++ b/platforms/chibios/boards/GENERIC_WB32_F3G71XX/configs/chconf.h
@@ -23,4 +23,4 @@
#define CH_CFG_ST_TIMEDELTA 0
-#include_next <chconf.h> \ No newline at end of file
+#include_next <chconf.h>
diff --git a/platforms/chibios/boards/GENERIC_WB32_FQ95XX/configs/chconf.h b/platforms/chibios/boards/GENERIC_WB32_FQ95XX/configs/chconf.h
index e4afddb6a5..fa0b6f11d0 100644
--- a/platforms/chibios/boards/GENERIC_WB32_FQ95XX/configs/chconf.h
+++ b/platforms/chibios/boards/GENERIC_WB32_FQ95XX/configs/chconf.h
@@ -23,4 +23,4 @@
#define CH_CFG_ST_TIMEDELTA 0
-#include_next <chconf.h> \ No newline at end of file
+#include_next <chconf.h>
diff --git a/platforms/chibios/boards/SIPEED_LONGAN_NANO/configs/chconf.h b/platforms/chibios/boards/SIPEED_LONGAN_NANO/configs/chconf.h
index 6e5adb0fe1..ca0348e4e0 100644
--- a/platforms/chibios/boards/SIPEED_LONGAN_NANO/configs/chconf.h
+++ b/platforms/chibios/boards/SIPEED_LONGAN_NANO/configs/chconf.h
@@ -20,4 +20,4 @@
struct _reent;
#endif
-#include_next <chconf.h> \ No newline at end of file
+#include_next <chconf.h>
diff --git a/platforms/chibios/bootloaders/stm32duino.c b/platforms/chibios/bootloaders/stm32duino.c
index e2db7fa16c..cc3f6be2df 100644
--- a/platforms/chibios/bootloaders/stm32duino.c
+++ b/platforms/chibios/bootloaders/stm32duino.c
@@ -25,4 +25,4 @@ __attribute__((weak)) void bootloader_jump(void) {
__attribute__((weak)) void mcu_reset(void) {
BKP->DR10 = RTC_BOOTLOADER_JUST_UPLOADED;
NVIC_SystemReset();
-} \ No newline at end of file
+}
diff --git a/platforms/chibios/converters/promicro_to_bonsai_c4/_pin_defs.h b/platforms/chibios/converters/promicro_to_bonsai_c4/_pin_defs.h
index 7e6b8ddaf2..deb0628ef8 100644
--- a/platforms/chibios/converters/promicro_to_bonsai_c4/_pin_defs.h
+++ b/platforms/chibios/converters/promicro_to_bonsai_c4/_pin_defs.h
@@ -37,4 +37,4 @@
// If this is undesirable, either B0 or B5 can be redefined by
// using #undef and #define to change its assignment
#define B0 PAL_LINE(GPIOB, 2)
-#define D5 PAL_LINE(GPIOB, 2) \ No newline at end of file
+#define D5 PAL_LINE(GPIOB, 2)
diff --git a/platforms/chibios/converters/promicro_to_bonsai_c4/post_converter.mk b/platforms/chibios/converters/promicro_to_bonsai_c4/post_converter.mk
index 5f49b17f8a..beefb9de23 100644
--- a/platforms/chibios/converters/promicro_to_bonsai_c4/post_converter.mk
+++ b/platforms/chibios/converters/promicro_to_bonsai_c4/post_converter.mk
@@ -2,4 +2,4 @@ BACKLIGHT_DRIVER ?= pwm
WS2812_DRIVER ?= pwm
SERIAL_DRIVER ?= usart
FLASH_DRIVER ?= spi
-EEPROM_DRIVER ?= spi \ No newline at end of file
+EEPROM_DRIVER ?= spi
diff --git a/platforms/chibios/drivers/i2c_master.c b/platforms/chibios/drivers/i2c_master.c
index 1d7fe27633..20850859b5 100644
--- a/platforms/chibios/drivers/i2c_master.c
+++ b/platforms/chibios/drivers/i2c_master.c
@@ -206,4 +206,4 @@ __attribute__((weak)) i2c_status_t i2c_ping_address(uint8_t address, uint16_t ti
// This approach may produce false negative results for I2C devices that do not respond to a register 0 read request.
uint8_t data = 0;
return i2c_read_register(address, 0, &data, sizeof(data), timeout);
-} \ No newline at end of file
+}
diff --git a/platforms/chibios/drivers/usbpd_stm32g4.c b/platforms/chibios/drivers/usbpd_stm32g4.c
index 21b8f6db95..7603b5627b 100644
--- a/platforms/chibios/drivers/usbpd_stm32g4.c
+++ b/platforms/chibios/drivers/usbpd_stm32g4.c
@@ -76,4 +76,4 @@ __attribute__((weak)) usbpd_allowance_t usbpd_get_allowance(void) {
}
return USBPD_500MA;
-} \ No newline at end of file
+}
diff --git a/platforms/chibios/errno.h b/platforms/chibios/errno.h
new file mode 100644
index 0000000000..a411ed9821
--- /dev/null
+++ b/platforms/chibios/errno.h
@@ -0,0 +1,13 @@
+// Copyright 2025 Nick Brassel (@tzarc)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+#include_next <errno.h>
+
+// Newer versions of picolibc don't seem to provide `__errno_r(r)` in the header file, but is used by ChibiOS.
+#ifndef __errno_r
+# ifdef __REENT_ERRNO
+# define __errno_r(r) _REENT_ERRNO(r)
+# else
+# define __errno_r(r) (errno)
+# endif
+#endif
diff --git a/platforms/chibios/platform.c b/platforms/chibios/platform.c
index d4a229f278..e559f178cd 100644
--- a/platforms/chibios/platform.c
+++ b/platforms/chibios/platform.c
@@ -19,4 +19,4 @@
void platform_setup(void) {
halInit();
chSysInit();
-} \ No newline at end of file
+}
diff --git a/platforms/test/platform.c b/platforms/test/platform.c
index 8ddceeda8f..3e35b4fe4c 100644
--- a/platforms/test/platform.c
+++ b/platforms/test/platform.c
@@ -18,4 +18,4 @@
void platform_setup(void) {
// do nothing
-} \ No newline at end of file
+}
diff --git a/quantum/action.c b/quantum/action.c
index be85192d25..dd82c9ec99 100644
--- a/quantum/action.c
+++ b/quantum/action.c
@@ -281,6 +281,9 @@ void process_record(keyrecord_t *record) {
if (IS_NOEVENT(record->event)) {
return;
}
+#ifdef FLOW_TAP_TERM
+ flow_tap_update_last_event(record);
+#endif // FLOW_TAP_TERM
if (!process_record_quantum(record)) {
#ifndef NO_ACTION_ONESHOT
@@ -1183,6 +1186,23 @@ bool is_tap_action(action_t action) {
return false;
}
+uint16_t get_tap_keycode(uint16_t keycode) {
+ switch (keycode) {
+ case QK_MOD_TAP ... QK_MOD_TAP_MAX:
+ return QK_MOD_TAP_GET_TAP_KEYCODE(keycode);
+ case QK_LAYER_TAP ... QK_LAYER_TAP_MAX:
+ return QK_LAYER_TAP_GET_TAP_KEYCODE(keycode);
+ case QK_SWAP_HANDS ... QK_SWAP_HANDS_MAX:
+ // IS_SWAP_HANDS_KEYCODE() tests for the special action keycodes
+ // like SH_TOGG, SH_TT, ..., which overlap the SH_T(kc) range.
+ if (!IS_SWAP_HANDS_KEYCODE(keycode)) {
+ return QK_SWAP_HANDS_GET_TAP_KEYCODE(keycode);
+ }
+ break;
+ }
+ return keycode;
+}
+
/** \brief Debug print (FIXME: Needs better description)
*
* FIXME: Needs documentation.
diff --git a/quantum/action.h b/quantum/action.h
index 7596688f31..7616486c6d 100644
--- a/quantum/action.h
+++ b/quantum/action.h
@@ -128,6 +128,12 @@ void layer_switch(uint8_t new_layer);
bool is_tap_record(keyrecord_t *record);
bool is_tap_action(action_t action);
+/**
+ * Given an MT or LT keycode, returns the tap keycode. Otherwise returns the
+ * original keycode unchanged.
+ */
+uint16_t get_tap_keycode(uint16_t keycode);
+
#ifndef NO_ACTION_TAPPING
void process_record_tap_hint(keyrecord_t *record);
#endif
diff --git a/quantum/action_tapping.c b/quantum/action_tapping.c
index e42a98554d..3e391d1526 100644
--- a/quantum/action_tapping.c
+++ b/quantum/action_tapping.c
@@ -4,7 +4,9 @@
#include "action.h"
#include "action_layer.h"
#include "action_tapping.h"
+#include "action_util.h"
#include "keycode.h"
+#include "quantum_keycodes.h"
#include "timer.h"
#ifndef NO_ACTION_TAPPING
@@ -49,9 +51,7 @@ __attribute__((weak)) bool get_permissive_hold(uint16_t keycode, keyrecord_t *re
}
# endif
-# if defined(CHORDAL_HOLD)
-extern const char chordal_hold_layout[MATRIX_ROWS][MATRIX_COLS] PROGMEM;
-
+# if defined(CHORDAL_HOLD) || defined(FLOW_TAP_TERM)
# define REGISTERED_TAPS_SIZE 8
// Array of tap-hold keys that have been settled as tapped but not yet released.
static keypos_t registered_taps[REGISTERED_TAPS_SIZE] = {};
@@ -66,6 +66,14 @@ static void registered_taps_del_index(uint8_t i);
/** Logs the registered_taps array for debugging. */
static void debug_registered_taps(void);
+static bool is_mt_or_lt(uint16_t keycode) {
+ return IS_QK_MOD_TAP(keycode) || IS_QK_LAYER_TAP(keycode);
+}
+# endif // defined(CHORDAL_HOLD) || defined(FLOW_TAP_TERM)
+
+# if defined(CHORDAL_HOLD)
+extern const char chordal_hold_layout[MATRIX_ROWS][MATRIX_COLS] PROGMEM;
+
/** \brief Finds which queued events should be held according to Chordal Hold.
*
* In a situation with multiple unsettled tap-hold key presses, scan the queue
@@ -82,10 +90,6 @@ static void waiting_buffer_chordal_hold_taps_until(keypos_t key);
/** \brief Processes and pops buffered events until the first tap-hold event. */
static void waiting_buffer_process_regular(void);
-
-static bool is_mt_or_lt(uint16_t keycode) {
- return IS_QK_MOD_TAP(keycode) || IS_QK_LAYER_TAP(keycode);
-}
# endif // CHORDAL_HOLD
# ifdef HOLD_ON_OTHER_KEY_PRESS_PER_KEY
@@ -98,6 +102,13 @@ __attribute__((weak)) bool get_hold_on_other_key_press(uint16_t keycode, keyreco
# include "process_auto_shift.h"
# endif
+# if defined(FLOW_TAP_TERM)
+static uint32_t flow_tap_prev_time = 0;
+static uint16_t flow_tap_prev_keycode = KC_NO;
+
+static bool flow_tap_key_if_within_term(keyrecord_t *record);
+# endif // defined(FLOW_TAP_TERM)
+
static keyrecord_t tapping_key = {};
static keyrecord_t waiting_buffer[WAITING_BUFFER_SIZE] = {};
static uint8_t waiting_buffer_head = 0;
@@ -205,7 +216,7 @@ void action_tapping_process(keyrecord_t record) {
bool process_tapping(keyrecord_t *keyp) {
const keyevent_t event = keyp->event;
-# if defined(CHORDAL_HOLD)
+# if defined(CHORDAL_HOLD) || defined(FLOW_TAP_TERM)
if (!event.pressed) {
const int8_t i = registered_tap_find(event.key);
if (i != -1) {
@@ -217,7 +228,7 @@ bool process_tapping(keyrecord_t *keyp) {
debug_registered_taps();
}
}
-# endif // CHORDAL_HOLD
+# endif // defined(CHORDAL_HOLD) || defined(FLOW_TAP_TERM)
// state machine is in the "reset" state, no tapping key is to be
// processed
@@ -227,6 +238,13 @@ bool process_tapping(keyrecord_t *keyp) {
} else if (event.pressed && is_tap_record(keyp)) {
// the currently pressed key is a tapping key, therefore transition
// into the "pressed" tapping key state
+
+# if defined(FLOW_TAP_TERM)
+ if (flow_tap_key_if_within_term(keyp)) {
+ return true;
+ }
+# endif // defined(FLOW_TAP_TERM)
+
ac_dprintf("Tapping: Start(Press tap key).\n");
tapping_key = *keyp;
process_record_tap_hint(&tapping_key);
@@ -538,6 +556,13 @@ bool process_tapping(keyrecord_t *keyp) {
return true;
} else if (is_tap_record(keyp)) {
// Sequential tap can be interfered with other tap key.
+# if defined(FLOW_TAP_TERM)
+ if (flow_tap_key_if_within_term(keyp)) {
+ tapping_key = (keyrecord_t){0};
+ debug_tapping_key();
+ return true;
+ }
+# endif // defined(FLOW_TAP_TERM)
ac_dprintf("Tapping: Start with interfering other tap.\n");
tapping_key = *keyp;
waiting_buffer_scan_tap();
@@ -655,28 +680,7 @@ void waiting_buffer_scan_tap(void) {
}
}
-# ifdef CHORDAL_HOLD
-__attribute__((weak)) bool get_chordal_hold(uint16_t tap_hold_keycode, keyrecord_t *tap_hold_record, uint16_t other_keycode, keyrecord_t *other_record) {
- return get_chordal_hold_default(tap_hold_record, other_record);
-}
-
-bool get_chordal_hold_default(keyrecord_t *tap_hold_record, keyrecord_t *other_record) {
- if (tap_hold_record->event.type != KEY_EVENT || other_record->event.type != KEY_EVENT) {
- return true; // Return true on combos or other non-key events.
- }
-
- char tap_hold_hand = chordal_hold_handedness(tap_hold_record->event.key);
- if (tap_hold_hand == '*') {
- return true;
- }
- char other_hand = chordal_hold_handedness(other_record->event.key);
- return other_hand == '*' || tap_hold_hand != other_hand;
-}
-
-__attribute__((weak)) char chordal_hold_handedness(keypos_t key) {
- return (char)pgm_read_byte(&chordal_hold_layout[key.row][key.col]);
-}
-
+# if defined(CHORDAL_HOLD) || defined(FLOW_TAP_TERM)
static void registered_taps_add(keypos_t key) {
if (num_registered_taps >= REGISTERED_TAPS_SIZE) {
ac_dprintf("TAPS OVERFLOW: CLEAR ALL STATES\n");
@@ -714,6 +718,30 @@ static void debug_registered_taps(void) {
ac_dprintf("}\n");
}
+# endif // defined(CHORDAL_HOLD) || defined(FLOW_TAP_TERM)
+
+# ifdef CHORDAL_HOLD
+__attribute__((weak)) bool get_chordal_hold(uint16_t tap_hold_keycode, keyrecord_t *tap_hold_record, uint16_t other_keycode, keyrecord_t *other_record) {
+ return get_chordal_hold_default(tap_hold_record, other_record);
+}
+
+bool get_chordal_hold_default(keyrecord_t *tap_hold_record, keyrecord_t *other_record) {
+ if (tap_hold_record->event.type != KEY_EVENT || other_record->event.type != KEY_EVENT) {
+ return true; // Return true on combos or other non-key events.
+ }
+
+ char tap_hold_hand = chordal_hold_handedness(tap_hold_record->event.key);
+ if (tap_hold_hand == '*') {
+ return true;
+ }
+ char other_hand = chordal_hold_handedness(other_record->event.key);
+ return other_hand == '*' || tap_hold_hand != other_hand;
+}
+
+__attribute__((weak)) char chordal_hold_handedness(keypos_t key) {
+ return (char)pgm_read_byte(&chordal_hold_layout[key.row][key.col]);
+}
+
static uint8_t waiting_buffer_find_chordal_hold_tap(void) {
keyrecord_t *prev = &tapping_key;
uint16_t prev_keycode = get_record_keycode(&tapping_key, false);
@@ -761,6 +789,95 @@ static void waiting_buffer_process_regular(void) {
}
# endif // CHORDAL_HOLD
+# ifdef FLOW_TAP_TERM
+void flow_tap_update_last_event(keyrecord_t *record) {
+ // Don't update while a tap-hold key is unsettled.
+ if (waiting_buffer_tail != waiting_buffer_head || (tapping_key.event.pressed && tapping_key.tap.count == 0)) {
+ return;
+ }
+ const uint16_t keycode = get_record_keycode(record, false);
+ // Ignore releases of modifiers and held layer switches.
+ if (!record->event.pressed) {
+ switch (keycode) {
+ case MODIFIER_KEYCODE_RANGE:
+ case QK_MOMENTARY ... QK_MOMENTARY_MAX:
+ case QK_LAYER_TAP_TOGGLE ... QK_LAYER_TAP_TOGGLE_MAX:
+# ifndef NO_ACTION_ONESHOT // Ignore one-shot keys.
+ case QK_ONE_SHOT_MOD ... QK_ONE_SHOT_MOD_MAX:
+ case QK_ONE_SHOT_LAYER ... QK_ONE_SHOT_LAYER_MAX:
+# endif // NO_ACTION_ONESHOT
+# ifdef TRI_LAYER_ENABLE // Ignore Tri Layer keys.
+ case QK_TRI_LAYER_LOWER:
+ case QK_TRI_LAYER_UPPER:
+# endif // TRI_LAYER_ENABLE
+ return;
+ case QK_MODS ... QK_MODS_MAX:
+ if (QK_MODS_GET_BASIC_KEYCODE(keycode) == KC_NO) {
+ return;
+ }
+ break;
+ case QK_MOD_TAP ... QK_MOD_TAP_MAX:
+ case QK_LAYER_TAP ... QK_LAYER_TAP_MAX:
+ if (record->tap.count == 0) {
+ return;
+ }
+ break;
+ }
+ }
+
+ flow_tap_prev_keycode = keycode;
+ flow_tap_prev_time = timer_read32();
+}
+
+static bool flow_tap_key_if_within_term(keyrecord_t *record) {
+ const uint16_t keycode = get_record_keycode(record, false);
+ if (is_mt_or_lt(keycode)) {
+ const uint32_t idle_time = timer_elapsed32(flow_tap_prev_time);
+ uint16_t term = get_flow_tap_term(keycode, record, flow_tap_prev_keycode);
+ if (term > 500) {
+ term = 500;
+ }
+ if (idle_time < 500 && idle_time < term) {
+ debug_event(record->event);
+ ac_dprintf(" within flow tap term (%u < %u) considered a tap\n", (int16_t)idle_time, term);
+ record->tap.count = 1;
+ registered_taps_add(record->event.key);
+ debug_registered_taps();
+ process_record(record);
+ return true;
+ }
+ }
+ return false;
+}
+
+// By default, enable Flow Tap for the keys in the main alphas area and Space.
+// This should work reasonably even if the layout is remapped on the host to an
+// alt layout or international layout (e.g. Dvorak or AZERTY), where these same
+// key positions are mostly used for typing letters.
+__attribute__((weak)) bool is_flow_tap_key(uint16_t keycode) {
+ if ((get_mods() & (MOD_MASK_CG | MOD_BIT_LALT)) != 0) {
+ return false; // Disable Flow Tap on hotkeys.
+ }
+ switch (get_tap_keycode(keycode)) {
+ case KC_SPC:
+ case KC_A ... KC_Z:
+ case KC_DOT:
+ case KC_COMM:
+ case KC_SCLN:
+ case KC_SLSH:
+ return true;
+ }
+ return false;
+}
+
+__attribute__((weak)) uint16_t get_flow_tap_term(uint16_t keycode, keyrecord_t *record, uint16_t prev_keycode) {
+ if (is_flow_tap_key(keycode) && is_flow_tap_key(prev_keycode)) {
+ return FLOW_TAP_TERM;
+ }
+ return 0;
+}
+# endif // FLOW_TAP_TERM
+
/** \brief Logs tapping key if ACTION_DEBUG is enabled. */
static void debug_tapping_key(void) {
ac_dprintf("TAPPING_KEY=");
diff --git a/quantum/action_tapping.h b/quantum/action_tapping.h
index c3c7b999ec..0cf4aa1200 100644
--- a/quantum/action_tapping.h
+++ b/quantum/action_tapping.h
@@ -111,6 +111,66 @@ char chordal_hold_handedness(keypos_t key);
extern const char chordal_hold_layout[MATRIX_ROWS][MATRIX_COLS] PROGMEM;
#endif
+#ifdef FLOW_TAP_TERM
+/**
+ * Callback to specify the keys where Flow Tap is enabled.
+ *
+ * Flow Tap is constrained to certain keys by the following rule: this callback
+ * is called for both the tap-hold key *and* the key press immediately preceding
+ * it. If the callback returns true for both keycodes, Flow Tap is enabled.
+ *
+ * The default implementation of this callback corresponds to
+ *
+ * bool is_flow_tap_key(uint16_t keycode) {
+ * switch (get_tap_keycode(keycode)) {
+ * case KC_SPC:
+ * case KC_A ... KC_Z:
+ * case KC_DOT:
+ * case KC_COMM:
+ * case KC_SCLN:
+ * case KC_SLSH:
+ * return true;
+ * }
+ * return false;
+ * }
+ *
+ * @param keycode Keycode of the key.
+ * @return Whether to enable Flow Tap for this key.
+ */
+bool is_flow_tap_key(uint16_t keycode);
+
+/**
+ * Callback to customize Flow Tap filtering.
+ *
+ * Flow Tap acts only when key events are closer together than this time.
+ *
+ * Return a time of 0 to disable filtering. In this way, Flow Tap may be
+ * disabled for certain tap-hold keys, or when following certain previous keys.
+ *
+ * The default implementation of this callback is
+ *
+ * uint16_t get_flow_tap_term(uint16_t keycode, keyrecord_t* record,
+ * uint16_t prev_keycode) {
+ * if (is_flow_tap_key(keycode) && is_flow_tap_key(prev_keycode)) {
+ * return g_flow_tap_term;
+ * }
+ * return 0;
+ * }
+ *
+ * NOTE: If both `is_flow_tap_key()` and `get_flow_tap_term()` are defined, then
+ * `get_flow_tap_term()` takes precedence.
+ *
+ * @param keycode Keycode of the tap-hold key.
+ * @param record keyrecord_t of the tap-hold event.
+ * @param prev_keycode Keycode of the previously pressed key.
+ * @return Time in milliseconds.
+ */
+uint16_t get_flow_tap_term(uint16_t keycode, keyrecord_t *record, uint16_t prev_keycode);
+
+/** Updates the Flow Tap last key and timer. */
+void flow_tap_update_last_event(keyrecord_t *record);
+#endif // FLOW_TAP_TERM
+
#ifdef DYNAMIC_TAPPING_TERM_ENABLE
extern uint16_t g_tapping_term;
#endif
diff --git a/quantum/action_util.c b/quantum/action_util.c
index c0dc4f3822..9fe17f2124 100644
--- a/quantum/action_util.c
+++ b/quantum/action_util.c
@@ -220,7 +220,7 @@ bool is_oneshot_layer_active(void) {
void oneshot_set(bool active) {
if (keymap_config.oneshot_enable != active) {
keymap_config.oneshot_enable = active;
- eeconfig_update_keymap(keymap_config.raw);
+ eeconfig_update_keymap(&keymap_config);
clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED);
dprintf("Oneshot: active: %d\n", active);
}
diff --git a/quantum/audio/audio.c b/quantum/audio/audio.c
index 2cc3c2d661..4e223f0c9a 100644
--- a/quantum/audio/audio.c
+++ b/quantum/audio/audio.c
@@ -149,14 +149,14 @@ void audio_driver_start(void) {
}
void eeconfig_update_audio_current(void) {
- eeconfig_update_audio(audio_config.raw);
+ eeconfig_update_audio(&audio_config);
}
void eeconfig_update_audio_default(void) {
audio_config.valid = true;
audio_config.enable = AUDIO_DEFAULT_ON;
audio_config.clicky_enable = AUDIO_DEFAULT_CLICKY_ON;
- eeconfig_update_audio(audio_config.raw);
+ eeconfig_update_audio(&audio_config);
}
void audio_init(void) {
@@ -164,7 +164,7 @@ void audio_init(void) {
return;
}
- audio_config.raw = eeconfig_read_audio();
+ eeconfig_read_audio(&audio_config);
if (!audio_config.valid) {
dprintf("audio_init audio_config.valid = 0. Write default values to EEPROM.\n");
eeconfig_update_audio_default();
@@ -196,7 +196,7 @@ void audio_toggle(void) {
stop_all_notes();
}
audio_config.enable ^= 1;
- eeconfig_update_audio(audio_config.raw);
+ eeconfig_update_audio(&audio_config);
if (audio_config.enable) {
audio_on_user();
} else {
@@ -206,7 +206,7 @@ void audio_toggle(void) {
void audio_on(void) {
audio_config.enable = 1;
- eeconfig_update_audio(audio_config.raw);
+ eeconfig_update_audio(&audio_config);
audio_on_user();
PLAY_SONG(audio_on_song);
}
@@ -217,7 +217,7 @@ void audio_off(void) {
wait_ms(100);
audio_stop_all();
audio_config.enable = 0;
- eeconfig_update_audio(audio_config.raw);
+ eeconfig_update_audio(&audio_config);
}
bool audio_is_on(void) {
diff --git a/quantum/audio/audio.h b/quantum/audio/audio.h
index 054331d6f3..93dc6f62b1 100644
--- a/quantum/audio/audio.h
+++ b/quantum/audio/audio.h
@@ -28,7 +28,7 @@
# include "audio_dac.h"
#endif
-typedef union {
+typedef union audio_config_t {
uint8_t raw;
struct {
bool enable : 1;
diff --git a/quantum/backlight/backlight.c b/quantum/backlight/backlight.c
index eb64dd71e8..a7d2a45a51 100644
--- a/quantum/backlight/backlight.c
+++ b/quantum/backlight/backlight.c
@@ -16,7 +16,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "backlight.h"
-#include "eeprom.h"
#include "eeconfig.h"
#include "debug.h"
@@ -55,7 +54,7 @@ static void backlight_check_config(void) {
* FIXME: needs doc
*/
void backlight_init(void) {
- backlight_config.raw = eeconfig_read_backlight();
+ eeconfig_read_backlight(&backlight_config);
if (!backlight_config.valid) {
dprintf("backlight_init backlight_config.valid = 0. Write default values to EEPROM.\n");
eeconfig_update_backlight_default();
@@ -74,7 +73,7 @@ void backlight_increase(void) {
backlight_config.level++;
}
backlight_config.enable = 1;
- eeconfig_update_backlight(backlight_config.raw);
+ eeconfig_update_backlight(&backlight_config);
dprintf("backlight increase: %u\n", backlight_config.level);
backlight_set(backlight_config.level);
}
@@ -87,7 +86,7 @@ void backlight_decrease(void) {
if (backlight_config.level > 0) {
backlight_config.level--;
backlight_config.enable = !!backlight_config.level;
- eeconfig_update_backlight(backlight_config.raw);
+ eeconfig_update_backlight(&backlight_config);
}
dprintf("backlight decrease: %u\n", backlight_config.level);
backlight_set(backlight_config.level);
@@ -116,7 +115,7 @@ void backlight_enable(void) {
backlight_config.enable = true;
if (backlight_config.raw == 1) // enabled but level == 0
backlight_config.level = 1;
- eeconfig_update_backlight(backlight_config.raw);
+ eeconfig_update_backlight(&backlight_config);
dprintf("backlight enable\n");
backlight_set(backlight_config.level);
}
@@ -129,7 +128,7 @@ void backlight_disable(void) {
if (!backlight_config.enable) return; // do nothing if backlight is already off
backlight_config.enable = false;
- eeconfig_update_backlight(backlight_config.raw);
+ eeconfig_update_backlight(&backlight_config);
dprintf("backlight disable\n");
backlight_set(0);
}
@@ -152,7 +151,7 @@ void backlight_step(void) {
backlight_config.level = 0;
}
backlight_config.enable = !!backlight_config.level;
- eeconfig_update_backlight(backlight_config.raw);
+ eeconfig_update_backlight(&backlight_config);
dprintf("backlight step: %u\n", backlight_config.level);
backlight_set(backlight_config.level);
}
@@ -173,19 +172,11 @@ void backlight_level_noeeprom(uint8_t level) {
*/
void backlight_level(uint8_t level) {
backlight_level_noeeprom(level);
- eeconfig_update_backlight(backlight_config.raw);
-}
-
-uint8_t eeconfig_read_backlight(void) {
- return eeprom_read_byte(EECONFIG_BACKLIGHT);
-}
-
-void eeconfig_update_backlight(uint8_t val) {
- eeprom_update_byte(EECONFIG_BACKLIGHT, val);
+ eeconfig_update_backlight(&backlight_config);
}
void eeconfig_update_backlight_current(void) {
- eeconfig_update_backlight(backlight_config.raw);
+ eeconfig_update_backlight(&backlight_config);
}
void eeconfig_update_backlight_default(void) {
@@ -193,7 +184,7 @@ void eeconfig_update_backlight_default(void) {
backlight_config.enable = BACKLIGHT_DEFAULT_ON;
backlight_config.breathing = BACKLIGHT_DEFAULT_BREATHING;
backlight_config.level = BACKLIGHT_DEFAULT_LEVEL;
- eeconfig_update_backlight(backlight_config.raw);
+ eeconfig_update_backlight(&backlight_config);
}
/** \brief Get backlight level
@@ -226,7 +217,7 @@ void backlight_enable_breathing(void) {
if (backlight_config.breathing) return; // do nothing if breathing is already on
backlight_config.breathing = true;
- eeconfig_update_backlight(backlight_config.raw);
+ eeconfig_update_backlight(&backlight_config);
dprintf("backlight breathing enable\n");
breathing_enable();
}
@@ -239,7 +230,7 @@ void backlight_disable_breathing(void) {
if (!backlight_config.breathing) return; // do nothing if breathing is already off
backlight_config.breathing = false;
- eeconfig_update_backlight(backlight_config.raw);
+ eeconfig_update_backlight(&backlight_config);
dprintf("backlight breathing disable\n");
breathing_disable();
}
diff --git a/quantum/backlight/backlight.h b/quantum/backlight/backlight.h
index c34fb5858d..561c7f8a94 100644
--- a/quantum/backlight/backlight.h
+++ b/quantum/backlight/backlight.h
@@ -34,7 +34,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
# define BREATHING_PERIOD 6
#endif
-typedef union {
+typedef union backlight_config_t {
uint8_t raw;
struct {
bool enable : 1;
@@ -58,10 +58,8 @@ void backlight_level_noeeprom(uint8_t level);
void backlight_level(uint8_t level);
uint8_t get_backlight_level(void);
-uint8_t eeconfig_read_backlight(void);
-void eeconfig_update_backlight(uint8_t val);
-void eeconfig_update_backlight_current(void);
-void eeconfig_update_backlight_default(void);
+void eeconfig_update_backlight_current(void);
+void eeconfig_update_backlight_default(void);
// implementation specific
void backlight_init_ports(void);
diff --git a/quantum/command.c b/quantum/command.c
index 024d96917d..96b637f842 100644
--- a/quantum/command.c
+++ b/quantum/command.c
@@ -246,7 +246,7 @@ static void print_eeconfig(void) {
xprintf("eeconfig:\ndefault_layer: %u\n", eeconfig_read_default_layer());
debug_config_t dc;
- dc.raw = eeconfig_read_debug();
+ eeconfig_read_debug(&dc);
xprintf(/* clang-format off */
"debug_config.raw: %02X\n"
@@ -263,7 +263,7 @@ static void print_eeconfig(void) {
); /* clang-format on */
keymap_config_t kc;
- kc.raw = eeconfig_read_keymap();
+ eeconfig_read_keymap(&kc);
xprintf(/* clang-format off */
"keymap_config.raw: %02X\n"
@@ -296,7 +296,7 @@ static void print_eeconfig(void) {
# ifdef BACKLIGHT_ENABLE
backlight_config_t bc;
- bc.raw = eeconfig_read_backlight();
+ eeconfig_read_backlight(&bc);
xprintf(/* clang-format off */
"backlight_config"
diff --git a/quantum/connection/connection.c b/quantum/connection/connection.c
new file mode 100644
index 0000000000..c7f3c4b424
--- /dev/null
+++ b/quantum/connection/connection.c
@@ -0,0 +1,147 @@
+// Copyright 2025 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+#include "connection.h"
+#include "eeconfig.h"
+#include "usb_util.h"
+#include "util.h"
+
+// ======== DEPRECATED DEFINES - DO NOT USE ========
+#ifdef OUTPUT_DEFAULT
+# undef CONNECTION_HOST_DEFAULT
+# define CONNECTION_HOST_DEFAULT OUTPUT_DEFAULT
+#endif
+
+__attribute__((weak)) void set_output_user(uint8_t output) {}
+// ========
+
+#ifdef BLUETOOTH_ENABLE
+# ifdef BLUETOOTH_BLUEFRUIT_LE
+# include "bluefruit_le.h"
+# define bluetooth_is_connected() bluefruit_le_is_connected()
+# else
+// TODO: drivers should check if BT is connected here
+# define bluetooth_is_connected() true
+# endif
+#endif
+
+#define CONNECTION_HOST_INVALID 0xFF
+
+#ifndef CONNECTION_HOST_DEFAULT
+# define CONNECTION_HOST_DEFAULT CONNECTION_HOST_AUTO
+#endif
+
+static const connection_host_t host_candidates[] = {
+ CONNECTION_HOST_AUTO,
+ CONNECTION_HOST_USB,
+#ifdef BLUETOOTH_ENABLE
+ CONNECTION_HOST_BLUETOOTH,
+#endif
+#if 0
+ CONNECTION_HOST_2P4GHZ,
+#endif
+};
+
+#define HOST_CANDIDATES_COUNT ARRAY_SIZE(host_candidates)
+
+static connection_config_t config = {.desired_host = CONNECTION_HOST_INVALID};
+
+void eeconfig_update_connection_default(void) {
+ config.desired_host = CONNECTION_HOST_DEFAULT;
+
+ eeconfig_update_connection(&config);
+}
+
+void connection_init(void) {
+ eeconfig_read_connection(&config);
+ if (config.desired_host == CONNECTION_HOST_INVALID) {
+ eeconfig_update_connection_default();
+ }
+}
+
+__attribute__((weak)) void connection_host_changed_user(connection_host_t host) {}
+__attribute__((weak)) void connection_host_changed_kb(connection_host_t host) {}
+
+static void handle_host_changed(void) {
+ connection_host_changed_user(config.desired_host);
+ connection_host_changed_kb(config.desired_host);
+
+ // TODO: Remove deprecated callback
+ set_output_user(config.desired_host);
+}
+
+void connection_set_host_noeeprom(connection_host_t host) {
+ if (config.desired_host == host) {
+ return;
+ }
+
+ config.desired_host = host;
+
+ handle_host_changed();
+}
+
+void connection_set_host(connection_host_t host) {
+ connection_set_host_noeeprom(host);
+
+ eeconfig_update_connection(&config);
+}
+
+void connection_next_host_noeeprom(void) {
+ uint8_t next = 0;
+ for (uint8_t i = 0; i < HOST_CANDIDATES_COUNT; i++) {
+ if (host_candidates[i] == config.desired_host) {
+ next = i == HOST_CANDIDATES_COUNT - 1 ? 0 : i + 1;
+ break;
+ }
+ }
+
+ connection_set_host_noeeprom(host_candidates[next]);
+}
+
+void connection_next_host(void) {
+ connection_next_host_noeeprom();
+
+ eeconfig_update_connection(&config);
+}
+
+void connection_prev_host_noeeprom(void) {
+ uint8_t next = 0;
+ for (uint8_t i = 0; i < HOST_CANDIDATES_COUNT; i++) {
+ if (host_candidates[i] == config.desired_host) {
+ next = i == 0 ? HOST_CANDIDATES_COUNT - 1 : i - 1;
+ break;
+ }
+ }
+
+ connection_set_host_noeeprom(host_candidates[next]);
+}
+
+void connection_prev_host(void) {
+ connection_prev_host_noeeprom();
+
+ eeconfig_update_connection(&config);
+}
+
+connection_host_t connection_get_host_raw(void) {
+ return config.desired_host;
+}
+
+connection_host_t connection_auto_detect_host(void) {
+ if (usb_connected_state()) {
+ return CONNECTION_HOST_USB;
+ }
+
+#ifdef BLUETOOTH_ENABLE
+ if (bluetooth_is_connected()) {
+ return CONNECTION_HOST_BLUETOOTH;
+ }
+#endif
+
+ return CONNECTION_HOST_NONE;
+}
+
+connection_host_t connection_get_host(void) {
+ if (config.desired_host == CONNECTION_HOST_AUTO) {
+ return connection_auto_detect_host();
+ }
+ return config.desired_host;
+}
diff --git a/quantum/connection/connection.h b/quantum/connection/connection.h
new file mode 100644
index 0000000000..e403141fae
--- /dev/null
+++ b/quantum/connection/connection.h
@@ -0,0 +1,110 @@
+// Copyright 2025 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#include <stdint.h>
+#include "util.h"
+
+/**
+ * \enum connection_host_t
+ *
+ * An enumeration of the possible hosts.
+ */
+typedef enum connection_host_t {
+ CONNECTION_HOST_AUTO,
+
+ CONNECTION_HOST_NONE,
+ CONNECTION_HOST_USB,
+ CONNECTION_HOST_BLUETOOTH,
+ CONNECTION_HOST_2P4GHZ
+} connection_host_t;
+
+/**
+ * \union connection_config_t
+ *
+ * Configuration structure for the connection subsystem.
+ */
+typedef union connection_config_t {
+ uint8_t raw;
+ connection_host_t desired_host : 8;
+} PACKED connection_config_t;
+
+_Static_assert(sizeof(connection_config_t) == sizeof(uint8_t), "Connection EECONFIG out of spec.");
+
+/**
+ * \brief Initialize the subsystem.
+ *
+ * This function must be called only once, before any of the below functions can be called.
+ */
+void connection_init(void);
+
+/**
+ * \brief Get currently configured host. Does not resolve 'CONNECTION_HOST_AUTO'.
+ *
+ * \return 'connection_host_t' of the configured host.
+ */
+connection_host_t connection_get_host_raw(void);
+
+/**
+ * \brief Get current active host.
+ *
+ * \return 'connection_host_t' of the configured host.
+ */
+connection_host_t connection_auto_detect_host(void);
+
+/**
+ * \brief Get currently configured host. Resolves 'CONNECTION_HOST_AUTO' using 'connection_auto_detect_host()'.
+ *
+ * \return 'connection_host_t' of the configured host.
+ */
+connection_host_t connection_get_host(void);
+
+/**
+ * \brief Get current host. New state is not written to EEPROM.
+ *
+ * \param host The host to configure.
+ */
+void connection_set_host_noeeprom(connection_host_t host);
+
+/**
+ * \brief Get current host.
+ *
+ * \param host The host to configure.
+ */
+void connection_set_host(connection_host_t host);
+
+/**
+ * \brief Move to the next potential host. New state is not written to EEPROM.
+ *
+ */
+void connection_next_host_noeeprom(void);
+
+/**
+ * \brief Move to the next potential host.
+ *
+ */
+void connection_next_host(void);
+
+/**
+ * \brief Move to the previous potential host. New state is not written to EEPROM.
+ *
+ */
+void connection_prev_host_noeeprom(void);
+
+/**
+ * \brief Move to the previous potential host.
+ *
+ */
+void connection_prev_host(void);
+
+/**
+ * \brief user hook called when changing configured host
+ *
+ */
+void connection_host_changed_user(connection_host_t host);
+
+/**
+ * \brief keyboard hook called when changing configured host
+ *
+ */
+void connection_host_changed_kb(connection_host_t host);
diff --git a/quantum/dynamic_keymap.c b/quantum/dynamic_keymap.c
index beb7f9d18f..59027fb694 100644
--- a/quantum/dynamic_keymap.c
+++ b/quantum/dynamic_keymap.c
@@ -1,4 +1,5 @@
/* Copyright 2017 Jason Williams (Wilba)
+ * Copyright 2024-2025 Nick Brassel (@tzarc)
*
* 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
@@ -17,18 +18,9 @@
#include "dynamic_keymap.h"
#include "keymap_introspection.h"
#include "action.h"
-#include "eeprom.h"
-#include "progmem.h"
#include "send_string.h"
#include "keycodes.h"
-
-#ifdef VIA_ENABLE
-# include "via.h"
-# define DYNAMIC_KEYMAP_EEPROM_START (VIA_EEPROM_CONFIG_END)
-#else
-# include "eeconfig.h"
-# define DYNAMIC_KEYMAP_EEPROM_START (EECONFIG_SIZE)
-#endif
+#include "nvm_dynamic_keymap.h"
#ifdef ENCODER_ENABLE
# include "encoder.h"
@@ -36,67 +28,6 @@
# define NUM_ENCODERS 0
#endif
-#ifndef DYNAMIC_KEYMAP_LAYER_COUNT
-# define DYNAMIC_KEYMAP_LAYER_COUNT 4
-#endif
-
-#ifndef DYNAMIC_KEYMAP_MACRO_COUNT
-# define DYNAMIC_KEYMAP_MACRO_COUNT 16
-#endif
-
-#ifndef TOTAL_EEPROM_BYTE_COUNT
-# error Unknown total EEPROM size. Cannot derive maximum for dynamic keymaps.
-#endif
-
-#ifndef DYNAMIC_KEYMAP_EEPROM_MAX_ADDR
-# define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR (TOTAL_EEPROM_BYTE_COUNT - 1)
-#endif
-
-#if DYNAMIC_KEYMAP_EEPROM_MAX_ADDR > (TOTAL_EEPROM_BYTE_COUNT - 1)
-# pragma message STR(DYNAMIC_KEYMAP_EEPROM_MAX_ADDR) " > " STR((TOTAL_EEPROM_BYTE_COUNT - 1))
-# error DYNAMIC_KEYMAP_EEPROM_MAX_ADDR is configured to use more space than what is available for the selected EEPROM driver
-#endif
-
-// Due to usage of uint16_t check for max 65535
-#if DYNAMIC_KEYMAP_EEPROM_MAX_ADDR > 65535
-# pragma message STR(DYNAMIC_KEYMAP_EEPROM_MAX_ADDR) " > 65535"
-# error DYNAMIC_KEYMAP_EEPROM_MAX_ADDR must be less than 65536
-#endif
-
-// If DYNAMIC_KEYMAP_EEPROM_ADDR not explicitly defined in config.h,
-#ifndef DYNAMIC_KEYMAP_EEPROM_ADDR
-# define DYNAMIC_KEYMAP_EEPROM_ADDR DYNAMIC_KEYMAP_EEPROM_START
-#endif
-
-// Dynamic encoders starts after dynamic keymaps
-#ifndef DYNAMIC_KEYMAP_ENCODER_EEPROM_ADDR
-# define DYNAMIC_KEYMAP_ENCODER_EEPROM_ADDR (DYNAMIC_KEYMAP_EEPROM_ADDR + (DYNAMIC_KEYMAP_LAYER_COUNT * MATRIX_ROWS * MATRIX_COLS * 2))
-#endif
-
-// Dynamic macro starts after dynamic encoders, but only when using ENCODER_MAP
-#ifdef ENCODER_MAP_ENABLE
-# ifndef DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR
-# define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR (DYNAMIC_KEYMAP_ENCODER_EEPROM_ADDR + (DYNAMIC_KEYMAP_LAYER_COUNT * NUM_ENCODERS * 2 * 2))
-# endif // DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR
-#else // ENCODER_MAP_ENABLE
-# ifndef DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR
-# define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR (DYNAMIC_KEYMAP_ENCODER_EEPROM_ADDR)
-# endif // DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR
-#endif // ENCODER_MAP_ENABLE
-
-// Sanity check that dynamic keymaps fit in available EEPROM
-// If there's not 100 bytes available for macros, then something is wrong.
-// The keyboard should override DYNAMIC_KEYMAP_LAYER_COUNT to reduce it,
-// or DYNAMIC_KEYMAP_EEPROM_MAX_ADDR to increase it, *only if* the microcontroller has
-// more than the default.
-_Static_assert((DYNAMIC_KEYMAP_EEPROM_MAX_ADDR) - (DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR) >= 100, "Dynamic keymaps are configured to use more EEPROM than is available.");
-
-// Dynamic macros are stored after the keymaps and use what is available
-// up to and including DYNAMIC_KEYMAP_EEPROM_MAX_ADDR.
-#ifndef DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE
-# define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE (DYNAMIC_KEYMAP_EEPROM_MAX_ADDR - DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR + 1)
-#endif
-
#ifndef DYNAMIC_KEYMAP_MACRO_DELAY
# define DYNAMIC_KEYMAP_MACRO_DELAY TAP_CODE_DELAY
#endif
@@ -105,52 +36,28 @@ uint8_t dynamic_keymap_get_layer_count(void) {
return DYNAMIC_KEYMAP_LAYER_COUNT;
}
-void *dynamic_keymap_key_to_eeprom_address(uint8_t layer, uint8_t row, uint8_t column) {
- // TODO: optimize this with some left shifts
- return ((void *)DYNAMIC_KEYMAP_EEPROM_ADDR) + (layer * MATRIX_ROWS * MATRIX_COLS * 2) + (row * MATRIX_COLS * 2) + (column * 2);
-}
-
uint16_t dynamic_keymap_get_keycode(uint8_t layer, uint8_t row, uint8_t column) {
- if (layer >= DYNAMIC_KEYMAP_LAYER_COUNT || row >= MATRIX_ROWS || column >= MATRIX_COLS) return KC_NO;
- void *address = dynamic_keymap_key_to_eeprom_address(layer, row, column);
- // Big endian, so we can read/write EEPROM directly from host if we want
- uint16_t keycode = eeprom_read_byte(address) << 8;
- keycode |= eeprom_read_byte(address + 1);
- return keycode;
+ return nvm_dynamic_keymap_read_keycode(layer, row, column);
}
void dynamic_keymap_set_keycode(uint8_t layer, uint8_t row, uint8_t column, uint16_t keycode) {
- if (layer >= DYNAMIC_KEYMAP_LAYER_COUNT || row >= MATRIX_ROWS || column >= MATRIX_COLS) return;
- void *address = dynamic_keymap_key_to_eeprom_address(layer, row, column);
- // Big endian, so we can read/write EEPROM directly from host if we want
- eeprom_update_byte(address, (uint8_t)(keycode >> 8));
- eeprom_update_byte(address + 1, (uint8_t)(keycode & 0xFF));
+ nvm_dynamic_keymap_update_keycode(layer, row, column, keycode);
}
#ifdef ENCODER_MAP_ENABLE
-void *dynamic_keymap_encoder_to_eeprom_address(uint8_t layer, uint8_t encoder_id) {
- return ((void *)DYNAMIC_KEYMAP_ENCODER_EEPROM_ADDR) + (layer * NUM_ENCODERS * 2 * 2) + (encoder_id * 2 * 2);
-}
-
uint16_t dynamic_keymap_get_encoder(uint8_t layer, uint8_t encoder_id, bool clockwise) {
- if (layer >= DYNAMIC_KEYMAP_LAYER_COUNT || encoder_id >= NUM_ENCODERS) return KC_NO;
- void *address = dynamic_keymap_encoder_to_eeprom_address(layer, encoder_id);
- // Big endian, so we can read/write EEPROM directly from host if we want
- uint16_t keycode = ((uint16_t)eeprom_read_byte(address + (clockwise ? 0 : 2))) << 8;
- keycode |= eeprom_read_byte(address + (clockwise ? 0 : 2) + 1);
- return keycode;
+ return nvm_dynamic_keymap_read_encoder(layer, encoder_id, clockwise);
}
void dynamic_keymap_set_encoder(uint8_t layer, uint8_t encoder_id, bool clockwise, uint16_t keycode) {
- if (layer >= DYNAMIC_KEYMAP_LAYER_COUNT || encoder_id >= NUM_ENCODERS) return;
- void *address = dynamic_keymap_encoder_to_eeprom_address(layer, encoder_id);
- // Big endian, so we can read/write EEPROM directly from host if we want
- eeprom_update_byte(address + (clockwise ? 0 : 2), (uint8_t)(keycode >> 8));
- eeprom_update_byte(address + (clockwise ? 0 : 2) + 1, (uint8_t)(keycode & 0xFF));
+ nvm_dynamic_keymap_update_encoder(layer, encoder_id, clockwise, keycode);
}
#endif // ENCODER_MAP_ENABLE
void dynamic_keymap_reset(void) {
+ // Erase the keymaps, if necessary.
+ nvm_dynamic_keymap_erase();
+
// Reset the keymaps in EEPROM to what is in flash.
for (int layer = 0; layer < DYNAMIC_KEYMAP_LAYER_COUNT; layer++) {
for (int row = 0; row < MATRIX_ROWS; row++) {
@@ -168,31 +75,11 @@ void dynamic_keymap_reset(void) {
}
void dynamic_keymap_get_buffer(uint16_t offset, uint16_t size, uint8_t *data) {
- uint16_t dynamic_keymap_eeprom_size = DYNAMIC_KEYMAP_LAYER_COUNT * MATRIX_ROWS * MATRIX_COLS * 2;
- void * source = (void *)(DYNAMIC_KEYMAP_EEPROM_ADDR + offset);
- uint8_t *target = data;
- for (uint16_t i = 0; i < size; i++) {
- if (offset + i < dynamic_keymap_eeprom_size) {
- *target = eeprom_read_byte(source);
- } else {
- *target = 0x00;
- }
- source++;
- target++;
- }
+ nvm_dynamic_keymap_read_buffer(offset, size, data);
}
void dynamic_keymap_set_buffer(uint16_t offset, uint16_t size, uint8_t *data) {
- uint16_t dynamic_keymap_eeprom_size = DYNAMIC_KEYMAP_LAYER_COUNT * MATRIX_ROWS * MATRIX_COLS * 2;
- void * target = (void *)(DYNAMIC_KEYMAP_EEPROM_ADDR + offset);
- uint8_t *source = data;
- for (uint16_t i = 0; i < size; i++) {
- if (offset + i < dynamic_keymap_eeprom_size) {
- eeprom_update_byte(target, *source);
- }
- source++;
- target++;
- }
+ nvm_dynamic_keymap_update_buffer(offset, size, data);
}
uint16_t keycode_at_keymap_location(uint8_t layer_num, uint8_t row, uint8_t column) {
@@ -216,53 +103,38 @@ uint8_t dynamic_keymap_macro_get_count(void) {
}
uint16_t dynamic_keymap_macro_get_buffer_size(void) {
- return DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE;
+ return (uint16_t)nvm_dynamic_keymap_macro_size();
}
void dynamic_keymap_macro_get_buffer(uint16_t offset, uint16_t size, uint8_t *data) {
- void * source = (void *)(DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR + offset);
- uint8_t *target = data;
- for (uint16_t i = 0; i < size; i++) {
- if (offset + i < DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE) {
- *target = eeprom_read_byte(source);
- } else {
- *target = 0x00;
- }
- source++;
- target++;
- }
+ nvm_dynamic_keymap_macro_read_buffer(offset, size, data);
}
void dynamic_keymap_macro_set_buffer(uint16_t offset, uint16_t size, uint8_t *data) {
- void * target = (void *)(DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR + offset);
- uint8_t *source = data;
- for (uint16_t i = 0; i < size; i++) {
- if (offset + i < DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE) {
- eeprom_update_byte(target, *source);
- }
- source++;
- target++;
- }
+ nvm_dynamic_keymap_macro_update_buffer(offset, size, data);
}
-typedef struct send_string_eeprom_state_t {
- const uint8_t *ptr;
-} send_string_eeprom_state_t;
+static uint8_t dynamic_keymap_read_byte(uint32_t offset) {
+ uint8_t d;
+ nvm_dynamic_keymap_macro_read_buffer(offset, 1, &d);
+ return d;
+}
-char send_string_get_next_eeprom(void *arg) {
- send_string_eeprom_state_t *state = (send_string_eeprom_state_t *)arg;
- char ret = eeprom_read_byte(state->ptr);
- state->ptr++;
+typedef struct send_string_nvm_state_t {
+ uint32_t offset;
+} send_string_nvm_state_t;
+
+char send_string_get_next_nvm(void *arg) {
+ send_string_nvm_state_t *state = (send_string_nvm_state_t *)arg;
+ char ret = dynamic_keymap_read_byte(state->offset);
+ state->offset++;
return ret;
}
void dynamic_keymap_macro_reset(void) {
- void *p = (void *)(DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR);
- void *end = (void *)(DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR + DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE);
- while (p != end) {
- eeprom_update_byte(p, 0);
- ++p;
- }
+ // Erase the macros, if necessary.
+ nvm_dynamic_keymap_macro_erase();
+ nvm_dynamic_keymap_macro_reset();
}
void dynamic_keymap_macro_send(uint8_t id) {
@@ -274,27 +146,26 @@ void dynamic_keymap_macro_send(uint8_t id) {
// If it's not zero, then we are in the middle
// of buffer writing, possibly an aborted buffer
// write. So do nothing.
- void *p = (void *)(DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR + DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE - 1);
- if (eeprom_read_byte(p) != 0) {
+ if (dynamic_keymap_read_byte(nvm_dynamic_keymap_macro_size() - 1) != 0) {
return;
}
// Skip N null characters
// p will then point to the Nth macro
- p = (void *)(DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR);
- void *end = (void *)(DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR + DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE);
+ uint32_t offset = 0;
+ uint32_t end = nvm_dynamic_keymap_macro_size();
while (id > 0) {
// If we are past the end of the buffer, then there is
// no Nth macro in the buffer.
- if (p == end) {
+ if (offset == end) {
return;
}
- if (eeprom_read_byte(p) == 0) {
+ if (dynamic_keymap_read_byte(offset) == 0) {
--id;
}
- ++p;
+ ++offset;
}
- send_string_eeprom_state_t state = {p};
- send_string_with_delay_impl(send_string_get_next_eeprom, &state, DYNAMIC_KEYMAP_MACRO_DELAY);
+ send_string_nvm_state_t state = {.offset = 0};
+ send_string_with_delay_impl(send_string_get_next_nvm, &state, DYNAMIC_KEYMAP_MACRO_DELAY);
}
diff --git a/quantum/dynamic_keymap.h b/quantum/dynamic_keymap.h
index 806342efa3..f1d8077b12 100644
--- a/quantum/dynamic_keymap.h
+++ b/quantum/dynamic_keymap.h
@@ -18,8 +18,15 @@
#include <stdint.h>
#include <stdbool.h>
+#ifndef DYNAMIC_KEYMAP_LAYER_COUNT
+# define DYNAMIC_KEYMAP_LAYER_COUNT 4
+#endif
+
+#ifndef DYNAMIC_KEYMAP_MACRO_COUNT
+# define DYNAMIC_KEYMAP_MACRO_COUNT 16
+#endif
+
uint8_t dynamic_keymap_get_layer_count(void);
-void * dynamic_keymap_key_to_eeprom_address(uint8_t layer, uint8_t row, uint8_t column);
uint16_t dynamic_keymap_get_keycode(uint8_t layer, uint8_t row, uint8_t column);
void dynamic_keymap_set_keycode(uint8_t layer, uint8_t row, uint8_t column, uint16_t keycode);
#ifdef ENCODER_MAP_ENABLE
diff --git a/quantum/eeconfig.c b/quantum/eeconfig.c
index e27f604f12..1e8cfd758a 100644
--- a/quantum/eeconfig.c
+++ b/quantum/eeconfig.c
@@ -1,355 +1,355 @@
#include <string.h>
#include <stdint.h>
#include <stdbool.h>
-#include "eeprom.h"
+#include "debug.h"
#include "eeconfig.h"
+#include "action_layer.h"
+#include "nvm_eeconfig.h"
+#include "keycode_config.h"
-#if defined(EEPROM_DRIVER)
-# include "eeprom_driver.h"
-#endif
+#ifdef BACKLIGHT_ENABLE
+# include "backlight.h"
+#endif // BACKLIGHT_ENABLE
+
+#ifdef AUDIO_ENABLE
+# include "audio.h"
+#endif // AUDIO_ENABLE
+
+#ifdef RGBLIGHT_ENABLE
+# include "rgblight.h"
+#endif // RGBLIGHT_ENABLE
+
+#ifdef RGB_MATRIX_ENABLE
+# include "rgb_matrix_types.h"
+#endif // RGB_MATRIX_ENABLE
+
+#ifdef LED_MATRIX_ENABLE
+# include "led_matrix_types.h"
+#endif // LED_MATRIX_ENABLE
-#if defined(HAPTIC_ENABLE)
+#ifdef UNICODE_COMMON_ENABLE
+# include "unicode.h"
+#endif // UNICODE_COMMON_ENABLE
+
+#ifdef HAPTIC_ENABLE
# include "haptic.h"
-#endif
+#endif // HAPTIC_ENABLE
-#if defined(VIA_ENABLE)
+#ifdef CONNECTION_ENABLE
+# include "connection.h"
+#endif // CONNECTION_ENABLE
+
+#ifdef VIA_ENABLE
bool via_eeprom_is_valid(void);
void via_eeprom_set_valid(bool valid);
void eeconfig_init_via(void);
-#endif
-
-_Static_assert((intptr_t)EECONFIG_HANDEDNESS == 14, "EEPROM handedness offset is incorrect");
+#else
+void dynamic_keymap_reset(void);
+#endif // VIA_ENABLE
-/** \brief eeconfig enable
- *
- * FIXME: needs doc
- */
__attribute__((weak)) void eeconfig_init_user(void) {
#if (EECONFIG_USER_DATA_SIZE) == 0
// Reset user EEPROM value to blank, rather than to a set value
eeconfig_update_user(0);
-#endif
+#endif // (EECONFIG_USER_DATA_SIZE) == 0
}
__attribute__((weak)) void eeconfig_init_kb(void) {
#if (EECONFIG_KB_DATA_SIZE) == 0
// Reset Keyboard EEPROM value to blank, rather than to a set value
eeconfig_update_kb(0);
-#endif
+#endif // (EECONFIG_KB_DATA_SIZE) == 0
eeconfig_init_user();
}
-/*
- * FIXME: needs doc
- */
void eeconfig_init_quantum(void) {
-#if defined(EEPROM_DRIVER)
- eeprom_driver_format(false);
-#endif
+ nvm_eeconfig_erase();
+
+ eeconfig_enable();
+
+ debug_config_t debug_config = {0};
+ eeconfig_update_debug(&debug_config);
- eeprom_update_word(EECONFIG_MAGIC, EECONFIG_MAGIC_NUMBER);
- eeprom_update_byte(EECONFIG_DEBUG, 0);
default_layer_state = (layer_state_t)1 << 0;
eeconfig_update_default_layer(default_layer_state);
- // Enable oneshot and autocorrect by default: 0b0001 0100 0000 0000
- eeprom_update_word(EECONFIG_KEYMAP, 0x1400);
- eeprom_update_byte(EECONFIG_BACKLIGHT, 0);
- eeprom_update_byte(EECONFIG_AUDIO, 0);
- eeprom_update_dword(EECONFIG_RGBLIGHT, 0);
- eeprom_update_byte(EECONFIG_RGBLIGHT_EXTENDED, 0);
- eeprom_update_byte(EECONFIG_UNICODEMODE, 0);
- eeprom_update_byte(EECONFIG_STENOMODE, 0);
- eeprom_write_qword(EECONFIG_RGB_MATRIX, 0);
- eeprom_update_dword(EECONFIG_HAPTIC, 0);
-#if defined(HAPTIC_ENABLE)
- haptic_reset();
+
+ keymap_config_t keymap_config = {
+ .swap_control_capslock = false,
+ .capslock_to_control = false,
+ .swap_lalt_lgui = false,
+ .swap_ralt_rgui = false,
+ .no_gui = false,
+ .swap_grave_esc = false,
+ .swap_backslash_backspace = false,
+ .nkro = false,
+ .swap_lctl_lgui = false,
+ .swap_rctl_rgui = false,
+ .oneshot_enable = true, // Enable oneshot by default
+ .swap_escape_capslock = false,
+ .autocorrect_enable = true, // Enable autocorrect by default
+ };
+ eeconfig_update_keymap(&keymap_config);
+
+#ifdef BACKLIGHT_ENABLE
+ backlight_config_t backlight_config = {0};
+ eeconfig_update_backlight(&backlight_config);
+#endif // BACKLIGHT_ENABLE
+
+#ifdef AUDIO_ENABLE
+ audio_config_t audio_config = {0};
+ eeconfig_update_audio(&audio_config);
+#endif // AUDIO_ENABLE
+
+#ifdef RGBLIGHT_ENABLE
+ extern void eeconfig_update_rgblight_default(void);
+ eeconfig_update_rgblight_default();
+#endif // RGBLIGHT_ENABLE
+
+#ifdef UNICODE_COMMON_ENABLE
+ unicode_config_t unicode_config = {0};
+ eeconfig_update_unicode_mode(&unicode_config);
+#endif // UNICODE_COMMON_ENABLE
+
+#ifdef STENO_ENABLE
+ eeconfig_update_steno_mode(0);
+#endif // STENO_ENABLE
+
+#ifdef RGB_MATRIX_ENABLE
+ extern void eeconfig_update_rgb_matrix_default(void);
+ eeconfig_update_rgb_matrix_default();
#endif
+#ifdef LED_MATRIX_ENABLE
+ extern void eeconfig_update_led_matrix_default(void);
+ eeconfig_update_led_matrix_default();
+#endif // LED_MATRIX_ENABLE
+
+#ifdef HAPTIC_ENABLE
+ haptic_config_t haptic_config = {0};
+ eeconfig_update_haptic(&haptic_config);
+ haptic_reset();
+#endif // HAPTIC_ENABLE
+
+#ifdef CONNECTION_ENABLE
+ extern void eeconfig_update_connection_default(void);
+ eeconfig_update_connection_default();
+#endif // CONNECTION_ENABLE
+
#if (EECONFIG_KB_DATA_SIZE) > 0
eeconfig_init_kb_datablock();
-#endif
+#endif // (EECONFIG_KB_DATA_SIZE) > 0
#if (EECONFIG_USER_DATA_SIZE) > 0
eeconfig_init_user_datablock();
-#endif
+#endif // (EECONFIG_USER_DATA_SIZE) > 0
#if defined(VIA_ENABLE)
// Invalidate VIA eeprom config, and then reset.
- // Just in case if power is lost mid init, this makes sure that it pets
+ // Just in case if power is lost mid init, this makes sure that it gets
// properly re-initialized.
- via_eeprom_set_valid(false);
eeconfig_init_via();
+#elif defined(DYNAMIC_KEYMAP_ENABLE)
+ dynamic_keymap_reset();
#endif
eeconfig_init_kb();
+
+#ifdef RGB_MATRIX_ENABLE
+ extern void eeconfig_force_flush_rgb_matrix(void);
+ eeconfig_force_flush_rgb_matrix();
+#endif // RGB_MATRIX_ENABLE
+#ifdef LED_MATRIX_ENABLE
+ extern void eeconfig_force_flush_led_matrix(void);
+ eeconfig_force_flush_led_matrix();
+#endif // LED_MATRIX_ENABLE
}
-/** \brief eeconfig initialization
- *
- * FIXME: needs doc
- */
void eeconfig_init(void) {
eeconfig_init_quantum();
}
-/** \brief eeconfig enable
- *
- * FIXME: needs doc
- */
void eeconfig_enable(void) {
- eeprom_update_word(EECONFIG_MAGIC, EECONFIG_MAGIC_NUMBER);
+ nvm_eeconfig_enable();
}
-/** \brief eeconfig disable
- *
- * FIXME: needs doc
- */
void eeconfig_disable(void) {
-#if defined(EEPROM_DRIVER)
- eeprom_driver_format(false);
-#endif
- eeprom_update_word(EECONFIG_MAGIC, EECONFIG_MAGIC_NUMBER_OFF);
+ nvm_eeconfig_disable();
}
-/** \brief eeconfig is enabled
- *
- * FIXME: needs doc
- */
bool eeconfig_is_enabled(void) {
- bool is_eeprom_enabled = (eeprom_read_word(EECONFIG_MAGIC) == EECONFIG_MAGIC_NUMBER);
+ bool is_eeprom_enabled = nvm_eeconfig_is_enabled();
#ifdef VIA_ENABLE
if (is_eeprom_enabled) {
is_eeprom_enabled = via_eeprom_is_valid();
}
-#endif
+#endif // VIA_ENABLE
return is_eeprom_enabled;
}
-/** \brief eeconfig is disabled
- *
- * FIXME: needs doc
- */
bool eeconfig_is_disabled(void) {
- bool is_eeprom_disabled = (eeprom_read_word(EECONFIG_MAGIC) == EECONFIG_MAGIC_NUMBER_OFF);
+ bool is_eeprom_disabled = nvm_eeconfig_is_disabled();
#ifdef VIA_ENABLE
if (!is_eeprom_disabled) {
is_eeprom_disabled = !via_eeprom_is_valid();
}
-#endif
+#endif // VIA_ENABLE
return is_eeprom_disabled;
}
-/** \brief eeconfig read debug
- *
- * FIXME: needs doc
- */
-uint8_t eeconfig_read_debug(void) {
- return eeprom_read_byte(EECONFIG_DEBUG);
+void eeconfig_read_debug(debug_config_t *debug_config) {
+ nvm_eeconfig_read_debug(debug_config);
}
-/** \brief eeconfig update debug
- *
- * FIXME: needs doc
- */
-void eeconfig_update_debug(uint8_t val) {
- eeprom_update_byte(EECONFIG_DEBUG, val);
+void eeconfig_update_debug(const debug_config_t *debug_config) {
+ nvm_eeconfig_update_debug(debug_config);
}
-/** \brief eeconfig read default layer
- *
- * FIXME: needs doc
- */
layer_state_t eeconfig_read_default_layer(void) {
- uint8_t val = eeprom_read_byte(EECONFIG_DEFAULT_LAYER);
-
-#ifdef DEFAULT_LAYER_STATE_IS_VALUE_NOT_BITMASK
- // stored as a layer number, so convert back to bitmask
- return 1 << val;
-#else
- // stored as 8-bit-wide bitmask, so read the value directly - handling padding to 16/32 bit layer_state_t
- return val;
-#endif
+ return nvm_eeconfig_read_default_layer();
}
-/** \brief eeconfig update default layer
- *
- * FIXME: needs doc
- */
void eeconfig_update_default_layer(layer_state_t state) {
-#ifdef DEFAULT_LAYER_STATE_IS_VALUE_NOT_BITMASK
- // stored as a layer number, so only store the highest layer
- uint8_t val = get_highest_layer(state);
-#else
- // stored as 8-bit-wide bitmask, so write the value directly - handling truncation from 16/32 bit layer_state_t
- uint8_t val = state;
-#endif
+ nvm_eeconfig_update_default_layer(state);
+}
- eeprom_update_byte(EECONFIG_DEFAULT_LAYER, val);
+void eeconfig_read_keymap(keymap_config_t *keymap_config) {
+ nvm_eeconfig_read_keymap(keymap_config);
+}
+void eeconfig_update_keymap(const keymap_config_t *keymap_config) {
+ nvm_eeconfig_update_keymap(keymap_config);
+}
+
+#ifdef AUDIO_ENABLE
+void eeconfig_read_audio(audio_config_t *audio_config) {
+ nvm_eeconfig_read_audio(audio_config);
+}
+void eeconfig_update_audio(const audio_config_t *audio_config) {
+ nvm_eeconfig_update_audio(audio_config);
+}
+#endif // AUDIO_ENABLE
+
+#ifdef UNICODE_COMMON_ENABLE
+void eeconfig_read_unicode_mode(unicode_config_t *unicode_config) {
+ return nvm_eeconfig_read_unicode_mode(unicode_config);
+}
+void eeconfig_update_unicode_mode(const unicode_config_t *unicode_config) {
+ nvm_eeconfig_update_unicode_mode(unicode_config);
+}
+#endif // UNICODE_COMMON_ENABLE
+
+#ifdef BACKLIGHT_ENABLE
+void eeconfig_read_backlight(backlight_config_t *backlight_config) {
+ nvm_eeconfig_read_backlight(backlight_config);
+}
+void eeconfig_update_backlight(const backlight_config_t *backlight_config) {
+ nvm_eeconfig_update_backlight(backlight_config);
}
+#endif // BACKLIGHT_ENABLE
-/** \brief eeconfig read keymap
- *
- * FIXME: needs doc
- */
-uint16_t eeconfig_read_keymap(void) {
- return eeprom_read_word(EECONFIG_KEYMAP);
+#ifdef STENO_ENABLE
+uint8_t eeconfig_read_steno_mode(void) {
+ return nvm_eeconfig_read_steno_mode();
}
-/** \brief eeconfig update keymap
- *
- * FIXME: needs doc
- */
-void eeconfig_update_keymap(uint16_t val) {
- eeprom_update_word(EECONFIG_KEYMAP, val);
+void eeconfig_update_steno_mode(uint8_t val) {
+ nvm_eeconfig_update_steno_mode(val);
}
+#endif // STENO_ENABLE
-/** \brief eeconfig read audio
- *
- * FIXME: needs doc
- */
-uint8_t eeconfig_read_audio(void) {
- return eeprom_read_byte(EECONFIG_AUDIO);
+#ifdef RGB_MATRIX_ENABLE
+void eeconfig_read_rgb_matrix(rgb_config_t *rgb_matrix_config) {
+ nvm_eeconfig_read_rgb_matrix(rgb_matrix_config);
}
-/** \brief eeconfig update audio
- *
- * FIXME: needs doc
- */
-void eeconfig_update_audio(uint8_t val) {
- eeprom_update_byte(EECONFIG_AUDIO, val);
+void eeconfig_update_rgb_matrix(const rgb_config_t *rgb_matrix_config) {
+ nvm_eeconfig_update_rgb_matrix(rgb_matrix_config);
}
+#endif // RGB_MATRIX_ENABLE
+
+#ifdef LED_MATRIX_ENABLE
+void eeconfig_read_led_matrix(led_eeconfig_t *led_matrix_config) {
+ nvm_eeconfig_read_led_matrix(led_matrix_config);
+}
+void eeconfig_update_led_matrix(const led_eeconfig_t *led_matrix_config) {
+ nvm_eeconfig_update_led_matrix(led_matrix_config);
+}
+#endif // LED_MATRIX_ENABLE
+
+#ifdef RGBLIGHT_ENABLE
+void eeconfig_read_rgblight(rgblight_config_t *rgblight_config) {
+ nvm_eeconfig_read_rgblight(rgblight_config);
+}
+void eeconfig_update_rgblight(const rgblight_config_t *rgblight_config) {
+ nvm_eeconfig_update_rgblight(rgblight_config);
+}
+#endif // RGBLIGHT_ENABLE
#if (EECONFIG_KB_DATA_SIZE) == 0
-/** \brief eeconfig read kb
- *
- * FIXME: needs doc
- */
uint32_t eeconfig_read_kb(void) {
- return eeprom_read_dword(EECONFIG_KEYBOARD);
+ return nvm_eeconfig_read_kb();
}
-/** \brief eeconfig update kb
- *
- * FIXME: needs doc
- */
void eeconfig_update_kb(uint32_t val) {
- eeprom_update_dword(EECONFIG_KEYBOARD, val);
+ nvm_eeconfig_update_kb(val);
}
#endif // (EECONFIG_KB_DATA_SIZE) == 0
#if (EECONFIG_USER_DATA_SIZE) == 0
-/** \brief eeconfig read user
- *
- * FIXME: needs doc
- */
uint32_t eeconfig_read_user(void) {
- return eeprom_read_dword(EECONFIG_USER);
+ return nvm_eeconfig_read_user();
}
-/** \brief eeconfig update user
- *
- * FIXME: needs doc
- */
void eeconfig_update_user(uint32_t val) {
- eeprom_update_dword(EECONFIG_USER, val);
+ nvm_eeconfig_update_user(val);
}
#endif // (EECONFIG_USER_DATA_SIZE) == 0
-/** \brief eeconfig read haptic
- *
- * FIXME: needs doc
- */
-uint32_t eeconfig_read_haptic(void) {
- return eeprom_read_dword(EECONFIG_HAPTIC);
-}
-/** \brief eeconfig update haptic
- *
- * FIXME: needs doc
- */
-void eeconfig_update_haptic(uint32_t val) {
- eeprom_update_dword(EECONFIG_HAPTIC, val);
-}
-
-/** \brief eeconfig read split handedness
- *
- * FIXME: needs doc
- */
+#ifdef HAPTIC_ENABLE
+void eeconfig_read_haptic(haptic_config_t *haptic_config) {
+ nvm_eeconfig_read_haptic(haptic_config);
+}
+void eeconfig_update_haptic(const haptic_config_t *haptic_config) {
+ nvm_eeconfig_update_haptic(haptic_config);
+}
+#endif // HAPTIC_ENABLE
+
+#ifdef CONNECTION_ENABLE
+void eeconfig_read_connection(connection_config_t *config) {
+ nvm_eeconfig_read_connection(config);
+}
+void eeconfig_update_connection(const connection_config_t *config) {
+ nvm_eeconfig_update_connection(config);
+}
+#endif // CONNECTION_ENABLE
+
bool eeconfig_read_handedness(void) {
- return !!eeprom_read_byte(EECONFIG_HANDEDNESS);
+ return nvm_eeconfig_read_handedness();
}
-/** \brief eeconfig update split handedness
- *
- * FIXME: needs doc
- */
void eeconfig_update_handedness(bool val) {
- eeprom_update_byte(EECONFIG_HANDEDNESS, !!val);
+ nvm_eeconfig_update_handedness(val);
}
#if (EECONFIG_KB_DATA_SIZE) > 0
-/** \brief eeconfig assert keyboard data block version
- *
- * FIXME: needs doc
- */
bool eeconfig_is_kb_datablock_valid(void) {
- return eeprom_read_dword(EECONFIG_KEYBOARD) == (EECONFIG_KB_DATA_VERSION);
-}
-/** \brief eeconfig read keyboard data block
- *
- * FIXME: needs doc
- */
-void eeconfig_read_kb_datablock(void *data) {
- if (eeconfig_is_kb_datablock_valid()) {
- eeprom_read_block(data, EECONFIG_KB_DATABLOCK, (EECONFIG_KB_DATA_SIZE));
- } else {
- memset(data, 0, (EECONFIG_KB_DATA_SIZE));
- }
+ return nvm_eeconfig_is_kb_datablock_valid();
+}
+uint32_t eeconfig_read_kb_datablock(void *data, uint32_t offset, uint32_t length) {
+ return nvm_eeconfig_read_kb_datablock(data, offset, length);
+}
+uint32_t eeconfig_update_kb_datablock(const void *data, uint32_t offset, uint32_t length) {
+ return nvm_eeconfig_update_kb_datablock(data, offset, length);
}
-/** \brief eeconfig update keyboard data block
- *
- * FIXME: needs doc
- */
-void eeconfig_update_kb_datablock(const void *data) {
- eeprom_update_dword(EECONFIG_KEYBOARD, (EECONFIG_KB_DATA_VERSION));
- eeprom_update_block(data, EECONFIG_KB_DATABLOCK, (EECONFIG_KB_DATA_SIZE));
-}
-/** \brief eeconfig init keyboard data block
- *
- * FIXME: needs doc
- */
__attribute__((weak)) void eeconfig_init_kb_datablock(void) {
- uint8_t dummy_kb[(EECONFIG_KB_DATA_SIZE)] = {0};
- eeconfig_update_kb_datablock(dummy_kb);
+ nvm_eeconfig_init_kb_datablock();
}
#endif // (EECONFIG_KB_DATA_SIZE) > 0
#if (EECONFIG_USER_DATA_SIZE) > 0
-/** \brief eeconfig assert user data block version
- *
- * FIXME: needs doc
- */
bool eeconfig_is_user_datablock_valid(void) {
- return eeprom_read_dword(EECONFIG_USER) == (EECONFIG_USER_DATA_VERSION);
-}
-/** \brief eeconfig read user data block
- *
- * FIXME: needs doc
- */
-void eeconfig_read_user_datablock(void *data) {
- if (eeconfig_is_user_datablock_valid()) {
- eeprom_read_block(data, EECONFIG_USER_DATABLOCK, (EECONFIG_USER_DATA_SIZE));
- } else {
- memset(data, 0, (EECONFIG_USER_DATA_SIZE));
- }
+ return nvm_eeconfig_is_user_datablock_valid();
+}
+uint32_t eeconfig_read_user_datablock(void *data, uint32_t offset, uint32_t length) {
+ return nvm_eeconfig_read_user_datablock(data, offset, length);
+}
+uint32_t eeconfig_update_user_datablock(const void *data, uint32_t offset, uint32_t length) {
+ return nvm_eeconfig_update_user_datablock(data, offset, length);
}
-/** \brief eeconfig update user data block
- *
- * FIXME: needs doc
- */
-void eeconfig_update_user_datablock(const void *data) {
- eeprom_update_dword(EECONFIG_USER, (EECONFIG_USER_DATA_VERSION));
- eeprom_update_block(data, EECONFIG_USER_DATABLOCK, (EECONFIG_USER_DATA_SIZE));
-}
-/** \brief eeconfig init user data block
- *
- * FIXME: needs doc
- */
__attribute__((weak)) void eeconfig_init_user_datablock(void) {
- uint8_t dummy_user[(EECONFIG_USER_DATA_SIZE)] = {0};
- eeconfig_update_user_datablock(dummy_user);
+ nvm_eeconfig_init_user_datablock();
}
#endif // (EECONFIG_USER_DATA_SIZE) > 0
diff --git a/quantum/eeconfig.h b/quantum/eeconfig.h
index 11cf1ccbca..d4d8d957be 100644
--- a/quantum/eeconfig.h
+++ b/quantum/eeconfig.h
@@ -19,59 +19,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <stdint.h>
#include <stdbool.h>
-#include <stddef.h> // offsetof
-#include "eeprom.h"
-#include "util.h"
+#include <stddef.h> // offsetof
#include "action_layer.h" // layer_state_t
-#ifndef EECONFIG_MAGIC_NUMBER
-# define EECONFIG_MAGIC_NUMBER (uint16_t)0xFEE5 // When changing, decrement this value to avoid future re-init issues
-#endif
-#define EECONFIG_MAGIC_NUMBER_OFF (uint16_t)0xFFFF
-
-// Dummy struct only used to calculate offsets
-typedef struct PACKED {
- uint16_t magic;
- uint8_t debug;
- uint8_t default_layer;
- uint16_t keymap;
- uint8_t backlight;
- uint8_t audio;
- uint32_t rgblight;
- uint8_t unicode;
- uint8_t steno;
- uint8_t handedness;
- uint32_t keyboard;
- uint32_t user;
- union { // Mutually exclusive
- uint32_t led_matrix;
- uint64_t rgb_matrix;
- };
- uint32_t haptic;
- uint8_t rgblight_ext;
-} eeprom_core_t;
-
-/* EEPROM parameter address */
-#define EECONFIG_MAGIC (uint16_t *)(offsetof(eeprom_core_t, magic))
-#define EECONFIG_DEBUG (uint8_t *)(offsetof(eeprom_core_t, debug))
-#define EECONFIG_DEFAULT_LAYER (uint8_t *)(offsetof(eeprom_core_t, default_layer))
-#define EECONFIG_KEYMAP (uint16_t *)(offsetof(eeprom_core_t, keymap))
-#define EECONFIG_BACKLIGHT (uint8_t *)(offsetof(eeprom_core_t, backlight))
-#define EECONFIG_AUDIO (uint8_t *)(offsetof(eeprom_core_t, audio))
-#define EECONFIG_RGBLIGHT (uint32_t *)(offsetof(eeprom_core_t, rgblight))
-#define EECONFIG_UNICODEMODE (uint8_t *)(offsetof(eeprom_core_t, unicode))
-#define EECONFIG_STENOMODE (uint8_t *)(offsetof(eeprom_core_t, steno))
-#define EECONFIG_HANDEDNESS (uint8_t *)(offsetof(eeprom_core_t, handedness))
-#define EECONFIG_KEYBOARD (uint32_t *)(offsetof(eeprom_core_t, keyboard))
-#define EECONFIG_USER (uint32_t *)(offsetof(eeprom_core_t, user))
-#define EECONFIG_LED_MATRIX (uint32_t *)(offsetof(eeprom_core_t, led_matrix))
-#define EECONFIG_RGB_MATRIX (uint64_t *)(offsetof(eeprom_core_t, rgb_matrix))
-#define EECONFIG_HAPTIC (uint32_t *)(offsetof(eeprom_core_t, haptic))
-#define EECONFIG_RGBLIGHT_EXTENDED (uint8_t *)(offsetof(eeprom_core_t, rgblight_ext))
-
-// Size of EEPROM being used for core data storage
-#define EECONFIG_BASE_SIZE ((uint8_t)sizeof(eeprom_core_t))
-
// Size of EEPROM dedicated to keyboard- and user-specific data
#ifndef EECONFIG_KB_DATA_SIZE
# define EECONFIG_KB_DATA_SIZE 0
@@ -86,12 +36,6 @@ typedef struct PACKED {
# define EECONFIG_USER_DATA_VERSION (EECONFIG_USER_DATA_SIZE)
#endif
-#define EECONFIG_KB_DATABLOCK ((uint8_t *)(EECONFIG_BASE_SIZE))
-#define EECONFIG_USER_DATABLOCK ((uint8_t *)((EECONFIG_BASE_SIZE) + (EECONFIG_KB_DATA_SIZE)))
-
-// Size of EEPROM being used, other code can refer to this for available EEPROM
-#define EECONFIG_SIZE ((EECONFIG_BASE_SIZE) + (EECONFIG_KB_DATA_SIZE) + (EECONFIG_USER_DATA_SIZE))
-
/* debug bit */
#define EECONFIG_DEBUG_ENABLE (1 << 0)
#define EECONFIG_DEBUG_MATRIX (1 << 1)
@@ -117,22 +61,59 @@ void eeconfig_init_kb(void);
void eeconfig_init_user(void);
void eeconfig_enable(void);
-
void eeconfig_disable(void);
-uint8_t eeconfig_read_debug(void);
-void eeconfig_update_debug(uint8_t val);
+typedef union debug_config_t debug_config_t;
+void eeconfig_read_debug(debug_config_t *debug_config) __attribute__((nonnull));
+void eeconfig_update_debug(const debug_config_t *debug_config) __attribute__((nonnull));
layer_state_t eeconfig_read_default_layer(void);
-void eeconfig_update_default_layer(layer_state_t val);
+void eeconfig_update_default_layer(layer_state_t state);
-uint16_t eeconfig_read_keymap(void);
-void eeconfig_update_keymap(uint16_t val);
+typedef union keymap_config_t keymap_config_t;
+void eeconfig_read_keymap(keymap_config_t *keymap_config) __attribute__((nonnull));
+void eeconfig_update_keymap(const keymap_config_t *keymap_config) __attribute__((nonnull));
#ifdef AUDIO_ENABLE
-uint8_t eeconfig_read_audio(void);
-void eeconfig_update_audio(uint8_t val);
-#endif
+typedef union audio_config_t audio_config_t;
+void eeconfig_read_audio(audio_config_t *audio_config) __attribute__((nonnull));
+void eeconfig_update_audio(const audio_config_t *audio_config) __attribute__((nonnull));
+#endif // AUDIO_ENABLE
+
+#ifdef UNICODE_COMMON_ENABLE
+typedef union unicode_config_t unicode_config_t;
+void eeconfig_read_unicode_mode(unicode_config_t *unicode_config) __attribute__((nonnull));
+void eeconfig_update_unicode_mode(const unicode_config_t *unicode_config) __attribute__((nonnull));
+#endif // UNICODE_COMMON_ENABLE
+
+#ifdef BACKLIGHT_ENABLE
+typedef union backlight_config_t backlight_config_t;
+void eeconfig_read_backlight(backlight_config_t *backlight_config) __attribute__((nonnull));
+void eeconfig_update_backlight(const backlight_config_t *backlight_config) __attribute__((nonnull));
+#endif // BACKLIGHT_ENABLE
+
+#ifdef STENO_ENABLE
+uint8_t eeconfig_read_steno_mode(void);
+void eeconfig_update_steno_mode(uint8_t val);
+#endif // STENO_ENABLE
+
+#ifdef RGB_MATRIX_ENABLE
+typedef union rgb_config_t rgb_config_t;
+void eeconfig_read_rgb_matrix(rgb_config_t *rgb_matrix_config) __attribute__((nonnull));
+void eeconfig_update_rgb_matrix(const rgb_config_t *rgb_matrix_config) __attribute__((nonnull));
+#endif // RGB_MATRIX_ENABLE
+
+#ifdef LED_MATRIX_ENABLE
+typedef union led_eeconfig_t led_eeconfig_t;
+void eeconfig_read_led_matrix(led_eeconfig_t *led_matrix_config) __attribute__((nonnull));
+void eeconfig_update_led_matrix(const led_eeconfig_t *led_matrix_config) __attribute__((nonnull));
+#endif // LED_MATRIX_ENABLE
+
+#ifdef RGBLIGHT_ENABLE
+typedef union rgblight_config_t rgblight_config_t;
+void eeconfig_read_rgblight(rgblight_config_t *rgblight_config) __attribute__((nonnull));
+void eeconfig_update_rgblight(const rgblight_config_t *rgblight_config) __attribute__((nonnull));
+#endif // RGBLIGHT_ENABLE
#if (EECONFIG_KB_DATA_SIZE) == 0
uint32_t eeconfig_read_kb(void);
@@ -145,31 +126,42 @@ void eeconfig_update_user(uint32_t val);
#endif // (EECONFIG_USER_DATA_SIZE) == 0
#ifdef HAPTIC_ENABLE
-uint32_t eeconfig_read_haptic(void);
-void eeconfig_update_haptic(uint32_t val);
+typedef union haptic_config_t haptic_config_t;
+void eeconfig_read_haptic(haptic_config_t *haptic_config) __attribute__((nonnull));
+void eeconfig_update_haptic(const haptic_config_t *haptic_config) __attribute__((nonnull));
+#endif
+
+#ifdef CONNECTION_ENABLE
+typedef union connection_config_t connection_config_t;
+void eeconfig_read_connection(connection_config_t *config);
+void eeconfig_update_connection(const connection_config_t *config);
#endif
bool eeconfig_read_handedness(void);
void eeconfig_update_handedness(bool val);
#if (EECONFIG_KB_DATA_SIZE) > 0
-bool eeconfig_is_kb_datablock_valid(void);
-void eeconfig_read_kb_datablock(void *data);
-void eeconfig_update_kb_datablock(const void *data);
-void eeconfig_init_kb_datablock(void);
+bool eeconfig_is_kb_datablock_valid(void);
+uint32_t eeconfig_read_kb_datablock(void *data, uint32_t offset, uint32_t length) __attribute__((nonnull));
+uint32_t eeconfig_update_kb_datablock(const void *data, uint32_t offset, uint32_t length) __attribute__((nonnull));
+void eeconfig_init_kb_datablock(void);
+# define eeconfig_read_kb_datablock_field(__object, __field) eeconfig_read_kb_datablock(&(__object.__field), offsetof(typeof(__object), __field), sizeof(__object.__field))
+# define eeconfig_update_kb_datablock_field(__object, __field) eeconfig_update_kb_datablock(&(__object.__field), offsetof(typeof(__object), __field), sizeof(__object.__field))
#endif // (EECONFIG_KB_DATA_SIZE) > 0
#if (EECONFIG_USER_DATA_SIZE) > 0
-bool eeconfig_is_user_datablock_valid(void);
-void eeconfig_read_user_datablock(void *data);
-void eeconfig_update_user_datablock(const void *data);
-void eeconfig_init_user_datablock(void);
+bool eeconfig_is_user_datablock_valid(void);
+uint32_t eeconfig_read_user_datablock(void *data, uint32_t offset, uint32_t length) __attribute__((nonnull));
+uint32_t eeconfig_update_user_datablock(const void *data, uint32_t offset, uint32_t length) __attribute__((nonnull));
+void eeconfig_init_user_datablock(void);
+# define eeconfig_read_user_datablock_field(__object, __field) eeconfig_read_user_datablock(&(__object.__field), offsetof(__object, __field), sizeof(__object.__field))
+# define eeconfig_update_user_datablock_field(__object, __field) eeconfig_update_user_datablock(&(__object.__field), offsetof(__object, __field), sizeof(__object.__field))
#endif // (EECONFIG_USER_DATA_SIZE) > 0
// Any "checked" debounce variant used requires implementation of:
// -- bool eeconfig_check_valid_##name(void)
// -- void eeconfig_post_flush_##name(void)
-#define EECONFIG_DEBOUNCE_HELPER_CHECKED(name, offset, config) \
+#define EECONFIG_DEBOUNCE_HELPER_CHECKED(name, config) \
static uint8_t dirty_##name = false; \
\
bool eeconfig_check_valid_##name(void); \
@@ -178,13 +170,13 @@ void eeconfig_init_user_datablock(void);
static inline void eeconfig_init_##name(void) { \
dirty_##name = true; \
if (eeconfig_check_valid_##name()) { \
- eeprom_read_block(&config, offset, sizeof(config)); \
+ eeconfig_read_##name(&config); \
dirty_##name = false; \
} \
} \
static inline void eeconfig_flush_##name(bool force) { \
if (force || dirty_##name) { \
- eeprom_update_block(&config, offset, sizeof(config)); \
+ eeconfig_update_##name(&config); \
eeconfig_post_flush_##name(); \
dirty_##name = false; \
} \
@@ -206,10 +198,10 @@ void eeconfig_init_user_datablock(void);
} \
}
-#define EECONFIG_DEBOUNCE_HELPER(name, offset, config) \
- EECONFIG_DEBOUNCE_HELPER_CHECKED(name, offset, config) \
- \
- bool eeconfig_check_valid_##name(void) { \
- return true; \
- } \
+#define EECONFIG_DEBOUNCE_HELPER(name, config) \
+ EECONFIG_DEBOUNCE_HELPER_CHECKED(name, config) \
+ \
+ bool eeconfig_check_valid_##name(void) { \
+ return true; \
+ } \
void eeconfig_post_flush_##name(void) {}
diff --git a/quantum/haptic.c b/quantum/haptic.c
index 81bad469b3..8a743480ff 100644
--- a/quantum/haptic.c
+++ b/quantum/haptic.c
@@ -67,7 +67,7 @@ void haptic_init(void) {
if (!eeconfig_is_enabled()) {
eeconfig_init();
}
- haptic_config.raw = eeconfig_read_haptic();
+ eeconfig_read_haptic(&haptic_config);
#ifdef HAPTIC_SOLENOID
solenoid_set_dwell(haptic_config.dwell);
#endif
@@ -122,13 +122,13 @@ void eeconfig_debug_haptic(void) {
void haptic_enable(void) {
set_haptic_config_enable(true);
dprintf("haptic_config.enable = %u\n", haptic_config.enable);
- eeconfig_update_haptic(haptic_config.raw);
+ eeconfig_update_haptic(&haptic_config);
}
void haptic_disable(void) {
set_haptic_config_enable(false);
dprintf("haptic_config.enable = %u\n", haptic_config.enable);
- eeconfig_update_haptic(haptic_config.raw);
+ eeconfig_update_haptic(&haptic_config);
}
void haptic_toggle(void) {
@@ -137,14 +137,14 @@ void haptic_toggle(void) {
} else {
haptic_enable();
}
- eeconfig_update_haptic(haptic_config.raw);
+ eeconfig_update_haptic(&haptic_config);
}
void haptic_feedback_toggle(void) {
haptic_config.feedback++;
if (haptic_config.feedback >= HAPTIC_FEEDBACK_MAX) haptic_config.feedback = KEY_PRESS;
dprintf("haptic_config.feedback = %u\n", !haptic_config.feedback);
- eeconfig_update_haptic(haptic_config.raw);
+ eeconfig_update_haptic(&haptic_config);
}
void haptic_buzz_toggle(void) {
@@ -225,26 +225,26 @@ void haptic_reset(void) {
haptic_config.dwell = 0;
haptic_config.buzz = 0;
#endif
- eeconfig_update_haptic(haptic_config.raw);
+ eeconfig_update_haptic(&haptic_config);
dprintf("haptic_config.feedback = %u\n", haptic_config.feedback);
dprintf("haptic_config.mode = %u\n", haptic_config.mode);
}
void haptic_set_feedback(uint8_t feedback) {
haptic_config.feedback = feedback;
- eeconfig_update_haptic(haptic_config.raw);
+ eeconfig_update_haptic(&haptic_config);
dprintf("haptic_config.feedback = %u\n", haptic_config.feedback);
}
void haptic_set_mode(uint8_t mode) {
haptic_config.mode = mode;
- eeconfig_update_haptic(haptic_config.raw);
+ eeconfig_update_haptic(&haptic_config);
dprintf("haptic_config.mode = %u\n", haptic_config.mode);
}
void haptic_set_amplitude(uint8_t amp) {
haptic_config.amplitude = amp;
- eeconfig_update_haptic(haptic_config.raw);
+ eeconfig_update_haptic(&haptic_config);
dprintf("haptic_config.amplitude = %u\n", haptic_config.amplitude);
#ifdef HAPTIC_DRV2605L
drv2605l_amplitude(amp);
@@ -253,13 +253,13 @@ void haptic_set_amplitude(uint8_t amp) {
void haptic_set_buzz(uint8_t buzz) {
haptic_config.buzz = buzz;
- eeconfig_update_haptic(haptic_config.raw);
+ eeconfig_update_haptic(&haptic_config);
dprintf("haptic_config.buzz = %u\n", haptic_config.buzz);
}
void haptic_set_dwell(uint8_t dwell) {
haptic_config.dwell = dwell;
- eeconfig_update_haptic(haptic_config.raw);
+ eeconfig_update_haptic(&haptic_config);
dprintf("haptic_config.dwell = %u\n", haptic_config.dwell);
}
@@ -291,7 +291,7 @@ uint8_t haptic_get_dwell(void) {
void haptic_enable_continuous(void) {
haptic_config.cont = 1;
dprintf("haptic_config.cont = %u\n", haptic_config.cont);
- eeconfig_update_haptic(haptic_config.raw);
+ eeconfig_update_haptic(&haptic_config);
#ifdef HAPTIC_DRV2605L
drv2605l_rtp_init();
#endif
@@ -300,7 +300,7 @@ void haptic_enable_continuous(void) {
void haptic_disable_continuous(void) {
haptic_config.cont = 0;
dprintf("haptic_config.cont = %u\n", haptic_config.cont);
- eeconfig_update_haptic(haptic_config.raw);
+ eeconfig_update_haptic(&haptic_config);
#ifdef HAPTIC_DRV2605L
drv2605l_write(DRV2605L_REG_MODE, 0x00);
#endif
diff --git a/quantum/haptic.h b/quantum/haptic.h
index b283d5d268..e27f546d40 100644
--- a/quantum/haptic.h
+++ b/quantum/haptic.h
@@ -28,7 +28,7 @@
#endif
/* EEPROM config settings */
-typedef union {
+typedef union haptic_config_t {
uint32_t raw;
struct {
bool enable : 1;
diff --git a/quantum/keyboard.c b/quantum/keyboard.c
index ad740de4b3..be51190a87 100644
--- a/quantum/keyboard.c
+++ b/quantum/keyboard.c
@@ -122,6 +122,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifdef SPLIT_KEYBOARD
# include "split_util.h"
#endif
+#ifdef BATTERY_DRIVER
+# include "battery.h"
+#endif
#ifdef BLUETOOTH_ENABLE
# include "bluetooth.h"
#endif
@@ -143,6 +146,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifdef LAYER_LOCK_ENABLE
# include "layer_lock.h"
#endif
+#ifdef CONNECTION_ENABLE
+# include "connection.h"
+#endif
static uint32_t last_input_modification_time = 0;
uint32_t last_input_activity_time(void) {
@@ -429,8 +435,8 @@ void quantum_init(void) {
}
/* init globals */
- debug_config.raw = eeconfig_read_debug();
- keymap_config.raw = eeconfig_read_keymap();
+ eeconfig_read_debug(&debug_config);
+ eeconfig_read_keymap(&keymap_config);
#ifdef BOOTMAGIC_ENABLE
bootmagic();
@@ -462,6 +468,9 @@ void keyboard_init(void) {
#endif
matrix_init();
quantum_init();
+#ifdef CONNECTION_ENABLE
+ connection_init();
+#endif
led_init_ports();
#ifdef BACKLIGHT_ENABLE
backlight_init_ports();
@@ -501,7 +510,7 @@ void keyboard_init(void) {
#endif
#if defined(NKRO_ENABLE) && defined(FORCE_NKRO)
keymap_config.nkro = 1;
- eeconfig_update_keymap(keymap_config.raw);
+ eeconfig_update_keymap(&keymap_config);
#endif
#ifdef DIP_SWITCH_ENABLE
dip_switch_init();
@@ -522,6 +531,9 @@ void keyboard_init(void) {
// init after split init
pointing_device_init();
#endif
+#ifdef BATTERY_DRIVER
+ battery_init();
+#endif
#ifdef BLUETOOTH_ENABLE
bluetooth_init();
#endif
@@ -782,6 +794,10 @@ void keyboard_task(void) {
joystick_task();
#endif
+#ifdef BATTERY_DRIVER
+ battery_task();
+#endif
+
#ifdef BLUETOOTH_ENABLE
bluetooth_task();
#endif
diff --git a/quantum/keycode_config.h b/quantum/keycode_config.h
index d1352c302e..529cd0e127 100644
--- a/quantum/keycode_config.h
+++ b/quantum/keycode_config.h
@@ -28,7 +28,7 @@ uint16_t keycode_config(uint16_t keycode);
uint8_t mod_config(uint8_t mod);
/* NOTE: Not portable. Bit field order depends on implementation */
-typedef union {
+typedef union keymap_config_t {
uint16_t raw;
struct {
bool swap_control_capslock : 1;
diff --git a/quantum/keycode_string.c b/quantum/keycode_string.c
new file mode 100644
index 0000000000..18044f2ef6
--- /dev/null
+++ b/quantum/keycode_string.c
@@ -0,0 +1,564 @@
+// Copyright 2024-2025 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "keycode_string.h"
+
+#include <string.h>
+#include "bitwise.h"
+#include "keycode.h"
+#include "progmem.h"
+#include "quantum_keycodes.h"
+#include "util.h"
+
+typedef int_fast8_t index_t;
+
+// clang-format off
+/** Packs a 7-char keycode name, ignoring the third char, as 3 words. */
+#define KEYCODE_NAME7(c0, c1, unused_c2, c3, c4, c5, c6) \
+ ((uint16_t)c0) | (((uint16_t)c1) << 8), \
+ ((uint16_t)c3) | (((uint16_t)c4) << 8), \
+ ((uint16_t)c5) | (((uint16_t)c6) << 8)
+
+/**
+ * @brief Names of some common keycodes.
+ *
+ * Each (keycode, name) entry is stored flat in 8 bytes in PROGMEM. Names in
+ * this table must be at most 7 chars long and have an underscore '_' for the
+ * third char. This underscore is assumed and not actually stored.
+ *
+ * To save memory, feature-specific key entries are ifdef'd to include them only
+ * when their feature is enabled.
+ */
+static const uint16_t common_names[] PROGMEM = {
+ KC_TRNS, KEYCODE_NAME7('K', 'C', '_', 'T', 'R', 'N', 'S'),
+ KC_ENT , KEYCODE_NAME7('K', 'C', '_', 'E', 'N', 'T', 0 ),
+ KC_ESC , KEYCODE_NAME7('K', 'C', '_', 'E', 'S', 'C', 0 ),
+ KC_BSPC, KEYCODE_NAME7('K', 'C', '_', 'B', 'S', 'P', 'C'),
+ KC_TAB , KEYCODE_NAME7('K', 'C', '_', 'T', 'A', 'B', 0 ),
+ KC_SPC , KEYCODE_NAME7('K', 'C', '_', 'S', 'P', 'C', 0 ),
+ KC_MINS, KEYCODE_NAME7('K', 'C', '_', 'M', 'I', 'N', 'S'),
+ KC_EQL , KEYCODE_NAME7('K', 'C', '_', 'E', 'Q', 'L', 0 ),
+ KC_LBRC, KEYCODE_NAME7('K', 'C', '_', 'L', 'B', 'R', 'C'),
+ KC_RBRC, KEYCODE_NAME7('K', 'C', '_', 'R', 'B', 'R', 'C'),
+ KC_BSLS, KEYCODE_NAME7('K', 'C', '_', 'B', 'S', 'L', 'S'),
+ KC_NUHS, KEYCODE_NAME7('K', 'C', '_', 'N', 'U', 'H', 'S'),
+ KC_SCLN, KEYCODE_NAME7('K', 'C', '_', 'S', 'C', 'L', 'N'),
+ KC_QUOT, KEYCODE_NAME7('K', 'C', '_', 'Q', 'U', 'O', 'T'),
+ KC_GRV , KEYCODE_NAME7('K', 'C', '_', 'G', 'R', 'V', 0 ),
+ KC_COMM, KEYCODE_NAME7('K', 'C', '_', 'C', 'O', 'M', 'M'),
+ KC_DOT , KEYCODE_NAME7('K', 'C', '_', 'D', 'O', 'T', 0 ),
+ KC_SLSH, KEYCODE_NAME7('K', 'C', '_', 'S', 'L', 'S', 'H'),
+ KC_CAPS, KEYCODE_NAME7('K', 'C', '_', 'C', 'A', 'P', 'S'),
+ KC_PSCR, KEYCODE_NAME7('K', 'C', '_', 'P', 'S', 'C', 'R'),
+ KC_PAUS, KEYCODE_NAME7('K', 'C', '_', 'P', 'A', 'U', 'S'),
+ KC_INS , KEYCODE_NAME7('K', 'C', '_', 'I', 'N', 'S', 0 ),
+ KC_HOME, KEYCODE_NAME7('K', 'C', '_', 'H', 'O', 'M', 'E'),
+ KC_PGUP, KEYCODE_NAME7('K', 'C', '_', 'P', 'G', 'U', 'P'),
+ KC_DEL , KEYCODE_NAME7('K', 'C', '_', 'D', 'E', 'L', 0 ),
+ KC_END , KEYCODE_NAME7('K', 'C', '_', 'E', 'N', 'D', 0 ),
+ KC_PGDN, KEYCODE_NAME7('K', 'C', '_', 'P', 'G', 'D', 'N'),
+ KC_RGHT, KEYCODE_NAME7('K', 'C', '_', 'R', 'G', 'H', 'T'),
+ KC_LEFT, KEYCODE_NAME7('K', 'C', '_', 'L', 'E', 'F', 'T'),
+ KC_DOWN, KEYCODE_NAME7('K', 'C', '_', 'D', 'O', 'W', 'N'),
+ KC_UP , KEYCODE_NAME7('K', 'C', '_', 'U', 'P', 0 , 0 ),
+ KC_NUBS, KEYCODE_NAME7('K', 'C', '_', 'N', 'U', 'B', 'S'),
+ KC_HYPR, KEYCODE_NAME7('K', 'C', '_', 'H', 'Y', 'P', 'R'),
+ KC_MEH , KEYCODE_NAME7('K', 'C', '_', 'M', 'E', 'H', 0 ),
+#ifdef EXTRAKEY_ENABLE
+ KC_WHOM, KEYCODE_NAME7('K', 'C', '_', 'W', 'H', 'O', 'M'),
+ KC_WBAK, KEYCODE_NAME7('K', 'C', '_', 'W', 'B', 'A', 'K'),
+ KC_WFWD, KEYCODE_NAME7('K', 'C', '_', 'W', 'F', 'W', 'D'),
+ KC_WSTP, KEYCODE_NAME7('K', 'C', '_', 'W', 'S', 'T', 'P'),
+ KC_WREF, KEYCODE_NAME7('K', 'C', '_', 'W', 'R', 'E', 'F'),
+ KC_MNXT, KEYCODE_NAME7('K', 'C', '_', 'M', 'N', 'X', 'T'),
+ KC_MPRV, KEYCODE_NAME7('K', 'C', '_', 'M', 'P', 'R', 'V'),
+ KC_MPLY, KEYCODE_NAME7('K', 'C', '_', 'M', 'P', 'L', 'Y'),
+ KC_MUTE, KEYCODE_NAME7('K', 'C', '_', 'M', 'U', 'T', 'E'),
+ KC_VOLU, KEYCODE_NAME7('K', 'C', '_', 'V', 'O', 'L', 'U'),
+ KC_VOLD, KEYCODE_NAME7('K', 'C', '_', 'V', 'O', 'L', 'D'),
+#endif // EXTRAKEY_ENABLE
+#ifdef MOUSEKEY_ENABLE
+ MS_LEFT, KEYCODE_NAME7('M', 'S', '_', 'L', 'E', 'F', 'T'),
+ MS_RGHT, KEYCODE_NAME7('M', 'S', '_', 'R', 'G', 'H', 'T'),
+ MS_UP , KEYCODE_NAME7('M', 'S', '_', 'U', 'P', 0 , 0 ),
+ MS_DOWN, KEYCODE_NAME7('M', 'S', '_', 'D', 'O', 'W', 'N'),
+ MS_WHLL, KEYCODE_NAME7('M', 'S', '_', 'W', 'H', 'L', 'L'),
+ MS_WHLR, KEYCODE_NAME7('M', 'S', '_', 'W', 'H', 'L', 'R'),
+ MS_WHLU, KEYCODE_NAME7('M', 'S', '_', 'W', 'H', 'L', 'U'),
+ MS_WHLD, KEYCODE_NAME7('M', 'S', '_', 'W', 'H', 'L', 'D'),
+#endif // MOUSEKEY_ENABLE
+#ifdef SWAP_HANDS_ENABLE
+ SH_ON , KEYCODE_NAME7('S', 'H', '_', 'O', 'N', 0 , 0 ),
+ SH_OFF , KEYCODE_NAME7('S', 'H', '_', 'O', 'F', 'F', 0 ),
+ SH_MON , KEYCODE_NAME7('S', 'H', '_', 'M', 'O', 'N', 0 ),
+ SH_MOFF, KEYCODE_NAME7('S', 'H', '_', 'M', 'O', 'F', 'F'),
+ SH_TOGG, KEYCODE_NAME7('S', 'H', '_', 'T', 'O', 'G', 'G'),
+ SH_TT , KEYCODE_NAME7('S', 'H', '_', 'T', 'T', 0 , 0 ),
+# if !defined(NO_ACTION_ONESHOT)
+ SH_OS , KEYCODE_NAME7('S', 'H', '_', 'O', 'S', 0 , 0 ),
+# endif // !defined(NO_ACTION_ONESHOT)
+#endif // SWAP_HANDS_ENABLE
+#ifdef LEADER_ENABLE
+ QK_LEAD, KEYCODE_NAME7('Q', 'K', '_', 'L', 'E', 'A', 'D'),
+#endif // LEADER_ENABLE
+#ifdef KEY_LOCK_ENABLE
+ QK_LOCK, KEYCODE_NAME7('Q', 'K', '_', 'L', 'O', 'C', 'K'),
+#endif // KEY_LOCK_ENABLE
+#ifdef TRI_LAYER_ENABLE
+ TL_LOWR, KEYCODE_NAME7('T', 'L', '_', 'L', 'O', 'W', 'R'),
+ TL_UPPR, KEYCODE_NAME7('T', 'L', '_', 'U', 'P', 'P', 'R'),
+#endif // TRI_LAYER_ENABLE
+#ifdef GRAVE_ESC_ENABLE
+ QK_GESC, KEYCODE_NAME7('Q', 'K', '_', 'G', 'E', 'S', 'C'),
+#endif // GRAVE_ESC_ENABLE
+#ifdef CAPS_WORD_ENABLE
+ CW_TOGG, KEYCODE_NAME7('C', 'W', '_', 'T', 'O', 'G', 'G'),
+#endif // CAPS_WORD_ENABLE
+#ifdef SECURE_ENABLE
+ SE_LOCK, KEYCODE_NAME7('S', 'E', '_', 'L', 'O', 'C', 'K'),
+ SE_UNLK, KEYCODE_NAME7('S', 'E', '_', 'U', 'N', 'L', 'K'),
+ SE_TOGG, KEYCODE_NAME7('S', 'E', '_', 'T', 'O', 'G', 'G'),
+ SE_REQ , KEYCODE_NAME7('S', 'E', '_', 'R', 'E', 'Q', 0 ),
+#endif // SECURE_ENABLE
+#ifdef LAYER_LOCK_ENABLE
+ QK_LLCK, KEYCODE_NAME7('Q', 'K', '_', 'L', 'L', 'C', 'K'),
+#endif // LAYER_LOCK_ENABLE
+ EE_CLR , KEYCODE_NAME7('E', 'E', '_', 'C', 'L', 'R', 0 ),
+ QK_BOOT, KEYCODE_NAME7('Q', 'K', '_', 'B', 'O', 'O', 'T'),
+ DB_TOGG, KEYCODE_NAME7('D', 'B', '_', 'T', 'O', 'G', 'G'),
+};
+// clang-format on
+
+/** Users can override this to define names of additional keycodes. */
+__attribute__((weak)) const keycode_string_name_t* keycode_string_names_data_user = NULL;
+__attribute__((weak)) uint16_t keycode_string_names_size_user = 0;
+/** Keyboard vendors can override this to define names of additional keycodes. */
+__attribute__((weak)) const keycode_string_name_t* keycode_string_names_data_kb = NULL;
+__attribute__((weak)) uint16_t keycode_string_names_size_kb = 0;
+/** Names of the 4 mods on each hand. */
+static const char mod_names[] PROGMEM = "CTL\0SFT\0ALT\0GUI";
+/** Internal buffer for holding a stringified keycode. */
+static char buffer[32];
+#define BUFFER_MAX_LEN (sizeof(buffer) - 1)
+static index_t buffer_len;
+
+/** Finds the name of a keycode in `common_names` or returns NULL. */
+static const char* search_common_names(uint16_t keycode) {
+ static uint8_t buffer[8];
+
+ for (int_fast16_t offset = 0; offset < ARRAY_SIZE(common_names); offset += 4) {
+ if (keycode == pgm_read_word(common_names + offset)) {
+ const uint16_t w0 = pgm_read_word(common_names + offset + 1);
+ const uint16_t w1 = pgm_read_word(common_names + offset + 2);
+ const uint16_t w2 = pgm_read_word(common_names + offset + 3);
+ buffer[0] = (uint8_t)w0;
+ buffer[1] = (uint8_t)(w0 >> 8);
+ buffer[2] = '_';
+ buffer[3] = (uint8_t)w1;
+ buffer[4] = (uint8_t)(w1 >> 8);
+ buffer[5] = (uint8_t)w2;
+ buffer[6] = (uint8_t)(w2 >> 8);
+ buffer[7] = 0;
+ return (const char*)buffer;
+ }
+ }
+
+ return NULL;
+}
+
+/**
+ * @brief Finds the name of a keycode in table or returns NULL.
+ *
+ * @param data Pointer to table to be searched.
+ * @param size Numer of entries in the table.
+ * @return Name string for the keycode, or NULL if not found.
+ */
+static const char* search_table(const keycode_string_name_t* data, uint16_t size, uint16_t keycode) {
+ if (data != NULL) {
+ for (uint16_t i = 0; i < size; ++i) {
+ if (data[i].keycode == keycode) {
+ return data[i].name;
+ }
+ }
+ }
+ return NULL;
+}
+
+/** Formats `number` in `base`, either 10 or 16. */
+static char* number_string(uint16_t number, int8_t base) {
+ static char result[7];
+ result[sizeof(result) - 1] = '\0';
+ index_t i = sizeof(result) - 1;
+ do {
+ const uint8_t digit = number % base;
+ number /= base;
+ result[--i] = (digit < 10) ? (char)(digit + UINT8_C('0')) : (char)(digit + (UINT8_C('A') - 10));
+ } while (number > 0 && i > 0);
+
+ if (base == 16 && i >= 2) {
+ result[--i] = 'x';
+ result[--i] = '0';
+ }
+ return result + i;
+}
+
+/** Appends `str` to `buffer`, truncating if the result would overflow. */
+static void append(const char* str) {
+ char* dest = buffer + buffer_len;
+ index_t i;
+ for (i = 0; buffer_len + i < BUFFER_MAX_LEN && str[i]; ++i) {
+ dest[i] = str[i];
+ }
+ buffer_len += i;
+ buffer[buffer_len] = '\0';
+}
+
+/** Same as append(), but where `str` is a PROGMEM string. */
+static void append_P(const char* str) {
+ char* dest = buffer + buffer_len;
+ index_t i;
+ for (i = 0; buffer_len + i < BUFFER_MAX_LEN; ++i) {
+ const char c = pgm_read_byte(&str[i]);
+ if (c == '\0') {
+ break;
+ }
+ dest[i] = c;
+ }
+ buffer_len += i;
+ buffer[buffer_len] = '\0';
+}
+
+/** Appends a single char to `buffer` if there is space. */
+static void append_char(char c) {
+ if (buffer_len < BUFFER_MAX_LEN) {
+ buffer[buffer_len] = c;
+ buffer[++buffer_len] = '\0';
+ }
+}
+
+/** Formats `number` in `base`, either 10 or 16, and appends it to `buffer`. */
+static void append_number(uint16_t number, int8_t base) {
+ append(number_string(number, base));
+}
+
+/** Stringifies 5-bit mods and appends it to `buffer`. */
+static void append_5_bit_mods(uint8_t mods) {
+ const bool is_rhs = mods > 15;
+ const uint8_t csag = mods & 15;
+ if (csag != 0 && (csag & (csag - 1)) == 0) { // One mod is set.
+ append_P(PSTR("MOD_"));
+ append_char(is_rhs ? 'R' : 'L');
+ append_P(&mod_names[4 * biton(csag)]);
+ } else { // Fallback: write the mod as a hex value.
+ append_number(mods, 16);
+ }
+}
+
+/**
+ * @brief Writes a keycode of the format `name` + "(" + `param` + ")".
+ * @note `name` is a PROGMEM string, `param` is not.
+ */
+static void append_unary_keycode(const char* name, const char* param) {
+ append_P(name);
+ append_char('(');
+ append(param);
+ append_char(')');
+}
+
+/**
+ * @brief Writes a keycode of the format `name` + `number`.
+ * @note `name` is a PROGMEM string.
+ */
+static void append_numbered_keycode(const char* name, uint16_t number) {
+ append_P(name);
+ append_number(number, 10);
+}
+
+/** Stringifies `keycode` and appends it to `buffer`. */
+static void append_keycode(uint16_t keycode) {
+ // In case there is overlap among tables, search `keycode_string_names_user`
+ // first so that it takes precedence.
+ const char* keycode_name = search_table(keycode_string_names_data_user, keycode_string_names_size_user, keycode);
+ if (keycode_name) {
+ append(keycode_name);
+ return;
+ }
+ keycode_name = search_table(keycode_string_names_data_kb, keycode_string_names_size_kb, keycode);
+ if (keycode_name) {
+ append(keycode_name);
+ return;
+ }
+ keycode_name = search_common_names(keycode);
+ if (keycode_name) {
+ append(keycode_name);
+ return;
+ }
+
+ if (keycode <= 255) { // Basic keycodes.
+ switch (keycode) {
+ // Modifiers KC_LSFT, KC_RCTL, etc.
+ case MODIFIER_KEYCODE_RANGE: {
+ const uint8_t i = keycode - KC_LCTL;
+ const bool is_rhs = i > 3;
+ append_P(PSTR("KC_"));
+ append_char(is_rhs ? 'R' : 'L');
+ append_P(&mod_names[4 * (i & 3)]);
+ }
+ return;
+
+ // Letters A-Z.
+ case KC_A ... KC_Z:
+ append_P(PSTR("KC_"));
+ append_char((char)(keycode + (UINT8_C('A') - KC_A)));
+ return;
+
+ // Digits 0-9 (NOTE: Unlike the ASCII order, KC_0 comes *after* KC_9.)
+ case KC_1 ... KC_0:
+ append_numbered_keycode(PSTR("KC_"), (keycode - (KC_1 - 1)) % 10);
+ return;
+
+ // Keypad digits.
+ case KC_KP_1 ... KC_KP_0:
+ append_numbered_keycode(PSTR("KC_KP_"), (keycode - (KC_KP_1 - 1)) % 10);
+ return;
+
+ // Function keys. F1-F12 and F13-F24 are coded in separate ranges.
+ case KC_F1 ... KC_F12:
+ append_numbered_keycode(PSTR("KC_F"), keycode - (KC_F1 - 1));
+ return;
+
+ case KC_F13 ... KC_F24:
+ append_numbered_keycode(PSTR("KC_F"), keycode - (KC_F13 - 13));
+ return;
+ }
+ }
+
+ // clang-format off
+ switch (keycode) {
+ // A modified keycode, like S(KC_1) for Shift + 1 = !. This implementation
+ // only covers modified keycodes where one modifier is applied, e.g. a
+ // Ctrl + Shift + kc or Hyper + kc keycode is not formatted.
+ case QK_MODS ... QK_MODS_MAX: {
+ uint8_t mods = QK_MODS_GET_MODS(keycode);
+ const bool is_rhs = mods > 15;
+ mods &= 15;
+ if (mods != 0 && (mods & (mods - 1)) == 0) { // One mod is set.
+ const char* name = &mod_names[4 * biton(mods)];
+ if (is_rhs) {
+ append_char('R');
+ append_P(name);
+ } else {
+ append_char(pgm_read_byte(&name[0]));
+ }
+ append_char('(');
+ append_keycode(QK_MODS_GET_BASIC_KEYCODE(keycode));
+ append_char(')');
+ return;
+ }
+ } break;
+
+#if !defined(NO_ACTION_ONESHOT)
+ case QK_ONE_SHOT_MOD ... QK_ONE_SHOT_MOD_MAX: // One-shot mod OSM(mod) key.
+ append_P(PSTR("OSM("));
+ append_5_bit_mods(QK_ONE_SHOT_MOD_GET_MODS(keycode));
+ append_char(')');
+ return;
+#endif // !defined(NO_ACTION_ONESHOT)
+
+ // Various layer switch keys.
+ case QK_LAYER_TAP ... QK_LAYER_TAP_MAX: // Layer-tap LT(layer,kc) key.
+ append_P(PSTR("LT("));
+ append_number(QK_LAYER_TAP_GET_LAYER(keycode), 10);
+ append_char(',');
+ append_keycode(QK_LAYER_TAP_GET_TAP_KEYCODE(keycode));
+ append_char(')');
+ return;
+
+ case QK_LAYER_MOD ... QK_LAYER_MOD_MAX: // LM(layer,mod) key.
+ append_P(PSTR("LM("));
+ append_number(QK_LAYER_MOD_GET_LAYER(keycode), 10);
+ append_char(',');
+ append_5_bit_mods(QK_LAYER_MOD_GET_MODS(keycode));
+ append_char(')');
+ return;
+
+ case QK_TO ... QK_TO_MAX: // TO(layer) key.
+ append_unary_keycode(PSTR("TO"), number_string(QK_TO_GET_LAYER(keycode), 10));
+ return;
+
+ case QK_MOMENTARY ... QK_MOMENTARY_MAX: // MO(layer) key.
+ append_unary_keycode(PSTR("MO"), number_string(QK_MOMENTARY_GET_LAYER(keycode), 10));
+ return;
+
+ case QK_DEF_LAYER ... QK_DEF_LAYER_MAX: // DF(layer) key.
+ append_unary_keycode(PSTR("DF"), number_string(QK_DEF_LAYER_GET_LAYER(keycode), 10));
+ return;
+
+ case QK_TOGGLE_LAYER ... QK_TOGGLE_LAYER_MAX: // TG(layer) key.
+ append_unary_keycode(PSTR("TG"), number_string(QK_TOGGLE_LAYER_GET_LAYER(keycode), 10));
+ return;
+
+#if !defined(NO_ACTION_ONESHOT)
+ case QK_ONE_SHOT_LAYER ... QK_ONE_SHOT_LAYER_MAX: // OSL(layer) key.
+ append_unary_keycode(PSTR("OSL"), number_string(QK_ONE_SHOT_LAYER_GET_LAYER(keycode), 10));
+ return;
+#endif // !defined(NO_ACTION_ONESHOT)
+
+ case QK_LAYER_TAP_TOGGLE ... QK_LAYER_TAP_TOGGLE_MAX: // TT(layer) key.
+ append_unary_keycode(PSTR("TT"), number_string(QK_LAYER_TAP_TOGGLE_GET_LAYER(keycode), 10));
+ return;
+
+ case QK_PERSISTENT_DEF_LAYER ... QK_PERSISTENT_DEF_LAYER_MAX: // PDF(layer) key.
+ append_unary_keycode(PSTR("PDF"), number_string(QK_PERSISTENT_DEF_LAYER_GET_LAYER(keycode), 10));
+ return;
+
+ // Mod-tap MT(mod,kc) key. This implementation formats the MT keys where
+ // one modifier is applied. For MT keys with multiple modifiers, the mod
+ // arg is written numerically as a hex code.
+ case QK_MOD_TAP ... QK_MOD_TAP_MAX: {
+ uint8_t mods = QK_MOD_TAP_GET_MODS(keycode);
+ const bool is_rhs = mods > 15;
+ const uint8_t csag = mods & 15;
+ if (csag != 0 && (csag & (csag - 1)) == 0) { // One mod is set.
+ append_char(is_rhs ? 'R' : 'L');
+ append_P(&mod_names[4 * biton(csag)]);
+ append_P(PSTR("_T("));
+ } else if (mods == MOD_HYPR) {
+ append_P(PSTR("HYPR_T("));
+ } else if (mods == MOD_MEH) {
+ append_P(PSTR("MEH_T("));
+ } else {
+ append_P(PSTR("MT("));
+ append_number(mods, 16);
+ append_char(',');
+ }
+ append_keycode(QK_MOD_TAP_GET_TAP_KEYCODE(keycode));
+ append_char(')');
+ } return;
+
+ case QK_TAP_DANCE ... QK_TAP_DANCE_MAX: // Tap dance TD(i) key.
+ append_unary_keycode(PSTR("TD"), number_string(QK_TAP_DANCE_GET_INDEX(keycode), 10));
+ return;
+
+#ifdef UNICODE_ENABLE
+ case QK_UNICODE ... QK_UNICODE_MAX: // Unicode UC(codepoint) key.
+ append_unary_keycode(PSTR("UC"), number_string(QK_UNICODE_GET_CODE_POINT(keycode), 16));
+ return;
+#elif defined(UNICODEMAP_ENABLE)
+ case QK_UNICODEMAP ... QK_UNICODEMAP_MAX: // Unicode Map UM(i) key.
+ append_unary_keycode(PSTR("UM"), number_string(QK_UNICODEMAP_GET_INDEX(keycode), 10));
+ return;
+
+ case QK_UNICODEMAP_PAIR ... QK_UNICODEMAP_PAIR_MAX: { // UP(i,j) key.
+ const uint8_t i = QK_UNICODEMAP_PAIR_GET_UNSHIFTED_INDEX(keycode);
+ const uint8_t j = QK_UNICODEMAP_PAIR_GET_SHIFTED_INDEX(keycode);
+ append_P(PSTR("UP("));
+ append_number(i, 10);
+ append_char(',');
+ append_number(j, 10);
+ append_char(')');
+ } return;
+#endif
+#ifdef MOUSEKEY_ENABLE
+ case MS_BTN1 ... MS_BTN8: // Mouse button keycode.
+ append_numbered_keycode(PSTR("MS_BTN"), keycode - (MS_BTN1 - 1));
+ return;
+#endif // MOUSEKEY_ENABLE
+#ifdef SWAP_HANDS_ENABLE
+ case QK_SWAP_HANDS ... QK_SWAP_HANDS_MAX: // Swap Hands SH_T(kc) key.
+ if (!IS_SWAP_HANDS_KEYCODE(keycode)) {
+ append_P(PSTR("SH_T("));
+ append_keycode(QK_SWAP_HANDS_GET_TAP_KEYCODE(keycode));
+ append_char(')');
+ return;
+ }
+ break;
+#endif // SWAP_HANDS_ENABLE
+#ifdef JOYSTICK_ENABLE
+ case JOYSTICK_KEYCODE_RANGE: // Joystick JS_ key.
+ append_numbered_keycode(PSTR("JS_"), keycode - JS_0);
+ return;
+#endif // JOYSTICK_ENABLE
+#ifdef PROGRAMMABLE_BUTTON_ENABLE
+ case PROGRAMMABLE_BUTTON_KEYCODE_RANGE: // Programmable button PB_ key.
+ append_numbered_keycode(PSTR("PB_"), keycode - (PB_1 - 1));
+ return;
+#endif // PROGRAMMABLE_BUTTON_ENABLE
+
+ case MACRO_KEYCODE_RANGE: // Macro range MC_ keycode.
+ append_numbered_keycode(PSTR("MC_"), keycode - MC_0);
+ return;
+
+ case KB_KEYCODE_RANGE: // Keyboard range keycode.
+ append_numbered_keycode(PSTR("QK_KB_"), keycode - QK_KB_0);
+ return;
+
+ case USER_KEYCODE_RANGE: // User range keycode.
+ append_numbered_keycode(PSTR("QK_USER_"), keycode - QK_USER_0);
+ return;
+
+ // It would take a nontrivial amount of string data to cover some
+ // feature-specific keycodes, such as those for MIDI and lighting. As a
+ // fallback while still providing some information, we stringify
+ // remaining keys in known code ranges as "QK_<feature>+<number>".
+#ifdef MAGIC_ENABLE
+ case MAGIC_KEYCODE_RANGE:
+ append_numbered_keycode(PSTR("QK_MAGIC+"), keycode - QK_MAGIC);
+ return;
+#endif // MAGIC_ENABLE
+#ifdef MIDI_ENABLE
+ case MIDI_KEYCODE_RANGE:
+ append_numbered_keycode(PSTR("QK_MIDI+"), keycode - QK_MIDI);
+ return;
+#endif // MIDI_ENABLE
+#ifdef SEQUENCER_ENABLE
+ case SEQUENCER_KEYCODE_RANGE:
+ append_numbered_keycode(PSTR("QK_SEQUENCER+"), keycode - QK_SEQUENCER);
+ return;
+#endif // SEQUENCER_ENABLE
+#ifdef AUDIO_ENABLE
+ case AUDIO_KEYCODE_RANGE:
+ append_numbered_keycode(PSTR("QK_AUDIO+"), keycode - QK_AUDIO);
+ return;
+#endif // AUDIO_ENABLE
+#if defined(BACKLIGHT_ENABLE) || defined(LED_MATRIX_ENABLE) || defined(RGBLIGHT_ENABLED) || defined(RGB_MATRIX_ENABLE) // Lighting-related features.
+ case QK_LIGHTING ... QK_LIGHTING_MAX:
+ append_numbered_keycode(PSTR("QK_LIGHTING+"), keycode - QK_LIGHTING);
+ return;
+#endif // defined(BACKLIGHT_ENABLE) || defined(LED_MATRIX_ENABLE) || defined(RGBLIGHT_ENABLED) || defined(RGB_MATRIX_ENABLE)
+#ifdef STENO_ENABLE
+ case STENO_KEYCODE_RANGE:
+ append_numbered_keycode(PSTR("QK_STENO+"), keycode - QK_STENO);
+ return;
+#endif // AUDIO_ENABLE
+#ifdef BLUETOOTH_ENABLE
+ case CONNECTION_KEYCODE_RANGE:
+ append_numbered_keycode(PSTR("QK_CONNECTION+"), keycode - QK_CONNECTION);
+ return;
+#endif // BLUETOOTH_ENABLE
+ case QUANTUM_KEYCODE_RANGE:
+ append_numbered_keycode(PSTR("QK_QUANTUM+"), keycode - QK_QUANTUM);
+ return;
+ }
+ // clang-format on
+
+ append_number(keycode, 16); // Fallback: write keycode as hex value.
+}
+
+const char* get_keycode_string(uint16_t keycode) {
+ buffer_len = 0;
+ buffer[0] = '\0';
+ append_keycode(keycode);
+ return buffer;
+}
diff --git a/quantum/keycode_string.h b/quantum/keycode_string.h
new file mode 100644
index 0000000000..1315613a80
--- /dev/null
+++ b/quantum/keycode_string.h
@@ -0,0 +1,134 @@
+// Copyright 2024-2025 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#pragma once
+
+#include <stdint.h>
+
+#if KEYCODE_STRING_ENABLE
+
+/**
+ * @brief Formats a QMK keycode as a human-readable string.
+ *
+ * Given a keycode, like `KC_A`, this function returns a formatted string, like
+ * "KC_A". This is useful for debugging and diagnostics so that keys are more
+ * easily identified than they would be by raw numerical codes.
+ *
+ * @note The returned char* string should be used right away. The string memory
+ * is reused and will be overwritten by the next call to `keycode_string()`.
+ *
+ * Many common QMK keycodes are understood by this function, but not all.
+ * Recognized keycodes include:
+ *
+ * - Most basic keycodes, including letters `KC_A` - `KC_Z`, digits `KC_0` -
+ * `KC_9`, function keys `KC_F1` - `KC_F24`, and modifiers like `KC_LSFT`.
+ *
+ * - Modified basic keycodes, like `S(KC_1)` (Shift + 1 = !).
+ *
+ * - `MO`, `TO`, `TG`, `OSL`, `LM(layer,mod)`, `LT(layer,kc)` layer switches.
+ *
+ * - One-shot mod `OSM(mod)` keycodes.
+ *
+ * - Mod-tap `MT(mod, kc)` keycodes.
+ *
+ * - Tap dance keycodes `TD(i)`.
+ *
+ * - Swap hands keycodes `SH_T(kc)`, `SH_TOGG`, etc.
+ *
+ * - Joystick keycodes `JS_n`.
+ *
+ * - Programmable button keycodes `PB_n`.
+ *
+ * - Unicode `UC(codepoint)` and Unicode Map `UM(i)` and `UP(i,j)` keycodes.
+ *
+ * - Keyboard range keycodes `QK_KB_*`.
+ *
+ * - User range (SAFE_RANGE) keycodes `QK_USER_*`.
+ *
+ * Keycodes involving mods like `OSM`, `LM`, `MT` are fully supported only where
+ * a single mod is applied.
+ *
+ * Unrecognized keycodes are printed numerically as hex values like `0x1ABC`.
+ *
+ * Optionally, use `keycode_string_names_user` or `keycode_string_names_kb` to
+ * define names for additional keycodes or override how any of the above are
+ * formatted.
+ *
+ * @param keycode QMK keycode.
+ * @return Stringified keycode.
+ */
+const char* get_keycode_string(uint16_t keycode);
+
+/** Defines a human-readable name for a keycode. */
+typedef struct {
+ uint16_t keycode;
+ const char* name;
+} keycode_string_name_t;
+
+// clang-format off
+/**
+ * @brief Defines names for additional keycodes for `get_keycode_string()`.
+ *
+ * Define `KEYCODE_STRING_NAMES_USER` in your keymap.c to add names for
+ * additional keycodes to `keycode_string()`. This table may also be used to
+ * override how `keycode_string()` formats a keycode. For example, supposing
+ * keymap.c defines `MYMACRO1` and `MYMACRO2` as custom keycodes:
+ *
+ * KEYCODE_STRING_NAMES_USER(
+ * KEYCODE_STRING_NAME(MYMACRO1),
+ * KEYCODE_STRING_NAME(MYMACRO2),
+ * KEYCODE_STRING_NAME(KC_EXLM),
+ * );
+ *
+ * The above defines names for `MYMACRO1` and `MYMACRO2`, and overrides
+ * `KC_EXLM` to format as "KC_EXLM" instead of the default "S(KC_1)".
+ */
+# define KEYCODE_STRING_NAMES_USER(...) \
+ static const keycode_string_name_t keycode_string_names_user[] = {__VA_ARGS__}; \
+ uint16_t keycode_string_names_size_user = \
+ sizeof(keycode_string_names_user) / sizeof(keycode_string_name_t); \
+ const keycode_string_name_t* keycode_string_names_data_user = \
+ keycode_string_names_user
+
+/** Same as above, but defines keycode string names at the keyboard level. */
+# define KEYCODE_STRING_NAMES_KB(...) \
+ static const keycode_string_name_t keycode_string_names_kb[] = {__VA_ARGS__}; \
+ uint16_t keycode_string_names_size_kb = \
+ sizeof(keycode_string_names_kb) / sizeof(keycode_string_name_t); \
+ const keycode_string_name_t* keycode_string_names_data_kb = \
+ keycode_string_names_kb
+
+/** Helper to define a keycode_string_name_t. */
+# define KEYCODE_STRING_NAME(kc) \
+ { (kc), #kc }
+// clang-format on
+
+extern const keycode_string_name_t* keycode_string_names_data_user;
+extern uint16_t keycode_string_names_size_user;
+extern const keycode_string_name_t* keycode_string_names_data_kb;
+extern uint16_t keycode_string_names_size_kb;
+
+#else
+
+// When keycode_string is disabled, fall back to printing keycodes numerically
+// as decimal values, using get_u16_str() from quantum.c.
+# define get_keycode_string(kc) get_u16_str(kc, ' ')
+
+const char* get_u16_str(uint16_t curr_num, char curr_pad);
+
+# define KEYCODE_STRING_NAMES_USER(...)
+# define KEYCODE_STRING_NAMES_KB(...)
+# define KEYCODE_STRING_NAME(kc)
+
+#endif // KEYCODE_STRING_ENABLE
diff --git a/quantum/led_matrix/led_matrix.c b/quantum/led_matrix/led_matrix.c
index 58263c62e3..f9d76e2776 100644
--- a/quantum/led_matrix/led_matrix.c
+++ b/quantum/led_matrix/led_matrix.c
@@ -19,7 +19,6 @@
#include "led_matrix.h"
#include "progmem.h"
-#include "eeprom.h"
#include "eeconfig.h"
#include "keyboard.h"
#include "sync_timer.h"
@@ -86,9 +85,9 @@ static last_hit_t last_hit_buffer;
const uint8_t k_led_matrix_split[2] = LED_MATRIX_SPLIT;
#endif
-EECONFIG_DEBOUNCE_HELPER(led_matrix, EECONFIG_LED_MATRIX, led_matrix_eeconfig);
+EECONFIG_DEBOUNCE_HELPER(led_matrix, led_matrix_eeconfig);
-void eeconfig_update_led_matrix(void) {
+void eeconfig_force_flush_led_matrix(void) {
eeconfig_flush_led_matrix(true);
}
diff --git a/quantum/led_matrix/led_matrix.h b/quantum/led_matrix/led_matrix.h
index a3468a2003..0006d487e9 100644
--- a/quantum/led_matrix/led_matrix.h
+++ b/quantum/led_matrix/led_matrix.h
@@ -115,7 +115,7 @@ enum led_matrix_effects {
};
void eeconfig_update_led_matrix_default(void);
-void eeconfig_update_led_matrix(void);
+void eeconfig_force_flush_led_matrix(void);
void eeconfig_debug_led_matrix(void);
uint8_t led_matrix_map_row_column_to_led_kb(uint8_t row, uint8_t column, uint8_t *led_i);
diff --git a/quantum/led_matrix/led_matrix_types.h b/quantum/led_matrix/led_matrix_types.h
index 5a516ceb10..810420f46f 100644
--- a/quantum/led_matrix/led_matrix_types.h
+++ b/quantum/led_matrix/led_matrix_types.h
@@ -71,7 +71,7 @@ typedef struct PACKED {
uint8_t flags[LED_MATRIX_LED_COUNT];
} led_config_t;
-typedef union {
+typedef union led_eeconfig_t {
uint32_t raw;
struct PACKED {
uint8_t enable : 2;
diff --git a/quantum/logging/debug.h b/quantum/logging/debug.h
index b0d9b9a10e..6675680ec7 100644
--- a/quantum/logging/debug.h
+++ b/quantum/logging/debug.h
@@ -28,7 +28,7 @@ extern "C" {
/*
* Debug output control
*/
-typedef union {
+typedef union debug_config_t {
struct {
bool enable : 1;
bool matrix : 1;
diff --git a/quantum/nvm/eeprom/nvm_dynamic_keymap.c b/quantum/nvm/eeprom/nvm_dynamic_keymap.c
new file mode 100644
index 0000000000..5f514acc1a
--- /dev/null
+++ b/quantum/nvm/eeprom/nvm_dynamic_keymap.c
@@ -0,0 +1,193 @@
+// Copyright 2024 Nick Brassel (@tzarc)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "keycodes.h"
+#include "eeprom.h"
+#include "dynamic_keymap.h"
+#include "nvm_dynamic_keymap.h"
+#include "nvm_eeprom_eeconfig_internal.h"
+#include "nvm_eeprom_via_internal.h"
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+#ifdef ENCODER_ENABLE
+# include "encoder.h"
+#endif
+
+#ifdef VIA_ENABLE
+# include "via.h"
+# define DYNAMIC_KEYMAP_EEPROM_START (VIA_EEPROM_CONFIG_END)
+#else
+# define DYNAMIC_KEYMAP_EEPROM_START (EECONFIG_SIZE)
+#endif
+
+#ifndef DYNAMIC_KEYMAP_EEPROM_MAX_ADDR
+# define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR (TOTAL_EEPROM_BYTE_COUNT - 1)
+#endif
+
+_Static_assert(DYNAMIC_KEYMAP_EEPROM_MAX_ADDR <= (TOTAL_EEPROM_BYTE_COUNT - 1), "DYNAMIC_KEYMAP_EEPROM_MAX_ADDR is configured to use more space than what is available for the selected EEPROM driver");
+
+// Due to usage of uint16_t check for max 65535
+_Static_assert(DYNAMIC_KEYMAP_EEPROM_MAX_ADDR <= 65535, "DYNAMIC_KEYMAP_EEPROM_MAX_ADDR must be less than 65536");
+
+// If DYNAMIC_KEYMAP_EEPROM_ADDR not explicitly defined in config.h,
+#ifndef DYNAMIC_KEYMAP_EEPROM_ADDR
+# define DYNAMIC_KEYMAP_EEPROM_ADDR DYNAMIC_KEYMAP_EEPROM_START
+#endif
+
+// Dynamic encoders starts after dynamic keymaps
+#ifndef DYNAMIC_KEYMAP_ENCODER_EEPROM_ADDR
+# define DYNAMIC_KEYMAP_ENCODER_EEPROM_ADDR (DYNAMIC_KEYMAP_EEPROM_ADDR + (DYNAMIC_KEYMAP_LAYER_COUNT * MATRIX_ROWS * MATRIX_COLS * 2))
+#endif
+
+// Dynamic macro starts after dynamic encoders, but only when using ENCODER_MAP
+#ifdef ENCODER_MAP_ENABLE
+# ifndef DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR
+# define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR (DYNAMIC_KEYMAP_ENCODER_EEPROM_ADDR + (DYNAMIC_KEYMAP_LAYER_COUNT * NUM_ENCODERS * 2 * 2))
+# endif // DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR
+#else // ENCODER_MAP_ENABLE
+# ifndef DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR
+# define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR (DYNAMIC_KEYMAP_ENCODER_EEPROM_ADDR)
+# endif // DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR
+#endif // ENCODER_MAP_ENABLE
+
+// Sanity check that dynamic keymaps fit in available EEPROM
+// If there's not 100 bytes available for macros, then something is wrong.
+// The keyboard should override DYNAMIC_KEYMAP_LAYER_COUNT to reduce it,
+// or DYNAMIC_KEYMAP_EEPROM_MAX_ADDR to increase it, *only if* the microcontroller has
+// more than the default.
+_Static_assert((DYNAMIC_KEYMAP_EEPROM_MAX_ADDR) - (DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR) >= 100, "Dynamic keymaps are configured to use more EEPROM than is available.");
+
+#ifndef TOTAL_EEPROM_BYTE_COUNT
+# error Unknown total EEPROM size. Cannot derive maximum for dynamic keymaps.
+#endif
+// Dynamic macros are stored after the keymaps and use what is available
+// up to and including DYNAMIC_KEYMAP_EEPROM_MAX_ADDR.
+#ifndef DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE
+# define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE (DYNAMIC_KEYMAP_EEPROM_MAX_ADDR - DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR + 1)
+#endif
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+void nvm_dynamic_keymap_erase(void) {
+ // No-op, nvm_eeconfig_erase() will have already erased EEPROM if necessary.
+}
+
+void nvm_dynamic_keymap_macro_erase(void) {
+ // No-op, nvm_eeconfig_erase() will have already erased EEPROM if necessary.
+}
+
+static inline void *dynamic_keymap_key_to_eeprom_address(uint8_t layer, uint8_t row, uint8_t column) {
+ return ((void *)DYNAMIC_KEYMAP_EEPROM_ADDR) + (layer * MATRIX_ROWS * MATRIX_COLS * 2) + (row * MATRIX_COLS * 2) + (column * 2);
+}
+
+uint16_t nvm_dynamic_keymap_read_keycode(uint8_t layer, uint8_t row, uint8_t column) {
+ if (layer >= DYNAMIC_KEYMAP_LAYER_COUNT || row >= MATRIX_ROWS || column >= MATRIX_COLS) return KC_NO;
+ void *address = dynamic_keymap_key_to_eeprom_address(layer, row, column);
+ // Big endian, so we can read/write EEPROM directly from host if we want
+ uint16_t keycode = eeprom_read_byte(address) << 8;
+ keycode |= eeprom_read_byte(address + 1);
+ return keycode;
+}
+
+void nvm_dynamic_keymap_update_keycode(uint8_t layer, uint8_t row, uint8_t column, uint16_t keycode) {
+ if (layer >= DYNAMIC_KEYMAP_LAYER_COUNT || row >= MATRIX_ROWS || column >= MATRIX_COLS) return;
+ void *address = dynamic_keymap_key_to_eeprom_address(layer, row, column);
+ // Big endian, so we can read/write EEPROM directly from host if we want
+ eeprom_update_byte(address, (uint8_t)(keycode >> 8));
+ eeprom_update_byte(address + 1, (uint8_t)(keycode & 0xFF));
+}
+
+#ifdef ENCODER_MAP_ENABLE
+static void *dynamic_keymap_encoder_to_eeprom_address(uint8_t layer, uint8_t encoder_id) {
+ return ((void *)DYNAMIC_KEYMAP_ENCODER_EEPROM_ADDR) + (layer * NUM_ENCODERS * 2 * 2) + (encoder_id * 2 * 2);
+}
+
+uint16_t nvm_dynamic_keymap_read_encoder(uint8_t layer, uint8_t encoder_id, bool clockwise) {
+ if (layer >= DYNAMIC_KEYMAP_LAYER_COUNT || encoder_id >= NUM_ENCODERS) return KC_NO;
+ void *address = dynamic_keymap_encoder_to_eeprom_address(layer, encoder_id);
+ // Big endian, so we can read/write EEPROM directly from host if we want
+ uint16_t keycode = ((uint16_t)eeprom_read_byte(address + (clockwise ? 0 : 2))) << 8;
+ keycode |= eeprom_read_byte(address + (clockwise ? 0 : 2) + 1);
+ return keycode;
+}
+
+void nvm_dynamic_keymap_update_encoder(uint8_t layer, uint8_t encoder_id, bool clockwise, uint16_t keycode) {
+ if (layer >= DYNAMIC_KEYMAP_LAYER_COUNT || encoder_id >= NUM_ENCODERS) return;
+ void *address = dynamic_keymap_encoder_to_eeprom_address(layer, encoder_id);
+ // Big endian, so we can read/write EEPROM directly from host if we want
+ eeprom_update_byte(address + (clockwise ? 0 : 2), (uint8_t)(keycode >> 8));
+ eeprom_update_byte(address + (clockwise ? 0 : 2) + 1, (uint8_t)(keycode & 0xFF));
+}
+#endif // ENCODER_MAP_ENABLE
+
+void nvm_dynamic_keymap_read_buffer(uint32_t offset, uint32_t size, uint8_t *data) {
+ uint32_t dynamic_keymap_eeprom_size = DYNAMIC_KEYMAP_LAYER_COUNT * MATRIX_ROWS * MATRIX_COLS * 2;
+ void * source = (void *)(uintptr_t)(DYNAMIC_KEYMAP_EEPROM_ADDR + offset);
+ uint8_t *target = data;
+ for (uint32_t i = 0; i < size; i++) {
+ if (offset + i < dynamic_keymap_eeprom_size) {
+ *target = eeprom_read_byte(source);
+ } else {
+ *target = 0x00;
+ }
+ source++;
+ target++;
+ }
+}
+
+void nvm_dynamic_keymap_update_buffer(uint32_t offset, uint32_t size, uint8_t *data) {
+ uint32_t dynamic_keymap_eeprom_size = DYNAMIC_KEYMAP_LAYER_COUNT * MATRIX_ROWS * MATRIX_COLS * 2;
+ void * target = (void *)(uintptr_t)(DYNAMIC_KEYMAP_EEPROM_ADDR + offset);
+ uint8_t *source = data;
+ for (uint32_t i = 0; i < size; i++) {
+ if (offset + i < dynamic_keymap_eeprom_size) {
+ eeprom_update_byte(target, *source);
+ }
+ source++;
+ target++;
+ }
+}
+
+uint32_t nvm_dynamic_keymap_macro_size(void) {
+ return DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE;
+}
+
+void nvm_dynamic_keymap_macro_read_buffer(uint32_t offset, uint32_t size, uint8_t *data) {
+ void * source = (void *)(uintptr_t)(DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR + offset);
+ uint8_t *target = data;
+ for (uint16_t i = 0; i < size; i++) {
+ if (offset + i < DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE) {
+ *target = eeprom_read_byte(source);
+ } else {
+ *target = 0x00;
+ }
+ source++;
+ target++;
+ }
+}
+
+void nvm_dynamic_keymap_macro_update_buffer(uint32_t offset, uint32_t size, uint8_t *data) {
+ void * target = (void *)(uintptr_t)(DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR + offset);
+ uint8_t *source = data;
+ for (uint16_t i = 0; i < size; i++) {
+ if (offset + i < DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE) {
+ eeprom_update_byte(target, *source);
+ }
+ source++;
+ target++;
+ }
+}
+
+void nvm_dynamic_keymap_macro_reset(void) {
+ void * start = (void *)(uintptr_t)(DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR);
+ void * end = (void *)(uintptr_t)(DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR + DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE);
+ long remaining = end - start;
+ uint8_t dummy[16] = {0};
+ for (int i = 0; i < DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE; i += sizeof(dummy)) {
+ int this_loop = remaining < sizeof(dummy) ? remaining : sizeof(dummy);
+ eeprom_update_block(dummy, start, this_loop);
+ start += this_loop;
+ remaining -= this_loop;
+ }
+}
diff --git a/quantum/nvm/eeprom/nvm_eeconfig.c b/quantum/nvm/eeprom/nvm_eeconfig.c
new file mode 100644
index 0000000000..d9495d2753
--- /dev/null
+++ b/quantum/nvm/eeprom/nvm_eeconfig.c
@@ -0,0 +1,305 @@
+// Copyright 2024 Nick Brassel (@tzarc)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#include <string.h>
+#include "nvm_eeconfig.h"
+#include "nvm_eeprom_eeconfig_internal.h"
+#include "util.h"
+#include "eeconfig.h"
+#include "debug.h"
+#include "eeprom.h"
+#include "keycode_config.h"
+
+#ifdef EEPROM_DRIVER
+# include "eeprom_driver.h"
+#endif
+
+#ifdef AUDIO_ENABLE
+# include "audio.h"
+#endif
+
+#ifdef BACKLIGHT_ENABLE
+# include "backlight.h"
+#endif
+
+#ifdef RGBLIGHT_ENABLE
+# include "rgblight.h"
+#endif
+
+#ifdef RGB_MATRIX_ENABLE
+# include "rgb_matrix_types.h"
+#endif
+
+#ifdef LED_MATRIX_ENABLE
+# include "led_matrix_types.h"
+#endif
+
+#ifdef UNICODE_COMMON_ENABLE
+# include "unicode.h"
+#endif
+
+#ifdef HAPTIC_ENABLE
+# include "haptic.h"
+#endif
+
+#ifdef CONNECTION_ENABLE
+# include "connection.h"
+#endif
+
+void nvm_eeconfig_erase(void) {
+#ifdef EEPROM_DRIVER
+ eeprom_driver_format(false);
+#endif // EEPROM_DRIVER
+}
+
+bool nvm_eeconfig_is_enabled(void) {
+ return eeprom_read_word(EECONFIG_MAGIC) == EECONFIG_MAGIC_NUMBER;
+}
+
+bool nvm_eeconfig_is_disabled(void) {
+ return eeprom_read_word(EECONFIG_MAGIC) == EECONFIG_MAGIC_NUMBER_OFF;
+}
+
+void nvm_eeconfig_enable(void) {
+ eeprom_update_word(EECONFIG_MAGIC, EECONFIG_MAGIC_NUMBER);
+}
+
+void nvm_eeconfig_disable(void) {
+#if defined(EEPROM_DRIVER)
+ eeprom_driver_format(false);
+#endif
+ eeprom_update_word(EECONFIG_MAGIC, EECONFIG_MAGIC_NUMBER_OFF);
+}
+
+void nvm_eeconfig_read_debug(debug_config_t *debug_config) {
+ debug_config->raw = eeprom_read_byte(EECONFIG_DEBUG);
+}
+void nvm_eeconfig_update_debug(const debug_config_t *debug_config) {
+ eeprom_update_byte(EECONFIG_DEBUG, debug_config->raw);
+}
+
+layer_state_t nvm_eeconfig_read_default_layer(void) {
+ uint8_t val = eeprom_read_byte(EECONFIG_DEFAULT_LAYER);
+#ifdef DEFAULT_LAYER_STATE_IS_VALUE_NOT_BITMASK
+ // stored as a layer number, so convert back to bitmask
+ return (layer_state_t)1 << val;
+#else
+ // stored as 8-bit-wide bitmask, so read the value directly - handling padding to 16/32 bit layer_state_t
+ return (layer_state_t)val;
+#endif
+}
+void nvm_eeconfig_update_default_layer(layer_state_t state) {
+#ifdef DEFAULT_LAYER_STATE_IS_VALUE_NOT_BITMASK
+ // stored as a layer number, so only store the highest layer
+ uint8_t val = get_highest_layer(state);
+#else
+ // stored as 8-bit-wide bitmask, so write the value directly - handling truncation from 16/32 bit layer_state_t
+ uint8_t val = (uint8_t)state;
+#endif
+ eeprom_update_byte(EECONFIG_DEFAULT_LAYER, val);
+}
+
+void nvm_eeconfig_read_keymap(keymap_config_t *keymap_config) {
+ keymap_config->raw = eeprom_read_word(EECONFIG_KEYMAP);
+}
+void nvm_eeconfig_update_keymap(const keymap_config_t *keymap_config) {
+ eeprom_update_word(EECONFIG_KEYMAP, keymap_config->raw);
+}
+
+#ifdef AUDIO_ENABLE
+void nvm_eeconfig_read_audio(audio_config_t *audio_config) {
+ audio_config->raw = eeprom_read_byte(EECONFIG_AUDIO);
+}
+void nvm_eeconfig_update_audio(const audio_config_t *audio_config) {
+ eeprom_update_byte(EECONFIG_AUDIO, audio_config->raw);
+}
+#endif // AUDIO_ENABLE
+
+#ifdef UNICODE_COMMON_ENABLE
+void nvm_eeconfig_read_unicode_mode(unicode_config_t *unicode_config) {
+ unicode_config->raw = eeprom_read_byte(EECONFIG_UNICODEMODE);
+}
+void nvm_eeconfig_update_unicode_mode(const unicode_config_t *unicode_config) {
+ eeprom_update_byte(EECONFIG_UNICODEMODE, unicode_config->raw);
+}
+#endif // UNICODE_COMMON_ENABLE
+
+#ifdef BACKLIGHT_ENABLE
+void nvm_eeconfig_read_backlight(backlight_config_t *backlight_config) {
+ backlight_config->raw = eeprom_read_byte(EECONFIG_BACKLIGHT);
+}
+void nvm_eeconfig_update_backlight(const backlight_config_t *backlight_config) {
+ eeprom_update_byte(EECONFIG_BACKLIGHT, backlight_config->raw);
+}
+#endif // BACKLIGHT_ENABLE
+
+#ifdef STENO_ENABLE
+uint8_t nvm_eeconfig_read_steno_mode(void) {
+ return eeprom_read_byte(EECONFIG_STENOMODE);
+}
+void nvm_eeconfig_update_steno_mode(uint8_t val) {
+ eeprom_update_byte(EECONFIG_STENOMODE, val);
+}
+#endif // STENO_ENABLE
+
+#ifdef RGBLIGHT_ENABLE
+#endif // RGBLIGHT_ENABLE
+
+#ifdef RGB_MATRIX_ENABLE
+void nvm_eeconfig_read_rgb_matrix(rgb_config_t *rgb_matrix_config) {
+ eeprom_read_block(rgb_matrix_config, EECONFIG_RGB_MATRIX, sizeof(rgb_config_t));
+}
+void nvm_eeconfig_update_rgb_matrix(const rgb_config_t *rgb_matrix_config) {
+ eeprom_update_block(rgb_matrix_config, EECONFIG_RGB_MATRIX, sizeof(rgb_config_t));
+}
+#endif // RGB_MATRIX_ENABLE
+
+#ifdef LED_MATRIX_ENABLE
+void nvm_eeconfig_read_led_matrix(led_eeconfig_t *led_matrix_config) {
+ eeprom_read_block(led_matrix_config, EECONFIG_LED_MATRIX, sizeof(led_eeconfig_t));
+}
+void nvm_eeconfig_update_led_matrix(const led_eeconfig_t *led_matrix_config) {
+ eeprom_update_block(led_matrix_config, EECONFIG_LED_MATRIX, sizeof(led_eeconfig_t));
+}
+#endif // LED_MATRIX_ENABLE
+
+#ifdef RGBLIGHT_ENABLE
+void nvm_eeconfig_read_rgblight(rgblight_config_t *rgblight_config) {
+ rgblight_config->raw = eeprom_read_dword(EECONFIG_RGBLIGHT);
+ rgblight_config->raw |= ((uint64_t)eeprom_read_byte(EECONFIG_RGBLIGHT_EXTENDED) << 32);
+}
+void nvm_eeconfig_update_rgblight(const rgblight_config_t *rgblight_config) {
+ eeprom_update_dword(EECONFIG_RGBLIGHT, rgblight_config->raw & 0xFFFFFFFF);
+ eeprom_update_byte(EECONFIG_RGBLIGHT_EXTENDED, (rgblight_config->raw >> 32) & 0xFF);
+}
+#endif // RGBLIGHT_ENABLE
+
+#if (EECONFIG_KB_DATA_SIZE) == 0
+uint32_t nvm_eeconfig_read_kb(void) {
+ return eeprom_read_dword(EECONFIG_KEYBOARD);
+}
+void nvm_eeconfig_update_kb(uint32_t val) {
+ eeprom_update_dword(EECONFIG_KEYBOARD, val);
+}
+#endif // (EECONFIG_KB_DATA_SIZE) == 0
+
+#if (EECONFIG_USER_DATA_SIZE) == 0
+uint32_t nvm_eeconfig_read_user(void) {
+ return eeprom_read_dword(EECONFIG_USER);
+}
+void nvm_eeconfig_update_user(uint32_t val) {
+ eeprom_update_dword(EECONFIG_USER, val);
+}
+#endif // (EECONFIG_USER_DATA_SIZE) == 0
+
+#ifdef HAPTIC_ENABLE
+void nvm_eeconfig_read_haptic(haptic_config_t *haptic_config) {
+ haptic_config->raw = eeprom_read_dword(EECONFIG_HAPTIC);
+}
+void nvm_eeconfig_update_haptic(const haptic_config_t *haptic_config) {
+ eeprom_update_dword(EECONFIG_HAPTIC, haptic_config->raw);
+}
+#endif // HAPTIC_ENABLE
+
+#ifdef CONNECTION_ENABLE
+void nvm_eeconfig_read_connection(connection_config_t *config) {
+ config->raw = eeprom_read_byte(EECONFIG_CONNECTION);
+}
+void nvm_eeconfig_update_connection(const connection_config_t *config) {
+ eeprom_update_byte(EECONFIG_CONNECTION, config->raw);
+}
+#endif // CONNECTION_ENABLE
+
+bool nvm_eeconfig_read_handedness(void) {
+ return !!eeprom_read_byte(EECONFIG_HANDEDNESS);
+}
+void nvm_eeconfig_update_handedness(bool val) {
+ eeprom_update_byte(EECONFIG_HANDEDNESS, !!val);
+}
+
+#if (EECONFIG_KB_DATA_SIZE) > 0
+
+bool nvm_eeconfig_is_kb_datablock_valid(void) {
+ return eeprom_read_dword(EECONFIG_KEYBOARD) == (EECONFIG_KB_DATA_VERSION);
+}
+
+uint32_t nvm_eeconfig_read_kb_datablock(void *data, uint32_t offset, uint32_t length) {
+ if (eeconfig_is_kb_datablock_valid()) {
+ void *ee_start = (void *)(uintptr_t)(EECONFIG_KB_DATABLOCK + offset);
+ void *ee_end = (void *)(uintptr_t)(EECONFIG_KB_DATABLOCK + MIN(EECONFIG_KB_DATA_SIZE, offset + length));
+ eeprom_read_block(data, ee_start, ee_end - ee_start);
+ return ee_end - ee_start;
+ } else {
+ memset(data, 0, length);
+ return length;
+ }
+}
+
+uint32_t nvm_eeconfig_update_kb_datablock(const void *data, uint32_t offset, uint32_t length) {
+ eeprom_update_dword(EECONFIG_KEYBOARD, (EECONFIG_KB_DATA_VERSION));
+
+ void *ee_start = (void *)(uintptr_t)(EECONFIG_KB_DATABLOCK + offset);
+ void *ee_end = (void *)(uintptr_t)(EECONFIG_KB_DATABLOCK + MIN(EECONFIG_KB_DATA_SIZE, offset + length));
+ eeprom_update_block(data, ee_start, ee_end - ee_start);
+ return ee_end - ee_start;
+}
+
+void nvm_eeconfig_init_kb_datablock(void) {
+ eeprom_update_dword(EECONFIG_KEYBOARD, (EECONFIG_KB_DATA_VERSION));
+
+ void * start = (void *)(uintptr_t)(EECONFIG_KB_DATABLOCK);
+ void * end = (void *)(uintptr_t)(EECONFIG_KB_DATABLOCK + EECONFIG_KB_DATA_SIZE);
+ long remaining = end - start;
+ uint8_t dummy[16] = {0};
+ for (int i = 0; i < EECONFIG_KB_DATA_SIZE; i += sizeof(dummy)) {
+ int this_loop = remaining < sizeof(dummy) ? remaining : sizeof(dummy);
+ eeprom_update_block(dummy, start, this_loop);
+ start += this_loop;
+ remaining -= this_loop;
+ }
+}
+
+#endif // (EECONFIG_KB_DATA_SIZE) > 0
+
+#if (EECONFIG_USER_DATA_SIZE) > 0
+
+bool nvm_eeconfig_is_user_datablock_valid(void) {
+ return eeprom_read_dword(EECONFIG_USER) == (EECONFIG_USER_DATA_VERSION);
+}
+
+uint32_t nvm_eeconfig_read_user_datablock(void *data, uint32_t offset, uint32_t length) {
+ if (eeconfig_is_user_datablock_valid()) {
+ void *ee_start = (void *)(uintptr_t)(EECONFIG_USER_DATABLOCK + offset);
+ void *ee_end = (void *)(uintptr_t)(EECONFIG_USER_DATABLOCK + MIN(EECONFIG_USER_DATA_SIZE, offset + length));
+ eeprom_read_block(data, ee_start, ee_end - ee_start);
+ return ee_end - ee_start;
+ } else {
+ memset(data, 0, length);
+ return length;
+ }
+}
+
+uint32_t nvm_eeconfig_update_user_datablock(const void *data, uint32_t offset, uint32_t length) {
+ eeprom_update_dword(EECONFIG_USER, (EECONFIG_USER_DATA_VERSION));
+
+ void *ee_start = (void *)(uintptr_t)(EECONFIG_USER_DATABLOCK + offset);
+ void *ee_end = (void *)(uintptr_t)(EECONFIG_USER_DATABLOCK + MIN(EECONFIG_USER_DATA_SIZE, offset + length));
+ eeprom_update_block(data, ee_start, ee_end - ee_start);
+ return ee_end - ee_start;
+}
+
+void nvm_eeconfig_init_user_datablock(void) {
+ eeprom_update_dword(EECONFIG_USER, (EECONFIG_USER_DATA_VERSION));
+
+ void * start = (void *)(uintptr_t)(EECONFIG_USER_DATABLOCK);
+ void * end = (void *)(uintptr_t)(EECONFIG_USER_DATABLOCK + EECONFIG_USER_DATA_SIZE);
+ long remaining = end - start;
+ uint8_t dummy[16] = {0};
+ for (int i = 0; i < EECONFIG_USER_DATA_SIZE; i += sizeof(dummy)) {
+ int this_loop = remaining < sizeof(dummy) ? remaining : sizeof(dummy);
+ eeprom_update_block(dummy, start, this_loop);
+ start += this_loop;
+ remaining -= this_loop;
+ }
+}
+
+#endif // (EECONFIG_USER_DATA_SIZE) > 0
diff --git a/quantum/nvm/eeprom/nvm_eeprom_eeconfig_internal.h b/quantum/nvm/eeprom/nvm_eeprom_eeconfig_internal.h
new file mode 100644
index 0000000000..41b76f1f65
--- /dev/null
+++ b/quantum/nvm/eeprom/nvm_eeprom_eeconfig_internal.h
@@ -0,0 +1,61 @@
+// Copyright 2024 Nick Brassel (@tzarc)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#include <stdint.h>
+#include <stddef.h> // offsetof
+#include "eeconfig.h"
+#include "util.h"
+
+// Dummy struct only used to calculate offsets
+typedef struct PACKED {
+ uint16_t magic;
+ uint8_t debug;
+ uint8_t default_layer;
+ uint16_t keymap;
+ uint8_t backlight;
+ uint8_t audio;
+ uint32_t rgblight;
+ uint8_t unicode;
+ uint8_t steno;
+ uint8_t handedness;
+ uint32_t keyboard;
+ uint32_t user;
+ union { // Mutually exclusive
+ uint32_t led_matrix;
+ uint64_t rgb_matrix;
+ };
+ uint32_t haptic;
+ uint8_t rgblight_ext;
+ uint8_t connection;
+} eeprom_core_t;
+
+/* EEPROM parameter address */
+#define EECONFIG_MAGIC (uint16_t *)(offsetof(eeprom_core_t, magic))
+#define EECONFIG_DEBUG (uint8_t *)(offsetof(eeprom_core_t, debug))
+#define EECONFIG_DEFAULT_LAYER (uint8_t *)(offsetof(eeprom_core_t, default_layer))
+#define EECONFIG_KEYMAP (uint16_t *)(offsetof(eeprom_core_t, keymap))
+#define EECONFIG_BACKLIGHT (uint8_t *)(offsetof(eeprom_core_t, backlight))
+#define EECONFIG_AUDIO (uint8_t *)(offsetof(eeprom_core_t, audio))
+#define EECONFIG_RGBLIGHT (uint32_t *)(offsetof(eeprom_core_t, rgblight))
+#define EECONFIG_UNICODEMODE (uint8_t *)(offsetof(eeprom_core_t, unicode))
+#define EECONFIG_STENOMODE (uint8_t *)(offsetof(eeprom_core_t, steno))
+#define EECONFIG_HANDEDNESS (uint8_t *)(offsetof(eeprom_core_t, handedness))
+#define EECONFIG_KEYBOARD (uint32_t *)(offsetof(eeprom_core_t, keyboard))
+#define EECONFIG_USER (uint32_t *)(offsetof(eeprom_core_t, user))
+#define EECONFIG_LED_MATRIX (uint32_t *)(offsetof(eeprom_core_t, led_matrix))
+#define EECONFIG_RGB_MATRIX (uint64_t *)(offsetof(eeprom_core_t, rgb_matrix))
+#define EECONFIG_HAPTIC (uint32_t *)(offsetof(eeprom_core_t, haptic))
+#define EECONFIG_RGBLIGHT_EXTENDED (uint8_t *)(offsetof(eeprom_core_t, rgblight_ext))
+#define EECONFIG_CONNECTION (uint8_t *)(offsetof(eeprom_core_t, connection))
+
+// Size of EEPROM being used for core data storage
+#define EECONFIG_BASE_SIZE ((uint8_t)sizeof(eeprom_core_t))
+
+#define EECONFIG_KB_DATABLOCK ((uint8_t *)(EECONFIG_BASE_SIZE))
+#define EECONFIG_USER_DATABLOCK ((uint8_t *)((EECONFIG_BASE_SIZE) + (EECONFIG_KB_DATA_SIZE)))
+
+// Size of EEPROM being used, other code can refer to this for available EEPROM
+#define EECONFIG_SIZE ((EECONFIG_BASE_SIZE) + (EECONFIG_KB_DATA_SIZE) + (EECONFIG_USER_DATA_SIZE))
+
+_Static_assert((intptr_t)EECONFIG_HANDEDNESS == 14, "EEPROM handedness offset is incorrect");
diff --git a/quantum/nvm/eeprom/nvm_eeprom_via_internal.h b/quantum/nvm/eeprom/nvm_eeprom_via_internal.h
new file mode 100644
index 0000000000..bf0d38e2ac
--- /dev/null
+++ b/quantum/nvm/eeprom/nvm_eeprom_via_internal.h
@@ -0,0 +1,22 @@
+// Copyright 2024 Nick Brassel (@tzarc)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+// Keyboard level code can change where VIA stores the magic.
+// The magic is the build date YYMMDD encoded as BCD in 3 bytes,
+// thus installing firmware built on a different date to the one
+// already installed can be detected and the EEPROM data is reset.
+// The only reason this is important is in case EEPROM usage changes
+// and the EEPROM was not explicitly reset by bootmagic lite.
+#ifndef VIA_EEPROM_MAGIC_ADDR
+# define VIA_EEPROM_MAGIC_ADDR (EECONFIG_SIZE)
+#endif
+
+#define VIA_EEPROM_LAYOUT_OPTIONS_ADDR (VIA_EEPROM_MAGIC_ADDR + 3)
+
+// The end of the EEPROM memory used by VIA
+// By default, dynamic keymaps will start at this if there is no
+// custom config
+#define VIA_EEPROM_CUSTOM_CONFIG_ADDR (VIA_EEPROM_LAYOUT_OPTIONS_ADDR + VIA_EEPROM_LAYOUT_OPTIONS_SIZE)
+
+#define VIA_EEPROM_CONFIG_END (VIA_EEPROM_CUSTOM_CONFIG_ADDR + VIA_EEPROM_CUSTOM_CONFIG_SIZE)
diff --git a/quantum/nvm/eeprom/nvm_via.c b/quantum/nvm/eeprom/nvm_via.c
new file mode 100644
index 0000000000..5372791fb7
--- /dev/null
+++ b/quantum/nvm/eeprom/nvm_via.c
@@ -0,0 +1,77 @@
+// Copyright 2024 Nick Brassel (@tzarc)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "eeprom.h"
+#include "util.h"
+#include "via.h"
+#include "nvm_via.h"
+#include "nvm_eeprom_eeconfig_internal.h"
+#include "nvm_eeprom_via_internal.h"
+
+void nvm_via_erase(void) {
+ // No-op, nvm_eeconfig_erase() will have already erased EEPROM if necessary.
+}
+
+void nvm_via_read_magic(uint8_t *magic0, uint8_t *magic1, uint8_t *magic2) {
+ if (magic0) {
+ *magic0 = eeprom_read_byte((void *)VIA_EEPROM_MAGIC_ADDR + 0);
+ }
+
+ if (magic1) {
+ *magic1 = eeprom_read_byte((void *)VIA_EEPROM_MAGIC_ADDR + 1);
+ }
+
+ if (magic2) {
+ *magic2 = eeprom_read_byte((void *)VIA_EEPROM_MAGIC_ADDR + 2);
+ }
+}
+
+void nvm_via_update_magic(uint8_t magic0, uint8_t magic1, uint8_t magic2) {
+ eeprom_update_byte((void *)VIA_EEPROM_MAGIC_ADDR + 0, magic0);
+ eeprom_update_byte((void *)VIA_EEPROM_MAGIC_ADDR + 1, magic1);
+ eeprom_update_byte((void *)VIA_EEPROM_MAGIC_ADDR + 2, magic2);
+}
+
+uint32_t nvm_via_read_layout_options(void) {
+ uint32_t value = 0;
+ // Start at the most significant byte
+ void *source = (void *)(VIA_EEPROM_LAYOUT_OPTIONS_ADDR);
+ for (uint8_t i = 0; i < VIA_EEPROM_LAYOUT_OPTIONS_SIZE; i++) {
+ value = value << 8;
+ value |= eeprom_read_byte(source);
+ source++;
+ }
+ return value;
+}
+
+void nvm_via_update_layout_options(uint32_t val) {
+ // Start at the least significant byte
+ void *target = (void *)(VIA_EEPROM_LAYOUT_OPTIONS_ADDR + VIA_EEPROM_LAYOUT_OPTIONS_SIZE - 1);
+ for (uint8_t i = 0; i < VIA_EEPROM_LAYOUT_OPTIONS_SIZE; i++) {
+ eeprom_update_byte(target, val & 0xFF);
+ val = val >> 8;
+ target--;
+ }
+}
+
+uint32_t nvm_via_read_custom_config(void *buf, uint32_t offset, uint32_t length) {
+#if VIA_EEPROM_CUSTOM_CONFIG_SIZE > 0
+ void *ee_start = (void *)(uintptr_t)(VIA_EEPROM_CUSTOM_CONFIG_ADDR + offset);
+ void *ee_end = (void *)(uintptr_t)(VIA_EEPROM_CUSTOM_CONFIG_ADDR + MIN(VIA_EEPROM_CUSTOM_CONFIG_SIZE, offset + length));
+ eeprom_read_block(buf, ee_start, ee_end - ee_start);
+ return ee_end - ee_start;
+#else
+ return 0;
+#endif
+}
+
+uint32_t nvm_via_update_custom_config(const void *buf, uint32_t offset, uint32_t length) {
+#if VIA_EEPROM_CUSTOM_CONFIG_SIZE > 0
+ void *ee_start = (void *)(uintptr_t)(VIA_EEPROM_CUSTOM_CONFIG_ADDR + offset);
+ void *ee_end = (void *)(uintptr_t)(VIA_EEPROM_CUSTOM_CONFIG_ADDR + MIN(VIA_EEPROM_CUSTOM_CONFIG_SIZE, offset + length));
+ eeprom_update_block(buf, ee_start, ee_end - ee_start);
+ return ee_end - ee_start;
+#else
+ return 0;
+#endif
+}
diff --git a/quantum/nvm/nvm_dynamic_keymap.h b/quantum/nvm/nvm_dynamic_keymap.h
new file mode 100644
index 0000000000..d6e4aaee51
--- /dev/null
+++ b/quantum/nvm/nvm_dynamic_keymap.h
@@ -0,0 +1,27 @@
+// Copyright 2024 Nick Brassel (@tzarc)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#include <stdint.h>
+#include <stdbool.h>
+
+void nvm_dynamic_keymap_erase(void);
+void nvm_dynamic_keymap_macro_erase(void);
+
+uint16_t nvm_dynamic_keymap_read_keycode(uint8_t layer, uint8_t row, uint8_t column);
+void nvm_dynamic_keymap_update_keycode(uint8_t layer, uint8_t row, uint8_t column, uint16_t keycode);
+
+#ifdef ENCODER_MAP_ENABLE
+uint16_t nvm_dynamic_keymap_read_encoder(uint8_t layer, uint8_t encoder_id, bool clockwise);
+void nvm_dynamic_keymap_update_encoder(uint8_t layer, uint8_t encoder_id, bool clockwise, uint16_t keycode);
+#endif // ENCODER_MAP_ENABLE
+
+void nvm_dynamic_keymap_read_buffer(uint32_t offset, uint32_t size, uint8_t *data);
+void nvm_dynamic_keymap_update_buffer(uint32_t offset, uint32_t size, uint8_t *data);
+
+uint32_t nvm_dynamic_keymap_macro_size(void);
+
+void nvm_dynamic_keymap_macro_read_buffer(uint32_t offset, uint32_t size, uint8_t *data);
+void nvm_dynamic_keymap_macro_update_buffer(uint32_t offset, uint32_t size, uint8_t *data);
+
+void nvm_dynamic_keymap_macro_reset(void);
diff --git a/quantum/nvm/nvm_eeconfig.h b/quantum/nvm/nvm_eeconfig.h
new file mode 100644
index 0000000000..40827361ca
--- /dev/null
+++ b/quantum/nvm/nvm_eeconfig.h
@@ -0,0 +1,111 @@
+// Copyright 2024 Nick Brassel (@tzarc)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#include <stdint.h>
+#include <stdbool.h>
+#include "action_layer.h" // layer_state_t
+
+#ifndef EECONFIG_MAGIC_NUMBER
+# define EECONFIG_MAGIC_NUMBER (uint16_t)0xFEE3 // When changing, decrement this value to avoid future re-init issues
+#endif
+#define EECONFIG_MAGIC_NUMBER_OFF (uint16_t)0xFFFF
+
+void nvm_eeconfig_erase(void);
+
+bool nvm_eeconfig_is_enabled(void);
+bool nvm_eeconfig_is_disabled(void);
+
+void nvm_eeconfig_enable(void);
+void nvm_eeconfig_disable(void);
+
+typedef union debug_config_t debug_config_t;
+void nvm_eeconfig_read_debug(debug_config_t *debug_config);
+void nvm_eeconfig_update_debug(const debug_config_t *debug_config);
+
+layer_state_t nvm_eeconfig_read_default_layer(void);
+void nvm_eeconfig_update_default_layer(layer_state_t state);
+
+typedef union keymap_config_t keymap_config_t;
+void nvm_eeconfig_read_keymap(keymap_config_t *keymap_config);
+void nvm_eeconfig_update_keymap(const keymap_config_t *keymap_config);
+
+#ifdef AUDIO_ENABLE
+typedef union audio_config_t audio_config_t;
+void nvm_eeconfig_read_audio(audio_config_t *audio_config);
+void nvm_eeconfig_update_audio(const audio_config_t *audio_config);
+#endif // AUDIO_ENABLE
+
+#ifdef UNICODE_COMMON_ENABLE
+typedef union unicode_config_t unicode_config_t;
+void nvm_eeconfig_read_unicode_mode(unicode_config_t *unicode_config);
+void nvm_eeconfig_update_unicode_mode(const unicode_config_t *unicode_config);
+#endif // UNICODE_COMMON_ENABLE
+
+#ifdef BACKLIGHT_ENABLE
+typedef union backlight_config_t backlight_config_t;
+void nvm_eeconfig_read_backlight(backlight_config_t *backlight_config);
+void nvm_eeconfig_update_backlight(const backlight_config_t *backlight_config);
+#endif // BACKLIGHT_ENABLE
+
+#ifdef STENO_ENABLE
+uint8_t nvm_eeconfig_read_steno_mode(void);
+void nvm_eeconfig_update_steno_mode(uint8_t val);
+#endif // STENO_ENABLE
+
+#ifdef RGB_MATRIX_ENABLE
+typedef union rgb_config_t rgb_config_t;
+void nvm_eeconfig_read_rgb_matrix(rgb_config_t *rgb_matrix_config);
+void nvm_eeconfig_update_rgb_matrix(const rgb_config_t *rgb_matrix_config);
+#endif
+
+#ifdef LED_MATRIX_ENABLE
+typedef union led_eeconfig_t led_eeconfig_t;
+void nvm_eeconfig_read_led_matrix(led_eeconfig_t *led_matrix_config);
+void nvm_eeconfig_update_led_matrix(const led_eeconfig_t *led_matrix_config);
+#endif // LED_MATRIX_ENABLE
+
+#ifdef RGBLIGHT_ENABLE
+typedef union rgblight_config_t rgblight_config_t;
+void nvm_eeconfig_read_rgblight(rgblight_config_t *rgblight_config);
+void nvm_eeconfig_update_rgblight(const rgblight_config_t *rgblight_config);
+#endif // RGBLIGHT_ENABLE
+
+#if (EECONFIG_KB_DATA_SIZE) == 0
+uint32_t nvm_eeconfig_read_kb(void);
+void nvm_eeconfig_update_kb(uint32_t val);
+#endif // (EECONFIG_KB_DATA_SIZE) == 0
+
+#if (EECONFIG_USER_DATA_SIZE) == 0
+uint32_t nvm_eeconfig_read_user(void);
+void nvm_eeconfig_update_user(uint32_t val);
+#endif // (EECONFIG_USER_DATA_SIZE) == 0
+
+#ifdef HAPTIC_ENABLE
+typedef union haptic_config_t haptic_config_t;
+void nvm_eeconfig_read_haptic(haptic_config_t *haptic_config);
+void nvm_eeconfig_update_haptic(const haptic_config_t *haptic_config);
+#endif // HAPTIC_ENABLE
+
+#ifdef CONNECTION_ENABLE
+typedef union connection_config_t connection_config_t;
+void nvm_eeconfig_read_connection(connection_config_t *config);
+void nvm_eeconfig_update_connection(const connection_config_t *config);
+#endif // CONNECTION_ENABLE
+
+bool nvm_eeconfig_read_handedness(void);
+void nvm_eeconfig_update_handedness(bool val);
+
+#if (EECONFIG_KB_DATA_SIZE) > 0
+bool nvm_eeconfig_is_kb_datablock_valid(void);
+uint32_t nvm_eeconfig_read_kb_datablock(void *data, uint32_t offset, uint32_t length);
+uint32_t nvm_eeconfig_update_kb_datablock(const void *data, uint32_t offset, uint32_t length);
+void nvm_eeconfig_init_kb_datablock(void);
+#endif // (EECONFIG_KB_DATA_SIZE) > 0
+
+#if (EECONFIG_USER_DATA_SIZE) > 0
+bool nvm_eeconfig_is_user_datablock_valid(void);
+uint32_t nvm_eeconfig_read_user_datablock(void *data, uint32_t offset, uint32_t length);
+uint32_t nvm_eeconfig_update_user_datablock(const void *data, uint32_t offset, uint32_t length);
+void nvm_eeconfig_init_user_datablock(void);
+#endif // (EECONFIG_USER_DATA_SIZE) > 0
diff --git a/quantum/nvm/nvm_via.h b/quantum/nvm/nvm_via.h
new file mode 100644
index 0000000000..90c5e67421
--- /dev/null
+++ b/quantum/nvm/nvm_via.h
@@ -0,0 +1,17 @@
+// Copyright 2024 Nick Brassel (@tzarc)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#include <stdint.h>
+#include <stdbool.h>
+
+void nvm_via_erase(void);
+
+void nvm_via_read_magic(uint8_t *magic0, uint8_t *magic1, uint8_t *magic2);
+void nvm_via_update_magic(uint8_t magic0, uint8_t magic1, uint8_t magic2);
+
+uint32_t nvm_via_read_layout_options(void);
+void nvm_via_update_layout_options(uint32_t val);
+
+uint32_t nvm_via_read_custom_config(void *buf, uint32_t offset, uint32_t length);
+uint32_t nvm_via_update_custom_config(const void *buf, uint32_t offset, uint32_t length);
diff --git a/quantum/nvm/readme.md b/quantum/nvm/readme.md
new file mode 100644
index 0000000000..0731695e92
--- /dev/null
+++ b/quantum/nvm/readme.md
@@ -0,0 +1,30 @@
+# Non-volatile Memory - Data Repositories
+
+This area is intentionally structured in the following way:
+
+```
+╰- quantum
+ ╰- nvm
+ ├- readme.md
+ ├- rules.mk
+ |
+ ├- nvm_eeconfig.h
+ ├- nvm_<<system>>.h
+ |
+ ├- eeprom
+ | ├- nvm_eeconfig.c
+ | ├- nvm_<<system>>.c
+ | ╰- ...
+ |
+ ├- <<another provider>>
+ | ├- nvm_eeconfig.c
+ | ├- nvm_<<system>>.c
+ | ╰- ...
+ ╰- ...
+```
+
+At the base `nvm` level, for every QMK core system which requires persistence there must be a corresponding `nvm_<<system>>.h` header file. This provides the data repository API to the "owner" system, and allows the underlying data persistence mechanism to be abstracted away from upper code. Any conversion to/from a `.raw` field should occur inside the `nvm_<<system>>.c` layer, with the API using values, such as structs or unions exposed to the rest of QMK.
+
+Each `nvm` "provider" is a corresponding child directory consisting of its name, such as `eeprom`, and corresponding `nvm_<<system>>.c` implementation files which provide the concrete implementation of the upper `nvm_<<system>>.h`.
+
+New systems requiring persistence can add the corresponding `nvm_<<system>>.h` file, and in most circumstances must also implement equivalent `nvm_<<system>>.c` files for every `nvm` provider. If persistence is not possible for that system, a `nvm_<<system>>.c` file with simple stubs which ignore writes and provide sane defaults must be used instead. \ No newline at end of file
diff --git a/quantum/nvm/rules.mk b/quantum/nvm/rules.mk
new file mode 100644
index 0000000000..c9c1fabfd4
--- /dev/null
+++ b/quantum/nvm/rules.mk
@@ -0,0 +1,31 @@
+# Copyright 2024 Nick Brassel (@tzarc)
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+VPATH += $(QUANTUM_DIR)/nvm
+
+VALID_NVM_DRIVERS := eeprom custom none
+
+NVM_DRIVER ?= eeprom
+
+ifeq ($(filter $(NVM_DRIVER),$(VALID_NVM_DRIVERS)),)
+ $(call CATASTROPHIC_ERROR,Invalid NVM_DRIVER,NVM_DRIVER="$(NVM_DRIVER)" is not a valid NVM driver)
+else
+
+ # If we don't want one, fake it with transient eeprom.
+ ifeq ($(NVM_DRIVER),none)
+ NVM_DRIVER := eeprom
+ EEPROM_DRIVER := transient
+ endif
+
+ NVM_DRIVER_UPPER := $(shell echo $(NVM_DRIVER) | tr '[:lower:]' '[:upper:]')
+ NVM_DRIVER_LOWER := $(shell echo $(NVM_DRIVER) | tr '[:upper:]' '[:lower:]')
+
+ OPT_DEFS += -DNVM_DRIVER_$(NVM_DRIVER_UPPER) -DNVM_DRIVER="$(NVM_DRIVER)"
+
+ ifneq ("$(wildcard $(QUANTUM_DIR)/nvm/$(NVM_DRIVER_LOWER))","")
+ COMMON_VPATH += $(QUANTUM_DIR)/nvm/$(NVM_DRIVER_LOWER)
+ endif
+
+ QUANTUM_SRC += nvm_eeconfig.c
+
+endif
diff --git a/quantum/os_detection.h b/quantum/os_detection.h
index 98a8e805e4..e9e7b25f1d 100644
--- a/quantum/os_detection.h
+++ b/quantum/os_detection.h
@@ -43,6 +43,9 @@ void slave_update_detected_host_os(os_variant_t os);
#endif
#ifdef OS_DETECTION_DEBUG_ENABLE
+# if defined(DYNAMIC_KEYMAP_ENABLE) || defined(VIA_ENABLE)
+# error Cannot enable OS Detection debug mode simultaneously with DYNAMIC_KEYMAP or VIA
+# endif
void print_stored_setups(void);
void store_setups_in_eeprom(void);
#endif
diff --git a/quantum/pointing_device/pointing_device.c b/quantum/pointing_device/pointing_device.c
index cac2875fc8..5ee65c9c61 100644
--- a/quantum/pointing_device/pointing_device.c
+++ b/quantum/pointing_device/pointing_device.c
@@ -25,6 +25,10 @@
# include "mousekey.h"
#endif
+#ifdef POINTING_DEVICE_HIRES_SCROLL_ENABLE
+# include "usb_descriptor_common.h"
+#endif
+
#if (defined(POINTING_DEVICE_ROTATION_90) + defined(POINTING_DEVICE_ROTATION_180) + defined(POINTING_DEVICE_ROTATION_270)) > 1
# error More than one rotation selected. This is not supported.
#endif
@@ -78,6 +82,9 @@ uint16_t pointing_device_get_shared_cpi(void) {
static report_mouse_t local_mouse_report = {};
static bool pointing_device_force_send = false;
+#ifdef POINTING_DEVICE_HIRES_SCROLL_ENABLE
+static uint16_t hires_scroll_resolution;
+#endif
#define POINTING_DEVICE_DRIVER_CONCAT(name) name##_pointing_device_driver
#define POINTING_DEVICE_DRIVER(name) POINTING_DEVICE_DRIVER_CONCAT(name)
@@ -176,6 +183,12 @@ __attribute__((weak)) void pointing_device_init(void) {
# endif
#endif
}
+#ifdef POINTING_DEVICE_HIRES_SCROLL_ENABLE
+ hires_scroll_resolution = POINTING_DEVICE_HIRES_SCROLL_MULTIPLIER;
+ for (int i = 0; i < POINTING_DEVICE_HIRES_SCROLL_EXPONENT; i++) {
+ hires_scroll_resolution *= 10;
+ }
+#endif
pointing_device_init_kb();
pointing_device_init_user();
@@ -404,10 +417,10 @@ void pointing_device_set_cpi_on_side(bool left, uint16_t cpi) {
* @return mouse_hv_report_t clamped value
*/
static inline mouse_hv_report_t pointing_device_hv_clamp(hv_clamp_range_t value) {
- if (value < HV_REPORT_MIN) {
- return HV_REPORT_MIN;
- } else if (value > HV_REPORT_MAX) {
- return HV_REPORT_MAX;
+ if (value < MOUSE_REPORT_HV_MIN) {
+ return MOUSE_REPORT_HV_MIN;
+ } else if (value > MOUSE_REPORT_HV_MAX) {
+ return MOUSE_REPORT_HV_MAX;
} else {
return value;
}
@@ -420,10 +433,10 @@ static inline mouse_hv_report_t pointing_device_hv_clamp(hv_clamp_range_t value)
* @return mouse_xy_report_t clamped value
*/
static inline mouse_xy_report_t pointing_device_xy_clamp(xy_clamp_range_t value) {
- if (value < XY_REPORT_MIN) {
- return XY_REPORT_MIN;
- } else if (value > XY_REPORT_MAX) {
- return XY_REPORT_MAX;
+ if (value < MOUSE_REPORT_XY_MIN) {
+ return MOUSE_REPORT_XY_MIN;
+ } else if (value > MOUSE_REPORT_XY_MAX) {
+ return MOUSE_REPORT_XY_MAX;
} else {
return value;
}
@@ -523,3 +536,9 @@ __attribute__((weak)) void pointing_device_keycode_handler(uint16_t keycode, boo
pointing_device_send();
}
}
+
+#ifdef POINTING_DEVICE_HIRES_SCROLL_ENABLE
+uint16_t pointing_device_get_hires_scroll_resolution(void) {
+ return hires_scroll_resolution;
+}
+#endif \ No newline at end of file
diff --git a/quantum/pointing_device/pointing_device.h b/quantum/pointing_device/pointing_device.h
index 72188c977d..d8b583c87e 100644
--- a/quantum/pointing_device/pointing_device.h
+++ b/quantum/pointing_device/pointing_device.h
@@ -92,27 +92,19 @@ typedef enum {
} pointing_device_buttons_t;
#ifdef MOUSE_EXTENDED_REPORT
-# define XY_REPORT_MIN INT16_MIN
-# define XY_REPORT_MAX INT16_MAX
typedef int32_t xy_clamp_range_t;
#else
-# define XY_REPORT_MIN INT8_MIN
-# define XY_REPORT_MAX INT8_MAX
typedef int16_t xy_clamp_range_t;
#endif
#ifdef WHEEL_EXTENDED_REPORT
-# define HV_REPORT_MIN INT16_MIN
-# define HV_REPORT_MAX INT16_MAX
typedef int32_t hv_clamp_range_t;
#else
-# define HV_REPORT_MIN INT8_MIN
-# define HV_REPORT_MAX INT8_MAX
typedef int16_t hv_clamp_range_t;
#endif
#define CONSTRAIN_HID(amt) ((amt) < INT8_MIN ? INT8_MIN : ((amt) > INT8_MAX ? INT8_MAX : (amt)))
-#define CONSTRAIN_HID_XY(amt) ((amt) < XY_REPORT_MIN ? XY_REPORT_MIN : ((amt) > XY_REPORT_MAX ? XY_REPORT_MAX : (amt)))
+#define CONSTRAIN_HID_XY(amt) ((amt) < MOUSE_REPORT_XY_MIN ? MOUSE_REPORT_XY_MIN : ((amt) > MOUSE_REPORT_XY_MAX ? MOUSE_REPORT_XY_MAX : (amt)))
void pointing_device_init(void);
bool pointing_device_task(void);
@@ -130,6 +122,10 @@ uint8_t pointing_device_handle_buttons(uint8_t buttons, bool pressed, poi
report_mouse_t pointing_device_adjust_by_defines(report_mouse_t mouse_report);
void pointing_device_keycode_handler(uint16_t keycode, bool pressed);
+#ifdef POINTING_DEVICE_HIRES_SCROLL_ENABLE
+uint16_t pointing_device_get_hires_scroll_resolution(void);
+#endif
+
#if defined(SPLIT_POINTING_ENABLE)
void pointing_device_set_shared_report(report_mouse_t report);
uint16_t pointing_device_get_shared_cpi(void);
diff --git a/quantum/process_keycode/process_autocorrect.c b/quantum/process_keycode/process_autocorrect.c
index b7f9132acf..0cde520778 100644
--- a/quantum/process_keycode/process_autocorrect.c
+++ b/quantum/process_keycode/process_autocorrect.c
@@ -38,7 +38,7 @@ bool autocorrect_is_enabled(void) {
*/
void autocorrect_enable(void) {
keymap_config.autocorrect_enable = true;
- eeconfig_update_keymap(keymap_config.raw);
+ eeconfig_update_keymap(&keymap_config);
}
/**
@@ -48,7 +48,7 @@ void autocorrect_enable(void) {
void autocorrect_disable(void) {
keymap_config.autocorrect_enable = false;
typo_buffer_size = 0;
- eeconfig_update_keymap(keymap_config.raw);
+ eeconfig_update_keymap(&keymap_config);
}
/**
@@ -58,7 +58,7 @@ void autocorrect_disable(void) {
void autocorrect_toggle(void) {
keymap_config.autocorrect_enable = !keymap_config.autocorrect_enable;
typo_buffer_size = 0;
- eeconfig_update_keymap(keymap_config.raw);
+ eeconfig_update_keymap(&keymap_config);
}
/**
diff --git a/quantum/process_keycode/process_caps_word.c b/quantum/process_keycode/process_caps_word.c
index b8fb868c6d..8ab66cc521 100644
--- a/quantum/process_keycode/process_caps_word.c
+++ b/quantum/process_keycode/process_caps_word.c
@@ -160,8 +160,13 @@ bool process_caps_word(uint16_t keycode, keyrecord_t* record) {
case QK_TOGGLE_LAYER ... QK_TOGGLE_LAYER_MAX:
case QK_LAYER_TAP_TOGGLE ... QK_LAYER_TAP_TOGGLE_MAX:
case QK_ONE_SHOT_LAYER ... QK_ONE_SHOT_LAYER_MAX:
+#ifdef TRI_LAYER_ENABLE // Ignore Tri Layer keys.
case QK_TRI_LAYER_LOWER ... QK_TRI_LAYER_UPPER:
- // Ignore AltGr.
+#endif // TRI_LAYER_ENABLE
+#ifdef LAYER_LOCK_ENABLE // Ignore Layer Lock key.
+ case QK_LAYER_LOCK:
+#endif // LAYER_LOCK_ENABLE
+ // Ignore AltGr.
case KC_RALT:
case OSM(MOD_RALT):
return true;
diff --git a/quantum/process_keycode/process_clicky.c b/quantum/process_keycode/process_clicky.c
index 82000db9b3..f50761268a 100644
--- a/quantum/process_keycode/process_clicky.c
+++ b/quantum/process_keycode/process_clicky.c
@@ -66,17 +66,17 @@ void clicky_freq_reset(void) {
void clicky_toggle(void) {
audio_config.clicky_enable ^= 1;
- eeconfig_update_audio(audio_config.raw);
+ eeconfig_update_audio(&audio_config);
}
void clicky_on(void) {
audio_config.clicky_enable = 1;
- eeconfig_update_audio(audio_config.raw);
+ eeconfig_update_audio(&audio_config);
}
void clicky_off(void) {
audio_config.clicky_enable = 0;
- eeconfig_update_audio(audio_config.raw);
+ eeconfig_update_audio(&audio_config);
}
bool is_clicky_on(void) {
diff --git a/quantum/process_keycode/process_connection.c b/quantum/process_keycode/process_connection.c
index b0e230d680..501529ede7 100644
--- a/quantum/process_keycode/process_connection.c
+++ b/quantum/process_keycode/process_connection.c
@@ -1,24 +1,34 @@
// Copyright 2024 Nick Brassel (@tzarc)
// SPDX-License-Identifier: GPL-2.0-or-later
-#include "outputselect.h"
+#include "connection.h"
#include "process_connection.h"
bool process_connection(uint16_t keycode, keyrecord_t *record) {
if (record->event.pressed) {
switch (keycode) {
case QK_OUTPUT_NEXT:
- set_output(OUTPUT_AUTO); // This should cycle through the outputs going forward. Ensure `docs/keycodes.md`, `docs/features/bluetooth.md` are updated when it does.
+ connection_next_host();
+ return false;
+ case QK_OUTPUT_PREV:
+ connection_prev_host();
+ return false;
+
+ case QK_OUTPUT_AUTO:
+ connection_set_host(CONNECTION_HOST_AUTO);
+ return false;
+ case QK_OUTPUT_NONE:
+ connection_set_host(CONNECTION_HOST_NONE);
return false;
case QK_OUTPUT_USB:
- set_output(OUTPUT_USB);
+ connection_set_host(CONNECTION_HOST_USB);
return false;
case QK_OUTPUT_BLUETOOTH:
- set_output(OUTPUT_BLUETOOTH);
+ connection_set_host(CONNECTION_HOST_BLUETOOTH);
return false;
-
- case QK_OUTPUT_PREV:
- case QK_OUTPUT_NONE:
case QK_OUTPUT_2P4GHZ:
+ connection_set_host(CONNECTION_HOST_2P4GHZ);
+ return false;
+
case QK_BLUETOOTH_PROFILE_NEXT:
case QK_BLUETOOTH_PROFILE_PREV:
case QK_BLUETOOTH_UNPAIR:
diff --git a/quantum/process_keycode/process_leader.c b/quantum/process_keycode/process_leader.c
index ca017a577d..a5466c513c 100644
--- a/quantum/process_keycode/process_leader.c
+++ b/quantum/process_keycode/process_leader.c
@@ -22,11 +22,7 @@ bool process_leader(uint16_t keycode, keyrecord_t *record) {
if (record->event.pressed) {
if (leader_sequence_active() && !leader_sequence_timed_out()) {
#ifndef LEADER_KEY_STRICT_KEY_PROCESSING
- if (IS_QK_MOD_TAP(keycode)) {
- keycode = QK_MOD_TAP_GET_TAP_KEYCODE(keycode);
- } else if (IS_QK_LAYER_TAP(keycode)) {
- keycode = QK_LAYER_TAP_GET_TAP_KEYCODE(keycode);
- }
+ keycode = get_tap_keycode(keycode);
#endif
if (!leader_sequence_add(keycode)) {
diff --git a/quantum/process_keycode/process_magic.c b/quantum/process_keycode/process_magic.c
index 3b35884d68..d5280105de 100644
--- a/quantum/process_keycode/process_magic.c
+++ b/quantum/process_keycode/process_magic.c
@@ -47,7 +47,7 @@ bool process_magic(uint16_t keycode, keyrecord_t *record) {
if (record->event.pressed) {
if (IS_MAGIC_KEYCODE(keycode)) {
/* keymap config */
- keymap_config.raw = eeconfig_read_keymap();
+ eeconfig_read_keymap(&keymap_config);
switch (keycode) {
case QK_MAGIC_SWAP_CONTROL_CAPS_LOCK:
keymap_config.swap_control_capslock = true;
@@ -187,7 +187,7 @@ bool process_magic(uint16_t keycode, keyrecord_t *record) {
break;
}
- eeconfig_update_keymap(keymap_config.raw);
+ eeconfig_update_keymap(&keymap_config);
clear_keyboard(); // clear to prevent stuck keys
return false;
diff --git a/quantum/process_keycode/process_repeat_key.c b/quantum/process_keycode/process_repeat_key.c
index 73f4ddedcf..fdeed4f466 100644
--- a/quantum/process_keycode/process_repeat_key.c
+++ b/quantum/process_keycode/process_repeat_key.c
@@ -41,7 +41,10 @@ static bool remember_last_key(uint16_t keycode, keyrecord_t* record, uint8_t* re
#ifdef TRI_LAYER_ENABLE // Ignore Tri Layer keys.
case QK_TRI_LAYER_LOWER:
case QK_TRI_LAYER_UPPER:
-#endif // TRI_LAYER_ENABLE
+#endif // TRI_LAYER_ENABLE
+#ifdef LAYER_LOCK_ENABLE // Ignore Layer Lock key.
+ case QK_LAYER_LOCK:
+#endif // LAYER_LOCK_ENABLE
return false;
// Ignore hold events on tap-hold keys.
diff --git a/quantum/process_keycode/process_steno.c b/quantum/process_keycode/process_steno.c
index c491d6f1d8..4789461352 100644
--- a/quantum/process_keycode/process_steno.c
+++ b/quantum/process_keycode/process_steno.c
@@ -20,9 +20,6 @@
#ifdef VIRTSER_ENABLE
# include "virtser.h"
#endif
-#ifdef STENO_ENABLE_ALL
-# include "eeprom.h"
-#endif
// All steno keys that have been pressed to form this chord,
// stored in MAX_STROKE_SIZE groups of 8-bit arrays.
@@ -128,13 +125,13 @@ static const uint16_t combinedmap_second[] PROGMEM = {STN_S2, STN_KL, STN_WL, ST
#ifdef STENO_ENABLE_ALL
void steno_init(void) {
- mode = eeprom_read_byte(EECONFIG_STENOMODE);
+ mode = eeconfig_read_steno_mode();
}
void steno_set_mode(steno_mode_t new_mode) {
steno_clear_chord();
mode = new_mode;
- eeprom_update_byte(EECONFIG_STENOMODE, mode);
+ eeconfig_update_steno_mode(mode);
}
#endif // STENO_ENABLE_ALL
diff --git a/quantum/quantum.c b/quantum/quantum.c
index adb14d64b6..0bb6ee0a91 100644
--- a/quantum/quantum.c
+++ b/quantum/quantum.c
@@ -20,7 +20,7 @@
# include "process_backlight.h"
#endif
-#ifdef BLUETOOTH_ENABLE
+#ifdef CONNECTION_ENABLE
# include "process_connection.h"
#endif
@@ -436,7 +436,7 @@ bool process_record_quantum(keyrecord_t *record) {
#ifdef LAYER_LOCK_ENABLE
process_layer_lock(keycode, record) &&
#endif
-#ifdef BLUETOOTH_ENABLE
+#ifdef CONNECTION_ENABLE
process_connection(keycode, record) &&
#endif
true)) {
diff --git a/quantum/quantum.h b/quantum/quantum.h
index 59a415ead4..3a994e9a03 100644
--- a/quantum/quantum.h
+++ b/quantum/quantum.h
@@ -39,6 +39,7 @@
#include "keymap_common.h"
#include "quantum_keycodes.h"
#include "keycode_config.h"
+#include "keycode_string.h"
#include "action_layer.h"
#include "eeconfig.h"
#include "bootloader.h"
diff --git a/quantum/rgb_matrix/animations/rgb_matrix_effects.inc b/quantum/rgb_matrix/animations/rgb_matrix_effects.inc
index a02238a2d1..e8b7a2bcde 100644
--- a/quantum/rgb_matrix/animations/rgb_matrix_effects.inc
+++ b/quantum/rgb_matrix/animations/rgb_matrix_effects.inc
@@ -42,4 +42,4 @@
#include "starlight_anim.h"
#include "starlight_dual_sat_anim.h"
#include "starlight_dual_hue_anim.h"
-#include "riverflow_anim.h" \ No newline at end of file
+#include "riverflow_anim.h"
diff --git a/quantum/rgb_matrix/rgb_matrix.c b/quantum/rgb_matrix/rgb_matrix.c
index 484d177546..3fc9085f06 100644
--- a/quantum/rgb_matrix/rgb_matrix.c
+++ b/quantum/rgb_matrix/rgb_matrix.c
@@ -18,7 +18,6 @@
#include "rgb_matrix.h"
#include "progmem.h"
-#include "eeprom.h"
#include "eeconfig.h"
#include "keyboard.h"
#include "sync_timer.h"
@@ -88,9 +87,9 @@ static last_hit_t last_hit_buffer;
const uint8_t k_rgb_matrix_split[2] = RGB_MATRIX_SPLIT;
#endif
-EECONFIG_DEBOUNCE_HELPER(rgb_matrix, EECONFIG_RGB_MATRIX, rgb_matrix_config);
+EECONFIG_DEBOUNCE_HELPER(rgb_matrix, rgb_matrix_config);
-void eeconfig_update_rgb_matrix(void) {
+void eeconfig_force_flush_rgb_matrix(void) {
eeconfig_flush_rgb_matrix(true);
}
diff --git a/quantum/rgb_matrix/rgb_matrix.h b/quantum/rgb_matrix/rgb_matrix.h
index 33f7e06a63..e00e3927c7 100644
--- a/quantum/rgb_matrix/rgb_matrix.h
+++ b/quantum/rgb_matrix/rgb_matrix.h
@@ -140,7 +140,7 @@ enum rgb_matrix_effects {
};
void eeconfig_update_rgb_matrix_default(void);
-void eeconfig_update_rgb_matrix(void);
+void eeconfig_force_flush_rgb_matrix(void);
uint8_t rgb_matrix_map_row_column_to_led_kb(uint8_t row, uint8_t column, uint8_t *led_i);
uint8_t rgb_matrix_map_row_column_to_led(uint8_t row, uint8_t column, uint8_t *led_i);
@@ -215,7 +215,7 @@ void rgb_matrix_set_flags_noeeprom(led_flags_t flags);
void rgb_matrix_update_pwm_buffers(void);
#ifndef RGBLIGHT_ENABLE
-# define eeconfig_update_rgblight_current eeconfig_update_rgb_matrix
+# define eeconfig_update_rgblight_current eeconfig_force_flush_rgb_matrix
# define rgblight_reload_from_eeprom rgb_matrix_reload_from_eeprom
# define rgblight_toggle rgb_matrix_toggle
# define rgblight_toggle_noeeprom rgb_matrix_toggle_noeeprom
diff --git a/quantum/rgb_matrix/rgb_matrix_types.h b/quantum/rgb_matrix/rgb_matrix_types.h
index 0834a7067c..62005ebea9 100644
--- a/quantum/rgb_matrix/rgb_matrix_types.h
+++ b/quantum/rgb_matrix/rgb_matrix_types.h
@@ -73,7 +73,7 @@ typedef struct PACKED {
uint8_t flags[RGB_MATRIX_LED_COUNT];
} led_config_t;
-typedef union {
+typedef union rgb_config_t {
uint64_t raw;
struct PACKED {
uint8_t enable : 2;
diff --git a/quantum/rgblight/rgblight.c b/quantum/rgblight/rgblight.c
index ddccc9bae3..83f97c8114 100644
--- a/quantum/rgblight/rgblight.c
+++ b/quantum/rgblight/rgblight.c
@@ -24,9 +24,7 @@
#include "util.h"
#include "led_tables.h"
#include <lib/lib8tion/lib8tion.h>
-#ifdef EEPROM_ENABLE
-# include "eeprom.h"
-#endif
+#include "eeconfig.h"
#ifdef RGBLIGHT_SPLIT
/* for split keyboard */
@@ -176,24 +174,9 @@ void rgblight_check_config(void) {
}
}
-uint64_t eeconfig_read_rgblight(void) {
-#ifdef EEPROM_ENABLE
- return (uint64_t)((eeprom_read_dword(EECONFIG_RGBLIGHT)) | ((uint64_t)eeprom_read_byte(EECONFIG_RGBLIGHT_EXTENDED) << 32));
-#else
- return 0;
-#endif
-}
-
-void eeconfig_update_rgblight(uint64_t val) {
-#ifdef EEPROM_ENABLE
- rgblight_check_config();
- eeprom_update_dword(EECONFIG_RGBLIGHT, val & 0xFFFFFFFF);
- eeprom_update_byte(EECONFIG_RGBLIGHT_EXTENDED, (val >> 32) & 0xFF);
-#endif
-}
-
void eeconfig_update_rgblight_current(void) {
- eeconfig_update_rgblight(rgblight_config.raw);
+ rgblight_check_config();
+ eeconfig_update_rgblight(&rgblight_config);
}
void eeconfig_update_rgblight_default(void) {
@@ -205,7 +188,7 @@ void eeconfig_update_rgblight_default(void) {
rgblight_config.val = RGBLIGHT_DEFAULT_VAL;
rgblight_config.speed = RGBLIGHT_DEFAULT_SPD;
RGBLIGHT_SPLIT_SET_CHANGE_MODEHSVS;
- eeconfig_update_rgblight(rgblight_config.raw);
+ eeconfig_update_rgblight(&rgblight_config);
}
void eeconfig_debug_rgblight(void) {
@@ -228,12 +211,12 @@ void rgblight_init(void) {
}
dprintf("rgblight_init start!\n");
- rgblight_config.raw = eeconfig_read_rgblight();
+ eeconfig_read_rgblight(&rgblight_config);
RGBLIGHT_SPLIT_SET_CHANGE_MODEHSVS;
if (!rgblight_config.mode) {
dprintf("rgblight_init rgblight_config.mode = 0. Write default values to EEPROM.\n");
eeconfig_update_rgblight_default();
- rgblight_config.raw = eeconfig_read_rgblight();
+ eeconfig_read_rgblight(&rgblight_config);
}
rgblight_check_config();
@@ -252,7 +235,7 @@ void rgblight_init(void) {
void rgblight_reload_from_eeprom(void) {
/* Reset back to what we have in eeprom */
- rgblight_config.raw = eeconfig_read_rgblight();
+ eeconfig_read_rgblight(&rgblight_config);
RGBLIGHT_SPLIT_SET_CHANGE_MODEHSVS;
rgblight_check_config();
eeconfig_debug_rgblight(); // display current eeprom values
@@ -341,7 +324,7 @@ void rgblight_mode_eeprom_helper(uint8_t mode, bool write_to_eeprom) {
}
RGBLIGHT_SPLIT_SET_CHANGE_MODE;
if (write_to_eeprom) {
- eeconfig_update_rgblight(rgblight_config.raw);
+ eeconfig_update_rgblight(&rgblight_config);
dprintf("rgblight mode [EEPROM]: %u\n", rgblight_config.mode);
} else {
dprintf("rgblight mode [NOEEPROM]: %u\n", rgblight_config.mode);
@@ -386,7 +369,7 @@ void rgblight_toggle_noeeprom(void) {
void rgblight_enable(void) {
rgblight_config.enable = 1;
// No need to update EEPROM here. rgblight_mode() will do that, actually
- // eeconfig_update_rgblight(rgblight_config.raw);
+ // eeconfig_update_rgblight(&rgblight_config);
dprintf("rgblight enable [EEPROM]: rgblight_config.enable = %u\n", rgblight_config.enable);
rgblight_mode(rgblight_config.mode);
}
@@ -399,7 +382,7 @@ void rgblight_enable_noeeprom(void) {
void rgblight_disable(void) {
rgblight_config.enable = 0;
- eeconfig_update_rgblight(rgblight_config.raw);
+ eeconfig_update_rgblight(&rgblight_config);
dprintf("rgblight disable [EEPROM]: rgblight_config.enable = %u\n", rgblight_config.enable);
rgblight_timer_disable();
RGBLIGHT_SPLIT_SET_CHANGE_MODE;
@@ -487,7 +470,7 @@ void rgblight_increase_speed_helper(bool write_to_eeprom) {
if (rgblight_config.speed < 3) rgblight_config.speed++;
// RGBLIGHT_SPLIT_SET_CHANGE_HSVS; // NEED?
if (write_to_eeprom) {
- eeconfig_update_rgblight(rgblight_config.raw);
+ eeconfig_update_rgblight(&rgblight_config);
}
}
void rgblight_increase_speed(void) {
@@ -501,7 +484,7 @@ void rgblight_decrease_speed_helper(bool write_to_eeprom) {
if (rgblight_config.speed > 0) rgblight_config.speed--;
// RGBLIGHT_SPLIT_SET_CHANGE_HSVS; // NEED??
if (write_to_eeprom) {
- eeconfig_update_rgblight(rgblight_config.raw);
+ eeconfig_update_rgblight(&rgblight_config);
}
}
void rgblight_decrease_speed(void) {
@@ -585,7 +568,7 @@ void rgblight_sethsv_eeprom_helper(uint8_t hue, uint8_t sat, uint8_t val, bool w
rgblight_config.sat = sat;
rgblight_config.val = val;
if (write_to_eeprom) {
- eeconfig_update_rgblight(rgblight_config.raw);
+ eeconfig_update_rgblight(&rgblight_config);
dprintf("rgblight set hsv [EEPROM]: %u,%u,%u\n", rgblight_config.hue, rgblight_config.sat, rgblight_config.val);
} else {
dprintf("rgblight set hsv [NOEEPROM]: %u,%u,%u\n", rgblight_config.hue, rgblight_config.sat, rgblight_config.val);
@@ -608,7 +591,7 @@ uint8_t rgblight_get_speed(void) {
void rgblight_set_speed_eeprom_helper(uint8_t speed, bool write_to_eeprom) {
rgblight_config.speed = speed;
if (write_to_eeprom) {
- eeconfig_update_rgblight(rgblight_config.raw);
+ eeconfig_update_rgblight(&rgblight_config);
dprintf("rgblight set speed [EEPROM]: %u\n", rgblight_config.speed);
} else {
dprintf("rgblight set speed [NOEEPROM]: %u\n", rgblight_config.speed);
diff --git a/quantum/rgblight/rgblight.h b/quantum/rgblight/rgblight.h
index f4b6e621e4..f5fd450d4c 100644
--- a/quantum/rgblight/rgblight.h
+++ b/quantum/rgblight/rgblight.h
@@ -168,7 +168,6 @@ enum RGBLIGHT_EFFECT_MODE {
#include <stdbool.h>
#include "rgblight_drivers.h"
#include "progmem.h"
-#include "eeconfig.h"
#include "color.h"
#ifdef RGBLIGHT_LAYERS
@@ -248,7 +247,7 @@ extern const uint16_t RGBLED_RGBTEST_INTERVALS[1] PROGMEM;
extern const uint8_t RGBLED_TWINKLE_INTERVALS[3] PROGMEM;
extern bool is_rgblight_initialized;
-typedef union {
+typedef union rgblight_config_t {
uint64_t raw;
struct {
bool enable : 1;
@@ -370,8 +369,6 @@ void rgblight_suspend(void);
void rgblight_wakeup(void);
uint64_t rgblight_read_qword(void);
void rgblight_update_qword(uint64_t qword);
-uint64_t eeconfig_read_rgblight(void);
-void eeconfig_update_rgblight(uint64_t val);
void eeconfig_update_rgblight_current(void);
void eeconfig_update_rgblight_default(void);
void eeconfig_debug_rgblight(void);
diff --git a/quantum/split_common/split_util.h b/quantum/split_common/split_util.h
index f83b05b6a6..6f4c4dc660 100644
--- a/quantum/split_common/split_util.h
+++ b/quantum/split_common/split_util.h
@@ -15,4 +15,4 @@ bool is_transport_connected(void);
void split_watchdog_update(bool done);
void split_watchdog_task(void);
-bool split_watchdog_check(void); \ No newline at end of file
+bool split_watchdog_check(void);
diff --git a/quantum/unicode/unicode.c b/quantum/unicode/unicode.c
index 78a4cad585..dff1d43fb4 100644
--- a/quantum/unicode/unicode.c
+++ b/quantum/unicode/unicode.c
@@ -16,7 +16,6 @@
#include "unicode.h"
-#include "eeprom.h"
#include "eeconfig.h"
#include "action.h"
#include "action_util.h"
@@ -136,7 +135,7 @@ static void unicode_play_song(uint8_t mode) {
#endif
void unicode_input_mode_init(void) {
- unicode_config.raw = eeprom_read_byte(EECONFIG_UNICODEMODE);
+ eeconfig_read_unicode_mode(&unicode_config);
#if UNICODE_SELECTED_MODES != -1
# if UNICODE_CYCLE_PERSIST
// Find input_mode in selected modes
@@ -165,7 +164,7 @@ uint8_t get_unicode_input_mode(void) {
}
static void persist_unicode_input_mode(void) {
- eeprom_update_byte(EECONFIG_UNICODEMODE, unicode_config.input_mode);
+ eeconfig_update_unicode_mode(&unicode_config);
}
void set_unicode_input_mode(uint8_t mode) {
diff --git a/quantum/unicode/unicode.h b/quantum/unicode/unicode.h
index 90a54c8b18..f19d803335 100644
--- a/quantum/unicode/unicode.h
+++ b/quantum/unicode/unicode.h
@@ -26,7 +26,7 @@
* \{
*/
-typedef union {
+typedef union unicode_config_t {
uint8_t raw;
struct {
uint8_t input_mode : 8;
diff --git a/quantum/via.c b/quantum/via.c
index 643d7aa3c3..3682b4ab2b 100644
--- a/quantum/via.c
+++ b/quantum/via.c
@@ -26,12 +26,12 @@
#include "raw_hid.h"
#include "dynamic_keymap.h"
-#include "eeprom.h"
#include "eeconfig.h"
#include "matrix.h"
#include "timer.h"
#include "wait.h"
#include "version.h" // for QMK_BUILDDATE used in EEPROM magic
+#include "nvm_via.h"
#if defined(AUDIO_ENABLE)
# include "audio.h"
@@ -65,20 +65,26 @@ bool via_eeprom_is_valid(void) {
uint8_t magic1 = ((p[5] & 0x0F) << 4) | (p[6] & 0x0F);
uint8_t magic2 = ((p[8] & 0x0F) << 4) | (p[9] & 0x0F);
- return (eeprom_read_byte((void *)VIA_EEPROM_MAGIC_ADDR + 0) == magic0 && eeprom_read_byte((void *)VIA_EEPROM_MAGIC_ADDR + 1) == magic1 && eeprom_read_byte((void *)VIA_EEPROM_MAGIC_ADDR + 2) == magic2);
+ uint8_t ee_magic0;
+ uint8_t ee_magic1;
+ uint8_t ee_magic2;
+ nvm_via_read_magic(&ee_magic0, &ee_magic1, &ee_magic2);
+
+ return ee_magic0 == magic0 && ee_magic1 == magic1 && ee_magic2 == magic2;
}
// Sets VIA/keyboard level usage of EEPROM to valid/invalid
// Keyboard level code (eg. via_init_kb()) should not call this
void via_eeprom_set_valid(bool valid) {
- char * p = QMK_BUILDDATE; // e.g. "2019-11-05-11:29:54"
- uint8_t magic0 = ((p[2] & 0x0F) << 4) | (p[3] & 0x0F);
- uint8_t magic1 = ((p[5] & 0x0F) << 4) | (p[6] & 0x0F);
- uint8_t magic2 = ((p[8] & 0x0F) << 4) | (p[9] & 0x0F);
-
- eeprom_update_byte((void *)VIA_EEPROM_MAGIC_ADDR + 0, valid ? magic0 : 0xFF);
- eeprom_update_byte((void *)VIA_EEPROM_MAGIC_ADDR + 1, valid ? magic1 : 0xFF);
- eeprom_update_byte((void *)VIA_EEPROM_MAGIC_ADDR + 2, valid ? magic2 : 0xFF);
+ if (valid) {
+ char * p = QMK_BUILDDATE; // e.g. "2019-11-05-11:29:54"
+ uint8_t magic0 = ((p[2] & 0x0F) << 4) | (p[3] & 0x0F);
+ uint8_t magic1 = ((p[5] & 0x0F) << 4) | (p[6] & 0x0F);
+ uint8_t magic2 = ((p[8] & 0x0F) << 4) | (p[9] & 0x0F);
+ nvm_via_update_magic(magic0, magic1, magic2);
+ } else {
+ nvm_via_update_magic(0xFF, 0xFF, 0xFF);
+ }
}
// Override this at the keyboard code level to check
@@ -104,6 +110,8 @@ void via_init(void) {
}
void eeconfig_init_via(void) {
+ // Erase any NVM storage if necessary
+ nvm_via_erase();
// set the magic number to false, in case this gets interrupted
via_eeprom_set_valid(false);
// This resets the layout options
@@ -119,29 +127,24 @@ void eeconfig_init_via(void) {
// This is generalized so the layout options EEPROM usage can be
// variable, between 1 and 4 bytes.
uint32_t via_get_layout_options(void) {
- uint32_t value = 0;
- // Start at the most significant byte
- void *source = (void *)(VIA_EEPROM_LAYOUT_OPTIONS_ADDR);
- for (uint8_t i = 0; i < VIA_EEPROM_LAYOUT_OPTIONS_SIZE; i++) {
- value = value << 8;
- value |= eeprom_read_byte(source);
- source++;
- }
- return value;
+ return nvm_via_read_layout_options();
}
__attribute__((weak)) void via_set_layout_options_kb(uint32_t value) {}
void via_set_layout_options(uint32_t value) {
via_set_layout_options_kb(value);
- // Start at the least significant byte
- void *target = (void *)(VIA_EEPROM_LAYOUT_OPTIONS_ADDR + VIA_EEPROM_LAYOUT_OPTIONS_SIZE - 1);
- for (uint8_t i = 0; i < VIA_EEPROM_LAYOUT_OPTIONS_SIZE; i++) {
- eeprom_update_byte(target, value & 0xFF);
- value = value >> 8;
- target--;
- }
+ nvm_via_update_layout_options(value);
+}
+
+#if VIA_EEPROM_CUSTOM_CONFIG_SIZE > 0
+uint32_t via_read_custom_config(void *buf, uint32_t offset, uint32_t length) {
+ return nvm_via_read_custom_config(buf, offset, length);
+}
+uint32_t via_update_custom_config(const void *buf, uint32_t offset, uint32_t length) {
+ return nvm_via_update_custom_config(buf, offset, length);
}
+#endif
#if defined(AUDIO_ENABLE)
float via_device_indication_song[][2] = SONG(STARTUP_SOUND);
@@ -715,7 +718,7 @@ void via_qmk_rgb_matrix_set_value(uint8_t *data) {
}
void via_qmk_rgb_matrix_save(void) {
- eeconfig_update_rgb_matrix();
+ eeconfig_force_flush_rgb_matrix();
}
#endif // RGB_MATRIX_ENABLE
@@ -794,7 +797,7 @@ void via_qmk_led_matrix_set_value(uint8_t *data) {
}
void via_qmk_led_matrix_save(void) {
- eeconfig_update_led_matrix();
+ eeconfig_force_flush_led_matrix();
}
#endif // LED_MATRIX_ENABLE
@@ -861,7 +864,7 @@ void via_qmk_audio_set_value(uint8_t *data) {
}
void via_qmk_audio_save(void) {
- eeconfig_update_audio(audio_config.raw);
+ eeconfig_update_audio(&audio_config);
}
#endif // QMK_AUDIO_ENABLE
diff --git a/quantum/via.h b/quantum/via.h
index 01d4c48b37..9f0eef10f7 100644
--- a/quantum/via.h
+++ b/quantum/via.h
@@ -16,21 +16,8 @@
#pragma once
-#include "eeconfig.h" // for EECONFIG_SIZE
#include "action.h"
-// Keyboard level code can change where VIA stores the magic.
-// The magic is the build date YYMMDD encoded as BCD in 3 bytes,
-// thus installing firmware built on a different date to the one
-// already installed can be detected and the EEPROM data is reset.
-// The only reason this is important is in case EEPROM usage changes
-// and the EEPROM was not explicitly reset by bootmagic lite.
-#ifndef VIA_EEPROM_MAGIC_ADDR
-# define VIA_EEPROM_MAGIC_ADDR (EECONFIG_SIZE)
-#endif
-
-#define VIA_EEPROM_LAYOUT_OPTIONS_ADDR (VIA_EEPROM_MAGIC_ADDR + 3)
-
// Changing the layout options size after release will invalidate EEPROM,
// but this is something that should be set correctly on initial implementation.
// 1 byte is enough for most uses (i.e. 8 binary states, or 6 binary + 1 ternary/quaternary )
@@ -46,17 +33,10 @@
# define VIA_EEPROM_LAYOUT_OPTIONS_DEFAULT 0x00000000
#endif
-// The end of the EEPROM memory used by VIA
-// By default, dynamic keymaps will start at this if there is no
-// custom config
-#define VIA_EEPROM_CUSTOM_CONFIG_ADDR (VIA_EEPROM_LAYOUT_OPTIONS_ADDR + VIA_EEPROM_LAYOUT_OPTIONS_SIZE)
-
#ifndef VIA_EEPROM_CUSTOM_CONFIG_SIZE
# define VIA_EEPROM_CUSTOM_CONFIG_SIZE 0
#endif
-#define VIA_EEPROM_CONFIG_END (VIA_EEPROM_CUSTOM_CONFIG_ADDR + VIA_EEPROM_CUSTOM_CONFIG_SIZE)
-
// This is changed only when the command IDs change,
// so VIA Configurator can detect compatible firmware.
#define VIA_PROTOCOL_VERSION 0x000C
@@ -160,6 +140,11 @@ uint32_t via_get_layout_options(void);
void via_set_layout_options(uint32_t value);
void via_set_layout_options_kb(uint32_t value);
+#if VIA_EEPROM_CUSTOM_CONFIG_SIZE > 0
+uint32_t via_read_custom_config(void *buf, uint32_t offset, uint32_t length);
+uint32_t via_update_custom_config(const void *buf, uint32_t offset, uint32_t length);
+#endif
+
// Used by VIA to tell a device to flash LEDs (or do something else) when that
// device becomes the active device being configured, on startup or switching
// between devices.
@@ -202,4 +187,4 @@ void via_qmk_audio_command(uint8_t *data, uint8_t length);
void via_qmk_audio_set_value(uint8_t *data);
void via_qmk_audio_get_value(uint8_t *data);
void via_qmk_audio_save(void);
-#endif \ No newline at end of file
+#endif
diff --git a/quantum/wear_leveling/tests/rules.mk b/quantum/wear_leveling/tests/rules.mk
index 4d7a964049..f5f36e5b6e 100644
--- a/quantum/wear_leveling/tests/rules.mk
+++ b/quantum/wear_leveling/tests/rules.mk
@@ -63,4 +63,4 @@ wear_leveling_8byte_SRC := \
$(wear_leveling_common_SRC) \
$(QUANTUM_PATH)/wear_leveling/tests/wear_leveling_8byte.cpp
wear_leveling_8byte_INC := \
- $(wear_leveling_common_INC) \ No newline at end of file
+ $(wear_leveling_common_INC)
diff --git a/readme.md b/readme.md
index 62aed12066..e5c0d41b7b 100644
--- a/readme.md
+++ b/readme.md
@@ -1,3 +1,7 @@
+# THIS IS THE DEVELOP BRANCH
+
+Warning- This is the `develop` branch of QMK Firmware. You may encounter broken code here. Please see [Breaking Changes](https://docs.qmk.fm/#/breaking_changes) for more information.
+
# Quantum Mechanical Keyboard Firmware
[![Current Version](https://img.shields.io/github/tag/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/tags)
diff --git a/requirements.txt b/requirements.txt
index fbee51ee57..68b05d64e6 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -6,7 +6,7 @@ dotty-dict
hid
hjson
jsonschema>=4
-milc>=1.4.2
+milc>=1.9.0
pygments
pyserial
pyusb
diff --git a/tests/basic/test_keycode_util.cpp b/tests/basic/test_keycode_util.cpp
deleted file mode 100644
index 693334676e..0000000000
--- a/tests/basic/test_keycode_util.cpp
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 2022 Stefan Kerkmann
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#include "test_common.hpp"
-
-class KeycodeToIdentifierSuite : public ::testing::TestWithParam<std::pair<std::uint16_t, std::string>> {};
-
-TEST_P(KeycodeToIdentifierSuite, ConversionTests) {
- ASSERT_EQ(get_keycode_identifier_or_default(GetParam().first), GetParam().second);
-}
-
-INSTANTIATE_TEST_CASE_P(ConversionTestsP, KeycodeToIdentifierSuite,
- // clang-format off
-::testing::Values(
- // Goto layer
- std::make_pair(TO(0), "TO(0)"),
- std::make_pair(TO(0x1F), "TO(31)"),
- // Momentary switch layer
- std::make_pair(MO(0), "MO(0)"),
- std::make_pair(MO(0x1F), "MO(31)"),
- // Set default layer
- std::make_pair(DF(0), "DF(0)"),
- std::make_pair(DF(0x1F), "DF(31)"),
- // Toggle layer
- std::make_pair(TG(0), "TG(0)"),
- std::make_pair(TG(0x1F), "TG(31)"),
- // One-shot layer
- std::make_pair(OSL(0), "OSL(0)"),
- std::make_pair(OSL(0x1F), "OSL(31)"),
- // One-shot mod
- std::make_pair(OSM(MOD_LSFT), "OSM(MOD_LSFT)"),
- std::make_pair(OSM(MOD_LSFT | MOD_LCTL), "OSM(MOD_LCTL | MOD_LSFT)"),
- // Layer Mod
- std::make_pair(LM(0, MOD_LSFT), "LM(0, MOD_LSFT)"),
- std::make_pair(LM(0xF, MOD_LSFT), "LM(15, MOD_LSFT)"),
- std::make_pair(LM(0xF, MOD_LSFT | MOD_LCTL), "LM(15, MOD_LCTL | MOD_LSFT)"),
- // Layer tap toggle
- std::make_pair(TT(0), "TT(0)"),
- std::make_pair(TT(0x1F), "TT(31)"),
- // Layer tap
- std::make_pair(LT(0, KC_A), "LT(0, KC_A)"),
- std::make_pair(LT(0xF, KC_SPACE), "LT(15, KC_SPACE)"),
- std::make_pair(LT(1, KC_SPC), "LT(1, KC_SPACE)"),
- // Mod tap
- std::make_pair(MT(MOD_LCTL, KC_A), "MT(MOD_LCTL, KC_A)"),
- std::make_pair(MT(MOD_LCTL | MOD_LSFT, KC_A), "MT(MOD_LCTL | MOD_LSFT, KC_A)"),
- std::make_pair(ALT_T(KC_TAB), "MT(MOD_LALT, KC_TAB)"),
- // Mods
- std::make_pair(LCTL(KC_A), "QK_MODS(KC_A, QK_LCTL)"),
- std::make_pair(HYPR(KC_SPACE), "QK_MODS(KC_SPACE, QK_LCTL | QK_LSFT | QK_LALT | QK_LGUI)")
-));
-// clang-format on
diff --git a/tests/basic/test_one_shot_keys.cpp b/tests/basic/test_one_shot_keys.cpp
index 92db52f811..4784c86694 100644
--- a/tests/basic/test_one_shot_keys.cpp
+++ b/tests/basic/test_one_shot_keys.cpp
@@ -686,4 +686,4 @@ TEST_F(OneShot, OSLWithLongModTapKeyAndRegularKey) {
regular_key.release();
run_one_scan_loop();
VERIFY_AND_CLEAR(driver);
-} \ No newline at end of file
+}
diff --git a/tests/caps_word/test.mk b/tests/caps_word/test.mk
index 2509b01858..6d5664aa05 100644
--- a/tests/caps_word/test.mk
+++ b/tests/caps_word/test.mk
@@ -15,5 +15,7 @@
CAPS_WORD_ENABLE = yes
COMMAND_ENABLE = no
+LAYER_LOCK_ENABLE = yes
SPACE_CADET_ENABLE = yes
+TRI_LAYER_ENABLE = yes
diff --git a/tests/caps_word/test_caps_word.cpp b/tests/caps_word/test_caps_word.cpp
index 28d86e9324..4b58790915 100644
--- a/tests/caps_word/test_caps_word.cpp
+++ b/tests/caps_word/test_caps_word.cpp
@@ -156,21 +156,22 @@ TEST_F(CapsWord, IdleTimeout) {
// Turn on Caps Word and tap "A".
caps_word_on();
tap_key(key_a);
-
VERIFY_AND_CLEAR(driver);
+ EXPECT_EMPTY_REPORT(driver);
idle_for(CAPS_WORD_IDLE_TIMEOUT);
run_one_scan_loop();
+ VERIFY_AND_CLEAR(driver);
// Caps Word should be off and mods should be clear.
EXPECT_EQ(is_caps_word_on(), false);
EXPECT_EQ(get_mods() | get_weak_mods(), 0);
- EXPECT_EMPTY_REPORT(driver).Times(AnyNumber());
// Expect unshifted "A".
EXPECT_REPORT(driver, (KC_A));
+ EXPECT_EMPTY_REPORT(driver);
tap_key(key_a);
-
+ run_one_scan_loop();
VERIFY_AND_CLEAR(driver);
}
@@ -244,6 +245,7 @@ TEST_F(CapsWord, ShiftsAltGrSymbols) {
// clang-format off
EXPECT_CALL(driver, send_keyboard_mock(AnyOf(
KeyboardReport(),
+ KeyboardReport(KC_LSFT),
KeyboardReport(KC_RALT),
KeyboardReport(KC_LSFT, KC_RALT))))
.Times(AnyNumber());
@@ -259,6 +261,9 @@ TEST_F(CapsWord, ShiftsAltGrSymbols) {
tap_key(key_a);
run_one_scan_loop();
key_altgr.release();
+ run_one_scan_loop();
+
+ idle_for(CAPS_WORD_IDLE_TIMEOUT);
VERIFY_AND_CLEAR(driver);
}
@@ -274,6 +279,7 @@ TEST_F(CapsWord, ShiftsModTapAltGrSymbols) {
// clang-format off
EXPECT_CALL(driver, send_keyboard_mock(AnyOf(
KeyboardReport(),
+ KeyboardReport(KC_LSFT),
KeyboardReport(KC_RALT),
KeyboardReport(KC_LSFT, KC_RALT))))
.Times(AnyNumber());
@@ -289,8 +295,11 @@ TEST_F(CapsWord, ShiftsModTapAltGrSymbols) {
tap_key(key_a);
run_one_scan_loop();
key_altgr_t.release();
-
+ run_one_scan_loop();
EXPECT_TRUE(is_caps_word_on());
+
+ idle_for(CAPS_WORD_IDLE_TIMEOUT);
+
VERIFY_AND_CLEAR(driver);
}
@@ -535,7 +544,11 @@ TEST_P(CapsWordDoubleTapShift, Activation) {
// machine at this point. This due to imperfect test isolation which can't
// reset the caps word double shift timer on test case setup.
idle_for(CAPS_WORD_IDLE_TIMEOUT);
+
+ EXPECT_REPORT(driver, (KC_ESC));
+ EXPECT_EMPTY_REPORT(driver);
tap_key(esc);
+ VERIFY_AND_CLEAR(driver);
}
// Double tap doesn't count if another key is pressed between the taps.
@@ -589,6 +602,7 @@ TEST_P(CapsWordDoubleTapShift, SlowTaps) {
EXPECT_EQ(is_caps_word_on(), false); // Caps Word is still off.
clear_oneshot_mods();
+ send_keyboard_report();
VERIFY_AND_CLEAR(driver);
}
@@ -626,7 +640,7 @@ TEST_F(CapsWord, IgnoresOSLHold) {
run_one_scan_loop();
tap_key(key_b);
key_osl.release();
- run_one_scan_loop();
+ idle_for(CAPS_WORD_IDLE_TIMEOUT + 1);
VERIFY_AND_CLEAR(driver);
}
@@ -645,15 +659,39 @@ TEST_F(CapsWord, IgnoresOSLTap) {
KeyboardReport(),
KeyboardReport(KC_LSFT))))
.Times(AnyNumber());
+ // clang-format on
EXPECT_REPORT(driver, (KC_LSFT, KC_B));
caps_word_on();
tap_key(key_osl);
tap_key(key_b);
- run_one_scan_loop();
+ idle_for(CAPS_WORD_IDLE_TIMEOUT);
+
+ VERIFY_AND_CLEAR(driver);
+}
+
+TEST_F(CapsWord, IgnoresLayerLockKey) {
+ TestDriver driver;
+ KeymapKey key_llock(0, 1, 0, QK_LAYER_LOCK);
+ KeymapKey key_b(0, 0, 0, KC_B);
+ set_keymap({key_llock, key_b});
+
+ // Allow any number of reports with no keys or only modifiers.
+ // clang-format off
+ EXPECT_CALL(driver, send_keyboard_mock(AnyOf(
+ KeyboardReport(),
+ KeyboardReport(KC_LSFT))))
+ .Times(AnyNumber());
+ // clang-format on
+
+ EXPECT_REPORT(driver, (KC_LSFT, KC_B));
+ caps_word_on();
+
+ tap_key(key_llock);
+ tap_key(key_b);
+ idle_for(CAPS_WORD_IDLE_TIMEOUT);
VERIFY_AND_CLEAR(driver);
}
-// clang-format on
} // namespace
diff --git a/tests/combo/combo_repress/test_combo.cpp b/tests/combo/combo_repress/test_combo.cpp
index 1488d5c1bd..b1a2d36cb3 100644
--- a/tests/combo/combo_repress/test_combo.cpp
+++ b/tests/combo/combo_repress/test_combo.cpp
@@ -2,9 +2,9 @@
// SPDX-License-Identifier: GPL-2.0-or-later
#include "keyboard_report_util.hpp"
-#include "quantum.h"
#include "keycode.h"
#include "test_common.h"
+#include "test_common.hpp"
#include "test_driver.hpp"
#include "test_fixture.hpp"
#include "test_keymap_key.hpp"
diff --git a/tests/combo/test_combo.cpp b/tests/combo/test_combo.cpp
index ac852f9d16..d78ec55990 100644
--- a/tests/combo/test_combo.cpp
+++ b/tests/combo/test_combo.cpp
@@ -3,7 +3,6 @@
// SPDX-License-Identifier: GPL-2.0-or-later
#include "keyboard_report_util.hpp"
-#include "quantum.h"
#include "keycode.h"
#include "test_common.h"
#include "test_driver.hpp"
diff --git a/keyboards/xelus/valor_frl_tkl/rev2_0/config.h b/tests/keycode_string/config.h
index b085b99d88..7fc76d7c2e 100644
--- a/keyboards/xelus/valor_frl_tkl/rev2_0/config.h
+++ b/tests/keycode_string/config.h
@@ -1,4 +1,4 @@
-/* Copyright 2022 Harrison Chan (Xelus)
+/* Copyright 2017 Fred Sundvik
*
* 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
@@ -16,4 +16,4 @@
#pragma once
-#define STM32_HSECLK 16000000
+#include "test_common.h"
diff --git a/tests/keycode_string/test.mk b/tests/keycode_string/test.mk
new file mode 100644
index 0000000000..aa255a1b6b
--- /dev/null
+++ b/tests/keycode_string/test.mk
@@ -0,0 +1,22 @@
+# Copyright 2025 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+EXTRAKEY_ENABLE = yes
+KEYCODE_STRING_ENABLE = yes
+KEY_LOCK_ENABLE = yes
+MAGIC_ENABLE = yes
+MOUSEKEY_ENABLE = yes
+PROGRAMMABLE_BUTTON_ENABLE = yes
+SECURE_ENABLE = yes
+SWAP_HANDS_ENABLE = yes
diff --git a/tests/keycode_string/test_keycode_string.cpp b/tests/keycode_string/test_keycode_string.cpp
new file mode 100644
index 0000000000..e1dec70e7a
--- /dev/null
+++ b/tests/keycode_string/test_keycode_string.cpp
@@ -0,0 +1,153 @@
+// Copyright 2025 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include <iostream>
+
+#include "test_common.hpp"
+
+enum {
+ MYMACRO1 = SAFE_RANGE,
+ MYMACRO2,
+};
+
+// clang-format off
+extern "C" {
+
+KEYCODE_STRING_NAMES_KB(
+ KEYCODE_STRING_NAME(MYMACRO1),
+);
+
+KEYCODE_STRING_NAMES_USER(
+ KEYCODE_STRING_NAME(MYMACRO2),
+ KEYCODE_STRING_NAME(KC_EXLM),
+);
+
+const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
+ {{9, 0}, {8, 0}, {7, 0}, {6, 0}, {5, 0}, {4, 0}, {3, 0}, {2, 0}, {1, 0}, {0, 0}},
+ {{9, 1}, {8, 1}, {7, 1}, {6, 1}, {5, 1}, {4, 1}, {3, 1}, {2, 1}, {1, 1}, {0, 1}},
+ {{9, 2}, {8, 2}, {7, 2}, {6, 2}, {5, 2}, {4, 2}, {3, 2}, {2, 2}, {1, 2}, {0, 2}},
+ {{9, 3}, {8, 3}, {7, 3}, {6, 3}, {5, 3}, {4, 3}, {3, 3}, {2, 3}, {1, 3}, {0, 3}},
+};
+
+} // extern "C"
+// clang-format on
+
+class KeycodeStringTest : public TestFixture {};
+
+TEST_F(KeycodeStringTest, get_keycode_string) {
+ struct TestParams {
+ uint16_t keycode;
+ std::string expected;
+ };
+ for (const auto [keycode, expected] : std::vector<TestParams>({
+ {KC_TRNS, "KC_TRNS"},
+ {KC_ESC, "KC_ESC"},
+ {KC_A, "KC_A"},
+ {KC_Z, "KC_Z"},
+ {KC_0, "KC_0"},
+ {KC_9, "KC_9"},
+ {KC_KP_0, "KC_KP_0"},
+ {KC_KP_9, "KC_KP_9"},
+ {KC_LBRC, "KC_LBRC"},
+ {KC_NUHS, "KC_NUHS"},
+ {KC_NUBS, "KC_NUBS"},
+ {KC_CAPS, "KC_CAPS"},
+ {DB_TOGG, "DB_TOGG"},
+ {KC_LCTL, "KC_LCTL"},
+ {KC_LSFT, "KC_LSFT"},
+ {KC_RALT, "KC_RALT"},
+ {KC_RGUI, "KC_RGUI"},
+ {KC_UP, "KC_UP"},
+ {KC_HYPR, "KC_HYPR"},
+ {KC_MEH, "KC_MEH"},
+ // F1-F24 keycodes.
+ {KC_F1, "KC_F1"},
+ {KC_F12, "KC_F12"},
+ {KC_F13, "KC_F13"},
+ {KC_F24, "KC_F24"},
+ // Macro keycodes.
+ {MC_0, "MC_0"},
+ {MC_31, "MC_31"},
+ // Keyboard range keycodes.
+ {QK_KB_0, "QK_KB_0"},
+ {QK_KB_31, "QK_KB_31"},
+ // User range keycodes.
+ {QK_USER_2, "QK_USER_2"},
+ {QK_USER_31, "QK_USER_31"},
+ // Modified keycodes.
+ {KC_COLN, "S(KC_SCLN)"},
+ {C(KC_PGUP), "C(KC_PGUP)"},
+ {RALT(KC_BSPC), "RALT(KC_BSPC)"},
+ // One-shot mods.
+ {OSM(MOD_LSFT), "OSM(MOD_LSFT)"},
+ {OSM(MOD_RGUI), "OSM(MOD_RGUI)"},
+ {OSM(MOD_RCTL | MOD_RGUI), "OSM(0x19)"},
+ // Layer switch keycodes.
+ {DF(2), "DF(2)"},
+ {PDF(12), "PDF(12)"},
+ {MO(3), "MO(3)"},
+ {TO(0), "TO(0)"},
+ {TT(1), "TT(1)"},
+ {TG(3), "TG(3)"},
+ {OSL(3), "OSL(3)"},
+ {LM(3, MOD_RALT), "LM(3,MOD_RALT)"},
+ {LT(15, KC_QUOT), "LT(15,KC_QUOT)"},
+ // Tap dance keycodes.
+ {TD(0), "TD(0)"},
+ {TD(31), "TD(31)"},
+ // Mod-tap keycodes.
+ {LSFT_T(KC_ENT), "LSFT_T(KC_ENT)"},
+ {RCTL_T(KC_RGHT), "RCTL_T(KC_RGHT)"},
+ {HYPR_T(KC_GRV), "HYPR_T(KC_GRV)"},
+ {MEH_T(KC_EQL), "MEH_T(KC_EQL)"},
+ {RSA_T(KC_LBRC), "MT(0x16,KC_LBRC)"},
+ // Extrakey keycodes.
+ {KC_WBAK, "KC_WBAK"},
+ {KC_WFWD, "KC_WFWD"},
+ {KC_WREF, "KC_WREF"},
+ {KC_VOLU, "KC_VOLU"},
+ {KC_VOLD, "KC_VOLD"},
+ // Mouse Key keycodes.
+ {MS_LEFT, "MS_LEFT"},
+ {MS_RGHT, "MS_RGHT"},
+ {MS_UP, "MS_UP"},
+ {MS_WHLU, "MS_WHLU"},
+ {MS_WHLD, "MS_WHLD"},
+ {MS_BTN1, "MS_BTN1"},
+ {MS_BTN8, "MS_BTN8"},
+ // Swap Hands keycodes.
+ {SH_MON, "SH_MON"},
+ {SH_TOGG, "SH_TOGG"},
+ {SH_T(KC_PSCR), "SH_T(KC_PSCR)"},
+ // Secure keycodes.
+ {SE_LOCK, "SE_LOCK"},
+ {SE_UNLK, "SE_UNLK"},
+ {SE_TOGG, "SE_TOGG"},
+ {SE_REQ, "SE_REQ"},
+ // Programmable button keycodes.
+ {PB_1, "PB_1"},
+ {PB_32, "PB_32"},
+ // Magic button keycodes.
+ {QK_MAGIC + 7, "QK_MAGIC+7"},
+ // Quantum keycodes.
+ {QK_LOCK, "QK_LOCK"},
+ {QK_QUANTUM + 7, "QK_QUANTUM+7"},
+ // Custom keycode names.
+ {MYMACRO1, "MYMACRO1"},
+ {MYMACRO2, "MYMACRO2"},
+ {KC_EXLM, "KC_EXLM"},
+ })) {
+ EXPECT_EQ(get_keycode_string(keycode), expected) << "where keycode = 0x" << std::hex << keycode;
+ }
+}
diff --git a/tests/no_tapping/no_action_tapping/test.mk b/tests/no_tapping/no_action_tapping/test.mk
index 29690d1adf..6ec384609c 100644
--- a/tests/no_tapping/no_action_tapping/test.mk
+++ b/tests/no_tapping/no_action_tapping/test.mk
@@ -15,4 +15,4 @@
# --------------------------------------------------------------------------------
# Keep this file, even if it is empty, as a marker that this folder contains tests
-# -------------------------------------------------------------------------------- \ No newline at end of file
+# --------------------------------------------------------------------------------
diff --git a/tests/no_tapping/no_mod_tap_mods/test.mk b/tests/no_tapping/no_mod_tap_mods/test.mk
index 29690d1adf..6ec384609c 100644
--- a/tests/no_tapping/no_mod_tap_mods/test.mk
+++ b/tests/no_tapping/no_mod_tap_mods/test.mk
@@ -15,4 +15,4 @@
# --------------------------------------------------------------------------------
# Keep this file, even if it is empty, as a marker that this folder contains tests
-# -------------------------------------------------------------------------------- \ No newline at end of file
+# --------------------------------------------------------------------------------
diff --git a/tests/repeat_key/alt_repeat_key/test_alt_repeat_key.cpp b/tests/repeat_key/alt_repeat_key/test_alt_repeat_key.cpp
index ae525acb45..e2eed3dbb6 100644
--- a/tests/repeat_key/alt_repeat_key/test_alt_repeat_key.cpp
+++ b/tests/repeat_key/alt_repeat_key/test_alt_repeat_key.cpp
@@ -210,7 +210,7 @@ TEST_F(AltRepeatKey, GetAltRepeatKeyKeycode) {
{MO(1), 0, KC_NO},
// clang-format on
})) {
- SCOPED_TRACE(std::string("Input keycode: ") + get_keycode_identifier_or_default(params.keycode));
+ SCOPED_TRACE(std::string("Input keycode: ") + get_keycode_string(params.keycode));
set_last_keycode(params.keycode);
set_last_mods(params.mods);
diff --git a/tests/repeat_key/test.mk b/tests/repeat_key/test.mk
index aec8ff3bfb..186207ffc2 100644
--- a/tests/repeat_key/test.mk
+++ b/tests/repeat_key/test.mk
@@ -16,3 +16,4 @@
REPEAT_KEY_ENABLE = yes
AUTO_SHIFT_ENABLE = yes
+LAYER_LOCK_ENABLE = yes
diff --git a/tests/repeat_key/test_repeat_key.cpp b/tests/repeat_key/test_repeat_key.cpp
index eee44fc104..ed5d618761 100644
--- a/tests/repeat_key/test_repeat_key.cpp
+++ b/tests/repeat_key/test_repeat_key.cpp
@@ -751,4 +751,37 @@ TEST_F(RepeatKey, RepeatKeyInvoke) {
testing::Mock::VerifyAndClearExpectations(&driver);
}
+// Check that mods and Layer Lock are not remembered.
+TEST_F(RepeatKey, IgnoredKeys) {
+ TestDriver driver;
+ KeymapKey regular_key(0, 0, 0, KC_A);
+ KeymapKey key_repeat(0, 1, 0, QK_REP);
+ KeymapKey key_lsft(0, 2, 0, KC_LSFT);
+ KeymapKey key_lctl(0, 3, 0, KC_LCTL);
+ KeymapKey key_llck(0, 4, 0, QK_LAYER_LOCK);
+ set_keymap({regular_key, key_repeat, key_lsft, key_lctl, key_llck});
+
+ // Allow any number of empty reports.
+ EXPECT_EMPTY_REPORT(driver).Times(AnyNumber());
+ {
+ InSequence seq;
+ EXPECT_REPORT(driver, (KC_A));
+ EXPECT_REPORT(driver, (KC_LSFT));
+ EXPECT_REPORT(driver, (KC_LCTL));
+ EXPECT_REPORT(driver, (KC_A));
+ EXPECT_REPORT(driver, (KC_A));
+ }
+
+ tap_key(regular_key); // Taps the KC_A key.
+
+ // Tap Shift, Ctrl, and Layer Lock keys, which should not be remembered.
+ tap_keys(key_lsft, key_lctl, key_llck);
+ EXPECT_KEYCODE_EQ(get_last_keycode(), KC_A);
+
+ // Tapping the Repeat Key should still reproduce KC_A.
+ tap_keys(key_repeat, key_repeat);
+
+ testing::Mock::VerifyAndClearExpectations(&driver);
+}
+
} // namespace
diff --git a/keyboards/xelus/valor_frl_tkl/rev2_1/config.h b/tests/tap_hold_configurations/flow_tap/config.h
index b085b99d88..d6f385d8d4 100644
--- a/keyboards/xelus/valor_frl_tkl/rev2_1/config.h
+++ b/tests/tap_hold_configurations/flow_tap/config.h
@@ -1,4 +1,5 @@
-/* Copyright 2022 Harrison Chan (Xelus)
+/* Copyright 2022 Vladislav Kucheriavykh
+ * Copyright 2025 Google LLC
*
* 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
@@ -16,4 +17,7 @@
#pragma once
-#define STM32_HSECLK 16000000
+#include "test_common.h"
+
+#define FLOW_TAP_TERM 150
+#define PERMISSIVE_HOLD
diff --git a/tests/tap_hold_configurations/flow_tap/test.mk b/tests/tap_hold_configurations/flow_tap/test.mk
new file mode 100644
index 0000000000..81ba8da66d
--- /dev/null
+++ b/tests/tap_hold_configurations/flow_tap/test.mk
@@ -0,0 +1,18 @@
+# Copyright 2022 Vladislav Kucheriavykh
+#
+# 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/>.
+
+COMBO_ENABLE = yes
+
+INTROSPECTION_KEYMAP_C = test_keymap.c
diff --git a/tests/tap_hold_configurations/flow_tap/test_keymap.c b/tests/tap_hold_configurations/flow_tap/test_keymap.c
new file mode 100644
index 0000000000..4dfe5e4cb6
--- /dev/null
+++ b/tests/tap_hold_configurations/flow_tap/test_keymap.c
@@ -0,0 +1,23 @@
+// Copyright 2025 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "quantum.h"
+
+uint16_t const mt_lt_combo[] = {SFT_T(KC_X), LT(1, KC_Y), COMBO_END};
+
+// clang-format off
+combo_t key_combos[] = {
+ COMBO(mt_lt_combo, KC_Z),
+};
+// clang-format on
diff --git a/tests/tap_hold_configurations/flow_tap/test_tap_hold.cpp b/tests/tap_hold_configurations/flow_tap/test_tap_hold.cpp
new file mode 100644
index 0000000000..a4233f0d57
--- /dev/null
+++ b/tests/tap_hold_configurations/flow_tap/test_tap_hold.cpp
@@ -0,0 +1,642 @@
+// Copyright 2025 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "keyboard_report_util.hpp"
+#include "keycode.h"
+#include "test_common.hpp"
+#include "action_tapping.h"
+#include "test_fixture.hpp"
+#include "test_keymap_key.hpp"
+
+using testing::_;
+using testing::AnyNumber;
+using testing::InSequence;
+
+class FlowTapTest : public TestFixture {};
+
+// Test an input of quick distinct taps. All should be settled as tapped.
+TEST_F(FlowTapTest, distinct_taps) {
+ TestDriver driver;
+ InSequence s;
+ auto regular_key = KeymapKey(0, 0, 0, KC_A);
+ auto mod_tap_key1 = KeymapKey(0, 1, 0, SFT_T(KC_B));
+ auto mod_tap_key2 = KeymapKey(0, 2, 0, CTL_T(KC_C));
+ auto mod_tap_key3 = KeymapKey(0, 3, 0, ALT_T(KC_D));
+
+ set_keymap({regular_key, mod_tap_key1, mod_tap_key2, mod_tap_key3});
+
+ // Tap regular key.
+ EXPECT_REPORT(driver, (KC_A));
+ EXPECT_EMPTY_REPORT(driver);
+ tap_key(regular_key, FLOW_TAP_TERM + 1);
+ VERIFY_AND_CLEAR(driver);
+
+ // Tap mod-tap 1.
+ EXPECT_REPORT(driver, (KC_B));
+ mod_tap_key1.press();
+ run_one_scan_loop();
+ VERIFY_AND_CLEAR(driver);
+
+ EXPECT_EMPTY_REPORT(driver);
+ idle_for(FLOW_TAP_TERM + 1);
+ mod_tap_key1.release();
+ run_one_scan_loop();
+ VERIFY_AND_CLEAR(driver);
+
+ // Tap mod-tap 2.
+ EXPECT_REPORT(driver, (KC_C));
+ mod_tap_key2.press();
+ run_one_scan_loop();
+ VERIFY_AND_CLEAR(driver);
+
+ EXPECT_EMPTY_REPORT(driver);
+ idle_for(FLOW_TAP_TERM + 1);
+ mod_tap_key2.release();
+ run_one_scan_loop();
+ VERIFY_AND_CLEAR(driver);
+
+ // Tap mod-tap 3.
+ EXPECT_REPORT(driver, (KC_D));
+ mod_tap_key3.press();
+ run_one_scan_loop();
+ VERIFY_AND_CLEAR(driver);
+
+ EXPECT_EMPTY_REPORT(driver);
+ idle_for(FLOW_TAP_TERM + 1);
+ mod_tap_key3.release();
+ idle_for(FLOW_TAP_TERM + 1); // Pause between taps.
+ VERIFY_AND_CLEAR(driver);
+
+ // Tap mod-tap 1.
+ EXPECT_NO_REPORT(driver);
+ mod_tap_key1.press();
+ run_one_scan_loop();
+ VERIFY_AND_CLEAR(driver);
+
+ EXPECT_REPORT(driver, (KC_B));
+ EXPECT_EMPTY_REPORT(driver);
+ idle_for(FLOW_TAP_TERM + 1);
+ mod_tap_key1.release();
+ run_one_scan_loop();
+ VERIFY_AND_CLEAR(driver);
+
+ // Tap mod-tap 2.
+ EXPECT_REPORT(driver, (KC_C));
+ mod_tap_key2.press();
+ run_one_scan_loop();
+ VERIFY_AND_CLEAR(driver);
+
+ EXPECT_EMPTY_REPORT(driver);
+ idle_for(FLOW_TAP_TERM + 1);
+ mod_tap_key2.release();
+ idle_for(FLOW_TAP_TERM + 1);
+ VERIFY_AND_CLEAR(driver);
+}
+
+// By default, Flow Tap is disabled when mods other than Shift and AltGr are on.
+TEST_F(FlowTapTest, hotkey_taps) {
+ TestDriver driver;
+ InSequence s;
+ auto ctrl_key = KeymapKey(0, 0, 0, KC_LCTL);
+ auto shft_key = KeymapKey(0, 1, 0, KC_LSFT);
+ auto alt_key = KeymapKey(0, 2, 0, KC_LALT);
+ auto gui_key = KeymapKey(0, 3, 0, KC_LGUI);
+ auto regular_key = KeymapKey(0, 4, 0, KC_A);
+ auto mod_tap_key = KeymapKey(0, 5, 0, RCTL_T(KC_B));
+
+ set_keymap({ctrl_key, shft_key, alt_key, gui_key, regular_key, mod_tap_key});
+
+ for (KeymapKey* mod_key : {&ctrl_key, &alt_key, &gui_key}) {
+ // Hold mod key.
+ EXPECT_REPORT(driver, (mod_key->code));
+ mod_key->press();
+ run_one_scan_loop();
+
+ // Tap regular key.
+ EXPECT_REPORT(driver, (mod_key->code, KC_A));
+ regular_key.press();
+ run_one_scan_loop();
+ VERIFY_AND_CLEAR(driver);
+
+ EXPECT_REPORT(driver, (mod_key->code));
+ regular_key.release();
+ run_one_scan_loop();
+ VERIFY_AND_CLEAR(driver);
+
+ // Press mod-tap, where Flow Tap is disabled due to the held mod.
+ EXPECT_REPORT(driver, (mod_key->code, KC_RCTL));
+ mod_tap_key.press();
+ idle_for(TAPPING_TERM + 1);
+ VERIFY_AND_CLEAR(driver);
+
+ // Release mod-tap.
+ EXPECT_REPORT(driver, (mod_key->code));
+ mod_tap_key.release();
+ run_one_scan_loop();
+
+ // Release mod key.
+ EXPECT_EMPTY_REPORT(driver);
+ mod_key->release();
+ run_one_scan_loop();
+ VERIFY_AND_CLEAR(driver);
+ }
+
+ // Hold Shift key.
+ EXPECT_REPORT(driver, (KC_LSFT));
+ shft_key.press();
+ run_one_scan_loop();
+
+ // Tap regular key.
+ EXPECT_REPORT(driver, (KC_LSFT, KC_A));
+ regular_key.press();
+ run_one_scan_loop();
+ VERIFY_AND_CLEAR(driver);
+
+ EXPECT_REPORT(driver, (KC_LSFT));
+ regular_key.release();
+ run_one_scan_loop();
+ VERIFY_AND_CLEAR(driver);
+
+ // Press mod-tap, where Flow Tap applies to settle as tapped.
+ EXPECT_REPORT(driver, (KC_LSFT, KC_B));
+ mod_tap_key.press();
+ idle_for(TAPPING_TERM + 1);
+ VERIFY_AND_CLEAR(driver);
+
+ // Release mod-tap.
+ EXPECT_REPORT(driver, (KC_LSFT));
+ mod_tap_key.release();
+ run_one_scan_loop();
+
+ // Release Shift key.
+ EXPECT_EMPTY_REPORT(driver);
+ shft_key.release();
+ run_one_scan_loop();
+ VERIFY_AND_CLEAR(driver);
+}
+
+// Test input with two mod-taps in a rolled press quickly after a regular key.
+TEST_F(FlowTapTest, rolled_press) {
+ TestDriver driver;
+ InSequence s;
+ auto regular_key = KeymapKey(0, 0, 0, KC_A);
+ auto mod_tap_key1 = KeymapKey(0, 1, 0, SFT_T(KC_B));
+ auto mod_tap_key2 = KeymapKey(0, 2, 0, CTL_T(KC_C));
+
+ set_keymap({regular_key, mod_tap_key1, mod_tap_key2});
+
+ // Tap regular key.
+ EXPECT_REPORT(driver, (KC_A));
+ EXPECT_EMPTY_REPORT(driver);
+ tap_key(regular_key);
+ VERIFY_AND_CLEAR(driver);
+
+ // Press mod-tap key 1 quickly after regular key. The mod-tap should settle
+ // immediately as tapped, sending `KC_B`.
+ EXPECT_REPORT(driver, (KC_B));
+ mod_tap_key1.press();
+ run_one_scan_loop();
+ VERIFY_AND_CLEAR(driver);
+
+ // Press mod-tap key 2 quickly.
+ EXPECT_REPORT(driver, (KC_B, KC_C));
+ mod_tap_key2.press();
+ run_one_scan_loop();
+ VERIFY_AND_CLEAR(driver);
+
+ // Hold for longer than the tapping term.
+ EXPECT_NO_REPORT(driver);
+ idle_for(TAPPING_TERM + 1);
+ VERIFY_AND_CLEAR(driver);
+
+ // Release mod-tap keys.
+ EXPECT_REPORT(driver, (KC_C));
+ EXPECT_EMPTY_REPORT(driver);
+ mod_tap_key1.release();
+ run_one_scan_loop();
+ mod_tap_key2.release();
+ run_one_scan_loop();
+ VERIFY_AND_CLEAR(driver);
+}
+
+TEST_F(FlowTapTest, long_flow_tap_settled_as_held) {
+ TestDriver driver;
+ InSequence s;
+ auto regular_key = KeymapKey(0, 0, 0, KC_A);
+ auto mod_tap_key = KeymapKey(0, 1, 0, SFT_T(KC_B));
+
+ set_keymap({regular_key, mod_tap_key});
+
+ // Tap regular key.
+ EXPECT_REPORT(driver, (KC_A));
+ EXPECT_EMPTY_REPORT(driver);
+ tap_key(regular_key);
+ VERIFY_AND_CLEAR(driver);
+
+ EXPECT_NO_REPORT(driver);
+ idle_for(FLOW_TAP_TERM + 1);
+ VERIFY_AND_CLEAR(driver);
+
+ // Press mod-tap key.
+ EXPECT_NO_REPORT(driver);
+ mod_tap_key.press();
+ run_one_scan_loop();
+ VERIFY_AND_CLEAR(driver);
+
+ // Hold for the tapping term.
+ EXPECT_REPORT(driver, (KC_LSFT));
+ idle_for(TAPPING_TERM);
+ VERIFY_AND_CLEAR(driver);
+
+ // Release mod-tap key.
+ EXPECT_EMPTY_REPORT(driver);
+ mod_tap_key.release();
+ run_one_scan_loop();
+ VERIFY_AND_CLEAR(driver);
+}
+
+TEST_F(FlowTapTest, holding_multiple_mod_taps) {
+ TestDriver driver;
+ InSequence s;
+ auto regular_key = KeymapKey(0, 0, 0, KC_A);
+ auto mod_tap_key1 = KeymapKey(0, 1, 0, SFT_T(KC_B));
+ auto mod_tap_key2 = KeymapKey(0, 2, 0, CTL_T(KC_C));
+
+ set_keymap({regular_key, mod_tap_key1, mod_tap_key2});
+
+ // Tap regular key.
+ EXPECT_REPORT(driver, (KC_A));
+ EXPECT_EMPTY_REPORT(driver);
+ tap_key(regular_key);
+ VERIFY_AND_CLEAR(driver);
+
+ EXPECT_NO_REPORT(driver);
+ idle_for(FLOW_TAP_TERM + 1);
+ VERIFY_AND_CLEAR(driver);
+
+ // Press mod-tap keys.
+ EXPECT_NO_REPORT(driver);
+ mod_tap_key1.press();
+ run_one_scan_loop();
+ mod_tap_key2.press();
+ idle_for(TAPPING_TERM - 5); // Hold almost until tapping term.
+ VERIFY_AND_CLEAR(driver);
+
+ // Press regular key.
+ EXPECT_REPORT(driver, (KC_LSFT));
+ EXPECT_REPORT(driver, (KC_LSFT, KC_LCTL));
+ EXPECT_REPORT(driver, (KC_LSFT, KC_LCTL, KC_A));
+ regular_key.press();
+ idle_for(10);
+ VERIFY_AND_CLEAR(driver);
+
+ // Release keys.
+ EXPECT_REPORT(driver, (KC_LSFT, KC_LCTL));
+ EXPECT_REPORT(driver, (KC_LCTL));
+ EXPECT_EMPTY_REPORT(driver);
+ regular_key.release();
+ run_one_scan_loop();
+ mod_tap_key1.release();
+ run_one_scan_loop();
+ mod_tap_key2.release();
+ run_one_scan_loop();
+ VERIFY_AND_CLEAR(driver);
+}
+
+TEST_F(FlowTapTest, holding_mod_tap_with_regular_mod) {
+ TestDriver driver;
+ InSequence s;
+ auto regular_key = KeymapKey(0, 0, 0, KC_A);
+ auto mod_key = KeymapKey(0, 1, 0, KC_LSFT);
+ auto mod_tap_key = KeymapKey(0, 2, 0, CTL_T(KC_C));
+
+ set_keymap({regular_key, mod_key, mod_tap_key});
+
+ // Tap regular key.
+ EXPECT_REPORT(driver, (KC_A));
+ EXPECT_EMPTY_REPORT(driver);
+ tap_key(regular_key);
+ VERIFY_AND_CLEAR(driver);
+
+ EXPECT_NO_REPORT(driver);
+ idle_for(FLOW_TAP_TERM + 1);
+ VERIFY_AND_CLEAR(driver);
+
+ // Press mod and mod-tap keys.
+ EXPECT_REPORT(driver, (KC_LSFT));
+ mod_key.press();
+ run_one_scan_loop();
+ mod_tap_key.press();
+ idle_for(TAPPING_TERM - 5); // Hold almost until tapping term.
+ VERIFY_AND_CLEAR(driver);
+
+ // Press regular key.
+ EXPECT_REPORT(driver, (KC_LSFT, KC_LCTL));
+ EXPECT_REPORT(driver, (KC_LSFT, KC_LCTL, KC_A));
+ regular_key.press();
+ idle_for(10);
+ VERIFY_AND_CLEAR(driver);
+
+ // Release keys.
+ EXPECT_REPORT(driver, (KC_LSFT, KC_LCTL));
+ EXPECT_REPORT(driver, (KC_LCTL));
+ EXPECT_EMPTY_REPORT(driver);
+ regular_key.release();
+ run_one_scan_loop();
+ mod_key.release();
+ run_one_scan_loop();
+ mod_tap_key.release();
+ run_one_scan_loop();
+ VERIFY_AND_CLEAR(driver);
+}
+
+TEST_F(FlowTapTest, layer_tap_key) {
+ TestDriver driver;
+ InSequence s;
+ auto regular_key = KeymapKey(0, 0, 0, KC_A);
+ auto layer_tap_key = KeymapKey(0, 1, 0, LT(1, KC_B));
+ auto regular_key2 = KeymapKey(1, 0, 0, KC_C);
+
+ set_keymap({regular_key, layer_tap_key, regular_key2});
+
+ // Tap regular key.
+ EXPECT_REPORT(driver, (KC_A));
+ EXPECT_EMPTY_REPORT(driver);
+ tap_key(regular_key);
+ VERIFY_AND_CLEAR(driver);
+
+ // Press layer-tap key, quickly after the regular key.
+ EXPECT_REPORT(driver, (KC_B));
+ layer_tap_key.press();
+ run_one_scan_loop();
+ VERIFY_AND_CLEAR(driver);
+
+ EXPECT_NO_REPORT(driver);
+ idle_for(TAPPING_TERM + 1);
+ VERIFY_AND_CLEAR(driver);
+
+ // Release layer-tap key.
+ EXPECT_EMPTY_REPORT(driver);
+ layer_tap_key.release();
+ run_one_scan_loop();
+
+ // Tap regular key.
+ EXPECT_REPORT(driver, (KC_A));
+ EXPECT_EMPTY_REPORT(driver);
+ tap_key(regular_key);
+ VERIFY_AND_CLEAR(driver);
+
+ EXPECT_NO_REPORT(driver);
+ idle_for(FLOW_TAP_TERM + 1);
+ VERIFY_AND_CLEAR(driver);
+
+ // Press layer-tap key, slowly after the regular key.
+ EXPECT_NO_REPORT(driver);
+ layer_tap_key.press();
+ run_one_scan_loop();
+ VERIFY_AND_CLEAR(driver);
+
+ EXPECT_NO_REPORT(driver);
+ idle_for(TAPPING_TERM + 1);
+ EXPECT_EQ(layer_state, 1 << 1);
+ VERIFY_AND_CLEAR(driver);
+
+ // Tap regular key2.
+ EXPECT_REPORT(driver, (KC_C));
+ EXPECT_EMPTY_REPORT(driver);
+ tap_key(regular_key);
+ VERIFY_AND_CLEAR(driver);
+
+ // Release layer-tap key.
+ EXPECT_NO_REPORT(driver);
+ layer_tap_key.release();
+ run_one_scan_loop();
+ VERIFY_AND_CLEAR(driver);
+}
+
+TEST_F(FlowTapTest, layer_tap_ignored_with_disabled_key) {
+ TestDriver driver;
+ InSequence s;
+ auto no_key = KeymapKey(0, 0, 0, KC_NO);
+ auto regular_key = KeymapKey(1, 0, 0, KC_ESC);
+ auto layer_tap_key = KeymapKey(0, 1, 0, LT(1, KC_A));
+ auto mod_tap_key = KeymapKey(0, 2, 0, CTL_T(KC_B));
+
+ set_keymap({no_key, regular_key, layer_tap_key, mod_tap_key});
+
+ EXPECT_REPORT(driver, (KC_ESC));
+ EXPECT_EMPTY_REPORT(driver);
+ layer_tap_key.press();
+ idle_for(TAPPING_TERM + 1);
+ tap_key(regular_key);
+ layer_tap_key.release();
+ run_one_scan_loop();
+ VERIFY_AND_CLEAR(driver);
+
+ EXPECT_REPORT(driver, (KC_LCTL));
+ mod_tap_key.press();
+ idle_for(TAPPING_TERM + 1);
+ VERIFY_AND_CLEAR(driver);
+
+ EXPECT_EMPTY_REPORT(driver);
+ mod_tap_key.release();
+ run_one_scan_loop();
+ VERIFY_AND_CLEAR(driver);
+}
+
+TEST_F(FlowTapTest, layer_tap_ignored_with_disabled_key_complex) {
+ TestDriver driver;
+ InSequence s;
+ auto regular_key1 = KeymapKey(0, 0, 0, KC_Q);
+ auto layer_tap_key = KeymapKey(0, 1, 0, LT(1, KC_SPC));
+ auto mod_tap_key1 = KeymapKey(0, 2, 0, CTL_T(KC_T));
+ // Place RALT_T(KC_I), where Flow Tap is enabled, in the same position on
+ // layer 0 as KC_RGHT, where Flow Tap is disabled. This tests that Flow Tap
+ // tracks the keycode from the correct layer.
+ auto mod_tap_key2 = KeymapKey(0, 3, 0, RALT_T(KC_I));
+ auto regular_key2 = KeymapKey(1, 3, 0, KC_RGHT);
+
+ set_keymap({regular_key1, layer_tap_key, mod_tap_key1, mod_tap_key2, regular_key2});
+
+ // Tap regular key 1.
+ EXPECT_REPORT(driver, (KC_Q));
+ EXPECT_EMPTY_REPORT(driver);
+ tap_key(regular_key1);
+ idle_for(FLOW_TAP_TERM + 1);
+ VERIFY_AND_CLEAR(driver);
+
+ // Hold layer-tap key.
+ EXPECT_NO_REPORT(driver);
+ layer_tap_key.press();
+ run_one_scan_loop();
+ // idle_for(TAPPING_TERM + 1);
+ VERIFY_AND_CLEAR(driver);
+
+ // Tap regular key 2.
+ EXPECT_REPORT(driver, (KC_RGHT));
+ EXPECT_EMPTY_REPORT(driver);
+ tap_key(regular_key2);
+ VERIFY_AND_CLEAR(driver);
+
+ // Release layer-tap key.
+ EXPECT_NO_REPORT(driver);
+ layer_tap_key.release();
+ run_one_scan_loop();
+ VERIFY_AND_CLEAR(driver);
+
+ // Quickly hold mod-tap key 1.
+ EXPECT_NO_REPORT(driver);
+ mod_tap_key1.press();
+ run_one_scan_loop();
+ VERIFY_AND_CLEAR(driver);
+
+ EXPECT_REPORT(driver, (KC_LCTL));
+ EXPECT_REPORT(driver, (KC_LCTL, KC_Q));
+ EXPECT_REPORT(driver, (KC_LCTL));
+ tap_key(regular_key1);
+ VERIFY_AND_CLEAR(driver);
+
+ EXPECT_EMPTY_REPORT(driver);
+ mod_tap_key1.release();
+ run_one_scan_loop();
+ VERIFY_AND_CLEAR(driver);
+}
+
+TEST_F(FlowTapTest, layer_tap_ignored_with_enabled_key) {
+ TestDriver driver;
+ InSequence s;
+ auto no_key = KeymapKey(0, 0, 0, KC_NO);
+ auto regular_key = KeymapKey(1, 0, 0, KC_C);
+ auto layer_tap_key = KeymapKey(0, 1, 0, LT(1, KC_A));
+ auto mod_tap_key = KeymapKey(0, 2, 0, CTL_T(KC_B));
+
+ set_keymap({no_key, regular_key, layer_tap_key, mod_tap_key});
+
+ EXPECT_REPORT(driver, (KC_C));
+ EXPECT_EMPTY_REPORT(driver);
+ layer_tap_key.press();
+ idle_for(TAPPING_TERM + 1);
+ tap_key(regular_key);
+ layer_tap_key.release();
+ run_one_scan_loop();
+ VERIFY_AND_CLEAR(driver);
+
+ EXPECT_REPORT(driver, (KC_B));
+ mod_tap_key.press();
+ run_one_scan_loop();
+ VERIFY_AND_CLEAR(driver);
+
+ EXPECT_EMPTY_REPORT(driver);
+ idle_for(TAPPING_TERM + 1);
+ mod_tap_key.release();
+ run_one_scan_loop();
+ VERIFY_AND_CLEAR(driver);
+}
+
+TEST_F(FlowTapTest, combo_key) {
+ TestDriver driver;
+ InSequence s;
+ auto regular_key = KeymapKey(0, 0, 0, KC_A);
+ auto mod_tap_key = KeymapKey(0, 1, 0, SFT_T(KC_X));
+ auto layer_tap_key = KeymapKey(0, 2, 0, LT(1, KC_Y));
+
+ set_keymap({regular_key, mod_tap_key, layer_tap_key});
+
+ // Tap regular key.
+ EXPECT_REPORT(driver, (KC_A));
+ EXPECT_EMPTY_REPORT(driver);
+ tap_key(regular_key);
+ VERIFY_AND_CLEAR(driver);
+
+ // Press combo keys quickly after regular key.
+ EXPECT_REPORT(driver, (KC_Z));
+ EXPECT_EMPTY_REPORT(driver);
+ tap_combo({mod_tap_key, layer_tap_key});
+ VERIFY_AND_CLEAR(driver);
+
+ // Press mod-tap key quickly.
+ EXPECT_REPORT(driver, (KC_X));
+ mod_tap_key.press();
+ idle_for(TAPPING_TERM + 1);
+ VERIFY_AND_CLEAR(driver);
+
+ // Release mod-tap key.
+ EXPECT_EMPTY_REPORT(driver);
+ mod_tap_key.release();
+ run_one_scan_loop();
+ VERIFY_AND_CLEAR(driver);
+}
+
+TEST_F(FlowTapTest, oneshot_mod_key) {
+ TestDriver driver;
+ InSequence s;
+ auto regular_key = KeymapKey(0, 0, 0, KC_A);
+ auto osm_key = KeymapKey(0, 1, 0, OSM(MOD_LSFT));
+
+ set_keymap({regular_key, osm_key});
+
+ // Tap regular key.
+ EXPECT_REPORT(driver, (KC_A));
+ EXPECT_EMPTY_REPORT(driver);
+ tap_key(regular_key);
+ VERIFY_AND_CLEAR(driver);
+
+ // Tap OSM, tap regular key.
+ EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT))).Times(AnyNumber());
+ EXPECT_REPORT(driver, (KC_LSFT, KC_A));
+ EXPECT_EMPTY_REPORT(driver);
+ tap_key(osm_key);
+ tap_key(regular_key);
+ VERIFY_AND_CLEAR(driver);
+
+ // Nested press of OSM and regular keys.
+ EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT))).Times(AnyNumber());
+ EXPECT_REPORT(driver, (KC_LSFT, KC_A));
+ EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT))).Times(AnyNumber());
+ EXPECT_EMPTY_REPORT(driver);
+ osm_key.press();
+ run_one_scan_loop();
+ tap_key(regular_key);
+ osm_key.release();
+ run_one_scan_loop();
+ VERIFY_AND_CLEAR(driver);
+}
+
+TEST_F(FlowTapTest, quick_tap) {
+ TestDriver driver;
+ InSequence s;
+ auto mod_tap_key = KeymapKey(0, 1, 0, SFT_T(KC_A));
+
+ set_keymap({mod_tap_key});
+
+ EXPECT_REPORT(driver, (KC_A));
+ EXPECT_EMPTY_REPORT(driver);
+ tap_key(mod_tap_key);
+ VERIFY_AND_CLEAR(driver);
+
+ EXPECT_REPORT(driver, (KC_A));
+ mod_tap_key.press();
+ run_one_scan_loop();
+ VERIFY_AND_CLEAR(driver);
+
+ EXPECT_NO_REPORT(driver);
+ idle_for(TAPPING_TERM + 1);
+ VERIFY_AND_CLEAR(driver);
+
+ // Release mod-tap key.
+ EXPECT_EMPTY_REPORT(driver);
+ mod_tap_key.release();
+ run_one_scan_loop();
+ VERIFY_AND_CLEAR(driver);
+}
diff --git a/tests/test_common/build.mk b/tests/test_common/build.mk
index d7423bc78a..385da7adf9 100644
--- a/tests/test_common/build.mk
+++ b/tests/test_common/build.mk
@@ -14,3 +14,4 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
CUSTOM_MATRIX=yes
+KEYCODE_STRING_ENABLE = yes
diff --git a/tests/test_common/keyboard_report_util.cpp b/tests/test_common/keyboard_report_util.cpp
index 18e0574277..5e40323669 100644
--- a/tests/test_common/keyboard_report_util.cpp
+++ b/tests/test_common/keyboard_report_util.cpp
@@ -19,6 +19,10 @@
#include <vector>
#include <algorithm>
+extern "C" {
+#include "keycode_string.h"
+}
+
using namespace testing;
extern std::map<uint16_t, std::string> KEYCODE_ID_TABLE;
@@ -72,7 +76,7 @@ std::ostream& operator<<(std::ostream& os, const report_keyboard_t& report) {
os << "(";
for (auto key = keys.cbegin(); key != keys.cend();) {
- os << KEYCODE_ID_TABLE.at(*key);
+ os << get_keycode_string(*key);
key++;
if (key != keys.cend()) {
os << ", ";
@@ -82,7 +86,7 @@ std::ostream& operator<<(std::ostream& os, const report_keyboard_t& report) {
os << ") [";
for (auto mod = mods.cbegin(); mod != mods.cend();) {
- os << KEYCODE_ID_TABLE.at(*mod);
+ os << get_keycode_string(*mod);
mod++;
if (mod != mods.cend()) {
os << ", ";
diff --git a/tests/test_common/keycode_table.cpp b/tests/test_common/keycode_table.cpp
deleted file mode 100644
index 26d0919619..0000000000
--- a/tests/test_common/keycode_table.cpp
+++ /dev/null
@@ -1,767 +0,0 @@
-// Copyright 2025 QMK
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-/*******************************************************************************
- 88888888888 888 d8b .d888 d8b 888 d8b
- 888 888 Y8P d88P" Y8P 888 Y8P
- 888 888 888 888
- 888 88888b. 888 .d8888b 888888 888 888 .d88b. 888 .d8888b
- 888 888 "88b 888 88K 888 888 888 d8P Y8b 888 88K
- 888 888 888 888 "Y8888b. 888 888 888 88888888 888 "Y8888b.
- 888 888 888 888 X88 888 888 888 Y8b. 888 X88
- 888 888 888 888 88888P' 888 888 888 "Y8888 888 88888P'
- 888 888
- 888 888
- 888 888
- .d88b. .d88b. 88888b. .d88b. 888d888 8888b. 888888 .d88b. .d88888
- d88P"88b d8P Y8b 888 "88b d8P Y8b 888P" "88b 888 d8P Y8b d88" 888
- 888 888 88888888 888 888 88888888 888 .d888888 888 88888888 888 888
- Y88b 888 Y8b. 888 888 Y8b. 888 888 888 Y88b. Y8b. Y88b 888
- "Y88888 "Y8888 888 888 "Y8888 888 "Y888888 "Y888 "Y8888 "Y88888
- 888
- Y8b d88P
- "Y88P"
-*******************************************************************************/
-
-// clang-format off
-extern "C" {
-#include <keycode.h>
-}
-#include <map>
-#include <string>
-#include <cstdint>
-
-std::map<uint16_t, std::string> KEYCODE_ID_TABLE = {
- {KC_NO, "KC_NO"},
- {KC_TRANSPARENT, "KC_TRANSPARENT"},
- {KC_A, "KC_A"},
- {KC_B, "KC_B"},
- {KC_C, "KC_C"},
- {KC_D, "KC_D"},
- {KC_E, "KC_E"},
- {KC_F, "KC_F"},
- {KC_G, "KC_G"},
- {KC_H, "KC_H"},
- {KC_I, "KC_I"},
- {KC_J, "KC_J"},
- {KC_K, "KC_K"},
- {KC_L, "KC_L"},
- {KC_M, "KC_M"},
- {KC_N, "KC_N"},
- {KC_O, "KC_O"},
- {KC_P, "KC_P"},
- {KC_Q, "KC_Q"},
- {KC_R, "KC_R"},
- {KC_S, "KC_S"},
- {KC_T, "KC_T"},
- {KC_U, "KC_U"},
- {KC_V, "KC_V"},
- {KC_W, "KC_W"},
- {KC_X, "KC_X"},
- {KC_Y, "KC_Y"},
- {KC_Z, "KC_Z"},
- {KC_1, "KC_1"},
- {KC_2, "KC_2"},
- {KC_3, "KC_3"},
- {KC_4, "KC_4"},
- {KC_5, "KC_5"},
- {KC_6, "KC_6"},
- {KC_7, "KC_7"},
- {KC_8, "KC_8"},
- {KC_9, "KC_9"},
- {KC_0, "KC_0"},
- {KC_ENTER, "KC_ENTER"},
- {KC_ESCAPE, "KC_ESCAPE"},
- {KC_BACKSPACE, "KC_BACKSPACE"},
- {KC_TAB, "KC_TAB"},
- {KC_SPACE, "KC_SPACE"},
- {KC_MINUS, "KC_MINUS"},
- {KC_EQUAL, "KC_EQUAL"},
- {KC_LEFT_BRACKET, "KC_LEFT_BRACKET"},
- {KC_RIGHT_BRACKET, "KC_RIGHT_BRACKET"},
- {KC_BACKSLASH, "KC_BACKSLASH"},
- {KC_NONUS_HASH, "KC_NONUS_HASH"},
- {KC_SEMICOLON, "KC_SEMICOLON"},
- {KC_QUOTE, "KC_QUOTE"},
- {KC_GRAVE, "KC_GRAVE"},
- {KC_COMMA, "KC_COMMA"},
- {KC_DOT, "KC_DOT"},
- {KC_SLASH, "KC_SLASH"},
- {KC_CAPS_LOCK, "KC_CAPS_LOCK"},
- {KC_F1, "KC_F1"},
- {KC_F2, "KC_F2"},
- {KC_F3, "KC_F3"},
- {KC_F4, "KC_F4"},
- {KC_F5, "KC_F5"},
- {KC_F6, "KC_F6"},
- {KC_F7, "KC_F7"},
- {KC_F8, "KC_F8"},
- {KC_F9, "KC_F9"},
- {KC_F10, "KC_F10"},
- {KC_F11, "KC_F11"},
- {KC_F12, "KC_F12"},
- {KC_PRINT_SCREEN, "KC_PRINT_SCREEN"},
- {KC_SCROLL_LOCK, "KC_SCROLL_LOCK"},
- {KC_PAUSE, "KC_PAUSE"},
- {KC_INSERT, "KC_INSERT"},
- {KC_HOME, "KC_HOME"},
- {KC_PAGE_UP, "KC_PAGE_UP"},
- {KC_DELETE, "KC_DELETE"},
- {KC_END, "KC_END"},
- {KC_PAGE_DOWN, "KC_PAGE_DOWN"},
- {KC_RIGHT, "KC_RIGHT"},
- {KC_LEFT, "KC_LEFT"},
- {KC_DOWN, "KC_DOWN"},
- {KC_UP, "KC_UP"},
- {KC_NUM_LOCK, "KC_NUM_LOCK"},
- {KC_KP_SLASH, "KC_KP_SLASH"},
- {KC_KP_ASTERISK, "KC_KP_ASTERISK"},
- {KC_KP_MINUS, "KC_KP_MINUS"},
- {KC_KP_PLUS, "KC_KP_PLUS"},
- {KC_KP_ENTER, "KC_KP_ENTER"},
- {KC_KP_1, "KC_KP_1"},
- {KC_KP_2, "KC_KP_2"},
- {KC_KP_3, "KC_KP_3"},
- {KC_KP_4, "KC_KP_4"},
- {KC_KP_5, "KC_KP_5"},
- {KC_KP_6, "KC_KP_6"},
- {KC_KP_7, "KC_KP_7"},
- {KC_KP_8, "KC_KP_8"},
- {KC_KP_9, "KC_KP_9"},
- {KC_KP_0, "KC_KP_0"},
- {KC_KP_DOT, "KC_KP_DOT"},
- {KC_NONUS_BACKSLASH, "KC_NONUS_BACKSLASH"},
- {KC_APPLICATION, "KC_APPLICATION"},
- {KC_KB_POWER, "KC_KB_POWER"},
- {KC_KP_EQUAL, "KC_KP_EQUAL"},
- {KC_F13, "KC_F13"},
- {KC_F14, "KC_F14"},
- {KC_F15, "KC_F15"},
- {KC_F16, "KC_F16"},
- {KC_F17, "KC_F17"},
- {KC_F18, "KC_F18"},
- {KC_F19, "KC_F19"},
- {KC_F20, "KC_F20"},
- {KC_F21, "KC_F21"},
- {KC_F22, "KC_F22"},
- {KC_F23, "KC_F23"},
- {KC_F24, "KC_F24"},
- {KC_EXECUTE, "KC_EXECUTE"},
- {KC_HELP, "KC_HELP"},
- {KC_MENU, "KC_MENU"},
- {KC_SELECT, "KC_SELECT"},
- {KC_STOP, "KC_STOP"},
- {KC_AGAIN, "KC_AGAIN"},
- {KC_UNDO, "KC_UNDO"},
- {KC_CUT, "KC_CUT"},
- {KC_COPY, "KC_COPY"},
- {KC_PASTE, "KC_PASTE"},
- {KC_FIND, "KC_FIND"},
- {KC_KB_MUTE, "KC_KB_MUTE"},
- {KC_KB_VOLUME_UP, "KC_KB_VOLUME_UP"},
- {KC_KB_VOLUME_DOWN, "KC_KB_VOLUME_DOWN"},
- {KC_LOCKING_CAPS_LOCK, "KC_LOCKING_CAPS_LOCK"},
- {KC_LOCKING_NUM_LOCK, "KC_LOCKING_NUM_LOCK"},
- {KC_LOCKING_SCROLL_LOCK, "KC_LOCKING_SCROLL_LOCK"},
- {KC_KP_COMMA, "KC_KP_COMMA"},
- {KC_KP_EQUAL_AS400, "KC_KP_EQUAL_AS400"},
- {KC_INTERNATIONAL_1, "KC_INTERNATIONAL_1"},
- {KC_INTERNATIONAL_2, "KC_INTERNATIONAL_2"},
- {KC_INTERNATIONAL_3, "KC_INTERNATIONAL_3"},
- {KC_INTERNATIONAL_4, "KC_INTERNATIONAL_4"},
- {KC_INTERNATIONAL_5, "KC_INTERNATIONAL_5"},
- {KC_INTERNATIONAL_6, "KC_INTERNATIONAL_6"},
- {KC_INTERNATIONAL_7, "KC_INTERNATIONAL_7"},
- {KC_INTERNATIONAL_8, "KC_INTERNATIONAL_8"},
- {KC_INTERNATIONAL_9, "KC_INTERNATIONAL_9"},
- {KC_LANGUAGE_1, "KC_LANGUAGE_1"},
- {KC_LANGUAGE_2, "KC_LANGUAGE_2"},
- {KC_LANGUAGE_3, "KC_LANGUAGE_3"},
- {KC_LANGUAGE_4, "KC_LANGUAGE_4"},
- {KC_LANGUAGE_5, "KC_LANGUAGE_5"},
- {KC_LANGUAGE_6, "KC_LANGUAGE_6"},
- {KC_LANGUAGE_7, "KC_LANGUAGE_7"},
- {KC_LANGUAGE_8, "KC_LANGUAGE_8"},
- {KC_LANGUAGE_9, "KC_LANGUAGE_9"},
- {KC_ALTERNATE_ERASE, "KC_ALTERNATE_ERASE"},
- {KC_SYSTEM_REQUEST, "KC_SYSTEM_REQUEST"},
- {KC_CANCEL, "KC_CANCEL"},
- {KC_CLEAR, "KC_CLEAR"},
- {KC_PRIOR, "KC_PRIOR"},
- {KC_RETURN, "KC_RETURN"},
- {KC_SEPARATOR, "KC_SEPARATOR"},
- {KC_OUT, "KC_OUT"},
- {KC_OPER, "KC_OPER"},
- {KC_CLEAR_AGAIN, "KC_CLEAR_AGAIN"},
- {KC_CRSEL, "KC_CRSEL"},
- {KC_EXSEL, "KC_EXSEL"},
- {KC_SYSTEM_POWER, "KC_SYSTEM_POWER"},
- {KC_SYSTEM_SLEEP, "KC_SYSTEM_SLEEP"},
- {KC_SYSTEM_WAKE, "KC_SYSTEM_WAKE"},
- {KC_AUDIO_MUTE, "KC_AUDIO_MUTE"},
- {KC_AUDIO_VOL_UP, "KC_AUDIO_VOL_UP"},
- {KC_AUDIO_VOL_DOWN, "KC_AUDIO_VOL_DOWN"},
- {KC_MEDIA_NEXT_TRACK, "KC_MEDIA_NEXT_TRACK"},
- {KC_MEDIA_PREV_TRACK, "KC_MEDIA_PREV_TRACK"},
- {KC_MEDIA_STOP, "KC_MEDIA_STOP"},
- {KC_MEDIA_PLAY_PAUSE, "KC_MEDIA_PLAY_PAUSE"},
- {KC_MEDIA_SELECT, "KC_MEDIA_SELECT"},
- {KC_MEDIA_EJECT, "KC_MEDIA_EJECT"},
- {KC_MAIL, "KC_MAIL"},
- {KC_CALCULATOR, "KC_CALCULATOR"},
- {KC_MY_COMPUTER, "KC_MY_COMPUTER"},
- {KC_WWW_SEARCH, "KC_WWW_SEARCH"},
- {KC_WWW_HOME, "KC_WWW_HOME"},
- {KC_WWW_BACK, "KC_WWW_BACK"},
- {KC_WWW_FORWARD, "KC_WWW_FORWARD"},
- {KC_WWW_STOP, "KC_WWW_STOP"},
- {KC_WWW_REFRESH, "KC_WWW_REFRESH"},
- {KC_WWW_FAVORITES, "KC_WWW_FAVORITES"},
- {KC_MEDIA_FAST_FORWARD, "KC_MEDIA_FAST_FORWARD"},
- {KC_MEDIA_REWIND, "KC_MEDIA_REWIND"},
- {KC_BRIGHTNESS_UP, "KC_BRIGHTNESS_UP"},
- {KC_BRIGHTNESS_DOWN, "KC_BRIGHTNESS_DOWN"},
- {KC_CONTROL_PANEL, "KC_CONTROL_PANEL"},
- {KC_ASSISTANT, "KC_ASSISTANT"},
- {KC_MISSION_CONTROL, "KC_MISSION_CONTROL"},
- {KC_LAUNCHPAD, "KC_LAUNCHPAD"},
- {QK_MOUSE_CURSOR_UP, "QK_MOUSE_CURSOR_UP"},
- {QK_MOUSE_CURSOR_DOWN, "QK_MOUSE_CURSOR_DOWN"},
- {QK_MOUSE_CURSOR_LEFT, "QK_MOUSE_CURSOR_LEFT"},
- {QK_MOUSE_CURSOR_RIGHT, "QK_MOUSE_CURSOR_RIGHT"},
- {QK_MOUSE_BUTTON_1, "QK_MOUSE_BUTTON_1"},
- {QK_MOUSE_BUTTON_2, "QK_MOUSE_BUTTON_2"},
- {QK_MOUSE_BUTTON_3, "QK_MOUSE_BUTTON_3"},
- {QK_MOUSE_BUTTON_4, "QK_MOUSE_BUTTON_4"},
- {QK_MOUSE_BUTTON_5, "QK_MOUSE_BUTTON_5"},
- {QK_MOUSE_BUTTON_6, "QK_MOUSE_BUTTON_6"},
- {QK_MOUSE_BUTTON_7, "QK_MOUSE_BUTTON_7"},
- {QK_MOUSE_BUTTON_8, "QK_MOUSE_BUTTON_8"},
- {QK_MOUSE_WHEEL_UP, "QK_MOUSE_WHEEL_UP"},
- {QK_MOUSE_WHEEL_DOWN, "QK_MOUSE_WHEEL_DOWN"},
- {QK_MOUSE_WHEEL_LEFT, "QK_MOUSE_WHEEL_LEFT"},
- {QK_MOUSE_WHEEL_RIGHT, "QK_MOUSE_WHEEL_RIGHT"},
- {QK_MOUSE_ACCELERATION_0, "QK_MOUSE_ACCELERATION_0"},
- {QK_MOUSE_ACCELERATION_1, "QK_MOUSE_ACCELERATION_1"},
- {QK_MOUSE_ACCELERATION_2, "QK_MOUSE_ACCELERATION_2"},
- {KC_LEFT_CTRL, "KC_LEFT_CTRL"},
- {KC_LEFT_SHIFT, "KC_LEFT_SHIFT"},
- {KC_LEFT_ALT, "KC_LEFT_ALT"},
- {KC_LEFT_GUI, "KC_LEFT_GUI"},
- {KC_RIGHT_CTRL, "KC_RIGHT_CTRL"},
- {KC_RIGHT_SHIFT, "KC_RIGHT_SHIFT"},
- {KC_RIGHT_ALT, "KC_RIGHT_ALT"},
- {KC_RIGHT_GUI, "KC_RIGHT_GUI"},
- {QK_SWAP_HANDS_TOGGLE, "QK_SWAP_HANDS_TOGGLE"},
- {QK_SWAP_HANDS_TAP_TOGGLE, "QK_SWAP_HANDS_TAP_TOGGLE"},
- {QK_SWAP_HANDS_MOMENTARY_ON, "QK_SWAP_HANDS_MOMENTARY_ON"},
- {QK_SWAP_HANDS_MOMENTARY_OFF, "QK_SWAP_HANDS_MOMENTARY_OFF"},
- {QK_SWAP_HANDS_OFF, "QK_SWAP_HANDS_OFF"},
- {QK_SWAP_HANDS_ON, "QK_SWAP_HANDS_ON"},
- {QK_SWAP_HANDS_ONE_SHOT, "QK_SWAP_HANDS_ONE_SHOT"},
- {QK_MAGIC_SWAP_CONTROL_CAPS_LOCK, "QK_MAGIC_SWAP_CONTROL_CAPS_LOCK"},
- {QK_MAGIC_UNSWAP_CONTROL_CAPS_LOCK, "QK_MAGIC_UNSWAP_CONTROL_CAPS_LOCK"},
- {QK_MAGIC_TOGGLE_CONTROL_CAPS_LOCK, "QK_MAGIC_TOGGLE_CONTROL_CAPS_LOCK"},
- {QK_MAGIC_CAPS_LOCK_AS_CONTROL_OFF, "QK_MAGIC_CAPS_LOCK_AS_CONTROL_OFF"},
- {QK_MAGIC_CAPS_LOCK_AS_CONTROL_ON, "QK_MAGIC_CAPS_LOCK_AS_CONTROL_ON"},
- {QK_MAGIC_SWAP_LALT_LGUI, "QK_MAGIC_SWAP_LALT_LGUI"},
- {QK_MAGIC_UNSWAP_LALT_LGUI, "QK_MAGIC_UNSWAP_LALT_LGUI"},
- {QK_MAGIC_SWAP_RALT_RGUI, "QK_MAGIC_SWAP_RALT_RGUI"},
- {QK_MAGIC_UNSWAP_RALT_RGUI, "QK_MAGIC_UNSWAP_RALT_RGUI"},
- {QK_MAGIC_GUI_ON, "QK_MAGIC_GUI_ON"},
- {QK_MAGIC_GUI_OFF, "QK_MAGIC_GUI_OFF"},
- {QK_MAGIC_TOGGLE_GUI, "QK_MAGIC_TOGGLE_GUI"},
- {QK_MAGIC_SWAP_GRAVE_ESC, "QK_MAGIC_SWAP_GRAVE_ESC"},
- {QK_MAGIC_UNSWAP_GRAVE_ESC, "QK_MAGIC_UNSWAP_GRAVE_ESC"},
- {QK_MAGIC_SWAP_BACKSLASH_BACKSPACE, "QK_MAGIC_SWAP_BACKSLASH_BACKSPACE"},
- {QK_MAGIC_UNSWAP_BACKSLASH_BACKSPACE, "QK_MAGIC_UNSWAP_BACKSLASH_BACKSPACE"},
- {QK_MAGIC_TOGGLE_BACKSLASH_BACKSPACE, "QK_MAGIC_TOGGLE_BACKSLASH_BACKSPACE"},
- {QK_MAGIC_NKRO_ON, "QK_MAGIC_NKRO_ON"},
- {QK_MAGIC_NKRO_OFF, "QK_MAGIC_NKRO_OFF"},
- {QK_MAGIC_TOGGLE_NKRO, "QK_MAGIC_TOGGLE_NKRO"},
- {QK_MAGIC_SWAP_ALT_GUI, "QK_MAGIC_SWAP_ALT_GUI"},
- {QK_MAGIC_UNSWAP_ALT_GUI, "QK_MAGIC_UNSWAP_ALT_GUI"},
- {QK_MAGIC_TOGGLE_ALT_GUI, "QK_MAGIC_TOGGLE_ALT_GUI"},
- {QK_MAGIC_SWAP_LCTL_LGUI, "QK_MAGIC_SWAP_LCTL_LGUI"},
- {QK_MAGIC_UNSWAP_LCTL_LGUI, "QK_MAGIC_UNSWAP_LCTL_LGUI"},
- {QK_MAGIC_SWAP_RCTL_RGUI, "QK_MAGIC_SWAP_RCTL_RGUI"},
- {QK_MAGIC_UNSWAP_RCTL_RGUI, "QK_MAGIC_UNSWAP_RCTL_RGUI"},
- {QK_MAGIC_SWAP_CTL_GUI, "QK_MAGIC_SWAP_CTL_GUI"},
- {QK_MAGIC_UNSWAP_CTL_GUI, "QK_MAGIC_UNSWAP_CTL_GUI"},
- {QK_MAGIC_TOGGLE_CTL_GUI, "QK_MAGIC_TOGGLE_CTL_GUI"},
- {QK_MAGIC_EE_HANDS_LEFT, "QK_MAGIC_EE_HANDS_LEFT"},
- {QK_MAGIC_EE_HANDS_RIGHT, "QK_MAGIC_EE_HANDS_RIGHT"},
- {QK_MAGIC_SWAP_ESCAPE_CAPS_LOCK, "QK_MAGIC_SWAP_ESCAPE_CAPS_LOCK"},
- {QK_MAGIC_UNSWAP_ESCAPE_CAPS_LOCK, "QK_MAGIC_UNSWAP_ESCAPE_CAPS_LOCK"},
- {QK_MAGIC_TOGGLE_ESCAPE_CAPS_LOCK, "QK_MAGIC_TOGGLE_ESCAPE_CAPS_LOCK"},
- {QK_MIDI_ON, "QK_MIDI_ON"},
- {QK_MIDI_OFF, "QK_MIDI_OFF"},
- {QK_MIDI_TOGGLE, "QK_MIDI_TOGGLE"},
- {QK_MIDI_NOTE_C_0, "QK_MIDI_NOTE_C_0"},
- {QK_MIDI_NOTE_C_SHARP_0, "QK_MIDI_NOTE_C_SHARP_0"},
- {QK_MIDI_NOTE_D_0, "QK_MIDI_NOTE_D_0"},
- {QK_MIDI_NOTE_D_SHARP_0, "QK_MIDI_NOTE_D_SHARP_0"},
- {QK_MIDI_NOTE_E_0, "QK_MIDI_NOTE_E_0"},
- {QK_MIDI_NOTE_F_0, "QK_MIDI_NOTE_F_0"},
- {QK_MIDI_NOTE_F_SHARP_0, "QK_MIDI_NOTE_F_SHARP_0"},
- {QK_MIDI_NOTE_G_0, "QK_MIDI_NOTE_G_0"},
- {QK_MIDI_NOTE_G_SHARP_0, "QK_MIDI_NOTE_G_SHARP_0"},
- {QK_MIDI_NOTE_A_0, "QK_MIDI_NOTE_A_0"},
- {QK_MIDI_NOTE_A_SHARP_0, "QK_MIDI_NOTE_A_SHARP_0"},
- {QK_MIDI_NOTE_B_0, "QK_MIDI_NOTE_B_0"},
- {QK_MIDI_NOTE_C_1, "QK_MIDI_NOTE_C_1"},
- {QK_MIDI_NOTE_C_SHARP_1, "QK_MIDI_NOTE_C_SHARP_1"},
- {QK_MIDI_NOTE_D_1, "QK_MIDI_NOTE_D_1"},
- {QK_MIDI_NOTE_D_SHARP_1, "QK_MIDI_NOTE_D_SHARP_1"},
- {QK_MIDI_NOTE_E_1, "QK_MIDI_NOTE_E_1"},
- {QK_MIDI_NOTE_F_1, "QK_MIDI_NOTE_F_1"},
- {QK_MIDI_NOTE_F_SHARP_1, "QK_MIDI_NOTE_F_SHARP_1"},
- {QK_MIDI_NOTE_G_1, "QK_MIDI_NOTE_G_1"},
- {QK_MIDI_NOTE_G_SHARP_1, "QK_MIDI_NOTE_G_SHARP_1"},
- {QK_MIDI_NOTE_A_1, "QK_MIDI_NOTE_A_1"},
- {QK_MIDI_NOTE_A_SHARP_1, "QK_MIDI_NOTE_A_SHARP_1"},
- {QK_MIDI_NOTE_B_1, "QK_MIDI_NOTE_B_1"},
- {QK_MIDI_NOTE_C_2, "QK_MIDI_NOTE_C_2"},
- {QK_MIDI_NOTE_C_SHARP_2, "QK_MIDI_NOTE_C_SHARP_2"},
- {QK_MIDI_NOTE_D_2, "QK_MIDI_NOTE_D_2"},
- {QK_MIDI_NOTE_D_SHARP_2, "QK_MIDI_NOTE_D_SHARP_2"},
- {QK_MIDI_NOTE_E_2, "QK_MIDI_NOTE_E_2"},
- {QK_MIDI_NOTE_F_2, "QK_MIDI_NOTE_F_2"},
- {QK_MIDI_NOTE_F_SHARP_2, "QK_MIDI_NOTE_F_SHARP_2"},
- {QK_MIDI_NOTE_G_2, "QK_MIDI_NOTE_G_2"},
- {QK_MIDI_NOTE_G_SHARP_2, "QK_MIDI_NOTE_G_SHARP_2"},
- {QK_MIDI_NOTE_A_2, "QK_MIDI_NOTE_A_2"},
- {QK_MIDI_NOTE_A_SHARP_2, "QK_MIDI_NOTE_A_SHARP_2"},
- {QK_MIDI_NOTE_B_2, "QK_MIDI_NOTE_B_2"},
- {QK_MIDI_NOTE_C_3, "QK_MIDI_NOTE_C_3"},
- {QK_MIDI_NOTE_C_SHARP_3, "QK_MIDI_NOTE_C_SHARP_3"},
- {QK_MIDI_NOTE_D_3, "QK_MIDI_NOTE_D_3"},
- {QK_MIDI_NOTE_D_SHARP_3, "QK_MIDI_NOTE_D_SHARP_3"},
- {QK_MIDI_NOTE_E_3, "QK_MIDI_NOTE_E_3"},
- {QK_MIDI_NOTE_F_3, "QK_MIDI_NOTE_F_3"},
- {QK_MIDI_NOTE_F_SHARP_3, "QK_MIDI_NOTE_F_SHARP_3"},
- {QK_MIDI_NOTE_G_3, "QK_MIDI_NOTE_G_3"},
- {QK_MIDI_NOTE_G_SHARP_3, "QK_MIDI_NOTE_G_SHARP_3"},
- {QK_MIDI_NOTE_A_3, "QK_MIDI_NOTE_A_3"},
- {QK_MIDI_NOTE_A_SHARP_3, "QK_MIDI_NOTE_A_SHARP_3"},
- {QK_MIDI_NOTE_B_3, "QK_MIDI_NOTE_B_3"},
- {QK_MIDI_NOTE_C_4, "QK_MIDI_NOTE_C_4"},
- {QK_MIDI_NOTE_C_SHARP_4, "QK_MIDI_NOTE_C_SHARP_4"},
- {QK_MIDI_NOTE_D_4, "QK_MIDI_NOTE_D_4"},
- {QK_MIDI_NOTE_D_SHARP_4, "QK_MIDI_NOTE_D_SHARP_4"},
- {QK_MIDI_NOTE_E_4, "QK_MIDI_NOTE_E_4"},
- {QK_MIDI_NOTE_F_4, "QK_MIDI_NOTE_F_4"},
- {QK_MIDI_NOTE_F_SHARP_4, "QK_MIDI_NOTE_F_SHARP_4"},
- {QK_MIDI_NOTE_G_4, "QK_MIDI_NOTE_G_4"},
- {QK_MIDI_NOTE_G_SHARP_4, "QK_MIDI_NOTE_G_SHARP_4"},
- {QK_MIDI_NOTE_A_4, "QK_MIDI_NOTE_A_4"},
- {QK_MIDI_NOTE_A_SHARP_4, "QK_MIDI_NOTE_A_SHARP_4"},
- {QK_MIDI_NOTE_B_4, "QK_MIDI_NOTE_B_4"},
- {QK_MIDI_NOTE_C_5, "QK_MIDI_NOTE_C_5"},
- {QK_MIDI_NOTE_C_SHARP_5, "QK_MIDI_NOTE_C_SHARP_5"},
- {QK_MIDI_NOTE_D_5, "QK_MIDI_NOTE_D_5"},
- {QK_MIDI_NOTE_D_SHARP_5, "QK_MIDI_NOTE_D_SHARP_5"},
- {QK_MIDI_NOTE_E_5, "QK_MIDI_NOTE_E_5"},
- {QK_MIDI_NOTE_F_5, "QK_MIDI_NOTE_F_5"},
- {QK_MIDI_NOTE_F_SHARP_5, "QK_MIDI_NOTE_F_SHARP_5"},
- {QK_MIDI_NOTE_G_5, "QK_MIDI_NOTE_G_5"},
- {QK_MIDI_NOTE_G_SHARP_5, "QK_MIDI_NOTE_G_SHARP_5"},
- {QK_MIDI_NOTE_A_5, "QK_MIDI_NOTE_A_5"},
- {QK_MIDI_NOTE_A_SHARP_5, "QK_MIDI_NOTE_A_SHARP_5"},
- {QK_MIDI_NOTE_B_5, "QK_MIDI_NOTE_B_5"},
- {QK_MIDI_OCTAVE_N2, "QK_MIDI_OCTAVE_N2"},
- {QK_MIDI_OCTAVE_N1, "QK_MIDI_OCTAVE_N1"},
- {QK_MIDI_OCTAVE_0, "QK_MIDI_OCTAVE_0"},
- {QK_MIDI_OCTAVE_1, "QK_MIDI_OCTAVE_1"},
- {QK_MIDI_OCTAVE_2, "QK_MIDI_OCTAVE_2"},
- {QK_MIDI_OCTAVE_3, "QK_MIDI_OCTAVE_3"},
- {QK_MIDI_OCTAVE_4, "QK_MIDI_OCTAVE_4"},
- {QK_MIDI_OCTAVE_5, "QK_MIDI_OCTAVE_5"},
- {QK_MIDI_OCTAVE_6, "QK_MIDI_OCTAVE_6"},
- {QK_MIDI_OCTAVE_7, "QK_MIDI_OCTAVE_7"},
- {QK_MIDI_OCTAVE_DOWN, "QK_MIDI_OCTAVE_DOWN"},
- {QK_MIDI_OCTAVE_UP, "QK_MIDI_OCTAVE_UP"},
- {QK_MIDI_TRANSPOSE_N6, "QK_MIDI_TRANSPOSE_N6"},
- {QK_MIDI_TRANSPOSE_N5, "QK_MIDI_TRANSPOSE_N5"},
- {QK_MIDI_TRANSPOSE_N4, "QK_MIDI_TRANSPOSE_N4"},
- {QK_MIDI_TRANSPOSE_N3, "QK_MIDI_TRANSPOSE_N3"},
- {QK_MIDI_TRANSPOSE_N2, "QK_MIDI_TRANSPOSE_N2"},
- {QK_MIDI_TRANSPOSE_N1, "QK_MIDI_TRANSPOSE_N1"},
- {QK_MIDI_TRANSPOSE_0, "QK_MIDI_TRANSPOSE_0"},
- {QK_MIDI_TRANSPOSE_1, "QK_MIDI_TRANSPOSE_1"},
- {QK_MIDI_TRANSPOSE_2, "QK_MIDI_TRANSPOSE_2"},
- {QK_MIDI_TRANSPOSE_3, "QK_MIDI_TRANSPOSE_3"},
- {QK_MIDI_TRANSPOSE_4, "QK_MIDI_TRANSPOSE_4"},
- {QK_MIDI_TRANSPOSE_5, "QK_MIDI_TRANSPOSE_5"},
- {QK_MIDI_TRANSPOSE_6, "QK_MIDI_TRANSPOSE_6"},
- {QK_MIDI_TRANSPOSE_DOWN, "QK_MIDI_TRANSPOSE_DOWN"},
- {QK_MIDI_TRANSPOSE_UP, "QK_MIDI_TRANSPOSE_UP"},
- {QK_MIDI_VELOCITY_0, "QK_MIDI_VELOCITY_0"},
- {QK_MIDI_VELOCITY_1, "QK_MIDI_VELOCITY_1"},
- {QK_MIDI_VELOCITY_2, "QK_MIDI_VELOCITY_2"},
- {QK_MIDI_VELOCITY_3, "QK_MIDI_VELOCITY_3"},
- {QK_MIDI_VELOCITY_4, "QK_MIDI_VELOCITY_4"},
- {QK_MIDI_VELOCITY_5, "QK_MIDI_VELOCITY_5"},
- {QK_MIDI_VELOCITY_6, "QK_MIDI_VELOCITY_6"},
- {QK_MIDI_VELOCITY_7, "QK_MIDI_VELOCITY_7"},
- {QK_MIDI_VELOCITY_8, "QK_MIDI_VELOCITY_8"},
- {QK_MIDI_VELOCITY_9, "QK_MIDI_VELOCITY_9"},
- {QK_MIDI_VELOCITY_10, "QK_MIDI_VELOCITY_10"},
- {QK_MIDI_VELOCITY_DOWN, "QK_MIDI_VELOCITY_DOWN"},
- {QK_MIDI_VELOCITY_UP, "QK_MIDI_VELOCITY_UP"},
- {QK_MIDI_CHANNEL_1, "QK_MIDI_CHANNEL_1"},
- {QK_MIDI_CHANNEL_2, "QK_MIDI_CHANNEL_2"},
- {QK_MIDI_CHANNEL_3, "QK_MIDI_CHANNEL_3"},
- {QK_MIDI_CHANNEL_4, "QK_MIDI_CHANNEL_4"},
- {QK_MIDI_CHANNEL_5, "QK_MIDI_CHANNEL_5"},
- {QK_MIDI_CHANNEL_6, "QK_MIDI_CHANNEL_6"},
- {QK_MIDI_CHANNEL_7, "QK_MIDI_CHANNEL_7"},
- {QK_MIDI_CHANNEL_8, "QK_MIDI_CHANNEL_8"},
- {QK_MIDI_CHANNEL_9, "QK_MIDI_CHANNEL_9"},
- {QK_MIDI_CHANNEL_10, "QK_MIDI_CHANNEL_10"},
- {QK_MIDI_CHANNEL_11, "QK_MIDI_CHANNEL_11"},
- {QK_MIDI_CHANNEL_12, "QK_MIDI_CHANNEL_12"},
- {QK_MIDI_CHANNEL_13, "QK_MIDI_CHANNEL_13"},
- {QK_MIDI_CHANNEL_14, "QK_MIDI_CHANNEL_14"},
- {QK_MIDI_CHANNEL_15, "QK_MIDI_CHANNEL_15"},
- {QK_MIDI_CHANNEL_16, "QK_MIDI_CHANNEL_16"},
- {QK_MIDI_CHANNEL_DOWN, "QK_MIDI_CHANNEL_DOWN"},
- {QK_MIDI_CHANNEL_UP, "QK_MIDI_CHANNEL_UP"},
- {QK_MIDI_ALL_NOTES_OFF, "QK_MIDI_ALL_NOTES_OFF"},
- {QK_MIDI_SUSTAIN, "QK_MIDI_SUSTAIN"},
- {QK_MIDI_PORTAMENTO, "QK_MIDI_PORTAMENTO"},
- {QK_MIDI_SOSTENUTO, "QK_MIDI_SOSTENUTO"},
- {QK_MIDI_SOFT, "QK_MIDI_SOFT"},
- {QK_MIDI_LEGATO, "QK_MIDI_LEGATO"},
- {QK_MIDI_MODULATION, "QK_MIDI_MODULATION"},
- {QK_MIDI_MODULATION_SPEED_DOWN, "QK_MIDI_MODULATION_SPEED_DOWN"},
- {QK_MIDI_MODULATION_SPEED_UP, "QK_MIDI_MODULATION_SPEED_UP"},
- {QK_MIDI_PITCH_BEND_DOWN, "QK_MIDI_PITCH_BEND_DOWN"},
- {QK_MIDI_PITCH_BEND_UP, "QK_MIDI_PITCH_BEND_UP"},
- {QK_SEQUENCER_ON, "QK_SEQUENCER_ON"},
- {QK_SEQUENCER_OFF, "QK_SEQUENCER_OFF"},
- {QK_SEQUENCER_TOGGLE, "QK_SEQUENCER_TOGGLE"},
- {QK_SEQUENCER_TEMPO_DOWN, "QK_SEQUENCER_TEMPO_DOWN"},
- {QK_SEQUENCER_TEMPO_UP, "QK_SEQUENCER_TEMPO_UP"},
- {QK_SEQUENCER_RESOLUTION_DOWN, "QK_SEQUENCER_RESOLUTION_DOWN"},
- {QK_SEQUENCER_RESOLUTION_UP, "QK_SEQUENCER_RESOLUTION_UP"},
- {QK_SEQUENCER_STEPS_ALL, "QK_SEQUENCER_STEPS_ALL"},
- {QK_SEQUENCER_STEPS_CLEAR, "QK_SEQUENCER_STEPS_CLEAR"},
- {QK_JOYSTICK_BUTTON_0, "QK_JOYSTICK_BUTTON_0"},
- {QK_JOYSTICK_BUTTON_1, "QK_JOYSTICK_BUTTON_1"},
- {QK_JOYSTICK_BUTTON_2, "QK_JOYSTICK_BUTTON_2"},
- {QK_JOYSTICK_BUTTON_3, "QK_JOYSTICK_BUTTON_3"},
- {QK_JOYSTICK_BUTTON_4, "QK_JOYSTICK_BUTTON_4"},
- {QK_JOYSTICK_BUTTON_5, "QK_JOYSTICK_BUTTON_5"},
- {QK_JOYSTICK_BUTTON_6, "QK_JOYSTICK_BUTTON_6"},
- {QK_JOYSTICK_BUTTON_7, "QK_JOYSTICK_BUTTON_7"},
- {QK_JOYSTICK_BUTTON_8, "QK_JOYSTICK_BUTTON_8"},
- {QK_JOYSTICK_BUTTON_9, "QK_JOYSTICK_BUTTON_9"},
- {QK_JOYSTICK_BUTTON_10, "QK_JOYSTICK_BUTTON_10"},
- {QK_JOYSTICK_BUTTON_11, "QK_JOYSTICK_BUTTON_11"},
- {QK_JOYSTICK_BUTTON_12, "QK_JOYSTICK_BUTTON_12"},
- {QK_JOYSTICK_BUTTON_13, "QK_JOYSTICK_BUTTON_13"},
- {QK_JOYSTICK_BUTTON_14, "QK_JOYSTICK_BUTTON_14"},
- {QK_JOYSTICK_BUTTON_15, "QK_JOYSTICK_BUTTON_15"},
- {QK_JOYSTICK_BUTTON_16, "QK_JOYSTICK_BUTTON_16"},
- {QK_JOYSTICK_BUTTON_17, "QK_JOYSTICK_BUTTON_17"},
- {QK_JOYSTICK_BUTTON_18, "QK_JOYSTICK_BUTTON_18"},
- {QK_JOYSTICK_BUTTON_19, "QK_JOYSTICK_BUTTON_19"},
- {QK_JOYSTICK_BUTTON_20, "QK_JOYSTICK_BUTTON_20"},
- {QK_JOYSTICK_BUTTON_21, "QK_JOYSTICK_BUTTON_21"},
- {QK_JOYSTICK_BUTTON_22, "QK_JOYSTICK_BUTTON_22"},
- {QK_JOYSTICK_BUTTON_23, "QK_JOYSTICK_BUTTON_23"},
- {QK_JOYSTICK_BUTTON_24, "QK_JOYSTICK_BUTTON_24"},
- {QK_JOYSTICK_BUTTON_25, "QK_JOYSTICK_BUTTON_25"},
- {QK_JOYSTICK_BUTTON_26, "QK_JOYSTICK_BUTTON_26"},
- {QK_JOYSTICK_BUTTON_27, "QK_JOYSTICK_BUTTON_27"},
- {QK_JOYSTICK_BUTTON_28, "QK_JOYSTICK_BUTTON_28"},
- {QK_JOYSTICK_BUTTON_29, "QK_JOYSTICK_BUTTON_29"},
- {QK_JOYSTICK_BUTTON_30, "QK_JOYSTICK_BUTTON_30"},
- {QK_JOYSTICK_BUTTON_31, "QK_JOYSTICK_BUTTON_31"},
- {QK_PROGRAMMABLE_BUTTON_1, "QK_PROGRAMMABLE_BUTTON_1"},
- {QK_PROGRAMMABLE_BUTTON_2, "QK_PROGRAMMABLE_BUTTON_2"},
- {QK_PROGRAMMABLE_BUTTON_3, "QK_PROGRAMMABLE_BUTTON_3"},
- {QK_PROGRAMMABLE_BUTTON_4, "QK_PROGRAMMABLE_BUTTON_4"},
- {QK_PROGRAMMABLE_BUTTON_5, "QK_PROGRAMMABLE_BUTTON_5"},
- {QK_PROGRAMMABLE_BUTTON_6, "QK_PROGRAMMABLE_BUTTON_6"},
- {QK_PROGRAMMABLE_BUTTON_7, "QK_PROGRAMMABLE_BUTTON_7"},
- {QK_PROGRAMMABLE_BUTTON_8, "QK_PROGRAMMABLE_BUTTON_8"},
- {QK_PROGRAMMABLE_BUTTON_9, "QK_PROGRAMMABLE_BUTTON_9"},
- {QK_PROGRAMMABLE_BUTTON_10, "QK_PROGRAMMABLE_BUTTON_10"},
- {QK_PROGRAMMABLE_BUTTON_11, "QK_PROGRAMMABLE_BUTTON_11"},
- {QK_PROGRAMMABLE_BUTTON_12, "QK_PROGRAMMABLE_BUTTON_12"},
- {QK_PROGRAMMABLE_BUTTON_13, "QK_PROGRAMMABLE_BUTTON_13"},
- {QK_PROGRAMMABLE_BUTTON_14, "QK_PROGRAMMABLE_BUTTON_14"},
- {QK_PROGRAMMABLE_BUTTON_15, "QK_PROGRAMMABLE_BUTTON_15"},
- {QK_PROGRAMMABLE_BUTTON_16, "QK_PROGRAMMABLE_BUTTON_16"},
- {QK_PROGRAMMABLE_BUTTON_17, "QK_PROGRAMMABLE_BUTTON_17"},
- {QK_PROGRAMMABLE_BUTTON_18, "QK_PROGRAMMABLE_BUTTON_18"},
- {QK_PROGRAMMABLE_BUTTON_19, "QK_PROGRAMMABLE_BUTTON_19"},
- {QK_PROGRAMMABLE_BUTTON_20, "QK_PROGRAMMABLE_BUTTON_20"},
- {QK_PROGRAMMABLE_BUTTON_21, "QK_PROGRAMMABLE_BUTTON_21"},
- {QK_PROGRAMMABLE_BUTTON_22, "QK_PROGRAMMABLE_BUTTON_22"},
- {QK_PROGRAMMABLE_BUTTON_23, "QK_PROGRAMMABLE_BUTTON_23"},
- {QK_PROGRAMMABLE_BUTTON_24, "QK_PROGRAMMABLE_BUTTON_24"},
- {QK_PROGRAMMABLE_BUTTON_25, "QK_PROGRAMMABLE_BUTTON_25"},
- {QK_PROGRAMMABLE_BUTTON_26, "QK_PROGRAMMABLE_BUTTON_26"},
- {QK_PROGRAMMABLE_BUTTON_27, "QK_PROGRAMMABLE_BUTTON_27"},
- {QK_PROGRAMMABLE_BUTTON_28, "QK_PROGRAMMABLE_BUTTON_28"},
- {QK_PROGRAMMABLE_BUTTON_29, "QK_PROGRAMMABLE_BUTTON_29"},
- {QK_PROGRAMMABLE_BUTTON_30, "QK_PROGRAMMABLE_BUTTON_30"},
- {QK_PROGRAMMABLE_BUTTON_31, "QK_PROGRAMMABLE_BUTTON_31"},
- {QK_PROGRAMMABLE_BUTTON_32, "QK_PROGRAMMABLE_BUTTON_32"},
- {QK_AUDIO_ON, "QK_AUDIO_ON"},
- {QK_AUDIO_OFF, "QK_AUDIO_OFF"},
- {QK_AUDIO_TOGGLE, "QK_AUDIO_TOGGLE"},
- {QK_AUDIO_CLICKY_TOGGLE, "QK_AUDIO_CLICKY_TOGGLE"},
- {QK_AUDIO_CLICKY_ON, "QK_AUDIO_CLICKY_ON"},
- {QK_AUDIO_CLICKY_OFF, "QK_AUDIO_CLICKY_OFF"},
- {QK_AUDIO_CLICKY_UP, "QK_AUDIO_CLICKY_UP"},
- {QK_AUDIO_CLICKY_DOWN, "QK_AUDIO_CLICKY_DOWN"},
- {QK_AUDIO_CLICKY_RESET, "QK_AUDIO_CLICKY_RESET"},
- {QK_MUSIC_ON, "QK_MUSIC_ON"},
- {QK_MUSIC_OFF, "QK_MUSIC_OFF"},
- {QK_MUSIC_TOGGLE, "QK_MUSIC_TOGGLE"},
- {QK_MUSIC_MODE_NEXT, "QK_MUSIC_MODE_NEXT"},
- {QK_AUDIO_VOICE_NEXT, "QK_AUDIO_VOICE_NEXT"},
- {QK_AUDIO_VOICE_PREVIOUS, "QK_AUDIO_VOICE_PREVIOUS"},
- {QK_STENO_BOLT, "QK_STENO_BOLT"},
- {QK_STENO_GEMINI, "QK_STENO_GEMINI"},
- {QK_STENO_COMB, "QK_STENO_COMB"},
- {QK_STENO_COMB_MAX, "QK_STENO_COMB_MAX"},
- {QK_MACRO_0, "QK_MACRO_0"},
- {QK_MACRO_1, "QK_MACRO_1"},
- {QK_MACRO_2, "QK_MACRO_2"},
- {QK_MACRO_3, "QK_MACRO_3"},
- {QK_MACRO_4, "QK_MACRO_4"},
- {QK_MACRO_5, "QK_MACRO_5"},
- {QK_MACRO_6, "QK_MACRO_6"},
- {QK_MACRO_7, "QK_MACRO_7"},
- {QK_MACRO_8, "QK_MACRO_8"},
- {QK_MACRO_9, "QK_MACRO_9"},
- {QK_MACRO_10, "QK_MACRO_10"},
- {QK_MACRO_11, "QK_MACRO_11"},
- {QK_MACRO_12, "QK_MACRO_12"},
- {QK_MACRO_13, "QK_MACRO_13"},
- {QK_MACRO_14, "QK_MACRO_14"},
- {QK_MACRO_15, "QK_MACRO_15"},
- {QK_MACRO_16, "QK_MACRO_16"},
- {QK_MACRO_17, "QK_MACRO_17"},
- {QK_MACRO_18, "QK_MACRO_18"},
- {QK_MACRO_19, "QK_MACRO_19"},
- {QK_MACRO_20, "QK_MACRO_20"},
- {QK_MACRO_21, "QK_MACRO_21"},
- {QK_MACRO_22, "QK_MACRO_22"},
- {QK_MACRO_23, "QK_MACRO_23"},
- {QK_MACRO_24, "QK_MACRO_24"},
- {QK_MACRO_25, "QK_MACRO_25"},
- {QK_MACRO_26, "QK_MACRO_26"},
- {QK_MACRO_27, "QK_MACRO_27"},
- {QK_MACRO_28, "QK_MACRO_28"},
- {QK_MACRO_29, "QK_MACRO_29"},
- {QK_MACRO_30, "QK_MACRO_30"},
- {QK_MACRO_31, "QK_MACRO_31"},
- {QK_OUTPUT_AUTO, "QK_OUTPUT_AUTO"},
- {QK_OUTPUT_NEXT, "QK_OUTPUT_NEXT"},
- {QK_OUTPUT_PREV, "QK_OUTPUT_PREV"},
- {QK_OUTPUT_NONE, "QK_OUTPUT_NONE"},
- {QK_OUTPUT_USB, "QK_OUTPUT_USB"},
- {QK_OUTPUT_2P4GHZ, "QK_OUTPUT_2P4GHZ"},
- {QK_OUTPUT_BLUETOOTH, "QK_OUTPUT_BLUETOOTH"},
- {QK_BLUETOOTH_PROFILE_NEXT, "QK_BLUETOOTH_PROFILE_NEXT"},
- {QK_BLUETOOTH_PROFILE_PREV, "QK_BLUETOOTH_PROFILE_PREV"},
- {QK_BLUETOOTH_UNPAIR, "QK_BLUETOOTH_UNPAIR"},
- {QK_BLUETOOTH_PROFILE1, "QK_BLUETOOTH_PROFILE1"},
- {QK_BLUETOOTH_PROFILE2, "QK_BLUETOOTH_PROFILE2"},
- {QK_BLUETOOTH_PROFILE3, "QK_BLUETOOTH_PROFILE3"},
- {QK_BLUETOOTH_PROFILE4, "QK_BLUETOOTH_PROFILE4"},
- {QK_BLUETOOTH_PROFILE5, "QK_BLUETOOTH_PROFILE5"},
- {QK_BACKLIGHT_ON, "QK_BACKLIGHT_ON"},
- {QK_BACKLIGHT_OFF, "QK_BACKLIGHT_OFF"},
- {QK_BACKLIGHT_TOGGLE, "QK_BACKLIGHT_TOGGLE"},
- {QK_BACKLIGHT_DOWN, "QK_BACKLIGHT_DOWN"},
- {QK_BACKLIGHT_UP, "QK_BACKLIGHT_UP"},
- {QK_BACKLIGHT_STEP, "QK_BACKLIGHT_STEP"},
- {QK_BACKLIGHT_TOGGLE_BREATHING, "QK_BACKLIGHT_TOGGLE_BREATHING"},
- {QK_LED_MATRIX_ON, "QK_LED_MATRIX_ON"},
- {QK_LED_MATRIX_OFF, "QK_LED_MATRIX_OFF"},
- {QK_LED_MATRIX_TOGGLE, "QK_LED_MATRIX_TOGGLE"},
- {QK_LED_MATRIX_MODE_NEXT, "QK_LED_MATRIX_MODE_NEXT"},
- {QK_LED_MATRIX_MODE_PREVIOUS, "QK_LED_MATRIX_MODE_PREVIOUS"},
- {QK_LED_MATRIX_BRIGHTNESS_UP, "QK_LED_MATRIX_BRIGHTNESS_UP"},
- {QK_LED_MATRIX_BRIGHTNESS_DOWN, "QK_LED_MATRIX_BRIGHTNESS_DOWN"},
- {QK_LED_MATRIX_SPEED_UP, "QK_LED_MATRIX_SPEED_UP"},
- {QK_LED_MATRIX_SPEED_DOWN, "QK_LED_MATRIX_SPEED_DOWN"},
- {QK_UNDERGLOW_TOGGLE, "QK_UNDERGLOW_TOGGLE"},
- {QK_UNDERGLOW_MODE_NEXT, "QK_UNDERGLOW_MODE_NEXT"},
- {QK_UNDERGLOW_MODE_PREVIOUS, "QK_UNDERGLOW_MODE_PREVIOUS"},
- {QK_UNDERGLOW_HUE_UP, "QK_UNDERGLOW_HUE_UP"},
- {QK_UNDERGLOW_HUE_DOWN, "QK_UNDERGLOW_HUE_DOWN"},
- {QK_UNDERGLOW_SATURATION_UP, "QK_UNDERGLOW_SATURATION_UP"},
- {QK_UNDERGLOW_SATURATION_DOWN, "QK_UNDERGLOW_SATURATION_DOWN"},
- {QK_UNDERGLOW_VALUE_UP, "QK_UNDERGLOW_VALUE_UP"},
- {QK_UNDERGLOW_VALUE_DOWN, "QK_UNDERGLOW_VALUE_DOWN"},
- {QK_UNDERGLOW_SPEED_UP, "QK_UNDERGLOW_SPEED_UP"},
- {QK_UNDERGLOW_SPEED_DOWN, "QK_UNDERGLOW_SPEED_DOWN"},
- {RGB_MODE_PLAIN, "RGB_MODE_PLAIN"},
- {RGB_MODE_BREATHE, "RGB_MODE_BREATHE"},
- {RGB_MODE_RAINBOW, "RGB_MODE_RAINBOW"},
- {RGB_MODE_SWIRL, "RGB_MODE_SWIRL"},
- {RGB_MODE_SNAKE, "RGB_MODE_SNAKE"},
- {RGB_MODE_KNIGHT, "RGB_MODE_KNIGHT"},
- {RGB_MODE_XMAS, "RGB_MODE_XMAS"},
- {RGB_MODE_GRADIENT, "RGB_MODE_GRADIENT"},
- {RGB_MODE_RGBTEST, "RGB_MODE_RGBTEST"},
- {RGB_MODE_TWINKLE, "RGB_MODE_TWINKLE"},
- {QK_RGB_MATRIX_ON, "QK_RGB_MATRIX_ON"},
- {QK_RGB_MATRIX_OFF, "QK_RGB_MATRIX_OFF"},
- {QK_RGB_MATRIX_TOGGLE, "QK_RGB_MATRIX_TOGGLE"},
- {QK_RGB_MATRIX_MODE_NEXT, "QK_RGB_MATRIX_MODE_NEXT"},
- {QK_RGB_MATRIX_MODE_PREVIOUS, "QK_RGB_MATRIX_MODE_PREVIOUS"},
- {QK_RGB_MATRIX_HUE_UP, "QK_RGB_MATRIX_HUE_UP"},
- {QK_RGB_MATRIX_HUE_DOWN, "QK_RGB_MATRIX_HUE_DOWN"},
- {QK_RGB_MATRIX_SATURATION_UP, "QK_RGB_MATRIX_SATURATION_UP"},
- {QK_RGB_MATRIX_SATURATION_DOWN, "QK_RGB_MATRIX_SATURATION_DOWN"},
- {QK_RGB_MATRIX_VALUE_UP, "QK_RGB_MATRIX_VALUE_UP"},
- {QK_RGB_MATRIX_VALUE_DOWN, "QK_RGB_MATRIX_VALUE_DOWN"},
- {QK_RGB_MATRIX_SPEED_UP, "QK_RGB_MATRIX_SPEED_UP"},
- {QK_RGB_MATRIX_SPEED_DOWN, "QK_RGB_MATRIX_SPEED_DOWN"},
- {QK_BOOTLOADER, "QK_BOOTLOADER"},
- {QK_REBOOT, "QK_REBOOT"},
- {QK_DEBUG_TOGGLE, "QK_DEBUG_TOGGLE"},
- {QK_CLEAR_EEPROM, "QK_CLEAR_EEPROM"},
- {QK_MAKE, "QK_MAKE"},
- {QK_AUTO_SHIFT_DOWN, "QK_AUTO_SHIFT_DOWN"},
- {QK_AUTO_SHIFT_UP, "QK_AUTO_SHIFT_UP"},
- {QK_AUTO_SHIFT_REPORT, "QK_AUTO_SHIFT_REPORT"},
- {QK_AUTO_SHIFT_ON, "QK_AUTO_SHIFT_ON"},
- {QK_AUTO_SHIFT_OFF, "QK_AUTO_SHIFT_OFF"},
- {QK_AUTO_SHIFT_TOGGLE, "QK_AUTO_SHIFT_TOGGLE"},
- {QK_GRAVE_ESCAPE, "QK_GRAVE_ESCAPE"},
- {QK_VELOCIKEY_TOGGLE, "QK_VELOCIKEY_TOGGLE"},
- {QK_SPACE_CADET_LEFT_CTRL_PARENTHESIS_OPEN, "QK_SPACE_CADET_LEFT_CTRL_PARENTHESIS_OPEN"},
- {QK_SPACE_CADET_RIGHT_CTRL_PARENTHESIS_CLOSE, "QK_SPACE_CADET_RIGHT_CTRL_PARENTHESIS_CLOSE"},
- {QK_SPACE_CADET_LEFT_SHIFT_PARENTHESIS_OPEN, "QK_SPACE_CADET_LEFT_SHIFT_PARENTHESIS_OPEN"},
- {QK_SPACE_CADET_RIGHT_SHIFT_PARENTHESIS_CLOSE, "QK_SPACE_CADET_RIGHT_SHIFT_PARENTHESIS_CLOSE"},
- {QK_SPACE_CADET_LEFT_ALT_PARENTHESIS_OPEN, "QK_SPACE_CADET_LEFT_ALT_PARENTHESIS_OPEN"},
- {QK_SPACE_CADET_RIGHT_ALT_PARENTHESIS_CLOSE, "QK_SPACE_CADET_RIGHT_ALT_PARENTHESIS_CLOSE"},
- {QK_SPACE_CADET_RIGHT_SHIFT_ENTER, "QK_SPACE_CADET_RIGHT_SHIFT_ENTER"},
- {QK_UNICODE_MODE_NEXT, "QK_UNICODE_MODE_NEXT"},
- {QK_UNICODE_MODE_PREVIOUS, "QK_UNICODE_MODE_PREVIOUS"},
- {QK_UNICODE_MODE_MACOS, "QK_UNICODE_MODE_MACOS"},
- {QK_UNICODE_MODE_LINUX, "QK_UNICODE_MODE_LINUX"},
- {QK_UNICODE_MODE_WINDOWS, "QK_UNICODE_MODE_WINDOWS"},
- {QK_UNICODE_MODE_BSD, "QK_UNICODE_MODE_BSD"},
- {QK_UNICODE_MODE_WINCOMPOSE, "QK_UNICODE_MODE_WINCOMPOSE"},
- {QK_UNICODE_MODE_EMACS, "QK_UNICODE_MODE_EMACS"},
- {QK_HAPTIC_ON, "QK_HAPTIC_ON"},
- {QK_HAPTIC_OFF, "QK_HAPTIC_OFF"},
- {QK_HAPTIC_TOGGLE, "QK_HAPTIC_TOGGLE"},
- {QK_HAPTIC_RESET, "QK_HAPTIC_RESET"},
- {QK_HAPTIC_FEEDBACK_TOGGLE, "QK_HAPTIC_FEEDBACK_TOGGLE"},
- {QK_HAPTIC_BUZZ_TOGGLE, "QK_HAPTIC_BUZZ_TOGGLE"},
- {QK_HAPTIC_MODE_NEXT, "QK_HAPTIC_MODE_NEXT"},
- {QK_HAPTIC_MODE_PREVIOUS, "QK_HAPTIC_MODE_PREVIOUS"},
- {QK_HAPTIC_CONTINUOUS_TOGGLE, "QK_HAPTIC_CONTINUOUS_TOGGLE"},
- {QK_HAPTIC_CONTINUOUS_UP, "QK_HAPTIC_CONTINUOUS_UP"},
- {QK_HAPTIC_CONTINUOUS_DOWN, "QK_HAPTIC_CONTINUOUS_DOWN"},
- {QK_HAPTIC_DWELL_UP, "QK_HAPTIC_DWELL_UP"},
- {QK_HAPTIC_DWELL_DOWN, "QK_HAPTIC_DWELL_DOWN"},
- {QK_COMBO_ON, "QK_COMBO_ON"},
- {QK_COMBO_OFF, "QK_COMBO_OFF"},
- {QK_COMBO_TOGGLE, "QK_COMBO_TOGGLE"},
- {QK_DYNAMIC_MACRO_RECORD_START_1, "QK_DYNAMIC_MACRO_RECORD_START_1"},
- {QK_DYNAMIC_MACRO_RECORD_START_2, "QK_DYNAMIC_MACRO_RECORD_START_2"},
- {QK_DYNAMIC_MACRO_RECORD_STOP, "QK_DYNAMIC_MACRO_RECORD_STOP"},
- {QK_DYNAMIC_MACRO_PLAY_1, "QK_DYNAMIC_MACRO_PLAY_1"},
- {QK_DYNAMIC_MACRO_PLAY_2, "QK_DYNAMIC_MACRO_PLAY_2"},
- {QK_LEADER, "QK_LEADER"},
- {QK_LOCK, "QK_LOCK"},
- {QK_ONE_SHOT_ON, "QK_ONE_SHOT_ON"},
- {QK_ONE_SHOT_OFF, "QK_ONE_SHOT_OFF"},
- {QK_ONE_SHOT_TOGGLE, "QK_ONE_SHOT_TOGGLE"},
- {QK_KEY_OVERRIDE_TOGGLE, "QK_KEY_OVERRIDE_TOGGLE"},
- {QK_KEY_OVERRIDE_ON, "QK_KEY_OVERRIDE_ON"},
- {QK_KEY_OVERRIDE_OFF, "QK_KEY_OVERRIDE_OFF"},
- {QK_SECURE_LOCK, "QK_SECURE_LOCK"},
- {QK_SECURE_UNLOCK, "QK_SECURE_UNLOCK"},
- {QK_SECURE_TOGGLE, "QK_SECURE_TOGGLE"},
- {QK_SECURE_REQUEST, "QK_SECURE_REQUEST"},
- {QK_DYNAMIC_TAPPING_TERM_PRINT, "QK_DYNAMIC_TAPPING_TERM_PRINT"},
- {QK_DYNAMIC_TAPPING_TERM_UP, "QK_DYNAMIC_TAPPING_TERM_UP"},
- {QK_DYNAMIC_TAPPING_TERM_DOWN, "QK_DYNAMIC_TAPPING_TERM_DOWN"},
- {QK_CAPS_WORD_TOGGLE, "QK_CAPS_WORD_TOGGLE"},
- {QK_AUTOCORRECT_ON, "QK_AUTOCORRECT_ON"},
- {QK_AUTOCORRECT_OFF, "QK_AUTOCORRECT_OFF"},
- {QK_AUTOCORRECT_TOGGLE, "QK_AUTOCORRECT_TOGGLE"},
- {QK_TRI_LAYER_LOWER, "QK_TRI_LAYER_LOWER"},
- {QK_TRI_LAYER_UPPER, "QK_TRI_LAYER_UPPER"},
- {QK_REPEAT_KEY, "QK_REPEAT_KEY"},
- {QK_ALT_REPEAT_KEY, "QK_ALT_REPEAT_KEY"},
- {QK_LAYER_LOCK, "QK_LAYER_LOCK"},
- {QK_KB_0, "QK_KB_0"},
- {QK_KB_1, "QK_KB_1"},
- {QK_KB_2, "QK_KB_2"},
- {QK_KB_3, "QK_KB_3"},
- {QK_KB_4, "QK_KB_4"},
- {QK_KB_5, "QK_KB_5"},
- {QK_KB_6, "QK_KB_6"},
- {QK_KB_7, "QK_KB_7"},
- {QK_KB_8, "QK_KB_8"},
- {QK_KB_9, "QK_KB_9"},
- {QK_KB_10, "QK_KB_10"},
- {QK_KB_11, "QK_KB_11"},
- {QK_KB_12, "QK_KB_12"},
- {QK_KB_13, "QK_KB_13"},
- {QK_KB_14, "QK_KB_14"},
- {QK_KB_15, "QK_KB_15"},
- {QK_KB_16, "QK_KB_16"},
- {QK_KB_17, "QK_KB_17"},
- {QK_KB_18, "QK_KB_18"},
- {QK_KB_19, "QK_KB_19"},
- {QK_KB_20, "QK_KB_20"},
- {QK_KB_21, "QK_KB_21"},
- {QK_KB_22, "QK_KB_22"},
- {QK_KB_23, "QK_KB_23"},
- {QK_KB_24, "QK_KB_24"},
- {QK_KB_25, "QK_KB_25"},
- {QK_KB_26, "QK_KB_26"},
- {QK_KB_27, "QK_KB_27"},
- {QK_KB_28, "QK_KB_28"},
- {QK_KB_29, "QK_KB_29"},
- {QK_KB_30, "QK_KB_30"},
- {QK_KB_31, "QK_KB_31"},
- {QK_USER_0, "QK_USER_0"},
- {QK_USER_1, "QK_USER_1"},
- {QK_USER_2, "QK_USER_2"},
- {QK_USER_3, "QK_USER_3"},
- {QK_USER_4, "QK_USER_4"},
- {QK_USER_5, "QK_USER_5"},
- {QK_USER_6, "QK_USER_6"},
- {QK_USER_7, "QK_USER_7"},
- {QK_USER_8, "QK_USER_8"},
- {QK_USER_9, "QK_USER_9"},
- {QK_USER_10, "QK_USER_10"},
- {QK_USER_11, "QK_USER_11"},
- {QK_USER_12, "QK_USER_12"},
- {QK_USER_13, "QK_USER_13"},
- {QK_USER_14, "QK_USER_14"},
- {QK_USER_15, "QK_USER_15"},
- {QK_USER_16, "QK_USER_16"},
- {QK_USER_17, "QK_USER_17"},
- {QK_USER_18, "QK_USER_18"},
- {QK_USER_19, "QK_USER_19"},
- {QK_USER_20, "QK_USER_20"},
- {QK_USER_21, "QK_USER_21"},
- {QK_USER_22, "QK_USER_22"},
- {QK_USER_23, "QK_USER_23"},
- {QK_USER_24, "QK_USER_24"},
- {QK_USER_25, "QK_USER_25"},
- {QK_USER_26, "QK_USER_26"},
- {QK_USER_27, "QK_USER_27"},
- {QK_USER_28, "QK_USER_28"},
- {QK_USER_29, "QK_USER_29"},
- {QK_USER_30, "QK_USER_30"},
- {QK_USER_31, "QK_USER_31"},
-};
diff --git a/tests/test_common/keycode_util.cpp b/tests/test_common/keycode_util.cpp
deleted file mode 100644
index 539cab819a..0000000000
--- a/tests/test_common/keycode_util.cpp
+++ /dev/null
@@ -1,130 +0,0 @@
-#include "keycode_util.hpp"
-#include <cstdint>
-extern "C" {
-#include "action_code.h"
-#include "keycode.h"
-#include "quantum_keycodes.h"
-#include "util.h"
-}
-#include <string>
-#include <iomanip>
-#include <map>
-
-extern std::map<uint16_t, std::string> KEYCODE_ID_TABLE;
-
-std::string get_mods(uint8_t mods) {
- std::stringstream s;
- if ((mods & MOD_RCTL) == MOD_RCTL) {
- s << XSTR(MOD_RCTL) << " | ";
- } else if ((mods & MOD_LCTL) == MOD_LCTL) {
- s << XSTR(MOD_LCTL) << " | ";
- }
-
- if ((mods & MOD_RSFT) == MOD_RSFT) {
- s << XSTR(MOD_RSFT) << " | ";
- } else if ((mods & MOD_LSFT) == MOD_LSFT) {
- s << XSTR(MOD_LSFT) << " | ";
- }
-
- if ((mods & MOD_RALT) == MOD_RALT) {
- s << XSTR(MOD_RALT) << " | ";
- } else if ((mods & MOD_LALT) == MOD_LALT) {
- s << XSTR(MOD_LALT) << " | ";
- }
-
- if ((mods & MOD_RGUI) == MOD_RGUI) {
- s << XSTR(MOD_RGUI) << " | ";
- } else if ((mods & MOD_LGUI) == MOD_LGUI) {
- s << XSTR(MOD_LGUI) << " | ";
- }
-
- auto _mods = s.str();
-
- if (_mods.size()) {
- _mods.resize(_mods.size() - 3);
- }
-
- return std::string(_mods);
-}
-
-std::string get_qk_mods(uint16_t keycode) {
- std::stringstream s;
- if ((keycode & QK_RCTL) == QK_RCTL) {
- s << XSTR(QK_RCTL) << " | ";
- } else if ((keycode & QK_LCTL) == QK_LCTL) {
- s << XSTR(QK_LCTL) << " | ";
- }
-
- if ((keycode & QK_RSFT) == QK_RSFT) {
- s << XSTR(QK_RSFT) << " | ";
- } else if ((keycode & QK_LSFT) == QK_LSFT) {
- s << XSTR(QK_LSFT) << " | ";
- }
-
- if ((keycode & QK_RALT) == QK_RALT) {
- s << XSTR(QK_RALT) << " | ";
- } else if ((keycode & QK_LALT) == QK_LALT) {
- s << XSTR(QK_LALT) << " | ";
- }
-
- if ((keycode & QK_RGUI) == QK_RGUI) {
- s << XSTR(QK_RGUI) << " | ";
- } else if ((keycode & QK_LGUI) == QK_LGUI) {
- s << XSTR(QK_LGUI) << " | ";
- }
-
- auto _mods = s.str();
-
- if (_mods.size()) {
- _mods.resize(_mods.size() - 3);
- }
-
- return std::string(_mods);
-}
-
-std::string generate_identifier(uint16_t kc) {
- std::stringstream s;
- if (IS_QK_MOD_TAP(kc)) {
- s << "MT(" << get_mods(QK_MOD_TAP_GET_MODS(kc)) << ", " << KEYCODE_ID_TABLE.at(kc & 0xFF) << ")";
- } else if (IS_QK_LAYER_TAP(kc)) {
- s << "LT(" << +QK_LAYER_TAP_GET_LAYER(kc) << ", " << KEYCODE_ID_TABLE.at(kc & 0xFF) << ")";
- } else if (IS_QK_TO(kc)) {
- s << "TO(" << +QK_TO_GET_LAYER(kc) << ")";
- } else if (IS_QK_MOMENTARY(kc)) {
- s << "MO(" << +QK_MOMENTARY_GET_LAYER(kc) << ")";
- } else if (IS_QK_DEF_LAYER(kc)) {
- s << "DF(" << +QK_DEF_LAYER_GET_LAYER(kc) << ")";
- } else if (IS_QK_PERSISTENT_DEF_LAYER(kc)) {
- s << "PDF(" << +QK_PERSISTENT_DEF_LAYER_GET_LAYER(kc) << ")";
- } else if (IS_QK_TOGGLE_LAYER(kc)) {
- s << "TG(" << +QK_TOGGLE_LAYER_GET_LAYER(kc) << ")";
- } else if (IS_QK_LAYER_TAP_TOGGLE(kc)) {
- s << "TT(" << +QK_LAYER_TAP_TOGGLE_GET_LAYER(kc) << ")";
- } else if (IS_QK_ONE_SHOT_LAYER(kc)) {
- s << "OSL(" << +QK_ONE_SHOT_LAYER_GET_LAYER(kc) << ")";
- } else if (IS_QK_LAYER_MOD(kc)) {
- s << "LM(" << +QK_LAYER_MOD_GET_LAYER(kc) << ", " << get_mods(QK_LAYER_MOD_GET_MODS(kc)) << ")";
- } else if (IS_QK_ONE_SHOT_MOD(kc)) {
- s << "OSM(" << get_mods(QK_ONE_SHOT_MOD_GET_MODS(kc)) << ")";
- } else if (IS_QK_MODS(kc)) {
- s << "QK_MODS(" << KEYCODE_ID_TABLE.at(QK_MODS_GET_BASIC_KEYCODE(kc)) << ", " << get_qk_mods(kc) << ")";
- } else if (IS_QK_TAP_DANCE(kc)) {
- s << "TD(" << +(kc & 0xFF) << ")";
- } else {
- // Fallback - we didn't found any matching keycode, generate the hex representation.
- s << "unknown keycode: 0x" << std::hex << kc << ". Add conversion to " << XSTR(generate_identifier);
- }
-
- return std::string(s.str());
-}
-
-std::string get_keycode_identifier_or_default(uint16_t keycode) {
- auto identifier = KEYCODE_ID_TABLE.find(keycode);
- if (identifier != KEYCODE_ID_TABLE.end()) {
- return identifier->second;
- }
-
- KEYCODE_ID_TABLE[keycode] = generate_identifier(keycode);
-
- return KEYCODE_ID_TABLE[keycode];
-}
diff --git a/tests/test_common/keycode_util.hpp b/tests/test_common/keycode_util.hpp
deleted file mode 100644
index 3143ab364e..0000000000
--- a/tests/test_common/keycode_util.hpp
+++ /dev/null
@@ -1,6 +0,0 @@
-#pragma once
-
-#include <cstdint>
-#include <string>
-
-std::string get_keycode_identifier_or_default(uint16_t keycode);
diff --git a/tests/test_common/test_driver.hpp b/tests/test_common/test_driver.hpp
index fea8225953..5c36c80dfc 100644
--- a/tests/test_common/test_driver.hpp
+++ b/tests/test_common/test_driver.hpp
@@ -20,7 +20,9 @@
#include <stdint.h>
#include "host.h"
#include "keyboard_report_util.hpp"
-#include "keycode_util.hpp"
+extern "C" {
+#include "keycode_string.h"
+}
#include "test_logger.hpp"
class TestDriver {
@@ -146,11 +148,11 @@ class TestDriver {
/** @brief Tests whether keycode `actual` is equal to `expected`. */
#define EXPECT_KEYCODE_EQ(actual, expected) EXPECT_THAT((actual), KeycodeEq((expected)))
-MATCHER_P(KeycodeEq, expected_keycode, "is equal to " + testing::PrintToString(expected_keycode) + ", keycode " + get_keycode_identifier_or_default(expected_keycode)) {
+MATCHER_P(KeycodeEq, expected_keycode, "is equal to " + testing::PrintToString(expected_keycode) + ", keycode " + get_keycode_string(expected_keycode)) {
if (arg == expected_keycode) {
return true;
}
- *result_listener << "keycode " << get_keycode_identifier_or_default(arg);
+ *result_listener << "keycode " << get_keycode_string(arg);
return false;
}
diff --git a/tests/test_common/test_fixture.cpp b/tests/test_common/test_fixture.cpp
index 81806b0e6d..00084721d6 100644
--- a/tests/test_common/test_fixture.cpp
+++ b/tests/test_common/test_fixture.cpp
@@ -46,7 +46,7 @@ void TestFixture::SetUpTestCase() {
// The following is enough to bootstrap the values set in main
eeconfig_init_quantum();
- eeconfig_update_debug(debug_config.raw);
+ eeconfig_update_debug(&debug_config);
TestDriver driver;
keyboard_init();
diff --git a/tests/test_common/test_keymap_key.hpp b/tests/test_common/test_keymap_key.hpp
index 37b4c827e4..ba2c2912e3 100644
--- a/tests/test_common/test_keymap_key.hpp
+++ b/tests/test_common/test_keymap_key.hpp
@@ -18,10 +18,10 @@
#include <cstddef>
#include <string>
-#include "keycode_util.hpp"
extern "C" {
#include "keyboard.h"
#include "test_matrix.h"
+#include "keycode_string.h"
}
#include <cassert>
@@ -29,11 +29,11 @@ extern "C" {
typedef uint8_t layer_t;
struct KeymapKey {
- KeymapKey(layer_t layer, uint8_t col, uint8_t row, uint16_t keycode) : layer(layer), position({.col = col, .row = row}), code(keycode), report_code(keycode), name(get_keycode_identifier_or_default(keycode)) {
+ KeymapKey(layer_t layer, uint8_t col, uint8_t row, uint16_t keycode) : layer(layer), position({.col = col, .row = row}), code(keycode), report_code(keycode), name(get_keycode_string(keycode)) {
validate();
}
- KeymapKey(layer_t layer, uint8_t col, uint8_t row, uint16_t keycode, uint16_t report_code) : layer(layer), position({.col = col, .row = row}), code(keycode), report_code(report_code), name{get_keycode_identifier_or_default(keycode)} {
+ KeymapKey(layer_t layer, uint8_t col, uint8_t row, uint16_t keycode, uint16_t report_code) : layer(layer), position({.col = col, .row = row}), code(keycode), report_code(report_code), name{get_keycode_string(keycode)} {
validate();
}
diff --git a/tmk_core/protocol/chibios/chibios.c b/tmk_core/protocol/chibios/chibios.c
index cf948154f9..d752f3746b 100644
--- a/tmk_core/protocol/chibios/chibios.c
+++ b/tmk_core/protocol/chibios/chibios.c
@@ -134,8 +134,6 @@ void protocol_setup(void) {
// chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL);
}
-static host_driver_t *driver = NULL;
-
void protocol_pre_init(void) {
/* Init USB */
usb_event_queue_init();
@@ -146,18 +144,11 @@ void protocol_pre_init(void) {
#endif
/* Wait until USB is active */
- while (true) {
-#if defined(USB_WAIT_FOR_ENUMERATION)
- if (USB_DRIVER.state == USB_ACTIVE) {
- driver = &chibios_driver;
- break;
- }
-#else
- driver = &chibios_driver;
- break;
-#endif
+#ifdef USB_WAIT_FOR_ENUMERATION
+ while (USB_DRIVER.state != USB_ACTIVE) {
wait_ms(50);
}
+#endif
/* Do need to wait here!
* Otherwise the next print might start a transfer on console EP
@@ -170,7 +161,7 @@ void protocol_pre_init(void) {
}
void protocol_post_init(void) {
- host_set_driver(driver);
+ host_set_driver(&chibios_driver);
}
void protocol_pre_task(void) {
diff --git a/tmk_core/protocol/host.c b/tmk_core/protocol/host.c
index df805c827c..453952049f 100644
--- a/tmk_core/protocol/host.c
+++ b/tmk_core/protocol/host.c
@@ -31,8 +31,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#endif
#ifdef BLUETOOTH_ENABLE
+# ifndef CONNECTION_ENABLE
+# error CONNECTION_ENABLE required and not enabled
+# endif
+# include "connection.h"
# include "bluetooth.h"
-# include "outputselect.h"
#endif
#ifdef NKRO_ENABLE
@@ -74,7 +77,7 @@ led_t host_keyboard_led_state(void) {
/* send report */
void host_keyboard_send(report_keyboard_t *report) {
#ifdef BLUETOOTH_ENABLE
- if (where_to_send() == OUTPUT_BLUETOOTH) {
+ if (connection_get_host() == CONNECTION_HOST_BLUETOOTH) {
bluetooth_send_keyboard(report);
return;
}
@@ -111,7 +114,7 @@ void host_nkro_send(report_nkro_t *report) {
void host_mouse_send(report_mouse_t *report) {
#ifdef BLUETOOTH_ENABLE
- if (where_to_send() == OUTPUT_BLUETOOTH) {
+ if (connection_get_host() == CONNECTION_HOST_BLUETOOTH) {
bluetooth_send_mouse(report);
return;
}
@@ -147,7 +150,7 @@ void host_consumer_send(uint16_t usage) {
last_consumer_usage = usage;
#ifdef BLUETOOTH_ENABLE
- if (where_to_send() == OUTPUT_BLUETOOTH) {
+ if (connection_get_host() == CONNECTION_HOST_BLUETOOTH) {
bluetooth_send_consumer(usage);
return;
}
diff --git a/tmk_core/protocol/report.h b/tmk_core/protocol/report.h
index d854f51d5c..9053b0bb3f 100644
--- a/tmk_core/protocol/report.h
+++ b/tmk_core/protocol/report.h
@@ -194,14 +194,22 @@ typedef struct {
} PACKED report_programmable_button_t;
#ifdef MOUSE_EXTENDED_REPORT
+# define MOUSE_REPORT_XY_MIN INT16_MIN
+# define MOUSE_REPORT_XY_MAX INT16_MAX
typedef int16_t mouse_xy_report_t;
#else
+# define MOUSE_REPORT_XY_MIN INT8_MIN
+# define MOUSE_REPORT_XY_MAX INT8_MAX
typedef int8_t mouse_xy_report_t;
#endif
#ifdef WHEEL_EXTENDED_REPORT
+# define MOUSE_REPORT_HV_MIN INT16_MIN
+# define MOUSE_REPORT_HV_MAX INT16_MAX
typedef int16_t mouse_hv_report_t;
#else
+# define MOUSE_REPORT_HV_MIN INT8_MIN
+# define MOUSE_REPORT_HV_MAX INT8_MAX
typedef int8_t mouse_hv_report_t;
#endif
diff --git a/tmk_core/protocol/usb_descriptor.c b/tmk_core/protocol/usb_descriptor.c
index c7fb660b65..ceab9eef9a 100644
--- a/tmk_core/protocol/usb_descriptor.c
+++ b/tmk_core/protocol/usb_descriptor.c
@@ -165,6 +165,24 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM SharedReport[] = {
# endif
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_RELATIVE),
+# ifdef POINTING_DEVICE_HIRES_SCROLL_ENABLE
+ HID_RI_COLLECTION(8, 0x02),
+ // Feature report and padding (1 byte)
+ HID_RI_USAGE(8, 0x48), // Resolution Multiplier
+ HID_RI_REPORT_COUNT(8, 0x01),
+ HID_RI_REPORT_SIZE(8, 0x02),
+ HID_RI_LOGICAL_MINIMUM(8, 0x00),
+ HID_RI_LOGICAL_MAXIMUM(8, 0x01),
+ HID_RI_PHYSICAL_MINIMUM(8, 1),
+ HID_RI_PHYSICAL_MAXIMUM(8, POINTING_DEVICE_HIRES_SCROLL_MULTIPLIER),
+ HID_RI_UNIT_EXPONENT(8, POINTING_DEVICE_HIRES_SCROLL_EXPONENT),
+ HID_RI_FEATURE(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
+ HID_RI_PHYSICAL_MINIMUM(8, 0x00),
+ HID_RI_PHYSICAL_MAXIMUM(8, 0x00),
+ HID_RI_REPORT_SIZE(8, 0x06),
+ HID_RI_FEATURE(8, HID_IOF_CONSTANT),
+# endif
+
// Vertical wheel (1 or 2 bytes)
HID_RI_USAGE(8, 0x38), // Wheel
# ifndef WHEEL_EXTENDED_REPORT
@@ -179,6 +197,7 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM SharedReport[] = {
HID_RI_REPORT_SIZE(8, 0x10),
# endif
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_RELATIVE),
+
// Horizontal wheel (1 or 2 bytes)
HID_RI_USAGE_PAGE(8, 0x0C),// Consumer
HID_RI_USAGE(16, 0x0238), // AC Pan
@@ -194,6 +213,11 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM SharedReport[] = {
HID_RI_REPORT_SIZE(8, 0x10),
# endif
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_RELATIVE),
+
+# ifdef POINTING_DEVICE_HIRES_SCROLL_ENABLE
+ HID_RI_END_COLLECTION(0),
+# endif
+
HID_RI_END_COLLECTION(0),
HID_RI_END_COLLECTION(0),
# ifndef MOUSE_SHARED_EP
diff --git a/tmk_core/protocol/usb_descriptor_common.h b/tmk_core/protocol/usb_descriptor_common.h
index 909c230a99..f782d83fbc 100644
--- a/tmk_core/protocol/usb_descriptor_common.h
+++ b/tmk_core/protocol/usb_descriptor_common.h
@@ -32,3 +32,23 @@
#ifndef RAW_USAGE_ID
# define RAW_USAGE_ID 0x61
#endif
+
+/////////////////////
+// Hires Scroll Defaults
+
+#ifdef POINTING_DEVICE_HIRES_SCROLL_ENABLE
+# ifdef POINTING_DEVICE_HIRES_SCROLL_MULTIPLIER
+# if POINTING_DEVICE_HIRES_SCROLL_MULTIPLIER > 127 || POINTING_DEVICE_HIRES_SCROLL_MULTIPLIER < 1
+# error "POINTING_DEVICE_HIRES_SCROLL_MULTIPLIER must be between 1 and 127, inclusive!"
+# endif
+# else
+# define POINTING_DEVICE_HIRES_SCROLL_MULTIPLIER 120
+# endif
+# ifdef POINTING_DEVICE_HIRES_SCROLL_EXPONENT
+# if POINTING_DEVICE_HIRES_SCROLL_EXPONENT > 127 || POINTING_DEVICE_HIRES_SCROLL_EXPONENT < 0
+# error "POINTING_DEVICE_HIRES_SCROLL_EXPONENT must be between 0 and 127, inclusive!"
+# endif
+# else
+# define POINTING_DEVICE_HIRES_SCROLL_EXPONENT 0
+# endif
+#endif \ No newline at end of file
diff --git a/tmk_core/protocol/vusb/vusb.c b/tmk_core/protocol/vusb/vusb.c
index fdbfcc17dc..56cf82e5a6 100644
--- a/tmk_core/protocol/vusb/vusb.c
+++ b/tmk_core/protocol/vusb/vusb.c
@@ -520,6 +520,24 @@ const PROGMEM uchar shared_hid_report[] = {
# endif
0x81, 0x06, // Input (Data, Variable, Relative)
+# ifdef POINTING_DEVICE_HIRES_SCROLL_ENABLE
+ // Feature report and padding (1 byte)
+ 0xA1, 0x02, // Collection (Logical)
+ 0x09, 0x48, // Usage (Resolution Multiplier)
+ 0x95, 0x01, // Report Count (1)
+ 0x75, 0x02, // Report Size (2)
+ 0x15, 0x00, // Logical Minimum (0)
+ 0x25, 0x01, // Logical Maximum (1)
+ 0x35, 0x01, // Physical Minimum (1)
+ 0x45, POINTING_DEVICE_HIRES_SCROLL_MULTIPLIER, // Physical Maximum (POINTING_DEVICE_HIRES_SCROLL_MULTIPLIER)
+ 0x55, POINTING_DEVICE_HIRES_SCROLL_EXPONENT, // Unit Exponent (POINTING_DEVICE_HIRES_SCROLL_EXPONENT)
+ 0xB1, 0x02, // Feature (Data, Variable, Absolute)
+ 0x35, 0x00, // Physical Minimum (0)
+ 0x45, 0x00, // Physical Maximum (0)
+ 0x75, 0x06, // Report Size (6)
+ 0xB1, 0x03, // Feature (Constant)
+# endif
+
// Vertical wheel (1 or 2 bytes)
0x09, 0x38, // Usage (Wheel)
# ifndef WHEEL_EXTENDED_REPORT
@@ -534,6 +552,7 @@ const PROGMEM uchar shared_hid_report[] = {
0x75, 0x10, // Report Size (16)
# endif
0x81, 0x06, // Input (Data, Variable, Relative)
+
// Horizontal wheel (1 or 2 bytes)
0x05, 0x0C, // Usage Page (Consumer)
0x0A, 0x38, 0x02, // Usage (AC Pan)
@@ -549,8 +568,13 @@ const PROGMEM uchar shared_hid_report[] = {
0x75, 0x10, // Report Size (16)
# endif
0x81, 0x06, // Input (Data, Variable, Relative)
- 0xC0, // End Collection
- 0xC0, // End Collection
+
+# ifdef POINTING_DEVICE_HIRES_SCROLL_ENABLE
+ 0xC0, // End Collection
+# endif
+
+ 0xC0, // End Collection
+ 0xC0, // End Collection
#endif
#ifdef EXTRAKEY_ENABLE
diff --git a/users/_example/_example.c b/users/_example/_example.c
index 8e0778b122..5f9580d8e9 100644
--- a/users/_example/_example.c
+++ b/users/_example/_example.c
@@ -2,4 +2,4 @@
void my_custom_function(void) {
-} \ No newline at end of file
+}
diff --git a/users/_example/_example.h b/users/_example/_example.h
index f7c7990257..72907d06d7 100644
--- a/users/_example/_example.h
+++ b/users/_example/_example.h
@@ -5,4 +5,4 @@
void my_custom_function(void);
-#endif \ No newline at end of file
+#endif
diff --git a/users/_example/readme.md b/users/_example/readme.md
index fdea33b67a..d6ead7efd2 100644
--- a/users/_example/readme.md
+++ b/users/_example/readme.md
@@ -11,4 +11,4 @@ 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/>. \ No newline at end of file
+along with this program. If not, see <http://www.gnu.org/licenses/>.
diff --git a/users/_example/rules.mk b/users/_example/rules.mk
index 250adc3d0d..af076dd7fe 100644
--- a/users/_example/rules.mk
+++ b/users/_example/rules.mk
@@ -1 +1 @@
-SRC += _example.c \ No newline at end of file
+SRC += _example.c
diff --git a/users/readme.md b/users/readme.md
index d8f14d8beb..8a490c28ce 100644
--- a/users/readme.md
+++ b/users/readme.md
@@ -1,3 +1,3 @@
# User space
-This is a place for users to put code that they might use between keyboards. If you build the keymap `mine`, `/users/mine/rules.mk` will be included in your build, and `/users/mine/` will be in your path - keep these things in mind when naming your files and referencing them from other places. \ No newline at end of file
+This is a place for users to put code that they might use between keyboards. If you build the keymap `mine`, `/users/mine/rules.mk` will be included in your build, and `/users/mine/` will be in your path - keep these things in mind when naming your files and referencing them from other places.
diff --git a/util/regen.sh b/util/regen.sh
index ab03018893..df40444f80 100755
--- a/util/regen.sh
+++ b/util/regen.sh
@@ -3,7 +3,6 @@ set -e
qmk generate-rgb-breathe-table -o quantum/rgblight/rgblight_breathe_table.h
qmk generate-keycodes --version latest -o quantum/keycodes.h
-qmk generate-keycodes-tests --version latest -o tests/test_common/keycode_table.cpp
for lang in $(find data/constants/keycodes/extras/ -type f -exec basename '{}' \; | sed "s/keycodes_\(.*\)_[0-9].*/\1/"); do
qmk generate-keycode-extras --version latest --lang $lang -o quantum/keymap_extras/keymap_$lang.h
diff --git a/util/usb_detach/usb_detach.c b/util/usb_detach/usb_detach.c
index 786ab5e674..8047c37ba3 100644
--- a/util/usb_detach/usb_detach.c
+++ b/util/usb_detach/usb_detach.c
@@ -31,4 +31,4 @@ int main(int argc, char**argv)
printf ("usage: %s /dev/bus/usb/BUS/DEVICE\n",argv[0]);
printf("Release all interfaces of this usb device for usage in virtualisation\n");
}
-} \ No newline at end of file
+}