Compare commits

...

982 Commits

Author SHA1 Message Date
xs5871
b84cd0bdab Add missing keycode 2023-04-01 21:55:45 +00:00
xs5871
d15569611e Port RGB extension from timer to periodic task 2023-04-01 00:12:49 +00:00
xs5871
3c4e064201 Implement a heap based task scheduler 2023-04-01 00:12:49 +00:00
regicidal.plutophage
bc5fb9dc9e Fix OLED ImageEntry
Fixed a silly oversight that was preventing image entries from working
2023-03-26 22:28:35 +00:00
xs5871
0992bfb962 Clarfify title format of issue template 2023-03-25 00:51:15 +00:00
regicidal.plutophage
f532a57e9a
New OLED extension (#742)
* Adding a new OLED extension and updated kyria code to use it.

* Fixed some basic errors and improved performance of extension.

* Add support for changing LED brightness.

* Add support for changing OLED brightness.

* Update oled.py

* Small bugfix

* Take busio.I2C object as Oled parameter

* Add a missing statement into deinit

* Optionally initialize I2C inside the extension

* Implement suggested changes

---------

Co-authored-by: Jan Lindblom <janlindblom@fastmail.fm>
2023-03-24 22:22:41 +00:00
xs5871
5448cb4479 Denoise core debugging and improve improve performance.
* Declutter and denoise the debug output in general.
* Avoid f-strings. They're nice to look at, but use a lot of ROM, RAM,
  and time during formatting.
* Remove all "debug" information from `KMKKeyboard.__repr__`. It's
  printed out once at init and the info it gave was useless at that
  point. Even more free memory.
* Add a memory footprint debug info after initialization.
2023-03-24 21:48:44 +00:00
Leon Anavi
23d7c2d670 boards/anavi/knob1/code.py: Cleanup
Remove print to cleanup the code.

Signed-off-by: Leon Anavi <leon@anavi.org>
2023-03-24 21:48:28 +00:00
xs5871
20ba48b623 Fix oneshot as combo result getting stuck 2023-03-16 21:52:26 +00:00
xs5871
76e6feda6f Speed up and reduce memory footprint of debug template 2023-03-16 21:52:13 +00:00
xs5871
3e13c8c321 Speed up unit tests 2023-03-16 21:51:16 +00:00
xs5871
ba06d3c8a5 Fix some old holdtap inconsistencies 2023-03-16 21:50:58 +00:00
xs5871
26bf630608 Fix layer tap interrupted 2023-03-16 21:50:42 +00:00
Alex Miller
878fe0deca
Adding ComboLayers to Layers Module (See #658) (#666)
---------

Co-authored-by: xs5871 <60395129+xs5871@users.noreply.github.com>
2023-03-10 20:40:57 +00:00
xs5871
adff02e88a Add deinit method to modules and extensions 2023-03-10 19:17:09 +00:00
xs5871
55b3a3a9b1 Move neopixel initialization into during_bootup 2023-03-10 19:16:44 +00:00
xs5871
3c796c16f8 Highlight support section of README 2023-03-09 21:19:28 +00:00
xs5871
b9c85c02e2 Remove modules and extension that fail during_bootup 2023-03-09 21:18:54 +00:00
xs5871
bff7584fe0 Create issue templates 2023-03-09 21:18:34 +00:00
xs5871
47fe859e11 Speed up unit tests 2023-03-09 21:18:18 +00:00
xs5871
fd700cff44 Resolve invalid keys to KC.NO instead of ValueError 2023-03-09 21:18:02 +00:00
Phong Le
2ccad46e26
update modtap to holdtap (#718)
* update modtap to holdtap

* Update links

* Revert "Update links"

This reverts commit 8d0cda7c5a.

* updated docs links

update links in docs

* Update docs/en/Getting_Started.md

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

* Update docs/en/Getting_Started.md

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

* rename modtap.md to holdtap.md

* Update Getting_Started.md

* Update main.py

* Update modtap.py

* Update modtap.py and add notice

* Update docs/en/porting_to_kmk.md

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

* Update docs/en/handwiring.md

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

* Update docs/en/contributing.md

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

* Update docs/en/contributing.md

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

* Update docs/en/ble_hid.md

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

* Update docs/en/Getting_Started.md

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

* Update docs/en/Getting_Started.md

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

* Update docs/en/kmkpython_vs_circuitpython.md

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

* Rename modtap.md to holdtap.md

* fixup

---------

Co-authored-by: xs5871 <60395129+xs5871@users.noreply.github.com>
2023-03-03 09:32:41 +00:00
xs5871
94c042fec5 Clear HID reports on crash 2023-03-03 07:53:46 +00:00
regicidal.plutophage
013046b44d Update power.py 2023-03-01 22:06:50 +00:00
regicidal.plutophage
18687e5278 Fix power.py module
The last update to this module used new at the time ```check_deadline``` function wrong, I seem to have fixed this.
2023-03-01 22:06:50 +00:00
regicidal.plutophage
20be6e9072 Update oneshot.md 2023-02-28 19:36:19 +00:00
xs5871
e40fd90d5c Make oneshot stay active across layer changes 2023-02-28 19:04:11 +00:00
xs5871
301ce3c025 Improve unit test handling of pending/delayed keyboard actions 2023-02-28 19:04:11 +00:00
xs5871
6532497bb2 Implement oneshot key stacking 2023-02-28 19:04:11 +00:00
xs5871
deb941b196 Extract oneshot unit test from holdtap 2023-02-28 19:04:11 +00:00
xs5871
88c3616b6a Refactor Makefile copy-* targets for improved readability 2023-02-24 18:17:59 +00:00
xs5871
6ab4154ad5 Make copy-board target copy all BOARD/.*py files 2023-02-24 18:17:59 +00:00
xs5871
db2082f1c6 Add make target for compiled mpy code 2023-02-24 18:17:59 +00:00
xs5871
317f6407d6 Improve mpy-cross compilation target 2023-02-24 18:17:59 +00:00
xs5871
08c255b6e4 Add optional selection of specific unit test to Makefile 2023-02-24 18:17:59 +00:00
Aldoo
61cf527370 Removed extra ".__iter__()" in KeyAttrDict iterator: iterating elements in the partition already implicitly calls its __iter__ method.
Actually using the dictionary iterator with this extra call would trigger an error since an iterator does not have an iterator. This is no longer the case.
2023-02-22 19:37:20 +00:00
claycooper
38acda77b4 Moved pro micro image to fix render issues 2023-02-21 01:26:39 +00:00
claycooper
7ef2c2c2d3 Removed HTML br's from markdown 2023-02-21 01:26:39 +00:00
xs5871
1f751d8374 Add mouse buttons 4/5 2023-02-21 00:57:39 +00:00
xs5871
d4fe745e71 Cleanup PointingDevice from mouse_keys 2023-02-21 00:57:39 +00:00
xs5871
1674ff4ed7 Add linter format exception for kb.py 2023-02-20 20:42:23 +00: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
xs5871
0b4b98f5fb add debug info for holdtap key resolution 2022-09-15 08:57:14 -07:00
xs5871
1cb4bddce4 refactor combos: states instead of lists 2022-09-13 22:23:06 -07:00
xs5871
dafc969bf5 speed improvement in combo matching code 2022-09-13 22:23:06 -07:00
Christian Lo
a1450de137 fix import typo in cg_swap.md 2022-09-14 03:41:43 +00:00
Anton K. (ai Doge)
f418762874 Update README.md
make the discord banner link to the discord server
2022-09-13 17:12:26 -07:00
xs5871
f9203dbb85 fix stack exhaustion for certain hold-tap actions 2022-09-11 21:48:52 -07:00
xs5871
fdb07dd82b Update combos.md
fix example code in combos docs.
2022-09-08 08:44:34 -07:00
Josh Klar
473d54a83f docs(sequences): clarity in keymap arrays to not look like splats (resolves #576) 2022-09-07 19:02:34 -07:00
Luke D Russell
87955f7b5f updade gitignore from gh 2022-09-07 13:18:17 -07:00
Kyle Brown
194dd58d16 More Lulu cleanup 2022-09-01 19:03:57 -07:00
Kyle Brown
0b23f36b5d Fix general docs formatting 2022-09-01 18:53:02 -07:00
Kyle Brown
b3dd790f9d Lulu readme 2022-09-01 18:53:02 -07:00
Kyle Brown
6ac68f5358 Requested lulu fixes 2022-09-01 18:24:04 -07:00
Kyle Brown
4b48547155 lulu formatting 2022-09-01 18:24:04 -07:00
Cole Smith
a91e379a79 added lulu 2022-09-01 18:24:04 -07:00
xs5871
a4ae43138a add more warning labels 2022-08-31 18:25:07 -07:00
xs5871
46cf7030a1 update and add docs to serialace 2022-08-31 18:25:07 -07:00
xs5871
737973c334 implement arbitrary code execution (ACE) over data serial. 2022-08-31 18:25:07 -07:00
xs5871
aee793a300 missed some pre_process to resume_process conversions 2022-08-31 18:22:52 -07:00
xs5871
ea94e9ba19 fix dependence on optional int_coord 2022-08-31 18:22:52 -07:00
xs5871
57c61ced85 add type hints to KMKKeyboard.resume_process_key 2022-08-31 18:22:52 -07:00
xs5871
c95efbe8ea refactor handling of key processing resume to KMKKeyboard 2022-08-31 18:22:52 -07:00
xs5871
e71d1fcb6e fix crash on failing look-up 2022-08-31 18:22:52 -07:00
xs5871
9d555209b8 add continue-with-module-nr-idx to key processing 2022-08-31 18:22:52 -07:00
Luke D Russell
f62d32157a Reimplemented as a util script with std lib only.
Reimplemented as a util script with std lib only.

Decision to add dependencies moved elsewhere. This script should be able to stand alone.

Add some docu on how to use compile.py
2022-08-31 18:16:49 -07:00
Luke D Russell
b4363c73a7 Shrink ./kmk/ with nox & mpy-cross.
Shrink ./kmk/ with `nox` & `mpy-cross`.

The nice!nano CircuitPython doesn't leave enough storage for an
uncompiled ./kmk/ folder, with main.py and Bluetooth libraries.

This introduces a soft dependancy to kmk on `nox`, as a OS-agnostic
alternative to `make`. Bonus is the use of native python to describe
steps / options / sessions.
2022-08-31 18:16:49 -07:00
Kyle Brown
6d6ccbc240 Move keymap to proper spot 2022-08-17 12:04:37 -07:00
Matthew Hendrix
838263d409 Add report_updated check 2022-08-16 16:31:26 -07:00
Matthew Hendrix
bca11489d0 Update Pico87 to handle Lock Status better 2022-08-16 16:31:26 -07:00
Hendrix
6d255a24f5 Add Pico87 board 2022-08-16 16:31:26 -07:00
Leon Anavi
47601b730a boards/anavi/macro-pad-10: Set to COL2ROW
Set diode orientation to COL2ROW as per the latest hardware
revision of ANAVI Macro Pad 10.

Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
2022-08-16 16:29:59 -07:00
Yoichiro Tanaka
5e7738fe87 Fix the issue reported by isort. 2022-08-14 07:43:52 +00:00
Yoichiro Tanaka
5fcce6785c Fix the issue which the media keys cannot be loaded. 2022-08-14 07:43:52 +00:00
Hendrix
34f4264362 Add code review suggestions 2022-08-10 17:12:12 +00:00
Matthew Hendrix
9c7b14e865 Update code to be less fragile 2022-08-10 17:12:12 +00:00
Matthew Hendrix
7f1e7a2708 Remove callback, update docs 2022-08-10 17:12:12 +00:00
Hendrix
ad3c261c1a fix formatting issue 2022-08-10 17:12:12 +00:00
Hendrix
0b23da551a Add callback to lock status 2022-08-10 17:12:12 +00:00
xs5871
ad6f4e5f05 fix mouse_keys not working at all 2022-08-05 14:39:57 -07:00
crazyiop
23fd3a9bed [usb] Allow kb to lost usb connection without getting lost
When the usb connection is lost (for example when plugged into a pc that
keep the usb powered when shut down) the kb is lost and need to be
unpluged to be rebooted.

My guess is that the failling `hid_report.send()` change some internal
state that could not recover by itself.

This prevent even trying to send the report when the usb is not
connected. This fix has been tested working on me and another discord
user so far. The result seems consistent even if the test period has not
been very long yet.
2022-08-05 18:35:16 +00:00
James Fitzgerald
ed38227276 Fix typo in sticky_mod.md 2022-08-05 10:49:23 -07:00
xs5871
f0544465c7 remove reference to disfunct KMK_RELEASE. 2022-08-03 20:11:00 +00:00
xs5871
5d2a42d9a9 fix trackball module forcing reports to zero 2022-08-01 16:46:53 -07:00
Leon Anavi
b676afe075 boards/anavi/knobs3: Simplify the source code
Optimize and simplify the source code by using the full potential
of class EncoderHandler.

Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
2022-07-31 07:47:21 +00:00
Leon Anavi
ce0e29b02f boards/anavi/knobs3: Update extensions
Update the list of extensions enabled by default for ANAVI Knobs 3

Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
2022-07-31 07:47:21 +00:00
Leon Anavi
857c2c1162 boards/anavi/knob1/README.md: Extensions
Update the list of extensions enabled by default.

Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
2022-07-31 07:46:40 +00:00
Leon Anavi
a6825b6a3c boards/anavi/knob1: Simplify the source code
Optimize and simplify the source code by using the full potential
of class EncoderHandler.

Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
2022-07-31 07:46:40 +00:00
Leon Anavi
6d132ba4b4 knob1: Fix name for ANAVI Knob 1
Fix the name of the directory for ANAVI Knob 1 to match the proper
name of the hardware.

Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
2022-07-31 07:46:40 +00:00
Salvatore La Bua
d9b0c9100c Update Pimoroni Trackball doc
Signed-off-by: Salvatore La Bua <slabua@gmail.com>
2022-07-31 07:44:22 +00:00
Salvatore La Bua
3d80e4aba8 Consistent variable naming
Signed-off-by: Salvatore La Bua <slabua@gmail.com>
2022-07-31 07:44:22 +00:00
Salvatore La Bua
4c93720a2f Lintfix (hopefully)
Signed-off-by: Salvatore La Bua <slabua@gmail.com>
2022-07-31 07:44:22 +00:00
Salvatore La Bua
cb83df25f0 Lintfix
Signed-off-by: Salvatore La Bua <slabua@gmail.com>
2022-07-31 07:44:22 +00:00
Salvatore La Bua
bfd5e2b262 Minor update to docs/pimoroni_trackball.md
Signed-off-by: Salvatore La Bua <slabua@gmail.com>
2022-07-31 07:44:22 +00:00
Salvatore La Bua
5ba865e4c6 Add ScrollDirection class for the Pimoroni Trackball
Signed-off-by: Salvatore La Bua <slabua@gmail.com>
2022-07-31 07:44:22 +00:00
Salvatore La Bua
f674ac6b13 Add reverse scrolling mode to the Pimoroni Trackball module
Signed-off-by: Salvatore La Bua <slabua@gmail.com>
2022-07-31 07:44:22 +00:00
xgpt
ecfbca82a6 typo?
is this a typo? I think it's suppose to say same not some
2022-07-30 08:26:33 +00:00
Leon Anavi
2016848cb2 boards/anavi/macro-pad-10/README.md: Add README.md
Add README.md for ANAVI Macro Pad 10.

Signed-off-by: Leon Anavi <leon@anavi.org>
2022-07-30 08:21:07 +00:00
Leon Anavi
fbe593eb80 anavi/macro-pad-10: Add ANAVI Macro Pad 10
Add support for ANAVI Macro Pad 10: an open source programmable
small hot-swappable mechanical keyboard with 9 keys, a rotary
encoder and Seeed XIAO RP2040. This is open source hardware
designed with KiCad.

Signed-off-by: Leon Anavi <leon@anavi.org>
2022-07-30 08:21:07 +00:00
Gleb Sabirzyanov
6c71538aa9 Fix hyperlink 2022-07-26 21:11:42 -07:00
kbjunky
a1d8a990f1 Update mouse_keys.py
Added check for USB enabled half in case of a split keyboard.
Cleaning of hid_pending state after sending.
2022-07-24 15:19:35 -07:00
xs5871
5a85c6cfb3 move validators and metas to their respective modules 2022-07-24 15:19:20 -07:00
xs5871
e0ca1124fb cleanup unused coord_raw 2022-07-24 15:19:20 -07:00
xs5871
2a7654f852 cleanup unused KMKKeyboard attributes
squash cleanup KMKKeyboard
2022-07-24 15:19:20 -07:00
James Fitzgerald
637991cedc Make suggested changes 2022-07-24 21:15:20 +00:00
James Fitzgerald
606780ee1c Remove unnecessary list check 2022-07-24 21:15:20 +00:00
James Fitzgerald
fe6510baec "not key in" -> "key not in" 2022-07-24 21:15:20 +00:00
James Fitzgerald
74563368c5 Fix key pressed before combo making combo wait for timeout 2022-07-24 21:15:20 +00:00
xs5871
3f3bd93109 implement global debug interface. 2022-07-22 09:21:30 -07:00
xs5871
3f826267b4 remove adafruit_pioasm dependency 2022-07-21 18:26:08 -07:00
xs5871
914f449699 factor out firmware and unicode mode keys 2022-07-21 18:25:43 -07:00
xs5871
84f1b2ae06 cleanup 2022-07-21 18:25:43 -07:00
xs5871
f086a78864 remove another stack frame level 2022-07-21 18:25:43 -07:00
xs5871
47ccd56c30 refactor initial key lookup
based on:
639c38d5aa
2022-07-21 18:25:43 -07:00
Steven Karrmann
4d6983da11 Add 'BSPACE' keycode for documentation consistency 2022-07-20 15:36:24 -07:00
James Fitzgerald
d830ff7293 fix typo and formatting again 2022-07-19 16:16:47 -07:00
James Fitzgerald
fd73292da0 Add shorthand 2022-07-19 16:16:47 -07:00
James Fitzgerald
bff8d3d7c5 fix formatting 2022-07-19 16:16:47 -07:00
James Fitzgerald
d584b1f506 Add keycode for software reload 2022-07-19 16:16:47 -07:00
xs5871
682731bfe1 tests need more delay 2022-07-14 16:46:54 -07:00
xs5871
ed94ad06da de-duplicate consumer keys 2022-07-14 16:46:21 -07:00
xs5871
f46e3d59e6 add brightness consumer keys 2022-07-14 16:46:21 -07:00
James Fitzgerald
25a86df5c1 Minor code cleanup
* Changed from multiple calls of `keyboard.remove_key` to a for loop when releasing modifiers on match
2022-07-14 10:29:25 +00:00
James Fitzgerald
688c2f0572 Change debug_enabled to False 2022-07-14 10:29:25 +00:00
James Fitzgerald
ca719faa29 Rename text_replacement.md to string_substitution.md 2022-07-14 10:29:25 +00:00
James Fitzgerald
c2a3a1895f Add more tests and delay after last key event in tests 2022-07-14 10:29:25 +00:00
James Fitzgerald
8ab67052cf Rename to String Substitution 2022-07-14 10:29:25 +00:00
James Fitzgerald
c49f409fb4 Add testing against suggested test cases 2022-07-14 10:29:25 +00:00
James Fitzgerald
521f991f2d Improve guarding against non-shift modifiers 2022-07-14 10:29:25 +00:00
James Fitzgerald
664a557483 Apply suggestions from code review
Co-authored-by: xs5871 <60395129+xs5871@users.noreply.github.com>
2022-07-14 10:29:25 +00:00
James Fitzgerald
50279f88fb Add keyboard event tests 2022-07-14 10:29:25 +00:00
James Fitzgerald
82a68b0fe5 Add warning about invalid characters in documentation 2022-07-14 10:29:25 +00:00
James Fitzgerald
e064796016 Fix isort issues and quotes 2022-07-14 10:29:25 +00:00
James Fitzgerald
3db84528f2 Add informative error when illegal character is in user dictionary 2022-07-14 10:29:25 +00:00
James Fitzgerald
f33e4d1870 Add unit tests 2022-07-14 10:29:25 +00:00
James Fitzgerald
ab75b2bca3 Fix wrong quotes 2022-07-14 10:29:25 +00:00
James Fitzgerald
81f4f7ccf0 Bugfix for text replacement optimization 2022-07-14 10:29:25 +00:00
James Fitzgerald
103e51eb7f Improve comment clarity 2022-07-14 10:29:25 +00:00
James Fitzgerald
a5dc665ddc Optimize backspacing to only backspace characters that need to be backspaced rather than the entire word 2022-07-14 10:29:25 +00:00
James Fitzgerald
d8ca20c73c Code cleanup
* Refactor for improved readability
* Add docstrings and comments
* Add type annotations
2022-07-14 10:29:25 +00:00
James Fitzgerald
d7d253b1ea Further documentation improvements 2022-07-14 10:29:25 +00:00
James Fitzgerald
ec1f84f9ea Documentation improvements 2022-07-14 10:29:25 +00:00
James Fitzgerald
b17c73bac0 Replace double quotes with single quotes 2022-07-14 10:29:25 +00:00
James Fitzgerald
0392aa74e2 Fix for underscore in user dictionary causing KeyError 2022-07-14 10:29:25 +00:00
James Fitzgerald
0e58bdc343 Improve documentation clarity 2022-07-14 10:29:25 +00:00
James Fitzgerald
9a3524d363 Implement Text Replacement module 2022-07-14 10:29:25 +00:00
Josh Klar
ca2aca47d6 fix(irisr2/nicenano): fix grossly incorrect coordinate mapping 2022-07-14 00:05:16 -07:00
nogg3r5
00700e373c Update rgb.md
The referenced function is above, not below this function.
2022-07-13 08:08:33 -07:00
xs5871
20705e2150 unit test fail may be caused by a stuck combo 2022-07-12 19:20:22 -07:00
Josh Klar
db395a81e4 fix(lint): kmk/modules/combos.py 2022-07-11 08:16:11 -07:00
Luke D Russell
9e29f4c442 Adds an alias for the LEADER keycode 2022-07-11 08:16:11 -07:00
Gleb Sabirzyanov
6fe2457d8e Rename encoder resolution to divisor 2022-07-08 11:03:01 +00:00
Gleb Sabirzyanov
2e515d25b4 Fix typo in docs/encoder.md
Co-authored-by: xs5871 <60395129+xs5871@users.noreply.github.com>
2022-07-08 11:03:01 +00:00
Gleb Sabirzyanov
a22e9754c1 Add encoder pinout to the docs 2022-07-08 11:03:01 +00:00
Gleb Sabirzyanov
f83e3361e4 Improve encoder docs 2022-07-08 11:03:01 +00:00
Gleb Sabirzyanov
946a8a8652 Improve doc example formatting 2022-07-08 11:03:01 +00:00
Gleb Sabirzyanov
1293863cc0 Add note about divisor and smooth encoders 2022-07-08 11:03:01 +00:00
Gleb Sabirzyanov
ed41f4cda5 Fix formatting and comments 2022-07-08 11:03:01 +00:00
Gleb Sabirzyanov
6e8aaff050 Cancel action on encoder return 2022-07-08 11:03:01 +00:00
Gleb Sabirzyanov
61ef788dc6 Fix different brackets in two places in encoder.md 2022-07-08 11:03:01 +00:00
Gleb Sabirzyanov
58248a9631 Prefer integer division in encoder.py
Co-authored-by: xs5871 <60395129+xs5871@users.noreply.github.com>
2022-07-08 11:03:01 +00:00
Gleb Sabirzyanov
1bc54a10a1 Remove extra newline in encoder.md
Co-authored-by: xs5871 <60395129+xs5871@users.noreply.github.com>
2022-07-08 11:03:01 +00:00
Gleb Sabirzyanov
17e63a435d Fix typo in encoder docs
Co-authored-by: xs5871 <60395129+xs5871@users.noreply.github.com>
2022-07-08 11:03:01 +00:00
Gleb Sabirzyanov
edb5bc336e Add encoder resolution info 2022-07-08 11:03:01 +00:00
Gleb Sabirzyanov
c4f81e3bd6 Tiny formatting fix 2022-07-08 11:03:01 +00:00
Gleb Sabirzyanov
e478fed927 Minor wording improvement 2022-07-08 11:03:01 +00:00
Gleb Sabirzyanov
9e71038853 Improve encoder docs wording and formatting 2022-07-08 11:03:01 +00:00
Gleb Sabirzyanov
e72ab5a958 Fix formatting 2022-07-08 11:03:01 +00:00
Gleb Sabirzyanov
aafa0d9c6a Add encoder resolution setting 2022-07-08 11:03:01 +00:00
xs5871
ed378c960f github unit test keeps failing for no apparent reason... 2022-07-05 08:48:18 -07:00
xs5871
178acc0702 pacify the linter 2022-07-05 08:48:18 -07:00
xs5871
36703a1e0d fix holdtap unittest to match correct behaviour 2022-07-05 08:48:18 -07:00
xs5871
ac8a696acb fix combos to match new unittest 2022-07-05 08:48:18 -07:00
xs5871
258e622bb4 fix and refactor keyboard unittest 2022-07-05 08:48:18 -07:00
James Fitzgerald
64d9147615 Fix missing commas in example code for Combos 2022-07-05 08:47:15 -07:00
xgpt
9e1d9aa621 Update Getting_Started.md 2022-07-03 08:11:52 +00:00
James Fitzgerald
26b629cc45 Explicitly define CircuitPython 7.0 or higher as the minimum supported version 2022-07-02 09:31:57 -07:00
xs5871
357165c14b fix KC["_"] resolving to BLE_REFRESH 2022-07-02 08:03:05 -07:00
crazyiop
03d5f7ae10 [split] improve doc 2022-06-30 00:38:20 -07:00
crazyiop
d2eba7b4ef [split] cleanup: remove target_left (unused)
only split_target_left is used
2022-06-30 00:38:20 -07:00
xs5871
bb2ddc1e33 fix tapdance reporting key in wrong order 2022-06-30 00:37:04 -07:00
xs5871
e829bc83de fix tapdance crash and add unit-tests 2022-06-30 00:37:04 -07:00
James Fitzgerald
b25f325871 Rename randomize to enable_interval_randomization 2022-06-30 06:37:57 +00:00
James Fitzgerald
7886b374b6 Implement suggestions and improve documentation clarity 2022-06-30 06:37:57 +00:00
James Fitzgerald
c77bfc432a Change "presses" to "taps" for clarity and consistency 2022-06-30 06:37:57 +00:00
James Fitzgerald
4707b92fd4 Skip the waiting entirely if wait is set to 0 or lower rather than creating a timer of 0 2022-06-30 06:37:57 +00:00
James Fitzgerald
c5c927acf2 Implement suggested documentation changes
* Clarify how `wait` and `toggle` work
* Add additional example code
2022-06-30 06:37:57 +00:00
James Fitzgerald
c6bbd49d05 Minor bugfix for toggle functionality when during wait period 2022-06-30 06:37:57 +00:00
James Fitzgerald
6033dc91d0 Make toggle functionality start after wait period 2022-06-30 06:37:57 +00:00
James Fitzgerald
b55942731d Add toggle functionality 2022-06-30 06:37:57 +00:00
James Fitzgerald
654127bac7 Minor doc addition 2022-06-30 06:37:57 +00:00
James Fitzgerald
05d1a622dd Remove redundant timer code 2022-06-30 06:37:57 +00:00
James Fitzgerald
17a8e39bfe Fix wrong quotes 2022-06-30 06:37:57 +00:00
James Fitzgerald
e448e09e73 Run make fix-isort fix-formatting on RapidFire module 2022-06-30 06:37:57 +00:00
James Fitzgerald
d5dfbf456f Add RapidFire module 2022-06-30 06:37:57 +00:00
nogg3r5
aa327e4557 Typo in variable name 2022-06-28 08:14:27 -07:00
nogg3r5
37e67c7c44 Update led.py
This line also ends changing, otherwise the variable brightness is never used
2022-06-28 08:14:27 -07:00
nogg3r5
8db4cbbf94 Updated docs to match default states in led.py 2022-06-28 08:14:27 -07:00
nogg3r5
1f8d66ce8c Updating correct line 2022-06-28 08:14:27 -07:00
nogg3r5
c54f4fea6c Added brightness to example 2022-06-28 08:14:27 -07:00
nogg3r5
333913a924 Update led.py
Reducingdefault brightness to 50%
2022-06-28 08:14:27 -07:00
nogg3r5
15c5e4415e Set brightness to 100 when the board powers on
There didn't seem to be a way to do this, unless I missed something somewhere?
2022-06-28 08:14:27 -07:00
James Fitzgerald
63d54cd9b5 Fix wrong module name used in oneshot.md 2022-06-24 14:12:17 -07:00
crazyiop
b7de9122c2 [doc:rgb] fix link to neopixel lib
The link is hardcoded to a commit from 2018-12-21 (version 3.3.5) while
we are currently at 6.3.3.

The rgb makes use of the fact that NeoPixel is a subclass of PixelBuf
but that was not true back then. Hence some people following the link in
the doc get a neopixel library incompatible with kmk.
2022-06-23 23:21:24 +00:00
Josh Klar
d8594f49e1 docs(readme): ban GitHub Copilot-derived works in KMK repositories
In light of
https://github.blog/2022-06-21-github-copilot-is-generally-available-to-all-developers/
and the fact that Copilot appears, to my understanding, to still strip
copyright headers and attribution (violating almost all software
licenses on earth), and because that's shitty unethical behavior at best
(and legally problematic at worse), this commit cements a project stance
on contributions derived from GitHub Copilot and similar tooling.
2022-06-22 23:44:02 +00:00
nogg3r5
17aac3b901 Fixed missing closing bracket 2022-06-22 14:20:19 +00:00
Luke D Russell
d7bfb917f2 More Flake8 fixes, and keymap updates. 2022-06-21 17:54:51 -07:00
Luke D Russell
5c8f33fc3e keymap updates and test Flake8 exemption.
One more time
2022-06-21 17:54:51 -07:00
Luke D Russell
10572d71f6 fixes test errors
Fixing imports and links

Fixes isort.

Updates my keymap
2022-06-21 17:54:51 -07:00
Luke D Russell
dde6efe6fe Adds support for Nice Nano, no BLE yet. 2022-06-21 17:54:51 -07:00
Sadek Baroudi
f816f24497 fixed the key matrix mapping, added mouse keys 2022-06-21 17:54:51 -07:00
Sadek Baroudi
8083188b9e small fixes, disabled encoder for now 2022-06-21 17:54:51 -07:00
Sadek Baroudi
9f23d9048e initial commit of ffkb support for KMK using the KB2040 from adafruit 2022-06-21 17:54:51 -07:00
Sadek Baroudi
9840569dc6 initial commit 2022-06-21 17:54:51 -07:00
Gleb Sabirzyanov
d70de71c5f Fix encoder direction inversion being ignored 2022-06-21 08:16:54 -07:00
Stefan Foulis
0f9eb196c2 Adds link to Documentation in README.md
and fixed spacing of shields.

fixes #463
2022-06-16 07:53:53 -07:00
crazyiop
ffcfc9835d update format to fstring 2022-06-12 09:31:15 +00:00
crazyiop
6068b60cac tweak the debug output to make them more readable 2022-06-12 09:31:15 +00:00
xs5871
614961521d fix inconsistencies with chained holdtap keys 2022-06-11 12:42:49 -07:00
crazyiop
50b8554757 [doc] change link to a better one 2022-06-11 19:27:15 +00:00
crazyiop
d1f23a668c [doc] add a simple way to make a coord_mapping 2022-06-11 19:27:15 +00:00
James Fitzgerald
b6a782e83c Improve clarity in mouse_keys.md
Improved consistency and clarity by bringing keycode representation in line with other documentation containing keycodes.
2022-06-11 09:10:26 -07:00
Kyle Brown
91f494846a Revert "[rgb] fix set_rgb_fill method"
This reverts commit 90c4ce99f3.
2022-06-09 11:26:53 +00:00
crazyiop
8d7ae8b284 add info to exception to help debug layers 2022-06-09 11:04:00 +00:00
Björn Bösel
561896769c fix code style and import order 2022-06-09 01:58:07 -07:00
Björn Bösel
5bf33056bf removed handling of old scroll/pointing toggle 2022-06-09 01:58:07 -07:00
Björn Bösel
f44c1a8c20 update docs for pimoroni 2022-06-09 01:58:07 -07:00
Björn Bösel
a58293600d update docs for pimoroni 2022-06-09 01:58:07 -07:00
Björn Bösel
9a1fc95f54 separated trackball handlers from keyboard layers. added key definitions for separated handler selectaion 2022-06-09 01:58:07 -07:00
Björn Bösel
80660e4336 code style 2022-06-09 01:58:07 -07:00
Björn Bösel
4b0e459d62 Add layers to pimoroni trackball 2022-06-09 01:58:07 -07:00
jonathan nifenecker
90c4ce99f3 [rgb] fix set_rgb_fill method
The code was wrongly iterating the neopixel, running `fill()` on every
individual pixels.
2022-06-08 08:47:02 -07:00
chemicalwill
f21fa5edb7 Added KC.MACRO_SLEEP_MS(ms) example
* provided an example of KC.MACRO_SLEEP_MS(ms) within sequences.md
2022-06-06 16:12:18 -07:00
chemicalwill
3ee701e986 Point KC.MACRO_SLEEP_MS(ms) to sequeces.md
* macros.md no longer exists
* moving documentation for KC.MACRO_SLEEP_MS(ms) to sequencs.md
2022-06-06 16:12:18 -07:00
xs5871
80b44b5c1b update combo docs 2022-06-05 16:32:25 -07:00
xs5871
35b1a5843f update combo unit tests 2022-06-05 16:32:25 -07:00
xs5871
400042f799 implement fast and late reset for combos 2022-06-05 16:32:25 -07:00
xs5871
229b7afcb0 implement faster combo activation 2022-06-05 16:32:25 -07:00
Stefan Foulis
8460c5abfe fix typo in code example in easypoint docs 2022-06-05 20:22:31 +00:00
Stefan Foulis
093d0329e6 fix typos in Split docs 2022-06-05 14:29:16 +00:00
Stefan Foulis
b04b740f9a fix typo in Split docs 2022-06-04 10:49:34 -07:00
xs5871
d6659cd1a3 fix dangling reference issue 2022-06-03 08:46:43 -07:00
Kyle Brown
645124dab6 cleanup comments 2022-05-31 23:09:49 -07:00
Leon Anavi
55df583396 anavi/knobs3: Add ANAVI Knob 1
Add support for ANAVI Knob 1: an open source programmable mini
mechanical keyboard with a rotary encoders and Seeed XIAO RP2040.
This is open source hardware designed with KiCad, the smaller
version of ANAVI Knobs 3.

Signed-off-by: Leon Anavi <leon@anavi.org>
2022-05-30 13:11:07 -07:00
Cole Smith
ff3f7234d4 formatting 2022-05-28 12:05:36 -07:00
Cole Smith
b91974bce2 rgb matrix now can work out what side its on using the drive name 2022-05-28 12:05:36 -07:00
xs5871
08d3386643 fix KC.LM 2022-05-26 08:09:15 -07:00
Isaac Benitez
4a29530ad5 Correct Split function in example code 2022-05-23 23:15:00 +00:00
Isaac Benitez
1771b76b19 Correct import statements in example code 2022-05-23 23:15:00 +00:00
xs5871
b6146365b3 fix crash on releasing dropped key presses 2022-05-23 15:59:52 -07:00
doesntfazer
32f5520ec6 fixed dupe import 2022-05-22 12:33:32 -07:00
doesntfazer
e4db502b9b delete bak 2022-05-22 12:33:32 -07:00
doesntfazer
fb1a51abdc removed busio 2022-05-22 12:33:32 -07:00
doesntfazer
4c1ee62273 fixed 2022-05-22 12:33:32 -07:00
doesntfazer
c00e769868 ran patch and fixed files 2022-05-22 12:33:32 -07:00
doesntfazer
ef04cdc07c removed extra lines 2022-05-22 12:33:32 -07:00
doesntfazer
9e3b9f6229 Update README.md 2022-05-22 12:33:32 -07:00
doesntfazer
b57d672bc5 Update README.md 2022-05-22 12:33:32 -07:00
doesntfazer
11e042c098 Update main.py 2022-05-22 12:33:32 -07:00
doesntfazer
401ba51ba5 added Crowboard 2022-05-22 12:33:32 -07:00
Cole Smith
42221f4a28 removed gc calls 2022-05-21 19:36:26 -07:00
cole smith
d895da5a6a Update peg_rgb_matrix.md 2022-05-21 19:36:26 -07:00
cole smith
fb931ab2d3 Update peg_rgb_matrix.md 2022-05-21 19:36:26 -07:00
cole smith
d95b4344dd Update peg_rgb_matrix.md 2022-05-21 19:36:26 -07:00
cole smith
dade827c76 Update peg_rgb_matrix.md 2022-05-21 19:36:26 -07:00
cole smith
72d6fb9304 Update peg_rgb_matrix.md 2022-05-21 19:36:26 -07:00
Cole Smith
eb23ed0020 added peg rgb_
matrix code and docs
2022-05-21 19:36:26 -07:00
chemicalwill
73e17d780a Changed links to relative filepath links 2022-05-20 12:29:37 -07:00
chemicalwill
da0e987b68 Updated directories and added links to keys.py 2022-05-20 12:29:37 -07:00
Steven Wilde
0e051a904b Added Dynamic Sequences to modules.md 2022-05-19 15:10:32 +00:00
Steven Wilde
8d0b835c9c Improved readability and finished renaming 2022-05-19 15:10:32 +00:00
Steven Wilde
a6e5ee1c08 Renamed to Dynamic Sequences 2022-05-19 15:10:32 +00:00
Steven Wilde
9a211f091a Fix imports and quotes 2022-05-19 15:10:32 +00:00
Steven Wilde
55b06bba79 Added dynamic macros module 2022-05-19 15:10:32 +00:00
Cole Smith
2de044469f missed text render call in boot up after refactor 2022-05-12 21:56:01 +00:00
Cole Smith
664af4d4f2 I missed a few things in the docs 2022-05-12 21:56:01 +00:00
Cole Smith
719cef4945 fixed docs formatting 2022-05-12 21:56:01 +00:00
Cole Smith
9b34fcd7ef formatting 2022-05-12 21:56:01 +00:00
Cole Smith
6970a6c786 oled data is now a class 2022-05-12 21:56:01 +00:00
Cole Smith
7e760a2917 made changes from klardotsh's review 2022-05-12 21:56:01 +00:00
Cole Smith
ad43377a5e why does it fix other things but not quotes 2022-05-12 21:56:01 +00:00
Cole Smith
44d27ef09a black my bad 2022-05-12 21:56:01 +00:00
Cole Smith
86e3b138b2 Required libs in docs 2022-05-12 21:56:01 +00:00
Cole Smith
caab7a4a15 added oleds and docs 2022-05-12 21:56:01 +00:00
Leon Anavi
6ef20ee042 boards/anavi/knobs3/code.py: Enable RGB
Enable RGB/Underglow/NeoPixel for the built-in NEOPIXEL LED on
Seeed XIAO RP2040. By default set it 25% brightness with rainbow
animation.

Signed-off-by: Leon Anavi <leon@anavi.org>
2022-05-11 16:28:32 -07:00
Leon Anavi
09583aa7f7 anavi/knobs3: Add ANAVI Knobs 3
Add support for ANAVI Knobs 3: an open source programmable mini
mechanical keyboard with 3 rotary encoders and Seeed XIAO RP2040.
This is open source hardware designed with KiCad.

Signed-off-by: Leon Anavi <leon@anavi.org>
2022-05-10 16:31:16 -07:00
John Morrison
c183bebb58 Conform class name case conventions 2022-05-08 20:10:41 +00:00
John Morrison
bea0f6d75b Requested rename 2022-05-08 20:10:41 +00:00
John Morrison
12e7a1b42c Class should be capital, use get rather than exception 2022-05-08 20:10:41 +00:00
John Morrison
73e95bfdde Change to be an extension 2022-05-08 20:10:41 +00:00
John Morrison
842537064f Black wants an additional blank line. 2022-05-08 20:10:41 +00:00
John Morrison
9f964aba36 Allow strings in keymap. Replace with keys in keyboard _init cycle. 2022-05-08 20:10:41 +00:00
BigTuna94
a4d6a44a04 pythonify Potentiometer state 2022-05-06 20:29:39 -07:00
Zach Richard
b97fca7c76 remove unnecessary intermediate GPIOPotentiometer class 2022-05-06 20:29:39 -07:00
Zach Richard
0f22ce071b switch to kmk HID for CC 2022-05-06 20:29:39 -07:00
BigTuna94
14fb78c191 fix whitespace formatting 2022-05-06 20:29:39 -07:00
BigTuna94
5dc1013d00 try using internal kmk hid CC 2022-05-06 20:29:39 -07:00
BigTuna94
5f5c04b9c7 revert keymap specific formmatting 2022-05-06 20:29:39 -07:00
BigTuna94
9898a1ed73 fix formatting/sorting 2022-05-06 20:29:39 -07:00
Zach Richard
d0c60a7694 for flexible system volume support, use lookup tables for everything sliders 2022-05-06 20:29:39 -07:00
Zach Richard
f119678ec7 simplify ADC readings 2022-05-06 20:29:39 -07:00
Zach Richard
8208194842 use callback to collect midi velocity, add software detent for pitch bend mode 2022-05-06 20:29:39 -07:00
Zach Richard
003bb7d96a switch back to averaging multiple ADC readings. More reliable. 2022-05-06 20:29:39 -07:00
Zach Richard
f632aaddc3 fix typo, fix pitch bend conversion 2022-05-06 20:29:39 -07:00
BigTuna94
809a62b64d add midi layout and slider controls 2022-05-06 20:29:39 -07:00
Zach Richard
34a7d47e49 add f keys and slider operations 2022-05-06 20:29:39 -07:00
Zach Richard
52b0ff5ca1 cleanup and fixes 2022-05-06 20:29:39 -07:00
BigTuna94
9b1976ec3e add support for potentiometers 2022-05-06 20:29:39 -07:00
BigTuna94
8d066e578d add rgb 2022-05-06 20:29:39 -07:00
BigTuna94
f12a7e9e9d stubbed out other layers 2022-05-06 20:29:39 -07:00
BigTuna94
1040221762 formatting 2022-05-06 20:29:39 -07:00
BigTuna94
239b09d94d first probably-working version of keymapping for RP2.65-F 2022-05-06 20:29:39 -07:00
xs5871
256c0f1c55 update tapdance docs 2022-05-06 20:29:26 -07:00
xs5871
51f07d8558 refactor tapdance on top of holdtap 2022-05-06 20:29:26 -07:00
xs5871
7af0e11f75 prepare layers for tapdance refactor 2022-05-06 20:29:26 -07:00
xs5871
385263e0e6 prepare oneshot for tapdance refactor 2022-05-06 20:29:26 -07:00
xs5871
00a484fa61 prepare modtap for tapdance refactor 2022-05-06 20:29:26 -07:00
xs5871
0751f6ca5f prepare holdtap for tapdance refactor 2022-05-06 20:29:26 -07:00
Steven Wilde
29abba63e7 Removed curr_event and simplified scan_for_changes 2022-05-04 16:40:48 +00:00
Steven Wilde
f2b8c7106e Move the changes to keypad.py 2022-05-04 16:40:48 +00:00
Steven Wilde
30252099cd Fix crash when typing quickly on a split board 2022-05-04 16:40:48 +00:00
John Morrison
6c2d64843b Align debug messages with method called 2022-05-02 16:50:54 -07:00
Syed Hussaini
609e275c03 doc updates based on the comments and refactoring 2022-05-02 21:02:40 +00:00
Syed Hussaini
660b751c87 review updates and renamed to Sticky Mod 2022-05-02 21:02:40 +00:00
Syed Hussaini
a0efbb92d5 docs update 2022-05-02 21:02:40 +00:00
Syed Hussaini
1b902b907c updates based on review comments 2022-05-02 21:02:40 +00:00
Syed Hussaini
bce7959f66 modholdandtap implementation 2022-05-02 21:02:40 +00:00
xs5871
bd87b278b8 Update scanners.md
fix `KeysScanner` example
2022-04-25 16:03:18 -07:00
xs5871
62ff7c838d fix combo buffer replay /w layer-switch 2022-04-25 13:26:02 -07:00
John Morrison
4419f13f1c PR requested changes 2022-04-25 17:50:26 +00:00
John Morrison
8950e45325 Mention index, get and the fact that all but ALPHA keys are case-sensitive to docs 2022-04-25 17:50:26 +00:00
John Morrison
7d46e701aa Remove unused import 2022-04-25 17:50:26 +00:00
John Morrison
bb8dec907a Clear cache rather than reassign, correct ALPHA case check and creation 2022-04-25 17:50:26 +00:00
John Morrison
bdc2bbb3cf Fix isort imports 2022-04-25 17:50:26 +00:00
John Morrison
6a7f5e285e Remove unused import 2022-04-25 17:50:26 +00:00
John Morrison
5eeb88e2b7 Minimum necessary to add index and get capability and tests 2022-04-25 17:50:26 +00:00
cole smith
88cbbc6a90 Apply suggestions from code review
Thank you for sticking with me, I really appreciate it. I will try and only need to be told once

Co-authored-by: xs5871 <60395129+xs5871@users.noreply.github.com>
2022-04-25 16:54:08 +00:00
Cole Smith
49b83305d9 fixing docs 2022-04-25 16:54:08 +00:00
Cole Smith
e67a1a8cd7 added on to the docs for splits using encoders 2022-04-25 16:54:08 +00:00
Ryan Rotter
da239e535e minor typo in rgb.md 2022-04-25 16:53:22 +00:00
Ryan Rotter
9e171abc69 Capitalize Python class names 2022-04-25 16:53:22 +00:00
Ryan Rotter
9733c43d2a nice!nano spelling, broken link, bulleted lists 2022-04-25 16:53:22 +00:00
Ryan Rotter
dfa73a8cca add backtick quotes for code snippets
* Added for keycodes, pin numbers, and code snippets. Mostly in tables.
* Enhance documentation readability
* Make automated spell checking easier - aspell automatically ignores these snippets
* fix invalid markdown table in mouse_keys.md
2022-04-25 16:53:22 +00:00
Ryan Rotter
1985712637 spelling/capitalization/usage on proper nouns
correct usage sourced from:
  * websites of respective trademark holders
  * Wiktionary
  * Wikipedia
2022-04-25 16:53:22 +00:00
Ryan Rotter
09d0287800 Correct spelling of common words in .md files 2022-04-25 16:53:22 +00:00
xs5871
c7eaeaf90c implement multiple pixelbuffer in rgb extension 2022-04-24 10:20:22 -07:00
xs5871
fb5ecf7e38 refactor debug output 2022-04-23 14:25:21 -07:00
xs5871
642790b2e7 remove keyboard.current_key (never actually used) 2022-04-23 14:25:21 -07:00
xs5871
e04a01c25e factor out module pre-processing 2022-04-23 14:25:21 -07:00
Ryan Rotter
62013f1770 test_kmk_keys.py: reorder and comment for clarity 2022-04-22 09:10:40 -07:00
Ryan Rotter
27a0bc1977 refactor Key and ModifierKey __call__ methods
- Add tests for ModifierKey chaining
- Rewrite ModifierKey.__call__ for correctness and readability
- __call__ now maintains handlers and meta, like clone()
2022-04-22 09:10:40 -07:00
xs5871
7a51ce576f fixes scanner init and bi-directional communication in split module 2022-04-20 15:59:51 -07:00
ldsands
651e203cb7 Updated OneShot doc with example OneShot Modifier Combination 2022-04-20 15:58:53 -07:00
John Morrison
4d297e6ab2 Typos 2022-04-18 13:28:26 +00:00
xs5871
1700aff408 implements scanner with rotaryio 2022-04-17 18:33:34 -07:00
xs5871
63973e4a6e fix late release of oneshot keys 2022-04-17 18:33:24 -07:00
xs5871
f7dac9e96e add documentation 2022-04-17 18:33:14 -07:00
xs5871
7ff77b97bb implement support for multiple scanners at once
fixup
2022-04-17 18:33:14 -07:00
Ryan Rotter
c7490087b6 Add ROPT and LOPT as alias for alt keys
Additional aliases for macOS key names to match QMK behavior
2022-04-16 17:09:47 -07:00
levpopov
a210c2bf62 Update Officially_Supported_Microcontrollers.md 2022-04-14 10:57:42 +00:00
levpopov
c8df1d10ad nice!nano compile instructions 2022-04-14 10:57:42 +00:00
xs5871
d2e87b3e70 add keypad scanner for shift registers 2022-04-12 08:29:23 -07:00
xs5871
b3ec37e274 expose keypad options through scanner init 2022-04-11 18:26:43 -07:00
xs5871
ec8e167996 add documentation 2022-04-11 17:07:12 -07:00
xs5871
175f0c6a97 introduce consistent naming scheme 2022-04-11 17:07:12 -07:00
xs5871
e395e89864 provide default coord_mapping from scanners 2022-04-11 17:07:12 -07:00
xs5871
8ac497d99b Make CPs keypad.KeyMatrix scanner the default. 2022-04-11 17:07:12 -07:00
levpopov
c880c02ad5 use keypad.Event instead of Matrix.KeyEvent 2022-04-10 14:30:45 -07:00
levpopov
89351fc203 Fix direct GPIO scanner for split keyboards
https://github.com/KMKfw/kmk_firmware/issues/372
2022-04-10 14:30:45 -07:00
Syed Hussaini
4b03ba846a formatted module with black 2022-04-09 15:19:02 -07:00
Syed Hussaini
87d1b0c6b9 updated doc based on the presentation on github 2022-04-09 15:19:02 -07:00
Syed Hussaini
be308d516f added docs 2022-04-09 15:19:02 -07:00
Syed Hussaini
c950785385 caps word implementation 2022-04-09 15:19:02 -07:00
xs5871
74fa1fb52e update docs and examples 2022-04-09 14:40:40 -07:00
xs5871
7431192e95 move old matrix to kmk.scanners.digitalio_matrix 2022-04-09 14:40:40 -07:00
Syed Hussaini
142a15e175 Updated doc to show the keys usage 2022-04-08 21:03:36 -07:00
Syed Hussaini
0cb69651c8 updated doc to reflect python style boolean 2022-04-08 20:22:43 -07:00
Syed Hussaini
6002ad33e1 rename to cg_swap and added docs 2022-04-08 20:22:43 -07:00
Syed Hussaini
3f0283422d swapping control with cmd 2022-04-08 20:22:43 -07:00
Jay Wiggins
cca5b91be2 add None to account for no encoder button
I had to dig through the code to find out what to do... adding it to the docs...
2022-04-08 08:44:52 -07:00
ldsands
f1d229c7ff Update main.py
Updated formatting to pass tests
2022-04-07 19:03:39 -07:00
ldsands
08df52e90d Update kb.py
Fixed formatting and so file can pass tests
2022-04-07 19:03:39 -07:00
ldsands
529e6101ab Update README.md
Updated with like to QMK default keymap
2022-04-07 19:03:39 -07:00
ldsands
ca773d0633 Update main.py
I forgot to implement the default QMK keymap for Sofle
2022-04-07 19:03:39 -07:00
ldsands
cc82433f74 Add Support for SofleV2
Added support for SofleV2 using the SparkFun Pro Micro RP2040
2022-04-07 19:03:39 -07:00
sparksThefire
7b92596937 Fix WinCompose usage
WinCompose requires the `enter` key to be typed at the end of a special unicode character. In order to help print emojis and emoticons in a windows environment, I have added the enter key to the Windows compose unicode sequence method. I have tested this with my local keyboard.
2022-04-05 18:01:53 -07:00
xs5871
e5f89963cf fix pystack exhaustion caused by make_shifted_key.
This removes multiple layers of indirection, effectively making
`make_shifted_key` only as heavy on the stack as the reguler `make_key`.
2022-04-03 13:47:27 -07:00
xs5871
cc70c8f4a8 fix failing unit test.
During timeout processing, cancelations have to take immediate effect,
but new 0-delay timeouts have to be moved to the next cycle.
2022-04-02 10:06:27 -07:00
xs5871
2a53bd8b64 Allow passing user-defined MPY_SOURCES and MPY_CROSS to make 2022-03-31 16:14:17 -07:00
xs5871
07a485b04d implement stricter and more consistent timeouts.
- stricter timeouts: Instead of adding an entire millisecond, use a list
  of timeouts that are supposed to be handled on the same tick. This
  reduces the delay between target tick and actual tick, especially for
  many timeouts issued to the same tick, i.e. combos.
- consistent timeouts: Timeouts are now guaranteed to be handled in the
  order they were issued. Timer rollover is handled properly.

caveat / change to the interface: the returned `timeout_key` is a tuple
of the target timeout tick and the index of the timeout at that tick.
2022-03-31 16:13:32 -07:00
xs5871
d4e72b98c9 remove dependency on neopixel lib for custom pixelbuffers 2022-03-24 17:56:59 -07:00
xs5871
ea19f5bb30 convert hsv_to_rgb to faster 16bit fixed point 2022-03-24 17:56:59 -07:00
xs5871
24d0587ac6 code deduplication: use utils.clamp 2022-03-24 17:56:59 -07:00
yswallow
d12f9a18f1 avoid "Already advertising" error 2022-03-23 21:16:09 -07:00
yswallow
1a7d1d53f6 Enabling Completely Wireless
You can use SplitType.BLE and HIDModes.BLE at the same time
2022-03-23 21:16:09 -07:00
tonasz
9539f2dc74 Fix formatting 2022-03-23 21:16:09 -07:00
tonasz
3687212ed7 Split BLE background advertising 2022-03-23 21:16:09 -07:00
tonasz
d47143463b Fix broken split BLE 2022-03-23 21:16:09 -07:00
Boot-Error
55a75cb9b3 fix: after_matrix_scan when board is the target 2022-03-23 21:00:51 -07:00
giovanniborella
9684e0d5f7 add vendor 2022-03-20 15:22:57 -07:00
giovanniborella
4f7f3dcc3c Implement easypoint 2022-03-20 15:22:57 -07:00
Kyle Brown
1863543428 fix comment 2022-03-20 11:04:15 -07:00
Hilary B. Brenum (they/them)
58ea87dcc2 fix typo 2022-03-18 17:15:01 -07:00
HBBisenieks
2a560cf3f3 added license section 2022-03-18 17:15:01 -07:00
Hilary B. Brenum
275e61832f call out make fix-isort etc before code commit 2022-03-18 17:15:01 -07:00
HBBisenieks
b2c7da2058 escaping graves is the worst 2022-03-18 17:15:01 -07:00
HBBisenieks
dc171360f6 backticks 2022-03-18 17:15:01 -07:00
HBBisenieks
32bafcdc46 documentation about documentation 2022-03-18 17:15:01 -07:00
xs5871
5c33fd3a9f implement combo/chord/sequence module 2022-03-14 19:27:12 -07:00
HBBisenieks
a8e7f43e59 updates to boot.py docs to bring it more in-line with docs style 2022-03-14 17:36:42 -07:00
zyxwars
c46d18ecb7 fix wrong commit 2022-03-12 08:37:05 -08:00
zyxwars
603833dbb7 Add more commets explaining the code 2022-03-12 08:37:05 -08:00
zyxwars
2d005048cc Temp fix del coord crash 2022-03-12 08:37:05 -08:00
zyxwars
cbaf995e33 Add boot.py docs 2022-03-12 08:37:05 -08:00
illness072
3442a21835 Fix _find_key_in_map callings 2022-03-08 17:45:07 +00:00
donutcat
4d1f9e487e Fix MIDI PR files 2022-03-06 00:56:05 -08:00
DonutCables
e52af4f58a MIDI module and docs 2022-03-06 00:56:05 -08:00
xs5871
de1d602b25 fix tick overflow and implement periodic timer class. 2022-03-06 00:02:17 -08:00
HBBisenieks
e2f2c228d1 changes per https://github.com/KMKfw/kmk_firmware/pull/350\#issuecomment-1059061967 2022-03-05 10:40:09 -08:00
HBBisenieks
8dbbc42496 added example code for all layer keys 2022-03-05 10:40:09 -08:00
Kyle Brown
067b7d2e5f Ignore mac specific files 2022-03-03 20:17:16 -08:00
Yoichiro Tanaka
201d127348 Fix the code style issue. 2022-03-01 16:19:01 -08:00
Yoichiro Tanaka
c11fffea2c Test the coord-mapping setting and fix the issue. 2022-03-01 16:19:01 -08:00
idesignstuff
b3c8245365 Update keys.md
Added example for use of .after_keys_handler() to change RGB settings and add serial print.
2022-02-27 18:06:01 -08:00
Kyle Brown
9f2142d706 Remove KMKpython reference 2022-02-27 16:04:38 -08:00
xs5871
54ae022846 fix keypad matrix init and unguarded debug print. 2022-02-27 09:58:57 -08:00
Hilary B. Brenum
2008e0ab3f Add example of simple_key_sequence 2022-02-25 16:04:20 -08:00
xs5871
8cec85e3ec base animation speed on system timer 2022-02-25 16:04:09 -08:00
tonasz
b7e3e4ea8c Add doc index 2022-02-25 13:41:08 -08:00
Ellie T
d54fff883d Fixed IS31FL3731 LEDs on keybow 2040 2022-02-20 21:07:52 -08:00
Ellie T
aae476b59f Updated scanner docs to reflect boilerplate changes 2022-02-20 18:42:38 -08:00
Ellie T
2fce09986e Adding Pimoroni Keybow and Keybow 2040 2022-02-20 18:42:38 -08:00
xs5871
ef7b29bd43 fix column flipping on rhs of split boards. (boards) 2022-02-20 13:55:37 -08:00
xs5871
ab7e0d3eb6 fix column flipping on rhs of split boards. 2022-02-20 13:55:37 -08:00
Jeroen Harkes
d26d397f10 Changed to single quotes 2022-02-20 12:10:04 -08:00
Jeroen Harkes
ecc8b46a2c Change documentation changing the original LED code to statusLED 2022-02-20 12:10:04 -08:00
Jeroen Harkes
fd30b7a8d8 extension for indicating layer status with leds 2022-02-20 12:10:04 -08:00
Ellie
57ba0fe8b2 Custom matrix scanners
- Introduce Scanner base class for MatrixScanner
- Create new Scanner using built-in keypad module
- Allow overriding the scanner used by KMKKeyboard
2022-02-20 12:00:15 -08:00
tonasz
e7d306cf30 Add Kyria board configuration and examples 2022-02-20 11:59:50 -08:00
Ellie T
2d4db12c46 Override LED creation in the RGB extension. 2022-02-19 22:27:31 -08:00
Rene Giovanni Borella
fb783c302c fix formatting, run test 2022-02-19 21:33:45 -08:00
René Giovanni Borella
2096f1a950 Update kmk/modules/encoder.py
Co-authored-by: Tonasz <27835465+Tonasz@users.noreply.github.com>
2022-02-19 21:33:45 -08:00
René Giovanni Borella
a34272dd18 Update kmk/modules/encoder.py
Co-authored-by: Tonasz <27835465+Tonasz@users.noreply.github.com>
2022-02-19 21:33:45 -08:00
René Giovanni Borella
7f5ea97bba Update kmk/modules/encoder.py
Co-authored-by: Tonasz <27835465+Tonasz@users.noreply.github.com>
2022-02-19 21:33:45 -08:00
René Giovanni Borella
7f7eaafbf3 Update kmk/modules/encoder.py
Co-authored-by: Tonasz <27835465+Tonasz@users.noreply.github.com>
2022-02-19 21:33:45 -08:00
Rene Giovanni Borella
8e4ab1d733 Encoder class rebuild
implement BaseEncoder
2022-02-19 21:33:45 -08:00
Rene Giovanni Borella
0e029ebf72 tests pass locally 2022-02-19 21:33:45 -08:00
Rene Giovanni Borella
f02ff1463a reformatted for black 2022-02-19 21:33:45 -08:00
Rene Giovanni Borella
3c4e74d50e typo 2022-02-19 21:33:45 -08:00
Rene Giovanni Borella
ba7b5ce15c Update i2c_encoder.md 2022-02-19 21:33:45 -08:00
Rene Giovanni Borella
671aa60838 basic functions 2022-02-19 21:33:45 -08:00
xs5871
dc4fc646aa port all boards to new intify_coordinate signature. 2022-02-19 18:01:33 -08:00
xs5871
6840330f50 update documentation 2022-02-19 18:01:33 -08:00
xs5871
da3e87ee2d convert matrix report from row/col byte array to linear key_number. 2022-02-19 18:01:33 -08:00
tonasz
7519a97eaa Move pio_uart.py to transports folder 2022-02-16 17:59:59 -08:00
tonasz
083f2e143d Add simple PIO manual to split doc 2022-02-16 17:59:59 -08:00
tonasz
8c0f8ccbc3 Fix pio_uart.py formatting 2022-02-16 17:59:59 -08:00
tonasz
fdf8e9f78c Add RP2040 PIO UART implementation for split keyboards 2022-02-16 17:59:59 -08:00
xs5871
f4807f341e fix table formatting in docs. 2022-02-15 08:24:33 -08:00
xs5871
ee4cce32cb implements oneshot/sticky keys. 2022-02-13 16:43:14 -08:00
xs5871
eb3a7bbf1e change unit test to reflect new modtap default behavior 2022-02-13 14:47:02 -08:00
xs5871
481c69b212 add at least some kind of documentation 2022-02-13 14:47:02 -08:00
xs5871
1c6b25517a implement hold-tap interrupt for Layers 2022-02-13 14:47:02 -08:00
xs5871
a685618480 implement hold-tap interrupt on other key tap (i.e. release) 2022-02-13 14:47:02 -08:00
xs5871
5cae17c9f3 fix permanent hid_send 2022-02-13 14:47:02 -08:00
xs5871
7573556f33 fix hold-tap key interrupted by other hold-tap key 2022-02-13 14:47:02 -08:00
xs5871
f30206c7d5 implement per-key tap_time. 2022-02-13 14:47:02 -08:00
xs5871
21c058aaa8 add hold-tap interrupt behavior: prefer hold.
The interrupt resolution of hold-tap keys can now be set to resolve to
either tap or hold key. The default mod-tap is set to prefer hold.
2022-02-13 14:47:02 -08:00
tonasz
0f7afe5b2c Add polling_interval to trackball 2022-02-08 13:23:35 -08:00
tonasz
119ab3d80a Fix pimoroni_trackball.py formatting 2022-02-08 13:23:35 -08:00
tonasz
7fba42f28c Small pimoroni_trackball.py refactors 2022-02-08 13:23:35 -08:00
tonasz
827862b34b Pimoroni Trackball draft module 2022-02-08 13:23:35 -08:00
xs5871
f2aabd87cd fix after rebase
fix after rebase
2022-02-07 16:25:45 -08:00
xs5871
91562abde9 update documentation 2022-02-07 16:25:45 -08:00
xs5871
65f48b53a4 remove out-of-scope reference 2022-02-07 16:25:45 -08:00
xs5871
cd4ba26e95 add a keycode for setting LED to a defined brightness 2022-02-07 16:25:45 -08:00
xs5871
967046587b apply suggested changes 2022-02-07 16:25:45 -08:00
xs5871
4a83e6de85 code deduplication 2022-02-07 16:25:45 -08:00
xs5871
9e8b8376c5 implement led backlight for multiple pwm channels 2022-02-07 16:25:45 -08:00
patrickmcquay
aa01da7e1d add checksum to split uart code. 2022-02-05 18:00:03 -08:00
patrickmcquay
1387cb2660 Update kmk/modules/split.py so that ble boards work with ee hands.
Co-authored-by: Tonasz <27835465+Tonasz@users.noreply.github.com>
2022-02-05 18:00:03 -08:00
Patrick McQuay
fa0062326b changes from black 2022-02-05 18:00:03 -08:00
Patrick McQuay
be2bbce21a fix some linting issues 2022-02-05 18:00:03 -08:00
Patrick McQuay
1c82f7d387 apply vylders fix and also figure out how to set _is_target correctly, as well as make it work nicely with ble. 2022-02-05 18:00:03 -08:00
Kyle Brown
9f373b4be0 Fix linter 2022-02-05 17:59:44 -08:00
xs5871
2874d49d20 disable hid_send on secondary split 2022-02-05 16:38:41 -08:00
pcharest2000
6ecb7807c2 Code refractor of private members, I am not python programmer, and final try to fix linting error after I quit 2022-02-05 16:37:51 -08:00
pcharest2000
99a9c6fd80 Tried to fix linting 2022-02-05 16:37:51 -08:00
pcharest2000
25fd205c3e Implemented basice linear acceleration.... This makes it more usable, ill update if PR is accepted 2022-02-05 16:37:51 -08:00
pcharest2000
a627102b52 Clarification regaring hadlers on keys 2022-02-05 16:37:51 -08:00
xs5871
3e3255ffea fix lock_status on secondary split 2022-02-05 07:29:01 +00:00
RT_GEN
55a6636741 Fixed multiple encoders not working
Multiple encoders didn't work as a result of an unbound value of 'idx', the loop counter in the during_bootup method. Binding this value has fixed the issue. This has been tested on hardware (6 encoders) and is confirmed working.
2022-02-05 07:28:02 +00:00
Josh Klar
46152ae8d9 feat(ci): run tests (from #288) in CI, which already runs make test 2022-02-04 08:38:20 -08:00
patrickmcquay
7fbda871c2 real fix for swallowing keys, use a buffer and only process one key at a time. 2022-02-04 08:37:19 -08:00
Patrick McQuay
c09cd48218 fix for dropping keys 2022-02-04 08:37:19 -08:00
dherrada
bff1bdf6d9 Added may pad files 2022-02-03 01:12:23 -08:00
Christian Tu
f90de872d8 fix bytearray.startswith not available in CircuitPython 2022-02-02 17:54:23 -08:00
Christian Tu
b6201d43d4 unit tests for execution in desktop dev environment 2022-02-01 00:48:23 -08:00
Kyle Brown
e70ce5f431 fix discord invite link 2022-01-28 17:58:34 -08:00
Kyle Brown
328a29c439 Fix isort on incorrect files 2022-01-28 17:58:06 -08:00
abhijithabhiakl
0bebdd6d27 fix monocolor LED 2022-01-25 23:44:07 -08:00
dependabot[bot]
af55acd584 Bump ipython from 7.24.1 to 7.31.1
Bumps [ipython](https://github.com/ipython/ipython) from 7.24.1 to 7.31.1.
- [Release notes](https://github.com/ipython/ipython/releases)
- [Commits](https://github.com/ipython/ipython/compare/7.24.1...7.31.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-25 10:55:24 -08:00
xs5871
245f7912b6 fix formatting 2022-01-22 08:55:40 -08:00
xs5871
8419ed789c implement keyboard lock status reader API 2022-01-22 08:55:40 -08:00
xs5871
a62d39a252
make TapDance a module (#281)
* extract tapdance logic into a module

* clean out old tapdance code

* canonicalize key variable names

* split _process_tap_dance into td_pressed and td_released

* implement consistent argument order

* update documentation

* implement Module.process_key for key interception and modification

* fix tapdance realesing instead of pressing

* fix: default parameters in key handler

* cleanup holdtap

* add error handling to modules process_key

* fix: key released too late

Tapped keys didn't release on a "key released" event, but waited for a
timeout. Resulted in, for example, modifiers applying to keys after the
modifier was released.

* fix lint/formatting

* fix tap_time reference in modtap + minimal documentation

* fix lint
2022-01-18 05:21:05 +00:00
tonasz
10f8c74ad9 Allow declaring encoders without a button 2022-01-17 21:19:51 -08:00
dherrada
ef3d38f8ec Added navi10 led 2022-01-11 18:16:07 -08:00
Lee A. Butler
61de548acb improve wording on step 6 2022-01-02 07:08:22 +00:00
Lee A. Butler
2527542379 cleaner and smaller pins56.jpg 2022-01-02 07:08:22 +00:00
Lee A. Butler
14fd494cd4 clarify col_pins/row_pins example code in GettingStarted.md with image 2022-01-02 07:08:22 +00:00
iraytrace
c37170da56 Add specific example of setting row_pins/col_pins
The example code at least needs to
2022-01-02 07:08:22 +00:00
dherrada
3258e76ba4 Fixed link text 2022-01-02 07:06:28 +00:00
dherrada
7f207062e9 Added navi10 by u/emdarcher 2022-01-02 07:06:28 +00:00
xs5871
410cf7af07 fix: catch IndexError when looking up key in keymap 2021-12-12 20:53:02 -08:00
Josh Klar
8063898eb2
fix: resolve #276 (reimplement #142) by allowing custom matrix scanners 2021-12-06 12:02:35 -08:00
pcharest2000
5fcd31b97c Resolve issue 285 in parsing logic, KC.NO was being parsed has an alpha, swapped the control flow treating the special case KC.NO and KC.XXXXX before alphas and nimbers
-Fix linting error on last PR
2021-12-06 11:12:55 -08:00
xs5871
e1300ba767 fix hid report type disambiguition 2021-12-06 09:22:21 -08:00
xs5871
a8b2bf75ad fix unicode sequence 2021-12-03 15:28:15 -08:00
Josh Klar
a7a560bbca docs: README to reflect limited maintainership status 2021-12-01 23:01:54 -08:00
Robert
dc364a77fb
Added missing keys on lily58 (#274)
* Adding missing keys for the lily58

Using the Colemak layout, I added the missing keys from kmk_firmware/boards/lily58/main.py from master branch.

* Fix

Added missing last if statement.

* TellNoLies.py

Colemak_DH layout with bluetooth, no TRRS connection, keyboard setup.

* lily58_Colemak.py

Bluetooth setup with Colemak_dh layout; no rgb.

* Fix format

Fixed the (kc) error on right thumb lower layer.

* I realized that I submited the wrong main.py

I made sure that I added the correct amount of keys for the lily58 keyboard reverting back to default layout; from previous commit.
2021-12-01 17:50:18 +00:00
atsuyuki
5073a29501 Fixed wrong combination keycode conversion. 2021-12-01 09:49:23 -08:00
Christian Tu
11ff03523b fix BLE HID not working with consumer keys 2021-11-06 14:44:50 -07:00
foamyguy
f7c0bd962b fix boards link in getting started 2021-11-06 14:42:15 -07:00
Pierre Constantineau
08b41fda69 some more linter fixes - Black this time 2021-10-27 11:11:42 -07:00
Pierre Constantineau
797cdfe38a some more linter fixes 2021-10-27 11:11:42 -07:00
Pierre Constantineau
841f990481 fixed trailing spaces for linter 2021-10-27 11:11:42 -07:00
Pierre Constantineau
85fe8fef12 added offsetmx43.py in user keymaps 2021-10-27 11:11:42 -07:00
Pierre Constantineau
f9dd03f207 added gridmx47 keymap 2021-10-27 11:11:42 -07:00
Pierre Constantineau
9aa3a21900 added offsetmx43 board 2021-10-27 11:11:42 -07:00
Pierre Constantineau
899b95e586 added kb.py for gridmx47 2021-10-27 11:11:42 -07:00
Pierre Constantineau
0a81876eae added readme for gridmx47 2021-10-27 11:11:42 -07:00
Pierre Constantineau
1aa4db1dd3 fix to link in readme 2021-10-27 11:11:42 -07:00
Yoichiro Tanaka
235560bf72 Fix the issue #256 by changing the timing to set True fo the hid_pending flag. 2021-10-24 14:13:15 -07:00
Pierre Constantineau
72943a8fe1 Revert "updated readme.md and deleted pykey60"
This reverts commit 45b139a81a.
2021-10-22 14:34:24 -07:00
Pierre Constantineau
9dbecbcb86 Revert "updated readme.md and deleted pykey60"
This reverts commit ec7c04a104.
2021-10-22 14:34:24 -07:00
Pierre Constantineau
a2e26055a6 cleaned up linting error 2021-10-22 14:34:24 -07:00
Pierre Constantineau
d8445c1262 updated to fix linter 2021-10-22 14:34:24 -07:00
Pierre Constantineau
3bbadece8d minor updates/comments 2021-10-22 14:34:24 -07:00
Pierre Constantineau
27104cc28d initial batreus files 2021-10-22 14:34:24 -07:00
Pierre Constantineau
b2dae8175e updated readme.md and deleted pykey60 2021-10-22 14:34:24 -07:00
Pierre Constantineau
b3d4ffde0a updated to fix linter 2021-10-22 14:34:24 -07:00
Pierre Constantineau
2da3b1f5f4 minor updates/comments 2021-10-22 14:34:24 -07:00
Pierre Constantineau
14c1cacf02 initial batreus files 2021-10-22 14:34:24 -07:00
Pierre Constantineau
997f4651ee updated readme.md and deleted pykey60 2021-10-22 14:34:24 -07:00
Pierre Constantineau
8d01908468 updates from tindie 2021-10-22 14:34:24 -07:00
Pierre Constantineau
e92e122588 adding jpconstantineau's boards 2021-10-22 14:34:24 -07:00
Pierre Constantineau
09dd2be1bc updated layer 1 2021-10-21 17:51:30 -07:00
Pierre Constantineau
634d53b987 initial PyKey60 commit for JPConstantineau's keymap 2021-10-21 17:51:30 -07:00
Pierre Constantineau
aa95412a0e fix for linting 2021-10-21 17:49:59 -07:00
Pierre Constantineau
b4fd94e911 updated readme.md and deleted pykey60 2021-10-21 17:49:59 -07:00
Pierre Constantineau
7ce2827da7 cleaned up keymaps 2021-10-21 17:49:59 -07:00
Pierre Constantineau
0b43a3de38 updates from tindie 2021-10-21 17:49:59 -07:00
Pierre Constantineau
7427531494 adding jpconstantineau's boards 2021-10-21 17:49:59 -07:00
Pierre Constantineau
4a8b95ce93 initial VColChoc Commit 2021-10-21 17:49:59 -07:00
Althaf
6fce4c996c updates filename 2021-10-20 05:03:33 +00:00
xs5871
3e91f63c88 fix tapdance with momentary modifiers; tap-timeout per tap.
Improves handling of momentary modifiers (i.e. different actions on hold or
press/release) as tapdance targets.
tap_time is reset for each consecutive single tap, instead of being
applied to the entire tap sequence.
2021-10-19 00:16:49 -07:00
Josh Klar
5aa123b550
Merge pull request #264 from jpconstantineau/ErgoTravel
added jpconstantineau as alternate source for ErgoTravel
2021-10-19 06:26:27 +00:00
Pierre Constantineau
4165e25ff5 added jpconstantineau as alternate source for ErgoTravel 2021-10-18 22:43:38 -06:00
Josh Klar
997ddfc119
Merge pull request #258 from dgriswo/master
Add user_keymap for pyKey60
2021-10-17 21:56:53 -07:00
elric91
5f1b9d2b14 Reverted back format (bitten by auto formatting) 2021-10-17 09:12:20 -07:00
FHA
f381761507 replaced by encoder.md (merge) 2021-10-17 09:12:20 -07:00
elric91
4c73be5236 blacked atreaus/main.py for lint compliance 2021-10-17 09:12:20 -07:00
FHA
dffaec9f03 typo correction for lint check 2021-10-17 09:12:20 -07:00
FHA
6c13c97e83 update to support encoder module review 2021-10-17 09:12:20 -07:00
elric91
74186f20a1 typos 2021-10-17 09:12:20 -07:00
FHA
b2db921a5b merge new_encoder.py to encoder.py 2021-10-17 09:12:20 -07:00
elric91
ed68ddb79d Merge Encoder and NewEncoder. Enhance missteps handling 2021-10-17 09:12:20 -07:00
elric91
d9fb351448 Minor corrections to pass lint test 2021-10-17 09:12:20 -07:00
FHA
0f6e183235 new_encoder module basic documentation 2021-10-17 09:12:20 -07:00
elric91
484bcc4d22 Black formatting for lint test 2021-10-17 09:12:20 -07:00
elric91
7993a4e415 New encoder module, with button action support 2021-10-17 09:12:20 -07:00
dgriswo
2384550af4 change imports to satisfy linter 2021-10-16 19:30:43 -04:00
Leon Anavi
1222477866 docs/Getting_Started.md: Fix link to user examples
Fix the broken link to KMK user examples.

Signed-off-by: Leon Anavi <leon@anavi.org>
2021-10-16 10:34:23 -07:00
Leon Anavi
a6606c6957 docs/Getting_Started.md: Fix a typo
Fix a minor typo in the getting started page.

Signed-off-by: Leon Anavi <leon@anavi.org>
2021-10-15 23:39:27 -07:00
Daniel Griswold
dea2abb81a Add user_keymap for pyKey60 2021-10-15 22:59:33 -04:00
atsuyuki
2d3b2e95c6 Revert "Update .gitignore"
This reverts commit de4f267a33.
2021-10-14 23:02:57 -07:00
atsuyuki
5572fabf8d Update .gitignore 2021-10-14 23:02:57 -07:00
atsuyuki
6357141165 Removed spaces at end of line. 2021-10-14 23:02:57 -07:00
atsuyuki
edfd127148 Fix for pass the test.
Add newline at end of file.
2021-10-14 23:02:57 -07:00
atsuyuki
04b720da5b Removed redundant parts and also simplified everything. 2021-10-14 23:02:57 -07:00
atsuyuki
d2b34097f2 Fix keymap_jp.py to pass the test 2021-10-14 23:02:57 -07:00
atsuyuki
0bc6fe0c97 Fix keymap_jp.py to pass the test 2021-10-14 23:02:57 -07:00
atsuyuki
d114a28f9e Ported keymap_jp from QMK
Ported keymap_jp from QMK. With this, KMK will work as a JIS keyboard.
2021-10-14 23:02:57 -07:00
Josh Klar
6a38b3cb0a
Merge pull request #254 from yoichiro/lunakey-pico
Add files to support Lunakey Pico keyboard
2021-10-09 19:21:03 +00:00
Yoichiro Tanaka
e3c1c86a0b Fix the linter errors. 2021-10-05 20:16:51 +09:00
Yoichiro Tanaka
0d27901b0d Remove _______ and XXXXXXX. Instead, use KC.TRNS. 2021-10-05 19:53:49 +09:00
Josh Klar
45e4356630
Merge pull request #255 from AndersonTorres/ptbr
ptBR translations
2021-10-05 07:20:44 +00:00
AndersonTorres
3069608e56 ptBR translations: docs/ptBR/mouse_keys.md 2021-10-05 01:39:59 -03:00
AndersonTorres
48ab6767e4 ptBR translations: docs/ptBR/adns9800.md 2021-10-05 01:39:39 -03:00
AndersonTorres
fb34038911 ptBR translations: hardware/README-ptBR.md 2021-10-05 01:39:05 -03:00
Yoichiro Tanaka
dac457d94c Add files to support Lunakey Pico. 2021-10-05 11:30:03 +09:00
Josh Klar
fc69245c57
Merge pull request #248 from honboubao/fix-no_release
Fix Key no_release argument
2021-10-04 19:57:06 +00:00
Christian Tu
7586df8de9 fix Key no_release argument 2021-10-01 15:13:45 +02:00
Josh Klar
b8fd60e866
Merge pull request #249 from atsuyuki/master
Fix LT() doesn't work
2021-09-27 05:13:58 +00:00
atsuyuki
8167e0bc72 Fix LT() doesn't work
Fixed a problem where layer switching was not working in LT().
2021-09-27 13:47:07 +09:00
Josh Klar
e5d7333e2e
Merge pull request #238 from kbjunky/master
added ADNS9800 and mouse keys/mouse buttons/mouse wheel support
2021-09-25 22:21:16 +00:00
Josh Klar
0a2f62a90b
Merge pull request #247 from xs5871/fix-tapdance
fix tapdancing
2021-09-25 22:14:48 +00:00
Josh Klar
8650a6ea7c
Merge pull request #246 from honboubao/hold-tap
Improve hold tap (MT, LT, TT) behaviour
2021-09-25 22:13:23 +00:00
Christian Tu
199ec1d914 fix last merge 2021-09-25 11:20:45 +02:00
Christian Tu
abaafbd8c5 Merge remote-tracking branch 'upstream/master' into hold-tap 2021-09-25 11:13:41 +02:00
Christian Tu
99577357f6 move HoldTap to its own file 2021-09-25 11:07:33 +02:00
Christian Tu
209acc94b2 TT toggles layer state on key hold 2021-09-25 10:54:45 +02:00
Christian Tu
4e938ef6b6 use const values instead of magic strings 2021-09-25 10:48:43 +02:00
xs5871
8a15378733
fix tapdancing 2021-09-24 13:33:03 +00:00
kbjunky
1a5e7fa54b adns9800_firmware.py removed
Cleaned up firmware file
Additional info in docs about missing firmware file and how to proceed without it.
2021-09-21 15:09:56 +08:00
Josh Klar
9c46eaeb9c
Merge pull request #240 from honboubao/ble-name
add ble_name option to KMKKeyboard.go method
2021-09-20 23:31:11 +00:00
Josh Klar
7b1d3f17c4
Merge pull request #242 from honboubao/key-memory
reduce Key objects memory footprint
2021-09-20 23:29:38 +00:00
Josh Klar
8199854b5e
Merge pull request #232 from KMKfw/topic-supervisor-ticks
Convert to supervisor ticks
2021-09-20 23:28:12 +00:00
Josh Klar
3bc038d0d8
Merge pull request #243 from honboubao/release-previously-pressed-key
always release the same key as was pressed
2021-09-20 23:25:54 +00:00
Christian Tu
0a61cbd4af change ModTap to allow for activating mod on hold, rolling key presses and fix stuck mod 2021-09-19 16:21:42 +02:00
Christian Tu
5cd34bcfea _on_matrix_changed to set key state variable 2021-09-19 04:24:37 +02:00
Kyle Brown
a894d8d140 fix sleep 2021-09-17 10:55:29 -07:00
Christian Tu
113e8eb867 fix doc typos and switched description for keycodes NUBS and NUHS 2021-09-17 08:54:22 -07:00
Kyle Brown
0e528435a3 resolved issues 2021-09-17 08:40:20 -07:00
Christian Tu
f36a18513b remember pressed keys and release the same keys when the physical switch is opened, even if the layer has changed between key down and key up and a different key is now active for that matrix position 2021-09-17 16:16:59 +02:00
Christian Tu
3ad2a00dc9 initialize event handler lists in Key objects only when needed to reduce memory footprint 2021-09-17 16:14:51 +02:00
Christian Tu
3c9c527a96 add ble_name option to KMKKeyboard.go method 2021-09-17 16:14:11 +02:00
kbjunky
731f1b1030 Moved firmware to an external file 2021-09-17 15:31:40 +08:00
Josh Klar
27cf8e7d4d
Merge pull request #239 from athul/master
chore: Minor Fixes to Encoder Docs
2021-09-16 20:18:27 +00:00
kbjunky
1ba8ea3728 Fixed formatting, unused import 2021-09-16 19:54:37 +08:00
Athul Cyriac Ajay
e821acfca1
chore: Minor Fixes to Encoder Docs
- Updated code to add an import and close a list element
- Add Link to Keyboard main.py
- Minor Additions to Docs and Typo fixes
2021-09-16 17:18:31 +05:30
kbjunky
3d6e4fde41 added ADNS9800 and mouse keys/mouse buttons/mouse wheel support
ADNS9800 - module for interfacing with ADNS9800 optical sensor
mouse_keys - module for using mouse buttons, mouse wheel as well as moving mouse cursor with keyboard keys
2021-09-15 20:14:12 +08:00
Kyle Brown
584eee64c6 Convert to supervisor ticks 2021-09-14 07:56:38 -07:00
Josh Klar
ea9625106c chore: remove long-broken and unused-ish Deploy stage from CI 2021-09-13 21:37:37 -07:00
Josh Klar
b287b2112c
Merge pull request #234 from Gigahawk/clearer_diode_orientations
Add QMK equivalent attributes of DiodeOrientation
2021-09-14 03:47:30 +00:00
Jasper Chan
7601a6f21f Add QMK equivalent attributes of DiodeOrientation 2021-09-13 20:34:49 -07:00
Josh Klar
d3b315d059
Merge pull request #233 from Gigahawk/fix_send_string
Fix send_string (#206)
2021-09-14 03:09:47 +00:00
Jasper Chan
88e3fe45d4 Fix send_string (#206) 2021-09-13 19:54:08 -07:00
Josh Klar
09e26ae3a3
Merge pull request #231 from KMKfw/topic-fix-slash
add / to key names
2021-09-13 19:59:09 +00:00
Kyle Brown
e77a0af23c add / to key names 2021-09-12 11:16:53 -07:00
AndersonTorres
02a9a088a0 Small fixups 2021-08-30 11:16:55 -07:00
AndersonTorres
aa55153a8e ptBR translations: docs/ptBR/power.md 2021-08-30 11:16:55 -07:00
AndersonTorres
7991dc4609 ptBR translations: docs/ptBR/media_keys.md 2021-08-30 11:16:55 -07:00
AndersonTorres
dbe6e105e2 ptBR translations: docs/ptBR/led.md 2021-08-30 11:16:55 -07:00
AndersonTorres
c9184477fb ptBR translations: docs/ptBR/ble_hid.md 2021-08-30 11:16:55 -07:00
AndersonTorres
25015e54ca ptBR translations: docs/ptBR/flashing.md 2021-08-30 11:16:55 -07:00
AndersonTorres
8ee368cfe4 ptBR translations: docs/ptBR/international.md 2021-08-30 11:16:55 -07:00
AndersonTorres
2e75a89581 ptBR translations: docs/ptBR/modtap.md 2021-08-30 11:16:55 -07:00
AndersonTorres
137df5a46c ptBR translations: docs/ptBR/encoder.md 2021-08-30 11:16:55 -07:00
AndersonTorres
9a2918d85c ptBR translations: docs/ptBR/split_keyboards.md 2021-08-30 11:16:55 -07:00
AndersonTorres
bd31af0e14 ptBR translations: docs/ptBR/layers.md 2021-08-30 11:16:55 -07:00
AndersonTorres
c62b2e94f7 ptBR translations: docs/ptBR/tapdance.md 2021-08-30 11:16:55 -07:00
AndersonTorres
c023f368ba ptBR translations: docs/ptBR/sequences.md 2021-08-30 11:16:55 -07:00
AndersonTorres
8d16cac06d ptBR translations: docs/ptBR/config_and_keymap.md 2021-08-30 11:16:55 -07:00
AndersonTorres
b11fce321f ptBR translations: docs/ptBR/keys.md 2021-08-30 11:16:55 -07:00
AndersonTorres
d21aa772a7 ptBR translations: docs/ptBR/rgb.md 2021-08-30 11:16:55 -07:00
AndersonTorres
9ad8233104 ptBR translations: docs/ptBR/modules.md 2021-08-30 11:16:55 -07:00
AndersonTorres
2b59ed7aec ptBR translations: docs/ptBR/handwiring.md 2021-08-30 11:16:55 -07:00
AndersonTorres
2c6ec8c5da ptBR translations: docs/ptBR/extensions.md 2021-08-30 11:16:55 -07:00
AndersonTorres
ceb9f69a38 ptBR translations: docs/ptBR/porting_to_kmk.md 2021-08-30 11:16:55 -07:00
AndersonTorres
46206dabbf ptBR translations: docs/ptBR/keycodes.md 2021-08-30 11:16:55 -07:00
AndersonTorres
73b8542665 ptBR translations: docs/ptBR/debugging.md 2021-08-30 11:16:55 -07:00
AndersonTorres
fd097c3924 ptBR translations: docs/ptBR/support.md 2021-08-30 11:16:55 -07:00
Athul Cyriac Ajay
586d1deb4e chore: Fix URL and added a space for cleaner look 2021-08-23 23:06:04 -07:00
AndersonTorres
796b7733f5 ptBR translation: docs/ptBR/kmkpython_vs_circuitpython.md 2021-08-19 15:44:53 -07:00
AndersonTorres
9eb86d2069 ptBR translation: docs/ptBR/Officially_Supported_Microcontrollers.md 2021-08-19 15:44:53 -07:00
AndersonTorres
a08ed5dc25 ptBR translation: docs/ptBR/Getting_Started.md 2021-08-19 15:44:53 -07:00
Josh Klar
7e477e1aa8
Merge pull request #225 from KMKfw/badges
Added badges
2021-08-16 05:48:22 +00:00
Kyle Brown
3be9f9b9ad Formatting 2021-08-13 19:48:38 -07:00
Kyle Brown
e0786e6118 Added badges 2021-08-13 18:11:51 -07:00
razel
9340579031 Translated Getting_Started.md to Japanese. 2021-08-13 07:15:48 -07:00
FHA
d43c712301 Requested updates before push into main
1. Space before "If you're wondering"
2. Replaced "with certain boards ... pico" by "with most boards"
2021-07-29 11:53:38 -07:00
FHA
c75b52f94b Update keycodes.md
Precision on KC.APPLICATION position on the keyboard
2021-07-29 11:53:38 -07:00
FHA
3525a5f1a5 Update keycodes.md
typo  : interNATIOnal
2021-07-29 11:53:38 -07:00
FHA
10a1447adc Update keycodes.md
Added international (ISO) keys as defined in the code
2021-07-29 11:53:38 -07:00
FHA
24a4a4da11 Proofread & typos 2021-07-29 11:53:38 -07:00
FHA
9aaebbcf54 typos 2021-07-29 11:53:38 -07:00
FHA
081590f85d Update Getting_Started.md
Added direct references to various existing doc pages
2021-07-29 11:53:38 -07:00
FHA
2db4682264 Update Getting_Started.md
Name of the main file updated (code.py or main.py)
2021-07-29 11:53:38 -07:00
FHA
f256c49727 Rename kmk_vs_circuitpython.md to kmkpython_vs_circuitpython.md 2021-07-29 11:53:38 -07:00
FHA
0247de4988 Update Getting_Started.md 2021-07-29 11:53:38 -07:00
FHA
4139c97b22 clarify the diff between KMK and KMKPython 2021-07-29 11:53:38 -07:00
FHA
917afe5f57 Create kmk_vs_circuitpython.md
Move KMK vs CircuitPython from main guide to dedicated page
2021-07-29 11:53:38 -07:00
FHA
9e731bce1e Update Getting_Started.md
various precisions
2021-07-29 11:53:38 -07:00
FHA
3f10abc6fd Update Getting_Started.md
Review structure. Provide TLDR example as a quickstart
2021-07-29 11:53:38 -07:00
Kyle Brown
4eba21a2fd typo 2021-07-19 21:37:51 -07:00
pullenrc
15918db7ac
Encoder module! (#211)
* added atreus62 board

* Uploaded module for encoder support

* Update README.md


Co-authored-by: Ryan Pullen <rpullen@martinuav.com>
2021-07-19 08:30:28 -07:00
Josh Klar
eb5756f530
Merge pull request #214 from KMKfw/josh/topic-corne-2040-plus-plus
Fix many broken keys
2021-07-12 18:19:02 +00:00
Kyle Brown
cd3e10ba13 unbreak kdb corne 2021-07-09 11:21:00 -07:00
Josh Klar
083e4a701a fix(keys): fix shifted keys bug, make lazy key defs more readable 2021-07-09 11:21:00 -07:00
Josh Klar
ab6aa1838c chore: whatever it just took to get my PM2040 to boot 2021-07-09 11:21:00 -07:00
Kyle Brown
270be1fa28 initial support for RP2040 Pro Micro corne 2021-07-09 11:21:00 -07:00
enbyautumn
76e7ee4027 Rename Offiially_Supported_Microcontrollers.md to Officially_Supported_Microcontrollers.md 2021-07-09 09:50:41 -07:00
Kyle Brown
7310bdd780
add shorthand for KC_NO 2021-07-07 12:53:17 -07:00
Kyle Brown
a77fee7f04
Add shifted keynames to register unshifted versions 2021-07-07 12:53:17 -07:00
Josh Klar
e208dd64f3
docs: update/refresh README
Resolves #212
2021-07-06 12:53:34 -07:00
Josh Klar
7a30cc8cce
Merge pull request #207 from KMKfw/topic-merge-keyboard-and-state-rebased
The Declaration of Independence (from the original, tricky implementation of KMK)
2021-06-25 11:46:45 -07:00
Kyle Brown
1a348f1539 docs and typos 2021-06-25 10:53:58 -07:00
Josh Klar
f79e508566
fix(lint): lint all the things; be more flexible in boards dir 2021-06-20 13:59:59 -07:00
Josh Klar
7400f43cf8
chore: track klardotsh iris nn keymap 2021-06-20 13:55:18 -07:00
Josh Klar
ece6441230
fix(layouts): re-enable thumb cluster on nicenano->iris_r2 2021-06-20 13:55:18 -07:00
Josh Klar
eb41d704b0
fix(split): do not attempt to send HID from slave sides of split boards, resolves infinite hang after single UART send 2021-06-20 13:55:18 -07:00
Josh Klar
aeee945728
fix(keys): force gc collection in keys setup to reduce memory fragmentation, probably at cost of performance 2021-06-20 13:55:18 -07:00
Josh Klar
6f8eb425b1
fix: allow userspace setting of Split.debug_enabled 2021-06-20 13:55:18 -07:00
Gigahawk
6d5b99d78d
Dynamically create core key definitions as required (#200)
* Dynamically allocate keys as required

* Restore comments

* Run linter

* Move key definitions into a dict

* Revert "Move key definitions into a dict"

This reverts commit 49ac7c2e40.
2021-06-20 13:55:18 -07:00
Josh Klar
66788c29ca
fix(split): now able to send a single keydown, but nothing else, from secondary parts of split boards 2021-06-20 13:55:18 -07:00
Kyle Brown
33408dc228
Lily58 works. Wired splits still don't 2021-06-20 13:55:18 -07:00
Kyle Brown
581d8e269b
update kmkpython and hack fix bug 2021-06-20 13:55:18 -07:00
Josh Klar
9b5e35a5a8
feat(kmkpy): make dist -> uf2 files for each supported NRF board, with KMK bundled 2021-06-20 13:55:18 -07:00
Josh Klar
ee7094e799
fix(irisr2): get out of SOFT_SERIAL_PIN's way 2021-06-20 13:55:18 -07:00
Kyle Brown
e72d2b8c34
feat(extensions): most of the extensions implementation, by kdb424 2021-06-20 13:55:16 -07:00
Josh Klar
9821f7bcc3
Initial attempt to merge internal_state with kmk_keyboard. Seems to work on Plank so far 2021-06-20 13:53:39 -07:00
Josh Klar
ea327f8f76
Merge pull request #208 from KMKfw/josh/fix-the-damn-ci
The CI Error Rate Is Too Damn High (and this meme is ancient)
2021-06-20 13:50:36 -07:00
Josh Klar
54f4644b5c
fix(lint): fix all outstanding linter errors 2021-06-20 13:14:53 -07:00
Josh Klar
3797797b43
fix(ci): bump flake8 to get fix for PyCQA/pyflakes#367; per-file-ignore ext is now redundant; linter back online in CI 2021-06-20 13:14:41 -07:00
Josh Klar
6bfd5682f9
Merge pull request #199 from DonutCables/donutdev
Update docs/rgb.md for config clarity
2021-05-16 14:54:24 -07:00
DonutCables
f1bce8fdbd Update docs/rgb.md for config clarity 2021-05-16 00:49:24 -04:00
Josh Klar
01daa7a07e
fix: resolve #197, remove broken Matrix links and instead duplicate README blurb 2021-05-02 20:17:03 -07:00
Josh Klar
bf551a6de0
Merge pull request #195 from KMKfw/dependabot/pip/pygments-2.7.4
Bump pygments from 2.4.2 to 2.7.4
2021-03-29 12:26:52 -07:00
dependabot[bot]
2d74fe7cb3
Bump pygments from 2.4.2 to 2.7.4
Bumps [pygments](https://github.com/pygments/pygments) from 2.4.2 to 2.7.4.
- [Release notes](https://github.com/pygments/pygments/releases)
- [Changelog](https://github.com/pygments/pygments/blob/master/CHANGES)
- [Commits](https://github.com/pygments/pygments/compare/2.4.2...2.7.4)

Signed-off-by: dependabot[bot] <support@github.com>
2021-03-29 18:16:04 +00:00
Josh Klar
b8cb4bda98
Merge pull request #183 from dzervas/fix_deploy_action
Fix deploy action
2020-11-10 22:55:52 -08:00
Dimitris Zervas
8bb7c1f555
Remove s3cfg and use secrets as env vars 2020-10-17 00:29:10 +03:00
Dimitris Zervas
4afac426f0
Add the s3cfg secret 2020-10-17 00:05:28 +03:00
Dimitris Zervas
4c06d8b626
Invalid syntax in deploy.yml 2020-10-16 23:56:04 +03:00
Kyle Brown
015e0cdfd7 linter fix 2020-10-15 15:42:12 -07:00
Josh Klar
1b730cacf3
Merge pull request #180 from KMKfw/topic-rgb-animation
update RGB for more modern cpy versions
2020-10-14 22:07:30 -07:00
Josh Klar
dc598ad439
Merge pull request #167 from dzervas/ble_multimple_conns
BLE Multiple Connections
2020-10-14 22:04:29 -07:00
Josh Klar
ec16270006
Merge pull request #181 from KMKfw/josh/fix-everyones-linting
fix: everyone's linting; loosen one linter rule on user keymaps
2020-10-14 21:59:32 -07:00
Josh Klar
1016dc552c
fix: everyone's linting; loosen one linter rule on user keymaps 2020-10-14 21:54:18 -07:00
Josh Klar
5f4785f0ad
Merge pull request #164 from dzervas/master
Move CI to Github Actions
2020-10-14 21:17:21 -07:00
Kyle Brown
6ed5d04af5 Corrected a replace issue in the docs 2020-10-13 11:07:08 -07:00
Kyle Brown
80d95816e4 Switch to initiator/target 2020-10-13 11:07:08 -07:00
Kyle Brown
1a4e81a2e5 Remove GC. Not needed on newer Cpy versions 2020-10-13 10:58:18 -07:00
Kyle Brown
6e10babfbe update RGB for more modern cpy versions 2020-10-09 22:43:37 -07:00
Kyle Brown
026308bbeb layout change 2020-10-09 22:17:20 -07:00
Kyle Brown
945fcca7b0 kdb424 corne keymap added 2020-10-01 13:29:34 -07:00
Dimitris Zervas
f3067099b2
Update the docs for the new connection selection keys 2020-10-01 23:02:05 +03:00
Dimitris Zervas
a6d36d57a7
Add multimple connection support 2020-10-01 23:02:05 +03:00
Dimitris Zervas
7bd2bdb35f
Fix lab68 keymap 2020-10-01 23:02:05 +03:00
Dimitris Zervas
69f7c3c8c2
Remove some code from BLE 2020-10-01 23:02:05 +03:00
Dimitris Zervas
7f1514e8de
Remove .circleci 2020-10-01 23:01:08 +03:00
Dimitris Zervas
173ae842ca
Create deploy.yml 2020-10-01 23:01:08 +03:00
Dimitris Zervas
c4d057685b
Create test.yml 2020-10-01 23:01:08 +03:00
Kyle Brown
29373e9a37 delay imports 2020-10-01 12:53:05 -07:00
Kyle Brown
e225d8b1d6 Allows continuation of firmware if bluetooth can't be imported 2020-10-01 12:53:05 -07:00
Kyle Brown
fba97fc364 UART does in fact work 2020-10-01 12:41:18 -07:00
Kyle Brown
73b7464ec1 initial corne support on the nicenano 2020-10-01 12:41:18 -07:00
Kyle Brown
b65a94972c layout update 2020-09-30 12:31:26 -07:00
Dimitris Zervas
d79a2c943c Update the docs for the new clear bond key 2020-09-29 19:35:49 -07:00
Dimitris Zervas
2cf64d8ce7 [ble] Add support to clear all current bondings 2020-09-29 19:35:49 -07:00
Dimitris Zervas
e5700eeb5f [ble] Add support to change ble name from KMKKeyboard.go 2020-09-29 09:35:00 -07:00
Kyle Brown
18eeb4eadc remove prints 2020-09-13 18:44:18 -07:00
Kyle Brown
6844654d39 Clearly a copy paste error 2020-09-13 18:44:18 -07:00
Dimitris Zervas
4d46653526 Fix formatting and make lab68 bluetooth 2020-09-13 18:20:58 -07:00
Dimitris Zervas
b082f26d9e Fix typos in lab68 and add compatibility for MCP to matrix 2020-09-13 18:20:58 -07:00
Dimitris Zervas
ac9f4927c9 Add lab68 keymap 2020-09-13 18:20:58 -07:00
Josh Klar
81c6b0ca5d
Merge pull request #159 from KMKfw/rgb-small-cleanup
small docs add for rgb
2020-07-13 15:04:28 -07:00
Kyle Brown
d47665df50 small docs add for rgb 2020-07-12 19:07:17 -07:00
Josh Klar
ee83a32e87
Merge pull request #154 from ekx/topic-ble
Basic BLE functionality
2020-07-07 20:40:22 -07:00
Josh Klar
5096bb7e30
chore: formatting 2020-07-07 20:35:11 -07:00
Benjamin Dengler
2197dab6fa
Moved BLE functionality to its own module 2020-07-07 20:35:11 -07:00
Benjamin Dengler
1bd84e49aa
Added basic BLE implementation using Adafruit libs 2020-07-07 20:35:11 -07:00
Josh Klar
9fc4159c9a
Merge pull request #155 from KMKfw/topic-layout-update
layout update
2020-07-07 20:00:32 -07:00
Kyle Brown
2244c95db6 layout update 2020-06-30 15:04:33 -07:00
Josh Klar
b1c180ce78
docs: KMK Matrix moved to klar.sh homeserver 2020-03-29 21:48:23 -07:00
Josh Klar
afd924c8c4
Merge pull request #153 from KMKfw/topic-layout-change
layout changes
2020-02-10 13:07:15 -08:00
Kyle Brown
7c81e01505 layout changes 2020-01-11 14:20:29 -08:00
Josh Klar
bec742bbf5
Merge pull request #147 from KMKfw/klardotsh-patch-1
Goodbye, CLA!
2019-10-13 21:12:39 -07:00
Josh Klar
5ef37864de
Goodbye, CLA!
It's not particularly useful - we haven't run into any weirdness around contributions and it's a hurdle to contributing that shouldn't need to be there.
2019-10-08 11:14:03 -07:00
Josh Klar
80004bb65f
Merge pull request #142 from elvis-epx/altmatrix
Apply matrix_scanner attribute instead of fixed class
2019-08-20 15:50:09 -07:00
Elvis Pfützenreuter
ed452084fe Apply matrix_scanner attribute instead of fixed class 2019-08-06 19:17:01 -03:00
Josh Klar
0ed40d3cef
Merge pull request #140 from KMKfw/topic-keys19-round2
cKeys Prep: Round 2 - Cleanup SO MUCH STUFF
2019-07-26 11:25:40 -07:00
Josh Klar
666c0a4f08
Rename KeyboardConfig to KMKKeyboard - prepping for later merge with InternalState 2019-07-25 01:30:55 -07:00
Josh Klar
b03ae32e7d
straggling docs update 2019-07-25 01:20:14 -07:00
Josh Klar
5da4555669
Fix isort ordering 2019-07-25 01:06:09 -07:00
Josh Klar
6baaf5e5d4
Continue to shuffle and burn stuff
- Remove the concept of "mcus". With only one target platform
(CircuitPython), it no longer makes a bunch of sense and has been kept
around for "what if" reasons, complicating our import chains and eating
up RAM for pointless subclasses. If you're a `board`, you derive from
`KeyboardConfig`. If you're a handwire, the user will derive from
`KeyboardConfig`. The end. As part of this, `kmk.hid` was refactored
heavily to emphasize that CircuitPython is our only supported HID stack,
with stubs for future HID implementations (`USB_HID` becomes
`AbstractHID`, probably only usable for testing purposes,
`CircuitPython_USB_HID` becomes `USBHID`, and `BLEHID` is added with an
immediate `NotImplementedError` on instantiation)

- `KeyboardConfig` can now take a HID type at runtime. The NRF52840
boards will happily run in either configuration once CircuitPython
support is in place, and a completely separate `mcu` subclass for each
mode made no sense. This also potentially allows runtime *swaps* of HID
driver down the line, but no code has been added to this effect. The
default, and only functional value, for this is `HIDModes.USB`

- Most consts have been moved to more logical homes - often, the main
or, often only, component that uses them. `DiodeOrientation` moved to
`kmk.matrix`, and anything HID-related moved to `kmk.hid`
2019-07-25 00:58:23 -07:00
Josh Klar
eb566b0f71
Remove two classes that havent been used in almost a year 2019-07-25 00:35:08 -07:00
Josh Klar
8c57844a22
Remove a ton of leftover MicroPython code and abstractions, including all of kmk.pins 2019-07-25 00:32:20 -07:00
Josh Klar
86c8e006e0
Remove ancient, no-way-this-is-working-right-now test leftovers 2019-07-25 00:10:49 -07:00
Josh Klar
17ba405bcc
Don't try to lint dist/compiled files 2019-07-25 00:05:29 -07:00
Josh Klar
45cadc7e5a
CircuitPython-provided modules should be considered stdlib-equiv by isort terms. Apply this new rule. 2019-07-25 00:04:06 -07:00
Josh Klar
11a4604f88
Move our preload hacks out of keyboard_config into their own module. Isolate the ugliness 2019-07-25 00:03:35 -07:00
Josh Klar
38e8102532
Remove kmk.util by moving reboot/bootloader to their only use location 2019-07-24 23:45:50 -07:00
Josh Klar
02401e2ec0
Move kmk.util.get_wide_ordinal to kmk.handlers.sequences 2019-07-24 23:44:26 -07:00
Josh Klar
1eaf0e2c79
flatten_dict is no longer used, remove it 2019-07-24 23:43:39 -07:00
Josh Klar
ef1c69aa2c
Fix linting; move kmk.util.intify_coordinate to kmk.matrix.intify_coordinate (trying to deprecate/remove util) 2019-07-24 23:43:00 -07:00
Josh Klar
4bdf926360
boot.py is still required - ensure it ends up in our dists and is documented 2019-07-24 23:28:13 -07:00
Josh Klar
6b73a5ec56
Update keymap/keyboardconfig docs 2019-07-24 23:19:45 -07:00
Josh Klar
5a43bc291d
Merge pull request #139 from KMKfw/topic-try-black
Enforce the Black autoformatter and code style
2019-07-24 23:19:28 -07:00
Josh Klar
64267bdc5b
fix a totally unrelated bug 2019-07-24 23:15:57 -07:00
Josh Klar
aaeaa74a0c
Run black against source tree 2019-07-24 23:03:13 -07:00
Josh Klar
5c0c13e8d0
Prepare for Black autoformatting: dependencies, string staging, single-quote string override 2019-07-24 23:03:13 -07:00
Josh Klar
8100b91dbc
Merge pull request #138 from KMKfw/topic-prep-for-ckeys2019
Prep for ckeys2019: Round One
2019-07-24 21:57:32 -07:00
Josh Klar
614883ef80
More docs updates 2019-07-24 21:25:10 -07:00
Josh Klar
7197f7a3a4
fill out features list 2019-07-24 21:25:10 -07:00
Josh Klar
5771a89433
for now just always point at master 2019-07-24 21:25:10 -07:00
Josh Klar
55b07f330c
more docs, actually allow public access to release zips 2019-07-24 21:25:10 -07:00
Josh Klar
39220beddb
tag releases within the dists as well (for debugging, mostly) 2019-07-24 21:25:10 -07:00
Josh Klar
39e3a65955
Full deployment workflow: push finished assets to DigitalOcean Spaces (cdn.kmkfw.io) 2019-07-24 21:25:10 -07:00
Josh Klar
cd7d8a2e4c
Ability to build release zips in CI 2019-07-24 21:25:10 -07:00
Josh Klar
8f5511327e
Makefile can compile KMK to MPY files 2019-07-24 21:25:10 -07:00
Josh Klar
ffe3fa3c64
Get MPY cross compiler into the Docker image 2019-07-24 21:25:10 -07:00
Josh Klar
a51d11f6e6
A wild W504 linter error appeared! Fix those. 2019-07-24 21:25:10 -07:00
Josh Klar
5c8bd45615
fix dockerfile 2019-07-24 21:25:10 -07:00
Josh Klar
d0d1608350
fixup for keyboard_config 2019-07-24 21:25:10 -07:00
Josh Klar
ea62d08d2c
Let's try alpine for Circle images 2019-07-24 21:25:10 -07:00
Josh Klar
1e9625ae0e
Rename "Firmware" to "KeyboardConfig" for clarity in main.py and to illustrate separation of KeyboardConfig/InternalState 2019-07-24 21:25:10 -07:00
Josh Klar
e8c3b5ac70
The CircuitPython "MCU" (misnomer now?) is generic anyway - name it as such 2019-07-24 21:25:10 -07:00
Josh Klar
b3e9a14e71
README accuracy 2019-07-24 21:25:10 -07:00
Josh Klar
3b6286b480
We no longer support STM32 anyway, remove these leftover udev rules 2019-07-24 21:25:10 -07:00
Josh Klar
3a1ce093ee
Update local Python dev deps 2019-07-24 21:25:10 -07:00
Josh Klar
6f3273a6f8
README stub - needs finishing
refs #126
2019-07-24 21:25:10 -07:00
Kyle Brown
fc51f84045 Make this clearer 2019-07-17 22:11:31 -07:00
Kyle Brown
241cf69979 Small touch ups to correct errors, and update to modern information 2019-07-17 16:17:52 -07:00
Josh Klar
ef09454d2e chore: fix ryan board to pass linting 2019-07-17 16:05:40 -07:00
Josh Klar
d15aa65cc6 Kyle built a Gherkin handwire on Feather nrf52840! Unclean but works 2019-07-17 16:05:40 -07:00
rk463345
056efa8ca5 Added rk463345 keymap 2019-07-17 16:05:40 -07:00
Kyle Brown
004f40e7d2 Unbreak the fix 2019-07-17 16:05:40 -07:00
Kyle Brown
b6af43ef90 rgb animations perf 2019-07-17 16:05:40 -07:00
Josh Klar
c11984135a looks like this is not needed, so save some bootup time 2019-07-17 16:05:40 -07:00
Josh Klar
76087749fb Download more RAM (reword this in a rebase plz) 2019-07-17 16:05:40 -07:00
Kyle Brown
d07560513f Fixed crash on debug when no Rgb was used, and unloaded LED and RGB when not used to save ram 2019-07-17 16:05:40 -07:00
Josh Klar
d34e8ce9d2 Re-add LED support
This reverts commit 5b069a0104.
2019-07-17 16:05:40 -07:00
Josh Klar
f6a39acd26
Merge pull request #133 from KMKfw/topic-misc-perf
Slight perf improvements, heavily improved logging/debugging output
2019-07-12 17:01:26 -07:00
Josh Klar
350c2438ad
Disable GC on every cycle, too much lag 2019-07-12 16:54:38 -07:00
Josh Klar
17094a2988
Clean some code up; force GC on every cycle 2019-07-12 16:38:50 -07:00
Josh Klar
2947f81489
Remove pointless reversed_active_layers/active_layers difference 2019-07-12 15:31:27 -07:00
Josh Klar
1fe80fec92
Clean up and standardize print() debug stuff 2019-07-12 15:16:33 -07:00
Josh Klar
edcb681169
Merge pull request #132 from KMKfw/revert-115-topic-led
Revert "Monocolor LED backlight added"
2019-07-07 15:41:53 -07:00
Josh Klar
5b069a0104
Revert "Monocolor LED backlight added" 2019-07-07 15:35:15 -07:00
Josh Klar
7bff667a2b
Merge pull request #115 from KMKfw/topic-led
Monocolor LED backlight added
2019-06-26 04:07:43 -07:00
Kyle Brown
c16e2c51aa addressing PR feedback 2019-06-24 17:09:52 -07:00
Kyle Brown
5532ffdcbf Ready for merging 2019-06-21 17:28:30 -07:00
Kyle Brown
39b0b1e7f2 final commit before rebase 2019-06-21 16:51:01 -07:00
Kyle Brown
5158094549 Small changes 2019-06-21 16:49:00 -07:00
Kyle Brown
3f8c6e7648 Added support for user animations with docs 2019-06-21 16:49:00 -07:00
Kyle Brown
9d8682c866 Config changes and uses consts to save ram 2019-06-21 16:49:00 -07:00
Kyle Brown
86b8c4ffb0 New animation 2019-06-21 16:49:00 -07:00
Kyle Brown
bb198709f2 fix incorrect merge 2019-06-21 16:48:59 -07:00
Kyle Brown
fa28b3afba Luddite "fixes" for personal layout. Exposes a KMK limitation 2019-06-21 16:47:44 -07:00
Kyle Brown
efb642c374 Fix some issues if you don't define some things 2019-06-21 16:47:44 -07:00
Kyle Brown
1a06e0ed72 Renamed some things and added luddite layout for kdb424 and default 2019-06-21 16:47:44 -07:00
Kyle Brown
7ebf8d623f Fix toggle 2019-06-21 16:47:44 -07:00
Kyle Brown
ec1a62e52d Added static standby mode for performance. 2019-06-21 16:47:44 -07:00
Kyle Brown
0a06e733d2 Solved. Added uart buffer on the master to free up the uart bus buffer 2019-06-21 16:47:43 -07:00
Kyle Brown
e2413a3c25 Still dirty, but moved the problem to a better place. Still unrealistic to hit 2019-06-21 16:47:00 -07:00
Kyle Brown
a882ef2c38 Quick patch unrealistic face roll keyboard corruption 2019-06-21 16:47:00 -07:00
Kyle Brown
373ca8355e Added MANY boards to supported list, and organized supported boards 2019-06-21 16:47:00 -07:00
Kyle Brown
54d63037bf Added board definition for nyquist and add RGB and LED pins for nyquest and iris 2019-06-21 16:46:59 -07:00
Kyle Brown
f7a1d54752 Added LED support, cleaned up RGB docs 2019-06-21 16:45:04 -07:00
Kyle Brown
7ebfaa3bf7 cleaned up docs even more. I believe this fills all requirements for merge. 2019-06-21 16:44:03 -07:00
Kyle Brown
f65ea1e841 Added 2 more keys, stripped unused cruft, and added more docs. 2019-06-21 16:44:03 -07:00
Kyle Brown
5c8c2e97fd Resolved many things 2019-06-21 16:44:02 -07:00
Kyle Brown
3ae7432de0 Massive docs update 2019-06-21 16:42:53 -07:00
Kyle Brown
9fbad17ed4 code cleanup to pass lint and some for flake8 2019-06-21 16:42:12 -07:00
Kyle Brown
1751cce299 code cleanup to pass lint and some for flake8 2019-06-21 16:41:58 -07:00
Kyle Brown
ad3430eeb6 Needs docs, but code is ready for review probably 2019-06-21 16:38:41 -07:00
Kyle Brown
5334e7e0be Massive hsv math fix and configs can be passed now for most things 2019-06-21 16:38:41 -07:00
Kyle Brown
2ad1fe8a9c Massively improved, still not complete. Much easier to use now 2019-06-21 16:38:41 -07:00
Kyle Brown
31983a0873 Breathing now finally working, a key to enable it, not sane defaults, and a toggle button 2019-06-21 16:38:39 -07:00
Kyle Brown
0ba5911f8f More animations, now based on time and intervals. Massively WIP 2019-06-21 16:37:53 -07:00
Kyle Brown
7a58ac041f HSV functions added 2019-06-21 16:37:53 -07:00
Kyle Brown
4b033857b1 Initial RGB with test animation running automatically 2019-06-21 16:37:51 -07:00
Josh Klar
e332804dc9
Merge pull request #131 from elvis-epx/kcapp
Add KC_APP ("Win menu") key
2019-05-30 20:38:38 -07:00
Elvis Pfutzenreuter
dabed0061d Add KC_APP ("Win menu") key 2019-05-31 00:36:42 -03:00
Josh Klar
fa0421c5b9
Merge pull request #129 from elvis-epx/epx87
Make matrix scanner class configurable
2019-05-20 15:55:06 -07:00
Josh Klar
c3ffb7b1ac
Merge branch 'master' into epx87 2019-05-20 15:54:10 -07:00
Josh Klar
9bb82d009c
Merge pull request #128 from KMKfw/topic-flattened-matrix
Resolves #121: Use flattened keymaps, which can visually represent the logical layout, rather than the physical wiring
2019-05-20 15:53:05 -07:00
Elvis Pfützenreuter
41dc58e428 Make matrix scanner class configurable 2019-05-17 20:30:42 -03:00
Josh Klar
0b364cf7f1 Resolves #121: Use flattened keymaps, which can visually represent the logical layout, rather than the physical wiring 2019-05-12 17:47:16 -07:00
Josh Klar
d70c2ccc17
Merge pull request #127 from KMKfw/topic-cpy4-rc2-compat
Compatibility with CircuitPython 4.0.0-rc2
2019-05-12 16:08:51 -07:00
Josh Klar
7fcd36f2fb Refs #104: Keyboard can work without REPL connected on >=4.0.0-alpha3 (tested only against single-piece boards so far) 2019-05-12 14:14:59 -07:00
Josh Klar
cf5ee5d4b2 Resolves an OverflowError in matrix scans (board-breaking) 2019-05-12 13:19:44 -07:00
Josh Klar
7297bc4521 update gitignore 2019-05-12 13:19:24 -07:00
Josh Klar
85ba57f9b0
Merge pull request #120 from KMKfw/topic-backspace-delete
Adds delete/backspace key. Resolves #93
2019-05-10 13:05:12 -07:00
Josh Klar
9dce78370e
Merge branch 'master' into topic-backspace-delete 2019-05-10 13:03:52 -07:00
Josh Klar
f073b7568b
Merge pull request #125 from elvis-epx/master
Fix bug in TO layer key handling and add new API
2019-05-10 13:02:12 -07:00
Elvis Pfützenreuter
f9b56d82f7 Add cancel_timeout method
This method is useful when the keymap needs to use
state.set_timeout() and this timeout needs to be
cancellable.

Also, the set_timeout() now returns a timer handle.
2019-04-26 19:50:41 -03:00
Elvis Pfützenreuter
9c4a136989 Use return value of pre-press/pre-release callbacks
When the return value evaluates to False, the key press or key
release is ignored. This allows for implementation of elaborate
keyboard behaviors.
2019-04-26 19:50:41 -03:00
Elvis Pfützenreuter
b494857f21 Fix bug in TO layer key handling 2019-04-25 22:40:29 -03:00
Kyle Brown
0016ac8aa3
Merge branch 'master' into topic-backspace-delete 2019-03-21 17:25:16 -07:00
Kyle Brown
8bb55c84cd Literally hurting performance now. Needs removed 2019-03-21 17:24:50 -07:00
Kyle Brown
7e06b143e1
Merge branch 'master' into topic-backspace-delete 2019-03-12 00:25:05 -07:00
Kyle Brown
298f9489c2 Duh, chaining.... 2019-03-12 00:24:48 -07:00
Kyle Brown
a2cfa92f2f Missed some obvious things 2019-03-12 00:24:48 -07:00
Kyle Brown
e792524b63 Added mod tap with docs 2019-03-12 00:24:48 -07:00
Kyle Brown
fc8ddba6cb Adds delete/backspace key. Resolves #93 2019-03-09 15:12:23 -08:00
352 changed files with 24410 additions and 3382 deletions

View File

@ -1,28 +0,0 @@
version: 2
jobs:
test:
docker:
- image: 'kmkfw/base'
environment:
KMK_TEST: 1
PIPENV_VENV_IN_PROJECT: 1
steps:
- checkout
- restore_cache:
keys:
- v2-kmk-venv-{{ checksum "Pipfile.lock" }}
- run: make test
workflows:
version: 2
build-deploy:
jobs:
- test:
filters:
branches:
only: /.*/
tags:
only: /.*/

27
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@ -0,0 +1,27 @@
---
name: Bug report
about: Create a report to help us improve
title: "[BUG] Title"
labels: bug
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
* Setup and configuration of the affected parts of the firmware (avoid copy-pasting the entire configuration if possible)
* Setup and configuration of peripherals
* Input: keys pressed, ...
(Choose which are applicable.)
**Expected behavior**
A clear and concise description of what you expected to happen.
**Debug output**
If applicable, add debug output from the serial console to help explain your problem.
**Additional context**
Add any other context about the problem here.

View File

@ -0,0 +1,20 @@
---
name: Feature request
about: Suggest an idea for this project
title: "[Enhancement] Title"
labels: enhancement
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

16
.github/workflows/test.yml vendored Normal file
View File

@ -0,0 +1,16 @@
# This is a basic workflow to help you get started with Actions
name: Test
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
with:
python-version: '3.9' # Version range or exact version of a Python version to use, using SemVer's version range syntax
- run: python -m pip install --upgrade pipenv wheel
- run: make test

89
.gitignore vendored
View File

@ -1,3 +1,25 @@
# KMK Specific
.compiled/
.ampy
.submodules
.circuitpy-deps
.micropython-deps
.devdeps
.docker_base
.dist
# Personal dev scripts
.scripts
# Mountpoints
mnt/
mnt2/
# VSCode
.vscode/
# Everything below is from https://raw.githubusercontent.com/github/gitignore/main/Python.gitignore
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
@ -20,6 +42,7 @@ parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
@ -38,14 +61,17 @@ pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/
# Translations
*.mo
@ -55,6 +81,7 @@ coverage.xml
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal
# Flask stuff:
instance/
@ -67,16 +94,47 @@ instance/
docs/_build/
# PyBuilder
.pybuilder/
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
.python-version
# celery beat schedule file
# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
#Pipfile.lock
# poetry
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
# This is especially recommended for binary packages to ensure reproducibility, and is more
# commonly ignored for libraries.
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
#poetry.lock
# pdm
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
#pdm.lock
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
# in version control.
# https://pdm.fming.dev/#use-with-ide
#.pdm.toml
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
__pypackages__/
# Celery stuff
celerybeat-schedule
celerybeat.pid
# SageMath parsed files
*.sage.py
@ -102,16 +160,25 @@ venv.bak/
# mypy
.mypy_cache/
.compiled/
.dmypy.json
dmypy.json
.ampy
.submodules
.circuitpy-deps
.micropython-deps
.devdeps
.docker_base
# Pyre type checker
.pyre/
# Pycharms cruft
.idea
# pytype static type analyzer
.pytype/
# Personal dev scripts
.scripts
# Cython debug symbols
cython_debug/
# PyCharm
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
.idea/
# Mac Finder
.DS_Store

81
.s3cfg Normal file
View File

@ -0,0 +1,81 @@
[default]
access_key =
access_token =
add_encoding_exts =
add_headers =
bucket_location = US
ca_certs_file =
cache_file =
check_ssl_certificate = True
check_ssl_hostname = True
cloudfront_host = cloudfront.amazonaws.com
content_disposition =
content_type =
default_mime_type = binary/octet-stream
delay_updates = False
delete_after = False
delete_after_fetch = False
delete_removed = False
dry_run = False
enable_multipart = True
encoding = UTF-8
encrypt = False
expiry_date =
expiry_days =
expiry_prefix =
follow_symlinks = False
force = False
get_continue = False
gpg_command = /usr/bin/gpg
gpg_decrypt = %(gpg_command)s -d --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s
gpg_encrypt = %(gpg_command)s -c --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s
gpg_passphrase =
guess_mime_type = True
host_base = sfo2.digitaloceanspaces.com
host_bucket = %(bucket)s.sfo2.digitaloceanspaces.com
human_readable_sizes = False
invalidate_default_index_on_cf = False
invalidate_default_index_root_on_cf = True
invalidate_on_cf = False
kms_key =
limit = -1
limitrate = 0
list_md5 = False
log_target_prefix =
long_listing = False
max_delete = -1
mime_type =
multipart_chunk_size_mb = 15
multipart_max_chunks = 10000
preserve_attrs = True
progress_meter = True
proxy_host =
proxy_port = 0
put_continue = False
recursive = False
recv_chunk = 65536
reduced_redundancy = False
requester_pays = False
restore_days = 1
restore_priority = Standard
secret_key =
send_chunk = 65536
server_side_encryption = False
signature_v2 = False
signurl_use_https = False
simpledb_host = sdb.amazonaws.com
skip_existing = False
socket_timeout = 300
stats = False
stop_on_error = False
storage_class =
throttle_max = 100
upload_id =
urlencoding_mode = normal
use_http_expect = False
use_https = True
use_mime_magic = True
verbosity = WARNING
website_endpoint = http://%(bucket)s.s3-website-%(location)s.amazonaws.com/
website_error =
website_index = index.html

39
Dockerfile Normal file
View File

@ -0,0 +1,39 @@
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
WORKDIR /app
RUN apt-get update && apt-get install -y build-essential curl gettext git git-lfs rsync wget zip lbzip2
RUN pip install pipenv
# Pull CircuitPython-designated ARM GCC to avoid mismatches/weird
# inconsistencies with upstream
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 make -C /opt/kmkpython/mpy-cross
ENV PATH=/opt/kmkpython/mpy-cross:${PATH}
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

View File

@ -1,21 +0,0 @@
# vim: ft=dockerfile
# Not using python:3.7 here because team-gcc-arm-embedded/ppa does not support
# Ubuntu Cosmic or Debian Stretch, and Alpine, bizarrely, does not seem to
# package GCC cross compilers
FROM ubuntu:bionic
# Set up PPAs we'll need for Python and for GCC ARM
RUN apt-get update && apt-get install -y software-properties-common
RUN add-apt-repository ppa:deadsnakes/ppa
RUN add-apt-repository ppa:team-gcc-arm-embedded/ppa
# Install Python
RUN apt-get update && apt-get install -y python3.7 python3.7-dev build-essential pkg-config libffi-dev curl
RUN curl https://bootstrap.pypa.io/get-pip.py | python3.7
# Downgrade pip to work around https://github.com/pypa/pipenv/issues/2924
RUN python3.7 -m pip install pip==18.0
RUN python3.7 -m pip install pipenv==2018.7.1
# Install KMK CI and/or build-time dependencies
RUN apt-get install -y gcc-arm-embedded gettext ssh wget unzip rsync git locales libusb-dev

141
Makefile
View File

@ -1,61 +1,98 @@
.SILENT:
.PHONY: \
clean-dist \
devdeps \
dist \
dockerbase \
lint
.DEFAULT: all
DIST_DESCRIBE_CMD = git describe --always --abbrev=0 --dirty --broken
DOCKER_BASE_TAG ?= latest
DOCKER_TAG ?= latest
AMPY_PORT ?= /dev/ttyUSB0
AMPY_BAUD ?= 115200
AMPY_DELAY ?= 1.5
ARDUINO ?= /usr/share/arduino
PIPENV ?= $(shell which pipenv)
PIPENV ?= $(shell which pipenv 2>/dev/null)
all: copy-kmk copy-bootpy copy-keymap
MPY_CROSS ?= $(shell which mpy-cross 2>/dev/null)
MPY_FLAGS ?= '-O2'
MPY_SOURCES ?= 'kmk/'
MPY_TARGET_DIR ?= .compiled
PY_KMK_TREE = $(shell find $(MPY_SOURCES) -name "*.py")
DIST_DESCRIBE = $(shell $(DIST_DESCRIBE_CMD))
.docker_base: Dockerfile_base
@echo "===> Building Docker base image kmkfw/base:${DOCKER_BASE_TAG}"
@docker build -f Dockerfile_base -t kmkfw/base:${DOCKER_BASE_TAG} .
@touch .docker_base
TIMESTAMP := $(shell date +%s)
docker-base: .docker_base
all: copy-kmk copy-bootpy copy-keymap copy-board
docker-base-deploy: docker-base
@echo "===> Pushing Docker base image kmkfw/base:${DOCKER_BASE_TAG} to Docker Hub"
@docker push kmkfw/base:${DOCKER_BASE_TAG}
.PHONY: compile compile-check
compile: compile-check
ifeq ($(MPY_CROSS),)
compile-check:
@echo "===> Could not find mpy-cross in PATH, exiting"
@false
else
compile-check: $(PY_KMK_TREE:%.py=$(MPY_TARGET_DIR)/%.mpy)
@echo "===> Compiling all py files to mpy with flags $(MPY_FLAGS)"
$(MPY_TARGET_DIR)/%.mpy: %.py
@mkdir -p $(dir $@)
@$(MPY_CROSS) $(MPY_FLAGS) $? -o $@
endif
.devdeps: Pipfile.lock
@echo "===> Installing dependencies with pipenv"
@$(PIPENV) install --dev --ignore-pipfile
@$(PIPENV) sync --dev
@touch .devdeps
devdeps: .devdeps
dist: clean-dist dockerbase
@mkdir -p .dist
@docker run --rm -it -v $$(pwd)/.dist:/dist kmkpy:$(TIMESTAMP)
dockerbase:
docker build . \
-t kmkpy:$(TIMESTAMP) \
--build-arg KMKPY_URL=$$(cut -f1 < kmkpython_ref.tsv) \
--build-arg KMKPY_REF=$$(cut -f2 < kmkpython_ref.tsv)
lint: devdeps
@$(PIPENV) run flake8
fix-formatting: devdeps
@$(PIPENV) run black .
fix-isort: devdeps
@find kmk/ tests/ user_keymaps/ -name "*.py" | xargs $(PIPENV) run isort
@find boards/ kmk/ tests/ user_keymaps/ -name "*.py" | xargs $(PIPENV) run isort
clean: clean-build-log
clean: clean-dist
@echo "===> Cleaning build artifacts"
@rm -rf .devdeps build
@rm -rf .devdeps build dist $(MPY_TARGET_DIR)
clean-build-log:
@echo "===> Clearing previous .build.log"
@rm -rf .build.log
clean-dist:
@echo "===> Cleaning KMKPython dists"
@rm -rf .dist
# This is mostly a leftover from the days we vendored stuff from
# micropython-lib via submodules. Leaving this here mostly in case someone goes
# exploring through the history of KMK's repo and manages to screw up their
# repo state (those were glitchy times...)
powerwash: clean
@echo "===> Removing vendor/ to force a re-pull"
@rm -rf vendor
@echo "===> Removing pipenv-managed virtual environment"
@$(PIPENV) --rm || true
test: lint
test: lint unit-tests
.PHONY: unit-tests
unit-tests: devdeps
@$(PIPENV) run python3 -m unittest $(TESTS)
reset-bootloader:
@echo "===> Rebooting your board to bootloader (safe to ignore file not found errors)"
@ -65,44 +102,44 @@ reset-board:
@echo "===> Rebooting your board (safe to ignore file not found errors)"
@-timeout -k 5s 10s $(PIPENV) run ampy -p /dev/ttyACM0 -d ${AMPY_DELAY} -b ${AMPY_BAUD} run util/reset.py
ifdef MOUNTPOINT
$(MOUNTPOINT)/kmk/.copied: $(shell find kmk/ -name "*.py" | xargs -0)
@echo "===> Copying KMK source folder"
@rsync -rh kmk $(MOUNTPOINT)/
@touch $(MOUNTPOINT)/kmk/.copied
@sync
copy-kmk: $(MOUNTPOINT)/kmk/.copied
else
copy-kmk:
echo "**** MOUNTPOINT must be defined (wherever your CIRCUITPY drive is mounted) ****" && exit 1
endif
ifdef MOUNTPOINT
$(MOUNTPOINT)/kmk/boot.py: boot.py
@echo "===> Copying required boot.py"
@rsync -rh boot.py $(MOUNTPOINT)/
ifdef BOARD
copy-board:
@echo "===> Copying your board from $(BOARD) to $(MOUNTPOINT)"
@rsync -rhu $(BOARD)/*.py $(MOUNTPOINT)/
@sync
else # BOARD
copy-board:
@echo "**** Missing BOARD argument ****" && exit 1
endif # BOARD
copy-bootpy: $(MOUNTPOINT)/kmk/boot.py
else
copy-bootpy:
echo "**** MOUNTPOINT must be defined (wherever your CIRCUITPY drive is mounted) ****" && exit 1
endif
ifdef MOUNTPOINT
ifndef USER_KEYMAP
$(MOUNTPOINT)/main.py:
@echo "**** USER_KEYMAP must be defined (ex. USER_KEYMAP=user_keymaps/noop.py) ****" && exit 1
else
$(MOUNTPOINT)/main.py: $(USER_KEYMAP)
@echo "===> Copying your keymap to main.py"
@rsync -rh $(USER_KEYMAP) $@
@echo "===> Copying required boot.py"
@rsync -rhu boot.py $(MOUNTPOINT)/boot.py
@sync
copy-compiled:
@echo "===> Copying compiled KMK folder"
@rsync -rhu $(MPY_TARGET_DIR)/* $(MOUNTPOINT)/
@sync
ifdef USER_KEYMAP
copy-keymap:
@echo "===> Copying your keymap to main.py"
@rsync -rhu $(USER_KEYMAP) $(MOUNTPOINT)/main.py
@sync
else # USER_KEYMAP
copy-keymap:
@echo "**** Missing USER_KEYMAP argument ****" && exit 1
endif # USER_KEYMAP
copy-keymap: $(MOUNTPOINT)/main.py
else
copy-keymap:
echo "**** MOUNTPOINT must be defined (wherever your CIRCUITPY drive is mounted) ****" && exit 1
endif # MOUNTPOINT
copy-kmk:
@echo "===> Copying KMK source folder"
@rsync -rhu kmk $(MOUNTPOINT)/
@sync
else # MOUNTPOINT
copy-board copy-bootpy copy-compiled copy-keymap copy-kmk:
@echo "**** MOUNTPOINT must be defined (wherever your CIRCUITPY drive is mounted) ****" && exit 1
endif # ifndef MOUNTPOINT

22
Pipfile
View File

@ -4,19 +4,19 @@ verify_ssl = true
name = "pypi"
[packages]
pydux = "*"
[dev-packages]
adafruit-ampy = "*"
"flake8" = "*"
"flake8-comprehensions" = "*"
ipython = "*"
ipdb = "*"
"flake8" = ">=3.9.0"
"flake8-commas" = "*"
isort = "*"
"flake8-comprehensions" = "*"
"flake8-isort" = "*"
"python-magic" = "*"
adafruit-ampy = "*"
ipdb = "*"
ipython = "*"
isort = "*"
neovim = "*"
"flake8-per-file-ignores" = "*"
[requires]
python_version = "3.7"
s3cmd = "*"
black = "==22.3.0"
flake8-quotes = "*"
flake8-black = "*"

590
Pipfile.lock generated
View File

@ -1,12 +1,10 @@
{
"_meta": {
"hash": {
"sha256": "96625b372d35c7f5ed0fd3289ba61afd0bcc034ddad31feb958a107e2751fb0a"
"sha256": "8c1b0ad909dc0ac0fc8013756ca7db8b5420f51c25cc1c2d1612f62fe5e19843"
},
"pipfile-spec": 6,
"requires": {
"python_version": "3.7"
},
"requires": {},
"sources": [
{
"name": "pypi",
@ -15,300 +13,482 @@
}
]
},
"default": {
"pydux": {
"hashes": [
"sha256:5cb9217be9d8c7ff79b028f6f02597bbb055b107ce8eecbe5f631f3fc76d793f",
"sha256:bed123b5255d566f792b9ceebad87e3f9c1d2d85abed4b9a9475ffc831035879"
],
"index": "pypi",
"version": "==0.2.2"
}
},
"default": {},
"develop": {
"adafruit-ampy": {
"hashes": [
"sha256:1055827874010f48c7dbd3cde4b1d7c6f6732661fad193b188a398e88961fc62"
"sha256:4a74812226e53c17d01eb828633424bc4f4fe76b9499a7b35eba6fc2532635b7",
"sha256:f4cba36f564096f2aafd173f7fbabb845365cc3bb3f41c37541edf98b58d3976"
],
"index": "pypi",
"version": "==1.0.5"
"version": "==1.1.0"
},
"asttokens": {
"hashes": [
"sha256:4622110b2a6f30b77e1473affaa97e711bc2f07d3f10848420ff1898edbe94f3",
"sha256:6b0ac9e93fb0335014d382b8fa9b3afa7df546984258005da0b9e7095b3deb1c"
],
"version": "==2.2.1"
},
"backcall": {
"hashes": [
"sha256:38ecd85be2c1e78f77fd91700c76e14667dc21e2713b63876c0eb901196e01e4",
"sha256:bbbf4b1e5cd2bdb08f915895b51081c041bac22394fdfcfdfbe9f14b77c08bf2"
],
"version": "==0.1.0"
},
"click": {
"hashes": [
"sha256:29f99fc6125fbc931b758dc053b3114e55c77a6e4c6c3a2674a2dc986016381d",
"sha256:f15516df478d5a56180fbf80e68f206010e6d160fc39fa508b65e035fd75130b"
],
"version": "==6.7"
},
"decorator": {
"hashes": [
"sha256:2c51dff8ef3c447388fe5e4453d24a2bf128d3a4c32af3fabef1f01c6851ab82",
"sha256:c39efa13fbdeb4506c476c9b3babf6a718da943dab7811c206005a4a956c080c"
],
"version": "==4.3.0"
},
"flake8": {
"hashes": [
"sha256:7253265f7abd8b313e3892944044a365e3f4ac3fcdcfb4298f55ee9ddf188ba0",
"sha256:c7841163e2b576d435799169b78703ad6ac1bbb0f199994fc05f700b2a90ea37"
],
"index": "pypi",
"version": "==3.5.0"
},
"flake8-commas": {
"hashes": [
"sha256:d3005899466f51380387df7151fb59afec666a0f4f4a2c6a8995b975de0f44b7",
"sha256:ee2141a3495ef9789a3894ed8802d03eff1eaaf98ce6d8653a7c573ef101935e"
],
"index": "pypi",
"version": "==2.0.0"
},
"flake8-comprehensions": {
"hashes": [
"sha256:b83891fec0e680b07aa1fd92e53eb6993be29a0f3673a09badbe8da307c445e0",
"sha256:e4ccf1627f75f192eb7fde640f5edb81c98d04b1390df9d4145ffd7710bb1ef2"
],
"index": "pypi",
"version": "==1.4.1"
},
"flake8-isort": {
"hashes": [
"sha256:298d7904ac3a46274edf4ce66fd7e272c2a60c34c3cc999dea000608d64e5e6e",
"sha256:5992850626ce96547b1f1c7e8a7f0ef49ab2be44eca2177934566437b636fa3c"
],
"index": "pypi",
"version": "==2.5"
},
"flake8-per-file-ignores": {
"hashes": [
"sha256:3c4b1d770fa509aaad997ca147bd3533b730c3f6c48290b69a4265072c465522",
"sha256:4ee4f24cbea5e18e1fefdfccb043e819caf483d16d08e39cb6df5d18b0407275"
],
"index": "pypi",
"version": "==0.6"
},
"greenlet": {
"hashes": [
"sha256:000546ad01e6389e98626c1367be58efa613fa82a1be98b0c6fc24b563acc6d0",
"sha256:0d48200bc50cbf498716712129eef819b1729339e34c3ae71656964dac907c28",
"sha256:23d12eacffa9d0f290c0fe0c4e81ba6d5f3a5b7ac3c30a5eaf0126bf4deda5c8",
"sha256:37c9ba82bd82eb6a23c2e5acc03055c0e45697253b2393c9a50cef76a3985304",
"sha256:51503524dd6f152ab4ad1fbd168fc6c30b5795e8c70be4410a64940b3abb55c0",
"sha256:8041e2de00e745c0e05a502d6e6db310db7faa7c979b3a5877123548a4c0b214",
"sha256:81fcd96a275209ef117e9ec91f75c731fa18dcfd9ffaa1c0adbdaa3616a86043",
"sha256:853da4f9563d982e4121fed8c92eea1a4594a2299037b3034c3c898cb8e933d6",
"sha256:8b4572c334593d449113f9dc8d19b93b7b271bdbe90ba7509eb178923327b625",
"sha256:9416443e219356e3c31f1f918a91badf2e37acf297e2fa13d24d1cc2380f8fbc",
"sha256:9854f612e1b59ec66804931df5add3b2d5ef0067748ea29dc60f0efdcda9a638",
"sha256:99a26afdb82ea83a265137a398f570402aa1f2b5dfb4ac3300c026931817b163",
"sha256:a19bf883b3384957e4a4a13e6bd1ae3d85ae87f4beb5957e35b0be287f12f4e4",
"sha256:a9f145660588187ff835c55a7d2ddf6abfc570c2651c276d3d4be8a2766db490",
"sha256:ac57fcdcfb0b73bb3203b58a14501abb7e5ff9ea5e2edfa06bb03035f0cff248",
"sha256:bcb530089ff24f6458a81ac3fa699e8c00194208a724b644ecc68422e1111939",
"sha256:beeabe25c3b704f7d56b573f7d2ff88fc99f0138e43480cecdfcaa3b87fe4f87",
"sha256:d634a7ea1fc3380ff96f9e44d8d22f38418c1c381d5fac680b272d7d90883720",
"sha256:d97b0661e1aead761f0ded3b769044bb00ed5d33e1ec865e891a8b128bf7c656"
],
"version": "==0.4.15"
},
"ipdb": {
"hashes": [
"sha256:7081c65ed7bfe7737f83fa4213ca8afd9617b42ff6b3f1daf9a3419839a2a00a"
],
"index": "pypi",
"version": "==0.11"
},
"ipython": {
"hashes": [
"sha256:007dcd929c14631f83daff35df0147ea51d1af420da303fd078343878bd5fb62",
"sha256:b0f2ef9eada4a68ef63ee10b6dde4f35c840035c50fd24265f8052c98947d5a4"
],
"index": "pypi",
"version": "==6.5.0"
},
"ipython-genutils": {
"hashes": [
"sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8",
"sha256:eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8"
"sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e",
"sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"
],
"version": "==0.2.0"
},
"isort": {
"black": {
"hashes": [
"sha256:1153601da39a25b14ddc54955dbbacbb6b2d19135386699e2ad58517953b34af",
"sha256:b9c40e9750f3d77e6e4d441d8b0266cf555e7cdabdcff33c4fd06366ca761ef8",
"sha256:ec9ef8f4a9bc6f71eec99e1806bfa2de401650d996c59330782b89a5555c1497"
"sha256:06f9d8846f2340dfac80ceb20200ea5d1b3f181dd0556b47af4e8e0b24fa0a6b",
"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",
"version": "==4.3.4"
"version": "==22.3.0"
},
"click": {
"hashes": [
"sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e",
"sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"
],
"markers": "python_version >= '3.7'",
"version": "==8.1.3"
},
"decorator": {
"hashes": [
"sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330",
"sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"
],
"markers": "python_version < '3.11' and python_version >= '3.7'",
"version": "==5.1.1"
},
"executing": {
"hashes": [
"sha256:0314a69e37426e3608aada02473b4161d4caf5a4b244d1d0c48072b8fee7bacc",
"sha256:19da64c18d2d851112f09c287f8d3dbbdf725ab0e569077efb6cdcbd3497c107"
],
"version": "==1.2.0"
},
"flake8": {
"hashes": [
"sha256:3833794e27ff64ea4e9cf5d410082a8b97ff1a06c16aa3d2027339cd0f1195c7",
"sha256:c61007e76655af75e6785a931f452915b371dc48f56efd765247c8fe68f2b181"
],
"index": "pypi",
"version": "==6.0.0"
},
"flake8-black": {
"hashes": [
"sha256:0dfbca3274777792a5bcb2af887a4cad72c72d0e86c94e08e3a3de151bb41c34",
"sha256:fe8ea2eca98d8a504f22040d9117347f6b367458366952862ac3586e7d4eeaca"
],
"index": "pypi",
"version": "==0.3.6"
},
"flake8-commas": {
"hashes": [
"sha256:940441ab8ee544df564ae3b3f49f20462d75d5c7cac2463e0b27436e2050f263",
"sha256:ebb96c31e01d0ef1d0685a21f3f0e2f8153a0381430e748bf0bbbb5d5b453d54"
],
"index": "pypi",
"version": "==2.1.0"
},
"flake8-comprehensions": {
"hashes": [
"sha256:412052ac4a947f36b891143430fef4859705af11b2572fbb689f90d372cf26ab",
"sha256:d763de3c74bc18a79c039a7ec732e0a1985b0c79309ceb51e56401ad0a2cd44e"
],
"index": "pypi",
"version": "==3.10.1"
},
"flake8-isort": {
"hashes": [
"sha256:537f453a660d7e903f602ecfa36136b140de279df58d02eb1b6a0c84e83c528c",
"sha256:aa0cac02a62c7739e370ce6b9c31743edac904bae4b157274511fc8a19c75bbc"
],
"index": "pypi",
"version": "==6.0.0"
},
"flake8-quotes": {
"hashes": [
"sha256:6e26892b632dacba517bf27219c459a8396dcfac0f5e8204904c5a4ba9b480e1"
],
"index": "pypi",
"version": "==3.3.2"
},
"greenlet": {
"hashes": [
"sha256:03a8f4f3430c3b3ff8d10a2a86028c660355ab637cee9333d63d66b56f09d52a",
"sha256:0bf60faf0bc2468089bdc5edd10555bab6e85152191df713e2ab1fcc86382b5a",
"sha256:18a7f18b82b52ee85322d7a7874e676f34ab319b9f8cce5de06067384aa8ff43",
"sha256:18e98fb3de7dba1c0a852731c3070cf022d14f0d68b4c87a19cc1016f3bb8b33",
"sha256:1a819eef4b0e0b96bb0d98d797bef17dc1b4a10e8d7446be32d1da33e095dbb8",
"sha256:26fbfce90728d82bc9e6c38ea4d038cba20b7faf8a0ca53a9c07b67318d46088",
"sha256:2780572ec463d44c1d3ae850239508dbeb9fed38e294c68d19a24d925d9223ca",
"sha256:283737e0da3f08bd637b5ad058507e578dd462db259f7f6e4c5c365ba4ee9343",
"sha256:2d4686f195e32d36b4d7cf2d166857dbd0ee9f3d20ae349b6bf8afc8485b3645",
"sha256:2dd11f291565a81d71dab10b7033395b7a3a5456e637cf997a6f33ebdf06f8db",
"sha256:30bcf80dda7f15ac77ba5af2b961bdd9dbc77fd4ac6105cee85b0d0a5fcf74df",
"sha256:32e5b64b148966d9cccc2c8d35a671409e45f195864560829f395a54226408d3",
"sha256:36abbf031e1c0f79dd5d596bfaf8e921c41df2bdf54ee1eed921ce1f52999a86",
"sha256:3a06ad5312349fec0ab944664b01d26f8d1f05009566339ac6f63f56589bc1a2",
"sha256:3a51c9751078733d88e013587b108f1b7a1fb106d402fb390740f002b6f6551a",
"sha256:3c9b12575734155d0c09d6c3e10dbd81665d5c18e1a7c6597df72fd05990c8cf",
"sha256:3f6ea9bd35eb450837a3d80e77b517ea5bc56b4647f5502cd28de13675ee12f7",
"sha256:4b58adb399c4d61d912c4c331984d60eb66565175cdf4a34792cd9600f21b394",
"sha256:4d2e11331fc0c02b6e84b0d28ece3a36e0548ee1a1ce9ddde03752d9b79bba40",
"sha256:5454276c07d27a740c5892f4907c86327b632127dd9abec42ee62e12427ff7e3",
"sha256:561091a7be172ab497a3527602d467e2b3fbe75f9e783d8b8ce403fa414f71a6",
"sha256:6c3acb79b0bfd4fe733dff8bc62695283b57949ebcca05ae5c129eb606ff2d74",
"sha256:703f18f3fda276b9a916f0934d2fb6d989bf0b4fb5a64825260eb9bfd52d78f0",
"sha256:7492e2b7bd7c9b9916388d9df23fa49d9b88ac0640db0a5b4ecc2b653bf451e3",
"sha256:76ae285c8104046b3a7f06b42f29c7b73f77683df18c49ab5af7983994c2dd91",
"sha256:7cafd1208fdbe93b67c7086876f061f660cfddc44f404279c1585bbf3cdc64c5",
"sha256:7efde645ca1cc441d6dc4b48c0f7101e8d86b54c8530141b09fd31cef5149ec9",
"sha256:88d9ab96491d38a5ab7c56dd7a3cc37d83336ecc564e4e8816dbed12e5aaefc8",
"sha256:8eab883b3b2a38cc1e050819ef06a7e6344d4a990d24d45bc6f2cf959045a45b",
"sha256:910841381caba4f744a44bf81bfd573c94e10b3045ee00de0cbf436fe50673a6",
"sha256:9190f09060ea4debddd24665d6804b995a9c122ef5917ab26e1566dcc712ceeb",
"sha256:937e9020b514ceedb9c830c55d5c9872abc90f4b5862f89c0887033ae33c6f73",
"sha256:94c817e84245513926588caf1152e3b559ff794d505555211ca041f032abbb6b",
"sha256:971ce5e14dc5e73715755d0ca2975ac88cfdaefcaab078a284fea6cfabf866df",
"sha256:9d14b83fab60d5e8abe587d51c75b252bcc21683f24699ada8fb275d7712f5a9",
"sha256:9f35ec95538f50292f6d8f2c9c9f8a3c6540bbfec21c9e5b4b751e0a7c20864f",
"sha256:a1846f1b999e78e13837c93c778dcfc3365902cfb8d1bdb7dd73ead37059f0d0",
"sha256:acd2162a36d3de67ee896c43effcd5ee3de247eb00354db411feb025aa319857",
"sha256:b0ef99cdbe2b682b9ccbb964743a6aca37905fda5e0452e5ee239b1654d37f2a",
"sha256:b80f600eddddce72320dbbc8e3784d16bd3fb7b517e82476d8da921f27d4b249",
"sha256:b864ba53912b6c3ab6bcb2beb19f19edd01a6bfcbdfe1f37ddd1778abfe75a30",
"sha256:b9ec052b06a0524f0e35bd8790686a1da006bd911dd1ef7d50b77bfbad74e292",
"sha256:ba2956617f1c42598a308a84c6cf021a90ff3862eddafd20c3333d50f0edb45b",
"sha256:bdfea8c661e80d3c1c99ad7c3ff74e6e87184895bbaca6ee8cc61209f8b9b85d",
"sha256:be4ed120b52ae4d974aa40215fcdfde9194d63541c7ded40ee12eb4dda57b76b",
"sha256:c4302695ad8027363e96311df24ee28978162cdcdd2006476c43970b384a244c",
"sha256:c48f54ef8e05f04d6eff74b8233f6063cb1ed960243eacc474ee73a2ea8573ca",
"sha256:c9c59a2120b55788e800d82dfa99b9e156ff8f2227f07c5e3012a45a399620b7",
"sha256:cd021c754b162c0fb55ad5d6b9d960db667faad0fa2ff25bb6e1301b0b6e6a75",
"sha256:d27ec7509b9c18b6d73f2f5ede2622441de812e7b1a80bbd446cb0633bd3d5ae",
"sha256:d5508f0b173e6aa47273bdc0a0b5ba055b59662ba7c7ee5119528f466585526b",
"sha256:d75209eed723105f9596807495d58d10b3470fa6732dd6756595e89925ce2470",
"sha256:db1a39669102a1d8d12b57de2bb7e2ec9066a6f2b3da35ae511ff93b01b5d564",
"sha256:dbfcfc0218093a19c252ca8eb9aee3d29cfdcb586df21049b9d777fd32c14fd9",
"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'",
"version": "==2.0.2"
},
"ipdb": {
"hashes": [
"sha256:c23b6736f01fd4586cc2ecbebdf79a5eb454796853e1cd8f2ed3b7b91d4a3e93",
"sha256:f74c2f741c18b909eaf89f19fde973f745ac721744aa1465888ce45813b63a9c"
],
"index": "pypi",
"version": "==0.13.11"
},
"ipython": {
"hashes": [
"sha256:b13a1d6c1f5818bd388db53b7107d17454129a70de2b87481d555daede5eb49e",
"sha256:b38c31e8fc7eff642fc7c597061fff462537cf2314e3225a19c906b7b0d8a345"
],
"index": "pypi",
"version": "==8.10.0"
},
"isort": {
"hashes": [
"sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504",
"sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6"
],
"index": "pypi",
"version": "==5.12.0"
},
"jedi": {
"hashes": [
"sha256:b409ed0f6913a701ed474a614a3bb46e6953639033e31f769ca7581da5bd1ec1",
"sha256:c254b135fb39ad76e78d4d8f92765ebc9bf92cbc76f49e97ade1d5f5121e1f6f"
"sha256:203c1fd9d969ab8f2119ec0a3342e0b49910045abe6af0a3ae83a5764d54639e",
"sha256:bae794c30d07f6d910d32a7048af09b5a39ed740918da923c6b780790ebac612"
],
"version": "==0.12.1"
"markers": "python_version >= '3.6'",
"version": "==0.18.2"
},
"matplotlib-inline": {
"hashes": [
"sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311",
"sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304"
],
"markers": "python_version >= '3.5'",
"version": "==0.1.6"
},
"mccabe": {
"hashes": [
"sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42",
"sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"
"sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325",
"sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"
],
"version": "==0.6.1"
"markers": "python_version >= '3.6'",
"version": "==0.7.0"
},
"msgpack": {
"hashes": [
"sha256:0b3b1773d2693c70598585a34ca2715873ba899565f0a7c9a1545baef7e7fbdc",
"sha256:0bae5d1538c5c6a75642f75a1781f3ac2275d744a92af1a453c150da3446138b",
"sha256:0ee8c8c85aa651be3aa0cd005b5931769eaa658c948ce79428766f1bd46ae2c3",
"sha256:1369f9edba9500c7a6489b70fdfac773e925342f4531f1e3d4c20ac3173b1ae0",
"sha256:22d9c929d1d539f37da3d1b0e16270fa9d46107beab8c0d4d2bddffffe895cee",
"sha256:2ff43e3247a1e11d544017bb26f580a68306cec7a6257d8818893c1fda665f42",
"sha256:31a98047355d34d047fcdb55b09cb19f633cf214c705a765bd745456c142130c",
"sha256:8767eb0032732c3a0da92cbec5ac186ef89a3258c6edca09161472ca0206c45f",
"sha256:8acc8910218555044e23826980b950e96685dc48124a290c86f6f41a296ea172",
"sha256:ab189a6365be1860a5ecf8159c248f12d33f79ea799ae9695fa6a29896dcf1d4",
"sha256:cfd6535feb0f1cf1c7cdb25773e965cc9f92928244a8c3ef6f8f8a8e1f7ae5c4",
"sha256:e274cd4480d8c76ec467a85a9c6635bbf2258f0649040560382ab58cabb44bcf",
"sha256:f86642d60dca13e93260187d56c2bef2487aa4d574a669e8ceefcf9f4c26fd00",
"sha256:f8a57cbda46a94ed0db55b73e6ab0c15e78b4ede8690fa491a0e55128d552bb0",
"sha256:fcea97a352416afcbccd7af9625159d80704a25c519c251c734527329bb20d0e"
"sha256:002b5c72b6cd9b4bafd790f364b8480e859b4712e91f43014fe01e4f957b8467",
"sha256:0a68d3ac0104e2d3510de90a1091720157c319ceeb90d74f7b5295a6bee51bae",
"sha256:0df96d6eaf45ceca04b3f3b4b111b86b33785683d682c655063ef8057d61fd92",
"sha256:0dfe3947db5fb9ce52aaea6ca28112a170db9eae75adf9339a1aec434dc954ef",
"sha256:0e3590f9fb9f7fbc36df366267870e77269c03172d086fa76bb4eba8b2b46624",
"sha256:11184bc7e56fd74c00ead4f9cc9a3091d62ecb96e97653add7a879a14b003227",
"sha256:112b0f93202d7c0fef0b7810d465fde23c746a2d482e1e2de2aafd2ce1492c88",
"sha256:1276e8f34e139aeff1c77a3cefb295598b504ac5314d32c8c3d54d24fadb94c9",
"sha256:1576bd97527a93c44fa856770197dec00d223b0b9f36ef03f65bac60197cedf8",
"sha256:1e91d641d2bfe91ba4c52039adc5bccf27c335356055825c7f88742c8bb900dd",
"sha256:26b8feaca40a90cbe031b03d82b2898bf560027160d3eae1423f4a67654ec5d6",
"sha256:2999623886c5c02deefe156e8f869c3b0aaeba14bfc50aa2486a0415178fce55",
"sha256:2a2df1b55a78eb5f5b7d2a4bb221cd8363913830145fad05374a80bf0877cb1e",
"sha256:2bb8cdf50dd623392fa75525cce44a65a12a00c98e1e37bf0fb08ddce2ff60d2",
"sha256:2cc5ca2712ac0003bcb625c96368fd08a0f86bbc1a5578802512d87bc592fe44",
"sha256:35bc0faa494b0f1d851fd29129b2575b2e26d41d177caacd4206d81502d4c6a6",
"sha256:3c11a48cf5e59026ad7cb0dc29e29a01b5a66a3e333dc11c04f7e991fc5510a9",
"sha256:449e57cc1ff18d3b444eb554e44613cffcccb32805d16726a5494038c3b93dab",
"sha256:462497af5fd4e0edbb1559c352ad84f6c577ffbbb708566a0abaaa84acd9f3ae",
"sha256:4733359808c56d5d7756628736061c432ded018e7a1dff2d35a02439043321aa",
"sha256:48f5d88c99f64c456413d74a975bd605a9b0526293218a3b77220a2c15458ba9",
"sha256:49565b0e3d7896d9ea71d9095df15b7f75a035c49be733051c34762ca95bbf7e",
"sha256:4ab251d229d10498e9a2f3b1e68ef64cb393394ec477e3370c457f9430ce9250",
"sha256:4d5834a2a48965a349da1c5a79760d94a1a0172fbb5ab6b5b33cbf8447e109ce",
"sha256:4dea20515f660aa6b7e964433b1808d098dcfcabbebeaaad240d11f909298075",
"sha256:545e3cf0cf74f3e48b470f68ed19551ae6f9722814ea969305794645da091236",
"sha256:63e29d6e8c9ca22b21846234913c3466b7e4ee6e422f205a2988083de3b08cae",
"sha256:6916c78f33602ecf0509cc40379271ba0f9ab572b066bd4bdafd7434dee4bc6e",
"sha256:6a4192b1ab40f8dca3f2877b70e63799d95c62c068c84dc028b40a6cb03ccd0f",
"sha256:6c9566f2c39ccced0a38d37c26cc3570983b97833c365a6044edef3574a00c08",
"sha256:76ee788122de3a68a02ed6f3a16bbcd97bc7c2e39bd4d94be2f1821e7c4a64e6",
"sha256:7760f85956c415578c17edb39eed99f9181a48375b0d4a94076d84148cf67b2d",
"sha256:77ccd2af37f3db0ea59fb280fa2165bf1b096510ba9fe0cc2bf8fa92a22fdb43",
"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": "==0.5.6"
"version": "==1.0.4"
},
"mypy-extensions": {
"hashes": [
"sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d",
"sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"
],
"markers": "python_version >= '3.5'",
"version": "==1.0.0"
},
"neovim": {
"hashes": [
"sha256:6ce58a742e0427491c0e1c8108556ee72ba33844209bd9e226b8da9538299276"
"sha256:a6a0e7a5b4433bf4e6ddcbc5c5ff44170be7d84259d002b8e8d8fb4ee78af60f"
],
"index": "pypi",
"version": "==0.2.6"
"version": "==0.3.1"
},
"parso": {
"hashes": [
"sha256:35704a43a3c113cce4de228ddb39aab374b8004f4f2407d070b6a2ca784ce8a2",
"sha256:895c63e93b94ac1e1690f5fdd40b65f07c8171e3e53cbd7793b5b96c0e0a7f24"
"sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0",
"sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"
],
"version": "==0.3.1"
"markers": "python_version >= '3.6'",
"version": "==0.8.3"
},
"pathmatch": {
"pathspec": {
"hashes": [
"sha256:b35db907d0532c66132e5bc8aaa20dbfae916441987c8f0abd53ac538376d9a7"
"sha256:3a66eb970cbac598f9e5ccb5b2cf58930cd8e3ed86d393d541eaf2d8b1705229",
"sha256:64d338d4e0914e91c1792321e6907b5a593f1ab1851de7fc269557a21b30ebbc"
],
"version": "==0.2.1"
"markers": "python_version >= '3.7'",
"version": "==0.11.0"
},
"pexpect": {
"hashes": [
"sha256:2a8e88259839571d1251d278476f3eec5db26deb73a70be5ed5dc5435e418aba",
"sha256:3fbd41d4caf27fa4a377bfd16fef87271099463e6fa73e92a52f92dfee5d425b"
"sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937",
"sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"
],
"markers": "sys_platform != 'win32'",
"version": "==4.6.0"
"version": "==4.8.0"
},
"pickleshare": {
"hashes": [
"sha256:84a9257227dfdd6fe1b4be1319096c20eb85ff1e82c7932f36efccfe1b09737b",
"sha256:c9a2541f25aeabc070f12f452e1f2a8eae2abd51e1cd19e8430402bdf4c1d8b5"
"sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca",
"sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"
],
"version": "==0.7.4"
"version": "==0.7.5"
},
"platformdirs": {
"hashes": [
"sha256:8a1228abb1ef82d788f74139988b137e78692984ec7b08eaa6c65f1723af28f9",
"sha256:b1d5eb14f221506f50d6604a561f4c5786d9e80355219694a1b244bcd96f4567"
],
"markers": "python_version >= '3.7'",
"version": "==3.0.0"
},
"prompt-toolkit": {
"hashes": [
"sha256:1df952620eccb399c53ebb359cc7d9a8d3a9538cb34c5a1344bdbeb29fbcc381",
"sha256:3f473ae040ddaa52b52f97f6b4a493cfa9f5920c255a12dc56a7d34397a398a4",
"sha256:858588f1983ca497f1cf4ffde01d978a3ea02b01c8a26a8bbc5cd2e66d816917"
"sha256:3e163f254bef5a03b146397d7c1963bd3e2812f0964bb9a24e6ec761fd28db63",
"sha256:aa64ad242a462c5ff0363a7b9cfe696c20d55d9fc60c11fd8e632d064804d305"
],
"version": "==1.0.15"
"markers": "python_full_version >= '3.6.2'",
"version": "==3.0.36"
},
"ptyprocess": {
"hashes": [
"sha256:923f299cc5ad920c68f2bc0bc98b75b9f838b93b599941a6b63ddbc2476394c0",
"sha256:d7cc528d76e76342423ca640335bd3633420dc1366f258cb31d05e865ef5ca1f"
"sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35",
"sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"
],
"version": "==0.6.0"
"version": "==0.7.0"
},
"pure-eval": {
"hashes": [
"sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350",
"sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3"
],
"version": "==0.2.2"
},
"pycodestyle": {
"hashes": [
"sha256:682256a5b318149ca0d2a9185d365d8864a768a28db66a84a2ea946bcc426766",
"sha256:6c4245ade1edfad79c3446fadfc96b0de2759662dc29d07d80a6f27ad1ca6ba9"
"sha256:347187bdb476329d98f695c213d7295a846d1152ff4fe9bacb8a9590b8ee7053",
"sha256:8a4eaf0d0495c7395bdab3589ac2db602797d76207242c17d470186815706610"
],
"version": "==2.3.1"
"markers": "python_version >= '3.6'",
"version": "==2.10.0"
},
"pyflakes": {
"hashes": [
"sha256:08bd6a50edf8cffa9fa09a463063c425ecaaf10d1eb0335a7e8b1401aef89e6f",
"sha256:8d616a382f243dbf19b54743f280b80198be0bca3a5396f1d2e1fca6223e8805"
"sha256:ec55bf7fe21fff7f1ad2f7da62363d749e2a470500eab1b555334b67aa1ef8cf",
"sha256:ec8b276a6b60bd80defed25add7e439881c19e64850afd9b346283d4165fd0fd"
],
"version": "==1.6.0"
"markers": "python_version >= '3.6'",
"version": "==3.0.1"
},
"pygments": {
"hashes": [
"sha256:78f3f434bcc5d6ee09020f92ba487f95ba50f1e3ef83ae96b9d5ffa1bab25c5d",
"sha256:dbae1046def0efb574852fab9e90209b23f556367b5a320c0bcb871c77c3e8cc"
"sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297",
"sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717"
],
"version": "==2.2.0"
"markers": "python_version >= '3.6'",
"version": "==2.14.0"
},
"pynvim": {
"hashes": [
"sha256:3a795378bde5e8092fbeb3a1a99be9c613d2685542f1db0e5c6fd467eed56dff"
],
"version": "==0.4.3"
},
"pyserial": {
"hashes": [
"sha256:6e2d401fdee0eab996cf734e67773a0143b932772ca8b42451440cfed942c627",
"sha256:e0770fadba80c31013896c7e6ef703f72e7834965954a78e71a3049488d4d7d8"
"sha256:3c77e014170dfffbd816e6ffc205e9842efb10be9f58ec16d3e8675b4925cddb",
"sha256:c4451db6ba391ca6ca299fb3ec7bae67a5c55dde170964c7a14ceefec02f2cf0"
],
"version": "==3.4"
"version": "==3.5"
},
"python-dateutil": {
"hashes": [
"sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86",
"sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
"version": "==2.8.2"
},
"python-dotenv": {
"hashes": [
"sha256:122290a38ece9fe4f162dc7c95cae3357b983505830a154d3c98ef7f6c6cea77",
"sha256:4a205787bc829233de2a823aa328e44fd9996fedb954989a21f1fc67c13d7a77"
"sha256:1c93de8f636cde3ce377292818d0e440b6e45a82f215c3744979151fa8151c49",
"sha256:41e12e0318bebc859fcc4d97d4db8d20ad21721a6aa5047dd59f090391cb549a"
],
"version": "==0.9.1"
"markers": "python_version >= '3.7'",
"version": "==0.21.1"
},
"simplegeneric": {
"python-magic": {
"hashes": [
"sha256:dc972e06094b9af5b855b3df4a646395e43d1c9d0d39ed345b7393560d0b9173"
"sha256:c1ba14b08e4a5f5c31a302b7721239695b2f0f058d125bd5ce1ee36b9d9d3c3b",
"sha256:c212960ad306f700aa0d01e5d7a325d20548ff97eb9920dcd29513174f0294d3"
],
"version": "==0.8.1"
"index": "pypi",
"version": "==0.4.27"
},
"s3cmd": {
"hashes": [
"sha256:15330776e7ff993d8ae0ac213bf896f210719e9b91445f5f7626a8fa7e74e30b",
"sha256:2204306742c33c24fbca02b78e059bacfc1bfc04af09c7e9866f267a11a9ddb2"
],
"index": "pypi",
"version": "==2.3.0"
},
"six": {
"hashes": [
"sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9",
"sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb"
"sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926",
"sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"
],
"version": "==1.11.0"
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
"version": "==1.16.0"
},
"testfixtures": {
"stack-data": {
"hashes": [
"sha256:334497d26344e8c0c5d01b4d785a1c83464573151e6a5f7ab250eb7981d452ec",
"sha256:53c06c1feb0bf378d63c54d1d96858978422d5a34793b39f0dcb0e44f8ec26f4"
"sha256:32d2dd0376772d01b6cb9fc996f3c8b57a357089dec328ed4b6553d037eaf815",
"sha256:cbb2a53eb64e5785878201a97ed7c7b94883f48b87bfb0bbe8b623c74679e4a8"
],
"version": "==6.3.0"
"version": "==0.6.2"
},
"tomli": {
"hashes": [
"sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc",
"sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"
],
"markers": "python_version < '3.11'",
"version": "==2.0.1"
},
"traitlets": {
"hashes": [
"sha256:9c4bd2d267b7153df9152698efb1050a5d84982d3384a37b2c1f7723ba3e7835",
"sha256:c6cb5e6f57c5a9bdaa40fa71ce7b4af30298fbab9ece9815b5d995ab6217c7d9"
"sha256:9e6ec080259b9a5940c797d58b613b5e31441c2257b87c2e795c5228ae80d2d8",
"sha256:f6cde21a9c68cf756af02035f72d5a723bf607e862e7be33ece505abf4a3bad9"
],
"version": "==4.3.2"
},
"typing": {
"hashes": [
"sha256:4027c5f6127a6267a435201981ba156de91ad0d1d98e9ddc2aa173453453492d",
"sha256:57dcf675a99b74d64dacf6fba08fb17cf7e3d5fdff53d4a30ea2a5e7e52543d4",
"sha256:a4c8473ce11a65999c8f59cb093e70686b6c84c98df58c1dae9b3b196089858a"
],
"version": "==3.6.6"
"markers": "python_version >= '3.7'",
"version": "==5.9.0"
},
"wcwidth": {
"hashes": [
"sha256:3df37372226d6e63e1b1e1eda15c594bca98a22d33a23832a90998faa96bc65e",
"sha256:f4ebe71925af7b40a864553f761ed559b43544f8f71746c2d756c7fe788ade7c"
"sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e",
"sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0"
],
"version": "==0.1.7"
"version": "==0.2.6"
}
}
}

148
README.md
View File

@ -1,101 +1,81 @@
# KMK: Python-based keyboard firmware for humans (and ARM microcontrollers)
# KMK: Clackety Keyboards Powered by Python
![GitHub](https://img.shields.io/github/license/KMKfw/kmk_firmware)
![GitHub contributors](https://img.shields.io/github/contributors/KMKfw/kmk_firmware)
![Lines of code](https://img.shields.io/tokei/lines/github/KMKfw/kmk_firmware)
![GitHub issues](https://img.shields.io/github/issues-raw/KMKfw/kmk_firmware)
![GitHub closed issues](https://img.shields.io/github/issues-closed/KMKfw/kmk_firmware)
[![CircleCI](https://circleci.com/gh/KMKfw/kmk_firmware/tree/master.svg?style=svg)](https://circleci.com/gh/KMKfw/kmk_firmware/tree/master)[![CLA assistant](https://cla-assistant.io/readme/badge/KMKfw/kmk_firmware)](https://cla-assistant.io/KMKfw/kmk_firmware)
KMK is a feature-rich and beginner-friendly firmware for computer keyboards
written and configured in
[CircuitPython](https://github.com/adafruit/circuitpython).
#### [Join our Matrix community for chat and support!](https://matrix.to/#/+kmk:kmkfw.io)
## Support
[Or, head directly to the #support channel](https://matrix.to/#/#support:kmkfw.io)
For asynchronous support and chatter about KMK, [join our Zulip
community](https://kmkfw.zulipchat.com)!
If you can't or won't use the Matrix infrastructure, a (possibly fragile) bridge
to Discord exists
[here](https://discordapp.com/widget?id=493256121075761173&theme=dark).
If you ask for help in chat or open a bug report, if possible
make sure your copy of KMK is up-to-date.
In particular, swing by the Zulip chat *before* opening a GitHub Issue about
configuration, documentation, etc. concerns.
<hr/>
> The former Matrix and Discord rooms once linked to in this README are no
> longer officially supported, please do not use them!
KMK is a firmware for (usually mechanical) keyboards, running on
[CircuitPython](https://github.com/adafruit/circuitpython). It aims to provide a
means to write complex keyboard configurations quickly, without having to learn
much "real" programming, while preserving at least some of the hackability and
DIY spirit of CircuitPython. Learn more about the rationale of KMK in `Why KMK?`
below.
## Features
This project is currently written and maintained by:
- Fully configured through a single, easy to understand Python file that lives
on a "flash-drive"-esque space on your microcontroller - edit on the go
without DFU or other devtooling available!
- Single-piece or [two-piece split
keyboards](/docs/en/split_keyboards.md)
are supported
- [Chainable
keys](/docs/en/keys.md) such as
`KC.LWIN(KC.L)` to lock the screen on a Windows PC
- [Built-in Unicode macros, including
emojis](/docs/en/sequences.md)
- [RGB underglow](/docs/en/rgb.md)
and [LED
backlights](/docs/en/led.md)
- One key can turn into many more based on [how many times you tap
it](/docs/en/tapdance.md)
- Bluetooth HID and split keyboards. No more wires.
- [Josh Klar (@klardotsh)](https://github.com/klardotsh)
- [Kyle Brown (@kdb424)](https://github.com/kdb424)
## Getting Started
KMK requires [CircuitPython](https://circuitpython.org/) version 7.0 or higher.
Our getting started guide can be found
[here](/docs/en/Getting_Started.md).
With community help from:
## Code Style
- [@siddacious](https://github.com/siddacious)
- [Scott Shawcroft (@tannewt)](https://github.com/tannewt)
KMK uses [Black](https://github.com/psf/black) with a Python 3.6 target and,
[(controversially?)](https://github.com/psf/black/issues/594) single quotes.
Further code styling is enforced with isort and flake8 with several plugins.
`make fix-isort fix-formatting` before a commit is a good idea, and CI will fail
if inbound code does not adhere to these formatting rules. Some exceptions are
found in `setup.cfg` loosening the rules in isolated cases, notably
`user_keymaps` (which is *also* not subject to Black formatting for reasons
documented in `pyproject.toml`).
> Scott is the lead developer of the CircuitPython project itself at Adafruit.
> KMK, however, is not officially sponsored by Adafruit, and is an independent
> project.
## Tests
Lastly, we'd like to make a couple of shoutouts to people not directly
affiliated with the project in any way, but who have helped or inspired us along
the way:
Unit tests within the `tests` folder mock various CircuitPython modules to allow
them to be executed in a desktop development environment.
- [Jack Humbert (@jackhumbert)](https://jackhumbert.com/), for writing QMK.
Without QMK, I'd have never been exposed to the wonderful world of
programmable keyboards. He's also just an awesometastic human in general, if
you ever catch him on Discord/Reddit/etc. Jack also makes fantastic hardware -
check out [his store](https://olkb.com)!
- [Dan Halbert (@dhalbert)](https://danhalbert.org/), for his amazing and
unjudgemental support of two random dudes on Github asking all sorts of
bizzare (okay... and occasionally dumb) questions on the MicroPython and
CircuitPython Github projects and the Adafruit Discord. Dan, without your help
and pointers (even when those pointers are "Remember you're working with a
microcontroller with a few MHz of processing speed and a few KB of RAM"), this
project would have never gotten off the ground. Thank you, and an extended
thanks to Adafruit.
## Why KMK?
A question we get from time to time is, "why bother with KMK when QMK already
exists?", so here's a short bulleted list of our thoughts on the matter (in no
particular order):
- Python is awesome
- Python is super easy to write
- Python provides fewer footguns than C
- KMK cut all the "tech debt" of supporting AVR controllers, and frankly even
most ARM controllers with under 256KB of flash. This let us make some very
user-friendly (in our biased opinions) design decisions that should make it
simple for users to create even fairly complex keyboards - want a key on your
board that sends a shruggie (`¯\_(ツ)_/¯`)? No problem - it's supported out of
the box. Want a single key that can act as all 26 alphabet characters
depending on the number of times it's tapped? You're insane, but our simple
Tap Dance implementation has you covered (without a single line of matrix
mangling or timer madness)
- KMK supports a few small features QMK doesn't - most are probably not
deal-closers, but they exist no less. Probably the most notable addition here
is `Leader Mode - Enter`. Check out `docs/leader.md` for details on that.
- KMK plans to support some fairly powerful hardware that would enable things
like connecting halves (or thirds, or whatever) of a split keyboard to each
other via Bluetooth. This stuff is still in very early R&D.
## So how do I use it?
Since KMK is still in some state between "alpha" and "beta", flashing KMK to a
board is still a process that requires a few lines of shell scripting. Check out
`docs/flashing.md` for instructions/details, though note that for now, the
instructions mostly assume Unix (Linux/MacOS/BSD) usage. You may want to check
out the Windows Subsystem for Linux if you're on Windows.
Execute tests using the command `python -m unittest`.
## License, Copyright, and Legal
Most files in this project are licensed
[GPLv3](https://tldrlegal.com/license/gnu-general-public-license-v3-(gpl-3)) -
see `LICENSE.md` at the top of this source tree for exceptions and the full
license text.
All software in this repository is licensed under the [GNU Public License,
version 3](https://tldrlegal.com/license/gnu-general-public-license-v3-(gpl-3)).
All documentation and hardware designs are licensed under the [Creative Commons
Attribution-ShareAlike 4.0](https://creativecommons.org/licenses/by-sa/4.0/)
license. Contributions to this repository must use these licenses unless
otherwise agreed to by the Core team.
When contributing for the first time, you'll need to sign a Contributor
Licensing Agreement which is based on the Free Software Foundation's CLA. The
CLA is basically a two-way promise that this code is and remains yours, but will
be distributed as part of a larger GPLv3 project. If you'd like to get it out of
the way early, you can find said CLA [here](
https://cla-assistant.io/kmkfw/kmk_firmware). If you forget, the bots will
remind you when you open the pull request, no worries!
**Due to ethical and legal concerns, any works derived from GitHub Copilot or
similar artificial intelligence tooling are unacceptable for inclusion in any
first-party KMK repository or other code collection. We further recommend not
using GitHub Copilot while developing anything KMK-related, regardless of
intent to submit upstream.**

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()

42
boards/Pico87/kb.py Normal file
View File

@ -0,0 +1,42 @@
import board
from kmk.extensions.LED import LED
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
from kmk.scanners import DiodeOrientation
class KMKKeyboard(_KMKKeyboard):
col_pins = (
board.GP0,
board.GP1,
board.GP2,
board.GP3,
board.GP4,
board.GP5,
board.GP6,
board.GP7,
board.GP8,
board.GP9,
board.GP10,
board.GP11,
board.GP12,
board.GP13,
board.GP14,
board.GP15,
board.GP16,
board.GP17,
)
row_pins = (
board.GP18,
board.GP19,
board.GP20,
board.GP21,
board.GP22,
board.GP26,
)
diode_orientation = DiodeOrientation.COLUMNS
leds = LED(led_pin=[board.GP27, board.GP28])
_KMKKeyboard.extensions.append(leds)

60
boards/Pico87/main.py Normal file
View File

@ -0,0 +1,60 @@
import board
from kb import KMKKeyboard
from kmk.extensions.lock_status import LockStatus
from kmk.extensions.stringy_keymaps import StringyKeymaps
from kmk.keys import KC
from kmk.modules.layers import Layers
Pico87 = KMKKeyboard()
class LEDLockStatus(LockStatus):
def set_lock_leds(self):
if self.get_caps_lock():
Pico87.leds.set_brightness(50, leds=[0])
else:
Pico87.leds.set_brightness(0, leds=[0])
if self.get_scroll_lock():
Pico87.leds.set_brightness(50, leds=[1])
else:
Pico87.leds.set_brightness(0, leds=[1])
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()
Pico87.modules.append(Layers())
Pico87.extensions.append(LEDLockStatus())
Pico87.extensions.append(StringyKeymaps())
MOLYR = KC.MO(1)
# Make this for better looking formatting...
______ = 'NO'
Pico87.keymap = [[
# Layer 0 QWERTY
'ESC', ______, 'F1', 'F2', 'F3', 'F4', ______, 'F5', 'F6', 'F7', 'F8', 'F9', 'F10', 'F11', 'F12', 'PSCR', 'SLCK', 'PAUS',
'GRV', 'N1', 'N2', 'N3', 'N4', 'N5', 'N6', 'N7', 'N8', 'N9', 'N0', 'MINS', 'EQL', ______, 'BSPC', 'INS', 'HOME', 'PGUP',
'TAB', ______, 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', 'LBRC', 'RBRC', 'BSLS', 'DEL', 'END', 'PGDN',
'CAPS', ______, 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'SCLN', 'QUOT', 'ENT', ______, ______, ______, ______,
______, 'LSFT', 'Z', 'X', 'C', 'V', 'B', 'N', 'M', 'COMM', 'DOT', 'SLSH', ______, 'RSFT', ______, ______, 'UP', ______,
'LCTL', 'LGUI', ______, 'LALT', ______, ______, 'SPC', ______, ______, ______, 'RALT', 'RGUI', ______, MOLYR, 'RCTL', 'LEFT', 'DOWN', 'RGHT',
], [
# Layer 1
'ESC', ______, 'F1', 'F2', 'F3', 'F4', ______, 'F5', 'F6', 'F7', 'F8', 'F9', 'F10', 'F11', 'F12', 'PSCR', 'SLCK', 'PAUS',
'GRV', 'N1', 'N2', 'N3', 'N4', 'N5', 'N6', 'N7', 'N8', 'N9', 'N0', 'MINS', 'EQL', ______, 'BSPC', 'INS', 'HOME', 'PGUP',
'TAB', ______, 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', 'LBRC', 'RBRC', 'BSLS', 'DEL', 'END', 'PGDN',
'CAPS', ______, 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'SCLN', 'QUOT', 'ENT', ______, ______, ______, ______,
______, 'LSFT', 'Z', 'X', 'C', 'V', 'B', 'N', 'M', 'COMM', 'DOT', 'SLSH', ______, 'RSFT', ______, ______, 'UP', ______,
'LCTL', 'LGUI', ______, 'LALT', ______, ______, 'SPC', ______, ______, ______, 'RALT', 'RGUI', ______, MOLYR, 'RCTL', 'LEFT', 'DOWN', 'RGHT',
]]
if __name__ == '__main__':
Pico87.go()

View File

@ -0,0 +1,105 @@
import board
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
from kmk.matrix import DiodeOrientation
class KMKKeyboard(_KMKKeyboard):
col_pins = (
board.COL0,
board.COL1,
board.COL2,
board.COL3,
board.COL4,
board.COL5,
board.COL6,
board.COL7,
)
row_pins = (
board.ROW0,
board.ROW1,
board.ROW2,
board.ROW3,
board.ROW4,
board.ROW5,
board.ROW6,
board.ROW7,
board.ROW8,
board.ROW9,
)
diode_orientation = DiodeOrientation.COL2ROW
rgb_pixel_pin = board.LED
rgb_num_pixels = 70
coord_mapping = [
0,
8,
1,
9,
2,
10,
3,
11,
4,
12,
5,
13,
6,
14,
7,
15,
24,
17,
25,
18,
26,
19,
27,
20,
28,
21,
29,
22,
23,
31,
40,
33,
41,
34,
42,
35,
43,
36,
44,
37,
45,
38,
46,
39,
47,
56,
49,
57,
50,
58,
51,
59,
52,
60,
53,
61,
54,
55,
63,
72,
65,
73,
74,
75,
76,
69,
77,
78,
71,
79,
]

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

@ -0,0 +1,10 @@
# ANAVI Knob 1
ANAVI Knob 1 is an open source, programmable mechanical keyboard with a single rotary encoder and [Seeed XIAO RP2040](https://www.seeedstudio.com/XIAO-RP2040-v1-0-p-5026.html).
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:
- [Encoder](/docs/en/encoder.md) Twist control for all the things
- [RGB](/docs/en/rgb.md) Light it up (for underlighting)
- [MediaKeys](/docs/en/media_keys.md) Control volume and other media functions

View File

@ -0,0 +1,35 @@
import board
from kmk.extensions.media_keys import MediaKeys
from kmk.extensions.RGB import RGB, AnimationModes
from kmk.keys import KC
from kmk.kmk_keyboard import KMKKeyboard
from kmk.modules.encoder import EncoderHandler
from kmk.scanners.keypad import KeysScanner
knob = KMKKeyboard()
knob.matrix = KeysScanner([])
media_keys = MediaKeys()
knob.extensions.append(media_keys)
# Rotary encoder that also acts as a key
encoder_handler = EncoderHandler()
encoder_handler.divisor = 2
encoder_handler.pins = ((board.D1, board.D2, board.D0),)
encoder_handler.map = (((KC.VOLD, KC.VOLU, KC.MUTE),),)
knob.modules.append(encoder_handler)
rgb_ext = RGB(
pixel_pin=board.NEOPIXEL,
num_pixels=1,
val_limit=100,
val_default=25,
animation_mode=AnimationModes.RAINBOW,
)
knob.extensions.append(rgb_ext)
knob.keymap = [[KC.MUTE]]
if __name__ == '__main__':
knob.go()

View File

@ -0,0 +1,10 @@
# ANAVI Knobs 3
ANAVI Knobs 3 is an open source, programmable mechanical keyboard with 3 rotary encoders and [Seeed XIAO RP2040](https://www.seeedstudio.com/XIAO-RP2040-v1-0-p-5026.html).
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:
- [Encoder](/docs/en/encoder.md) Twist control for all the things
- [RGB](/docs/en/rgb.md) Light it up (for underlighting)
- [MediaKeys](/docs/en/media_keys.md) Control volume and other media functions

View File

@ -0,0 +1,43 @@
import board
from kmk.extensions.media_keys import MediaKeys
from kmk.extensions.RGB import RGB, AnimationModes
from kmk.keys import KC
from kmk.kmk_keyboard import KMKKeyboard
from kmk.modules.encoder import EncoderHandler
from kmk.scanners.keypad import KeysScanner
knob = KMKKeyboard()
knob.matrix = KeysScanner([])
media_keys = MediaKeys()
knob.extensions.append(media_keys)
# Rotary encoders that also acts as keys
encoder_handler = EncoderHandler()
encoder_handler.divisor = 2
encoder_handler.pins = (
(board.D1, board.D2, board.D0),
(board.D9, board.D10, board.D3),
(board.D7, board.D8, board.D6),
)
encoder_handler.map = (
((KC.VOLD, KC.VOLU, KC.MUTE), (KC.UP, KC.DOWN, KC.A), (KC.RIGHT, KC.LEFT, KC.B)),
)
knob.modules.append(encoder_handler)
print('ANAVI Knobs 3')
rgb_ext = RGB(
pixel_pin=board.NEOPIXEL,
num_pixels=1,
val_limit=100,
val_default=25,
animation_mode=AnimationModes.RAINBOW,
)
knob.extensions.append(rgb_ext)
knob.keymap = [[KC.MUTE]]
if __name__ == '__main__':
knob.go()

View File

@ -0,0 +1,11 @@
# ANAVI Macro Pad 10
ANAVI Macro Pad 10 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 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:
- [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

View File

@ -0,0 +1,87 @@
import board
from kmk.extensions.LED import LED
from kmk.extensions.media_keys import MediaKeys
from kmk.extensions.RGB import RGB, AnimationModes
from kmk.keys import KC
from kmk.kmk_keyboard import KMKKeyboard
from kmk.modules.encoder import EncoderHandler
from kmk.scanners import DiodeOrientation
print('ANAVI Macro Pad 10')
keyboard = KMKKeyboard()
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)
keyboard.col_pins = (
board.D4,
board.D5,
board.D6,
)
keyboard.row_pins = (
board.D3,
board.D2,
board.D1,
)
keyboard.diode_orientation = DiodeOrientation.COL2ROW
media_keys = MediaKeys()
keyboard.extensions.append(media_keys)
# Matrix 3x3 keymap, 9 keys in total
keyboard.keymap = [
[
KC.N1,
KC.N2,
KC.N3,
KC.N4,
KC.N5,
KC.N6,
KC.N7,
KC.N8,
KC.N9,
]
]
# Rotary encoder that also acts as a key
encoder_handler = EncoderHandler()
encoder_handler.divisor = 2
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

@ -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()

16
boards/atreus62/README.md Normal file
View File

@ -0,0 +1,16 @@
# Atreus62
![Atreus62](https://assets.bigcartel.com/product_images/189335282/BIlqCtd.jpg?auto=format&fit=max&w=1200)
Atreus62 is a 60% column staggered keyboard pinky stagger
kb.py is designed to work with the Teensy 4.1
Retailers (USA)
[Atreus62](https://shop.profetkeyboards.com/product/atreus62-keyboard)
Extensions enabled by default
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [RGB](/docs/en/rgb.md) Light it up
- [Encoder](/docs/en/encoder.md) Twist control for all the things

26
boards/atreus62/kb.py Normal file
View File

@ -0,0 +1,26 @@
import board
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
from kmk.scanners import DiodeOrientation
class KMKKeyboard(_KMKKeyboard):
col_pins = (
board.D24,
board.D25,
board.D26,
board.D27,
board.D28,
board.D29,
board.D30,
board.D31,
board.D32,
board.D33,
board.D34,
board.D35,
)
row_pins = (board.D3, board.D4, board.D5, board.D6, board.D7, board.D8)
diode_orientation = DiodeOrientation.ROWS
# diode_orientation = DiodeOrientation.COLUMNS

223
boards/atreus62/main.py Normal file
View File

@ -0,0 +1,223 @@
import board
from kb import KMKKeyboard
from kmk.handlers.sequences import send_string, simple_key_sequence
from kmk.keys import KC
from kmk.modules.encoder import EncoderHandler
from kmk.modules.layers import Layers
# local_increment = None
# local_decrement = None
keyboard = KMKKeyboard()
# custom keys used for encoder actions
Zoom_in = KC.LCTRL(KC.EQUAL)
Zoom_out = KC.LCTRL(KC.MINUS)
# standard filler keys
_______ = KC.TRNS
XXXXXXX = KC.NO
layers_ext = Layers()
# 1 encoder, no button, inversed = True
encoder_ext = EncoderHandler(
(board.D40, board.D41, None, True),
)
keyboard.modules = [layers_ext, encoder_ext]
keyboard.tap_time = 250
keyboard.debug_enabled = False
# custom keys
NEW = KC.LCTL(KC.N)
NEW_DIR = KC.LCTL(KC.LSFT(KC.N))
CAD = KC.LCTL(KC.LALT(KC.DEL))
RES = KC.LCTL(KC.LSFT(KC.ESC))
FE = KC.LGUI(KC.E)
LT1_DEL = KC.LT(1, KC.DEL)
LT2_ENT = KC.LT(2, KC.ENT)
SAVE_AS = KC.LCTL(KC.LSFT(KC.S))
PSCR = KC.LGUI(KC.PSCR)
SNIP = simple_key_sequence(
(
KC.LGUI,
KC.MACRO_SLEEP_MS(25),
KC.S,
KC.N,
KC.I,
KC.P,
KC.MACRO_SLEEP_MS(25),
KC.ENT,
)
)
# programming layer keys
UINT = simple_key_sequence(
(
KC.U,
KC.I,
KC.N,
KC.T,
)
)
INT = simple_key_sequence(
(
KC.I,
KC.N,
KC.T,
)
)
DOUBLE = simple_key_sequence(
(
KC.D,
KC.O,
KC.U,
KC.B,
KC.L,
KC.E,
)
)
BOOL = simple_key_sequence(
(
KC.B,
KC.O,
KC.O,
KC.L,
)
)
BYTE = simple_key_sequence(
(
KC.B,
KC.Y,
KC.T,
KC.E,
)
)
SBYTE = simple_key_sequence(
(
KC.S,
KC.B,
KC.Y,
KC.T,
KC.E,
)
)
CHAR = simple_key_sequence(
(
KC.C,
KC.H,
KC.A,
KC.R,
)
)
GETSET = simple_key_sequence(
(
KC.LBRC,
KC.SPC,
KC.G,
KC.E,
KC.T,
KC.SCLN,
KC.SPC,
KC.S,
KC.E,
KC.T,
KC.SCLN,
KC.SPC,
KC.RBRC,
)
)
PUBLIC = simple_key_sequence(
(
KC.P,
KC.U,
KC.B,
KC.L,
KC.I,
KC.C,
)
)
DEBUGWL = simple_key_sequence(
(
KC.LSFT(KC.D),
KC.E,
KC.B,
KC.U,
KC.G,
KC.DOT,
KC.LSFT(KC.W),
KC.R,
KC.I,
KC.T,
KC.E,
KC.LSFT(KC.L),
KC.I,
KC.N,
KC.E,
KC.LSFT(KC.N9),
)
)
PRINT = simple_key_sequence(
(
KC.P,
KC.R,
KC.I,
KC.N,
KC.T,
)
)
# make keymap
keyboard.keymap = [
[ # qwerty
KC.ESC, KC.N1, KC.N2, KC.N3, KC.N4, KC.N5, KC.N6, KC.N7, KC.N8, KC.N9, KC.N0, KC.MINS,
KC.CAPS, KC.Q, KC.W, KC.E, KC.R, KC.T, KC.Y, KC.U, KC.I, KC.O, KC.P, KC.PSLS,
KC.TAB, KC.A, KC.S, KC.D, KC.F, KC.G, KC.H, KC.J, KC.K, KC.L, KC.SCLN, KC.QUOT,
KC.TRNS, KC.Z, KC.X, KC.C, KC.V, KC.B, KC.N, KC.M, KC.COMM, KC.DOT, KC.SLSH, FE,
KC.BSPC, KC.DEL, KC.LALT, KC.LSFT, KC.LCTL, KC.BSPC, KC.SPC, KC.ENT, KC.RSFT, KC.RCTL, KC.ENT, KC.RGUI,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC.MO(1), KC.MO(2), KC.MUTE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
],
[ # navnum
KC.TRNS, SAVE_AS, PSCR, SNIP, KC.LGUI, NEW_DIR, KC.PSLS, KC.RGUI, KC.NO, KC.NO, KC.NO, KC.MINS,
KC.BSLS, KC.NO, KC.HOME, KC.UP, KC.END, NEW, KC.N5, KC.N6, KC.N7, KC.N8, KC.N9, KC.BSLS,
KC.F2, KC.NO, KC.LEFT, KC.DOWN, KC.RGHT, KC.HASH, KC.N0, KC.N1, KC.N2, KC.N3, KC.N4, KC.QUOT,
KC.LSFT, KC.NO, KC.NO, KC.NO, KC.TAB, KC.UNDS, KC.MINS, KC.PPLS, KC.MINS, KC.PAST, KC.PSLS, KC.LBRC,
KC.BSPC, KC.NO, KC.NO, KC.NO, KC.NO, KC.TRNS, KC.SPC, KC.EQL, KC.N0, KC.DOT, KC.ENT, KC.RGUI,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC.TRNS, KC.TRNS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
],
[ # sym/prog
KC.TRNS, KC.NO, KC.NO, KC.NO, KC.F2, KC.AMPR, PRINT, DEBUGWL, SAVE_AS, KC.NO, KC.NO, KC.NO,
KC.BSLS, KC.NO, KC.NO, KC.LCBR, KC.RCBR, KC.AT, INT, GETSET, KC.UP, KC.NO, KC.NO, KC.NO,
KC.TAB, KC.NO, KC.NO, KC.LPRN, KC.RPRN, KC.DLR, BOOL, KC.LEFT, KC.DOWN, KC.RGHT, KC.NO, KC.NO,
KC.LSFT, KC.NO, KC.NO, KC.LBRC, KC.RBRC, KC.PERC, UINT, DOUBLE, KC.NO, KC.NO, KC.NO, KC.NO,
KC.BSPC, KC.LGUI, KC.LALT, KC.LSFT, KC.LCTL, KC.DEL, KC.TRNS, PUBLIC, KC.RCTL, KC.RALT, KC.ENT, KC.RESET,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC.TRNS, KC.TRNS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
],
]
# for use in the encoder extension
encoder_map = [
[
(
KC.VOLU,
KC.VOLD,
None,
), # Only 1 encoder is being used, so only one tuple per layer is required
],
[
(Zoom_in, Zoom_out, None),
],
[
(_______, _______, None), # no action taken by the encoder on this layer
],
]
if __name__ == '__main__':
keyboard.go()

View File

@ -0,0 +1,21 @@
# Boardsource 3x4
![Boardsource3x4](https://boardsource.imgix.net/30171267-d988-46cc-ba03-9f6a8ab96487.jpg?raw=true)
This macro pad / small 12 key was inspired by the plaid look
kb.py is designed to work with the nice!nano
Retailers (USA)
[Boardsource](https://boardsource.xyz/store/5ecc2008eee64242946c98c1)
Extensions enabled by default
- [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

@ -0,0 +1,12 @@
import board
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
from kmk.scanners import DiodeOrientation
class KMKKeyboard(_KMKKeyboard):
row_pins = (pins[16], pins[17], pins[18])
col_pins = (pins[12], pins[13], pins[14], pins[15])
diode_orientation = DiodeOrientation.COLUMNS
i2c = board.I2C

View File

@ -0,0 +1,31 @@
from kb import KMKKeyboard
from kmk.keys import KC
from kmk.modules.layers import Layers
keyboard = KMKKeyboard()
# Cleaner key names
_______ = KC.TRNS
XXXXXXX = KC.NO
layers_ext = Layers()
keyboard.modules = [layers_ext]
RAISE = KC.MO(1)
keyboard.keymap = [
[ #Base
KC.N0, KC.N1, KC.N4, KC.N7,
KC.ENT, KC.N2, KC.N5, KC.N8,
RAISE, KC.N3, KC.N6, KC.N9
],
[ #RAISE
_______, _______, _______, _______,
_______, _______, _______, _______,
_______, _______, _______, _______
]
]
if __name__ == '__main__':
keyboard.go()

View File

@ -0,0 +1,28 @@
# Boardsource 4x12 Ortho
![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)
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-staggered layout available.
Retailers (USA)
4x12
[Boardsource](https://boardsource.xyz/store/5ecb78d286879c9a0c22dafd )
Low profile 4x12
[Boardsource](https://boardsource.xyz/store/5ecb7dad86879c9a0c22db32)
Extensions enabled by default
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [MediaKeys](/docs/en/media_keys.md) Control volume and other media functions
Common Extensions
- [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

@ -0,0 +1,25 @@
import board
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
from kmk.scanners import DiodeOrientation
class KMKKeyboard(_KMKKeyboard):
row_pins = (board.pins[1], pins[0], board.pins[4], board.pins[5])
col_pins = (
board.pins[19],
board.pins[18],
board.pins[17],
board.pins[16],
board.pins[15],
board.pins[14],
board.pins[13],
board.pins[12],
board.pins[11],
board.pins[10],
board.pins[9],
board.pins[8],
)
diode_orientation = DiodeOrientation.COLUMNS
i2c = board.I2C

View File

@ -0,0 +1,44 @@
from kb import KMKKeyboard
from kmk.extensions.media_keys import MediaKeys
from kmk.keys import KC
from kmk.modules.layers import Layers
keyboard = KMKKeyboard()
media = MediaKeys()
layers_ext = Layers()
keyboard.extensions = [media]
keyboard.modules = [layers_ext]
# Cleaner key names
_______ = KC.TRNS
XXXXXXX = KC.NO
LOWER = KC.MO(1)
RAISE = KC.MO(2)
keyboard.keymap = [
[ #QWERTY
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.ESC, 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.N, KC.M, KC.COMM, KC.DOT, KC.SLSH, KC.ENT ,
KC.PIPE, KC.LCTL, KC.LALT, KC.LGUI, LOWER, KC.SPC, KC.SPC, RAISE, KC.LEFT, KC.DOWN, KC.UP, KC.RGHT
],
[ #LOWER
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.DEL, KC.F1, KC.F2, KC.F3, KC.F4, KC.F5, KC.F6, KC.MINS, KC.EQL, KC.LBRC, KC.RBRC, KC.BSLS,
_______, KC.F7, KC.F8, KC.F9, KC.F10, KC.F11, KC.F12, KC.NUHS, KC.NUBS, KC.PGUP, KC.PGDN, _______,
_______, _______, _______, _______, _______, _______, _______, _______, KC.MNXT, KC.VOLD, KC.VOLU, KC.MPLY
],
[ #RAISE
KC.TILD, KC.EXLM, KC.AT, KC.HASH, KC.DLR, KC.PERC, KC.CIRC, KC.AMPR, KC.ASTR, KC.LPRN, KC.RPRN, KC.BSPC,
KC.DEL, KC.F1, KC.F2, KC.F3, KC.F4, KC.F5, KC.F6, KC.UNDS, KC.PLUS, KC.LCBR, KC.RCBR, KC.PIPE,
_______, KC.F7, KC.F8, KC.F9, KC.F10, KC.F11, KC.F12, _______, _______, KC.HOME, KC.END, _______,
_______, _______, _______, _______, _______, _______, _______, _______, KC.MNXT, KC.VOLD, KC.VOLU, KC.MPLY
]
]
if __name__ == '__main__':
keyboard.go()

View File

@ -0,0 +1,31 @@
# Boardsource 5x12 Ortho
![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)
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.
Retailers (USA)
5x12
[Boardsource](https://boardsource.xyz/store/5ecb802c86879c9a0c22db61)
Low Profile 5x12
[Boardsource](https://boardsource.xyz/store/5ecb822386879c9a0c22db84)
Extensions enabled by default
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [MediaKeys](/docs/en/media_keys.md) Control volume and other media functions
Common Extensions
- [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

@ -0,0 +1,25 @@
import board
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
from kmk.scanners import DiodeOrientation
class KMKKeyboard(_KMKKeyboard):
row_pins = (board.pins[1], pins[0], board.pins[4], board.pins[5], board.pins[6])
col_pins = (
board.pins[19],
board.pins[18],
board.pins[17],
board.pins[16],
board.pins[15],
board.pins[14],
board.pins[13],
board.pins[12],
board.pins[11],
board.pins[10],
board.pins[9],
board.pins[8],
)
diode_orientation = DiodeOrientation.COLUMNS
i2c = board.I2C

View File

@ -0,0 +1,47 @@
from kb import KMKKeyboard
from kmk.extensions.media_keys import MediaKeys
from kmk.keys import KC
from kmk.modules.layers import Layers
keyboard = KMKKeyboard()
media = MediaKeys()
layers_ext = Layers()
keyboard.modules = [layers_ext]
keyboard.extensions = [media]
# Cleaner key names
_______ = KC.TRNS
XXXXXXX = KC.NO
LOWER = KC.MO(1)
RAISE = KC.MO(2)
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.BSPC,
KC.TAB, KC.Q, KC.W, KC.E, KC.R, KC.T, KC.Y, KC.U, KC.I, KC.O, KC.P, KC.DEL,
KC.ESC, 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.N, KC.M, KC.COMM, KC.DOT, KC.SLSH, KC.ENT,
KC.PIPE, KC.LCTL, KC.LALT, KC.LGUI, LOWER, KC.SPC, KC.SPC, RAISE, KC.LEFT, KC.DOWN, KC.UP, KC.RGHT
],
[ #LOWER
KC.ESC, KC.F1, KC.F2, KC.F3, KC.F4, KC.F5, KC.F6, KC.F7, KC.F8, KC.F9, KC.F10, KC.F11,
_______, _______, _______, _______, _______, _______, _______, _______, KC.UP, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, KC.LEFT, KC.DOWN, KC.RGHT, _______, _______,
KC.CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, KC.MNXT, KC.VOLD, KC.VOLU, KC.MPLY
],
[ #RAISE
KC.GRV, KC.F1, KC.F2, KC.F3, KC.F4, KC.F5, KC.F6, KC.F7, KC.F8, KC.F9, KC.F10, KC.F11,
KC.ESC, KC.N1, KC.N2, KC.N3, KC.N4, KC.N5, KC.N6, KC.N7, KC.N8, KC.N9, KC.N0, KC.DEL,
_______, KC.N4, KC.N5, KC.N6, KC.PLUS, KC.F5, KC.F6, KC.MINS, KC.EQL, KC.LBRC, KC.RBRC, _______,
KC.ENT, KC.N7, KC.N8, KC.N9, KC.MINS, KC.F11, KC.F12, KC.NUHS, KC.NUBS, KC.MUTE, _______, KC.BSLS,
_______, _______, _______, _______, _______, _______, _______, _______, KC.MNXT, KC.VOLD, KC.VOLU, KC.MPLY
]
]
if __name__ == '__main__':
keyboard.go()

View File

@ -0,0 +1,21 @@
# Lulu
![Lulu](https://boardsource.imgix.net/c93fba70-71bc-11ec-bb73-09003ca81902.jpg?raw=true)
Based on the form factor of the Lily58, but with new features. The Lulu is a 58 key split keyboard design by Boardsource, featuring a 6x4 columnar stagger and 4 thumb cluster keys on each hand. The Lulu 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, and a premium case avaliable.
Hardware Availability: [PCB & Case Source](https://boardsource.xyz/store/5ec9df84c6b834480de6c3d0)
kb.py is designed to work with the PCBA version directly from them.
Retailers (USA)
[Boardsource](https://boardsource.xyz/store/5ec9df84c6b834480de6c3d0)
Extensions enabled by default
- [Split](/docs/en/split.md) Connects halves using a wire.
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [PEG_RGB](/docs/en/peg_rgb_matrix.md) Light it up!
- [PEG_OLED](/docs/en/peg_oled_display.md) Screens to see things on of course.
Common Extensions
- [Power](/docs/en/power.md) Powersaving features for battery life.
- [BLE_Split](/docs/en/split.md) Connects halves without wires (For the DIY version)

View File

@ -0,0 +1,73 @@
import board
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
from kmk.scanners import DiodeOrientation
from kmk.scanners.encoder import RotaryioEncoder
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
),
RotaryioEncoder(
pin_a=board.GP08,
pin_b=board.GP09,
# optional
divisor=4,
)
]
col_pins = (
board.GP02,
board.GP03,
board.GP04,
board.GP05,
board.GP06,
board.GP07,
)
row_pins = (board.GP14, board.GP15, board.GP16, board.GP17, board.GP18)
diode_orientation = DiodeOrientation.COLUMNS
rx = board.RX
tx = board.TX
rgb_pixel_pin = board.GP29
i2c = board.I2C
data_pin = board.RX
rgb_pixel_pin = board.GP29
i2c = board.I2C
SCL=board.SCL
SDA=board.SDA
encoder_a=board.GP08
encoder_b=board.GP09
# NOQA
# flake8: noqa
led_key_pos =[11,10,9 ,8 ,7 ,6 , 41,42,43,44,45,46,
12,13,14,15,16,17, 52,51,50,49,48,47,
23,22,21,20,19,18, 53,54,55,56,57,58,
24,25,26,27,28,29,30,65,64,63,62,61,60,59,
34,33,32,31,66,67,68,69,
3 ,4 ,5 , 40,39,38,
2 ,1 ,0 , 35,36,37
]
brightness_limit = 0.5
num_pixels = 70
# NOQA
# flake8: noqa
coord_mapping = [
0, 1, 2, 3, 4, 5, 37, 36, 35, 34, 33, 32,
6, 7, 8, 9, 10, 11, 43, 42, 41, 40, 39, 38,
12, 13, 14, 15, 16, 17, 49, 48, 47, 46, 45, 44,
18, 19, 20, 21, 22, 23, 29, 61, 55, 54, 53, 52, 51, 50,
25,26, 27, 28, 60, 59, 58, 57,
30,31, 62,63
]

View File

@ -0,0 +1,230 @@
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.holdtap import HoldTap
from kmk.modules.layers import Layers
from kmk.modules.split import Split, SplitSide, SplitType
keyboard = KMKKeyboard()
holdtap = HoldTap()
layers_ext = Layers()
keyboard.modules.append(layers_ext)
keyboard.modules.append(holdtap)
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=[
[85, 0, 255],
[0, 255, 234],
[0, 255, 234],
[0, 255, 234],
[0, 255, 234],
[0, 255, 234],
[0, 255, 234],
[0, 255, 234],
[0, 255, 234],
[0, 255, 234],
[0, 255, 234],
[85, 0, 255],
[85, 0, 255],
[0, 255, 234],
[0, 255, 234],
[0, 255, 234],
[0, 255, 234],
[0, 255, 234],
[0, 255, 234],
[0, 255, 234],
[0, 255, 234],
[0, 255, 234],
[0, 255, 234],
[85, 0, 255],
[85, 0, 255],
[0, 255, 234],
[0, 255, 234],
[0, 255, 234],
[0, 255, 234],
[0, 255, 234],
[0, 255, 234],
[0, 255, 234],
[0, 255, 234],
[0, 255, 234],
[0, 255, 234],
[85, 0, 255],
[85, 0, 255],
[0, 255, 234],
[0, 255, 234],
[0, 255, 234],
[0, 255, 234],
[0, 255, 234],
[85, 0, 255],
[85, 0, 255],
[0, 255, 234],
[0, 255, 234],
[0, 255, 234],
[0, 255, 234],
[0, 255, 234],
[85, 0, 255],
[85, 0, 255],
[85, 0, 255],
[85, 0, 255],
[0, 255, 234],
[0, 255, 234],
[85, 0, 255],
[85, 0, 255],
[85, 0, 255],
[85, 0, 255],
[0, 255, 234],
[0, 255, 234],
[0, 255, 234],
[0, 255, 234],
[85, 0, 255],
[85, 0, 255],
[0, 255, 234],
[0, 255, 234],
[0, 255, 234],
[0, 255, 234],
[85, 0, 255],
],
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.rx, data_pin2=keyboard.tx, uart_flip=False)
keyboard.modules.append(split)
keyboard.keymap = [
[
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.Y, KC.U, KC.I, KC.O, KC.P, KC.MINS,
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.COMMA, KC.DOT, KC.SLSH, KC.RSFT,
KC.LGUI, KC.MO(1), KC.LCTL, KC.SPC, KC.ENT, KC.MO(2), KC.BSPC, KC.RGUI,
# Encoders
KC.AUDIO_VOL_UP,
KC.AUDIO_VOL_DOWN,
KC.MEDIA_PREV_TRACK,
KC.MEDIA_NEXT_TRACK,
],
[
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.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.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,
# Encoders
KC.AUDIO_VOL_UP,
KC.AUDIO_VOL_DOWN,
KC.MEDIA_PREV_TRACK,
KC.MEDIA_NEXT_TRACK,
],
[
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.COLN, KC.DQT,
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.LGUI, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS,
KC.AUDIO_VOL_UP,
KC.AUDIO_VOL_DOWN,
KC.MEDIA_PREV_TRACK,
KC.MEDIA_NEXT_TRACK,
],
[
KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS,
KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS,
KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS,
KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS,
KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS,
# Encoders
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
],
[
KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS,
KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS,
KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS,
KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS,
KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS,
# Encoders
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
],
[
KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS,
KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS,
KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS,
KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS,
KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS,
# Encoders
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
],
[
KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS,
KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS,
KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS,
KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS,
KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS,
# Encoders
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
],
[
KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS,
KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS,
KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS,
KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS,
KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS,
# Encoders
KC.TRNS,
KC.TRNS,
KC.TRNS,
KC.TRNS,
],
]
if __name__ == '__main__':
keyboard.go(hid_type=HIDModes.USB)

View File

@ -0,0 +1,27 @@
# Microdox
![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.
Retailers (USA)
[Boardsource](https://boardsource.xyz/store/5f2e7e4a2902de7151494f92)
Extensions enabled by default
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [BLE_Split](/docs/en/split_keyboards.md) Connects halves without wires
- [HoldTap](/docs/en/holdtap.md) Allows mod keys to act as different keys when tapped.
Common Extensions
- [Split](/docs/en/split_keyboards.md) Connects halves using a wire
- [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

@ -0,0 +1,31 @@
import board
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
from kmk.scanners import DiodeOrientation
class KMKKeyboard(_KMKKeyboard):
col_pins = (
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
data_pin = board.pins[1]
rgb_pixel_pin = pins[0]
rgb_num_pixels = 12
i2c = board.I2C
# NOQA
# flake8: noqa
# fmt: off
coord_mapping = [
0, 1, 2, 3, 4, 20, 21, 22, 23, 24,
5, 6, 7, 8, 9, 25, 26, 27, 28, 29,
10, 11, 12, 13, 14, 30, 31, 32, 33, 34,
17, 18, 19, 35, 36, 37,
]

View File

@ -0,0 +1,55 @@
from kb import KMKKeyboard
from kmk.keys import KC
from kmk.modules.layers import Layers
from kmk.modules.split import Split, SplitSide, SplitType
keyboard = KMKKeyboard()
# TODO Comment one of these on each side
split_side = SplitSide.LEFT
split_side = SplitSide.RIGHT
split = Split(split_type=SplitType.BLE, split_side=split_side)
layers_ext = Layers()
keyboard.modules = [layers_ext, split]
# Cleaner key names
_______ = KC.TRNS
XXXXXXX = KC.NO
LOWER = KC.MO(2)
RAISE = KC.MO(1)
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.Q, KC.W, KC.E, KC.R, KC.T, KC.Y, KC.U, KC.I, KC.O, KC.P,\
KC.A, KC.S, KC.D, KC.F, KC.G, KC.H, KC.J, KC.K, KC.L, KC.SCLN,\
KC.Z, KC.X, KC.C, KC.V, KC.B, KC.N, KC.M, KC.COMM, KC.DOT, KC.SLSH,\
KC.LCTL, LOWER, KC.SPC, KC.BSPC, RAISE, KC.ENT,
],
[ #RAISE
KC.N1, KC.N2, KC.N3, KC.N4, KC.N5, KC.N6, KC.N7, KC.N8, KC.N9, KC.N0,\
KC.TAB, KC.LEFT, KC.DOWN, KC.UP, KC.RGHT, XXXXXXX, KC.MINS, KC.EQL, KC.LBRC, KC.RBRC,\
KC.LCTL, KC.GRV, KC.LGUI, KC.LALT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC.BSLS, KC.QUOT,\
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
],
[ #LOWER
KC.EXLM, KC.AT, KC.HASH, KC.DLR, KC.PERC, KC.CIRC, KC.AMPR, KC.ASTR, KC.LPRN, KC.RPRN,\
KC.ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC.UNDS, KC.PLUS, KC.LCBR, KC.RCBR,\
KC.CAPS, KC.TILD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC.PIPE, KC.DQT,\
XXXXXXX, XXXXXXX, XXXXXXX, KC.ENT, XXXXXXX, KC.DEL
]
]
if __name__ == '__main__':
keyboard.go()

33
boards/crkbd/README.md Normal file
View File

@ -0,0 +1,33 @@
# Corne Keyboard (CRKBD)
![Crkbd](https://boardsource.imgix.net/a90342e3-caa0-467c-bebd-d17f031d5210.jpg?raw=true)
![Crkbd](https://boardsource.imgix.net/9cbd31b7-3b37-42c6-919e-3be35a2578f6.jpg?raw=true)
A split keyboard with a 3x6 columnar stagger and 3 thumb keys.
Hardware Availability: [PCB & Case Source](https://github.com/foostan/crkbd)
Retailers (USA)
Corne
[Boardsource](https://boardsource.xyz/store/5ecc0f81eee64242946c988f)
Corne LP
[Boardsource](https://boardsource.xyz/store/5f2efc462902de7151495057)
Extensions enabled by default
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [RGB](/docs/en/rgb.md) Light it up
- [BLE_Split](/docs/en/split_keyboards.md) Connects halves without wires
Common Extensions
- [Split](/docs/en/split_keyboards.md) Connects halves using a wire
- [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
```

35
boards/crkbd/kb.py Normal file
View File

@ -0,0 +1,35 @@
import board
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
from kmk.quickpin.pro_micro.boardsource_blok 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],
)
row_pins = (
pins[6],
pins[7],
pins[8],
pins[9],
)
diode_orientation = DiodeOrientation.COLUMNS
data_pin = pins[1]
rgb_pixel_pin = pins[0]
i2c = board.I2C
# flake8: noqa
# fmt: off
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,
]

68
boards/crkbd/main.py Normal file
View File

@ -0,0 +1,68 @@
from kb import KMKKeyboard
from kmk.extensions.rgb import RGB
from kmk.keys import KC
from kmk.modules.layers import Layers
from kmk.modules.split import Split, SplitSide, SplitType
keyboard = KMKKeyboard()
# Adding extensions
rgb = RGB(pixel_pin=keyboard.rgb_pixel_pin, num_pixels=27, val_limit=100, hue_default=190, sat_default=100, val_default=5)
# TODO Comment one of these on each side
split_side = SplitSide.LEFT
split_side = SplitSide.RIGHT
split = Split(split_type=SplitType.BLE, split_side=split_side)
layers_ext = Layers()
keyboard.modules = [layers_ext, split]
keyboard.extensions = [rgb]
#
# Cleaner key names
_______ = KC.TRNS
XXXXXXX = KC.NO
LOWER = KC.MO(1)
RAISE = KC.MO(2)
ADJUST = KC.LT(3, KC.SPC)
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.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.N, KC.M, KC.COMM, KC.DOT, KC.SLSH, KC.RSFT,\
KC.LGUI, LOWER, ADJUST, KC.ENT, RAISE, KC.RALT,
],
[ #LOWER
KC.ESC, KC.N1, KC.N2, KC.N3, KC.N4, KC.N5, KC.N6, KC.N7, KC.N8, KC.N9, KC.N0, KC.BSPC,\
KC.LCTL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC.LEFT, KC.DOWN, KC.UP, KC.RIGHT, XXXXXXX, XXXXXXX,\
KC.LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\
KC.LGUI, LOWER, ADJUST, KC.ENT, RAISE, KC.RALT,
],
[ #RAISE
KC.ESC, KC.EXLM, KC.AT, KC.HASH, KC.DLR, KC.PERC, KC.CIRC, KC.AMPR, KC.ASTR, KC.LPRN, KC.RPRN, KC.BSPC,\
KC.LCTL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC.MINS, KC.EQL, KC.LCBR, KC.RCBR, KC.PIPE, KC.GRV,\
KC.LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC.UNDS, KC.PLUS, KC.LBRC, KC.RBRC, KC.BSLS, KC.TILD,\
KC.LGUI, LOWER, ADJUST, KC.ENT, RAISE, KC.RALT,
],
[ #ADJUST
RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\
XXXXXXX, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\
KC.LGUI, LOWER, ADJUST, KC.ENT, RAISE, KC.RALT,
]
]
if __name__ == '__main__':
keyboard.go()

View File

@ -0,0 +1,8 @@
# Crowboard
![crowboard](https://i.imgur.com/Rg7IYPw.jpg)
Single Board 34/36 Key Keyboard Based on Raspberry pi Pico
[Link to the Github repo](https://github.com/doesntfazer/CrowBoard)
You can Buy this keyboard at KeyboardDweebs.net

26
boards/crowboard/kb.py Normal file
View File

@ -0,0 +1,26 @@
import board
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
from kmk.scanners import DiodeOrientation
class KMKKeyboard(_KMKKeyboard):
col_pins = (
board.GP6,
board.GP7,
board.GP8,
board.GP9,
board.GP10,
board.GP18,
board.GP19,
board.GP20,
board.GP21,
board.GP22,
)
row_pins = (
board.GP14,
board.GP15,
board.GP16,
board.GP17,
)
diode_orientation = DiodeOrientation.COL2ROW

92
boards/crowboard/main.py Normal file
View File

@ -0,0 +1,92 @@
import board
from kb import KMKKeyboard
from kmk.keys import KC
from kmk.modules.holdtap import HoldTap
from kmk.modules.layers import Layers
from kmk.scanners import DiodeOrientation
keyboard = KMKKeyboard()
keyboard.modules.append(Layers())
holdtap = HoldTap()
keyboard.modules.append(holdtap)
NONE = KC.NO
QWERTY = KC.MO(0)
LOWER = KC.MO(1)
RAISE = KC.MO(2)
ADJUST = KC.MO(3)
CAE = KC.LCTL(KC.LALT(KC.END))
CAD = KC.LCTL(KC.LALT(KC.DEL))
ZSFT = KC.HT(KC.Z, KC.LSFT, prefer_hold=True, tap_interrupted=False, tap_time=3000)
SLSHSFT = KC.HT(KC.SLSH, KC.LSFT, prefer_hold=True, tap_interrupted=False, tap_time=3000)
ALCTL = KC.HT(KC.A, KC.LCTRL, prefer_hold=False, tap_interrupted=False, tap_time=150)
# flake8: noqa: E261
keyboard.keymap = [
[ # QWERTY
KC.Q, KC.W, KC.E, KC.R, KC.T, KC.Y, KC.U, KC.I, KC.O, KC.P,
ALCTL, KC.S, KC.D, KC.F, KC.G, KC.H, KC.J, KC.K, KC.L, KC.QUOT,
ZSFT, KC.X, KC.C, KC.V, KC.B, KC.N, KC.M, KC.COMM, KC.DOT, SLSHSFT,
NONE, NONE, KC.LCTL, LOWER, KC.SPACE, KC.BSPC, RAISE, KC.RALT, NONE, NONE,
],
[ # LOWER
KC.N1, KC.N2, KC.N3, KC.N4, KC.N5, KC.N6, KC.N7, KC.N8, KC.N9, KC.N0,
KC.TAB, KC.LEFT, KC.DOWN, KC.UP, KC.RIGHT, KC.TRNS, KC.MINUS, KC.EQUAL, KC.LBRC, KC.RBRC,
KC.LCTL, KC.GRAVE, KC.LGUI, KC.LALT, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.BSLS, KC.SCLN,
KC.NO, KC.NO, KC.TRNS, KC.TRNS, KC.TRNS, KC.ENTER, ADJUST, KC.TRNS, KC.NO, KC.NO,
],
[ # RAISE
KC.EXLM, KC.AT, KC.HASH, KC.DLR, KC.PERC, KC.CIRC, KC.AMPR, KC.ASTR, KC.LPRN, KC.RPRN,
KC.ESC, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.UNDS, KC.PLUS, KC.LCBR, KC.RCBR,
KC.CAPS, KC.TILDE, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.PIPE, KC.COLN,
KC.NO, KC.NO, KC.TRNS, ADJUST, KC.TRNS, KC.ENTER, KC.TRNS, KC.DEL, KC.NO, KC.NO,
],
[ # ADJUST
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.TRNS, KC.TRNS, KC.TRNS, CAE, CAD, CAD,
KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS, KC.TRNS,
KC.NO, KC.NO, KC.TRNS, KC.TRNS, KC.TRNS, KC.ENTER, KC.TRNS, KC.TRNS, KC.NO, KC.NO,
]
]
# Uncomment for Trackball
# from kmk.modules.pimoroni_trackball import Trackball, TrackballMode
# import busio as io
# i2c1 = io.I2C(scl=board.GP3, sda=board.GP2)
# trackball = Trackball(i2c1, mode=TrackballMode.MOUSE_MODE)
# keyboard.modules.append(trackball)
# trackball.set_rgbw(255, 255, 255, 30)
# trackball.set_red(20)
# trackball.set_green(100)
# trackball.set_blue(100)
# trackball.set_white(40)
# uncomment for Encoders
# from kmk.modules.encoder import EncoderHandler
# encoder_handler = EncoderHandler()
# keyboard.modules = [encoder_handler]
# encoder_handler.pins = ((board.GP12, board.GP13, None, False), (board.GP27, board.GP26, None, False),)
# encoder_handler.map = [(( KC.VOLD, KC.VOLU),(KC.VOLD, KC.VOLU),), # Layer 1
# ((KC.VOLD, KC.VOLU),(KC.VOLD, KC.VOLU),), # Layer 2
# ((KC.VOLD, KC.VOLU),(KC.VOLD, KC.VOLU),), # Layer 3
# ((KC.VOLD, KC.VOLU),(KC.VOLD, KC.VOLU),), # Layer 4
# ]
# keyboard.debug_enabled = True
if __name__ == '__main__':
keyboard.go()

View File

@ -0,0 +1,39 @@
# Ergo Travel
![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.
Hardware Availability: [PCB & Case Source](https://github.com/jpconstantineau/ErgoTravel/blob/master/OrderingInstructions.md)
Retailers (USA)
[Boardsource](https://boardsource.xyz/store/5eed23430883e03ef9a69d6a)
Retailers (Canada)
[BlueMicro Store (ErgoTravel's creator)](https://store.jpconstantineau.com/#/group/split_boards)
Extensions enabled by default
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [BLE_Split](/docs/en/split_keyboards.md) Connects halves without wires
- [MediaKeys](/docs/en/media_keys.md) Control volume and other media functions
Common Extensions
- [Split](/docs/en/split_keyboards.md) Connects halves using a wire
- [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
```

34
boards/ergo_travel/kb.py Normal file
View File

@ -0,0 +1,34 @@
import board
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
from kmk.scanners import DiodeOrientation
class KMKKeyboard(_KMKKeyboard):
row_pins = (pins[7], pins[8], pins[9], pins[10])
col_pins = (
pins[17],
pins[16],
pins[15],
pins[14],
pins[13],
pins[12],
pins[10],
)
diode_orientation = DiodeOrientation.COLUMNS
led_pin = pins[9]
rgb_pixel_pin = pins[0]
rgb_num_pixels = 12
data_pin = pins[1]
i2c = board.I2C
# NOQA
# flake8: noqa
# fmt: off
coord_mapping = [
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,
14, 15, 16, 17, 18, 19, 20, 48, 47, 46, 45, 44, 43, 42,
21, 22, 23, 24, 25, 26, 54, 53, 52, 51, 50, 49,
]

View File

@ -0,0 +1,59 @@
from kb import KMKKeyboard
from kmk.extensions.media_keys import MediaKeys
from kmk.keys import KC
from kmk.modules.layers import Layers
from kmk.modulessplit import Split, SplitSide, SplitType
keyboard = KMKKeyboard()
# TODO Comment one of these on each side
split_side = SplitSide.LEFT
split_side = SplitSide.RIGHT
split = Split(split_type=SplitType.BLE, split_side=split_side)
media = MediaKeys()
layers_ext = Layers()
keyboard.modules = [layers_ext, split]
keyboard.extensions = (media)
# Cleaner key names
_______ = KC.TRNS
XXXXXXX = KC.NO
LOWER = KC.MO(1)
RAISE = KC.MO(2)
ADJUST = KC.MO(3)
CALTDEL = KC.LCTL(KC.LALT(KC.DEL))
TSKMGR = KC.LCTL(KC.LSFT(KC.KC_ESC))
keyboard.keymap = [
[ #QWERTY
KC.ESC, KC.Q, KC.W, KC.E, KC.R, KC.T, KC.MINS, KC.EQL, KC.Y, KC.U, KC.I, KC.O, KC.P, KC.BSPC,\
KC.TAB, KC.A, KC.S, KC.D, KC.F, KC.G, KC.LBRC, KC.RBRC, 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.SPC, KC.SPC, KC.N, KC.M, KC.COMM, KC.DOT, KC.SLSH, KC.ENT,\
KC.LCTL, KC.LGUI, KC.LALT, ADJUST, LOWER, KC.SPC, KC.SPC, RAISE, KC.LEFT, KC.UP, KC.DOWN, KC.RGHT\
],
[ #LOWER
KC.TILD, KC.EXLM, KC.AT, KC.HASH, KC.DLR, KC.PERC, KC.HOME, KC.PGUP, KC.CIRC, KC.AMPR, KC.ASTR, KC.LPRN, KC.RPRN, KC.DEL,\
_______, KC.F1, KC.F2, KC.F3, KC.F4, KC.F5, KC.END , KC.PGDN, KC.F6, KC.UNDS, KC.PLUS, KC.LCBR, KC.RCBR, KC.BSLS,\
_______, KC.F7, KC.F8, KC.F9, KC.F10, KC.F11, KC.BSPC, KC.BSPC, KC.F12, _______, _______, KC.MUTE, _______, KC.PIPE,\
_______, _______, _______, _______, _______, KC.BSPC, KC.BSPC, _______, KC.MNXT, KC.VOLD, KC.VOLU, KC.MPLY\
],
[ #RAISE
KC.ESC, KC.N1, KC.N2, KC.N3, KC.N4, KC.N5, _______, _______, KC.N6, KC.N7, KC.N8, KC.N9, KC.N0, KC.DEL, \
_______, KC.N4, KC.N5, KC.N6, KC.PLUS, _______, _______, _______, _______, KC.MINS, KC.EQL, KC.LBRC, KC.RBRC, _______, \
KC.ENT, KC.N7, KC.N8, KC.N9, KC.MINS, _______, _______, _______, _______, KC.NUHS, KC.NUBS, KC.MUTE, _______, KC.BSLS, \
_______, KC.COMM, KC.N0, KC.DOT, _______, KC.BSPC, KC.BSPC, _______, KC.MNXT, KC.VOLD, KC.VOLU, KC.MPLY \
],
[ #ADJUST
TSKMGR, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, CALTDEL,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
]
]
if __name__ == '__main__':
keyboard.go()

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).

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

@ -0,0 +1,36 @@
# Ferris Sweep pinout translated from QMK repo
# CreditT: 2018-2020 ENDO Katsuhiro, David Philip Barr, Pierre Chevalier
import board
from storage import getmount
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
from kmk.quickpin.pro_micro.kb2040 import pinout as pins
from kmk.scanners.keypad import KeysScanner
# 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
]

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

@ -0,0 +1,115 @@
# 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.holdtap import HoldTap
from kmk.modules.layers import Layers
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()
holdtap = HoldTap()
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.HT(KC.A, KC.LSFT)
SCLN_SFT = KC.HT(KC.SCLN, KC.LSFT)
X_CTL = KC.HT(KC.X, KC.LCTRL)
C_ALT = KC.HT(KC.C, KC.LALT)
COM_ALT = KC.HT(KC.COMM, KC.LALT)
DOT_CTL = KC.HT(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

@ -0,0 +1,25 @@
# Faux Fox Keyboard (ffkb)
![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.
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/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.
## 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

@ -0,0 +1,39 @@
import board
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
from kmk.scanners import DiodeOrientation
class KMKKeyboard(_KMKKeyboard):
col_pins = (
board.P1_06,
board.P1_04,
board.P0_11,
board.P1_00,
board.P0_24,
board.P0_22,
board.MOSI,
board.MISO,
)
row_pins = (
board.P0_08,
board.P0_31,
board.P0_29,
board.P0_02,
board.P1_15,
board.SCK,
)
diode_orientation = DiodeOrientation.COLUMNS
rgb_pixel_pin = board.P0_06
rgb_num_pixels = 42
i2c = board.I2C
# flake8: noqa
coord_mapping = [
0, 1, 2, 3, 4, 5, 6, 7, 35, 28, 37, 31,
8, 9, 10, 11, 12, 13, 33, 14, 15, 26, 36, 29, 39,
16, 17, 18, 19, 20, 21, 22, 23, 34, 27, 30, 38,
41, 43, 44, 45, 46, 47, 42, 40,
]
encoder_pins = ((board.P0_20, board.P0_17, board.P0_09, False))

View File

@ -0,0 +1,70 @@
import board
import kb
from kmk.keys import KC
from kmk.modules.combos import Combos, Sequence
from kmk.modules.dynamic_sequences import DynamicSequences
from kmk.modules.layers import Layers
from kmk.modules.oneshot import OneShot
combos = Combos()
dyn_seq = DynamicSequences(
slots=1, # The number of sequence slots to use
timeout=60000, # Maximum time to spend in record or config mode before stopping automatically, milliseconds
key_interval=20, # Milliseconds between key events while playing
use_recorded_speed=False, # Whether to play the sequence at the speed it was typed
)
layers = Layers()
oneshot = OneShot()
keyboard = kb.KMKKeyboard()
keyboard.modules = [combos, dyn_seq, layers, oneshot]
keyboard.debug_enabled = False
# Convenience variables for the Keymap
_______ = KC.TRNS
xxxxxxx = KC.NO
L1_TAB = KC.LT(1, KC.TAB, prefer_hold=True)
L2_ENT = KC.LT(2, KC.ENT, prefer_hold=True)
OS_LSFT = KC.OS(KC.LSFT)
SEQ_REC = KC.RECORD_SEQUENCE()
SEQ_STP = KC.STOP_SEQUENCE()
SEQ_PLY = KC.PLAY_SEQUENCE()
combos.combos = [
Sequence((KC.LEADER, KC.A), KC.LCTL(KC.A)), # select All
Sequence((KC.LEADER, KC.T), KC.LCTL(KC.X)), # cuT
Sequence((KC.LEADER, KC.C), KC.LCTL(KC.C)), # Copy
Sequence((KC.LEADER, KC.P), KC.LCTL(KC.V)), # Paste
Sequence((KC.LEADER, KC.U), KC.LCTL(KC.Z)), # Undo
Sequence((KC.LEADER, KC.Y), KC.LCTL(KC.Y)), # redo
]
# flake8: noqa
keyboard.keymap = [
[ # 0: Colemak-DH letters
KC.ESC, KC.Q, KC.W, KC.F, KC.P, KC.B, KC.J, KC.L, KC.U, KC.Y, KC.SCLN, KC.LEADER,
KC.LCTL, KC.A, KC.R, KC.S, KC.T, KC.G, xxxxxxx, KC.M, KC.N, KC.E, KC.I, KC.O, KC.QUOT,
KC.LALT, KC.Z, KC.X, KC.C, KC.D, KC.V, KC.K, KC.H, KC.COMM, KC.DOT, KC.SLSH, KC.BSLS,
xxxxxxx, KC.LGUI, OS_LSFT, KC.BSPC, L1_TAB, KC.SPACE,L2_ENT, xxxxxxx,
],
[ # 1: Nav & Numbers
KC.TAB, KC.N1, KC.N2, KC.N3, KC.N4, KC.N5, KC.N6, KC.N7, KC.N8, KC.N9, KC.N0, KC.DEL,
_______, KC.LPRN, KC.LEFT, KC.UP, KC.RIGHT,KC.RPRN, _______, KC.GRV, KC.PLUS, KC.EQL, xxxxxxx, xxxxxxx, xxxxxxx,
_______, KC.LBRC, KC.LCBR, KC.DOWN, KC.RCBR, KC.RBRC, KC.TILD, KC.MINS, KC.UNDS, xxxxxxx, xxxxxxx, xxxxxxx,
_______, _______, _______, KC.DEL, _______, _______, _______, _______,
],
[ # 2: F-row & Board Functions
KC.F12, KC.F1, KC.F2, KC.F3, KC.F4, KC.F5, KC.F6, KC.F7, KC.F8, KC.F9, KC.F10, KC.F11,
_______, SEQ_REC, SEQ_PLY, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, SEQ_STP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______,
],
]
if __name__ == '__main__':
keyboard.go()

View File

@ -0,0 +1,40 @@
import board
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 intify_coordinate as ic
class KMKKeyboard(_KMKKeyboard):
col_pins = (
pins[11],
pins[10],
pins[9],
pins[8],
pins[7],
pins[6],
pins[10],
pins[12],
)
row_pins = (
pins[1],
pins[19],
pins[18],
pins[17],
pins[16],
pins[15],
)
diode_orientation = DiodeOrientation.COLUMNS
rgb_pixel_pin = pins[0]
rgb_num_pixels = 42
i2c = board.I2C
# flake8: noqa
# fmt: off
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(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(2, 0), ic(2, 1), ic(2, 2), ic(2, 3), ic(2, 4), ic(2, 5), ic(2, 6), ic(2, 7), ic(4, 2), ic(3, 3), ic(3, 6), ic(4, 6),
ic(5, 1), ic(5, 3), ic(5, 4), ic(5, 5), ic(5, 6), ic(5, 7), ic(5, 2), ic(5, 0)
]

View File

@ -0,0 +1,140 @@
import board
from kb_kb2040 import KMKKeyboard
from kmk.extensions.media_keys import MediaKeys
from kmk.extensions.rgb import RGB
from kmk.keys import KC
from kmk.modules.encoder import EncoderHandler
from kmk.modules.holdtap import HoldTap
from kmk.modules.layers import Layers
from kmk.modules.mouse_keys import MouseKeys
keyboard = KMKKeyboard()
keyboard.tap_time = 150
keyboard.debug_enabled = False
# Cleaner key names
_______ = KC.TRNS
XXXXXXX = KC.NO
# Adding extensions
rgb = RGB(pixel_pin=keyboard.rgb_pixel_pin, num_pixels=keyboard.rgb_num_pixels, val_limit=50, hue_default=190, sat_default=100, val_default=5)
holdtap = HoldTap()
layers = Layers()
media_keys = MediaKeys()
encoder_handler = EncoderHandler()
keyboard.modules = [layers, holdtap] #, encoder_handler]
keyboard.modules.append(MouseKeys())
keyboard.extensions = [rgb, media_keys]
encoder_handler.pins = ((board.D3, board.D2, board.D10, False))
ZOOM_IN = KC.LCTRL(KC.EQUAL)
ZOOM_OUT = KC.LCTRL(KC.MINUS)
LYR_BASE, LYR_NAV, LYR_SYM, LYR_SNAV, LYR_MEDIA, LYR_MOUSE = 0, 1, 2, 3, 4, 5
NAV_ENT = KC.LT(LYR_NAV, KC.ENT)
SYM_SPC = KC.LT(LYR_SYM, KC.SPC)
SNAV_TAB = KC.LT(LYR_SNAV, KC.TAB)
MEDIA_BSPC = KC.LT(LYR_MEDIA, KC.BSPC)
MOUSE_M = KC.LT(LYR_MOUSE, KC.M)
# HOMEROW MODS
LCTL_A = KC.HT(KC.A, KC.LCTRL)
LGUI_R = KC.HT(KC.R, KC.LGUI)
LALT_S = KC.HT(KC.S, KC.LALT)
LSFT_T = KC.HT(KC.T, KC.LSFT)
RSFT_N = KC.HT(KC.N, KC.RSFT)
RALT_E = KC.HT(KC.E, KC.RALT)
RGUI_I = KC.HT(KC.I, KC.RGUI)
RCTL_O = KC.HT(KC.O, KC.RCTRL)
# OTHER SHORTCUTS
BRWSR_LFT = KC.LCTRL(KC.LSFT(KC.TAB))
BRWSR_RGHT = KC.LCTRL(KC.TAB)
DESK_LEFT = KC.LCTRL(KC.LGUI(KC.LEFT))
DESK_RIGHT = KC.LCTRL(KC.LGUI(KC.RIGHT))
CAPSWORD = _______ # TODO: IMPLEMENT THIS
# SHIFT NAV
SFT_PGUP = KC.LSFT(KC.PGUP)
SFT_PGDN = KC.LSFT(KC.PGDN)
SFT_HOME = KC.LSFT(KC.HOME)
SFT_END = KC.LSFT(KC.END)
SFT_UP = KC.LSFT(KC.UP)
SFT_DOWN = KC.LSFT(KC.DOWN)
SFT_LEFT = KC.LSFT(KC.LEFT)
SFT_RGHT = KC.LSFT(KC.RIGHT)
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
RGB_ANI = KC.RGB_ANI
RGB_AND = KC.RGB_AND
RGB_M_P = KC.RGB_MODE_PLAIN
RGB_M_B = KC.RGB_MODE_BREATHE
RGB_M_R = KC.RGB_MODE_RAINBOW
RGB_M_BR = KC.RGB_MODE_BREATHE_RAINBOW
RGB_M_K = KC.RGB_MODE_KNIGHT
RGB_M_S = KC.RGB_MODE_SWIRL
keyboard.keymap = [
[ #COLEMAK-DH
KC.ESC, KC.Q, KC.W, KC.F, KC.P, KC.B, KC.J, KC.L, KC.U, KC.Y, KC.SCLN, KC.BSPC,
KC.CAPS, LCTL_A, LGUI_R, LALT_S, LSFT_T, KC.G, KC.MUTE, MOUSE_M, RSFT_N, RALT_E, RGUI_I, RCTL_O, KC.QUOT,
KC.SPC, KC.Z, KC.X, KC.C, KC.D, KC.V, KC.K, KC.H, KC.COMM, KC.DOT, KC.SLSH, KC.RSFT,
KC.MUTE, KC.DEL, NAV_ENT, SNAV_TAB, MEDIA_BSPC, SYM_SPC, KC.QUOT, KC.LCTRL(KC.BSPC)
],
[ #NAVIGATION
_______, KC.ESC, KC.PGUP, KC.UP, KC.PGDN, _______, KC.ASTR, KC.N7, KC.N8, KC.N9, KC.PLUS, _______,
_______, KC.HOME, KC.LEFT, KC.DOWN, KC.RIGHT, KC.END, _______, KC.SLSH, KC.N4, KC.N5, KC.N6, KC.MINS, _______,
_______, _______, _______, _______, _______, _______, KC.EQL, KC.N1, KC.N2, KC.N3, KC.N0, _______,
_______, _______, _______, _______, KC.BKSP, KC.SPC, KC.DOT, _______,
],
[ #SYMBOLS
_______, KC.EXLM, KC.AT, KC.HASH, KC.DLR, KC.PERC, KC.CIRC, KC.AMPR, KC.ASTR, KC.UNDS, KC.EQL, _______,
_______, KC.MINS, KC.LBRC, KC.LCBR, KC.LPRN, KC.LABK, _______, KC.RABK, KC.RPRN, KC.RCBR, KC.RBRC, KC.PLUS, _______,
_______, KC.CAPS, KC.GRV, BRWSR_LFT, DESK_LEFT, CAPSWORD, _______, DESK_RIGHT, BRWSR_RGHT, _______, KC.BSLS, _______,
_______, _______, KC.ENT, KC.TAB, _______, _______, _______, _______,
],
[ #SHIFT NAVIGATION
_______, _______, SFT_PGUP, SFT_UP, SFT_PGDN, _______, _______, _______, _______, _______, _______, _______,
_______, SFT_HOME, SFT_LEFT, SFT_DOWN, SFT_RGHT, SFT_END, _______, KC.VOLU, KC.MPLY, KC.MSTP, _______, _______, _______,
_______, _______, _______, _______, _______, KC.MUTE, KC.VOLD, KC.MPRV, KC.MNXT, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______,
],
[ #MEDIA
_______, RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, RGB_HUI, RGB_SAI, RGB_VAI, RGB_ANI, _______, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_BR, RGB_M_K, _______,
_______, _______, RGB_HUD, RGB_SAD, RGB_VAD, RGB_AND, RGB_M_S, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______,
],
[ #MOUSE
_______, KC.RESET, KC.MW_UP, KC.MS_UP, KC.MW_DN, _______, _______, _______, _______, _______, _______, _______,
_______, _______, KC.MS_LT, KC.MS_DN, KC.MS_RT, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______,
],
]
encoder_handler.map = [
((KC.VOLD, KC.VOLU, KC.MUTE)), # Layer 1
((ZOOM_OUT, ZOOM_IN, _______)), # Layer 2
((_______, _______, _______)), # Layer 3
((_______, _______, _______)), # Layer 4
((_______, _______, _______)), # Layer 5
((_______, _______, _______)), # Layer 6
]
if __name__ == '__main__':
keyboard.go()

View File

@ -0,0 +1,23 @@
# Ghirkin
![Gherkin](https://4.bp.blogspot.com/-sQ18-lNZXOc/WCzlTde-4PI/AAAAAAAB_JQ/qQrehAMG6DMKf3i4oj4mkmLGOfTUvb3KgCLcB/s640/IMG_20161116_122926.jpg)
A keyboard with only 30 keys.
Hardware Availability: [Gherkin project on 40% Keyboards](http://www.40percent.club/2016/11/gherkin.html)
Extensions enabled by default
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [HoldTap](/docs/en/holdtap.md) Allows mod keys to act as different keys when tapped.
- [LED](/docs/en/led.md) Light your keys up
Common Extensions
- [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

@ -0,0 +1,21 @@
import board
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
from kmk.scanners import DiodeOrientation
class KMKKeyboard(_KMKKeyboard):
row_pins = (pins[16], pins[15], pins[14], pins[13], pins[12])
col_pins = (
board.pins[10],
board.pins[9],
board.pins[8],
board.pins[7],
board.pins[6],
board.pins[5],
)
diode_orientation = DiodeOrientation.COLUMNS
led_pin = board.pins[11]
rgb_num_pixels = 0
i2c = board.I2C

View File

@ -0,0 +1,68 @@
from kb import KMKKeyboard
from kmk.extensions.led import LED
from kmk.keys import KC
from kmk.modules.holdtap import HoldTap
from kmk.modules.layers import Layers
keyboard = KMKKeyboard()
holdtap = HoldTap()
layers_ext = Layers()
led = LED()
keyboard.extensions = [led]
keyboard.modules = [layers_ext, holdtap]
# Cleaner key names
_______ = KC.TRNS
XXXXXXX = KC.NO
FN1_SPC = KC.LT(1, KC.SPC)
FN2_BSPC = KC.LT(2, KC.BSPC)
FN3_C = KC.LT(3, KC.C)
FN4_V = KC.LT(4, KC.V)
FN5_B = KC.LT(5, KC.B)
CTL_Z = KC.CTL_T(KC.Z)
ALT_X = KC.ALT(KC.X)
ALT_N = KC.ALT(KC.N)
CTL_M = KC.CTL(KC.M)
SFT_ENT = KC.SFT(KC.ENT)
BL_DEC = KC.BL_DEC
BL_INC = KC.BL_INC
keyboard.keymap = [
[
KC.Q, KC.W, KC.E, KC.R, KC.T, KC.Y, KC.U, KC.I, KC.O, KC.P,
KC.A, KC.S, KC.D, KC.F, KC.G, KC.H, KC.J, KC.K, KC.L, KC.ESC,
CTL_Z, ALT_X, FN3_C, FN4_V, FN2_BSPC, FN1_SPC, FN5_B, ALT_N, CTL_M, SFT_ENT
],
[
KC.N1, KC.N2, KC.N3, KC.N4, KC.N5, KC.N6, KC.N7, KC.N8, KC.N9, KC.N0,
KC.F1, KC.F2, KC.F3, KC.F4, KC.F5, KC.F6, KC.F7, KC.F8, KC.F9, KC.F10,
_______, _______, _______, _______, KC.DEL, _______, _______, _______, _______, _______
],
[
KC.EXLM, KC.AT, KC.HASH, KC.DLR, KC.PERC, KC.CIRC, KC.AMPR, KC.ASTR, KC.LPRN, KC.RPRN,
KC.F11, KC.F12, _______, _______, _______, _______, _______, _______, _______, KC.GRV,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
],
[
_______, _______, _______, _______, _______, KC.MINS, KC.EQL, KC.LBRC, KC.RBRC, KC.BSLS,
KC.TAB, _______, _______, _______, _______, KC.COMM, KC.DOT, KC.SLSH, KC.SCLN, KC.QUOT,
_______, _______, _______, _______, _______, _______, KC.LEFT, KC.DOWN, KC.UP, KC.RGHT
],
[
_______, _______, _______, _______, _______, KC.UNDS, KC.PLUS, KC.LCBR, KC.RCBR, KC.PIPE,
KC.TAB, _______, _______, _______, _______, KC.LABK, KC.RABK, KC.QUES, KC.COLN, KC.DQUO,
_______, _______, _______, _______, _______, _______, KC.HOME, KC.PGDN, KC.PGUP, KC.END
],
[
KC.CALC, KC.WHOM, KC.MAIL, KC.MYCM, _______, _______, _______, _______, _______, KC.PSCR,
_______, _______, _______, _______, _______, _______, _______, _______, BL_DEC, BL_INC,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
]
]
if __name__ == '__main__':
keyboard.go()

View File

@ -0,0 +1,23 @@
# Luddite
![Luddite](https://1.bp.blogspot.com/-GAAa-sMU_WU/W7uYLJJ8x1I/AAAAAAACS44/31n2z69BSboM4KT48YkNMJRYciC8LUMWgCLcBGAs/s640/a.jpg)
Luddite 60% keyboard with backlight and RGB underglow.
Hardware Availability: [Luddite project on 40% Keyboards](http://www.40percent.club/search/label/luddite)
Extensions enabled by default
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [RGB](/docs/en/rgb.md) RGB underglow
- [LED](/docs/en/led.md) Light your keys up
Common Extensions
- [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

@ -0,0 +1,33 @@
import board
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
from kmk.scanners import DiodeOrientation
class KMKKeyboard(_KMKKeyboard):
row_pins = (
pins[0],
board.pins[1],
board.pins[4],
board.pins[5],
board.pins[6],
board.pins[7],
board.pins[8],
board.pins[9],
)
col_pins = (
board.pins[19],
board.pins[18],
board.pins[17],
board.pins[16],
board.pins[15],
board.pins[14],
board.pins[13],
board.pins[12],
)
diode_orientation = DiodeOrientation.COLUMNS
led_pin = board.pins[11]
rgb_pixel_pin = board.pins[10]
rgb_num_pixels = 8
i2c = board.I2C

View File

@ -0,0 +1,41 @@
from kb import KMKKeyboard
from kmk.extensions.led import LED
from kmk.extensions.rgb import RGB
from kmk.keys import KC
from kmk.modules.layers import Layers
keyboard = KMKKeyboard()
_______ = KC.TRNS
XXXXXXX = KC.NO
rgb_ext = RGB(pixel_pin=keyboard.rgb_pixel_pin, num_pixels=keyboard.rgb_num_pixels)
led = LED()
layers_ext = Layers()
keyboard.extensions = [rgb_ext, led]
keyboard.modules = [layers_ext]
BASE = 0
FN1 = 1
keyboard.keymap = [
[
KC.GESC, KC.N1, KC.N2, KC.N3, KC.N4, KC.N5, KC.N6, KC.N7, KC.N8, KC.N9, KC.N0, KC.MINS, KC.EQL, KC.BSPC,
KC.TAB, KC.Q, KC.W, KC.E, KC.R, KC.T, KC.Y, KC.U, KC.I, KC.O, KC.P, KC.LBRC, KC.RBRC, KC.BSLS,
KC.CAPS, KC.A, KC.S, KC.D, KC.F, KC.G, KC.H, KC.J, KC.K, KC.L, KC.SCLN, KC.QUOT, KC.ENT,
KC.LSFT, KC.Z, KC.X, KC.C, KC.V, KC.B, KC.N, KC.M, KC.COMM, KC.DOT, KC.SLSH, KC.RSFT,
KC.LCTL, KC.LGUI, KC.LALT, KC.SPC, KC.RALT, KC.RGUI, KC.MO(FN1), KC.RCTL,
],
[
KC.GESC, 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.BSPC,
KC.RGB_TOG, _______, KC.UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, KC.LEFT, KC.DOWN, KC.RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
KC.LED_INC, KC.LED_DEC, KC.LED_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______,
KC.GRV, _______, _______, _______, _______, _______, _______, _______,
],
]
if __name__ == '__main__':
keyboard.go()

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- |
`-------------------------------------------------------------------------------------------------'
```

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

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

@ -0,0 +1,13 @@
# JPConstantineau's Batreus44: An Atreus44 clone with Low Profile Switches and Wireless Options!
![Batreus44](https://preview.redd.it/yu090ikxiou71.jpg?width=4032&format=pjpg&auto=webp&s=6da758f1ca439ecee912b35a709eacef9b019cd8)
44 Keys Low Profile Keyboard inspired from Keyboardio's Atreus with a socket for a NiceNano, BlueMicro840 or Pro Micro RP2040 and a place to solder in a Battery.
kb_BlueMicro840.py is designed to work with the BlueMicro840
Retailers (USA)
Extensions enabled by default
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [MediaKeys](/docs/en/media_keys.md) Control volume and other media functions

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.P0_15,
board.P0_17,
board.P0_20,
board.P0_13,
board.P0_24,
board.P0_09,
board.P0_03,
board.P1_13,
board.P0_02,
board.P0_29,
board.P0_26,
board.P0_30,
)
row_pins = (board.P0_28, board.P1_11, board.P0_10, board.P1_06)
diode_orientation = DiodeOrientation.COL2ROW

View File

@ -0,0 +1,15 @@
# JPConstantineau's PyKey60
![PyKey60](https://cdn.tindiemedia.com/images/resize/JYsH3WYq6GZD4xnvByhHXzwLhPo=/p/full-fit-in/2400x1600/i/556481/products/2021-09-17T19%3A53%3A16.118Z-PXL_20210917_194653430.jpg?1631883222)
A 60% RGB Keyboard PCB with Hot Swap Sockets, running CircuitPython on a RP2040 Soldered on board.
kb.py is designed to work with the [PyKey60 CircuitPython UF2](https://circuitpython.org/board/jpconstantineau_pykey60/)
Retailers (USA)
[BlueMicro Store on Tindie](https://www.tindie.com/products/jpconstantineau/pykey60-rgb-keyboard-pcb-with-a-rp2040/)
Extensions enabled by default
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [RGB](/docs/en/rgb.md) Light it up
- [MediaKeys](/docs/en/media_keys.md) Control volume and other media functions

View File

@ -0,0 +1,27 @@
import board
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
from kmk.scanners import DiodeOrientation
class KMKKeyboard(_KMKKeyboard):
col_pins = (
board.COL1,
board.COL2,
board.COL3,
board.COL4,
board.COL5,
board.COL6,
board.COL7,
board.COL8,
board.COL9,
board.COL10,
board.COL11,
board.COL12,
board.COL13,
board.COL14,
)
row_pins = (board.ROW1, board.ROW2, board.ROW3, board.ROW4, board.ROW5)
diode_orientation = DiodeOrientation.COL2ROW
rgb_pixel_pin = board.NEOPIXEL
rgb_num_pixels = 61

View File

@ -0,0 +1,15 @@
# JPConstantineau's GridMX47: A Planck clone
![GridMX47](https://cdn.tindiemedia.com/images/resize/alLUevg6WzBFO9uqkOwd5Lw5tJY=/p/fit-in/1370x912/filters:fill(fff)/i/556481/products/2021-10-26T23%3A29%3A50.131Z-PXL_20211026_230848859.jpg?1635265805)
47 Keys RGB Keyboard inspired from OLKB's Planck with a Raspberry Pi Pico
kb.py is designed to work with the [Pico CircuitPython UF2](https://circuitpython.org/board/raspberry_pi_pico/)
Retailers (USA)
[BlueMicro Store on Tindie](https://www.tindie.com/products/jpconstantineau/47-keys-rgb-keyboard-using-raspberry-pi-pico/)
Extensions enabled by default
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [RGB](/docs/en/rgb.md) Light it up
- [MediaKeys](/docs/en/media_keys.md) Control volume and other media functions

View File

@ -0,0 +1,25 @@
import board
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
from kmk.scanners import DiodeOrientation
class KMKKeyboard(_KMKKeyboard):
col_pins = (
board.GP11,
board.GP12,
board.GP13,
board.GP14,
board.GP15,
board.GP19,
board.GP20,
board.GP21,
board.GP22,
board.GP26,
board.GP27,
board.GP28,
)
row_pins = (board.GP7, board.GP8, board.GP9, board.GP10)
diode_orientation = DiodeOrientation.COL2ROW
rgb_pixel_pin = board.GP6
rgb_num_pixels = 47

View File

@ -0,0 +1,15 @@
# JPConstantineau's OffsetMX43: A 40% Staggered keyboard
![OffsetMX43](https://cdn.tindiemedia.com/images/resize/Y9o1UdtekCSE5Jp5FesV2Q3qvCE=/p/fit-in/653x435/filters:fill(fff)/i/556481/products/2021-10-26T23%3A40%3A53.317Z-PXL_20211026_234121626.jpg?1635266543)
43 Keys RGB Keyboard the same size as the GridMX47 but with staggered keys instead of ortholinear (keys in a grid). Uses a Raspberry Pi Pico as the controller.
kb.py is designed to work with the [Pico CircuitPython UF2](https://circuitpython.org/board/raspberry_pi_pico/)
Retailers (USA)
[BlueMicro Store on Tindie](https://www.tindie.com/products/jpconstantineau/43-keys-rgb-keyboard-using-raspberry-pi-pico/)
Extensions enabled by default
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [RGB](/docs/en/rgb.md) Light it up
- [MediaKeys](/docs/en/media_keys.md) Control volume and other media functions

View File

@ -0,0 +1,25 @@
import board
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
from kmk.scanners import DiodeOrientation
class KMKKeyboard(_KMKKeyboard):
col_pins = (
board.GP11,
board.GP12,
board.GP13,
board.GP14,
board.GP15,
board.GP19,
board.GP20,
board.GP21,
board.GP22,
board.GP26,
board.GP27,
board.GP28,
)
row_pins = (board.GP7, board.GP8, board.GP9, board.GP10)
diode_orientation = DiodeOrientation.COL2ROW
rgb_pixel_pin = board.GP6
rgb_num_pixels = 47

View File

@ -0,0 +1,15 @@
# JPConstantineau's VColChoc44: A Low Profile Atreus44 clone
![VColChoc44](https://cdn.tindiemedia.com/images/resize/tbqfM8nhMn0hoDM0ZkwYxM23mU0=/p/full-fit-in/2400x1600/i/556481/products/2021-10-15T15%3A33%3A13.288Z-qj04uaoo2ht71.jpg?1634287023)
44 Keys Low Profile RGB Keyboard inspired from Keyboardio's Atreus with a RP2040 Soldered on board.
kb.py is designed to work with the [PyKey60 CircuitPython UF2](https://circuitpython.org/board/jpconstantineau_pykey60/)
Retailers (USA)
[BlueMicro Store on Tindie](https://www.tindie.com/products/jpconstantineau/low-profile-44-keys-rgb-keyboard-pcb-with-a-rp2040/)
Extensions enabled by default
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [RGB](/docs/en/rgb.md) Light it up
- [MediaKeys](/docs/en/media_keys.md) Control volume and other media functions

View File

@ -0,0 +1,24 @@
import board
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
from kmk.scanners import DiodeOrientation
class KMKKeyboard(_KMKKeyboard):
col_pins = (
board.COL1,
board.COL2,
board.COL3,
board.COL4,
board.COL5,
board.COL6,
board.COL7,
board.COL8,
board.COL9,
board.COL10,
board.COL11,
)
row_pins = (board.ROW1, board.ROW2, board.ROW3, board.ROW4)
diode_orientation = DiodeOrientation.COL2ROW
rgb_pixel_pin = board.NEOPIXEL
rgb_num_pixels = 44

View File

@ -0,0 +1,16 @@
# JPConstantineau's VColMX44: An Atreus44 clone
![VColMX44](https://cdn.tindiemedia.com/images/resize/5oEyXgxteB6wYjXv8kFC1B3YqOk=/p/full-fit-in/2400x1600/i/556481/products/2021-10-20T05%3A14%3A24.776Z-PXL_20211016_060203733.jpg?1634681706v)
44 Keys RGB Keyboard inspired from Keyboardio's Atreus with a Raspberry Pi Pico
kb.py is designed to work with the [Pico CircuitPython UF2](https://circuitpython.org/board/raspberry_pi_pico/)
Retailers (USA)
[BlueMicro Store on Tindie](https://www.tindie.com/products/jpconstantineau/44-keys-rgb-keyboard-using-raspberry-pi-pico/)
Extensions enabled by default
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [RGB](/docs/en/rgb.md) Light it up
- [MediaKeys](/docs/en/media_keys.md) Control volume and other media functions

View File

@ -0,0 +1,24 @@
import board
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
from kmk.scanners import DiodeOrientation
class KMKKeyboard(_KMKKeyboard):
col_pins = (
board.GP20,
board.GP19,
board.GP18,
board.GP17,
board.GP16,
board.GP5,
board.GP4,
board.GP3,
board.GP2,
board.GP1,
board.GP0,
)
row_pins = (board.GP22, board.GP21, board.GP14, board.GP15)
diode_orientation = DiodeOrientation.COL2ROW
rgb_pixel_pin = board.GP28
rgb_num_pixels = 44

View File

@ -0,0 +1,21 @@
# Iris Rev 2
A split keyboard with a 4x6 layout with additional 4 thumb buttons
kb_converter.py is designed to work with an itsybitsy with converter board found [here](/hardware)
Extensions enabled by default
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [RGB](/docs/en/rgb.md) Light it up
- [BLE_Split](/docs/en/split_keyboards.md) Connects halves without wires
Common Extensions
- [Split](/docs/en/split_keyboards.md) Connects halves using a wire
- [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

39
boards/keebio/iris/kb.py Normal file
View File

@ -0,0 +1,39 @@
import board
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
from kmk.scanners import DiodeOrientation
class KMKKeyboard(_KMKKeyboard):
row_pins = (
board.pins[8],
board.pins[9],
board.pins[10],
board.pins[1],
board.pins[6],
)
col_pins = (
board.pins[17],
board.pins[16],
board.pins[15],
board.pins[14],
board.pins[13],
board.pins[12],
)
diode_orientation = DiodeOrientation.COLUMNS
led_pin = board.pins[11]
rgb_pixel_pin = pins[0]
rgb_num_pixels = 12
i2c = board.I2C
data_pin = board.pins[5]
# flake8: noqa
# fmt: off
coord_mapping = [
0, 1, 2, 3, 4, 5, 35, 34, 33, 32, 31, 30,
6, 7, 8, 9, 10, 11, 41, 40, 39, 38, 37, 36,
12, 13, 14, 15, 16, 17, 47, 46, 45, 44, 43, 42,
18, 19, 20, 21, 22, 23, 26, 56, 53, 52, 51, 50, 49, 48,
27, 28, 29, 59, 58, 57,
]

View File

@ -0,0 +1,40 @@
import board
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
from kmk.scanners import DiodeOrientation
class KMKKeyboard(_KMKKeyboard):
# Pin mappings for converter board found at hardware/README.md
# QMK: MATRIX_COL_PINS { F6, F7, B1, B3, B2, B6 }
# QMK: MATRIX_ROW_PINS { D7, E6, B4, D2, D4 }
col_pins = (board.A2, board.A3, board.A4, board.A5, board.SCK, board.MOSI)
row_pins = (board.D11, board.D10, board.D9, board.RX, board.D13)
diode_orientation = DiodeOrientation.COLUMNS
split_flip = True
split_offset = (6, 6, 6, 6, 6)
split_type = 'UART'
data_pin = board.SCL
data_pin2 = board.SDA
rgb_num_pixels = 12
i2c = board.I2C
rgb_pixel_pin = board.TX
led_pin = board.D7
# Buckle up friends, the bottom row of this keyboard is wild, and making
# our layouts match, visually, what the keyboard looks like, requires some
# surgery on the bottom two rows of coords
# Row index 3 is actually perfectly sane and we _could_ expose it
# just like the above three rows, however, visually speaking, the
# top-right thumb cluster button (when looking at the left-half PCB)
# is more inline with R3, so we'll jam that key (and its mirror) in here
# flake8: noqa
coord_mapping = [
0, 1, 2, 3, 4, 5, 36, 35, 34, 33, 32, 31,
6, 7, 8, 9, 10, 11, 42, 41, 40, 39, 38, 37,
12, 13, 14, 15, 16, 17, 48, 47, 46, 45, 44, 43,
18, 19, 20, 21, 22, 23, 26, 57, 54, 53, 52, 51, 50, 49,
28, 29, 30, 60, 59, 58,
]

View File

@ -0,0 +1,96 @@
from kb import KMKKeyboard
from kmk.consts import UnicodeMode
from kmk.extensions.rgb import RGB
from kmk.handlers.sequences import compile_unicode_string_sequences as cuss
from kmk.handlers.sequences import send_string
from kmk.keys import KC
from kmk.modules.layers import Layers
from kmk.modules.split import Split, SplitSide, SplitType
keyboard = KMKKeyboard()
keyboard.debug_enabled = False
keyboard.unicode_mode = UnicodeMode.LINUX
keyboard.tap_time = 750
emoticons = cuss({
# Emojis
'BEER': r'🍺',
'BEER_TOAST': r'🍻',
'FACE_CUTE_SMILE': r'😊',
'FACE_HEART_EYES': r'😍',
'FACE_JOY': r'😂',
'FACE_SWEAT_SMILE': r'😅',
'FACE_THINKING': r'🤔',
'FIRE': r'🔥',
'FLAG_CA': r'🇨🇦',
'FLAG_US': r'🇺🇸',
'HAND_CLAP': r'👏',
'HAND_HORNS': r'🤘',
'HAND_OK': r'👌',
'HAND_THUMB_DOWN': r'👎',
'HAND_THUMB_UP': r'👍',
'HAND_WAVE': r'👋',
'HEART': r'❤️',
'MAPLE_LEAF': r'🍁',
'POOP': r'💩',
'TADA': r'🎉',
'SHRUG_EMOJI': r'🤷',
# Emoticons, but fancier
'ANGRY_TABLE_FLIP': r'(ノಠ痊ಠ)ノ彡┻━┻',
'CELEBRATORY_GLITTER': r'+。:.゚ヽ(´∀。)ノ゚.:。+゚゚+。:.゚ヽ(*´∀)ノ゚.:。+゚',
'SHRUGGIE': r'¯\_(ツ)_/¯',
'TABLE_FLIP': r'(╯°□°)╯︵ ┻━┻',
})
WPM = send_string('Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Bibendum arcu vitae elementum curabitur vitae nunc sed. Facilisis sed odio morbi quis.')
_______ = KC.TRNS
xxxxxxx = KC.NO
HELLA_TD = KC.TD(
KC.A,
KC.B,
send_string('macros in a tap dance? I think yes'),
KC.TG(1),
)
rgb_ext = RGB(pixel_pin=keyboard.rgb_pixel_pin, num_pixels=keyboard.rgb_num_pixels)
layers_ext = Layers()
# TODO Comment one of these on each side
split_side = SplitSide.LEFT
split_side = SplitSide.RIGHT
split = Split(split_type=SplitType.BLE, split_side=split_side)
keyboard.extensions = [rgb_ext]
keyboard.modules = [split, layers_ext]
keyboard.keymap = [
[
KC.GESC, KC.N1, KC.N2, KC.N3, KC.N4, KC.N5, KC.N6, KC.N7, KC.N8, KC.N9, KC.N0, KC.BSPC,
KC.TAB, KC.QUOT, KC.COMM, KC.DOT, KC.P, KC.Y, KC.F, KC.G, KC.C, KC.R, KC.L, KC.SLSH,
KC.LGUI, KC.A, KC.O, KC.E, KC.U, KC.I, KC.D, KC.H, KC.T, KC.N, KC.S, KC.ENTER,
KC.LCTL, KC.SCLN, KC.Q, KC.J, KC.K, KC.X, KC.MO(2), KC.MO(1), KC.B, KC.M, KC.W, KC.V, KC.Z, KC.LALT,
KC.LEFT, KC.RGHT, KC.LSFT, KC.SPC, KC.UP, KC.DOWN,
],
[
_______, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, KC.F10, KC.F11, KC.F12, xxxxxxx, xxxxxxx, _______,
xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, KC.F7, KC.F8, KC.F9, xxxxxxx, xxxxxxx, KC.EQUAL,
xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, KC.INS, KC.F4, KC.F5, KC.F6, xxxxxxx, xxxxxxx, xxxxxxx,
xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, KC.NO, _______, KC.F1, KC.F2, KC.F3, xxxxxxx, xxxxxxx, _______,
KC.HOME, KC.END, _______, xxxxxxx, KC.PGUP, KC.PGDN,
],
[
KC.MUTE, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, KC.LBRC, KC.RBRC, KC.DEL,
xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, KC.BSLS,
KC.RGUI, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, KC.MINS,
xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, _______, KC.VOLU, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, KC.RALT,
KC.HOME, KC.END, _______, KC.VOLD, KC.PGUP, KC.PGDN,
],
]
if __name__ == '__main__':
keyboard.go()

View File

@ -0,0 +1,22 @@
# Levinson Rev 2
A split keyboard with a 4x6 layout
kb_converter.py is designed to work with an itsybitsy with converter board found [here](/hardware)
Extensions enabled by default
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [RGB](/docs/en/rgb.md) Light it up
- [BLE_Split](/docs/en/split_keyboards.md) Connects halves without wires
Common Extensions
- [Split](/docs/en/split_keyboards.md) Connects halves using a wire
- [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

@ -0,0 +1,24 @@
import board
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
from kmk.scanners import DiodeOrientation
class KMKKeyboard(_KMKKeyboard):
row_pins = (board.pins[6], board.pins[8], board.pins[9], board.pins[10])
col_pins = (
board.pins[17],
board.pins[16],
board.pins[15],
board.pins[14],
board.pins[13],
board.pins[12],
)
diode_orientation = DiodeOrientation.COLUMNS
rgb_pixel_pin = pins[0]
rgb_num_pixels = 12
led_pin = board.pins[11]
data_pin = board.pins[1]
i2c = board.I2C
powersave_pin = board.P0_13

View File

@ -0,0 +1,18 @@
import board
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
from kmk.scanners import DiodeOrientation
class KMKKeyboard(_KMKKeyboard):
col_pins = (board.A2, board.A3, board.A4, board.A5, board.SCK, board.MOSI)
row_pins = (board.D13, board.D11, board.D10, board.D9)
diode_orientation = DiodeOrientation.COLUMNS
split_type = 'UART'
split_flip = True
split_offsets = [6, 6, 6, 6, 6]
data_pin = board.SCL
data_pin2 = board.SDA
rgb_pixel_pin = board.TX
led_pin = board.D7

View File

@ -0,0 +1,133 @@
from kb import KMKKeyboard
from kmk.extensions.rgb import RGB
from kmk.keys import KC
from kmk.modules.layers import Layers
from kmk.modules.split import Split, SplitSide, SplitType
keyboard = KMKKeyboard()
rgb_ext = RGB(pixel_pin=keyboard.rgb_pixel_pin, num_pixels=keyboard.rgb_num_pixels)
layers_ext = Layers()
# TODO Comment one of these on each side
split_side = SplitSide.LEFT
split_side = SplitSide.RIGHT
split = Split(split_type=SplitType.BLE, split_side=split_side)
keyboard.extensions = [rgb_ext]
keyboard.modules = [layers_ext, split]
_______ = KC.TRNS
XXXXXXX = KC.NO
LOWER = KC.MO(3)
RAISE = KC.MO(4)
ADJUST = KC.MO(5)
keyboard.keymap = [
# Qwerty
# ,-----------------------------------------------------------------------------------.
# | Tab | Q | W | E | R | T | Y | U | I | O | P | Bak |
# |------+------+------+------+------+-------------+------+------+------+------+------|
# | Esc | A | S | D | F | G | H | J | K | L | ; | " |
# |------+------+------+------+------+------|------+------+------+------+------+------|
# | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
# |------+------+------+------+------+------+------+------+------+------+------+------|
# |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
# `-----------------------------------------------------------------------------------'
[
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.GESC, 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.N, KC.M, KC.COMM, KC.DOT, KC.SLSH, KC.ENT,
ADJUST, KC.LCTL, KC.LALT, KC.LGUI, LOWER, KC.SPC, KC.SPC, RAISE, KC.LEFT, KC.DOWN, KC.UP, KC.RGHT,
],
# Colemak
# ,-----------------------------------------------------------------------------------.
# | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bak |
# |------+------+------+------+------+-------------+------+------+------+------+------|
# | Esc | A | R | S | T | D | H | N | E | I | O | " |
# |------+------+------+------+------+------|------+------+------+------+------+------|
# | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
# |------+------+------+------+------+------+------+------+------+------+------+------|
# |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
# `-----------------------------------------------------------------------------------'
[
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.GESC, 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.K, KC.M, KC.COMM, KC.DOT, KC.SLSH, KC.ENT,
ADJUST, KC.LCTL, KC.LALT, KC.LGUI, LOWER, KC.SPC, KC.SPC, RAISE, KC.LEFT, KC.DOWN, KC.UP, KC.RGHT,
],
# Dvorak
# ,-----------------------------------------------------------------------------------.
# | Tab | " | , | . | P | Y | F | G | C | R | L | Bak |
# |------+------+------+------+------+-------------+------+------+------+------+------|
# | Esc | A | O | E | U | I | D | H | T | N | S | / |
# |------+------+------+------+------+------|------+------+------+------+------+------|
# | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
# |------+------+------+------+------+------+------+------+------+------+------+------|
# |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
# `-----------------------------------------------------------------------------------'
[
KC.TAB, KC.QUOT, KC.COMM, KC.DOT, KC.P, KC.Y, KC.F, KC.G, KC.C, KC.R, KC.L, KC.BSPC,
KC.GESC, 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.B, KC.M, KC.W, KC.V, KC.Z, KC.ENT,
ADJUST, KC.LCTL, KC.LALT, KC.LGUI, LOWER, KC.SPC, KC.SPC, RAISE, KC.LEFT, KC.DOWN, KC.UP, KC.RGHT,
],
# Lower
# ,-----------------------------------------------------------------------------------.
# | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del |
# |------+------+------+------+------+-------------+------+------+------+------+------|
# | Del | F1 | F2 | F3 | F4 | F5 | F6 | . | + | | \ | | |
# |------+------+------+------+------+------|------+------+------+------+------+------|
# | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter |
# |------+------+------+------+------+------+------+------+------+------+------+------|
# | | | | | | | | Next | Vol- | Vol+ | Play |
# `-----------------------------------------------------------------------------------'
[
KC.TILD, KC.EXLM, KC.AT, KC.HASH, KC.DLR, KC.PERC, KC.CIRC, KC.AMPR, KC.ASTR, KC.LPRN, KC.RPRN, KC.DEL,
KC.DEL, KC.F1, KC.F2, KC.F3, KC.F4, KC.F5, KC.F6, KC.UNDS, KC.PLUS, KC.LCBR, KC.RCBR, KC.PIPE,
_______, KC.F7, KC.F8, KC.F9, KC.F10, KC.F11, KC.F12, KC.NUHS, KC.NUBS, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, KC.MNXT, KC.VOLD, KC.VOLU, KC.MPLY,
],
# Raise
# ,-----------------------------------------------------------------------------------.
# | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del |
# |------+------+------+------+------+-------------+------+------+------+------+------|
# | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
# |------+------+------+------+------+------|------+------+------+------+------+------|
# | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter |
# |------+------+------+------+------+------+------+------+------+------+------+------|
# | | | | | | | | Next | Vol- | Vol+ | Play |
# `-----------------------------------------------------------------------------------'
[
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.DEL, KC.F1, KC.F2, KC.F3, KC.F4, KC.F5, KC.F6, KC.MINS, KC.EQL, KC.LBRC, KC.RBRC, KC.BSLS,
_______, KC.F7, KC.F8, KC.F9, KC.F10, KC.F11, KC.F12, KC.NUHS, KC.NUBS, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, KC.MNXT, KC.VOLD, KC.VOLU, KC.MPLY,
],
# Adjust
# ,-----------------------------------------------------------------------------------.
# | | Reset|RGB Tg|RGB Md|Hue Up|Hue Dn|Sat Up|Sat Dn|Val Up|Val Dn| | Del |
# |------+------+------+------+------+-------------+------+------+------+------+------|
# | | | | | | | |Qwerty|Colemk|Dvorak| | |
# |------+------+------+------+------+------|------+------+------+------+------+------|
# | | | | | | | | | | | | |
# |------+------+------+------+------+------+------+------+------+------+------+------|
# | | | | | | | | | | | |
# `-----------------------------------------------------------------------------------'
[
_______, _______, KC.RGB.TOG, KC.RGB.MOD, KC.RGB.HUD, KC.RGB.HUI, KC.RGB.SAD, KC.RGB.SAI, KC.RGB.VAD, KC.RGB.VAI, _______, KC.DEL,
_______, _______, _______, _______, _______, _______, _______, KC.DF(0), KC.DF(1), KC.DF(2), _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
],
]
if __name__ == '__main__':
keyboard.go()

View File

@ -0,0 +1,22 @@
# Nyquist Rev 2
A split keyboard with a 5x6 layout
kb_converter.py is designed to work with an itsybitsy with converter board found [here](/hardware)
Extensions enabled by default
- [Layers](/docs/en/layers.md) Need more keys than switches? Use layers.
- [RGB](/docs/en/rgb.md) Light it up
- [BLE_Split](/docs/en/split_keyboards.md) Connects halves without wires
Common Extensions
- [Split](/docs/en/split_keyboards.md) Connects halves using a wire
- [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

@ -0,0 +1,29 @@
import board
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
from kmk.quickpin.pro_micro.boardsource_blok import pinout as pins
from kmk.scanners import DiodeOrientation
class KMKKeyboard(_KMKKeyboard):
row_pins = (
board.pins[6],
board.pins[8],
board.pins[9],
board.pins[10],
board.pins[11],
)
col_pins = (
board.pins[1],
board.pins[18],
board.pins[17],
board.pins[16],
board.pins[15],
board.pins[14],
)
diode_orientation = DiodeOrientation.COLUMNS
rgb_pixel_pin = pins[0]
rgb_num_pixels = 12
data_pin = board.pins[1]
led_pin = board.pins[12]
i2c = board.I2C

View File

@ -0,0 +1,15 @@
import board
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
from kmk.scanners import DiodeOrientation
class KMKKeyboard(_KMKKeyboard):
col_pins = (board.RX, board.A1, board.A2, board.A3, board.A4, board.A5)
row_pins = (board.D13, board.D11, board.D10, board.D9, board.D7)
diode_orientation = DiodeOrientation.COLUMNS
data_pin = board.SCL
rgb_num_pixels = 12
rgb_pixel_pin = board.TX
data_pin2 = board.SDA

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