120 Commits

Author SHA1 Message Date
cole
370eb151e2 removed unused file 2023-02-19 19:54:25 -08:00
cole
d0b93bd275 cleaning up 2023-02-19 19:30:50 -08:00
cole
f1f5ac01bd more striping 2023-02-19 19:26:51 -08:00
cole
8101f98860 why use docker inside 2023-02-19 19:17:23 -08:00
cole
3b4c00b1bb working on work flow 2023-02-19 19:06:31 -08:00
cole
4518983b36 workflow file 2023-02-19 19:00:25 -08:00
cole
d5106dd5e2 editing build script 2023-02-19 18:44:10 -08:00
cole
730a18437c editing build script 2023-02-19 18:39:49 -08:00
cole
1ae2de4315 working on work flow 2023-02-19 18:33:27 -08:00
cole
8bcaa7a235 working on work flow 2023-02-19 18:28:45 -08:00
cole
b2ae0d364a docker compose version bump 2023-02-19 18:21:20 -08:00
cole
51528cbb41 docker compose version bump 2023-02-19 18:17:31 -08:00
cole
db4030f49b working on work flow 2023-02-19 18:12:24 -08:00
cole
fb87de1d85 working on work flow 2023-02-19 18:11:07 -08:00
cole
f65f436273 made new docker file to build mpy files 2023-02-19 18:09:02 -08:00
xs5871
a90d569690 Fix CC HID report generation 2023-02-18 08:20:52 +00:00
xs5871
449aab7dcb Add BLE_DISCONNECT key 2023-02-17 03:03:40 +00:00
Stefan Misch
dc9b5f4512 fix encoder resolution for MacroPad10 2023-02-16 09:07:48 +00:00
Stefan Misch
cbaddef9a6 fix encoder resolution for Knobs3 2023-02-16 09:07:48 +00:00
Stefan Misch
804b5ec575 fix: encoder resolution for Knob 1 2023-02-16 09:07:48 +00:00
xs5871
a28df47199 Refactor affected modules to use global pointing device 2023-02-14 20:42:08 +00:00
xs5871
9e5d2c24e1 Refactor for nicer pointing device axes handling 2023-02-14 20:42:08 +00:00
xs5871
ca800331de Implement axis movement method 2023-02-14 20:42:08 +00:00
xs5871
1ca27dab58 refactor mouse_keys to use PeriodicTimer 2023-02-14 20:42:08 +00:00
xs5871
fc8d5edd52 refactor mouse_keys module to use global pd 2023-02-14 20:42:08 +00:00
xs5871
e84bbd0d75 add mouse buttons to pointing device 2023-02-14 20:42:08 +00:00
xs5871
69d47343e8 implement global pointing device axis handling 2023-02-14 20:42:08 +00:00
xs5871
470f16c97f factor out consumer control from keyboard hid 2023-02-14 20:42:08 +00:00
xs5871
27f101d139 remove hid awareness from layer module 2023-02-14 20:42:08 +00:00
xs5871
2852420ea8 Bump black version 2023-02-12 22:32:39 +00:00
moritz-john
5a38af6632 Update docs/en/extension_stringy_keymaps.md
Co-authored-by: xs5871 <60395129+xs5871@users.noreply.github.com>
2023-02-12 19:45:18 +00:00
Moritz John
fa7d72b175 Added more examples to the Stringy Keymaps docs
Rearranged text

Removed blank lines

Fixed "string name" to "string"

