keyboard.jsonschema 44 KB

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