Compare commits
2 Commits
enhancemen
...
refactor-s
Author | SHA1 | Date | |
---|---|---|---|
|
d7e43f7d0d | ||
|
ec6bb9564b |
4
Makefile
4
Makefile
@@ -68,7 +68,7 @@ fix-formatting: devdeps
|
|||||||
@$(PIPENV) run black .
|
@$(PIPENV) run black .
|
||||||
|
|
||||||
fix-isort: devdeps
|
fix-isort: devdeps
|
||||||
@find boards/ kmk/ tests/ user_keymaps/ -name "*.py" | xargs $(PIPENV) run isort
|
@find kmk/ user_keymaps/ boards/ -name "*.py" | xargs $(PIPENV) run isort
|
||||||
|
|
||||||
clean: clean-dist
|
clean: clean-dist
|
||||||
@echo "===> Cleaning build artifacts"
|
@echo "===> Cleaning build artifacts"
|
||||||
@@ -92,7 +92,7 @@ test: lint unit-tests
|
|||||||
|
|
||||||
.PHONY: unit-tests
|
.PHONY: unit-tests
|
||||||
unit-tests: devdeps
|
unit-tests: devdeps
|
||||||
@$(PIPENV) run python3 -m unittest ${TESTS}
|
@$(PIPENV) run python3 -m unittest
|
||||||
|
|
||||||
reset-bootloader:
|
reset-bootloader:
|
||||||
@echo "===> Rebooting your board to bootloader (safe to ignore file not found errors)"
|
@echo "===> Rebooting your board to bootloader (safe to ignore file not found errors)"
|
||||||
|
2
Pipfile
2
Pipfile
@@ -17,6 +17,6 @@ ipython = "*"
|
|||||||
isort = "*"
|
isort = "*"
|
||||||
neovim = "*"
|
neovim = "*"
|
||||||
s3cmd = "*"
|
s3cmd = "*"
|
||||||
black = "==22.3.0"
|
black = "==21.6b0"
|
||||||
flake8-quotes = "*"
|
flake8-quotes = "*"
|
||||||
flake8-black = "*"
|
flake8-black = "*"
|
||||||
|
525
Pipfile.lock
generated
525
Pipfile.lock
generated
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"_meta": {
|
"_meta": {
|
||||||
"hash": {
|
"hash": {
|
||||||
"sha256": "8c1b0ad909dc0ac0fc8013756ca7db8b5420f51c25cc1c2d1612f62fe5e19843"
|
"sha256": "0a04ec24d4aef6828e4f5eefa0a7d2c312f21f2b2f18c42c7004cdbe0c02bd53"
|
||||||
},
|
},
|
||||||
"pipfile-spec": 6,
|
"pipfile-spec": 6,
|
||||||
"requires": {},
|
"requires": {},
|
||||||
@@ -23,12 +23,12 @@
|
|||||||
"index": "pypi",
|
"index": "pypi",
|
||||||
"version": "==1.1.0"
|
"version": "==1.1.0"
|
||||||
},
|
},
|
||||||
"asttokens": {
|
"appdirs": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:4622110b2a6f30b77e1473affaa97e711bc2f07d3f10848420ff1898edbe94f3",
|
"sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41",
|
||||||
"sha256:6b0ac9e93fb0335014d382b8fa9b3afa7df546984258005da0b9e7095b3deb1c"
|
"sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"
|
||||||
],
|
],
|
||||||
"version": "==2.2.1"
|
"version": "==1.4.4"
|
||||||
},
|
},
|
||||||
"backcall": {
|
"backcall": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
@@ -39,281 +39,227 @@
|
|||||||
},
|
},
|
||||||
"black": {
|
"black": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:06f9d8846f2340dfac80ceb20200ea5d1b3f181dd0556b47af4e8e0b24fa0a6b",
|
"sha256:dc132348a88d103016726fe360cb9ede02cecf99b76e3660ce6c596be132ce04",
|
||||||
"sha256:10dbe6e6d2988049b4655b2b739f98785a884d4d6b85bc35133a8fb9a2233176",
|
"sha256:dfb8c5a069012b2ab1e972e7b908f5fb42b6bbabcba0a788b86dc05067c7d9c7"
|
||||||
"sha256:2497f9c2386572e28921fa8bec7be3e51de6801f7459dffd6e62492531c47e09",
|
|
||||||
"sha256:30d78ba6bf080eeaf0b7b875d924b15cd46fec5fd044ddfbad38c8ea9171043a",
|
|
||||||
"sha256:328efc0cc70ccb23429d6be184a15ce613f676bdfc85e5fe8ea2a9354b4e9015",
|
|
||||||
"sha256:35020b8886c022ced9282b51b5a875b6d1ab0c387b31a065b84db7c33085ca79",
|
|
||||||
"sha256:5795a0375eb87bfe902e80e0c8cfaedf8af4d49694d69161e5bd3206c18618bb",
|
|
||||||
"sha256:5891ef8abc06576985de8fa88e95ab70641de6c1fca97e2a15820a9b69e51b20",
|
|
||||||
"sha256:637a4014c63fbf42a692d22b55d8ad6968a946b4a6ebc385c5505d9625b6a464",
|
|
||||||
"sha256:67c8301ec94e3bcc8906740fe071391bce40a862b7be0b86fb5382beefecd968",
|
|
||||||
"sha256:6d2fc92002d44746d3e7db7cf9313cf4452f43e9ea77a2c939defce3b10b5c82",
|
|
||||||
"sha256:6ee227b696ca60dd1c507be80a6bc849a5a6ab57ac7352aad1ffec9e8b805f21",
|
|
||||||
"sha256:863714200ada56cbc366dc9ae5291ceb936573155f8bf8e9de92aef51f3ad0f0",
|
|
||||||
"sha256:9b542ced1ec0ceeff5b37d69838106a6348e60db7b8fdd245294dc1d26136265",
|
|
||||||
"sha256:a6342964b43a99dbc72f72812bf88cad8f0217ae9acb47c0d4f141a6416d2d7b",
|
|
||||||
"sha256:ad4efa5fad66b903b4a5f96d91461d90b9507a812b3c5de657d544215bb7877a",
|
|
||||||
"sha256:bc58025940a896d7e5356952228b68f793cf5fcb342be703c3a2669a1488cb72",
|
|
||||||
"sha256:cc1e1de68c8e5444e8f94c3670bb48a2beef0e91dddfd4fcc29595ebd90bb9ce",
|
|
||||||
"sha256:cee3e11161dde1b2a33a904b850b0899e0424cc331b7295f2a9698e79f9a69a0",
|
|
||||||
"sha256:e3556168e2e5c49629f7b0f377070240bd5511e45e25a4497bb0073d9dda776a",
|
|
||||||
"sha256:e8477ec6bbfe0312c128e74644ac8a02ca06bcdb8982d4ee06f209be28cdf163",
|
|
||||||
"sha256:ee8f1f7228cce7dffc2b464f07ce769f478968bfb3dd1254a4c2eeed84928aad",
|
|
||||||
"sha256:fd57160949179ec517d32ac2ac898b5f20d68ed1a9c977346efbac9c2f1e779d"
|
|
||||||
],
|
],
|
||||||
"index": "pypi",
|
"index": "pypi",
|
||||||
"version": "==22.3.0"
|
"version": "==21.6b0"
|
||||||
},
|
},
|
||||||
"click": {
|
"click": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e",
|
"sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3",
|
||||||
"sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"
|
"sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b"
|
||||||
],
|
],
|
||||||
"markers": "python_version >= '3.7'",
|
"markers": "python_version >= '3.6'",
|
||||||
"version": "==8.1.3"
|
"version": "==8.0.3"
|
||||||
},
|
},
|
||||||
"decorator": {
|
"decorator": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330",
|
"sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330",
|
||||||
"sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"
|
"sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"
|
||||||
],
|
],
|
||||||
"markers": "python_version < '3.11' and python_version >= '3.7'",
|
"markers": "python_version >= '3.5'",
|
||||||
"version": "==5.1.1"
|
"version": "==5.1.1"
|
||||||
},
|
},
|
||||||
"executing": {
|
|
||||||
"hashes": [
|
|
||||||
"sha256:0314a69e37426e3608aada02473b4161d4caf5a4b244d1d0c48072b8fee7bacc",
|
|
||||||
"sha256:19da64c18d2d851112f09c287f8d3dbbdf725ab0e569077efb6cdcbd3497c107"
|
|
||||||
],
|
|
||||||
"version": "==1.2.0"
|
|
||||||
},
|
|
||||||
"flake8": {
|
"flake8": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:3833794e27ff64ea4e9cf5d410082a8b97ff1a06c16aa3d2027339cd0f1195c7",
|
"sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b",
|
||||||
"sha256:c61007e76655af75e6785a931f452915b371dc48f56efd765247c8fe68f2b181"
|
"sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907"
|
||||||
],
|
],
|
||||||
"index": "pypi",
|
"index": "pypi",
|
||||||
"version": "==6.0.0"
|
"version": "==3.9.2"
|
||||||
},
|
},
|
||||||
"flake8-black": {
|
"flake8-black": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:0dfbca3274777792a5bcb2af887a4cad72c72d0e86c94e08e3a3de151bb41c34",
|
"sha256:941514149cb8b489cb17a4bb1cf18d84375db3b34381bb018de83509437931a0",
|
||||||
"sha256:fe8ea2eca98d8a504f22040d9117347f6b367458366952862ac3586e7d4eeaca"
|
"sha256:f26651bc10db786c03f4093414f7c9ea982ed8a244cec323c984feeffdf4c118"
|
||||||
],
|
],
|
||||||
"index": "pypi",
|
"index": "pypi",
|
||||||
"version": "==0.3.6"
|
"version": "==0.2.1"
|
||||||
},
|
},
|
||||||
"flake8-commas": {
|
"flake8-commas": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:940441ab8ee544df564ae3b3f49f20462d75d5c7cac2463e0b27436e2050f263",
|
"sha256:d3005899466f51380387df7151fb59afec666a0f4f4a2c6a8995b975de0f44b7",
|
||||||
"sha256:ebb96c31e01d0ef1d0685a21f3f0e2f8153a0381430e748bf0bbbb5d5b453d54"
|
"sha256:ee2141a3495ef9789a3894ed8802d03eff1eaaf98ce6d8653a7c573ef101935e"
|
||||||
],
|
],
|
||||||
"index": "pypi",
|
"index": "pypi",
|
||||||
"version": "==2.1.0"
|
"version": "==2.0.0"
|
||||||
},
|
},
|
||||||
"flake8-comprehensions": {
|
"flake8-comprehensions": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:412052ac4a947f36b891143430fef4859705af11b2572fbb689f90d372cf26ab",
|
"sha256:b07aef3277623db32310aa241a1cec67212b53c1d18e767d7e26d4d83aa05bf7",
|
||||||
"sha256:d763de3c74bc18a79c039a7ec732e0a1985b0c79309ceb51e56401ad0a2cd44e"
|
"sha256:f24be9032587127f7a5bc6d066bf755b6e66834f694383adb8a673e229c1f559"
|
||||||
],
|
],
|
||||||
"index": "pypi",
|
"index": "pypi",
|
||||||
"version": "==3.10.1"
|
"version": "==3.5.0"
|
||||||
},
|
},
|
||||||
"flake8-isort": {
|
"flake8-isort": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:537f453a660d7e903f602ecfa36136b140de279df58d02eb1b6a0c84e83c528c",
|
"sha256:2b91300f4f1926b396c2c90185844eb1a3d5ec39ea6138832d119da0a208f4d9",
|
||||||
"sha256:aa0cac02a62c7739e370ce6b9c31743edac904bae4b157274511fc8a19c75bbc"
|
"sha256:729cd6ef9ba3659512dee337687c05d79c78e1215fdf921ed67e5fe46cce2f3c"
|
||||||
],
|
],
|
||||||
"index": "pypi",
|
"index": "pypi",
|
||||||
"version": "==6.0.0"
|
"version": "==4.0.0"
|
||||||
},
|
},
|
||||||
"flake8-quotes": {
|
"flake8-quotes": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:6e26892b632dacba517bf27219c459a8396dcfac0f5e8204904c5a4ba9b480e1"
|
"sha256:3f1116e985ef437c130431ac92f9b3155f8f652fda7405ac22ffdfd7a9d1055e"
|
||||||
],
|
],
|
||||||
"index": "pypi",
|
"index": "pypi",
|
||||||
"version": "==3.3.2"
|
"version": "==3.2.0"
|
||||||
},
|
},
|
||||||
"greenlet": {
|
"greenlet": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:03a8f4f3430c3b3ff8d10a2a86028c660355ab637cee9333d63d66b56f09d52a",
|
"sha256:0051c6f1f27cb756ffc0ffbac7d2cd48cb0362ac1736871399a739b2885134d3",
|
||||||
"sha256:0bf60faf0bc2468089bdc5edd10555bab6e85152191df713e2ab1fcc86382b5a",
|
"sha256:00e44c8afdbe5467e4f7b5851be223be68adb4272f44696ee71fe46b7036a711",
|
||||||
"sha256:18a7f18b82b52ee85322d7a7874e676f34ab319b9f8cce5de06067384aa8ff43",
|
"sha256:013d61294b6cd8fe3242932c1c5e36e5d1db2c8afb58606c5a67efce62c1f5fd",
|
||||||
"sha256:18e98fb3de7dba1c0a852731c3070cf022d14f0d68b4c87a19cc1016f3bb8b33",
|
"sha256:049fe7579230e44daef03a259faa24511d10ebfa44f69411d99e6a184fe68073",
|
||||||
"sha256:1a819eef4b0e0b96bb0d98d797bef17dc1b4a10e8d7446be32d1da33e095dbb8",
|
"sha256:14d4f3cd4e8b524ae9b8aa567858beed70c392fdec26dbdb0a8a418392e71708",
|
||||||
"sha256:26fbfce90728d82bc9e6c38ea4d038cba20b7faf8a0ca53a9c07b67318d46088",
|
"sha256:166eac03e48784a6a6e0e5f041cfebb1ab400b394db188c48b3a84737f505b67",
|
||||||
"sha256:2780572ec463d44c1d3ae850239508dbeb9fed38e294c68d19a24d925d9223ca",
|
"sha256:17ff94e7a83aa8671a25bf5b59326ec26da379ace2ebc4411d690d80a7fbcf23",
|
||||||
"sha256:283737e0da3f08bd637b5ad058507e578dd462db259f7f6e4c5c365ba4ee9343",
|
"sha256:1e12bdc622676ce47ae9abbf455c189e442afdde8818d9da983085df6312e7a1",
|
||||||
"sha256:2d4686f195e32d36b4d7cf2d166857dbd0ee9f3d20ae349b6bf8afc8485b3645",
|
"sha256:21915eb821a6b3d9d8eefdaf57d6c345b970ad722f856cd71739493ce003ad08",
|
||||||
"sha256:2dd11f291565a81d71dab10b7033395b7a3a5456e637cf997a6f33ebdf06f8db",
|
"sha256:288c6a76705dc54fba69fbcb59904ae4ad768b4c768839b8ca5fdadec6dd8cfd",
|
||||||
"sha256:30bcf80dda7f15ac77ba5af2b961bdd9dbc77fd4ac6105cee85b0d0a5fcf74df",
|
"sha256:2bde6792f313f4e918caabc46532aa64aa27a0db05d75b20edfc5c6f46479de2",
|
||||||
"sha256:32e5b64b148966d9cccc2c8d35a671409e45f195864560829f395a54226408d3",
|
"sha256:32ca72bbc673adbcfecb935bb3fb1b74e663d10a4b241aaa2f5a75fe1d1f90aa",
|
||||||
"sha256:36abbf031e1c0f79dd5d596bfaf8e921c41df2bdf54ee1eed921ce1f52999a86",
|
"sha256:356b3576ad078c89a6107caa9c50cc14e98e3a6c4874a37c3e0273e4baf33de8",
|
||||||
"sha256:3a06ad5312349fec0ab944664b01d26f8d1f05009566339ac6f63f56589bc1a2",
|
"sha256:40b951f601af999a8bf2ce8c71e8aaa4e8c6f78ff8afae7b808aae2dc50d4c40",
|
||||||
"sha256:3a51c9751078733d88e013587b108f1b7a1fb106d402fb390740f002b6f6551a",
|
"sha256:572e1787d1460da79590bf44304abbc0a2da944ea64ec549188fa84d89bba7ab",
|
||||||
"sha256:3c9b12575734155d0c09d6c3e10dbd81665d5c18e1a7c6597df72fd05990c8cf",
|
"sha256:58df5c2a0e293bf665a51f8a100d3e9956febfbf1d9aaf8c0677cf70218910c6",
|
||||||
"sha256:3f6ea9bd35eb450837a3d80e77b517ea5bc56b4647f5502cd28de13675ee12f7",
|
"sha256:64e6175c2e53195278d7388c454e0b30997573f3f4bd63697f88d855f7a6a1fc",
|
||||||
"sha256:4b58adb399c4d61d912c4c331984d60eb66565175cdf4a34792cd9600f21b394",
|
"sha256:7227b47e73dedaa513cdebb98469705ef0d66eb5a1250144468e9c3097d6b59b",
|
||||||
"sha256:4d2e11331fc0c02b6e84b0d28ece3a36e0548ee1a1ce9ddde03752d9b79bba40",
|
"sha256:7418b6bfc7fe3331541b84bb2141c9baf1ec7132a7ecd9f375912eca810e714e",
|
||||||
"sha256:5454276c07d27a740c5892f4907c86327b632127dd9abec42ee62e12427ff7e3",
|
"sha256:7cbd7574ce8e138bda9df4efc6bf2ab8572c9aff640d8ecfece1b006b68da963",
|
||||||
"sha256:561091a7be172ab497a3527602d467e2b3fbe75f9e783d8b8ce403fa414f71a6",
|
"sha256:7ff61ff178250f9bb3cd89752df0f1dd0e27316a8bd1465351652b1b4a4cdfd3",
|
||||||
"sha256:6c3acb79b0bfd4fe733dff8bc62695283b57949ebcca05ae5c129eb606ff2d74",
|
"sha256:833e1551925ed51e6b44c800e71e77dacd7e49181fdc9ac9a0bf3714d515785d",
|
||||||
"sha256:703f18f3fda276b9a916f0934d2fb6d989bf0b4fb5a64825260eb9bfd52d78f0",
|
"sha256:8639cadfda96737427330a094476d4c7a56ac03de7265622fcf4cfe57c8ae18d",
|
||||||
"sha256:7492e2b7bd7c9b9916388d9df23fa49d9b88ac0640db0a5b4ecc2b653bf451e3",
|
"sha256:8c5d5b35f789a030ebb95bff352f1d27a93d81069f2adb3182d99882e095cefe",
|
||||||
"sha256:76ae285c8104046b3a7f06b42f29c7b73f77683df18c49ab5af7983994c2dd91",
|
"sha256:8c790abda465726cfb8bb08bd4ca9a5d0a7bd77c7ac1ca1b839ad823b948ea28",
|
||||||
"sha256:7cafd1208fdbe93b67c7086876f061f660cfddc44f404279c1585bbf3cdc64c5",
|
"sha256:8d2f1fb53a421b410751887eb4ff21386d119ef9cde3797bf5e7ed49fb51a3b3",
|
||||||
"sha256:7efde645ca1cc441d6dc4b48c0f7101e8d86b54c8530141b09fd31cef5149ec9",
|
"sha256:903bbd302a2378f984aef528f76d4c9b1748f318fe1294961c072bdc7f2ffa3e",
|
||||||
"sha256:88d9ab96491d38a5ab7c56dd7a3cc37d83336ecc564e4e8816dbed12e5aaefc8",
|
"sha256:93f81b134a165cc17123626ab8da2e30c0455441d4ab5576eed73a64c025b25c",
|
||||||
"sha256:8eab883b3b2a38cc1e050819ef06a7e6344d4a990d24d45bc6f2cf959045a45b",
|
"sha256:95e69877983ea39b7303570fa6760f81a3eec23d0e3ab2021b7144b94d06202d",
|
||||||
"sha256:910841381caba4f744a44bf81bfd573c94e10b3045ee00de0cbf436fe50673a6",
|
"sha256:9633b3034d3d901f0a46b7939f8c4d64427dfba6bbc5a36b1a67364cf148a1b0",
|
||||||
"sha256:9190f09060ea4debddd24665d6804b995a9c122ef5917ab26e1566dcc712ceeb",
|
"sha256:97e5306482182170ade15c4b0d8386ded995a07d7cc2ca8f27958d34d6736497",
|
||||||
"sha256:937e9020b514ceedb9c830c55d5c9872abc90f4b5862f89c0887033ae33c6f73",
|
"sha256:9f3cba480d3deb69f6ee2c1825060177a22c7826431458c697df88e6aeb3caee",
|
||||||
"sha256:94c817e84245513926588caf1152e3b559ff794d505555211ca041f032abbb6b",
|
"sha256:aa5b467f15e78b82257319aebc78dd2915e4c1436c3c0d1ad6f53e47ba6e2713",
|
||||||
"sha256:971ce5e14dc5e73715755d0ca2975ac88cfdaefcaab078a284fea6cfabf866df",
|
"sha256:abb7a75ed8b968f3061327c433a0fbd17b729947b400747c334a9c29a9af6c58",
|
||||||
"sha256:9d14b83fab60d5e8abe587d51c75b252bcc21683f24699ada8fb275d7712f5a9",
|
"sha256:aec52725173bd3a7b56fe91bc56eccb26fbdff1386ef123abb63c84c5b43b63a",
|
||||||
"sha256:9f35ec95538f50292f6d8f2c9c9f8a3c6540bbfec21c9e5b4b751e0a7c20864f",
|
"sha256:b11548073a2213d950c3f671aa88e6f83cda6e2fb97a8b6317b1b5b33d850e06",
|
||||||
"sha256:a1846f1b999e78e13837c93c778dcfc3365902cfb8d1bdb7dd73ead37059f0d0",
|
"sha256:b1692f7d6bc45e3200844be0dba153612103db241691088626a33ff1f24a0d88",
|
||||||
"sha256:acd2162a36d3de67ee896c43effcd5ee3de247eb00354db411feb025aa319857",
|
"sha256:b336501a05e13b616ef81ce329c0e09ac5ed8c732d9ba7e3e983fcc1a9e86965",
|
||||||
"sha256:b0ef99cdbe2b682b9ccbb964743a6aca37905fda5e0452e5ee239b1654d37f2a",
|
"sha256:b8c008de9d0daba7b6666aa5bbfdc23dcd78cafc33997c9b7741ff6353bafb7f",
|
||||||
"sha256:b80f600eddddce72320dbbc8e3784d16bd3fb7b517e82476d8da921f27d4b249",
|
"sha256:b92e29e58bef6d9cfd340c72b04d74c4b4e9f70c9fa7c78b674d1fec18896dc4",
|
||||||
"sha256:b864ba53912b6c3ab6bcb2beb19f19edd01a6bfcbdfe1f37ddd1778abfe75a30",
|
"sha256:be5f425ff1f5f4b3c1e33ad64ab994eed12fc284a6ea71c5243fd564502ecbe5",
|
||||||
"sha256:b9ec052b06a0524f0e35bd8790686a1da006bd911dd1ef7d50b77bfbad74e292",
|
"sha256:dd0b1e9e891f69e7675ba5c92e28b90eaa045f6ab134ffe70b52e948aa175b3c",
|
||||||
"sha256:ba2956617f1c42598a308a84c6cf021a90ff3862eddafd20c3333d50f0edb45b",
|
"sha256:e30f5ea4ae2346e62cedde8794a56858a67b878dd79f7df76a0767e356b1744a",
|
||||||
"sha256:bdfea8c661e80d3c1c99ad7c3ff74e6e87184895bbaca6ee8cc61209f8b9b85d",
|
"sha256:e6a36bb9474218c7a5b27ae476035497a6990e21d04c279884eb10d9b290f1b1",
|
||||||
"sha256:be4ed120b52ae4d974aa40215fcdfde9194d63541c7ded40ee12eb4dda57b76b",
|
"sha256:e859fcb4cbe93504ea18008d1df98dee4f7766db66c435e4882ab35cf70cac43",
|
||||||
"sha256:c4302695ad8027363e96311df24ee28978162cdcdd2006476c43970b384a244c",
|
"sha256:eb6ea6da4c787111adf40f697b4e58732ee0942b5d3bd8f435277643329ba627",
|
||||||
"sha256:c48f54ef8e05f04d6eff74b8233f6063cb1ed960243eacc474ee73a2ea8573ca",
|
"sha256:ec8c433b3ab0419100bd45b47c9c8551248a5aee30ca5e9d399a0b57ac04651b",
|
||||||
"sha256:c9c59a2120b55788e800d82dfa99b9e156ff8f2227f07c5e3012a45a399620b7",
|
"sha256:eff9d20417ff9dcb0d25e2defc2574d10b491bf2e693b4e491914738b7908168",
|
||||||
"sha256:cd021c754b162c0fb55ad5d6b9d960db667faad0fa2ff25bb6e1301b0b6e6a75",
|
"sha256:f0214eb2a23b85528310dad848ad2ac58e735612929c8072f6093f3585fd342d",
|
||||||
"sha256:d27ec7509b9c18b6d73f2f5ede2622441de812e7b1a80bbd446cb0633bd3d5ae",
|
"sha256:f276df9830dba7a333544bd41070e8175762a7ac20350786b322b714b0e654f5",
|
||||||
"sha256:d5508f0b173e6aa47273bdc0a0b5ba055b59662ba7c7ee5119528f466585526b",
|
"sha256:f3acda1924472472ddd60c29e5b9db0cec629fbe3c5c5accb74d6d6d14773478",
|
||||||
"sha256:d75209eed723105f9596807495d58d10b3470fa6732dd6756595e89925ce2470",
|
"sha256:f70a9e237bb792c7cc7e44c531fd48f5897961701cdaa06cf22fc14965c496cf",
|
||||||
"sha256:db1a39669102a1d8d12b57de2bb7e2ec9066a6f2b3da35ae511ff93b01b5d564",
|
"sha256:f9d29ca8a77117315101425ec7ec2a47a22ccf59f5593378fc4077ac5b754fce",
|
||||||
"sha256:dbfcfc0218093a19c252ca8eb9aee3d29cfdcb586df21049b9d777fd32c14fd9",
|
"sha256:fa877ca7f6b48054f847b61d6fa7bed5cebb663ebc55e018fda12db09dcc664c",
|
||||||
"sha256:e0f72c9ddb8cd28532185f54cc1453f2c16fb417a08b53a855c4e6a418edd099",
|
"sha256:fdcec0b8399108577ec290f55551d926d9a1fa6cad45882093a7a07ac5ec147b"
|
||||||
"sha256:e7c8dc13af7db097bed64a051d2dd49e9f0af495c26995c00a9ee842690d34c0",
|
|
||||||
"sha256:ea9872c80c132f4663822dd2a08d404073a5a9b5ba6155bea72fb2a79d1093b5",
|
|
||||||
"sha256:eff4eb9b7eb3e4d0cae3d28c283dc16d9bed6b193c2e1ace3ed86ce48ea8df19",
|
|
||||||
"sha256:f82d4d717d8ef19188687aa32b8363e96062911e63ba22a0cff7802a8e58e5f1",
|
|
||||||
"sha256:fc3a569657468b6f3fb60587e48356fe512c1754ca05a564f11366ac9e306526"
|
|
||||||
],
|
],
|
||||||
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'",
|
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'",
|
||||||
"version": "==2.0.2"
|
"version": "==1.1.2"
|
||||||
},
|
},
|
||||||
"ipdb": {
|
"ipdb": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:c23b6736f01fd4586cc2ecbebdf79a5eb454796853e1cd8f2ed3b7b91d4a3e93",
|
"sha256:951bd9a64731c444fd907a5ce268543020086a697f6be08f7cc2c9a752a278c5"
|
||||||
"sha256:f74c2f741c18b909eaf89f19fde973f745ac721744aa1465888ce45813b63a9c"
|
|
||||||
],
|
],
|
||||||
"index": "pypi",
|
"index": "pypi",
|
||||||
"version": "==0.13.11"
|
"version": "==0.13.9"
|
||||||
},
|
},
|
||||||
"ipython": {
|
"ipython": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:b13a1d6c1f5818bd388db53b7107d17454129a70de2b87481d555daede5eb49e",
|
"sha256:55df3e0bd0f94e715abd968bedd89d4e8a7bce4bf498fb123fed4f5398fea874",
|
||||||
"sha256:b38c31e8fc7eff642fc7c597061fff462537cf2314e3225a19c906b7b0d8a345"
|
"sha256:b5548ec5329a4bcf054a5deed5099b0f9622eb9ea51aaa7104d215fece201d8c"
|
||||||
],
|
],
|
||||||
"index": "pypi",
|
"index": "pypi",
|
||||||
"version": "==8.10.0"
|
"version": "==7.31.1"
|
||||||
},
|
},
|
||||||
"isort": {
|
"isort": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504",
|
"sha256:0a943902919f65c5684ac4e0154b1ad4fac6dcaa5d9f3426b732f1c8b5419be6",
|
||||||
"sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6"
|
"sha256:2bb1680aad211e3c9944dbce1d4ba09a989f04e238296c87fe2139faa26d655d"
|
||||||
],
|
],
|
||||||
"index": "pypi",
|
"index": "pypi",
|
||||||
"version": "==5.12.0"
|
"version": "==5.8.0"
|
||||||
},
|
},
|
||||||
"jedi": {
|
"jedi": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:203c1fd9d969ab8f2119ec0a3342e0b49910045abe6af0a3ae83a5764d54639e",
|
"sha256:637c9635fcf47945ceb91cd7f320234a7be540ded6f3e99a50cb6febdfd1ba8d",
|
||||||
"sha256:bae794c30d07f6d910d32a7048af09b5a39ed740918da923c6b780790ebac612"
|
"sha256:74137626a64a99c8eb6ae5832d99b3bdd7d29a3850fe2aa80a4126b2a7d949ab"
|
||||||
],
|
],
|
||||||
"markers": "python_version >= '3.6'",
|
"markers": "python_version >= '3.6'",
|
||||||
"version": "==0.18.2"
|
"version": "==0.18.1"
|
||||||
},
|
},
|
||||||
"matplotlib-inline": {
|
"matplotlib-inline": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311",
|
"sha256:a04bfba22e0d1395479f866853ec1ee28eea1485c1d69a6faf00dc3e24ff34ee",
|
||||||
"sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304"
|
"sha256:aed605ba3b72462d64d475a21a9296f400a19c4f74a31b59103d2a99ffd5aa5c"
|
||||||
],
|
],
|
||||||
"markers": "python_version >= '3.5'",
|
"markers": "python_version >= '3.5'",
|
||||||
"version": "==0.1.6"
|
"version": "==0.1.3"
|
||||||
},
|
},
|
||||||
"mccabe": {
|
"mccabe": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325",
|
"sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42",
|
||||||
"sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"
|
"sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"
|
||||||
],
|
],
|
||||||
"markers": "python_version >= '3.6'",
|
"version": "==0.6.1"
|
||||||
"version": "==0.7.0"
|
|
||||||
},
|
},
|
||||||
"msgpack": {
|
"msgpack": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:002b5c72b6cd9b4bafd790f364b8480e859b4712e91f43014fe01e4f957b8467",
|
"sha256:0d8c332f53ffff01953ad25131272506500b14750c1d0ce8614b17d098252fbc",
|
||||||
"sha256:0a68d3ac0104e2d3510de90a1091720157c319ceeb90d74f7b5295a6bee51bae",
|
"sha256:1c58cdec1cb5fcea8c2f1771d7b5fec79307d056874f746690bd2bdd609ab147",
|
||||||
"sha256:0df96d6eaf45ceca04b3f3b4b111b86b33785683d682c655063ef8057d61fd92",
|
"sha256:2c3ca57c96c8e69c1a0d2926a6acf2d9a522b41dc4253a8945c4c6cd4981a4e3",
|
||||||
"sha256:0dfe3947db5fb9ce52aaea6ca28112a170db9eae75adf9339a1aec434dc954ef",
|
"sha256:2f30dd0dc4dfe6231ad253b6f9f7128ac3202ae49edd3f10d311adc358772dba",
|
||||||
"sha256:0e3590f9fb9f7fbc36df366267870e77269c03172d086fa76bb4eba8b2b46624",
|
"sha256:2f97c0f35b3b096a330bb4a1a9247d0bd7e1f3a2eba7ab69795501504b1c2c39",
|
||||||
"sha256:11184bc7e56fd74c00ead4f9cc9a3091d62ecb96e97653add7a879a14b003227",
|
"sha256:36a64a10b16c2ab31dcd5f32d9787ed41fe68ab23dd66957ca2826c7f10d0b85",
|
||||||
"sha256:112b0f93202d7c0fef0b7810d465fde23c746a2d482e1e2de2aafd2ce1492c88",
|
"sha256:3d875631ecab42f65f9dce6f55ce6d736696ced240f2634633188de2f5f21af9",
|
||||||
"sha256:1276e8f34e139aeff1c77a3cefb295598b504ac5314d32c8c3d54d24fadb94c9",
|
"sha256:40fb89b4625d12d6027a19f4df18a4de5c64f6f3314325049f219683e07e678a",
|
||||||
"sha256:1576bd97527a93c44fa856770197dec00d223b0b9f36ef03f65bac60197cedf8",
|
"sha256:47d733a15ade190540c703de209ffbc42a3367600421b62ac0c09fde594da6ec",
|
||||||
"sha256:1e91d641d2bfe91ba4c52039adc5bccf27c335356055825c7f88742c8bb900dd",
|
"sha256:494471d65b25a8751d19c83f1a482fd411d7ca7a3b9e17d25980a74075ba0e88",
|
||||||
"sha256:26b8feaca40a90cbe031b03d82b2898bf560027160d3eae1423f4a67654ec5d6",
|
"sha256:51fdc7fb93615286428ee7758cecc2f374d5ff363bdd884c7ea622a7a327a81e",
|
||||||
"sha256:2999623886c5c02deefe156e8f869c3b0aaeba14bfc50aa2486a0415178fce55",
|
"sha256:6eef0cf8db3857b2b556213d97dd82de76e28a6524853a9beb3264983391dc1a",
|
||||||
"sha256:2a2df1b55a78eb5f5b7d2a4bb221cd8363913830145fad05374a80bf0877cb1e",
|
"sha256:6f4c22717c74d44bcd7af353024ce71c6b55346dad5e2cc1ddc17ce8c4507c6b",
|
||||||
"sha256:2bb8cdf50dd623392fa75525cce44a65a12a00c98e1e37bf0fb08ddce2ff60d2",
|
"sha256:73a80bd6eb6bcb338c1ec0da273f87420829c266379c8c82fa14c23fb586cfa1",
|
||||||
"sha256:2cc5ca2712ac0003bcb625c96368fd08a0f86bbc1a5578802512d87bc592fe44",
|
"sha256:89908aea5f46ee1474cc37fbc146677f8529ac99201bc2faf4ef8edc023c2bf3",
|
||||||
"sha256:35bc0faa494b0f1d851fd29129b2575b2e26d41d177caacd4206d81502d4c6a6",
|
"sha256:8a3a5c4b16e9d0edb823fe54b59b5660cc8d4782d7bf2c214cb4b91a1940a8ef",
|
||||||
"sha256:3c11a48cf5e59026ad7cb0dc29e29a01b5a66a3e333dc11c04f7e991fc5510a9",
|
"sha256:96acc674bb9c9be63fa8b6dabc3248fdc575c4adc005c440ad02f87ca7edd079",
|
||||||
"sha256:449e57cc1ff18d3b444eb554e44613cffcccb32805d16726a5494038c3b93dab",
|
"sha256:973ad69fd7e31159eae8f580f3f707b718b61141838321c6fa4d891c4a2cca52",
|
||||||
"sha256:462497af5fd4e0edbb1559c352ad84f6c577ffbbb708566a0abaaa84acd9f3ae",
|
"sha256:9b6f2d714c506e79cbead331de9aae6837c8dd36190d02da74cb409b36162e8a",
|
||||||
"sha256:4733359808c56d5d7756628736061c432ded018e7a1dff2d35a02439043321aa",
|
"sha256:9c0903bd93cbd34653dd63bbfcb99d7539c372795201f39d16fdfde4418de43a",
|
||||||
"sha256:48f5d88c99f64c456413d74a975bd605a9b0526293218a3b77220a2c15458ba9",
|
"sha256:9fce00156e79af37bb6db4e7587b30d11e7ac6a02cb5bac387f023808cd7d7f4",
|
||||||
"sha256:49565b0e3d7896d9ea71d9095df15b7f75a035c49be733051c34762ca95bbf7e",
|
"sha256:a598d0685e4ae07a0672b59792d2cc767d09d7a7f39fd9bd37ff84e060b1a996",
|
||||||
"sha256:4ab251d229d10498e9a2f3b1e68ef64cb393394ec477e3370c457f9430ce9250",
|
"sha256:b0a792c091bac433dfe0a70ac17fc2087d4595ab835b47b89defc8bbabcf5c73",
|
||||||
"sha256:4d5834a2a48965a349da1c5a79760d94a1a0172fbb5ab6b5b33cbf8447e109ce",
|
"sha256:bb87f23ae7d14b7b3c21009c4b1705ec107cb21ee71975992f6aca571fb4a42a",
|
||||||
"sha256:4dea20515f660aa6b7e964433b1808d098dcfcabbebeaaad240d11f909298075",
|
"sha256:bf1e6bfed4860d72106f4e0a1ab519546982b45689937b40257cfd820650b920",
|
||||||
"sha256:545e3cf0cf74f3e48b470f68ed19551ae6f9722814ea969305794645da091236",
|
"sha256:c1ba333b4024c17c7591f0f372e2daa3c31db495a9b2af3cf664aef3c14354f7",
|
||||||
"sha256:63e29d6e8c9ca22b21846234913c3466b7e4ee6e422f205a2988083de3b08cae",
|
"sha256:c2140cf7a3ec475ef0938edb6eb363fa704159e0bf71dde15d953bacc1cf9d7d",
|
||||||
"sha256:6916c78f33602ecf0509cc40379271ba0f9ab572b066bd4bdafd7434dee4bc6e",
|
"sha256:c7e03b06f2982aa98d4ddd082a210c3db200471da523f9ac197f2828e80e7770",
|
||||||
"sha256:6a4192b1ab40f8dca3f2877b70e63799d95c62c068c84dc028b40a6cb03ccd0f",
|
"sha256:d02cea2252abc3756b2ac31f781f7a98e89ff9759b2e7450a1c7a0d13302ff50",
|
||||||
"sha256:6c9566f2c39ccced0a38d37c26cc3570983b97833c365a6044edef3574a00c08",
|
"sha256:da24375ab4c50e5b7486c115a3198d207954fe10aaa5708f7b65105df09109b2",
|
||||||
"sha256:76ee788122de3a68a02ed6f3a16bbcd97bc7c2e39bd4d94be2f1821e7c4a64e6",
|
"sha256:e4c309a68cb5d6bbd0c50d5c71a25ae81f268c2dc675c6f4ea8ab2feec2ac4e2",
|
||||||
"sha256:7760f85956c415578c17edb39eed99f9181a48375b0d4a94076d84148cf67b2d",
|
"sha256:f01b26c2290cbd74316990ba84a14ac3d599af9cebefc543d241a66e785cf17d",
|
||||||
"sha256:77ccd2af37f3db0ea59fb280fa2165bf1b096510ba9fe0cc2bf8fa92a22fdb43",
|
"sha256:f201d34dc89342fabb2a10ed7c9a9aaaed9b7af0f16a5923f1ae562b31258dea",
|
||||||
"sha256:81fc7ba725464651190b196f3cd848e8553d4d510114a954681fd0b9c479d7e1",
|
"sha256:f74da1e5fcf20ade12c6bf1baa17a2dc3604958922de8dc83cbe3eff22e8b611"
|
||||||
"sha256:85f279d88d8e833ec015650fd15ae5eddce0791e1e8a59165318f371158efec6",
|
|
||||||
"sha256:9667bdfdf523c40d2511f0e98a6c9d3603be6b371ae9a238b7ef2dc4e7a427b0",
|
|
||||||
"sha256:a75dfb03f8b06f4ab093dafe3ddcc2d633259e6c3f74bb1b01996f5d8aa5868c",
|
|
||||||
"sha256:ac5bd7901487c4a1dd51a8c58f2632b15d838d07ceedaa5e4c080f7190925bff",
|
|
||||||
"sha256:aca0f1644d6b5a73eb3e74d4d64d5d8c6c3d577e753a04c9e9c87d07692c58db",
|
|
||||||
"sha256:b17be2478b622939e39b816e0aa8242611cc8d3583d1cd8ec31b249f04623243",
|
|
||||||
"sha256:c1683841cd4fa45ac427c18854c3ec3cd9b681694caf5bff04edb9387602d661",
|
|
||||||
"sha256:c23080fdeec4716aede32b4e0ef7e213c7b1093eede9ee010949f2a418ced6ba",
|
|
||||||
"sha256:d5b5b962221fa2c5d3a7f8133f9abffc114fe218eb4365e40f17732ade576c8e",
|
|
||||||
"sha256:d603de2b8d2ea3f3bcb2efe286849aa7a81531abc52d8454da12f46235092bcb",
|
|
||||||
"sha256:e83f80a7fec1a62cf4e6c9a660e39c7f878f603737a0cdac8c13131d11d97f52",
|
|
||||||
"sha256:eb514ad14edf07a1dbe63761fd30f89ae79b42625731e1ccf5e1f1092950eaa6",
|
|
||||||
"sha256:eba96145051ccec0ec86611fe9cf693ce55f2a3ce89c06ed307de0e085730ec1",
|
|
||||||
"sha256:ed6f7b854a823ea44cf94919ba3f727e230da29feb4a99711433f25800cf747f",
|
|
||||||
"sha256:f0029245c51fd9473dc1aede1160b0a29f4a912e6b1dd353fa6d317085b219da",
|
|
||||||
"sha256:f5d869c18f030202eb412f08b28d2afeea553d6613aee89e200d7aca7ef01f5f",
|
|
||||||
"sha256:fb62ea4b62bfcb0b380d5680f9a4b3f9a2d166d9394e9bbd9666c0ee09a3645c",
|
|
||||||
"sha256:fcb8a47f43acc113e24e910399376f7277cf8508b27e5b88499f053de6b115a8"
|
|
||||||
],
|
],
|
||||||
"version": "==1.0.4"
|
"version": "==1.0.3"
|
||||||
},
|
},
|
||||||
"mypy-extensions": {
|
"mypy-extensions": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d",
|
"sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d",
|
||||||
"sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"
|
"sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"
|
||||||
],
|
],
|
||||||
"markers": "python_version >= '3.5'",
|
"version": "==0.4.3"
|
||||||
"version": "==1.0.0"
|
|
||||||
},
|
},
|
||||||
"neovim": {
|
"neovim": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
@@ -332,11 +278,10 @@
|
|||||||
},
|
},
|
||||||
"pathspec": {
|
"pathspec": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:3a66eb970cbac598f9e5ccb5b2cf58930cd8e3ed86d393d541eaf2d8b1705229",
|
"sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a",
|
||||||
"sha256:64d338d4e0914e91c1792321e6907b5a593f1ab1851de7fc269557a21b30ebbc"
|
"sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"
|
||||||
],
|
],
|
||||||
"markers": "python_version >= '3.7'",
|
"version": "==0.9.0"
|
||||||
"version": "==0.11.0"
|
|
||||||
},
|
},
|
||||||
"pexpect": {
|
"pexpect": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
@@ -353,21 +298,13 @@
|
|||||||
],
|
],
|
||||||
"version": "==0.7.5"
|
"version": "==0.7.5"
|
||||||
},
|
},
|
||||||
"platformdirs": {
|
|
||||||
"hashes": [
|
|
||||||
"sha256:8a1228abb1ef82d788f74139988b137e78692984ec7b08eaa6c65f1723af28f9",
|
|
||||||
"sha256:b1d5eb14f221506f50d6604a561f4c5786d9e80355219694a1b244bcd96f4567"
|
|
||||||
],
|
|
||||||
"markers": "python_version >= '3.7'",
|
|
||||||
"version": "==3.0.0"
|
|
||||||
},
|
|
||||||
"prompt-toolkit": {
|
"prompt-toolkit": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:3e163f254bef5a03b146397d7c1963bd3e2812f0964bb9a24e6ec761fd28db63",
|
"sha256:1bb05628c7d87b645974a1bad3f17612be0c29fa39af9f7688030163f680bad6",
|
||||||
"sha256:aa64ad242a462c5ff0363a7b9cfe696c20d55d9fc60c11fd8e632d064804d305"
|
"sha256:e56f2ff799bacecd3e88165b1e2f5ebf9bcd59e80e06d395fa0cc4b8bd7bb506"
|
||||||
],
|
],
|
||||||
"markers": "python_full_version >= '3.6.2'",
|
"markers": "python_full_version >= '3.6.2'",
|
||||||
"version": "==3.0.36"
|
"version": "==3.0.24"
|
||||||
},
|
},
|
||||||
"ptyprocess": {
|
"ptyprocess": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
@@ -376,36 +313,29 @@
|
|||||||
],
|
],
|
||||||
"version": "==0.7.0"
|
"version": "==0.7.0"
|
||||||
},
|
},
|
||||||
"pure-eval": {
|
|
||||||
"hashes": [
|
|
||||||
"sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350",
|
|
||||||
"sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3"
|
|
||||||
],
|
|
||||||
"version": "==0.2.2"
|
|
||||||
},
|
|
||||||
"pycodestyle": {
|
"pycodestyle": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:347187bdb476329d98f695c213d7295a846d1152ff4fe9bacb8a9590b8ee7053",
|
"sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068",
|
||||||
"sha256:8a4eaf0d0495c7395bdab3589ac2db602797d76207242c17d470186815706610"
|
"sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef"
|
||||||
],
|
],
|
||||||
"markers": "python_version >= '3.6'",
|
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
||||||
"version": "==2.10.0"
|
"version": "==2.7.0"
|
||||||
},
|
},
|
||||||
"pyflakes": {
|
"pyflakes": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:ec55bf7fe21fff7f1ad2f7da62363d749e2a470500eab1b555334b67aa1ef8cf",
|
"sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3",
|
||||||
"sha256:ec8b276a6b60bd80defed25add7e439881c19e64850afd9b346283d4165fd0fd"
|
"sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db"
|
||||||
],
|
],
|
||||||
"markers": "python_version >= '3.6'",
|
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
||||||
"version": "==3.0.1"
|
"version": "==2.3.1"
|
||||||
},
|
},
|
||||||
"pygments": {
|
"pygments": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297",
|
"sha256:44238f1b60a76d78fc8ca0528ee429702aae011c265fe6a8dd8b63049ae41c65",
|
||||||
"sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717"
|
"sha256:4e426f72023d88d03b2fa258de560726ce890ff3b630f88c21cbb8b2503b8c6a"
|
||||||
],
|
],
|
||||||
"markers": "python_version >= '3.6'",
|
"markers": "python_version >= '3.5'",
|
||||||
"version": "==2.14.0"
|
"version": "==2.11.2"
|
||||||
},
|
},
|
||||||
"pynvim": {
|
"pynvim": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
@@ -430,27 +360,114 @@
|
|||||||
},
|
},
|
||||||
"python-dotenv": {
|
"python-dotenv": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:1c93de8f636cde3ce377292818d0e440b6e45a82f215c3744979151fa8151c49",
|
"sha256:32b2bdc1873fd3a3c346da1c6db83d0053c3c62f28f1f38516070c4c8971b1d3",
|
||||||
"sha256:41e12e0318bebc859fcc4d97d4db8d20ad21721a6aa5047dd59f090391cb549a"
|
"sha256:a5de49a31e953b45ff2d2fd434bbc2670e8db5273606c1e737cc6b93eff3655f"
|
||||||
],
|
],
|
||||||
"markers": "python_version >= '3.7'",
|
"markers": "python_version >= '3.5'",
|
||||||
"version": "==0.21.1"
|
"version": "==0.19.2"
|
||||||
},
|
},
|
||||||
"python-magic": {
|
"python-magic": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:c1ba14b08e4a5f5c31a302b7721239695b2f0f058d125bd5ce1ee36b9d9d3c3b",
|
"sha256:4fec8ee805fea30c07afccd1592c0f17977089895bdfaae5fec870a84e997626",
|
||||||
"sha256:c212960ad306f700aa0d01e5d7a325d20548ff97eb9920dcd29513174f0294d3"
|
"sha256:de800df9fb50f8ec5974761054a708af6e4246b03b4bdaee993f948947b0ebcf"
|
||||||
],
|
],
|
||||||
"index": "pypi",
|
"index": "pypi",
|
||||||
"version": "==0.4.27"
|
"version": "==0.4.24"
|
||||||
|
},
|
||||||
|
"regex": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:04611cc0f627fc4a50bc4a9a2e6178a974c6a6a4aa9c1cca921635d2c47b9c87",
|
||||||
|
"sha256:0b5d6f9aed3153487252d00a18e53f19b7f52a1651bc1d0c4b5844bc286dfa52",
|
||||||
|
"sha256:0d2f5c3f7057530afd7b739ed42eb04f1011203bc5e4663e1e1d01bb50f813e3",
|
||||||
|
"sha256:11772be1eb1748e0e197a40ffb82fb8fd0d6914cd147d841d9703e2bef24d288",
|
||||||
|
"sha256:1333b3ce73269f986b1fa4d5d395643810074dc2de5b9d262eb258daf37dc98f",
|
||||||
|
"sha256:16f81025bb3556eccb0681d7946e2b35ff254f9f888cff7d2120e8826330315c",
|
||||||
|
"sha256:1a171eaac36a08964d023eeff740b18a415f79aeb212169080c170ec42dd5184",
|
||||||
|
"sha256:1d6301f5288e9bdca65fab3de6b7de17362c5016d6bf8ee4ba4cbe833b2eda0f",
|
||||||
|
"sha256:1e031899cb2bc92c0cf4d45389eff5b078d1936860a1be3aa8c94fa25fb46ed8",
|
||||||
|
"sha256:1f8c0ae0a0de4e19fddaaff036f508db175f6f03db318c80bbc239a1def62d02",
|
||||||
|
"sha256:2245441445099411b528379dee83e56eadf449db924648e5feb9b747473f42e3",
|
||||||
|
"sha256:22709d701e7037e64dae2a04855021b62efd64a66c3ceed99dfd684bfef09e38",
|
||||||
|
"sha256:24c89346734a4e4d60ecf9b27cac4c1fee3431a413f7aa00be7c4d7bbacc2c4d",
|
||||||
|
"sha256:25716aa70a0d153cd844fe861d4f3315a6ccafce22b39d8aadbf7fcadff2b633",
|
||||||
|
"sha256:2dacb3dae6b8cc579637a7b72f008bff50a94cde5e36e432352f4ca57b9e54c4",
|
||||||
|
"sha256:34316bf693b1d2d29c087ee7e4bb10cdfa39da5f9c50fa15b07489b4ab93a1b5",
|
||||||
|
"sha256:36b2d700a27e168fa96272b42d28c7ac3ff72030c67b32f37c05616ebd22a202",
|
||||||
|
"sha256:37978254d9d00cda01acc1997513f786b6b971e57b778fbe7c20e30ae81a97f3",
|
||||||
|
"sha256:38289f1690a7e27aacd049e420769b996826f3728756859420eeee21cc857118",
|
||||||
|
"sha256:385ccf6d011b97768a640e9d4de25412204fbe8d6b9ae39ff115d4ff03f6fe5d",
|
||||||
|
"sha256:3c7ea86b9ca83e30fa4d4cd0eaf01db3ebcc7b2726a25990966627e39577d729",
|
||||||
|
"sha256:49810f907dfe6de8da5da7d2b238d343e6add62f01a15d03e2195afc180059ed",
|
||||||
|
"sha256:519c0b3a6fbb68afaa0febf0d28f6c4b0a1074aefc484802ecb9709faf181607",
|
||||||
|
"sha256:51f02ca184518702975b56affde6c573ebad4e411599005ce4468b1014b4786c",
|
||||||
|
"sha256:552a39987ac6655dad4bf6f17dd2b55c7b0c6e949d933b8846d2e312ee80005a",
|
||||||
|
"sha256:596f5ae2eeddb79b595583c2e0285312b2783b0ec759930c272dbf02f851ff75",
|
||||||
|
"sha256:6014038f52b4b2ac1fa41a58d439a8a00f015b5c0735a0cd4b09afe344c94899",
|
||||||
|
"sha256:61ebbcd208d78658b09e19c78920f1ad38936a0aa0f9c459c46c197d11c580a0",
|
||||||
|
"sha256:6213713ac743b190ecbf3f316d6e41d099e774812d470422b3a0f137ea635832",
|
||||||
|
"sha256:637e27ea1ebe4a561db75a880ac659ff439dec7f55588212e71700bb1ddd5af9",
|
||||||
|
"sha256:6aa427c55a0abec450bca10b64446331b5ca8f79b648531138f357569705bc4a",
|
||||||
|
"sha256:6ca45359d7a21644793de0e29de497ef7f1ae7268e346c4faf87b421fea364e6",
|
||||||
|
"sha256:6db1b52c6f2c04fafc8da17ea506608e6be7086715dab498570c3e55e4f8fbd1",
|
||||||
|
"sha256:752e7ddfb743344d447367baa85bccd3629c2c3940f70506eb5f01abce98ee68",
|
||||||
|
"sha256:760c54ad1b8a9b81951030a7e8e7c3ec0964c1cb9fee585a03ff53d9e531bb8e",
|
||||||
|
"sha256:768632fd8172ae03852e3245f11c8a425d95f65ff444ce46b3e673ae5b057b74",
|
||||||
|
"sha256:7a0b9f6a1a15d494b35f25ed07abda03209fa76c33564c09c9e81d34f4b919d7",
|
||||||
|
"sha256:7e070d3aef50ac3856f2ef5ec7214798453da878bb5e5a16c16a61edf1817cc3",
|
||||||
|
"sha256:7e12949e5071c20ec49ef00c75121ed2b076972132fc1913ddf5f76cae8d10b4",
|
||||||
|
"sha256:7e26eac9e52e8ce86f915fd33380f1b6896a2b51994e40bb094841e5003429b4",
|
||||||
|
"sha256:85ffd6b1cb0dfb037ede50ff3bef80d9bf7fa60515d192403af6745524524f3b",
|
||||||
|
"sha256:8618d9213a863c468a865e9d2ec50221015f7abf52221bc927152ef26c484b4c",
|
||||||
|
"sha256:8acef4d8a4353f6678fd1035422a937c2170de58a2b29f7da045d5249e934101",
|
||||||
|
"sha256:8d2f355a951f60f0843f2368b39970e4667517e54e86b1508e76f92b44811a8a",
|
||||||
|
"sha256:90b6840b6448203228a9d8464a7a0d99aa8fa9f027ef95fe230579abaf8a6ee1",
|
||||||
|
"sha256:9187500d83fd0cef4669385cbb0961e227a41c0c9bc39219044e35810793edf7",
|
||||||
|
"sha256:93c20777a72cae8620203ac11c4010365706062aa13aaedd1a21bb07adbb9d5d",
|
||||||
|
"sha256:93cce7d422a0093cfb3606beae38a8e47a25232eea0f292c878af580a9dc7605",
|
||||||
|
"sha256:94c623c331a48a5ccc7d25271399aff29729fa202c737ae3b4b28b89d2b0976d",
|
||||||
|
"sha256:97f32dc03a8054a4c4a5ab5d761ed4861e828b2c200febd4e46857069a483916",
|
||||||
|
"sha256:9a2bf98ac92f58777c0fafc772bf0493e67fcf677302e0c0a630ee517a43b949",
|
||||||
|
"sha256:a602bdc8607c99eb5b391592d58c92618dcd1537fdd87df1813f03fed49957a6",
|
||||||
|
"sha256:a9d24b03daf7415f78abc2d25a208f234e2c585e5e6f92f0204d2ab7b9ab48e3",
|
||||||
|
"sha256:abfcb0ef78df0ee9df4ea81f03beea41849340ce33a4c4bd4dbb99e23ec781b6",
|
||||||
|
"sha256:b013f759cd69cb0a62de954d6d2096d648bc210034b79b1881406b07ed0a83f9",
|
||||||
|
"sha256:b02e3e72665cd02afafb933453b0c9f6c59ff6e3708bd28d0d8580450e7e88af",
|
||||||
|
"sha256:b52cc45e71657bc4743a5606d9023459de929b2a198d545868e11898ba1c3f59",
|
||||||
|
"sha256:ba37f11e1d020969e8a779c06b4af866ffb6b854d7229db63c5fdddfceaa917f",
|
||||||
|
"sha256:bb804c7d0bfbd7e3f33924ff49757de9106c44e27979e2492819c16972ec0da2",
|
||||||
|
"sha256:bf594cc7cc9d528338d66674c10a5b25e3cde7dd75c3e96784df8f371d77a298",
|
||||||
|
"sha256:c38baee6bdb7fe1b110b6b3aaa555e6e872d322206b7245aa39572d3fc991ee4",
|
||||||
|
"sha256:c73d2166e4b210b73d1429c4f1ca97cea9cc090e5302df2a7a0a96ce55373f1c",
|
||||||
|
"sha256:c9099bf89078675c372339011ccfc9ec310310bf6c292b413c013eb90ffdcafc",
|
||||||
|
"sha256:cf0db26a1f76aa6b3aa314a74b8facd586b7a5457d05b64f8082a62c9c49582a",
|
||||||
|
"sha256:d19a34f8a3429bd536996ad53597b805c10352a8561d8382e05830df389d2b43",
|
||||||
|
"sha256:da80047524eac2acf7c04c18ac7a7da05a9136241f642dd2ed94269ef0d0a45a",
|
||||||
|
"sha256:de2923886b5d3214be951bc2ce3f6b8ac0d6dfd4a0d0e2a4d2e5523d8046fdfb",
|
||||||
|
"sha256:defa0652696ff0ba48c8aff5a1fac1eef1ca6ac9c660b047fc8e7623c4eb5093",
|
||||||
|
"sha256:e54a1eb9fd38f2779e973d2f8958fd575b532fe26013405d1afb9ee2374e7ab8",
|
||||||
|
"sha256:e5c31d70a478b0ca22a9d2d76d520ae996214019d39ed7dd93af872c7f301e52",
|
||||||
|
"sha256:ebaeb93f90c0903233b11ce913a7cb8f6ee069158406e056f884854c737d2442",
|
||||||
|
"sha256:ecfe51abf7f045e0b9cdde71ca9e153d11238679ef7b5da6c82093874adf3338",
|
||||||
|
"sha256:f99112aed4fb7cee00c7f77e8b964a9b10f69488cdff626ffd797d02e2e4484f",
|
||||||
|
"sha256:fd914db437ec25bfa410f8aa0aa2f3ba87cdfc04d9919d608d02330947afaeab"
|
||||||
|
],
|
||||||
|
"version": "==2022.1.18"
|
||||||
},
|
},
|
||||||
"s3cmd": {
|
"s3cmd": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:15330776e7ff993d8ae0ac213bf896f210719e9b91445f5f7626a8fa7e74e30b",
|
"sha256:49cd23d516b17974b22b611a95ce4d93fe326feaa07320bd1d234fed68cbccfa",
|
||||||
"sha256:2204306742c33c24fbca02b78e059bacfc1bfc04af09c7e9866f267a11a9ddb2"
|
"sha256:966b0a494a916fc3b4324de38f089c86c70ee90e8e1cae6d59102103a4c0cc03"
|
||||||
],
|
],
|
||||||
"index": "pypi",
|
"index": "pypi",
|
||||||
"version": "==2.3.0"
|
"version": "==2.1.0"
|
||||||
|
},
|
||||||
|
"setuptools": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:2404879cda71495fc4d5cbc445ed52fdaddf352b36e40be8dcc63147cb4edabe",
|
||||||
|
"sha256:68eb94073fc486091447fcb0501efd6560a0e5a1839ba249e5ff3c4c93f05f90"
|
||||||
|
],
|
||||||
|
"markers": "python_version >= '3.7'",
|
||||||
|
"version": "==60.5.0"
|
||||||
},
|
},
|
||||||
"six": {
|
"six": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
@@ -460,35 +477,35 @@
|
|||||||
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
||||||
"version": "==1.16.0"
|
"version": "==1.16.0"
|
||||||
},
|
},
|
||||||
"stack-data": {
|
"testfixtures": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:32d2dd0376772d01b6cb9fc996f3c8b57a357089dec328ed4b6553d037eaf815",
|
"sha256:2600100ae96ffd082334b378e355550fef8b4a529a6fa4c34f47130905c7426d",
|
||||||
"sha256:cbb2a53eb64e5785878201a97ed7c7b94883f48b87bfb0bbe8b623c74679e4a8"
|
"sha256:6ddb7f56a123e1a9339f130a200359092bd0a6455e31838d6c477e8729bb7763"
|
||||||
],
|
],
|
||||||
"version": "==0.6.2"
|
"version": "==6.18.3"
|
||||||
},
|
},
|
||||||
"tomli": {
|
"toml": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc",
|
"sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b",
|
||||||
"sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"
|
"sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"
|
||||||
],
|
],
|
||||||
"markers": "python_version < '3.11'",
|
"markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
||||||
"version": "==2.0.1"
|
"version": "==0.10.2"
|
||||||
},
|
},
|
||||||
"traitlets": {
|
"traitlets": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:9e6ec080259b9a5940c797d58b613b5e31441c2257b87c2e795c5228ae80d2d8",
|
"sha256:059f456c5a7c1c82b98c2e8c799f39c9b8128f6d0d46941ee118daace9eb70c7",
|
||||||
"sha256:f6cde21a9c68cf756af02035f72d5a723bf607e862e7be33ece505abf4a3bad9"
|
"sha256:2d313cc50a42cd6c277e7d7dc8d4d7fedd06a2c215f78766ae7b1a66277e0033"
|
||||||
],
|
],
|
||||||
"markers": "python_version >= '3.7'",
|
"markers": "python_version >= '3.7'",
|
||||||
"version": "==5.9.0"
|
"version": "==5.1.1"
|
||||||
},
|
},
|
||||||
"wcwidth": {
|
"wcwidth": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e",
|
"sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784",
|
||||||
"sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0"
|
"sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"
|
||||||
],
|
],
|
||||||
"version": "==0.2.6"
|
"version": "==0.2.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
47
README.md
47
README.md
@@ -1,21 +1,28 @@
|
|||||||
# KMK: Clackety Keyboards Powered by Python
|
# KMK: Clackety Keyboards Powered by Python
|
||||||

