qmk_firmware

QMK firmware for my keyboards (Corne, Sweep Ferris) and trackball (Ploopy Adept)
Log | Files | Refs | Submodules | LICENSE

keyboard.jsonschema (44386B)


      1 {
      2     "$schema": "https://json-schema.org/draft/2020-12/schema#",
      3     "$id": "qmk.keyboard.v1",
      4     "title": "Keyboard Information",
      5     "definitions": {
      6         "encoder_config": {
      7             "type": "object",
      8             "properties": {
      9                 "driver": {
     10                     "type": "string",
     11                     "enum": ["custom", "quadrature"]
     12                 },
     13                 "rotary": {
     14                     "type": "array",
     15                     "items": {
     16                         "type": "object",
     17                         "additionalProperties": false,
     18                         "required": ["pin_a", "pin_b"],
     19                         "properties": {
     20                             "pin_a": {"$ref": "./definitions.jsonschema#/mcu_pin"},
     21                             "pin_b": {"$ref": "./definitions.jsonschema#/mcu_pin"},
     22                             "resolution": {"$ref": "./definitions.jsonschema#/unsigned_int"}
     23                         }
     24                     }
     25                 }
     26             }
     27         },
     28         "dip_switch_config": {
     29             "type": "object",
     30             "properties": {
     31                 "pins": {"$ref": "./definitions.jsonschema#/mcu_pin_array"}
     32             }
     33         },
     34         "features_config": {
     35             "$ref": "./definitions.jsonschema#/boolean_array",
     36             "propertyNames": {"$ref": "./definitions.jsonschema#/snake_case"},
     37             "not": {"required": ["lto"]}
     38         }
     39     },
     40     "type": "object",
     41     "not": {"required": ["vendorId", "productId"]}, // reject via keys...
     42     "properties": {
     43         "keyboard_name": {"$ref": "./definitions.jsonschema#/text_identifier"},
     44         "keyboard_folder": {"$ref": "./definitions.jsonschema#/keyboard"},
     45         "maintainer": {"$ref": "./definitions.jsonschema#/text_identifier"},
     46         "manufacturer": {"$ref": "./definitions.jsonschema#/text_identifier"},
     47         "url": {
     48             "type": "string",
     49             "format": "uri"
     50         },
     51         "development_board": {
     52             "type": "string",
     53             "enum": ["promicro", "elite_c", "elite_pi", "proton_c", "kb2040", "promicro_rp2040", "blok", "michi", "bit_c_pro", "stemcell", "bluepill", "blackpill_f401", "blackpill_f411", "bonsai_c4", "helios", "liatris", "imera", "svlinky"]
     54         },
     55         "pin_compatible": {
     56             "type": "string",
     57             "enum": ["promicro", "elite_c"]
     58         },
     59         "processor": {
     60             "type": "string",
     61             "enum": [
     62                 "cortex-m0",
     63                 "cortex-m0plus",
     64                 "cortex-m3",
     65                 "cortex-m4",
     66                 "cortex-m7",
     67                 "cortex-m23",
     68                 "cortex-m33",
     69                 "cortex-m35p",
     70                 "cortex-m55",
     71                 "cortex-m85",
     72                 "MKL26Z64",
     73                 "MK20DX128",
     74                 "MK20DX256",
     75                 "MK64FX512",
     76                 "MK66FX1M0",
     77                 "RP2040",
     78                 "STM32F042",
     79                 "STM32F072",
     80                 "STM32F103",
     81                 "STM32F303",
     82                 "STM32F401",
     83                 "STM32F405",
     84                 "STM32F407",
     85                 "STM32F411",
     86                 "STM32F446",
     87                 "STM32G0B1",
     88                 "STM32G431",
     89                 "STM32G474",
     90                 "STM32H723",
     91                 "STM32H733",
     92                 "STM32L412",
     93                 "STM32L422",
     94                 "STM32L432",
     95                 "STM32L433",
     96                 "STM32L442",
     97                 "STM32L443",
     98                 "GD32VF103",
     99                 "WB32F3G71",
    100                 "WB32FQ95",
    101                 "AT32F415",
    102                 "atmega16u2",
    103                 "atmega32u2",
    104                 "atmega16u4",
    105                 "atmega32u4",
    106                 "at90usb162",
    107                 "at90usb646",
    108                 "at90usb647",
    109                 "at90usb1286",
    110                 "at90usb1287",
    111                 "atmega32a",
    112                 "atmega328p",
    113                 "atmega328",
    114                 "attiny85",
    115                 "unknown"
    116             ]
    117         },
    118         "apa102": {
    119             "type": "object",
    120             "additionalProperties": false,
    121             "properties": {
    122                 "data_pin": {"$ref": "./definitions.jsonschema#/mcu_pin"},
    123                 "clock_pin": {"$ref": "./definitions.jsonschema#/mcu_pin"},
    124                 "default_brightness": {
    125                     "type": "integer",
    126                     "minimum": 0,
    127                     "maximum": 31
    128                 }
    129             }
    130         },
    131         "audio": {
    132             "type": "object",
    133             "additionalProperties": false,
    134             "properties": {
    135                 "default": {
    136                     "type": "object",
    137                     "additionalProperties": false,
    138                     "properties": {
    139                         "on": {"type": "boolean"},
    140                         "clicky": {"type": "boolean"}
    141                     }
    142                 },
    143                 "driver": {
    144                     "type": "string",
    145                     "enum": ["dac_additive", "dac_basic", "pwm_software", "pwm_hardware"]
    146                 },
    147                 "macro_beep": {"type": "boolean"},
    148                 "pins": {"$ref": "./definitions.jsonschema#/mcu_pin_array"},
    149                 "power_control": {
    150                     "type": "object",
    151                     "additionalProperties": false,
    152                     "properties": {
    153                         "on_state": {"$ref": "./definitions.jsonschema#/bit"},
    154                         "pin": {"$ref": "./definitions.jsonschema#/mcu_pin"}
    155                     }
    156                 },
    157                 "voices": {"type": "boolean"}
    158             }
    159         },
    160         "backlight": {
    161             "type": "object",
    162             "additionalProperties": false,
    163             "properties": {
    164                 "driver": {
    165                     "type": "string",
    166                     "enum": ["custom", "pwm", "software", "timer"]
    167                 },
    168                 "default": {
    169                     "type": "object",
    170                     "additionalProperties": false,
    171                     "properties": {
    172                         "on": {"type": "boolean"},
    173                         "breathing": {"type": "boolean"},
    174                         "brightness": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}
    175                     }
    176                 },
    177                 "breathing": {"type": "boolean"},
    178                 "breathing_period": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
    179                 "levels": {
    180                     "type": "integer",
    181                     "minimum": 1,
    182                     "maximum": 31
    183                 },
    184                 "max_brightness": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
    185                 "pin": {"$ref": "./definitions.jsonschema#/mcu_pin"},
    186                 "pins": {"$ref": "./definitions.jsonschema#/mcu_pin_array"},
    187                 "on_state": {"$ref": "./definitions.jsonschema#/bit"},
    188                 "as_caps_lock": {"type": "boolean"}
    189             }
    190         },
    191         "battery": {
    192             "type": "object",
    193             "additionalProperties": false,
    194             "properties": {
    195                 "driver": {
    196                     "type": "string",
    197                     "enum": ["adc", "custom", "vendor"]
    198                 },
    199                 "adc": {
    200                     "type": "object",
    201                     "additionalProperties": false,
    202                     "properties": {
    203                         "pin": {"$ref": "./definitions.jsonschema#/mcu_pin"},
    204                         "reference_voltage": {"type": "integer"},
    205                         "divider_r1": {"type": "integer"},
    206                         "divider_r2": {"type": "integer"},
    207                         "resolution": {"type": "integer"}
    208                     }
    209                 },
    210                 "sample_interval": {"type": "integer"}
    211             }
    212         },
    213         "bluetooth": {
    214             "type": "object",
    215             "additionalProperties": false,
    216             "properties": {
    217                 "driver": {
    218                     "type": "string",
    219                     "enum": ["bluefruit_le", "custom", "rn42"]
    220                 }
    221             }
    222         },
    223         "bootmagic":{
    224             "type": "object",
    225             "additionalProperties": false,
    226             "properties": {
    227                 "enabled": {"type": "boolean"},
    228                 "matrix": {
    229                     "type": "array",
    230                     "minItems": 2,
    231                     "maxItems": 2,
    232                     "items": {
    233                         "type": "integer",
    234                         "minimum": 0
    235                     }
    236                 }
    237             }
    238         },
    239         "board": {
    240             "type": "string",
    241             "minLength": 2,
    242             "pattern": "^[a-zA-Z_][0-9a-zA-Z_]*$"
    243         },
    244         "bootloader": {
    245             "type": "string",
    246             "enum": [
    247                 "apm32-dfu",
    248                 "at32-dfu",
    249                 "atmel-dfu",
    250                 "bootloadhid",
    251                 "caterina",
    252                 "custom",
    253                 "gd32v-dfu",
    254                 "halfkay",
    255                 "kiibohd",
    256                 "lufa-dfu",
    257                 "lufa-ms",
    258                 "md-boot",
    259                 "qmk-dfu",
    260                 "qmk-hid",
    261                 "rp2040",
    262                 "stm32-dfu",
    263                 "stm32duino",
    264                 "tinyuf2",
    265                 "uf2boot",
    266                 "unknown",
    267                 "usbasploader",
    268                 "wb32-dfu"
    269             ]
    270         },
    271         "bootloader_instructions": {
    272             "type": "string",
    273             "description": "Instructions for putting the keyboard into a mode that allows for firmware flashing."
    274         },
    275         "build": {
    276             "type": "object",
    277             "additionalProperties": false,
    278             "properties": {
    279                 "debounce_type": {
    280                     "type": "string",
    281                     "enum": ["asym_eager_defer_pk", "custom", "sym_defer_g", "sym_defer_pk", "sym_defer_pr", "sym_eager_pk", "sym_eager_pr"]
    282                 },
    283                 "firmware_format": {
    284                     "type": "string",
    285                     "enum": ["bin", "hex", "uf2"]
    286                 },
    287                 "lto": {"type": "boolean"}
    288             }
    289         },
    290         "diode_direction": {
    291             "type": "string",
    292             "enum": ["COL2ROW", "ROW2COL"]
    293         },
    294         "debounce": {"$ref": "./definitions.jsonschema#/unsigned_int"},
    295         "caps_word": {
    296             "type": "object",
    297             "additionalProperties": false,
    298             "properties": {
    299                 "enabled": {"type": "boolean"},
    300                 "both_shifts_turns_on": {"type": "boolean"},
    301                 "double_tap_shift_turns_on": {"type": "boolean"},
    302                 "idle_timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"},
    303                 "invert_on_shift": {"type": "boolean"}
    304             }
    305         },
    306         "combo": {
    307             "type": "object",
    308             "properties": {
    309                 "count": {"$ref": "./definitions.jsonschema#/unsigned_int"},
    310                 "term": {"$ref": "./definitions.jsonschema#/unsigned_int"}
    311             }
    312         },
    313         "community_layouts": {
    314             "type": "array",
    315             "items": {"$ref": "./definitions.jsonschema#/filename"}
    316         },
    317         "dip_switch": {
    318             "$ref": "#/definitions/dip_switch_config",
    319             "properties": {
    320                 "enabled": {"type": "boolean"},
    321                 "matrix_grid": {
    322                     "type": "array",
    323                     "minItems": 1,
    324                     "items": {
    325                         "type": "array",
    326                         "minItems": 2,
    327                         "maxItems": 2,
    328                         "items": {
    329                             "type": "integer",
    330                             "minimum": 0
    331                         }
    332                     }
    333                 }
    334             }
    335         },
    336         "dynamic_keymap": {
    337             "type": "object",
    338             "properties": {
    339                 "eeprom_max_addr": {"$ref": "./definitions.jsonschema#/unsigned_int"},
    340                 "layer_count": {
    341                     "type": "integer",
    342                     "minimum": 1,
    343                     "maximum": 32
    344                 }
    345             }
    346         },
    347         "eeprom": {
    348             "properties": {
    349                 "driver": {"type": "string"},
    350                 "wear_leveling": {
    351                     "type": "object",
    352                     "additionalProperties": false,
    353                     "properties": {
    354                         "driver": {
    355                             "type": "string",
    356                             "enum": ["none", "custom", "embedded_flash", "legacy", "rp2040_flash", "spi_flash"]
    357                         },
    358                         "backing_size": {"$ref": "./definitions.jsonschema#/unsigned_int"},
    359                         "logical_size": {"$ref": "./definitions.jsonschema#/unsigned_int"}
    360                     }
    361                 }
    362             }
    363         },
    364         "encoder": {
    365             "$ref": "#/definitions/encoder_config",
    366             "properties": {
    367                 "enabled": {"type": "boolean"}
    368             }
    369         },
    370         "features": { "$ref": "#/definitions/features_config" },
    371         "indicators": {
    372             "type": "object",
    373             "properties": {
    374                 "caps_lock": {"$ref": "./definitions.jsonschema#/mcu_pin"},
    375                 "num_lock": {"$ref": "./definitions.jsonschema#/mcu_pin"},
    376                 "scroll_lock": {"$ref": "./definitions.jsonschema#/mcu_pin"},
    377                 "compose": {"$ref": "./definitions.jsonschema#/mcu_pin"},
    378                 "kana": {"$ref": "./definitions.jsonschema#/mcu_pin"},
    379                 "on_state": {"$ref": "./definitions.jsonschema#/bit"}
    380             }
    381         },
    382         "joystick": {
    383             "type": "object",
    384             "properties": {
    385                 "enabled": {"type": "boolean"},
    386                 "driver": {"type": "string"},
    387                 "button_count": {"$ref": "./definitions.jsonschema#/unsigned_int"},
    388                 "axis_resolution": {"$ref": "./definitions.jsonschema#/unsigned_int"},
    389                 "axes": {
    390                     "type": "object",
    391                     "propertyNames": {"enum": ["x", "y", "z", "rx", "ry", "rz"]},
    392                     "additionalProperties": {
    393                         "oneOf": [
    394                             {
    395                                 "type": "object",
    396                                 "properties": {
    397                                     "input_pin": {"$ref": "./definitions.jsonschema#/mcu_pin"},
    398                                     "low": {"$ref": "./definitions.jsonschema#/unsigned_int"},
    399                                     "rest": {"$ref": "./definitions.jsonschema#/unsigned_int"},
    400                                     "high": {"$ref": "./definitions.jsonschema#/unsigned_int"}
    401                                 }
    402                             },
    403                             {
    404                                 "type": "string",
    405                                 "enum": ["virtual"]
    406                             }
    407                         ]
    408                     }
    409                 }
    410             }
    411         },
    412         "keycodes": {"$ref": "./definitions.jsonschema#/keycode_decl_array"},
    413         "layer_lock": {
    414             "type": "object",
    415             "properties": {
    416                 "timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"}
    417             }
    418         },
    419         "layout_aliases": {
    420             "type": "object",
    421             "additionalProperties": {"$ref": "./definitions.jsonschema#/layout_macro"}
    422         },
    423         "layouts": {
    424             "type": "object",
    425             "propertyNames": {"$ref": "./definitions.jsonschema#/layout_macro"},
    426             "additionalProperties": {
    427                 "type": "object",
    428                 "additionalProperties": false,
    429                 "properties": {
    430                     "filename": {"type": "string"},
    431                     "c_macro": {"type": "boolean"},
    432                     "json_layout": {"type": "boolean"},
    433                     "layout": {
    434                         "type": "array",
    435                         "items": {
    436                             "type": "object",
    437                             "additionalProperties": false,
    438                             "required": ["x", "y"],
    439                             "properties": {
    440                                 "encoder": {"$ref": "./definitions.jsonschema#/unsigned_int"},
    441                                 "label": {
    442                                     "type": "string",
    443                                     "pattern": "^[^\\n]*$"
    444                                 },
    445                                 "matrix": {
    446                                     "type": "array",
    447                                     "minItems": 2,
    448                                     "maxItems": 2,
    449                                     "items": {
    450                                         "type": "integer",
    451                                         "minimum": 0
    452                                     }
    453                                 },
    454                                 "r": {"$ref": "./definitions.jsonschema#/signed_decimal"},
    455                                 "rx": {"$ref": "./definitions.jsonschema#/unsigned_decimal"},
    456                                 "ry": {"$ref": "./definitions.jsonschema#/unsigned_decimal"},
    457                                 "h": {"$ref": "./definitions.jsonschema#/key_unit"},
    458                                 "w": {"$ref": "./definitions.jsonschema#/key_unit"},
    459                                 "x": {"$ref": "./definitions.jsonschema#/key_unit"},
    460                                 "y": {"$ref": "./definitions.jsonschema#/key_unit"},
    461                                 "hand": {
    462                                     "type": "string",
    463                                     "enum": ["L", "R", "*"]
    464                                 }
    465                             }
    466                         }
    467                     }
    468                 }
    469             }
    470         },
    471         "haptic": {
    472             "type": "object",
    473             "properties": {
    474                 "driver": {
    475                     "type": "string",
    476                     "enum": ["drv2605l", "solenoid"]
    477                 }
    478             }
    479         },
    480         "host": {
    481             "type": "object",
    482             "properties": {
    483                 "default": {
    484                     "type": "object",
    485                     "additionalProperties": false,
    486                     "properties": {
    487                         "nkro": {"type": "boolean"}
    488                     }
    489                 }
    490             }
    491         },
    492         "leader_key": {
    493             "type": "object",
    494             "properties": {
    495                 "timing": {"type": "boolean"},
    496                 "strict_processing": {"type": "boolean"},
    497                 "timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"}
    498             }
    499         },
    500         "matrix_pins": {
    501             "type": "object",
    502             "additionalProperties": false,
    503             "properties": {
    504                 "custom": {"type": "boolean"},
    505                 "custom_lite": {"type": "boolean"},
    506                 "ghost": {"type": "boolean"},
    507                 "input_pressed_state": {"$ref": "./definitions.jsonschema#/unsigned_int"},
    508                 "io_delay": {"$ref": "./definitions.jsonschema#/unsigned_int"},
    509                 "masked": {"type": "boolean"},
    510                 "direct": {
    511                     "type": "array",
    512                     "items": {"$ref": "./definitions.jsonschema#/mcu_pin_array"}
    513                 },
    514                 "cols": {"$ref": "./definitions.jsonschema#/mcu_pin_array"},
    515                 "rows": {"$ref": "./definitions.jsonschema#/mcu_pin_array"}
    516             }
    517         },
    518         "modules": {
    519             "type": "array",
    520             "items": {
    521                 "type": "string"
    522             }
    523         },
    524         "mouse_key": {
    525             "type": "object",
    526             "properties": {
    527                 "enabled": {"type": "boolean"},
    528                 "delay": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
    529                 "interval": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
    530                 "max_speed": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
    531                 "time_to_max": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
    532                 "wheel_delay": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}
    533             }
    534         },
    535         "oneshot": {
    536             "type": "object",
    537             "properties": {
    538                 "tap_toggle": {"$ref": "./definitions.jsonschema#/unsigned_int"},
    539                 "timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"}
    540             }
    541         },
    542         "led_matrix": {
    543             "type": "object",
    544             "properties": {
    545                 "animations": {
    546                     "type": "object",
    547                     "propertyNames": {"$ref": "./definitions.jsonschema#/snake_case"},
    548                     "additionalProperties": {"type": "boolean"}
    549                 },
    550                 "default": {
    551                     "type": "object",
    552                     "additionalProperties": false,
    553                     "properties": {
    554                         "on": {"type": "boolean"},
    555                         "animation": {"type": "string"},
    556                         "val": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
    557                         "speed": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
    558                         "flags": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}
    559                     }
    560                 },
    561                 "driver": {
    562                     "type": "string",
    563                     "enum": [
    564                         "custom",
    565                         "is31fl3218",
    566                         "is31fl3236",
    567                         "is31fl3729",
    568                         "is31fl3731",
    569                         "is31fl3733",
    570                         "is31fl3736",
    571                         "is31fl3737",
    572                         "is31fl3741",
    573                         "is31fl3742a",
    574                         "is31fl3743a",
    575                         "is31fl3745",
    576                         "is31fl3746a",
    577                         "snled27351"
    578                     ]
    579                 },
    580                 "center_point": {
    581                     "type": "array",
    582                     "minItems": 2,
    583                     "maxItems": 2,
    584                     "items": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}
    585                 },
    586                 "flag_steps": {
    587                     "type": "array",
    588                     "minItems": 1,
    589                     "items": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}
    590                 },
    591                 "max_brightness": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
    592                 "timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"},
    593                 "val_steps": {"$ref": "./definitions.jsonschema#/unsigned_int"},
    594                 "speed_steps": {"$ref": "./definitions.jsonschema#/unsigned_int"},
    595                 "led_flush_limit": {"$ref": "./definitions.jsonschema#/unsigned_int"},
    596                 "led_process_limit": {"$ref": "./definitions.jsonschema#/unsigned_int"},
    597                 "react_on_keyup": {"type": "boolean"},
    598                 "sleep": {"type": "boolean"},
    599                 "split_count": {
    600                     "type": "array",
    601                     "minItems": 2,
    602                     "maxItems": 2,
    603                     "items": {"$ref": "./definitions.jsonschema#/unsigned_int"}
    604                 },
    605                 "layout": {
    606                     "type": "array",
    607                     "items": {
    608                         "type": "object",
    609                         "additionalProperties": false,
    610                         "required": ["x", "y"],
    611                         "properties": {
    612                             "matrix": {
    613                                 "type": "array",
    614                                 "minItems": 2,
    615                                 "maxItems": 2,
    616                                 "items": {
    617                                     "type": "integer",
    618                                     "minimum": 0
    619                                 }
    620                             },
    621                             "x": {"$ref": "./definitions.jsonschema#/unsigned_int"},
    622                             "y": {"$ref": "./definitions.jsonschema#/unsigned_int"},
    623                             "flags": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}
    624                         }
    625                     }
    626                 }
    627             }
    628         },
    629         "rgb_matrix": {
    630             "type": "object",
    631             "properties": {
    632                 "animations": {
    633                     "type": "object",
    634                     "propertyNames": {"$ref": "./definitions.jsonschema#/snake_case"},
    635                     "additionalProperties": {"type": "boolean"}
    636                 },
    637                 "default": {
    638                     "type": "object",
    639                     "additionalProperties": false,
    640                     "properties": {
    641                         "on": {"type": "boolean"},
    642                         "animation": {"type": "string"},
    643                         "hue": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
    644                         "sat": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
    645                         "val": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
    646                         "speed": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
    647                         "flags": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}
    648                     }
    649                 },
    650                 "driver": {
    651                     "type": "string",
    652                     "enum": [
    653                         "aw20216s",
    654                         "custom",
    655                         "is31fl3218",
    656                         "is31fl3236",
    657                         "is31fl3729",
    658                         "is31fl3731",
    659                         "is31fl3733",
    660                         "is31fl3736",
    661                         "is31fl3737",
    662                         "is31fl3741",
    663                         "is31fl3742a",
    664                         "is31fl3743a",
    665                         "is31fl3745",
    666                         "is31fl3746a",
    667                         "snled27351",
    668                         "ws2812"
    669                     ]
    670                 },
    671                 "center_point": {
    672                     "type": "array",
    673                     "minItems": 2,
    674                     "maxItems": 2,
    675                     "items": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}
    676                 },
    677                 "flag_steps": {
    678                     "type": "array",
    679                     "minItems": 1,
    680                     "items": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}
    681                 },
    682                 "max_brightness": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
    683                 "timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"},
    684                 "hue_steps": {"$ref": "./definitions.jsonschema#/unsigned_int"},
    685                 "sat_steps": {"$ref": "./definitions.jsonschema#/unsigned_int"},
    686                 "val_steps": {"$ref": "./definitions.jsonschema#/unsigned_int"},
    687                 "speed_steps": {"$ref": "./definitions.jsonschema#/unsigned_int"},
    688                 "led_flush_limit": {"$ref": "./definitions.jsonschema#/unsigned_int"},
    689                 "led_process_limit": {"$ref": "./definitions.jsonschema#/unsigned_int"},
    690                 "react_on_keyup": {"type": "boolean"},
    691                 "sleep": {"type": "boolean"},
    692                 "split_count": {
    693                     "type": "array",
    694                     "minItems": 2,
    695                     "maxItems": 2,
    696                     "items": {"$ref": "./definitions.jsonschema#/unsigned_int"}
    697                 },
    698                 "layout": {
    699                     "type": "array",
    700                     "items": {
    701                         "type": "object",
    702                         "additionalProperties": false,
    703                         "required": ["x", "y"],
    704                         "properties": {
    705                             "matrix": {
    706                                 "type": "array",
    707                                 "minItems": 2,
    708                                 "maxItems": 2,
    709                                 "items": {
    710                                     "type": "integer",
    711                                     "minimum": 0
    712                                 }
    713                             },
    714                             "x": {"$ref": "./definitions.jsonschema#/unsigned_int"},
    715                             "y": {"$ref": "./definitions.jsonschema#/unsigned_int"},
    716                             "flags": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}
    717                         }
    718                     }
    719                 }
    720             }
    721         },
    722         "rgblight": {
    723             "type": "object",
    724             "additionalProperties": false,
    725             "properties": {
    726                 "animations": {
    727                     "type": "object",
    728                     "propertyNames": {"$ref": "./definitions.jsonschema#/snake_case"},
    729                     "additionalProperties": {"type": "boolean"}
    730                 },
    731                 "brightness_steps": {"$ref": "./definitions.jsonschema#/unsigned_int"},
    732                 "default": {
    733                     "type": "object",
    734                     "additionalProperties": false,
    735                     "properties": {
    736                         "on": {"type": "boolean"},
    737                         "animation": {"type": "string"},
    738                         "hue": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
    739                         "sat": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
    740                         "val": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
    741                         "speed": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}
    742                     }
    743                 },
    744                 "driver": {
    745                     "type": "string",
    746                     "enum": ["apa102", "custom", "ws2812"]
    747                 },
    748                 "hue_steps": {"$ref": "./definitions.jsonschema#/unsigned_int"},
    749                 "layers": {
    750                     "type": "object",
    751                     "additionalProperties": false,
    752                     "properties": {
    753                         "blink": {"type": "boolean"},
    754                         "enabled": {"type": "boolean"},
    755                         "max": {
    756                             "type": "integer",
    757                             "minimum": 1,
    758                             "maximum": 32
    759                         },
    760                         "override_rgb": {"type": "boolean"}
    761                     }
    762                 },
    763                 "led_count": {"$ref": "./definitions.jsonschema#/unsigned_int"},
    764                 "led_map": {
    765                     "type": "array",
    766                     "minItems": 2,
    767                     "items": {"$ref": "./definitions.jsonschema#/unsigned_int"}
    768                 },
    769                 "max_brightness": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
    770                 "pin": {
    771                     "$ref": "./definitions.jsonschema#/mcu_pin",
    772                     "$comment": "Deprecated: use ws2812.pin instead"
    773                 },
    774                 "rgbw": {
    775                     "type": "boolean",
    776                     "$comment": "Deprecated: use ws2812.rgbw instead"
    777                 },
    778                 "saturation_steps": {"$ref": "./definitions.jsonschema#/unsigned_int"},
    779                 "sleep": {"type": "boolean"},
    780                 "split": {"type": "boolean"},
    781                 "split_count": {
    782                     "type": "array",
    783                     "minItems": 2,
    784                     "maxItems": 2,
    785                     "items": {"$ref": "./definitions.jsonschema#/unsigned_int"}
    786                 }
    787             }
    788         },
    789         "secure": {
    790             "type": "object",
    791             "additionalProperties": false,
    792             "properties": {
    793                 "enabled": {"type": "boolean"},
    794                 "unlock_timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"},
    795                 "idle_timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"},
    796                 "unlock_sequence": {
    797                     "type": "array",
    798                     "minItems": 1,
    799                     "maxItems": 5,
    800                     "items": {
    801                         "type": "array",
    802                         "minItems": 2,
    803                         "maxItems": 2,
    804                         "items": {
    805                             "type": "integer",
    806                             "minimum": 0
    807                         }
    808                     }
    809                 }
    810             }
    811         },
    812         "stenography": {
    813             "type": "object",
    814             "additionalProperties": false,
    815             "properties": {
    816                 "enabled": {"type": "boolean"},
    817                 "protocol": {
    818                     "type": "string",
    819                     "enum": ["all", "geminipr", "txbolt"]
    820                 }
    821             }
    822         },
    823         "ps2": {
    824             "type": "object",
    825             "additionalProperties": false,
    826             "properties": {
    827                 "enabled": {"type": "boolean"},
    828                 "mouse_enabled": {"type": "boolean"},
    829                 "clock_pin": {"$ref": "./definitions.jsonschema#/mcu_pin"},
    830                 "data_pin": {"$ref": "./definitions.jsonschema#/mcu_pin"},
    831                 "driver": {
    832                     "type": "string",
    833                     "enum": ["busywait", "interrupt", "usart", "vendor"]
    834                 }
    835             }
    836         },
    837         "split": {
    838             "type": "object",
    839             "additionalProperties": false,
    840             "properties": {
    841                 "enabled": {"type": "boolean"},
    842                 "bootmagic":{
    843                     "type": "object",
    844                     "additionalProperties": false,
    845                     "properties": {
    846                         "matrix": {
    847                             "type": "array",
    848                             "minItems": 2,
    849                             "maxItems": 2,
    850                             "items": {
    851                                 "type": "integer",
    852                                 "minimum": 0
    853                             }
    854                         }
    855                     }
    856                 },
    857                 "matrix_pins": {
    858                     "type": "object",
    859                     "additionalProperties": false,
    860                     "properties": {
    861                         "right": {
    862                             "type": "object",
    863                             "additionalProperties": false,
    864                             "properties": {
    865                                 "direct": {
    866                                     "type": "array",
    867                                     "items": {"$ref": "./definitions.jsonschema#/mcu_pin_array"}
    868                                 },
    869                                 "cols": {"$ref": "./definitions.jsonschema#/mcu_pin_array"},
    870                                 "rows": {"$ref": "./definitions.jsonschema#/mcu_pin_array"},
    871                                 "unused": {"$ref": "./definitions.jsonschema#/mcu_pin_array"}
    872                             }
    873                         }
    874                     }
    875                 },
    876                 "dip_switch": {
    877                     "type": "object",
    878                     "additionalProperties": false,
    879                     "properties": {
    880                         "right": {
    881                             "$ref": "#/definitions/dip_switch_config"
    882                         }
    883                     }
    884                 },
    885                 "encoder": {
    886                     "type": "object",
    887                     "additionalProperties": false,
    888                     "properties": {
    889                         "right": {
    890                             "$ref": "#/definitions/encoder_config"
    891                         }
    892                     }
    893                 },
    894                 "handedness": {
    895                     "type": "object",
    896                     "additionalProperties": false,
    897                     "properties": {
    898                         "pin": {"$ref": "./definitions.jsonschema#/mcu_pin"},
    899                         "matrix_grid": {
    900                             "$ref": "./definitions.jsonschema#/mcu_pin_array",
    901                             "minItems": 2,
    902                             "maxItems": 2
    903                         }
    904                     }
    905                 },
    906                 "soft_serial_pin": {
    907                     "$ref": "./definitions.jsonschema#/mcu_pin",
    908                     "$comment": "Deprecated: use split.serial.pin instead"
    909                 },
    910                 "soft_serial_speed": {
    911                     "type": "integer",
    912                     "$comment": "Deprecated: use split.serial.speed instead"
    913                 },
    914                 "serial": {
    915                     "type": "object",
    916                     "additionalProperties": false,
    917                     "properties": {
    918                         "driver": {
    919                             "type": "string",
    920                             "enum": ["bitbang", "usart", "vendor"]
    921                         },
    922                         "pin": {"$ref": "./definitions.jsonschema#/mcu_pin"},
    923                         "speed": {
    924                             "type": "integer",
    925                             "minimum": 0,
    926                             "maximum": 5
    927                         }
    928                     }
    929                 },
    930                 "transport": {
    931                     "type": "object",
    932                     "additionalProperties": false,
    933                     "properties": {
    934                         "protocol": {
    935                             "type": "string",
    936                             "enum": ["custom", "i2c", "serial"]
    937                         },
    938                         "sync": {
    939                             "type": "object",
    940                             "additionalProperties": false,
    941                             "properties": {
    942                                 "activity": {"type": "boolean"},
    943                                 "detected_os": {"type": "boolean"},
    944                                 "haptic": {"type": "boolean"},
    945                                 "layer_state": {"type": "boolean"},
    946                                 "indicators": {"type": "boolean"},
    947                                 "matrix_state": {"type": "boolean"},
    948                                 "modifiers": {"type": "boolean"},
    949                                 "oled": {"type": "boolean"},
    950                                 "st7565": {"type": "boolean"},
    951                                 "wpm": {"type": "boolean"}
    952                             }
    953                         },
    954                         "watchdog": {"type": "boolean"},
    955                         "watchdog_timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"},
    956                         "sync_matrix_state": {
    957                             "type": "boolean",
    958                             "$comment": "Deprecated: use sync.matrix_state instead"
    959                         },
    960                         "sync_modifiers": {
    961                             "type": "boolean",
    962                             "$comment": "Deprecated: use sync.modifiers instead"
    963                         }
    964                     }
    965                 },
    966                 "usb_detect": {
    967                     "type": "object",
    968                     "additionalProperties": false,
    969                     "properties": {
    970                         "enabled": {"type": "boolean"},
    971                         "polling_interval": {"$ref": "./definitions.jsonschema#/unsigned_int"},
    972                         "timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"}
    973                     }
    974                 },
    975                 "main": {
    976                     "type": "string",
    977                     "enum": ["eeprom", "left", "matrix_grid", "pin", "right"],
    978                     "$comment": "Deprecated: use config.h options for now"
    979                 },
    980                 "matrix_grid": {
    981                     "type": "array",
    982                     "items": {"$ref": "./definitions.jsonschema#/mcu_pin"},
    983                     "$comment": "Deprecated: use split.handedness.matrix_grid instead"
    984                 }
    985             }
    986         },
    987         "tags": {
    988             "type": "array",
    989             "items": {"type": "string"}
    990         },
    991         "tapping": {
    992             "type": "object",
    993             "properties": {
    994                 "chordal_hold": {"type": "boolean"},
    995                 "force_hold": {"type": "boolean"},
    996                 "force_hold_per_key": {"type": "boolean"},
    997                 "ignore_mod_tap_interrupt": {"type": "boolean"},
    998                 "hold_on_other_key_press": {"type": "boolean"},
    999                 "hold_on_other_key_press_per_key": {"type": "boolean"},
   1000                 "permissive_hold": {"type": "boolean"},
   1001                 "permissive_hold_per_key": {"type": "boolean"},
   1002                 "retro": {"type": "boolean"},
   1003                 "retro_per_key": {"type": "boolean"},
   1004                 "term": {"$ref": "./definitions.jsonschema#/unsigned_int"},
   1005                 "term_per_key": {"type": "boolean"},
   1006                 "toggle": {"$ref": "./definitions.jsonschema#/unsigned_int"}
   1007             }
   1008         },
   1009         "usb": {
   1010             "type": "object",
   1011             "additionalProperties": false,
   1012             "properties": {
   1013                 "device_ver": {
   1014                     "$ref": "./definitions.jsonschema#/hex_number_4d",
   1015                     "$comment": "Deprecated: use device_version instead"
   1016                 },
   1017                 "device_version": {"$ref": "./definitions.jsonschema#/bcd_version"},
   1018                 "force_nkro": {
   1019                     "type": "boolean",
   1020                     "$comment": "Deprecated: use host.default.nkro instead"
   1021 
   1022                 },
   1023                 "pid": {"$ref": "./definitions.jsonschema#/hex_number_4d"},
   1024                 "vid": {"$ref": "./definitions.jsonschema#/hex_number_4d"},
   1025                 "max_power": {"$ref": "./definitions.jsonschema#/unsigned_int"},
   1026                 "no_startup_check": {"type": "boolean"},
   1027                 "polling_interval": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
   1028                 "shared_endpoint": {
   1029                     "type": "object",
   1030                     "additionalProperties": false,
   1031                     "properties": {
   1032                         "keyboard": {"type": "boolean"},
   1033                         "mouse": {"type": "boolean"}
   1034                     }
   1035                 },
   1036                 "suspend_wakeup_delay": {"$ref": "./definitions.jsonschema#/unsigned_int"},
   1037                 "wait_for_enumeration": {"type": "boolean"}
   1038             }
   1039         },
   1040         "qmk": {
   1041             "type": "object",
   1042             "additionalProperties": false,
   1043             "properties": {
   1044                 "keys_per_scan": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
   1045                 "tap_keycode_delay": {"$ref": "./definitions.jsonschema#/unsigned_int"},
   1046                 "tap_capslock_delay": {"$ref": "./definitions.jsonschema#/unsigned_int"},
   1047                 "locking": {
   1048                     "type": "object",
   1049                     "additionalProperties": false,
   1050                     "properties": {
   1051                         "enabled": {"type": "boolean"},
   1052                         "resync": {"type": "boolean"}
   1053                     }
   1054                 }
   1055             }
   1056         },
   1057         "qmk_lufa_bootloader": {
   1058             "type": "object",
   1059             "additionalProperties": false,
   1060             "properties": {
   1061                 "esc_output": {"$ref": "./definitions.jsonschema#/mcu_pin"},
   1062                 "esc_input": {"$ref": "./definitions.jsonschema#/mcu_pin"},
   1063                 "led": {"$ref": "./definitions.jsonschema#/mcu_pin"},
   1064                 "speaker": {"$ref": "./definitions.jsonschema#/mcu_pin"}
   1065             }
   1066         },
   1067         "ws2812": {
   1068             "type": "object",
   1069             "additionalProperties": false,
   1070             "properties": {
   1071                 "driver": {
   1072                     "type": "string",
   1073                     "enum": ["bitbang", "custom", "i2c", "pwm", "spi", "vendor"]
   1074                 },
   1075                 "pin": {"$ref": "./definitions.jsonschema#/mcu_pin"},
   1076                 "rgbw": {"type": "boolean"},
   1077                 "i2c_address": {"$ref": "./definitions.jsonschema#/hex_number_2d"},
   1078                 "i2c_timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"}
   1079             }
   1080         }
   1081     }
   1082 }