mirror of
https://github.com/qmk/qmk_firmware.git
synced 2026-06-21 06:44:27 -04:00
Compare commits
779 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| fd624d016b | |||
| 6741f9dc26 | |||
| f8910d3a60 | |||
| c638100030 | |||
| 1d2f52e407 | |||
| 746eff22db | |||
| d36397fdd4 | |||
| 8522bb342d | |||
| 721affff7b | |||
| 4f6c5d2745 | |||
| 92dc82ae08 | |||
| b64014d5df | |||
| 0d401d1182 | |||
| 6ada0933db | |||
| 85886db43b | |||
| 0515002e7d | |||
| d8c8872753 | |||
| 7f702d2262 | |||
| 520b726b5c | |||
| 6a0e2a8868 | |||
| 4dc0a6e9e3 | |||
| 90082403de | |||
| 7b30455a93 | |||
| cffafbbdc7 | |||
| 1ef87578e2 | |||
| 55be8f2c2b | |||
| f34bc9a6bc | |||
| df94ffcc66 | |||
| 486f01f513 | |||
| ee74da3a4d | |||
| c53dd0fbb6 | |||
| 480d808683 | |||
| 11abc31420 | |||
| 62a8db33a3 | |||
| f0c79ee455 | |||
| 6b54261fa5 | |||
| 58d4decf48 | |||
| a9efff322c | |||
| 7b51d7e665 | |||
| 613d63aa66 | |||
| 5b630f7a08 | |||
| 286bc43459 | |||
| 2ea1a0192f | |||
| 25f641f2ff | |||
| 1620390d67 | |||
| 781b8ff406 | |||
| 05c4322c65 | |||
| 462556f4de | |||
| d19204824d | |||
| 2fa6ed6631 | |||
| c20d0a83b5 | |||
| 719b03f9c1 | |||
| 3c338996f0 | |||
| 06c24a811e | |||
| e56d518fc9 | |||
| 3a8ea37a13 | |||
| fdcf53854a | |||
| f8aec1f50c | |||
| 47fd58e63e | |||
| 2604a49cda | |||
| e3b26fa6ba | |||
| c701efbb53 | |||
| 88cf7d87ec | |||
| d9bf44c7a9 | |||
| f31df2ed6b | |||
| e4bf68ca94 | |||
| 393d3a5b21 | |||
| 5e3985024d | |||
| 459542a255 | |||
| 12e5b7db97 | |||
| 9879063f8c | |||
| 316fc06d8c | |||
| 4d25dfae32 | |||
| a033e172b9 | |||
| e9ee03983e | |||
| a187ebeec6 | |||
| e173b4020d | |||
| ffe57097eb | |||
| 6ee28ac86f | |||
| a3caec1580 | |||
| 99a67d1172 | |||
| 08d91c3d4e | |||
| 7e9c4508c8 | |||
| 9d47119457 | |||
| 4b19065f7b | |||
| ed0d5fde7b | |||
| cf2dcd6e24 | |||
| 62d25f02a4 | |||
| 0269eea2c9 | |||
| 078ec10e42 | |||
| 1836382f66 | |||
| 0efd817f42 | |||
| ce4f342ceb | |||
| 2b88b7b20a | |||
| 1a56fbece2 | |||
| a498daf627 | |||
| 5db9f2fb41 | |||
| c9f942e43c | |||
| 8d8cd1ca61 | |||
| f0622da7a8 | |||
| 504533b3b4 | |||
| c5391ca2d6 | |||
| ba9642c83d | |||
| 4a962d7679 | |||
| c2f7a5b5c5 | |||
| e2c7d621a1 | |||
| 0c5e36d056 | |||
| 7d40a3328f | |||
| 21c193f77b | |||
| 1182760a7c | |||
| 60638d3043 | |||
| ccc6c6ce0b | |||
| cc291cff7f | |||
| 70694abdfe | |||
| 1daa191e09 | |||
| 2ddd7c0667 | |||
| 2dc7d991b1 | |||
| c93ef27143 | |||
| 3a7e4d933e | |||
| 15e8658e81 | |||
| 710e041c39 | |||
| c6475e0476 | |||
| d99f3acd8c | |||
| 3001d81e3d | |||
| 84cd973c49 | |||
| 407e6e242e | |||
| 2c98f3782a | |||
| 18ed7c6caf | |||
| cbb8d156b0 | |||
| 92c0e2cee1 | |||
| ded30bb42e | |||
| 6a11370434 | |||
| dd74b2326f | |||
| fbb0acdaa0 | |||
| a34c3b915e | |||
| 2bd8e43256 | |||
| 915edc3a3f | |||
| 933cb8cc35 | |||
| 50a411c95e | |||
| 1426eedfc1 | |||
| 7b4565a409 | |||
| e4b998ccb0 | |||
| 4dd01f4331 | |||
| b5af7a3390 | |||
| 593cd168c6 | |||
| c31ebfeb0a | |||
| ed80e21858 | |||
| 6f4a45e392 | |||
| 53e1f9e0bd | |||
| 9d24bc8a33 | |||
| 534f59a169 | |||
| 7382c0a6f2 | |||
| 43a27da296 | |||
| 3d0ccbb1d5 | |||
| a20facf8ec | |||
| c7fde3d8cc | |||
| 941b63c9a9 | |||
| 0fdb5df94d | |||
| d340f3396f | |||
| bd500ae092 | |||
| 12f92db5d9 | |||
| fec01edaa4 | |||
| 9da27a3dcf | |||
| 7619e991cf | |||
| a3529e1c25 | |||
| 627ad33233 | |||
| 1f96f890fa | |||
| 1a3728db21 | |||
| 2cbcd76ef0 | |||
| 322e673bcb | |||
| c27e3aee19 | |||
| 4be8880177 | |||
| 86fbc9efe0 | |||
| c0bbf2f0f9 | |||
| f63d01d786 | |||
| 709628dfb2 | |||
| f01698b3f8 | |||
| 53c0e30e96 | |||
| 2afc217124 | |||
| e4de46b3b0 | |||
| b6ff72cb03 | |||
| cd78765edc | |||
| 71b6b46534 | |||
| e5faeea94d | |||
| 263d56ce7e | |||
| 7ec819eb22 | |||
| f7a77c8b70 | |||
| 53953f4229 | |||
| 7785e87029 | |||
| 4b3b32e173 | |||
| afb5335bf3 | |||
| e83672fdc4 | |||
| af6b953b2c | |||
| 9fd72b352b | |||
| 59e1a0d437 | |||
| 7fe0c9c746 | |||
| 311e915d96 | |||
| 5629ecf5ff | |||
| e2f62925d9 | |||
| 01e30d407c | |||
| d87e72a9b3 | |||
| acdc8a1374 | |||
| d73c91f19b | |||
| dfb6158c62 | |||
| 40e81ad893 | |||
| a1a2e3a390 | |||
| 3dcdf41d1c | |||
| 6d7589e249 | |||
| d55d65b77f | |||
| a56496640e | |||
| 032c2aa974 | |||
| 1874bc94e2 | |||
| 9e8199c411 | |||
| 4733a2df16 | |||
| 2d46c96732 | |||
| 3b99406d50 | |||
| 7bea08cb12 | |||
| 5591a68b65 | |||
| a0166fef43 | |||
| e52319b751 | |||
| cde41cf611 | |||
| 878fafeeb8 | |||
| 1ba0300da7 | |||
| f8daa3cc40 | |||
| bef076f23e | |||
| 3ac6f603a8 | |||
| 63a3fc3591 | |||
| 036c6100bd | |||
| 403211f7f8 | |||
| 888d42d64c | |||
| 6b2a2ab7ac | |||
| edd2e3d354 | |||
| 6b423c98e5 | |||
| 36cdac8fd3 | |||
| 59cc10451b | |||
| 031277c6d3 | |||
| 45ccd2e935 | |||
| 4f7a7873c8 | |||
| 5ad6d44e18 | |||
| fac1210609 | |||
| a170e6f191 | |||
| db4d8823d6 | |||
| 9aec0e2c9f | |||
| 08a064c56d | |||
| b01ed7d34f | |||
| 85d4736930 | |||
| a7f524f264 | |||
| 98f05c0136 | |||
| 5dd5d4dd60 | |||
| cf4e526063 | |||
| 8a6c081c4a | |||
| 005b778164 | |||
| b6d46cdc47 | |||
| efafbacb49 | |||
| 6729379041 | |||
| 02b49f2949 | |||
| 38815db760 | |||
| b00bdd0354 | |||
| 863b308519 | |||
| b2b8e54b23 | |||
| 127c664647 | |||
| 87a4c6ab25 | |||
| c72581474e | |||
| 7d66c11f37 | |||
| adbd077b15 | |||
| e5d1cf0105 | |||
| e391793f73 | |||
| bfc1b2b1cf | |||
| 70c36c6c97 | |||
| fb27ce6bb2 | |||
| fe1c3fc835 | |||
| f8d65460c2 | |||
| 4ba8da2ebb | |||
| 56a2e332e1 | |||
| df93bfb750 | |||
| 2b6ed67db4 | |||
| e31384babf | |||
| 536a0a78b4 | |||
| a0b15d08bc | |||
| e1c41f1b08 | |||
| f749cf9940 | |||
| 3d591a2000 | |||
| 259320ca27 | |||
| 85b79cc578 | |||
| 1e683923e1 | |||
| 743c8a229f | |||
| 3194862502 | |||
| c5795dd8d7 | |||
| 8c035c2116 | |||
| e159fbefc5 | |||
| 91a9f9e492 | |||
| 3dc83cd244 | |||
| ddeaa26fef | |||
| 1051fae08d | |||
| f3a16ef21d | |||
| 0d08ebb70a | |||
| 99b5b9ab7f | |||
| 389ec6df82 | |||
| 6a5610a8be | |||
| 4f451a76f2 | |||
| acbeec29da | |||
| e05516d817 | |||
| 7e35cdda8a | |||
| ae05baf08b | |||
| c1161a7a32 | |||
| f82d4d8680 | |||
| d420bcad33 | |||
| dba60e2e65 | |||
| 7f9c8429e4 | |||
| c68281b353 | |||
| 41c2a7b070 | |||
| bc8218371e | |||
| 84d44e6188 | |||
| 27c2960320 | |||
| 54e8fad959 | |||
| 42a7969d4a | |||
| 2c847b0350 | |||
| 13f3f189b4 | |||
| e1c869b8da | |||
| 63a1d506a0 | |||
| 9e0118172f | |||
| ca8105eac0 | |||
| 4f9582da26 | |||
| f39fc08338 | |||
| 2e68ddc826 | |||
| 1be7cde61f | |||
| c1fedab457 | |||
| 6585a244fb | |||
| 2929448605 | |||
| e37a611977 | |||
| b39661de96 | |||
| a5d7e04c66 | |||
| ff75bce86a | |||
| 6faca4d663 | |||
| 34c2e99fb3 | |||
| 0881e0867b | |||
| 064d8e9b62 | |||
| e6e66a9f2e | |||
| e2d19eda57 | |||
| 10faca0b85 | |||
| c1b8b3dc6a | |||
| 89cf023d89 | |||
| 73a6496516 | |||
| b68cc43094 | |||
| c8f6e6a936 | |||
| 2b61ca078d | |||
| d3d025c337 | |||
| a86322e4a7 | |||
| 505e5c7033 | |||
| d7c7421784 | |||
| b08704f078 | |||
| 107812ceef | |||
| 1f4110d742 | |||
| de8f05b4c3 | |||
| 57b284dfa9 | |||
| 5b94990c5a | |||
| debba50c33 | |||
| 08e5fcfdf4 | |||
| 511f1ed9de | |||
| a71a34eb52 | |||
| 1322922c42 | |||
| 16dde871d7 | |||
| 655883a965 | |||
| d39015a401 | |||
| a201bf9398 | |||
| bf0b88c423 | |||
| c2eeeba2e9 | |||
| d4f04fe850 | |||
| a4320e4890 | |||
| b315b707e6 | |||
| e10429baae | |||
| 0e6b73c9ff | |||
| d45b967cf2 | |||
| e2bf515df4 | |||
| 2cac8b587f | |||
| d383e93526 | |||
| 83b42ea9dc | |||
| 43bbb5e99a | |||
| ee60542bd6 | |||
| 6ed61c65dd | |||
| b5dfb2bd1e | |||
| ee44cbdedb | |||
| 330a8597f8 | |||
| 9acd127cc1 | |||
| 9c2ca00074 | |||
| 9ab8e4cd5a | |||
| 594558ec7b | |||
| 5e1b1f5023 | |||
| bbccd8f9cc | |||
| cc567c917b | |||
| 1a954e8da5 | |||
| c7e17538ee | |||
| b321789d7b | |||
| 4015c40ba4 | |||
| 53de903fb8 | |||
| fd65390496 | |||
| 28a11ff6f7 | |||
| 1a7f544e0d | |||
| 3e0b22af68 | |||
| 7edb4d2ed8 | |||
| 81cc69c2dd | |||
| 93274019a9 | |||
| 0fde9c9cac | |||
| b708a43730 | |||
| 5bb7476400 | |||
| 8eebc613cf | |||
| a2adc92066 | |||
| 6242c09f7d | |||
| 224ea2eb18 | |||
| eb5703d12e | |||
| 921c0039f4 | |||
| bb2ca21647 | |||
| 1a4af3adf9 | |||
| 99b1dc84da | |||
| 98504424b1 | |||
| 8ec3de0f92 | |||
| c68e4dec10 | |||
| 1ddcf57382 | |||
| e06d79e9c6 | |||
| ed343ddad4 | |||
| 019cba746d | |||
| e7ad19bb95 | |||
| 28eeb92f8e | |||
| efc5d63383 | |||
| 2af9aac61c | |||
| 024c4ef853 | |||
| fb6d7762b9 | |||
| 00eebfb575 | |||
| 6e35013bc2 | |||
| cf05c7d1e4 | |||
| 22b213e191 | |||
| 4b393a1ff5 | |||
| 8522449ccf | |||
| cbeab2ac4f | |||
| 01952bf39a | |||
| 1a991ffd24 | |||
| 01d81b9550 | |||
| a00177d172 | |||
| aa5a6d38de | |||
| b905c246b5 | |||
| a1096e1dec | |||
| 547d75145b | |||
| f1ec600fac | |||
| a9739f7868 | |||
| c67e4c2cae | |||
| 5ba424ca17 | |||
| e7012f4d9e | |||
| a5fb7cfbc9 | |||
| 8c93a33cd3 | |||
| 6aade0ecdc | |||
| 62d87fa446 | |||
| ce43c98b65 | |||
| 8e5550dbb2 | |||
| acd7ad37e6 | |||
| cbd55b7890 | |||
| dadbec4d46 | |||
| f4123acc72 | |||
| cb3149b7f2 | |||
| 64c84e64c7 | |||
| 98e65cf3e1 | |||
| a05306d153 | |||
| 7d0fc5d486 | |||
| 946d651f57 | |||
| 1c1e8d7f7a | |||
| 7ea7930b8c | |||
| d0db38cbdc | |||
| e91938088a | |||
| 1a32aa12e0 | |||
| 81df543086 | |||
| 4f21beb715 | |||
| 18051f1723 | |||
| 969f324de4 | |||
| 3eb8d3bea3 | |||
| 608bcf08fe | |||
| f4068dbfb0 | |||
| 08405df150 | |||
| 3c751f217a | |||
| 97d622651a | |||
| 9f1a7380ab | |||
| 7dca4e8bda | |||
| 0aae222ab6 | |||
| 475cbd24cf | |||
| a8711b2b0a | |||
| 81a3249e2c | |||
| 338a7ed6d5 | |||
| 0550830909 | |||
| 8f86f9794e | |||
| 911232abfc | |||
| 4eee8c1023 | |||
| e7d861aea7 | |||
| 7e8690eae1 | |||
| 02cf2b56fd | |||
| 5d26dcefa0 | |||
| b9078609b6 | |||
| c7ed9038d7 | |||
| 7a69c714b4 | |||
| fd61083710 | |||
| 074c49ee1c | |||
| 082b69db91 | |||
| 466e0856f5 | |||
| 60cf3c22f7 | |||
| 92ead44cf6 | |||
| 05355bc49d | |||
| 74ac4120db | |||
| 61ecee1585 | |||
| 9a77ad69e6 | |||
| 85fa06c3db | |||
| 187119ed7f | |||
| eae39d37c6 | |||
| fecfc0f7da | |||
| 36fd2437b0 | |||
| bbd6e8ab34 | |||
| 24bc4aef03 | |||
| 7aed244aae | |||
| 532fb2f960 | |||
| 880c0c8ee0 | |||
| 6f93a86e6e | |||
| 0a4c1caf20 | |||
| 883465d9fb | |||
| 115bf771a8 | |||
| a4b112b1ef | |||
| d1b0397d2f | |||
| f31004ebec | |||
| 46231df62d | |||
| b6310b5a15 | |||
| d34cade5ab | |||
| cf58a8733d | |||
| 3320e98ccf | |||
| 319da7bfdb | |||
| 4a4e4aa083 | |||
| 74b0f054c1 | |||
| 6eee1940e8 | |||
| 8f728aa731 | |||
| 626cf94653 | |||
| 45a5a94b96 | |||
| 494a691f4c | |||
| bef5c95675 | |||
| f8d677af88 | |||
| 461a1afe57 | |||
| e5f47fa269 | |||
| d4fb67fd5b | |||
| 05ea735e86 | |||
| 3cd8dd6b25 | |||
| 35e62d236b | |||
| a4d10e9f64 | |||
| 286947b6fa | |||
| f12902eb16 | |||
| 0351b598f9 | |||
| fc55fcff3d | |||
| c113250c4e | |||
| b4bdf3f1d5 | |||
| 633479ced5 | |||
| a91de72246 | |||
| 50edd425f7 | |||
| c4ccbf06e1 | |||
| 514175848e | |||
| 24c05ff1c7 | |||
| 7caef16edd | |||
| 65e1afe0af | |||
| ff8db0449e | |||
| 09ab67c044 | |||
| 7772f47f04 | |||
| 7be4540b46 | |||
| ab61d9cb51 | |||
| f6f627d07f | |||
| 649bbdeaba | |||
| eda39f4356 | |||
| 4fc14c2712 | |||
| c3ba5de928 | |||
| ec515f2164 | |||
| 592ee1b57f | |||
| 1e067bd4dd | |||
| db9b295aa7 | |||
| 3934a7f3c8 | |||
| ed2de21603 | |||
| 04978d490a | |||
| 7186a63172 | |||
| ff1900190c | |||
| 2818085d3f | |||
| d17671cd23 | |||
| 8f22831f01 | |||
| 6c96bb5a5a | |||
| 177ff71d0c | |||
| c1b428bb4e | |||
| 0828fc4b6f | |||
| 1e8de37aa0 | |||
| 9cd3080e22 | |||
| ceefde5ec8 | |||
| 3a29cdbd7d | |||
| 2d5cb23503 | |||
| 6aa85699a5 | |||
| 330d195f9a | |||
| 4b1b83f42f | |||
| f749dedb0d | |||
| fa37d958b4 | |||
| e01313e7d0 | |||
| 20e7906c80 | |||
| 4bd5c033c3 | |||
| 5830b1b5e3 | |||
| e42877d007 | |||
| bcc546aa3f | |||
| 19527e8399 | |||
| d8ce8cd204 | |||
| 248d7c1d6d | |||
| 9455c6adec | |||
| 6619ea4441 | |||
| 0188038bc0 | |||
| 2a4b9f79fd | |||
| b43ec9d65a | |||
| df8bb7ce24 | |||
| 7110708d0f | |||
| b834819a35 | |||
| cc696a2ae8 | |||
| f29d8117bf | |||
| d2ec940da5 | |||
| da2c6a41d8 | |||
| a3ecbc53f6 | |||
| 2695344241 | |||
| 00ca362826 | |||
| 9dcf2a11b2 | |||
| 12dc6d1ac8 | |||
| 6c2e58eb4d | |||
| 1a58fce043 | |||
| 96ee4c21a3 | |||
| ae07dee941 | |||
| efce9bc9b5 | |||
| d575bf7ddc | |||
| 7a939ec218 | |||
| 542440eac5 | |||
| 717b6b8f13 | |||
| 36c3f4deba | |||
| a954b568ea | |||
| 74d64c7f43 | |||
| 65cce9105d | |||
| 43853b337b | |||
| 8474aee2fe | |||
| 7098252252 | |||
| 16ffaa6482 | |||
| 865c29f4de | |||
| 507c948ed8 | |||
| f0b04b2a3a | |||
| 20555f9a33 | |||
| 56ad3a5f43 | |||
| 5ef94415aa | |||
| d67e94fb1b | |||
| f797d4f49d | |||
| ad4233d078 | |||
| 2c34b480fc | |||
| 86badb394e | |||
| e295937e54 | |||
| c7a24a441f | |||
| a08ee4a737 | |||
| 9e757bc2ec | |||
| 5ef7919022 | |||
| 6b38dc17cd | |||
| 71b88b333d | |||
| 108a2fceca | |||
| c3773d9c35 | |||
| e1b42d5252 | |||
| 558fee16e4 | |||
| 87e5df1b9e | |||
| 4b295009ae | |||
| 3d61139567 | |||
| 15e7c8f37a | |||
| 8d29bd07c2 | |||
| 75b899d87d | |||
| c3b3f09702 | |||
| 56650d7a2b | |||
| 8a47896263 | |||
| 0f182ef674 | |||
| f1b2449ce5 | |||
| a26dbbfe96 | |||
| bf28a303c6 | |||
| e814bb9453 | |||
| 2916c3f098 | |||
| 8644965c81 | |||
| 0524a6d848 | |||
| e19991ec46 | |||
| e4e5bca6bc | |||
| 8ff7b1de11 | |||
| 7827f9fbe3 | |||
| d9f2d8d241 | |||
| 058919923a | |||
| d151b1bef5 | |||
| baf0060761 | |||
| 036745e853 | |||
| b99e2f7230 | |||
| 9c965bb62e | |||
| e68389a11e | |||
| ba63bac661 | |||
| 0842f54a27 | |||
| 584ad807cc | |||
| e92f1fb220 | |||
| 67c97da654 | |||
| 90b5c17034 | |||
| 0b33318a24 | |||
| a9a2b699cd | |||
| da7811f82a | |||
| 49a4ec538d | |||
| 9e103614f8 | |||
| 711b109246 | |||
| 6347d18a2d | |||
| d7b09ad560 | |||
| 52e2af7753 | |||
| 177e461d90 | |||
| fef7932e55 | |||
| b42191a2dd | |||
| 48a421bb10 | |||
| f09f3643ad | |||
| 36636205dd | |||
| 5b0039aae6 | |||
| 18f5a04eaa | |||
| 89e39b9858 | |||
| 3db5ffcfb7 | |||
| 4ae2b4f371 | |||
| 0dee127b29 | |||
| 6e55870a82 | |||
| 21ca1eb7ae | |||
| a1a5869ef8 | |||
| bc5c5e3251 | |||
| f39e08e2ba | |||
| e15d9ca4b3 | |||
| eeac23464b | |||
| 5354ec5791 | |||
| 35785a6c49 | |||
| 235d18f360 | |||
| ea5ef746e2 | |||
| de5fd5d4e2 | |||
| 8c8f4b3c06 | |||
| f5b02fbc11 | |||
| 55e1acec07 | |||
| 611460c9db | |||
| 584e390703 | |||
| 1ac255fd1c | |||
| 2c152c3425 | |||
| 664c0bc4c3 | |||
| 8a06238054 | |||
| 6626084cb8 | |||
| bb27c69675 | |||
| 25d7ac9ecc | |||
| 03a53e29af | |||
| 681d6a29e6 | |||
| d044a6bcc2 | |||
| 091eac1fce | |||
| 02bed7e5a5 | |||
| 7919848324 | |||
| a4436b32df | |||
| 0f9c1c57b4 | |||
| e725cdbc4b | |||
| 9ef5dcd113 | |||
| ef6e9a5312 | |||
| 5bdeb7dad1 | |||
| 8347a6688f | |||
| 3ce196ff52 | |||
| 0326355edc | |||
| 94f1aade5c | |||
| fe54121cfa | |||
| 77b2742863 | |||
| 021c3cc125 | |||
| 0b3a54f9f2 | |||
| 7808f8f56b | |||
| e3c8c23d91 | |||
| b4cabc3cf7 | |||
| e8e3c7addb | |||
| 608ce78778 | |||
| 977433443a | |||
| 5bf8248dd3 | |||
| 7b36727ed1 | |||
| f096e5a3f3 | |||
| 53c6fa5de7 | |||
| 97168180cf | |||
| 57374489da | |||
| 1d145c7511 | |||
| 820202cd53 | |||
| 4c773971a7 | |||
| 9e8e9af485 | |||
| 4f60946513 | |||
| ac9318c78f | |||
| 76cf8dff93 |
@@ -0,0 +1,243 @@
|
||||
---
|
||||
applyTo: "keyboards/**"
|
||||
excludeAgent:
|
||||
- "coding-agent"
|
||||
---
|
||||
# GitHub Copilot Instructions for QMK Pull Request Review
|
||||
This document provides automated review guidance based on the [QMK PR Checklist](https://docs.qmk.fm/pr_checklist) and it is intended only for use by GitHub Copilot code-review agent during pull request reviews.
|
||||
|
||||
> **Scope**: This review applies **only to changes within the `keyboards/` folder**. Changes outside `keyboards/` (e.g., core code, quantum, platforms, drivers) must be flagged and deferred to a QMK Collaborator — do not review them.
|
||||
|
||||
## General PR Requirements
|
||||
|
||||
### Branch and Submission Standards
|
||||
- **Source Branch Policy**: Verify PR is NOT submitted from submitter's own `master` branch
|
||||
- Flag if submitter is using their own `master` branch as source
|
||||
- Suggest using feature branches instead for cleaner fork management
|
||||
- **Target Branch Policy**:
|
||||
- **New keyboard additions** → `master` branch (new folders under `keyboards/`)
|
||||
- **All other changes** → `develop` branch:
|
||||
- Keyboard updates, refactors, or moves
|
||||
- Core code changes
|
||||
- Data-driven configuration migrations
|
||||
- Any modifications to existing keyboards
|
||||
- **PR Scope**: PRs should contain the smallest set of modifications for a single change
|
||||
- Flag PRs that modify multiple keyboards simultaneously
|
||||
- Suggest splitting large PRs into focused, incremental changes
|
||||
- **Merge Conflicts**: Check for unresolved merge conflicts
|
||||
|
||||
### File Naming and Structure
|
||||
- **Lowercase Requirement**: All new directories and filenames must be lowercase
|
||||
- Exception: Upstream sources with original uppercase (LUFA, ChibiOS)
|
||||
- Exception: Core files with valid justification
|
||||
- **Reject**: Board designer preference for uppercase is NOT valid justification
|
||||
|
||||
### License Headers
|
||||
- **Required**: Valid license headers on all `*.c` and `*.h` files
|
||||
- **Recommended**: GPL2/GPL3 for consistency
|
||||
- **Format**: Check for proper GPL2+ header or SPDX identifier
|
||||
```c
|
||||
// Copyright 2024 Your Name (@yourgithub)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
```
|
||||
- **Exception**: Simple assignment-only `rules.mk` files don't need headers
|
||||
- **Flag**: Missing or ambiguous license headers (blocks merge)
|
||||
|
||||
---
|
||||
|
||||
## Keymap PR Reviews
|
||||
|
||||
**Scope**: These rules apply to files within `keyboards/*/keymaps/*` subdirectories.
|
||||
|
||||
### Note on Non-Default Keymaps
|
||||
- Any keymap folder named something other than `default` (e.g., `default_clueboard`, `via`) is a non-default keymap
|
||||
- **Do not review the content** of non-default keymaps — flag their presence and note that a QMK Collaborator must review them
|
||||
|
||||
### Keymap Code Standards
|
||||
- **Includes**: `#include QMK_KEYBOARD_H` preferred over specific board files
|
||||
- **Enums**: Suggest using layer enums instead of `#define`s for layers (soft suggestion only)
|
||||
- **Custom Keycodes**: First entry must be `QK_USER`
|
||||
- **VIA**: Keymaps should NOT enable VIA
|
||||
- VIA keymaps belong in [VIA QMK Userspace](https://github.com/the-via/qmk_userspace_via)
|
||||
|
||||
---
|
||||
|
||||
## Keyboard PR Reviews
|
||||
|
||||
**Scope**: These rules apply to keyboard-level files in `keyboards/*` directories, excluding files within the `keymaps/` subdirectories. This includes:
|
||||
- `info.json` or `keyboard.json` (keyboard root or variant level)
|
||||
- `readme.md` (keyboard level)
|
||||
- `rules.mk` (keyboard level)
|
||||
- `config.h` (keyboard level, not keymap level)
|
||||
- `<keyboard>.c` and `<keyboard>.h` files
|
||||
- Hardware configuration files (`halconf.h`, `mcuconf.h`, `chconf.h`)
|
||||
|
||||
### Branch Targeting
|
||||
- **New Keyboards**: Target `master` branch
|
||||
- New additions to `keyboards/` folder submit to `master`
|
||||
- **Keyboard Moves**: Must target `develop` branch
|
||||
- Check `data/mappings/keyboard_aliases.hjson` is updated for moves
|
||||
- **Keyboard Updates/Refactors**: Must target `develop` to reduce merge conflicts
|
||||
- **Data Driven Migration**: Must target `develop`
|
||||
|
||||
### info.json and keyboard.json Requirements
|
||||
- **Schema Validation**: Verify that `info.json` and `keyboard.json` files are valid JSON (no syntax errors, no trailing commas, properly closed brackets)
|
||||
- **Mandatory Elements**:
|
||||
- `url` field is present and begins with `http://` or `https://`
|
||||
- `maintainer` field is present and non-empty
|
||||
- `usb.vid` and `usb.pid` fields are present and match the `0x` hexadecimal format (e.g. `"vid": "0x1234"`, `"pid": "0xFEED"`)
|
||||
- `usb.device_version` field is present
|
||||
- Each key entry in every `layout` array must include a `"matrix"` property (e.g. `{"label": "L01", "matrix": [0, 0], "x": 0, "y": 0}`)
|
||||
- Microcontroller and bootloader specified
|
||||
- Diode direction (if not using direct pins)
|
||||
- **Layout Naming**:
|
||||
- Single layout: Must be named `LAYOUT` or match `LAYOUT_*` pattern
|
||||
- Multiple layouts: Must include `LAYOUT_all` plus at least one alternate name
|
||||
|
||||
### readme.md Requirements
|
||||
- **Template**: Must follow [official template](https://github.com/qmk/qmk_firmware/blob/master/data/templates/keyboard/readme.md)
|
||||
- **Flash Command**: Present with `:flash` at end
|
||||
- **Hardware Link**: Valid availability link (unless handwired)
|
||||
- Private groupbuys acceptable
|
||||
- Open-source should link to files
|
||||
- **Reset Instructions**: Bootloader reset instructions must be present (non-empty)
|
||||
- **Images**: A keyboard image is preferred but not mandatory
|
||||
- If present, images must not be hosted in the repository
|
||||
- If an imgur URL is used, it must link directly to the image (i.e. `https://i.imgur.com/<id>.<ext>`), not the preview page (i.e. not `https://imgur.com/<id>`)
|
||||
|
||||
### rules.mk Standards
|
||||
- **Removed Items**:
|
||||
- Size comments like `(-/+size)`
|
||||
|
||||
### config.h Standards (Keyboard Level)
|
||||
- **Prohibited**:
|
||||
- `#define DESCRIPTION`
|
||||
- Comment blocks explaining features
|
||||
- Commented-out unused defines
|
||||
- `#include "config_common.h"`
|
||||
- **No Vial**: Vial-related files/changes not accepted
|
||||
|
||||
### Keyboard Implementation Files
|
||||
|
||||
#### `<keyboard>.c`
|
||||
- **Advanced Code Flag**: ⚠️ If a `<keyboard>.c` file is present in the PR, flag it as possible advanced code requiring QMK Collaborator review
|
||||
|
||||
#### `<keyboard>.h`
|
||||
- **Include**: `#include "quantum.h"` at top
|
||||
- **Layout Macros**: If `LAYOUT` macros are present, suggest moving them to `info.json` or `keyboard.json`
|
||||
|
||||
### Default Keymap Standards
|
||||
|
||||
**Scope**: These rules specifically apply to files within `keyboards/*/keymaps/default/` directories.
|
||||
|
||||
- **Pristine Requirement**: Bare minimum clean slate
|
||||
- ⚠️ If `keymap.c` contains anything beyond the `keymaps[]` array, or if the `default` keymap folder contains additional `.c` or `.h` files, flag this as possible advanced code requiring QMK Collaborator review
|
||||
- **Removed Examples**: Delete `QMKBEST`/`QMKURL` macros
|
||||
- **Tri Layer**: Use Tri Layer feature instead of manual `layer_on/off()` + `update_tri_layer()`
|
||||
- **Encoder Map**: Use encoder map feature, `encoder_update_user()` may not be present
|
||||
- **No VIA**: Default keymap should not enable VIA
|
||||
|
||||
### Prohibited Files
|
||||
- **No VIA JSON**: Belongs in [VIA Keyboard Repo](https://github.com/the-via/keyboards)
|
||||
- **No KLE JSON**: Not used within QMK
|
||||
- **Single Keyboard Per PR**: A PR must not modify more than one `keyboards/<folder>/` directory
|
||||
- Flag PRs that touch multiple top-level keyboard folders (e.g., both `keyboards/mykeyboard1/` and `keyboards/mykeyboard2/`) — each keyboard must be a separate PR
|
||||
- **No Cross-Keyboard Sources**: Don't include files from other keyboard vendors
|
||||
- Exception: Core files (e.g., `drivers/sensors/pmw3360.c`)
|
||||
- Use of vendor-specific code (e.g., `wilba_tech/wt_main.c`) only when keyboard exists in the same enclosing vendor folder (e.g. a `wilba_tech` keyboard)
|
||||
|
||||
---
|
||||
|
||||
## Review Response Templates
|
||||
|
||||
### For source master branch usage:
|
||||
```
|
||||
⚠️ This PR appears to be submitted from your own `master` branch. For future PRs, we recommend using feature branches instead of committing to your `master`. This makes it easier to keep your fork updated and manage multiple PRs.
|
||||
|
||||
See: [Best Practices: Your Fork's Master](https://docs.qmk.fm/newbs_git_using_your_master_branch)
|
||||
```
|
||||
|
||||
### For incorrect target branch:
|
||||
```
|
||||
❌ This PR targets the wrong branch:
|
||||
- **New keyboard additions** should target `master`
|
||||
- **Keyboard updates/refactors/moves** should target `develop`
|
||||
|
||||
Please change the target branch accordingly.
|
||||
```
|
||||
|
||||
### For missing license headers:
|
||||
```
|
||||
❌ Missing GPL-compatible license headers on the following files:
|
||||
- [list files]
|
||||
|
||||
Please add GPL2+ headers (GPL2/GPL3 recommended). Example:
|
||||
\`\`\`c
|
||||
// Copyright 2024 Your Name (@yourgithub)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
\`\`\`
|
||||
```
|
||||
|
||||
### For non-lowercase filenames:
|
||||
```
|
||||
❌ The following files/directories must be lowercase:
|
||||
- [list files]
|
||||
|
||||
Exception: Only valid if from upstream sources (LUFA, ChibiOS) or justified by core consistency.
|
||||
```
|
||||
|
||||
### For config.h violations:
|
||||
```
|
||||
⚠️ Found prohibited config.h elements:
|
||||
- [list specific issues: `#define DESCRIPTION`, `#include "config_common.h"`, comment blocks, commented-out defines]
|
||||
|
||||
Please remove these and refer to [Data Driven Configuration](https://docs.qmk.fm/data_driven_config).
|
||||
```
|
||||
|
||||
### For info.json or keyboard.json issues:
|
||||
```
|
||||
⚠️ info.json or keyboard.json needs attention:
|
||||
- [list missing mandatory fields]
|
||||
- Please run: \`qmk format-json -i path/to/info.json\` (or keyboard.json)
|
||||
- Validate with: \`qmk lint -kb <keyboard_name>\`
|
||||
```
|
||||
|
||||
### For non-pristine default keymap:
|
||||
```
|
||||
⚠️ Default keymap requires collaborator review:
|
||||
The default `keymap.c` contains code beyond the `keymaps[]` array. The following was detected:
|
||||
- [describe: extra functions/definitions in keymap.c, or additional .c/.h files in the default keymap folder]
|
||||
|
||||
A QMK Collaborator must review this before merging.
|
||||
```
|
||||
|
||||
### For non-default keymaps:
|
||||
```
|
||||
⚠️ Non-default keymap detected: `keyboards/[path]/keymaps/[name]/`
|
||||
|
||||
This keymap requires a QMK Collaborator to review its content. No automated review of its code was performed.
|
||||
```
|
||||
|
||||
### For `<keyboard>.c` detected:
|
||||
```
|
||||
⚠️ `<keyboard>.c` file detected: `keyboards/[path]/[keyboard].c`
|
||||
|
||||
This file may contain advanced hardware configuration. A QMK Collaborator must review this before merging.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Constraints and Conduct
|
||||
|
||||
- **Scope**: Only review changes within the `keyboards/` folder. Flag any changes outside `keyboards/` and defer to a QMK Collaborator without reviewing them.
|
||||
- Focus reviews on **objective checklist items** that can be automatically verified
|
||||
- Flag **definite violations** with ❌
|
||||
- Suggest improvements for **recommendations** with ⚠️
|
||||
- **Provide specific file/line references** when flagging issues
|
||||
- **Link to relevant QMK documentation** for each issue
|
||||
- **Prioritize blocking issues** (license, merge conflicts, branch policy)
|
||||
- **Be constructive**: Suggest fixes, not just problems
|
||||
- **Do not review non-default keymaps** — flag their presence and defer to a QMK Collaborator
|
||||
- **Do not review `<keyboard>.c` content in detail** — flag its presence and defer to a QMK Collaborator
|
||||
|
||||
This is meant as a **first-pass review** to catch common issues before human review. Complex architectural decisions, code quality, and subjective assessments still require human QMK Collaborator review.
|
||||
@@ -25,7 +25,7 @@ jobs:
|
||||
if: github.repository == 'qmk/qmk_firmware'
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v7
|
||||
with:
|
||||
fetch-depth: 1
|
||||
persist-credentials: false
|
||||
|
||||
@@ -4,7 +4,7 @@ permissions: {}
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "*/5 * * * *"
|
||||
- cron: "*/30 * * * *"
|
||||
|
||||
jobs:
|
||||
automatic_approve:
|
||||
|
||||
@@ -28,7 +28,7 @@ jobs:
|
||||
if: github.repository == 'qmk/qmk_firmware'
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v7
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
|
||||
@@ -0,0 +1,289 @@
|
||||
name: Bootstrap Script Testing
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [master, develop, xap]
|
||||
paths:
|
||||
- 'util/env-bootstrap.sh'
|
||||
- '.github/workflows/bootstrap_testing.yml'
|
||||
pull_request:
|
||||
paths:
|
||||
- 'util/env-bootstrap.sh'
|
||||
- '.github/workflows/bootstrap_testing.yml'
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
prep:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
outputs:
|
||||
any_changed: ${{ steps.file_changes.outputs.any_changed }}
|
||||
|
||||
steps:
|
||||
- name: Get changed files
|
||||
id: file_changes
|
||||
if: ${{ github.event_name == 'pull_request' }}
|
||||
uses: tj-actions/changed-files@v47
|
||||
with:
|
||||
use_rest_api: true
|
||||
files: |
|
||||
util/env-bootstrap.sh
|
||||
.github/workflows/bootstrap_testing.yml
|
||||
|
||||
bootstrap-test-linux:
|
||||
name: Bootstrap (Linux)
|
||||
|
||||
needs: prep
|
||||
if: ${{ github.event_name != 'pull_request' || needs.prep.outputs.any_changed == 'true' }}
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
distribution:
|
||||
# Ubuntu/Debian based
|
||||
- debian:11
|
||||
- debian:12
|
||||
- debian:13
|
||||
- ubuntu:22.04
|
||||
- ubuntu:24.04
|
||||
- ubuntu:26.04
|
||||
|
||||
# RHEL/CentOS/Fedora based
|
||||
- fedora:42
|
||||
- fedora:43
|
||||
- fedora:44
|
||||
- rockylinux:8
|
||||
- rockylinux:9
|
||||
- rockylinux/rockylinux:10
|
||||
- almalinux:8
|
||||
- almalinux:9
|
||||
- almalinux:10
|
||||
|
||||
# OpenSUSE based (we skip Tumbleweed as it has issues with package mirrors regularly being out of date)
|
||||
- opensuse/leap:latest
|
||||
|
||||
# Gentoo-based
|
||||
- gentoo/stage3:latest
|
||||
|
||||
# Arch based
|
||||
- archlinux:latest
|
||||
- cachyos/cachyos:latest
|
||||
- manjarolinux/base:latest
|
||||
|
||||
container:
|
||||
image: ${{ matrix.distribution }}
|
||||
options: --privileged
|
||||
|
||||
steps:
|
||||
- name: Install base dependencies
|
||||
run: |
|
||||
# Attempt to run the package installation up to 10 times to mitigate transient network issues
|
||||
for n in $(seq 1 10); do
|
||||
{
|
||||
echo "Attempt #$n of 10 to install base dependencies:"
|
||||
case "${{ matrix.distribution }}" in
|
||||
*ubuntu*|*debian*)
|
||||
apt-get update
|
||||
apt-get install -y sudo git passwd
|
||||
;;
|
||||
*fedora*|*rockylinux*|*almalinux*)
|
||||
dnf install -y sudo git passwd findutils # findutils=xargs
|
||||
;;
|
||||
*suse*)
|
||||
zypper --non-interactive refresh
|
||||
zypper --non-interactive install sudo git shadow findutils tar # findutils=xargs
|
||||
;;
|
||||
*gentoo*)
|
||||
emerge-webrsync
|
||||
emerge --noreplace --ask=n sudo dev-vcs/git shadow findutils # findutils=xargs
|
||||
;;
|
||||
*archlinux*|*cachyos*|*manjaro*)
|
||||
pacman -Syu --noconfirm
|
||||
pacman -S --noconfirm sudo git
|
||||
;;
|
||||
esac
|
||||
} && break || sleep 10
|
||||
done
|
||||
|
||||
# Fix PAM configuration for sudo in containers
|
||||
# Fix /etc/shadow permissions - common issue in container environments
|
||||
chmod 640 /etc/shadow || chmod 400 /etc/shadow || true
|
||||
|
||||
# Disable problematic PAM modules that commonly fail in RHEL-like containers
|
||||
sed -i 's/^session.*pam_systemd.so/#&/' /etc/pam.d/sudo || true
|
||||
sed -i 's/^session.*pam_loginuid.so/#&/' /etc/pam.d/sudo || true
|
||||
|
||||
# Ensure proper sudoers configuration
|
||||
echo 'Defaults !requiretty' >> /etc/sudoers
|
||||
echo 'Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"' >> /etc/sudoers
|
||||
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v7
|
||||
with:
|
||||
fetch-depth: 1
|
||||
submodules: recursive
|
||||
path: qmk_firmware
|
||||
|
||||
- name: Create test user
|
||||
run: |
|
||||
# Create a test user for the bootstrap script
|
||||
useradd -m -s /bin/bash -U testuser
|
||||
echo 'testuser:testpassword' | chpasswd || true
|
||||
|
||||
# Configure passwordless sudo
|
||||
echo "root ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers # some distros complain about root not being in sudoers
|
||||
echo "testuser ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
|
||||
|
||||
# Test sudo functionality
|
||||
sudo -u testuser whoami || echo "Sudo test failed, but continuing..."
|
||||
|
||||
- name: Move QMK repository to test user home
|
||||
run: |
|
||||
# Add upstream remote to the cloned repository so `qmk doctor` doesn't flag a warning
|
||||
git -C qmk_firmware remote add upstream https://github.com/qmk/qmk_firmware.git
|
||||
# Move the QMK repository to the test user's home directory
|
||||
mv qmk_firmware /home/testuser/qmk_firmware
|
||||
chown -R testuser:testuser /home/testuser/qmk_firmware
|
||||
|
||||
- name: Run bootstrap script
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
# Ensure the bootstrap script can access sudo
|
||||
sudo -u testuser --preserve-env=GITHUB_TOKEN bash -c "
|
||||
export CONFIRM=1
|
||||
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
||||
cd /home/testuser
|
||||
bash /home/testuser/qmk_firmware/util/env-bootstrap.sh
|
||||
"
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
sudo -u testuser bash -c "
|
||||
/home/testuser/.local/share/uv/tools/qmk/bin/python -m pip install -r /home/testuser/qmk_firmware/requirements.txt
|
||||
"
|
||||
|
||||
- name: Test QMK CLI
|
||||
run: |
|
||||
sudo -u testuser bash -c "
|
||||
export PATH=/home/testuser/.local/bin:\$PATH
|
||||
cd /home/testuser
|
||||
qmk setup -y -H /home/testuser/qmk_firmware # setup implies doctor, no need to run it separately
|
||||
cd /home/testuser/qmk_firmware
|
||||
qmk mass-compile -j $(nproc) -e DUMP_CI_METADATA=yes -f 'keyboard_name==*onekey*' -km reset -p || touch .failed # Compile a bunch of different platforms
|
||||
"
|
||||
|
||||
cd /home/testuser/qmk_firmware
|
||||
./util/ci/generate_failure_markdown.sh > $GITHUB_STEP_SUMMARY || true
|
||||
[ ! -e .failed ] || exit 1
|
||||
|
||||
bootstrap-test-macos:
|
||||
name: Bootstrap (macOS)
|
||||
|
||||
needs: prep
|
||||
if: ${{ github.event_name != 'pull_request' || needs.prep.outputs.any_changed == 'true' }}
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os:
|
||||
- macos-14 # Apple Silicon ARM64
|
||||
- macos-15 # Apple Silicon ARM64
|
||||
- macos-15-intel # Intel x64
|
||||
- macos-26 # Apple Silicon ARM64
|
||||
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v7
|
||||
with:
|
||||
fetch-depth: 1
|
||||
submodules: recursive
|
||||
|
||||
- name: Run bootstrap script
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
# Add upstream remote to the cloned repository so `qmk doctor` doesn't flag a warning
|
||||
git remote add upstream https://github.com/qmk/qmk_firmware.git
|
||||
# Run the bootstrap script
|
||||
export CONFIRM=1
|
||||
sh ./util/env-bootstrap.sh
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
$HOME/.local/share/uv/tools/qmk/bin/python -m pip install -r requirements.txt
|
||||
|
||||
- name: Test QMK CLI
|
||||
run: |
|
||||
# Add QMK CLI to PATH (bootstrap script installs it to ~/.local/bin on macOS)
|
||||
export PATH="$HOME/.local/bin:$PATH"
|
||||
qmk setup -y -H . # setup implies doctor, no need to run it separately
|
||||
qmk mass-compile -j $(sysctl -n hw.ncpu) -e DUMP_CI_METADATA=yes -f 'keyboard_name==*onekey*' -km reset || touch .failed # Compile a bunch of different platforms
|
||||
|
||||
./util/ci/generate_failure_markdown.sh > $GITHUB_STEP_SUMMARY || true
|
||||
[ ! -e .failed ] || exit 1
|
||||
|
||||
bootstrap-test-windows:
|
||||
name: Bootstrap (Windows)
|
||||
|
||||
needs: prep
|
||||
if: ${{ github.event_name != 'pull_request' || needs.prep.outputs.any_changed == 'true' }}
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
msys-variant:
|
||||
- mingw64
|
||||
- clang64
|
||||
- ucrt64
|
||||
|
||||
runs-on: windows-latest
|
||||
defaults:
|
||||
run:
|
||||
shell: msys2 {0}
|
||||
|
||||
steps:
|
||||
- name: Install MSYS2
|
||||
uses: msys2/setup-msys2@v2
|
||||
with:
|
||||
msystem: ${{ matrix.msys-variant }}
|
||||
pacboy: >-
|
||||
git:
|
||||
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v7
|
||||
with:
|
||||
fetch-depth: 1
|
||||
submodules: recursive
|
||||
|
||||
- name: Run bootstrap script
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
# Add upstream remote to the cloned repository so `qmk doctor` doesn't flag a warning
|
||||
git remote add upstream https://github.com/qmk/qmk_firmware.git
|
||||
# Run the bootstrap script
|
||||
export CONFIRM=1
|
||||
sh ./util/env-bootstrap.sh
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
/opt/uv/tools/qmk/Scripts/python -m pip install -r requirements.txt
|
||||
|
||||
- name: Test QMK CLI
|
||||
run: |
|
||||
# Add QMK CLI to PATH (bootstrap script installs it to /opt/uv/tools/bin on Windows MSYS2)
|
||||
export PATH="/opt/uv/tools/bin:$PATH"
|
||||
qmk setup -y -H . # setup implies doctor, no need to run it separately
|
||||
qmk mass-compile -j $(nproc) -e DUMP_CI_METADATA=yes -f 'keyboard_name==*onekey*' -km reset || touch .failed # Compile a bunch of different platforms
|
||||
|
||||
./util/ci/generate_failure_markdown.sh > $GITHUB_STEP_SUMMARY || true
|
||||
[ ! -e .failed ] || exit 1
|
||||
|
||||
@@ -6,13 +6,13 @@ permissions:
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [master, develop]
|
||||
branches: [master, develop, xap]
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
branch:
|
||||
type: choice
|
||||
description: "Branch to build"
|
||||
options: [master, develop]
|
||||
options: [master, develop, xap]
|
||||
|
||||
env:
|
||||
# https://docs.github.com/en/actions/learn-github-actions/usage-limits-billing-and-administration#usage-limits
|
||||
@@ -32,29 +32,36 @@ jobs:
|
||||
container: ghcr.io/qmk/qmk_cli
|
||||
|
||||
outputs:
|
||||
keymaps: ${{ steps.generate_slice_length.outputs.keymaps }}
|
||||
slice_length: ${{ steps.generate_slice_length.outputs.slice_length }}
|
||||
|
||||
steps:
|
||||
- name: Install prerequisites
|
||||
run: |
|
||||
apt-get update
|
||||
apt-get install -y jq
|
||||
|
||||
- name: Disable safe.directory check
|
||||
run: |
|
||||
git config --global --add safe.directory '*'
|
||||
|
||||
- name: Checkout QMK Firmware
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v7
|
||||
|
||||
- name: Install dependencies
|
||||
run: pip3 install -r requirements-dev.txt
|
||||
|
||||
- name: Determine concurrency
|
||||
id: generate_slice_length
|
||||
shell: 'bash {0}'
|
||||
run: |
|
||||
target_count=$( {
|
||||
qmk find -km default 2>/dev/null
|
||||
# qmk find -km xap 2>/dev/null
|
||||
} | sort | uniq | wc -l)
|
||||
targets=()
|
||||
target_count=0
|
||||
for target in "default" "xap"; do
|
||||
count=$(qmk find -km $target 2>/dev/null | wc -l)
|
||||
if [ $count -gt 0 ]; then
|
||||
target_count=$(($target_count + $count))
|
||||
targets+=($target)
|
||||
fi
|
||||
done
|
||||
keymaps=$(jq -c -n '$ARGS.positional' --args "${targets[@]}")
|
||||
slice_length=$((target_count / ($CONCURRENT_JOBS - 1))) # Err on the side of caution
|
||||
echo "keymaps=$keymaps" >> $GITHUB_OUTPUT
|
||||
echo "slice_length=$slice_length" >> $GITHUB_OUTPUT
|
||||
|
||||
build_targets:
|
||||
@@ -63,8 +70,7 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
keymap: [default]
|
||||
# keymap: [default, xap]
|
||||
keymap: ${{ fromJson(needs.determine_concurrency.outputs.keymaps) }}
|
||||
uses: ./.github/workflows/ci_build_major_branch_keymap.yml
|
||||
with:
|
||||
branch: ${{ inputs.branch || github.ref_name }}
|
||||
@@ -83,12 +89,12 @@ jobs:
|
||||
git config --global --add safe.directory '*'
|
||||
|
||||
- name: Checkout QMK Firmware
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v7
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Download firmwares
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
pattern: firmware-*
|
||||
path: .
|
||||
@@ -126,14 +132,7 @@ jobs:
|
||||
SOURCE_DIR: .
|
||||
DEST_DIR: ${{ inputs.branch || github.ref_name }}/latest
|
||||
|
||||
- name: Check if failure marker file exists
|
||||
id: check_failure_marker
|
||||
uses: andstor/file-existence-action@v3
|
||||
with:
|
||||
files: ./.failed
|
||||
|
||||
- name: Fail build if needed
|
||||
if: steps.check_failure_marker.outputs.files_exists == 'true'
|
||||
run: |
|
||||
# Exit with failure if the compilation stage failed
|
||||
exit 1
|
||||
[ ! -e .failed ] || exit 1
|
||||
|
||||
@@ -27,30 +27,29 @@ jobs:
|
||||
targets: ${{ steps.generate_targets.outputs.targets }}
|
||||
|
||||
steps:
|
||||
- name: Install prerequisites
|
||||
run: |
|
||||
apt-get update
|
||||
apt-get install -y jq
|
||||
|
||||
- name: Disable safe.directory check
|
||||
run: |
|
||||
git config --global --add safe.directory '*'
|
||||
|
||||
- name: Checkout QMK Firmware
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v7
|
||||
|
||||
- name: Install dependencies
|
||||
run: pip3 install -r requirements-dev.txt
|
||||
|
||||
- name: Generate build targets
|
||||
shell: 'bash {0}'
|
||||
id: generate_targets
|
||||
run: |
|
||||
{ # Intentionally use `shuf` here so that we share manufacturers across all build groups -- some have a lot of ARM-based boards which inherently take longer
|
||||
counter=0
|
||||
echo -n '{'
|
||||
qmk find -km ${{ inputs.keymap }} 2>/dev/null | sort | uniq | shuf | xargs -L${{ inputs.slice_length }} | while IFS=$'\n' read target ; do
|
||||
qmk find -km ${{ inputs.keymap }} 2>/dev/null | sort | uniq | shuf --random-source=<(openssl enc -aes-256-ctr -pass pass:qmk -nosalt </dev/zero 2>/dev/null) | xargs -L${{ inputs.slice_length }} | while IFS=$'\n' read target ; do
|
||||
if [ $counter -gt 0 ]; then
|
||||
echo -n ','
|
||||
fi
|
||||
counter=$((counter+1))
|
||||
printf "\"group %02d\":{" $counter
|
||||
printf "\"group-%02d\":{" $counter
|
||||
echo -n '"targets":"'
|
||||
echo $target | tr ' ' '\n' | sort | uniq | xargs echo -n
|
||||
echo -n '"}'
|
||||
@@ -62,7 +61,7 @@ jobs:
|
||||
echo "targets=$(jq -c 'keys' targets.json)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Upload targets json
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: targets-${{ inputs.keymap }}
|
||||
path: targets.json
|
||||
@@ -74,45 +73,76 @@ jobs:
|
||||
container: ghcr.io/qmk/qmk_cli
|
||||
continue-on-error: true
|
||||
|
||||
env:
|
||||
CCACHE_CONFIGPATH: ~/.cache
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
target: ${{ fromJson(needs.generate_targets.outputs.targets) }}
|
||||
|
||||
steps:
|
||||
- name: Install prerequisites
|
||||
run: |
|
||||
apt-get update
|
||||
apt-get install -y jq
|
||||
|
||||
- name: Disable safe.directory check
|
||||
run: |
|
||||
git config --global --add safe.directory '*'
|
||||
|
||||
- name: Checkout QMK Firmware
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v7
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: Install dependencies
|
||||
run: pip3 install -r requirements-dev.txt
|
||||
|
||||
- name: Get target definitions
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
name: targets-${{ inputs.keymap }}
|
||||
path: .
|
||||
|
||||
- name: Deploy submodules
|
||||
run: |
|
||||
qmk git-submodule -f
|
||||
|
||||
- name: Dump targets
|
||||
run: |
|
||||
jq -r '.["${{ matrix.target }}"].targets' targets.json | tr ' ' '\n' | sort
|
||||
|
||||
- name: Restore Cache
|
||||
id: cache
|
||||
uses: actions/cache/restore@v5
|
||||
with:
|
||||
path: ${{ env.CCACHE_CONFIGPATH }}
|
||||
key: compile-${{ inputs.keymap }}-${{ matrix.target }}
|
||||
|
||||
- name: Build targets
|
||||
continue-on-error: true
|
||||
run: |
|
||||
export NCPUS=$(( $(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || getconf _NPROCESSORS_ONLN 2>/dev/null) -1 ))
|
||||
qmk mass-compile -t -j $NCPUS -e DUMP_CI_METADATA=yes $(jq -r '.["${{ matrix.target }}"].targets' targets.json) || touch .failed
|
||||
targets=$(jq -r '.["${{ matrix.target }}"].targets' targets.json | tr ' ' '\n' | sort)
|
||||
if [ -z "${targets}" ]; then
|
||||
echo "Zero build targets detected"
|
||||
exit 0
|
||||
fi
|
||||
qmk mass-compile -t -j $(nproc) -e DUMP_CI_METADATA=yes -e USE_CCACHE=yes $targets || touch .failed
|
||||
|
||||
- name: Dump ccache stats
|
||||
run: |
|
||||
ccache -s
|
||||
|
||||
# Delete the old cache on hit to emulate a cache update. See https://github.com/actions/cache/issues/342.
|
||||
- name: Delete old cache
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
if: steps.cache.outputs.cache-hit
|
||||
run: |
|
||||
count=$(gh cache list --ref ${{ github.ref }} --key ${{ steps.cache.outputs.cache-primary-key }} --json id | jq length)
|
||||
if [ $count -gt 0 ]; then
|
||||
gh cache delete --ref ${{ github.ref }} ${{ steps.cache.outputs.cache-primary-key }}
|
||||
fi
|
||||
|
||||
- name: Save Cache
|
||||
uses: actions/cache/save@v5
|
||||
with:
|
||||
path: ${{ env.CCACHE_CONFIGPATH }}
|
||||
key: compile-${{ inputs.keymap }}-${{ matrix.target }}
|
||||
|
||||
- name: Upload binaries
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: firmware-${{ inputs.keymap }}-${{ matrix.target }}
|
||||
if-no-files-found: ignore
|
||||
@@ -136,17 +166,17 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout QMK Firmware
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v7
|
||||
|
||||
- name: Download firmwares
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
pattern: firmware-${{ inputs.keymap }}-*
|
||||
path: .
|
||||
merge-multiple: true
|
||||
|
||||
- name: Upload all firmwares
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: firmware-${{ inputs.keymap }}
|
||||
if-no-files-found: ignore
|
||||
@@ -165,7 +195,7 @@ jobs:
|
||||
truncate --size='<960K' $GITHUB_STEP_SUMMARY || true
|
||||
|
||||
- name: Delete temporary build artifacts
|
||||
uses: geekyeggo/delete-artifact@v5
|
||||
uses: geekyeggo/delete-artifact@v6
|
||||
with:
|
||||
name: |
|
||||
firmware-${{ inputs.keymap }}-*
|
||||
|
||||
@@ -24,11 +24,12 @@ jobs:
|
||||
- name: Disable safe.directory check
|
||||
run : git config --global --add safe.directory '*'
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v7
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: Install dependencies
|
||||
run: pip3 install -r requirements-dev.txt
|
||||
|
||||
- name: Run tests
|
||||
run: qmk pytest
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
name: Generate Develop Docs
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- develop
|
||||
paths:
|
||||
- 'builddefs/docsgen/**'
|
||||
- 'tmk_core/**'
|
||||
- 'quantum/**'
|
||||
- 'platforms/**'
|
||||
- 'docs/**'
|
||||
- '.github/workflows/docs.yml'
|
||||
|
||||
jobs:
|
||||
generate:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Deploy Develop
|
||||
if: ${{ github.repository == 'qmk/qmk_firmware' }}
|
||||
uses: actions/github-script@v9
|
||||
with:
|
||||
github-token: ${{ secrets.QMK_BOT_TOKEN }}
|
||||
script: |
|
||||
const result = await github.rest.actions.createWorkflowDispatch({
|
||||
owner: 'qmk',
|
||||
repo: 'qmk_docs_devel',
|
||||
workflow_id: 'develop.yml',
|
||||
ref: 'main',
|
||||
})
|
||||
@@ -15,7 +15,7 @@ jobs:
|
||||
if: github.repository == 'qmk/qmk_firmware'
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v7
|
||||
with:
|
||||
token: ${{ secrets.QMK_BOT_TOKEN }}
|
||||
fetch-depth: 0
|
||||
|
||||
@@ -30,14 +30,15 @@ jobs:
|
||||
container: ghcr.io/qmk/qmk_cli
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v7
|
||||
with:
|
||||
fetch-depth: 1
|
||||
|
||||
- name: Install dependencies
|
||||
run: pip3 install -r requirements-dev.txt
|
||||
|
||||
- name: Install nvm
|
||||
run: |
|
||||
apt-get update && apt-get install -y rsync doxygen
|
||||
# install nvm
|
||||
touch $HOME/.bashrc
|
||||
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
|
||||
|
||||
@@ -56,7 +57,7 @@ jobs:
|
||||
|
||||
- name: Deploy
|
||||
if: ${{ github.event_name == 'push' && github.repository == 'qmk/qmk_firmware' }}
|
||||
uses: JamesIves/github-pages-deploy-action@v4.7.3
|
||||
uses: JamesIves/github-pages-deploy-action@v4.8.0
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
branch: gh-pages
|
||||
|
||||
@@ -21,7 +21,7 @@ jobs:
|
||||
- riot
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v7
|
||||
with:
|
||||
token: ${{ secrets.QMK_BOT_TOKEN }}
|
||||
fetch-depth: 0
|
||||
|
||||
@@ -26,7 +26,7 @@ jobs:
|
||||
- name: Disable safe.directory check
|
||||
run : git config --global --add safe.directory '*'
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v7
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
@@ -36,7 +36,7 @@ jobs:
|
||||
|
||||
- name: Get changed files
|
||||
id: file_changes
|
||||
uses: tj-actions/changed-files@v46
|
||||
uses: tj-actions/changed-files@v47
|
||||
with:
|
||||
use_rest_api: true
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ jobs:
|
||||
- name: Disable safe.directory check
|
||||
run : git config --global --add safe.directory '*'
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v7
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
@@ -47,7 +47,7 @@ jobs:
|
||||
git config user.email 'hello@qmk.fm'
|
||||
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@v7
|
||||
uses: peter-evans/create-pull-request@v8
|
||||
if: ${{ github.repository == 'qmk/qmk_firmware'}}
|
||||
with:
|
||||
token: ${{ secrets.QMK_BOT_TOKEN }}
|
||||
|
||||
@@ -10,4 +10,4 @@ jobs:
|
||||
pull-requests: write
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/labeler@v5
|
||||
- uses: actions/labeler@v6
|
||||
|
||||
@@ -18,7 +18,7 @@ jobs:
|
||||
- name: Disable safe.directory check
|
||||
run : git config --global --add safe.directory '*'
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v7
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
@@ -27,11 +27,11 @@ jobs:
|
||||
|
||||
- name: Get changed files
|
||||
id: file_changes
|
||||
uses: tj-actions/changed-files@v46
|
||||
uses: tj-actions/changed-files@v47
|
||||
with:
|
||||
use_rest_api: true
|
||||
|
||||
- name: Print info
|
||||
- name: Print git info
|
||||
run: |
|
||||
git rev-parse --short HEAD
|
||||
echo ${{ github.event.pull_request.base.sha }}
|
||||
@@ -57,7 +57,7 @@ jobs:
|
||||
if [[ $KEYMAP_ONLY -gt 0 ]]; then
|
||||
echo "linting ${KB}"
|
||||
|
||||
qmk lint --keyboard ${KB} && qmk info -l --keyboard ${KB}
|
||||
qmk lint --strict --keyboard ${KB} && qmk info -l --keyboard ${KB}
|
||||
exit_code=$(($exit_code + $?))
|
||||
fi
|
||||
done
|
||||
@@ -78,10 +78,21 @@ jobs:
|
||||
fi
|
||||
exit $exit_code
|
||||
|
||||
- name: Verify keyboard aliases
|
||||
- name: Reset git repo
|
||||
if: always()
|
||||
shell: 'bash {0}'
|
||||
run: |
|
||||
git reset --hard
|
||||
git clean -xfd
|
||||
|
||||
- name: Verify keyboard targets
|
||||
if: always()
|
||||
shell: 'bash {0}'
|
||||
run: |
|
||||
qmk ci-validate-keyboard-targets
|
||||
|
||||
- name: Verify keyboard aliases
|
||||
if: always()
|
||||
shell: 'bash {0}'
|
||||
run: |
|
||||
qmk ci-validate-aliases
|
||||
|
||||
@@ -8,6 +8,9 @@ on:
|
||||
paths:
|
||||
- 'data/constants/**'
|
||||
- 'lib/python/**'
|
||||
- 'quantum/rgblight/rgblight_breathe_table.h'
|
||||
- 'quantum/keycodes.h'
|
||||
- 'quantum/keymap_extras/**'
|
||||
|
||||
jobs:
|
||||
regen:
|
||||
@@ -19,7 +22,10 @@ jobs:
|
||||
- name: Disable safe.directory check
|
||||
run : git config --global --add safe.directory '*'
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v7
|
||||
|
||||
- name: Install dependencies
|
||||
run: pip3 install -r requirements-dev.txt
|
||||
|
||||
- name: Run qmk generators
|
||||
run: |
|
||||
|
||||
@@ -19,7 +19,10 @@ jobs:
|
||||
- name: Disable safe.directory check
|
||||
run : git config --global --add safe.directory '*'
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v7
|
||||
|
||||
- name: Install dependencies
|
||||
run: pip3 install -r requirements-dev.txt
|
||||
|
||||
- name: Run qmk generators
|
||||
run: |
|
||||
@@ -34,7 +37,7 @@ jobs:
|
||||
git config user.email 'hello@qmk.fm'
|
||||
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@v7
|
||||
uses: peter-evans/create-pull-request@v8
|
||||
if: ${{ github.repository == 'qmk/qmk_firmware'}}
|
||||
with:
|
||||
token: ${{ secrets.QMK_BOT_TOKEN }}
|
||||
|
||||
@@ -11,6 +11,7 @@ on:
|
||||
pull_request:
|
||||
paths:
|
||||
- 'builddefs/**'
|
||||
- '!builddefs/docsgen/**'
|
||||
- 'quantum/**'
|
||||
- 'platforms/**'
|
||||
- 'tmk_core/**'
|
||||
@@ -26,10 +27,12 @@ jobs:
|
||||
container: ghcr.io/qmk/qmk_cli
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v7
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: Install dependencies
|
||||
run: pip3 install -r requirements-dev.txt
|
||||
|
||||
- name: Run tests
|
||||
run: qmk test-c
|
||||
run: qmk test-c -j $(nproc)
|
||||
|
||||
@@ -64,6 +64,9 @@ build/
|
||||
cmake-build-debug
|
||||
CMakeLists.txt
|
||||
*.pdf
|
||||
*.zip
|
||||
.env
|
||||
.envrc
|
||||
|
||||
# Let these ones be user specific, since we have so many different configurations
|
||||
*.code-workspace
|
||||
@@ -94,6 +97,11 @@ tags
|
||||
*.mpeg
|
||||
*.ttf
|
||||
*.otf
|
||||
# Un-ignore limited image file formats in docs
|
||||
!docs/public/**.gif
|
||||
!docs/public/**.jpg
|
||||
!docs/public/**.jpeg
|
||||
!docs/public/**.png
|
||||
|
||||
# Things Travis sees
|
||||
/.vs
|
||||
|
||||
@@ -38,14 +38,17 @@ $(info QMK Firmware $(QMK_VERSION))
|
||||
endif
|
||||
endif
|
||||
|
||||
# Try to determine userspace from qmk config, if set.
|
||||
ifeq ($(QMK_USERSPACE),)
|
||||
QMK_USERSPACE = $(shell qmk config -ro user.overlay_dir | cut -d= -f2 | sed -e 's@^None$$@@g')
|
||||
endif
|
||||
|
||||
# Determine which qmk cli to use
|
||||
QMK_BIN := qmk
|
||||
|
||||
# Try to determine userspace from qmk config, if set. Handle direct query on qmk_cli>=1.1.7
|
||||
# falling back to legacy method of only supporting user.overlay_dir config
|
||||
# sort is used to buffer 'qmk env' output and avoid BrokenPipeError errors
|
||||
export override QMK_USERSPACE := $(shell \
|
||||
$(QMK_BIN) env | sort | grep -q QMK_USERSPACE \
|
||||
&& $(QMK_BIN) env QMK_USERSPACE \
|
||||
|| $(QMK_BIN) config -ro user.overlay_dir | cut -d= -f2 | sed -e 's@^None$$@@g')
|
||||
|
||||
# avoid 'Entering|Leaving directory' messages
|
||||
MAKEFLAGS += --no-print-directory
|
||||
|
||||
@@ -115,7 +118,7 @@ endef
|
||||
TRY_TO_MATCH_RULE_FROM_LIST = $(eval $(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER,$1))$(RULE_FOUND)
|
||||
|
||||
# As TRY_TO_MATCH_RULE_FROM_LIST_HELPER, but with additional
|
||||
# resolution of DEFAULT_FOLDER and keyboard_aliases.hjson for provided rule
|
||||
# resolution of keyboard_aliases.hjson for provided rule
|
||||
define TRY_TO_MATCH_RULE_FROM_LIST_HELPER_KB
|
||||
# Split on ":", padding with empty strings to avoid indexing issues
|
||||
TOKEN1:=$$(shell python3 -c "import sys; print((sys.argv[1].split(':',1)+[''])[0])" $$(RULE))
|
||||
@@ -190,41 +193,9 @@ endef
|
||||
# Parses a rule in the format <keymap>:<target>
|
||||
# the keyboard is already known when entering this function
|
||||
define PARSE_KEYBOARD
|
||||
# If we want to compile the default subproject, then we need to
|
||||
# include the correct makefile to determine the actual name of it
|
||||
CURRENT_KB := $1
|
||||
|
||||
# 5/4/3/2/1
|
||||
KEYBOARD_FOLDER_PATH_1 := $$(CURRENT_KB)
|
||||
KEYBOARD_FOLDER_PATH_2 := $$(patsubst %/,%,$$(dir $$(KEYBOARD_FOLDER_PATH_1)))
|
||||
KEYBOARD_FOLDER_PATH_3 := $$(patsubst %/,%,$$(dir $$(KEYBOARD_FOLDER_PATH_2)))
|
||||
KEYBOARD_FOLDER_PATH_4 := $$(patsubst %/,%,$$(dir $$(KEYBOARD_FOLDER_PATH_3)))
|
||||
KEYBOARD_FOLDER_PATH_5 := $$(patsubst %/,%,$$(dir $$(KEYBOARD_FOLDER_PATH_4)))
|
||||
|
||||
KEYMAPS :=
|
||||
# get a list of all keymaps
|
||||
KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(KEYBOARD_FOLDER_PATH_1)/keymaps/*/.)))
|
||||
KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(KEYBOARD_FOLDER_PATH_2)/keymaps/*/.)))
|
||||
KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(KEYBOARD_FOLDER_PATH_3)/keymaps/*/.)))
|
||||
KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(KEYBOARD_FOLDER_PATH_4)/keymaps/*/.)))
|
||||
KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(KEYBOARD_FOLDER_PATH_5)/keymaps/*/.)))
|
||||
|
||||
ifneq ($(QMK_USERSPACE),)
|
||||
KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(QMK_USERSPACE)/keyboards/$$(KEYBOARD_FOLDER_PATH_1)/keymaps/*/.)))
|
||||
KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(QMK_USERSPACE)/keyboards/$$(KEYBOARD_FOLDER_PATH_2)/keymaps/*/.)))
|
||||
KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(QMK_USERSPACE)/keyboards/$$(KEYBOARD_FOLDER_PATH_3)/keymaps/*/.)))
|
||||
KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(QMK_USERSPACE)/keyboards/$$(KEYBOARD_FOLDER_PATH_4)/keymaps/*/.)))
|
||||
KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(QMK_USERSPACE)/keyboards/$$(KEYBOARD_FOLDER_PATH_5)/keymaps/*/.)))
|
||||
endif
|
||||
|
||||
KEYBOARD_LAYOUTS := $(shell $(QMK_BIN) list-layouts --keyboard $1)
|
||||
LAYOUT_KEYMAPS :=
|
||||
$$(foreach LAYOUT,$$(KEYBOARD_LAYOUTS),$$(eval LAYOUT_KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/layouts/*/$$(LAYOUT)/*/.)))))
|
||||
ifneq ($(QMK_USERSPACE),)
|
||||
$$(foreach LAYOUT,$$(KEYBOARD_LAYOUTS),$$(eval LAYOUT_KEYMAPS += $$(notdir $$(patsubst %/.,%,$$(wildcard $(QMK_USERSPACE)/layouts/$$(LAYOUT)/*/.)))))
|
||||
endif
|
||||
|
||||
KEYMAPS := $$(sort $$(KEYMAPS) $$(LAYOUT_KEYMAPS))
|
||||
KEYMAPS := $(shell $(QMK_BIN) list-keymaps --keyboard $1)
|
||||
|
||||
# if the rule after removing the start of it is empty (we haven't specified a kemap or target)
|
||||
# compile all the keymaps
|
||||
@@ -255,7 +226,7 @@ endef
|
||||
# if we are going to compile all keyboards, match the rest of the rule
|
||||
# for each of them
|
||||
define PARSE_ALL_KEYBOARDS
|
||||
$$(eval $$(call PARSE_ALL_IN_LIST,PARSE_KEYBOARD,$(shell $(QMK_BIN) list-keyboards --no-resolve-defaults)))
|
||||
$$(eval $$(call PARSE_ALL_IN_LIST,PARSE_KEYBOARD,$(shell $(QMK_BIN) list-keyboards)))
|
||||
endef
|
||||
|
||||
# Prints a list of all known keymaps for the given keyboard
|
||||
@@ -329,6 +300,7 @@ endef
|
||||
define BUILD_TEST
|
||||
TEST_PATH := $1
|
||||
TEST_NAME := $$(notdir $$(TEST_PATH))
|
||||
TEST_ID := $$(patsubst ./tests/%,%,$$(TEST_PATH))
|
||||
TEST_FULL_NAME := $$(subst /,_,$$(patsubst $$(ROOT_DIR)tests/%,%,$$(TEST_PATH)))
|
||||
MAKE_TARGET := $2
|
||||
COMMAND := $1
|
||||
@@ -342,7 +314,7 @@ define BUILD_TEST
|
||||
TEST_MSG := $$(MSG_TEST)
|
||||
$$(TEST_FULL_NAME)_COMMAND := \
|
||||
printf "$$(TEST_MSG)\n"; \
|
||||
$$(TEST_EXECUTABLE); \
|
||||
$$(TEST_EXECUTABLE) --gtest_color=$$(COLOR); \
|
||||
if [ $$$$? -gt 0 ]; \
|
||||
then error_occurred=1; \
|
||||
fi; \
|
||||
@@ -447,7 +419,7 @@ git-submodules: git-submodule
|
||||
|
||||
.PHONY: list-keyboards
|
||||
list-keyboards:
|
||||
$(QMK_BIN) list-keyboards --no-resolve-defaults | tr '\n' ' '
|
||||
$(QMK_BIN) list-keyboards | tr '\n' ' '
|
||||
|
||||
.PHONY: list-tests
|
||||
list-tests:
|
||||
@@ -455,7 +427,7 @@ list-tests:
|
||||
|
||||
.PHONY: generate-keyboards-file
|
||||
generate-keyboards-file:
|
||||
$(QMK_BIN) list-keyboards --no-resolve-defaults
|
||||
$(QMK_BIN) list-keyboards
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
@@ -480,16 +452,17 @@ distclean_userspace: clean
|
||||
endif
|
||||
|
||||
# Extra targets for formatting and/or pytest, running within the qmk/qmk_cli container to match GHA.
|
||||
CONTAINER_PREAMBLE := export HOME="/tmp"; export PATH="/tmp/.local/bin:\$$PATH"; python3 -m pip install --upgrade pip; python3 -m pip install -r requirements-dev.txt
|
||||
|
||||
.PHONY: format-core
|
||||
format-core:
|
||||
RUNTIME=docker ./util/docker_cmd.sh bash -lic "$(CONTAINER_PREAMBLE); qmk format-c --core-only -a && qmk format-python -a"
|
||||
RUNTIME=docker ./util/docker_cmd.sh qmk format-c --core-only -a
|
||||
RUNTIME=docker ./util/docker_cmd.sh qmk format-python -a
|
||||
|
||||
.PHONY: pytest
|
||||
pytest:
|
||||
RUNTIME=docker ./util/docker_cmd.sh bash -lic "$(CONTAINER_PREAMBLE); qmk pytest"
|
||||
RUNTIME=docker ./util/docker_cmd.sh qmk pytest
|
||||
|
||||
.PHONY: format-and-pytest
|
||||
format-and-pytest:
|
||||
RUNTIME=docker ./util/docker_cmd.sh bash -lic "$(CONTAINER_PREAMBLE); qmk format-c --core-only -a && qmk format-python -a && qmk pytest"
|
||||
RUNTIME=docker ./util/docker_cmd.sh qmk format-c --core-only -a
|
||||
RUNTIME=docker ./util/docker_cmd.sh qmk format-python -a
|
||||
RUNTIME=docker ./util/docker_cmd.sh qmk pytest
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
# Look for a json keymap file
|
||||
ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_5)/keymap.json)","")
|
||||
KEYMAP_JSON := $(MAIN_KEYMAP_PATH_5)/keymap.json
|
||||
KEYMAP_JSON_PATH := $(MAIN_KEYMAP_PATH_5)
|
||||
else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_4)/keymap.json)","")
|
||||
KEYMAP_JSON := $(MAIN_KEYMAP_PATH_4)/keymap.json
|
||||
KEYMAP_JSON_PATH := $(MAIN_KEYMAP_PATH_4)
|
||||
else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_3)/keymap.json)","")
|
||||
KEYMAP_JSON := $(MAIN_KEYMAP_PATH_3)/keymap.json
|
||||
KEYMAP_JSON_PATH := $(MAIN_KEYMAP_PATH_3)
|
||||
else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_2)/keymap.json)","")
|
||||
KEYMAP_JSON := $(MAIN_KEYMAP_PATH_2)/keymap.json
|
||||
KEYMAP_JSON_PATH := $(MAIN_KEYMAP_PATH_2)
|
||||
else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_1)/keymap.json)","")
|
||||
KEYMAP_JSON := $(MAIN_KEYMAP_PATH_1)/keymap.json
|
||||
KEYMAP_JSON_PATH := $(MAIN_KEYMAP_PATH_1)
|
||||
endif
|
||||
|
||||
ifneq ($(QMK_USERSPACE),)
|
||||
ifneq ("$(wildcard $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_5)/keymap.json)","")
|
||||
KEYMAP_JSON := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_5)/keymap.json
|
||||
KEYMAP_PATH := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_5)
|
||||
else ifneq ("$(wildcard $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_4)/keymap.json)","")
|
||||
KEYMAP_JSON := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_4)/keymap.json
|
||||
KEYMAP_PATH := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_4)
|
||||
else ifneq ("$(wildcard $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_3)/keymap.json)","")
|
||||
KEYMAP_JSON := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_3)/keymap.json
|
||||
KEYMAP_PATH := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_3)
|
||||
else ifneq ("$(wildcard $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_2)/keymap.json)","")
|
||||
KEYMAP_JSON := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_2)/keymap.json
|
||||
KEYMAP_PATH := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_2)
|
||||
else ifneq ("$(wildcard $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_1)/keymap.json)","")
|
||||
KEYMAP_JSON := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_1)/keymap.json
|
||||
KEYMAP_PATH := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_1)
|
||||
endif
|
||||
endif
|
||||
+26
-75
@@ -138,75 +138,12 @@ ifneq ("$(wildcard $(KEYBOARD_PATH_5)/keyboard.json)","")
|
||||
DD_CONFIG_FILES += $(KEYBOARD_PATH_5)/keyboard.json
|
||||
endif
|
||||
|
||||
MAIN_KEYMAP_PATH_1 := $(KEYBOARD_PATH_1)/keymaps/$(KEYMAP)
|
||||
MAIN_KEYMAP_PATH_2 := $(KEYBOARD_PATH_2)/keymaps/$(KEYMAP)
|
||||
MAIN_KEYMAP_PATH_3 := $(KEYBOARD_PATH_3)/keymaps/$(KEYMAP)
|
||||
MAIN_KEYMAP_PATH_4 := $(KEYBOARD_PATH_4)/keymaps/$(KEYMAP)
|
||||
MAIN_KEYMAP_PATH_5 := $(KEYBOARD_PATH_5)/keymaps/$(KEYMAP)
|
||||
|
||||
# Pull in rules from DD keyboard config
|
||||
INFO_RULES_MK = $(shell $(QMK_BIN) generate-rules-mk --quiet --escape --keyboard $(KEYBOARD) --output $(INTERMEDIATE_OUTPUT)/src/info_rules.mk)
|
||||
include $(INFO_RULES_MK)
|
||||
|
||||
# Check for keymap.json first, so we can regenerate keymap.c
|
||||
include $(BUILDDEFS_PATH)/build_json.mk
|
||||
|
||||
# Pull in keymap level rules.mk
|
||||
ifeq ("$(wildcard $(KEYMAP_PATH))", "")
|
||||
# Look through the possible keymap folders until we find a matching keymap.c
|
||||
ifneq ($(QMK_USERSPACE),)
|
||||
ifneq ("$(wildcard $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_1)/keymap.c)","")
|
||||
-include $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_1)/rules.mk
|
||||
KEYMAP_C := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_1)/keymap.c
|
||||
KEYMAP_PATH := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_1)
|
||||
else ifneq ("$(wildcard $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_2)/keymap.c)","")
|
||||
-include $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_2)/rules.mk
|
||||
KEYMAP_C := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_2)/keymap.c
|
||||
KEYMAP_PATH := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_2)
|
||||
else ifneq ("$(wildcard $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_3)/keymap.c)","")
|
||||
-include $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_3)/rules.mk
|
||||
KEYMAP_C := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_3)/keymap.c
|
||||
KEYMAP_PATH := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_3)
|
||||
else ifneq ("$(wildcard $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_4)/keymap.c)","")
|
||||
-include $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_4)/rules.mk
|
||||
KEYMAP_C := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_4)/keymap.c
|
||||
KEYMAP_PATH := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_4)
|
||||
else ifneq ("$(wildcard $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_5)/keymap.c)","")
|
||||
-include $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_5)/rules.mk
|
||||
KEYMAP_C := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_5)/keymap.c
|
||||
KEYMAP_PATH := $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_5)
|
||||
endif
|
||||
endif
|
||||
ifeq ($(KEYMAP_PATH),)
|
||||
ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_1)/keymap.c)","")
|
||||
-include $(MAIN_KEYMAP_PATH_1)/rules.mk
|
||||
KEYMAP_C := $(MAIN_KEYMAP_PATH_1)/keymap.c
|
||||
KEYMAP_PATH := $(MAIN_KEYMAP_PATH_1)
|
||||
else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_2)/keymap.c)","")
|
||||
-include $(MAIN_KEYMAP_PATH_2)/rules.mk
|
||||
KEYMAP_C := $(MAIN_KEYMAP_PATH_2)/keymap.c
|
||||
KEYMAP_PATH := $(MAIN_KEYMAP_PATH_2)
|
||||
else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_3)/keymap.c)","")
|
||||
-include $(MAIN_KEYMAP_PATH_3)/rules.mk
|
||||
KEYMAP_C := $(MAIN_KEYMAP_PATH_3)/keymap.c
|
||||
KEYMAP_PATH := $(MAIN_KEYMAP_PATH_3)
|
||||
else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_4)/keymap.c)","")
|
||||
-include $(MAIN_KEYMAP_PATH_4)/rules.mk
|
||||
KEYMAP_C := $(MAIN_KEYMAP_PATH_4)/keymap.c
|
||||
KEYMAP_PATH := $(MAIN_KEYMAP_PATH_4)
|
||||
else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_5)/keymap.c)","")
|
||||
-include $(MAIN_KEYMAP_PATH_5)/rules.mk
|
||||
KEYMAP_C := $(MAIN_KEYMAP_PATH_5)/keymap.c
|
||||
KEYMAP_PATH := $(MAIN_KEYMAP_PATH_5)
|
||||
else ifneq ($(LAYOUTS),)
|
||||
# If we haven't found a keymap yet fall back to community layouts
|
||||
include $(BUILDDEFS_PATH)/build_layout.mk
|
||||
else ifeq ("$(wildcard $(KEYMAP_JSON_PATH))", "") # Not finding keymap.c is fine if we found a keymap.json
|
||||
$(call CATASTROPHIC_ERROR,Invalid keymap,Could not find keymap)
|
||||
# this state should never be reached
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
include $(BUILDDEFS_PATH)/locate_keymap.mk
|
||||
-include $(KEYMAP_PATH)/rules.mk
|
||||
|
||||
# Have we found a keymap.json?
|
||||
ifneq ("$(wildcard $(KEYMAP_JSON))", "")
|
||||
@@ -217,16 +154,9 @@ ifneq ("$(wildcard $(KEYMAP_JSON))", "")
|
||||
OPT_DEFS += -DOTHER_KEYMAP_C=\"$(OTHER_KEYMAP_C)\"
|
||||
endif
|
||||
|
||||
KEYMAP_PATH := $(KEYMAP_JSON_PATH)
|
||||
|
||||
KEYMAP_C := $(INTERMEDIATE_OUTPUT)/src/keymap.c
|
||||
KEYMAP_H := $(INTERMEDIATE_OUTPUT)/src/config.h
|
||||
|
||||
ifeq ($(OTHER_KEYMAP_C),)
|
||||
# Load the keymap-level rules.mk if exists (and we havent already loaded it for keymap.c)
|
||||
-include $(KEYMAP_PATH)/rules.mk
|
||||
endif
|
||||
|
||||
# Load any rules.mk content from keymap.json
|
||||
INFO_RULES_MK = $(shell $(QMK_BIN) generate-rules-mk --quiet --escape --output $(INTERMEDIATE_OUTPUT)/src/rules.mk $(KEYMAP_JSON))
|
||||
include $(INFO_RULES_MK)
|
||||
@@ -255,6 +185,13 @@ endif
|
||||
COMMUNITY_RULES_MK = $(shell $(QMK_BIN) generate-community-modules-rules-mk -kb $(KEYBOARD) --quiet --escape --output $(INTERMEDIATE_OUTPUT)/src/community_rules.mk $(KEYMAP_JSON))
|
||||
include $(COMMUNITY_RULES_MK)
|
||||
|
||||
ifneq ($(COMMUNITY_MODULES),)
|
||||
|
||||
$(INTERMEDIATE_OUTPUT)/src/community_post_config.h: $(KEYMAP_JSON) $(DD_CONFIG_FILES)
|
||||
@$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD)
|
||||
$(eval CMD=$(QMK_BIN) generate-community-post-config-h -kb $(KEYBOARD) --quiet --output $(INTERMEDIATE_OUTPUT)/src/community_post_config.h $(KEYMAP_JSON))
|
||||
@$(BUILD_CMD)
|
||||
|
||||
$(INTERMEDIATE_OUTPUT)/src/community_modules.h: $(KEYMAP_JSON) $(DD_CONFIG_FILES)
|
||||
@$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD)
|
||||
$(eval CMD=$(QMK_BIN) generate-community-modules-h -kb $(KEYBOARD) --quiet --output $(INTERMEDIATE_OUTPUT)/src/community_modules.h $(KEYMAP_JSON))
|
||||
@@ -285,9 +222,17 @@ $(INTERMEDIATE_OUTPUT)/src/rgb_matrix_community_modules.inc: $(KEYMAP_JSON) $(DD
|
||||
$(eval CMD=$(QMK_BIN) generate-rgb-matrix-community-modules-inc -kb $(KEYBOARD) --quiet --output $(INTERMEDIATE_OUTPUT)/src/rgb_matrix_community_modules.inc $(KEYMAP_JSON))
|
||||
@$(BUILD_CMD)
|
||||
|
||||
$(INTERMEDIATE_OUTPUT)/src/split_transaction_id_community_modules.inc: $(KEYMAP_JSON) $(DD_CONFIG_FILES)
|
||||
@$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD)
|
||||
$(eval CMD=$(QMK_BIN) generate-split-transaction-id-community-modules-inc -kb $(KEYBOARD) --quiet --output $(INTERMEDIATE_OUTPUT)/src/split_transaction_id_community_modules.inc $(KEYMAP_JSON))
|
||||
@$(BUILD_CMD)
|
||||
|
||||
COMMUNITY_POST_CONFIG_H = $(INTERMEDIATE_OUTPUT)/src/community_post_config.h
|
||||
SRC += $(INTERMEDIATE_OUTPUT)/src/community_modules.c
|
||||
|
||||
generated-files: $(INTERMEDIATE_OUTPUT)/src/community_modules.h $(INTERMEDIATE_OUTPUT)/src/community_modules.c $(INTERMEDIATE_OUTPUT)/src/community_modules_introspection.c $(INTERMEDIATE_OUTPUT)/src/community_modules_introspection.h $(INTERMEDIATE_OUTPUT)/src/led_matrix_community_modules.inc $(INTERMEDIATE_OUTPUT)/src/rgb_matrix_community_modules.inc
|
||||
generated-files: $(INTERMEDIATE_OUTPUT)/src/community_post_config.h $(INTERMEDIATE_OUTPUT)/src/community_modules.h $(INTERMEDIATE_OUTPUT)/src/community_modules.c $(INTERMEDIATE_OUTPUT)/src/community_modules_introspection.c $(INTERMEDIATE_OUTPUT)/src/community_modules_introspection.h $(INTERMEDIATE_OUTPUT)/src/led_matrix_community_modules.inc $(INTERMEDIATE_OUTPUT)/src/rgb_matrix_community_modules.inc $(INTERMEDIATE_OUTPUT)/src/split_transaction_id_community_modules.inc
|
||||
|
||||
endif
|
||||
|
||||
include $(BUILDDEFS_PATH)/converters.mk
|
||||
|
||||
@@ -427,6 +372,10 @@ ifneq ("$(wildcard $(KEYBOARD_PATH_5)/post_config.h)","")
|
||||
POST_CONFIG_H += $(KEYBOARD_PATH_5)/post_config.h
|
||||
endif
|
||||
|
||||
ifneq ($(COMMUNITY_POST_CONFIG_H),)
|
||||
POST_CONFIG_H += $(COMMUNITY_POST_CONFIG_H)
|
||||
endif
|
||||
|
||||
CONFIG_H += $(INTERMEDIATE_OUTPUT)/src/info_config.h
|
||||
KEYBOARD_SRC += $(INTERMEDIATE_OUTPUT)/src/default_keyboard.c
|
||||
|
||||
@@ -470,8 +419,10 @@ ifneq ($(wildcard $(QMK_USERSPACE)),)
|
||||
endif
|
||||
|
||||
# If the equivalent users directory exists in userspace, use that in preference to anything currently in the main repo
|
||||
ifneq ($(wildcard $(QMK_USERSPACE)/$(USER_PATH)),)
|
||||
USER_PATH := $(QMK_USERSPACE)/$(USER_PATH)
|
||||
ifneq ($(QMK_USERSPACE),)
|
||||
ifneq ($(wildcard $(QMK_USERSPACE)/$(USER_PATH)),)
|
||||
USER_PATH := $(QMK_USERSPACE)/$(USER_PATH)
|
||||
endif
|
||||
endif
|
||||
|
||||
# Pull in user level rules.mk
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
LAYOUTS_PATH := layouts
|
||||
LAYOUTS_REPOS := $(patsubst %/,%,$(sort $(dir $(wildcard $(LAYOUTS_PATH)/*/))))
|
||||
|
||||
ifneq ($(QMK_USERSPACE),)
|
||||
LAYOUTS_REPOS += $(patsubst %/,%,$(QMK_USERSPACE)/$(LAYOUTS_PATH))
|
||||
endif
|
||||
|
||||
define SEARCH_LAYOUTS_REPO
|
||||
LAYOUT_KEYMAP_PATH := $$(LAYOUTS_REPO)/$$(LAYOUT)/$$(KEYMAP)
|
||||
LAYOUT_KEYMAP_JSON := $$(LAYOUT_KEYMAP_PATH)/keymap.json
|
||||
LAYOUT_KEYMAP_C := $$(LAYOUT_KEYMAP_PATH)/keymap.c
|
||||
ifneq ("$$(wildcard $$(LAYOUT_KEYMAP_JSON))","")
|
||||
-include $$(LAYOUT_KEYMAP_PATH)/rules.mk
|
||||
KEYMAP_JSON := $$(LAYOUT_KEYMAP_JSON)
|
||||
KEYMAP_PATH := $$(LAYOUT_KEYMAP_PATH)
|
||||
else ifneq ("$$(wildcard $$(LAYOUT_KEYMAP_C))","")
|
||||
-include $$(LAYOUT_KEYMAP_PATH)/rules.mk
|
||||
KEYMAP_C := $$(LAYOUT_KEYMAP_C)
|
||||
KEYMAP_PATH := $$(LAYOUT_KEYMAP_PATH)
|
||||
endif
|
||||
endef
|
||||
|
||||
define SEARCH_LAYOUTS
|
||||
$$(foreach LAYOUTS_REPO,$$(LAYOUTS_REPOS),$$(eval $$(call SEARCH_LAYOUTS_REPO)))
|
||||
endef
|
||||
|
||||
ifneq ($(FORCE_LAYOUT),)
|
||||
ifneq (,$(findstring $(FORCE_LAYOUT),$(LAYOUTS)))
|
||||
$(info Forcing layout: $(FORCE_LAYOUT))
|
||||
LAYOUTS := $(FORCE_LAYOUT)
|
||||
else
|
||||
$(call CATASTROPHIC_ERROR,Invalid layout,Forced layout does not exist)
|
||||
endif
|
||||
endif
|
||||
|
||||
$(foreach LAYOUT,$(LAYOUTS),$(eval $(call SEARCH_LAYOUTS)))
|
||||
@@ -62,6 +62,7 @@ include $(BUILDDEFS_PATH)/common_features.mk
|
||||
include $(BUILDDEFS_PATH)/generic_features.mk
|
||||
include $(PLATFORM_PATH)/common.mk
|
||||
include $(TMK_PATH)/protocol.mk
|
||||
include $(QUANTUM_PATH)/battery/tests/rules.mk
|
||||
include $(QUANTUM_PATH)/debounce/tests/rules.mk
|
||||
include $(QUANTUM_PATH)/encoder/tests/rules.mk
|
||||
include $(QUANTUM_PATH)/os_detection/tests/rules.mk
|
||||
|
||||
@@ -29,6 +29,8 @@ QUANTUM_SRC += \
|
||||
$(QUANTUM_DIR)/logging/debug.c \
|
||||
$(QUANTUM_DIR)/logging/sendchar.c \
|
||||
$(QUANTUM_DIR)/process_keycode/process_default_layer.c \
|
||||
$(QUANTUM_DIR)/process_keycode/process_oneshot.c \
|
||||
$(QUANTUM_DIR)/process_keycode/process_quantum.c \
|
||||
|
||||
include $(QUANTUM_DIR)/nvm/rules.mk
|
||||
|
||||
@@ -96,6 +98,7 @@ endif
|
||||
|
||||
VALID_STENO_PROTOCOL_TYPES := geminipr txbolt all
|
||||
STENO_PROTOCOL ?= all
|
||||
|
||||
ifeq ($(strip $(STENO_ENABLE)), yes)
|
||||
ifeq ($(filter $(STENO_PROTOCOL),$(VALID_STENO_PROTOCOL_TYPES)),)
|
||||
$(call CATASTROPHIC_ERROR,Invalid STENO_PROTOCOL,STENO_PROTOCOL="$(STENO_PROTOCOL)" is not a valid stenography protocol)
|
||||
@@ -123,7 +126,7 @@ ifeq ($(strip $(MOUSEKEY_ENABLE)), yes)
|
||||
MOUSE_ENABLE := yes
|
||||
endif
|
||||
|
||||
VALID_POINTING_DEVICE_DRIVER_TYPES := adns5050 adns9800 analog_joystick azoteq_iqs5xx cirque_pinnacle_i2c cirque_pinnacle_spi paw3204 pmw3320 pmw3360 pmw3389 pimoroni_trackball custom
|
||||
VALID_POINTING_DEVICE_DRIVER_TYPES := adns5050 adns9800 analog_joystick azoteq_iqs5xx cirque_pinnacle_i2c cirque_pinnacle_spi paw3204 paw3222 pmw3320 pmw3325 pmw3360 pmw3389 pimoroni_trackball custom
|
||||
ifeq ($(strip $(POINTING_DEVICE_ENABLE)), yes)
|
||||
ifeq ($(filter $(POINTING_DEVICE_DRIVER),$(VALID_POINTING_DEVICE_DRIVER_TYPES)),)
|
||||
$(call CATASTROPHIC_ERROR,Invalid POINTING_DEVICE_DRIVER,POINTING_DEVICE_DRIVER="$(POINTING_DEVICE_DRIVER)" is not a valid pointing device type)
|
||||
@@ -155,6 +158,10 @@ ifeq ($(strip $(POINTING_DEVICE_ENABLE)), yes)
|
||||
SRC += drivers/sensors/cirque_pinnacle.c
|
||||
SRC += drivers/sensors/cirque_pinnacle_gestures.c
|
||||
SRC += $(QUANTUM_DIR)/pointing_device/pointing_device_gestures.c
|
||||
else ifeq ($(strip $(POINTING_DEVICE_DRIVER)), paw3222)
|
||||
SPI_DRIVER_REQUIRED = yes
|
||||
else ifeq ($(strip $(POINTING_DEVICE_DRIVER)), pmw3325)
|
||||
SPI_DRIVER_REQUIRED = yes
|
||||
else ifeq ($(strip $(POINTING_DEVICE_DRIVER)), pimoroni_trackball)
|
||||
I2C_DRIVER_REQUIRED = yes
|
||||
else ifneq ($(filter $(strip $(POINTING_DEVICE_DRIVER)),pmw3360 pmw3389),)
|
||||
@@ -633,6 +640,9 @@ ifeq ($(strip $(VIA_ENABLE)), yes)
|
||||
RAW_ENABLE := yes
|
||||
BOOTMAGIC_ENABLE := yes
|
||||
TRI_LAYER_ENABLE := yes
|
||||
ifeq ($(strip $(VIA_INSECURE)), yes)
|
||||
OPT_DEFS += -DVIA_INSECURE
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(RAW_ENABLE)), yes)
|
||||
@@ -940,21 +950,25 @@ ifeq ($(strip $(DIP_SWITCH_ENABLE)), yes)
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(BATTERY_ENABLE)), yes)
|
||||
BATTERY_DRIVER_REQUIRED := yes
|
||||
endif
|
||||
|
||||
VALID_BATTERY_DRIVER_TYPES := adc custom vendor
|
||||
|
||||
BATTERY_DRIVER ?= adc
|
||||
BATTERY_DRIVER ?= none
|
||||
ifeq ($(strip $(BATTERY_DRIVER_REQUIRED)), yes)
|
||||
ifeq ($(filter $(BATTERY_DRIVER),$(VALID_BATTERY_DRIVER_TYPES)),)
|
||||
$(call CATASTROPHIC_ERROR,Invalid BATTERY_DRIVER,BATTERY_DRIVER="$(BATTERY_DRIVER)" is not a valid battery driver)
|
||||
endif
|
||||
|
||||
OPT_DEFS += -DBATTERY_DRIVER
|
||||
OPT_DEFS += -DBATTERY_$(strip $(shell echo $(BATTERY_DRIVER) | tr '[:lower:]' '[:upper:]'))
|
||||
OPT_DEFS += -DBATTERY_DRIVER_$(strip $(shell echo $(BATTERY_DRIVER) | tr '[:lower:]' '[:upper:]'))
|
||||
|
||||
COMMON_VPATH += $(DRIVER_PATH)/battery
|
||||
|
||||
SRC += battery.c
|
||||
SRC += battery_$(strip $(BATTERY_DRIVER)).c
|
||||
ifneq ($(strip $(BATTERY_DRIVER)), custom)
|
||||
SRC += battery_$(strip $(BATTERY_DRIVER)).c
|
||||
endif
|
||||
|
||||
# add extra deps
|
||||
ifeq ($(strip $(BATTERY_DRIVER)), adc)
|
||||
|
||||
@@ -50,15 +50,19 @@ ifeq ($(strip $(DEBUG_ENABLE)),yes)
|
||||
CFLAGS += -ggdb3
|
||||
CXXFLAGS += -ggdb3
|
||||
ASFLAGS += -ggdb3
|
||||
# Create a map file when debugging
|
||||
LDFLAGS += -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref
|
||||
endif
|
||||
|
||||
# Create a map file to see what was compiled and where, unless disabled
|
||||
# (e.g. test builds, which use the host linker — Apple's ld does not accept
|
||||
# -Map=/--cref).
|
||||
ifneq ($(strip $(CREATE_MAP)), no)
|
||||
LDFLAGS += -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref
|
||||
endif
|
||||
|
||||
#---------------- C Compiler Options ----------------
|
||||
|
||||
ifeq ($(strip $(LTO_ENABLE)), yes)
|
||||
CDEFS += -flto
|
||||
CDEFS += -flto=auto
|
||||
CDEFS += -DLTO_ENABLE
|
||||
endif
|
||||
|
||||
@@ -66,12 +70,14 @@ CFLAGS += $(CDEFS)
|
||||
CFLAGS += -O$(OPT)
|
||||
# add color
|
||||
ifeq ($(COLOR),true)
|
||||
ifeq ("$(shell echo "int main(){}" | $(CC) -fdiagnostics-color -x c - -o /dev/null 2>&1)", "")
|
||||
CFLAGS+= -fdiagnostics-color
|
||||
endif
|
||||
CFLAGS+= -fdiagnostics-color=always
|
||||
else
|
||||
CFLAGS+= -fdiagnostics-color=never
|
||||
endif
|
||||
CFLAGS += -Wall
|
||||
CFLAGS += -Wstrict-prototypes
|
||||
CFLAGS += $(call cc-option,-Wunused-but-set-variable=1,-Wunused-but-set-variable)
|
||||
CFLAGS += $(call cc-option,-Wunused-but-set-parameter=1,-Wunused-but-set-parameter)
|
||||
ifneq ($(strip $(ALLOW_WARNINGS)), yes)
|
||||
CFLAGS += -Werror
|
||||
endif
|
||||
@@ -89,7 +95,8 @@ CXXFLAGS += -O$(OPT)
|
||||
CXXFLAGS += -w
|
||||
CXXFLAGS += -Wall
|
||||
CXXFLAGS += -Wundef
|
||||
|
||||
CXXFLAGS += $(call cc-option,-Wunused-but-set-variable=1,-Wunused-but-set-variable)
|
||||
CXXFLAGS += $(call cc-option,-Wunused-but-set-parameter=1,-Wunused-but-set-parameter)
|
||||
ifneq ($(strip $(ALLOW_WARNINGS)), yes)
|
||||
CXXFLAGS += -Werror
|
||||
endif
|
||||
|
||||
@@ -1,8 +1,3 @@
|
||||
ifneq (,$(filter $(MCU),atmega32u4))
|
||||
# TODO: opt in rather than assume everything uses a pro micro
|
||||
PIN_COMPATIBLE ?= promicro
|
||||
endif
|
||||
|
||||
# Remove whitespace from any rule.mk provided vars
|
||||
# - env cannot be overwritten but cannot have whitespace anyway
|
||||
CONVERT_TO:=$(strip $(CONVERT_TO))
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
{
|
||||
"license": "GPL-2.0-or-later",
|
||||
"devDependencies": {
|
||||
"vite": "^5.4.19",
|
||||
"vitepress": "^1.1.0",
|
||||
"vitepress-plugin-tabs": "^0.5.0",
|
||||
"vue": "^3.4.24"
|
||||
"vitepress": "^1.6.4",
|
||||
"vitepress-plugin-tabs": "^0.8.0"
|
||||
},
|
||||
"scripts": {
|
||||
"docs:dev": "vitepress dev --host 0.0.0.0",
|
||||
|
||||
+894
-496
File diff suppressed because it is too large
Load Diff
@@ -21,6 +21,7 @@ SPACE_CADET_ENABLE ?= yes
|
||||
GENERIC_FEATURES = \
|
||||
AUTO_SHIFT \
|
||||
AUTOCORRECT \
|
||||
BATTERY \
|
||||
BOOTMAGIC \
|
||||
CAPS_WORD \
|
||||
COMBO \
|
||||
@@ -44,6 +45,7 @@ GENERIC_FEATURES = \
|
||||
MOUSEKEY \
|
||||
MUSIC \
|
||||
OS_DETECTION \
|
||||
PLOVER_HID \
|
||||
PROGRAMMABLE_BUTTON \
|
||||
REPEAT_KEY \
|
||||
SECURE \
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
MAIN_KEYMAP_PATH_1 := $(KEYBOARD_PATH_1)/keymaps/$(KEYMAP)
|
||||
MAIN_KEYMAP_PATH_2 := $(KEYBOARD_PATH_2)/keymaps/$(KEYMAP)
|
||||
MAIN_KEYMAP_PATH_3 := $(KEYBOARD_PATH_3)/keymaps/$(KEYMAP)
|
||||
MAIN_KEYMAP_PATH_4 := $(KEYBOARD_PATH_4)/keymaps/$(KEYMAP)
|
||||
MAIN_KEYMAP_PATH_5 := $(KEYBOARD_PATH_5)/keymaps/$(KEYMAP)
|
||||
|
||||
POTENTIAL_KEYMAP_PATHS += $(MAIN_KEYMAP_PATH_1)
|
||||
POTENTIAL_KEYMAP_PATHS += $(MAIN_KEYMAP_PATH_2)
|
||||
POTENTIAL_KEYMAP_PATHS += $(MAIN_KEYMAP_PATH_3)
|
||||
POTENTIAL_KEYMAP_PATHS += $(MAIN_KEYMAP_PATH_4)
|
||||
POTENTIAL_KEYMAP_PATHS += $(MAIN_KEYMAP_PATH_5)
|
||||
|
||||
ifneq ($(QMK_USERSPACE),)
|
||||
POTENTIAL_KEYMAP_PATHS += $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_1)
|
||||
POTENTIAL_KEYMAP_PATHS += $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_2)
|
||||
POTENTIAL_KEYMAP_PATHS += $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_3)
|
||||
POTENTIAL_KEYMAP_PATHS += $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_4)
|
||||
POTENTIAL_KEYMAP_PATHS += $(QMK_USERSPACE)/$(MAIN_KEYMAP_PATH_5)
|
||||
endif
|
||||
|
||||
define SEARCH_POTENTIAL_LOCATION
|
||||
POTENTIAL_DIR := $1
|
||||
ifeq ("$$(wildcard $$(KEYMAP_PATH))", "")
|
||||
POTENTIAL_KEYMAP_JSON := $$(POTENTIAL_DIR)/keymap.json
|
||||
POTENTIAL_KEYMAP_C := $$(POTENTIAL_DIR)/keymap.c
|
||||
ifneq ("$$(wildcard $$(POTENTIAL_KEYMAP_JSON))","")
|
||||
KEYMAP_JSON := $$(POTENTIAL_KEYMAP_JSON)
|
||||
KEYMAP_PATH := $$(POTENTIAL_DIR)
|
||||
endif
|
||||
ifneq ("$$(wildcard $$(POTENTIAL_KEYMAP_C))","")
|
||||
KEYMAP_C := $$(POTENTIAL_KEYMAP_C)
|
||||
KEYMAP_PATH := $$(POTENTIAL_DIR)
|
||||
endif
|
||||
endif
|
||||
endef
|
||||
|
||||
$(foreach KM_DIR,$(POTENTIAL_KEYMAP_PATHS),$(eval $(call SEARCH_POTENTIAL_LOCATION, $(KM_DIR))))
|
||||
|
||||
LAYOUTS_PATH := layouts
|
||||
LAYOUTS_REPOS := $(patsubst %/,%,$(sort $(dir $(wildcard $(LAYOUTS_PATH)/*/))))
|
||||
|
||||
ifneq ($(QMK_USERSPACE),)
|
||||
LAYOUTS_REPOS += $(patsubst %/,%,$(QMK_USERSPACE)/$(LAYOUTS_PATH))
|
||||
endif
|
||||
|
||||
define SEARCH_LAYOUTS
|
||||
$$(foreach LAYOUTS_REPO,$$(LAYOUTS_REPOS),$$(eval $$(call SEARCH_POTENTIAL_LOCATION,$$(LAYOUTS_REPO)/$$(LAYOUT)/$$(KEYMAP))))
|
||||
endef
|
||||
|
||||
ifneq ($(FORCE_LAYOUT),)
|
||||
ifneq (,$(findstring $(FORCE_LAYOUT),$(LAYOUTS)))
|
||||
$(info Forcing layout: $(FORCE_LAYOUT))
|
||||
LAYOUTS := $(FORCE_LAYOUT)
|
||||
else
|
||||
$(call CATASTROPHIC_ERROR,Invalid layout,Forced layout does not exist)
|
||||
endif
|
||||
endif
|
||||
|
||||
$(foreach LAYOUT,$(LAYOUTS),$(eval $(call SEARCH_LAYOUTS)))
|
||||
|
||||
ifeq ("$$(wildcard $$(KEYMAP_PATH))", "")
|
||||
$(call CATASTROPHIC_ERROR,Invalid keymap,Could not find keymap)
|
||||
# this state should never be reached
|
||||
endif
|
||||
@@ -77,13 +77,13 @@ define GENERATE_MSG_MAKE_KB
|
||||
endef
|
||||
MSG_MAKE_KB = $(eval $(call GENERATE_MSG_MAKE_KB))$(MSG_MAKE_KB_ACTUAL)
|
||||
define GENERATE_MSG_MAKE_TEST
|
||||
MSG_MAKE_TEST_ACTUAL := Making test $(BOLD)$(TEST_NAME)$(NO_COLOR)
|
||||
MSG_MAKE_TEST_ACTUAL := Making test $(BOLD)$(TEST_ID)$(NO_COLOR)
|
||||
ifneq ($$(MAKE_TARGET),)
|
||||
MSG_MAKE_TEST_ACTUAL += with target $(BOLD)$$(MAKE_TARGET)$(NO_COLOR)
|
||||
endif
|
||||
endef
|
||||
MSG_MAKE_TEST = $(eval $(call GENERATE_MSG_MAKE_TEST))$(MSG_MAKE_TEST_ACTUAL)
|
||||
MSG_TEST = Testing $(BOLD)$(TEST_NAME)$(NO_COLOR)
|
||||
MSG_TEST = Testing $(BOLD)$(TEST_ID)$(NO_COLOR)
|
||||
define GENERATE_MSG_AVAILABLE_KEYMAPS
|
||||
MSG_AVAILABLE_KEYMAPS_ACTUAL := Available keymaps for $(BOLD)$$(CURRENT_KB)$(NO_COLOR):
|
||||
endef
|
||||
|
||||
@@ -63,6 +63,7 @@ OTHER_OPTION_NAMES = \
|
||||
LCD_BACKLIGHT_ENABLE \
|
||||
MACROS_ENABLED \
|
||||
PS2_ENABLE \
|
||||
PLOVER_HID_ENABLE \
|
||||
PS2_MOUSE_ENABLE \
|
||||
PS2_DRIVER \
|
||||
RAW_ENABLE \
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
# $(2) = option to use if $(1) is not supported
|
||||
# $(3) = additional arguments to pass to the compiler during the test, but aren't contained in the output
|
||||
cc-option = $(shell \
|
||||
if { echo 'int main(){return 0;}' | $(CC) $(1) $(3) -o /dev/null -x c /dev/null >/dev/null 2>&1; }; \
|
||||
if { echo 'int main(){return 0;}' | $(CC) $(1) $(3) -Wl,--unresolved-symbols=ignore-all -o /dev/null -x c /dev/null >/dev/null 2>&1; }; \
|
||||
then echo "$(1)"; else echo "$(2)"; fi)
|
||||
|
||||
# Helper to pass comma character to make functions (use with `$(,)` to pass in `$(call ...)` arguments)
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
TEST_LIST = $(sort $(patsubst %/test.mk,%, $(shell find $(ROOT_DIR)tests -type f -name test.mk)))
|
||||
FULL_TESTS := $(notdir $(TEST_LIST))
|
||||
|
||||
include $(QUANTUM_PATH)/battery/tests/testlist.mk
|
||||
include $(QUANTUM_PATH)/debounce/tests/testlist.mk
|
||||
include $(QUANTUM_PATH)/encoder/tests/testlist.mk
|
||||
include $(QUANTUM_PATH)/os_detection/tests/testlist.mk
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
"0x7480": {
|
||||
"group": "audio",
|
||||
"key": "QK_AUDIO_ON",
|
||||
"label": "Audio On",
|
||||
"aliases": [
|
||||
"AU_ON"
|
||||
]
|
||||
@@ -10,6 +11,7 @@
|
||||
"0x7481": {
|
||||
"group": "audio",
|
||||
"key": "QK_AUDIO_OFF",
|
||||
"label": "Audio Off",
|
||||
"aliases": [
|
||||
"AU_OFF"
|
||||
]
|
||||
@@ -17,6 +19,7 @@
|
||||
"0x7482": {
|
||||
"group": "audio",
|
||||
"key": "QK_AUDIO_TOGGLE",
|
||||
"label": "Toggle Audio",
|
||||
"aliases": [
|
||||
"AU_TOGG"
|
||||
]
|
||||
@@ -25,6 +28,7 @@
|
||||
"0x748A": {
|
||||
"group": "audio",
|
||||
"key": "QK_AUDIO_CLICKY_TOGGLE",
|
||||
"label": "Toggle Audio Clicky",
|
||||
"aliases": [
|
||||
"CK_TOGG"
|
||||
]
|
||||
@@ -32,6 +36,7 @@
|
||||
"0x748B": {
|
||||
"group": "audio",
|
||||
"key": "QK_AUDIO_CLICKY_ON",
|
||||
"label": "Audio Clicky On",
|
||||
"aliases": [
|
||||
"CK_ON"
|
||||
]
|
||||
@@ -39,6 +44,7 @@
|
||||
"0x748C": {
|
||||
"group": "audio",
|
||||
"key": "QK_AUDIO_CLICKY_OFF",
|
||||
"label": "Audio Clicky Off",
|
||||
"aliases": [
|
||||
"CK_OFF"
|
||||
]
|
||||
@@ -46,6 +52,7 @@
|
||||
"0x748D": {
|
||||
"group": "audio",
|
||||
"key": "QK_AUDIO_CLICKY_UP",
|
||||
"label": "Audio Clicky Up",
|
||||
"aliases": [
|
||||
"CK_UP"
|
||||
]
|
||||
@@ -53,6 +60,7 @@
|
||||
"0x748E": {
|
||||
"group": "audio",
|
||||
"key": "QK_AUDIO_CLICKY_DOWN",
|
||||
"label": "Audio Clicky Down",
|
||||
"aliases": [
|
||||
"CK_DOWN"
|
||||
]
|
||||
@@ -60,6 +68,7 @@
|
||||
"0x748F": {
|
||||
"group": "audio",
|
||||
"key": "QK_AUDIO_CLICKY_RESET",
|
||||
"label": "Audio Clicky Reset",
|
||||
"aliases": [
|
||||
"CK_RST"
|
||||
]
|
||||
@@ -68,6 +77,7 @@
|
||||
"0x7490": {
|
||||
"group": "audio",
|
||||
"key": "QK_MUSIC_ON",
|
||||
"label": "Music On",
|
||||
"aliases": [
|
||||
"MU_ON"
|
||||
]
|
||||
@@ -75,6 +85,7 @@
|
||||
"0x7491": {
|
||||
"group": "audio",
|
||||
"key": "QK_MUSIC_OFF",
|
||||
"label": "Music Off",
|
||||
"aliases": [
|
||||
"MU_OFF"
|
||||
]
|
||||
@@ -82,6 +93,7 @@
|
||||
"0x7492": {
|
||||
"group": "audio",
|
||||
"key": "QK_MUSIC_TOGGLE",
|
||||
"label": "Toggle Music",
|
||||
"aliases": [
|
||||
"MU_TOGG"
|
||||
]
|
||||
@@ -89,6 +101,7 @@
|
||||
"0x7493": {
|
||||
"group": "audio",
|
||||
"key": "QK_MUSIC_MODE_NEXT",
|
||||
"label": "Music Next",
|
||||
"aliases": [
|
||||
"MU_NEXT"
|
||||
]
|
||||
@@ -97,6 +110,7 @@
|
||||
"0x7494": {
|
||||
"group": "audio",
|
||||
"key": "QK_AUDIO_VOICE_NEXT",
|
||||
"label": "Audio Voice Next",
|
||||
"aliases": [
|
||||
"AU_NEXT"
|
||||
]
|
||||
@@ -104,6 +118,7 @@
|
||||
"0x7495": {
|
||||
"group": "audio",
|
||||
"key": "QK_AUDIO_VOICE_PREVIOUS",
|
||||
"label": "Audio Voice Previous",
|
||||
"aliases": [
|
||||
"AU_PREV"
|
||||
]
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"0x0000": {
|
||||
"group": "internal",
|
||||
"key": "KC_NO",
|
||||
"label": "",
|
||||
"label": "N/A",
|
||||
"aliases": [
|
||||
"XXXXXXX"
|
||||
]
|
||||
@@ -11,7 +11,7 @@
|
||||
"0x0001": {
|
||||
"group": "internal",
|
||||
"key": "KC_TRANSPARENT",
|
||||
"label": "",
|
||||
"label": "Transparent",
|
||||
"aliases": [
|
||||
"_______",
|
||||
"KC_TRNS"
|
||||
@@ -634,7 +634,7 @@
|
||||
"0x0065": {
|
||||
"group": "basic",
|
||||
"key": "KC_APPLICATION",
|
||||
"label": "Application",
|
||||
"label": "App",
|
||||
"aliases": [
|
||||
"KC_APP"
|
||||
]
|
||||
@@ -642,7 +642,7 @@
|
||||
"0x0066": {
|
||||
"group": "basic",
|
||||
"key": "KC_KB_POWER",
|
||||
"label": "Application"
|
||||
"label": "Power"
|
||||
},
|
||||
"0x0067": {
|
||||
"group": "basic",
|
||||
@@ -1068,7 +1068,7 @@
|
||||
"0x00A5": {
|
||||
"group": "system",
|
||||
"key": "KC_SYSTEM_POWER",
|
||||
"label": "System Power Down",
|
||||
"label": "Power",
|
||||
"aliases": [
|
||||
"KC_PWR"
|
||||
]
|
||||
@@ -1076,7 +1076,7 @@
|
||||
"0x00A6": {
|
||||
"group": "system",
|
||||
"key": "KC_SYSTEM_SLEEP",
|
||||
"label": "System Sleep",
|
||||
"label": "Sleep",
|
||||
"aliases": [
|
||||
"KC_SLEP"
|
||||
]
|
||||
@@ -1084,7 +1084,7 @@
|
||||
"0x00A7": {
|
||||
"group": "system",
|
||||
"key": "KC_SYSTEM_WAKE",
|
||||
"label": "System Wake",
|
||||
"label": "Wake",
|
||||
"aliases": [
|
||||
"KC_WAKE"
|
||||
]
|
||||
@@ -1140,7 +1140,7 @@
|
||||
"0x00AE": {
|
||||
"group": "media",
|
||||
"key": "KC_MEDIA_PLAY_PAUSE",
|
||||
"label": "Play/Pause Track",
|
||||
"label": "Play/Pause",
|
||||
"aliases": [
|
||||
"KC_MPLY"
|
||||
]
|
||||
@@ -1148,7 +1148,7 @@
|
||||
"0x00AF": {
|
||||
"group": "media",
|
||||
"key": "KC_MEDIA_SELECT",
|
||||
"label": "Launch Player",
|
||||
"label": "Media",
|
||||
"aliases": [
|
||||
"KC_MSEL"
|
||||
]
|
||||
@@ -1164,12 +1164,12 @@
|
||||
"0x00B1": {
|
||||
"group": "media",
|
||||
"key": "KC_MAIL",
|
||||
"label": "Launch Mail"
|
||||
"label": "Mail",
|
||||
},
|
||||
"0x00B2": {
|
||||
"group": "media",
|
||||
"key": "KC_CALCULATOR",
|
||||
"label": "Launch Calculator",
|
||||
"label": "Calculator",
|
||||
"aliases": [
|
||||
"KC_CALC"
|
||||
]
|
||||
@@ -1177,7 +1177,7 @@
|
||||
"0x00B3": {
|
||||
"group": "media",
|
||||
"key": "KC_MY_COMPUTER",
|
||||
"label": "Launch My Computer",
|
||||
"label": "My Computer",
|
||||
"aliases": [
|
||||
"KC_MYCM"
|
||||
]
|
||||
@@ -1185,7 +1185,7 @@
|
||||
"0x00B4": {
|
||||
"group": "media",
|
||||
"key": "KC_WWW_SEARCH",
|
||||
"label": "Browser Search",
|
||||
"label": "Search",
|
||||
"aliases": [
|
||||
"KC_WSCH"
|
||||
]
|
||||
@@ -1193,7 +1193,7 @@
|
||||
"0x00B5": {
|
||||
"group": "media",
|
||||
"key": "KC_WWW_HOME",
|
||||
"label": "Browser Home",
|
||||
"label": "Home",
|
||||
"aliases": [
|
||||
"KC_WHOM"
|
||||
]
|
||||
@@ -1201,7 +1201,7 @@
|
||||
"0x00B6": {
|
||||
"group": "media",
|
||||
"key": "KC_WWW_BACK",
|
||||
"label": "Browser Back",
|
||||
"label": "Back",
|
||||
"aliases": [
|
||||
"KC_WBAK"
|
||||
]
|
||||
@@ -1209,7 +1209,7 @@
|
||||
"0x00B7": {
|
||||
"group": "media",
|
||||
"key": "KC_WWW_FORWARD",
|
||||
"label": "Browser Forward",
|
||||
"label": "Forward",
|
||||
"aliases": [
|
||||
"KC_WFWD"
|
||||
]
|
||||
@@ -1217,7 +1217,7 @@
|
||||
"0x00B8": {
|
||||
"group": "media",
|
||||
"key": "KC_WWW_STOP",
|
||||
"label": "Browser Stop",
|
||||
"label": "Stop",
|
||||
"aliases": [
|
||||
"KC_WSTP"
|
||||
]
|
||||
@@ -1225,7 +1225,7 @@
|
||||
"0x00B9": {
|
||||
"group": "media",
|
||||
"key": "KC_WWW_REFRESH",
|
||||
"label": "Browser Refresh",
|
||||
"label": "Refresh",
|
||||
"aliases": [
|
||||
"KC_WREF"
|
||||
]
|
||||
@@ -1233,7 +1233,7 @@
|
||||
"0x00BA": {
|
||||
"group": "media",
|
||||
"key": "KC_WWW_FAVORITES",
|
||||
"label": "Browser Favorites",
|
||||
"label": "Favorites",
|
||||
"aliases": [
|
||||
"KC_WFAV"
|
||||
]
|
||||
@@ -1241,7 +1241,7 @@
|
||||
"0x00BB": {
|
||||
"group": "media",
|
||||
"key": "KC_MEDIA_FAST_FORWARD",
|
||||
"label": "Next Track",
|
||||
"label": "Fast Forward",
|
||||
"aliases": [
|
||||
"KC_MFFD"
|
||||
]
|
||||
@@ -1249,7 +1249,7 @@
|
||||
"0x00BC": {
|
||||
"group": "media",
|
||||
"key": "KC_MEDIA_REWIND",
|
||||
"label": "Previous Track",
|
||||
"label": "Rewind",
|
||||
"aliases": [
|
||||
"KC_MRWD"
|
||||
]
|
||||
@@ -1273,7 +1273,7 @@
|
||||
"0x00BF": {
|
||||
"group": "media",
|
||||
"key": "KC_CONTROL_PANEL",
|
||||
"label": "Open Control Panel",
|
||||
"label": "Control Panel",
|
||||
"aliases": [
|
||||
"KC_CPNL"
|
||||
]
|
||||
@@ -1281,7 +1281,7 @@
|
||||
"0x00C0": {
|
||||
"group": "media",
|
||||
"key": "KC_ASSISTANT",
|
||||
"label": "Launch Assistant",
|
||||
"label": "Assistant",
|
||||
"aliases": [
|
||||
"KC_ASST"
|
||||
]
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
"0x7400": {
|
||||
"group": "joystick",
|
||||
"key": "QK_JOYSTICK_BUTTON_0",
|
||||
"label": "Button 0",
|
||||
"aliases": [
|
||||
"JS_0"
|
||||
]
|
||||
@@ -10,6 +11,7 @@
|
||||
"0x7401": {
|
||||
"group": "joystick",
|
||||
"key": "QK_JOYSTICK_BUTTON_1",
|
||||
"label": "Button 1",
|
||||
"aliases": [
|
||||
"JS_1"
|
||||
]
|
||||
@@ -17,6 +19,7 @@
|
||||
"0x7402": {
|
||||
"group": "joystick",
|
||||
"key": "QK_JOYSTICK_BUTTON_2",
|
||||
"label": "Button 2",
|
||||
"aliases": [
|
||||
"JS_2"
|
||||
]
|
||||
@@ -24,6 +27,7 @@
|
||||
"0x7403": {
|
||||
"group": "joystick",
|
||||
"key": "QK_JOYSTICK_BUTTON_3",
|
||||
"label": "Button 3",
|
||||
"aliases": [
|
||||
"JS_3"
|
||||
]
|
||||
@@ -31,6 +35,7 @@
|
||||
"0x7404": {
|
||||
"group": "joystick",
|
||||
"key": "QK_JOYSTICK_BUTTON_4",
|
||||
"label": "Button 4",
|
||||
"aliases": [
|
||||
"JS_4"
|
||||
]
|
||||
@@ -38,6 +43,7 @@
|
||||
"0x7405": {
|
||||
"group": "joystick",
|
||||
"key": "QK_JOYSTICK_BUTTON_5",
|
||||
"label": "Button 5",
|
||||
"aliases": [
|
||||
"JS_5"
|
||||
]
|
||||
@@ -45,6 +51,7 @@
|
||||
"0x7406": {
|
||||
"group": "joystick",
|
||||
"key": "QK_JOYSTICK_BUTTON_6",
|
||||
"label": "Button 6",
|
||||
"aliases": [
|
||||
"JS_6"
|
||||
]
|
||||
@@ -52,6 +59,7 @@
|
||||
"0x7407": {
|
||||
"group": "joystick",
|
||||
"key": "QK_JOYSTICK_BUTTON_7",
|
||||
"label": "Button 7",
|
||||
"aliases": [
|
||||
"JS_7"
|
||||
]
|
||||
@@ -59,6 +67,7 @@
|
||||
"0x7408": {
|
||||
"group": "joystick",
|
||||
"key": "QK_JOYSTICK_BUTTON_8",
|
||||
"label": "Button 8",
|
||||
"aliases": [
|
||||
"JS_8"
|
||||
]
|
||||
@@ -66,6 +75,7 @@
|
||||
"0x7409": {
|
||||
"group": "joystick",
|
||||
"key": "QK_JOYSTICK_BUTTON_9",
|
||||
"label": "Button 9",
|
||||
"aliases": [
|
||||
"JS_9"
|
||||
]
|
||||
@@ -73,6 +83,7 @@
|
||||
"0x740A": {
|
||||
"group": "joystick",
|
||||
"key": "QK_JOYSTICK_BUTTON_10",
|
||||
"label": "Button 10",
|
||||
"aliases": [
|
||||
"JS_10"
|
||||
]
|
||||
@@ -80,6 +91,7 @@
|
||||
"0x740B": {
|
||||
"group": "joystick",
|
||||
"key": "QK_JOYSTICK_BUTTON_11",
|
||||
"label": "Button 11",
|
||||
"aliases": [
|
||||
"JS_11"
|
||||
]
|
||||
@@ -87,6 +99,7 @@
|
||||
"0x740C": {
|
||||
"group": "joystick",
|
||||
"key": "QK_JOYSTICK_BUTTON_12",
|
||||
"label": "Button 12",
|
||||
"aliases": [
|
||||
"JS_12"
|
||||
]
|
||||
@@ -94,6 +107,7 @@
|
||||
"0x740D": {
|
||||
"group": "joystick",
|
||||
"key": "QK_JOYSTICK_BUTTON_13",
|
||||
"label": "Button 13",
|
||||
"aliases": [
|
||||
"JS_13"
|
||||
]
|
||||
@@ -101,6 +115,7 @@
|
||||
"0x740E": {
|
||||
"group": "joystick",
|
||||
"key": "QK_JOYSTICK_BUTTON_14",
|
||||
"label": "Button 14",
|
||||
"aliases": [
|
||||
"JS_14"
|
||||
]
|
||||
@@ -108,6 +123,7 @@
|
||||
"0x740F": {
|
||||
"group": "joystick",
|
||||
"key": "QK_JOYSTICK_BUTTON_15",
|
||||
"label": "Button 15",
|
||||
"aliases": [
|
||||
"JS_15"
|
||||
]
|
||||
@@ -115,6 +131,7 @@
|
||||
"0x7410": {
|
||||
"group": "joystick",
|
||||
"key": "QK_JOYSTICK_BUTTON_16",
|
||||
"label": "Button 16",
|
||||
"aliases": [
|
||||
"JS_16"
|
||||
]
|
||||
@@ -122,6 +139,7 @@
|
||||
"0x7411": {
|
||||
"group": "joystick",
|
||||
"key": "QK_JOYSTICK_BUTTON_17",
|
||||
"label": "Button 17",
|
||||
"aliases": [
|
||||
"JS_17"
|
||||
]
|
||||
@@ -129,6 +147,7 @@
|
||||
"0x7412": {
|
||||
"group": "joystick",
|
||||
"key": "QK_JOYSTICK_BUTTON_18",
|
||||
"label": "Button 18",
|
||||
"aliases": [
|
||||
"JS_18"
|
||||
]
|
||||
@@ -136,6 +155,7 @@
|
||||
"0x7413": {
|
||||
"group": "joystick",
|
||||
"key": "QK_JOYSTICK_BUTTON_19",
|
||||
"label": "Button 19",
|
||||
"aliases": [
|
||||
"JS_19"
|
||||
]
|
||||
@@ -143,6 +163,7 @@
|
||||
"0x7414": {
|
||||
"group": "joystick",
|
||||
"key": "QK_JOYSTICK_BUTTON_20",
|
||||
"label": "Button 20",
|
||||
"aliases": [
|
||||
"JS_20"
|
||||
]
|
||||
@@ -150,6 +171,7 @@
|
||||
"0x7415": {
|
||||
"group": "joystick",
|
||||
"key": "QK_JOYSTICK_BUTTON_21",
|
||||
"label": "Button 21",
|
||||
"aliases": [
|
||||
"JS_21"
|
||||
]
|
||||
@@ -157,6 +179,7 @@
|
||||
"0x7416": {
|
||||
"group": "joystick",
|
||||
"key": "QK_JOYSTICK_BUTTON_22",
|
||||
"label": "Button 22",
|
||||
"aliases": [
|
||||
"JS_22"
|
||||
]
|
||||
@@ -164,6 +187,7 @@
|
||||
"0x7417": {
|
||||
"group": "joystick",
|
||||
"key": "QK_JOYSTICK_BUTTON_23",
|
||||
"label": "Button 23",
|
||||
"aliases": [
|
||||
"JS_23"
|
||||
]
|
||||
@@ -171,6 +195,7 @@
|
||||
"0x7418": {
|
||||
"group": "joystick",
|
||||
"key": "QK_JOYSTICK_BUTTON_24",
|
||||
"label": "Button 24",
|
||||
"aliases": [
|
||||
"JS_24"
|
||||
]
|
||||
@@ -178,6 +203,7 @@
|
||||
"0x7419": {
|
||||
"group": "joystick",
|
||||
"key": "QK_JOYSTICK_BUTTON_25",
|
||||
"label": "Button 25",
|
||||
"aliases": [
|
||||
"JS_25"
|
||||
]
|
||||
@@ -185,6 +211,7 @@
|
||||
"0x741A": {
|
||||
"group": "joystick",
|
||||
"key": "QK_JOYSTICK_BUTTON_26",
|
||||
"label": "Button 26",
|
||||
"aliases": [
|
||||
"JS_26"
|
||||
]
|
||||
@@ -192,6 +219,7 @@
|
||||
"0x741B": {
|
||||
"group": "joystick",
|
||||
"key": "QK_JOYSTICK_BUTTON_27",
|
||||
"label": "Button 27",
|
||||
"aliases": [
|
||||
"JS_27"
|
||||
]
|
||||
@@ -199,6 +227,7 @@
|
||||
"0x741C": {
|
||||
"group": "joystick",
|
||||
"key": "QK_JOYSTICK_BUTTON_28",
|
||||
"label": "Button 28",
|
||||
"aliases": [
|
||||
"JS_28"
|
||||
]
|
||||
@@ -206,6 +235,7 @@
|
||||
"0x741D": {
|
||||
"group": "joystick",
|
||||
"key": "QK_JOYSTICK_BUTTON_29",
|
||||
"label": "Button 29",
|
||||
"aliases": [
|
||||
"JS_29"
|
||||
]
|
||||
@@ -213,6 +243,7 @@
|
||||
"0x741E": {
|
||||
"group": "joystick",
|
||||
"key": "QK_JOYSTICK_BUTTON_30",
|
||||
"label": "Button 30",
|
||||
"aliases": [
|
||||
"JS_30"
|
||||
]
|
||||
@@ -220,6 +251,7 @@
|
||||
"0x741F": {
|
||||
"group": "joystick",
|
||||
"key": "QK_JOYSTICK_BUTTON_31",
|
||||
"label": "Button 31",
|
||||
"aliases": [
|
||||
"JS_31"
|
||||
]
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
"0x7800": {
|
||||
"group": "backlight",
|
||||
"key": "QK_BACKLIGHT_ON",
|
||||
"label": "Backlight On",
|
||||
"aliases": [
|
||||
"BL_ON"
|
||||
]
|
||||
@@ -10,6 +11,7 @@
|
||||
"0x7801": {
|
||||
"group": "backlight",
|
||||
"key": "QK_BACKLIGHT_OFF",
|
||||
"label": "Backlight Off",
|
||||
"aliases": [
|
||||
"BL_OFF"
|
||||
]
|
||||
@@ -17,6 +19,7 @@
|
||||
"0x7802": {
|
||||
"group": "backlight",
|
||||
"key": "QK_BACKLIGHT_TOGGLE",
|
||||
"label": "Toggle Backlight",
|
||||
"aliases": [
|
||||
"BL_TOGG"
|
||||
]
|
||||
@@ -24,6 +27,7 @@
|
||||
"0x7803": {
|
||||
"group": "backlight",
|
||||
"key": "QK_BACKLIGHT_DOWN",
|
||||
"label": "Backlight Down",
|
||||
"aliases": [
|
||||
"BL_DOWN"
|
||||
]
|
||||
@@ -31,6 +35,7 @@
|
||||
"0x7804": {
|
||||
"group": "backlight",
|
||||
"key": "QK_BACKLIGHT_UP",
|
||||
"label": "Backlight Up",
|
||||
"aliases": [
|
||||
"BL_UP"
|
||||
]
|
||||
@@ -38,6 +43,7 @@
|
||||
"0x7805": {
|
||||
"group": "backlight",
|
||||
"key": "QK_BACKLIGHT_STEP",
|
||||
"label": "Backlight Step",
|
||||
"aliases": [
|
||||
"BL_STEP"
|
||||
]
|
||||
@@ -45,6 +51,7 @@
|
||||
"0x7806": {
|
||||
"group": "backlight",
|
||||
"key": "QK_BACKLIGHT_TOGGLE_BREATHING",
|
||||
"label": "Toggle Breathing",
|
||||
"aliases": [
|
||||
"BL_BRTG"
|
||||
]
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"keycodes": {
|
||||
|
||||
"0x7700": {
|
||||
"group": "macro",
|
||||
"key": "QK_MACRO_0",
|
||||
"label": "Macro 0",
|
||||
"aliases": [
|
||||
"MC_0"
|
||||
]
|
||||
@@ -11,6 +11,7 @@
|
||||
"0x7701": {
|
||||
"group": "macro",
|
||||
"key": "QK_MACRO_1",
|
||||
"label": "Macro 1",
|
||||
"aliases": [
|
||||
"MC_1"
|
||||
]
|
||||
@@ -18,6 +19,7 @@
|
||||
"0x7702": {
|
||||
"group": "macro",
|
||||
"key": "QK_MACRO_2",
|
||||
"label": "Macro 2",
|
||||
"aliases": [
|
||||
"MC_2"
|
||||
]
|
||||
@@ -25,6 +27,7 @@
|
||||
"0x7703": {
|
||||
"group": "macro",
|
||||
"key": "QK_MACRO_3",
|
||||
"label": "Macro 3",
|
||||
"aliases": [
|
||||
"MC_3"
|
||||
]
|
||||
@@ -32,6 +35,7 @@
|
||||
"0x7704": {
|
||||
"group": "macro",
|
||||
"key": "QK_MACRO_4",
|
||||
"label": "Macro 4",
|
||||
"aliases": [
|
||||
"MC_4"
|
||||
]
|
||||
@@ -39,6 +43,7 @@
|
||||
"0x7705": {
|
||||
"group": "macro",
|
||||
"key": "QK_MACRO_5",
|
||||
"label": "Macro 5",
|
||||
"aliases": [
|
||||
"MC_5"
|
||||
]
|
||||
@@ -46,6 +51,7 @@
|
||||
"0x7706": {
|
||||
"group": "macro",
|
||||
"key": "QK_MACRO_6",
|
||||
"label": "Macro 6",
|
||||
"aliases": [
|
||||
"MC_6"
|
||||
]
|
||||
@@ -53,6 +59,7 @@
|
||||
"0x7707": {
|
||||
"group": "macro",
|
||||
"key": "QK_MACRO_7",
|
||||
"label": "Macro 7",
|
||||
"aliases": [
|
||||
"MC_7"
|
||||
]
|
||||
@@ -60,6 +67,7 @@
|
||||
"0x7708": {
|
||||
"group": "macro",
|
||||
"key": "QK_MACRO_8",
|
||||
"label": "Macro 8",
|
||||
"aliases": [
|
||||
"MC_8"
|
||||
]
|
||||
@@ -67,6 +75,7 @@
|
||||
"0x7709": {
|
||||
"group": "macro",
|
||||
"key": "QK_MACRO_9",
|
||||
"label": "Macro 9",
|
||||
"aliases": [
|
||||
"MC_9"
|
||||
]
|
||||
@@ -74,6 +83,7 @@
|
||||
"0x770A": {
|
||||
"group": "macro",
|
||||
"key": "QK_MACRO_10",
|
||||
"label": "Macro 10",
|
||||
"aliases": [
|
||||
"MC_10"
|
||||
]
|
||||
@@ -81,6 +91,7 @@
|
||||
"0x770B": {
|
||||
"group": "macro",
|
||||
"key": "QK_MACRO_11",
|
||||
"label": "Macro 11",
|
||||
"aliases": [
|
||||
"MC_11"
|
||||
]
|
||||
@@ -88,6 +99,7 @@
|
||||
"0x770C": {
|
||||
"group": "macro",
|
||||
"key": "QK_MACRO_12",
|
||||
"label": "Macro 12",
|
||||
"aliases": [
|
||||
"MC_12"
|
||||
]
|
||||
@@ -95,6 +107,7 @@
|
||||
"0x770D": {
|
||||
"group": "macro",
|
||||
"key": "QK_MACRO_13",
|
||||
"label": "Macro 13",
|
||||
"aliases": [
|
||||
"MC_13"
|
||||
]
|
||||
@@ -102,6 +115,7 @@
|
||||
"0x770E": {
|
||||
"group": "macro",
|
||||
"key": "QK_MACRO_14",
|
||||
"label": "Macro 14",
|
||||
"aliases": [
|
||||
"MC_14"
|
||||
]
|
||||
@@ -109,6 +123,7 @@
|
||||
"0x770F": {
|
||||
"group": "macro",
|
||||
"key": "QK_MACRO_15",
|
||||
"label": "Macro 15",
|
||||
"aliases": [
|
||||
"MC_15"
|
||||
]
|
||||
@@ -116,6 +131,7 @@
|
||||
"0x7710": {
|
||||
"group": "macro",
|
||||
"key": "QK_MACRO_16",
|
||||
"label": "Macro 16",
|
||||
"aliases": [
|
||||
"MC_16"
|
||||
]
|
||||
@@ -123,6 +139,7 @@
|
||||
"0x7711": {
|
||||
"group": "macro",
|
||||
"key": "QK_MACRO_17",
|
||||
"label": "Macro 17",
|
||||
"aliases": [
|
||||
"MC_17"
|
||||
]
|
||||
@@ -130,6 +147,7 @@
|
||||
"0x7712": {
|
||||
"group": "macro",
|
||||
"key": "QK_MACRO_18",
|
||||
"label": "Macro 18",
|
||||
"aliases": [
|
||||
"MC_18"
|
||||
]
|
||||
@@ -137,6 +155,7 @@
|
||||
"0x7713": {
|
||||
"group": "macro",
|
||||
"key": "QK_MACRO_19",
|
||||
"label": "Macro 19",
|
||||
"aliases": [
|
||||
"MC_19"
|
||||
]
|
||||
@@ -144,6 +163,7 @@
|
||||
"0x7714": {
|
||||
"group": "macro",
|
||||
"key": "QK_MACRO_20",
|
||||
"label": "Macro 20",
|
||||
"aliases": [
|
||||
"MC_20"
|
||||
]
|
||||
@@ -151,6 +171,7 @@
|
||||
"0x7715": {
|
||||
"group": "macro",
|
||||
"key": "QK_MACRO_21",
|
||||
"label": "Macro 21",
|
||||
"aliases": [
|
||||
"MC_21"
|
||||
]
|
||||
@@ -158,6 +179,7 @@
|
||||
"0x7716": {
|
||||
"group": "macro",
|
||||
"key": "QK_MACRO_22",
|
||||
"label": "Macro 22",
|
||||
"aliases": [
|
||||
"MC_22"
|
||||
]
|
||||
@@ -165,6 +187,7 @@
|
||||
"0x7717": {
|
||||
"group": "macro",
|
||||
"key": "QK_MACRO_23",
|
||||
"label": "Macro 23",
|
||||
"aliases": [
|
||||
"MC_23"
|
||||
]
|
||||
@@ -172,6 +195,7 @@
|
||||
"0x7718": {
|
||||
"group": "macro",
|
||||
"key": "QK_MACRO_24",
|
||||
"label": "Macro 24",
|
||||
"aliases": [
|
||||
"MC_24"
|
||||
]
|
||||
@@ -179,6 +203,7 @@
|
||||
"0x7719": {
|
||||
"group": "macro",
|
||||
"key": "QK_MACRO_25",
|
||||
"label": "Macro 25",
|
||||
"aliases": [
|
||||
"MC_25"
|
||||
]
|
||||
@@ -186,6 +211,7 @@
|
||||
"0x771A": {
|
||||
"group": "macro",
|
||||
"key": "QK_MACRO_26",
|
||||
"label": "Macro 26",
|
||||
"aliases": [
|
||||
"MC_26"
|
||||
]
|
||||
@@ -193,6 +219,7 @@
|
||||
"0x771B": {
|
||||
"group": "macro",
|
||||
"key": "QK_MACRO_27",
|
||||
"label": "Macro 27",
|
||||
"aliases": [
|
||||
"MC_27"
|
||||
]
|
||||
@@ -200,6 +227,7 @@
|
||||
"0x771C": {
|
||||
"group": "macro",
|
||||
"key": "QK_MACRO_28",
|
||||
"label": "Macro 28",
|
||||
"aliases": [
|
||||
"MC_28"
|
||||
]
|
||||
@@ -207,6 +235,7 @@
|
||||
"0x771D": {
|
||||
"group": "macro",
|
||||
"key": "QK_MACRO_29",
|
||||
"label": "Macro 29",
|
||||
"aliases": [
|
||||
"MC_29"
|
||||
]
|
||||
@@ -214,6 +243,7 @@
|
||||
"0x771E": {
|
||||
"group": "macro",
|
||||
"key": "QK_MACRO_30",
|
||||
"label": "Macro 30",
|
||||
"aliases": [
|
||||
"MC_30"
|
||||
]
|
||||
@@ -221,6 +251,7 @@
|
||||
"0x771F": {
|
||||
"group": "macro",
|
||||
"key": "QK_MACRO_31",
|
||||
"label": "Macro 31",
|
||||
"aliases": [
|
||||
"MC_31"
|
||||
]
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
"0x7440": {
|
||||
"group": "programmable_button",
|
||||
"key": "QK_PROGRAMMABLE_BUTTON_1",
|
||||
"label": "Button 1",
|
||||
"aliases": [
|
||||
"PB_1"
|
||||
]
|
||||
@@ -10,6 +11,7 @@
|
||||
"0x7441": {
|
||||
"group": "programmable_button",
|
||||
"key": "QK_PROGRAMMABLE_BUTTON_2",
|
||||
"label": "Button 2",
|
||||
"aliases": [
|
||||
"PB_2"
|
||||
]
|
||||
@@ -17,6 +19,7 @@
|
||||
"0x7442": {
|
||||
"group": "programmable_button",
|
||||
"key": "QK_PROGRAMMABLE_BUTTON_3",
|
||||
"label": "Button 3",
|
||||
"aliases": [
|
||||
"PB_3"
|
||||
]
|
||||
@@ -24,6 +27,7 @@
|
||||
"0x7443": {
|
||||
"group": "programmable_button",
|
||||
"key": "QK_PROGRAMMABLE_BUTTON_4",
|
||||
"label": "Button 4",
|
||||
"aliases": [
|
||||
"PB_4"
|
||||
]
|
||||
@@ -31,6 +35,7 @@
|
||||
"0x7444": {
|
||||
"group": "programmable_button",
|
||||
"key": "QK_PROGRAMMABLE_BUTTON_5",
|
||||
"label": "Button 5",
|
||||
"aliases": [
|
||||
"PB_5"
|
||||
]
|
||||
@@ -38,6 +43,7 @@
|
||||
"0x7445": {
|
||||
"group": "programmable_button",
|
||||
"key": "QK_PROGRAMMABLE_BUTTON_6",
|
||||
"label": "Button 6",
|
||||
"aliases": [
|
||||
"PB_6"
|
||||
]
|
||||
@@ -45,6 +51,7 @@
|
||||
"0x7446": {
|
||||
"group": "programmable_button",
|
||||
"key": "QK_PROGRAMMABLE_BUTTON_7",
|
||||
"label": "Button 7",
|
||||
"aliases": [
|
||||
"PB_7"
|
||||
]
|
||||
@@ -52,6 +59,7 @@
|
||||
"0x7447": {
|
||||
"group": "programmable_button",
|
||||
"key": "QK_PROGRAMMABLE_BUTTON_8",
|
||||
"label": "Button 8",
|
||||
"aliases": [
|
||||
"PB_8"
|
||||
]
|
||||
@@ -59,6 +67,7 @@
|
||||
"0x7448": {
|
||||
"group": "programmable_button",
|
||||
"key": "QK_PROGRAMMABLE_BUTTON_9",
|
||||
"label": "Button 9",
|
||||
"aliases": [
|
||||
"PB_9"
|
||||
]
|
||||
@@ -66,6 +75,7 @@
|
||||
"0x7449": {
|
||||
"group": "programmable_button",
|
||||
"key": "QK_PROGRAMMABLE_BUTTON_10",
|
||||
"label": "Button 10",
|
||||
"aliases": [
|
||||
"PB_10"
|
||||
]
|
||||
@@ -73,6 +83,7 @@
|
||||
"0x744A": {
|
||||
"group": "programmable_button",
|
||||
"key": "QK_PROGRAMMABLE_BUTTON_11",
|
||||
"label": "Button 11",
|
||||
"aliases": [
|
||||
"PB_11"
|
||||
]
|
||||
@@ -80,6 +91,7 @@
|
||||
"0x744B": {
|
||||
"group": "programmable_button",
|
||||
"key": "QK_PROGRAMMABLE_BUTTON_12",
|
||||
"label": "Button 12",
|
||||
"aliases": [
|
||||
"PB_12"
|
||||
]
|
||||
@@ -87,6 +99,7 @@
|
||||
"0x744C": {
|
||||
"group": "programmable_button",
|
||||
"key": "QK_PROGRAMMABLE_BUTTON_13",
|
||||
"label": "Button 13",
|
||||
"aliases": [
|
||||
"PB_13"
|
||||
]
|
||||
@@ -94,6 +107,7 @@
|
||||
"0x744D": {
|
||||
"group": "programmable_button",
|
||||
"key": "QK_PROGRAMMABLE_BUTTON_14",
|
||||
"label": "Button 14",
|
||||
"aliases": [
|
||||
"PB_14"
|
||||
]
|
||||
@@ -101,6 +115,7 @@
|
||||
"0x744E": {
|
||||
"group": "programmable_button",
|
||||
"key": "QK_PROGRAMMABLE_BUTTON_15",
|
||||
"label": "Button 15",
|
||||
"aliases": [
|
||||
"PB_15"
|
||||
]
|
||||
@@ -108,6 +123,7 @@
|
||||
"0x744F": {
|
||||
"group": "programmable_button",
|
||||
"key": "QK_PROGRAMMABLE_BUTTON_16",
|
||||
"label": "Button 16",
|
||||
"aliases": [
|
||||
"PB_16"
|
||||
]
|
||||
@@ -115,6 +131,7 @@
|
||||
"0x7450": {
|
||||
"group": "programmable_button",
|
||||
"key": "QK_PROGRAMMABLE_BUTTON_17",
|
||||
"label": "Button 17",
|
||||
"aliases": [
|
||||
"PB_17"
|
||||
]
|
||||
@@ -122,6 +139,7 @@
|
||||
"0x7451": {
|
||||
"group": "programmable_button",
|
||||
"key": "QK_PROGRAMMABLE_BUTTON_18",
|
||||
"label": "Button 18",
|
||||
"aliases": [
|
||||
"PB_18"
|
||||
]
|
||||
@@ -129,6 +147,7 @@
|
||||
"0x7452": {
|
||||
"group": "programmable_button",
|
||||
"key": "QK_PROGRAMMABLE_BUTTON_19",
|
||||
"label": "Button 19",
|
||||
"aliases": [
|
||||
"PB_19"
|
||||
]
|
||||
@@ -136,6 +155,7 @@
|
||||
"0x7453": {
|
||||
"group": "programmable_button",
|
||||
"key": "QK_PROGRAMMABLE_BUTTON_20",
|
||||
"label": "Button 20",
|
||||
"aliases": [
|
||||
"PB_20"
|
||||
]
|
||||
@@ -143,6 +163,7 @@
|
||||
"0x7454": {
|
||||
"group": "programmable_button",
|
||||
"key": "QK_PROGRAMMABLE_BUTTON_21",
|
||||
"label": "Button 21",
|
||||
"aliases": [
|
||||
"PB_21"
|
||||
]
|
||||
@@ -150,6 +171,7 @@
|
||||
"0x7455": {
|
||||
"group": "programmable_button",
|
||||
"key": "QK_PROGRAMMABLE_BUTTON_22",
|
||||
"label": "Button 22",
|
||||
"aliases": [
|
||||
"PB_22"
|
||||
]
|
||||
@@ -157,6 +179,7 @@
|
||||
"0x7456": {
|
||||
"group": "programmable_button",
|
||||
"key": "QK_PROGRAMMABLE_BUTTON_23",
|
||||
"label": "Button 23",
|
||||
"aliases": [
|
||||
"PB_23"
|
||||
]
|
||||
@@ -164,6 +187,7 @@
|
||||
"0x7457": {
|
||||
"group": "programmable_button",
|
||||
"key": "QK_PROGRAMMABLE_BUTTON_24",
|
||||
"label": "Button 24",
|
||||
"aliases": [
|
||||
"PB_24"
|
||||
]
|
||||
@@ -171,6 +195,7 @@
|
||||
"0x7458": {
|
||||
"group": "programmable_button",
|
||||
"key": "QK_PROGRAMMABLE_BUTTON_25",
|
||||
"label": "Button 25",
|
||||
"aliases": [
|
||||
"PB_25"
|
||||
]
|
||||
@@ -178,6 +203,7 @@
|
||||
"0x7459": {
|
||||
"group": "programmable_button",
|
||||
"key": "QK_PROGRAMMABLE_BUTTON_26",
|
||||
"label": "Button 26",
|
||||
"aliases": [
|
||||
"PB_26"
|
||||
]
|
||||
@@ -185,6 +211,7 @@
|
||||
"0x745A": {
|
||||
"group": "programmable_button",
|
||||
"key": "QK_PROGRAMMABLE_BUTTON_27",
|
||||
"label": "Button 27",
|
||||
"aliases": [
|
||||
"PB_27"
|
||||
]
|
||||
@@ -192,6 +219,7 @@
|
||||
"0x745B": {
|
||||
"group": "programmable_button",
|
||||
"key": "QK_PROGRAMMABLE_BUTTON_28",
|
||||
"label": "Button 28",
|
||||
"aliases": [
|
||||
"PB_28"
|
||||
]
|
||||
@@ -199,6 +227,7 @@
|
||||
"0x745C": {
|
||||
"group": "programmable_button",
|
||||
"key": "QK_PROGRAMMABLE_BUTTON_29",
|
||||
"label": "Button 29",
|
||||
"aliases": [
|
||||
"PB_29"
|
||||
]
|
||||
@@ -206,6 +235,7 @@
|
||||
"0x745D": {
|
||||
"group": "programmable_button",
|
||||
"key": "QK_PROGRAMMABLE_BUTTON_30",
|
||||
"label": "Button 30",
|
||||
"aliases": [
|
||||
"PB_30"
|
||||
]
|
||||
@@ -213,6 +243,7 @@
|
||||
"0x745E": {
|
||||
"group": "programmable_button",
|
||||
"key": "QK_PROGRAMMABLE_BUTTON_31",
|
||||
"label": "Button 31",
|
||||
"aliases": [
|
||||
"PB_31"
|
||||
]
|
||||
@@ -220,6 +251,7 @@
|
||||
"0x745F": {
|
||||
"group": "programmable_button",
|
||||
"key": "QK_PROGRAMMABLE_BUTTON_32",
|
||||
"label": "Button 32",
|
||||
"aliases": [
|
||||
"PB_32"
|
||||
]
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
"0x7C00": {
|
||||
"group": "quantum",
|
||||
"key": "QK_BOOTLOADER",
|
||||
"label": "Bootloader",
|
||||
"aliases": [
|
||||
"QK_BOOT"
|
||||
]
|
||||
@@ -10,6 +11,7 @@
|
||||
"0x7C01": {
|
||||
"group": "quantum",
|
||||
"key": "QK_REBOOT",
|
||||
"label": "Reboot",
|
||||
"aliases": [
|
||||
"QK_RBT"
|
||||
]
|
||||
@@ -17,6 +19,7 @@
|
||||
"0x7C02": {
|
||||
"group": "quantum",
|
||||
"key": "QK_DEBUG_TOGGLE",
|
||||
"label": "Toggle Debug",
|
||||
"aliases": [
|
||||
"DB_TOGG"
|
||||
]
|
||||
@@ -24,18 +27,21 @@
|
||||
"0x7C03": {
|
||||
"group": "quantum",
|
||||
"key": "QK_CLEAR_EEPROM",
|
||||
"label": "Clear EEPROM",
|
||||
"aliases": [
|
||||
"EE_CLR"
|
||||
]
|
||||
},
|
||||
"0x7C04": {
|
||||
"group": "quantum",
|
||||
"key": "QK_MAKE"
|
||||
"key": "QK_MAKE",
|
||||
"label": "Make"
|
||||
},
|
||||
|
||||
"0x7C10": {
|
||||
"group": "quantum",
|
||||
"key": "QK_AUTO_SHIFT_DOWN",
|
||||
"label": "Auto Shift Down",
|
||||
"aliases": [
|
||||
"AS_DOWN"
|
||||
]
|
||||
@@ -43,6 +49,7 @@
|
||||
"0x7C11": {
|
||||
"group": "quantum",
|
||||
"key": "QK_AUTO_SHIFT_UP",
|
||||
"label": "Auto Shift Up",
|
||||
"aliases": [
|
||||
"AS_UP"
|
||||
]
|
||||
@@ -50,6 +57,7 @@
|
||||
"0x7C12": {
|
||||
"group": "quantum",
|
||||
"key": "QK_AUTO_SHIFT_REPORT",
|
||||
"label": "Auto Shift Report",
|
||||
"aliases": [
|
||||
"AS_RPT"
|
||||
]
|
||||
@@ -57,6 +65,7 @@
|
||||
"0x7C13": {
|
||||
"group": "quantum",
|
||||
"key": "QK_AUTO_SHIFT_ON",
|
||||
"label": "Auto Shift On",
|
||||
"aliases": [
|
||||
"AS_ON"
|
||||
]
|
||||
@@ -64,6 +73,7 @@
|
||||
"0x7C14": {
|
||||
"group": "quantum",
|
||||
"key": "QK_AUTO_SHIFT_OFF",
|
||||
"label": "Auto Shift Off",
|
||||
"aliases": [
|
||||
"AS_OFF"
|
||||
]
|
||||
@@ -71,6 +81,7 @@
|
||||
"0x7C15": {
|
||||
"group": "quantum",
|
||||
"key": "QK_AUTO_SHIFT_TOGGLE",
|
||||
"label": "Toggle Auto Shift",
|
||||
"aliases": [
|
||||
"AS_TOGG"
|
||||
]
|
||||
@@ -79,6 +90,7 @@
|
||||
"0x7C16": {
|
||||
"group": "quantum",
|
||||
"key": "QK_GRAVE_ESCAPE",
|
||||
"label": "Grave Esc",
|
||||
"aliases": [
|
||||
"QK_GESC"
|
||||
]
|
||||
@@ -95,6 +107,7 @@
|
||||
"0x7C18": {
|
||||
"group": "quantum",
|
||||
"key": "QK_SPACE_CADET_LEFT_CTRL_PARENTHESIS_OPEN",
|
||||
"label": "LCtl/(",
|
||||
"aliases": [
|
||||
"SC_LCPO"
|
||||
]
|
||||
@@ -102,6 +115,7 @@
|
||||
"0x7C19": {
|
||||
"group": "quantum",
|
||||
"key": "QK_SPACE_CADET_RIGHT_CTRL_PARENTHESIS_CLOSE",
|
||||
"label": "RCtl/)",
|
||||
"aliases": [
|
||||
"SC_RCPC"
|
||||
]
|
||||
@@ -109,6 +123,7 @@
|
||||
"0x7C1A": {
|
||||
"group": "quantum",
|
||||
"key": "QK_SPACE_CADET_LEFT_SHIFT_PARENTHESIS_OPEN",
|
||||
"label": "LSft/)",
|
||||
"aliases": [
|
||||
"SC_LSPO"
|
||||
]
|
||||
@@ -116,6 +131,7 @@
|
||||
"0x7C1B": {
|
||||
"group": "quantum",
|
||||
"key": "QK_SPACE_CADET_RIGHT_SHIFT_PARENTHESIS_CLOSE",
|
||||
"label": "RSft/)",
|
||||
"aliases": [
|
||||
"SC_RSPC"
|
||||
]
|
||||
@@ -123,6 +139,7 @@
|
||||
"0x7C1C": {
|
||||
"group": "quantum",
|
||||
"key": "QK_SPACE_CADET_LEFT_ALT_PARENTHESIS_OPEN",
|
||||
"label": "LAlt/(",
|
||||
"aliases": [
|
||||
"SC_LAPO"
|
||||
]
|
||||
@@ -130,6 +147,7 @@
|
||||
"0x7C1D": {
|
||||
"group": "quantum",
|
||||
"key": "QK_SPACE_CADET_RIGHT_ALT_PARENTHESIS_CLOSE",
|
||||
"label": "RAlt/)",
|
||||
"aliases": [
|
||||
"SC_RAPC"
|
||||
]
|
||||
@@ -137,6 +155,7 @@
|
||||
"0x7C1E": {
|
||||
"group": "quantum",
|
||||
"key": "QK_SPACE_CADET_RIGHT_SHIFT_ENTER",
|
||||
"label": "RSft/Ent",
|
||||
"aliases": [
|
||||
"SC_SENT"
|
||||
]
|
||||
@@ -167,6 +186,7 @@
|
||||
"0x7C30": {
|
||||
"group": "quantum",
|
||||
"key": "QK_UNICODE_MODE_NEXT",
|
||||
"label": "Unicode Mode Next",
|
||||
"aliases": [
|
||||
"UC_NEXT"
|
||||
]
|
||||
@@ -174,6 +194,7 @@
|
||||
"0x7C31": {
|
||||
"group": "quantum",
|
||||
"key": "QK_UNICODE_MODE_PREVIOUS",
|
||||
"label": "Unicode Mode Previous",
|
||||
"aliases": [
|
||||
"UC_PREV"
|
||||
]
|
||||
@@ -181,6 +202,7 @@
|
||||
"0x7C32": {
|
||||
"group": "quantum",
|
||||
"key": "QK_UNICODE_MODE_MACOS",
|
||||
"label": "Unicode Mode macOS",
|
||||
"aliases": [
|
||||
"UC_MAC"
|
||||
]
|
||||
@@ -188,6 +210,7 @@
|
||||
"0x7C33": {
|
||||
"group": "quantum",
|
||||
"key": "QK_UNICODE_MODE_LINUX",
|
||||
"label": "Unicode Mode Linux",
|
||||
"aliases": [
|
||||
"UC_LINX"
|
||||
]
|
||||
@@ -195,6 +218,7 @@
|
||||
"0x7C34": {
|
||||
"group": "quantum",
|
||||
"key": "QK_UNICODE_MODE_WINDOWS",
|
||||
"label": "Unicode Mode Windows",
|
||||
"aliases": [
|
||||
"UC_WIN"
|
||||
]
|
||||
@@ -202,6 +226,7 @@
|
||||
"0x7C35": {
|
||||
"group": "quantum",
|
||||
"key": "QK_UNICODE_MODE_BSD",
|
||||
"label": "Unicode Mode BSD",
|
||||
"aliases": [
|
||||
"UC_BSD"
|
||||
]
|
||||
@@ -209,6 +234,7 @@
|
||||
"0x7C36": {
|
||||
"group": "quantum",
|
||||
"key": "QK_UNICODE_MODE_WINCOMPOSE",
|
||||
"label": "Unicode Mode WinCompose",
|
||||
"aliases": [
|
||||
"UC_WINC"
|
||||
]
|
||||
@@ -216,6 +242,7 @@
|
||||
"0x7C37": {
|
||||
"group": "quantum",
|
||||
"key": "QK_UNICODE_MODE_EMACS",
|
||||
"label": "Unicode Mode emacs",
|
||||
"aliases": [
|
||||
"UC_EMAC"
|
||||
]
|
||||
@@ -224,6 +251,7 @@
|
||||
"0x7C40": {
|
||||
"group": "quantum",
|
||||
"key": "QK_HAPTIC_ON",
|
||||
"label": "Haptic On",
|
||||
"aliases": [
|
||||
"HF_ON"
|
||||
]
|
||||
@@ -231,6 +259,7 @@
|
||||
"0x7C41": {
|
||||
"group": "quantum",
|
||||
"key": "QK_HAPTIC_OFF",
|
||||
"label": "Haptic Off",
|
||||
"aliases": [
|
||||
"HF_OFF"
|
||||
]
|
||||
@@ -238,6 +267,7 @@
|
||||
"0x7C42": {
|
||||
"group": "quantum",
|
||||
"key": "QK_HAPTIC_TOGGLE",
|
||||
"label": "Toggle Haptic",
|
||||
"aliases": [
|
||||
"HF_TOGG"
|
||||
]
|
||||
@@ -245,6 +275,7 @@
|
||||
"0x7C43": {
|
||||
"group": "quantum",
|
||||
"key": "QK_HAPTIC_RESET",
|
||||
"label": "Haptic Reset",
|
||||
"aliases": [
|
||||
"HF_RST"
|
||||
]
|
||||
@@ -252,6 +283,7 @@
|
||||
"0x7C44": {
|
||||
"group": "quantum",
|
||||
"key": "QK_HAPTIC_FEEDBACK_TOGGLE",
|
||||
"label": "Toggle Haptic Feedback",
|
||||
"aliases": [
|
||||
"HF_FDBK"
|
||||
]
|
||||
@@ -259,6 +291,7 @@
|
||||
"0x7C45": {
|
||||
"group": "quantum",
|
||||
"key": "QK_HAPTIC_BUZZ_TOGGLE",
|
||||
"label": "Toggle Haptic Buzz",
|
||||
"aliases": [
|
||||
"HF_BUZZ"
|
||||
]
|
||||
@@ -266,6 +299,7 @@
|
||||
"0x7C46": {
|
||||
"group": "quantum",
|
||||
"key": "QK_HAPTIC_MODE_NEXT",
|
||||
"label": "Haptic Mode Next",
|
||||
"aliases": [
|
||||
"HF_NEXT"
|
||||
]
|
||||
@@ -273,6 +307,7 @@
|
||||
"0x7C47": {
|
||||
"group": "quantum",
|
||||
"key": "QK_HAPTIC_MODE_PREVIOUS",
|
||||
"label": "Haptic Mode Previous",
|
||||
"aliases": [
|
||||
"HF_PREV"
|
||||
]
|
||||
@@ -280,6 +315,7 @@
|
||||
"0x7C48": {
|
||||
"group": "quantum",
|
||||
"key": "QK_HAPTIC_CONTINUOUS_TOGGLE",
|
||||
"label": "Toggle Haptic Continuous",
|
||||
"aliases": [
|
||||
"HF_CONT"
|
||||
]
|
||||
@@ -287,6 +323,7 @@
|
||||
"0x7C49": {
|
||||
"group": "quantum",
|
||||
"key": "QK_HAPTIC_CONTINUOUS_UP",
|
||||
"label": "Haptic Continuous Up",
|
||||
"aliases": [
|
||||
"HF_CONU"
|
||||
]
|
||||
@@ -294,6 +331,7 @@
|
||||
"0x7C4A": {
|
||||
"group": "quantum",
|
||||
"key": "QK_HAPTIC_CONTINUOUS_DOWN",
|
||||
"label": "Haptic Continuous Down",
|
||||
"aliases": [
|
||||
"HF_COND"
|
||||
]
|
||||
@@ -301,6 +339,7 @@
|
||||
"0x7C4B": {
|
||||
"group": "quantum",
|
||||
"key": "QK_HAPTIC_DWELL_UP",
|
||||
"label": "Haptic Dwell Up",
|
||||
"aliases": [
|
||||
"HF_DWLU"
|
||||
]
|
||||
@@ -308,6 +347,7 @@
|
||||
"0x7C4C": {
|
||||
"group": "quantum",
|
||||
"key": "QK_HAPTIC_DWELL_DOWN",
|
||||
"label": "Haptic Dwell Down",
|
||||
"aliases": [
|
||||
"HF_DWLD"
|
||||
]
|
||||
@@ -316,6 +356,7 @@
|
||||
"0x7C50": {
|
||||
"group": "quantum",
|
||||
"key": "QK_COMBO_ON",
|
||||
"label": "Combo On",
|
||||
"aliases": [
|
||||
"CM_ON"
|
||||
]
|
||||
@@ -323,6 +364,7 @@
|
||||
"0x7C51": {
|
||||
"group": "quantum",
|
||||
"key": "QK_COMBO_OFF",
|
||||
"label": "Combo Off",
|
||||
"aliases": [
|
||||
"CM_OFF"
|
||||
]
|
||||
@@ -330,6 +372,7 @@
|
||||
"0x7C52": {
|
||||
"group": "quantum",
|
||||
"key": "QK_COMBO_TOGGLE",
|
||||
"label": "Toggle Combo",
|
||||
"aliases": [
|
||||
"CM_TOGG"
|
||||
]
|
||||
@@ -338,6 +381,7 @@
|
||||
"0x7C53": {
|
||||
"group": "quantum",
|
||||
"key": "QK_DYNAMIC_MACRO_RECORD_START_1",
|
||||
"label": "Dynamic Macro Record 1",
|
||||
"aliases": [
|
||||
"DM_REC1"
|
||||
]
|
||||
@@ -345,6 +389,7 @@
|
||||
"0x7C54": {
|
||||
"group": "quantum",
|
||||
"key": "QK_DYNAMIC_MACRO_RECORD_START_2",
|
||||
"label": "Dynamic Macro Record 2",
|
||||
"aliases": [
|
||||
"DM_REC2"
|
||||
]
|
||||
@@ -352,6 +397,7 @@
|
||||
"0x7C55": {
|
||||
"group": "quantum",
|
||||
"key": "QK_DYNAMIC_MACRO_RECORD_STOP",
|
||||
"label": "Dynamic Macro Stop Recording",
|
||||
"aliases": [
|
||||
"DM_RSTP"
|
||||
]
|
||||
@@ -359,6 +405,7 @@
|
||||
"0x7C56": {
|
||||
"group": "quantum",
|
||||
"key": "QK_DYNAMIC_MACRO_PLAY_1",
|
||||
"label": "Dynamic Macro Play 1",
|
||||
"aliases": [
|
||||
"DM_PLY1"
|
||||
]
|
||||
@@ -366,6 +413,7 @@
|
||||
"0x7C57": {
|
||||
"group": "quantum",
|
||||
"key": "QK_DYNAMIC_MACRO_PLAY_2",
|
||||
"label": "Dynamic Macro Play 2",
|
||||
"aliases": [
|
||||
"DM_PLY2"
|
||||
]
|
||||
@@ -374,6 +422,7 @@
|
||||
"0x7C58": {
|
||||
"group": "quantum",
|
||||
"key": "QK_LEADER",
|
||||
"label": "Leader",
|
||||
"aliases": [
|
||||
"QK_LEAD"
|
||||
]
|
||||
@@ -381,12 +430,14 @@
|
||||
|
||||
"0x7C59": {
|
||||
"group": "quantum",
|
||||
"key": "QK_LOCK"
|
||||
"key": "QK_LOCK",
|
||||
"label": "Lock"
|
||||
},
|
||||
|
||||
"0x7C5A": {
|
||||
"group": "quantum",
|
||||
"key": "QK_ONE_SHOT_ON",
|
||||
"label": "One Shot On",
|
||||
"aliases": [
|
||||
"OS_ON"
|
||||
]
|
||||
@@ -394,6 +445,7 @@
|
||||
"0x7C5B": {
|
||||
"group": "quantum",
|
||||
"key": "QK_ONE_SHOT_OFF",
|
||||
"label": "One Shot Off",
|
||||
"aliases": [
|
||||
"OS_OFF"
|
||||
]
|
||||
@@ -401,6 +453,7 @@
|
||||
"0x7C5C": {
|
||||
"group": "quantum",
|
||||
"key": "QK_ONE_SHOT_TOGGLE",
|
||||
"label": "Toggle One Shot",
|
||||
"aliases": [
|
||||
"OS_TOGG"
|
||||
]
|
||||
@@ -409,6 +462,7 @@
|
||||
"0x7C5D": {
|
||||
"group": "quantum",
|
||||
"key": "QK_KEY_OVERRIDE_TOGGLE",
|
||||
"label": "Toggle Key Overrides",
|
||||
"aliases": [
|
||||
"KO_TOGG"
|
||||
]
|
||||
@@ -416,6 +470,7 @@
|
||||
"0x7C5E": {
|
||||
"group": "quantum",
|
||||
"key": "QK_KEY_OVERRIDE_ON",
|
||||
"label": "Key Overrides On",
|
||||
"aliases": [
|
||||
"KO_ON"
|
||||
]
|
||||
@@ -423,6 +478,7 @@
|
||||
"0x7C5F": {
|
||||
"group": "quantum",
|
||||
"key": "QK_KEY_OVERRIDE_OFF",
|
||||
"label": "Key Overrides Off",
|
||||
"aliases": [
|
||||
"KO_OFF"
|
||||
]
|
||||
@@ -431,6 +487,7 @@
|
||||
"0x7C60": {
|
||||
"group": "quantum",
|
||||
"key": "QK_SECURE_LOCK",
|
||||
"label": "Lock",
|
||||
"aliases": [
|
||||
"SE_LOCK"
|
||||
]
|
||||
@@ -438,6 +495,7 @@
|
||||
"0x7C61": {
|
||||
"group": "quantum",
|
||||
"key": "QK_SECURE_UNLOCK",
|
||||
"label": "Unlock",
|
||||
"aliases": [
|
||||
"SE_UNLK"
|
||||
]
|
||||
@@ -445,6 +503,7 @@
|
||||
"0x7C62": {
|
||||
"group": "quantum",
|
||||
"key": "QK_SECURE_TOGGLE",
|
||||
"label": "Toggle Lock",
|
||||
"aliases": [
|
||||
"SE_TOGG"
|
||||
]
|
||||
@@ -452,6 +511,7 @@
|
||||
"0x7C63": {
|
||||
"group": "quantum",
|
||||
"key": "QK_SECURE_REQUEST",
|
||||
"label": "Request Unlock",
|
||||
"aliases": [
|
||||
"SE_REQ"
|
||||
]
|
||||
@@ -460,6 +520,7 @@
|
||||
"0x7C70": {
|
||||
"group": "quantum",
|
||||
"key": "QK_DYNAMIC_TAPPING_TERM_PRINT",
|
||||
"label": "Print Dynamic Tapping Term",
|
||||
"aliases": [
|
||||
"DT_PRNT"
|
||||
]
|
||||
@@ -467,6 +528,7 @@
|
||||
"0x7C71": {
|
||||
"group": "quantum",
|
||||
"key": "QK_DYNAMIC_TAPPING_TERM_UP",
|
||||
"label": "Dynamic Tapping Term Up",
|
||||
"aliases": [
|
||||
"DT_UP"
|
||||
]
|
||||
@@ -474,6 +536,7 @@
|
||||
"0x7C72": {
|
||||
"group": "quantum",
|
||||
"key": "QK_DYNAMIC_TAPPING_TERM_DOWN",
|
||||
"label": "Dynamic Tapping Term Down",
|
||||
"aliases": [
|
||||
"DT_DOWN"
|
||||
]
|
||||
@@ -482,6 +545,7 @@
|
||||
"0x7C73": {
|
||||
"group": "quantum",
|
||||
"key": "QK_CAPS_WORD_TOGGLE",
|
||||
"label": "Toggle Caps Word",
|
||||
"aliases": [
|
||||
"CW_TOGG"
|
||||
]
|
||||
@@ -490,6 +554,7 @@
|
||||
"0x7C74": {
|
||||
"group": "quantum",
|
||||
"key": "QK_AUTOCORRECT_ON",
|
||||
"label": "Autocorrect On",
|
||||
"aliases": [
|
||||
"AC_ON"
|
||||
]
|
||||
@@ -497,6 +562,7 @@
|
||||
"0x7C75": {
|
||||
"group": "quantum",
|
||||
"key": "QK_AUTOCORRECT_OFF",
|
||||
"label": "Autocorrect Off",
|
||||
"aliases": [
|
||||
"AC_OFF"
|
||||
]
|
||||
@@ -504,6 +570,7 @@
|
||||
"0x7C76": {
|
||||
"group": "quantum",
|
||||
"key": "QK_AUTOCORRECT_TOGGLE",
|
||||
"label": "Toggle Autocorrect",
|
||||
"aliases": [
|
||||
"AC_TOGG"
|
||||
]
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"0x00C1": {
|
||||
"group": "media",
|
||||
"key": "KC_MISSION_CONTROL",
|
||||
"label": "Open Mission Control",
|
||||
"label": "Mission Control",
|
||||
"aliases": [
|
||||
"KC_MCTL"
|
||||
]
|
||||
@@ -11,7 +11,7 @@
|
||||
"0x00C2": {
|
||||
"group": "media",
|
||||
"key": "KC_LAUNCHPAD",
|
||||
"label": "Open Launchpad",
|
||||
"label": "Launchpad",
|
||||
"aliases": [
|
||||
"KC_LPAD"
|
||||
]
|
||||
|
||||
@@ -2,131 +2,163 @@
|
||||
"keycodes": {
|
||||
"0x7E00": {
|
||||
"group": "kb",
|
||||
"key": "QK_KB_0"
|
||||
"key": "QK_KB_0",
|
||||
"label": "Keyboard 0"
|
||||
},
|
||||
"0x7E01": {
|
||||
"group": "kb",
|
||||
"key": "QK_KB_1"
|
||||
"key": "QK_KB_1",
|
||||
"label": "Keyboard 1"
|
||||
},
|
||||
"0x7E02": {
|
||||
"group": "kb",
|
||||
"key": "QK_KB_2"
|
||||
"key": "QK_KB_2",
|
||||
"label": "Keyboard 2"
|
||||
},
|
||||
"0x7E03": {
|
||||
"group": "kb",
|
||||
"key": "QK_KB_3"
|
||||
"key": "QK_KB_3",
|
||||
"label": "Keyboard 3"
|
||||
},
|
||||
"0x7E04": {
|
||||
"group": "kb",
|
||||
"key": "QK_KB_4"
|
||||
"key": "QK_KB_4",
|
||||
"label": "Keyboard 4"
|
||||
},
|
||||
"0x7E05": {
|
||||
"group": "kb",
|
||||
"key": "QK_KB_5"
|
||||
"key": "QK_KB_5",
|
||||
"label": "Keyboard 5"
|
||||
},
|
||||
"0x7E06": {
|
||||
"group": "kb",
|
||||
"key": "QK_KB_6"
|
||||
"key": "QK_KB_6",
|
||||
"label": "Keyboard 6"
|
||||
},
|
||||
"0x7E07": {
|
||||
"group": "kb",
|
||||
"key": "QK_KB_7"
|
||||
"key": "QK_KB_7",
|
||||
"label": "Keyboard 7"
|
||||
},
|
||||
"0x7E08": {
|
||||
"group": "kb",
|
||||
"key": "QK_KB_8"
|
||||
"key": "QK_KB_8",
|
||||
"label": "Keyboard 8"
|
||||
},
|
||||
"0x7E09": {
|
||||
"group": "kb",
|
||||
"key": "QK_KB_9"
|
||||
"key": "QK_KB_9",
|
||||
"label": "Keyboard 9"
|
||||
},
|
||||
"0x7E0A": {
|
||||
"group": "kb",
|
||||
"key": "QK_KB_10"
|
||||
"key": "QK_KB_10",
|
||||
"label": "Keyboard 10"
|
||||
},
|
||||
"0x7E0B": {
|
||||
"group": "kb",
|
||||
"key": "QK_KB_11"
|
||||
"key": "QK_KB_11",
|
||||
"label": "Keyboard 11"
|
||||
},
|
||||
"0x7E0C": {
|
||||
"group": "kb",
|
||||
"key": "QK_KB_12"
|
||||
"key": "QK_KB_12",
|
||||
"label": "Keyboard 12"
|
||||
},
|
||||
"0x7E0D": {
|
||||
"group": "kb",
|
||||
"key": "QK_KB_13"
|
||||
"key": "QK_KB_13",
|
||||
"label": "Keyboard 13"
|
||||
},
|
||||
"0x7E0E": {
|
||||
"group": "kb",
|
||||
"key": "QK_KB_14"
|
||||
"key": "QK_KB_14",
|
||||
"label": "Keyboard 14"
|
||||
},
|
||||
"0x7E0F": {
|
||||
"group": "kb",
|
||||
"key": "QK_KB_15"
|
||||
"key": "QK_KB_15",
|
||||
"label": "Keyboard 15"
|
||||
},
|
||||
"0x7E10": {
|
||||
"group": "kb",
|
||||
"key": "QK_KB_16"
|
||||
"key": "QK_KB_16",
|
||||
"label": "Keyboard 16"
|
||||
},
|
||||
"0x7E11": {
|
||||
"group": "kb",
|
||||
"key": "QK_KB_17"
|
||||
"key": "QK_KB_17",
|
||||
"label": "Keyboard 17"
|
||||
},
|
||||
"0x7E12": {
|
||||
"group": "kb",
|
||||
"key": "QK_KB_18"
|
||||
"key": "QK_KB_18",
|
||||
"label": "Keyboard 18"
|
||||
},
|
||||
"0x7E13": {
|
||||
"group": "kb",
|
||||
"key": "QK_KB_19"
|
||||
"key": "QK_KB_19",
|
||||
"label": "Keyboard 19"
|
||||
},
|
||||
"0x7E14": {
|
||||
"group": "kb",
|
||||
"key": "QK_KB_20"
|
||||
"key": "QK_KB_20",
|
||||
"label": "Keyboard 20"
|
||||
},
|
||||
"0x7E15": {
|
||||
"group": "kb",
|
||||
"key": "QK_KB_21"
|
||||
"key": "QK_KB_21",
|
||||
"label": "Keyboard 21"
|
||||
},
|
||||
"0x7E16": {
|
||||
"group": "kb",
|
||||
"key": "QK_KB_22"
|
||||
"key": "QK_KB_22",
|
||||
"label": "Keyboard 22"
|
||||
},
|
||||
"0x7E17": {
|
||||
"group": "kb",
|
||||
"key": "QK_KB_23"
|
||||
"key": "QK_KB_23",
|
||||
"label": "Keyboard 23"
|
||||
},
|
||||
"0x7E18": {
|
||||
"group": "kb",
|
||||
"key": "QK_KB_24"
|
||||
"key": "QK_KB_24",
|
||||
"label": "Keyboard 24"
|
||||
},
|
||||
"0x7E19": {
|
||||
"group": "kb",
|
||||
"key": "QK_KB_25"
|
||||
"key": "QK_KB_25",
|
||||
"label": "Keyboard 25"
|
||||
},
|
||||
"0x7E1A": {
|
||||
"group": "kb",
|
||||
"key": "QK_KB_26"
|
||||
"key": "QK_KB_26",
|
||||
"label": "Keyboard 26"
|
||||
},
|
||||
"0x7E1B": {
|
||||
"group": "kb",
|
||||
"key": "QK_KB_27"
|
||||
"key": "QK_KB_27",
|
||||
"label": "Keyboard 27"
|
||||
},
|
||||
"0x7E1C": {
|
||||
"group": "kb",
|
||||
"key": "QK_KB_28"
|
||||
"key": "QK_KB_28",
|
||||
"label": "Keyboard 28"
|
||||
},
|
||||
"0x7E1D": {
|
||||
"group": "kb",
|
||||
"key": "QK_KB_29"
|
||||
"key": "QK_KB_29",
|
||||
"label": "Keyboard 29"
|
||||
},
|
||||
"0x7E1E": {
|
||||
"group": "kb",
|
||||
"key": "QK_KB_30"
|
||||
"key": "QK_KB_30",
|
||||
"label": "Keyboard 30"
|
||||
},
|
||||
"0x7E1F": {
|
||||
"group": "kb",
|
||||
"key": "QK_KB_31"
|
||||
"key": "QK_KB_31",
|
||||
"label": "Keyboard 31"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
"0x7000": {
|
||||
"group": "magic",
|
||||
"key": "QK_MAGIC_SWAP_CONTROL_CAPS_LOCK",
|
||||
"label": "Swap LCtl⇄Caps",
|
||||
"aliases": [
|
||||
"CL_SWAP"
|
||||
]
|
||||
@@ -12,6 +13,7 @@
|
||||
"0x7001": {
|
||||
"group": "magic",
|
||||
"key": "QK_MAGIC_UNSWAP_CONTROL_CAPS_LOCK",
|
||||
"label": "Unswap LCtl⇄Caps",
|
||||
"aliases": [
|
||||
"CL_NORM"
|
||||
]
|
||||
@@ -19,6 +21,7 @@
|
||||
"0x7002": {
|
||||
"group": "magic",
|
||||
"key": "QK_MAGIC_TOGGLE_CONTROL_CAPS_LOCK",
|
||||
"label": "Toggle LCtl⇄Caps",
|
||||
"aliases": [
|
||||
"CL_TOGG"
|
||||
]
|
||||
@@ -26,6 +29,7 @@
|
||||
"0x7003": {
|
||||
"group": "magic",
|
||||
"key": "QK_MAGIC_CAPS_LOCK_AS_CONTROL_OFF",
|
||||
"label": "Caps≠LCtl",
|
||||
"aliases": [
|
||||
"CL_CAPS"
|
||||
]
|
||||
@@ -33,6 +37,7 @@
|
||||
"0x7004": {
|
||||
"group": "magic",
|
||||
"key": "QK_MAGIC_CAPS_LOCK_AS_CONTROL_ON",
|
||||
"label": "Caps=LCtl",
|
||||
"aliases": [
|
||||
"CL_CTRL"
|
||||
]
|
||||
@@ -40,6 +45,7 @@
|
||||
"0x7005": {
|
||||
"group": "magic",
|
||||
"key": "QK_MAGIC_SWAP_LALT_LGUI",
|
||||
"label": "Swap LAlt⇄LGUI",
|
||||
"aliases": [
|
||||
"AG_LSWP"
|
||||
]
|
||||
@@ -47,6 +53,7 @@
|
||||
"0x7006": {
|
||||
"group": "magic",
|
||||
"key": "QK_MAGIC_UNSWAP_LALT_LGUI",
|
||||
"label": "Unswap LAlt⇄LGUI",
|
||||
"aliases": [
|
||||
"AG_LNRM"
|
||||
]
|
||||
@@ -54,6 +61,7 @@
|
||||
"0x7007": {
|
||||
"group": "magic",
|
||||
"key": "QK_MAGIC_SWAP_RALT_RGUI",
|
||||
"label": "Swap RAlt⇄RGUI",
|
||||
"aliases": [
|
||||
"AG_RSWP"
|
||||
]
|
||||
@@ -61,6 +69,7 @@
|
||||
"0x7008": {
|
||||
"group": "magic",
|
||||
"key": "QK_MAGIC_UNSWAP_RALT_RGUI",
|
||||
"label": "Unswap RAlt⇄RGUI",
|
||||
"aliases": [
|
||||
"AG_RNRM"
|
||||
]
|
||||
@@ -68,6 +77,7 @@
|
||||
"0x7009": {
|
||||
"group": "magic",
|
||||
"key": "QK_MAGIC_GUI_ON",
|
||||
"label": "GUI On",
|
||||
"aliases": [
|
||||
"GU_ON"
|
||||
]
|
||||
@@ -75,6 +85,7 @@
|
||||
"0x700A": {
|
||||
"group": "magic",
|
||||
"key": "QK_MAGIC_GUI_OFF",
|
||||
"label": "GUI Off",
|
||||
"aliases": [
|
||||
"GU_OFF"
|
||||
]
|
||||
@@ -82,6 +93,7 @@
|
||||
"0x700B": {
|
||||
"group": "magic",
|
||||
"key": "QK_MAGIC_TOGGLE_GUI",
|
||||
"label": "Toggle GUI",
|
||||
"aliases": [
|
||||
"GU_TOGG"
|
||||
]
|
||||
@@ -89,6 +101,7 @@
|
||||
"0x700C": {
|
||||
"group": "magic",
|
||||
"key": "QK_MAGIC_SWAP_GRAVE_ESC",
|
||||
"label": "Swap `⇄Esc",
|
||||
"aliases": [
|
||||
"GE_SWAP"
|
||||
]
|
||||
@@ -96,6 +109,7 @@
|
||||
"0x700D": {
|
||||
"group": "magic",
|
||||
"key": "QK_MAGIC_UNSWAP_GRAVE_ESC",
|
||||
"label": "Unswap `⇄Esc",
|
||||
"aliases": [
|
||||
"GE_NORM"
|
||||
]
|
||||
@@ -103,6 +117,7 @@
|
||||
"0x700E": {
|
||||
"group": "magic",
|
||||
"key": "QK_MAGIC_SWAP_BACKSLASH_BACKSPACE",
|
||||
"label": "Swap \\⇄Bspc",
|
||||
"aliases": [
|
||||
"BS_SWAP"
|
||||
]
|
||||
@@ -110,6 +125,7 @@
|
||||
"0x700F": {
|
||||
"group": "magic",
|
||||
"key": "QK_MAGIC_UNSWAP_BACKSLASH_BACKSPACE",
|
||||
"label": "Unswap \\⇄Bspc",
|
||||
"aliases": [
|
||||
"BS_NORM"
|
||||
]
|
||||
@@ -117,6 +133,7 @@
|
||||
"0x7010": {
|
||||
"group": "magic",
|
||||
"key": "QK_MAGIC_TOGGLE_BACKSLASH_BACKSPACE",
|
||||
"label": "Toggle \\⇄Bspc",
|
||||
"aliases": [
|
||||
"BS_TOGG"
|
||||
]
|
||||
@@ -124,6 +141,7 @@
|
||||
"0x7011": {
|
||||
"group": "magic",
|
||||
"key": "QK_MAGIC_NKRO_ON",
|
||||
"label": "NKRO On",
|
||||
"aliases": [
|
||||
"NK_ON"
|
||||
]
|
||||
@@ -131,6 +149,7 @@
|
||||
"0x7012": {
|
||||
"group": "magic",
|
||||
"key": "QK_MAGIC_NKRO_OFF",
|
||||
"label": "NKRO Off",
|
||||
"aliases": [
|
||||
"NK_OFF"
|
||||
]
|
||||
@@ -138,6 +157,7 @@
|
||||
"0x7013": {
|
||||
"group": "magic",
|
||||
"key": "QK_MAGIC_TOGGLE_NKRO",
|
||||
"label": "Toggle NKRO",
|
||||
"aliases": [
|
||||
"NK_TOGG"
|
||||
]
|
||||
@@ -145,6 +165,7 @@
|
||||
"0x7014": {
|
||||
"group": "magic",
|
||||
"key": "QK_MAGIC_SWAP_ALT_GUI",
|
||||
"label": "Swap Alt⇄GUI",
|
||||
"aliases": [
|
||||
"AG_SWAP"
|
||||
]
|
||||
@@ -152,6 +173,7 @@
|
||||
"0x7015": {
|
||||
"group": "magic",
|
||||
"key": "QK_MAGIC_UNSWAP_ALT_GUI",
|
||||
"label": "Unswap Alt⇄GUI",
|
||||
"aliases": [
|
||||
"AG_NORM"
|
||||
]
|
||||
@@ -159,6 +181,7 @@
|
||||
"0x7016": {
|
||||
"group": "magic",
|
||||
"key": "QK_MAGIC_TOGGLE_ALT_GUI",
|
||||
"label": "Toggle Alt⇄GUI",
|
||||
"aliases": [
|
||||
"AG_TOGG"
|
||||
]
|
||||
@@ -166,6 +189,7 @@
|
||||
"0x7017": {
|
||||
"group": "magic",
|
||||
"key": "QK_MAGIC_SWAP_LCTL_LGUI",
|
||||
"label": "Swap LCtl⇄LGUI",
|
||||
"aliases": [
|
||||
"CG_LSWP"
|
||||
]
|
||||
@@ -173,6 +197,7 @@
|
||||
"0x7018": {
|
||||
"group": "magic",
|
||||
"key": "QK_MAGIC_UNSWAP_LCTL_LGUI",
|
||||
"label": "Unswap LCtl⇄LGUI",
|
||||
"aliases": [
|
||||
"CG_LNRM"
|
||||
]
|
||||
@@ -180,6 +205,7 @@
|
||||
"0x7019": {
|
||||
"group": "magic",
|
||||
"key": "QK_MAGIC_SWAP_RCTL_RGUI",
|
||||
"label": "Swap RCtl⇄RGUI",
|
||||
"aliases": [
|
||||
"CG_RSWP"
|
||||
]
|
||||
@@ -187,6 +213,7 @@
|
||||
"0x701A": {
|
||||
"group": "magic",
|
||||
"key": "QK_MAGIC_UNSWAP_RCTL_RGUI",
|
||||
"label": "Unswap RCtl⇄RGUI",
|
||||
"aliases": [
|
||||
"CG_RNRM"
|
||||
]
|
||||
@@ -194,6 +221,7 @@
|
||||
"0x701B": {
|
||||
"group": "magic",
|
||||
"key": "QK_MAGIC_SWAP_CTL_GUI",
|
||||
"label": "Swap Ctl⇄GUI",
|
||||
"aliases": [
|
||||
"CG_SWAP"
|
||||
]
|
||||
@@ -201,6 +229,7 @@
|
||||
"0x701C": {
|
||||
"group": "magic",
|
||||
"key": "QK_MAGIC_UNSWAP_CTL_GUI",
|
||||
"label": "Unswap Ctl⇄GUI",
|
||||
"aliases": [
|
||||
"CG_NORM"
|
||||
]
|
||||
@@ -208,6 +237,7 @@
|
||||
"0x701D": {
|
||||
"group": "magic",
|
||||
"key": "QK_MAGIC_TOGGLE_CTL_GUI",
|
||||
"label": "Toggle Ctl⇄GUI",
|
||||
"aliases": [
|
||||
"CG_TOGG"
|
||||
]
|
||||
@@ -215,6 +245,7 @@
|
||||
"0x701E": {
|
||||
"group": "magic",
|
||||
"key": "QK_MAGIC_EE_HANDS_LEFT",
|
||||
"label": "EE Hands Left",
|
||||
"aliases": [
|
||||
"EH_LEFT"
|
||||
]
|
||||
@@ -222,6 +253,7 @@
|
||||
"0x701F": {
|
||||
"group": "magic",
|
||||
"key": "QK_MAGIC_EE_HANDS_RIGHT",
|
||||
"label": "EE Hands Right",
|
||||
"aliases": [
|
||||
"EH_RGHT"
|
||||
]
|
||||
@@ -229,6 +261,7 @@
|
||||
"0x7020": {
|
||||
"group": "magic",
|
||||
"key": "QK_MAGIC_SWAP_ESCAPE_CAPS_LOCK",
|
||||
"label": "Swap Esc⇄Caps",
|
||||
"aliases": [
|
||||
"EC_SWAP"
|
||||
]
|
||||
@@ -236,6 +269,7 @@
|
||||
"0x7021": {
|
||||
"group": "magic",
|
||||
"key": "QK_MAGIC_UNSWAP_ESCAPE_CAPS_LOCK",
|
||||
"label": "Unswap Esc⇄Caps",
|
||||
"aliases": [
|
||||
"EC_NORM"
|
||||
]
|
||||
@@ -243,6 +277,7 @@
|
||||
"0x7022": {
|
||||
"group": "magic",
|
||||
"key": "QK_MAGIC_TOGGLE_ESCAPE_CAPS_LOCK",
|
||||
"label": "Toggle Esc⇄Caps",
|
||||
"aliases": [
|
||||
"EC_TOGG"
|
||||
]
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -3,6 +3,7 @@
|
||||
"0x7C77": {
|
||||
"group": "quantum",
|
||||
"key": "QK_TRI_LAYER_LOWER",
|
||||
"label": "Lower",
|
||||
"aliases": [
|
||||
"TL_LOWR"
|
||||
]
|
||||
@@ -10,6 +11,7 @@
|
||||
"0x7C78": {
|
||||
"group": "quantum",
|
||||
"key": "QK_TRI_LAYER_UPPER",
|
||||
"label": "Upper",
|
||||
"aliases": [
|
||||
"TL_UPPR"
|
||||
]
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
"0x7200": {
|
||||
"group": "sequencer",
|
||||
"key": "QK_SEQUENCER_ON",
|
||||
"label": "Sequencer On",
|
||||
"aliases": [
|
||||
"SQ_ON"
|
||||
]
|
||||
@@ -12,6 +13,7 @@
|
||||
"0x7201": {
|
||||
"group": "sequencer",
|
||||
"key": "QK_SEQUENCER_OFF",
|
||||
"label": "Sequencer Off",
|
||||
"aliases": [
|
||||
"SQ_OFF"
|
||||
]
|
||||
@@ -19,6 +21,7 @@
|
||||
"0x7202": {
|
||||
"group": "sequencer",
|
||||
"key": "QK_SEQUENCER_TOGGLE",
|
||||
"label": "Toggle Sequencer",
|
||||
"aliases": [
|
||||
"SQ_TOGG"
|
||||
]
|
||||
@@ -26,6 +29,7 @@
|
||||
"0x7203": {
|
||||
"group": "sequencer",
|
||||
"key": "QK_SEQUENCER_TEMPO_DOWN",
|
||||
"label": "Tempo Down",
|
||||
"aliases": [
|
||||
"SQ_TMPD"
|
||||
]
|
||||
@@ -33,6 +37,7 @@
|
||||
"0x7204": {
|
||||
"group": "sequencer",
|
||||
"key": "QK_SEQUENCER_TEMPO_UP",
|
||||
"label": "Tempo Up",
|
||||
"aliases": [
|
||||
"SQ_TMPU"
|
||||
]
|
||||
@@ -40,6 +45,7 @@
|
||||
"0x7205": {
|
||||
"group": "sequencer",
|
||||
"key": "QK_SEQUENCER_RESOLUTION_DOWN",
|
||||
"label": "Resolution Down",
|
||||
"aliases": [
|
||||
"SQ_RESD"
|
||||
]
|
||||
@@ -47,6 +53,7 @@
|
||||
"0x7206": {
|
||||
"group": "sequencer",
|
||||
"key": "QK_SEQUENCER_RESOLUTION_UP",
|
||||
"label": "Resolution Up",
|
||||
"aliases": [
|
||||
"SQ_RESU"
|
||||
]
|
||||
@@ -54,6 +61,7 @@
|
||||
"0x7207": {
|
||||
"group": "sequencer",
|
||||
"key": "QK_SEQUENCER_STEPS_ALL",
|
||||
"label": "All Steps",
|
||||
"aliases": [
|
||||
"SQ_SALL"
|
||||
]
|
||||
@@ -61,6 +69,7 @@
|
||||
"0x7208": {
|
||||
"group": "sequencer",
|
||||
"key": "QK_SEQUENCER_STEPS_CLEAR",
|
||||
"label": "Clear Steps",
|
||||
"aliases": [
|
||||
"SQ_SCLR"
|
||||
]
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
"0x56F0": {
|
||||
"group": "swap_hands",
|
||||
"key": "QK_SWAP_HANDS_TOGGLE",
|
||||
"label": "Toggle Swap Hands",
|
||||
"aliases": [
|
||||
"SH_TOGG"
|
||||
]
|
||||
@@ -10,6 +11,7 @@
|
||||
"0x56F1": {
|
||||
"group": "swap_hands",
|
||||
"key": "QK_SWAP_HANDS_TAP_TOGGLE",
|
||||
"label": "Swap Hands Tap Toggle",
|
||||
"aliases": [
|
||||
"SH_TT"
|
||||
]
|
||||
@@ -17,6 +19,7 @@
|
||||
"0x56F2": {
|
||||
"group": "swap_hands",
|
||||
"key": "QK_SWAP_HANDS_MOMENTARY_ON",
|
||||
"label": "Swap Hands Momentary On",
|
||||
"aliases": [
|
||||
"SH_MON"
|
||||
]
|
||||
@@ -24,6 +27,7 @@
|
||||
"0x56F3": {
|
||||
"group": "swap_hands",
|
||||
"key": "QK_SWAP_HANDS_MOMENTARY_OFF",
|
||||
"label": "Swap Hands Momentary Off",
|
||||
"aliases": [
|
||||
"SH_MOFF"
|
||||
]
|
||||
@@ -31,6 +35,7 @@
|
||||
"0x56F4": {
|
||||
"group": "swap_hands",
|
||||
"key": "QK_SWAP_HANDS_OFF",
|
||||
"label": "Unswap Hands",
|
||||
"aliases": [
|
||||
"SH_OFF"
|
||||
]
|
||||
@@ -38,6 +43,7 @@
|
||||
"0x56F5": {
|
||||
"group": "swap_hands",
|
||||
"key": "QK_SWAP_HANDS_ON",
|
||||
"label": "Swap Hands",
|
||||
"aliases": [
|
||||
"SH_ON"
|
||||
]
|
||||
@@ -45,6 +51,7 @@
|
||||
"0x56F6": {
|
||||
"group": "swap_hands",
|
||||
"key": "QK_SWAP_HANDS_ONE_SHOT",
|
||||
"label": "Swap Hands One Shot",
|
||||
"aliases": [
|
||||
"SH_OS"
|
||||
]
|
||||
|
||||
@@ -2,131 +2,163 @@
|
||||
"keycodes": {
|
||||
"0x7E40": {
|
||||
"group": "user",
|
||||
"key": "QK_USER_0"
|
||||
"key": "QK_USER_0",
|
||||
"label": "User 0"
|
||||
},
|
||||
"0x7E41": {
|
||||
"group": "user",
|
||||
"key": "QK_USER_1"
|
||||
"key": "QK_USER_1",
|
||||
"label": "User 1"
|
||||
},
|
||||
"0x7E42": {
|
||||
"group": "user",
|
||||
"key": "QK_USER_2"
|
||||
"key": "QK_USER_2",
|
||||
"label": "User 2"
|
||||
},
|
||||
"0x7E43": {
|
||||
"group": "user",
|
||||
"key": "QK_USER_3"
|
||||
"key": "QK_USER_3",
|
||||
"label": "User 3"
|
||||
},
|
||||
"0x7E44": {
|
||||
"group": "user",
|
||||
"key": "QK_USER_4"
|
||||
"key": "QK_USER_4",
|
||||
"label": "User 4"
|
||||
},
|
||||
"0x7E45": {
|
||||
"group": "user",
|
||||
"key": "QK_USER_5"
|
||||
"key": "QK_USER_5",
|
||||
"label": "User 5"
|
||||
},
|
||||
"0x7E46": {
|
||||
"group": "user",
|
||||
"key": "QK_USER_6"
|
||||
"key": "QK_USER_6",
|
||||
"label": "User 6"
|
||||
},
|
||||
"0x7E47": {
|
||||
"group": "user",
|
||||
"key": "QK_USER_7"
|
||||
"key": "QK_USER_7",
|
||||
"label": "User 7"
|
||||
},
|
||||
"0x7E48": {
|
||||
"group": "user",
|
||||
"key": "QK_USER_8"
|
||||
"key": "QK_USER_8",
|
||||
"label": "User 8"
|
||||
},
|
||||
"0x7E49": {
|
||||
"group": "user",
|
||||
"key": "QK_USER_9"
|
||||
"key": "QK_USER_9",
|
||||
"label": "User 9"
|
||||
},
|
||||
"0x7E4A": {
|
||||
"group": "user",
|
||||
"key": "QK_USER_10"
|
||||
"key": "QK_USER_10",
|
||||
"label": "User 10"
|
||||
},
|
||||
"0x7E4B": {
|
||||
"group": "user",
|
||||
"key": "QK_USER_11"
|
||||
"key": "QK_USER_11",
|
||||
"label": "User 11"
|
||||
},
|
||||
"0x7E4C": {
|
||||
"group": "user",
|
||||
"key": "QK_USER_12"
|
||||
"key": "QK_USER_12",
|
||||
"label": "User 12"
|
||||
},
|
||||
"0x7E4D": {
|
||||
"group": "user",
|
||||
"key": "QK_USER_13"
|
||||
"key": "QK_USER_13",
|
||||
"label": "User 13"
|
||||
},
|
||||
"0x7E4E": {
|
||||
"group": "user",
|
||||
"key": "QK_USER_14"
|
||||
"key": "QK_USER_14",
|
||||
"label": "User 14"
|
||||
},
|
||||
"0x7E4F": {
|
||||
"group": "user",
|
||||
"key": "QK_USER_15"
|
||||
"key": "QK_USER_15",
|
||||
"label": "User 15"
|
||||
},
|
||||
"0x7E50": {
|
||||
"group": "user",
|
||||
"key": "QK_USER_16"
|
||||
"key": "QK_USER_16",
|
||||
"label": "User 16"
|
||||
},
|
||||
"0x7E51": {
|
||||
"group": "user",
|
||||
"key": "QK_USER_17"
|
||||
"key": "QK_USER_17",
|
||||
"label": "User 17"
|
||||
},
|
||||
"0x7E52": {
|
||||
"group": "user",
|
||||
"key": "QK_USER_18"
|
||||
"key": "QK_USER_18",
|
||||
"label": "User 18"
|
||||
},
|
||||
"0x7E53": {
|
||||
"group": "user",
|
||||
"key": "QK_USER_19"
|
||||
"key": "QK_USER_19",
|
||||
"label": "User 19"
|
||||
},
|
||||
"0x7E54": {
|
||||
"group": "user",
|
||||
"key": "QK_USER_20"
|
||||
"key": "QK_USER_20",
|
||||
"label": "User 20"
|
||||
},
|
||||
"0x7E55": {
|
||||
"group": "user",
|
||||
"key": "QK_USER_21"
|
||||
"key": "QK_USER_21",
|
||||
"label": "User 21"
|
||||
},
|
||||
"0x7E56": {
|
||||
"group": "user",
|
||||
"key": "QK_USER_22"
|
||||
"key": "QK_USER_22",
|
||||
"label": "User 22"
|
||||
},
|
||||
"0x7E57": {
|
||||
"group": "user",
|
||||
"key": "QK_USER_23"
|
||||
"key": "QK_USER_23",
|
||||
"label": "User 23"
|
||||
},
|
||||
"0x7E58": {
|
||||
"group": "user",
|
||||
"key": "QK_USER_24"
|
||||
"key": "QK_USER_24",
|
||||
"label": "User 24"
|
||||
},
|
||||
"0x7E59": {
|
||||
"group": "user",
|
||||
"key": "QK_USER_25"
|
||||
"key": "QK_USER_25",
|
||||
"label": "User 25"
|
||||
},
|
||||
"0x7E5A": {
|
||||
"group": "user",
|
||||
"key": "QK_USER_26"
|
||||
"key": "QK_USER_26",
|
||||
"label": "User 26"
|
||||
},
|
||||
"0x7E5B": {
|
||||
"group": "user",
|
||||
"key": "QK_USER_27"
|
||||
"key": "QK_USER_27",
|
||||
"label": "User 27"
|
||||
},
|
||||
"0x7E5C": {
|
||||
"group": "user",
|
||||
"key": "QK_USER_28"
|
||||
"key": "QK_USER_28",
|
||||
"label": "User 28"
|
||||
},
|
||||
"0x7E5D": {
|
||||
"group": "user",
|
||||
"key": "QK_USER_29"
|
||||
"key": "QK_USER_29",
|
||||
"label": "User 29"
|
||||
},
|
||||
"0x7E5E": {
|
||||
"group": "user",
|
||||
"key": "QK_USER_30"
|
||||
"key": "QK_USER_30",
|
||||
"label": "User 30"
|
||||
},
|
||||
"0x7E5F": {
|
||||
"group": "user",
|
||||
"key": "QK_USER_31"
|
||||
"key": "QK_USER_31",
|
||||
"label": "User 31"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
"0x7C79": {
|
||||
"group": "quantum",
|
||||
"key": "QK_REPEAT_KEY",
|
||||
"label": "Repeat",
|
||||
"aliases": [
|
||||
"QK_REP"
|
||||
]
|
||||
@@ -10,6 +11,7 @@
|
||||
"0x7C7A": {
|
||||
"group": "quantum",
|
||||
"key": "QK_ALT_REPEAT_KEY",
|
||||
"label": "Repeat Alternate",
|
||||
"aliases": [
|
||||
"QK_AREP"
|
||||
]
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
"0x7810": {
|
||||
"group": "led_matrix",
|
||||
"key": "QK_LED_MATRIX_ON",
|
||||
"label": "LED Matrix On",
|
||||
"aliases": [
|
||||
"LM_ON"
|
||||
]
|
||||
@@ -10,6 +11,7 @@
|
||||
"0x7811": {
|
||||
"group": "led_matrix",
|
||||
"key": "QK_LED_MATRIX_OFF",
|
||||
"label": "LED Matrix Off",
|
||||
"aliases": [
|
||||
"LM_OFF"
|
||||
]
|
||||
@@ -17,6 +19,7 @@
|
||||
"0x7812": {
|
||||
"group": "led_matrix",
|
||||
"key": "QK_LED_MATRIX_TOGGLE",
|
||||
"label": "Toggle LED Matrix",
|
||||
"aliases": [
|
||||
"LM_TOGG"
|
||||
]
|
||||
@@ -24,6 +27,7 @@
|
||||
"0x7813": {
|
||||
"group": "led_matrix",
|
||||
"key": "QK_LED_MATRIX_MODE_NEXT",
|
||||
"label": "LED Matrix Next",
|
||||
"aliases": [
|
||||
"LM_NEXT"
|
||||
]
|
||||
@@ -31,6 +35,7 @@
|
||||
"0x7814": {
|
||||
"group": "led_matrix",
|
||||
"key": "QK_LED_MATRIX_MODE_PREVIOUS",
|
||||
"label": "LED Matrix Previous",
|
||||
"aliases": [
|
||||
"LM_PREV"
|
||||
]
|
||||
@@ -38,6 +43,7 @@
|
||||
"0x7815": {
|
||||
"group": "led_matrix",
|
||||
"key": "QK_LED_MATRIX_BRIGHTNESS_UP",
|
||||
"label": "LED Matrix Brightness Up",
|
||||
"aliases": [
|
||||
"LM_BRIU"
|
||||
]
|
||||
@@ -45,6 +51,7 @@
|
||||
"0x7816": {
|
||||
"group": "led_matrix",
|
||||
"key": "QK_LED_MATRIX_BRIGHTNESS_DOWN",
|
||||
"label": "LED Matrix Brightness Down",
|
||||
"aliases": [
|
||||
"LM_BRID"
|
||||
]
|
||||
@@ -52,6 +59,7 @@
|
||||
"0x7817": {
|
||||
"group": "led_matrix",
|
||||
"key": "QK_LED_MATRIX_SPEED_UP",
|
||||
"label": "LED Matrix Speed Up",
|
||||
"aliases": [
|
||||
"LM_SPDU"
|
||||
]
|
||||
@@ -59,6 +67,7 @@
|
||||
"0x7818": {
|
||||
"group": "led_matrix",
|
||||
"key": "QK_LED_MATRIX_SPEED_DOWN",
|
||||
"label": "LED Matrix Speed Down",
|
||||
"aliases": [
|
||||
"LM_SPDD"
|
||||
]
|
||||
@@ -67,6 +76,7 @@
|
||||
"0x7820": {
|
||||
"group": "underglow",
|
||||
"key": "QK_UNDERGLOW_TOGGLE",
|
||||
"label": "Toggle RGB Underglow",
|
||||
"aliases": [
|
||||
"UG_TOGG"
|
||||
]
|
||||
@@ -74,6 +84,7 @@
|
||||
"0x7821": {
|
||||
"group": "underglow",
|
||||
"key": "QK_UNDERGLOW_MODE_NEXT",
|
||||
"label": "RGB Underglow Next",
|
||||
"aliases": [
|
||||
"!reset!",
|
||||
"UG_NEXT"
|
||||
@@ -82,6 +93,7 @@
|
||||
"0x7822": {
|
||||
"group": "underglow",
|
||||
"key": "QK_UNDERGLOW_MODE_PREVIOUS",
|
||||
"label": "RGB Underglow Previous",
|
||||
"aliases": [
|
||||
"!reset!",
|
||||
"UG_PREV"
|
||||
@@ -90,6 +102,7 @@
|
||||
"0x7823": {
|
||||
"group": "underglow",
|
||||
"key": "QK_UNDERGLOW_HUE_UP",
|
||||
"label": "RGB Underglow Hue Up",
|
||||
"aliases": [
|
||||
"UG_HUEU"
|
||||
]
|
||||
@@ -97,6 +110,7 @@
|
||||
"0x7824": {
|
||||
"group": "underglow",
|
||||
"key": "QK_UNDERGLOW_HUE_DOWN",
|
||||
"label": "RGB Underglow Hue Down",
|
||||
"aliases": [
|
||||
"UG_HUED"
|
||||
]
|
||||
@@ -104,6 +118,7 @@
|
||||
"0x7825": {
|
||||
"group": "underglow",
|
||||
"key": "QK_UNDERGLOW_SATURATION_UP",
|
||||
"label": "RGB Underglow Saturation Up",
|
||||
"aliases": [
|
||||
"UG_SATU"
|
||||
]
|
||||
@@ -111,6 +126,7 @@
|
||||
"0x7826": {
|
||||
"group": "underglow",
|
||||
"key": "QK_UNDERGLOW_SATURATION_DOWN",
|
||||
"label": "RGB Underglow Saturation Down",
|
||||
"aliases": [
|
||||
"UG_SATD"
|
||||
]
|
||||
@@ -118,6 +134,7 @@
|
||||
"0x7827": {
|
||||
"group": "underglow",
|
||||
"key": "QK_UNDERGLOW_VALUE_UP",
|
||||
"label": "RGB Underglow Value Up",
|
||||
"aliases": [
|
||||
"UG_VALU"
|
||||
]
|
||||
@@ -125,6 +142,7 @@
|
||||
"0x7828": {
|
||||
"group": "underglow",
|
||||
"key": "QK_UNDERGLOW_VALUE_DOWN",
|
||||
"label": "RGB Underglow Value Down",
|
||||
"aliases": [
|
||||
"UG_VALD"
|
||||
]
|
||||
@@ -132,6 +150,7 @@
|
||||
"0x7829": {
|
||||
"group": "underglow",
|
||||
"key": "QK_UNDERGLOW_SPEED_UP",
|
||||
"label": "RGB Underglow Speed Up",
|
||||
"aliases": [
|
||||
"UG_SPDU"
|
||||
]
|
||||
@@ -139,6 +158,7 @@
|
||||
"0x782A": {
|
||||
"group": "underglow",
|
||||
"key": "QK_UNDERGLOW_SPEED_DOWN",
|
||||
"label": "RGB Underglow Speed Down",
|
||||
"aliases": [
|
||||
"UG_SPDD"
|
||||
]
|
||||
@@ -147,6 +167,7 @@
|
||||
"0x7840": {
|
||||
"group": "rgb_matrix",
|
||||
"key": "QK_RGB_MATRIX_ON",
|
||||
"label": "RGB Matrix On",
|
||||
"aliases": [
|
||||
"RM_ON"
|
||||
]
|
||||
@@ -154,6 +175,7 @@
|
||||
"0x7841": {
|
||||
"group": "rgb_matrix",
|
||||
"key": "QK_RGB_MATRIX_OFF",
|
||||
"label": "RGB Matrix Off"
|
||||
"aliases": [
|
||||
"RM_OFF"
|
||||
]
|
||||
@@ -161,6 +183,7 @@
|
||||
"0x7842": {
|
||||
"group": "rgb_matrix",
|
||||
"key": "QK_RGB_MATRIX_TOGGLE",
|
||||
"label": "Toggle RGB Matrix",
|
||||
"aliases": [
|
||||
"RM_TOGG"
|
||||
]
|
||||
@@ -168,6 +191,7 @@
|
||||
"0x7843": {
|
||||
"group": "rgb_matrix",
|
||||
"key": "QK_RGB_MATRIX_MODE_NEXT",
|
||||
"label": "RGB Matrix Next",
|
||||
"aliases": [
|
||||
"RM_NEXT"
|
||||
]
|
||||
@@ -175,6 +199,7 @@
|
||||
"0x7844": {
|
||||
"group": "rgb_matrix",
|
||||
"key": "QK_RGB_MATRIX_MODE_PREVIOUS",
|
||||
"label": "RGB Matrix Previous",
|
||||
"aliases": [
|
||||
"RM_PREV"
|
||||
]
|
||||
@@ -182,6 +207,7 @@
|
||||
"0x7845": {
|
||||
"group": "rgb_matrix",
|
||||
"key": "QK_RGB_MATRIX_HUE_UP",
|
||||
"label": "RGB Matrix Hue Up",
|
||||
"aliases": [
|
||||
"RM_HUEU"
|
||||
]
|
||||
@@ -189,6 +215,7 @@
|
||||
"0x7846": {
|
||||
"group": "rgb_matrix",
|
||||
"key": "QK_RGB_MATRIX_HUE_DOWN",
|
||||
"label": "RGB Matrix Hue Down",
|
||||
"aliases": [
|
||||
"RM_HUED"
|
||||
]
|
||||
@@ -196,6 +223,7 @@
|
||||
"0x7847": {
|
||||
"group": "rgb_matrix",
|
||||
"key": "QK_RGB_MATRIX_SATURATION_UP",
|
||||
"label": "RGB Matrix Saturation Up",
|
||||
"aliases": [
|
||||
"RM_SATU"
|
||||
]
|
||||
@@ -203,6 +231,7 @@
|
||||
"0x7848": {
|
||||
"group": "rgb_matrix",
|
||||
"key": "QK_RGB_MATRIX_SATURATION_DOWN",
|
||||
"label": "RGB Matrix Saturation Down",
|
||||
"aliases": [
|
||||
"RM_SATD"
|
||||
]
|
||||
@@ -210,6 +239,7 @@
|
||||
"0x7849": {
|
||||
"group": "rgb_matrix",
|
||||
"key": "QK_RGB_MATRIX_VALUE_UP",
|
||||
"label": "RGB Matrix Value Up",
|
||||
"aliases": [
|
||||
"RM_VALU"
|
||||
]
|
||||
@@ -217,6 +247,7 @@
|
||||
"0x784A": {
|
||||
"group": "rgb_matrix",
|
||||
"key": "QK_RGB_MATRIX_VALUE_DOWN",
|
||||
"label": "RGB Matrix Value Down",
|
||||
"aliases": [
|
||||
"RM_VALD"
|
||||
]
|
||||
@@ -224,6 +255,7 @@
|
||||
"0x784B": {
|
||||
"group": "rgb_matrix",
|
||||
"key": "QK_RGB_MATRIX_SPEED_UP",
|
||||
"label": "RGB Matrix Speed Up",
|
||||
"aliases": [
|
||||
"RM_SPDU"
|
||||
]
|
||||
@@ -231,6 +263,7 @@
|
||||
"0x784C": {
|
||||
"group": "rgb_matrix",
|
||||
"key": "QK_RGB_MATRIX_SPEED_DOWN",
|
||||
"label": "RGB Matrix Speed Down",
|
||||
"aliases": [
|
||||
"RM_SPDD"
|
||||
]
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"0x00CD": {
|
||||
"group": "mouse",
|
||||
"key": "QK_MOUSE_CURSOR_UP",
|
||||
"label": "Mouse cursor up",
|
||||
"label": "Mouse Up",
|
||||
"aliases": [
|
||||
"!reset!",
|
||||
"MS_UP"
|
||||
@@ -12,7 +12,7 @@
|
||||
"0x00CE": {
|
||||
"group": "mouse",
|
||||
"key": "QK_MOUSE_CURSOR_DOWN",
|
||||
"label": "Mouse cursor down",
|
||||
"label": "Mouse Down",
|
||||
"aliases": [
|
||||
"!reset!",
|
||||
"MS_DOWN"
|
||||
@@ -21,7 +21,7 @@
|
||||
"0x00CF": {
|
||||
"group": "mouse",
|
||||
"key": "QK_MOUSE_CURSOR_LEFT",
|
||||
"label": "Mouse cursor left",
|
||||
"label": "Mouse Left",
|
||||
"aliases": [
|
||||
"!reset!",
|
||||
"MS_LEFT"
|
||||
@@ -30,7 +30,7 @@
|
||||
"0x00D0": {
|
||||
"group": "mouse",
|
||||
"key": "QK_MOUSE_CURSOR_RIGHT",
|
||||
"label": "Mouse cursor right",
|
||||
"label": "Mouse Right",
|
||||
"aliases": [
|
||||
"!reset!",
|
||||
"MS_RGHT"
|
||||
@@ -39,7 +39,7 @@
|
||||
"0x00D1": {
|
||||
"group": "mouse",
|
||||
"key": "QK_MOUSE_BUTTON_1",
|
||||
"label": "Mouse button 1",
|
||||
"label": "Mouse Button 1",
|
||||
"aliases": [
|
||||
"!reset!",
|
||||
"MS_BTN1"
|
||||
@@ -48,7 +48,7 @@
|
||||
"0x00D2": {
|
||||
"group": "mouse",
|
||||
"key": "QK_MOUSE_BUTTON_2",
|
||||
"label": "Mouse button 2",
|
||||
"label": "Mouse Button 2",
|
||||
"aliases": [
|
||||
"!reset!",
|
||||
"MS_BTN2"
|
||||
@@ -57,7 +57,7 @@
|
||||
"0x00D3": {
|
||||
"group": "mouse",
|
||||
"key": "QK_MOUSE_BUTTON_3",
|
||||
"label": "Mouse button 3",
|
||||
"label": "Mouse Button 3",
|
||||
"aliases": [
|
||||
"!reset!",
|
||||
"MS_BTN3"
|
||||
@@ -66,7 +66,7 @@
|
||||
"0x00D4": {
|
||||
"group": "mouse",
|
||||
"key": "QK_MOUSE_BUTTON_4",
|
||||
"label": "Mouse button 4",
|
||||
"label": "Mouse Button 4",
|
||||
"aliases": [
|
||||
"!reset!",
|
||||
"MS_BTN4"
|
||||
@@ -75,7 +75,7 @@
|
||||
"0x00D5": {
|
||||
"group": "mouse",
|
||||
"key": "QK_MOUSE_BUTTON_5",
|
||||
"label": "Mouse button 5",
|
||||
"label": "Mouse Button 5",
|
||||
"aliases": [
|
||||
"!reset!",
|
||||
"MS_BTN5"
|
||||
@@ -84,7 +84,7 @@
|
||||
"0x00D6": {
|
||||
"group": "mouse",
|
||||
"key": "QK_MOUSE_BUTTON_6",
|
||||
"label": "Mouse button 6",
|
||||
"label": "Mouse Button 6",
|
||||
"aliases": [
|
||||
"!reset!",
|
||||
"MS_BTN6"
|
||||
@@ -93,7 +93,7 @@
|
||||
"0x00D7": {
|
||||
"group": "mouse",
|
||||
"key": "QK_MOUSE_BUTTON_7",
|
||||
"label": "Mouse button 7",
|
||||
"label": "Mouse Button 7",
|
||||
"aliases": [
|
||||
"!reset!",
|
||||
"MS_BTN7"
|
||||
@@ -102,7 +102,7 @@
|
||||
"0x00D8": {
|
||||
"group": "mouse",
|
||||
"key": "QK_MOUSE_BUTTON_8",
|
||||
"label": "Mouse button 8",
|
||||
"label": "Mouse Button 8",
|
||||
"aliases": [
|
||||
"!reset!",
|
||||
"MS_BTN8"
|
||||
@@ -111,7 +111,7 @@
|
||||
"0x00D9": {
|
||||
"group": "mouse",
|
||||
"key": "QK_MOUSE_WHEEL_UP",
|
||||
"label": "Mouse wheel up",
|
||||
"label": "Mouse Wheel Up",
|
||||
"aliases": [
|
||||
"!reset!",
|
||||
"MS_WHLU"
|
||||
@@ -120,7 +120,7 @@
|
||||
"0x00DA": {
|
||||
"group": "mouse",
|
||||
"key": "QK_MOUSE_WHEEL_DOWN",
|
||||
"label": "Mouse wheel down",
|
||||
"label": "Mouse Wheel Down",
|
||||
"aliases": [
|
||||
"!reset!",
|
||||
"MS_WHLD"
|
||||
@@ -129,7 +129,7 @@
|
||||
"0x00DB": {
|
||||
"group": "mouse",
|
||||
"key": "QK_MOUSE_WHEEL_LEFT",
|
||||
"label": "Mouse wheel left",
|
||||
"label": "Mouse Wheel Left",
|
||||
"aliases": [
|
||||
"!reset!",
|
||||
"MS_WHLL"
|
||||
@@ -138,7 +138,7 @@
|
||||
"0x00DC": {
|
||||
"group": "mouse",
|
||||
"key": "QK_MOUSE_WHEEL_RIGHT",
|
||||
"label": "Mouse wheel right",
|
||||
"label": "Mouse Wheel Right",
|
||||
"aliases": [
|
||||
"!reset!",
|
||||
"MS_WHLR"
|
||||
@@ -147,7 +147,7 @@
|
||||
"0x00DD": {
|
||||
"group": "mouse",
|
||||
"key": "QK_MOUSE_ACCELERATION_0",
|
||||
"label": "Set mouse acceleration to 0",
|
||||
"label": "Acceleration 0",
|
||||
"aliases": [
|
||||
"!reset!",
|
||||
"MS_ACL0"
|
||||
@@ -156,7 +156,7 @@
|
||||
"0x00DE": {
|
||||
"group": "mouse",
|
||||
"key": "QK_MOUSE_ACCELERATION_1",
|
||||
"label": "Set mouse acceleration to 1",
|
||||
"label": "Acceleration 1",
|
||||
"aliases": [
|
||||
"!reset!",
|
||||
"MS_ACL1"
|
||||
@@ -165,7 +165,7 @@
|
||||
"0x00DF": {
|
||||
"group": "mouse",
|
||||
"key": "QK_MOUSE_ACCELERATION_2",
|
||||
"label": "Set mouse acceleration to 2",
|
||||
"label": "Acceleration 2",
|
||||
"aliases": [
|
||||
"!reset!",
|
||||
"MS_ACL2"
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
"0x7780": {
|
||||
"group": "connection",
|
||||
"key": "QK_OUTPUT_AUTO",
|
||||
"label": "Output Auto",
|
||||
"aliases": [
|
||||
"OU_AUTO"
|
||||
]
|
||||
@@ -15,6 +16,7 @@
|
||||
"0x7781": {
|
||||
"group": "connection",
|
||||
"key": "QK_OUTPUT_NEXT",
|
||||
"label": "Next Output",
|
||||
"aliases": [
|
||||
"OU_NEXT"
|
||||
]
|
||||
@@ -22,6 +24,7 @@
|
||||
"0x7782": {
|
||||
"group": "connection",
|
||||
"key": "QK_OUTPUT_PREV",
|
||||
"label": "Previous Output",
|
||||
"aliases": [
|
||||
"OU_PREV"
|
||||
]
|
||||
@@ -29,6 +32,7 @@
|
||||
"0x7783": {
|
||||
"group": "connection",
|
||||
"key": "QK_OUTPUT_NONE",
|
||||
"label": "None",
|
||||
"aliases": [
|
||||
"OU_NONE"
|
||||
]
|
||||
@@ -36,6 +40,7 @@
|
||||
"0x7784": {
|
||||
"group": "connection",
|
||||
"key": "QK_OUTPUT_USB",
|
||||
"label": "USB",
|
||||
"aliases": [
|
||||
"OU_USB"
|
||||
]
|
||||
@@ -43,6 +48,7 @@
|
||||
"0x7785": {
|
||||
"group": "connection",
|
||||
"key": "QK_OUTPUT_2P4GHZ",
|
||||
"label": "2.4GHz",
|
||||
"aliases": [
|
||||
"OU_2P4G"
|
||||
]
|
||||
@@ -50,6 +56,7 @@
|
||||
"0x7786": {
|
||||
"group": "connection",
|
||||
"key": "QK_OUTPUT_BLUETOOTH",
|
||||
"label": "Bluetooth",
|
||||
"aliases": [
|
||||
"OU_BT"
|
||||
]
|
||||
@@ -58,6 +65,7 @@
|
||||
"0x7790": {
|
||||
"group": "connection",
|
||||
"key": "QK_BLUETOOTH_PROFILE_NEXT",
|
||||
"label": "Bluetooth Profile Next",
|
||||
"aliases": [
|
||||
"BT_NEXT"
|
||||
]
|
||||
@@ -65,6 +73,7 @@
|
||||
"0x7791": {
|
||||
"group": "connection",
|
||||
"key": "QK_BLUETOOTH_PROFILE_PREV",
|
||||
"label": "Bluetooth Profile Previous",
|
||||
"aliases": [
|
||||
"BT_PREV"
|
||||
]
|
||||
@@ -72,6 +81,7 @@
|
||||
"0x7792": {
|
||||
"group": "connection",
|
||||
"key": "QK_BLUETOOTH_UNPAIR",
|
||||
"label": "Unpair",
|
||||
"aliases": [
|
||||
"BT_UNPR"
|
||||
]
|
||||
@@ -79,6 +89,7 @@
|
||||
"0x7793": {
|
||||
"group": "connection",
|
||||
"key": "QK_BLUETOOTH_PROFILE1",
|
||||
"label": "Bluetooth Profile 1",
|
||||
"aliases": [
|
||||
"BT_PRF1"
|
||||
]
|
||||
@@ -86,6 +97,7 @@
|
||||
"0x7794": {
|
||||
"group": "connection",
|
||||
"key": "QK_BLUETOOTH_PROFILE2",
|
||||
"label": "Bluetooth Profile 2",
|
||||
"aliases": [
|
||||
"BT_PRF2"
|
||||
]
|
||||
@@ -93,6 +105,7 @@
|
||||
"0x7795": {
|
||||
"group": "connection",
|
||||
"key": "QK_BLUETOOTH_PROFILE3",
|
||||
"label": "Bluetooth Profile 3",
|
||||
"aliases": [
|
||||
"BT_PRF3"
|
||||
]
|
||||
@@ -100,6 +113,7 @@
|
||||
"0x7796": {
|
||||
"group": "connection",
|
||||
"key": "QK_BLUETOOTH_PROFILE4",
|
||||
"label": "Bluetooth Profile 4",
|
||||
"aliases": [
|
||||
"BT_PRF4"
|
||||
]
|
||||
@@ -107,6 +121,7 @@
|
||||
"0x7797": {
|
||||
"group": "connection",
|
||||
"key": "QK_BLUETOOTH_PROFILE5",
|
||||
"label": "Bluetooth Profile 5",
|
||||
"aliases": [
|
||||
"BT_PRF5"
|
||||
]
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
"0x7C7B": {
|
||||
"group": "quantum",
|
||||
"key": "QK_LAYER_LOCK",
|
||||
"label": "Layer Lock",
|
||||
"aliases": [
|
||||
"QK_LLCK"
|
||||
]
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"keycodes": {
|
||||
"0x7819": {
|
||||
"group": "led_matrix",
|
||||
"key": "QK_LED_MATRIX_FLAG_NEXT",
|
||||
"label": "LED Matrix Flag Next",
|
||||
"aliases": [
|
||||
"LM_FLGN"
|
||||
]
|
||||
},
|
||||
"0x781A": {
|
||||
"group": "led_matrix",
|
||||
"key": "QK_LED_MATRIX_FLAG_PREVIOUS",
|
||||
"label": "LED Matrix Flag Previous",
|
||||
"aliases": [
|
||||
"LM_FLGP"
|
||||
]
|
||||
},
|
||||
|
||||
"0x784D": {
|
||||
"group": "rgb_matrix",
|
||||
"key": "QK_RGB_MATRIX_FLAG_NEXT",
|
||||
"label": "RGB Matrix Flag Next",
|
||||
"aliases": [
|
||||
"RM_FLGN"
|
||||
]
|
||||
},
|
||||
"0x784E": {
|
||||
"group": "rgb_matrix",
|
||||
"key": "QK_RGB_MATRIX_FLAG_PREVIOUS",
|
||||
"label": "RGB Matrix Flag Previous",
|
||||
"aliases": [
|
||||
"RM_FLGP"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,265 @@
|
||||
{
|
||||
"ranges": {
|
||||
"0x5A40/0x003F": {
|
||||
"define": "QK_PLOVER_HID"
|
||||
}
|
||||
},
|
||||
"keycodes": {
|
||||
"0x5A40": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_S1"
|
||||
},
|
||||
"0x5A41": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_TL"
|
||||
},
|
||||
"0x5A42": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_KL"
|
||||
},
|
||||
"0x5A43": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_PL"
|
||||
},
|
||||
"0x5A44": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_WL"
|
||||
},
|
||||
"0x5A45": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_HL"
|
||||
},
|
||||
"0x5A46": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_RL"
|
||||
},
|
||||
"0x5A47": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_A"
|
||||
},
|
||||
"0x5A48": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_O"
|
||||
},
|
||||
"0x5A49": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_ST1"
|
||||
},
|
||||
"0x5A4A": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_E"
|
||||
},
|
||||
"0x5A4B": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_U"
|
||||
},
|
||||
"0x5A4C": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_FR"
|
||||
},
|
||||
"0x5A4D": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_RR"
|
||||
},
|
||||
"0x5A4E": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_PR"
|
||||
},
|
||||
"0x5A4F": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_BR"
|
||||
},
|
||||
"0x5A50": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_LR"
|
||||
},
|
||||
"0x5A51": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_GR"
|
||||
},
|
||||
"0x5A52": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_TR"
|
||||
},
|
||||
"0x5A53": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_SR"
|
||||
},
|
||||
"0x5A54": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_DR"
|
||||
},
|
||||
"0x5A55": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_ZR"
|
||||
},
|
||||
"0x5A56": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_N1"
|
||||
},
|
||||
"0x5A57": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_S2"
|
||||
},
|
||||
"0x5A58": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_ST2"
|
||||
},
|
||||
"0x5A59": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_ST3"
|
||||
},
|
||||
"0x5A5A": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_ST4"
|
||||
},
|
||||
"0x5A5B": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_N2"
|
||||
},
|
||||
"0x5A5C": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_N3"
|
||||
},
|
||||
"0x5A5D": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_N4"
|
||||
},
|
||||
"0x5A5E": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_N5"
|
||||
},
|
||||
"0x5A5F": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_N6"
|
||||
},
|
||||
"0x5A60": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_N7"
|
||||
},
|
||||
"0x5A61": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_N8"
|
||||
},
|
||||
"0x5A62": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_N9"
|
||||
},
|
||||
"0x5A63": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_NA"
|
||||
},
|
||||
"0x5A64": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_NB"
|
||||
},
|
||||
"0x5A65": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_NC"
|
||||
},
|
||||
"0x5A66": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_X1"
|
||||
},
|
||||
"0x5A67": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_X2"
|
||||
},
|
||||
"0x5A68": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_X3"
|
||||
},
|
||||
"0x5A69": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_X4"
|
||||
},
|
||||
"0x5A6A": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_X5"
|
||||
},
|
||||
"0x5A6B": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_X6"
|
||||
},
|
||||
"0x5A6C": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_X7"
|
||||
},
|
||||
"0x5A6D": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_X8"
|
||||
},
|
||||
"0x5A6E": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_X9"
|
||||
},
|
||||
"0x5A6F": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_X10"
|
||||
},
|
||||
"0x5A70": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_X11"
|
||||
},
|
||||
"0x5A71": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_X12"
|
||||
},
|
||||
"0x5A72": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_X13"
|
||||
},
|
||||
"0x5A73": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_X14"
|
||||
},
|
||||
"0x5A74": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_X15"
|
||||
},
|
||||
"0x5A75": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_X16"
|
||||
},
|
||||
"0x5A76": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_X17"
|
||||
},
|
||||
"0x5A77": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_X18"
|
||||
},
|
||||
"0x5A78": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_X19"
|
||||
},
|
||||
"0x5A79": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_X20"
|
||||
},
|
||||
"0x5A7A": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_X21"
|
||||
},
|
||||
"0x5A7B": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_X22"
|
||||
},
|
||||
"0x5A7C": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_X23"
|
||||
},
|
||||
"0x5A7D": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_X24"
|
||||
},
|
||||
"0x5A7E": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_X25"
|
||||
},
|
||||
"0x5A7F": {
|
||||
"group": "plover_hid",
|
||||
"key": "PLV_X26"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
// This version exists to signify addition of split data sync support.
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
// This version exists to signify addition of eeconfig support.
|
||||
}
|
||||
@@ -19,6 +19,8 @@
|
||||
// Audio
|
||||
"AUDIO_DEFAULT_ON": {"info_key": "audio.default.on", "value_type": "bool"},
|
||||
"AUDIO_DEFAULT_CLICKY_ON": {"info_key": "audio.default.clicky", "value_type": "bool"},
|
||||
"AUDIO_PIN": {"info_key": "audio.pins.0"},
|
||||
"AUDIO_PIN_ALT": {"info_key": "audio.pins.1"},
|
||||
"AUDIO_POWER_CONTROL_PIN": {"info_key": "audio.power_control.pin"},
|
||||
"AUDIO_POWER_CONTROL_PIN_ON_STATE": {"info_key": "audio.power_control.on_state", "value_type": "int" },
|
||||
"AUDIO_VOICES": {"info_key": "audio.voices", "value_type": "flag"},
|
||||
@@ -43,6 +45,14 @@
|
||||
"BOOTMAGIC_ROW": {"info_key": "bootmagic.matrix.0", "value_type": "int"},
|
||||
"BOOTMAGIC_ROW_RIGHT": {"info_key": "split.bootmagic.matrix.0", "value_type": "int"},
|
||||
|
||||
// Battery
|
||||
"BATTERY_SAMPLE_INTERVAL": {"info_key": "battery.sample_interval", "value_type": "int"},
|
||||
"BATTERY_ADC_PIN": {"info_key": "battery.adc.pin"},
|
||||
"BATTERY_ADC_REF_VOLTAGE_MV": {"info_key": "battery.adc.reference_voltage", "value_type": "int"},
|
||||
"BATTERY_ADC_VOLTAGE_DIVIDER_R1": {"info_key": "battery.adc.divider_r1", "value_type": "int"},
|
||||
"BATTERY_ADC_VOLTAGE_DIVIDER_R2": {"info_key": "battery.adc.divider_r2", "value_type": "int"},
|
||||
"BATTERY_ADC_RESOLUTION": {"info_key": "battery.adc.resolution", "value_type": "int"},
|
||||
|
||||
// Caps Word
|
||||
"BOTH_SHIFTS_TURNS_ON_CAPS_WORD": {"info_key": "caps_word.both_shifts_turns_on", "value_type": "flag"},
|
||||
"CAPS_WORD_IDLE_TIMEOUT": {"info_key": "caps_word.idle_timeout", "value_type": "int"},
|
||||
@@ -90,6 +100,7 @@
|
||||
|
||||
// LED Matrix
|
||||
"LED_MATRIX_CENTER": {"info_key": "led_matrix.center_point", "value_type": "array.int"},
|
||||
"LED_MATRIX_FLAG_STEPS": {"info_key": "led_matrix.flag_steps", "value_type": "array.int"},
|
||||
"LED_MATRIX_KEYRELEASES": {"info_key": "led_matrix.react_on_keyup", "value_type": "flag"},
|
||||
"LED_MATRIX_LED_FLUSH_LIMIT": {"info_key": "led_matrix.led_flush_limit", "value_type": "int"},
|
||||
"LED_MATRIX_LED_PROCESS_LIMIT": {"info_key": "led_matrix.led_process_limit", "value_type": "int", "to_json": false},
|
||||
@@ -103,6 +114,7 @@
|
||||
"LED_MATRIX_DEFAULT_ON": {"info_key": "led_matrix.default.on", "value_type": "bool"},
|
||||
"LED_MATRIX_DEFAULT_VAL": {"info_key": "led_matrix.default.val", "value_type": "int"},
|
||||
"LED_MATRIX_DEFAULT_SPD": {"info_key": "led_matrix.default.speed", "value_type": "int"},
|
||||
"LED_MATRIX_DEFAULT_FLAGS": {"info_key": "led_matrix.default.flags", "value_type": "int"},
|
||||
|
||||
// Locking Switch
|
||||
"LOCKING_SUPPORT_ENABLE": {"info_key": "qmk.locking.enabled", "value_type": "flag"},
|
||||
@@ -120,6 +132,7 @@
|
||||
"MATRIX_HAS_GHOST": {"info_key": "matrix_pins.ghost", "value_type": "flag"},
|
||||
"MATRIX_INPUT_PRESSED_STATE": {"info_key": "matrix_pins.input_pressed_state", "value_type": "int"},
|
||||
"MATRIX_IO_DELAY": {"info_key": "matrix_pins.io_delay", "value_type": "int"},
|
||||
"MATRIX_MASKED": {"info_key": "matrix_pins.masked", "value_type": "flag"},
|
||||
|
||||
// Mouse Keys
|
||||
"MOUSEKEY_DELAY": {"info_key": "mousekey.delay", "value_type": "int"},
|
||||
@@ -138,6 +151,7 @@
|
||||
|
||||
// RGB Matrix
|
||||
"RGB_MATRIX_CENTER": {"info_key": "rgb_matrix.center_point", "value_type": "array.int"},
|
||||
"RGB_MATRIX_FLAG_STEPS": {"info_key": "rgb_matrix.flag_steps", "value_type": "array.int"},
|
||||
"RGB_MATRIX_HUE_STEP": {"info_key": "rgb_matrix.hue_steps", "value_type": "int"},
|
||||
"RGB_MATRIX_KEYRELEASES": {"info_key": "rgb_matrix.react_on_keyup", "value_type": "flag"},
|
||||
"RGB_MATRIX_LED_FLUSH_LIMIT": {"info_key": "rgb_matrix.led_flush_limit", "value_type": "int"},
|
||||
@@ -155,6 +169,7 @@
|
||||
"RGB_MATRIX_DEFAULT_SAT": {"info_key": "rgb_matrix.default.sat", "value_type": "int"},
|
||||
"RGB_MATRIX_DEFAULT_VAL": {"info_key": "rgb_matrix.default.val", "value_type": "int"},
|
||||
"RGB_MATRIX_DEFAULT_SPD": {"info_key": "rgb_matrix.default.speed", "value_type": "int"},
|
||||
"RGB_MATRIX_DEFAULT_FLAGS": {"info_key": "rgb_matrix.default.flags", "value_type": "int"},
|
||||
|
||||
// RGBLight
|
||||
"RGBLED_SPLIT": {"info_key": "rgblight.split_count", "value_type": "array.int"},
|
||||
@@ -183,7 +198,7 @@
|
||||
|
||||
// Split Keyboard
|
||||
"SOFT_SERIAL_PIN": {"info_key": "split.serial.pin"},
|
||||
"SOFT_SERIAL_SPEED": {"info_key": "split.soft_serial_speed"},
|
||||
"SELECT_SOFT_SERIAL_SPEED": {"info_key": "split.serial.speed", "value_type": "int"},
|
||||
"SPLIT_HAND_MATRIX_GRID": {"info_key": "split.handedness.matrix_grid", "value_type": "array", "to_c": false},
|
||||
"SPLIT_HAND_PIN": {"info_key": "split.handedness.pin"},
|
||||
"SPLIT_USB_DETECT": {"info_key": "split.usb_detect.enabled", "value_type": "flag"},
|
||||
@@ -211,6 +226,9 @@
|
||||
"PERMISSIVE_HOLD_PER_KEY": {"info_key": "tapping.permissive_hold_per_key", "value_type": "flag"},
|
||||
"RETRO_TAPPING": {"info_key": "tapping.retro", "value_type": "flag"},
|
||||
"RETRO_TAPPING_PER_KEY": {"info_key": "tapping.retro_per_key", "value_type": "flag"},
|
||||
"SPECULATIVE_HOLD": {"info_key": "tapping.speculative_hold", "value_type": "flag"},
|
||||
"SPECULATIVE_HOLD_FLOW_TERM": {"info_key": "tapping.speculative_hold_flow_term", "value_type": "int"},
|
||||
"SPECULATIVE_HOLD_ONE_KEY": {"info_key": "tapping.speculative_hold_one_key", "value_type": "flag"},
|
||||
"TAP_CODE_DELAY": {"info_key": "qmk.tap_keycode_delay", "value_type": "int"},
|
||||
"TAP_HOLD_CAPS_DELAY": {"info_key": "qmk.tap_capslock_delay", "value_type": "int"},
|
||||
"TAPPING_TERM": {"info_key": "tapping.term", "value_type": "int"},
|
||||
@@ -255,9 +273,9 @@
|
||||
"PRODUCT": {"info_key": "keyboard_name", "warn_duplicate": false, "value_type": "str", "deprecated": true, "replace_with": "`keyboard_name` in info.json"},
|
||||
"PRODUCT_ID": {"info_key": "usb.pid", "value_type": "hex", "deprecated": true, "replace_with": "`usb.pid` in info.json"},
|
||||
"VENDOR_ID": {"info_key": "usb.vid", "value_type": "hex", "deprecated": true, "replace_with": "`usb.vid` in info.json"},
|
||||
"FORCE_NKRO": {"info_key": "usb.force_nkro", "value_type": "flag", "deprecated": true, "replace_with": "`host.default.nkro` in info.json"},
|
||||
|
||||
// Items we want flagged in lint
|
||||
"FORCE_NKRO": {"info_key": "usb.force_nkro", "value_type": "flag", "invalid": true, "replace_with": "`host.default.nkro` in info.json"},
|
||||
"VIAL_KEYBOARD_UID": {"info_key": "_invalid.vial_uid", "invalid": true},
|
||||
"VIAL_UNLOCK_COMBO_COLS": {"info_key": "_invalid.vial_unlock_cols", "invalid": true},
|
||||
"VIAL_UNLOCK_COMBO_ROWS": {"info_key": "_invalid.vial_unlock_rows", "invalid": true}
|
||||
|
||||
@@ -11,6 +11,9 @@
|
||||
"on_state": 1
|
||||
},
|
||||
"debounce": 5,
|
||||
"dynamic_keymap": {
|
||||
"layer_count": 4
|
||||
},
|
||||
"features": {
|
||||
"command": false,
|
||||
"console": false
|
||||
@@ -23,7 +26,8 @@
|
||||
"animation": "solid",
|
||||
"on": true,
|
||||
"val": 255,
|
||||
"speed": 128
|
||||
"speed": 128,
|
||||
"flags": 255
|
||||
},
|
||||
"led_flush_limit": 16,
|
||||
"max_brightness": 255,
|
||||
@@ -53,7 +57,8 @@
|
||||
"hue": 0,
|
||||
"sat": 255,
|
||||
"val": 255,
|
||||
"speed": 128
|
||||
"speed": 128,
|
||||
"flags": 255
|
||||
},
|
||||
"hue_steps": 8,
|
||||
"led_flush_limit": 16,
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
|
||||
"AUDIO_DRIVER": {"info_key": "audio.driver"},
|
||||
"BACKLIGHT_DRIVER": {"info_key": "backlight.driver"},
|
||||
"BATTERY_DRIVER": {"info_key": "battery.driver"},
|
||||
"BLUETOOTH_DRIVER": {"info_key": "bluetooth.driver"},
|
||||
"BOARD": {"info_key": "board"},
|
||||
"BOOTLOADER": {"info_key": "bootloader", "warn_duplicate": false},
|
||||
@@ -53,8 +54,8 @@
|
||||
"WS2812_DRIVER": {"info_key": "ws2812.driver"},
|
||||
|
||||
// Items we want flagged in lint
|
||||
"DEFAULT_FOLDER": {"info_key": "_deprecated.default_folder", "deprecated": true},
|
||||
"CTPC": {"info_key": "_invalid.ctpc", "invalid": true, "replace_with": "CONVERT_TO=proton_c"},
|
||||
"CONVERT_TO_PROTON_C": {"info_key": "_invalid.ctpc", "invalid": true, "replace_with": "CONVERT_TO=proton_c"},
|
||||
"DEFAULT_FOLDER": {"info_key": "_invalid.default_folder", "invalid": true},
|
||||
"VIAL_ENABLE": {"info_key": "_invalid.vial", "invalid": true}
|
||||
}
|
||||
|
||||
@@ -68,6 +68,81 @@
|
||||
"bakeneko80": {
|
||||
"target": "kkatano/bakeneko80"
|
||||
},
|
||||
"bastardkb/charybdis/3x5/v2/elitec": {
|
||||
"target": "bastardkb/charybdis/3x5/elitec"
|
||||
},
|
||||
"bastardkb/charybdis/3x5/v2/splinky_2": {
|
||||
"target": "bastardkb/charybdis/3x5/elitec"
|
||||
},
|
||||
"bastardkb/charybdis/3x5/v2/splinky_3": {
|
||||
"target": "bastardkb/charybdis/3x5/elitec"
|
||||
},
|
||||
"bastardkb/charybdis/3x5/v2/stemcell": {
|
||||
"target": "bastardkb/charybdis/3x5/elitec"
|
||||
},
|
||||
"bastardkb/charybdis/3x6/v2/elitec": {
|
||||
"target": "bastardkb/charybdis/3x6/elitec"
|
||||
},
|
||||
"bastardkb/charybdis/3x6/v2/splinky_2": {
|
||||
"target": "bastardkb/charybdis/3x6/elitec"
|
||||
},
|
||||
"bastardkb/charybdis/3x6/v2/splinky_3": {
|
||||
"target": "bastardkb/charybdis/3x6/elitec"
|
||||
},
|
||||
"bastardkb/charybdis/3x6/v2/stemcell": {
|
||||
"target": "bastardkb/charybdis/3x6/elitec"
|
||||
},
|
||||
"bastardkb/charybdis/4x6/v2/elitec": {
|
||||
"target": "bastardkb/charybdis/4x6/elitec"
|
||||
},
|
||||
"bastardkb/charybdis/4x6/v2/splinky_2": {
|
||||
"target": "bastardkb/charybdis/4x6/elitec"
|
||||
},
|
||||
"bastardkb/charybdis/4x6/v2/splinky_3": {
|
||||
"target": "bastardkb/charybdis/4x6/elitec"
|
||||
},
|
||||
"bastardkb/charybdis/4x6/v2/stemcell": {
|
||||
"target": "bastardkb/charybdis/4x6/elitec"
|
||||
},
|
||||
"bastardkb/dilemma/3x5_2/splinky": {
|
||||
"target": "bastardkb/dilemma/3x5_2/promicro"
|
||||
},
|
||||
"bastardkb/scylla/v2/elitec": {
|
||||
"target": "bastardkb/scylla/promicro"
|
||||
},
|
||||
"bastardkb/scylla/v2/splinky_2": {
|
||||
"target": "bastardkb/scylla/promicro"
|
||||
},
|
||||
"bastardkb/scylla/v2/splinky_3": {
|
||||
"target": "bastardkb/scylla/promicro"
|
||||
},
|
||||
"bastardkb/scylla/v2/stemcell": {
|
||||
"target": "bastardkb/scylla/promicro"
|
||||
},
|
||||
"bastardkb/skeletyl/v2/elitec": {
|
||||
"target": "bastardkb/skeletyl/promicro"
|
||||
},
|
||||
"bastardkb/skeletyl/v2/splinky_2": {
|
||||
"target": "bastardkb/skeletyl/promicro"
|
||||
},
|
||||
"bastardkb/skeletyl/v2/splinky_3": {
|
||||
"target": "bastardkb/skeletyl/promicro"
|
||||
},
|
||||
"bastardkb/skeletyl/v2/stemcell": {
|
||||
"target": "bastardkb/skeletyl/promicro"
|
||||
},
|
||||
"bastardkb/tbkmini/v2/elitec": {
|
||||
"target": "bastardkb/tbkmini/promicro"
|
||||
},
|
||||
"bastardkb/tbkmini/v2/splinky_2": {
|
||||
"target": "bastardkb/tbkmini/promicro"
|
||||
},
|
||||
"bastardkb/tbkmini/v2/splinky_3": {
|
||||
"target": "bastardkb/tbkmini/promicro"
|
||||
},
|
||||
"bastardkb/tbkmini/v2/stemcell": {
|
||||
"target": "bastardkb/tbkmini/promicro"
|
||||
},
|
||||
"bear_face": {
|
||||
"target": "bear_face/v1"
|
||||
},
|
||||
@@ -257,44 +332,11 @@
|
||||
"handwired/jscotto/scottostarter": {
|
||||
"target": "handwired/scottokeebs/scottostarter"
|
||||
},
|
||||
"helix/pico/sc/back": {
|
||||
"target": "helix/pico/sc"
|
||||
"helix": {
|
||||
"target": "helix/beta"
|
||||
},
|
||||
"helix/pico/sc/under": {
|
||||
"target": "helix/pico/sc"
|
||||
},
|
||||
"helix/rev2/back/oled": {
|
||||
"target": "helix/rev2/back"
|
||||
},
|
||||
"helix/rev2/oled": {
|
||||
"target": "helix/rev2"
|
||||
},
|
||||
"helix/rev2/oled/back": {
|
||||
"target": "helix/rev2/back"
|
||||
},
|
||||
"helix/rev2/oled/under": {
|
||||
"target": "helix/rev2/under"
|
||||
},
|
||||
"helix/rev2/sc/back": {
|
||||
"target": "helix/rev2/sc"
|
||||
},
|
||||
"helix/rev2/sc/oled": {
|
||||
"target": "helix/rev2/sc"
|
||||
},
|
||||
"helix/rev2/sc/oledback": {
|
||||
"target": "helix/rev2/sc"
|
||||
},
|
||||
"helix/rev2/sc/oledunder": {
|
||||
"target": "helix/rev2/sc"
|
||||
},
|
||||
"helix/rev2/sc/under": {
|
||||
"target": "helix/rev2/sc"
|
||||
},
|
||||
"helix/rev2/under": {
|
||||
"target": "helix/rev2/sc"
|
||||
},
|
||||
"helix/rev2/under/oled": {
|
||||
"target": "helix/rev2/under"
|
||||
"helix/rev2": {
|
||||
"target": "helix/beta"
|
||||
},
|
||||
"honeycomb": {
|
||||
"target": "keyhive/honeycomb"
|
||||
@@ -407,6 +449,9 @@
|
||||
"lfkeyboards/smk65": {
|
||||
"target": "lfkeyboards/smk65/revb"
|
||||
},
|
||||
"ll3macorn/bongopad": {
|
||||
"target": "ll3ma/bongopad"
|
||||
},
|
||||
"m3v3van": {
|
||||
"target": "matthewdias/m3n3van"
|
||||
},
|
||||
@@ -1575,8 +1620,11 @@
|
||||
"0_sixty": {
|
||||
"target": "0_sixty/base"
|
||||
},
|
||||
"0xcb/splaytoraid": {
|
||||
"target": "0xcb/splaytoraid/rp2040_ce"
|
||||
"0xcb/splaytoraid/32u4": {
|
||||
"target": "0xcb/splaytoraid"
|
||||
},
|
||||
"0xcb/splaytoraid/rp2040_ce": {
|
||||
"target": "0xcb/splaytoraid"
|
||||
},
|
||||
"1upkeyboards/pi40": {
|
||||
"target": "1upkeyboards/pi40/mit_v1_0"
|
||||
@@ -1587,12 +1635,24 @@
|
||||
"1upkeyboards/sweet16": {
|
||||
"target": "1upkeyboards/sweet16/v1"
|
||||
},
|
||||
"1upkeyboards/sweet16v2/kb2040": {
|
||||
"target": "1upkeyboards/sweet16v2"
|
||||
},
|
||||
"1upkeyboards/sweet16v2/pro_micro": {
|
||||
"target": "1upkeyboards/sweet16v2"
|
||||
},
|
||||
"25keys/aleth42": {
|
||||
"target": "25keys/aleth42/rev1"
|
||||
},
|
||||
"25keys/zinc": {
|
||||
"target": "25keys/zinc/rev1"
|
||||
},
|
||||
"40percentclub/gherkin/kb2040": {
|
||||
"target": "40percentclub/gherkin"
|
||||
},
|
||||
"40percentclub/gherkin/pro_micro": {
|
||||
"target": "40percentclub/gherkin"
|
||||
},
|
||||
"40percentclub/i75": {
|
||||
"target": "40percentclub/i75/promicro"
|
||||
},
|
||||
@@ -1690,7 +1750,7 @@
|
||||
"target": "durgod/dgk6x/galaxy"
|
||||
},
|
||||
"durgod/venus": {
|
||||
"target": "durgod/dgk6x/venus"
|
||||
"target": "durgod/dgk6x/venus_ansi"
|
||||
},
|
||||
"dztech/tofu/ii": {
|
||||
"target": "dztech/tofu/ii/v1"
|
||||
@@ -1881,6 +1941,12 @@
|
||||
"kin80": {
|
||||
"target": "kin80/blackpill401"
|
||||
},
|
||||
"kprepublic/cstc40/daughterboard": {
|
||||
"target": "kprepublic/cstc40/rev1"
|
||||
},
|
||||
"kprepublic/cstc40/single_pcb": {
|
||||
"target": "kprepublic/cstc40/rev2"
|
||||
},
|
||||
"kumaokobo/kudox_full": {
|
||||
"target": "kumaokobo/kudox_full/rev1"
|
||||
},
|
||||
@@ -2214,8 +2280,17 @@
|
||||
"trnthsn/s6xty5neor2": {
|
||||
"target": "trnthsn/s6xty5neor2/stm32f103"
|
||||
},
|
||||
"tweetydabird/lotus58": {
|
||||
"target": "tweetydabird/lotus58/promicro"
|
||||
"tweetydabird/lotus58/elite_c": {
|
||||
"target": "tweetydabird/lotus58"
|
||||
},
|
||||
"tweetydabird/lotus58/nanoboot": {
|
||||
"target": "tweetydabird/lotus58"
|
||||
},
|
||||
"tweetydabird/lotus58/promicro": {
|
||||
"target": "tweetydabird/lotus58"
|
||||
},
|
||||
"tweetydabird/lotus58/rp2040_ce": {
|
||||
"target": "tweetydabird/lotus58"
|
||||
},
|
||||
"unison": {
|
||||
"target": "unison/v04"
|
||||
@@ -2258,5 +2333,54 @@
|
||||
},
|
||||
"zsa/planck_ez": {
|
||||
"target": "zsa/planck_ez/base"
|
||||
},
|
||||
// DEFAULT_FOLDER removed during 2025 Q3 cycle
|
||||
"cannonkeys/satisfaction75": {
|
||||
"target": "cannonkeys/satisfaction75/rev1"
|
||||
},
|
||||
"converter/adb_usb": {
|
||||
"target": "converter/adb_usb/rev1"
|
||||
},
|
||||
"converter/sun_usb": {
|
||||
"target": "converter/sun_usb/type5"
|
||||
},
|
||||
"converter/usb_usb": {
|
||||
"target": "converter/usb_usb/hasu"
|
||||
},
|
||||
"durgod/dgk6x": {
|
||||
"target": "durgod/dgk6x/hades_ansi"
|
||||
},
|
||||
"ergodox_ez": {
|
||||
"target": "ergodox_ez/base"
|
||||
},
|
||||
"ferris/0_2": {
|
||||
"target": "ferris/0_2/base"
|
||||
},
|
||||
"handwired/dygma/raise": {
|
||||
"target": "handwired/dygma/raise/ansi"
|
||||
},
|
||||
"helix/rev3_4rows": {
|
||||
"target": "helix/rev3"
|
||||
},
|
||||
"helix/rev3_5rows": {
|
||||
"target": "helix/rev3"
|
||||
},
|
||||
"ibm/model_m/mschwingen": {
|
||||
"target": "ibm/model_m/mschwingen/led_wired"
|
||||
},
|
||||
"mechwild/sugarglider": {
|
||||
"target": "mechwild/sugarglider/wide_oled/f401"
|
||||
},
|
||||
"mechwild/sugarglider/wide_oled": {
|
||||
"target": "mechwild/sugarglider/wide_oled/f401"
|
||||
},
|
||||
"novelkeys/nk65": {
|
||||
"target": "novelkeys/nk65/v1"
|
||||
},
|
||||
"novelkeys/nk65/base": {
|
||||
"target": "novelkeys/nk65/v1"
|
||||
},
|
||||
"sirius/uni660/rev2": {
|
||||
"target": "sirius/uni660/rev2/ansi"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,7 +46,8 @@
|
||||
"manufacturer": {"$ref": "./definitions.jsonschema#/text_identifier"},
|
||||
"url": {
|
||||
"type": "string",
|
||||
"format": "uri"
|
||||
"format": "uri",
|
||||
"minLength": 1
|
||||
},
|
||||
"development_board": {
|
||||
"type": "string",
|
||||
@@ -188,6 +189,28 @@
|
||||
"as_caps_lock": {"type": "boolean"}
|
||||
}
|
||||
},
|
||||
"battery": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"driver": {
|
||||
"type": "string",
|
||||
"enum": ["adc", "custom", "vendor"]
|
||||
},
|
||||
"adc": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"pin": {"$ref": "./definitions.jsonschema#/mcu_pin"},
|
||||
"reference_voltage": {"type": "integer"},
|
||||
"divider_r1": {"type": "integer"},
|
||||
"divider_r2": {"type": "integer"},
|
||||
"resolution": {"type": "integer"}
|
||||
}
|
||||
},
|
||||
"sample_interval": {"type": "integer"}
|
||||
}
|
||||
},
|
||||
"bluetooth": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
@@ -311,6 +334,17 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"dynamic_keymap": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"eeprom_max_addr": {"$ref": "./definitions.jsonschema#/unsigned_int"},
|
||||
"layer_count": {
|
||||
"type": "integer",
|
||||
"minimum": 1,
|
||||
"maximum": 32
|
||||
}
|
||||
}
|
||||
},
|
||||
"eeprom": {
|
||||
"properties": {
|
||||
"driver": {"type": "string"},
|
||||
@@ -473,6 +507,7 @@
|
||||
"ghost": {"type": "boolean"},
|
||||
"input_pressed_state": {"$ref": "./definitions.jsonschema#/unsigned_int"},
|
||||
"io_delay": {"$ref": "./definitions.jsonschema#/unsigned_int"},
|
||||
"masked": {"type": "boolean"},
|
||||
"direct": {
|
||||
"type": "array",
|
||||
"items": {"$ref": "./definitions.jsonschema#/mcu_pin_array"}
|
||||
@@ -520,7 +555,8 @@
|
||||
"on": {"type": "boolean"},
|
||||
"animation": {"type": "string"},
|
||||
"val": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
|
||||
"speed": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}
|
||||
"speed": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
|
||||
"flags": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}
|
||||
}
|
||||
},
|
||||
"driver": {
|
||||
@@ -548,6 +584,11 @@
|
||||
"maxItems": 2,
|
||||
"items": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}
|
||||
},
|
||||
"flag_steps": {
|
||||
"type": "array",
|
||||
"minItems": 1,
|
||||
"items": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}
|
||||
},
|
||||
"max_brightness": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
|
||||
"timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"},
|
||||
"val_steps": {"$ref": "./definitions.jsonschema#/unsigned_int"},
|
||||
@@ -603,7 +644,8 @@
|
||||
"hue": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
|
||||
"sat": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
|
||||
"val": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
|
||||
"speed": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}
|
||||
"speed": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
|
||||
"flags": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}
|
||||
}
|
||||
},
|
||||
"driver": {
|
||||
@@ -633,6 +675,11 @@
|
||||
"maxItems": 2,
|
||||
"items": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}
|
||||
},
|
||||
"flag_steps": {
|
||||
"type": "array",
|
||||
"minItems": 1,
|
||||
"items": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}
|
||||
},
|
||||
"max_brightness": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
|
||||
"timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"},
|
||||
"hue_steps": {"$ref": "./definitions.jsonschema#/unsigned_int"},
|
||||
@@ -863,8 +910,7 @@
|
||||
},
|
||||
"soft_serial_speed": {
|
||||
"type": "integer",
|
||||
"minimum": 0,
|
||||
"maximum": 5
|
||||
"$comment": "Deprecated: use split.serial.speed instead"
|
||||
},
|
||||
"serial": {
|
||||
"type": "object",
|
||||
@@ -874,7 +920,12 @@
|
||||
"type": "string",
|
||||
"enum": ["bitbang", "usart", "vendor"]
|
||||
},
|
||||
"pin": {"$ref": "./definitions.jsonschema#/mcu_pin"}
|
||||
"pin": {"$ref": "./definitions.jsonschema#/mcu_pin"},
|
||||
"speed": {
|
||||
"type": "integer",
|
||||
"minimum": 0,
|
||||
"maximum": 5
|
||||
}
|
||||
}
|
||||
},
|
||||
"transport": {
|
||||
@@ -942,6 +993,7 @@
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"chordal_hold": {"type": "boolean"},
|
||||
"flow_tap_term": {"$ref": "./definitions.jsonschema#/unsigned_int"},
|
||||
"force_hold": {"type": "boolean"},
|
||||
"force_hold_per_key": {"type": "boolean"},
|
||||
"ignore_mod_tap_interrupt": {"type": "boolean"},
|
||||
@@ -951,6 +1003,9 @@
|
||||
"permissive_hold_per_key": {"type": "boolean"},
|
||||
"retro": {"type": "boolean"},
|
||||
"retro_per_key": {"type": "boolean"},
|
||||
"speculative_hold": {"type": "boolean"},
|
||||
"speculative_hold_flow_term": {"$ref": "./definitions.jsonschema#/unsigned_int"},
|
||||
"speculative_hold_one_key": {"type": "boolean"},
|
||||
"term": {"$ref": "./definitions.jsonschema#/unsigned_int"},
|
||||
"term_per_key": {"type": "boolean"},
|
||||
"toggle": {"$ref": "./definitions.jsonschema#/unsigned_int"}
|
||||
|
||||
@@ -35,6 +35,17 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"dip_switches": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": ["on", "off"],
|
||||
"properties": {
|
||||
"on": {"type": "string"},
|
||||
"off": {"type": "string"}
|
||||
}
|
||||
}
|
||||
},
|
||||
"macros": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
|
||||
@@ -36,7 +36,7 @@ Four times a year QMK runs a process for merging Breaking Changes. A Breaking Ch
|
||||
## Encoder flip
|
||||
|
||||
* Flips the encoder direction so that `clockwise == true` is for actually turning the knob clockwise
|
||||
* Adds `ENCODER_DIRECTION_FLIP` define, so that reversing the expected dirction is simple for users.
|
||||
* Adds `ENCODER_DIRECTION_FLIP` define, so that reversing the expected direction is simple for users.
|
||||
* Cleans up documentation page for encoders
|
||||
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ These PRs move the V-USB driver code out of the qmk_firmware repository and into
|
||||
|
||||
Updates all of the per key tap-hold functions to pass the `keyrecord_t` structure, and include documentation changes.
|
||||
|
||||
Any remaining versions or code outside of the main repo will need to be converted:
|
||||
Any remaining versions or code outside of the main repo will need to be converted:
|
||||
| Old function | New Function |
|
||||
|------------------------------------------------------|---------------------------------------------------------------------------|
|
||||
|`uint16_t get_tapping_term(uint16_t keycode)` |`uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record)` |
|
||||
@@ -38,7 +38,7 @@ After the next breaking change you will not be able to build if `bin/qmk hello`
|
||||
[#8269](https://github.com/qmk/qmk_firmware/pull/8269)
|
||||
|
||||
- Provides debug functionality on ChibiOS/ARM that is more compliant than previous integrations.
|
||||
- Less maintenence, fewer QMK customisations, and allows QMK to sidestep previous compile and runtime issues.
|
||||
- Less maintenance, fewer QMK customisations, and allows QMK to sidestep previous compile and runtime issues.
|
||||
- A `make git-submodule` may be required after pulling the latest QMK Firmware code to update to the new dependency.
|
||||
|
||||
### Fixed RGB_DISABLE_AFTER_TIMEOUT to be seconds based & small internals cleanup
|
||||
@@ -51,8 +51,10 @@ After the next breaking change you will not be able to build if `bin/qmk hello`
|
||||
|
||||
The `RGB_DISABLE_AFTER_TIMEOUT` definition is now deprecated, and has been superseded by `RGB_DISABLE_TIMEOUT`. To use the new definition, rename `RGB_DISABLE_AFTER_TIMEOUT` to `RGB_DISABLE_TIMEOUT` in your `config.h` file, and multiply the value set by 1200.
|
||||
|
||||
Before: `#define RGB_DISABLE_AFTER_TIMEOUT 100`
|
||||
After: `#define RGB_DISABLE_TIMEOUT 120000`
|
||||
```diff
|
||||
-#define RGB_DISABLE_AFTER_TIMEOUT 100
|
||||
+#define RGB_DISABLE_TIMEOUT 120000
|
||||
```
|
||||
|
||||
### Switch to qmk forks for everything
|
||||
|
||||
@@ -103,8 +105,8 @@ This allows current lily58 firmware to advance with updates to the `split_common
|
||||
- Alternatively, if you did not change the OLED code from that in `default`, you may find it easier to simply copy the [relevant section](https://github.com/qmk/qmk_firmware/blob/4ac310668501ae6786c711ecc8f01f62ddaa1c0b/keyboards/lily58/keymaps/default/keymap.c#L138-L172). Otherwise, the changes you need to make are as follows (sample change [here](https://github.com/qmk/qmk_firmware/pull/6260/files#diff-20943ea59856e9bdf3d99ecb2eee40b7R138-R173))
|
||||
- [Remove](https://github.com/qmk/qmk_firmware/pull/6260/files#diff-20943ea59856e9bdf3d99ecb2eee40b7L138-L141) the block
|
||||
```c
|
||||
#ifdef SSD1306OLED
|
||||
iota_gfx_init(!has_usb()); // turns on the display
|
||||
#ifdef SSD1306OLED
|
||||
iota_gfx_init(!has_usb()); // turns on the display
|
||||
#endif
|
||||
```
|
||||
- Within the block bounded by `#ifdef OLED_DRIVER_ENABLE` and `#endif // OLED_DRIVER_ENABLE`, add the following block to ensure that your two OLEDs are rotated correctly across the left and right sides:
|
||||
@@ -127,7 +129,7 @@ oled_rotation_t oled_init_user(oled_rotation_t rotation) {
|
||||
|
||||
* Refactor to use split_common and remove split codes under the zinc/revx/
|
||||
* Add - backlight RGB LED and/or underglow RGB LED option
|
||||
* Add - continuous RGB animations feature (between L and R halves)
|
||||
* Add - continuous RGB animations feature (between L and R halves)
|
||||
* Fix - keymap files to adapt to changes
|
||||
* all authors of keymaps confirmed this PR
|
||||
* Update - documents and rules.mk
|
||||
@@ -164,8 +166,8 @@ void keyboard_pre_init_kb(void) {
|
||||
- The following changes are for compatibility with the OLED driver. If you don't use the OLED driver you may safely delete [this section](https://github.com/qmk/qmk_firmware/blob/e6b9980bd45c186f7360df68c24b6e05a80c10dc/keyboards/lily58/keymaps/default/keymap.c#L144-L190)
|
||||
- [Remove](https://github.com/qmk/qmk_firmware/pull/6260/files#diff-20943ea59856e9bdf3d99ecb2eee40b7L91-L158) the block
|
||||
```c
|
||||
#ifdef SSD1306OLED
|
||||
iota_gfx_init(!has_usb()); // turns on the display
|
||||
#ifdef SSD1306OLED
|
||||
iota_gfx_init(!has_usb()); // turns on the display
|
||||
#endif
|
||||
```
|
||||
- Within the block bounded by `#ifdef OLED_DRIVER_ENABLE` and `#endif // OLED_DRIVER_ENABLE`, add the following block to ensure that your two OLEDs are rotated correctly across the left and right sides:
|
||||
|
||||
@@ -12,7 +12,7 @@ Added support for MK66F18 (Teensy 3.6) microcontroller.
|
||||
|
||||
### New command: qmk console ([#12828](https://github.com/qmk/qmk_firmware/pull/12828)) {#new-command-qmk-console}
|
||||
|
||||
A new `qmk console` command has been added for attaching to your keyboard's console. It operates similiarly to QMK Toolbox by allowing you to connect to one or more keyboard consoles to display debugging messages.
|
||||
A new `qmk console` command has been added for attaching to your keyboard's console. It operates similarly to QMK Toolbox by allowing you to connect to one or more keyboard consoles to display debugging messages.
|
||||
|
||||
### Improved command: qmk config {#improve-command-qmk-config}
|
||||
|
||||
@@ -121,8 +121,8 @@ bool encoder_update_user(uint8_t index, bool clockwise) {
|
||||
tap_code(KC_UP);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
// If you return true, this will allow the keyboard level code to run, as well.
|
||||
return true;
|
||||
// If you return true, this will allow the keyboard level code to run, as well.
|
||||
//Returning false will override the keyboard level code. Depending on how the keyboard level function is set up.
|
||||
}
|
||||
```
|
||||
|
||||
@@ -104,7 +104,7 @@ void dip_switch_update_user(uint8_t index, bool active) {
|
||||
}
|
||||
}
|
||||
|
||||
void dip_switch_update_mask_kb(uint32_t state) {
|
||||
void dip_switch_update_mask_kb(uint32_t state) {
|
||||
dip_switch_update_mask_user(state);
|
||||
}
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ Bootloader configuration is no longer assumed. Keyboards must now set either:
|
||||
|
||||
### Rename `AdafruitBLE` to `BluefruitLE` ([#16127](https://github.com/qmk/qmk_firmware/pull/16127))
|
||||
|
||||
In preparation of future bluetooth work, the `AdafruitBLE` integration has been renamed to allow potential for any other Adafruit BLE products.
|
||||
In preparation of future bluetooth work, the `AdafruitBLE` integration has been renamed to allow potential for any other Adafruit BLE products.
|
||||
|
||||
### Updated Keyboard Codebases {#updated-keyboard-codebases}
|
||||
|
||||
|
||||
@@ -0,0 +1,181 @@
|
||||
# QMK Breaking Changes - 2025 Aug 31 Changelog
|
||||
|
||||
## Changes Requiring User Action
|
||||
|
||||
### Updated Keyboard Codebases
|
||||
|
||||
| Old Keyboard Name | New Keyboard Name |
|
||||
|--------------------------------------|----------------------------------|
|
||||
| bastardkb/charybdis/3x5/v2/elitec | bastardkb/charybdis/3x5/elitec |
|
||||
| bastardkb/charybdis/3x5/v2/splinky_2 | bastardkb/charybdis/3x5/elitec |
|
||||
| bastardkb/charybdis/3x5/v2/splinky_3 | bastardkb/charybdis/3x5/elitec |
|
||||
| bastardkb/charybdis/3x5/v2/stemcell | bastardkb/charybdis/3x5/elitec |
|
||||
| bastardkb/charybdis/3x6/v2/elitec | bastardkb/charybdis/3x6/elitec |
|
||||
| bastardkb/charybdis/3x6/v2/splinky_2 | bastardkb/charybdis/3x6/elitec |
|
||||
| bastardkb/charybdis/3x6/v2/splinky_3 | bastardkb/charybdis/3x6/elitec |
|
||||
| bastardkb/charybdis/3x6/v2/stemcell | bastardkb/charybdis/3x6/elitec |
|
||||
| bastardkb/charybdis/4x6/v2/elitec | bastardkb/charybdis/4x6/elitec |
|
||||
| bastardkb/charybdis/4x6/v2/splinky_2 | bastardkb/charybdis/4x6/elitec |
|
||||
| bastardkb/charybdis/4x6/v2/splinky_3 | bastardkb/charybdis/4x6/elitec |
|
||||
| bastardkb/charybdis/4x6/v2/stemcell | bastardkb/charybdis/4x6/elitec |
|
||||
| bastardkb/dilemma/3x5_2/splinky | bastardkb/dilemma/3x5_2/promicro |
|
||||
| bastardkb/scylla/v2/elitec | bastardkb/scylla/promicro |
|
||||
| bastardkb/scylla/v2/splinky_2 | bastardkb/scylla/promicro |
|
||||
| bastardkb/scylla/v2/splinky_3 | bastardkb/scylla/promicro |
|
||||
| bastardkb/scylla/v2/stemcell | bastardkb/scylla/promicro |
|
||||
| bastardkb/skeletyl/v2/elitec | bastardkb/skeletyl/promicro |
|
||||
| bastardkb/skeletyl/v2/splinky_2 | bastardkb/skeletyl/promicro |
|
||||
| bastardkb/skeletyl/v2/splinky_3 | bastardkb/skeletyl/promicro |
|
||||
| bastardkb/skeletyl/v2/stemcell | bastardkb/skeletyl/promicro |
|
||||
| bastardkb/tbkmini/v2/elitec | bastardkb/tbkmini/promicro |
|
||||
| bastardkb/tbkmini/v2/splinky_2 | bastardkb/tbkmini/promicro |
|
||||
| bastardkb/tbkmini/v2/splinky_3 | bastardkb/tbkmini/promicro |
|
||||
| bastardkb/tbkmini/v2/stemcell | bastardkb/tbkmini/promicro |
|
||||
| helix/rev2 | helix/beta |
|
||||
| helix/rev3_4rows | helix/rev3 |
|
||||
| helix/rev3_5rows | helix/rev3 |
|
||||
| kprepublic/cstc40/daughterboard | kprepublic/cstc40/rev1 |
|
||||
| kprepublic/cstc40/single_pcb | kprepublic/cstc40/rev2 |
|
||||
| ll3macorn/bongopad | ll3ma/bongopad |
|
||||
| novelkeys/nk65/base | novelkeys/nk65/v1 |
|
||||
| tweetydabird/lotus58/elite_c | tweetydabird/lotus58 |
|
||||
| tweetydabird/lotus58/nanoboot | tweetydabird/lotus58 |
|
||||
| tweetydabird/lotus58/promicro | tweetydabird/lotus58 |
|
||||
| tweetydabird/lotus58/rp2040_ce | tweetydabird/lotus58 |
|
||||
|
||||
### Mitigate VIA keylogger security issues [#25414](https://github.com/qmk/qmk_firmware/pull/25414)
|
||||
|
||||
VIA's keyboard matrix testing functionality, which allows users to identify active key presses, has been identified as a potential security concern by community members and security researchers. This feature has been demonstrated to enable unauthorized keystroke capture, with documented examples showing how malicious scripts could exploit this capability to create keyloggers. A recent security assessment revealed that user credentials could be compromised by exploiting the matrix testing function combined with VIA's keycode assignment queries. In this attack scenario, a script could remain active during a locked session and capture password input when users authenticate upon return.
|
||||
|
||||
The QMK team notified the VIA team of this security vulnerability on May 17, 2022, and made multiple subsequent attempts to coordinate a mitigation strategy. Despite repeated outreach, the VIA team has provided no acknowledgment or response to these security concerns. Given the severity of the potential security implications and the lack of engagement from the VIA team, the QMK team has unilaterally implemented a security enhancement that modifies the keyboard matrix testing functionality to prevent the reporting of key press events. This change prioritizes user security and data protection over potential feature compatibility concerns within VIA.
|
||||
|
||||
## Deprecation Notices
|
||||
|
||||
In line with the [notice period](../support_deprecation_policy#how-much-advance-notice-will-be-given), deprecation notices for larger items are listed here.
|
||||
|
||||
### `DEFAULT_FOLDER` removal ([#23281](https://github.com/qmk/qmk_firmware/pull/23281))
|
||||
|
||||
`DEFAULT_FOLDER` was originally introduced to work around limitations within the build system.
|
||||
Parent folders containing common configuration would create invalid build targets.
|
||||
|
||||
With the introduction of [`keyboard.json`](./20240526#keyboard-json) as a configuration file, the build system now has a consistent method to detect build targets.
|
||||
The `DEFAULT_FOLDER` functionality is now removed with the intent that `rules.mk` is now pure configuration.
|
||||
|
||||
Backwards compatibility of build targets has been maintained where possible.
|
||||
|
||||
### Converter `Pin Compatible` updates ([#20330](https://github.com/qmk/qmk_firmware/pull/20330))
|
||||
|
||||
Converter support has been further limited to only function if a keyboard declares that it is compatible.
|
||||
|
||||
This can be configured in the following ways:
|
||||
|
||||
:::::tabs
|
||||
|
||||
==== keyboard.json
|
||||
|
||||
```json [keyboard.json]
|
||||
{
|
||||
"development_board": "promicro", // [!code focus]
|
||||
}
|
||||
```
|
||||
|
||||
==== rules.mk
|
||||
|
||||
```make [rules.mk]
|
||||
PIN_COMPATIBLE = promicro
|
||||
```
|
||||
|
||||
:::::
|
||||
|
||||
see the [Converters Feature](../feature_converters) documentation for more information.
|
||||
|
||||
### Removal of deprecated RGB and Mouse keycodes ([#25444](https://github.com/qmk/qmk_firmware/pull/25444))
|
||||
|
||||
Backwards compatibility of deprecated RGB and Mouse keycodes has been removed.
|
||||
|
||||
See the following documentation for the list of currently supported keycodes:
|
||||
|
||||
* [RGB Lighting](../features/rgblight#keycodes)
|
||||
* [RGB Matrix](../features/rgb_matrix#keycodes)
|
||||
* [Mouse keys](../features/mouse_keys#mapping-mouse-actions)
|
||||
|
||||
## Full changelist
|
||||
|
||||
Core:
|
||||
* Remove converter assumption that everything is a promicro ([#20330](https://github.com/qmk/qmk_firmware/pull/20330))
|
||||
* Remove `DEFAULT_FOLDER` handling ([#23281](https://github.com/qmk/qmk_firmware/pull/23281))
|
||||
* Add core handling for pointing device failures. ([#25315](https://github.com/qmk/qmk_firmware/pull/25315))
|
||||
* Relocate remaining `process_record_quantum` keycodes ([#25328](https://github.com/qmk/qmk_firmware/pull/25328))
|
||||
* Remove `process_action_kb` callback ([#25331](https://github.com/qmk/qmk_firmware/pull/25331))
|
||||
* Add `{rgb|led}_matrix_get_mode_name()`. ([#25344](https://github.com/qmk/qmk_firmware/pull/25344))
|
||||
* Align sleep_led logic ([#25395](https://github.com/qmk/qmk_firmware/pull/25395))
|
||||
* Mitigate VIA keylogger security issues ([#25414](https://github.com/qmk/qmk_firmware/pull/25414))
|
||||
* Deprecate some nonstandard mod & mod-tap keycode aliases ([#25437](https://github.com/qmk/qmk_firmware/pull/25437))
|
||||
* Refactor Starlight Smooth matrix effect ([#25442](https://github.com/qmk/qmk_firmware/pull/25442))
|
||||
* Remove deprecated `RGB_` and Mouse keycodes ([#25444](https://github.com/qmk/qmk_firmware/pull/25444))
|
||||
* Configure SPI for `QMK_PM2040` board ([#25481](https://github.com/qmk/qmk_firmware/pull/25481))
|
||||
* Configure SPI for `STEMCELL` board ([#25486](https://github.com/qmk/qmk_firmware/pull/25486))
|
||||
* Configure SPI for `QMK_BLOK` board ([#25487](https://github.com/qmk/qmk_firmware/pull/25487))
|
||||
* Clamp reactive offset value ([#25489](https://github.com/qmk/qmk_firmware/pull/25489))
|
||||
* Relocate `AUDIO_INIT_DELAY` implementation ([#25491](https://github.com/qmk/qmk_firmware/pull/25491))
|
||||
* Add MATRIX_ROWS_PER_HAND definition ([#25513](https://github.com/qmk/qmk_firmware/pull/25513))
|
||||
* Refactor battery driver ([#25550](https://github.com/qmk/qmk_firmware/pull/25550))
|
||||
* Add cachyos as pattern when installing dependencies ([#25580](https://github.com/qmk/qmk_firmware/pull/25580))
|
||||
|
||||
CLI:
|
||||
* Add MATRIX_MASKED DD config ([#25383](https://github.com/qmk/qmk_firmware/pull/25383))
|
||||
* Ensure keyboard aliases do not point to themselves ([#25500](https://github.com/qmk/qmk_firmware/pull/25500))
|
||||
|
||||
Keyboards:
|
||||
* [Update] E8ghtyNeo caps indicator ([#25009](https://github.com/qmk/qmk_firmware/pull/25009))
|
||||
* Keychron C3 Pro `c3_pro.c` corrections ([#25049](https://github.com/qmk/qmk_firmware/pull/25049))
|
||||
* Update franky36 pid and vid ([#25160](https://github.com/qmk/qmk_firmware/pull/25160))
|
||||
* Added Encoder support for Soyuz ([#25279](https://github.com/qmk/qmk_firmware/pull/25279))
|
||||
* CSTC40 rev3 (FXTWINK) ([#25285](https://github.com/qmk/qmk_firmware/pull/25285))
|
||||
* Migrate remaining `DEFAULT_FOLDER` to keyboard aliases ([#25291](https://github.com/qmk/qmk_firmware/pull/25291))
|
||||
* Configure boards to use development_board - R ([#25316](https://github.com/qmk/qmk_firmware/pull/25316))
|
||||
* Configure boards to use development_board - P ([#25317](https://github.com/qmk/qmk_firmware/pull/25317))
|
||||
* Configure boards to use development_board - NO ([#25338](https://github.com/qmk/qmk_firmware/pull/25338))
|
||||
* Configure boards to use development_board - LM ([#25341](https://github.com/qmk/qmk_firmware/pull/25341))
|
||||
* maple_computing/launchpad - Remove broken `default_rgb` keymap ([#25342](https://github.com/qmk/qmk_firmware/pull/25342))
|
||||
* update winry25 VID and PID ([#25351](https://github.com/qmk/qmk_firmware/pull/25351))
|
||||
* Configure boards to use development_board - DE ([#25369](https://github.com/qmk/qmk_firmware/pull/25369))
|
||||
* Configure boards to use development_board - FGHIJ ([#25370](https://github.com/qmk/qmk_firmware/pull/25370))
|
||||
* refactor(mercutio): layouts & reformatting ([#25408](https://github.com/qmk/qmk_firmware/pull/25408))
|
||||
* Configure boards to use development_board - ABC ([#25417](https://github.com/qmk/qmk_firmware/pull/25417))
|
||||
* Configure boards to use development_board - K ([#25421](https://github.com/qmk/qmk_firmware/pull/25421))
|
||||
* Refactor `helix/pico` ([#25428](https://github.com/qmk/qmk_firmware/pull/25428))
|
||||
* Refactor `helix/rev2` ([#25429](https://github.com/qmk/qmk_firmware/pull/25429))
|
||||
* Refactor `helix/rev3_{4,5}rows` ([#25430](https://github.com/qmk/qmk_firmware/pull/25430))
|
||||
* Migrate `helix` common configuration ([#25433](https://github.com/qmk/qmk_firmware/pull/25433))
|
||||
* Refactor `bastardkb/tbkmini` ([#25438](https://github.com/qmk/qmk_firmware/pull/25438))
|
||||
* Convert `novelkeys/nk65` to use RGB Matrix ([#25450](https://github.com/qmk/qmk_firmware/pull/25450))
|
||||
* Convert moon to lite custom matrix ([#25452](https://github.com/qmk/qmk_firmware/pull/25452))
|
||||
* Refactor `bastardkb/skeletyl` ([#25456](https://github.com/qmk/qmk_firmware/pull/25456))
|
||||
* Refactor `bastardkb/scylla` ([#25459](https://github.com/qmk/qmk_firmware/pull/25459))
|
||||
* Refactor `bastardkb/dilemma/3x5_2` ([#25462](https://github.com/qmk/qmk_firmware/pull/25462))
|
||||
* Migrate `usb.force_nkro` to `host.default.nkro` ([#25468](https://github.com/qmk/qmk_firmware/pull/25468))
|
||||
* Give mouse report to pointing_device_task_user first in ploopyco devices ([#25475](https://github.com/qmk/qmk_firmware/pull/25475))
|
||||
* Refactor `bastardkb/charybdis/3x5` ([#25488](https://github.com/qmk/qmk_firmware/pull/25488))
|
||||
* Refactor `bastardkb/charybdis/3x6` ([#25493](https://github.com/qmk/qmk_firmware/pull/25493))
|
||||
* Refactor `bastardkb/charybdis/4x6` ([#25494](https://github.com/qmk/qmk_firmware/pull/25494))
|
||||
* Rebrand For Ll3ma Keyboards ([#25498](https://github.com/qmk/qmk_firmware/pull/25498))
|
||||
* Remove some encoder resolution that duplicate defaults ([#25517](https://github.com/qmk/qmk_firmware/pull/25517))
|
||||
* Remove overriding of `DF()` within keyboards ([#25541](https://github.com/qmk/qmk_firmware/pull/25541))
|
||||
* Refactor inland/kb83 ([#25542](https://github.com/qmk/qmk_firmware/pull/25542))
|
||||
* Refactor `tweetydabird/lotus58` ([#25547](https://github.com/qmk/qmk_firmware/pull/25547))
|
||||
* Swap spleeb to default GENERIC_PROMICRO_RP2040 board files ([#25564](https://github.com/qmk/qmk_firmware/pull/25564))
|
||||
|
||||
Keyboard fixes:
|
||||
* Fix `keebio/quefrency/rev1:default60` ([#25423](https://github.com/qmk/qmk_firmware/pull/25423))
|
||||
* Fixup `bastardkb/tbkmini` keymap's build target ([#25458](https://github.com/qmk/qmk_firmware/pull/25458))
|
||||
* Miscellaneous fixes for lint warnings ([#25469](https://github.com/qmk/qmk_firmware/pull/25469))
|
||||
* Fix pytest/has_community default keymap location ([#25471](https://github.com/qmk/qmk_firmware/pull/25471))
|
||||
* Fix serial speed DD configuration & migrate keyboards ([#25546](https://github.com/qmk/qmk_firmware/pull/25546))
|
||||
* Update rgb x coordinate of rightmost column ([#25556](https://github.com/qmk/qmk_firmware/pull/25556))
|
||||
|
||||
Bugs:
|
||||
* Fix buggy switch statement in quantum.c ([#25322](https://github.com/qmk/qmk_firmware/pull/25322))
|
||||
* Compilation fixes for `-fno-common` ([#25436](https://github.com/qmk/qmk_firmware/pull/25436))
|
||||
* Only userspace should be searched for keyboard aliases when locating keymaps ([#25477](https://github.com/qmk/qmk_firmware/pull/25477))
|
||||
* Allow `qmk flash <filename>` to flash AT32 boards ([#25497](https://github.com/qmk/qmk_firmware/pull/25497))
|
||||
@@ -0,0 +1,190 @@
|
||||
# QMK Breaking Changes - 2025 Nov 30 Changelog
|
||||
|
||||
## Notable Features {#notable-features}
|
||||
|
||||
### Speculative Hold option for mod-taps: hold mods instantly while unsettled [#25572](https://github.com/qmk/qmk_firmware/pull/25572)
|
||||
|
||||
Speculative Hold makes mod-tap keys more responsive by applying the modifier instantly on keydown, before the tap-hold decision is made. This is especially useful for actions like Shift+click and Ctrl+scroll wheel with an external mouse, which can feel laggy with standard mod-taps.
|
||||
|
||||
The firmware holds the modifier speculatively. Once the key's behavior is settled:
|
||||
|
||||
* If held, the modifier remains active as expected until the key is released.
|
||||
* If tapped, the speculative modifier is canceled just before the tapping keycode is sent.
|
||||
|
||||
Speculative Hold applies the modifier early but does not change the underlying tap-hold decision logic. Speculative Hold is compatible to use in combination with any other tap-hold options.
|
||||
|
||||
see the [Speculative Hold](../tap_hold#speculative-hold) documentation for more information.
|
||||
|
||||
## Changes Requiring User Action
|
||||
|
||||
### Updated Keyboard Codebases
|
||||
|
||||
| Old Keyboard Name | New Keyboard Name |
|
||||
|----------------------------------|-------------------------|
|
||||
| 0xcb/splaytoraid/32u4 | 0xcb/splaytoraid |
|
||||
| 0xcb/splaytoraid/rp2040_ce | 0xcb/splaytoraid |
|
||||
| 1upkeyboards/sweet16v2/kb2040 | 1upkeyboards/sweet16v2 |
|
||||
| 1upkeyboards/sweet16v2/pro_micro | 1upkeyboards/sweet16v2 |
|
||||
| 40percentclub/gherkin/kb2040 | 40percentclub/gherkin |
|
||||
| 40percentclub/gherkin/pro_micro | 40percentclub/gherkin |
|
||||
| durgod/dgk6x/venus | durgod/dgk6x/venus_ansi |
|
||||
|
||||
### Reduce tap dance memory usage, move state out of data [#25415](https://github.com/qmk/qmk_firmware/pull/25415)
|
||||
|
||||
The tap dance state has been separated from the action structure. Custom tap dance functions now receive the state as a separate parameter instead of accessing it through `action->state`.
|
||||
|
||||
If your keymap uses custom tap dance functions that access the tap dance state, you need to update your code.
|
||||
|
||||
* You can't use `action->state`. Instead you need to call `tap_dance_state_t *tap_dance_get_state(uint8_t tap_dance_idx)` to get the state.
|
||||
* You now get a pointer to the state, so use `->` notation rather than `.` notation to get fields from it.
|
||||
|
||||
### Before:
|
||||
```c
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
tap_dance_action_t *action;
|
||||
|
||||
switch (keycode) {
|
||||
case TD(CT_CLN):
|
||||
action = tap_dance_get(QK_TAP_DANCE_GET_INDEX(keycode));
|
||||
if (!record->event.pressed && action->state.count && !action->state.finished) {
|
||||
tap_dance_tap_hold_t *tap_hold = (tap_dance_tap_hold_t *)action->user_data;
|
||||
tap_code16(tap_hold->tap);
|
||||
}
|
||||
|
||||
}
|
||||
return true;
|
||||
}
|
||||
```
|
||||
### After:
|
||||
```c
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
tap_dance_action_t *action;
|
||||
tap_dance_state_t* state;
|
||||
switch (keycode) {
|
||||
case TD(CT_CLN):
|
||||
action = tap_dance_get(QK_TAP_DANCE_GET_INDEX(keycode));
|
||||
state = tap_dance_get_state(QK_TAP_DANCE_GET_INDEX(keycode));
|
||||
if (!record->event.pressed && state != NULL && state->count && !state->finished) {
|
||||
tap_dance_tap_hold_t *tap_hold = (tap_dance_tap_hold_t *)action->user_data;
|
||||
tap_code16(tap_hold->tap);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
```
|
||||
|
||||
## Deprecation Notices
|
||||
|
||||
In line with the [notice period](../support_deprecation_policy#how-much-advance-notice-will-be-given), deprecation notices for larger items are listed here.
|
||||
|
||||
### Remove override of QK_{LED,RGB}_MATRIX_TOGGLE keycode [#25672](https://github.com/qmk/qmk_firmware/pull/25672)
|
||||
|
||||
[#24649](https://github.com/qmk/qmk_firmware/pull/24649) implemented genetic behavior, including keycodes, to cycle flags.
|
||||
|
||||
Any overriding of existing keycodes that duplicate this behavior will be removed to ensure consistency with core functionality.
|
||||
|
||||
## Full changelist
|
||||
|
||||
Core:
|
||||
* suspend: suppress wake up keypress ([#23389](https://github.com/qmk/qmk_firmware/pull/23389))
|
||||
* [Feature Improvement]add option to keep layer state when recording dynamic macros ([#24418](https://github.com/qmk/qmk_firmware/pull/24418))
|
||||
* Add generic handling to cycle LED/RGB Matrix flags ([#24649](https://github.com/qmk/qmk_firmware/pull/24649))
|
||||
* Implement `mod_t` packed struct ([#25168](https://github.com/qmk/qmk_firmware/pull/25168))
|
||||
* Implement minimal connection update logic ([#25334](https://github.com/qmk/qmk_firmware/pull/25334))
|
||||
* Reduce tap dance memory usage, move state out of data ([#25415](https://github.com/qmk/qmk_firmware/pull/25415))
|
||||
* Refactor debounce algorithm with static allocation ([#25515](https://github.com/qmk/qmk_firmware/pull/25515))
|
||||
* Restructure Pixel Rain interval code ([#25516](https://github.com/qmk/qmk_firmware/pull/25516))
|
||||
* Guard remapping logic with MAGIC_ENABLE ([#25537](https://github.com/qmk/qmk_firmware/pull/25537))
|
||||
* Update default OLED font ([#25565](https://github.com/qmk/qmk_firmware/pull/25565))
|
||||
* Speculative Hold option for mod-taps: hold mods instantly while unsettled. ([#25572](https://github.com/qmk/qmk_firmware/pull/25572))
|
||||
* Simplify hue calculation in raindrops animation ([#25587](https://github.com/qmk/qmk_firmware/pull/25587))
|
||||
* Simplify tap_code16_delay ([#25595](https://github.com/qmk/qmk_firmware/pull/25595))
|
||||
* Debounce: Deprecate num_rows parameter ([#25632](https://github.com/qmk/qmk_firmware/pull/25632))
|
||||
* Add I2C Transmit and Receive function ([#25637](https://github.com/qmk/qmk_firmware/pull/25637))
|
||||
* [QP] Minor cleanup and support for RGB888 surface ([#25706](https://github.com/qmk/qmk_firmware/pull/25706))
|
||||
* Restrict mouse timer activation to movement keycodes ([#25716](https://github.com/qmk/qmk_firmware/pull/25716))
|
||||
* Update STM32F446 default HSE to 8MHz ([#25717](https://github.com/qmk/qmk_firmware/pull/25717))
|
||||
* making flowtap timer public so it can be used easily with combos ([#25731](https://github.com/qmk/qmk_firmware/pull/25731))
|
||||
* Add PixArt PAW-3222 mouse sensor driver ([#25763](https://github.com/qmk/qmk_firmware/pull/25763))
|
||||
* Merge upstream uf2conv changes ([#25786](https://github.com/qmk/qmk_firmware/pull/25786))
|
||||
* Partially skip generating community modules when none enabled ([#25819](https://github.com/qmk/qmk_firmware/pull/25819))
|
||||
|
||||
CLI:
|
||||
* Generate default encoder resolution for sparse config ([#25247](https://github.com/qmk/qmk_firmware/pull/25247))
|
||||
* Add DIP Switch map support to keymap.json ([#25431](https://github.com/qmk/qmk_firmware/pull/25431))
|
||||
* Add return code to `qmk userspace-doctor` ([#25775](https://github.com/qmk/qmk_firmware/pull/25775))
|
||||
* Better defaulting of `{RGB,LED}_MATRIX_DEFAULT_FLAGS` ([#25785](https://github.com/qmk/qmk_firmware/pull/25785))
|
||||
* add BCD versions of QMK Version ([#25804](https://github.com/qmk/qmk_firmware/pull/25804))
|
||||
* Lint error on missing keyboard readme ([#25814](https://github.com/qmk/qmk_firmware/pull/25814))
|
||||
|
||||
Submodule updates:
|
||||
* Update ChibiOS-Contrib. ([#25751](https://github.com/qmk/qmk_firmware/pull/25751))
|
||||
|
||||
Keyboards:
|
||||
* `atreus`: restore intended matrix implementations ([#24082](https://github.com/qmk/qmk_firmware/pull/24082))
|
||||
* add SteelSeries prime, a stripped down prime+ ([#24719](https://github.com/qmk/qmk_firmware/pull/24719))
|
||||
* Add new macropad Sharkropad ([#24961](https://github.com/qmk/qmk_firmware/pull/24961))
|
||||
* Addition of the D60B tsangan pcb ([#25245](https://github.com/qmk/qmk_firmware/pull/25245))
|
||||
* Migrate `eeconfig_init_kb` implementations to config ([#25422](https://github.com/qmk/qmk_firmware/pull/25422))
|
||||
* Generate `CUSTOM_MATRIX = lite` without `matrix_pins.custom` ([#25453](https://github.com/qmk/qmk_firmware/pull/25453))
|
||||
* Add classic48 keyboard ([#25492](https://github.com/qmk/qmk_firmware/pull/25492))
|
||||
* add durgod venus iso support ([#25526](https://github.com/qmk/qmk_firmware/pull/25526))
|
||||
* Migrate `g_led_config` to DD (0-9, A) ([#25558](https://github.com/qmk/qmk_firmware/pull/25558))
|
||||
* Migrate `g_led_config` to DD (B, C) ([#25559](https://github.com/qmk/qmk_firmware/pull/25559))
|
||||
* Migrate `g_led_config` to DD (D) ([#25560](https://github.com/qmk/qmk_firmware/pull/25560))
|
||||
* Migrate `g_led_config` to DD (E, F) ([#25561](https://github.com/qmk/qmk_firmware/pull/25561))
|
||||
* Remove duplication of RP2040 config defaults ([#25563](https://github.com/qmk/qmk_firmware/pull/25563))
|
||||
* Refactor 40percentclub/ut47 ([#25571](https://github.com/qmk/qmk_firmware/pull/25571))
|
||||
* E7-V2 Implementation ([#25594](https://github.com/qmk/qmk_firmware/pull/25594))
|
||||
* Migrate `g_led_config` to DD (G) ([#25598](https://github.com/qmk/qmk_firmware/pull/25598))
|
||||
* Migrate `g_led_config` to DD (H) ([#25599](https://github.com/qmk/qmk_firmware/pull/25599))
|
||||
* Migrate `g_led_config` to DD (I) ([#25600](https://github.com/qmk/qmk_firmware/pull/25600))
|
||||
* Migrate `g_led_config` to DD (JK1) ([#25601](https://github.com/qmk/qmk_firmware/pull/25601))
|
||||
* Migrate `g_led_config` to DD (K2) ([#25602](https://github.com/qmk/qmk_firmware/pull/25602))
|
||||
* Migrate `g_led_config` to DD (K3) ([#25603](https://github.com/qmk/qmk_firmware/pull/25603))
|
||||
* Migrate `g_led_config` to DD (K4) ([#25605](https://github.com/qmk/qmk_firmware/pull/25605))
|
||||
* Migrate `g_led_config` to DD (K5) ([#25606](https://github.com/qmk/qmk_firmware/pull/25606))
|
||||
* Migrate `g_led_config` to DD (K6) ([#25607](https://github.com/qmk/qmk_firmware/pull/25607))
|
||||
* Refactor `40percentclub/gherkin` ([#25608](https://github.com/qmk/qmk_firmware/pull/25608))
|
||||
* Refactor `0xcb/splaytoraid` ([#25609](https://github.com/qmk/qmk_firmware/pull/25609))
|
||||
* Refactor `1upkeyboards/sweet16v2` ([#25610](https://github.com/qmk/qmk_firmware/pull/25610))
|
||||
* Migrate `g_led_config` to DD (K7) ([#25616](https://github.com/qmk/qmk_firmware/pull/25616))
|
||||
* Migrate `g_led_config` to DD (L) ([#25617](https://github.com/qmk/qmk_firmware/pull/25617))
|
||||
* Migrate `g_led_config` to DD (M1) ([#25618](https://github.com/qmk/qmk_firmware/pull/25618))
|
||||
* Migrate `g_led_config` to DD (M2) ([#25619](https://github.com/qmk/qmk_firmware/pull/25619))
|
||||
* Migrate `g_led_config` to DD (M3) ([#25620](https://github.com/qmk/qmk_firmware/pull/25620))
|
||||
* Migrate `g_led_config` to DD (NO) ([#25621](https://github.com/qmk/qmk_firmware/pull/25621))
|
||||
* Migrate `g_led_config` to DD (P) ([#25622](https://github.com/qmk/qmk_firmware/pull/25622))
|
||||
* Migrate `g_led_config` to DD (QR) ([#25623](https://github.com/qmk/qmk_firmware/pull/25623))
|
||||
* Migrate `g_led_config` to DD (S) ([#25624](https://github.com/qmk/qmk_firmware/pull/25624))
|
||||
* Migrate `g_led_config` to DD (TUW) ([#25625](https://github.com/qmk/qmk_firmware/pull/25625))
|
||||
* Remove idobao *_DISABLE_UNDERGLOW behaviour ([#25638](https://github.com/qmk/qmk_firmware/pull/25638))
|
||||
* Migrate `g_led_config` to DD (YZ) ([#25650](https://github.com/qmk/qmk_firmware/pull/25650))
|
||||
* Tidy Keebio keyboards ([#25653](https://github.com/qmk/qmk_firmware/pull/25653))
|
||||
* Remove encoder resolution where duplicating defaults ([#25654](https://github.com/qmk/qmk_firmware/pull/25654))
|
||||
* Custom oled fonts cleanup ([#25665](https://github.com/qmk/qmk_firmware/pull/25665))
|
||||
* Binepad KnobX1 - refactor `x1_layer_led` function as weak ([#25668](https://github.com/qmk/qmk_firmware/pull/25668))
|
||||
* Add DD {LED,RGB}_MATRIX_DEFAULT_FLAGS support ([#25671](https://github.com/qmk/qmk_firmware/pull/25671))
|
||||
* keyboards: Add Royal Kludge RK61 ([#25694](https://github.com/qmk/qmk_firmware/pull/25694))
|
||||
* Add TRKeyboard TRK2 keyboard ([#25754](https://github.com/qmk/qmk_firmware/pull/25754))
|
||||
|
||||
Keyboard fixes:
|
||||
* Fixup `kprepublic/bm60hsrgb/rev2` ([#25644](https://github.com/qmk/qmk_firmware/pull/25644))
|
||||
* Fixup `kprepublic/bm60hsrgb_iso/rev2` ([#25648](https://github.com/qmk/qmk_firmware/pull/25648))
|
||||
* Fixup `kprepublic/bm60hsrgb_poker/rev2` ([#25649](https://github.com/qmk/qmk_firmware/pull/25649))
|
||||
* Fixup `rgbkb/pan` ([#25678](https://github.com/qmk/qmk_firmware/pull/25678))
|
||||
* Align use of keymap level `_kb` callbacks ([#25774](https://github.com/qmk/qmk_firmware/pull/25774))
|
||||
|
||||
Others:
|
||||
* Rework converter docs ([#18314](https://github.com/qmk/qmk_firmware/pull/18314))
|
||||
* Update USBaspLoader ISP instructions ([#25590](https://github.com/qmk/qmk_firmware/pull/25590))
|
||||
* Add LED/RGB Matrix flags API docs ([#25673](https://github.com/qmk/qmk_firmware/pull/25673))
|
||||
|
||||
Bugs:
|
||||
* Fix single key combos activating only once ([#25198](https://github.com/qmk/qmk_firmware/pull/25198))
|
||||
* Fix RGB matrix not syncing and turning off properly on timeout ([#25467](https://github.com/qmk/qmk_firmware/pull/25467))
|
||||
* Fix drv haptics docs by using the correct function name ([#25733](https://github.com/qmk/qmk_firmware/pull/25733))
|
||||
* Fix Magic GUI masking logic ([#25780](https://github.com/qmk/qmk_firmware/pull/25780))
|
||||
* Fix Speculative Hold to enable also right-handed RSFT, RCTL by default. ([#25797](https://github.com/qmk/qmk_firmware/pull/25797))
|
||||
* Fix community layout keymap discovery ([#25802](https://github.com/qmk/qmk_firmware/pull/25802))
|
||||
* Fix preference of output file for 'qmk generate-autocorrect-data' ([#25818](https://github.com/qmk/qmk_firmware/pull/25818))
|
||||
@@ -0,0 +1,75 @@
|
||||
# QMK Breaking Changes - 2026 Feb 22 Changelog
|
||||
|
||||
## Deprecation Notices
|
||||
|
||||
### Removal of deprecated GPIO defines ([#26028](https://github.com/qmk/qmk_firmware/pull/26028))
|
||||
|
||||
QMK has long used Arduino-style GPIO naming conventions. This has been confusing for users, as over time they've had new variations added, as well as users mistakenly thinking that QMK supports the rest of the Arduino ecosystem.
|
||||
|
||||
The decision was made to rename the GPIO manipulation functions with ones matching QMK Firmware's code styling.
|
||||
|
||||
Previous backwards compatibility has now been removed. see the [GPIO Control](../drivers/gpio#macros) documentation for more information.
|
||||
|
||||
### Removal of deprecated isLeftHand ([25897](https://github.com/qmk/qmk_firmware/pull/25897))
|
||||
|
||||
Users should migrate to `is_keyboard_left()` found in `split_util.h` instead. For example:
|
||||
|
||||
```diff
|
||||
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
|
||||
- return isLeftHand ? OLED_ROTATION_180 : OLED_ROTATION_0;
|
||||
+ return is_keyboard_left() ? OLED_ROTATION_180 : OLED_ROTATION_0;
|
||||
}
|
||||
```
|
||||
|
||||
The deprecated variable `isLeftHand` will be removed in a future breaking changes cycle.
|
||||
|
||||
## Full changelist
|
||||
|
||||
Core:
|
||||
* Refactor Makefile logic for locating keymaps ([#25808](https://github.com/qmk/qmk_firmware/pull/25808))
|
||||
* Move shutdown delay to audio feature ([#25859](https://github.com/qmk/qmk_firmware/pull/25859))
|
||||
* Refactor core use of deprecated `isLeftHand` ([#25888](https://github.com/qmk/qmk_firmware/pull/25888))
|
||||
* Allow custom data sync for community modules ([#25955](https://github.com/qmk/qmk_firmware/pull/25955))
|
||||
* Remove an unreachable break statement ([#26006](https://github.com/qmk/qmk_firmware/pull/26006))
|
||||
* Remove duplicate host.h ([#26007](https://github.com/qmk/qmk_firmware/pull/26007))
|
||||
* Remove redundant EEPROM update ([#26008](https://github.com/qmk/qmk_firmware/pull/26008))
|
||||
* Remove redundant unsigned comparison in apa102_set_brightness ([#26010](https://github.com/qmk/qmk_firmware/pull/26010))
|
||||
* Remove unused headers ([#26011](https://github.com/qmk/qmk_firmware/pull/26011))
|
||||
* Return INVALID_DEFERRED_TOKEN on allocation failure ([#26012](https://github.com/qmk/qmk_firmware/pull/26012))
|
||||
* Remove deprecated GPIO defines ([#26028](https://github.com/qmk/qmk_firmware/pull/26028))
|
||||
|
||||
CLI:
|
||||
* Enforce EOL when formatting files ([#24989](https://github.com/qmk/qmk_firmware/pull/24989))
|
||||
* Allow keymap.json to disable config flags ([#25502](https://github.com/qmk/qmk_firmware/pull/25502))
|
||||
* Remove unused `qmk.keymap.write_file`/`qmk.keymap.write_json` ([#25854](https://github.com/qmk/qmk_firmware/pull/25854))
|
||||
* Include userspace version (QMK_USERSPACE_VERSION) in version.h ([#25882](https://github.com/qmk/qmk_firmware/pull/25882))
|
||||
* Lint out-of-bounds bootmagic config ([#25899](https://github.com/qmk/qmk_firmware/pull/25899))
|
||||
* Report permission issues in `qmk doctor` ([#25931](https://github.com/qmk/qmk_firmware/pull/25931))
|
||||
* Minor alignment of CLI formatting commands ([#25946](https://github.com/qmk/qmk_firmware/pull/25946))
|
||||
* Update lint to validate keymap names ([#25969](https://github.com/qmk/qmk_firmware/pull/25969))
|
||||
* Add 'none of the above' to `new-keyboard` dev board prompt ([#25998](https://github.com/qmk/qmk_firmware/pull/25998))
|
||||
* Remove `config_h_features` from generated `info.json` ([#26024](https://github.com/qmk/qmk_firmware/pull/26024))
|
||||
* Promote duplication of defaults check to error ([#26025](https://github.com/qmk/qmk_firmware/pull/26025))
|
||||
|
||||
Keyboards:
|
||||
* Add Soldered Macro Pad ([#25834](https://github.com/qmk/qmk_firmware/pull/25834))
|
||||
* Remove redundant URLs from `.json` ([#25856](https://github.com/qmk/qmk_firmware/pull/25856))
|
||||
* Guard encoder behaviour on `projectcain/vault*` ([#25864](https://github.com/qmk/qmk_firmware/pull/25864))
|
||||
* Refactor keyboard/keymap use of deprecated `isLeftHand` ([#25891](https://github.com/qmk/qmk_firmware/pull/25891))
|
||||
* Remove some unnecessary matrix externs ([#25975](https://github.com/qmk/qmk_firmware/pull/25975))
|
||||
* Migrate ROW_SHIFTER to core MATRIX_ROW_SHIFTER ([#25977](https://github.com/qmk/qmk_firmware/pull/25977))
|
||||
|
||||
Keyboard fixes:
|
||||
* Fix out-of-bounds bootmagic config ([#25898](https://github.com/qmk/qmk_firmware/pull/25898))
|
||||
* Fix incorrect `matrix_scan_custom` implementations ([#25999](https://github.com/qmk/qmk_firmware/pull/25999))
|
||||
|
||||
Others:
|
||||
* Add missing labels to DD keycode definitions ([#25503](https://github.com/qmk/qmk_firmware/pull/25503))
|
||||
* Copilot instructions for pull requests ([#25857](https://github.com/qmk/qmk_firmware/pull/25857))
|
||||
|
||||
Bugs:
|
||||
* Fix flash wear leveling sector calculation ([#24776](https://github.com/qmk/qmk_firmware/pull/24776))
|
||||
* [Bugfix] WS2812 indexing in split boards ([#25407](https://github.com/qmk/qmk_firmware/pull/25407))
|
||||
* Correctly resolve keyboard alias during 'qmk new-keymap' ([#25570](https://github.com/qmk/qmk_firmware/pull/25570))
|
||||
* Fixes for is31fl3729 LED matrix driver off-by-one errors ([#25902](https://github.com/qmk/qmk_firmware/pull/25902))
|
||||
* Match Key override index type to bounds type to prevent overflow ([#25939](https://github.com/qmk/qmk_firmware/pull/25939))
|
||||
@@ -0,0 +1,122 @@
|
||||
# QMK Breaking Changes - 2026 May 31 Changelog
|
||||
|
||||
## Notable Changes {#notable-changes}
|
||||
|
||||
## Deprecation Notices
|
||||
|
||||
In line with the [notice period](../support_deprecation_policy#how-much-advance-notice-will-be-given), deprecation notices for larger items are listed here.
|
||||
|
||||
### Removal of deprecated isLeftHand ([25897](https://github.com/qmk/qmk_firmware/pull/25897))
|
||||
|
||||
Users must migrate to `is_keyboard_left()` found in `split_util.h` instead. For example:
|
||||
|
||||
```diff
|
||||
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
|
||||
- return isLeftHand ? OLED_ROTATION_180 : OLED_ROTATION_0;
|
||||
+ return is_keyboard_left() ? OLED_ROTATION_180 : OLED_ROTATION_0;
|
||||
}
|
||||
```
|
||||
|
||||
### Removal of `usb.force_nkro`/`FORCE_NKRO` ([#25262](https://github.com/qmk/qmk_firmware/pull/25262))
|
||||
|
||||
Unpicking the assumption that only USB can do NKRO, forcing of NKRO on every boot has been deprecated. As this setting persists, it produces unnecessary user confusion when the various NKRO keycodes (for example `NK_TOGG`) do not behave as expected.
|
||||
|
||||
The new defaults can be configured in the following ways:
|
||||
|
||||
:::::tabs
|
||||
|
||||
==== keyboard.json
|
||||
|
||||
```json [keyboard.json]
|
||||
{
|
||||
"host": { // [!code focus]
|
||||
"default": { // [!code focus]
|
||||
"nkro": true // [!code focus]
|
||||
} // [!code focus]
|
||||
} // [!code focus]
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
==== keymap.json
|
||||
|
||||
```json [keymap.json]
|
||||
{
|
||||
"config": {
|
||||
"host": { // [!code focus]
|
||||
"default": { // [!code focus]
|
||||
"nkro": true // [!code focus]
|
||||
} // [!code focus]
|
||||
} // [!code focus]
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
==== config.h
|
||||
|
||||
```c [config.h]
|
||||
#pragma once
|
||||
|
||||
#define NKRO_DEFAULT_ON true // [!code focus]
|
||||
```
|
||||
|
||||
:::::
|
||||
|
||||
## Full changelist
|
||||
|
||||
Core:
|
||||
* Remove deprecated `isLeftHand` ([#25897](https://github.com/qmk/qmk_firmware/pull/25897))
|
||||
* Either output Unicode or insert in Leader sequence ([#25940](https://github.com/qmk/qmk_firmware/pull/25940))
|
||||
* Add resolution information to digitizer ([#25958](https://github.com/qmk/qmk_firmware/pull/25958))
|
||||
* Always generate .map files. ([#25961](https://github.com/qmk/qmk_firmware/pull/25961))
|
||||
* Add an `mcu_reset` impl for the kiibohd bootloader. ([#25963](https://github.com/qmk/qmk_firmware/pull/25963))
|
||||
* VIA v13 ([#26001](https://github.com/qmk/qmk_firmware/pull/26001))
|
||||
* Added PixArt PMW-3325 mouse sensor driver ([#26065](https://github.com/qmk/qmk_firmware/pull/26065))
|
||||
* Update WL backing store from 16 to 32-bit for AT32 ([#26066](https://github.com/qmk/qmk_firmware/pull/26066))
|
||||
* Refactor Pixel Fractal effect ([#26071](https://github.com/qmk/qmk_firmware/pull/26071))
|
||||
* Minor combo code optimisation ([#26073](https://github.com/qmk/qmk_firmware/pull/26073))
|
||||
* Options to constrain Speculative Hold: `SPECULATIVE_HOLD_ONE_KEY` and `SPECULATIVE_HOLD_FLOW_TERM`. ([#26099](https://github.com/qmk/qmk_firmware/pull/26099))
|
||||
* Add includes for std::setw ([#26153](https://github.com/qmk/qmk_firmware/pull/26153))
|
||||
* Bind gtest colour to QMKs 'COLOR' variable ([#26159](https://github.com/qmk/qmk_firmware/pull/26159))
|
||||
* Print correct test names ([#26160](https://github.com/qmk/qmk_firmware/pull/26160))
|
||||
* Ignore Uninteresting test warnings during test teardown ([#26161](https://github.com/qmk/qmk_firmware/pull/26161))
|
||||
* Remove FORCE_NKRO ([#26206](https://github.com/qmk/qmk_firmware/pull/26206))
|
||||
|
||||
CLI:
|
||||
* Update lint to check all keymaps within the repo ([#25970](https://github.com/qmk/qmk_firmware/pull/25970))
|
||||
* Fail when a duplicate module name is detected ([#26238](https://github.com/qmk/qmk_firmware/pull/26238))
|
||||
|
||||
Submodule updates:
|
||||
* Update ChibiOS, ChibiOS-Contrib. ([#25730](https://github.com/qmk/qmk_firmware/pull/25730))
|
||||
* Revert "Update ChibiOS, ChibiOS-Contrib." ([#26074](https://github.com/qmk/qmk_firmware/pull/26074))
|
||||
* ChibiOS, ChibiOS-Contrib updates (redux) ([#26079](https://github.com/qmk/qmk_firmware/pull/26079))
|
||||
* Bump googletest to v1.16.0 ([#26154](https://github.com/qmk/qmk_firmware/pull/26154))
|
||||
|
||||
Keyboards:
|
||||
* Require "url" field to not be empty ([#25152](https://github.com/qmk/qmk_firmware/pull/25152))
|
||||
* Add nomis/rpi_pico_25x1 macropad ([#25346](https://github.com/qmk/qmk_firmware/pull/25346))
|
||||
* Remove override of QK_{LED,RGB}_MATRIX_TOGGLE keycode ([#25672](https://github.com/qmk/qmk_firmware/pull/25672))
|
||||
* Add reverse layout to SouthPad v2 ([#25707](https://github.com/qmk/qmk_firmware/pull/25707))
|
||||
* Adding Handwired Bouvet Macropad ([#26040](https://github.com/qmk/qmk_firmware/pull/26040))
|
||||
* Remove blockader user keymap ([#26075](https://github.com/qmk/qmk_firmware/pull/26075))
|
||||
* Remove deprecated audio pin defines ([#26111](https://github.com/qmk/qmk_firmware/pull/26111))
|
||||
* Remove `OLED_DISPLAY_128X32` config ([#26190](https://github.com/qmk/qmk_firmware/pull/26190))
|
||||
* Migrate SPLIT_OLED_ENABLE ([#26194](https://github.com/qmk/qmk_firmware/pull/26194))
|
||||
* Add API version assertion for split_data_sync module ([#26237](https://github.com/qmk/qmk_firmware/pull/26237))
|
||||
|
||||
Others:
|
||||
* Bump vitepress to 1.6.4 ([#26067](https://github.com/qmk/qmk_firmware/pull/26067))
|
||||
* Add usage clarifications to docs/features/unicode.md ([#26156](https://github.com/qmk/qmk_firmware/pull/26156))
|
||||
|
||||
Bugs:
|
||||
* Fix `USER_PRINT` stripping out `uprintf` ([#25919](https://github.com/qmk/qmk_firmware/pull/25919))
|
||||
* Fix possible repeat key infinite recursion ([#25926](https://github.com/qmk/qmk_firmware/pull/25926))
|
||||
* Fix `cc-option` on arm-none-eabi-gcc ([#26114](https://github.com/qmk/qmk_firmware/pull/26114))
|
||||
* Fix color diagnostics for arm-none-eabi-gcc ([#26115](https://github.com/qmk/qmk_firmware/pull/26115))
|
||||
* Mask out active mods when unregistering after retro tapping ([#26127](https://github.com/qmk/qmk_firmware/pull/26127))
|
||||
* fix `make test:all` failures seen on macOS Tahoe ([#26136](https://github.com/qmk/qmk_firmware/pull/26136))
|
||||
* Add workaround for undefined reference to weak function under mingw ([#26167](https://github.com/qmk/qmk_firmware/pull/26167))
|
||||
* fix(ws2812-pwm): allow WS2812_PWM_TICK_FREQUENCY override ([#26186](https://github.com/qmk/qmk_firmware/pull/26186))
|
||||
* Clip mouse report values to the logical range from the USB descriptor. ([#26195](https://github.com/qmk/qmk_firmware/pull/26195))
|
||||
* Align Mouse USB descriptor ([#26230](https://github.com/qmk/qmk_firmware/pull/26230))
|
||||
+10
-3
@@ -21,8 +21,14 @@
|
||||
{ "text": "Debugging QMK", "link": "/faq_debug" },
|
||||
{ "text": "Keymap FAQ", "link": "/faq_keymap" },
|
||||
{ "text": "Squeezing Space from AVR", "link": "/squeezing_avr" },
|
||||
{ "text": "Glossary", "link": "/reference_glossary" },
|
||||
{ "text": "License Violations", "link": "/license_violations" }
|
||||
{ "text": "Glossary", "link": "/reference_glossary" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"text": "Licensing",
|
||||
"items": [
|
||||
{ "text": "License Violations", "link": "/license_violations" },
|
||||
{ "text": "Proprietary Libraries", "link": "/proprietary_libs" }
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -169,6 +175,7 @@
|
||||
]
|
||||
},
|
||||
{ "text": "Audio", "link": "/features/audio" },
|
||||
{ "text": "Battery", "link": "/features/battery" },
|
||||
{ "text": "Bootmagic", "link": "/features/bootmagic" },
|
||||
{ "text": "Converters", "link": "/feature_converters" },
|
||||
{ "text": "Custom Matrix", "link": "/custom_matrix" },
|
||||
@@ -207,7 +214,7 @@
|
||||
{ "text": "My Pull Request Was Flagged", "link": "/breaking_changes_instructions" },
|
||||
{
|
||||
"text": "Most Recent ChangeLog",
|
||||
"link": "/ChangeLog/20250525"
|
||||
"link": "/ChangeLog/20260531"
|
||||
},
|
||||
{ "text": "Past Breaking Changes", "link": "/breaking_changes_history" },
|
||||
{ "text": "Deprecation Policy", "link": "/support_deprecation_policy" }
|
||||
|
||||
+12
-12
@@ -10,25 +10,25 @@ Practically, this means QMK merges the `develop` branch into the `master` branch
|
||||
|
||||
## What has been included in past Breaking Changes?
|
||||
|
||||
* [2025 May 25](ChangeLog/20250525)
|
||||
* [2025 Feb 23](ChangeLog/20250223)
|
||||
* [2024 Nov 24](ChangeLog/20241124)
|
||||
* [2026 May 31](ChangeLog/20260531)
|
||||
* [2026 Feb 22](ChangeLog/20260222)
|
||||
* [2025 Nov 30](ChangeLog/20251130)
|
||||
* [Older Breaking Changes](breaking_changes_history)
|
||||
|
||||
## When is the next Breaking Change?
|
||||
|
||||
The next Breaking Change is scheduled for Aug 31, 2025.
|
||||
The next Breaking Change is scheduled for Aug 30, 2026.
|
||||
|
||||
### Important Dates
|
||||
|
||||
* 2025 May 25 - `develop` is tagged with a new release version. Each push to `master` is subsequently merged to `develop` by GitHub actions.
|
||||
* 2025 Aug 3 - `develop` closed to new PRs.
|
||||
* 2025 Aug 3 - Call for testers.
|
||||
* 2025 Aug 17 - Last day for merges -- after this point `develop` is locked for testing and accepts only bugfixes
|
||||
* 2025 Aug 24 - `develop` is locked, only critical bugfix PRs merged.
|
||||
* 2025 Aug 29 - `master` is locked, no PRs merged.
|
||||
* 2025 Aug 31 - Merge `develop` to `master`.
|
||||
* 2025 Aug 31 - `master` is unlocked. PRs can be merged again.
|
||||
* 2025 May 31 - `develop` is tagged with a new release version. Each push to `master` is subsequently merged to `develop` by GitHub actions.
|
||||
* 2026 Aug 2 - `develop` closed to new PRs.
|
||||
* 2026 Aug 2 - Call for testers.
|
||||
* 2026 Aug 16 - Last day for merges -- after this point `develop` is locked for testing and accepts only bugfixes
|
||||
* 2026 Aug 23 - `develop` is locked, only critical bugfix PRs merged.
|
||||
* 2026 Aug 28 - `master` is locked, no PRs merged.
|
||||
* 2026 Aug 30 - Merge `develop` to `master`.
|
||||
* 2026 Aug 30 - `master` is unlocked. PRs can be merged again.
|
||||
|
||||
## What changes will be included?
|
||||
|
||||
|
||||
@@ -2,6 +2,10 @@
|
||||
|
||||
This page links to all previous changelogs from the QMK Breaking Changes process.
|
||||
|
||||
* [2026 May 31](ChangeLog/20260531) - version 0.33.0
|
||||
* [2026 Feb 22](ChangeLog/20260222) - version 0.32.0
|
||||
* [2025 Nov 30](ChangeLog/20251130) - version 0.31.0
|
||||
* [2025 Aug 31](ChangeLog/20250831) - version 0.30.0
|
||||
* [2025 May 25](ChangeLog/20250525) - version 0.29.0
|
||||
* [2025 Feb 23](ChangeLog/20250223) - version 0.28.0
|
||||
* [2024 Nov 24](ChangeLog/20241124) - version 0.27.0
|
||||
|
||||
+6
-35
@@ -4,47 +4,18 @@
|
||||
|
||||
The QMK CLI (command line interface) makes building and working with QMK keyboards easier. We have provided a number of commands to simplify and streamline tasks such as obtaining and compiling the QMK firmware, creating keymaps, and more.
|
||||
|
||||
### Requirements {#requirements}
|
||||
### Installation {#installation}
|
||||
|
||||
QMK requires Python 3.9 or greater. We try to keep the number of requirements small but you will also need to install the packages listed in [`requirements.txt`](https://github.com/qmk/qmk_firmware/blob/master/requirements.txt). These are installed automatically when you install the QMK CLI.
|
||||
|
||||
### Install Using Homebrew (macOS, some Linux) {#install-using-homebrew}
|
||||
|
||||
If you have installed [Homebrew](https://brew.sh) you can tap and install QMK:
|
||||
The recommended way to install the QMK CLI and all necessary dependencies (toolchains, flashing utilities, udev rules on Linux) is to use the bootstrapper script:
|
||||
|
||||
```
|
||||
brew install qmk/qmk/qmk
|
||||
export QMK_HOME='~/qmk_firmware' # Optional, set the location for `qmk_firmware`
|
||||
qmk setup # This will clone `qmk/qmk_firmware` and optionally set up your build environment
|
||||
curl -fsSL https://install.qmk.fm | sh
|
||||
```
|
||||
|
||||
### Install Using uv {#install-using-uv}
|
||||
|
||||
If you have installed [uv](https://docs.astral.sh/uv/), the QMK CLI can be installed and managed as a uv tool:
|
||||
For more options, run:
|
||||
|
||||
```
|
||||
uv tool install qmk
|
||||
export QMK_HOME='~/qmk_firmware' # Optional, set the location for `qmk_firmware`
|
||||
qmk setup # This will clone `qmk/qmk_firmware` and optionally set up your build environment
|
||||
curl -fsSL https://install.qmk.fm | sh -s -- --help
|
||||
```
|
||||
|
||||
This installation can be updated via `uv tool upgrade qmk`. See [Upgrading tools](https://docs.astral.sh/uv/guides/tools/#upgrading-tools) for more information.
|
||||
|
||||
### Install Using pip {#install-using-easy_install-or-pip}
|
||||
|
||||
If your system is not listed above you can install QMK manually. First ensure that you have Python 3.9 (or later) installed and have installed pip. Then install QMK with this command:
|
||||
|
||||
```
|
||||
python3 -m pip install qmk
|
||||
export QMK_HOME='~/qmk_firmware' # Optional, set the location for `qmk_firmware`
|
||||
qmk setup # This will clone `qmk/qmk_firmware` and optionally set up your build environment
|
||||
```
|
||||
|
||||
### Packaging For Other Operating Systems {#packaging-for-other-operating-systems}
|
||||
|
||||
We are looking for people to create and maintain a `qmk` package for more operating systems. If you would like to create a package for your OS please follow these guidelines:
|
||||
|
||||
* Follow best practices for your OS when they conflict with these guidelines
|
||||
* Document why in a comment when you do deviate
|
||||
* Install using a virtualenv
|
||||
* Instruct the user to set the environment variable `QMK_HOME` to have the firmware source checked out somewhere other than `~/qmk_firmware`.
|
||||
For detailed setup instructions, see [Setting Up Your QMK Environment](newbs_getting_started#set-up-your-environment).
|
||||
|
||||
+11
-10
@@ -17,12 +17,12 @@ qmk compile [-c] <configuratorExport.json>
|
||||
**Usage for Keymaps**:
|
||||
|
||||
```
|
||||
qmk compile [-c] [-e <var>=<value>] [-j <num_jobs>] [--compiledb] -kb <keyboard_name> -km <keymap_name>
|
||||
qmk compile [-c] [-e <var>=<value>] [-j <num_jobs>] [--compiledb] -kb <keyboard> -km <keymap>
|
||||
```
|
||||
|
||||
**Usage in Keyboard Directory**:
|
||||
|
||||
Must be in keyboard directory with a default keymap, or in keymap directory for keyboard, or supply one with `--keymap <keymap_name>`
|
||||
Must be in keyboard directory with a default keymap, or in keymap directory for keyboard, or supply one with `--keymap <keymap>`
|
||||
```
|
||||
qmk compile
|
||||
```
|
||||
@@ -30,7 +30,7 @@ qmk compile
|
||||
**Usage for building all keyboards that support a specific keymap**:
|
||||
|
||||
```
|
||||
qmk compile -kb all -km <keymap_name>
|
||||
qmk compile -kb all -km <keymap>
|
||||
```
|
||||
|
||||
**Example**:
|
||||
@@ -62,7 +62,7 @@ $ qmk compile
|
||||
|
||||
Must be under `qmk_firmware/layouts/`, and in a keymap folder.
|
||||
```
|
||||
qmk compile -kb <keyboard_name>
|
||||
qmk compile -kb <keyboard>
|
||||
```
|
||||
|
||||
**Example**:
|
||||
@@ -77,11 +77,11 @@ $ qmk compile -kb dz60
|
||||
|
||||
It is possible to speed up compilation by adding the `-j`/`--parallel` flag.
|
||||
```
|
||||
qmk compile -j <num_jobs> -kb <keyboard_name>
|
||||
qmk compile -j <num_jobs> -kb <keyboard>
|
||||
```
|
||||
The `num_jobs` argument determines the maximum number of jobs that can be used. Setting it to zero will enable parallel compilation without limiting the maximum number of jobs.
|
||||
```
|
||||
qmk compile -j 0 -kb <keyboard_name>
|
||||
qmk compile -j 0 -kb <keyboard>
|
||||
```
|
||||
|
||||
**Compilation Database**:
|
||||
@@ -120,7 +120,7 @@ qmk flash [-bl <bootloader>] [-c] [-e <var>=<value>] [-j <num_jobs>] <configurat
|
||||
**Usage for Keymaps**:
|
||||
|
||||
```
|
||||
qmk flash -kb <keyboard_name> -km <keymap_name> [-bl <bootloader>] [-c] [-e <var>=<value>] [-j <num_jobs>]
|
||||
qmk flash -kb <keyboard> -km <keymap_name> [-bl <bootloader>] [-c] [-e <var>=<value>] [-j <num_jobs>]
|
||||
```
|
||||
|
||||
**Usage for pre-compiled firmwares**:
|
||||
@@ -631,14 +631,15 @@ This command compiles all the External Userspace build targets.
|
||||
**Usage**:
|
||||
|
||||
```
|
||||
qmk userspace-compile [-h] [-e ENV] [-n] [-c] [-j PARALLEL] [-t]
|
||||
qmk userspace-compile [-h] [-e ENV] [-p] [-n] [-c] [-j PARALLEL] [-t]
|
||||
|
||||
options:
|
||||
-h, --help show this help message and exit
|
||||
-e ENV, --env ENV Set a variable to be passed to make. May be passed multiple times.
|
||||
-e, --env ENV Set a variable to be passed to make. May be passed multiple times.
|
||||
-p, --print-failures Print failed builds.
|
||||
-n, --dry-run Don't actually build, just show the commands to be run.
|
||||
-c, --clean Remove object files before compiling.
|
||||
-j PARALLEL, --parallel PARALLEL
|
||||
-j, --parallel PARALLEL
|
||||
Set the number of parallel make jobs; 0 means unlimited.
|
||||
-t, --no-temp Remove temporary files during build.
|
||||
```
|
||||
|
||||
@@ -12,11 +12,11 @@ If you intend to maintain keyboards and/or contribute to QMK, you can enable the
|
||||
|
||||
`qmk config user.developer=True`
|
||||
|
||||
This will allow you to see all available subcommands.
|
||||
**Note:** You will have to install additional requirements:
|
||||
```
|
||||
python3 -m pip install -r requirements-dev.txt
|
||||
```
|
||||
This will allow you to see all available subcommands.
|
||||
|
||||
::: tip
|
||||
If you installed QMK using the bootstrapper (`curl -fsSL https://install.qmk.fm | sh`), the development requirements are already installed.
|
||||
:::
|
||||
|
||||
# Subcommands
|
||||
|
||||
|
||||
@@ -74,24 +74,6 @@ This is a C header file that is one of the first things included, and will persi
|
||||
* pins mapped to rows and columns, from left to right. Defines a matrix where each switch is connected to a separate pin and ground.
|
||||
* `#define AUDIO_VOICES`
|
||||
* turns on the alternate audio voices (to cycle through)
|
||||
* `#define C4_AUDIO`
|
||||
* enables audio on pin C4
|
||||
* Deprecated. Use `#define AUDIO_PIN C4`
|
||||
* `#define C5_AUDIO`
|
||||
* enables audio on pin C5
|
||||
* Deprecated. Use `#define AUDIO_PIN C5`
|
||||
* `#define C6_AUDIO`
|
||||
* enables audio on pin C6
|
||||
* Deprecated. Use `#define AUDIO_PIN C6`
|
||||
* `#define B5_AUDIO`
|
||||
* enables audio on pin B5 (duophony is enabled if one of B pins is enabled along with one of C pins)
|
||||
* Deprecated. Use `#define AUDIO_PIN B5`, or use `#define AUDIO_PIN_ALT B5` if a `C` pin is enabled with `AUDIO_PIN`
|
||||
* `#define B6_AUDIO`
|
||||
* enables audio on pin B6 (duophony is enabled if one of B pins is enabled along with one of C pins)
|
||||
* Deprecated. Use `#define AUDIO_PIN B6`, or use `#define AUDIO_PIN_ALT B6` if a `C` pin is enabled with `AUDIO_PIN`
|
||||
* `#define B7_AUDIO`
|
||||
* enables audio on pin B7 (duophony is enabled if one of B pins is enabled along with one of C pins)
|
||||
* Deprecated. Use `#define AUDIO_PIN B7`, or use `#define AUDIO_PIN_ALT B7` if a `C` pin is enabled with `AUDIO_PIN`
|
||||
* `#define BACKLIGHT_PIN B7`
|
||||
* pin of the backlight
|
||||
* `#define BACKLIGHT_LEVELS 3`
|
||||
@@ -364,8 +346,6 @@ This is a [make](https://www.gnu.org/software/make/manual/make.html) file that i
|
||||
|
||||
## Build Options
|
||||
|
||||
* `DEFAULT_FOLDER`
|
||||
* Used to specify a default folder when a keyboard has more than one sub-folder.
|
||||
* `FIRMWARE_FORMAT`
|
||||
* Defines which format (bin, hex) is copied to the root `qmk_firmware` folder after building.
|
||||
* `SRC`
|
||||
|
||||
@@ -74,7 +74,7 @@ void matrix_init(void) {
|
||||
// TODO: initialize hardware and global matrix state here
|
||||
|
||||
// Unless hardware debouncing - Init the configured debounce routine
|
||||
debounce_init(MATRIX_ROWS);
|
||||
debounce_init();
|
||||
|
||||
// This *must* be called for correct keyboard behavior
|
||||
matrix_init_kb();
|
||||
@@ -86,7 +86,7 @@ uint8_t matrix_scan(void) {
|
||||
// TODO: add matrix scanning routine here
|
||||
|
||||
// Unless hardware debouncing - use the configured debounce routine
|
||||
changed = debounce(raw_matrix, matrix, MATRIX_ROWS, changed);
|
||||
changed = debounce(raw_matrix, matrix, changed);
|
||||
|
||||
// This *must* be called for correct keyboard behavior
|
||||
matrix_scan_kb();
|
||||
|
||||
@@ -145,7 +145,7 @@ void keyboard_pre_init_user(void) {
|
||||
|
||||
This is called when the matrix is initialized, and after some of the hardware has been set up, but before many of the features have been initialized.
|
||||
|
||||
This is useful for setting up stuff that you may need elsewhere, but isn't hardware related nor is dependant on where it's started.
|
||||
This is useful for setting up stuff that you may need elsewhere, but isn't hardware related nor is dependent on where it's started.
|
||||
|
||||
|
||||
### `matrix_init_*` Function Documentation
|
||||
@@ -209,7 +209,7 @@ You should use this function if you need custom matrix scanning code. It can als
|
||||
|
||||
This function gets called at the end of all QMK processing, before starting the next iteration. You can safely assume that QMK has dealt with the last matrix scan at the time that these functions are invoked -- layer states have been updated, USB reports have been sent, LEDs have been updated, and displays have been drawn.
|
||||
|
||||
Similar to `matrix_scan_*`, these are called as often as the MCU can handle. To keep your board responsive, it's suggested to do as little as possible during these function calls, potentially throtting their behaviour if you do indeed require implementing something special.
|
||||
Similar to `matrix_scan_*`, these are called as often as the MCU can handle. To keep your board responsive, it's suggested to do as little as possible during these function calls, potentially throttling their behaviour if you do indeed require implementing something special.
|
||||
|
||||
### Example `void housekeeping_task_user(void)` implementation
|
||||
|
||||
@@ -246,7 +246,7 @@ void check_rgb_timeout(void) {
|
||||
}
|
||||
}
|
||||
/* Then, call the above functions from QMK's built in post processing functions like so */
|
||||
/* Runs at the end of each scan loop, check if RGB timeout has occured or not */
|
||||
/* Runs at the end of each scan loop, check if RGB timeout has occurred or not */
|
||||
void housekeeping_task_user(void) {
|
||||
#ifdef RGBLIGHT_TIMEOUT
|
||||
check_rgb_timeout();
|
||||
@@ -316,7 +316,7 @@ bool shutdown_kb(bool jump_to_bootloader) {
|
||||
if (!shutdown_user(jump_to_bootloader)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
if (jump_to_bootloader) {
|
||||
// red for bootloader
|
||||
rgb_matrix_set_color_all(RGB_OFF);
|
||||
|
||||
@@ -6,7 +6,7 @@ This page describes how QMK's data driven JSON configuration system works. It is
|
||||
|
||||
Historically QMK has been configured through a combination of two mechanisms- `rules.mk` and `config.h`. While this worked well when QMK was only a handful of keyboards we've grown to encompass nearly 4000 supported keyboards. That extrapolates out to 6000 configuration files under `keyboards/` alone! The freeform nature of these files and the unique patterns people have used to avoid duplication have made ongoing maintenance a challenge, and a large number of our keyboards follow patterns that are outdated and sometimes harder to understand.
|
||||
|
||||
We have also been working on bringing the power of QMK to people who aren't comformable with a CLI, and other projects such as VIA are working to make using QMK as easy as installing a program. These tools need information about how a keyboard is laid out or what pins and features are available so that users can take full advantage of QMK. We introduced `info.json` as a first step towards this. The QMK API is an effort to combine these 3 sources of information- `config.h`, `rules.mk`, and `info.json`- into a single source of truth that end-user tools can use.
|
||||
We have also been working on bringing the power of QMK to people who aren't comfortable with a CLI, and other projects such as VIA are working to make using QMK as easy as installing a program. These tools need information about how a keyboard is laid out or what pins and features are available so that users can take full advantage of QMK. We introduced `info.json` as a first step towards this. The QMK API is an effort to combine these 3 sources of information- `config.h`, `rules.mk`, and `info.json`- into a single source of truth that end-user tools can use.
|
||||
|
||||
Now we have support for generating `rules.mk` and `config.h` values from `info.json`, allowing us to have a single source of truth. This will allow us to use automated tooling to maintain keyboards saving a lot of time and maintenance work.
|
||||
|
||||
|
||||
@@ -14,6 +14,10 @@ Example:
|
||||
This page covers my super cool feature. You can use this feature to make coffee, squeeze fresh oj, and have an egg mcmuffin and hashbrowns delivered from your local macca's by drone.
|
||||
```
|
||||
|
||||
# Paragraphs
|
||||
|
||||
Do not use hard line breaks within the raw Markdown for each paragraph. These are optional in Markdown, and have no effect on the rendered output. This means each raw paragraph will be a single long line in your editor (best viewed with line wrapping enabled).
|
||||
|
||||
# Headings
|
||||
|
||||
Your page should generally have multiple "H1" headings. Only H1 and H2 headings will included in the Table of Contents, so plan them out appropriately. Excess width should be avoided in H1 and H2 headings to prevent the Table of Contents from getting too wide.
|
||||
|
||||
@@ -4,7 +4,7 @@ QMK presents itself to the host as a regular HID keyboard device, and as such re
|
||||
|
||||
There are two notable exceptions: the Caterina bootloader, usually seen on Pro Micros, and the HalfKay bootloader shipped with PJRC Teensys, appear as a serial port and a generic HID device respectively, and so do not require a driver.
|
||||
|
||||
We recommend the use of the [Zadig](https://zadig.akeo.ie/) utility. If you have set up the development environment with MSYS2, the `qmk_install.sh` script will have already installed the drivers for you.
|
||||
We recommend the use of the [Zadig](https://zadig.akeo.ie/) utility. If you have set up the development environment with MSYS2, the QMK CLI installation script will have already installed the drivers for you.
|
||||
|
||||
## Installation
|
||||
|
||||
@@ -22,7 +22,7 @@ If Zadig lists one or more devices with the `HidUsb` driver, your keyboard is pr
|
||||
|
||||
If the arrow appears green, select the driver, and click **Install Driver**. See the [list of known bootloaders](#list-of-known-bootloaders) for the correct driver to install.
|
||||
|
||||

|
||||

|
||||
|
||||
Finally, unplug and replug the keyboard to make sure the new driver has been loaded. If you are using the QMK Toolbox to flash, exit and restart it too, as it can sometimes fail to recognize the driver change.
|
||||
|
||||
@@ -30,15 +30,15 @@ Finally, unplug and replug the keyboard to make sure the new driver has been loa
|
||||
|
||||
If you find that you can no longer type with the keyboard, you may have accidentally replaced the driver for the keyboard itself instead of for the bootloader. This can happen when the keyboard is not in the bootloader mode. You can easily confirm this in Zadig - a healthy keyboard has the `HidUsb` driver installed on all of its interfaces:
|
||||
|
||||

|
||||

|
||||
|
||||
Open the Device Manager, select **View → Devices by container**, and look for an entry with your keyboard's name.
|
||||
|
||||

|
||||

|
||||
|
||||
Right-click each entry and hit **Uninstall device**. Make sure to tick **Delete the driver software for this device** first if it appears.
|
||||
|
||||

|
||||

|
||||
|
||||
Click **Action → Scan for hardware changes**. At this point, you should be able to type again. Double check in Zadig that the keyboard device(s) are using the `HidUsb` driver. If so, you're all done, and your board should be functional again! Otherwise, repeat this process until Zadig reports the correct driver.
|
||||
|
||||
@@ -54,11 +54,11 @@ Open the Device Manager, select **View → Devices by container**, and look for
|
||||
|
||||
Find the `Inf name` value in the Details tab of the device properties. This should generally be something like `oemXX.inf`:
|
||||
|
||||

|
||||

|
||||
|
||||
Then, open a new Command Prompt window as an Administrator (type in `cmd` into the Start menu and press Ctrl+Shift+Enter). Run `pnputil /enum-drivers` to verify the `Inf name` matches the `Published Name` field of one of the entries:
|
||||
|
||||

|
||||

|
||||
|
||||
Run `pnputil /delete-driver oemXX.inf /uninstall`. This will delete the driver and remove it from any devices using it. Note that this will not uninstall the device itself.
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
SPI 18x12 LED matrix driver by Awinic. Supports a maximum of four drivers, each controlling up to 216 single-color LEDs, or 72 RGB LEDs.
|
||||
|
||||
[AW20216S Datasheet](https://doc.awinic.com/doc/20230609wm/b6a9c70b-e1bd-495b-925f-bcbed3fc2620.pdf)
|
||||
[AW20216S Datasheet](https://doc.awinic.com/doc/202412/a055779b-49c0-4d09-8f04-73029f44b72b.pdf)
|
||||
|
||||
## Usage {#usage}
|
||||
|
||||
@@ -44,7 +44,7 @@ Depending on the ChibiOS board configuration, you may need to [enable and config
|
||||
|
||||
## LED Mapping {#led-mapping}
|
||||
|
||||
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboardname>.c`:
|
||||
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboard>.c`:
|
||||
|
||||
```c
|
||||
const aw20216s_led_t PROGMEM g_aw20216s_leds[AW20216S_LED_COUNT] = {
|
||||
|
||||
+24
-45
@@ -1,6 +1,6 @@
|
||||
# Battery Driver
|
||||
|
||||
This driver provides support for sampling battery level.
|
||||
This driver provides support for directly sampling battery level.
|
||||
|
||||
## Usage
|
||||
|
||||
@@ -10,21 +10,17 @@ To use this driver, add the following to your `rules.mk`:
|
||||
BATTERY_DRIVER_REQUIRED = yes
|
||||
```
|
||||
|
||||
## Basic Configuration {#basic-configuration}
|
||||
|
||||
Add the following to your `config.h`:
|
||||
|
||||
|Define |Default |Description |
|
||||
|--------------------------|--------|--------------------------------------------------|
|
||||
|`BATTERY_SAMPLE_INTERVAL` |`30000` |The time between battery samples in milliseconds. |
|
||||
::::info Note
|
||||
This is already configured for you if you are using the [Battery](../features/battery) feature.
|
||||
::::
|
||||
|
||||
## Driver Configuration {#driver-configuration}
|
||||
|
||||
Driver selection can be configured in `rules.mk` as `BATTERY_DRIVER`. Valid values are `adc` (default), `vendor`, or `custom`. See below for information on individual drivers.
|
||||
Driver selection can be configured in `rules.mk` as `BATTERY_DRIVER`. Valid values are `adc`, `vendor`, or `custom`. See below for information on individual drivers.
|
||||
|
||||
### ADC Driver {#adc-driver}
|
||||
|
||||
This is the default battery driver. The default configuration assumes the battery is connected to a ADC capable pin through a voltage divider.
|
||||
The default configuration assumes the battery is connected to a ADC capable pin through a voltage divider.
|
||||
|
||||
```make
|
||||
BATTERY_DRIVER = adc
|
||||
@@ -32,42 +28,25 @@ BATTERY_DRIVER = adc
|
||||
|
||||
The following `#define`s apply only to the `adc` driver:
|
||||
|
||||
|Define |Default |Description |
|
||||
|-----------------------------|--------------|--------------------------------------------------------------|
|
||||
|`BATTERY_PIN` |*Not defined* |The GPIO pin connected to the voltage divider. |
|
||||
|`BATTERY_REF_VOLTAGE_MV` |`3300` |The ADC reverence voltage, in millivolts. |
|
||||
|`BATTERY_VOLTAGE_DIVIDER_R1` |`100` |The voltage divider resistance, in kOhm. Set to 0 to disable. |
|
||||
|`BATTERY_VOLTAGE_DIVIDER_R2` |`100` |The voltage divider resistance, in kOhm. Set to 0 to disable. |
|
||||
|`BATTERY_ADC_RESOLUTION` |`10` |The ADC resolution configured for the ADC Driver. |
|
||||
|Define |Default |Description |
|
||||
|---------------------------------|--------------|--------------------------------------------------------------|
|
||||
|`BATTERY_ADC_PIN` |*Not defined* |The GPIO pin connected to the voltage divider. |
|
||||
|`BATTERY_ADC_REF_VOLTAGE_MV` |`3300` |The ADC reverence voltage, in millivolts. |
|
||||
|`BATTERY_ADC_VOLTAGE_DIVIDER_R1` |`100` |The voltage divider resistance, in kOhm. Set to 0 to disable. |
|
||||
|`BATTERY_ADC_VOLTAGE_DIVIDER_R2` |`100` |The voltage divider resistance, in kOhm. Set to 0 to disable. |
|
||||
|`BATTERY_ADC_RESOLUTION` |`10` |The ADC resolution configured for the ADC Driver. |
|
||||
|
||||
## Functions
|
||||
### Custom Driver {#custom-driver}
|
||||
|
||||
### `uint8_t battery_get_percent(void)` {#api-battery-get-percent}
|
||||
A custom driver is expected to implement the following interface:
|
||||
|
||||
Sample battery level.
|
||||
```c
|
||||
void battery_driver_init(void) {
|
||||
// Perform any initialisation here
|
||||
}
|
||||
|
||||
#### Return Value {#api-battery-get-percent-return}
|
||||
|
||||
The battery percentage, in the range 0-100.
|
||||
|
||||
## Callbacks
|
||||
|
||||
### `void battery_percent_changed_user(uint8_t level)` {#api-battery-percent-changed-user}
|
||||
|
||||
User hook called when battery level changed.
|
||||
|
||||
### Arguments {#api-battery-percent-changed-user-arguments}
|
||||
|
||||
- `uint8_t level`
|
||||
The battery percentage, in the range 0-100.
|
||||
|
||||
---
|
||||
|
||||
### `void battery_percent_changed_kb(uint8_t level)` {#api-battery-percent-changed-kb}
|
||||
|
||||
Keyboard hook called when battery level changed.
|
||||
|
||||
### Arguments {#api-battery-percent-changed-kb-arguments}
|
||||
|
||||
- `uint8_t level`
|
||||
The battery percentage, in the range 0-100.
|
||||
uint8_t battery_driver_sample_percent(void) {
|
||||
// Read and return current state here
|
||||
return value;
|
||||
}
|
||||
```
|
||||
|
||||
@@ -221,6 +221,31 @@ Receive multiple bytes from the selected I2C device.
|
||||
|
||||
---
|
||||
|
||||
### `i2c_status_t i2c_transmit_and_receive(uint8_t address, const uint8_t* tx_data, uint16_t tx_length, uint8_t* rx_data, uint16_t rx_length, uint16_t timeout)` {#api-i2c-transmit-and-receive}
|
||||
|
||||
Send and receive multiple bytes from the selected I2C device.
|
||||
|
||||
#### Arguments {#api-i2c-transmit-and-receive-arguments}
|
||||
|
||||
- `uint8_t address`
|
||||
The 7-bit I2C address of the device.
|
||||
- `const uint8_t* tx_data`
|
||||
A pointer to the data to transmit.
|
||||
- `uint16_t tx_length`
|
||||
The number of bytes to write. Take care not to overrun the length of `tx_data`.
|
||||
- `uint8_t* rx_data`
|
||||
A pointer to a buffer to read into.
|
||||
- `uint16_t rx_length`
|
||||
The number of bytes to read. Take care not to overrun the length of `data`.
|
||||
- `uint16_t timeout`
|
||||
The time in milliseconds to wait for a response from the target device.
|
||||
|
||||
#### Return Value {#api-i2c-transmit-and-receive-return}
|
||||
|
||||
`I2C_STATUS_TIMEOUT` if the timeout period elapses, `I2C_STATUS_ERROR` if some other error occurs, otherwise `I2C_STATUS_SUCCESS`.
|
||||
|
||||
---
|
||||
|
||||
### `i2c_status_t i2c_write_register(uint8_t devaddr, uint8_t regaddr, const uint8_t* data, uint16_t length, uint16_t timeout)` {#api-i2c-write-register}
|
||||
|
||||
Write to a register with an 8-bit address on the I2C device.
|
||||
|
||||
@@ -37,7 +37,7 @@ Depending on the ChibiOS board configuration, you may need to [enable and config
|
||||
|
||||
## LED Mapping {#led-mapping}
|
||||
|
||||
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboardname>.c`:
|
||||
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboard>.c`:
|
||||
|
||||
```c
|
||||
const is31fl3218_led_t PROGMEM g_is31fl3218_leds[IS31FL3218_LED_COUNT] = {
|
||||
|
||||
@@ -50,7 +50,7 @@ Depending on the ChibiOS board configuration, you may need to [enable and config
|
||||
|
||||
## LED Mapping {#led-mapping}
|
||||
|
||||
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboardname>.c`:
|
||||
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboard>.c`:
|
||||
|
||||
```c
|
||||
const is31fl3236_led_t PROGMEM g_is31fl3236_leds[IS31FL3236_LED_COUNT] = {
|
||||
|
||||
@@ -120,7 +120,7 @@ Depending on the ChibiOS board configuration, you may need to [enable and config
|
||||
|
||||
## LED Mapping {#led-mapping}
|
||||
|
||||
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboardname>.c`:
|
||||
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboard>.c`:
|
||||
|
||||
```c
|
||||
const is31fl3729_led_t PROGMEM g_is31fl3729_leds[IS31FL3729_LED_COUNT] = {
|
||||
|
||||
@@ -61,7 +61,7 @@ Depending on the ChibiOS board configuration, you may need to [enable and config
|
||||
|
||||
## LED Mapping {#led-mapping}
|
||||
|
||||
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboardname>.c`:
|
||||
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboard>.c`:
|
||||
|
||||
```c
|
||||
const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = {
|
||||
|
||||
@@ -145,7 +145,7 @@ Depending on the ChibiOS board configuration, you may need to [enable and config
|
||||
|
||||
## LED Mapping {#led-mapping}
|
||||
|
||||
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboardname>.c`:
|
||||
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboard>.c`:
|
||||
|
||||
```c
|
||||
const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = {
|
||||
|
||||
@@ -129,7 +129,7 @@ Depending on the ChibiOS board configuration, you may need to [enable and config
|
||||
|
||||
## LED Mapping {#led-mapping}
|
||||
|
||||
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboardname>.c`:
|
||||
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboard>.c`:
|
||||
|
||||
```c
|
||||
const is31fl3736_led_t PROGMEM g_is31fl3736_leds[IS31FL3736_LED_COUNT] = {
|
||||
|
||||
@@ -117,7 +117,7 @@ Depending on the ChibiOS board configuration, you may need to [enable and config
|
||||
|
||||
## LED Mapping {#led-mapping}
|
||||
|
||||
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboardname>.c`:
|
||||
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboard>.c`:
|
||||
|
||||
```c
|
||||
const is31fl3737_led_t PROGMEM g_is31fl3737_leds[IS31FL3737_LED_COUNT] = {
|
||||
|
||||
@@ -117,7 +117,7 @@ Depending on the ChibiOS board configuration, you may need to [enable and config
|
||||
|
||||
## LED Mapping {#led-mapping}
|
||||
|
||||
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboardname>.c`:
|
||||
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboard>.c`:
|
||||
|
||||
```c
|
||||
const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = {
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user