keyboard.jsonschema 35 KB

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