Enclosed string in single qutoes
2023-02-12 19:45:18 +00:00
xs5871
d7e9cfbc5b Replace all mentions of the matrix channel with links to zulip 2023-02-12 17:25:24 +00:00
xs5871
408f2f487e Remove for-else-block from keys.py for readability 2023-02-11 21:27:41 +00:00
xs5871
5af52addf8 Fixes KeyAttrDict iterator 2023-02-11 21:27:41 +00:00
xs5871
705d3eb032 Remove supervisor stack limit from boot.py 2023-02-11 20:05:45 +00:00
dependabot[bot]
638d64af72 Bump ipython from 7.31.1 to 8.10.0
Bumps [ipython](https://github.com/ipython/ipython) from 7.31.1 to 8.10.0.
- [Release notes](https://github.com/ipython/ipython/releases)
- [Commits](https://github.com/ipython/ipython/compare/7.31.1...8.10.0)

---
updated-dependencies:
- dependency-name: ipython
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-02-11 09:13:27 +00:00
xs5871
e7427ff53b Split KeyAttrDict.__cache into memory friendly partitions. 2023-02-11 09:03:44 +00:00
Leon Anavi
62d6bf16df anavi/macro-pad-12: Add ANAVI Macro Pad 12
Add support for ANAVI Macro Pad 12: an open source programmable
small hot-swappable mechanical keyboard with 12 keys, mini OLED
I2C display and Seeed XIAO RP2040. This is an open source hardware
designed with KiCad.

Signed-off-by: Leon Anavi <leon@anavi.org>
2023-02-07 22:20:59 +00:00
hixan
47c242a2c9 Update layers.md
The advanced example was missing a self argument
2023-01-29 02:53:53 +00:00
xs5871
4d52afa086 Remove erroneous argument from hsv_to_rgbw conversion function 2023-01-26 18:57:08 -08:00
claycooper
1935f05ccb Updated key creation for consistency 2023-01-24 16:41:43 +00:00
claycooper
83110c5f80 Re-formatted key creation to be consistent 2023-01-24 16:41:43 +00:00
Jk Jensen
d98dd47b1b Make changed files clearer
Add some clarity for people new to KMK on which files should contain the given changes.
2023-01-23 18:23:46 +00:00
claycooper
3cca939e0b Fixed spelling in layers doc 2023-01-23 18:23:15 +00:00
Moritz John
a72796e85c Fixed image link in quickpin.md docs 2023-01-23 18:20:16 +00:00
Conor Burns
83a597bc65 update pin names 2023-01-17 20:39:26 +00:00
Conor Burns
15d3cd706b add 0xCB Helios quickpin 2023-01-17 20:39:26 +00:00
Davi Gupta
407de4c429 Add Numerical Keypad support from Bolt Industries 2023-01-17 20:37:54 +00:00
Leon Anavi
d8867004ff anavi-arrows: Add ANAVI Arrows
Add support for ANAVI Arrows: an open source programmable mini
hot-swappable mechanical keyboard with 4 keys, a rotary encoder,
mini OLED I2C yellow-blue display and Seeed XIAO RP2040. This is
an open source hardware device designed with KiCad.

Signed-off-by: Leon Anavi <leon@anavi.org>
2023-01-11 22:15:52 +00:00
James Perry
945072bf6c OS_LCTL_LSFT should be set in example code
The Chord example references OS_LCTL_LSFT which is not set in the code above it.
2023-01-11 21:50:23 +00:00
Kryomatix
dd61c3705b fix: LED static mode toggling (#673)
* Fix bug with static mode toggling

Previously, animation mode was set to none, which prevented the leds from being toggled. Now uses STATIC_STANDBY

* fix formatting
2023-01-11 21:49:51 +00:00
Lance
a309aa52f3 helix board support
removing errant ticks from main.py
2023-01-08 22:23:51 +00:00
regicidal.plutophage
b109cc2c4a Update peg_oled_display.py 2023-01-08 20:58:43 +00:00
Timo
3238857e1e add trackball rotation to example in docs 2023-01-02 23:02:08 +00:00
dependabot[bot]
7c3d2752bf Bump setuptools from 60.5.0 to 65.5.1
Bumps [setuptools](https://github.com/pypa/setuptools) from 60.5.0 to 65.5.1.
- [Release notes](https://github.com/pypa/setuptools/releases)
- [Changelog](https://github.com/pypa/setuptools/blob/main/CHANGES.rst)
- [Commits](https://github.com/pypa/setuptools/compare/v60.5.0...v65.5.1)

---
updated-dependencies:
- dependency-name: setuptools
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-12-27 22:53:04 +00:00
Your Name
6edd3b1d50 Moved quickpin.md from docs to docs/en 2022-12-26 16:32:15 +00:00
Josh Klar
cb6c2da5cc docs: Replace Discord and Matrix links with Zulip in README.
Resolves #437 by linking the Zulip chat as the official asynchronous
discussion and support platform.

Refs #650 by demoting and discouraging the Discord and Matrix links,
both to be decommissioned at some future time as discussed in the issue
thread.
2022-12-13 23:11:25 +00:00
Dave Bendit
99542b0493 fix: Linting 2022-11-21 21:12:40 +00:00
Dave Bendit
7115774633 test: Add test for capswords 2022-11-21 21:12:40 +00:00
Dave Bendit
afd4982925 fix: Include Z and 0 in CapsWords ranges
Before, the allowed alphabet of characters for CapsWords was exclusive
of the letter Z, and the allowed number set was exclusive of the number
0.

Now, those characters are included, so using them won't interrupt
CapsWords.
2022-11-21 21:12:40 +00:00
xgpt
d51f0c4498 links added for convenience. 2022-11-17 20:35:19 +00:00
xgpt
f2e4195023 I believe this board should be supported as well, I could be wrong. 2022-11-17 20:35:19 +00:00
sorla
c8f5669e4c Update main.py to fix indentation 2022-11-03 22:55:27 +00:00
sorla
e1fcfc8e46 Update kb.py per code review comments
Remove duplicate matrix definitions and use coord_mapping to flip halves
2022-11-03 22:55:27 +00:00
sorla
8563c4737d Apply suggestions from code review to README.md
Co-authored-by: xs5871 <60395129+xs5871@users.noreply.github.com>
2022-11-03 22:55:27 +00:00
sorla
472b957317 Update main.py
Fix mangled whitespace in keymap
2022-11-03 22:55:27 +00:00
Alan
dc845c55a2 Fix links in README, keymap in main.py 2022-11-03 22:55:27 +00:00
Alan
5f68881e11 Create Ferris Sweep board and keymap files 2022-11-03 22:55:27 +00:00
Josh Klar
b54083cb70 readme: remove authorship and maintainer list blurb 2022-10-28 23:06:08 +00:00
xs5871
225087c117 remove not-implemented keycodes from docs
resolves #631

We can't do `KC.LT`, because it collides with layer tap; ergo also remove `KC.GT`.
2022-10-27 19:59:29 -07:00
Josh Klar
0477b56616 docs(readme): remove scary banner about maintainership, reword chat blurb 2022-10-25 17:45:55 -07:00
Kyle Brown
e2681a253a Move quickpin docs 2022-10-25 01:36:33 -07:00
Kyle Brown
feb5c0392c Update debounce docs 2022-10-25 01:35:47 -07:00
AndersonTorres
5032f1ee12 Fixup README.md 2022-10-25 01:24:49 -07:00
AndersonTorres
296e4a31b8 Get rid of hard reference to https://github.com/KMKfw/kmk_firmware/blob/master/ 2022-10-25 01:24:49 -07:00
AndersonTorres
b9c6e5bfea Quick fixup links on ptBR documentation 2022-10-25 01:24:49 -07:00
AndersonTorres
9841d3c402 Quick fixup links on documentations for the boards
Because of the previous moving commit, some links need to be fixed too.
2022-10-25 01:24:49 -07:00
AndersonTorres
afd184f019 Quick fixup links on English documentation
Because of the previous moving commit, some links need to be fixed too.
2022-10-25 01:24:49 -07:00
AndersonTorres
0ab6887fbe Move docs/ to docs/en/
It allows comparison between the directories and helps translations.
2022-10-25 01:24:49 -07:00
Kyle Brown
885359a8f4 docs update 2022-10-15 17:07:10 +00:00
Kyle Brown
76f33149ef quickpin conversion fixes 2022-10-15 17:07:10 +00:00
xs5871
091395691d add unittest directory to the fix-isort target 2022-10-14 08:28:00 -07:00
xs5871
178afdfeb1 implement multiple-choice for holdtap repeat 2022-10-14 08:25:44 -07:00
xs5871
72735e0b5d fix typo in zodiark kb.py import 2022-10-14 08:19:20 -07:00
xs5871
91565b02ba replace modtap validator with parent holdtap validator 2022-10-11 15:43:39 -07:00
xs5871
2af4bc9e67 add holdtap-repeat unittest 2022-10-11 15:43:39 -07:00
Kyle Brown
6c7d57ca2a Apply suggestions from code review
Co-authored-by: xs5871 <60395129+xs5871@users.noreply.github.com>
2022-10-10 23:13:44 +00:00
Kyle Brown
60e8f35eca Port kb2040 boards and add to quickpin 2022-10-10 23:13:44 +00:00
Kyle Brown
9842035834 convert pm based boards to quickpin 2022-10-10 23:13:44 +00:00
xs5871
17f2961c0b fix pystack exhaust during resume_process_key.
Instead of handling resumed key events in a deep stack, buffer them
until the next main loop iteration. New resume events that may be emitted
during handling of old resumes are prepended to that buffer, i.e. take
precedence over events that happen deeper into the buffer/event stack.
Logical replay order is thus preserved.
2022-10-08 13:36:00 -07:00
xs5871
0fbba96026 add type hinting for kmk.keys 2022-10-08 13:28:29 -07:00
Kyle Brown
2f0134eed3 Update docs/quickpin.md
Co-authored-by: xs5871 <60395129+xs5871@users.noreply.github.com>

Update docs/quickpin.md

Co-authored-by: xs5871 <60395129+xs5871@users.noreply.github.com>

Update docs/quickpin.md

Co-authored-by: xs5871 <60395129+xs5871@users.noreply.github.com>
2022-10-08 19:48:30 +00:00
Kyle Brown
75f535c977 Initial port of zodiark with quickpin 2022-10-08 19:48:30 +00:00
Kyle Brown
af3febc469 Add image to make numbers easier to understand 2022-10-08 19:48:30 +00:00
Kyle Brown
9431ce5ec1 Quickpin initial support 2022-10-08 19:48:30 +00:00
Kyle Brown
03c8a61ed0 Boot.py docs better example 2022-10-05 18:22:31 +00:00
Kyle Brown
711114ad30 Passes tests 2022-10-04 21:29:50 +00:00
Brian Corteil
d965a5c3e8 added Raspberry Pi Pico pinouts
added Raspberry Pi Pico pinouts to keybow.py and auto selection.
2022-10-04 21:29:50 +00:00
xs5871
218c15e322 even more typehints 2022-10-03 18:12:48 -07:00
xs5871
565ec8353b continue/finish holdtap-repeat 2022-10-02 09:54:52 -07:00
Aldoo
5efd2688d7 Support for tap behavior autorepeat for modtap and layertap keys.
Faulty logic corrected

Possibly a bug could happen whenever entering ht_press with a non-empty key_state outside of repeat context (but can it really happen?)

Some formatting to make github tests happy

Documentation for repeat behavior.

Make the tests happy again!

same...
2022-10-02 09:54:52 -07:00
xs5871
91032e123f Howto RGB Layers
Very common question, very simple answer.
Comments and suggestions welcome
2022-10-01 12:36:08 -07:00
topicref
54a1d61a06 fixes small typo in media key keycodes table 2022-09-27 18:55:36 -07:00
xs5871
a97e655d08 fix typo 2022-09-26 00:17:23 -07:00
xs5871
f2fb4eecf4 add type hinting for kmk_keyboard 2022-09-22 15:35:14 -07:00
xs5871
63fd4d9574 add debug info for pixelbuffer to RGB extension 2022-09-22 08:22:22 -07:00
Kyle Brown
002a57b3b1 Replace tabs with spaces 2022-09-20 08:09:04 +00:00
Kyle Brown
dd488686c7 sequences update with new example 2022-09-20 08:09:04 +00:00
Anton K. (ai Doge)
891cd1a67f Add key coord combos
Added an option to use key coord in the matrix to make combos.
this allows to press / release combos regardless of layer and Key.
2022-09-20 08:04:57 +00:00
Ian Pearce
ea3f59340d Set sandbox.matrix_update
Previously only secondary_matrix_update was set on sandbox.
2022-09-19 07:51:45 +00:00
xs5871
85b5aba679 make rgb.val_limit apply globally 2022-09-16 17:59:38 -07:00
xs5871
44233bbb01 bring rgb docs somewhat up-to-date 2022-09-16 17:59:24 -07:00
Kyle Brown
0909c6767d dstore gitignore 2022-09-15 20:35:54 -07:00
Kyle Brown
a21bf761ba Update peg_rgb_matrix.py
Actually fix formatting
2022-09-15 20:24:45 -07:00
Kyle Brown
01cd9d4a7c Apply suggestions from code review
Fix formatting
2022-09-15 20:24:45 -07:00
Jan Lindblom
3ab11179e1 Updated and linted documentation for peg_rgb_matrix. 2022-09-15 20:24:45 -07:00
Jan Lindblom
352bf25c0d Decrease RGB brightness when in powersave. Also add more colours. 2022-09-15 20:24:45 -07:00
Jan Lindblom
9c85ea9b6b Performance improvements. 2022-09-15 20:24:45 -07:00
Jan Lindblom
5f09ba7c0a Add support for changing LED brightness. 2022-09-15 20:24:45 -07:00
178 changed files with 3833 additions and 1539 deletions

23
.github/workflows/build.yml vendored Normal file
View File

@@ -0,0 +1,23 @@
name: build_mpy
on: [push]
jobs:
build:
runs-on: ubuntu-latest
name: Build
steps:
- name: Checkout
uses: actions/checkout@v3
- name: run build script
run: ./docker_mpy_build.sh
- name: look
run: ls -la compiled/
- name: Archive
uses: actions/upload-artifact@v3
with:
name: mpy
path: compiled

2
.gitignore vendored
View File

@@ -180,3 +180,5 @@ cython_debug/
# option (not recommended) you can uncomment the following to ignore the entire idea folder. # option (not recommended) you can uncomment the following to ignore the entire idea folder.
.idea/ .idea/
# Mac Finder
.DS_Store

View File

@@ -1,39 +1,20 @@
FROM python:3.9-slim-buster FROM python:3.9-slim-buster
ARG KMKPY_REF
ARG KMKPY_URL
ENV KMKPY_REF ${KMKPY_REF}
ENV KMKPY_URL ${KMKPY_URL}
RUN mkdir -p /app /dist RUN mkdir -p /app /dist
WORKDIR /app WORKDIR /app
RUN apt-get update && apt-get install -y build-essential curl gettext git git-lfs rsync wget zip lbzip2 RUN apt-get update && apt-get install -y curl
RUN pip install pipenv
# Pull CircuitPython-designated ARM GCC to avoid mismatches/weird RUN curl https://adafruit-circuit-python.s3.amazonaws.com/bin/mpy-cross/linux-amd64/mpy-cross.static-amd64-linux-8.0.0 --output mpy-cross-8
# inconsistencies with upstream RUN curl https://adafruit-circuit-python.s3.amazonaws.com/bin/mpy-cross/linux-amd64/mpy-cross.static-amd64-linux-7.0.0 --output mpy-cross-7
RUN curl -L -o /tmp/gcc-arm.tar.bz2 https://adafruit-circuit-python.s3.amazonaws.com/gcc-arm-none-eabi-9-2019-q4-major-x86_64-linux.tar.bz2 && \
tar -C /usr --strip-components=1 -xaf /tmp/gcc-arm.tar.bz2 && \
rm -rf /tmp/gcc-arm.tar.bz2
# Get a local copy of KMKPython and its dependencies. We don't provide MPY
# builds for kmkpython anymore, so we can get away with being opinionated
# here.
RUN git init /opt/kmkpython && \
git -C /opt/kmkpython remote add origin ${KMKPY_URL} && \
git -C /opt/kmkpython fetch --depth 1 origin ${KMKPY_REF} && \
git -C /opt/kmkpython checkout FETCH_HEAD && \
git -C /opt/kmkpython submodule update --init --recursive
# Build the MPY compiler RUN chmod +x mpy-cross-8
RUN make -C /opt/kmkpython/mpy-cross
ENV PATH=/opt/kmkpython/mpy-cross:${PATH} RUN chmod +x mpy-cross-7
RUN mkdir -p /opt/kmkpython/frozen/kmk/kmk
COPY ./build_kmkpython_release.sh /app/
COPY ./kmk /opt/kmkpython/frozen/kmk/kmk
CMD /app/build_kmkpython_release.sh COPY ./docker_mpy_build.sh /app/build.sh
# COPY ./kmk /app/kmk/
CMD ["bash", "build.sh"]

View File

@@ -68,7 +68,7 @@ fix-formatting: devdeps
@$(PIPENV) run black . @$(PIPENV) run black .
fix-isort: devdeps fix-isort: devdeps
@find kmk/ user_keymaps/ boards/ -name "*.py" | xargs $(PIPENV) run isort @find boards/ kmk/ tests/ user_keymaps/ -name "*.py" | xargs $(PIPENV) run isort
clean: clean-dist clean: clean-dist
@echo "===> Cleaning build artifacts" @echo "===> Cleaning build artifacts"

View File

@@ -17,6 +17,6 @@ ipython = "*"
isort = "*" isort = "*"
neovim = "*" neovim = "*"
s3cmd = "*" s3cmd = "*"
black = "==21.6b0" black = "==22.3.0"
flake8-quotes = "*" flake8-quotes = "*"
flake8-black = "*" flake8-black = "*"

525
Pipfile.lock generated
View File

@@ -1,7 +1,7 @@
{ {
"_meta": { "_meta": {
"hash": { "hash": {
"sha256": "0a04ec24d4aef6828e4f5eefa0a7d2c312f21f2b2f18c42c7004cdbe0c02bd53" "sha256": "8c1b0ad909dc0ac0fc8013756ca7db8b5420f51c25cc1c2d1612f62fe5e19843"
}, },
"pipfile-spec": 6, "pipfile-spec": 6,
"requires": {}, "requires": {},
@@ -23,12 +23,12 @@
"index": "pypi", "index": "pypi",
"version": "==1.1.0" "version": "==1.1.0"
}, },
"appdirs": { "asttokens": {
"hashes": [ "hashes": [
"sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41", "sha256:4622110b2a6f30b77e1473affaa97e711bc2f07d3f10848420ff1898edbe94f3",
"sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128" "sha256:6b0ac9e93fb0335014d382b8fa9b3afa7df546984258005da0b9e7095b3deb1c"
], ],
"version": "==1.4.4" "version": "==2.2.1"
}, },
"backcall": { "backcall": {
"hashes": [ "hashes": [
@@ -39,227 +39,281 @@
}, },
"black": { "black": {
"hashes": [ "hashes": [
"sha256:dc132348a88d103016726fe360cb9ede02cecf99b76e3660ce6c596be132ce04", "sha256:06f9d8846f2340dfac80ceb20200ea5d1b3f181dd0556b47af4e8e0b24fa0a6b",
"sha256:dfb8c5a069012b2ab1e972e7b908f5fb42b6bbabcba0a788b86dc05067c7d9c7" "sha256:10dbe6e6d2988049b4655b2b739f98785a884d4d6b85bc35133a8fb9a2233176",
"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": "==21.6b0" "version": "==22.3.0"
}, },
"click": { "click": {
"hashes": [ "hashes": [
"sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3", "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e",
"sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b" "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"
], ],
"markers": "python_version >= '3.6'", "markers": "python_version >= '3.7'",
"version": "==8.0.3" "version": "==8.1.3"
}, },
"decorator": { "decorator": {
"hashes": [ "hashes": [
"sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330", "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330",
"sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186" "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"
], ],
"markers": "python_version >= '3.5'", "markers": "python_version < '3.11' and python_version >= '3.7'",
"version": "==5.1.1" "version": "==5.1.1"
}, },
"executing": {
"hashes": [
"sha256:0314a69e37426e3608aada02473b4161d4caf5a4b244d1d0c48072b8fee7bacc",
"sha256:19da64c18d2d851112f09c287f8d3dbbdf725ab0e569077efb6cdcbd3497c107"
],
"version": "==1.2.0"
},
"flake8": { "flake8": {
"hashes": [ "hashes": [
"sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b", "sha256:3833794e27ff64ea4e9cf5d410082a8b97ff1a06c16aa3d2027339cd0f1195c7",
"sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907" "sha256:c61007e76655af75e6785a931f452915b371dc48f56efd765247c8fe68f2b181"
], ],
"index": "pypi", "index": "pypi",
"version": "==3.9.2" "version": "==6.0.0"
}, },
"flake8-black": { "flake8-black": {
"hashes": [ "hashes": [
"sha256:941514149cb8b489cb17a4bb1cf18d84375db3b34381bb018de83509437931a0", "sha256:0dfbca3274777792a5bcb2af887a4cad72c72d0e86c94e08e3a3de151bb41c34",
"sha256:f26651bc10db786c03f4093414f7c9ea982ed8a244cec323c984feeffdf4c118" "sha256:fe8ea2eca98d8a504f22040d9117347f6b367458366952862ac3586e7d4eeaca"
], ],
"index": "pypi", "index": "pypi",
"version": "==0.2.1" "version": "==0.3.6"
}, },
"flake8-commas": { "flake8-commas": {
"hashes": [ "hashes": [
"sha256:d3005899466f51380387df7151fb59afec666a0f4f4a2c6a8995b975de0f44b7", "sha256:940441ab8ee544df564ae3b3f49f20462d75d5c7cac2463e0b27436e2050f263",
"sha256:ee2141a3495ef9789a3894ed8802d03eff1eaaf98ce6d8653a7c573ef101935e" "sha256:ebb96c31e01d0ef1d0685a21f3f0e2f8153a0381430e748bf0bbbb5d5b453d54"
], ],
"index": "pypi", "index": "pypi",
"version": "==2.0.0" "version": "==2.1.0"
}, },
"flake8-comprehensions": { "flake8-comprehensions": {
"hashes": [ "hashes": [
"sha256:b07aef3277623db32310aa241a1cec67212b53c1d18e767d7e26d4d83aa05bf7", "sha256:412052ac4a947f36b891143430fef4859705af11b2572fbb689f90d372cf26ab",
"sha256:f24be9032587127f7a5bc6d066bf755b6e66834f694383adb8a673e229c1f559" "sha256:d763de3c74bc18a79c039a7ec732e0a1985b0c79309ceb51e56401ad0a2cd44e"
], ],
"index": "pypi", "index": "pypi",
"version": "==3.5.0" "version": "==3.10.1"
}, },
"flake8-isort": { "flake8-isort": {
"hashes": [ "hashes": [
"sha256:2b91300f4f1926b396c2c90185844eb1a3d5ec39ea6138832d119da0a208f4d9", "sha256:537f453a660d7e903f602ecfa36136b140de279df58d02eb1b6a0c84e83c528c",
"sha256:729cd6ef9ba3659512dee337687c05d79c78e1215fdf921ed67e5fe46cce2f3c" "sha256:aa0cac02a62c7739e370ce6b9c31743edac904bae4b157274511fc8a19c75bbc"
], ],
"index": "pypi", "index": "pypi",
"version": "==4.0.0" "version": "==6.0.0"
}, },
"flake8-quotes": { "flake8-quotes": {
"hashes": [ "hashes": [
"sha256:3f1116e985ef437c130431ac92f9b3155f8f652fda7405ac22ffdfd7a9d1055e" "sha256:6e26892b632dacba517bf27219c459a8396dcfac0f5e8204904c5a4ba9b480e1"
], ],
"index": "pypi", "index": "pypi",
"version": "==3.2.0" "version": "==3.3.2"
}, },
"greenlet": { "greenlet": {
"hashes": [ "hashes": [
"sha256:0051c6f1f27cb756ffc0ffbac7d2cd48cb0362ac1736871399a739b2885134d3", "sha256:03a8f4f3430c3b3ff8d10a2a86028c660355ab637cee9333d63d66b56f09d52a",
"sha256:00e44c8afdbe5467e4f7b5851be223be68adb4272f44696ee71fe46b7036a711", "sha256:0bf60faf0bc2468089bdc5edd10555bab6e85152191df713e2ab1fcc86382b5a",
"sha256:013d61294b6cd8fe3242932c1c5e36e5d1db2c8afb58606c5a67efce62c1f5fd", "sha256:18a7f18b82b52ee85322d7a7874e676f34ab319b9f8cce5de06067384aa8ff43",
"sha256:049fe7579230e44daef03a259faa24511d10ebfa44f69411d99e6a184fe68073", "sha256:18e98fb3de7dba1c0a852731c3070cf022d14f0d68b4c87a19cc1016f3bb8b33",
"sha256:14d4f3cd4e8b524ae9b8aa567858beed70c392fdec26dbdb0a8a418392e71708", "sha256:1a819eef4b0e0b96bb0d98d797bef17dc1b4a10e8d7446be32d1da33e095dbb8",
"sha256:166eac03e48784a6a6e0e5f041cfebb1ab400b394db188c48b3a84737f505b67", "sha256:26fbfce90728d82bc9e6c38ea4d038cba20b7faf8a0ca53a9c07b67318d46088",
"sha256:17ff94e7a83aa8671a25bf5b59326ec26da379ace2ebc4411d690d80a7fbcf23", "sha256:2780572ec463d44c1d3ae850239508dbeb9fed38e294c68d19a24d925d9223ca",
"sha256:1e12bdc622676ce47ae9abbf455c189e442afdde8818d9da983085df6312e7a1", "sha256:283737e0da3f08bd637b5ad058507e578dd462db259f7f6e4c5c365ba4ee9343",
"sha256:21915eb821a6b3d9d8eefdaf57d6c345b970ad722f856cd71739493ce003ad08", "sha256:2d4686f195e32d36b4d7cf2d166857dbd0ee9f3d20ae349b6bf8afc8485b3645",
"sha256:288c6a76705dc54fba69fbcb59904ae4ad768b4c768839b8ca5fdadec6dd8cfd", "sha256:2dd11f291565a81d71dab10b7033395b7a3a5456e637cf997a6f33ebdf06f8db",
"sha256:2bde6792f313f4e918caabc46532aa64aa27a0db05d75b20edfc5c6f46479de2", "sha256:30bcf80dda7f15ac77ba5af2b961bdd9dbc77fd4ac6105cee85b0d0a5fcf74df",
"sha256:32ca72bbc673adbcfecb935bb3fb1b74e663d10a4b241aaa2f5a75fe1d1f90aa", "sha256:32e5b64b148966d9cccc2c8d35a671409e45f195864560829f395a54226408d3",
"sha256:356b3576ad078c89a6107caa9c50cc14e98e3a6c4874a37c3e0273e4baf33de8", "sha256:36abbf031e1c0f79dd5d596bfaf8e921c41df2bdf54ee1eed921ce1f52999a86",
"sha256:40b951f601af999a8bf2ce8c71e8aaa4e8c6f78ff8afae7b808aae2dc50d4c40", "sha256:3a06ad5312349fec0ab944664b01d26f8d1f05009566339ac6f63f56589bc1a2",
"sha256:572e1787d1460da79590bf44304abbc0a2da944ea64ec549188fa84d89bba7ab", "sha256:3a51c9751078733d88e013587b108f1b7a1fb106d402fb390740f002b6f6551a",
"sha256:58df5c2a0e293bf665a51f8a100d3e9956febfbf1d9aaf8c0677cf70218910c6", "sha256:3c9b12575734155d0c09d6c3e10dbd81665d5c18e1a7c6597df72fd05990c8cf",
"sha256:64e6175c2e53195278d7388c454e0b30997573f3f4bd63697f88d855f7a6a1fc", "sha256:3f6ea9bd35eb450837a3d80e77b517ea5bc56b4647f5502cd28de13675ee12f7",
"sha256:7227b47e73dedaa513cdebb98469705ef0d66eb5a1250144468e9c3097d6b59b", "sha256:4b58adb399c4d61d912c4c331984d60eb66565175cdf4a34792cd9600f21b394",
"sha256:7418b6bfc7fe3331541b84bb2141c9baf1ec7132a7ecd9f375912eca810e714e", "sha256:4d2e11331fc0c02b6e84b0d28ece3a36e0548ee1a1ce9ddde03752d9b79bba40",
"sha256:7cbd7574ce8e138bda9df4efc6bf2ab8572c9aff640d8ecfece1b006b68da963", "sha256:5454276c07d27a740c5892f4907c86327b632127dd9abec42ee62e12427ff7e3",
"sha256:7ff61ff178250f9bb3cd89752df0f1dd0e27316a8bd1465351652b1b4a4cdfd3", "sha256:561091a7be172ab497a3527602d467e2b3fbe75f9e783d8b8ce403fa414f71a6",
"sha256:833e1551925ed51e6b44c800e71e77dacd7e49181fdc9ac9a0bf3714d515785d", "sha256:6c3acb79b0bfd4fe733dff8bc62695283b57949ebcca05ae5c129eb606ff2d74",
"sha256:8639cadfda96737427330a094476d4c7a56ac03de7265622fcf4cfe57c8ae18d", "sha256:703f18f3fda276b9a916f0934d2fb6d989bf0b4fb5a64825260eb9bfd52d78f0",
"sha256:8c5d5b35f789a030ebb95bff352f1d27a93d81069f2adb3182d99882e095cefe", "sha256:7492e2b7bd7c9b9916388d9df23fa49d9b88ac0640db0a5b4ecc2b653bf451e3",
"sha256:8c790abda465726cfb8bb08bd4ca9a5d0a7bd77c7ac1ca1b839ad823b948ea28", "sha256:76ae285c8104046b3a7f06b42f29c7b73f77683df18c49ab5af7983994c2dd91",
"sha256:8d2f1fb53a421b410751887eb4ff21386d119ef9cde3797bf5e7ed49fb51a3b3", "sha256:7cafd1208fdbe93b67c7086876f061f660cfddc44f404279c1585bbf3cdc64c5",
"sha256:903bbd302a2378f984aef528f76d4c9b1748f318fe1294961c072bdc7f2ffa3e", "sha256:7efde645ca1cc441d6dc4b48c0f7101e8d86b54c8530141b09fd31cef5149ec9",
"sha256:93f81b134a165cc17123626ab8da2e30c0455441d4ab5576eed73a64c025b25c", "sha256:88d9ab96491d38a5ab7c56dd7a3cc37d83336ecc564e4e8816dbed12e5aaefc8",
"sha256:95e69877983ea39b7303570fa6760f81a3eec23d0e3ab2021b7144b94d06202d", "sha256:8eab883b3b2a38cc1e050819ef06a7e6344d4a990d24d45bc6f2cf959045a45b",
"sha256:9633b3034d3d901f0a46b7939f8c4d64427dfba6bbc5a36b1a67364cf148a1b0", "sha256:910841381caba4f744a44bf81bfd573c94e10b3045ee00de0cbf436fe50673a6",
"sha256:97e5306482182170ade15c4b0d8386ded995a07d7cc2ca8f27958d34d6736497", "sha256:9190f09060ea4debddd24665d6804b995a9c122ef5917ab26e1566dcc712ceeb",
"sha256:9f3cba480d3deb69f6ee2c1825060177a22c7826431458c697df88e6aeb3caee", "sha256:937e9020b514ceedb9c830c55d5c9872abc90f4b5862f89c0887033ae33c6f73",
"sha256:aa5b467f15e78b82257319aebc78dd2915e4c1436c3c0d1ad6f53e47ba6e2713", "sha256:94c817e84245513926588caf1152e3b559ff794d505555211ca041f032abbb6b",
"sha256:abb7a75ed8b968f3061327c433a0fbd17b729947b400747c334a9c29a9af6c58", "sha256:971ce5e14dc5e73715755d0ca2975ac88cfdaefcaab078a284fea6cfabf866df",
"sha256:aec52725173bd3a7b56fe91bc56eccb26fbdff1386ef123abb63c84c5b43b63a", "sha256:9d14b83fab60d5e8abe587d51c75b252bcc21683f24699ada8fb275d7712f5a9",
"sha256:b11548073a2213d950c3f671aa88e6f83cda6e2fb97a8b6317b1b5b33d850e06", "sha256:9f35ec95538f50292f6d8f2c9c9f8a3c6540bbfec21c9e5b4b751e0a7c20864f",
"sha256:b1692f7d6bc45e3200844be0dba153612103db241691088626a33ff1f24a0d88", "sha256:a1846f1b999e78e13837c93c778dcfc3365902cfb8d1bdb7dd73ead37059f0d0",
"sha256:b336501a05e13b616ef81ce329c0e09ac5ed8c732d9ba7e3e983fcc1a9e86965", "sha256:acd2162a36d3de67ee896c43effcd5ee3de247eb00354db411feb025aa319857",
"sha256:b8c008de9d0daba7b6666aa5bbfdc23dcd78cafc33997c9b7741ff6353bafb7f", "sha256:b0ef99cdbe2b682b9ccbb964743a6aca37905fda5e0452e5ee239b1654d37f2a",
"sha256:b92e29e58bef6d9cfd340c72b04d74c4b4e9f70c9fa7c78b674d1fec18896dc4", "sha256:b80f600eddddce72320dbbc8e3784d16bd3fb7b517e82476d8da921f27d4b249",
"sha256:be5f425ff1f5f4b3c1e33ad64ab994eed12fc284a6ea71c5243fd564502ecbe5", "sha256:b864ba53912b6c3ab6bcb2beb19f19edd01a6bfcbdfe1f37ddd1778abfe75a30",
"sha256:dd0b1e9e891f69e7675ba5c92e28b90eaa045f6ab134ffe70b52e948aa175b3c", "sha256:b9ec052b06a0524f0e35bd8790686a1da006bd911dd1ef7d50b77bfbad74e292",
"sha256:e30f5ea4ae2346e62cedde8794a56858a67b878dd79f7df76a0767e356b1744a", "sha256:ba2956617f1c42598a308a84c6cf021a90ff3862eddafd20c3333d50f0edb45b",
"sha256:e6a36bb9474218c7a5b27ae476035497a6990e21d04c279884eb10d9b290f1b1", "sha256:bdfea8c661e80d3c1c99ad7c3ff74e6e87184895bbaca6ee8cc61209f8b9b85d",
"sha256:e859fcb4cbe93504ea18008d1df98dee4f7766db66c435e4882ab35cf70cac43", "sha256:be4ed120b52ae4d974aa40215fcdfde9194d63541c7ded40ee12eb4dda57b76b",
"sha256:eb6ea6da4c787111adf40f697b4e58732ee0942b5d3bd8f435277643329ba627", "sha256:c4302695ad8027363e96311df24ee28978162cdcdd2006476c43970b384a244c",
"sha256:ec8c433b3ab0419100bd45b47c9c8551248a5aee30ca5e9d399a0b57ac04651b", "sha256:c48f54ef8e05f04d6eff74b8233f6063cb1ed960243eacc474ee73a2ea8573ca",
"sha256:eff9d20417ff9dcb0d25e2defc2574d10b491bf2e693b4e491914738b7908168", "sha256:c9c59a2120b55788e800d82dfa99b9e156ff8f2227f07c5e3012a45a399620b7",
"sha256:f0214eb2a23b85528310dad848ad2ac58e735612929c8072f6093f3585fd342d", "sha256:cd021c754b162c0fb55ad5d6b9d960db667faad0fa2ff25bb6e1301b0b6e6a75",
"sha256:f276df9830dba7a333544bd41070e8175762a7ac20350786b322b714b0e654f5", "sha256:d27ec7509b9c18b6d73f2f5ede2622441de812e7b1a80bbd446cb0633bd3d5ae",
"sha256:f3acda1924472472ddd60c29e5b9db0cec629fbe3c5c5accb74d6d6d14773478", "sha256:d5508f0b173e6aa47273bdc0a0b5ba055b59662ba7c7ee5119528f466585526b",
"sha256:f70a9e237bb792c7cc7e44c531fd48f5897961701cdaa06cf22fc14965c496cf", "sha256:d75209eed723105f9596807495d58d10b3470fa6732dd6756595e89925ce2470",
"sha256:f9d29ca8a77117315101425ec7ec2a47a22ccf59f5593378fc4077ac5b754fce", "sha256:db1a39669102a1d8d12b57de2bb7e2ec9066a6f2b3da35ae511ff93b01b5d564",
"sha256:fa877ca7f6b48054f847b61d6fa7bed5cebb663ebc55e018fda12db09dcc664c", "sha256:dbfcfc0218093a19c252ca8eb9aee3d29cfdcb586df21049b9d777fd32c14fd9",
"sha256:fdcec0b8399108577ec290f55551d926d9a1fa6cad45882093a7a07ac5ec147b" "sha256:e0f72c9ddb8cd28532185f54cc1453f2c16fb417a08b53a855c4e6a418edd099",
"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": "==1.1.2" "version": "==2.0.2"
}, },
"ipdb": { "ipdb": {
"hashes": [ "hashes": [
"sha256:951bd9a64731c444fd907a5ce268543020086a697f6be08f7cc2c9a752a278c5" "sha256:c23b6736f01fd4586cc2ecbebdf79a5eb454796853e1cd8f2ed3b7b91d4a3e93",
"sha256:f74c2f741c18b909eaf89f19fde973f745ac721744aa1465888ce45813b63a9c"
], ],
"index": "pypi", "index": "pypi",
"version": "==0.13.9" "version": "==0.13.11"
}, },
"ipython": { "ipython": {
"hashes": [ "hashes": [
"sha256:55df3e0bd0f94e715abd968bedd89d4e8a7bce4bf498fb123fed4f5398fea874", "sha256:b13a1d6c1f5818bd388db53b7107d17454129a70de2b87481d555daede5eb49e",
"sha256:b5548ec5329a4bcf054a5deed5099b0f9622eb9ea51aaa7104d215fece201d8c" "sha256:b38c31e8fc7eff642fc7c597061fff462537cf2314e3225a19c906b7b0d8a345"
], ],
"index": "pypi", "index": "pypi",
"version": "==7.31.1" "version": "==8.10.0"
}, },
"isort": { "isort": {
"hashes": [ "hashes": [
"sha256:0a943902919f65c5684ac4e0154b1ad4fac6dcaa5d9f3426b732f1c8b5419be6", "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504",
"sha256:2bb1680aad211e3c9944dbce1d4ba09a989f04e238296c87fe2139faa26d655d" "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6"
], ],
"index": "pypi", "index": "pypi",
"version": "==5.8.0" "version": "==5.12.0"
}, },
"jedi": { "jedi": {
"hashes": [ "hashes": [
"sha256:637c9635fcf47945ceb91cd7f320234a7be540ded6f3e99a50cb6febdfd1ba8d", "sha256:203c1fd9d969ab8f2119ec0a3342e0b49910045abe6af0a3ae83a5764d54639e",
"sha256:74137626a64a99c8eb6ae5832d99b3bdd7d29a3850fe2aa80a4126b2a7d949ab" "sha256:bae794c30d07f6d910d32a7048af09b5a39ed740918da923c6b780790ebac612"
], ],
"markers": "python_version >= '3.6'", "markers": "python_version >= '3.6'",
"version": "==0.18.1" "version": "==0.18.2"
}, },
"matplotlib-inline": { "matplotlib-inline": {
"hashes": [ "hashes": [
"sha256:a04bfba22e0d1395479f866853ec1ee28eea1485c1d69a6faf00dc3e24ff34ee", "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311",
"sha256:aed605ba3b72462d64d475a21a9296f400a19c4f74a31b59103d2a99ffd5aa5c" "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304"
], ],
"markers": "python_version >= '3.5'", "markers": "python_version >= '3.5'",
"version": "==0.1.3" "version": "==0.1.6"
}, },
"mccabe": { "mccabe": {
"hashes": [ "hashes": [
"sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42", "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325",
"sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f" "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"
], ],
"version": "==0.6.1" "markers": "python_version >= '3.6'",
"version": "==0.7.0"
}, },
"msgpack": { "msgpack": {
"hashes": [ "hashes": [
"sha256:0d8c332f53ffff01953ad25131272506500b14750c1d0ce8614b17d098252fbc", "sha256:002b5c72b6cd9b4bafd790f364b8480e859b4712e91f43014fe01e4f957b8467",
"sha256:1c58cdec1cb5fcea8c2f1771d7b5fec79307d056874f746690bd2bdd609ab147", "sha256:0a68d3ac0104e2d3510de90a1091720157c319ceeb90d74f7b5295a6bee51bae",
"sha256:2c3ca57c96c8e69c1a0d2926a6acf2d9a522b41dc4253a8945c4c6cd4981a4e3", "sha256:0df96d6eaf45ceca04b3f3b4b111b86b33785683d682c655063ef8057d61fd92",
"sha256:2f30dd0dc4dfe6231ad253b6f9f7128ac3202ae49edd3f10d311adc358772dba", "sha256:0dfe3947db5fb9ce52aaea6ca28112a170db9eae75adf9339a1aec434dc954ef",
"sha256:2f97c0f35b3b096a330bb4a1a9247d0bd7e1f3a2eba7ab69795501504b1c2c39", "sha256:0e3590f9fb9f7fbc36df366267870e77269c03172d086fa76bb4eba8b2b46624",
"sha256:36a64a10b16c2ab31dcd5f32d9787ed41fe68ab23dd66957ca2826c7f10d0b85", "sha256:11184bc7e56fd74c00ead4f9cc9a3091d62ecb96e97653add7a879a14b003227",
"sha256:3d875631ecab42f65f9dce6f55ce6d736696ced240f2634633188de2f5f21af9", "sha256:112b0f93202d7c0fef0b7810d465fde23c746a2d482e1e2de2aafd2ce1492c88",
"sha256:40fb89b4625d12d6027a19f4df18a4de5c64f6f3314325049f219683e07e678a", "sha256:1276e8f34e139aeff1c77a3cefb295598b504ac5314d32c8c3d54d24fadb94c9",
"sha256:47d733a15ade190540c703de209ffbc42a3367600421b62ac0c09fde594da6ec", "sha256:1576bd97527a93c44fa856770197dec00d223b0b9f36ef03f65bac60197cedf8",
"sha256:494471d65b25a8751d19c83f1a482fd411d7ca7a3b9e17d25980a74075ba0e88", "sha256:1e91d641d2bfe91ba4c52039adc5bccf27c335356055825c7f88742c8bb900dd",
"sha256:51fdc7fb93615286428ee7758cecc2f374d5ff363bdd884c7ea622a7a327a81e", "sha256:26b8feaca40a90cbe031b03d82b2898bf560027160d3eae1423f4a67654ec5d6",
"sha256:6eef0cf8db3857b2b556213d97dd82de76e28a6524853a9beb3264983391dc1a", "sha256:2999623886c5c02deefe156e8f869c3b0aaeba14bfc50aa2486a0415178fce55",
"sha256:6f4c22717c74d44bcd7af353024ce71c6b55346dad5e2cc1ddc17ce8c4507c6b", "sha256:2a2df1b55a78eb5f5b7d2a4bb221cd8363913830145fad05374a80bf0877cb1e",
"sha256:73a80bd6eb6bcb338c1ec0da273f87420829c266379c8c82fa14c23fb586cfa1", "sha256:2bb8cdf50dd623392fa75525cce44a65a12a00c98e1e37bf0fb08ddce2ff60d2",
"sha256:89908aea5f46ee1474cc37fbc146677f8529ac99201bc2faf4ef8edc023c2bf3", "sha256:2cc5ca2712ac0003bcb625c96368fd08a0f86bbc1a5578802512d87bc592fe44",
"sha256:8a3a5c4b16e9d0edb823fe54b59b5660cc8d4782d7bf2c214cb4b91a1940a8ef", "sha256:35bc0faa494b0f1d851fd29129b2575b2e26d41d177caacd4206d81502d4c6a6",
"sha256:96acc674bb9c9be63fa8b6dabc3248fdc575c4adc005c440ad02f87ca7edd079", "sha256:3c11a48cf5e59026ad7cb0dc29e29a01b5a66a3e333dc11c04f7e991fc5510a9",
"sha256:973ad69fd7e31159eae8f580f3f707b718b61141838321c6fa4d891c4a2cca52", "sha256:449e57cc1ff18d3b444eb554e44613cffcccb32805d16726a5494038c3b93dab",
"sha256:9b6f2d714c506e79cbead331de9aae6837c8dd36190d02da74cb409b36162e8a", "sha256:462497af5fd4e0edbb1559c352ad84f6c577ffbbb708566a0abaaa84acd9f3ae",
"sha256:9c0903bd93cbd34653dd63bbfcb99d7539c372795201f39d16fdfde4418de43a", "sha256:4733359808c56d5d7756628736061c432ded018e7a1dff2d35a02439043321aa",
"sha256:9fce00156e79af37bb6db4e7587b30d11e7ac6a02cb5bac387f023808cd7d7f4", "sha256:48f5d88c99f64c456413d74a975bd605a9b0526293218a3b77220a2c15458ba9",
"sha256:a598d0685e4ae07a0672b59792d2cc767d09d7a7f39fd9bd37ff84e060b1a996", "sha256:49565b0e3d7896d9ea71d9095df15b7f75a035c49be733051c34762ca95bbf7e",
"sha256:b0a792c091bac433dfe0a70ac17fc2087d4595ab835b47b89defc8bbabcf5c73", "sha256:4ab251d229d10498e9a2f3b1e68ef64cb393394ec477e3370c457f9430ce9250",
"sha256:bb87f23ae7d14b7b3c21009c4b1705ec107cb21ee71975992f6aca571fb4a42a", "sha256:4d5834a2a48965a349da1c5a79760d94a1a0172fbb5ab6b5b33cbf8447e109ce",
"sha256:bf1e6bfed4860d72106f4e0a1ab519546982b45689937b40257cfd820650b920", "sha256:4dea20515f660aa6b7e964433b1808d098dcfcabbebeaaad240d11f909298075",
"sha256:c1ba333b4024c17c7591f0f372e2daa3c31db495a9b2af3cf664aef3c14354f7", "sha256:545e3cf0cf74f3e48b470f68ed19551ae6f9722814ea969305794645da091236",
"sha256:c2140cf7a3ec475ef0938edb6eb363fa704159e0bf71dde15d953bacc1cf9d7d", "sha256:63e29d6e8c9ca22b21846234913c3466b7e4ee6e422f205a2988083de3b08cae",
"sha256:c7e03b06f2982aa98d4ddd082a210c3db200471da523f9ac197f2828e80e7770", "sha256:6916c78f33602ecf0509cc40379271ba0f9ab572b066bd4bdafd7434dee4bc6e",
"sha256:d02cea2252abc3756b2ac31f781f7a98e89ff9759b2e7450a1c7a0d13302ff50", "sha256:6a4192b1ab40f8dca3f2877b70e63799d95c62c068c84dc028b40a6cb03ccd0f",
"sha256:da24375ab4c50e5b7486c115a3198d207954fe10aaa5708f7b65105df09109b2", "sha256:6c9566f2c39ccced0a38d37c26cc3570983b97833c365a6044edef3574a00c08",
"sha256:e4c309a68cb5d6bbd0c50d5c71a25ae81f268c2dc675c6f4ea8ab2feec2ac4e2", "sha256:76ee788122de3a68a02ed6f3a16bbcd97bc7c2e39bd4d94be2f1821e7c4a64e6",
"sha256:f01b26c2290cbd74316990ba84a14ac3d599af9cebefc543d241a66e785cf17d", "sha256:7760f85956c415578c17edb39eed99f9181a48375b0d4a94076d84148cf67b2d",
"sha256:f201d34dc89342fabb2a10ed7c9a9aaaed9b7af0f16a5923f1ae562b31258dea", "sha256:77ccd2af37f3db0ea59fb280fa2165bf1b096510ba9fe0cc2bf8fa92a22fdb43",
"sha256:f74da1e5fcf20ade12c6bf1baa17a2dc3604958922de8dc83cbe3eff22e8b611" "sha256:81fc7ba725464651190b196f3cd848e8553d4d510114a954681fd0b9c479d7e1",
"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.3" "version": "==1.0.4"
}, },
"mypy-extensions": { "mypy-extensions": {
"hashes": [ "hashes": [
"sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d", "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d",
"sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8" "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"
], ],
"version": "==0.4.3" "markers": "python_version >= '3.5'",
"version": "==1.0.0"
}, },
"neovim": { "neovim": {
"hashes": [ "hashes": [
@@ -278,10 +332,11 @@
}, },
"pathspec": { "pathspec": {
"hashes": [ "hashes": [
"sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a", "sha256:3a66eb970cbac598f9e5ccb5b2cf58930cd8e3ed86d393d541eaf2d8b1705229",
"sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1" "sha256:64d338d4e0914e91c1792321e6907b5a593f1ab1851de7fc269557a21b30ebbc"
], ],
"version": "==0.9.0" "markers": "python_version >= '3.7'",
"version": "==0.11.0"
}, },
"pexpect": { "pexpect": {
"hashes": [ "hashes": [
@@ -298,13 +353,21 @@
], ],
"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:1bb05628c7d87b645974a1bad3f17612be0c29fa39af9f7688030163f680bad6", "sha256:3e163f254bef5a03b146397d7c1963bd3e2812f0964bb9a24e6ec761fd28db63",
"sha256:e56f2ff799bacecd3e88165b1e2f5ebf9bcd59e80e06d395fa0cc4b8bd7bb506" "sha256:aa64ad242a462c5ff0363a7b9cfe696c20d55d9fc60c11fd8e632d064804d305"
], ],
"markers": "python_full_version >= '3.6.2'", "markers": "python_full_version >= '3.6.2'",
"version": "==3.0.24" "version": "==3.0.36"
}, },
"ptyprocess": { "ptyprocess": {
"hashes": [ "hashes": [
@@ -313,29 +376,36 @@
], ],
"version": "==0.7.0" "version": "==0.7.0"
}, },
"pure-eval": {
"hashes": [
"sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350",
"sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3"
],
"version": "==0.2.2"
},
"pycodestyle": { "pycodestyle": {
"hashes": [ "hashes": [
"sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068", "sha256:347187bdb476329d98f695c213d7295a846d1152ff4fe9bacb8a9590b8ee7053",
"sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef" "sha256:8a4eaf0d0495c7395bdab3589ac2db602797d76207242c17d470186815706610"
], ],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "markers": "python_version >= '3.6'",
"version": "==2.7.0" "version": "==2.10.0"
}, },
"pyflakes": { "pyflakes": {
"hashes": [ "hashes": [
"sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3", "sha256:ec55bf7fe21fff7f1ad2f7da62363d749e2a470500eab1b555334b67aa1ef8cf",
"sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db" "sha256:ec8b276a6b60bd80defed25add7e439881c19e64850afd9b346283d4165fd0fd"
], ],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "markers": "python_version >= '3.6'",
"version": "==2.3.1" "version": "==3.0.1"
}, },
"pygments": { "pygments": {
"hashes": [ "hashes": [
"sha256:44238f1b60a76d78fc8ca0528ee429702aae011c265fe6a8dd8b63049ae41c65", "sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297",
"sha256:4e426f72023d88d03b2fa258de560726ce890ff3b630f88c21cbb8b2503b8c6a" "sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717"
], ],
"markers": "python_version >= '3.5'", "markers": "python_version >= '3.6'",
"version": "==2.11.2" "version": "==2.14.0"
}, },
"pynvim": { "pynvim": {
"hashes": [ "hashes": [
@@ -360,114 +430,27 @@
}, },
"python-dotenv": { "python-dotenv": {
"hashes": [ "hashes": [
"sha256:32b2bdc1873fd3a3c346da1c6db83d0053c3c62f28f1f38516070c4c8971b1d3", "sha256:1c93de8f636cde3ce377292818d0e440b6e45a82f215c3744979151fa8151c49",
"sha256:a5de49a31e953b45ff2d2fd434bbc2670e8db5273606c1e737cc6b93eff3655f" "sha256:41e12e0318bebc859fcc4d97d4db8d20ad21721a6aa5047dd59f090391cb549a"
], ],
"markers": "python_version >= '3.5'", "markers": "python_version >= '3.7'",
"version": "==0.19.2" "version": "==0.21.1"
}, },
"python-magic": { "python-magic": {
"hashes": [ "hashes": [
"sha256:4fec8ee805fea30c07afccd1592c0f17977089895bdfaae5fec870a84e997626", "sha256:c1ba14b08e4a5f5c31a302b7721239695b2f0f058d125bd5ce1ee36b9d9d3c3b",
"sha256:de800df9fb50f8ec5974761054a708af6e4246b03b4bdaee993f948947b0ebcf" "sha256:c212960ad306f700aa0d01e5d7a325d20548ff97eb9920dcd29513174f0294d3"
], ],
"index": "pypi", "index": "pypi",
"version": "==0.4.24" "version": "==0.4.27"
},
"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:49cd23d516b17974b22b611a95ce4d93fe326feaa07320bd1d234fed68cbccfa", "sha256:15330776e7ff993d8ae0ac213bf896f210719e9b91445f5f7626a8fa7e74e30b",
"sha256:966b0a494a916fc3b4324de38f089c86c70ee90e8e1cae6d59102103a4c0cc03" "sha256:2204306742c33c24fbca02b78e059bacfc1bfc04af09c7e9866f267a11a9ddb2"
], ],
"index": "pypi", "index": "pypi",
"version": "==2.1.0" "version": "==2.3.0"
},
"setuptools": {
"hashes": [
"sha256:2404879cda71495fc4d5cbc445ed52fdaddf352b36e40be8dcc63147cb4edabe",
"sha256:68eb94073fc486091447fcb0501efd6560a0e5a1839ba249e5ff3c4c93f05f90"
],
"markers": "python_version >= '3.7'",
"version": "==60.5.0"
}, },
"six": { "six": {
"hashes": [ "hashes": [
@@ -477,35 +460,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"
}, },
"testfixtures": { "stack-data": {
"hashes": [ "hashes": [
"sha256:2600100ae96ffd082334b378e355550fef8b4a529a6fa4c34f47130905c7426d", "sha256:32d2dd0376772d01b6cb9fc996f3c8b57a357089dec328ed4b6553d037eaf815",
"sha256:6ddb7f56a123e1a9339f130a200359092bd0a6455e31838d6c477e8729bb7763" "sha256:cbb2a53eb64e5785878201a97ed7c7b94883f48b87bfb0bbe8b623c74679e4a8"
], ],
"version": "==6.18.3" "version": "==0.6.2"
}, },
"toml": { "tomli": {
"hashes": [ "hashes": [
"sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc",
"sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"
], ],
"markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", "markers": "python_version < '3.11'",
"version": "==0.10.2" "version": "==2.0.1"
}, },
"traitlets": { "traitlets": {
"hashes": [ "hashes": [
"sha256:059f456c5a7c1c82b98c2e8c799f39c9b8128f6d0d46941ee118daace9eb70c7", "sha256:9e6ec080259b9a5940c797d58b613b5e31441c2257b87c2e795c5228ae80d2d8",
"sha256:2d313cc50a42cd6c277e7d7dc8d4d7fedd06a2c215f78766ae7b1a66277e0033" "sha256:f6cde21a9c68cf756af02035f72d5a723bf607e862e7be33ece505abf4a3bad9"
], ],
"markers": "python_version >= '3.7'", "markers": "python_version >= '3.7'",
"version": "==5.1.1" "version": "==5.9.0"
}, },
"wcwidth": { "wcwidth": {
"hashes": [ "hashes": [
"sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784", "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e",
"sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83" "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0"
], ],
"version": "==0.2.5" "version": "==0.2.6"
} }
} }
} }

View File

@@ -1,28 +1,21 @@
# KMK: Clackety Keyboards Powered by Python # KMK: Clackety Keyboards Powered by Python
![GitHub](https://img.shields.io/github/license/KMKfw/kmk_firmware) ![GitHub](https://img.shields.io/github/license/KMKfw/kmk_firmware)
![GitHub contributors](https://img.shields.io/github/contributors/KMKfw/kmk_firmware) ![GitHub contributors](https://img.shields.io/github/contributors/KMKfw/kmk_firmware)
[![Discord](https://img.shields.io/discord/493256121075761173?logo=Discord)](https://discord.gg/QBHUUpeGUd)
![Lines of code](https://img.shields.io/tokei/lines/github/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 issues](https://img.shields.io/github/issues-raw/KMKfw/kmk_firmware)
![GitHub closed issues](https://img.shields.io/github/issues-closed/KMKfw/kmk_firmware) ![GitHub closed issues](https://img.shields.io/github/issues-closed/KMKfw/kmk_firmware)
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).
**KMK is currently looking for maintainers.** If you like keyboards and/or For asynchronous support and chatter about KMK, [join our Zulip
Python, and ideally have contributed to KMK in the past, and are interested in community](https://kmkfw.zulipchat.com)! In particular, swing by the Zulip chat
(co-)maintaining KMK, comment on [the relevant GitHub *before* opening a GitHub Issue about configuration, documentation, etc.
issue](https://github.com/KMKfw/kmk_firmware/issues/196) or drop by the Matrix concerns.
channel below.
> If you need support with KMK or just want to say hi, find us in > The former Matrix and Discord rooms once linked to in this README are no
> [#kmkfw:klar.sh on Matrix](https://matrix.to/#/#kmkfw:klar.sh). This channel > longer officially supported, please do not use them!
> is bridged to Discord
> [here](https://discord.gg/QBHUUpeGUd) for
> convenience.
## Features ## Features
@@ -30,38 +23,24 @@ channel below.
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](https://github.com/KMKfw/kmk_firmware/blob/master/docs/split_keyboards.md) keyboards](/docs/en/split_keyboards.md)
are supported are supported
- [Chainable - [Chainable
keys](https://github.com/KMKfw/kmk_firmware/blob/master/docs/keys.md) such as keys](/docs/en/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](https://github.com/KMKfw/kmk_firmware/blob/master/docs/sequences.md) emojis](/docs/en/sequences.md)
- [RGB underglow](https://github.com/KMKfw/kmk_firmware/blob/master/docs/rgb.md) - [RGB underglow](/docs/en/rgb.md)
and [LED and [LED
backlights](https://github.com/KMKfw/kmk_firmware/blob/master/docs/led.md) backlights](/docs/en/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](https://github.com/KMKfw/kmk_firmware/blob/master/docs/tapdance.md) it](/docs/en/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](https://github.com/KMKfw/kmk_firmware/blob/master/docs/Getting_Started.md). [here](/docs/en/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

10
boards/Pico14/README.md Normal file
View File

@@ -0,0 +1,10 @@
# Pico 14 Numerical Keypad
![Pico14](https://www.boltind.com/wp-content/uploads/2022/01/PXL_20220119_171113903-scaled.jpg)
Pico 14 Numerical Keypad / Macro Pad PCBs 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/)

23
boards/Pico14/kb.py Normal file
View File

@@ -0,0 +1,23 @@
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

56
boards/Pico14/main.py Normal file
View File

@@ -0,0 +1,56 @@
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()

View File

@@ -0,0 +1,12 @@
# 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

View File

@@ -0,0 +1,20 @@
'''
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])

View File

@@ -0,0 +1,90 @@
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()

View File

@@ -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/encoder.md) Twist control for all the things - [Encoder](/docs/en/encoder.md) Twist control for all the things
- [RGB](/docs/rgb.md) Light it up (for underlighting) - [RGB](/docs/en/rgb.md) Light it up (for underlighting)
- [MediaKeys](/docs/media_keys.md) Control volume and other media functions - [MediaKeys](/docs/en/media_keys.md) Control volume and other media functions

View File

@@ -15,6 +15,7 @@ knob.extensions.append(media_keys)
# Rotary encoder that also acts as a key # Rotary encoder that also acts as a key
encoder_handler = EncoderHandler() encoder_handler = EncoderHandler()
encoder_handler.divisor = 2
encoder_handler.pins = ((board.D1, board.D2, board.D0),) encoder_handler.pins = ((board.D1, board.D2, board.D0),)
encoder_handler.map = (((KC.VOLD, KC.VOLU, KC.MUTE),),) encoder_handler.map = (((KC.VOLD, KC.VOLU, KC.MUTE),),)
knob.modules.append(encoder_handler) knob.modules.append(encoder_handler)

View File

@@ -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/encoder.md) Twist control for all the things - [Encoder](/docs/en/encoder.md) Twist control for all the things
- [RGB](/docs/rgb.md) Light it up (for underlighting) - [RGB](/docs/en/rgb.md) Light it up (for underlighting)
- [MediaKeys](/docs/media_keys.md) Control volume and other media functions - [MediaKeys](/docs/en/media_keys.md) Control volume and other media functions

View File

@@ -15,6 +15,7 @@ knob.extensions.append(media_keys)
# Rotary encoders that also acts as keys # Rotary encoders that also acts as keys
encoder_handler = EncoderHandler() encoder_handler = EncoderHandler()
encoder_handler.divisor = 2
encoder_handler.pins = ( encoder_handler.pins = (
(board.D1, board.D2, board.D0), (board.D1, board.D2, board.D0),
(board.D9, board.D10, board.D3), (board.D9, board.D10, board.D3),

View File

@@ -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/encoder.md) Twist control for all the things - [Encoder](/docs/en/encoder.md) Twist control for all the things
- [LED](/docs/led.md) Light your keys up (for backlit) - [LED](/docs/en/led.md) Light your keys up (for backlit)
- [RGB](/docs/rgb.md) Light it up (for underlighting) - [RGB](/docs/en/rgb.md) Light it up (for underlighting)
- [MediaKeys](/docs/media_keys.md) Control volume and other media functions - [MediaKeys](/docs/en/media_keys.md) Control volume and other media functions

View File

@@ -78,6 +78,7 @@ keyboard.keymap = [
# Rotary encoder that also acts as a key # Rotary encoder that also acts as a key
encoder_handler = EncoderHandler() encoder_handler = EncoderHandler()
encoder_handler.divisor = 2
encoder_handler.pins = ((board.D8, board.D7, board.D9),) encoder_handler.pins = ((board.D8, board.D7, board.D9),)
encoder_handler.map = (((KC.VOLD, KC.VOLU, KC.MUTE),),) encoder_handler.map = (((KC.VOLD, KC.VOLU, KC.MUTE),),)
keyboard.modules.append(encoder_handler) keyboard.modules.append(encoder_handler)

View File

@@ -0,0 +1,12 @@
# 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

View File

@@ -0,0 +1,97 @@
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()

View File

@@ -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/layers.md) Need more keys than switches? Use layers. - [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [RGB](/docs/rgb.md) Light it up - [RGB](/docs/en/rgb.md) Light it up
- [Encoder](/docs/encoder.md) Twist control for all the things - [Encoder](/docs/en/encoder.md) Twist control for all the things

View File

@@ -10,4 +10,12 @@ Retailers (USA)
[Boardsource](https://boardsource.xyz/store/5ecc2008eee64242946c98c1) [Boardsource](https://boardsource.xyz/store/5ecc2008eee64242946c98c1)
Extensions enabled by default Extensions enabled by default
- [Layers](/docs/layers.md) Need more keys than switches? Use layers. - [Layers](/docs/en/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
```

View File

@@ -1,12 +1,12 @@
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.P1_15, board.P0_02, board.P0_29) row_pins = (pins[16], pins[17], pins[18])
col_pins = (board.P0_09, board.P0_10, board.P1_11, board.P1_13) col_pins = (pins[12], pins[13], pins[14], pins[15])
diode_orientation = DiodeOrientation.COLUMNS diode_orientation = DiodeOrientation.COLUMNS
i2c = board.I2C i2c = board.I2C
powersave_pin = board.P0_13

View File

@@ -3,9 +3,9 @@
![Boardsource4x12](https://boardsource.imgix.net/164c3388-5057-46c8-8fcd-82c58c7870ce.jpg?raw=true) ![Boardsource4x12](https://boardsource.imgix.net/164c3388-5057-46c8-8fcd-82c58c7870ce.jpg?raw=true)
![Boardsource4x12LP](https://boardsource.imgix.net/c2108ea4-7d70-4327-b4b4-88c8191b1369.jpg?raw=true) ![Boardsource4x12LP](https://boardsource.imgix.net/c2108ea4-7d70-4327-b4b4-88c8191b1369.jpg?raw=true)
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 4x12 ortholinear keyboard is an extremely common and beloved layout within
the keyboard community. Made popular by Jack's Planck from OLKB, the 4x12
kb.py is designed to work with the nice!nano ortholinear layout is possibly the most popular non-staggered layout available.
Retailers (USA) Retailers (USA)
4x12 4x12
@@ -14,8 +14,15 @@ 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/layers.md) Need more keys than switches? Use layers. - [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [MediaKeys](/docs/media_keys.md) Control volume and other media functions - [MediaKeys](/docs/en/media_keys.md) Control volume and other media functions
Common Extensions Common Extensions
- [Power](/docs/power.md) Powersaving features for battery life - [Power](/docs/en/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

View File

@@ -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.P0_08, board.P0_06, board.P0_17, board.P0_20) row_pins = (board.pins[1], pins[0], board.pins[4], board.pins[5])
col_pins = ( col_pins = (
board.P0_31, board.pins[19],
board.P0_29, board.pins[18],
board.P0_02, board.pins[17],
board.P1_15, board.pins[16],
board.P1_13, board.pins[15],
board.P1_11, board.pins[14],
board.P0_10, board.pins[13],
board.P0_09, board.pins[12],
board.P1_06, board.pins[11],
board.P1_04, board.pins[10],
board.P0_11, board.pins[9],
board.P1_00, board.pins[8],
) )
diode_orientation = DiodeOrientation.COLUMNS diode_orientation = DiodeOrientation.COLUMNS
i2c = board.I2C i2c = board.I2C
powersave_pin = board.P0_13

View File

@@ -3,9 +3,12 @@
![Boardsource5x12](https://boardsource.imgix.net/74abb511-792e-42d9-9f6e-8100c521b2e0.jpg?raw=true) ![Boardsource5x12](https://boardsource.imgix.net/74abb511-792e-42d9-9f6e-8100c521b2e0.jpg?raw=true)
![Boardsource5x12LP](https://boardsource.imgix.net/57ad3f69-3c88-4ae8-9592-6e4d2f45a58e.jpg?raw=true) ![Boardsource5x12LP](https://boardsource.imgix.net/57ad3f69-3c88-4ae8-9592-6e4d2f45a58e.jpg?raw=true)
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. 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
kb.py is designed to work with the nice!nano 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.
Retailers (USA) Retailers (USA)
5x12 5x12
@@ -14,8 +17,15 @@ 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/layers.md) Need more keys than switches? Use layers. - [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [MediaKeys](/docs/media_keys.md) Control volume and other media functions - [MediaKeys](/docs/en/media_keys.md) Control volume and other media functions
Common Extensions Common Extensions
- [Power](/docs/power.md) Powersaving features for battery life - [Power](/docs/en/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

View File

@@ -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.P0_08, board.P0_06, board.P0_17, board.P0_20, board.P0_22) row_pins = (board.pins[1], pins[0], board.pins[4], board.pins[5], board.pins[6])
col_pins = ( col_pins = (
board.P0_31, board.pins[19],
board.P0_29, board.pins[18],
board.P0_02, board.pins[17],
board.P1_15, board.pins[16],
board.P1_13, board.pins[15],
board.P1_11, board.pins[14],
board.P0_10, board.pins[13],
board.P0_09, board.pins[12],
board.P1_06, board.pins[11],
board.P1_04, board.pins[10],
board.P0_11, board.pins[9],
board.P1_00, board.pins[8],
) )
diode_orientation = DiodeOrientation.COLUMNS diode_orientation = DiodeOrientation.COLUMNS
i2c = board.I2C i2c = board.I2C
powersave_pin = board.P0_13

View File

@@ -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/split.md) Connects halves using a wire. - [Split](/docs/en/split.md) Connects halves using a wire.
- [Layers](/docs/layers.md) Need more keys than switches? Use layers. - [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [PEG_RGB](/docs/peg_rgb_matrix.md) Light it up! - [PEG_RGB](/docs/en/peg_rgb_matrix.md) Light it up!
- [PEG_OLED](/docs/peg_oled_display.md) Screens to see things on of course. - [PEG_OLED](/docs/en/peg_oled_display.md) Screens to see things on of course.
Common Extensions Common Extensions
- [Power](/docs/power.md) Powersaving features for battery life. - [Power](/docs/en/power.md) Powersaving features for battery life.
- [BLE_Split](/docs/split.md) Connects halves without wires (For the DIY version) - [BLE_Split](/docs/en/split.md) Connects halves without wires (For the DIY version)

View File

@@ -2,18 +2,26 @@
![microdox](https://boardsource.imgix.net/337ae65a-d061-46a4-b119-9916b043c58f.jpg?raw=true) ![microdox](https://boardsource.imgix.net/337ae65a-d061-46a4-b119-9916b043c58f.jpg?raw=true)
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. 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
kb.py is designed to work with the nice!nano from larger boards while maintaining a tiny footprint.
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/layers.md) Need more keys than switches? Use layers. - [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [BLE_Split](/docs/split_keyboards.md) Connects halves without wires - [BLE_Split](/docs/en/split_keyboards.md) Connects halves without wires
- [ModTap](/docs/modtap.md) Allows mod keys to act as different keys when tapped. - [ModTap](/docs/en/modtap.md) Allows mod keys to act as different keys when tapped.
Common Extensions Common Extensions
- [Split](/docs/split_keyboards.md) Connects halves using a wire - [Split](/docs/en/split_keyboards.md) Connects halves using a wire
- [Power](/docs/power.md) Powersaving features for battery life - [Power](/docs/enpower.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
```

View File

@@ -1,21 +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):
col_pins = (board.P0_31, board.P0_29, board.P0_02, board.P1_15, board.P1_13) col_pins = (
row_pins = (board.P0_10, board.P0_09, board.P1_04, board.P1_06) board.pins[19],
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.P0_08 data_pin = board.pins[1]
rgb_pixel_pin = board.P0_06 rgb_pixel_pin = pins[0]
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,

View File

@@ -6,8 +6,6 @@
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)
@@ -18,10 +16,18 @@ Corne LP
[Boardsource](https://boardsource.xyz/store/5f2efc462902de7151495057) [Boardsource](https://boardsource.xyz/store/5f2efc462902de7151495057)
Extensions enabled by default Extensions enabled by default
- [Layers](/docs/layers.md) Need more keys than switches? Use layers. - [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [RGB](/docs/rgb.md) Light it up - [RGB](/docs/en/rgb.md) Light it up
- [BLE_Split](/docs/split_keyboards.md) Connects halves without wires - [BLE_Split](/docs/en/split_keyboards.md) Connects halves without wires
Common Extensions Common Extensions
- [Split](/docs/split_keyboards.md) Connects halves using a wire - [Split](/docs/en/split_keyboards.md) Connects halves using a wire
- [Power](/docs/power.md) Powersaving features for battery life - [Power](/docs/en/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
```

View File

@@ -1,30 +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
class KMKKeyboard(_KMKKeyboard): class KMKKeyboard(_KMKKeyboard):
col_pins = ( col_pins = (
board.P0_31, pins[19],
board.P0_29, pins[18],
board.P0_02, pins[17],
board.P1_15, pins[16],
board.P1_13, pins[15],
board.P1_11, pins[14],
)
row_pins = (
pins[6],
pins[7],
pins[8],
pins[9],
) )
row_pins = (board.P0_22, board.P0_24, board.P1_00, board.P0_11)
diode_orientation = DiodeOrientation.COLUMNS diode_orientation = DiodeOrientation.COLUMNS
data_pin = board.P0_08 data_pin = pins[1]
rgb_pixel_pin = board.P0_06 rgb_pixel_pin = pins[0]
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, 29, 28, 27, 26, 25, 24, 0, 1, 2, 3, 4, 5, 29, 28, 27, 26, 25, 24,
6, 7, 8, 9, 10, 11, 35, 34, 33, 32, 31, 30, 6, 7, 8, 9, 10, 11, 35, 34, 33, 32, 31, 30,
12, 13, 14, 15, 16, 17, 41, 40, 39, 38, 37, 36, 12, 13, 14, 15, 16, 17, 41, 40, 39, 38, 37, 36,
21, 22, 23, 47, 46, 45, 21, 22, 23, 47, 46, 45,
] ]

View File

@@ -1,28 +0,0 @@
import board
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
from kmk.scanners import DiodeOrientation
class KMKKeyboard(_KMKKeyboard):
col_pins = (
board.A3,
board.A2,
board.A1,
board.A0,
board.SCK,
board.MISO,
)
row_pins = (board.D4, board.D5, board.D6, board.D7)
diode_orientation = DiodeOrientation.COLUMNS
data_pin = board.RX
rgb_pixel_pin = board.D0
i2c = board.I2C
# flake8: noqa
coord_mapping = [
0, 1, 2, 3, 4, 5, 29, 28, 27, 26, 25, 24,
6, 7, 8, 9, 10, 11, 35, 34, 33, 32, 31, 30,
12, 13, 14, 15, 16, 17, 41, 40, 39, 38, 37, 36,
21, 22, 23, 47, 46, 45,
]

View File

@@ -2,9 +2,15 @@
![ergo_travel](https://boardsource.imgix.net/fa53de62-fd37-4c75-8c5b-b4bec37927c1.jpg?raw=true) ![ergo_travel](https://boardsource.imgix.net/fa53de62-fd37-4c75-8c5b-b4bec37927c1.jpg?raw=true)
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. 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.
kb.py is designed to work with the nice!nano 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.
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)
@@ -15,10 +21,19 @@ 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/layers.md) Need more keys than switches? Use layers. - [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [BLE_Split](/docs/split_keyboards.md) Connects halves without wires - [BLE_Split](/docs/en/split_keyboards.md) Connects halves without wires
- [MediaKeys](/docs/media_keys.md) Control volume and other media functions - [MediaKeys](/docs/en/media_keys.md) Control volume and other media functions
Common Extensions Common Extensions
- [Split](/docs/split_keyboards.md) Connects halves using a wire - [Split](/docs/en/split_keyboards.md) Connects halves using a wire
- [Power](/docs/power.md) Powersaving features for battery life - [Power](/docs/en/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
```

View File

@@ -1,30 +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 = (board.P0_24, board.P1_00, board.P0_11, board.P1_04) row_pins = (pins[7], pins[8], pins[9], pins[10])
col_pins = ( col_pins = (
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, pins[12],
board.P0_09, pins[10],
) )
diode_orientation = DiodeOrientation.COLUMNS diode_orientation = DiodeOrientation.COLUMNS
led_pin = board.P1_06 led_pin = pins[9]
rgb_pixel_pin = board.P0_06 rgb_pixel_pin = pins[0]
rgb_num_pixels = 12 rgb_num_pixels = 12
data_pin = board.P0_08 data_pin = pins[1]
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,

View File

@@ -0,0 +1,6 @@
# 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).

37
boards/ferris_sweep/kb.py Normal file
View File

@@ -0,0 +1,37 @@
# 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
]

114
boards/ferris_sweep/main.py Normal file
View File

@@ -0,0 +1,114 @@
# 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()

View File

@@ -2,12 +2,24 @@
![ffkb](https://fingerpunch.xyz/product/faux-fox-keyboard) ![ffkb](https://fingerpunch.xyz/product/faux-fox-keyboard)
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. 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
Use `kb2040/kb.py` when using a KB2040 MCU. trackball). KMK support is available for the BYO MCU option only.
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 steps. See guidance [over here](../../docs/Officially_Supported_Microcontrollers.md#nicenano). > Note: The Nice!Nano doesn't have a lot of ROM, so there are a couple of extra
> 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
```

View File

@@ -1,35 +1,37 @@
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 = (
board.D9, pins[11],
board.D8, pins[10],
board.D7, pins[9],
board.D6, pins[8],
board.D5, pins[7],
board.D4, pins[6],
board.MOSI, pins[10],
board.MISO, pins[12],
) )
row_pins = ( row_pins = (
board.D1, pins[1],
board.A3, pins[19],
board.A2, pins[18],
board.A1, pins[17],
board.A0, pins[16],
board.SCK, pins[15],
) )
diode_orientation = DiodeOrientation.COLUMNS diode_orientation = DiodeOrientation.COLUMNS
rgb_pixel_pin = board.D0 rgb_pixel_pin = pins[0]
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),

View File

@@ -4,14 +4,20 @@
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/layers.md) Need more keys than switches? Use layers. - [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [ModTap](/docs/modtap.md) Allows mod keys to act as different keys when tapped. - [ModTap](/docs/en/modtap.md) Allows mod keys to act as different keys when tapped.
- [LED](/docs/led.md) Light your keys up - [LED](/docs/en/led.md) Light your keys up
Common Extensions Common Extensions
- [Power](/docs/power.md) Powersaving features for battery life - [Power](/docs/en/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
```

View File

@@ -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 = (board.P1_15, board.P1_13, board.P1_11, board.P0_10, board.P0_09) row_pins = (pins[16], pins[15], pins[14], pins[13], pins[12])
col_pins = ( col_pins = (
board.P1_04, board.pins[10],
board.P0_11, board.pins[9],
board.P1_00, board.pins[8],
board.P0_24, board.pins[7],
board.P0_22, board.pins[6],
board.P0_20, board.pins[5],
) )
diode_orientation = DiodeOrientation.COLUMNS diode_orientation = DiodeOrientation.COLUMNS
led_pin = board.P1_06 led_pin = board.pins[11]
rgb_num_pixels = 0 rgb_num_pixels = 0
i2c = board.I2C i2c = board.I2C
powersave_pin = board.P0_13

View File

@@ -4,15 +4,20 @@
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/layers.md) Need more keys than switches? Use layers. - [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [RGB](/docs/rgb.md) RGB underglow - [RGB](/docs/en/rgb.md) RGB underglow
- [LED](/docs/led.md) Light your keys up - [LED](/docs/en/led.md) Light your keys up
Common Extensions Common Extensions
- [Power](/docs/power.md) Powersaving features for battery life - [Power](/docs/en/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
```

View File

@@ -1,30 +0,0 @@
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

View File

@@ -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 = (
board.P0_06, pins[0],
board.P0_08, board.pins[1],
board.P0_17, board.pins[4],
board.P0_20, board.pins[5],
board.P0_22, board.pins[6],
board.P0_24, board.pins[7],
board.P1_00, board.pins[8],
board.P0_11, board.pins[9],
) )
col_pins = ( col_pins = (
board.P0_31, board.pins[19],
board.P0_29, board.pins[18],
board.P0_02, board.pins[17],
board.P1_15, board.pins[16],
board.P1_13, board.pins[15],
board.P1_11, board.pins[14],
board.P0_10, board.pins[13],
board.P0_09, board.pins[12],
) )
diode_orientation = DiodeOrientation.COLUMNS diode_orientation = DiodeOrientation.COLUMNS
led_pin = board.P1_06 led_pin = board.pins[11]
rgb_pixel_pin = board.P1_04 rgb_pixel_pin = board.pins[10]
rgb_num_pixels = 8 rgb_num_pixels = 8
i2c = board.I2C i2c = board.I2C
powersave_pin = board.P0_13

111
boards/helix/README.md Normal file
View File

@@ -0,0 +1,111 @@
# Helix
![Helix](https://camo.githubusercontent.com/15552bce07c6ad8e2a9c25054bada9f6a12239d009771b372d2c2ea7a91ed8b2/68747470733a2f2f692e696d6775722e636f6d2f5842416d796e4e2e6a7067)
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- |
`-------------------------------------------------------------------------------------------------'
```

36
boards/helix/kb.py Normal file
View File

@@ -0,0 +1,36 @@
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
]

102
boards/helix/main.py Normal file
View File

@@ -0,0 +1,102 @@
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()

View File

@@ -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/layers.md) Need more keys than switches? Use layers. - [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [MediaKeys](/docs/media_keys.md) Control volume and other media functions - [MediaKeys](/docs/en/media_keys.md) Control volume and other media functions

View File

@@ -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/layers.md) Need more keys than switches? Use layers. - [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [RGB](/docs/rgb.md) Light it up - [RGB](/docs/en/rgb.md) Light it up
- [MediaKeys](/docs/media_keys.md) Control volume and other media functions - [MediaKeys](/docs/en/media_keys.md) Control volume and other media functions

View File

@@ -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/layers.md) Need more keys than switches? Use layers. - [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [RGB](/docs/rgb.md) Light it up - [RGB](/docs/en/rgb.md) Light it up
- [MediaKeys](/docs/media_keys.md) Control volume and other media functions - [MediaKeys](/docs/en/media_keys.md) Control volume and other media functions

View File

@@ -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/layers.md) Need more keys than switches? Use layers. - [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [RGB](/docs/rgb.md) Light it up - [RGB](/docs/en/rgb.md) Light it up
- [MediaKeys](/docs/media_keys.md) Control volume and other media functions - [MediaKeys](/docs/en/media_keys.md) Control volume and other media functions

View File

@@ -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/layers.md) Need more keys than switches? Use layers. - [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [RGB](/docs/rgb.md) Light it up - [RGB](/docs/en/rgb.md) Light it up
- [MediaKeys](/docs/media_keys.md) Control volume and other media functions - [MediaKeys](/docs/en/media_keys.md) Control volume and other media functions

View File

@@ -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/layers.md) Need more keys than switches? Use layers. - [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [RGB](/docs/rgb.md) Light it up - [RGB](/docs/en/rgb.md) Light it up
- [MediaKeys](/docs/media_keys.md) Control volume and other media functions - [MediaKeys](/docs/en/media_keys.md) Control volume and other media functions

View File

@@ -2,14 +2,20 @@
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/layers.md) Need more keys than switches? Use layers. - [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [RGB](/docs/rgb.md) Light it up - [RGB](/docs/en/rgb.md) Light it up
- [BLE_Split](/docs/split_keyboards.md) Connects halves without wires - [BLE_Split](/docs/en/split_keyboards.md) Connects halves without wires
Common Extensions Common Extensions
- [Split](/docs/split_keyboards.md) Connects halves using a wire - [Split](/docs/en/split_keyboards.md) Connects halves using a wire
- [Power](/docs/power.md) Powersaving features for battery life - [Power](/docs/en/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

View File

@@ -1,28 +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
class KMKKeyboard(_KMKKeyboard): class KMKKeyboard(_KMKKeyboard):
row_pins = (board.P1_00, board.P0_11, board.P1_04, board.P0_08, board.P0_22) row_pins = (
board.pins[8],
board.pins[9],
board.pins[10],
board.pins[1],
board.pins[6],
)
col_pins = ( col_pins = (
board.P0_02, board.pins[17],
board.P1_15, board.pins[16],
board.P1_13, board.pins[15],
board.P1_11, board.pins[14],
board.P0_10, board.pins[13],
board.P0_09, board.pins[12],
) )
diode_orientation = DiodeOrientation.COLUMNS diode_orientation = DiodeOrientation.COLUMNS
led_pin = board.P1_06 led_pin = board.pins[11]
rgb_pixel_pin = board.P0_06 rgb_pixel_pin = pins[0]
rgb_num_pixels = 12 rgb_num_pixels = 12
i2c = board.I2C i2c = board.I2C
data_pin = board.P0_20 data_pin = board.pins[5]
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,

View File

@@ -2,14 +2,21 @@
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/layers.md) Need more keys than switches? Use layers. - [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [RGB](/docs/rgb.md) Light it up - [RGB](/docs/en/rgb.md) Light it up
- [BLE_Split](/docs/split_keyboards.md) Connects halves without wires - [BLE_Split](/docs/en/split_keyboards.md) Connects halves without wires
Common Extensions Common Extensions
- [Split](/docs/split_keyboards.md) Connects halves using a wire - [Split](/docs/en/split_keyboards.md) Connects halves using a wire
- [Power](/docs/power.md) Powersaving features for battery life - [Power](/docs/en/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
```

View File

@@ -1,23 +1,24 @@
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.P0_22, board.P1_00, board.P0_11, board.P1_04) row_pins = (board.pins[6], board.pins[8], board.pins[9], board.pins[10])
col_pins = ( col_pins = (
board.P0_02, board.pins[17],
board.P1_15, board.pins[16],
board.P1_13, board.pins[15],
board.P1_11, board.pins[14],
board.P0_10, board.pins[13],
board.P0_09, board.pins[12],
) )
diode_orientation = DiodeOrientation.COLUMNS diode_orientation = DiodeOrientation.COLUMNS
rgb_pixel_pin = board.P0_06 rgb_pixel_pin = pins[0]
rgb_num_pixels = 12 rgb_num_pixels = 12
led_pin = board.P1_06 led_pin = board.pins[11]
data_pin = board.P0_08 data_pin = board.pins[1]
i2c = board.I2C i2c = board.I2C
powersave_pin = board.P0_13 powersave_pin = board.P0_13

View File

@@ -2,15 +2,21 @@
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/layers.md) Need more keys than switches? Use layers. - [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [RGB](/docs/rgb.md) Light it up - [RGB](/docs/en/rgb.md) Light it up
- [BLE_Split](/docs/split_keyboards.md) Connects halves without wires - [BLE_Split](/docs/en/split_keyboards.md) Connects halves without wires
Common Extensions Common Extensions
- [Split](/docs/split_keyboards.md) Connects halves using a wire - [Split](/docs/en/split_keyboards.md) Connects halves using a wire
- [Power](/docs/power.md) Powersaving features for battery life - [Power](/docs/en/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

View File

@@ -1,23 +1,29 @@
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.P0_22, board.P1_00, board.P0_11, board.P1_04, board.P1_06) row_pins = (
board.pins[6],
board.pins[8],
board.pins[9],
board.pins[10],
board.pins[11],
)
col_pins = ( col_pins = (
board.P0_08, board.pins[1],
board.P0_29, board.pins[18],
board.P0_02, board.pins[17],
board.P1_15, board.pins[16],
board.P1_13, board.pins[15],
board.P1_11, board.pins[14],
) )
diode_orientation = DiodeOrientation.COLUMNS diode_orientation = DiodeOrientation.COLUMNS
rgb_pixel_pin = board.P0_06 rgb_pixel_pin = pins[0]
rgb_num_pixels = 12 rgb_num_pixels = 12
data_pin = board.P0_08 data_pin = board.pins[1]
led_pin = board.P0_09 led_pin = board.pins[12]
i2c = board.I2C i2c = board.I2C
powersave_pin = board.P0_13

View File

@@ -1,46 +0,0 @@
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]

View File

@@ -9,11 +9,9 @@ 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.* | [SparkFun Pro Micro RP2040](https://www.sparkfun.com/products/18288) | kyria_v1_rp2040 | | 1.* | Any quickpin pro micro based board. | kb_v1_ |
| 1.* | [Adafruit KB2040](https://www.adafruit.com/product/5302) | kyria_v1_kb2040 | | 2.* | Any quickpin pro micro based board. | _waiting for pinout docs_ |
| 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
@@ -30,15 +28,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/split_keyboards.md) Connects halves using a wire - [Split](/docs/en/split_keyboards.md) Connects halves using a wire
- [Layers](/docs/layers.md) Do you need more keys than switches? Use - [Layers](/docs/en/layers.md) Do you need more keys than switches? Use
layers. layers.
- [ModTap](/docs/modtap.md) Enable press/hold double binding of keys - [ModTap](/docs/en/modtap.md) Enable press/hold double binding of keys
- [MediaKeys](/docs/media_keys.md) Common media controls - [MediaKeys](/docs/en/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/rgb.md) Turn on the backlight (**requires neopixel.py - [RGB](/docs/en/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
@@ -51,3 +49,11 @@ 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
```

View File

@@ -1,27 +1,26 @@
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 = (
board.A3, pins[19],
board.A2, pins[18],
board.A1, pins[17],
board.A0, pins[16],
board.SCK, pins[15],
board.MISO, pins[14],
board.MOSI, pins[13],
board.D10, pins[12],
) )
row_pins = (board.D8, board.D7, board.D6, board.D4) row_pins = (pins[10], pins[9], pins[8], pins[6])
diode_orientation = DiodeOrientation.COL2ROW diode_orientation = DiodeOrientation.COL2ROW
data_pin = board.D1 data_pin = pins[1]
rgb_pixel_pin = board.D0 rgb_pixel_pin = pins[0]
encoder_pin_0 = board.D9 encoder_pin_0 = pins[11]
encoder_pin_1 = board.D5 encoder_pin_1 = pins[7]
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))

View File

@@ -1,34 +0,0 @@
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))

View File

@@ -2,19 +2,29 @@
![Lily58](https://boardsource.imgix.net/af3d8d6d-5fbe-4578-a2ba-d09d7686fb29.jpg?raw=true) ![Lily58](https://boardsource.imgix.net/af3d8d6d-5fbe-4578-a2ba-d09d7686fb29.jpg?raw=true)
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. 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.
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/layers.md) Need more keys than switches? Use layers. - [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [RGB](/docs/rgb.md) Light it up - [RGB](/docs/en/rgb.md) Light it up
- [BLE_Split](/docs/split.md) Connects halves without wires - [BLE_Split](/docs/en/split.md) Connects halves without wires
Common Extensions Common Extensions
- [Split](/docs/split.md) Connects halves using a wire - [Split](/docs/en/split.md) Connects halves using a wire
- [Power](/docs/power.md) Powersaving features for battery life - [Power](/docs/en/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
```

View File

@@ -1,27 +1,34 @@
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_02, board.pins[17],
board.P1_15, board.pins[16],
board.P1_13, board.pins[15],
board.P1_11, board.pins[14],
board.P0_10, board.pins[13],
board.P0_09, board.pins[12],
)
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.P0_08 uart_pin = board.pins[1]
rgb_pixel_pin = board.P0_06 rgb_pixel_pin = pins[0]
data_pin = board.P0_08 data_pin = board.pins[1]
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,

View File

@@ -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/layers.md) Need more keys than switches? Use layers. - [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [MediaKeys](/docs/media_keys.md) Control volume and other media functions - [MediaKeys](/docs/en/media_keys.md) Control volume and other media functions
Common Extensions Common Extensions
- [Power](/docs/power.md) Powersaving features for battery life - [Power](/docs/en/power.md) Powersaving features for battery life

View File

@@ -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/layers.md) Need more keys than switches? Use layers. - [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [MediaKeys](/docs/media_keys.md) Control volume and other media functions - [MediaKeys](/docs/en/media_keys.md) Control volume and other media functions
Common Extensions Common Extensions
- [Power](/docs/power.md) Powersaving features for battery life - [Power](/docs/en/power.md) Powersaving features for battery life

View File

@@ -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/layers.md) Need more keys than switches? Use layers. - [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [RGB](/docs/rgb.md) Light it up (Keybow only so far) - [RGB](/docs/en/rgb.md) Light it up (Keybow only so far)
- [MediaKeys](/docs/media_keys.md) Control volume and other media functions - [MediaKeys](/docs/en/media_keys.md) Control volume and other media functions

View File

@@ -41,8 +41,9 @@ from kmk.extensions.rgb import RGB, AnimationModes
from kmk.kmk_keyboard import KMKKeyboard from kmk.kmk_keyboard import KMKKeyboard
from kmk.scanners.keypad import KeysScanner from kmk.scanners.keypad import KeysScanner
# fmt: off # fmt: off
def raspi_pins(): def raspi_pins():
return [ return [
board.D20, board.D16, board.D26, board.D20, board.D16, board.D26,
@@ -52,6 +53,15 @@ def raspi_pins():
] ]
def rp2040_pins():
return [
board.GP7, board.GP8, board.GP27,
board.GP9, board.GP26, board.GP10,
board.GP11, board.GP18, board.GP12,
board.GP16, board.GP17, board.GP14
]
def itsybitsy_pins(): def itsybitsy_pins():
return [ return [
board.D11, board.D12, board.D2, board.D11, board.D12, board.D2,
@@ -59,6 +69,7 @@ def itsybitsy_pins():
board.A5, board.A4, board.A3, board.A5, board.A4, board.A3,
board.A2, board.A1, board.A0, board.A2, board.A1, board.A0,
] ]
# fmt: on # fmt: on
@@ -66,9 +77,17 @@ def isPi():
return sys.platform == 'BROADCOM' return sys.platform == 'BROADCOM'
def isRP2040():
return sys.platform == 'RP2040'
if isPi(): if isPi():
_KEY_CFG = raspi_pins() _KEY_CFG = raspi_pins()
_LED_PINS = (board.SCK, board.MOSI) _LED_PINS = (board.SCK, board.MOSI)
elif isRP2040():
_KEY_CFG = rp2040_pins()
_LED_PINS = (board.GP2, board.GP3)
else: else:
_KEY_CFG = itsybitsy_pins() _KEY_CFG = itsybitsy_pins()
_LED_PINS = (board.SCK, board.MOSI) _LED_PINS = (board.SCK, board.MOSI)

View File

@@ -2,7 +2,10 @@
![Reviung39](https://boardsource.imgix.net/d6215164-6100-4b72-b355-1a67b7704463.jpg?raw=true) ![Reviung39](https://boardsource.imgix.net/d6215164-6100-4b72-b355-1a67b7704463.jpg?raw=true)
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. 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.
kb.py is designed to work with the nice!nano kb.py is designed to work with the nice!nano
@@ -12,9 +15,17 @@ Retailers (USA)
[Boardsource](https://boardsource.xyz/store/5ecb734486879c9a0c22dab3) [Boardsource](https://boardsource.xyz/store/5ecb734486879c9a0c22dab3)
Extensions enabled by default Extensions enabled by default
- [Layers](/docs/layers.md) Need more keys than switches? Use layers. - [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [RGB](/docs/rgb.md) Light it up - [RGB](/docs/en/rgb.md) Light it up
- [ModTap](/docs/modtap.md) Allows mod keys to act as different keys when tapped. - [ModTap](/docs/en/modtap.md) Allows mod keys to act as different keys when tapped.
Common Extensions Common Extensions
- [Power](/docs/power.md) Powersaving features for battery life - [Power](/docs/en/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
```

View File

@@ -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 = (
board.P0_31, pins[19],
board.P0_29, pins[18],
board.P0_02, pins[17],
board.P1_15, pins[16],
board.P1_13, pins[15],
board.P1_11, pins[14],
board.P0_10, pins[13],
) )
col_pins = ( col_pins = (
board.P0_22, pins[6],
board.P0_24, pins[7],
board.P1_00, pins[8],
board.P0_11, pins[9],
board.P1_04, pins[10],
board.P1_06, pins[11],
) )
diode_orientation = DiodeOrientation.COLUMNS diode_orientation = DiodeOrientation.COLUMNS
i2c = board.I2C i2c = board.I2C
powersave_pin = board.P0_13

View File

@@ -2,9 +2,13 @@
![Reviung41](https://boardsource.imgix.net/ea77f3f8-6cc4-4cb4-a801-cf58b5af8fcc.jpg?raw=true) ![Reviung41](https://boardsource.imgix.net/ea77f3f8-6cc4-4cb4-a801-cf58b5af8fcc.jpg?raw=true)
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. 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
kb.py is designed to work with the nice!nano 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.
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)
@@ -12,9 +16,16 @@ Retailers (USA)
[Boardsource](https://boardsource.xyz/store/5f2ef1b52bf5e8714a60f613) [Boardsource](https://boardsource.xyz/store/5f2ef1b52bf5e8714a60f613)
Extensions enabled by default Extensions enabled by default
- [Layers](/docs/layers.md) Need more keys than switches? Use layers. - [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [RGB](/docs/rgb.md) Light it up - [RGB](/docs/en/rgb.md) Light it up
- [ModTap](/docs/modtap.md) Allows mod keys to act as different keys when tapped. - [ModTap](/docs/en/modtap.md) Allows mod keys to act as different keys when tapped.
Common Extensions Common Extensions
- [Power](/docs/power.md) Powersaving features for battery life - [Power](/docs/en/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

View File

@@ -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 = (
board.P0_22, pins[6],
board.P0_24, pins[7],
board.P1_00, pins[8],
board.P0_11, pins[9],
board.P1_04, pins[10],
board.P1_06, pins[11],
) )
row_pins = ( row_pins = (
board.P0_31, pins[19],
board.P0_29, pins[18],
board.P0_02, pins[17],
board.P1_15, pins[16],
board.P1_13, pins[15],
board.P1_11, pins[14],
board.P0_10, pins[13],
) )
diode_orientation = DiodeOrientation.COLUMNS diode_orientation = DiodeOrientation.COLUMNS
rgb_pixel_pin = board.P0_06 rgb_pixel_pin = pins[0]
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))

View File

@@ -2,18 +2,28 @@
![rhymestone](https://boardsource.imgix.net/0968c21e-ed0c-47ec-ae5e-511ec6eb3bd2.jpg?raw=true) ![rhymestone](https://boardsource.imgix.net/0968c21e-ed0c-47ec-ae5e-511ec6eb3bd2.jpg?raw=true)
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. 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
kb.py is designed to work with the nice!nano 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.
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/layers.md) Need more keys than switches? Use layers. - [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [BLE_Split](/docs/split_keyboards.md) Connects halves without wires - [BLE_Split](/docs/en/split_keyboards.md) Connects halves without wires
- [ModTap](/docs/modtap.md) Allows mod keys to act as different keys when tapped. - [ModTap](/docs/en/modtap.md) Allows mod keys to act as different keys when tapped.
Common Extensions Common Extensions
- [Split](/docs/split_keyboards.md) Connects halves using a wire - [Split](/docs/en/split_keyboards.md) Connects halves using a wire
- [Power](/docs/power.md) Powersaving features for battery life - [Power](/docs/en/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
```

View File

@@ -1,15 +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 = (board.P0_31, board.P0_29, board.P0_02, board.P1_15) row_pins = (board.pins[19], board.pins[18], board.pins[17], board.pins[16])
col_pins = (board.P0_22, board.P0_24, board.P1_00, board.P0_11, board.P1_04) col_pins = (
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 = board.P0_06 rgb_pixel_pin = pins[0]
rgb_num_pixels = 40 rgb_num_pixels = 40
data_pin = board.P0_08 data_pin = board.pins[1]
i2c = board.I2C i2c = board.I2C
powersave_pin = board.P0_13

View File

@@ -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/layers.md) "Layers module adds keys for accessing other layers." - [Layers](/docs/en/layers.md) "Layers module adds keys for accessing other layers."
- [Split](/docs/split_keyboards.md) Connects halves with or without wires (currently uses wires) - [Split](/docs/en/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/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/en/split_keyboards.md#rp2040-pio-implementation).
- [Encoder](/docs/encoder.md) "Add twist control to your keyboard!" - [Encoder](/docs/en/encoder.md) "Add twist control to your keyboard!"
## Notes ## Notes

View File

@@ -2,16 +2,24 @@
![TG4X](https://boardsource.imgix.net/d50e1163-06dd-4c18-826e-caacd0a4a33d.jpg?raw=true) ![TG4X](https://boardsource.imgix.net/d50e1163-06dd-4c18-826e-caacd0a4a33d.jpg?raw=true)
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. 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
kb.py is designed to work with the nice!nano stagger.
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/layers.md) Need more keys than switches? Use layers. - [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [RGB](/docs/rgb.md) Light it up - [RGB](/docs/en/rgb.md) Light it up
Common Extensions Common Extensions
- [Power](/docs/power.md) Powersaving features for battery life - [Power](/docs/en/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
```

View File

@@ -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.P1_06, board.pins[11],
board.P1_04, board.pins[10],
board.P0_11, board.pins[9],
board.P1_00, board.pins[8],
board.P0_24, board.pins[7],
board.P0_22, board.pins[6],
board.P0_20, board.pins[5],
board.P0_17, board.pins[4],
) )
col_pins = [ col_pins = [
board.P0_06, pins[0],
board.P1_11, board.pins[14],
board.P1_13, board.pins[15],
board.P1_15, board.pins[16],
board.P0_02, board.pins[17],
board.P0_29, board.pins[18],
board.P0_31, board.pins[19],
] ]
diode_orientation = DiodeOrientation.COLUMNS diode_orientation = DiodeOrientation.COLUMNS
rgb_pixel_pin = board.P0_08 rgb_pixel_pin = board.pins[1]
rgb_num_pixels = 6 rgb_num_pixels = 6
i2c = board.I2C i2c = board.I2C
powersave_pin = board.P0_13

15
boards/zodiark/README.md Normal file
View File

@@ -0,0 +1,15 @@
# Zodiark
![Zodiark](https://camo.githubusercontent.com/b5283aea8fe39b0646a405fd358aa0c2c0f5896fc0fb80a92b5e761149759214/68747470733a2f2f692e696d6775722e636f6d2f34394f38616f776c2e6a7067)
A split keyboard with 5x7 including a thumbcluster, encoders on each side, per
key RGB, and 2x I2C headers per side, supporting 1.3"/.96" 128x64 OLEDs (the
1.3" is an SSH1106 OLED, .91" 128x32 OLEDs.
Hardware Availability: Pending Group Buy - [Discord Link](https://discord.gg/BCSbXwskVt)
Extensions enabled by default
- [Split](/docs/split.md) Connects halves using a wire.
- [Layers](/docs/layers.md) Need more keys than switches? Use layers.
- [PEG_RGB](/docs/peg_rgb_matrix.md) Light it up!
- [PEG_OLED](/docs/peg_oled_display.md) Screens to see things on of course.

68
boards/zodiark/kb.py Normal file
View File

@@ -0,0 +1,68 @@
import board
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.keypad import MatrixScanner
class KMKKeyboard(_KMKKeyboard):
def __init__(self):
# create and register the scanner
self.matrix = [
MatrixScanner(
# required arguments:
column_pins=self.col_pins,
row_pins=self.row_pins,
# optional arguments with defaults:
columns_to_anodes=DiodeOrientation.COL2ROW,
interval=0.02,
max_events=64,
),
]
col_pins = (
pins[avr['F5']],
pins[avr['F6']],
pins[avr['F7']],
pins[avr['B1']],
pins[avr['B3']],
pins[avr['B2']],
pins[avr['B6']],
)
row_pins = (
pins[avr['C6']],
pins[avr['D7']],
pins[avr['E6']],
pins[avr['B4']],
pins[avr['F4']],
)
diode_orientation = DiodeOrientation.COLUMNS
rgb_pixel_pin = pins[avr['B5']]
data_pin = pins[avr['D3']]
i2c = board.I2C
SCL = board.SCL
SDA = board.SDA
# NOQA
# flake8: noqa
# fmt: off
led_key_pos =[
5, 4, 3, 2, 01, 00, 34, 35, 36, 37, 38, 39,
6, 7, 8, 9, 10, 11, 12, 46, 45, 44, 43, 42, 41, 40,
19, 18, 17, 16, 15, 14, 13, 47, 48, 49, 50, 51, 52, 53,
20, 21, 22, 23, 24, 25, 26, 60, 59, 58, 57, 56, 55, 54,
33, 32, 31, 30, 29, 28, 27, 61, 62, 63, 64, 65, 66, 67
]
brightness_limit = 0.5
num_pixels = 62
# NOQA
# flake8: noqa
coord_mapping = [
0, 1, 2, 3, 4, 5, 40, 39, 38, 37, 36, 35,
7, 8, 9, 10, 11, 12, 06, 41, 47, 46, 45, 44, 43, 42,
14, 15, 16, 17, 18, 19, 13, 48, 54, 53, 52, 51, 50, 49,
21, 22, 23, 24, 25, 26, 20, 27, 62, 55, 61, 60, 59, 58, 57, 56,
28, 29, 30, 31, 32, 33, 34, 69, 68, 67, 66, 65, 64, 63
]

709
boards/zodiark/main.py Normal file
View File

@@ -0,0 +1,709 @@
import supervisor
from kb import KMKKeyboard
from kmk.extensions.peg_oled_Display import (
Oled,
OledData,
OledDisplayMode,
OledReactionType,
)
from kmk.extensions.peg_rgb_matrix import Rgb_matrix
from kmk.handlers.sequences import send_string
from kmk.hid import HIDModes
from kmk.keys import KC
from kmk.modules.layers import Layers
from kmk.modules.modtap import ModTap
from kmk.modules.split import Split, SplitSide, SplitType
keyboard = KMKKeyboard()
modtap = ModTap()
layers_ext = Layers()
keyboard.modules.append(layers_ext)
keyboard.modules.append(modtap)
oled_ext = Oled(
OledData(
corner_one={0: OledReactionType.STATIC, 1: ['qwertyzzzz']},
corner_two={
0: OledReactionType.LAYER,
1: ['1', '2', '3', '4', '5', '6', '7', '8'],
},
corner_three={
0: OledReactionType.LAYER,
1: ['base', 'raise', 'lower', 'adjust', '5', '6', '7', '8'],
},
corner_four={
0: OledReactionType.LAYER,
1: ['qwertyzzz', 'nums', 'shifted', 'leds', '5', '6', '7', '8'],
},
),
toDisplay=OledDisplayMode.TXT,
flip=False,
)
keyboard.extensions.append(oled_ext)
# Default RGB matrix colours
rgb_ext = Rgb_matrix(
ledDisplay=[
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
[80, 0, 80],
],
split=True,
rightSide=False,
disable_auto_write=True,
)
keyboard.extensions.append(rgb_ext)
# TODO Comment one of these on each side
split_side = SplitSide.LEFT
# split_side = SplitSide.RIGHT
split = Split(data_pin=keyboard.data_pin)
keyboard.modules.append(split)
keyboard.keymap = [
[
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.ESC,
KC.N1,
KC.N2,
KC.N3,
KC.N4,
KC.N5,
KC.N6,
KC.N7,
KC.N8,
KC.N9,
KC.N0,
KC.GRV,
KC.TAB,
KC.Q,
KC.W,
KC.E,
KC.R,
KC.T,
KC.NO,
KC.NO,
KC.Y,
KC.U,
KC.I,
KC.O,
KC.P,
KC.MINS,
KC.LCTL,
KC.A,
KC.S,
KC.D,
KC.F,
KC.G,
KC.NO,
KC.NO,
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.COMMA,
KC.DOT,
KC.SLSH,
KC.RSFT,
KC.NO,
KC.NO,
KC.NO,
KC.LGUI,
KC.MO(1),
KC.LCTL,
KC.SPC,
KC.ENT,
KC.MO(2),
KC.BSPC,
KC.RGUI,
KC.NO,
KC.NO,
KC.NO,
],
[
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.TRNS,
KC.TRNS,
KC.UP,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.EQL,
KC.TRNS,
KC.TRNS,
KC.LEFT,
KC.DOWN,
KC.RGHT,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.LEFT,
KC.DOWN,
KC.RGHT,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.DEL,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
],
[
KC.N2,
KC.EXLM,
KC.AT,
KC.HASH,
KC.DLR,
KC.PERC,
KC.CIRC,
KC.AMPR,
KC.ASTR,
KC.LPRN,
KC.RPRN,
KC.TILD,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.PLUS,
KC.UNDS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.LCBR,
KC.RCBR,
KC.TRNS,
KC.TRNS,
KC.LABK,
KC.RABK,
KC.QUES,
KC.TRNS,
],
[
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
],
[
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
],
[
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
],
[
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
],
[
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
],
]
if __name__ == '__main__':
keyboard.go(hid_type=HIDModes.USB)

3
boot.py Executable file → Normal file
View File

@@ -1,3 +0,0 @@
import supervisor
supervisor.set_next_stack_limit(4096 + 4096)

0
compiled/.gitkeep Normal file
View File

7
docker-compose.yml Normal file
View File

@@ -0,0 +1,7 @@
version: '3.3'
services:
mpy_kmk:
build: .
volumes:
- ./kmk:/app/kmk
- ./.compiled:/app/compiled

14
docker_mpy_build.sh Executable file
View File

@@ -0,0 +1,14 @@
#!/bin/sh
echo "building mpy"
echo $(ls compiled)
find kmk/ -name "*.py" -exec sh -c 'mkdir -p compiled/8/$(dirname {}) &&\
./mpy-cross-8 -O2 {} -o compiled/8/$(dirname {})/$(basename -s .py {}).mpy' \;
find kmk/ -name "*.py" -exec sh -c 'mkdir -p compiled/7/$(dirname {}) &&\
./mpy-cross-7 -O2 {} -o compiled/7/$(dirname {})/$(basename -s .py {}).mpy' \;
echo $(ls compiled)
echo "done building"

View File

@@ -76,8 +76,10 @@ 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)
If you need support with KMK or just want to say hi, find us in For asynchronous support and chatter about KMK, [join our Zulip
[#kmkfw:klar.sh on Matrix](https://matrix.to/#/#kmkfw:klar.sh). This channel is community](https://kmkfw.zulipchat.com)!
bridged to Discord [here](https://discordapp.com/widget?id=493256121075761173&theme=dark)
for convenience. If you ask for help in chat or open a bug report, if possible 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.

View File

@@ -1,6 +1,6 @@
# Documentation index # Documentation index
> 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) > Before you look further, you probably want to start with our [getting started guide](/docs/en/Getting_Started.md)
## Basics ## Basics
@@ -50,5 +50,5 @@
## Language versions ## Language versions
- [Japanese getting started](ja/Getting_Started.md) - [Japanese getting started](https://github.com/KMKfw/kmk_firmware/tree/master/docs/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)

View File

@@ -38,18 +38,21 @@ import storage
import usb_cdc import usb_cdc
import usb_hid import usb_hid
# This is from the base kmk boot.py from kb import KMKKeyboard
supervisor.set_next_stack_limit(4096 + 4096) from kmk.scanners import DiodeOrientation
# If this key is held during boot, don't run the code which hides the storage and disables serial # If this key is held during boot, don't run the code which hides the storage and disables serial
# To use another key just count its row and column and use those pins # This will use the first row/col pin. Feel free to change it if you want it to be another pin
# You can also use any other pins not already used in the matrix and make a button just for accesing your storage col = digitalio.DigitalInOut(KMKKeyboard.col_pins[0])
col = digitalio.DigitalInOut(board.GP2) row = digitalio.DigitalInOut(KMKKeyboard.row_pins[0])
row = digitalio.DigitalInOut(board.GP13)
# TODO: If your diode orientation is ROW2COL, then make row the output and col the input if KMKKeyboard.diode_orientation == DiodeOrientation.COLUMNS:
col.switch_to_output(value=True) col.switch_to_output(value=True)
row.switch_to_input(pull=digitalio.Pull.DOWN) row.switch_to_input(pull=digitalio.Pull.DOWN)
else:
col.switch_to_input(pull=digitalio.Pull.DOWN)
row.switch_to_output(value=True)
if not row.value: if not row.value:
storage.disable_usb_drive() storage.disable_usb_drive()

View File

@@ -27,6 +27,7 @@ Optional arguments that customize individual combos:
* `per_key_timeout`: If True, reset timeout on every key press (default for * `per_key_timeout`: If True, reset timeout on every key press (default for
sequences). sequences).
* `timeout`: Set the time window within which the match has to happen in ms. * `timeout`: Set the time window within which the match has to happen in ms.
* `match_coord`: If True, matches key position in the matrix.
## Example Code ## Example Code
```python ```python
@@ -43,6 +44,8 @@ make_key(
combos.combos = [ combos.combos = [
Chord((KC.A, KC.B), KC.LSFT), Chord((KC.A, KC.B), KC.LSFT),
Chord((KC.A, KC.B, KC.C), KC.LALT), Chord((KC.A, KC.B, KC.C), KC.LALT),
Chord((0, 1), KC.ESC, match_coord=True),
Chord((8, 9, 10), KC.MO(4), match_coord=True),
Sequence((KC.LEADER, KC.A, KC.B), KC.C), Sequence((KC.LEADER, KC.A, KC.B), KC.C),
Sequence((KC.E, KC.F), KC.MYKEY, timeout=500, per_key_timeout=False, fast_reset=False) Sequence((KC.E, KC.F), KC.MYKEY, timeout=500, per_key_timeout=False, fast_reset=False)
] ]

View File

@@ -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](https://github.com/KMKfw/kmk_firmware/blob/master/docs/flashing.md)). Makefile](/docs/en/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](https://github.com/KMKfw/kmk_firmware/blob/master/docs/keycodes.md). documentation](/docs/en/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

View File

@@ -6,8 +6,7 @@ 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 the chat, [#kmkfw:klar.sh on Matrix](https://matrix.to/#/#kmkfw:klar.sh). feel free to [join our Zulip community](https://kmkfw.zulipchat.com).
This channel is bridged to Discord [here](https://discord.gg/QBHUUpeGUd) for convenience.
### Code Style ### Code Style

Some files were not shown because too many files have changed in this diff Show More