2019-07-18 06:41:17 +02:00
|
|
|
# KMK: Clackety Keyboards Powered by Python
|
2022-06-16 12:19:10 +02:00
|
|
|
![GitHub](https://img.shields.io/github/license/KMKfw/kmk_firmware)
|
|
|
|
![GitHub contributors](https://img.shields.io/github/contributors/KMKfw/kmk_firmware)
|
|
|
|
![Lines of code](https://img.shields.io/tokei/lines/github/KMKfw/kmk_firmware)
|
|
|
|
![GitHub issues](https://img.shields.io/github/issues-raw/KMKfw/kmk_firmware)
|
|
|
|
![GitHub closed issues](https://img.shields.io/github/issues-closed/KMKfw/kmk_firmware)
|
2021-08-14 03:09:08 +02:00
|
|
|
|
2019-07-18 06:41:17 +02:00
|
|
|
KMK is a feature-rich and beginner-friendly firmware for computer keyboards
|
|
|
|
written and configured in
|
2021-12-02 07:56:38 +01:00
|
|
|
[CircuitPython](https://github.com/adafruit/circuitpython).
|
2021-07-06 21:53:34 +02:00
|
|
|
|
2023-03-09 09:38:44 +01:00
|
|
|
## Support
|
|
|
|
|
2022-12-13 00:52:08 +01:00
|
|
|
For asynchronous support and chatter about KMK, [join our Zulip
|
2023-03-09 09:38:44 +01:00
|
|
|
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.
|
2022-12-13 00:52:08 +01:00
|
|
|
|
|
|
|
> The former Matrix and Discord rooms once linked to in this README are no
|
|
|
|
> longer officially supported, please do not use them!
|
2019-07-25 06:04:15 +02:00
|
|
|
|
2019-07-18 06:41:17 +02:00
|
|
|
## Features
|
|
|
|
|
2019-07-25 06:16:26 +02:00
|
|
|
- Fully configured through a single, easy to understand Python file that lives
|
|
|
|
on a "flash-drive"-esque space on your microcontroller - edit on the go
|
|
|
|
without DFU or other devtooling available!
|
|
|
|
- Single-piece or [two-piece split
|
2022-09-11 22:04:29 +02:00
|
|
|
keyboards](/docs/en/split_keyboards.md)
|
2019-07-25 06:16:26 +02:00
|
|
|
are supported
|
|
|
|
- [Chainable
|
2022-09-11 22:04:29 +02:00
|
|
|
keys](/docs/en/keys.md) such as
|
2019-07-25 06:16:26 +02:00
|
|
|
`KC.LWIN(KC.L)` to lock the screen on a Windows PC
|
2022-04-24 21:33:35 +02:00
|
|
|
- [Built-in Unicode macros, including
|
2022-09-11 22:04:29 +02:00
|
|
|
emojis](/docs/en/sequences.md)
|
|
|
|
- [RGB underglow](/docs/en/rgb.md)
|
2019-07-25 06:16:26 +02:00
|
|
|
and [LED
|
2022-09-11 22:04:29 +02:00
|
|
|
backlights](/docs/en/led.md)
|
2019-07-25 06:16:26 +02:00
|
|
|
- One key can turn into many more based on [how many times you tap
|
2022-09-11 22:04:29 +02:00
|
|
|
it](/docs/en/tapdance.md)
|
2020-10-21 21:19:42 +02:00
|
|
|
- Bluetooth HID and split keyboards. No more wires.
|
2019-07-18 06:41:17 +02:00
|
|
|
|
|
|
|
## Getting Started
|
2022-07-02 18:21:06 +02:00
|
|
|
KMK requires [CircuitPython](https://circuitpython.org/) version 7.0 or higher.
|
2021-07-06 21:53:34 +02:00
|
|
|
Our getting started guide can be found
|
2022-09-11 22:04:29 +02:00
|
|
|
[here](/docs/en/Getting_Started.md).
|
2019-07-18 06:41:17 +02:00
|
|
|
|
2019-07-25 07:56:10 +02:00
|
|
|
## Code Style
|
|
|
|
|
|
|
|
KMK uses [Black](https://github.com/psf/black) with a Python 3.6 target and,
|
|
|
|
[(controversially?)](https://github.com/psf/black/issues/594) single quotes.
|
|
|
|
Further code styling is enforced with isort and flake8 with several plugins.
|
|
|
|
`make fix-isort fix-formatting` before a commit is a good idea, and CI will fail
|
|
|
|
if inbound code does not adhere to these formatting rules. Some exceptions are
|
|
|
|
found in `setup.cfg` loosening the rules in isolated cases, notably
|
|
|
|
`user_keymaps` (which is *also* not subject to Black formatting for reasons
|
|
|
|
documented in `pyproject.toml`).
|
|
|
|
|
2021-12-05 15:24:51 +01:00
|
|
|
## Tests
|
|
|
|
|
2022-04-18 11:39:19 +02:00
|
|
|
Unit tests within the `tests` folder mock various CircuitPython modules to allow
|
2021-12-05 15:24:51 +01:00
|
|
|
them to be executed in a desktop development environment.
|
|
|
|
|
|
|
|
Execute tests using the command `python -m unittest`.
|
|
|
|
|
2018-08-30 22:31:02 +02:00
|
|
|
## License, Copyright, and Legal
|
|
|
|
|
2019-07-18 06:41:17 +02:00
|
|
|
All software in this repository is licensed under the [GNU Public License,
|
2022-04-18 11:39:19 +02:00
|
|
|
version 3](https://tldrlegal.com/license/gnu-general-public-license-v3-(gpl-3)).
|
2019-07-18 06:41:17 +02:00
|
|
|
All documentation and hardware designs are licensed under the [Creative Commons
|
|
|
|
Attribution-ShareAlike 4.0](https://creativecommons.org/licenses/by-sa/4.0/)
|
|
|
|
license. Contributions to this repository must use these licenses unless
|
|
|
|
otherwise agreed to by the Core team.
|
2022-06-22 21:57:24 +02:00
|
|
|
|
|
|
|
**Due to ethical and legal concerns, any works derived from GitHub Copilot or
|
|
|
|
similar artificial intelligence tooling are unacceptable for inclusion in any
|
|
|
|
first-party KMK repository or other code collection. We further recommend not
|
|
|
|
using GitHub Copilot while developing anything KMK-related, regardless of
|
|
|
|
intent to submit upstream.**
|