logo

qmk_firmware

custom branch of QMK firmware git clone https://anongit.hacktivis.me/git/qmk_firmware.git

keyboard.jsonschema (42343B)


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