Merge remote-tracking branch 'qmk/master' into merge-2022-07-11
This commit is contained in:
35
data/mappings/defaults.json
Normal file
35
data/mappings/defaults.json
Normal file
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"development_board": {
|
||||
"promicro": {
|
||||
"processor": "atmega32u4",
|
||||
"bootloader": "caterina",
|
||||
"pin_compatible": "promicro"
|
||||
},
|
||||
"elite_c": {
|
||||
"processor": "atmega32u4",
|
||||
"bootloader": "atmel-dfu",
|
||||
"pin_compatible": "promicro"
|
||||
},
|
||||
"proton_c": {
|
||||
"processor": "STM32F303",
|
||||
"bootloader": "stm32-dfu",
|
||||
"board": "QMK_PROTON_C",
|
||||
"pin_compatible": "promicro"
|
||||
},
|
||||
"bluepill": {
|
||||
"processor": "STM32F103",
|
||||
"bootloader": "stm32duino",
|
||||
"board": "STM32_F103_STM32DUINO"
|
||||
},
|
||||
"blackpill_f401": {
|
||||
"processor": "STM32F401",
|
||||
"bootloader": "stm32-dfu",
|
||||
"board": "BLACKPILL_STM32_F401"
|
||||
},
|
||||
"blackpill_f411": {
|
||||
"processor": "STM32F411",
|
||||
"bootloader": "stm32-dfu",
|
||||
"board": "BLACKPILL_STM32_F411"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3,22 +3,26 @@
|
||||
{
|
||||
# Format:
|
||||
# <config.h key>: {"info_key": <info.json key>, ["value_type": <value_type>], ["to_json": <true/false>], ["to_c": <true/false>]}
|
||||
# value_type: one of "array", "array.int", "bool", "int", "hex", "list", "mapping"
|
||||
# value_type: one of "array", "array.int", "bool", "int", "hex", "list", "mapping", "str", "raw"
|
||||
# to_json: Default `true`. Set to `false` to exclude this mapping from info.json
|
||||
# to_c: Default `true`. Set to `false` to exclude this mapping from config.h
|
||||
# warn_duplicate: Default `true`. Set to `false` to turn off warning when a value exists in both places
|
||||
# deprecated: Default `false`. Set to `true` to turn on warning when a value exists
|
||||
# invalid: Default `false`. Set to `true` to generate errors when a value exists
|
||||
"AUDIO_VOICES": {"info_key": "audio.voices", "value_type": "bool"},
|
||||
"BACKLIGHT_BREATHING": {"info_key": "backlight.breathing", "value_type": "bool"},
|
||||
"BREATHING_PERIOD": {"info_key": "backlight.breathing_period", "value_type": "int"},
|
||||
"BACKLIGHT_PIN": {"info_key": "backlight.pin"},
|
||||
"BOTH_SHIFTS_TURNS_ON_CAPS_WORD": {"info_key": "caps_word.both_shifts_turns_on", "value_type": "bool"},
|
||||
"CAPS_WORD_IDLE_TIMEOUT": {"info_key": "caps_word.idle_timeout", "value_type": "int"},
|
||||
"COMBO_COUNT": {"info_key": "combo.count", "value_type": "int"},
|
||||
"COMBO_TERM": {"info_key": "combo.term", "value_type": "int"},
|
||||
"DEBOUNCE": {"info_key": "debounce", "value_type": "int"},
|
||||
"DEVICE_VER": {"info_key": "usb.device_ver", "value_type": "hex"},
|
||||
# TODO: Replace ^^^ with vvv
|
||||
#"DEVICE_VER": {"info_key": "usb.device_version", "value_type": "bcd_version"},
|
||||
"DESCRIPTION": {"info_key": "keyboard_folder", "to_json": false},
|
||||
"DIODE_DIRECTION": {"info_key": "diode_direction"},
|
||||
"DOUBLE_TAP_SHIFT_TURNS_ON_CAPS_WORD": {"info_key": "caps_word.double_tap_shift_turns_on", "value_type": "bool"},
|
||||
"FORCE_NKRO": {"info_key": "usb.force_nkro", "value_type": "bool"},
|
||||
"DYNAMIC_KEYMAP_EEPROM_MAX_ADDR": {"info_key": "dynamic_keymap.eeprom_max_addr", "value_type": "int"},
|
||||
"DYNAMIC_KEYMAP_LAYER_COUNT": {"info_key": "dynamic_keymap.layer_count", "value_type": "int"},
|
||||
@@ -78,6 +82,9 @@
|
||||
"QMK_KEYS_PER_SCAN": {"info_key": "qmk.keys_per_scan", "value_type": "int"},
|
||||
"QMK_LED": {"info_key": "qmk_lufa_bootloader.led"},
|
||||
"QMK_SPEAKER": {"info_key": "qmk_lufa_bootloader.speaker"},
|
||||
"SECURE_UNLOCK_SEQUENCE": {"info_key": "secure.unlock_sequence", "value_type": "array.array.int", "to_json": false},
|
||||
"SECURE_UNLOCK_TIMEOUT": {"info_key": "secure.unlock_timeout", "value_type": "int"},
|
||||
"SECURE_IDLE_TIMEOUT": {"info_key": "secure.idle_timeout", "value_type": "int"},
|
||||
"SENDSTRING_BELL": {"info_key": "audio.macro_beep", "value_type": "bool"},
|
||||
"SPLIT_MODS_ENABLE": {"info_key": "split.transport.sync_modifiers", "value_type": "bool"},
|
||||
"SPLIT_TRANSPORT_MIRROR": {"info_key": "split.transport.sync_matrix_state", "value_type": "bool"},
|
||||
@@ -96,4 +103,11 @@
|
||||
"USB_MAX_POWER_CONSUMPTION": {"info_key": "usb.max_power", "value_type": "int"},
|
||||
"USB_POLLING_INTERVAL_MS": {"info_key": "usb.polling_interval", "value_type": "int"},
|
||||
"USB_SUSPEND_WAKEUP_DELAY": {"info_key": "usb.suspend_wakeup_delay", "value_type": "int"},
|
||||
|
||||
# Items we want flagged in lint
|
||||
"NO_ACTION_MACRO": {"info_key": "_invalid.no_action_macro", "invalid": true},
|
||||
"NO_ACTION_FUNCTION": {"info_key": "_invalid.no_action_function", "invalid": true},
|
||||
"DESCRIPTION": {"info_key": "_invalid.usb_description", "invalid": true},
|
||||
"DEBOUNCING_DELAY": {"info_key": "_invalid.debouncing_delay", "invalid": true},
|
||||
"PREVENT_STUCK_MODIFIERS": {"info_key": "_invalid.prevent_stuck_mods", "invalid": true},
|
||||
}
|
||||
|
||||
@@ -3,13 +3,16 @@
|
||||
{
|
||||
# Format:
|
||||
# <rules.mk key>: {"info_key": <info.json key>, ["value_type": <value_type>], ["to_json": <true/false>], ["to_c": <true/false>]}
|
||||
# value_type: one of "array", "array.int", "bool", "int", "list", "hex", "mapping"
|
||||
# value_type: one of "array", "array.int", "bool", "int", "list", "hex", "mapping", "str", "raw"
|
||||
# to_json: Default `true`. Set to `false` to exclude this mapping from info.json
|
||||
# to_c: Default `true`. Set to `false` to exclude this mapping from rules.mk
|
||||
# warn_duplicate: Default `true`. Set to `false` to turn off warning when a value exists in both places
|
||||
# deprecated: Default `false`. Set to `true` to turn on warning when a value exists
|
||||
# invalid: Default `false`. Set to `true` to generate errors when a value exists
|
||||
"BOARD": {"info_key": "board"},
|
||||
"BOOTLOADER": {"info_key": "bootloader", "warn_duplicate": false},
|
||||
"BLUETOOTH": {"info_key": "bluetooth.driver"},
|
||||
"CAPS_WORD_ENABLE": {"info_key": "caps_word.enabled", "value_type": "bool"},
|
||||
"FIRMWARE_FORMAT": {"info_key": "build.firmware_format"},
|
||||
"KEYBOARD_SHARED_EP": {"info_key": "usb.shared_endpoint.keyboard", "value_type": "bool"},
|
||||
"MOUSE_SHARED_EP": {"info_key": "usb.shared_endpoint.mouse", "value_type": "bool"},
|
||||
@@ -19,7 +22,14 @@
|
||||
"MCU": {"info_key": "processor", "warn_duplicate": false},
|
||||
"MOUSEKEY_ENABLE": {"info_key": "mouse_key.enabled", "value_type": "bool"},
|
||||
"NO_USB_STARTUP_CHECK": {"info_key": "usb.no_startup_check", "value_type": "bool"},
|
||||
"PIN_COMPATIBLE": {"info_key": "pin_compatible"},
|
||||
"SECURE_ENABLE": {"info_key": "secure.enabled", "value_type": "bool"},
|
||||
"SPLIT_KEYBOARD": {"info_key": "split.enabled", "value_type": "bool"},
|
||||
"SPLIT_TRANSPORT": {"info_key": "split.transport.protocol", "value_type": "str", "to_c": false},
|
||||
"WAIT_FOR_USB": {"info_key": "usb.wait_for", "value_type": "bool"}
|
||||
"SPLIT_TRANSPORT": {"info_key": "split.transport.protocol", "to_c": false},
|
||||
"WAIT_FOR_USB": {"info_key": "usb.wait_for", "value_type": "bool"},
|
||||
|
||||
# Items we want flagged in lint
|
||||
"CTPC": {"info_key": "_deprecated.ctpc", "deprecated": true},
|
||||
"CONVERT_TO_PROTON_C": {"info_key": "_deprecated.ctpc", "deprecated": true},
|
||||
"VIAL_ENABLE": {"info_key": "_invalid.vial", "invalid": true},
|
||||
}
|
||||
|
||||
@@ -11,6 +11,9 @@
|
||||
'2_milk': {
|
||||
target: 'spaceman/2_milk'
|
||||
},
|
||||
'absinthe': {
|
||||
target: 'keyhive/absinthe'
|
||||
},
|
||||
'aeboards/constellation': {
|
||||
target: 'aeboards/constellation/rev1'
|
||||
},
|
||||
@@ -26,6 +29,18 @@
|
||||
alice: {
|
||||
target: 'tgr/alice'
|
||||
},
|
||||
amj40: {
|
||||
target: 'amjkeyboard/amj40'
|
||||
},
|
||||
amj60: {
|
||||
target: 'amjkeyboard/amj60'
|
||||
},
|
||||
amj96: {
|
||||
target: 'amjkeyboard/amj96'
|
||||
},
|
||||
amjpad: {
|
||||
target: 'amjkeyboard/amjpad'
|
||||
},
|
||||
angel17: {
|
||||
target: 'angel17/alpha'
|
||||
},
|
||||
@@ -33,7 +48,10 @@
|
||||
target: 'angel64/alpha'
|
||||
},
|
||||
at101_blackheart: {
|
||||
target: 'at101_bh'
|
||||
target: 'viktus/at101_bh'
|
||||
},
|
||||
at101_bh: {
|
||||
target: 'viktus/at101_bh'
|
||||
},
|
||||
'atom47/rev2': {
|
||||
target: 'maartenwut/atom47/rev2'
|
||||
@@ -158,6 +176,9 @@
|
||||
ergoinu: {
|
||||
target: 'dm9records/ergoinu'
|
||||
},
|
||||
ergosaurus: {
|
||||
target: 'keyhive/ergosaurus'
|
||||
},
|
||||
'exclusive/e85': {
|
||||
target: 'exclusive/e85/hotswap'
|
||||
},
|
||||
@@ -165,7 +186,13 @@
|
||||
target: 'gh60/revc'
|
||||
},
|
||||
'gmmk/pro': {
|
||||
target: 'gmmk/pro/ansi'
|
||||
target: 'gmmk/pro/rev1/ansi'
|
||||
},
|
||||
'gmmk/pro/ansi': {
|
||||
target: 'gmmk/pro/rev1/ansi'
|
||||
},
|
||||
'gmmk/pro/iso': {
|
||||
target: 'gmmk/pro/rev1/iso'
|
||||
},
|
||||
'handwired/ferris': {
|
||||
target: 'ferris/0_1'
|
||||
@@ -212,6 +239,9 @@
|
||||
'helix/rev2/under/oled': {
|
||||
target: 'helix/rev2/under'
|
||||
},
|
||||
honeycomb: {
|
||||
target: 'keyhive/honeycomb'
|
||||
},
|
||||
id80: {
|
||||
target: 'id80/ansi'
|
||||
},
|
||||
@@ -260,6 +290,9 @@
|
||||
'kyria': {
|
||||
target: 'splitkb/kyria'
|
||||
},
|
||||
lattice60: {
|
||||
target: 'keyhive/lattice60'
|
||||
},
|
||||
'lazydesigners/the60': {
|
||||
target: 'lazydesigners/the60/rev1'
|
||||
},
|
||||
@@ -392,7 +425,13 @@
|
||||
target: 'oddball/v1'
|
||||
},
|
||||
omnikey_blackheart: {
|
||||
target: 'omnikey_bh'
|
||||
target: 'viktus/omnikey_bh'
|
||||
},
|
||||
omnikey_bh: {
|
||||
target: 'viktus/omnikey_bh'
|
||||
},
|
||||
opus: {
|
||||
target: 'keyhive/opus'
|
||||
},
|
||||
'pabile/p20': {
|
||||
target: 'pabile/p20/ver1'
|
||||
@@ -489,6 +528,12 @@
|
||||
skog: {
|
||||
target: 'percent/skog'
|
||||
},
|
||||
smallice: {
|
||||
target: 'keyhive/smallice'
|
||||
},
|
||||
southpole: {
|
||||
target: 'keyhive/southpole'
|
||||
},
|
||||
speedo: {
|
||||
target: 'cozykeys/speedo/v2'
|
||||
},
|
||||
@@ -577,7 +622,10 @@
|
||||
target: 'ymd75/rev1'
|
||||
},
|
||||
z150_blackheart: {
|
||||
target: 'z150_bh'
|
||||
target: 'viktus/z150_bh'
|
||||
},
|
||||
z150_bh:{
|
||||
target: 'viktus/z150_bh'
|
||||
},
|
||||
zeal60: {
|
||||
target: 'wilba_tech/zeal60'
|
||||
@@ -904,6 +952,9 @@
|
||||
meishi2: {
|
||||
target: 'biacco42/meishi2'
|
||||
},
|
||||
melody96: {
|
||||
target: 'ymdk/melody96'
|
||||
},
|
||||
minidox/rev1: {
|
||||
target: 'maple_computing/minidox/rev1'
|
||||
},
|
||||
@@ -919,6 +970,18 @@
|
||||
montex: {
|
||||
target: 'idobao/montex/v1'
|
||||
},
|
||||
mt40: {
|
||||
target: 'mt/mt40'
|
||||
},
|
||||
mt64rgb: {
|
||||
target: 'mt/mt64rgb'
|
||||
},
|
||||
mt84: {
|
||||
target: 'mt/mt84'
|
||||
},
|
||||
mt980: {
|
||||
target: 'mt/mt980'
|
||||
},
|
||||
nafuda: {
|
||||
target: 'salicylic_acid3/nafuda'
|
||||
},
|
||||
@@ -943,6 +1006,9 @@
|
||||
namecard2x4: {
|
||||
target: 'takashiski/namecard2x4'
|
||||
},
|
||||
navi10: {
|
||||
target: 'keyhive/navi10'
|
||||
},
|
||||
nebula12: {
|
||||
target: 'spaceholdings/nebula12'
|
||||
},
|
||||
@@ -1144,6 +1210,12 @@
|
||||
underscore33/rev2: {
|
||||
target: 'tominabox1/underscore33/rev2'
|
||||
},
|
||||
uno: {
|
||||
target: 'keyhive/uno'
|
||||
},
|
||||
ut472: {
|
||||
target: 'keyhive/ut472'
|
||||
},
|
||||
vn66: {
|
||||
target: 'hnahkb/vn66'
|
||||
},
|
||||
@@ -1153,6 +1225,12 @@
|
||||
wanten: {
|
||||
target: 'qpockets/wanten'
|
||||
},
|
||||
'wheatfield/blocked65': {
|
||||
target: 'mt/blocked65'
|
||||
},
|
||||
'wheatfield/split75': {
|
||||
target: 'mt/split75'
|
||||
},
|
||||
whitefox: {
|
||||
target: 'input_club/whitefox'
|
||||
},
|
||||
|
||||
@@ -41,8 +41,6 @@
|
||||
"LAYOUT_2x2uC",
|
||||
"LAYOUT_2x3uC",
|
||||
"LAYOUT_625uC",
|
||||
"LAYOUT_ANSI_DEFAULT",
|
||||
"LAYOUT_JP",
|
||||
"LAYOUT_ortho_3x12_1x2uC",
|
||||
"LAYOUT_ortho_4x12_1x2uC",
|
||||
"LAYOUT_ortho_4x12_1x2uL",
|
||||
@@ -57,8 +55,7 @@
|
||||
"LAYOUT_planck_1x2uR",
|
||||
"LAYOUT_preonic_1x2uC",
|
||||
"LAYOUT_preonic_1x2uL",
|
||||
"LAYOUT_preonic_1x2uR",
|
||||
"LAYOUT_reviung34_2uL"
|
||||
"LAYOUT_preonic_1x2uR"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -71,6 +68,22 @@
|
||||
"type": "number",
|
||||
"min": 0.25
|
||||
},
|
||||
"keyboard": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"converter/numeric_keypad_IIe",
|
||||
"emptystring/NQG",
|
||||
"maple_computing/christmas_tree/V2017"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"pattern": "^[0-9a-z][0-9a-z_/]*$"
|
||||
}
|
||||
]
|
||||
},
|
||||
"mcu_pin_array": {
|
||||
"type": "array",
|
||||
"items": {"$ref": "#/mcu_pin"}
|
||||
|
||||
@@ -5,15 +5,24 @@
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"keyboard_name": {"$ref": "qmk.definitions.v1#/text_identifier"},
|
||||
"keyboard_folder": {"$ref": "qmk.definitions.v1#/keyboard"},
|
||||
"maintainer": {"$ref": "qmk.definitions.v1#/text_identifier"},
|
||||
"manufacturer": {"$ref": "qmk.definitions.v1#/text_identifier"},
|
||||
"url": {
|
||||
"type": "string",
|
||||
"format": "uri"
|
||||
},
|
||||
"development_board": {
|
||||
"type": "string",
|
||||
"enum": ["promicro", "elite_c", "proton_c", "bluepill", "blackpill_f401", "blackpill_f411"]
|
||||
},
|
||||
"pin_compatible": {
|
||||
"type": "string",
|
||||
"enum": ["promicro"]
|
||||
},
|
||||
"processor": {
|
||||
"type": "string",
|
||||
"enum": ["cortex-m0", "cortex-m0plus", "cortex-m3", "cortex-m4", "MKL26Z64", "MK20DX128", "MK20DX256", "MK66FX1M0", "STM32F042", "STM32F072", "STM32F103", "STM32F303", "STM32F401", "STM32F405", "STM32F407", "STM32F411", "STM32F446", "STM32G431", "STM32G474", "STM32L412", "STM32L422", "STM32L432", "STM32L433", "STM32L442", "STM32L443", "GD32VF103", "WB32F3G71", "atmega16u2", "atmega32u2", "atmega16u4", "atmega32u4", "at90usb162", "at90usb646", "at90usb647", "at90usb1286", "at90usb1287", "atmega32a", "atmega328p", "atmega328", "attiny85", "unknown"]
|
||||
"enum": ["cortex-m0", "cortex-m0plus", "cortex-m3", "cortex-m4", "MKL26Z64", "MK20DX128", "MK20DX256", "MK66FX1M0", "STM32F042", "STM32F072", "STM32F103", "STM32F303", "STM32F401", "STM32F405", "STM32F407", "STM32F411", "STM32F446", "STM32G431", "STM32G474", "STM32L412", "STM32L422", "STM32L432", "STM32L433", "STM32L442", "STM32L443", "GD32VF103", "WB32F3G71", "WB32FQ95", "atmega16u2", "atmega32u2", "atmega16u4", "atmega32u4", "at90usb162", "at90usb646", "at90usb647", "at90usb1286", "at90usb1287", "atmega32a", "atmega328p", "atmega328", "attiny85", "unknown"]
|
||||
},
|
||||
"audio": {
|
||||
"type": "object",
|
||||
@@ -83,6 +92,16 @@
|
||||
"enum": ["COL2ROW", "ROW2COL"]
|
||||
},
|
||||
"debounce": {"$ref": "qmk.definitions.v1#/unsigned_int"},
|
||||
"caps_word": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"enabled": {"type": "boolean"},
|
||||
"both_shifts_turns_on": {"type": "boolean"},
|
||||
"double_tap_shift_turns_on": {"type": "boolean"},
|
||||
"idle_timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"},
|
||||
},
|
||||
},
|
||||
"combo": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -126,7 +145,10 @@
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"label": {"type": "string"},
|
||||
"label": {
|
||||
"type": "string",
|
||||
"pattern": "^[^\\n]*$"
|
||||
},
|
||||
"matrix": {
|
||||
"type": "array",
|
||||
"minItems": 2,
|
||||
@@ -193,6 +215,62 @@
|
||||
"timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"}
|
||||
}
|
||||
},
|
||||
"led_matrix": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"driver": {"type": "string"},
|
||||
"layout": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"matrix": {
|
||||
"type": "array",
|
||||
"minItems": 2,
|
||||
"maxItems": 2,
|
||||
"items": {
|
||||
"type": "number",
|
||||
"min": 0,
|
||||
"multipleOf": 1
|
||||
}
|
||||
},
|
||||
"x": {"$ref": "qmk.definitions.v1#/key_unit"},
|
||||
"y": {"$ref": "qmk.definitions.v1#/key_unit"},
|
||||
"flags": {"$ref": "qmk.definitions.v1#/unsigned_decimal"}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"rgb_matrix": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"driver": {"type": "string"},
|
||||
"layout": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"matrix": {
|
||||
"type": "array",
|
||||
"minItems": 2,
|
||||
"maxItems": 2,
|
||||
"items": {
|
||||
"type": "number",
|
||||
"min": 0,
|
||||
"multipleOf": 1
|
||||
}
|
||||
},
|
||||
"x": {"$ref": "qmk.definitions.v1#/key_unit"},
|
||||
"y": {"$ref": "qmk.definitions.v1#/key_unit"},
|
||||
"flags": {"$ref": "qmk.definitions.v1#/unsigned_decimal"}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"rgblight": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
@@ -235,6 +313,30 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"secure": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"enabled": {"type": "boolean"},
|
||||
"unlock_timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"},
|
||||
"idle_timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"},
|
||||
"unlock_sequence": {
|
||||
"type": "array",
|
||||
"minLength": 1,
|
||||
"maxLength": 5,
|
||||
"items": {
|
||||
"type": "array",
|
||||
"minItems": 2,
|
||||
"maxItems": 2,
|
||||
"items": {
|
||||
"type": "number",
|
||||
"min": 0,
|
||||
"multipleOf": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"split": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
|
||||
5
data/templates/api/readme.md
Normal file
5
data/templates/api/readme.md
Normal file
@@ -0,0 +1,5 @@
|
||||
# QMK Keyboard Metadata
|
||||
|
||||
This directory contains machine parsable data about keyboards supported by QMK. The latest version is always available online at <https://keyboards.qmk.fm>.
|
||||
|
||||
Do not edit anything here by hand. It is generated with the `qmk generate-api` command.
|
||||
Reference in New Issue
Block a user