|

|
||||||

|

|
||||||
|
[](https://discord.gg/QBHUUpeGUd)
|
||||||

|

|
||||||

|

|
||||||

|

|
||||||
|
|
||||||
|
Documentation available at [📖 kmkfw.io](http://kmkfw.io/).
|
||||||
|
|
||||||
KMK is a feature-rich and beginner-friendly firmware for computer keyboards
|
KMK is a feature-rich and beginner-friendly firmware for computer keyboards
|
||||||
written and configured in
|
written and configured in
|
||||||
[CircuitPython](https://github.com/adafruit/circuitpython).
|
[CircuitPython](https://github.com/adafruit/circuitpython).
|
||||||
|
|
||||||
For asynchronous support and chatter about KMK, [join our Zulip
|
**KMK is currently looking for maintainers.** If you like keyboards and/or
|
||||||
community](https://kmkfw.zulipchat.com)! In particular, swing by the Zulip chat
|
Python, and ideally have contributed to KMK in the past, and are interested in
|
||||||
*before* opening a GitHub Issue about configuration, documentation, etc.
|
(co-)maintaining KMK, comment on [the relevant GitHub
|
||||||
concerns.
|
issue](https://github.com/KMKfw/kmk_firmware/issues/196) or drop by the Matrix
|
||||||
|
channel below.
|
||||||
|
|
||||||
> The former Matrix and Discord rooms once linked to in this README are no
|
> If you need support with KMK or just want to say hi, find us in
|
||||||
> longer officially supported, please do not use them!
|
> [#kmkfw:klar.sh on Matrix](https://matrix.to/#/#kmkfw:klar.sh). This channel
|
||||||
|
> is bridged to Discord
|
||||||
|
> [here](https://discord.gg/QBHUUpeGUd) for
|
||||||
|
> convenience.
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
@@ -23,24 +30,38 @@ concerns.
|
|||||||
on a "flash-drive"-esque space on your microcontroller - edit on the go
|
on a "flash-drive"-esque space on your microcontroller - edit on the go
|
||||||
without DFU or other devtooling available!
|
without DFU or other devtooling available!
|
||||||
- Single-piece or [two-piece split
|
- Single-piece or [two-piece split
|
||||||
keyboards](/docs/en/split_keyboards.md)
|
keyboards](https://github.com/KMKfw/kmk_firmware/blob/master/docs/split_keyboards.md)
|
||||||
are supported
|
are supported
|
||||||
- [Chainable
|
- [Chainable
|
||||||
keys](/docs/en/keys.md) such as
|
keys](https://github.com/KMKfw/kmk_firmware/blob/master/docs/keys.md) such as
|
||||||
`KC.LWIN(KC.L)` to lock the screen on a Windows PC
|
`KC.LWIN(KC.L)` to lock the screen on a Windows PC
|
||||||
- [Built-in Unicode macros, including
|
- [Built-in Unicode macros, including
|
||||||
emojis](/docs/en/sequences.md)
|
emojis](https://github.com/KMKfw/kmk_firmware/blob/master/docs/sequences.md)
|
||||||
- [RGB underglow](/docs/en/rgb.md)
|
- [RGB underglow](https://github.com/KMKfw/kmk_firmware/blob/master/docs/rgb.md)
|
||||||
and [LED
|
and [LED
|
||||||
backlights](/docs/en/led.md)
|
backlights](https://github.com/KMKfw/kmk_firmware/blob/master/docs/led.md)
|
||||||
- One key can turn into many more based on [how many times you tap
|
- One key can turn into many more based on [how many times you tap
|
||||||
it](/docs/en/tapdance.md)
|
it](https://github.com/KMKfw/kmk_firmware/blob/master/docs/tapdance.md)
|
||||||
- Bluetooth HID and split keyboards. No more wires.
|
- Bluetooth HID and split keyboards. No more wires.
|
||||||
|
|
||||||
## Getting Started
|
## Getting Started
|
||||||
KMK requires [CircuitPython](https://circuitpython.org/) version 7.0 or higher.
|
KMK requires [CircuitPython](https://circuitpython.org/) version 7.0 or higher.
|
||||||
Our getting started guide can be found
|
Our getting started guide can be found
|
||||||
[here](/docs/en/Getting_Started.md).
|
[here](https://github.com/KMKfw/kmk_firmware/blob/master/docs/Getting_Started.md).
|
||||||
|
|
||||||
|
## The KMK Team
|
||||||
|
|
||||||
|
KMK was originally authored by @klardotsh and @kdb424 over the winter of
|
||||||
|
2018-19, and has been contributed to by numerous others since. Contributions
|
||||||
|
are welcome from all, whether it's in the form of code, documentation, hardware
|
||||||
|
designs, feature ideas, or anything else that comes to mind. A list of KMK's
|
||||||
|
contributors can be found [on
|
||||||
|
GitHub](https://github.com/KMKfw/kmk_firmware/graphs/contributors).
|
||||||
|
|
||||||
|
> While Adafruit employees and affiliates are occasionally found in the commit
|
||||||
|
> log and their help has been crucial to KMK's success, KMK is not an official
|
||||||
|
> Adafruit project, and the Core team is not compensated by Adafruit for its
|
||||||
|
> development.
|
||||||
|
|
||||||
## Code Style
|
## Code Style
|
||||||
|
|
||||||
|
@@ -1,10 +0,0 @@
|
|||||||
# Pico 14 Numerical Keypad
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
Pico 14 Numerical Keypad / Macro Pad PCB’s and Hardware Kit.
|
|
||||||
|
|
||||||
`kb.py` is designed to work with the Pi Pico.
|
|
||||||
|
|
||||||
Retailers:
|
|
||||||
[Bolt Industries](https://www.boltind.com/product/pico-14-numerical-keypad-macro-pad-pcbs-and-hardware-kit/)
|
|
@@ -1,23 +0,0 @@
|
|||||||
import board
|
|
||||||
|
|
||||||
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
|
|
||||||
from kmk.scanners import DiodeOrientation
|
|
||||||
|
|
||||||
|
|
||||||
class KMKKeyboard(_KMKKeyboard):
|
|
||||||
col_pins = (
|
|
||||||
board.GP0,
|
|
||||||
board.GP1,
|
|
||||||
board.GP2,
|
|
||||||
)
|
|
||||||
|
|
||||||
row_pins = (
|
|
||||||
board.GP18,
|
|
||||||
board.GP19,
|
|
||||||
board.GP20,
|
|
||||||
board.GP21,
|
|
||||||
board.GP22,
|
|
||||||
)
|
|
||||||
|
|
||||||
diode_orientation = DiodeOrientation.COLUMNS
|
|
||||||
led_pin = board.GP27
|
|
@@ -1,56 +0,0 @@
|
|||||||
from kb import KMKKeyboard
|
|
||||||
|
|
||||||
from kmk.extensions.LED import LED
|
|
||||||
from kmk.extensions.lock_status import LockStatus
|
|
||||||
from kmk.keys import KC
|
|
||||||
from kmk.modules.layers import Layers
|
|
||||||
|
|
||||||
Pico14 = KMKKeyboard()
|
|
||||||
|
|
||||||
|
|
||||||
class LEDLockStatus(LockStatus):
|
|
||||||
def __init__(self, leds):
|
|
||||||
super().__init__()
|
|
||||||
self._leds = leds
|
|
||||||
|
|
||||||
def set_lock_leds(self):
|
|
||||||
if self.get_num_lock():
|
|
||||||
self._leds.set_brightness(100, leds=[0])
|
|
||||||
else:
|
|
||||||
self._leds.set_brightness(0, leds=[0])
|
|
||||||
|
|
||||||
def after_hid_send(self, sandbox):
|
|
||||||
super().after_hid_send(sandbox) # Critically important. Removing this will break lock status.
|
|
||||||
|
|
||||||
if self.report_updated:
|
|
||||||
self.set_lock_leds()
|
|
||||||
|
|
||||||
|
|
||||||
Pico14.modules.append(Layers())
|
|
||||||
leds = LED(led_pin=[Pico14.led_pin], val=0)
|
|
||||||
Pico14.extensions.append(leds)
|
|
||||||
Pico14.extensions.append(LEDLockStatus(leds))
|
|
||||||
|
|
||||||
# Make this for better looking formatting...
|
|
||||||
______ = KC.TRNS
|
|
||||||
XXXXXX = KC.NO
|
|
||||||
|
|
||||||
Pico14.keymap = [[
|
|
||||||
# Layer 0 QWERTY
|
|
||||||
KC.NUMLOCK, KC.NUMPAD_SLASH, KC.NUMPAD_ASTERISK,
|
|
||||||
KC.NUMPAD_7, KC.NUMPAD_8, KC.NUMPAD_9,
|
|
||||||
KC.NUMPAD_4, KC.NUMPAD_5, KC.NUMPAD_6,
|
|
||||||
KC.NUMPAD_1, KC.NUMPAD_2, KC.NUMPAD_1,
|
|
||||||
KC.NUMPAD_0, XXXXXX, KC.NUMPAD_DOT
|
|
||||||
], [
|
|
||||||
# Layer 1
|
|
||||||
______, ______, ______,
|
|
||||||
KC.HOME, KC.UP, KC.PGUP,
|
|
||||||
KC.LEFT, ______, KC.RIGHT,
|
|
||||||
KC.END, KC.DOWN, KC.PGDN,
|
|
||||||
KC.INS, XXXXXX, KC.DEL
|
|
||||||
]
|
|
||||||
]
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
Pico14.go()
|
|
@@ -1,12 +0,0 @@
|
|||||||
# ANAVI Arrows
|
|
||||||
|
|
||||||
ANAVI Arrows is an open source, programmable mechanical keyboard with 4 hot-swappable mechanical switches, RGB WS2812B underlighting and yellow backlit a rotary encoder, [Seeed XIAO RP2040](https://www.seeedstudio.com/XIAO-RP2040-v1-0-p-5026.html) and a mini OLED I2C yellow-blue display.
|
|
||||||
|
|
||||||
ANAVI Arrows has been designed with the cross platform and open source electronics design automation suite KiCad. All KiCad [files and schematics are available at GitHub](https://github.com/anavitechnology/anavi-arrows) under [Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)](https://creativecommons.org/licenses/by-sa/4.0/).
|
|
||||||
|
|
||||||
Extensions enabled by default:
|
|
||||||
- [Encoder](/docs/en/encoder.md) Twist control for all the things
|
|
||||||
- [LED](/docs/en/led.md) Light your keys up (for backlit)
|
|
||||||
- [RGB](/docs/en/rgb.md) Light it up (for underlighting)
|
|
||||||
- [MediaKeys](/docs/en/media_keys.md) Control volume and other media functions
|
|
||||||
- [PEG_OLED](/docs/peg_oled_display.md) Show information on the mini OLED display
|
|
@@ -1,20 +0,0 @@
|
|||||||
'''
|
|
||||||
KMK keyboard for ANAVI Arrows
|
|
||||||
|
|
||||||
This is a macro pad with 4 mechanical switches based on the RP2040. Each key is
|
|
||||||
attached to a single GPIO, so the KMK matrix scanner needs to be overridden.
|
|
||||||
'''
|
|
||||||
|
|
||||||
import board
|
|
||||||
|
|
||||||
from kmk.kmk_keyboard import KMKKeyboard
|
|
||||||
from kmk.scanners.keypad import KeysScanner
|
|
||||||
|
|
||||||
|
|
||||||
class AnaviArrows(KMKKeyboard):
|
|
||||||
'''
|
|
||||||
Default keyboard config for ANAVI Arrows.
|
|
||||||
'''
|
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
self.matrix = KeysScanner([board.D1, board.D2, board.D3, board.D6])
|
|
@@ -1,90 +0,0 @@
|
|||||||
import board
|
|
||||||
|
|
||||||
from arrows import AnaviArrows
|
|
||||||
|
|
||||||
from kmk.extensions.LED import LED
|
|
||||||
from kmk.extensions.media_keys import MediaKeys
|
|
||||||
from kmk.extensions.peg_oled_Display import (
|
|
||||||
Oled,
|
|
||||||
OledData,
|
|
||||||
OledDisplayMode,
|
|
||||||
OledReactionType,
|
|
||||||
)
|
|
||||||
from kmk.extensions.RGB import RGB, AnimationModes
|
|
||||||
from kmk.keys import KC
|
|
||||||
from kmk.modules.encoder import EncoderHandler
|
|
||||||
|
|
||||||
keyboard = AnaviArrows()
|
|
||||||
|
|
||||||
# I2C pins for the mini OLED display
|
|
||||||
keyboard.SCL = board.D5
|
|
||||||
keyboard.SDA = board.D4
|
|
||||||
|
|
||||||
# fmt: off
|
|
||||||
keyboard.keymap = [
|
|
||||||
[
|
|
||||||
KC.RIGHT, KC.DOWN, KC.LEFT, KC.UP,
|
|
||||||
]
|
|
||||||
]
|
|
||||||
# fmt: on
|
|
||||||
|
|
||||||
oled_ext = Oled(
|
|
||||||
OledData(
|
|
||||||
corner_one={0: OledReactionType.STATIC, 1: ['ANAVI Arrows']},
|
|
||||||
corner_two={0: OledReactionType.STATIC, 1: [' ']},
|
|
||||||
corner_three={0: OledReactionType.STATIC, 1: ['Open Source']},
|
|
||||||
corner_four={0: OledReactionType.STATIC, 1: [' ']},
|
|
||||||
),
|
|
||||||
oWidth=128,
|
|
||||||
oHeight=64,
|
|
||||||
toDisplay=OledDisplayMode.TXT,
|
|
||||||
flip=False,
|
|
||||||
)
|
|
||||||
keyboard.extensions.append(oled_ext)
|
|
||||||
|
|
||||||
led_ext = LED(
|
|
||||||
led_pin=[
|
|
||||||
board.D0,
|
|
||||||
],
|
|
||||||
brightness=100,
|
|
||||||
brightness_step=5,
|
|
||||||
brightness_limit=100,
|
|
||||||
breathe_center=1.5,
|
|
||||||
animation_mode=AnimationModes.STATIC,
|
|
||||||
animation_speed=1,
|
|
||||||
user_animation=None,
|
|
||||||
val=100,
|
|
||||||
)
|
|
||||||
keyboard.extensions.append(led_ext)
|
|
||||||
|
|
||||||
# WS2812B LED strips on the back
|
|
||||||
underglow = RGB(
|
|
||||||
pixel_pin=board.D10,
|
|
||||||
num_pixels=4,
|
|
||||||
val_limit=100,
|
|
||||||
val_default=25,
|
|
||||||
animation_mode=AnimationModes.RAINBOW,
|
|
||||||
)
|
|
||||||
keyboard.extensions.append(underglow)
|
|
||||||
|
|
||||||
# Neopixel on XIAO RP2040
|
|
||||||
frontglow = RGB(
|
|
||||||
pixel_pin=board.NEOPIXEL,
|
|
||||||
num_pixels=1,
|
|
||||||
val_limit=100,
|
|
||||||
val_default=25,
|
|
||||||
animation_mode=AnimationModes.RAINBOW,
|
|
||||||
)
|
|
||||||
keyboard.extensions.append(frontglow)
|
|
||||||
|
|
||||||
media_keys = MediaKeys()
|
|
||||||
keyboard.extensions.append(media_keys)
|
|
||||||
|
|
||||||
# Rotary encoder that also acts as a key
|
|
||||||
encoder_handler = EncoderHandler()
|
|
||||||
encoder_handler.pins = ((board.D8, board.D7, board.D9),)
|
|
||||||
encoder_handler.map = (((KC.VOLD, KC.VOLU, KC.MUTE),),)
|
|
||||||
keyboard.modules.append(encoder_handler)
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
keyboard.go()
|
|
@@ -5,6 +5,6 @@ ANAVI Knob 1 is an open source, programmable mechanical keyboard with a single r
|
|||||||
ANAVI Knob 1 is open source hardware designed with KiCad. All KiCad [files and schematics are available at GitHub](https://github.com/AnaviTechnology/anavi-knob-1) under [Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)](https://creativecommons.org/licenses/by-sa/4.0/).
|
ANAVI Knob 1 is open source hardware designed with KiCad. All KiCad [files and schematics are available at GitHub](https://github.com/AnaviTechnology/anavi-knob-1) under [Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)](https://creativecommons.org/licenses/by-sa/4.0/).
|
||||||
|
|
||||||
Extensions enabled by default:
|
Extensions enabled by default:
|
||||||
- [Encoder](/docs/en/encoder.md) Twist control for all the things
|
- [Encoder](/docs/encoder.md) Twist control for all the things
|
||||||
- [RGB](/docs/en/rgb.md) Light it up (for underlighting)
|
- [RGB](/docs/rgb.md) Light it up (for underlighting)
|
||||||
- [MediaKeys](/docs/en/media_keys.md) Control volume and other media functions
|
- [MediaKeys](/docs/media_keys.md) Control volume and other media functions
|
||||||
|
@@ -5,6 +5,6 @@ ANAVI Knobs 3 is an open source, programmable mechanical keyboard with 3 rotary
|
|||||||
ANAVI Knobs 3 is open source hardware designed with KiCad. All KiCad [files and schematics are available at GitHub](https://github.com/AnaviTechnology/anavi-knobs-3) under [Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)](https://creativecommons.org/licenses/by-sa/4.0/).
|
ANAVI Knobs 3 is open source hardware designed with KiCad. All KiCad [files and schematics are available at GitHub](https://github.com/AnaviTechnology/anavi-knobs-3) under [Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)](https://creativecommons.org/licenses/by-sa/4.0/).
|
||||||
|
|
||||||
Extensions enabled by default:
|
Extensions enabled by default:
|
||||||
- [Encoder](/docs/en/encoder.md) Twist control for all the things
|
- [Encoder](/docs/encoder.md) Twist control for all the things
|
||||||
- [RGB](/docs/en/rgb.md) Light it up (for underlighting)
|
- [RGB](/docs/rgb.md) Light it up (for underlighting)
|
||||||
- [MediaKeys](/docs/en/media_keys.md) Control volume and other media functions
|
- [MediaKeys](/docs/media_keys.md) Control volume and other media functions
|
||||||
|
@@ -5,7 +5,7 @@ ANAVI Macro Pad 10 is an open source, programmable mechanical keyboard with 9 ho
|
|||||||
ANAVI Macro Pad 10 has been designed with the cross platform and open source electronics design automation suite KiCad. All KiCad [files and schematics are available at GitHub](https://github.com/anavitechnology/anavi-macro-pad-10) under [Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)](https://creativecommons.org/licenses/by-sa/4.0/).
|
ANAVI Macro Pad 10 has been designed with the cross platform and open source electronics design automation suite KiCad. All KiCad [files and schematics are available at GitHub](https://github.com/anavitechnology/anavi-macro-pad-10) under [Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)](https://creativecommons.org/licenses/by-sa/4.0/).
|
||||||
|
|
||||||
Extensions enabled by default:
|
Extensions enabled by default:
|
||||||
- [Encoder](/docs/en/encoder.md) Twist control for all the things
|
- [Encoder](/docs/encoder.md) Twist control for all the things
|
||||||
- [LED](/docs/en/led.md) Light your keys up (for backlit)
|
- [LED](/docs/led.md) Light your keys up (for backlit)
|
||||||
- [RGB](/docs/en/rgb.md) Light it up (for underlighting)
|
- [RGB](/docs/rgb.md) Light it up (for underlighting)
|
||||||
- [MediaKeys](/docs/en/media_keys.md) Control volume and other media functions
|
- [MediaKeys](/docs/media_keys.md) Control volume and other media functions
|
||||||
|
@@ -1,12 +0,0 @@
|
|||||||
# ANAVI Macro Pad 12
|
|
||||||
|
|
||||||
ANAVI Macro Pad 12 is an open source, programmable mechanical keyboard with 9 hot-swappable mechanical switches, RGB WS2812B underlighting and yellow backlit a rotary encoder and [Seeed XIAO RP2040](https://www.seeedstudio.com/XIAO-RP2040-v1-0-p-5026.html).
|
|
||||||
|
|
||||||
ANAVI Macro Pad 12 has been designed with the cross platform and open source electronics design automation suite KiCad. All KiCad [files and schematics are available at GitHub](https://github.com/anavitechnology/anavi-macro-pad-12) under [Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)](https://creativecommons.org/licenses/by-sa/4.0/).
|
|
||||||
|
|
||||||
Extensions enabled by default:
|
|
||||||
- [Encoder](/docs/en/encoder.md) Twist control for all the things
|
|
||||||
- [LED](/docs/en/led.md) Light your keys up (for backlit)
|
|
||||||
- [RGB](/docs/en/rgb.md) Light it up (for underlighting)
|
|
||||||
- [MediaKeys](/docs/en/media_keys.md) Control volume and other media functions
|
|
||||||
- [PEG_OLED](/docs/peg_oled_display.md) Show information on the mini OLED display
|
|
@@ -1,97 +0,0 @@
|
|||||||
import board
|
|
||||||
|
|
||||||
from kmk.extensions.LED import LED
|
|
||||||
from kmk.extensions.media_keys import MediaKeys
|
|
||||||
from kmk.extensions.peg_oled_Display import (
|
|
||||||
Oled,
|
|
||||||
OledData,
|
|
||||||
OledDisplayMode,
|
|
||||||
OledReactionType,
|
|
||||||
)
|
|
||||||
from kmk.extensions.RGB import RGB, AnimationModes
|
|
||||||
from kmk.keys import KC
|
|
||||||
from kmk.kmk_keyboard import KMKKeyboard
|
|
||||||
from kmk.scanners import DiodeOrientation
|
|
||||||
|
|
||||||
keyboard = KMKKeyboard()
|
|
||||||
|
|
||||||
# I2C pins for the mini OLED display
|
|
||||||
keyboard.SCL = board.D5
|
|
||||||
keyboard.SDA = board.D4
|
|
||||||
|
|
||||||
oled_ext = Oled(
|
|
||||||
OledData(
|
|
||||||
corner_one={0: OledReactionType.STATIC, 1: ['ANAVI Macro Pad 12']},
|
|
||||||
corner_two={0: OledReactionType.STATIC, 1: [' ']},
|
|
||||||
corner_three={0: OledReactionType.STATIC, 1: ['Open Source']},
|
|
||||||
corner_four={0: OledReactionType.STATIC, 1: [' ']},
|
|
||||||
),
|
|
||||||
oWidth=128,
|
|
||||||
oHeight=64,
|
|
||||||
toDisplay=OledDisplayMode.TXT,
|
|
||||||
flip=False,
|
|
||||||
)
|
|
||||||
keyboard.extensions.append(oled_ext)
|
|
||||||
|
|
||||||
led_ext = LED(
|
|
||||||
led_pin=[
|
|
||||||
board.D0,
|
|
||||||
],
|
|
||||||
brightness=100,
|
|
||||||
brightness_step=5,
|
|
||||||
brightness_limit=100,
|
|
||||||
breathe_center=1.5,
|
|
||||||
animation_mode=AnimationModes.STATIC,
|
|
||||||
animation_speed=1,
|
|
||||||
user_animation=None,
|
|
||||||
val=100,
|
|
||||||
)
|
|
||||||
keyboard.extensions.append(led_ext)
|
|
||||||
|
|
||||||
# WS2812B LED strips on the back
|
|
||||||
underglow = RGB(
|
|
||||||
pixel_pin=board.D10,
|
|
||||||
num_pixels=6,
|
|
||||||
val_limit=100,
|
|
||||||
val_default=25,
|
|
||||||
animation_mode=AnimationModes.RAINBOW,
|
|
||||||
)
|
|
||||||
keyboard.extensions.append(underglow)
|
|
||||||
|
|
||||||
# Neopixel on XIAO RP2040
|
|
||||||
frontglow = RGB(
|
|
||||||
pixel_pin=board.NEOPIXEL,
|
|
||||||
num_pixels=1,
|
|
||||||
val_limit=100,
|
|
||||||
val_default=25,
|
|
||||||
animation_mode=AnimationModes.RAINBOW,
|
|
||||||
)
|
|
||||||
keyboard.extensions.append(frontglow)
|
|
||||||
|
|
||||||
keyboard.col_pins = (board.D6, board.D8, board.D9)
|
|
||||||
keyboard.row_pins = (board.D1, board.D2, board.D3, board.D7)
|
|
||||||
keyboard.diode_orientation = DiodeOrientation.COL2ROW
|
|
||||||
|
|
||||||
media_keys = MediaKeys()
|
|
||||||
keyboard.extensions.append(media_keys)
|
|
||||||
|
|
||||||
# Matrix 4x3 keymap, 12 keys in total
|
|
||||||
keyboard.keymap = [
|
|
||||||
[
|
|
||||||
KC.N1,
|
|
||||||
KC.N2,
|
|
||||||
KC.N3,
|
|
||||||
KC.N4,
|
|
||||||
KC.N5,
|
|
||||||
KC.N6,
|
|
||||||
KC.N7,
|
|
||||||
KC.N8,
|
|
||||||
KC.N9,
|
|
||||||
KC.N0,
|
|
||||||
KC.A,
|
|
||||||
KC.B,
|
|
||||||
]
|
|
||||||
]
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
keyboard.go()
|
|
@@ -10,7 +10,7 @@ Retailers (USA)
|
|||||||
[Atreus62](https://shop.profetkeyboards.com/product/atreus62-keyboard)
|
[Atreus62](https://shop.profetkeyboards.com/product/atreus62-keyboard)
|
||||||
|
|
||||||
Extensions enabled by default
|
Extensions enabled by default
|
||||||
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
|
- [Layers](/docs/layers.md) Need more keys than switches? Use layers.
|
||||||
- [RGB](/docs/en/rgb.md) Light it up
|
- [RGB](/docs/rgb.md) Light it up
|
||||||
- [Encoder](/docs/en/encoder.md) Twist control for all the things
|
- [Encoder](/docs/encoder.md) Twist control for all the things
|
||||||
|
|
||||||
|
@@ -10,12 +10,4 @@ Retailers (USA)
|
|||||||
[Boardsource](https://boardsource.xyz/store/5ecc2008eee64242946c98c1)
|
[Boardsource](https://boardsource.xyz/store/5ecc2008eee64242946c98c1)
|
||||||
|
|
||||||
Extensions enabled by default
|
Extensions enabled by default
|
||||||
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
|
- [Layers](/docs/layers.md) Need more keys than switches? Use layers.
|
||||||
|
|
||||||
## Microcontroller support
|
|
||||||
|
|
||||||
Update this line in `kb.py` to any supported microcontroller in `kmk/quickpin/pro_micro`:
|
|
||||||
|
|
||||||
```python
|
|
||||||
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
|
|
||||||
```
|
|
||||||
|
@@ -3,9 +3,9 @@
|
|||||||

|

|
||||||

|

|
||||||
|
|
||||||
The 4x12 ortholinear keyboard is an extremely common and beloved layout within
|
The 4x12 ortholinear keyboard is an extremely common and beloved layout within the keyboard community. Made popular by Jack's Planck from OLKB, the 4x12 ortholinear layout is possibly the most popular non-stagger layout available.
|
||||||
the keyboard community. Made popular by Jack's Planck from OLKB, the 4x12
|
|
||||||
ortholinear layout is possibly the most popular non-staggered layout available.
|
kb.py is designed to work with the nice!nano
|
||||||
|
|
||||||
Retailers (USA)
|
Retailers (USA)
|
||||||
4x12
|
4x12
|
||||||
@@ -14,15 +14,8 @@ Low profile 4x12
|
|||||||
[Boardsource](https://boardsource.xyz/store/5ecb7dad86879c9a0c22db32)
|
[Boardsource](https://boardsource.xyz/store/5ecb7dad86879c9a0c22db32)
|
||||||
|
|
||||||
Extensions enabled by default
|
Extensions enabled by default
|
||||||
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
|
- [Layers](/docs/layers.md) Need more keys than switches? Use layers.
|
||||||
- [MediaKeys](/docs/en/media_keys.md) Control volume and other media functions
|
- [MediaKeys](/docs/media_keys.md) Control volume and other media functions
|
||||||
|
|
||||||
Common Extensions
|
Common Extensions
|
||||||
- [Power](/docs/en/power.md) Powersaving features for battery life
|
- [Power](/docs/power.md) Powersaving features for battery life
|
||||||
|
|
||||||
## Microcontroller support
|
|
||||||
|
|
||||||
Update this line in `kb.py` to any supported microcontroller in `kmk/quickpin/pro_micro`:
|
|
||||||
|
|
||||||
```python
|
|
||||||
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
|
|
||||||
|
@@ -1,25 +1,25 @@
|
|||||||
import board
|
import board
|
||||||
|
|
||||||
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
|
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
|
||||||
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
|
|
||||||
from kmk.scanners import DiodeOrientation
|
from kmk.scanners import DiodeOrientation
|
||||||
|
|
||||||
|
|
||||||
class KMKKeyboard(_KMKKeyboard):
|
class KMKKeyboard(_KMKKeyboard):
|
||||||
row_pins = (board.pins[1], pins[0], board.pins[4], board.pins[5])
|
row_pins = (board.P0_08, board.P0_06, board.P0_17, board.P0_20)
|
||||||
col_pins = (
|
col_pins = (
|
||||||
board.pins[19],
|
board.P0_31,
|
||||||
board.pins[18],
|
board.P0_29,
|
||||||
board.pins[17],
|
board.P0_02,
|
||||||
board.pins[16],
|
board.P1_15,
|
||||||
board.pins[15],
|
board.P1_13,
|
||||||
board.pins[14],
|
board.P1_11,
|
||||||
board.pins[13],
|
board.P0_10,
|
||||||
board.pins[12],
|
board.P0_09,
|
||||||
board.pins[11],
|
board.P1_06,
|
||||||
board.pins[10],
|
board.P1_04,
|
||||||
board.pins[9],
|
board.P0_11,
|
||||||
board.pins[8],
|
board.P1_00,
|
||||||
)
|
)
|
||||||
diode_orientation = DiodeOrientation.COLUMNS
|
diode_orientation = DiodeOrientation.COLUMNS
|
||||||
i2c = board.I2C
|
i2c = board.I2C
|
||||||
|
powersave_pin = board.P0_13
|
||||||
|
@@ -3,12 +3,9 @@
|
|||||||

|

|
||||||

|

|
||||||
|
|
||||||
5x12 ortholinear -- for when just really don't want to give up your number row.
|
5x12 ortholinear -- for when just really don't want to give up your number row. The 5x12 ortholinear keyboard is a common ortholinear layout that many people prefer because it includes a number row. Made popular by Jack's Preonic from OLKB, the 5x12 ortholinear layout is a great option for those who want to try ortholinear but feel they aren't ready to make the jump to a 40%. The 5x12 Ortho is an approachable keyboard with hotswap compatibility.
|
||||||
The 5x12 ortholinear keyboard is a common ortholinear layout that many people
|
|
||||||
prefer because it includes a number row. Made popular by Jack's Preonic from
|
kb.py is designed to work with the nice!nano
|
||||||
OLKB, the 5x12 ortholinear layout is a great option for those who want to try
|
|
||||||
ortholinear but feel they aren't ready to make the jump to a 40%. The 5x12 Ortho
|
|
||||||
is an approachable keyboard with hotswap compatibility.
|
|
||||||
|
|
||||||
Retailers (USA)
|
Retailers (USA)
|
||||||
5x12
|
5x12
|
||||||
@@ -17,15 +14,8 @@ Low Profile 5x12
|
|||||||
[Boardsource](https://boardsource.xyz/store/5ecb822386879c9a0c22db84)
|
[Boardsource](https://boardsource.xyz/store/5ecb822386879c9a0c22db84)
|
||||||
|
|
||||||
Extensions enabled by default
|
Extensions enabled by default
|
||||||
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
|
- [Layers](/docs/layers.md) Need more keys than switches? Use layers.
|
||||||
- [MediaKeys](/docs/en/media_keys.md) Control volume and other media functions
|
- [MediaKeys](/docs/media_keys.md) Control volume and other media functions
|
||||||
|
|
||||||
Common Extensions
|
Common Extensions
|
||||||
- [Power](/docs/en/power.md) Powersaving features for battery life
|
- [Power](/docs/power.md) Powersaving features for battery life
|
||||||
|
|
||||||
## Microcontroller support
|
|
||||||
|
|
||||||
Update this line in `kb.py` to any supported microcontroller in `kmk/quickpin/pro_micro`:
|
|
||||||
|
|
||||||
```python
|
|
||||||
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
|
|
||||||
|
@@ -1,25 +1,25 @@
|
|||||||
import board
|
import board
|
||||||
|
|
||||||
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
|
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
|
||||||
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
|
|
||||||
from kmk.scanners import DiodeOrientation
|
from kmk.scanners import DiodeOrientation
|
||||||
|
|
||||||
|
|
||||||
class KMKKeyboard(_KMKKeyboard):
|
class KMKKeyboard(_KMKKeyboard):
|
||||||
row_pins = (board.pins[1], pins[0], board.pins[4], board.pins[5], board.pins[6])
|
row_pins = (board.P0_08, board.P0_06, board.P0_17, board.P0_20, board.P0_22)
|
||||||
col_pins = (
|
col_pins = (
|
||||||
board.pins[19],
|
board.P0_31,
|
||||||
board.pins[18],
|
board.P0_29,
|
||||||
board.pins[17],
|
board.P0_02,
|
||||||
board.pins[16],
|
board.P1_15,
|
||||||
board.pins[15],
|
board.P1_13,
|
||||||
board.pins[14],
|
board.P1_11,
|
||||||
board.pins[13],
|
board.P0_10,
|
||||||
board.pins[12],
|
board.P0_09,
|
||||||
board.pins[11],
|
board.P1_06,
|
||||||
board.pins[10],
|
board.P1_04,
|
||||||
board.pins[9],
|
board.P0_11,
|
||||||
board.pins[8],
|
board.P1_00,
|
||||||
)
|
)
|
||||||
diode_orientation = DiodeOrientation.COLUMNS
|
diode_orientation = DiodeOrientation.COLUMNS
|
||||||
i2c = board.I2C
|
i2c = board.I2C
|
||||||
|
powersave_pin = board.P0_13
|
||||||
|
@@ -11,11 +11,11 @@ Retailers (USA)
|
|||||||
[Boardsource](https://boardsource.xyz/store/5ec9df84c6b834480de6c3d0)
|
[Boardsource](https://boardsource.xyz/store/5ec9df84c6b834480de6c3d0)
|
||||||
|
|
||||||
Extensions enabled by default
|
Extensions enabled by default
|
||||||
- [Split](/docs/en/split.md) Connects halves using a wire.
|
- [Split](/docs/split.md) Connects halves using a wire.
|
||||||
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
|
- [Layers](/docs/layers.md) Need more keys than switches? Use layers.
|
||||||
- [PEG_RGB](/docs/en/peg_rgb_matrix.md) Light it up!
|
- [PEG_RGB](/docs/peg_rgb_matrix.md) Light it up!
|
||||||
- [PEG_OLED](/docs/en/peg_oled_display.md) Screens to see things on of course.
|
- [PEG_OLED](/docs/peg_oled_display.md) Screens to see things on of course.
|
||||||
|
|
||||||
Common Extensions
|
Common Extensions
|
||||||
- [Power](/docs/en/power.md) Powersaving features for battery life.
|
- [Power](/docs/power.md) Powersaving features for battery life.
|
||||||
- [BLE_Split](/docs/en/split.md) Connects halves without wires (For the DIY version)
|
- [BLE_Split](/docs/split.md) Connects halves without wires (For the DIY version)
|
||||||
|
@@ -2,26 +2,18 @@
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
The Microdox is is a feature-packed 30% split columnar staggered keyboard. Even
|
The Microdox is is a feature-packed 30% split columnar staggered keyboard. Even though the Microdox is an extremely small keyboard it offers tons of features from larger boards while maintaining a tiny footprint.
|
||||||
though the Microdox is an extremely small keyboard it offers tons of features
|
|
||||||
from larger boards while maintaining a tiny footprint.
|
kb.py is designed to work with the nice!nano
|
||||||
|
|
||||||
Retailers (USA)
|
Retailers (USA)
|
||||||
[Boardsource](https://boardsource.xyz/store/5f2e7e4a2902de7151494f92)
|
[Boardsource](https://boardsource.xyz/store/5f2e7e4a2902de7151494f92)
|
||||||
|
|
||||||
Extensions enabled by default
|
Extensions enabled by default
|
||||||
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
|
- [Layers](/docs/layers.md) Need more keys than switches? Use layers.
|
||||||
- [BLE_Split](/docs/en/split_keyboards.md) Connects halves without wires
|
- [BLE_Split](/docs/split_keyboards.md) Connects halves without wires
|
||||||
- [ModTap](/docs/en/modtap.md) Allows mod keys to act as different keys when tapped.
|
- [ModTap](/docs/modtap.md) Allows mod keys to act as different keys when tapped.
|
||||||
|
|
||||||
Common Extensions
|
Common Extensions
|
||||||
- [Split](/docs/en/split_keyboards.md) Connects halves using a wire
|
- [Split](/docs/split_keyboards.md) Connects halves using a wire
|
||||||
- [Power](/docs/enpower.md) Powersaving features for battery life
|
- [Power](/docs/power.md) Powersaving features for battery life
|
||||||
|
|
||||||
## Microcontroller support
|
|
||||||
|
|
||||||
Update this line in `kb.py` to any supported microcontroller in `kmk/quickpin/pro_micro`:
|
|
||||||
|
|
||||||
```python
|
|
||||||
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
|
|
||||||
```
|
|
||||||
|
@@ -1,28 +1,21 @@
|
|||||||
import board
|
import board
|
||||||
|
|
||||||
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
|
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
|
||||||
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
|
|
||||||
from kmk.scanners import DiodeOrientation
|
from kmk.scanners import DiodeOrientation
|
||||||
|
|
||||||
|
|
||||||
class KMKKeyboard(_KMKKeyboard):
|
class KMKKeyboard(_KMKKeyboard):
|
||||||
col_pins = (
|
col_pins = (board.P0_31, board.P0_29, board.P0_02, board.P1_15, board.P1_13)
|
||||||
board.pins[19],
|
row_pins = (board.P0_10, board.P0_09, board.P1_04, board.P1_06)
|
||||||
board.pins[18],
|
|
||||||
board.pins[17],
|
|
||||||
board.pins[16],
|
|
||||||
board.pins[15],
|
|
||||||
)
|
|
||||||
row_pins = (board.pins[13], board.pins[12], board.pins[10], board.pins[11])
|
|
||||||
diode_orientation = DiodeOrientation.COLUMNS
|
diode_orientation = DiodeOrientation.COLUMNS
|
||||||
data_pin = board.pins[1]
|
data_pin = board.P0_08
|
||||||
rgb_pixel_pin = pins[0]
|
rgb_pixel_pin = board.P0_06
|
||||||
rgb_num_pixels = 12
|
rgb_num_pixels = 12
|
||||||
i2c = board.I2C
|
i2c = board.I2C
|
||||||
|
powersave_pin = board.P0_13
|
||||||
|
|
||||||
# NOQA
|
# NOQA
|
||||||
# flake8: noqa
|
# flake8: noqa
|
||||||
# fmt: off
|
|
||||||
coord_mapping = [
|
coord_mapping = [
|
||||||
0, 1, 2, 3, 4, 20, 21, 22, 23, 24,
|
0, 1, 2, 3, 4, 20, 21, 22, 23, 24,
|
||||||
5, 6, 7, 8, 9, 25, 26, 27, 28, 29,
|
5, 6, 7, 8, 9, 25, 26, 27, 28, 29,
|
||||||
|
@@ -6,6 +6,8 @@
|
|||||||
|
|
||||||
A split keyboard with a 3x6 columnar stagger and 3 thumb keys.
|
A split keyboard with a 3x6 columnar stagger and 3 thumb keys.
|
||||||
|
|
||||||
|
kb.py is designed to work with the nice!nano
|
||||||
|
|
||||||
Hardware Availability: [PCB & Case Source](https://github.com/foostan/crkbd)
|
Hardware Availability: [PCB & Case Source](https://github.com/foostan/crkbd)
|
||||||
|
|
||||||
Retailers (USA)
|
Retailers (USA)
|
||||||
@@ -16,18 +18,10 @@ Corne LP
|
|||||||
[Boardsource](https://boardsource.xyz/store/5f2efc462902de7151495057)
|
[Boardsource](https://boardsource.xyz/store/5f2efc462902de7151495057)
|
||||||
|
|
||||||
Extensions enabled by default
|
Extensions enabled by default
|
||||||
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
|
- [Layers](/docs/layers.md) Need more keys than switches? Use layers.
|
||||||
- [RGB](/docs/en/rgb.md) Light it up
|
- [RGB](/docs/rgb.md) Light it up
|
||||||
- [BLE_Split](/docs/en/split_keyboards.md) Connects halves without wires
|
- [BLE_Split](/docs/split_keyboards.md) Connects halves without wires
|
||||||
|
|
||||||
Common Extensions
|
Common Extensions
|
||||||
- [Split](/docs/en/split_keyboards.md) Connects halves using a wire
|
- [Split](/docs/split_keyboards.md) Connects halves using a wire
|
||||||
- [Power](/docs/en/power.md) Powersaving features for battery life
|
- [Power](/docs/power.md) Powersaving features for battery life
|
||||||
|
|
||||||
## Microcontroller support
|
|
||||||
|
|
||||||
Update this line in `kb.py` to any supported microcontroller in `kmk/quickpin/pro_micro`:
|
|
||||||
|
|
||||||
```python
|
|
||||||
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
|
|
||||||
```
|
|
||||||
|
@@ -2,15 +2,9 @@
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
As the name implies, the Ergo Travel was originally designed as a travel
|
As the name implies, the Ergo Travel was originally designed as a travel keyboard, but it works just as well on your desk as a main daily use keyboard. The Ergo Travel is a popular choice by many because it offers a few more keys than other keyboards in similar sizes, and that is why we chose to stock it. Additionally, the Ergo Travel has nice customization options in the thumb cluster because you can configure the main thumb key to use a single larger 2u key, or two smaller 1u keys depending on your preference. The clean and simple aesthetic of the Ergo Travel and the few extra keys make it an awesome option for people wanting a 40%-ish split keyboard.
|
||||||
keyboard, but it works just as well on your desk as a main daily use keyboard.
|
|
||||||
The Ergo Travel is a popular choice by many because it offers a few more keys
|
kb.py is designed to work with the nice!nano
|
||||||
than other keyboards in similar sizes, and that is why we chose to stock it.
|
|
||||||
Additionally, the Ergo Travel has nice customization options in the thumb
|
|
||||||
cluster because you can configure the main thumb key to use a single larger 2u
|
|
||||||
key, or two smaller 1u keys depending on your preference. The clean and simple
|
|
||||||
aesthetic of the Ergo Travel and the few extra keys make it an awesome option
|
|
||||||
for people wanting a 40%-ish split keyboard.
|
|
||||||
|
|
||||||
Hardware Availability: [PCB & Case Source](https://github.com/jpconstantineau/ErgoTravel/blob/master/OrderingInstructions.md)
|
Hardware Availability: [PCB & Case Source](https://github.com/jpconstantineau/ErgoTravel/blob/master/OrderingInstructions.md)
|
||||||
|
|
||||||
@@ -21,19 +15,10 @@ Retailers (Canada)
|
|||||||
[BlueMicro Store (ErgoTravel's creator)](https://store.jpconstantineau.com/#/group/split_boards)
|
[BlueMicro Store (ErgoTravel's creator)](https://store.jpconstantineau.com/#/group/split_boards)
|
||||||
|
|
||||||
Extensions enabled by default
|
Extensions enabled by default
|
||||||
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
|
- [Layers](/docs/layers.md) Need more keys than switches? Use layers.
|
||||||
- [BLE_Split](/docs/en/split_keyboards.md) Connects halves without wires
|
- [BLE_Split](/docs/split_keyboards.md) Connects halves without wires
|
||||||
- [MediaKeys](/docs/en/media_keys.md) Control volume and other media functions
|
- [MediaKeys](/docs/media_keys.md) Control volume and other media functions
|
||||||
|
|
||||||
Common Extensions
|
Common Extensions
|
||||||
- [Split](/docs/en/split_keyboards.md) Connects halves using a wire
|
- [Split](/docs/split_keyboards.md) Connects halves using a wire
|
||||||
- [Power](/docs/en/power.md) Powersaving features for battery life
|
- [Power](/docs/power.md) Powersaving features for battery life
|
||||||
|
|
||||||
|
|
||||||
## Microcontroller support
|
|
||||||
|
|
||||||
Update this line in `kb.py` to any supported microcontroller in `kmk/quickpin/pro_micro`:
|
|
||||||
|
|
||||||
```python
|
|
||||||
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
|
|
||||||
```
|
|
||||||
|
@@ -1,31 +1,30 @@
|
|||||||
import board
|
import board
|
||||||
|
|
||||||
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
|
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
|
||||||
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
|
|
||||||
from kmk.scanners import DiodeOrientation
|
from kmk.scanners import DiodeOrientation
|
||||||
|
|
||||||
|
|
||||||
class KMKKeyboard(_KMKKeyboard):
|
class KMKKeyboard(_KMKKeyboard):
|
||||||
row_pins = (pins[7], pins[8], pins[9], pins[10])
|
row_pins = (board.P0_24, board.P1_00, board.P0_11, board.P1_04)
|
||||||
col_pins = (
|
col_pins = (
|
||||||
pins[17],
|
board.P0_29,
|
||||||
pins[16],
|
board.P0_02,
|
||||||
pins[15],
|
board.P1_15,
|
||||||
pins[14],
|
board.P1_13,
|
||||||
pins[13],
|
board.P1_11,
|
||||||
pins[12],
|
board.P0_10,
|
||||||
pins[10],
|
board.P0_09,
|
||||||
)
|
)
|
||||||
diode_orientation = DiodeOrientation.COLUMNS
|
diode_orientation = DiodeOrientation.COLUMNS
|
||||||
led_pin = pins[9]
|
led_pin = board.P1_06
|
||||||
rgb_pixel_pin = pins[0]
|
rgb_pixel_pin = board.P0_06
|
||||||
rgb_num_pixels = 12
|
rgb_num_pixels = 12
|
||||||
data_pin = pins[1]
|
data_pin = board.P0_08
|
||||||
i2c = board.I2C
|
i2c = board.I2C
|
||||||
|
powersave_pin = board.P0_13
|
||||||
|
|
||||||
# NOQA
|
# NOQA
|
||||||
# flake8: noqa
|
# flake8: noqa
|
||||||
# fmt: off
|
|
||||||
coord_mapping = [
|
coord_mapping = [
|
||||||
0, 1, 2, 3, 4, 5, 6, 34, 33, 32, 31, 30, 29, 28,
|
0, 1, 2, 3, 4, 5, 6, 34, 33, 32, 31, 30, 29, 28,
|
||||||
7, 8, 9, 10, 11, 12, 13, 41, 40, 39, 38, 37, 36, 35,
|
7, 8, 9, 10, 11, 12, 13, 41, 40, 39, 38, 37, 36, 35,
|
||||||
|
@@ -1,6 +0,0 @@
|
|||||||
# Ferris Sweep
|
|
||||||
|
|
||||||
The [Ferris Sweep](https://github.com/davidphilipbarr/Sweep) is a split, 34 key keyboard designed by David Philip Barr. It uses a Pro-Micro footprint.
|
|
||||||
|
|
||||||
It's based in turn on the Ferris by Philip Chevalier.
|
|
||||||
The default keymap is based on the [original Ferris default keymap](https://github.com/qmk/qmk_firmware/tree/master/keyboards/ferris/keymaps/default).
|
|
@@ -1,37 +0,0 @@
|
|||||||
# Ferris Sweep pinout translated from QMK repo
|
|
||||||
# CreditT: 2018-2020 ENDO Katsuhiro, David Philip Barr, Pierre Chevalier
|
|
||||||
|
|
||||||
import board
|
|
||||||
|
|
||||||
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
|
|
||||||
from kmk.quickpin.pro_micro.kb2040 import pinout as pins
|
|
||||||
|
|
||||||
from kmk.scanners.keypad import KeysScanner
|
|
||||||
|
|
||||||
from storage import getmount
|
|
||||||
|
|
||||||
# GPIO to key mapping - each line is a new row.
|
|
||||||
# fmt: off
|
|
||||||
_KEY_CFG_LEFT = [
|
|
||||||
pins[9], pins[16], pins[17], pins[18], pins[19],
|
|
||||||
pins[15], pins[14], pins[13], pins[12], pins[0],
|
|
||||||
pins[4], pins[5], pins[6], pins[7], pins[8],
|
|
||||||
pins[10], pins[11],
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
# fmt: on
|
|
||||||
|
|
||||||
class KMKKeyboard(_KMKKeyboard):
|
|
||||||
def __init__(self):
|
|
||||||
# create and register the scanner
|
|
||||||
self.matrix = KeysScanner(_KEY_CFG_LEFT)
|
|
||||||
|
|
||||||
# flake8: noqa
|
|
||||||
# fmt: off
|
|
||||||
coord_mapping = [
|
|
||||||
0, 1, 2, 3, 4, 21, 20, 19, 18, 17,
|
|
||||||
5, 6, 7, 8, 9, 26, 25, 24, 23, 22,
|
|
||||||
10, 11, 12, 13, 14, 31, 30, 29, 28, 27,
|
|
||||||
15, 16, 33, 32
|
|
||||||
]
|
|
@@ -1,114 +0,0 @@
|
|||||||
# Replicates default Ferris keymap from QMK
|
|
||||||
# Credit: Pierre Chevalier, 2020
|
|
||||||
# https://github.com/qmk/qmk_firmware/tree/master/keyboards/ferris/keymaps/default
|
|
||||||
|
|
||||||
import board
|
|
||||||
from kb import KMKKeyboard
|
|
||||||
|
|
||||||
from kmk.keys import KC
|
|
||||||
from kmk.modules.layers import Layers
|
|
||||||
from kmk.modules.modtap import ModTap
|
|
||||||
from kmk.modules.mouse_keys import MouseKeys
|
|
||||||
from kmk.modules.split import Split, SplitSide
|
|
||||||
|
|
||||||
keyboard = KMKKeyboard()
|
|
||||||
|
|
||||||
# TODO Comment one of these on each side
|
|
||||||
# split_side = SplitSide.LEFT
|
|
||||||
split_side = SplitSide.RIGHT
|
|
||||||
split = Split(
|
|
||||||
# split_flip=True,
|
|
||||||
data_pin=board.D1,
|
|
||||||
split_side=split_side,
|
|
||||||
split_target_left=False,
|
|
||||||
# Using the default wasn't working, try pio
|
|
||||||
use_pio=True,
|
|
||||||
uart_flip=True,
|
|
||||||
)
|
|
||||||
|
|
||||||
layers_ext = Layers()
|
|
||||||
mod_tap = ModTap()
|
|
||||||
mouse_key = MouseKeys()
|
|
||||||
|
|
||||||
|
|
||||||
keyboard.modules = [layers_ext, split, mod_tap, mouse_key]
|
|
||||||
|
|
||||||
# Cleaner key names
|
|
||||||
_______ = KC.TRNS
|
|
||||||
XXXXXXX = KC.NO
|
|
||||||
|
|
||||||
|
|
||||||
# Mod-taps
|
|
||||||
A_SFT = KC.MT(KC.A, KC.LSFT)
|
|
||||||
SCLN_SFT = KC.MT(KC.SCLN, KC.LSFT)
|
|
||||||
X_CTL = KC.MT(KC.X, KC.LCTRL)
|
|
||||||
C_ALT = KC.MT(KC.C, KC.LALT)
|
|
||||||
COM_ALT = KC.MT(KC.COMM, KC.LALT)
|
|
||||||
DOT_CTL = KC.MT(KC.DOT, KC.LCTRL)
|
|
||||||
CTL_ALT = KC.LCTRL(KC.LALT)
|
|
||||||
|
|
||||||
|
|
||||||
# Layer tap for other home row keys
|
|
||||||
S_L5 = KC.LT(5, KC.S)
|
|
||||||
D_L1 = KC.LT(1, KC.D)
|
|
||||||
F_L3 = KC.LT(3, KC.F)
|
|
||||||
J_L4 = KC.LT(4, KC.J)
|
|
||||||
K_L2 = KC.LT(2, KC.K)
|
|
||||||
L_L6 = KC.LT(6, KC.L)
|
|
||||||
SPC_L7 = KC.LT(7, KC.SPC)
|
|
||||||
|
|
||||||
# fmt: off
|
|
||||||
# flake8: noqa
|
|
||||||
keyboard.keymap = [
|
|
||||||
[ # QWERTY
|
|
||||||
KC.Q, KC.W, KC.E, KC.R, KC.T, KC.Y, KC.U, KC.I, KC.O, KC.P,
|
|
||||||
A_SFT, S_L5, D_L1, F_L3, KC.G, KC.H, J_L4, K_L2, L_L6, SCLN_SFT,
|
|
||||||
KC.Z, X_CTL, C_ALT, KC.V, KC.B, KC.N, KC.M, COM_ALT, DOT_CTL, KC.SLSH,
|
|
||||||
KC.LGUI, KC.BSPC, SPC_L7, KC.ENT,
|
|
||||||
],
|
|
||||||
[ # MOUSE
|
|
||||||
_______, _______, _______, _______, _______, _______, KC.MB_LMB, KC.MW_UP, KC.MB_LMB, _______,
|
|
||||||
_______, KC.MB_RMB, _______, KC.MB_LMB, _______, _______, KC.MS_LT, KC.MS_DN, KC.MS_UP, KC.MS_RT,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, KC.MW_DN, _______, _______,
|
|
||||||
_______, _______, _______, _______,
|
|
||||||
],
|
|
||||||
[ # NAVIGATION
|
|
||||||
_______, _______, KC.PGUP, _______, _______, _______, _______, _______, _______, _______,
|
|
||||||
KC.LEFT, KC.UP, KC.DOWN, KC.RGHT, _______, _______, KC.LGUI, CTL_ALT, KC.MEH, KC.HYPR,
|
|
||||||
_______, KC.HOME, KC.PGDN, KC.END, _______, _______, _______, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______,
|
|
||||||
],
|
|
||||||
[ # RIGHT SYMBOLS
|
|
||||||
_______, _______, _______, _______, _______, _______, KC.UNDS, KC.PIPE, KC.QUOT, _______,
|
|
||||||
KC.CIRC, KC.ASTR, KC.AMPR, _______, _______, KC.HASH, KC.TILD, KC.SLSH, KC.DQUO, KC.DLR,
|
|
||||||
_______, _______, _______, _______, _______, _______, KC.MINS, KC.BSLS, KC.GRV, _______,
|
|
||||||
_______, _______, _______, _______,
|
|
||||||
],
|
|
||||||
[ # LEFT SYMBOLS
|
|
||||||
_______, KC.COLN, KC.LABK, KC.RABK, KC.SCLN, _______, _______, _______, _______, _______,
|
|
||||||
KC.LCBR, KC.RCBR, KC.LPRN, KC.RPRN, KC.AT, _______, _______, KC.EQL, KC.PLUS, KC.PERC,
|
|
||||||
_______, KC.EXLM, KC.LBRC, KC.RBRC, _______, _______, _______, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______,
|
|
||||||
],
|
|
||||||
[ # 5 FUNCTION
|
|
||||||
_______, _______, _______, _______, _______, _______, KC.F7, KC.F8, KC.F9, KC.F10,
|
|
||||||
_______, _______, _______, _______, _______, _______, KC.F4, KC.F5, KC.F6, KC.F11,
|
|
||||||
_______, _______, _______, _______, _______, _______, KC.F1, KC.F2, KC.F3, KC.F12,
|
|
||||||
_______, _______, _______, _______,
|
|
||||||
],
|
|
||||||
[ # 6 NUMBERS
|
|
||||||
KC.SLSH, KC.N7, KC.N8, KC.N9, KC.PLUS, _______, _______, _______, _______, _______,
|
|
||||||
KC.N0, KC.N1, KC.N2, KC.N3, KC.MINS, _______, _______, _______, _______, _______,
|
|
||||||
KC.ASTR, KC.N4, KC.N5, KC.N6, KC.EQL, _______, _______, _______, _______, _______,
|
|
||||||
_______, _______, _______, _______,
|
|
||||||
],
|
|
||||||
[ # 7 ALWAYS AVAILABLE
|
|
||||||
_______, _______, KC.COLN, KC.ESC, _______, _______, _______, _______, _______, KC.DEL,
|
|
||||||
_______, KC.PERC, KC.SLSH, KC.ENT, _______, KC.DF(1), KC.LGUI, _______, _______, _______,
|
|
||||||
_______, _______, _______, KC.PERC, _______, KC.DF(0), KC.RALT, KC.RCTL, _______, KC.RESET,
|
|
||||||
_______, KC.TAB, _______, _______,
|
|
||||||
],
|
|
||||||
]
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
keyboard.go()
|
|
@@ -2,24 +2,12 @@
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
A 36 or 42 key keyboard with support for per key LEDs, 2 rotary encoders (EC11
|
A 36 or 42 key keyboard with support for per key LEDs, 2 rotary encoders (EC11 or evqwgd001), and a feature in the center (EC11, OLED (128x64), or pimoroni trackball). KMK support is available for the BYO MCU option only.
|
||||||
or evqwgd001), and a feature in the center (EC11, OLED (128x64), or pimoroni
|
|
||||||
trackball). KMK support is available for the BYO MCU option only.
|
Use `kb2040/kb.py` when using a KB2040 MCU.
|
||||||
|
|
||||||
Use `nice_nano/kb.py` when using a Nice!Nano v2 MCU.
|
Use `nice_nano/kb.py` when using a Nice!Nano v2 MCU.
|
||||||
|
|
||||||
> Note: The Nice!Nano doesn't have a lot of ROM, so there are a couple of extra
|
> Note: The Nice!Nano doesn't have a lot of ROM, so there are a couple of extra steps. See guidance [over here](../../docs/Officially_Supported_Microcontrollers.md#nicenano).
|
||||||
> steps. See guidance [over
|
|
||||||
> here](../../docs/en/Officially_Supported_Microcontrollers.md#nicenano).
|
|
||||||
|
|
||||||
Use `kb2040/kb.py` when using any other pro micro footprint MCU.
|
|
||||||
|
|
||||||
An example `main.py` file is included for each MCU.
|
An example `main.py` file is included for each MCU.
|
||||||
|
|
||||||
## Microcontroller support
|
|
||||||
|
|
||||||
Update this line in `kb.py` to any supported microcontroller in `kmk/quickpin/pro_micro`:
|
|
||||||
|
|
||||||
```python
|
|
||||||
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
|
|
||||||
```
|
|
||||||
|
@@ -1,37 +1,35 @@
|
|||||||
import board
|
import board
|
||||||
|
|
||||||
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
|
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
|
||||||
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
|
|
||||||
from kmk.scanners import DiodeOrientation
|
from kmk.scanners import DiodeOrientation
|
||||||
from kmk.scanners import intify_coordinate as ic
|
from kmk.scanners import intify_coordinate as ic
|
||||||
|
|
||||||
|
|
||||||
class KMKKeyboard(_KMKKeyboard):
|
class KMKKeyboard(_KMKKeyboard):
|
||||||
col_pins = (
|
col_pins = (
|
||||||
pins[11],
|
board.D9,
|
||||||
pins[10],
|
board.D8,
|
||||||
pins[9],
|
board.D7,
|
||||||
pins[8],
|
board.D6,
|
||||||
pins[7],
|
board.D5,
|
||||||
pins[6],
|
board.D4,
|
||||||
pins[10],
|
board.MOSI,
|
||||||
pins[12],
|
board.MISO,
|
||||||
)
|
)
|
||||||
row_pins = (
|
row_pins = (
|
||||||
pins[1],
|
board.D1,
|
||||||
pins[19],
|
board.A3,
|
||||||
pins[18],
|
board.A2,
|
||||||
pins[17],
|
board.A1,
|
||||||
pins[16],
|
board.A0,
|
||||||
pins[15],
|
board.SCK,
|
||||||
)
|
)
|
||||||
diode_orientation = DiodeOrientation.COLUMNS
|
diode_orientation = DiodeOrientation.COLUMNS
|
||||||
rgb_pixel_pin = pins[0]
|
rgb_pixel_pin = board.D0
|
||||||
rgb_num_pixels = 42
|
rgb_num_pixels = 42
|
||||||
i2c = board.I2C
|
i2c = board.I2C
|
||||||
|
|
||||||
# flake8: noqa
|
# flake8: noqa
|
||||||
# fmt: off
|
|
||||||
coord_mapping = [
|
coord_mapping = [
|
||||||
ic(0, 0), ic(0, 1), ic(0, 2), ic(0, 3), ic(0, 4), ic(0, 5), ic(0, 6), ic(0, 7), ic(4, 3), ic(3, 4), ic(4, 5), ic(3, 7),
|
ic(0, 0), ic(0, 1), ic(0, 2), ic(0, 3), ic(0, 4), ic(0, 5), ic(0, 6), ic(0, 7), ic(4, 3), ic(3, 4), ic(4, 5), ic(3, 7),
|
||||||
ic(1, 0), ic(1, 1), ic(1, 2), ic(1, 3), ic(1, 4), ic(1, 5), ic(4, 1), ic(1, 6), ic(1, 7), ic(3, 2), ic(4, 4), ic(3, 5), ic(4, 7),
|
ic(1, 0), ic(1, 1), ic(1, 2), ic(1, 3), ic(1, 4), ic(1, 5), ic(4, 1), ic(1, 6), ic(1, 7), ic(3, 2), ic(4, 4), ic(3, 5), ic(4, 7),
|
@@ -4,20 +4,14 @@
|
|||||||
|
|
||||||
A keyboard with only 30 keys.
|
A keyboard with only 30 keys.
|
||||||
|
|
||||||
|
kb.py is designed to work with the nice!nano
|
||||||
|
|
||||||
Hardware Availability: [Gherkin project on 40% Keyboards](http://www.40percent.club/2016/11/gherkin.html)
|
Hardware Availability: [Gherkin project on 40% Keyboards](http://www.40percent.club/2016/11/gherkin.html)
|
||||||
|
|
||||||
Extensions enabled by default
|
Extensions enabled by default
|
||||||
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
|
- [Layers](/docs/layers.md) Need more keys than switches? Use layers.
|
||||||
- [ModTap](/docs/en/modtap.md) Allows mod keys to act as different keys when tapped.
|
- [ModTap](/docs/modtap.md) Allows mod keys to act as different keys when tapped.
|
||||||
- [LED](/docs/en/led.md) Light your keys up
|
- [LED](/docs/led.md) Light your keys up
|
||||||
|
|
||||||
Common Extensions
|
Common Extensions
|
||||||
- [Power](/docs/en/power.md) Powersaving features for battery life
|
- [Power](/docs/power.md) Powersaving features for battery life
|
||||||
|
|
||||||
## Microcontroller support
|
|
||||||
|
|
||||||
Update this line in `kb.py` to any supported microcontroller in `kmk/quickpin/pro_micro`:
|
|
||||||
|
|
||||||
```python
|
|
||||||
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
|
|
||||||
```
|
|
||||||
|
@@ -1,21 +1,21 @@
|
|||||||
import board
|
import board
|
||||||
|
|
||||||
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
|
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
|
||||||
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
|
|
||||||
from kmk.scanners import DiodeOrientation
|
from kmk.scanners import DiodeOrientation
|
||||||
|
|
||||||
|
|
||||||
class KMKKeyboard(_KMKKeyboard):
|
class KMKKeyboard(_KMKKeyboard):
|
||||||
row_pins = (pins[16], pins[15], pins[14], pins[13], pins[12])
|
row_pins = (board.P1_15, board.P1_13, board.P1_11, board.P0_10, board.P0_09)
|
||||||
col_pins = (
|
col_pins = (
|
||||||
board.pins[10],
|
board.P1_04,
|
||||||
board.pins[9],
|
board.P0_11,
|
||||||
board.pins[8],
|
board.P1_00,
|
||||||
board.pins[7],
|
board.P0_24,
|
||||||
board.pins[6],
|
board.P0_22,
|
||||||
board.pins[5],
|
board.P0_20,
|
||||||
)
|
)
|
||||||
diode_orientation = DiodeOrientation.COLUMNS
|
diode_orientation = DiodeOrientation.COLUMNS
|
||||||
led_pin = board.pins[11]
|
led_pin = board.P1_06
|
||||||
rgb_num_pixels = 0
|
rgb_num_pixels = 0
|
||||||
i2c = board.I2C
|
i2c = board.I2C
|
||||||
|
powersave_pin = board.P0_13
|
||||||
|
@@ -4,20 +4,15 @@
|
|||||||
|
|
||||||
Luddite 60% keyboard with backlight and RGB underglow.
|
Luddite 60% keyboard with backlight and RGB underglow.
|
||||||
|
|
||||||
|
kb.py is designed to work with the nice!nano
|
||||||
|
kb_converter.py is designed to work with an itsybitsy with converter board found [here](/hardware)
|
||||||
|
|
||||||
Hardware Availability: [Luddite project on 40% Keyboards](http://www.40percent.club/search/label/luddite)
|
Hardware Availability: [Luddite project on 40% Keyboards](http://www.40percent.club/search/label/luddite)
|
||||||
|
|
||||||
Extensions enabled by default
|
Extensions enabled by default
|
||||||
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
|
- [Layers](/docs/layers.md) Need more keys than switches? Use layers.
|
||||||
- [RGB](/docs/en/rgb.md) RGB underglow
|
- [RGB](/docs/rgb.md) RGB underglow
|
||||||
- [LED](/docs/en/led.md) Light your keys up
|
- [LED](/docs/led.md) Light your keys up
|
||||||
|
|
||||||
Common Extensions
|
Common Extensions
|
||||||
- [Power](/docs/en/power.md) Powersaving features for battery life
|
- [Power](/docs/power.md) Powersaving features for battery life
|
||||||
|
|
||||||
## Microcontroller support
|
|
||||||
|
|
||||||
Update this line in `kb.py` to any supported microcontroller in `kmk/quickpin/pro_micro`:
|
|
||||||
|
|
||||||
```python
|
|
||||||
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
|
|
||||||
```
|
|
||||||
|
30
boards/fourtypercentclub/luddite/converter_kb.py
Normal file
30
boards/fourtypercentclub/luddite/converter_kb.py
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
import board
|
||||||
|
|
||||||
|
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
|
||||||
|
from kmk.scanners import DiodeOrientation
|
||||||
|
|
||||||
|
|
||||||
|
class KMKKeyboard(_KMKKeyboard):
|
||||||
|
col_pins = (
|
||||||
|
board.A0,
|
||||||
|
board.A1,
|
||||||
|
board.A2,
|
||||||
|
board.A3,
|
||||||
|
board.A4,
|
||||||
|
board.A5,
|
||||||
|
board.SCK,
|
||||||
|
board.MOSI,
|
||||||
|
)
|
||||||
|
row_pins = (
|
||||||
|
board.TX,
|
||||||
|
board.RX,
|
||||||
|
board.SDA,
|
||||||
|
board.SCL,
|
||||||
|
board.D13,
|
||||||
|
board.D12,
|
||||||
|
board.D11,
|
||||||
|
board.D10,
|
||||||
|
)
|
||||||
|
diode_orientation = DiodeOrientation.COLUMNS
|
||||||
|
rgb_pixel_pin = board.D9
|
||||||
|
rgb_num_pixels = 12
|
@@ -1,33 +1,33 @@
|
|||||||
import board
|
import board
|
||||||
|
|
||||||
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
|
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
|
||||||
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
|
|
||||||
from kmk.scanners import DiodeOrientation
|
from kmk.scanners import DiodeOrientation
|
||||||
|
|
||||||
|
|
||||||
class KMKKeyboard(_KMKKeyboard):
|
class KMKKeyboard(_KMKKeyboard):
|
||||||
row_pins = (
|
row_pins = (
|
||||||
pins[0],
|
board.P0_06,
|
||||||
board.pins[1],
|
board.P0_08,
|
||||||
board.pins[4],
|
board.P0_17,
|
||||||
board.pins[5],
|
board.P0_20,
|
||||||
board.pins[6],
|
board.P0_22,
|
||||||
board.pins[7],
|
board.P0_24,
|
||||||
board.pins[8],
|
board.P1_00,
|
||||||
board.pins[9],
|
board.P0_11,
|
||||||
)
|
)
|
||||||
col_pins = (
|
col_pins = (
|
||||||
board.pins[19],
|
board.P0_31,
|
||||||
board.pins[18],
|
board.P0_29,
|
||||||
board.pins[17],
|
board.P0_02,
|
||||||
board.pins[16],
|
board.P1_15,
|
||||||
board.pins[15],
|
board.P1_13,
|
||||||
board.pins[14],
|
board.P1_11,
|
||||||
board.pins[13],
|
board.P0_10,
|
||||||
board.pins[12],
|
board.P0_09,
|
||||||
)
|
)
|
||||||
diode_orientation = DiodeOrientation.COLUMNS
|
diode_orientation = DiodeOrientation.COLUMNS
|
||||||
led_pin = board.pins[11]
|
led_pin = board.P1_06
|
||||||
rgb_pixel_pin = board.pins[10]
|
rgb_pixel_pin = board.P1_04
|
||||||
rgb_num_pixels = 8
|
rgb_num_pixels = 8
|
||||||
i2c = board.I2C
|
i2c = board.I2C
|
||||||
|
powersave_pin = board.P0_13
|
||||||
|
@@ -1,111 +0,0 @@
|
|||||||
# Helix
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
A compact split ortholinear keyboard.
|
|
||||||
|
|
||||||
* Keyboard Maintainer: [yushakobo](https://github.com/yushakobo)
|
|
||||||
* Hardware Supported: Helix PCBs (probably rev2 only), Pro Micro RP2040 boards
|
|
||||||
|
|
||||||
Copy the `kb.py` and `main.py` files from your preferred keymap folder into your root directory of your keyboard as detailed in the [KMK instructions](http://kmkfw.io/docs/Getting_Started/).
|
|
||||||
|
|
||||||
## Microcontroller support
|
|
||||||
|
|
||||||
Update this line in `kb.py` to any supported microcontroller in `kmk/quickpin/pro_micro`:
|
|
||||||
|
|
||||||
```python
|
|
||||||
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
|
|
||||||
```
|
|
||||||
|
|
||||||
## Layout
|
|
||||||
|
|
||||||
### Qwerty
|
|
||||||
|
|
||||||
```
|
|
||||||
,-----------------------------------------. ,-----------------------------------------.
|
|
||||||
| ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del |
|
|
||||||
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
|
||||||
| Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp |
|
|
||||||
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
|
||||||
| Ctrl | A | S | D | F | G | | H | J | K | L | ; | ' |
|
|
||||||
|------+------+------+------+------+------+------+------+------+------+------+------+------+------|
|
|
||||||
| Shift| Z | X | C | V | B | [ | ] | N | M | , | . | / |Enter |
|
|
||||||
|------+------+------+------+------+------+------+------+------+------+------+------+------+------|
|
|
||||||
|Adjust| Esc | Alt | GUI | |Lower |Space |Space |Raise | | Left | Down | Up |Right |
|
|
||||||
`-------------------------------------------------------------------------------------------------'
|
|
||||||
```
|
|
||||||
|
|
||||||
### Colemak
|
|
||||||
```
|
|
||||||
,-----------------------------------------. ,-----------------------------------------.
|
|
||||||
| ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del |
|
|
||||||
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
|
||||||
| Tab | Q | W | F | P | G | | J | L | U | Y | ; | Bksp |
|
|
||||||
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
|
||||||
| Ctrl | A | R | S | T | D | | H | N | E | I | O | ' |
|
|
||||||
|------+------+------+------+------+------+------+------+------+------+------+------+------+------|
|
|
||||||
| Shift| Z | X | C | V | B | [ | ] | K | M | , | . | / |Enter |
|
|
||||||
|------+------+------+------+------+------+------+------+------+------+------+------+------+------|
|
|
||||||
|Adjust| Esc | Alt | GUI | |Lower |Space |Space |Raise | | Left | Down | Up |Right |
|
|
||||||
`-------------------------------------------------------------------------------------------------'
|
|
||||||
```
|
|
||||||
|
|
||||||
### Dvorak
|
|
||||||
```
|
|
||||||
,-----------------------------------------. ,-----------------------------------------.
|
|
||||||
| ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp |
|
|
||||||
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
|
||||||
| Tab | ' | , | . | P | Y | | F | G | C | R | L | Del |
|
|
||||||
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
|
||||||
| Ctrl | A | O | E | U | I | | D | H | T | N | S | / |
|
|
||||||
|------+------+------+------+------+------+------+------+------+------+------+------+------+------|
|
|
||||||
| Shift| ; | Q | J | K | X | [ | ] | B | M | W | V | Z |Enter |
|
|
||||||
|------+------+------+------+------+------+------+------+------+------+------+------+------+------|
|
|
||||||
|Adjust| Esc | Alt | GUI | |Lower |Space |Space |Raise | | Left | Down | Up |Right |
|
|
||||||
`-------------------------------------------------------------------------------------------------'
|
|
||||||
```
|
|
||||||
|
|
||||||
### Lower
|
|
||||||
```
|
|
||||||
,-----------------------------------------. ,-----------------------------------------.
|
|
||||||
| ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | |
|
|
||||||
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
|
||||||
| ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | |
|
|
||||||
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
|
||||||
| | F1 | F2 | F3 | F4 | F5 | | F6 | _ | + | { | } | | |
|
|
||||||
|------+------+------+------+------+------+------+------+------+------+------+------+------+------|
|
|
||||||
| | F7 | F8 | F9 | F10 | F11 | ( | ) | F12 | | | Home | End | |
|
|
||||||
|------+------+------+------+------+------+------+------+------+------+------+------+------+------|
|
|
||||||
| | | | | | | | | | | Next | Vol- | Vol+ | Play |
|
|
||||||
`-------------------------------------------------------------------------------------------------'
|
|
||||||
```
|
|
||||||
|
|
||||||
### Raise
|
|
||||||
```
|
|
||||||
,-----------------------------------------. ,-----------------------------------------.
|
|
||||||
| ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp |
|
|
||||||
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
|
||||||
| ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del |
|
|
||||||
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
|
||||||
| | F1 | F2 | F3 | F4 | F5 | | F6 | - | = | [ | ] | \ |
|
|
||||||
|------+------+------+------+------+------+------+------+------+------+------+------+------+------|
|
|
||||||
| | F7 | F8 | F9 | F10 | F11 | | | F12 | | |PageDn|PageUp| |
|
|
||||||
|------+------+------+------+------+------+------+------+------+------+------+------+------+------|
|
|
||||||
| | | | | | | | | | | Next | Vol- | Vol+ | Play |
|
|
||||||
`-------------------------------------------------------------------------------------------------'
|
|
||||||
```
|
|
||||||
|
|
||||||
### Adjust (Lower + Raise)
|
|
||||||
```
|
|
||||||
,-----------------------------------------. ,-----------------------------------------.
|
|
||||||
| F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 |
|
|
||||||
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
|
||||||
| | Reset| Debug| | | | | | | | | | Del |
|
|
||||||
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
|
||||||
| | | | | | Mac | | Win |Qwerty|Colemk|Dvorak| | |
|
|
||||||
|------+------+------+------+------+------+------+------+------+------+------+------+------+------|
|
|
||||||
| | | | | | | | | | |RGB ON| HUE+ | SAT+ | VAL+ |
|
|
||||||
|------+------+------+------+------+------+------+------+------+------+------+------+------+------|
|
|
||||||
| | | | | | | | | | | MODE | HUE- | SAT- | VAL- |
|
|
||||||
`-------------------------------------------------------------------------------------------------'
|
|
||||||
```
|
|
@@ -1,36 +0,0 @@
|
|||||||
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
|
|
||||||
from kmk.quickpin.pro_micro.sparkfun_promicro_rp2040 import pinout as pins
|
|
||||||
from kmk.scanners import DiodeOrientation
|
|
||||||
|
|
||||||
class KMKKeyboard(_KMKKeyboard):
|
|
||||||
col_pins = (
|
|
||||||
pins[19],
|
|
||||||
pins[18],
|
|
||||||
pins[17],
|
|
||||||
pins[16],
|
|
||||||
pins[15],
|
|
||||||
pins[14],
|
|
||||||
pins[13],
|
|
||||||
)
|
|
||||||
row_pins = (
|
|
||||||
pins[6],
|
|
||||||
pins[7],
|
|
||||||
pins[8],
|
|
||||||
pins[9],
|
|
||||||
pins[10],
|
|
||||||
)
|
|
||||||
diode_orientation = DiodeOrientation.COL2ROW
|
|
||||||
data_pin = pins[1]
|
|
||||||
rgb_pixel_pin = pins[0]
|
|
||||||
SDA = pins[4]
|
|
||||||
SCL = pins[5]
|
|
||||||
|
|
||||||
# flake8: noqa
|
|
||||||
# fmt: off
|
|
||||||
coord_mapping = [
|
|
||||||
0, 1, 2, 3, 4, 5, 40, 39, 38, 37, 36, 35,
|
|
||||||
7, 8, 9, 10, 11, 12, 47, 46, 45, 44, 43, 42,
|
|
||||||
14, 15, 16, 17, 18, 19, 54, 53, 52, 51, 50, 49,
|
|
||||||
21, 22, 23, 24, 25, 26, 27, 62, 61, 60, 59, 58, 57, 56,
|
|
||||||
28, 29, 30, 31, 32, 33, 34, 69, 68, 67, 66, 65, 64, 63
|
|
||||||
]
|
|
@@ -1,102 +0,0 @@
|
|||||||
from kb import KMKKeyboard
|
|
||||||
|
|
||||||
from kmk.extensions.media_keys import MediaKeys
|
|
||||||
from kmk.extensions.rgb import RGB
|
|
||||||
from kmk.keys import KC
|
|
||||||
from kmk.modules.cg_swap import CgSwap
|
|
||||||
from kmk.modules.layers import Layers
|
|
||||||
from kmk.modules.split import Split, SplitSide
|
|
||||||
|
|
||||||
keyboard = KMKKeyboard()
|
|
||||||
|
|
||||||
# RGB backlight support
|
|
||||||
rgb = RGB(pixel_pin=keyboard.rgb_pixel_pin, num_pixels=32, hue_default=80, sat_default=255, val_default=80)
|
|
||||||
keyboard.extensions.append(rgb)
|
|
||||||
|
|
||||||
# Split keyboard support
|
|
||||||
split_side = SplitSide.LEFT
|
|
||||||
split_side = SplitSide.RIGHT
|
|
||||||
split = Split(
|
|
||||||
use_pio=True,
|
|
||||||
uart_flip=True,
|
|
||||||
data_pin=keyboard.data_pin
|
|
||||||
)
|
|
||||||
keyboard.modules.append(split)
|
|
||||||
|
|
||||||
# Media key support
|
|
||||||
keyboard.extensions.append(MediaKeys())
|
|
||||||
|
|
||||||
# CG Swap Module
|
|
||||||
cg_swap = CgSwap()
|
|
||||||
keyboard.modules.append(cg_swap)
|
|
||||||
|
|
||||||
# Layer support
|
|
||||||
layers_ext = Layers()
|
|
||||||
keyboard.modules.append(layers_ext)
|
|
||||||
|
|
||||||
# Cleaner key names
|
|
||||||
_______ = KC.TRNS
|
|
||||||
XXXXXXX = KC.NO
|
|
||||||
|
|
||||||
QWERTY = KC.DF(0)
|
|
||||||
COLEMAK = KC.DF(1)
|
|
||||||
DVORAK = KC.DF(2)
|
|
||||||
LOWER = KC.MO(3)
|
|
||||||
RAISE = KC.MO(4)
|
|
||||||
ADJUST = KC.MO(5)
|
|
||||||
|
|
||||||
RGB_TOG = KC.RGB_TOG
|
|
||||||
RGB_HUI = KC.RGB_HUI
|
|
||||||
RGB_HUD = KC.RGB_HUI
|
|
||||||
RGB_SAI = KC.RGB_SAI
|
|
||||||
RGB_SAD = KC.RGB_SAD
|
|
||||||
RGB_VAI = KC.RGB_VAI
|
|
||||||
RGB_VAD = KC.RGB_VAD
|
|
||||||
|
|
||||||
keyboard.keymap = [
|
|
||||||
[ # QWERTY
|
|
||||||
KC.GRV, KC.N1, KC.N2, KC.N3, KC.N4, KC.N5, KC.N6, KC.N7, KC.N8, KC.N9, KC.N0, KC.DEL,
|
|
||||||
KC.TAB, KC.Q, KC.W, KC.E, KC.R, KC.T, KC.Y, KC.U, KC.I, KC.O, KC.P, KC.BSPC,
|
|
||||||
KC.LCTL, KC.A, KC.S, KC.D, KC.F, KC.G, KC.H, KC.J, KC.K, KC.L, KC.SCLN, KC.QUOT,
|
|
||||||
KC.LSFT, KC.Z, KC.X, KC.C, KC.V, KC.B, KC.LBRC, KC.RBRC, KC.N, KC.M, KC.COMM, KC.DOT, KC.SLSH, KC.ENT ,
|
|
||||||
ADJUST, KC.ESC, KC.LALT, KC.LGUI, XXXXXXX, LOWER, KC.SPC, KC.SPC, RAISE, XXXXXXX, KC.LEFT, KC.DOWN, KC.UP, KC.RGHT
|
|
||||||
],
|
|
||||||
[ # COLEMAK
|
|
||||||
KC.GRV, KC.N1, KC.N2, KC.N3, KC.N4, KC.N5, KC.N6, KC.N7, KC.N8, KC.N9, KC.N0, KC.DEL,
|
|
||||||
KC.TAB, KC.Q, KC.W, KC.F, KC.P, KC.G, KC.J, KC.L, KC.U, KC.Y, KC.SCLN, KC.BSPC,
|
|
||||||
KC.LCTL, KC.A, KC.R, KC.S, KC.T, KC.D, KC.H, KC.N, KC.E, KC.I, KC.O, KC.QUOT,
|
|
||||||
KC.LSFT, KC.Z, KC.X, KC.C, KC.V, KC.B, KC.LBRC, KC.RBRC, KC.K, KC.M, KC.COMM, KC.DOT, KC.SLSH, KC.ENT ,
|
|
||||||
ADJUST, KC.ESC, KC.LALT, KC.LGUI, XXXXXXX, LOWER, KC.SPC, KC.SPC, RAISE, XXXXXXX, KC.LEFT, KC.DOWN, KC.UP, KC.RGHT
|
|
||||||
],
|
|
||||||
[ # DVORAK
|
|
||||||
KC.GRV, KC.N1, KC.N2, KC.N3, KC.N4, KC.N5, KC.N6, KC.N7, KC.N8, KC.N9, KC.N0, KC.DEL,
|
|
||||||
KC.TAB, KC.QUOT, KC.COMM, KC.DOT, KC.P, KC.Y, KC.F, KC.G, KC.C, KC.R, KC.L, KC.DEL,
|
|
||||||
KC.LCTL, KC.A, KC.O, KC.E, KC.U, KC.I, KC.D, KC.H, KC.T, KC.N, KC.S, KC.SLSH,
|
|
||||||
KC.LSFT, KC.SCLN, KC.Q, KC.J, KC.K, KC.X, KC.LBRC, KC.RBRC, KC.B, KC.M, KC.W, KC.V, KC.Z, KC.ENT ,
|
|
||||||
ADJUST, KC.ESC, KC.LALT, KC.LGUI, XXXXXXX, LOWER, KC.SPC, KC.SPC, RAISE, XXXXXXX, KC.LEFT, KC.DOWN, KC.UP, KC.RGHT
|
|
||||||
],
|
|
||||||
[ # LOWER
|
|
||||||
KC.TILD, KC.EXLM, KC.AT, KC.HASH, KC.DLR, KC.PERC, KC.CIRC, KC.AMPR, KC.ASTR, KC.LPRN, KC.RPRN, _______,
|
|
||||||
KC.TILD, KC.EXLM, KC.AT, KC.HASH, KC.DLR, KC.PERC, KC.CIRC, KC.AMPR, KC.ASTR, KC.LPRN, KC.RPRN, _______,
|
|
||||||
_______, KC.F1, KC.F2, KC.F3, KC.F4, KC.F5, KC.F6, KC.UNDS, KC.PLUS, KC.LCBR, KC.RCBR, KC.PIPE,
|
|
||||||
KC.CAPS, KC.F7, KC.F8, KC.F9, KC.F10, KC.F11, KC.LPRN, KC.RPRN, KC.F12, _______, _______, KC.HOME, KC.END, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC.MNXT, KC.VOLD, KC.VOLU, KC.MPLY
|
|
||||||
],
|
|
||||||
[ # RAISE
|
|
||||||
KC.GRV, KC.N1, KC.N2, KC.N3, KC.N4, KC.N5, KC.N6, KC.N7, KC.N8, KC.N9, KC.N0, KC.BSPC,
|
|
||||||
KC.GRV, KC.N1, KC.N2, KC.N3, KC.N4, KC.N5, KC.N6, KC.N7, KC.N8, KC.N9, KC.N0, KC.DEL,
|
|
||||||
_______, KC.F1, KC.F2, KC.F3, KC.F4, KC.F5, KC.F6, KC.MINS, KC.EQL, KC.LBRC, KC.RBRC, KC.BSLS,
|
|
||||||
KC.CAPS, KC.F7, KC.F8, KC.F9, KC.F10, KC.F11, _______, _______, KC.F12, _______, _______, KC.PGDN, KC.PGUP, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC.MNXT, KC.VOLD, KC.VOLU, KC.MPLY
|
|
||||||
],
|
|
||||||
[ # ADJUSTs
|
|
||||||
KC.F1, KC.F2, KC.F3, KC.F4, KC.F5, KC.F6, KC.F7, KC.F8, KC.F9, KC.F10, KC.F11, KC.F12,
|
|
||||||
_______, KC.RESET, KC.DEBUG, _______, _______, _______, _______, _______, _______, _______, _______, KC.DEL,
|
|
||||||
_______, _______, _______, _______, _______, KC.CG_NORM, KC.CG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI,
|
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_VAD
|
|
||||||
]
|
|
||||||
]
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
keyboard.go()
|
|
@@ -9,5 +9,5 @@ kb_BlueMicro840.py is designed to work with the BlueMicro840
|
|||||||
Retailers (USA)
|
Retailers (USA)
|
||||||
|
|
||||||
Extensions enabled by default
|
Extensions enabled by default
|
||||||
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
|
- [Layers](/docs/layers.md) Need more keys than switches? Use layers.
|
||||||
- [MediaKeys](/docs/en/media_keys.md) Control volume and other media functions
|
- [MediaKeys](/docs/media_keys.md) Control volume and other media functions
|
||||||
|
@@ -10,6 +10,6 @@ Retailers (USA)
|
|||||||
[BlueMicro Store on Tindie](https://www.tindie.com/products/jpconstantineau/pykey60-rgb-keyboard-pcb-with-a-rp2040/)
|
[BlueMicro Store on Tindie](https://www.tindie.com/products/jpconstantineau/pykey60-rgb-keyboard-pcb-with-a-rp2040/)
|
||||||
|
|
||||||
Extensions enabled by default
|
Extensions enabled by default
|
||||||
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
|
- [Layers](/docs/layers.md) Need more keys than switches? Use layers.
|
||||||
- [RGB](/docs/en/rgb.md) Light it up
|
- [RGB](/docs/rgb.md) Light it up
|
||||||
- [MediaKeys](/docs/en/media_keys.md) Control volume and other media functions
|
- [MediaKeys](/docs/media_keys.md) Control volume and other media functions
|
||||||
|
@@ -10,6 +10,6 @@ Retailers (USA)
|
|||||||
[BlueMicro Store on Tindie](https://www.tindie.com/products/jpconstantineau/47-keys-rgb-keyboard-using-raspberry-pi-pico/)
|
[BlueMicro Store on Tindie](https://www.tindie.com/products/jpconstantineau/47-keys-rgb-keyboard-using-raspberry-pi-pico/)
|
||||||
|
|
||||||
Extensions enabled by default
|
Extensions enabled by default
|
||||||
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
|
- [Layers](/docs/layers.md) Need more keys than switches? Use layers.
|
||||||
- [RGB](/docs/en/rgb.md) Light it up
|
- [RGB](/docs/rgb.md) Light it up
|
||||||
- [MediaKeys](/docs/en/media_keys.md) Control volume and other media functions
|
- [MediaKeys](/docs/media_keys.md) Control volume and other media functions
|
||||||
|
@@ -10,6 +10,6 @@ Retailers (USA)
|
|||||||
[BlueMicro Store on Tindie](https://www.tindie.com/products/jpconstantineau/43-keys-rgb-keyboard-using-raspberry-pi-pico/)
|
[BlueMicro Store on Tindie](https://www.tindie.com/products/jpconstantineau/43-keys-rgb-keyboard-using-raspberry-pi-pico/)
|
||||||
|
|
||||||
Extensions enabled by default
|
Extensions enabled by default
|
||||||
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
|
- [Layers](/docs/layers.md) Need more keys than switches? Use layers.
|
||||||
- [RGB](/docs/en/rgb.md) Light it up
|
- [RGB](/docs/rgb.md) Light it up
|
||||||
- [MediaKeys](/docs/en/media_keys.md) Control volume and other media functions
|
- [MediaKeys](/docs/media_keys.md) Control volume and other media functions
|
||||||
|
@@ -10,6 +10,6 @@ Retailers (USA)
|
|||||||
[BlueMicro Store on Tindie](https://www.tindie.com/products/jpconstantineau/low-profile-44-keys-rgb-keyboard-pcb-with-a-rp2040/)
|
[BlueMicro Store on Tindie](https://www.tindie.com/products/jpconstantineau/low-profile-44-keys-rgb-keyboard-pcb-with-a-rp2040/)
|
||||||
|
|
||||||
Extensions enabled by default
|
Extensions enabled by default
|
||||||
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
|
- [Layers](/docs/layers.md) Need more keys than switches? Use layers.
|
||||||
- [RGB](/docs/en/rgb.md) Light it up
|
- [RGB](/docs/rgb.md) Light it up
|
||||||
- [MediaKeys](/docs/en/media_keys.md) Control volume and other media functions
|
- [MediaKeys](/docs/media_keys.md) Control volume and other media functions
|
||||||
|
@@ -11,6 +11,6 @@ Retailers (USA)
|
|||||||
[BlueMicro Store on Tindie](https://www.tindie.com/products/jpconstantineau/44-keys-rgb-keyboard-using-raspberry-pi-pico/)
|
[BlueMicro Store on Tindie](https://www.tindie.com/products/jpconstantineau/44-keys-rgb-keyboard-using-raspberry-pi-pico/)
|
||||||
|
|
||||||
Extensions enabled by default
|
Extensions enabled by default
|
||||||
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
|
- [Layers](/docs/layers.md) Need more keys than switches? Use layers.
|
||||||
- [RGB](/docs/en/rgb.md) Light it up
|
- [RGB](/docs/rgb.md) Light it up
|
||||||
- [MediaKeys](/docs/en/media_keys.md) Control volume and other media functions
|
- [MediaKeys](/docs/media_keys.md) Control volume and other media functions
|
||||||
|
@@ -2,20 +2,14 @@
|
|||||||
|
|
||||||
A split keyboard with a 4x6 layout with additional 4 thumb buttons
|
A split keyboard with a 4x6 layout with additional 4 thumb buttons
|
||||||
|
|
||||||
|
kb.py is designed to work with the nice!nano
|
||||||
kb_converter.py is designed to work with an itsybitsy with converter board found [here](/hardware)
|
kb_converter.py is designed to work with an itsybitsy with converter board found [here](/hardware)
|
||||||
|
|
||||||
Extensions enabled by default
|
Extensions enabled by default
|
||||||
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
|
- [Layers](/docs/layers.md) Need more keys than switches? Use layers.
|
||||||
- [RGB](/docs/en/rgb.md) Light it up
|
- [RGB](/docs/rgb.md) Light it up
|
||||||
- [BLE_Split](/docs/en/split_keyboards.md) Connects halves without wires
|
- [BLE_Split](/docs/split_keyboards.md) Connects halves without wires
|
||||||
|
|
||||||
Common Extensions
|
Common Extensions
|
||||||
- [Split](/docs/en/split_keyboards.md) Connects halves using a wire
|
- [Split](/docs/split_keyboards.md) Connects halves using a wire
|
||||||
- [Power](/docs/en/power.md) Powersaving features for battery life
|
- [Power](/docs/power.md) Powersaving features for battery life
|
||||||
|
|
||||||
## Microcontroller support
|
|
||||||
|
|
||||||
Update this line in `kb.py` to any supported microcontroller in `kmk/quickpin/pro_micro`:
|
|
||||||
|
|
||||||
```python
|
|
||||||
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
|
|
||||||
|
@@ -1,35 +1,28 @@
|
|||||||
import board
|
import board
|
||||||
|
|
||||||
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
|
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
|
||||||
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
|
|
||||||
from kmk.scanners import DiodeOrientation
|
from kmk.scanners import DiodeOrientation
|
||||||
|
|
||||||
|
|
||||||
class KMKKeyboard(_KMKKeyboard):
|
class KMKKeyboard(_KMKKeyboard):
|
||||||
row_pins = (
|
row_pins = (board.P1_00, board.P0_11, board.P1_04, board.P0_08, board.P0_22)
|
||||||
board.pins[8],
|
|
||||||
board.pins[9],
|
|
||||||
board.pins[10],
|
|
||||||
board.pins[1],
|
|
||||||
board.pins[6],
|
|
||||||
)
|
|
||||||
col_pins = (
|
col_pins = (
|
||||||
board.pins[17],
|
board.P0_02,
|
||||||
board.pins[16],
|
board.P1_15,
|
||||||
board.pins[15],
|
board.P1_13,
|
||||||
board.pins[14],
|
board.P1_11,
|
||||||
board.pins[13],
|
board.P0_10,
|
||||||
board.pins[12],
|
board.P0_09,
|
||||||
)
|
)
|
||||||
diode_orientation = DiodeOrientation.COLUMNS
|
diode_orientation = DiodeOrientation.COLUMNS
|
||||||
led_pin = board.pins[11]
|
led_pin = board.P1_06
|
||||||
rgb_pixel_pin = pins[0]
|
rgb_pixel_pin = board.P0_06
|
||||||
rgb_num_pixels = 12
|
rgb_num_pixels = 12
|
||||||
i2c = board.I2C
|
i2c = board.I2C
|
||||||
data_pin = board.pins[5]
|
data_pin = board.P0_20
|
||||||
|
powersave_pin = board.P0_13
|
||||||
|
|
||||||
# flake8: noqa
|
# flake8: noqa
|
||||||
# fmt: off
|
|
||||||
coord_mapping = [
|
coord_mapping = [
|
||||||
0, 1, 2, 3, 4, 5, 35, 34, 33, 32, 31, 30,
|
0, 1, 2, 3, 4, 5, 35, 34, 33, 32, 31, 30,
|
||||||
6, 7, 8, 9, 10, 11, 41, 40, 39, 38, 37, 36,
|
6, 7, 8, 9, 10, 11, 41, 40, 39, 38, 37, 36,
|
||||||
|
@@ -2,21 +2,14 @@
|
|||||||
|
|
||||||
A split keyboard with a 4x6 layout
|
A split keyboard with a 4x6 layout
|
||||||
|
|
||||||
|
kb.py is designed to work with the nice!nano
|
||||||
kb_converter.py is designed to work with an itsybitsy with converter board found [here](/hardware)
|
kb_converter.py is designed to work with an itsybitsy with converter board found [here](/hardware)
|
||||||
|
|
||||||
Extensions enabled by default
|
Extensions enabled by default
|
||||||
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
|
- [Layers](/docs/layers.md) Need more keys than switches? Use layers.
|
||||||
- [RGB](/docs/en/rgb.md) Light it up
|
- [RGB](/docs/rgb.md) Light it up
|
||||||
- [BLE_Split](/docs/en/split_keyboards.md) Connects halves without wires
|
- [BLE_Split](/docs/split_keyboards.md) Connects halves without wires
|
||||||
|
|
||||||
Common Extensions
|
Common Extensions
|
||||||
- [Split](/docs/en/split_keyboards.md) Connects halves using a wire
|
- [Split](/docs/split_keyboards.md) Connects halves using a wire
|
||||||
- [Power](/docs/en/power.md) Powersaving features for battery life
|
- [Power](/docs/power.md) Powersaving features for battery life
|
||||||
|
|
||||||
## Microcontroller support
|
|
||||||
|
|
||||||
Update this line in `kb.py` to any supported microcontroller in `kmk/quickpin/pro_micro`:
|
|
||||||
|
|
||||||
```python
|
|
||||||
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
|
|
||||||
```
|
|
||||||
|
@@ -1,24 +1,23 @@
|
|||||||
import board
|
import board
|
||||||
|
|
||||||
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
|
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
|
||||||
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
|
|
||||||
from kmk.scanners import DiodeOrientation
|
from kmk.scanners import DiodeOrientation
|
||||||
|
|
||||||
|
|
||||||
class KMKKeyboard(_KMKKeyboard):
|
class KMKKeyboard(_KMKKeyboard):
|
||||||
row_pins = (board.pins[6], board.pins[8], board.pins[9], board.pins[10])
|
row_pins = (board.P0_22, board.P1_00, board.P0_11, board.P1_04)
|
||||||
col_pins = (
|
col_pins = (
|
||||||
board.pins[17],
|
board.P0_02,
|
||||||
board.pins[16],
|
board.P1_15,
|
||||||
board.pins[15],
|
board.P1_13,
|
||||||
board.pins[14],
|
board.P1_11,
|
||||||
board.pins[13],
|
board.P0_10,
|
||||||
board.pins[12],
|
board.P0_09,
|
||||||
)
|
)
|
||||||
diode_orientation = DiodeOrientation.COLUMNS
|
diode_orientation = DiodeOrientation.COLUMNS
|
||||||
rgb_pixel_pin = pins[0]
|
rgb_pixel_pin = board.P0_06
|
||||||
rgb_num_pixels = 12
|
rgb_num_pixels = 12
|
||||||
led_pin = board.pins[11]
|
led_pin = board.P1_06
|
||||||
data_pin = board.pins[1]
|
data_pin = board.P0_08
|
||||||
i2c = board.I2C
|
i2c = board.I2C
|
||||||
powersave_pin = board.P0_13
|
powersave_pin = board.P0_13
|
||||||
|
@@ -2,21 +2,15 @@
|
|||||||
|
|
||||||
A split keyboard with a 5x6 layout
|
A split keyboard with a 5x6 layout
|
||||||
|
|
||||||
|
kb.py is designed to work with the nice!nano
|
||||||
kb_converter.py is designed to work with an itsybitsy with converter board found [here](/hardware)
|
kb_converter.py is designed to work with an itsybitsy with converter board found [here](/hardware)
|
||||||
|
|
||||||
|
|
||||||
Extensions enabled by default
|
Extensions enabled by default
|
||||||
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
|
- [Layers](/docs/layers.md) Need more keys than switches? Use layers.
|
||||||
- [RGB](/docs/en/rgb.md) Light it up
|
- [RGB](/docs/rgb.md) Light it up
|
||||||
- [BLE_Split](/docs/en/split_keyboards.md) Connects halves without wires
|
- [BLE_Split](/docs/split_keyboards.md) Connects halves without wires
|
||||||
|
|
||||||
Common Extensions
|
Common Extensions
|
||||||
- [Split](/docs/en/split_keyboards.md) Connects halves using a wire
|
- [Split](/docs/split_keyboards.md) Connects halves using a wire
|
||||||
- [Power](/docs/en/power.md) Powersaving features for battery life
|
- [Power](/docs/power.md) Powersaving features for battery life
|
||||||
|
|
||||||
## Microcontroller support
|
|
||||||
|
|
||||||
Update this line in `kb.py` to any supported microcontroller in `kmk/quickpin/pro_micro`:
|
|
||||||
|
|
||||||
```python
|
|
||||||
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
|
|
||||||
|
@@ -1,29 +1,23 @@
|
|||||||
import board
|
import board
|
||||||
|
|
||||||
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
|
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
|
||||||
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
|
|
||||||
from kmk.scanners import DiodeOrientation
|
from kmk.scanners import DiodeOrientation
|
||||||
|
|
||||||
|
|
||||||
class KMKKeyboard(_KMKKeyboard):
|
class KMKKeyboard(_KMKKeyboard):
|
||||||
row_pins = (
|
row_pins = (board.P0_22, board.P1_00, board.P0_11, board.P1_04, board.P1_06)
|
||||||
board.pins[6],
|
|
||||||
board.pins[8],
|
|
||||||
board.pins[9],
|
|
||||||
board.pins[10],
|
|
||||||
board.pins[11],
|
|
||||||
)
|
|
||||||
col_pins = (
|
col_pins = (
|
||||||
board.pins[1],
|
board.P0_08,
|
||||||
board.pins[18],
|
board.P0_29,
|
||||||
board.pins[17],
|
board.P0_02,
|
||||||
board.pins[16],
|
board.P1_15,
|
||||||
board.pins[15],
|
board.P1_13,
|
||||||
board.pins[14],
|
board.P1_11,
|
||||||
)
|
)
|
||||||
diode_orientation = DiodeOrientation.COLUMNS
|
diode_orientation = DiodeOrientation.COLUMNS
|
||||||
rgb_pixel_pin = pins[0]
|
rgb_pixel_pin = board.P0_06
|
||||||
rgb_num_pixels = 12
|
rgb_num_pixels = 12
|
||||||
data_pin = board.pins[1]
|
data_pin = board.P0_08
|
||||||
led_pin = board.pins[12]
|
led_pin = board.P0_09
|
||||||
i2c = board.I2C
|
i2c = board.I2C
|
||||||
|
powersave_pin = board.P0_13
|
||||||
|
46
boards/klarank.py
Normal file
46
boards/klarank.py
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
import board
|
||||||
|
|
||||||
|
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
|
||||||
|
from kmk.modules.layers import Layers
|
||||||
|
from kmk.scanners import DiodeOrientation
|
||||||
|
from kmk.scanners import intify_coordinate as ic
|
||||||
|
|
||||||
|
# Implements what used to be handled by KMKKeyboard.swap_indicies for this
|
||||||
|
# board, by flipping various row3 (bottom physical row) keys so their
|
||||||
|
# coord_mapping matches what the user pressed (even if the wiring
|
||||||
|
# underneath is sending different coordinates)
|
||||||
|
_r3_swap_conversions = {3: 9, 4: 10, 5: 11, 9: 3, 10: 4, 11: 5}
|
||||||
|
|
||||||
|
|
||||||
|
def r3_swap(col):
|
||||||
|
try:
|
||||||
|
return _r3_swap_conversions[col]
|
||||||
|
except KeyError:
|
||||||
|
return col
|
||||||
|
|
||||||
|
|
||||||
|
class KMKKeyboard(_KMKKeyboard):
|
||||||
|
# physical, visible cols (SCK, MO, MI, RX, TX, D4)
|
||||||
|
# physical, visible rows (10, 11, 12, 13) (9, 6, 5, SCL)
|
||||||
|
col_pins = (board.SCK, board.MOSI, board.MISO, board.RX, board.TX, board.D4)
|
||||||
|
row_pins = (
|
||||||
|
board.D10,
|
||||||
|
board.D11,
|
||||||
|
board.D12,
|
||||||
|
board.D13,
|
||||||
|
board.D9,
|
||||||
|
board.D6,
|
||||||
|
board.D5,
|
||||||
|
board.SCL,
|
||||||
|
)
|
||||||
|
rollover_cols_every_rows = 4
|
||||||
|
diode_orientation = DiodeOrientation.COLUMNS
|
||||||
|
|
||||||
|
coord_mapping = []
|
||||||
|
coord_mapping.extend(ic(0, x, 12) for x in range(12))
|
||||||
|
coord_mapping.extend(ic(1, x, 12) for x in range(12))
|
||||||
|
coord_mapping.extend(ic(2, x, 12) for x in range(12))
|
||||||
|
coord_mapping.extend(ic(3, r3_swap(x), 12) for x in range(12))
|
||||||
|
|
||||||
|
layers_ext = Layers()
|
||||||
|
modules = [layers_ext]
|
@@ -8,10 +8,12 @@ was designed with QMK in mind and KMK implementation is not officially supported
|
|||||||
|
|
||||||
Keyboard works with controllers having Pro Micro layout. Existing configurations:
|
Keyboard works with controllers having Pro Micro layout. Existing configurations:
|
||||||
|
|
||||||
| PCB version | Board | Config file |
|
| PCB version | Board | Config file |
|
||||||
|:-----------:|-------------------------------------|---------------------------|
|
|:-----------:|----------------------------------------------------------------------|---------------------------|
|
||||||
| 1.* | Any quickpin pro micro based board. | kb_v1_ |
|
| 1.* | [SparkFun Pro Micro RP2040](https://www.sparkfun.com/products/18288) | kyria_v1_rp2040 |
|
||||||
| 2.* | Any quickpin pro micro based board. | _waiting for pinout docs_ |
|
| 1.* | [Adafruit KB2040](https://www.adafruit.com/product/5302) | kyria_v1_kb2040 |
|
||||||
|
| 2.* | [SparkFun Pro Micro RP2040](https://www.sparkfun.com/products/18288) | _waiting for pinout docs_ |
|
||||||
|
| 2.* | [Adafruit KB2040](https://www.adafruit.com/product/5302) | _waiting for pinout docs_ |
|
||||||
|
|
||||||
## Compatibility issues
|
## Compatibility issues
|
||||||
|
|
||||||
@@ -28,15 +30,15 @@ Current layout is based on default [QMK Kyria layout](https://config.qmk.fm/#/sp
|
|||||||
|
|
||||||
It has the following modules/extensions enabled:
|
It has the following modules/extensions enabled:
|
||||||
|
|
||||||
- [Split](/docs/en/split_keyboards.md) Connects halves using a wire
|
- [Split](/docs/split_keyboards.md) Connects halves using a wire
|
||||||
- [Layers](/docs/en/layers.md) Do you need more keys than switches? Use
|
- [Layers](/docs/layers.md) Do you need more keys than switches? Use
|
||||||
layers.
|
layers.
|
||||||
- [ModTap](/docs/en/modtap.md) Enable press/hold double binding of keys
|
- [ModTap](/docs/modtap.md) Enable press/hold double binding of keys
|
||||||
- [MediaKeys](/docs/en/media_keys.md) Common media controls
|
- [MediaKeys](/docs/media_keys.md) Common media controls
|
||||||
|
|
||||||
Also uncomment right section to enable samples of following:
|
Also uncomment right section to enable samples of following:
|
||||||
|
|
||||||
- [RGB](/docs/en/rgb.md) Turn on the backlight (**requires neopixel.py
|
- [RGB](/docs/rgb.md) Turn on the backlight (**requires neopixel.py
|
||||||
library to work**)
|
library to work**)
|
||||||
- [Encoder](docs/encoder.md) Make the knobs do something
|
- [Encoder](docs/encoder.md) Make the knobs do something
|
||||||
|
|
||||||
@@ -49,11 +51,3 @@ Because of the above, besides of normal installation steps, you have to also:
|
|||||||
|
|
||||||
- install Circuit Python in 7.2+ version
|
- install Circuit Python in 7.2+ version
|
||||||
- add `adafruit_pioasm.mpy` library to lib or root folder of a board
|
- add `adafruit_pioasm.mpy` library to lib or root folder of a board
|
||||||
|
|
||||||
## Microcontroller support
|
|
||||||
|
|
||||||
Update this line in `kb.py` to any supported microcontroller in `kmk/quickpin/pro_micro`:
|
|
||||||
|
|
||||||
```python
|
|
||||||
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
|
|
||||||
```
|
|
||||||
|
@@ -1,26 +1,27 @@
|
|||||||
|
import board
|
||||||
|
|
||||||
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
|
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
|
||||||
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
|
|
||||||
from kmk.scanners import DiodeOrientation
|
from kmk.scanners import DiodeOrientation
|
||||||
from kmk.scanners import intify_coordinate as ic
|
from kmk.scanners import intify_coordinate as ic
|
||||||
|
|
||||||
|
|
||||||
class KMKKeyboard(_KMKKeyboard):
|
class KMKKeyboard(_KMKKeyboard):
|
||||||
col_pins = (
|
col_pins = (
|
||||||
pins[19],
|
board.A3,
|
||||||
pins[18],
|
board.A2,
|
||||||
pins[17],
|
board.A1,
|
||||||
pins[16],
|
board.A0,
|
||||||
pins[15],
|
board.SCK,
|
||||||
pins[14],
|
board.MISO,
|
||||||
pins[13],
|
board.MOSI,
|
||||||
pins[12],
|
board.D10,
|
||||||
)
|
)
|
||||||
row_pins = (pins[10], pins[9], pins[8], pins[6])
|
row_pins = (board.D8, board.D7, board.D6, board.D4)
|
||||||
diode_orientation = DiodeOrientation.COL2ROW
|
diode_orientation = DiodeOrientation.COL2ROW
|
||||||
data_pin = pins[1]
|
data_pin = board.D1
|
||||||
rgb_pixel_pin = pins[0]
|
rgb_pixel_pin = board.D0
|
||||||
encoder_pin_0 = pins[11]
|
encoder_pin_0 = board.D9
|
||||||
encoder_pin_1 = pins[7]
|
encoder_pin_1 = board.D5
|
||||||
|
|
||||||
coord_mapping = []
|
coord_mapping = []
|
||||||
coord_mapping.extend(ic(0, x, 8) for x in range(6))
|
coord_mapping.extend(ic(0, x, 8) for x in range(6))
|
34
boards/kyria/kyria_v1_rp2040.py
Normal file
34
boards/kyria/kyria_v1_rp2040.py
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
import board
|
||||||
|
|
||||||
|
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
|
||||||
|
from kmk.scanners import DiodeOrientation
|
||||||
|
from kmk.scanners import intify_coordinate as ic
|
||||||
|
|
||||||
|
|
||||||
|
class KMKKeyboard(_KMKKeyboard):
|
||||||
|
col_pins = (
|
||||||
|
board.D29,
|
||||||
|
board.D28,
|
||||||
|
board.D27,
|
||||||
|
board.D26,
|
||||||
|
board.D22,
|
||||||
|
board.D20,
|
||||||
|
board.D23,
|
||||||
|
board.D21,
|
||||||
|
)
|
||||||
|
row_pins = (board.D8, board.D7, board.D6, board.D4)
|
||||||
|
diode_orientation = DiodeOrientation.COL2ROW
|
||||||
|
data_pin = board.RX
|
||||||
|
rgb_pixel_pin = board.D0
|
||||||
|
encoder_pin_0 = board.D9
|
||||||
|
encoder_pin_1 = board.D5
|
||||||
|
|
||||||
|
coord_mapping = []
|
||||||
|
coord_mapping.extend(ic(0, x, 8) for x in range(6))
|
||||||
|
coord_mapping.extend(ic(4, x, 8) for x in range(5, -1, -1))
|
||||||
|
coord_mapping.extend(ic(1, x, 8) for x in range(6))
|
||||||
|
coord_mapping.extend(ic(5, x, 8) for x in range(5, -1, -1))
|
||||||
|
coord_mapping.extend(ic(2, x, 8) for x in range(8))
|
||||||
|
coord_mapping.extend(ic(6, x, 8) for x in range(7, -1, -1))
|
||||||
|
coord_mapping.extend(ic(3, x, 8) for x in range(3, 8))
|
||||||
|
coord_mapping.extend(ic(7, x, 8) for x in range(7, 2, -1))
|
@@ -2,29 +2,19 @@
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
The Lily58 is a 58 key split keyboard design by kata0510, featuring a 6x4
|
The Lily58 is a 58 key split keyboard design by kata0510, featuring a 6x4 columnar stagger and 4 thumb cluster keys on each hand. The Lily58 is a perfect choice for people who want to be on a split keyboard but still want to have a fairly standard amount of keys.
|
||||||
columnar stagger and 4 thumb cluster keys on each hand. The Lily58 is a perfect
|
|
||||||
choice for people who want to be on a split keyboard but still want to have a
|
|
||||||
fairly standard amount of keys.
|
|
||||||
|
|
||||||
Hardware Availability: [PCB & Case Source](https://github.com/kata0510/Lily58)
|
Hardware Availability: [PCB & Case Source](https://github.com/kata0510/Lily58)
|
||||||
|
kb.py is designed to work with the nice!nano
|
||||||
|
|
||||||
Retailers (USA)
|
Retailers (USA)
|
||||||
[Boardsource](https://boardsource.xyz/store/5ec9df84c6b834480de6c3d0)
|
[Boardsource](https://boardsource.xyz/store/5ec9df84c6b834480de6c3d0)
|
||||||
|
|
||||||
Extensions enabled by default
|
Extensions enabled by default
|
||||||
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
|
- [Layers](/docs/layers.md) Need more keys than switches? Use layers.
|
||||||
- [RGB](/docs/en/rgb.md) Light it up
|
- [RGB](/docs/rgb.md) Light it up
|
||||||
- [BLE_Split](/docs/en/split.md) Connects halves without wires
|
- [BLE_Split](/docs/split.md) Connects halves without wires
|
||||||
|
|
||||||
Common Extensions
|
Common Extensions
|
||||||
- [Split](/docs/en/split.md) Connects halves using a wire
|
- [Split](/docs/split.md) Connects halves using a wire
|
||||||
- [Power](/docs/en/power.md) Powersaving features for battery life
|
- [Power](/docs/power.md) Powersaving features for battery life
|
||||||
|
|
||||||
## Microcontroller support
|
|
||||||
|
|
||||||
Update this line in `kb.py` to any supported microcontroller in `kmk/quickpin/pro_micro`:
|
|
||||||
|
|
||||||
```python
|
|
||||||
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
|
|
||||||
```
|
|
||||||
|
@@ -1,34 +1,27 @@
|
|||||||
import board
|
import board
|
||||||
|
|
||||||
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
|
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
|
||||||
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
|
|
||||||
from kmk.scanners import DiodeOrientation
|
from kmk.scanners import DiodeOrientation
|
||||||
|
|
||||||
|
|
||||||
class KMKKeyboard(_KMKKeyboard):
|
class KMKKeyboard(_KMKKeyboard):
|
||||||
col_pins = (
|
col_pins = (
|
||||||
board.pins[17],
|
board.P0_02,
|
||||||
board.pins[16],
|
board.P1_15,
|
||||||
board.pins[15],
|
board.P1_13,
|
||||||
board.pins[14],
|
board.P1_11,
|
||||||
board.pins[13],
|
board.P0_10,
|
||||||
board.pins[12],
|
board.P0_09,
|
||||||
)
|
|
||||||
row_pins = (
|
|
||||||
board.pins[7],
|
|
||||||
board.pins[8],
|
|
||||||
board.pins[9],
|
|
||||||
board.pins[10],
|
|
||||||
board.pins[11],
|
|
||||||
)
|
)
|
||||||
|
row_pins = (board.P0_24, board.P1_00, board.P0_11, board.P1_04, board.P1_06)
|
||||||
diode_orientation = DiodeOrientation.COLUMNS
|
diode_orientation = DiodeOrientation.COLUMNS
|
||||||
uart_pin = board.pins[1]
|
uart_pin = board.P0_08
|
||||||
rgb_pixel_pin = pins[0]
|
rgb_pixel_pin = board.P0_06
|
||||||
data_pin = board.pins[1]
|
data_pin = board.P0_08
|
||||||
i2c = board.I2C
|
i2c = board.I2C
|
||||||
|
powersave_pin = board.P0_13
|
||||||
|
|
||||||
# flake8: noqa
|
# flake8: noqa
|
||||||
# fmt: off
|
|
||||||
coord_mapping = [
|
coord_mapping = [
|
||||||
0, 1, 2, 3, 4, 5, 36, 35, 34, 33, 32, 31,
|
0, 1, 2, 3, 4, 5, 36, 35, 34, 33, 32, 31,
|
||||||
6, 7, 8, 9, 10, 11, 42, 41, 40, 39, 38, 37,
|
6, 7, 8, 9, 10, 11, 42, 41, 40, 39, 38, 37,
|
||||||
|
@@ -10,8 +10,8 @@ Retailers (USA)
|
|||||||
[KeyHive](https://keyhive.xyz/shop/may-pad)
|
[KeyHive](https://keyhive.xyz/shop/may-pad)
|
||||||
|
|
||||||
Extensions enabled by default
|
Extensions enabled by default
|
||||||
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
|
- [Layers](/docs/layers.md) Need more keys than switches? Use layers.
|
||||||
- [MediaKeys](/docs/en/media_keys.md) Control volume and other media functions
|
- [MediaKeys](/docs/media_keys.md) Control volume and other media functions
|
||||||
|
|
||||||
Common Extensions
|
Common Extensions
|
||||||
- [Power](/docs/en/power.md) Powersaving features for battery life
|
- [Power](/docs/power.md) Powersaving features for battery life
|
||||||
|
@@ -10,8 +10,8 @@ Retailers (USA)
|
|||||||
[KeyHive](https://keyhive.xyz/shop/navi10)
|
[KeyHive](https://keyhive.xyz/shop/navi10)
|
||||||
|
|
||||||
Extensions enabled by default
|
Extensions enabled by default
|
||||||
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
|
- [Layers](/docs/layers.md) Need more keys than switches? Use layers.
|
||||||
- [MediaKeys](/docs/en/media_keys.md) Control volume and other media functions
|
- [MediaKeys](/docs/media_keys.md) Control volume and other media functions
|
||||||
|
|
||||||
Common Extensions
|
Common Extensions
|
||||||
- [Power](/docs/en/power.md) Powersaving features for battery life
|
- [Power](/docs/power.md) Powersaving features for battery life
|
||||||
|
@@ -23,6 +23,6 @@ use CircuitPython's `keypad.Keys` module instead of the regular KMK matrix scann
|
|||||||
- [Keybow 2040](https://core-electronics.com.au/pimoroni-keybow-2040-tactile-keys.html)
|
- [Keybow 2040](https://core-electronics.com.au/pimoroni-keybow-2040-tactile-keys.html)
|
||||||
|
|
||||||
Extensions enabled by default
|
Extensions enabled by default
|
||||||
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
|
- [Layers](/docs/layers.md) Need more keys than switches? Use layers.
|
||||||
- [RGB](/docs/en/rgb.md) Light it up (Keybow only so far)
|
- [RGB](/docs/rgb.md) Light it up (Keybow only so far)
|
||||||
- [MediaKeys](/docs/en/media_keys.md) Control volume and other media functions
|
- [MediaKeys](/docs/media_keys.md) Control volume and other media functions
|
||||||
|
@@ -2,10 +2,7 @@
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
Reviung39 is a 39 key keyboard designed by gtips. The Reviung39 sits somewhere
|
Reviung39 is a 39 key keyboard designed by gtips. The Reviung39 sits somewhere between an Atreus and a Corne, you get some nice ergonomic benefits based on its quasi-split design and since a true split keyboard isn't for everyone, this is an awesome middle ground. I find this keyboard extremely comfortable to use.
|
||||||
between an Atreus and a Corne, you get some nice ergonomic benefits based on its
|
|
||||||
quasi-split design and since a true split keyboard isn't for everyone, this is
|
|
||||||
an awesome middle ground. I find this keyboard extremely comfortable to use.
|
|
||||||
|
|
||||||
kb.py is designed to work with the nice!nano
|
kb.py is designed to work with the nice!nano
|
||||||
|
|
||||||
@@ -15,17 +12,9 @@ Retailers (USA)
|
|||||||
[Boardsource](https://boardsource.xyz/store/5ecb734486879c9a0c22dab3)
|
[Boardsource](https://boardsource.xyz/store/5ecb734486879c9a0c22dab3)
|
||||||
|
|
||||||
Extensions enabled by default
|
Extensions enabled by default
|
||||||
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
|
- [Layers](/docs/layers.md) Need more keys than switches? Use layers.
|
||||||
- [RGB](/docs/en/rgb.md) Light it up
|
- [RGB](/docs/rgb.md) Light it up
|
||||||
- [ModTap](/docs/en/modtap.md) Allows mod keys to act as different keys when tapped.
|
- [ModTap](/docs/modtap.md) Allows mod keys to act as different keys when tapped.
|
||||||
|
|
||||||
Common Extensions
|
Common Extensions
|
||||||
- [Power](/docs/en/power.md) Powersaving features for battery life
|
- [Power](/docs/power.md) Powersaving features for battery life
|
||||||
|
|
||||||
## Microcontroller support
|
|
||||||
|
|
||||||
Update this line in `kb.py` to any supported microcontroller in `kmk/quickpin/pro_micro`:
|
|
||||||
|
|
||||||
```python
|
|
||||||
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
|
|
||||||
```
|
|
||||||
|
@@ -1,27 +1,27 @@
|
|||||||
import board
|
import board
|
||||||
|
|
||||||
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
|
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
|
||||||
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
|
|
||||||
from kmk.scanners import DiodeOrientation
|
from kmk.scanners import DiodeOrientation
|
||||||
|
|
||||||
|
|
||||||
class KMKKeyboard(_KMKKeyboard):
|
class KMKKeyboard(_KMKKeyboard):
|
||||||
row_pins = (
|
row_pins = (
|
||||||
pins[19],
|
board.P0_31,
|
||||||
pins[18],
|
board.P0_29,
|
||||||
pins[17],
|
board.P0_02,
|
||||||
pins[16],
|
board.P1_15,
|
||||||
pins[15],
|
board.P1_13,
|
||||||
pins[14],
|
board.P1_11,
|
||||||
pins[13],
|
board.P0_10,
|
||||||
)
|
)
|
||||||
col_pins = (
|
col_pins = (
|
||||||
pins[6],
|
board.P0_22,
|
||||||
pins[7],
|
board.P0_24,
|
||||||
pins[8],
|
board.P1_00,
|
||||||
pins[9],
|
board.P0_11,
|
||||||
pins[10],
|
board.P1_04,
|
||||||
pins[11],
|
board.P1_06,
|
||||||
)
|
)
|
||||||
diode_orientation = DiodeOrientation.COLUMNS
|
diode_orientation = DiodeOrientation.COLUMNS
|
||||||
i2c = board.I2C
|
i2c = board.I2C
|
||||||
|
powersave_pin = board.P0_13
|
||||||
|
@@ -2,13 +2,9 @@
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
The Reviung41 is a 41 key keyboard designed by gtips, it is a slightly larger
|
The Reviung41 is a 41 key keyboard designed by gtips, it is a slightly larger version of the popular Reviung 39. These "split non-split" keyboards offer a lot of features split keyboards have in terms of comfort and ergonomics but do so in a single-piece package. Many people consider keyboards in this style easier to travel with since you don't have to manage two halves and there is of course no need for a TRRS cable. This board sits somewhere between and Atreus and Corne, and it is extremely comfortable to use.
|
||||||
version of the popular Reviung 39. These "split non-split" keyboards offer a lot
|
|
||||||
of features split keyboards have in terms of comfort and ergonomics but do so in
|
kb.py is designed to work with the nice!nano
|
||||||
a single-piece package. Many people consider keyboards in this style easier to
|
|
||||||
travel with since you don't have to manage two halves and there is of course no
|
|
||||||
need for a TRRS cable. This board sits somewhere between and Atreus and Corne,
|
|
||||||
and it is extremely comfortable to use.
|
|
||||||
|
|
||||||
Hardware Availability: [PCB & Case Data](https://github.com/gtips/reviung/tree/master/reviung41)
|
Hardware Availability: [PCB & Case Data](https://github.com/gtips/reviung/tree/master/reviung41)
|
||||||
|
|
||||||
@@ -16,16 +12,9 @@ Retailers (USA)
|
|||||||
[Boardsource](https://boardsource.xyz/store/5f2ef1b52bf5e8714a60f613)
|
[Boardsource](https://boardsource.xyz/store/5f2ef1b52bf5e8714a60f613)
|
||||||
|
|
||||||
Extensions enabled by default
|
Extensions enabled by default
|
||||||
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
|
- [Layers](/docs/layers.md) Need more keys than switches? Use layers.
|
||||||
- [RGB](/docs/en/rgb.md) Light it up
|
- [RGB](/docs/rgb.md) Light it up
|
||||||
- [ModTap](/docs/en/modtap.md) Allows mod keys to act as different keys when tapped.
|
- [ModTap](/docs/modtap.md) Allows mod keys to act as different keys when tapped.
|
||||||
|
|
||||||
Common Extensions
|
Common Extensions
|
||||||
- [Power](/docs/en/power.md) Powersaving features for battery life
|
- [Power](/docs/power.md) Powersaving features for battery life
|
||||||
|
|
||||||
## Microcontroller support
|
|
||||||
|
|
||||||
Update this line in `kb.py` to any supported microcontroller in `kmk/quickpin/pro_micro`:
|
|
||||||
|
|
||||||
```python
|
|
||||||
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
|
|
||||||
|
@@ -1,33 +1,33 @@
|
|||||||
import board
|
import board
|
||||||
|
|
||||||
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
|
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
|
||||||
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
|
|
||||||
from kmk.scanners import DiodeOrientation
|
from kmk.scanners import DiodeOrientation
|
||||||
from kmk.scanners import intify_coordinate as ic
|
from kmk.scanners import intify_coordinate as ic
|
||||||
|
|
||||||
|
|
||||||
class KMKKeyboard(_KMKKeyboard):
|
class KMKKeyboard(_KMKKeyboard):
|
||||||
col_pins = (
|
col_pins = (
|
||||||
pins[6],
|
board.P0_22,
|
||||||
pins[7],
|
board.P0_24,
|
||||||
pins[8],
|
board.P1_00,
|
||||||
pins[9],
|
board.P0_11,
|
||||||
pins[10],
|
board.P1_04,
|
||||||
pins[11],
|
board.P1_06,
|
||||||
)
|
)
|
||||||
row_pins = (
|
row_pins = (
|
||||||
pins[19],
|
board.P0_31,
|
||||||
pins[18],
|
board.P0_29,
|
||||||
pins[17],
|
board.P0_02,
|
||||||
pins[16],
|
board.P1_15,
|
||||||
pins[15],
|
board.P1_13,
|
||||||
pins[14],
|
board.P1_11,
|
||||||
pins[13],
|
board.P0_10,
|
||||||
)
|
)
|
||||||
diode_orientation = DiodeOrientation.COLUMNS
|
diode_orientation = DiodeOrientation.COLUMNS
|
||||||
rgb_pixel_pin = pins[0]
|
rgb_pixel_pin = board.P0_06
|
||||||
rgb_num_pixels = 11
|
rgb_num_pixels = 11
|
||||||
i2c = board.I2C
|
i2c = board.I2C
|
||||||
|
powersave_pin = board.P0_13
|
||||||
|
|
||||||
coord_mapping = []
|
coord_mapping = []
|
||||||
coord_mapping.extend(ic(0, x, 12) for x in range(12))
|
coord_mapping.extend(ic(0, x, 12) for x in range(12))
|
||||||
|
@@ -2,28 +2,18 @@
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
The Rhymestone is 40-key ortholinear split keyboard. Originally the Rhymestone
|
The Rhymestone is 40-key ortholinear split keyboard. Originally the Rhymestone was created to be sold alongside the Treadstone and used as either a Macro pad or a 10-key numpad, hence the similar naming conventions. However; the Rhymestone is also often used as a standalone split keyboard by people who prefer a 5 column ortholinear layout.
|
||||||
was created to be sold alongside the Treadstone and used as either a Macro pad
|
|
||||||
or a 10-key numpad, hence the similar naming conventions. However; the
|
kb.py is designed to work with the nice!nano
|
||||||
Rhymestone is also often used as a standalone split keyboard by people who
|
|
||||||
prefer a 5 column ortholinear layout.
|
|
||||||
|
|
||||||
Retailers (USA)
|
Retailers (USA)
|
||||||
[Boardsource](https://boardsource.xyz/store/5ecb6aee86879c9a0c22da89)
|
[Boardsource](https://boardsource.xyz/store/5ecb6aee86879c9a0c22da89)
|
||||||
|
|
||||||
Extensions enabled by default
|
Extensions enabled by default
|
||||||
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
|
- [Layers](/docs/layers.md) Need more keys than switches? Use layers.
|
||||||
- [BLE_Split](/docs/en/split_keyboards.md) Connects halves without wires
|
- [BLE_Split](/docs/split_keyboards.md) Connects halves without wires
|
||||||
- [ModTap](/docs/en/modtap.md) Allows mod keys to act as different keys when tapped.
|
- [ModTap](/docs/modtap.md) Allows mod keys to act as different keys when tapped.
|
||||||
|
|
||||||
Common Extensions
|
Common Extensions
|
||||||
- [Split](/docs/en/split_keyboards.md) Connects halves using a wire
|
- [Split](/docs/split_keyboards.md) Connects halves using a wire
|
||||||
- [Power](/docs/en/power.md) Powersaving features for battery life
|
- [Power](/docs/power.md) Powersaving features for battery life
|
||||||
|
|
||||||
## Microcontroller support
|
|
||||||
|
|
||||||
Update this line in `kb.py` to any supported microcontroller in `kmk/quickpin/pro_micro`:
|
|
||||||
|
|
||||||
```python
|
|
||||||
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
|
|
||||||
```
|
|
||||||
|
@@ -1,21 +1,15 @@
|
|||||||
import board
|
import board
|
||||||
|
|
||||||
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
|
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
|
||||||
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
|
|
||||||
from kmk.scanners import DiodeOrientation
|
from kmk.scanners import DiodeOrientation
|
||||||
|
|
||||||
|
|
||||||
class KMKKeyboard(_KMKKeyboard):
|
class KMKKeyboard(_KMKKeyboard):
|
||||||
row_pins = (board.pins[19], board.pins[18], board.pins[17], board.pins[16])
|
row_pins = (board.P0_31, board.P0_29, board.P0_02, board.P1_15)
|
||||||
col_pins = (
|
col_pins = (board.P0_22, board.P0_24, board.P1_00, board.P0_11, board.P1_04)
|
||||||
board.pins[6],
|
|
||||||
board.pins[7],
|
|
||||||
board.pins[8],
|
|
||||||
board.pins[9],
|
|
||||||
board.pins[10],
|
|
||||||
)
|
|
||||||
diode_orientation = DiodeOrientation.COLUMNS
|
diode_orientation = DiodeOrientation.COLUMNS
|
||||||
rgb_pixel_pin = pins[0]
|
rgb_pixel_pin = board.P0_06
|
||||||
rgb_num_pixels = 40
|
rgb_num_pixels = 40
|
||||||
data_pin = board.pins[1]
|
data_pin = board.P0_08
|
||||||
i2c = board.I2C
|
i2c = board.I2C
|
||||||
|
powersave_pin = board.P0_13
|
||||||
|
@@ -13,10 +13,10 @@ Retailers
|
|||||||
[Ergomech Store (Vietnam)](https://ergomech.store/shop/product/sofle-v2-2#attr=5,23)
|
[Ergomech Store (Vietnam)](https://ergomech.store/shop/product/sofle-v2-2#attr=5,23)
|
||||||
|
|
||||||
Extentions enabled by default
|
Extentions enabled by default
|
||||||
- [Layers](/docs/en/layers.md) "Layers module adds keys for accessing other layers."
|
- [Layers](/docs/layers.md) "Layers module adds keys for accessing other layers."
|
||||||
- [Split](/docs/en/split_keyboards.md) Connects halves with or without wires (currently uses wires)
|
- [Split](/docs/split_keyboards.md) Connects halves with or without wires (currently uses wires)
|
||||||
- You must add the `adafruit_pioasm.mpy` to the `lib` folder on the RP2040 for this code to work. More about this is described [here](/docs/en/split_keyboards.md#rp2040-pio-implementation).
|
- You must add the `adafruit_pioasm.mpy` to the `lib` folder on the RP2040 for this code to work. More about this is described [here](/docs/split_keyboards.md#rp2040-pio-implementation).
|
||||||
- [Encoder](/docs/en/encoder.md) "Add twist control to your keyboard!"
|
- [Encoder](/docs/encoder.md) "Add twist control to your keyboard!"
|
||||||
|
|
||||||
## Notes
|
## Notes
|
||||||
|
|
||||||
|
@@ -2,24 +2,16 @@
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
TG4X is a 45% staggered keyboard, compared to a standard 40% stagger it has one
|
TG4X is a 45% staggered keyboard, compared to a standard 40% stagger it has one additional column which makes it an approachable and highly use-able 40%-ish stagger.
|
||||||
additional column which makes it an approachable and highly use-able 40%-ish
|
|
||||||
stagger.
|
kb.py is designed to work with the nice!nano
|
||||||
|
|
||||||
Retailers (USA)
|
Retailers (USA)
|
||||||
[Boardsource](https://boardsource.xyz/store/5eff7ead037395179221b90c)
|
[Boardsource](https://boardsource.xyz/store/5eff7ead037395179221b90c)
|
||||||
|
|
||||||
Extensions enabled by default
|
Extensions enabled by default
|
||||||
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
|
- [Layers](/docs/layers.md) Need more keys than switches? Use layers.
|
||||||
- [RGB](/docs/en/rgb.md) Light it up
|
- [RGB](/docs/rgb.md) Light it up
|
||||||
|
|
||||||
Common Extensions
|
Common Extensions
|
||||||
- [Power](/docs/en/power.md) Powersaving features for battery life
|
- [Power](/docs/power.md) Powersaving features for battery life
|
||||||
|
|
||||||
## Microcontroller support
|
|
||||||
|
|
||||||
Update this line in `kb.py` to any supported microcontroller in `kmk/quickpin/pro_micro`:
|
|
||||||
|
|
||||||
```python
|
|
||||||
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
|
|
||||||
```
|
|
||||||
|
@@ -1,31 +1,31 @@
|
|||||||
import board
|
import board
|
||||||
|
|
||||||
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
|
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
|
||||||
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
|
|
||||||
from kmk.scanners import DiodeOrientation
|
from kmk.scanners import DiodeOrientation
|
||||||
|
|
||||||
|
|
||||||
class KMKKeyboard(_KMKKeyboard):
|
class KMKKeyboard(_KMKKeyboard):
|
||||||
row_pins = (
|
row_pins = (
|
||||||
board.pins[11],
|
board.P1_06,
|
||||||
board.pins[10],
|
board.P1_04,
|
||||||
board.pins[9],
|
board.P0_11,
|
||||||
board.pins[8],
|
board.P1_00,
|
||||||
board.pins[7],
|
board.P0_24,
|
||||||
board.pins[6],
|
board.P0_22,
|
||||||
board.pins[5],
|
board.P0_20,
|
||||||
board.pins[4],
|
board.P0_17,
|
||||||
)
|
)
|
||||||
col_pins = [
|
col_pins = [
|
||||||
pins[0],
|
board.P0_06,
|
||||||
board.pins[14],
|
board.P1_11,
|
||||||
board.pins[15],
|
board.P1_13,
|
||||||
board.pins[16],
|
board.P1_15,
|
||||||
board.pins[17],
|
board.P0_02,
|
||||||
board.pins[18],
|
board.P0_29,
|
||||||
board.pins[19],
|
board.P0_31,
|
||||||
]
|
]
|
||||||
diode_orientation = DiodeOrientation.COLUMNS
|
diode_orientation = DiodeOrientation.COLUMNS
|
||||||
rgb_pixel_pin = board.pins[1]
|
rgb_pixel_pin = board.P0_08
|
||||||
rgb_num_pixels = 6
|
rgb_num_pixels = 6
|
||||||
i2c = board.I2C
|
i2c = board.I2C
|
||||||
|
powersave_pin = board.P0_13
|
||||||
|
@@ -1,10 +1,10 @@
|
|||||||
import board
|
import board
|
||||||
|
|
||||||
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
|
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
|
||||||
from kmk.quickpin.pro_micro.avr_promicro import translate as avr
|
|
||||||
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
|
|
||||||
from kmk.scanners import DiodeOrientation
|
from kmk.scanners import DiodeOrientation
|
||||||
from kmk.scanners.keypad import MatrixScanner
|
from kmk.scanners.keypad import MatrixScanner
|
||||||
|
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
|
||||||
|
from kmk.quickpin.pro_Micro.avr_promicro import avr
|
||||||
|
|
||||||
|
|
||||||
class KMKKeyboard(_KMKKeyboard):
|
class KMKKeyboard(_KMKKeyboard):
|
||||||
|
3
boot.py
Normal file → Executable file
3
boot.py
Normal file → Executable file
@@ -0,0 +1,3 @@
|
|||||||
|
import supervisor
|
||||||
|
|
||||||
|
supervisor.set_next_stack_limit(4096 + 4096)
|
||||||
|
@@ -76,10 +76,8 @@ You can also get ideas from the various [user examples](https://github.com/KMKfw
|
|||||||
|
|
||||||
In case you need it, debugging help can be found [here](debugging.md)
|
In case you need it, debugging help can be found [here](debugging.md)
|
||||||
|
|
||||||
For asynchronous support and chatter about KMK, [join our Zulip
|
If you need support with KMK or just want to say hi, find us in
|
||||||
community](https://kmkfw.zulipchat.com)!
|
[#kmkfw:klar.sh on Matrix](https://matrix.to/#/#kmkfw:klar.sh). This channel is
|
||||||
|
bridged to Discord [here](https://discordapp.com/widget?id=493256121075761173&theme=dark)
|
||||||
If you ask for help in chat or open a bug report, if possible
|
for convenience. If you ask for help in chat or open a bug report, if possible
|
||||||
make sure your copy of KMK is up-to-date.
|
make sure your copy of KMK is up-to-date.
|
||||||
In particular, swing by the Zulip chat *before* opening a GitHub Issue about
|
|
||||||
configuration, documentation, etc. concerns.
|
|
@@ -1,6 +1,6 @@
|
|||||||
# Documentation index
|
# Documentation index
|
||||||
|
|
||||||
> Before you look further, you probably want to start with our [getting started guide](/docs/en/Getting_Started.md)
|
> Before you look further, you probably want to start with our [getting started guide](https://github.com/KMKfw/kmk_firmware/blob/master/docs/Getting_Started.md)
|
||||||
|
|
||||||
## Basics
|
## Basics
|
||||||
|
|
||||||
@@ -50,5 +50,5 @@
|
|||||||
|
|
||||||
## Language versions
|
## Language versions
|
||||||
|
|
||||||
- [Japanese getting started](https://github.com/KMKfw/kmk_firmware/tree/master/docs/ja/Getting_Started.md)
|
- [Japanese getting started](ja/Getting_Started.md)
|
||||||
- [Brazilian Portuguese](https://github.com/KMKfw/kmk_firmware/tree/master/docs/ptBR)
|
- [Brazilian Portuguese](https://github.com/KMKfw/kmk_firmware/tree/master/docs/ptBR)
|
@@ -12,7 +12,7 @@ Let's dive in!
|
|||||||
free to submit a pull request with your layout definitions!) and copy it over
|
free to submit a pull request with your layout definitions!) and copy it over
|
||||||
(either manually or, if you're adept with developer tooling and/or a command
|
(either manually or, if you're adept with developer tooling and/or a command
|
||||||
line, [our
|
line, [our
|
||||||
Makefile](/docs/en/flashing.md)).
|
Makefile](https://github.com/KMKfw/kmk_firmware/blob/master/docs/flashing.md)).
|
||||||
It's definitely recommended to keep a backup of your configuration somewhere
|
It's definitely recommended to keep a backup of your configuration somewhere
|
||||||
that isn't the microcontroller itself - MCUs die, CircuitPython may run into
|
that isn't the microcontroller itself - MCUs die, CircuitPython may run into
|
||||||
corruption bugs, or you might just have bad luck and delete the wrong file
|
corruption bugs, or you might just have bad luck and delete the wrong file
|
||||||
@@ -59,7 +59,7 @@ print(dir(board))
|
|||||||
- Import the global list of key definitions with `from kmk.keys import KC`. You
|
- Import the global list of key definitions with `from kmk.keys import KC`. You
|
||||||
can either print this out in the REPL as we did with `board` above, or simply
|
can either print this out in the REPL as we did with `board` above, or simply
|
||||||
look at [our Key
|
look at [our Key
|
||||||
documentation](/docs/en/keycodes.md).
|
documentation](https://github.com/KMKfw/kmk_firmware/blob/master/docs/keycodes.md).
|
||||||
We've tried to keep that listing reasonably up to date, but if it feels like
|
We've tried to keep that listing reasonably up to date, but if it feels like
|
||||||
something is missing, you may need to read through `kmk/keys.py` (and then
|
something is missing, you may need to read through `kmk/keys.py` (and then
|
||||||
open a ticket to tell us our docs are out of date, or open a PR and fix the
|
open a ticket to tell us our docs are out of date, or open a PR and fix the
|
@@ -6,7 +6,8 @@ to make contributing as easy as possible for everyone while maintaining a consis
|
|||||||
## Contributing Code
|
## Contributing Code
|
||||||
The following guidelines should ensure that any code contributed can be merged in as
|
The following guidelines should ensure that any code contributed can be merged in as
|
||||||
painlessly as possible. If you're unsure how to set up your development environment,
|
painlessly as possible. If you're unsure how to set up your development environment,
|
||||||
feel free to [join our Zulip community](https://kmkfw.zulipchat.com).
|
feel free to join the chat, [#kmkfw:klar.sh on Matrix](https://matrix.to/#/#kmkfw:klar.sh).
|
||||||
|
This channel is bridged to Discord [here](https://discord.gg/QBHUUpeGUd) for convenience.
|
||||||
|
|
||||||
### Code Style
|
### Code Style
|
||||||
|
|
||||||
@@ -27,9 +28,7 @@ to Black formatting as documented in `pyproject.toml`)
|
|||||||
Unit tests within the `tests` folder mock various CircuitPython modules to allow
|
Unit tests within the `tests` folder mock various CircuitPython modules to allow
|
||||||
them to be executed in a desktop development environment.
|
them to be executed in a desktop development environment.
|
||||||
|
|
||||||
Execute tests using the command `make unit-tests`. The `unit-tests` target
|
Execute tests using the command `python -m unittest`.
|
||||||
accepts an additional environment variable for selection of specific tests,
|
|
||||||
example `make unit-tests TESTS="tests.test_kmk_keys tests.test_layers"`.
|
|
||||||
|
|
||||||
## Contributing Documentation
|
## Contributing Documentation
|
||||||
While KMK welcomes documentation from anyone with and understanding of the issues
|
While KMK welcomes documentation from anyone with and understanding of the issues
|
@@ -1,9 +0,0 @@
|
|||||||
# Support
|
|
||||||
|
|
||||||
For asynchronous support and chatter about KMK, [join our Zulip
|
|
||||||
community](https://kmkfw.zulipchat.com)!
|
|
||||||
|
|
||||||
If you ask for help in chat or open a bug report, if possible
|
|
||||||
make sure your copy of KMK is up-to-date.
|
|
||||||
In particular, swing by the Zulip chat *before* opening a GitHub Issue about
|
|
||||||
configuration, documentation, etc. concerns.
|
|
@@ -1,7 +1,6 @@
|
|||||||
# Stringy Keymaps
|
# Stringy Keymaps
|
||||||
|
|
||||||
Enables referring to keys by `'NAME'` rather than `KC.NAME`.\
|
Enables referring to keys by `'NAME'` rather than `KC.NAME`.
|
||||||
This extension allows for a seamless integration of both string-based key references and standard keycodes.
|
|
||||||
|
|
||||||
For example:
|
For example:
|
||||||
|
|
||||||
@@ -14,9 +13,6 @@ from kmk.extensions.stringy_keymaps import StringyKeymaps
|
|||||||
# Indexed
|
# Indexed
|
||||||
# keyboard.keymap = [[ KC['A'], KC['B'], KC['RESET'] ]]
|
# keyboard.keymap = [[ KC['A'], KC['B'], KC['RESET'] ]]
|
||||||
|
|
||||||
# String names mixed with normal keycodes
|
|
||||||
# keyboard.keymap = [[ 'A' , KC.B, KC.RESET ]]
|
|
||||||
|
|
||||||
# String names
|
# String names
|
||||||
keyboard.keymap = [[ 'A' , 'B', 'RESET' ]]
|
keyboard.keymap = [[ 'A' , 'B', 'RESET' ]]
|
||||||
|
|
||||||
@@ -31,5 +27,3 @@ keyboard.extensions.append(stringyKeymaps)
|
|||||||
|
|
||||||
It should be noted that these are **not** ASCII. The string is **not** what
|
It should be noted that these are **not** ASCII. The string is **not** what
|
||||||
will be sent to the computer. The examples above have no functional difference.
|
will be sent to the computer. The examples above have no functional difference.
|
||||||
|
|
||||||
When utilizing argumented keys, such as `KC.MO(layer)`, it's not possible to use a string like `'MO(layer)'` instead employ the standard notation of e.g. `KC.MO(1)` in your keymap.
|
|
@@ -9,7 +9,9 @@ Linux).
|
|||||||
Given `make` and `rsync` are available on your system (in `$PATH`), the
|
Given `make` and `rsync` are available on your system (in `$PATH`), the
|
||||||
following will copy the `kmk` tree to your CircuitPython device, and will copy
|
following will copy the `kmk` tree to your CircuitPython device, and will copy
|
||||||
the file defined as `USER_KEYMAP` as your `main.py`. It will also copy our
|
the file defined as `USER_KEYMAP` as your `main.py`. It will also copy our
|
||||||
`boot.py`. If any of these files exist on your CircuitPython device already, they
|
`boot.py`, which allocates a larger stack size (simply - more of the device's
|
||||||
|
RAM will be available to KMK and your keyboard config) than CircuitPython's
|
||||||
|
default. If any of these files exist on your CircuitPython device already, they
|
||||||
will be overwritten without a prompt.
|
will be overwritten without a prompt.
|
||||||
|
|
||||||
If you get permissions errors here, **don't run make as root or with sudo**. See
|
If you get permissions errors here, **don't run make as root or with sudo**. See
|
@@ -65,7 +65,7 @@ if __name__ == '__main__':
|
|||||||
### フルサポートされているキーボードを持っている場合
|
### フルサポートされているキーボードを持っている場合
|
||||||
あなたのキーボードとマイコンが正式にサポートされている場合、[こちらのページ](https://github.com/KMKfw/boards)から`kb.py` と `main.py`を"flash drive"のルートに落とす必要があります。より高度な手順は[こちら](config_and_keymap.md)から確認できます。
|
あなたのキーボードとマイコンが正式にサポートされている場合、[こちらのページ](https://github.com/KMKfw/boards)から`kb.py` と `main.py`を"flash drive"のルートに落とす必要があります。より高度な手順は[こちら](config_and_keymap.md)から確認できます。
|
||||||
|
|
||||||
Circuitpython を使用する場合、 [boot.py](/boot.py)も必要になります。
|
Circuitpython を使用する場合、 [boot.py](https://github.com/KMKfw/kmk_firmware/blob/master/boot.py)も必要になります。
|
||||||
|
|
||||||
### ほかに自作ボードなどを持っていて、カスタマイズされた KMK を導入したい場合
|
### ほかに自作ボードなどを持っていて、カスタマイズされた KMK を導入したい場合
|
||||||
|
|
||||||
@@ -96,7 +96,8 @@ RGB や分裂型などの機能を楽しめたい場合は、ビルトイン[モ
|
|||||||
|
|
||||||
デバッグについてのヘルプが必要な場合は[こちら](debugging.md)。
|
デバッグについてのヘルプが必要な場合は[こちら](debugging.md)。
|
||||||
|
|
||||||
KMK についてサポートが必要な場合や、コミュニケーションをとりたい場合は[こちら](https://kmkfw.zulipchat.com)。
|
KMK についてサポートが必要な場合や、コミュニケーションをとりたい場合は[こちら](https://matrix.to/#/#kmkfw:klar.sh)。
|
||||||
|
このチャネルは[Discord](https://discordapp.com/widget?id=493256121075761173&theme=dark) からも見ることができます。
|
||||||
|
|
||||||
チャットで助けを求める場合やバグ レポートを開く場合は、可能であれば KMK
|
チャットで助けを求める場合やバグ レポートを開く場合は、可能であれば KMK
|
||||||
のコピーが最新であることを確認してください。
|
のコピーが最新であることを確認してください。
|
||||||
|
@@ -151,8 +151,8 @@
|
|||||||
|`KC.PIPE` | |<code>|</code>|
|
|`KC.PIPE` | |<code>|</code>|
|
||||||
|`KC.COLON` |`KC.COLN` |`:` |
|
|`KC.COLON` |`KC.COLN` |`:` |
|
||||||
|`KC.DOUBLE_QUOTE` |`KC.DQUO`, `KC.DQT`|`"` |
|
|`KC.DOUBLE_QUOTE` |`KC.DQUO`, `KC.DQT`|`"` |
|
||||||
|`KC.LEFT_ANGLE_BRACKET` |`KC.LABK` |`<` |
|
|`KC.LEFT_ANGLE_BRACKET` |`KC.LABK`, `KC.LT` |`<` |
|
||||||
|`KC.RIGHT_ANGLE_BRACKET`|`KC.RABK` |`>` |
|
|`KC.RIGHT_ANGLE_BRACKET`|`KC.RABK`, `KC.GT` |`>` |
|
||||||
|`KC.QUESTION` |`KC.QUES` |`?` |
|
|`KC.QUESTION` |`KC.QUES` |`?` |
|
||||||
|
|
||||||
## [International Keys]
|
## [International Keys]
|
||||||
@@ -183,18 +183,18 @@
|
|||||||
|
|
||||||
## [Internal Keys]
|
## [Internal Keys]
|
||||||
|
|
||||||
| Key | Description |
|
|Key |Description |
|
||||||
|-------------------------|---------------------------------------------------------------------------------|
|
|-----------------------|---------------------------------------------------------------------|
|
||||||
| `KC.RESET` | Restarts the keyboard |
|
|`KC.RESET` |Restarts the keyboard |
|
||||||
| `KC.RELOAD`, `KC.RLD` | Reloads the keyboard software, preserving any serial connections |
|
|`KC.RELOAD`, `KC.RLD` |Reloads the keyboard software, preserving any serial connections |
|
||||||
| `KC.DEBUG` | Toggle `debug_enabled`, which enables log spew to serial console |
|
|`KC.DEBUG` |Toggle `debug_enabled`, which enables log spew to serial console |
|
||||||
| `KC.GESC` | Escape when tapped, <code>`</code> when pressed with Shift or GUI |
|
|`KC.GESC` |Escape when tapped, <code>`</code> when pressed with Shift or GUI|
|
||||||
| `KC.BKDL` | Backspace when tapped, Delete when pressed with GUI |
|
|`KC.BKDL` |Backspace when tapped, Delete when pressed with GUI |
|
||||||
| `KC.UC_MODE_NOOP` | Sets UnicodeMode to NOOP |
|
|`KC.UC_MODE_NOOP` |Sets UnicodeMode to NOOP |
|
||||||
| `KC.UC_MODE_LINUX` | Sets UnicodeMode to Linux |
|
|`KC.UC_MODE_LINUX` |Sets UnicodeMode to Linux |
|
||||||
| `KC.UC_MODE_MACOS` | Sets UnicodeMode to macOS |
|
|`KC.UC_MODE_MACOS` |Sets UnicodeMode to macOS |
|
||||||
| `KC.UC_MODE_WINC` | Sets UnicodeMode to WinCompose |
|
|`KC.UC_MODE_WINC` |Sets UnicodeMode to WinCompose |
|
||||||
| `KC.MACRO_SLEEP_MS(ms)` | Sleeps in a macro. See [SEQUENCES](/docs/en/sequences.md) for more information. |
|
|`KC.MACRO_SLEEP_MS(ms)`|Sleeps in a macro. See [SEQUENCES](/docs/sequences.md) for more information. |
|
||||||
|
|
||||||
|
|
||||||
## [Modifiers]
|
## [Modifiers]
|
@@ -1,7 +1,7 @@
|
|||||||
# Keys
|
# Keys
|
||||||
|
|
||||||
> NOTE: This is not a lookup table of key objects provided by KMK. That listing
|
> NOTE: This is not a lookup table of key objects provided by KMK. That listing
|
||||||
> can be found in [`keycodes.md`](/docs/en/keycodes.md). It's probably worth a look at the raw source if
|
> can be found in [`keycodes.md`](/docs/keycodes.md). It's probably worth a look at the raw source if
|
||||||
> you're stumped: [`kmk/keys.py`](/kmk/keys.py).
|
> you're stumped: [`kmk/keys.py`](/kmk/keys.py).
|
||||||
|
|
||||||
This is a bunch of documentation about how a physical keypress translates to
|
This is a bunch of documentation about how a physical keypress translates to
|
||||||
@@ -31,7 +31,7 @@ objects have a few core pieces of information:
|
|||||||
- Their attached modifiers (to implement things like shifted keys or `KC.HYPR`,
|
- Their attached modifiers (to implement things like shifted keys or `KC.HYPR`,
|
||||||
which are single key presses sending along more than one key in a single HID
|
which are single key presses sending along more than one key in a single HID
|
||||||
report. This is a distinct concept from Sequences, which are a KMK feature
|
report. This is a distinct concept from Sequences, which are a KMK feature
|
||||||
documented in [`sequences.md`](/docs/en/sequences.md)). For almost all purposes outside of KMK core,
|
documented in [`sequences.md`](/docs/sequences.md)). For almost all purposes outside of KMK core,
|
||||||
this field should be ignored - it can be safely populated through far more
|
this field should be ignored - it can be safely populated through far more
|
||||||
sane means than futzing with it by hand.
|
sane means than futzing with it by hand.
|
||||||
|
|
||||||
@@ -48,7 +48,7 @@ objects have a few core pieces of information:
|
|||||||
functions and some special override keys (like `KC.GESC`, which is an enhanced
|
functions and some special override keys (like `KC.GESC`, which is an enhanced
|
||||||
form of existing ANSI keys) in [`kmk/handlers/stock.py`](/kmk/handlers/stock.py), for layer switching in
|
form of existing ANSI keys) in [`kmk/handlers/stock.py`](/kmk/handlers/stock.py), for layer switching in
|
||||||
[`kmk/modules/layers.py`](/kmk/modules/layers.py), and for everything related to Sequences (see
|
[`kmk/modules/layers.py`](/kmk/modules/layers.py), and for everything related to Sequences (see
|
||||||
[`sequences.md`](/docs/en/sequences.md) again) in [`kmk/handlers/sequences.py`](/kmk/handlers/sequences.py). We'll discuss these more
|
[`sequences.md`](/docs/sequences.md) again) in [`kmk/handlers/sequences.py`](/kmk/handlers/sequences.py). We'll discuss these more
|
||||||
shortly.
|
shortly.
|
||||||
|
|
||||||
- Optional callbacks to be run before and/or after the above handlers. More on
|
- Optional callbacks to be run before and/or after the above handlers. More on
|
@@ -15,7 +15,7 @@ keyboard.modules.append(Layers())
|
|||||||
|`KC.MO(layer)` |Momentarily activates layer, switches off when you let go |
|
|`KC.MO(layer)` |Momentarily activates layer, switches off when you let go |
|
||||||
|`KC.LM(layer, mod)` |As `MO(layer)` but with `mod` active |
|
|`KC.LM(layer, mod)` |As `MO(layer)` but with `mod` active |
|
||||||
|`KC.LT(layer, kc)` |Momentarily activates layer if held, sends kc if tapped |
|
|`KC.LT(layer, kc)` |Momentarily activates layer if held, sends kc if tapped |
|
||||||
|`KC.TG(layer)` |Toggles the layer (enables it if not active, and vice versa) |
|
|`KC.TG(layer)` |Toggles the layer (enables it if no active, and vise versa) |
|
||||||
|`KC.TO(layer)` |Activates layer and deactivates all other layers |
|
|`KC.TO(layer)` |Activates layer and deactivates all other layers |
|
||||||
|`KC.TT(layer)` |Momentarily activates layer if held, toggles it if tapped repeatedly |
|
|`KC.TT(layer)` |Momentarily activates layer if held, toggles it if tapped repeatedly |
|
||||||
|
|
||||||
@@ -84,7 +84,7 @@ class Layers(_Layers):
|
|||||||
last_top_layer = 0
|
last_top_layer = 0
|
||||||
hues = (4, 20, 69)
|
hues = (4, 20, 69)
|
||||||
|
|
||||||
def after_hid_send(self, keyboard):
|
def after_hid_send(keyboard):
|
||||||
if keyboard.active_layers[0] != self.last_top_layer:
|
if keyboard.active_layers[0] != self.last_top_layer:
|
||||||
self.last_top_layer = keyboard.active_layers[0]
|
self.last_top_layer = keyboard.active_layers[0]
|
||||||
rgb.set_hsv_fill(self.hues[self.last_top_layer], 255, 255)
|
rgb.set_hsv_fill(self.hues[self.last_top_layer], 255, 255)
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user