Compare commits

...

159 Commits

Author SHA1 Message Date
Dasky
47bc02b2ff Force CPI update using timer when using split pointing. (#23545) 2024-05-17 22:59:45 +01:00
Joel Challis
340be4bae3 Resolve home directory in userspace config (#23730) 2024-05-17 00:06:19 +01:00
Vertex-kb
eb5172f4b5 [Keyboard] Add cycle7 (#23290)
* Add files via upload

* Update keyboards/vertex/cycle7/readme.md

Co-authored-by: Less/Rikki <86894501+lesshonor@users.noreply.github.com>

* Update keyboards/vertex/cycle7/mcuconf.h

Co-authored-by: Less/Rikki <86894501+lesshonor@users.noreply.github.com>

* Update keyboards/vertex/cycle7/halconf.h

Co-authored-by: Less/Rikki <86894501+lesshonor@users.noreply.github.com>

* Update keyboards/vertex/cycle7/info.json

Co-authored-by: Less/Rikki <86894501+lesshonor@users.noreply.github.com>

* Update keyboards/vertex/cycle7/info.json

Co-authored-by: Less/Rikki <86894501+lesshonor@users.noreply.github.com>

* Update keyboards/vertex/cycle7/info.json

Co-authored-by: Less/Rikki <86894501+lesshonor@users.noreply.github.com>

* Update keyboards/vertex/cycle7/info.json

Co-authored-by: Less/Rikki <86894501+lesshonor@users.noreply.github.com>

* Update keyboards/vertex/cycle7/keymaps/default/keymap.c

Co-authored-by: Less/Rikki <86894501+lesshonor@users.noreply.github.com>

* Update keyboards/vertex/cycle7/keymaps/via/keymap.c

Co-authored-by: Less/Rikki <86894501+lesshonor@users.noreply.github.com>

* Update keyboards/vertex/cycle7/config.h

Co-authored-by: Less/Rikki <86894501+lesshonor@users.noreply.github.com>

* Add files via upload

* Update info.json

* Add files via upload

* Update keyboards/vertex/cycle7/keymaps/default/keymap.c

Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>

* Update keyboards/vertex/cycle7/keymaps/via/keymap.c

Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>

* Update keyboards/vertex/cycle7/keymaps/via/keymap.c

Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>

* Update keyboards/vertex/cycle7/keymaps/default/keymap.c

Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>

* Update keyboards/vertex/cycle7/info.json

Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>

* Update keyboards/vertex/cycle7/info.json

Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>

* Update keyboards/vertex/cycle7/info.json

Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>

---------

Co-authored-by: Less/Rikki <86894501+lesshonor@users.noreply.github.com>
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
2024-05-14 22:06:17 -06:00
Nick Brassel
501f988666 [CLI] Fixup return code for qmk userspace-compile. (#23720) 2024-05-15 11:31:14 +10:00
Cipulot
fcbbaf4485 Fix for RGB color override and brightness for EC Type K (#23703)
Fix for RGB color override and brightness
2024-05-13 12:20:47 -06:00
leep-frog
6d222b71c6 Add housekeeping execution to unit tests (#22999) 2024-05-13 18:15:52 +01:00
Vino Rodrigues
8c05254a68 [Bug][Keyboard] Fix encoder resolution issue with Binepad BNK9 (#23707) 2024-05-13 10:33:25 +01:00
フィルターペーパー
d09ea04fa1 [Doc] Revise squeezing AVR (#23665)
* Note AVR's flash space
* Include guards for magic functions
* Remove mention of silicon shortage
* Demote an unavailable controller
2024-05-12 00:33:01 +01:00
Joel Challis
a8e9d4f207 Add embed to docs capabilities (#23698) 2024-05-12 03:26:11 +10:00
Ryan
af4a806e3f qmk find: Fix typo in filter logging (#23693) 2024-05-11 10:03:16 +01:00
Alexandr
16557f9975 add example for c2json command (#23061) 2024-05-07 12:51:46 +01:00
Nick Brassel
69640365f8 [CI] Fail workflow if there were build failures (#23678)
More whack-a-mole
2024-05-07 10:02:16 +01:00
Nick Brassel
a58906ceb3 [CI] Use existing repo variables instead (#23676) 2024-05-07 12:23:56 +10:00
Nick Brassel
02737307ff [CI] Allow secrets to propagate from parent to child workflow. (#23675) 2024-05-07 08:45:17 +10:00
dependabot[bot]
834d03b577 Bump geekyeggo/delete-artifact from 4 to 5 (#23674)
Bumps [geekyeggo/delete-artifact](https://github.com/geekyeggo/delete-artifact) from 4 to 5.
- [Release notes](https://github.com/geekyeggo/delete-artifact/releases)
- [Changelog](https://github.com/GeekyEggo/delete-artifact/blob/main/CHANGELOG.md)
- [Commits](https://github.com/geekyeggo/delete-artifact/compare/v4...v5)

---
updated-dependencies:
- dependency-name: geekyeggo/delete-artifact
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-06 21:00:27 +01:00
Nick Brassel
dca7c3f86f Reworked CI builds for master/develop. (#23182) 2024-05-06 08:24:53 +01:00
Nick Brassel
7fc552632e Add page for capabilties used by docs site. (#23428) 2024-05-05 11:38:31 +01:00
Alexei Robyn
e3e587fc74 Add support for Smart 68 keyboard (#23043) 2024-05-04 18:38:32 -07:00
James Young
8075003e60 ZSA Voyager Layout Fix (#23651) 2024-05-03 06:11:23 +01:00
James Young
257319f9ff Tomak: Layout Data Correction (#23649)
Corrects the key size and positioning for position [8, 7] on all
layouts.
2024-05-03 05:07:43 +01:00
Andrew Kannan
e3fed98ecb [Keyboard] Add Petrichor Keyboard (#23413)
Co-authored-by: jack <0x6a73@protonmail.com>
2024-05-02 17:42:33 -07:00
yiancar
26d444c616 [Keyboard] NK Classic TKL (#23435)
* First commit

* Fix keycode range and color on indicator

* bit of cleanup

* prettify

* Update keyboards/novelkeys/nk_classic_tkl/keymaps/default/keymap.c

Co-authored-by: Joel Challis <git@zvecr.com>

* Update keyboards/novelkeys/nk_classic_tkl/info.json

Co-authored-by: Joel Challis <git@zvecr.com>

* Update keyboards/novelkeys/nk_classic_tkl/info.json

Co-authored-by: Joel Challis <git@zvecr.com>

* readme fix

---------

Co-authored-by: yiancar <yiancar@gmail.com>
Co-authored-by: Joel Challis <git@zvecr.com>
2024-05-02 23:21:01 +01:00
Nick Brassel
9a4f39b738 clangd enhancements. (#23310) 2024-05-02 20:08:41 +10:00
James Young
29a4e5c50b N86: Layout Data Correction (#23644)
* Correct `LAYOUT_all` data

Corrects incorrect key sizes and positioning.

* Correct `LAYOUT_tkl_ansi_tsangan` data

Corrects incorrect matrix assignments on the bottom row.

* Correct `LAYOUT_tkl_ansi_tsangan_split_bs_rshift` data

Corrects incorrect matrix assignments on the bottom row.

* Set `LAYOUT_all` as an alias

Sets `LAYOUT_all` as an alias for
`LAYOUT_tkl_ansi_tsangan_split_bs_rshift`, because the layout and matrix
data for these two macros is identical.
2024-05-02 03:02:38 -07:00
Duncan Sutherland
337776105d add 60_iso_arrow and arrow_split_bs Community Layouts (#22556) 2024-05-01 12:27:40 -07:00
Duncan Sutherland
7b838f330f add tkl_(ansi|iso)_wkl* community layouts (#21809)
* update layouts/default/readme.md

* add tkl_wkl layouts to layouts/default

* amend layouts/default/readme.md

* `tsangan_wkl` to `wkl`

* Update readme.md

* update keymap.c

* local testing corrections applied

* add layouts/community readmes

* minor text correction(s)

* Apply suggestions from code review

* further copyright header changes
2024-05-01 12:02:03 -07:00
josh-l-wang
8753ae354b add Bruce le Clavier (#23640) 2024-05-01 00:05:45 -07:00
era
5f755b9822 [Keyboard] Add N87 (#23457) 2024-04-30 23:50:53 -07:00
James Young
0a3c486476 Epomaker Tide 65: Layout Data Cleanup (#23643) 2024-04-30 23:43:43 -07:00
Druah
8fbdc45648 [Keyboard] Add DK Saver Redux (#23510) 2024-04-30 23:42:43 -07:00
Joy Lee
719c99afa1 [Keyboard] Add skiller_sgk50_s4 keyboard (#23636)
Co-authored-by: wb <wb@westberrytech.com>
Co-authored-by: jack <0x6a73@protonmail.com>
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
2024-04-30 23:35:58 -07:00
josh-l-wang
8129b73d8a [Keyboard] add Bruce the keyboard (#23639) 2024-04-30 23:35:39 -07:00
Ivan Gromov
9289d934b0 [Keyboard] Add imi60 (#23570)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2024-04-30 23:32:35 -07:00
Simon
94e9bb406b [Keyboard] 3x3macropad (#23594)
Co-authored-by: jack <0x6a73@protonmail.com>
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
2024-04-30 23:31:23 -07:00
Cipulot
31c81d432c Add EC980C (#23172) 2024-04-30 14:32:08 -04:00
Cipulot
69acadf967 Add Chroma Support (#22889)
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2024-04-30 18:43:06 +01:00
Cipulot
900bec6211 Add EC Menhir (#23175) 2024-04-30 18:41:29 +01:00
Cipulot
822ba1edfa Add EC Vero (#23176) 2024-04-30 18:40:40 +01:00
Cipulot
d21363325d Add EC Dolice (#23178) 2024-04-30 18:39:50 +01:00
Cipulot
3377813f5d Add EC660C (#23171) 2024-04-30 18:38:12 +01:00
Cipulot
a426abf017 Add EC TKL (#23177) 2024-04-30 18:36:28 +01:00
Cipulot
4e9967557e Add EC Type-B (#23170) 2024-04-30 18:35:40 +01:00
Cipulot
636c96ad25 Add EC Virgo (#23173)
Co-authored-by: jack <0x6a73@protonmail.com>
2024-04-30 18:34:37 +01:00
Duncan Sutherland
e2618dc35c Uniform ISO Enter key sequence in JIS Community Layouts (#23181) 2024-04-30 01:54:05 -07:00
Joe Scotto
f215da3b7c Add ScottoWing keyboard (#23513)
Co-authored-by: jack <0x6a73@protonmail.com>
2024-04-29 19:50:18 -07:00
josh-l-wang
4f4602abd5 [Keyboard] Vault35 WKL universal (#23519) 2024-04-29 19:49:34 -07:00
Stefan Gluszek
b99e09ee0e [Keyboard] Fatotesa - custom asymmetric split keyboard (#23528)
Co-authored-by: jack <0x6a73@protonmail.com>
2024-04-29 19:45:46 -07:00
Alabahuy
284e29d4a1 [Keyboard] add jaykeeb jk65 (#23536) 2024-04-29 19:42:32 -07:00
era
ae8458e12d [Keyboard] Add SIRIND TOMAK (#23554)
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: jack <0x6a73@protonmail.com>
Co-authored-by: Less/Rikki <86894501+lesshonor@users.noreply.github.com>
2024-04-29 19:32:43 -07:00
Stephon Parker
c94c6fcc25 [Keyboard] Add MECHWILD BB65 (#23581)
Co-authored-by: jack <0x6a73@protonmail.com>
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
2024-04-29 18:46:48 -07:00
Florent Linguenheld
cc35aaadbf Add Chew keyboard (#23628) 2024-04-29 18:40:01 -07:00
Ming-Gih Lam
fd32861c9f Masonry keyboard support (#23597) 2024-04-29 18:39:29 -07:00
Richard Dawe
4f087591a8 Add YMDK YMD62 ISO PCB (#23629) 2024-04-29 18:36:32 -07:00
Nick Brassel
e99b7f240a Remove broken CI workflow (#23631) 2024-04-28 21:12:14 +10:00
Sergey Vlasov
2224a768d5 Fix encoder breakage with 4 or more encoders (#23595) 2024-04-27 09:28:29 +10:00
Jay Greco
2893038fda nullbitsco/snap: once again reduce size of bongo_reactive (#23284) 2024-04-25 18:02:48 -06:00
Nick Brassel
1fa84ea83c Fix up license check path. (#23571) 2024-04-23 19:38:47 +10:00
Nick Brassel
33c453d771 PR Checklist: explain wireless requirements. (#23584) 2024-04-23 19:38:08 +10:00
Ivan Gromov
e807bb7e37 Add Lisa keyboard (#23575)
Co-authored-by: jack <0x6a73@protonmail.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2024-04-22 08:22:36 -06:00
dependabot[bot]
ac2424fec6 Bump JamesIves/github-pages-deploy-action from 4.5.0 to 4.6.0 (#23548)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-22 02:09:11 +01:00
Santosh Kumar
2693d6fd84 [sofle] Fix layout order affecting messed up lower/raise/adjust layer (#23555) 2024-04-19 01:59:14 +01:00
Alabahuy
f75e66dd19 add jaykeeb joker (#23535) 2024-04-18 18:16:43 -06:00
yiancar
aa15b64f55 [Keyboard] Keycult 65 (#23485)
Co-authored-by: yiancar <yiancar@gmail.com>
2024-04-17 16:57:21 +01:00
suikagiken
c25dfe543b [Keyboard] Add suika85ergo (#23380) 2024-04-17 07:46:20 -06:00
Epomaker
b31ebe789d [Keyboard] Add Epomaker tide65 (#23356)
Co-authored-by: 岩弈 <oncwnuItq3UWm0BoCNj7YclFsdYs@git.weixin.qq.com>
Co-authored-by: yanyi24 <yanyi9399@outlook.com>
2024-04-17 07:44:53 -06:00
Drashna Jaelre
45d60214f4 [Keyboard] ZSA Voyager (#22181)
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: László Bácsi <lackac@lackac.hu>
Co-authored-by: Joel Challis <git@zvecr.com>
2024-04-17 08:55:40 +10:00
Andrew Kannan
9baafef968 Swap PID and VID on is0gr in QMK (#23458) 2024-04-14 23:00:19 +10:00
Logan Foster
1a831a01b7 Adjusted Compensator on-state and keymaps (#23509) 2024-04-13 23:12:14 -06:00
era
de4d28cd60 [Keyboard] Add N8X (#23444)
Co-authored-by: jack <0x6a73@protonmail.com>
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
2024-04-10 22:48:32 -06:00
era
f73e69f56d [Keyboard] Add N86 (#23454) 2024-04-10 22:47:14 -06:00
Draic
cd0043de8f Fix Layout_Arrow 3rd key in bottom row (#23443)
Co-authored-by: v <v@phux.dev>
2024-04-08 16:47:11 +01:00
Felix Teutsch
b0e948c380 Update hand_wire.md (#23429) 2024-04-06 16:57:12 -06:00
yiancar
36ae585468 [Keyboard] Add Skelett60 (#23409)
Co-authored-by: yiancar <yiancar@gmail.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
2024-04-06 09:43:20 +01:00
James Young
b9b8ff8302 Fix malformed JSON in layouts/default/ortho_5x10/info.json (#23414) 2024-04-04 07:44:20 +01:00
Taro Hayashi
c70ebd4a0e Fix pointing_device_set_cpi_on_side() (#23391)
Co-authored-by: Less/Rikki <86894501+lesshonor@users.noreply.github.com>
2024-04-03 20:39:02 -07:00
Ryan
2a4c746718 handwired/technicpad: fix keyboard in keymaps (#23408) 2024-04-04 10:11:45 +11:00
Ryan
b108524314 merge/um80: remove pointless empty layers (#23398) 2024-04-02 16:05:32 +01:00
Cipulot
d4d8b0c6d3 Add EC Type-K (#23193) 2024-04-01 17:49:46 -04:00
Cipulot
8757a19375 Fix in 60_iso_wkl_split_bs_rshift diagram (#22654) 2024-04-01 22:45:09 +01:00
Cipulot
5fc4e331bd Add MNK 65 EC (#23168) 2024-04-01 17:44:16 -04:00
Cipulot
81b5ae9bdd Add MNK 60 EC (#23167)
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
2024-04-01 17:42:21 -04:00
SmollChungus
73e3053e25 [Keyboard] Add rose75 (#22968)
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: jack <0x6a73@protonmail.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2024-04-01 13:32:21 -06:00
Joel Challis
319d9aa7b9 Fix 'qmk compile' mass_compile execution (#23296) 2024-03-31 12:23:40 +01:00
Joy Lee
e9f187f612 [Keyboard] Add skiller_skg50_s2 (#23364)
Co-authored-by: wb <wb@westberrytech.com>
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
Co-authored-by: jack <0x6a73@protonmail.com>
2024-03-30 19:07:03 -06:00
c0ldbru
72ec742d2c [Keyboard] Add rot13labs hackboard (#23218)
Co-authored-by: c0ldbru <c0ldbrusec@gmail.com>
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
2024-03-30 11:52:40 -06:00
Filip Strzałka
6dbc1b800f [Keyboard] add arrowmechanics/wings (#23328)
Co-authored-by: Arrow Mechanics <filip@arrowmechanics.com>
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2024-03-30 11:48:50 -06:00
takashicompany
54593975bf Add new keyboard "Rookey" (#22483)
Co-authored-by: jack <0x6a73@protonmail.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2024-03-29 20:46:15 -07:00
takashicompany
abc101c122 [Keyboard] Add miniDivide MAX (#22804)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
Co-authored-by: jack <0x6a73@protonmail.com>
2024-03-29 19:03:17 -07:00
yulei
ac74d106d6 [Keyboard] add neson design 810e keyboard (#22883)
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: jack <0x6a73@protonmail.com>
2024-03-29 19:00:51 -07:00
khchen2004
93737eccc9 [Keyboard] Add scorpio rev2 (#22906) 2024-03-29 18:57:29 -07:00
Duncan Sutherland
7bff385840 Update serial_driver.md (#23035)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2024-03-29 19:04:23 -06:00
Victor Camargo
696bf80375 Clearer text about double tapping reset only working for boot after already having QMK running in board (#23042)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2024-03-29 19:00:41 -06:00
Duncan Sutherland
c52ad5c38e tidy keymap of 60_ansi_arrow Community Layout (#23301) 2024-03-29 17:16:17 -07:00
joliverMI
041f60f9a9 [Keyboard] Add recore keyboard (#23320)
Co-authored-by: joliverMI <qmk@Desktop2023>
Co-authored-by: jack <0x6a73@protonmail.com>
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
2024-03-28 22:19:14 -07:00
James Young
2d8902c884 Kalakos Bahrnob Layout Additions (#23300) 2024-03-28 22:06:38 -07:00
Archetype
742ff91cf8 [Keyboard] Add Minerva LX (#23291)
Co-authored-by: jack <0x6a73@protonmail.com>
Co-authored-by: Álvaro A. Volpato <alvaro.augusto.volpato@gmail.com>
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2024-03-28 22:04:43 -07:00
Joel Challis
5ef5a79fd9 Remove IGNORE_MOD_TAP_INTERRUPT from keymaps (#23279) 2024-03-28 21:55:38 -07:00
DOIO2022
eac3809266 [Keyboard] Add kb3x keyboard (#23268)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Less/Rikki <86894501+lesshonor@users.noreply.github.com>
2024-03-28 21:53:11 -07:00
Veriyans
afafce0a5e [Keyboard] Add Macropad 15Pad (#23257)
Co-authored-by: Less/Rikki <86894501+lesshonor@users.noreply.github.com>
Co-authored-by: jack <0x6a73@protonmail.com>
Co-authored-by: Joel Challis <git@zvecr.com>
2024-03-28 21:51:22 -07:00
Freather
06cb283604 [Keyboard] Add haven60 (#23062)
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: jack <0x6a73@protonmail.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
2024-03-28 20:33:00 -07:00
Kyrre Havik
e44cbf7556 [Keyboard] Bartlesplit (#23114)
Co-authored-by: jack <0x6a73@protonmail.com>
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2024-03-28 20:22:41 -07:00
Less/Rikki
4cd92cac1c [Keyboard] mechwild/bb40 (#22958)
Co-authored-by: Kyle McCreery <mccreery.kyle@gmail.com>
2024-03-28 18:21:49 -07:00
dependabot[bot]
c035a37249 Bump tj-actions/changed-files from 43 to 44 (#23369)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-27 20:55:32 +00:00
Jacky
1d58530e79 [Keyboard] Add T75 (#23344)
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: jack <0x6a73@protonmail.com>
2024-03-26 17:30:58 -06:00
JuanoD
4afbade6d1 Add ES_GRV to latam language-specific keycodes (#23333) 2024-03-22 23:30:30 +00:00
Moritz Plattner
551489645a Add werk.technica werk.one keyboard (#23130)
* add wt one

* update readme for One

* Apply suggestions from code review

Co-authored-by: Joel Challis <git@zvecr.com>

* remove redundant file

* reformatted info.json

* Update keyboards/werk_technica/one/keymaps/via/rules.mk

Co-authored-by: Danny <nooges@users.noreply.github.com>

---------

Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Danny <nooges@users.noreply.github.com>
2024-03-22 08:13:07 -04:00
jotix
f95f93b0fc handwired/jotlily60 via keymap (#23325) 2024-03-21 22:30:14 +00:00
Benjamin Božič
8a429fce33 [Keyboard] Add marshkeys flowerpad (#23240) 2024-03-21 05:06:38 +00:00
NW
5d6b291845 Add TechnicPad macropad (#23238) 2024-03-21 05:05:18 +00:00
jotix
4bc57c8d46 Add handwired/Jotlily60 (#23212) 2024-03-21 05:04:25 +00:00
Ramon Imbao
18ae0f61ab Add the EQUATOR keyboard (#23237) 2024-03-21 05:03:42 +00:00
Chad Skeeters
a1b16b8227 Support for slice65 from PizzaKeyboards (#23148) 2024-03-21 04:54:02 +00:00
Bregoliii
d5374b7e01 Add Swiss support (#23272) 2024-03-21 04:04:14 +00:00
Joel Challis
34374d2e2e Assume only 32u4 boards can run 'promicro' converters (#23312) 2024-03-20 22:23:58 +00:00
zlabkeeb
977f667da9 Add Macropad 6Pad (#23099) 2024-03-20 20:32:04 +00:00
Joel Challis
a9e9c9acc5 Fix invalid use of stemcell converter (#23317) 2024-03-20 19:51:01 +00:00
jack
53f46893ce Updates to PR Checklist (#23318) 2024-03-20 09:09:29 -06:00
joliverMI
b1235baf42 [Keyboard] Add posey_split v4/v5 (#23258)
* Created posey_split keyboards and included default keymaps.

* Update keyboards/pmk/posey_split/posey_split_v4/config.h

Co-authored-by: jack <0x6a73@protonmail.com>

* Update keyboards/pmk/posey_split/posey_split_v4/config.h

Co-authored-by: jack <0x6a73@protonmail.com>

* Update keyboards/pmk/posey_split/posey_split_v4/info.json

Co-authored-by: jack <0x6a73@protonmail.com>

* Update keyboards/pmk/posey_split/posey_split_v4/info.json

Co-authored-by: Joel Challis <git@zvecr.com>

* Update keyboards/pmk/posey_split/posey_split_v4/info.json

Co-authored-by: Joel Challis <git@zvecr.com>

* Update keyboards/pmk/posey_split/posey_split_v4/readme.md

Co-authored-by: jack <0x6a73@protonmail.com>

* Various cleanup updates per QMK maintainers on PR #23258

* removed config files from via keymaps

* removed additional keyboard for PR.

* changed folder structure per PR suggestion

* Update keyboards/pmk/posey_split/v5/info.json

Co-authored-by: Joel Challis <git@zvecr.com>

* Update keyboards/pmk/posey_split/v5/rules.mk

Co-authored-by: Joel Challis <git@zvecr.com>

* Update keyboards/pmk/posey_split/v4/rules.mk

Co-authored-by: Joel Challis <git@zvecr.com>

* Update keyboards/pmk/posey_split/v5/keymaps/VIA/keymap.c

Co-authored-by: Joel Challis <git@zvecr.com>

* Update keyboards/pmk/posey_split/v5/keymaps/default/keymap.c

Co-authored-by: Joel Challis <git@zvecr.com>

* Update keyboards/pmk/posey_split/v4/keymaps/default/keymap.c

Co-authored-by: Joel Challis <git@zvecr.com>

* Update keyboards/pmk/posey_split/v4/keymaps/VIA/keymap.c

Co-authored-by: Joel Challis <git@zvecr.com>

* Update keyboards/pmk/posey_split/v5/readme.md

Co-authored-by: Joel Challis <git@zvecr.com>

* Update keyboards/pmk/posey_split/v4/readme.md

Co-authored-by: Joel Challis <git@zvecr.com>

* Update keyboards/pmk/posey_split/v4/info.json

Co-authored-by: Joel Challis <git@zvecr.com>

* changed via folders to lowercase

* cleaned up extra via files in wrong folder

* Added better descriptions to keyboard projects and added hardware listing to v5

* Cleaned up keymap format

* removed extra rules

* Update keyboards/pmk/posey_split/v4/keymaps/via/keymap.c

Co-authored-by: Joel Challis <git@zvecr.com>

* Update keyboards/pmk/posey_split/v5/readme.md

Co-authored-by: Joel Challis <git@zvecr.com>

* removed "about" from readme on v4

* Removed title from readme

---------

Co-authored-by: joliverMI <qmk@Desktop2023>
Co-authored-by: jack <0x6a73@protonmail.com>
Co-authored-by: Joel Challis <git@zvecr.com>
2024-03-20 08:52:20 -06:00
Wilba
c5f544cd96 Added WT65-H3 (HIBI HIBIKI) (#22886) 2024-03-14 22:10:17 -07:00
Wilba
cba2b5645f Added WT65-G3 (HIBI HIBIKI) (#22888) 2024-03-14 22:09:20 -07:00
AlanLiu
f0e219a1c8 Modify wording in 'getting_started_introduction.md' (#23232)
Co-authored-by: Joel Challis <git@zvecr.com>
2024-03-14 19:00:03 -07:00
dependabot[bot]
0d9399234d Bump tj-actions/changed-files from 42 to 43 (#23282)
Bumps [tj-actions/changed-files](https://github.com/tj-actions/changed-files) from 42 to 43.
- [Release notes](https://github.com/tj-actions/changed-files/releases)
- [Changelog](https://github.com/tj-actions/changed-files/blob/main/HISTORY.md)
- [Commits](https://github.com/tj-actions/changed-files/compare/v42...v43)

---
updated-dependencies:
- dependency-name: tj-actions/changed-files
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-15 01:44:32 +00:00
James Young
7d417b78eb AMJKeyboard AMJ96 Layout Additions (#23267) 2024-03-14 18:32:17 -07:00
Nick Brassel
67df06eb44 Fixup cipulot eeprom. (#23280) 2024-03-14 17:52:30 +00:00
achim-t
1080025973 Update feature_tri_layer.md - typo (#23275) 2024-03-14 14:28:54 +11:00
galile0
aa73362674 [Keyboard] add glyphkbd_v2 (#23131)
Co-authored-by: jack <0x6a73@protonmail.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2024-03-13 00:24:21 -07:00
elmo
8c9dea0d0a Add support new kb_elmo PCBs (#23138)
Co-authored-by: Ryan <fauxpark@gmail.com>
2024-03-13 00:23:30 -07:00
era
be9fcbd503 Add SIRIND Brick65 (#23245) 2024-03-13 03:21:06 +00:00
wind
49596b0692 Add KM113 keyboard (#22669) 2024-03-13 03:20:46 +00:00
Joel Challis
fb11330eab Absolute paths for -kb argument should error consistently (#23262) 2024-03-13 00:28:08 +00:00
LLLKST
6788a5eb27 [Keyboard] Add PetruziaMini (#23201)
* Uploading the PetruziaMini

My first try on uploading somethings on github. Hoping it works, this is my handwired PetruziaMini. I don't know if it will be visible on qmk configurator now

* 36 key hhbk inspired kb

* Required changes done

I compiled it locally and works

* Last changes requested

Added a imgur image (first time using, hoping i did it right) and summarized the description as requeste

* Fixed imegur link

* Ops, i've lost this. Here it comes

Thanks for helping! I'll take notes for next time :)
2024-03-12 16:51:42 -06:00
James Young
3a3b4d155e Ares Layout Additions (#23254) 2024-03-12 15:18:19 -07:00
James Young
2121931e34 Aero 75 Hotswap: correct layout data (#23253) 2024-03-12 15:16:22 -07:00
James Young
7cbbcdc5d4 KBDfans KBD75 Layout Additions (#23234) 2024-03-12 15:13:37 -07:00
Allie
654dc267db Fix Magicforce MF17 RGB matrix (#23263) 2024-03-12 11:28:20 -06:00
Joel Challis
ae38bdd5dc Flag LAYOUT macros still defined in .h files (#23260) 2024-03-12 15:28:02 +11:00
James Young
abf6504903 kb-elmo AEK II USB: correct Configurator data (#23252)
Correct the QMK Configurator / `qmk info -m` data.

[chore]
2024-03-10 17:40:11 +00:00
Nick Brassel
3e1ac7a38f Fixes for encoder abstraction. (#23195) 2024-03-10 22:24:17 +11:00
James Young
be42ea306b KBDfans KBD19x Layout Additions (#23230)
* Add layout/matrix diagram

[docs]

* Re-sort JSON `layouts` object

Moves the `LAYOUT_all` object to be first in sequence.

[refactor]

* Add `LAYOUT_ansi_split_bs`

[enhancement]

* Add `LAYOUT_iso_split_bs`

[enhancement]

* Add `LAYOUT_ansi_wkl_split_bs`

[enhancement]

* Add `LAYOUT_ansi_wkl`

[enhancement]

* Add `LAYOUT_iso_wkl_split_bs`

[enhancement]

* Add `LAYOUT_iso_wkl`

[enhancement]
2024-03-09 23:04:00 -08:00
Nick Brassel
900e79febe Attempt to deal with GCC 13+ and rv32 arch extensions. (#23086) 2024-03-09 21:40:19 +11:00
James Young
fec2323089 Orthograph: correct layout data (#23213)
* correct layout data

Correct the key sizes and positions in the layout data.

[chore]

* remove layout offset

Remove the dead space from the layout data.

[chore]
2024-03-09 01:26:33 +00:00
James Young
a8991722bc Xiudi XD96 Layout Bugfixes and Touch-Up (#23242)
* Correct AliExpress Hardware Availability link in readme

Previous URL linked to a Cospad listing.

[chore]
[docs]

* Convert `info.json` to four-space indent

[style]

* Correct `LAYOUT_all` matrix data

The right half of split Backspace is actually located at [5, 9], not
[5, 3].

[bugfix]

* Correct `LAYOUT_96_iso` matrix data

Corrects the matrix positions of the ISO Hash/Tilde and ISO Enter keys
to [3, 12] and [3, 13], respectively.

[bugfix]

* Add layout/matrix diagram

[docs]

* Refactor keymaps

- remove "inline block" comments
- grid-align keycodes
- use four-space indent

[style]
2024-03-09 01:24:31 +00:00
strayfade
62e2cb9286 [Keyboard] Add sf2040 (#23211)
Co-authored-by: jack <0x6a73@protonmail.com>
2024-03-08 11:44:32 -08:00
David Hoelscher
113d3d6001 [Keyboard] Add CMK11 (#23239)
* adding cmk11

* correcting default keymap

* removing rules.mk

* removing unnecessary comment
2024-03-08 08:40:32 -07:00
Nick Brassel
8946aace5b Add instructions for debugging ARM with VSCode+BMP. (#11217) 2024-03-08 22:24:11 +11:00
takashicompany
0a03fc512c [Keyboard] Add Ejectix (#23204)
Co-authored-by: jack <0x6a73@protonmail.com>
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2024-03-08 02:51:37 -08:00
Cipulot
30b0600ea2 [Keyboard] Add 60XT (#23210)
Co-authored-by: jack <0x6a73@protonmail.com>
2024-03-08 02:51:00 -08:00
Joel Challis
4443fa8a32 Attempt to fix changed files on CI workflow (#23205) 2024-03-05 16:59:09 +00:00
dependabot[bot]
7836906f3e Bump peter-evans/create-pull-request from 5 to 6 (#22995)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-05 22:48:25 +11:00
James Young
9ae4d01e33 Iron180 V2 H: correct key sizes (#23214) 2024-03-04 19:42:37 +00:00
James Young
73bddf0ea6 mntre_v3: correct layout data (#23216) 2024-03-04 19:41:55 +00:00
James Young
1919644934 Iron180 V2 S: correct ANSI Enter key sizes (#23215) 2024-03-04 19:40:16 +00:00
Joel Challis
092ef661af Workaround for uart makefile issues (#23192) 2024-03-02 18:20:18 +00:00
Nick Brassel
21276de7d5 Normalise .editorconfig. (#23186) 2024-03-02 23:23:34 +11:00
Joel Challis
c060876692 Remove cd suggestion from new-keyboard (#23194) 2024-03-02 23:23:25 +11:00
Nick Brassel
1875659df0 CLI Speed improvements. (#23189) 2024-03-02 08:45:01 +11:00
Nick Brassel
8b8f73098b Fix up AVR production build target. (#23190) 2024-03-02 08:44:51 +11:00
blindassassin111
3b76a3a323 Fixing typos for OSAv2 and OSAv2_Topre (#23161)
Correcting tilde to grave, fixing a typo in ec.c, and removing some comments that were accidentally left in.
2024-03-01 18:03:56 +00:00
Moritz Plattner
012b101b2e geistmaschine/geist: enable mousekey, fix issues in default/via keymap (#23187) 2024-03-01 09:18:19 -07:00
823 changed files with 41814 additions and 1752 deletions

View File

@@ -1,4 +1,4 @@
CompileFlags:
Add: [-Wno-unknown-attributes, -Wno-maybe-uninitialized, -Wno-unknown-warning-option]
Remove: [-W*, -mcall-prologues]
Remove: [-W*, -mmcu=*, -mcpu=*, -mfpu=*, -mfloat-abi=*, -mno-unaligned-access, -mno-thumb-interwork, -mcall-prologues]
Compiler: clang

View File

@@ -4,39 +4,39 @@
root = true
[*]
end_of_line = lf
indent_style = space
indent_size = 4
# We recommend you to keep these unchanged
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[{*.yaml,*.yml}] # To match GitHub Actions formatting
indent_size = 2
[*.md]
trim_trailing_whitespace = false
indent_size = 4
[{qmk,*.py}]
charset = utf-8
max_line_length = 200
# Make these match what we have in .gitattributes
[*.mk]
end_of_line = lf
[{Makefile,*.mk}]
indent_style = tab
[Makefile]
end_of_line = lf
indent_style = tab
[*.sh]
end_of_line = lf
# The gitattributes file will handle the line endings conversion properly according to the operating system settings for other files
# We don't have gitattributes properly for these
# So if the user have for example core.autocrlf set to true
# the line endings would be wrong.
# Don't override anything in `lib/`...
[lib/**]
indent_style = unset
indent_size = unset
tab_width = unset
end_of_line = unset
charset = unset
spelling_language = unset
trim_trailing_whitespace = unset
insert_final_newline = unset
# ...except QMK's `lib/python`.
[{*.py,lib/python/**.py}]
end_of_line = lf
indent_style = space
indent_size = 4
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
max_line_length = 200

View File

@@ -0,0 +1,123 @@
name: CI Build Major Branch
permissions:
contents: read
actions: write
on:
push:
branches: [master, develop]
workflow_dispatch:
inputs:
branch:
type: choice
description: "Branch to build"
options: [master, develop]
env:
# https://docs.github.com/en/actions/learn-github-actions/usage-limits-billing-and-administration#usage-limits
# We've decreased it from 20 to 15 to allow for other GHA to run unimpeded
CONCURRENT_JOBS: 15
# Ensure we only have one build running at a time, cancelling any active builds if a new commit is pushed to the respective branch
concurrency:
group: ci_build-${{ github.event.inputs.branch || github.ref_name }}
cancel-in-progress: true
jobs:
determine_concurrency:
name: "Determine concurrency"
if: github.repository == 'qmk/qmk_firmware'
runs-on: ubuntu-latest
container: ghcr.io/qmk/qmk_cli
outputs:
slice_length: ${{ steps.generate_slice_length.outputs.slice_length }}
steps:
- name: Install prerequisites
run: |
apt-get update
apt-get install -y jq
- name: Disable safe.directory check
run: |
git config --global --add safe.directory '*'
- name: Checkout QMK Firmware
uses: actions/checkout@v4
- name: Determine concurrency
id: generate_slice_length
run: |
target_count=$( {
qmk find -km default 2>/dev/null
qmk find -km via 2>/dev/null
} | sort | uniq | wc -l)
slice_length=$((target_count / ($CONCURRENT_JOBS - 1))) # Err on the side of caution as we're splitting default and via
echo "slice_length=$slice_length" >> $GITHUB_OUTPUT
build_targets:
name: "Compile keymap ${{ matrix.keymap }}"
needs: determine_concurrency
strategy:
fail-fast: false
matrix:
keymap: [default, via]
uses: ./.github/workflows/ci_build_major_branch_keymap.yml
with:
branch: ${{ inputs.branch || github.ref_name }}
keymap: ${{ matrix.keymap }}
slice_length: ${{ needs.determine_concurrency.outputs.slice_length }}
secrets: inherit
rollup_tasks:
name: "Consolidation"
needs: build_targets
runs-on: ubuntu-latest
steps:
- name: Download firmwares
uses: actions/download-artifact@v4
with:
pattern: firmware-*
path: firmwares
merge-multiple: true
- name: Upload to https://ci.qmk.fm/${{ inputs.branch || github.ref_name }}/${{ github.sha }}
uses: jakejarvis/s3-sync-action@master
with:
args: --acl public-read --follow-symlinks --delete
env:
AWS_S3_BUCKET: ${{ vars.CI_QMK_FM_SPACES_BUCKET }}
AWS_ACCESS_KEY_ID: ${{ secrets.CI_QMK_FM_SPACES_KEY }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.CI_QMK_FM_SPACES_SECRET }}
AWS_REGION: ${{ vars.CI_QMK_FM_SPACES_REGION }}
AWS_S3_ENDPOINT: ${{ vars.CI_QMK_FM_SPACES_ENDPOINT }}
SOURCE_DIR: firmwares
DEST_DIR: ${{ inputs.branch || github.ref_name }}/${{ github.sha }}
- name: Upload to https://ci.qmk.fm/${{ inputs.branch || github.ref_name }}/latest
uses: jakejarvis/s3-sync-action@master
with:
args: --acl public-read --follow-symlinks --delete
env:
AWS_S3_BUCKET: ${{ vars.CI_QMK_FM_SPACES_BUCKET }}
AWS_ACCESS_KEY_ID: ${{ secrets.CI_QMK_FM_SPACES_KEY }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.CI_QMK_FM_SPACES_SECRET }}
AWS_REGION: ${{ vars.CI_QMK_FM_SPACES_REGION }}
AWS_S3_ENDPOINT: ${{ vars.CI_QMK_FM_SPACES_ENDPOINT }}
SOURCE_DIR: firmwares
DEST_DIR: ${{ inputs.branch || github.ref_name }}/latest
- name: Check if failure marker file exists
id: check_failure_marker
uses: andstor/file-existence-action@v3
with:
files: firmwares/.failed
- name: Fail build if needed
if: steps.check_failure_marker.outputs.files_exists == 'true'
run: |
# Exit with failure if the compilation stage failed
exit 1

View File

@@ -0,0 +1,181 @@
name: CI Build Major Branch Keymap
permissions:
contents: read
actions: write
on:
workflow_call:
inputs:
branch:
type: string
required: true
keymap:
type: string
required: true
slice_length:
type: string
required: true
jobs:
generate_targets:
name: "Generate targets (${{ inputs.keymap }})"
runs-on: ubuntu-latest
container: ghcr.io/qmk/qmk_cli
outputs:
targets: ${{ steps.generate_targets.outputs.targets }}
steps:
- name: Install prerequisites
run: |
apt-get update
apt-get install -y jq
- name: Disable safe.directory check
run: |
git config --global --add safe.directory '*'
- name: Checkout QMK Firmware
uses: actions/checkout@v4
- name: Generate build targets
id: generate_targets
run: |
{ # Intentionally use `shuf` here so that we share manufacturers across all build groups -- some have a lot of ARM-based boards which inherently take longer
counter=0
echo -n '{'
qmk find -km ${{ inputs.keymap }} 2>/dev/null | sort | uniq | shuf | xargs -L${{ inputs.slice_length }} | while IFS=$'\n' read target ; do
if [ $counter -gt 0 ]; then
echo -n ','
fi
counter=$((counter+1))
printf "\"group %02d\":{" $counter
echo -n '"targets":"'
echo $target | tr ' ' '\n' | sort | uniq | xargs echo -n
echo -n '"}'
done
echo -n '}'
} | sed -e 's@\n@@g' > targets.json
# Output the target keys as a variable
echo "targets=$(jq -c 'keys' targets.json)" >> $GITHUB_OUTPUT
- name: Upload targets json
uses: actions/upload-artifact@v4
with:
name: targets-${{ inputs.keymap }}
path: targets.json
build_targets:
name: "Compile ${{ matrix.target }} (${{ inputs.keymap }})"
needs: generate_targets
runs-on: ubuntu-latest
container: ghcr.io/qmk/qmk_cli
continue-on-error: true
strategy:
matrix:
target: ${{ fromJson(needs.generate_targets.outputs.targets) }}
steps:
- name: Install prerequisites
run: |
apt-get update
apt-get install -y jq
- name: Disable safe.directory check
run: |
git config --global --add safe.directory '*'
- name: Checkout QMK Firmware
uses: actions/checkout@v4
- name: Get target definitions
uses: actions/download-artifact@v4
with:
name: targets-${{ inputs.keymap }}
path: .
- name: Deploy submodules
run: |
qmk git-submodule -f
- name: Dump targets
run: |
jq -r '.["${{ matrix.target }}"].targets' targets.json | tr ' ' '\n' | sort
- name: Build targets
continue-on-error: true
run: |
export NCPUS=$(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || getconf _NPROCESSORS_ONLN 2>/dev/null)
qmk mass-compile -t -j $NCPUS -e DUMP_CI_METADATA=yes $(jq -r '.["${{ matrix.target }}"].targets' targets.json) || touch .failed
- name: Upload binaries
uses: actions/upload-artifact@v4
with:
name: firmware-${{ inputs.keymap }}-${{ matrix.target }}
if-no-files-found: ignore
path: |
*.bin
*.hex
*.uf2
.build/failed.*
.failed
- name: Fail build if any group failed
run: |
# Exit with failure if the compilation stage failed
[ ! -f .failed ] || exit 1
repack_firmware:
if: always()
name: "Repack artifacts"
needs: build_targets
runs-on: ubuntu-latest
steps:
- name: Checkout QMK Firmware
uses: actions/checkout@v4
- name: Download firmwares
uses: actions/download-artifact@v4
with:
pattern: firmware-${{ inputs.keymap }}-*
path: .
merge-multiple: true
- name: Upload all firmwares
uses: actions/upload-artifact@v4
with:
name: firmware-${{ inputs.keymap }}
if-no-files-found: ignore
path: |
*.bin
*.hex
*.uf2
.build/failed.*
.failed
- name: Generate output logs
run: |
# Generate the step summary markdown
./util/ci/generate_failure_markdown.sh > $GITHUB_STEP_SUMMARY || true
# Truncate to a maximum of 1MB to deal with GitHub workflow limit
truncate --size='<960K' $GITHUB_STEP_SUMMARY || true
- name: Delete temporary build artifacts
uses: geekyeggo/delete-artifact@v5
with:
name: |
firmware-${{ inputs.keymap }}-*
targets-${{ inputs.keymap }}
- name: 'CI Discord Notification'
if: always()
working-directory: util/ci/
env:
DISCORD_WEBHOOK: ${{ secrets.CI_DISCORD_WEBHOOK }}
run: |
python3 -m pip install -r requirements.txt
python3 ./discord-results.py --branch ${{ inputs.branch || github.ref_name }} --keymap ${{ inputs.keymap }} --url ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}

View File

@@ -1,74 +0,0 @@
name: CI Builds
permissions:
contents: read
on:
push:
branches: [master, develop]
workflow_dispatch:
inputs:
branch:
type: choice
description: 'Branch to build'
options: [master, develop]
concurrency: ci_build-${{ github.event.inputs.branch || github.ref_name }}
jobs:
ci_builds:
if: github.repository == 'qmk/qmk_firmware'
name: "CI Build"
runs-on: self-hosted
timeout-minutes: 1380
strategy:
fail-fast: false
matrix:
keymap: [default, via]
container: ghcr.io/qmk/qmk_cli
steps:
- name: Disable safe.directory check
run : git config --global --add safe.directory '*'
- uses: actions/checkout@v4
with:
submodules: recursive
ref: ${{ github.event.inputs.branch || github.ref }}
- name: Install dependencies
run: pip3 install -r requirements.txt
- name: Run `qmk mass-compile` (keymap ${{ matrix.keymap }})
run: |
export NCPUS=$(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || getconf _NPROCESSORS_ONLN 2>/dev/null)
qmk mass-compile -t -j $NCPUS -km ${{ matrix.keymap }} -e DUMP_CI_METADATA=yes || touch .failed
# Generate the step summary markdown
./util/ci/generate_failure_markdown.sh > $GITHUB_STEP_SUMMARY || true
# Truncate to a maximum of 1MB to deal with GitHub workflow limit
truncate --size='<960K' $GITHUB_STEP_SUMMARY || true
# Exit with failure if the compilation stage failed
[ ! -f .failed ] || exit 1
- name: 'Upload artifacts'
uses: actions/upload-artifact@v4
if: always()
with:
name: artifacts-${{ github.event.inputs.branch || github.ref_name }}-${{ matrix.keymap }}
if-no-files-found: ignore
path: |
*.bin
*.hex
*.uf2
.build/failed.*
- name: 'CI Discord Notification'
if: always()
working-directory: util/ci/
env:
DISCORD_WEBHOOK: ${{ secrets.CI_DISCORD_WEBHOOK }}
run: |
python3 -m pip install -r requirements.txt
python3 ./discord-results.py --branch ${{ github.event.inputs.branch || github.ref_name }} --keymap ${{ matrix.keymap }} --url ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}

View File

@@ -37,7 +37,7 @@ jobs:
qmk --verbose generate-docs
- name: Deploy
uses: JamesIves/github-pages-deploy-action@v4.5.0
uses: JamesIves/github-pages-deploy-action@v4.6.0
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BASE_BRANCH: master

View File

@@ -35,7 +35,9 @@ jobs:
- name: Get changed files
id: file_changes
uses: tj-actions/changed-files@v42
uses: tj-actions/changed-files@v44
with:
use_rest_api: true
- name: Run qmk formatters
shell: 'bash {0}'

View File

@@ -47,7 +47,7 @@ jobs:
git config user.email 'hello@qmk.fm'
- name: Create Pull Request
uses: peter-evans/create-pull-request@v5
uses: peter-evans/create-pull-request@v6
if: ${{ github.repository == 'qmk/qmk_firmware'}}
with:
token: ${{ secrets.QMK_BOT_TOKEN }}

View File

@@ -27,7 +27,9 @@ jobs:
- name: Get changed files
id: file_changes
uses: tj-actions/changed-files@v42
uses: tj-actions/changed-files@v44
with:
use_rest_api: true
- name: Print info
run: |
@@ -62,10 +64,12 @@ jobs:
qmk format-text ${{ steps.file_changes.outputs.all_changed_files}} || true
for file in ${{ steps.file_changes.outputs.all_changed_files}}; do
if ! git diff --quiet $file; then
echo "File '${file}' Requires Formatting"
echo "::error file=${file}::Requires Formatting"
exit_code=$(($exit_code + 1))
if [[ -f $file ]]; then
if ! git diff --quiet $file; then
echo "File '${file}' Requires Formatting"
echo "::error file=${file}::Requires Formatting"
exit_code=$(($exit_code + 1))
fi
fi
done

View File

@@ -34,7 +34,7 @@ jobs:
git config user.email 'hello@qmk.fm'
- name: Create Pull Request
uses: peter-evans/create-pull-request@v5
uses: peter-evans/create-pull-request@v6
if: ${{ github.repository == 'qmk/qmk_firmware'}}
with:
token: ${{ secrets.QMK_BOT_TOKEN }}

View File

@@ -5,8 +5,10 @@ ifneq ($(findstring yes, $(CTPC)$(CONVERT_TO_PROTON_C)),)
$(call CATASTROPHIC_ERROR,The `CONVERT_TO_PROTON_C` and `CTPC` options are now deprecated. `CONVERT_TO=proton_c` should be used instead.)
endif
# TODO: opt in rather than assume everything uses a pro micro
PIN_COMPATIBLE ?= promicro
ifneq (,$(filter $(MCU),atmega32u4))
# TODO: opt in rather than assume everything uses a pro micro
PIN_COMPATIBLE ?= promicro
endif
# Remove whitespace from any rule.mk provided vars
# - env cannot be overwritten but cannot have whitespace anyway
@@ -16,6 +18,10 @@ ifneq ($(CONVERT_TO),)
# stash so we can overwrite env provided vars if needed
ACTIVE_CONVERTER=$(CONVERT_TO)
ifeq ($(PIN_COMPATIBLE),)
$(call CATASTROPHIC_ERROR,Converting to '$(CONVERT_TO)' not possible!)
endif
# glob to search each platfrorm and/or check for valid converter
CONVERTER := $(wildcard $(PLATFORM_PATH)/*/converters/$(PIN_COMPATIBLE)_to_$(CONVERT_TO)/)
ifeq ($(CONVERTER),)

View File

@@ -335,5 +335,9 @@
"key": "ES_CIRC",
"label": "^",
}
"ALGR(KC_NUHS)": {
"key": "ES_GRV",
"label": "`",
}
}
}

261
docs/__capabilities.md Normal file
View File

@@ -0,0 +1,261 @@
# Documentation Capabilities
This page lays out the capabilities used by the QMK Firmware documentation, in order to aid future transitions to other page generators. Focuses mainly on things other than normal Markdown, as it's assumed that markdown generators should still function accordingly.
## Overall capabilities
Unrelated to styling, high-level tech.
* I18n -- translations to other languages: [_langs.md](_langs.md)
* Sidebar -- listing of pages by category: [_summary.md](_summary.md)
* Title anchors -- `:id=some-anchor-name`, used for direct linking to sections
* Links to anchors:
* Style 1: [early initialization](platformdev_chibios_earlyinit.md?id=board-init)
* Style 2: [early initialization](platformdev_chibios_earlyinit.md#board-init)
* Links to anchors on the same page, i.e. [Emoji](#emoji)
* Specifying CNAME for root domain -- `docs.qmk.fm`
* Moved pages, see `index.html`
* Text search
* Footnotes [like this][1]
<!-- Comments should not show up -->
<!-- Nor should
multiline
comments with
newlines show up -->
### Dividing lines
---
<hr>
<hr/>
### Images
![QMK Color Wheel with HSV Values](https://i.imgur.com/vkYVo66.jpg)
<img src="gitbook/images/color-wheel.svg" alt="HSV Color Wheel" width="250"/>
### Lists
Newlines with `<br>`:
Line one<br>
Line two<br/>
Line three
Nested dotted:
* The PR is complete and ready to merge
* GitHub checks for the PR are green whenever possible
* A "red" check may be disregarded by maintainers if the items flagged are unrelated to the change proposed in the PR
* Modifications to existing files should not need to add license headers to pass lint, for instance.
* If it's not directly related to your PR's functionality, prefer avoiding making a change.
Nested dashed:
- The PR is complete and ready to merge
- GitHub checks for the PR are green whenever possible
- A "red" check may be disregarded by maintainers if the items flagged are unrelated to the change proposed in the PR
- Modifications to existing files should not need to add license headers to pass lint, for instance.
- If it's not directly related to your PR's functionality, prefer avoiding making a change.
Nested numbered:
1. The PR is complete and ready to merge
1. GitHub checks for the PR are green whenever possible
1. A "red" check may be disregarded by maintainers if the items flagged are unrelated to the change proposed in the PR
1. Modifications to existing files should not need to add license headers to pass lint, for instance.
1. If it's not directly related to your PR's functionality, prefer avoiding making a change.
Nested mixed:
1. Add it to the schema in `data/schemas/keyboards.jsonschema`
1. Add a mapping in `data/maps`
1. (optional and discouraged) Add code to extract/generate it to:
* `lib/python/qmk/info.py`
* `lib/python/qmk/cli/generate/config_h.py`
* `lib/python/qmk/cli/generate/rules_mk.py`
### Emoji :id=emoji
#### Direct:
👍🎉 First off, thanks for taking the time to read this and contribute! 🎉👍
#### As colon-name-colon:
:heavy_check_mark: : works and was tested
:o: : does not apply
:x: : not supported by MCU
### XML Entities
[`clueboard`](https://github.com/qmk/qmk_firmware/tree/master/keyboards/clueboard) &larr; This is the organization folder, there's no `rules.mk` file
1&ndash;4
Command+<code>&#96;</code>
## Styling
### CSS-ish
<b style="font-size:150%">This is 150% of normal sizing, and bold!</b>
### Tables
| Column A | Column B |
|----------|----------|
| Left | Right |
### Indented sections
> Indent without any sort of marker
?> Query, this?
!> Notification, damnit!
### Keyboard keys
<kbd>,</kbd>
<kbd>Right Alt</kbd>+<kbd>Right Shift</kbd>
1. Click <kbd>File</kbd> > <kbd>New</kbd> > <kbd>Makefile Project with Existing Code</kbd>
1. Click <kbd><kbd>File</kbd> > <kbd>Preferences ></kbd> > <kbd>Settings</kbd> </kbd>
1. Hit Ctrl-<code>&#96;</code> (Grave) to bring up the terminal or go to <kbd><kbd>View</kbd> > <kbd>Terminal</kbd></kbd> (command `workbench.action.terminal.toggleTerminal`). A new terminal will be opened if there isnt one already.
This should start the terminal in the workspace's folder (so the `qmk_firmware` folder), and then you can compile your keyboard.
### Code Blocks
Inline code with tag: <code>test</code>
Inline code with backticks: `test`
This is preformatted
Indented by 4 spaces
The letters lined up
```c
int c_code(void) {
return -1;
}
```
```makefile
ifeq ($(BUILD),)
CHUNDER_REQUIRED = yes
endif
```
```python
from pathlib import Path
p = Path('/path/to/qmk_firmware')
```
```json
{
"a": "b",
"c": 4,
"d": {
"e": [
0, 1, 2, 3
]
}
}
```
```diff
#undef RGBLIGHT_LED_COUNT
+#undef RGBLIGHT_EFFECT_STATIC_GRADIENT
+#undef RGBLIGHT_EFFECT_RAINBOW_SWIRL
#define RGBLIGHT_LED_COUNT 12
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
```
Indented code as part of a list:
* [QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases) (recommended GUI)
* [Teensy Loader](https://www.pjrc.com/teensy/loader.html)
* [Teensy Loader Command Line](https://www.pjrc.com/teensy/loader_cli.html) / `:teensy` target in QMK (recommended command line)
```
teensy_loader_cli -v -mmcu=<mcu> <filename>
```
### Sub/Superscript
<sub>This is subscripted, apparently.</sub>
<sup>This is superscripted, apparently.</sup>
I<sup>2</sup>C
T<sub>0H</sub>, T<sub>0L</sub>
### Tabs
Tabs are based on section headers, with `**` enclosing the tab title.
<!-- tabs:start -->
#### ** Tab one **
Content one
<!-- tabs:start -->
##### ** Nested one **
Nested content one
##### ** Nested two **
Nested content two
<!-- tabs:end -->
#### ** Tab two **
Content two
#### ** Tab three **
Content three
<!-- tabs:end -->
## Details sections
Expandable:
<details>
<summary>Some summary text that shows up before expanding</summary>
!> Embedded notification!
This is some inner content.
</details>
[1]: https://en.wikipedia.org/wiki/Eclipse_(software)
## Embed
[example embed](__capabilities_inc.md ':include')

View File

@@ -0,0 +1 @@
Lorem ipsum dolor sit amet.

View File

@@ -322,6 +322,18 @@ Creates a keymap.json from a keymap.c.
qmk c2json -km KEYMAP -kb KEYBOARD [-q] [--no-cpp] [-o OUTPUT] filename
```
**Examples**:
```
qmk c2json -km default -kb handwired/dactyl_promicro
```
or with filename:
```
qmk c2json keyboards/handwired/dactyl_promicro/keymaps/default/keymap.c
```
## `qmk lint`
Checks over a keyboard and/or keymap and highlights common errors, problems, and anti-patterns.

View File

@@ -45,4 +45,4 @@ Eg, if you wanted to set the "Adjust" layer to be layer 5, you'd add this to you
| `get_tri_layer_upper_layer()` | Gets the current "upper" layer. |
| `get_tri_layer_adjust_layer()` | Gets the current "adjust" layer. |
!> Note: these settings are not persisent, and will be reset to the default on power loss or power cycling of the controller.
!> Note: these settings are not persistent, and will be reset to the default on power loss or power cycling of the controller.

View File

@@ -236,7 +236,7 @@ Flashing sequence:
## STM32/APM32 DFU
All STM32 and APM32 MCUs, except for F103 (see the [STM32duino section](#stm32duino)) come preloaded with a factory bootloader that cannot be modified nor deleted.
All USB-capable STM32 and APM32 MCUs, except for a small handful (such as STM32F103 -- see the [STM32duino section](#stm32duino)) come preloaded with a factory bootloader that cannot be modified nor deleted.
To ensure compatibility with the STM32-DFU bootloader, make sure this block is present in your `rules.mk` (optionally with `apm32-dfu` instead):
@@ -464,4 +464,4 @@ CLI Flashing sequence:
3. Flash via QMK CLI eg. `qmk flash --keyboard handwired/onekey/rpi_pico --keymap default`
4. Wait for the keyboard to become available
<sup>1</sup>: This works only if QMK was compiled with `RP2040_BOOTLOADER_DOUBLE_TAP_RESET` defined.
<sup>1</sup>: This works only if the controller has been flashed with QMK Firmware with `RP2040_BOOTLOADER_DOUBLE_TAP_RESET` defined.

View File

@@ -4,7 +4,7 @@ This page attempts to explain the basic information you need to know to work wit
## Basic QMK Structure
QMK is a fork of [Jun Wako](https://github.com/tmk)'s [tmk_keyboard](https://github.com/tmk/tmk_keyboard) project. The original TMK code, with modifications, can be found in the `tmk_core` folder. The QMK additions to the project may be found in the `quantum` folder. Keyboard projects may be found in the `handwired` and `keyboard` folders.
QMK is a fork of [Jun Wako](https://github.com/tmk)'s [tmk_keyboard](https://github.com/tmk/tmk_keyboard) project. The original TMK code, with modifications, can be found in the `tmk_core` folder. The QMK additions to the project may be found in the `quantum` folder. Keyboard projects may be found in the `keyboards` folder.
### Userspace Structure

View File

@@ -175,7 +175,7 @@ As you move along, be sure that the controller is staying in place - recutting a
From here, you should have a working keyboard once you program a firmware.
Simple firmware can be created easily using the [Keyboard Firmware Builder](https://kbfirmware.com/) website. Recreate your layout using [Keyboard Layout Editor](https://www.keyboard-layout-editor.com), import it and recreate the matrix (if not already done as part of [planning the matrix](#planning-the-matrix).
Simple firmware can be created easily using the [Keyboard Firmware Builder](https://kbfirmware.com/) website. Recreate your layout using [Keyboard Layout Editor](https://www.keyboard-layout-editor.com), import it and recreate the matrix (if not already done as part of [planning the matrix](#planning-the-matrix)).
Go through the rest of the tabs, assigning keys until you get to the last one where you can compile and download your firmware. The .hex file can be flashed straight onto your keyboard, or for advanced functionality, compiled locally after [Setting up Your Environment](newbs_getting_started.md).

View File

@@ -7,7 +7,7 @@ QMK tries to put a lot of power into your hands by making easy things easy, and
Not sure if your keyboard can run QMK? If it's a mechanical keyboard you built yourself chances are good it can. We support a [large number of hobbyist boards](https://qmk.fm/keyboards/). If your current keyboard can't run QMK there are a lot of choices out there for boards that do.
?> **Is This Guide For Me?**<br>
If the thought of programming intimidates you, please [take a look at our online GUI](newbs_building_firmware_configurator.md) instead.</div>
If the thought of programming intimidates you, please [take a look at our online GUI](newbs_building_firmware_configurator.md) instead.
## Overview

View File

@@ -117,3 +117,77 @@ Using the [standard `compile_commands.json` database](https://clang.llvm.org/doc
1. Start typing `clangd: Restart Language Server` and select it when it appears.
Now you're ready to code QMK Firmware in VS Code!
# Debugging ARM MCUs with Visual Studio Code
**...and a Black Magic Probe.**
Visual Studio Code has the ability to debug applications, but requires some configuration in order to get it to be able to do so for ARM targets.
This documentation describes a known-working configuration for setting up the use of a Black Magic Probe to debug using VS Code.
It is assumed that you've correctly set up the electrical connectivity of the Black Magic Probe with your MCU. Wiring up `NRST`, `SWDIO`, `SWCLK`, and `GND` should be enough.
Install the following plugin into VS Code:
* [Cortex-Debug](https://marketplace.visualstudio.com/items?itemName=marus25.cortex-debug) -
This adds debugger support for ARM Cortex targets to VS Code.
A debugging target for the MCU for your board needs to be defined, and can be done so by adding the following to a `.vscode/launch.json` file:
```json
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Black Magic Probe (OneKey Proton-C)",
"type": "cortex-debug",
"request": "launch",
"cwd": "${workspaceRoot}",
"executable": "${workspaceRoot}/.build/handwired_onekey_proton_c_default.elf",
"servertype": "bmp",
"BMPGDBSerialPort": "COM4",
"svdFile": "Q:\\svd\\STM32F303.svd",
"device": "STM32F303",
"v1": false,
"windows": {
"armToolchainPath": "C:\\QMK_MSYS\\mingw64\\bin"
}
}
]
}
```
You'll need to perform some modifications to the file above in order to target your specific device:
* `"name"`: Can be anything, but if you're debugging multiple targets you'll want something descriptive here.
* `"cwd"`: The path to the QMK Firmware repository root directory -- _if using the `.vscode` directory existing in the `qmk_firmware` git repository, the default above should be correct_
* `"executable"`: The path to the `elf` file generated as part of the build for your keyboard -- _exists in `<qmk_firmware>/.build`_
* `"BMPGDBSerialPort"`: The `COM` port under Windows, or the `/dev/...` path for Linux/macOS. Two serial port devices will be created -- the Black Magic Probe debug port is *usually* the first. If it doesn't work, try the second.
* `"svdFile"`: _[Optional]_ The path to the SVD file that defines the register layout for the MCU -- the appropriate file can be downloaded from the [cmsis-svd repository](https://github.com/posborne/cmsis-svd/tree/master/data/STMicro)
* `"device"`: The name of the MCU, which matches the `<name>` tag at the top of the downloaded `svd` file.
* `"armToolchainPath"`: _[Optional]_ The path to the ARM toolchain installation location on Windows -- under normal circumstances Linux/macOS will auto-detect this correctly and will not need to be specified.
!> Windows builds of QMK Firmware are generally compiled using QMK MSYS, and the path to gdb's location (`C:\\QMK_MSYS\\mingw64\\bin`) needs to be specified under `armToolchainPath` for it to be detected. You may also need to change the GDB path to point at `C:\\QMK_MSYS\\mingw64\\bin\\gdb-multiarch.exe` in the VSCode Cortex-Debug user settings: ![VSCode Settings](https://i.imgur.com/EGrPM1L.png)
Optionally, the following modifications should also be made to the keyboard's `rules.mk` file to disable optimisations -- not strictly required but will ensure breakpoints and variable viewing works correctly:
```makefile
# Disable optimisations for debugging purposes
LTO_ENABLE = no
OPT = g
DEBUG = 3
```
At this point, you should build and flash your firmware through normal methods (`qmk compile ...` and `qmk flash ...`).
Once completed, you can:
* Switch to the debug view in VS Code (in the sidebar, the Play button with a bug next to it)
* Select the newly-created debug target in the dropdown at the top of the sidebar
* Click the green play button next to the dropdown
VS Code's debugger will then start executing the compiled firmware on the MCU.
At this stage, you should have full debugging set up, with breakpoints and variable listings working!

View File

@@ -9,6 +9,7 @@ If there are any inconsistencies with these recommendations, you're best off [cr
- PR should be submitted using a non-`master` branch on the source repository
- this does not mean you target a different branch for your PR, rather that you're not working out of your own master branch
- if submitter _does_ use their own `master` branch, they'll be given a link to the ["how to git"](newbs_git_using_your_master_branch.md) page after merging -- (end of this document will contain the contents of the message)
- Note, frequently merging upstream with your branch is not needed and is discouraged. Valid reason for updating your branch may be resolving merge conflicts and pulling in new changes relevant to your PR.
- PRs should contain the smallest amount of modifications required for a single change to the codebase
- multiple keyboards at the same time is not acceptable
- **the smaller the PR, the higher likelihood of a quicker review, higher likelihood of quicker merge, and less chance of conflicts**
@@ -43,10 +44,10 @@ If there are any inconsistencies with these recommendations, you're best off [cr
- PRs for vendor specific keymaps will be permitted. The naming convention for these should be `default_${vendor}`, `via_${vendor}` i.e. `via_clueboard`.
- vendor specific keymaps do not necessarily need to be "vanilla" and can be more richly featured than `default` or `via` stock keymaps.
- #include QMK_KEYBOARD_H preferred to including specific board files
- `#include QMK_KEYBOARD_H` preferred to including specific board files
- prefer layer enums to #defines
- custom keycode enums must have first entry = SAFE_RANGE
- some care with spacing (e.g., alignment on commas or first char of keycodes) makes for a much nicer-looking keymap
- custom keycode enums must have first entry = `QK_USER`
- some care with spacing (e.g., alignment on commas or first char of keycodes) makes for a much nicer-looking keymap. Spaces are preferred to tabs
## Keyboard PRs
@@ -81,6 +82,8 @@ https://github.com/qmk/qmk_firmware/pulls?q=is%3Apr+is%3Aclosed+label%3Akeyboard
- Encoder Configuration
- Bootmagic Configuration
- LED Indicator Configuration
- RGB Light Configuration
- RGB Matrix Configuration
- Run `qmk format-json` on this file before submitting your PR. Be sure to append the `-i` flag to directly modify the file, or paste the outputted code into the file.
- `readme.md`
- must follow the [template](https://github.com/qmk/qmk_firmware/blob/master/data/templates/keyboard/readme.md)
@@ -90,8 +93,7 @@ https://github.com/qmk/qmk_firmware/pulls?q=is%3Apr+is%3Aclosed+label%3Akeyboard
- a picture about the keyboard and preferably about the PCB, too
- images are not to be placed in the `qmk_firmware` repository
- images should be uploaded to an external image hosting service, such as [imgur](https://imgur.com/).
- if imgur is used, images should be resized appropriately: append "h" to the image url i.e. [https://i.imgur.com/vqgE7Ok.jpg](https://i.imgur.com/vqgE7Ok.jpg) becomes [https://i.imgur.com/vqgE7Ok**h**.jpg](https://i.imgur.com/vqgE7Okh.jpg)
- image links should link directly to the image, not a "preview" -- i.e. [https://imgur.com/vqgE7Ok](https://imgur.com/vqgE7Ok) should be [https://i.imgur.com/vqgE7Okh.jpg](https://i.imgur.com/vqgE7Okh.jpg) when using imgur
- image links should link directly to the image, not a "preview" -- i.e. [https://imgur.com/vqgE7Ok](https://imgur.com/vqgE7Ok) should be [https://i.imgur.com/vqgE7Ok.jpg](https://i.imgur.com/vqgE7Ok.jpg) when using imgur
- `rules.mk`
- removed `MIDI_ENABLE`, `FAUXCLICKY_ENABLE` and `HD44780_ENABLE`
- modified `# Enable Bluetooth with the Adafruit EZ-Key HID` -> `# Enable Bluetooth`
@@ -146,6 +148,13 @@ https://github.com/qmk/qmk_firmware/pulls?q=is%3Apr+is%3Aclosed+label%3Akeyboard
- For instance, only `wilba_tech` boards shall include `keyboards/wilba_tech/wt_main.c` and `keyboards/wilba_tech/wt_rgb_backlight.c`. But including `drivers/sensors/pmw3360.c` is absolutely fine for any and all boards that require it.
- Code that needs to be used by multiple boards is a candidate for core code changes, and should be separated out.
Wireless-capable boards:
- Given license abuse from vendors, QMK does not accept any vendor PRs for wireless- or Bluetooth-capable keyboards without wireless and/or Bluetooth code
- Historically, vendors have done this in bad faith in order to attain downstream VIA compatibility with no intention of releasing wireless sources
- QMK's license, the GPL2+, requires full source disclosure for any distributed binary -- including full sources for any keyboard shipped by vendors containing QMK and/or firmware-side VIA code
- If a vendor's wireless-capable keyboard PR submission is lacking wireless capability, then the PR will be left on-hold and unmergeable until wireless bindings are provided
- If a vendor's wireless-capable keyboard is merged into QMK before it's known that the board is wireless, then all existing and future PRs from the same vendor will be put on hold until wireless bindings for the offending keyboard are provided
Also, specific to ChibiOS:
- **strong** preference to using existing ChibiOS board definitions.
- a lot of the time, an equivalent Nucleo board can be used with a different flash size or slightly different model in the same family
@@ -204,7 +213,7 @@ Additionally, PR reviews are something that is done in our free time. We are not
## Example GPLv2 Header
```
/* Copyright 2021 Your Name (@yourgithub)
/* Copyright 2024 Your Name (@yourgithub)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -224,6 +233,6 @@ Additionally, PR reviews are something that is done in our free time. We are not
Or, optionally, using [SPDX identifier](https://spdx.org/licenses/) instead:
```
// Copyright 2021 Your Name (@yourgithub)
// Copyright 2024 Your Name (@yourgithub)
// SPDX-License-Identifier: GPL-2.0-or-later
```

View File

@@ -1,6 +1,6 @@
# 'serial' Driver
The serial driver powers the [Split Keyboard](feature_split_keyboard.md) feature. Several implementations are available, depending on the platform of your split keyboard. Note that none of the drivers support split keyboards with more than two halves.
The Serial driver powers the [Split Keyboard](feature_split_keyboard.md) feature. Several implementations are available that cater to the platform and capabilites of MCU in use. Note that none of the drivers support split keyboards with more than two halves.
| Driver | AVR | ARM | Connection between halves |
| --------------------------------------- | ------------------ | ------------------ | --------------------------------------------------------------------------------------------- |
@@ -14,7 +14,7 @@ The serial driver powers the [Split Keyboard](feature_split_keyboard.md) feature
## Bitbang
This is the Default driver, the absence of configuration assumes this driver. It works by [bit banging](https://en.wikipedia.org/wiki/Bit_banging) a GPIO pin using the CPU. It is therefore not as efficient as a dedicated hardware peripheral, which the Half-duplex and Full-duplex drivers use.
This is the Default driver, absence of configuration assumes this driver. It works by [bit banging](https://en.wikipedia.org/wiki/Bit_banging) a GPIO pin using the CPU. It is therefore not as efficient as a dedicated hardware peripheral, which the Half-duplex and Full-duplex drivers use.
!> On ARM platforms the bitbang driver causes connection issues when using it together with the bitbang WS2812 driver. Choosing alternate drivers for both serial and WS2812 (instead of bitbang) is strongly recommended.
@@ -31,7 +31,7 @@ This is the Default driver, the absence of configuration assumes this driver. It
+-------+ +-------+
```
One GPIO pin is needed for the bitbang driver, as only one wire is used for receiving and transmitting data. This pin is referred to as the `SOFT_SERIAL_PIN` (SSP) in the configuration. A simple TRS or USB cable provides enough conductors for this driver to work.
One GPIO pin is needed for the bitbang driver, as only one wire is used for receiving and transmitting data. This pin is referred to as the `SOFT_SERIAL_PIN` (SSP) in the configuration. A TRS or USB cable provides enough conductors for this driver to function.
### Setup
@@ -57,7 +57,7 @@ SERIAL_DRIVER = bitbang
## USART Half-duplex
Targeting ARM boards based on ChibiOS, where communication is offloaded to a USART hardware device that supports Half-duplex operation. The advantages over bitbanging are fast, accurate timings and reduced CPU usage. Therefore it is advised to choose this driver or the Full-duplex driver whenever possible.
Targeting ARM boards based on ChibiOS, where communication is offloaded to a USART hardware device that supports Half-duplex operation. The advantages over bitbanging are fast, accurate timings and reduced CPU usage. Therefore it is advised to choose Half-duplex over Bitbang if MCU is capable of utilising Half-duplex, and Full-duplex can't be used instead (e.g. lack of available GPIO pins, or imcompatible PCB design).
### Pin configuration
@@ -74,11 +74,13 @@ Targeting ARM boards based on ChibiOS, where communication is offloaded to a USA
+-------+ +-------+
```
Only one GPIO pin is needed for the Half-duplex driver, as only one wire is used for receiving and transmitting data. This pin is referred to as the `SERIAL_USART_TX_PIN` in the configuration. Take care that the pin you chose can act as the TX pin of the USART peripheral. A simple TRS or USB cable provides enough conductors for this driver to work. As the split connection is configured to work in open-drain mode, an **external pull-up resistor is needed to keep the line high**. Resistor values of 1.5kΩ to 8.2kΩ are known to work.
Only one GPIO pin is needed for the Half-duplex driver, as only one wire is used for receiving and transmitting data. This pin is referred to as the `SERIAL_USART_TX_PIN` in the configuration. Ensure that the pin chosen for split communication can operate as the TX pin of the contoller's USART peripheral. A TRS or USB cable provides enough conductors for this driver to function. As the split connection is configured to operate in open-drain mode, an **external pull-up resistor is needed to keep the line high**. Resistor values of 1.5kΩ to 8.2kΩ are known to work.
!> ***Note:*** A pull-up resistor isn't required for RP2040 controllers configured with PIO subsystem.
### Setup
To use the Half-duplex driver follow these steps to activate it. If you target the Raspberry Pi RP2040 PIO implementation skip step 1.
To use the Half-duplex driver follow these steps to activate it. If you target the Raspberry Pi RP2040 PIO implementation, start at step 2.
1. Change the `SERIAL_DRIVER` to `usart` in your keyboards `rules.mk` file:
@@ -86,7 +88,9 @@ To use the Half-duplex driver follow these steps to activate it. If you target t
SERIAL_DRIVER = usart
```
2. (RP2040 PIO only!) Change the `SERIAL_DRIVER` to `vendor` in your keyboards `rules.mk` file:
Skip to step 3.
2. (RP2040 + PIO only!) Change the `SERIAL_DRIVER` to `vendor` in your keyboards `rules.mk` file:
```make
SERIAL_DRIVER = vendor
@@ -105,13 +109,13 @@ For STM32 MCUs several GPIO configuration options can be changed as well. See th
#define SERIAL_USART_TX_PAL_MODE 7 // Pin "alternate function", see the respective datasheet for the appropriate values for your MCU. default: 7
```
4. Decide either for `SERIAL`, `SIO` or `PIO` subsystem, see the section ["Choosing a driver subsystem"](#choosing-a-driver-subsystem).
4. Decide either for `SERIAL`, `SIO`, or `PIO` subsystem. See section ["Choosing a driver subsystem"](#choosing-a-driver-subsystem).
<hr>
## USART Full-duplex
Targeting ARM boards based on ChibiOS where communication is offloaded to an USART hardware device. The advantages over bitbanging are fast, accurate timings and reduced CPU usage. Therefore it is advised to choose this driver or the Full-duplex driver whenever possible. Due to its internal design it is slightly more efficient then the Half-duplex driver, but it should be primarily chosen if Half-duplex operation is not supported by the USART peripheral.
Targeting ARM boards based on ChibiOS where communication is offloaded to an USART hardware device. The advantages over bitbanging are fast, accurate timings and reduced CPU usage; therefore it is advised to choose this driver over all others where possible. Due to its internal design Full-duplex is slightly more efficient than the Half-duplex driver, but Full-duplex should be primarily chosen if Half-duplex operation is not supported by the controller's USART peripheral.
### Pin configuration
@@ -129,13 +133,13 @@ Targeting ARM boards based on ChibiOS where communication is offloaded to an USA
+-------+ +-------+
```
Two GPIO pins are needed for the Full-duplex driver, as two distinct wires are used for receiving and transmitting data. The pin transmitting data is the `TX` pin and refereed to as the `SERIAL_USART_TX_PIN`, the pin receiving data is the `RX` pin and refereed to as the `SERIAL_USART_RX_PIN` in this configuration. Please note that `TX` pin of the master half has to be connected with the `RX` pin of the slave half and the `RX` pin of the master half has to be connected with the `TX` pin of the slave half! Usually this pin swap has to be done outside of the MCU e.g. with cables or on the PCB. Some MCUs like the STM32F303 used on the Proton-C allow this pin swap directly inside the MCU. A simple TRRS or USB cable provides enough conductors for this driver to work.
Two GPIO pins are needed for the Full-duplex driver, as two distinct wires are used for receiving and transmitting data. The pin transmitting data is the `TX` pin and refereed to as the `SERIAL_USART_TX_PIN`, the pin receiving data is the `RX` pin and refereed to as the `SERIAL_USART_RX_PIN` in this configuration. Please note that `TX` pin of the master half has to be connected with the `RX` pin of the slave half and the `RX` pin of the master half has to be connected with the `TX` pin of the slave half! Usually this pin swap has to be done outside of the MCU e.g. with cables or on the PCB. Some MCUs like the STM32F303 used on the Proton-C allow this pin swap directly inside the MCU. A TRRS or USB cable provides enough conductors for this driver to function.
To use this driver the usart peripherals `TX` and `RX` pins must be configured with the correct Alternate-functions. If you are using a Proton-C everything is already setup, same is true for STM32F103 MCUs. For MCUs which are using a modern flexible GPIO configuration you have to specify these by setting `SERIAL_USART_TX_PAL_MODE` and `SERIAL_USART_RX_PAL_MODE`. Refer to the corresponding datasheets of your MCU or find those settings in the section ["Alternate Functions for selected STM32 MCUs"](#alternate-functions-for-selected-stm32-mcus).
To use this driver the USART peripherals `TX` and `RX` pins must be configured with the correct Alternate-functions. If you are using a Proton-C development board everything is already setup, same is true for STM32F103 MCUs. For MCUs which are using a modern flexible GPIO configuration you have to specify these by setting `SERIAL_USART_TX_PAL_MODE` and `SERIAL_USART_RX_PAL_MODE`. Refer to the corresponding datasheets of your MCU or find those settings in the section ["Alternate Functions for selected STM32 MCUs"](#alternate-functions-for-selected-stm32-mcus).
### Setup
To use the Full-duplex driver follow these steps to activate it. If you target the Raspberry Pi RP2040 PIO implementation skip step 1.
To use the Full-duplex driver follow these steps to activate it. If you target the Raspberry Pi RP2040 PIO implementation, start at step 2
1. Change the `SERIAL_DRIVER` to `usart` in your keyboards `rules.mk` file:
@@ -143,7 +147,9 @@ To use the Full-duplex driver follow these steps to activate it. If you target t
SERIAL_DRIVER = usart
```
2. (RP2040 PIO only!) Change the `SERIAL_DRIVER` to `vendor` in your keyboards `rules.mk` file:
Skip to step 3
2. (RP2040 + PIO only!) Change the `SERIAL_DRIVER` to `vendor` in your keyboards `rules.mk` file:
```make
SERIAL_DRIVER = vendor
@@ -165,7 +171,7 @@ For STM32 MCUs several GPIO configuration options, including the ability for `TX
#define SERIAL_USART_TX_PAL_MODE 7 // Pin "alternate function", see the respective datasheet for the appropriate values for your MCU. default: 7
```
1. Decide either for `SERIAL`, `SIO` or `PIO` subsystem, see the section ["Choosing a driver subsystem"](#choosing-a-driver-subsystem).
4. Decide either for `SERIAL`, `SIO`, or `PIO` subsystem. See section ["Choosing a driver subsystem"](#choosing-a-driver-subsystem).
<hr>
@@ -225,7 +231,7 @@ Just below `#include_next <mcuconf.h>` add:
Where 'n' matches the peripheral number of your selected USART on the MCU.
3. In you keyboards `config.h`: override the default USART `SIO` driver if you use a USART peripheral that does not belong to the default selected `SIOD1` driver. For instance, if you selected `STM32_SERIAL_USE_USART3` the matching driver would be `SIOD3`.
3. In the keyboard's `config.h` file: override the default USART `SIO` driver if you use a USART peripheral that does not belong to the default selected `SIOD1` driver. For instance, if you selected `STM32_SERIAL_USE_USART3` the matching driver would be `SIOD3`.
```c
#define SERIAL_USART_DRIVER SIOD3
@@ -233,9 +239,9 @@ Where 'n' matches the peripheral number of your selected USART on the MCU.
### The `PIO` driver
The `PIO` subsystem is a Raspberry Pi RP2040 specific implementation, using the integrated PIO peripheral and is therefore only available on this MCU. Because of the flexible nature of the PIO peripherals, **any** GPIO pin can be used as a `TX` or `RX` pin. Half-duplex and Full-duplex operation is fully supported. The Half-duplex operation mode uses the built-in pull-ups and GPIO manipulation on the RP2040 to drive the line high by default. An external pull-up is therefore not necessary.
The `PIO` subsystem is a Raspberry Pi RP2040 specific implementation, using an integrated PIO peripheral and is therefore only available on this MCU. Because of the flexible nature of PIO peripherals, **any** GPIO pin can be used as a `TX` or `RX` pin. Half-duplex and Full-duplex operation modes are fully supported with this driver. Half-duplex uses the built-in pull-ups and GPIO manipulation of the RP2040 to drive the line high by default, thus an external pull-up resistor **is not required**.
You may optionally switch the PIO peripheral used with the following define in config.h:
Optionally, the PIO peripheral utilized for split communication can be changed with the following define in config.h:
```c
#define SERIAL_PIO_USE_PIO1 // Force the usage of PIO1 peripheral, by default the Serial implementation uses the PIO0 peripheral
```

View File

@@ -2,7 +2,7 @@
AVR is severely resource-constrained, and as QMK continues to grow, it is approaching a point where support for AVR may need to be moved to legacy status as newer development is unable to fit into those constraints.
However, if you need to reduce the compiled size of your firmware, there are a number of options to do so.
However, if you need to reduce the compiled size of your firmware to fit the controller's limited flash size, there are a number of options to do so.
## `rules.mk` Settings
First and foremost is enabling link time optimization. To do so, add this to your rules.mk:
@@ -91,15 +91,19 @@ Or if you're not using layers at all, you can outright remove the functionality
There are two `__attribute__ ((weak))` placeholder functions available to customize magic keycodes. If you are not using that feature to swap keycodes, such as backslash with backspace, add the following to your `keymap.c` or user space code:
```c
#ifndef MAGIC_ENABLE
uint16_t keycode_config(uint16_t keycode) {
return keycode;
}
#endif
```
Likewise, if you are not using magic keycodes to swap modifiers, such as Control with GUI, add the following to your `keymap.c` or user space code:
```c
#ifndef MAGIC_ENABLE
uint8_t mod_config(uint8_t mod) {
return mod;
}
#endif
```
Both of them will overwrite the placeholder functions with a simple return statement to reduce firmware size.
@@ -197,11 +201,7 @@ For RGB Matrix, these need to be explicitly enabled as well. To disable any that
# Final Thoughts
If you've done all of this, and your firmware is still too large, then it's time. It's time to consider making the switch to ARM. Unfortunately, right now is the worst possible time for that, due to the silicon shortage, and supply chain issues. Getting an ARM chip is difficult, at best, and significantly overpriced, at worst.
-- Drashna
That said, there are a number of Pro Micro replacements with ARM controllers:
* [Proton C](https://qmk.fm/proton-c/) (out of stock)
If you've done all of this, and your firmware is still too large, then it is time to consider making the switch to ARM. There are a number of Pro Micro replacements with an ARM controller:
* [Bonsai C](https://github.com/customMK/Bonsai-C) (Open Source, DIY/PCBA)
* [STeMCell](https://github.com/megamind4089/STeMCell) (Open Source, DIY/PCBA)
* [Adafruit KB2040](https://learn.adafruit.com/adafruit-kb2040)
@@ -212,6 +212,7 @@ That said, there are a number of Pro Micro replacements with ARM controllers:
* [Liatris](https://splitkb.com/products/liatris)
* [Imera](https://splitkb.com/products/imera)
* [Michi](https://github.com/ci-bus/michi-promicro-rp2040)
* [Proton C](https://qmk.fm/proton-c/) (out of stock)
There are other, non-Pro Micro compatible boards out there. The most popular being:
* [WeAct Blackpill F411](https://www.aliexpress.com/item/1005001456186625.html) (~$6 USD)

View File

@@ -0,0 +1,46 @@
/* Copyright 2023 CMM.S Freather
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "quantum.h"
const rgblight_segment_t PROGMEM my_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS(
{0, 13, HSV_WHITE}
);
const rgblight_segment_t PROGMEM my_capsoff_layer[] = RGBLIGHT_LAYER_SEGMENTS(
{0, 1, HSV_BLACK}
);
// Now define the array of layers. Later layers take precedence
const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(
my_capslock_layer,
my_capsoff_layer
);
void keyboard_post_init_kb(void){
rgblight_layers = my_rgb_layers;
keyboard_post_init_user();
}
bool led_update_kb(led_t led_state){
bool res = led_update_user(led_state);
if (res) {
rgblight_set_layer_state(0, led_state.caps_lock);
rgblight_set_layer_state(1, !led_state.caps_lock);
}
return res;
}

View File

@@ -0,0 +1,699 @@
{
"manufacturer": "Freather",
"keyboard_name": "Atelier_Haven Haven60",
"maintainer": "Freather",
"bootloader": "atmel-dfu",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"extrakey": true,
"mousekey": true,
"nkro": true,
"rgblight": true
},
"matrix_pins": {
"cols": ["C7", "D4", "D6", "D7", "B4", "B5", "B6", "D5", "D3", "D2", "D1", "D0", "B1", "B0"],
"rows": ["F0", "E6", "C6", "F4", "F1"]
},
"processor": "atmega32u4",
"url": "https://keyspensory.store/products",
"usb": {
"device_version": "1.0.0",
"pid": "0x4660",
"vid": "0x4446"
},
"ws2812": {
"pin": "F5"
},
"rgblight": {
"led_count": 13,
"saturation_steps": 8,
"brightness_steps": 8,
"sleep": true,
"max_brightness": 125,
"layers": {
"enabled": true
},
"animations": {
"alternating": true,
"breathing": true,
"christmas": true,
"knight": true,
"rainbow_mood": true,
"rainbow_swirl": true,
"snake": true,
"static_gradient": true,
"twinkle": true
}
},
"community_layouts": ["60_ansi_tsangan", "60_tsangan_hhkb", "60_ansi_wkl", "60_ansi_wkl_split_bs_rshift", "60_hhkb", "60_iso_tsangan", "60_iso_tsangan_split_bs_rshift", "60_iso_wkl", "60_iso_wkl_split_bs_rshift"],
"layouts": {
"LAYOUT_all": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0},
{"matrix": [2, 12], "x": 14, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
{"matrix": [3, 1], "x": 1.25, "y": 3},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
{"matrix": [4, 1], "x": 1.5, "y": 4},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
{"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 12], "x": 12.5, "y": 4},
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
"LAYOUT_60_ansi_tsangan": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
{"matrix": [4, 1], "x": 1.5, "y": 4},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
{"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 12], "x": 12.5, "y": 4},
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
"LAYOUT_60_tsangan_hhkb": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0},
{"matrix": [2, 12], "x": 14, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
{"matrix": [4, 1], "x": 1.5, "y": 4},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
{"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 12], "x": 12.5, "y": 4},
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
"LAYOUT_60_ansi_wkl": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
{"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
"LAYOUT_60_ansi_wkl_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0},
{"matrix": [2, 12], "x": 14, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
{"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
"LAYOUT_60_hhkb": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0},
{"matrix": [2, 12], "x": 14, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"matrix": [4, 1], "x": 1.5, "y": 4},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
{"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 12], "x": 12.5, "y": 4}
]
},
"LAYOUT_60_iso_tsangan": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [1, 13], "x": 12.75, "y": 2},
{"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
{"matrix": [3, 1], "x": 1.25, "y": 3},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
{"matrix": [4, 1], "x": 1.5, "y": 4},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
{"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 12], "x": 12.5, "y": 4},
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
"LAYOUT_60_iso_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0},
{"matrix": [2, 12], "x": 14, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [1, 13], "x": 12.75, "y": 2},
{"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
{"matrix": [3, 1], "x": 1.25, "y": 3},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
{"matrix": [4, 1], "x": 1.5, "y": 4},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
{"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 12], "x": 12.5, "y": 4},
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
"LAYOUT_60_iso_wkl": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [1, 13], "x": 12.75, "y": 2},
{"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
{"matrix": [3, 1], "x": 1.25, "y": 3},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
{"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
"LAYOUT_60_iso_wkl_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0},
{"matrix": [2, 12], "x": 14, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [1, 13], "x": 12.75, "y": 2},
{"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
{"matrix": [3, 1], "x": 1.25, "y": 3},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
{"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
}
}
}

View File

@@ -0,0 +1,21 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_all(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, 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_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_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL
),
[1] = LAYOUT_all(
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_F12, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_RGHT, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DOWN, _______, _______,
_______, _______, _______, _______, _______, _______, _______
)
};

View File

@@ -0,0 +1,21 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_all(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, 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_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_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL
),
[1] = LAYOUT_all(
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_F12, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_RGHT, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DOWN, _______, _______,
_______, _______, _______, _______, _______, _______, _______
)
};

View File

@@ -0,0 +1 @@
VIA_ENABLE = yes

View File

@@ -0,0 +1,28 @@
# haven60
![haven60](https://i.imgur.com/Uja750Oh.png)
Haven60 PCB for Atelier Haven Haven60% keyboard
both hotswap and solder pcbs use same firmware
* Keyboard Maintainer: [Freather](https://github.com/Freather)
* Hardware Supported: atmega32u4-mu
* Hardware Availability: keyspensory.store
Make example for this keyboard (after setting up your build environment):
make ah/haven60:default
Flashing example for this keyboard:
make ah/haven60:default:flash
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
Enter the bootloader in 3 ways:
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@@ -0,0 +1 @@
# This file intentionally left blank

View File

@@ -130,6 +130,227 @@
{"matrix": [0, 14], "x": 17, "y": 4},
{"matrix": [0, 7], "x": 18, "y": 4},
{"matrix": [6, 0], "x": 0, "y": 5, "w": 1.25},
{"matrix": [6, 1], "x": 1.25, "y": 5, "w": 1.25},
{"matrix": [6, 2], "x": 2.5, "y": 5, "w": 1.25},
{"matrix": [6, 3], "x": 3.75, "y": 5, "w": 6.25},
{"matrix": [6, 4], "x": 10, "y": 5, "w": 1.5},
{"matrix": [6, 5], "x": 11.5, "y": 5, "w": 1.5},
{"matrix": [6, 6], "x": 13, "y": 5},
{"matrix": [6, 8], "x": 14, "y": 5},
{"matrix": [6, 9], "x": 15, "y": 5},
{"matrix": [6, 10], "x": 16, "y": 5},
{"matrix": [6, 11], "x": 17, "y": 5},
{"matrix": [6, 12], "x": 18, "y": 5}
]
},
"LAYOUT_96_ansi_rwkl_split_num_plus_enter": {
"layout": [
{"matrix": [1, 0], "x": 0, "y": 0},
{"matrix": [1, 1], "x": 1, "y": 0},
{"matrix": [1, 2], "x": 2, "y": 0},
{"matrix": [1, 3], "x": 3, "y": 0},
{"matrix": [1, 4], "x": 4, "y": 0},
{"matrix": [1, 5], "x": 5, "y": 0},
{"matrix": [1, 6], "x": 6, "y": 0},
{"matrix": [1, 7], "x": 7, "y": 0},
{"matrix": [1, 8], "x": 8, "y": 0},
{"matrix": [1, 9], "x": 9, "y": 0},
{"matrix": [1, 10], "x": 10, "y": 0},
{"matrix": [1, 11], "x": 11, "y": 0},
{"matrix": [1, 12], "x": 12, "y": 0},
{"matrix": [1, 13], "x": 13, "y": 0},
{"matrix": [1, 14], "x": 14, "y": 0},
{"matrix": [1, 15], "x": 15, "y": 0},
{"matrix": [0, 9], "x": 16, "y": 0},
{"matrix": [0, 10], "x": 17, "y": 0},
{"matrix": [0, 12], "x": 18, "y": 0},
{"matrix": [2, 0], "x": 0, "y": 1},
{"matrix": [2, 1], "x": 1, "y": 1},
{"matrix": [2, 2], "x": 2, "y": 1},
{"matrix": [2, 3], "x": 3, "y": 1},
{"matrix": [2, 4], "x": 4, "y": 1},
{"matrix": [2, 5], "x": 5, "y": 1},
{"matrix": [2, 6], "x": 6, "y": 1},
{"matrix": [2, 7], "x": 7, "y": 1},
{"matrix": [2, 8], "x": 8, "y": 1},
{"matrix": [2, 9], "x": 9, "y": 1},
{"matrix": [2, 10], "x": 10, "y": 1},
{"matrix": [2, 11], "x": 11, "y": 1},
{"matrix": [2, 12], "x": 12, "y": 1},
{"matrix": [2, 13], "x": 13, "y": 1, "w": 2},
{"matrix": [2, 15], "x": 15, "y": 1},
{"matrix": [0, 11], "x": 16, "y": 1},
{"matrix": [0, 15], "x": 17, "y": 1},
{"matrix": [6, 15], "x": 18, "y": 1},
{"matrix": [3, 0], "x": 0, "y": 2, "w": 1.5},
{"matrix": [3, 1], "x": 1.5, "y": 2},
{"matrix": [3, 2], "x": 2.5, "y": 2},
{"matrix": [3, 3], "x": 3.5, "y": 2},
{"matrix": [3, 4], "x": 4.5, "y": 2},
{"matrix": [3, 5], "x": 5.5, "y": 2},
{"matrix": [3, 6], "x": 6.5, "y": 2},
{"matrix": [3, 7], "x": 7.5, "y": 2},
{"matrix": [3, 8], "x": 8.5, "y": 2},
{"matrix": [3, 9], "x": 9.5, "y": 2},
{"matrix": [3, 10], "x": 10.5, "y": 2},
{"matrix": [3, 11], "x": 11.5, "y": 2},
{"matrix": [3, 12], "x": 12.5, "y": 2},
{"matrix": [3, 13], "x": 13.5, "y": 2, "w": 1.5},
{"matrix": [3, 14], "x": 15, "y": 2},
{"matrix": [3, 15], "x": 16, "y": 2},
{"matrix": [0, 13], "x": 17, "y": 2},
{"matrix": [6, 13], "x": 18, "y": 2},
{"matrix": [4, 0], "x": 0, "y": 3, "w": 1.75},
{"matrix": [4, 1], "x": 1.75, "y": 3},
{"matrix": [4, 2], "x": 2.75, "y": 3},
{"matrix": [4, 3], "x": 3.75, "y": 3},
{"matrix": [4, 4], "x": 4.75, "y": 3},
{"matrix": [4, 5], "x": 5.75, "y": 3},
{"matrix": [4, 6], "x": 6.75, "y": 3},
{"matrix": [4, 7], "x": 7.75, "y": 3},
{"matrix": [4, 8], "x": 8.75, "y": 3},
{"matrix": [4, 9], "x": 9.75, "y": 3},
{"matrix": [4, 10], "x": 10.75, "y": 3},
{"matrix": [4, 11], "x": 11.75, "y": 3},
{"matrix": [4, 12], "x": 12.75, "y": 3, "w": 2.25},
{"matrix": [4, 13], "x": 15, "y": 3},
{"matrix": [4, 14], "x": 16, "y": 3},
{"matrix": [4, 15], "x": 17, "y": 3},
{"matrix": [6, 14], "x": 18, "y": 3},
{"matrix": [5, 0], "x": 0, "y": 4, "w": 2.25},
{"matrix": [5, 2], "x": 2.25, "y": 4},
{"matrix": [5, 3], "x": 3.25, "y": 4},
{"matrix": [5, 4], "x": 4.25, "y": 4},
{"matrix": [5, 5], "x": 5.25, "y": 4},
{"matrix": [5, 6], "x": 6.25, "y": 4},
{"matrix": [5, 7], "x": 7.25, "y": 4},
{"matrix": [5, 8], "x": 8.25, "y": 4},
{"matrix": [5, 9], "x": 9.25, "y": 4},
{"matrix": [5, 10], "x": 10.25, "y": 4},
{"matrix": [5, 11], "x": 11.25, "y": 4},
{"matrix": [5, 12], "x": 12.25, "y": 4, "w": 1.75},
{"matrix": [5, 13], "x": 14, "y": 4},
{"matrix": [5, 14], "x": 15, "y": 4},
{"matrix": [5, 15], "x": 16, "y": 4},
{"matrix": [0, 14], "x": 17, "y": 4},
{"matrix": [0, 7], "x": 18, "y": 4},
{"matrix": [6, 0], "x": 0, "y": 5, "w": 1.25},
{"matrix": [6, 1], "x": 1.25, "y": 5, "w": 1.25},
{"matrix": [6, 2], "x": 2.5, "y": 5, "w": 1.25},
{"matrix": [6, 3], "x": 3.75, "y": 5, "w": 6.25},
{"matrix": [6, 4], "x": 10, "y": 5, "w": 1.5},
{"matrix": [6, 5], "x": 11.5, "y": 5, "w": 1.5},
{"matrix": [6, 6], "x": 13, "y": 5},
{"matrix": [6, 8], "x": 14, "y": 5},
{"matrix": [6, 9], "x": 15, "y": 5},
{"matrix": [6, 10], "x": 16, "y": 5},
{"matrix": [6, 11], "x": 17, "y": 5},
{"matrix": [6, 12], "x": 18, "y": 5}
]
},
"LAYOUT_96_ansi_rwkl_split_bs_num_plus_enter": {
"layout": [
{"matrix": [1, 0], "x": 0, "y": 0},
{"matrix": [1, 1], "x": 1, "y": 0},
{"matrix": [1, 2], "x": 2, "y": 0},
{"matrix": [1, 3], "x": 3, "y": 0},
{"matrix": [1, 4], "x": 4, "y": 0},
{"matrix": [1, 5], "x": 5, "y": 0},
{"matrix": [1, 6], "x": 6, "y": 0},
{"matrix": [1, 7], "x": 7, "y": 0},
{"matrix": [1, 8], "x": 8, "y": 0},
{"matrix": [1, 9], "x": 9, "y": 0},
{"matrix": [1, 10], "x": 10, "y": 0},
{"matrix": [1, 11], "x": 11, "y": 0},
{"matrix": [1, 12], "x": 12, "y": 0},
{"matrix": [1, 13], "x": 13, "y": 0},
{"matrix": [1, 14], "x": 14, "y": 0},
{"matrix": [1, 15], "x": 15, "y": 0},
{"matrix": [0, 9], "x": 16, "y": 0},
{"matrix": [0, 10], "x": 17, "y": 0},
{"matrix": [0, 12], "x": 18, "y": 0},
{"matrix": [2, 0], "x": 0, "y": 1},
{"matrix": [2, 1], "x": 1, "y": 1},
{"matrix": [2, 2], "x": 2, "y": 1},
{"matrix": [2, 3], "x": 3, "y": 1},
{"matrix": [2, 4], "x": 4, "y": 1},
{"matrix": [2, 5], "x": 5, "y": 1},
{"matrix": [2, 6], "x": 6, "y": 1},
{"matrix": [2, 7], "x": 7, "y": 1},
{"matrix": [2, 8], "x": 8, "y": 1},
{"matrix": [2, 9], "x": 9, "y": 1},
{"matrix": [2, 10], "x": 10, "y": 1},
{"matrix": [2, 11], "x": 11, "y": 1},
{"matrix": [2, 12], "x": 12, "y": 1},
{"matrix": [2, 13], "x": 13, "y": 1},
{"matrix": [2, 14], "x": 14, "y": 1},
{"matrix": [2, 15], "x": 15, "y": 1},
{"matrix": [0, 11], "x": 16, "y": 1},
{"matrix": [0, 15], "x": 17, "y": 1},
{"matrix": [6, 15], "x": 18, "y": 1},
{"matrix": [3, 0], "x": 0, "y": 2, "w": 1.5},
{"matrix": [3, 1], "x": 1.5, "y": 2},
{"matrix": [3, 2], "x": 2.5, "y": 2},
{"matrix": [3, 3], "x": 3.5, "y": 2},
{"matrix": [3, 4], "x": 4.5, "y": 2},
{"matrix": [3, 5], "x": 5.5, "y": 2},
{"matrix": [3, 6], "x": 6.5, "y": 2},
{"matrix": [3, 7], "x": 7.5, "y": 2},
{"matrix": [3, 8], "x": 8.5, "y": 2},
{"matrix": [3, 9], "x": 9.5, "y": 2},
{"matrix": [3, 10], "x": 10.5, "y": 2},
{"matrix": [3, 11], "x": 11.5, "y": 2},
{"matrix": [3, 12], "x": 12.5, "y": 2},
{"matrix": [3, 13], "x": 13.5, "y": 2, "w": 1.5},
{"matrix": [3, 14], "x": 15, "y": 2},
{"matrix": [3, 15], "x": 16, "y": 2},
{"matrix": [0, 13], "x": 17, "y": 2},
{"matrix": [6, 13], "x": 18, "y": 2},
{"matrix": [4, 0], "x": 0, "y": 3, "w": 1.75},
{"matrix": [4, 1], "x": 1.75, "y": 3},
{"matrix": [4, 2], "x": 2.75, "y": 3},
{"matrix": [4, 3], "x": 3.75, "y": 3},
{"matrix": [4, 4], "x": 4.75, "y": 3},
{"matrix": [4, 5], "x": 5.75, "y": 3},
{"matrix": [4, 6], "x": 6.75, "y": 3},
{"matrix": [4, 7], "x": 7.75, "y": 3},
{"matrix": [4, 8], "x": 8.75, "y": 3},
{"matrix": [4, 9], "x": 9.75, "y": 3},
{"matrix": [4, 10], "x": 10.75, "y": 3},
{"matrix": [4, 11], "x": 11.75, "y": 3},
{"matrix": [4, 12], "x": 12.75, "y": 3, "w": 2.25},
{"matrix": [4, 13], "x": 15, "y": 3},
{"matrix": [4, 14], "x": 16, "y": 3},
{"matrix": [4, 15], "x": 17, "y": 3},
{"matrix": [6, 14], "x": 18, "y": 3},
{"matrix": [5, 0], "x": 0, "y": 4, "w": 2.25},
{"matrix": [5, 2], "x": 2.25, "y": 4},
{"matrix": [5, 3], "x": 3.25, "y": 4},
{"matrix": [5, 4], "x": 4.25, "y": 4},
{"matrix": [5, 5], "x": 5.25, "y": 4},
{"matrix": [5, 6], "x": 6.25, "y": 4},
{"matrix": [5, 7], "x": 7.25, "y": 4},
{"matrix": [5, 8], "x": 8.25, "y": 4},
{"matrix": [5, 9], "x": 9.25, "y": 4},
{"matrix": [5, 10], "x": 10.25, "y": 4},
{"matrix": [5, 11], "x": 11.25, "y": 4},
{"matrix": [5, 12], "x": 12.25, "y": 4, "w": 1.75},
{"matrix": [5, 13], "x": 14, "y": 4},
{"matrix": [5, 14], "x": 15, "y": 4},
{"matrix": [5, 15], "x": 16, "y": 4},
{"matrix": [0, 14], "x": 17, "y": 4},
{"matrix": [0, 7], "x": 18, "y": 4},
{"matrix": [6, 0], "x": 0, "y": 5, "w": 1.25},
{"matrix": [6, 1], "x": 1.25, "y": 5, "w": 1.25},
{"matrix": [6, 2], "x": 2.5, "y": 5, "w": 1.25},

View File

@@ -0,0 +1,25 @@
# Matrix Diagram for Han Chen AMJ96
There's a lot of options available on the PCB, including some on the
bottom row, but I haven't ever found high quality images of a bare PCB
with which to determine what's actually supported. :\\\
\- @noroadsleft, 19 January, 2024
```
┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
│10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │1D │1E │1F │09 │0A │0C │
├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤ ┌───────┐
│20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2C │2D │2E │2F │0B │0F │6F │ │2D │ 2u Backspace
├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┼───┼───┼───┼───┤ └─┬─────┤ ┌─────┐ ┌───┐
│30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C │3D │3E │3F │0D │6D │ │ │ │3D │ │ │
├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┼───┼───┼───┤ ┌──┴┐?? │ ISO Enter ┌──┴┬────┤ Split Enter │?? │ 2u Numpad Plus
│40 │41 │42 │43 │44 │45 │46 │47 │48 │49 │4A │4B │4C │4D │4E │4F │6E │ │?? │ │ │?? │?? │ │ │
├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┼───┼───┼───┤ ┌─┴───┴────┤ └───┴────┘ ├───┤
│50 │51 │52 │53 │54 │55 │56 │57 │58 │59 │5A │5B │5C │5D │5E │5F │0E │07 │ │?? │ 2.75u │ │
├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┴┬──┴──┬───┼───┼───┼───┼───┼───┤ └──────────┘ RShift │?? │ 2u Numpad Enter
│60 │61 │62 │63 │64 │65 │66 │68 │69 │6A │6B │6C │ │ │
└────┴────┴────┴────────────────────────┴─────┴─────┴───┴───┴───┴───┴───┴───┘ └───┘
┌────────┐ ┌───────┐
│50 │ 2.25u LShift │?? │ 2u Numpad Zero
└────────┘ └───────┘
```

View File

@@ -0,0 +1,22 @@
/* Copyright 2024 Archetype Made, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
#define BACKLIGHT_PWM_DRIVER PWMD5
#define BACKLIGHT_PWM_CHANNEL RP2040_PWM_CHANNEL_A

View File

@@ -0,0 +1,21 @@
/* Copyright 2024 Archetype Made, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#define HAL_USE_PWM TRUE
#include_next <halconf.h>

View File

@@ -0,0 +1,98 @@
{
"manufacturer": "Archetype",
"keyboard_name": "Minerva LX",
"maintainer": "Archetype",
"backlight": {
"pin": "GP7"
},
"bootloader": "rp2040",
"diode_direction": "COL2ROW",
"features": {
"backlight": true,
"bootmagic": true,
"extrakey": true,
"mousekey": true
},
"matrix_pins": {
"cols": ["GP0", "GP29", "GP28", "GP27", "GP26", "GP25", "GP24", "GP23", "GP22", "GP21", "GP20", "GP19", "GP18", "GP17", "GP16"],
"rows": ["GP11", "GP12", "GP13", "GP14", "GP15"]
},
"processor": "RP2040",
"url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0100",
"vid": "0x5453"
},
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [2, 12], "x": 13, "y": 0},
{"matrix": [0, 13], "x": 14, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 1], "x": 2.25, "y": 3},
{"matrix": [3, 2], "x": 3.25, "y": 3},
{"matrix": [3, 3], "x": 4.25, "y": 3},
{"matrix": [3, 4], "x": 5.25, "y": 3},
{"matrix": [3, 5], "x": 6.25, "y": 3},
{"matrix": [3, 6], "x": 7.25, "y": 3},
{"matrix": [3, 7], "x": 8.25, "y": 3},
{"matrix": [3, 8], "x": 9.25, "y": 3},
{"matrix": [3, 9], "x": 10.25, "y": 3},
{"matrix": [3, 10], "x": 11.25, "y": 3},
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
{"matrix": [4, 1], "x": 1.5, "y": 4},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 4], "x": 4, "y": 4, "w": 3},
{"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
{"matrix": [4, 8], "x": 8, "y": 4, "w": 3},
{"matrix": [4, 9], "x": 10, "y": 5.25, "w": 1.25},
{"matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 12], "x": 12.5, "y": 4},
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
}
}
}

View File

@@ -0,0 +1,35 @@
/* Copyright 2024 Archetype Made, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, 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_RSFT,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL
),
[1] = LAYOUT(
QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
)
};

View File

@@ -0,0 +1,35 @@
/* Copyright 2024 Archetype Made, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, 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_RSFT,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL
),
[1] = LAYOUT(
QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
)
};

View File

@@ -0,0 +1,2 @@
VIA_ENABLE = yes
LTO_ENABLE = yes

View File

@@ -0,0 +1,22 @@
/* Copyright 2024 Archetype Made, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include_next <mcuconf.h>
#undef RP_PWM_USE_PWM5
#define RP_PWM_USE_PWM5 TRUE

View File

@@ -0,0 +1,24 @@
# Minerva LX
![Minerva LX](https://i.imgur.com/f97nsrx.jpg)
The following is the QMK Firmware for the Minerva LX PCB.
* Keyboard Maintainer: [Archetype](https://github.com/archetype-made)
* Hardware Supported: RP2040-based proprietary PCB.
* Hardware Availability: https://archetypemade.com/minerva-is-here/
Make example for this keyboard (after setting up your build environment):
make archetype/minervalx:default
Flashing example for this keyboard:
make archetype/minervalx:default:flash
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader Enter the bootloader in 3 ways:
* **Bootmagic reset**: Hold down the key ESC key and plug in the keyboard (Top Left most switch)
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if available
* **Physical Reset Button**: With the PCB unplugged, hold down the button labled `RESET` on the back of the PCB while pluggin in the USB.

View File

@@ -0,0 +1 @@
# This file intentionally left blank

View File

@@ -45,7 +45,7 @@
"layout_aliases": {
"LAYOUT": "LAYOUT_all"
},
"community_layouts": ["60_ansi_split_bs_rshift", "60_hhkb"],
"community_layouts": ["60_ansi", "60_ansi_split_bs_rshift", "60_ansi_tsangan", "60_tsangan_hhkb", "60_ansi_wkl", "60_ansi_wkl_split_bs_rshift", "60_hhkb", "60_iso", "60_iso_split_bs_rshift", "60_iso_tsangan", "60_iso_tsangan_split_bs_rshift", "60_iso_wkl", "60_iso_wkl_split_bs_rshift"],
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -120,6 +120,75 @@
{"matrix": [0, 13], "x": 13.75, "y": 4, "w": 1.25}
]
},
"LAYOUT_60_ansi": {
"layout": [
{"matrix": [4, 0], "x": 0, "y": 0},
{"matrix": [4, 1], "x": 1, "y": 0},
{"matrix": [4, 2], "x": 2, "y": 0},
{"matrix": [4, 3], "x": 3, "y": 0},
{"matrix": [4, 4], "x": 4, "y": 0},
{"matrix": [4, 5], "x": 5, "y": 0},
{"matrix": [4, 6], "x": 6, "y": 0},
{"matrix": [4, 7], "x": 7, "y": 0},
{"matrix": [4, 8], "x": 8, "y": 0},
{"matrix": [4, 9], "x": 9, "y": 0},
{"matrix": [4, 10], "x": 10, "y": 0},
{"matrix": [4, 11], "x": 11, "y": 0},
{"matrix": [4, 12], "x": 12, "y": 0},
{"matrix": [4, 14], "x": 13, "y": 0, "w": 2},
{"matrix": [3, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [3, 1], "x": 1.5, "y": 1},
{"matrix": [3, 2], "x": 2.5, "y": 1},
{"matrix": [3, 3], "x": 3.5, "y": 1},
{"matrix": [3, 4], "x": 4.5, "y": 1},
{"matrix": [3, 5], "x": 5.5, "y": 1},
{"matrix": [3, 6], "x": 6.5, "y": 1},
{"matrix": [3, 7], "x": 7.5, "y": 1},
{"matrix": [3, 8], "x": 8.5, "y": 1},
{"matrix": [3, 9], "x": 9.5, "y": 1},
{"matrix": [3, 10], "x": 10.5, "y": 1},
{"matrix": [3, 11], "x": 11.5, "y": 1},
{"matrix": [3, 12], "x": 12.5, "y": 1},
{"matrix": [3, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [1, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [1, 2], "x": 2.25, "y": 3},
{"matrix": [1, 3], "x": 3.25, "y": 3},
{"matrix": [1, 4], "x": 4.25, "y": 3},
{"matrix": [1, 5], "x": 5.25, "y": 3},
{"matrix": [1, 6], "x": 6.25, "y": 3},
{"matrix": [1, 7], "x": 7.25, "y": 3},
{"matrix": [1, 8], "x": 8.25, "y": 3},
{"matrix": [1, 9], "x": 9.25, "y": 3},
{"matrix": [1, 10], "x": 10.25, "y": 3},
{"matrix": [1, 11], "x": 11.25, "y": 3},
{"matrix": [1, 12], "x": 12.25, "y": 3, "w": 2.75},
{"matrix": [0, 0], "x": 0, "y": 4, "w": 1.25},
{"matrix": [0, 1], "x": 1.25, "y": 4, "w": 1.25},
{"matrix": [0, 2], "x": 2.5, "y": 4, "w": 1.25},
{"matrix": [0, 6], "x": 3.75, "y": 4, "w": 6.25},
{"matrix": [0, 10], "x": 10, "y": 4, "w": 1.25},
{"matrix": [0, 11], "x": 11.25, "y": 4, "w": 1.25},
{"matrix": [0, 12], "x": 12.5, "y": 4, "w": 1.25},
{"matrix": [0, 13], "x": 13.75, "y": 4, "w": 1.25}
]
},
"LAYOUT_60_ansi_split_bs_rshift": {
"layout": [
{"matrix": [4, 0], "x": 0, "y": 0},
@@ -191,6 +260,278 @@
{"matrix": [0, 13], "x": 13.75, "y": 4, "w": 1.25}
]
},
"LAYOUT_60_ansi_tsangan": {
"layout": [
{"matrix": [4, 0], "x": 0, "y": 0},
{"matrix": [4, 1], "x": 1, "y": 0},
{"matrix": [4, 2], "x": 2, "y": 0},
{"matrix": [4, 3], "x": 3, "y": 0},
{"matrix": [4, 4], "x": 4, "y": 0},
{"matrix": [4, 5], "x": 5, "y": 0},
{"matrix": [4, 6], "x": 6, "y": 0},
{"matrix": [4, 7], "x": 7, "y": 0},
{"matrix": [4, 8], "x": 8, "y": 0},
{"matrix": [4, 9], "x": 9, "y": 0},
{"matrix": [4, 10], "x": 10, "y": 0},
{"matrix": [4, 11], "x": 11, "y": 0},
{"matrix": [4, 12], "x": 12, "y": 0},
{"matrix": [4, 13], "x": 13, "y": 0, "w": 2},
{"matrix": [3, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [3, 1], "x": 1.5, "y": 1},
{"matrix": [3, 2], "x": 2.5, "y": 1},
{"matrix": [3, 3], "x": 3.5, "y": 1},
{"matrix": [3, 4], "x": 4.5, "y": 1},
{"matrix": [3, 5], "x": 5.5, "y": 1},
{"matrix": [3, 6], "x": 6.5, "y": 1},
{"matrix": [3, 7], "x": 7.5, "y": 1},
{"matrix": [3, 8], "x": 8.5, "y": 1},
{"matrix": [3, 9], "x": 9.5, "y": 1},
{"matrix": [3, 10], "x": 10.5, "y": 1},
{"matrix": [3, 11], "x": 11.5, "y": 1},
{"matrix": [3, 12], "x": 12.5, "y": 1},
{"matrix": [3, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [1, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [1, 2], "x": 2.25, "y": 3},
{"matrix": [1, 3], "x": 3.25, "y": 3},
{"matrix": [1, 4], "x": 4.25, "y": 3},
{"matrix": [1, 5], "x": 5.25, "y": 3},
{"matrix": [1, 6], "x": 6.25, "y": 3},
{"matrix": [1, 7], "x": 7.25, "y": 3},
{"matrix": [1, 8], "x": 8.25, "y": 3},
{"matrix": [1, 9], "x": 9.25, "y": 3},
{"matrix": [1, 10], "x": 10.25, "y": 3},
{"matrix": [1, 11], "x": 11.25, "y": 3},
{"matrix": [1, 12], "x": 12.25, "y": 3, "w": 2.75},
{"matrix": [0, 0], "x": 0, "y": 4, "w": 1.5},
{"matrix": [0, 1], "x": 1.5, "y": 4},
{"matrix": [0, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [0, 6], "x": 4, "y": 4, "w": 7},
{"matrix": [0, 11], "x": 11, "y": 4, "w": 1.5},
{"matrix": [0, 12], "x": 12.5, "y": 4},
{"matrix": [0, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
"LAYOUT_60_tsangan_hhkb": {
"layout": [
{"matrix": [4, 0], "x": 0, "y": 0},
{"matrix": [4, 1], "x": 1, "y": 0},
{"matrix": [4, 2], "x": 2, "y": 0},
{"matrix": [4, 3], "x": 3, "y": 0},
{"matrix": [4, 4], "x": 4, "y": 0},
{"matrix": [4, 5], "x": 5, "y": 0},
{"matrix": [4, 6], "x": 6, "y": 0},
{"matrix": [4, 7], "x": 7, "y": 0},
{"matrix": [4, 8], "x": 8, "y": 0},
{"matrix": [4, 9], "x": 9, "y": 0},
{"matrix": [4, 10], "x": 10, "y": 0},
{"matrix": [4, 11], "x": 11, "y": 0},
{"matrix": [4, 12], "x": 12, "y": 0},
{"matrix": [4, 13], "x": 13, "y": 0},
{"matrix": [4, 14], "x": 14, "y": 0},
{"matrix": [3, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [3, 1], "x": 1.5, "y": 1},
{"matrix": [3, 2], "x": 2.5, "y": 1},
{"matrix": [3, 3], "x": 3.5, "y": 1},
{"matrix": [3, 4], "x": 4.5, "y": 1},
{"matrix": [3, 5], "x": 5.5, "y": 1},
{"matrix": [3, 6], "x": 6.5, "y": 1},
{"matrix": [3, 7], "x": 7.5, "y": 1},
{"matrix": [3, 8], "x": 8.5, "y": 1},
{"matrix": [3, 9], "x": 9.5, "y": 1},
{"matrix": [3, 10], "x": 10.5, "y": 1},
{"matrix": [3, 11], "x": 11.5, "y": 1},
{"matrix": [3, 12], "x": 12.5, "y": 1},
{"matrix": [3, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [1, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [1, 2], "x": 2.25, "y": 3},
{"matrix": [1, 3], "x": 3.25, "y": 3},
{"matrix": [1, 4], "x": 4.25, "y": 3},
{"matrix": [1, 5], "x": 5.25, "y": 3},
{"matrix": [1, 6], "x": 6.25, "y": 3},
{"matrix": [1, 7], "x": 7.25, "y": 3},
{"matrix": [1, 8], "x": 8.25, "y": 3},
{"matrix": [1, 9], "x": 9.25, "y": 3},
{"matrix": [1, 10], "x": 10.25, "y": 3},
{"matrix": [1, 11], "x": 11.25, "y": 3},
{"matrix": [1, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [1, 13], "x": 14, "y": 3},
{"matrix": [0, 0], "x": 0, "y": 4, "w": 1.5},
{"matrix": [0, 1], "x": 1.5, "y": 4},
{"matrix": [0, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [0, 6], "x": 4, "y": 4, "w": 7},
{"matrix": [0, 11], "x": 11, "y": 4, "w": 1.5},
{"matrix": [0, 12], "x": 12.5, "y": 4},
{"matrix": [0, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
"LAYOUT_60_ansi_wkl": {
"layout": [
{"matrix": [4, 0], "x": 0, "y": 0},
{"matrix": [4, 1], "x": 1, "y": 0},
{"matrix": [4, 2], "x": 2, "y": 0},
{"matrix": [4, 3], "x": 3, "y": 0},
{"matrix": [4, 4], "x": 4, "y": 0},
{"matrix": [4, 5], "x": 5, "y": 0},
{"matrix": [4, 6], "x": 6, "y": 0},
{"matrix": [4, 7], "x": 7, "y": 0},
{"matrix": [4, 8], "x": 8, "y": 0},
{"matrix": [4, 9], "x": 9, "y": 0},
{"matrix": [4, 10], "x": 10, "y": 0},
{"matrix": [4, 11], "x": 11, "y": 0},
{"matrix": [4, 12], "x": 12, "y": 0},
{"matrix": [4, 13], "x": 13, "y": 0, "w": 2},
{"matrix": [3, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [3, 1], "x": 1.5, "y": 1},
{"matrix": [3, 2], "x": 2.5, "y": 1},
{"matrix": [3, 3], "x": 3.5, "y": 1},
{"matrix": [3, 4], "x": 4.5, "y": 1},
{"matrix": [3, 5], "x": 5.5, "y": 1},
{"matrix": [3, 6], "x": 6.5, "y": 1},
{"matrix": [3, 7], "x": 7.5, "y": 1},
{"matrix": [3, 8], "x": 8.5, "y": 1},
{"matrix": [3, 9], "x": 9.5, "y": 1},
{"matrix": [3, 10], "x": 10.5, "y": 1},
{"matrix": [3, 11], "x": 11.5, "y": 1},
{"matrix": [3, 12], "x": 12.5, "y": 1},
{"matrix": [3, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [1, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [1, 2], "x": 2.25, "y": 3},
{"matrix": [1, 3], "x": 3.25, "y": 3},
{"matrix": [1, 4], "x": 4.25, "y": 3},
{"matrix": [1, 5], "x": 5.25, "y": 3},
{"matrix": [1, 6], "x": 6.25, "y": 3},
{"matrix": [1, 7], "x": 7.25, "y": 3},
{"matrix": [1, 8], "x": 8.25, "y": 3},
{"matrix": [1, 9], "x": 9.25, "y": 3},
{"matrix": [1, 10], "x": 10.25, "y": 3},
{"matrix": [1, 11], "x": 11.25, "y": 3},
{"matrix": [1, 12], "x": 12.25, "y": 3, "w": 2.75},
{"matrix": [0, 0], "x": 0, "y": 4, "w": 1.5},
{"matrix": [0, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [0, 6], "x": 4, "y": 4, "w": 7},
{"matrix": [0, 11], "x": 11, "y": 4, "w": 1.5},
{"matrix": [0, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
"LAYOUT_60_ansi_wkl_split_bs_rshift": {
"layout": [
{"matrix": [4, 0], "x": 0, "y": 0},
{"matrix": [4, 1], "x": 1, "y": 0},
{"matrix": [4, 2], "x": 2, "y": 0},
{"matrix": [4, 3], "x": 3, "y": 0},
{"matrix": [4, 4], "x": 4, "y": 0},
{"matrix": [4, 5], "x": 5, "y": 0},
{"matrix": [4, 6], "x": 6, "y": 0},
{"matrix": [4, 7], "x": 7, "y": 0},
{"matrix": [4, 8], "x": 8, "y": 0},
{"matrix": [4, 9], "x": 9, "y": 0},
{"matrix": [4, 10], "x": 10, "y": 0},
{"matrix": [4, 11], "x": 11, "y": 0},
{"matrix": [4, 12], "x": 12, "y": 0},
{"matrix": [4, 13], "x": 13, "y": 0},
{"matrix": [4, 14], "x": 14, "y": 0},
{"matrix": [3, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [3, 1], "x": 1.5, "y": 1},
{"matrix": [3, 2], "x": 2.5, "y": 1},
{"matrix": [3, 3], "x": 3.5, "y": 1},
{"matrix": [3, 4], "x": 4.5, "y": 1},
{"matrix": [3, 5], "x": 5.5, "y": 1},
{"matrix": [3, 6], "x": 6.5, "y": 1},
{"matrix": [3, 7], "x": 7.5, "y": 1},
{"matrix": [3, 8], "x": 8.5, "y": 1},
{"matrix": [3, 9], "x": 9.5, "y": 1},
{"matrix": [3, 10], "x": 10.5, "y": 1},
{"matrix": [3, 11], "x": 11.5, "y": 1},
{"matrix": [3, 12], "x": 12.5, "y": 1},
{"matrix": [3, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [1, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [1, 2], "x": 2.25, "y": 3},
{"matrix": [1, 3], "x": 3.25, "y": 3},
{"matrix": [1, 4], "x": 4.25, "y": 3},
{"matrix": [1, 5], "x": 5.25, "y": 3},
{"matrix": [1, 6], "x": 6.25, "y": 3},
{"matrix": [1, 7], "x": 7.25, "y": 3},
{"matrix": [1, 8], "x": 8.25, "y": 3},
{"matrix": [1, 9], "x": 9.25, "y": 3},
{"matrix": [1, 10], "x": 10.25, "y": 3},
{"matrix": [1, 11], "x": 11.25, "y": 3},
{"matrix": [1, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [1, 13], "x": 14, "y": 3},
{"matrix": [0, 0], "x": 0, "y": 4, "w": 1.5},
{"matrix": [0, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [0, 6], "x": 4, "y": 4, "w": 7},
{"matrix": [0, 11], "x": 11, "y": 4, "w": 1.5},
{"matrix": [0, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
"LAYOUT_60_hhkb": {
"layout": [
{"matrix": [4, 0], "x": 0, "y": 0},
@@ -258,6 +599,424 @@
{"matrix": [0, 11], "x": 11, "y": 4, "w": 1.5},
{"matrix": [0, 12], "x": 12.5, "y": 4}
]
},
"LAYOUT_60_iso": {
"layout": [
{"matrix": [4, 0], "x": 0, "y": 0},
{"matrix": [4, 1], "x": 1, "y": 0},
{"matrix": [4, 2], "x": 2, "y": 0},
{"matrix": [4, 3], "x": 3, "y": 0},
{"matrix": [4, 4], "x": 4, "y": 0},
{"matrix": [4, 5], "x": 5, "y": 0},
{"matrix": [4, 6], "x": 6, "y": 0},
{"matrix": [4, 7], "x": 7, "y": 0},
{"matrix": [4, 8], "x": 8, "y": 0},
{"matrix": [4, 9], "x": 9, "y": 0},
{"matrix": [4, 10], "x": 10, "y": 0},
{"matrix": [4, 11], "x": 11, "y": 0},
{"matrix": [4, 12], "x": 12, "y": 0},
{"matrix": [4, 13], "x": 13, "y": 0, "w": 2},
{"matrix": [3, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [3, 1], "x": 1.5, "y": 1},
{"matrix": [3, 2], "x": 2.5, "y": 1},
{"matrix": [3, 3], "x": 3.5, "y": 1},
{"matrix": [3, 4], "x": 4.5, "y": 1},
{"matrix": [3, 5], "x": 5.5, "y": 1},
{"matrix": [3, 6], "x": 6.5, "y": 1},
{"matrix": [3, 7], "x": 7.5, "y": 1},
{"matrix": [3, 8], "x": 8.5, "y": 1},
{"matrix": [3, 9], "x": 9.5, "y": 1},
{"matrix": [3, 10], "x": 10.5, "y": 1},
{"matrix": [3, 11], "x": 11.5, "y": 1},
{"matrix": [3, 12], "x": 12.5, "y": 1},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 12], "x": 12.75, "y": 2},
{"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
{"matrix": [1, 0], "x": 0, "y": 3, "w": 1.25},
{"matrix": [1, 1], "x": 1.25, "y": 3},
{"matrix": [1, 2], "x": 2.25, "y": 3},
{"matrix": [1, 3], "x": 3.25, "y": 3},
{"matrix": [1, 4], "x": 4.25, "y": 3},
{"matrix": [1, 5], "x": 5.25, "y": 3},
{"matrix": [1, 6], "x": 6.25, "y": 3},
{"matrix": [1, 7], "x": 7.25, "y": 3},
{"matrix": [1, 8], "x": 8.25, "y": 3},
{"matrix": [1, 9], "x": 9.25, "y": 3},
{"matrix": [1, 10], "x": 10.25, "y": 3},
{"matrix": [1, 11], "x": 11.25, "y": 3},
{"matrix": [1, 12], "x": 12.25, "y": 3, "w": 2.75},
{"matrix": [0, 0], "x": 0, "y": 4, "w": 1.25},
{"matrix": [0, 1], "x": 1.25, "y": 4, "w": 1.25},
{"matrix": [0, 2], "x": 2.5, "y": 4, "w": 1.25},
{"matrix": [0, 6], "x": 3.75, "y": 4, "w": 6.25},
{"matrix": [0, 10], "x": 10, "y": 4, "w": 1.25},
{"matrix": [0, 11], "x": 11.25, "y": 4, "w": 1.25},
{"matrix": [0, 12], "x": 12.5, "y": 4, "w": 1.25},
{"matrix": [0, 13], "x": 13.75, "y": 4, "w": 1.25}
]
},
"LAYOUT_60_iso_split_bs_rshift": {
"layout": [
{"matrix": [4, 0], "x": 0, "y": 0},
{"matrix": [4, 1], "x": 1, "y": 0},
{"matrix": [4, 2], "x": 2, "y": 0},
{"matrix": [4, 3], "x": 3, "y": 0},
{"matrix": [4, 4], "x": 4, "y": 0},
{"matrix": [4, 5], "x": 5, "y": 0},
{"matrix": [4, 6], "x": 6, "y": 0},
{"matrix": [4, 7], "x": 7, "y": 0},
{"matrix": [4, 8], "x": 8, "y": 0},
{"matrix": [4, 9], "x": 9, "y": 0},
{"matrix": [4, 10], "x": 10, "y": 0},
{"matrix": [4, 11], "x": 11, "y": 0},
{"matrix": [4, 12], "x": 12, "y": 0},
{"matrix": [4, 13], "x": 13, "y": 0},
{"matrix": [4, 14], "x": 14, "y": 0},
{"matrix": [3, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [3, 1], "x": 1.5, "y": 1},
{"matrix": [3, 2], "x": 2.5, "y": 1},
{"matrix": [3, 3], "x": 3.5, "y": 1},
{"matrix": [3, 4], "x": 4.5, "y": 1},
{"matrix": [3, 5], "x": 5.5, "y": 1},
{"matrix": [3, 6], "x": 6.5, "y": 1},
{"matrix": [3, 7], "x": 7.5, "y": 1},
{"matrix": [3, 8], "x": 8.5, "y": 1},
{"matrix": [3, 9], "x": 9.5, "y": 1},
{"matrix": [3, 10], "x": 10.5, "y": 1},
{"matrix": [3, 11], "x": 11.5, "y": 1},
{"matrix": [3, 12], "x": 12.5, "y": 1},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 12], "x": 12.75, "y": 2},
{"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
{"matrix": [1, 0], "x": 0, "y": 3, "w": 1.25},
{"matrix": [1, 1], "x": 1.25, "y": 3},
{"matrix": [1, 2], "x": 2.25, "y": 3},
{"matrix": [1, 3], "x": 3.25, "y": 3},
{"matrix": [1, 4], "x": 4.25, "y": 3},
{"matrix": [1, 5], "x": 5.25, "y": 3},
{"matrix": [1, 6], "x": 6.25, "y": 3},
{"matrix": [1, 7], "x": 7.25, "y": 3},
{"matrix": [1, 8], "x": 8.25, "y": 3},
{"matrix": [1, 9], "x": 9.25, "y": 3},
{"matrix": [1, 10], "x": 10.25, "y": 3},
{"matrix": [1, 11], "x": 11.25, "y": 3},
{"matrix": [1, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [1, 13], "x": 14, "y": 3},
{"matrix": [0, 0], "x": 0, "y": 4, "w": 1.25},
{"matrix": [0, 1], "x": 1.25, "y": 4, "w": 1.25},
{"matrix": [0, 2], "x": 2.5, "y": 4, "w": 1.25},
{"matrix": [0, 6], "x": 3.75, "y": 4, "w": 6.25},
{"matrix": [0, 10], "x": 10, "y": 4, "w": 1.25},
{"matrix": [0, 11], "x": 11.25, "y": 4, "w": 1.25},
{"matrix": [0, 12], "x": 12.5, "y": 4, "w": 1.25},
{"matrix": [0, 13], "x": 13.75, "y": 4, "w": 1.25}
]
},
"LAYOUT_60_iso_tsangan": {
"layout": [
{"matrix": [4, 0], "x": 0, "y": 0},
{"matrix": [4, 1], "x": 1, "y": 0},
{"matrix": [4, 2], "x": 2, "y": 0},
{"matrix": [4, 3], "x": 3, "y": 0},
{"matrix": [4, 4], "x": 4, "y": 0},
{"matrix": [4, 5], "x": 5, "y": 0},
{"matrix": [4, 6], "x": 6, "y": 0},
{"matrix": [4, 7], "x": 7, "y": 0},
{"matrix": [4, 8], "x": 8, "y": 0},
{"matrix": [4, 9], "x": 9, "y": 0},
{"matrix": [4, 10], "x": 10, "y": 0},
{"matrix": [4, 11], "x": 11, "y": 0},
{"matrix": [4, 12], "x": 12, "y": 0},
{"matrix": [4, 13], "x": 13, "y": 0, "w": 2},
{"matrix": [3, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [3, 1], "x": 1.5, "y": 1},
{"matrix": [3, 2], "x": 2.5, "y": 1},
{"matrix": [3, 3], "x": 3.5, "y": 1},
{"matrix": [3, 4], "x": 4.5, "y": 1},
{"matrix": [3, 5], "x": 5.5, "y": 1},
{"matrix": [3, 6], "x": 6.5, "y": 1},
{"matrix": [3, 7], "x": 7.5, "y": 1},
{"matrix": [3, 8], "x": 8.5, "y": 1},
{"matrix": [3, 9], "x": 9.5, "y": 1},
{"matrix": [3, 10], "x": 10.5, "y": 1},
{"matrix": [3, 11], "x": 11.5, "y": 1},
{"matrix": [3, 12], "x": 12.5, "y": 1},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 12], "x": 12.75, "y": 2},
{"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
{"matrix": [1, 0], "x": 0, "y": 3, "w": 1.25},
{"matrix": [1, 1], "x": 1.25, "y": 3},
{"matrix": [1, 2], "x": 2.25, "y": 3},
{"matrix": [1, 3], "x": 3.25, "y": 3},
{"matrix": [1, 4], "x": 4.25, "y": 3},
{"matrix": [1, 5], "x": 5.25, "y": 3},
{"matrix": [1, 6], "x": 6.25, "y": 3},
{"matrix": [1, 7], "x": 7.25, "y": 3},
{"matrix": [1, 8], "x": 8.25, "y": 3},
{"matrix": [1, 9], "x": 9.25, "y": 3},
{"matrix": [1, 10], "x": 10.25, "y": 3},
{"matrix": [1, 11], "x": 11.25, "y": 3},
{"matrix": [1, 12], "x": 12.25, "y": 3, "w": 2.75},
{"matrix": [0, 0], "x": 0, "y": 4, "w": 1.5},
{"matrix": [0, 1], "x": 1.5, "y": 4},
{"matrix": [0, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [0, 6], "x": 4, "y": 4, "w": 7},
{"matrix": [0, 11], "x": 11, "y": 4, "w": 1.5},
{"matrix": [0, 12], "x": 12.5, "y": 4},
{"matrix": [0, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
"LAYOUT_60_iso_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [4, 0], "x": 0, "y": 0},
{"matrix": [4, 1], "x": 1, "y": 0},
{"matrix": [4, 2], "x": 2, "y": 0},
{"matrix": [4, 3], "x": 3, "y": 0},
{"matrix": [4, 4], "x": 4, "y": 0},
{"matrix": [4, 5], "x": 5, "y": 0},
{"matrix": [4, 6], "x": 6, "y": 0},
{"matrix": [4, 7], "x": 7, "y": 0},
{"matrix": [4, 8], "x": 8, "y": 0},
{"matrix": [4, 9], "x": 9, "y": 0},
{"matrix": [4, 10], "x": 10, "y": 0},
{"matrix": [4, 11], "x": 11, "y": 0},
{"matrix": [4, 12], "x": 12, "y": 0},
{"matrix": [4, 13], "x": 13, "y": 0},
{"matrix": [4, 14], "x": 14, "y": 0},
{"matrix": [3, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [3, 1], "x": 1.5, "y": 1},
{"matrix": [3, 2], "x": 2.5, "y": 1},
{"matrix": [3, 3], "x": 3.5, "y": 1},
{"matrix": [3, 4], "x": 4.5, "y": 1},
{"matrix": [3, 5], "x": 5.5, "y": 1},
{"matrix": [3, 6], "x": 6.5, "y": 1},
{"matrix": [3, 7], "x": 7.5, "y": 1},
{"matrix": [3, 8], "x": 8.5, "y": 1},
{"matrix": [3, 9], "x": 9.5, "y": 1},
{"matrix": [3, 10], "x": 10.5, "y": 1},
{"matrix": [3, 11], "x": 11.5, "y": 1},
{"matrix": [3, 12], "x": 12.5, "y": 1},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 12], "x": 12.75, "y": 2},
{"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
{"matrix": [1, 0], "x": 0, "y": 3, "w": 1.25},
{"matrix": [1, 1], "x": 1.25, "y": 3},
{"matrix": [1, 2], "x": 2.25, "y": 3},
{"matrix": [1, 3], "x": 3.25, "y": 3},
{"matrix": [1, 4], "x": 4.25, "y": 3},
{"matrix": [1, 5], "x": 5.25, "y": 3},
{"matrix": [1, 6], "x": 6.25, "y": 3},
{"matrix": [1, 7], "x": 7.25, "y": 3},
{"matrix": [1, 8], "x": 8.25, "y": 3},
{"matrix": [1, 9], "x": 9.25, "y": 3},
{"matrix": [1, 10], "x": 10.25, "y": 3},
{"matrix": [1, 11], "x": 11.25, "y": 3},
{"matrix": [1, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [1, 13], "x": 14, "y": 3},
{"matrix": [0, 0], "x": 0, "y": 4, "w": 1.5},
{"matrix": [0, 1], "x": 1.5, "y": 4},
{"matrix": [0, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [0, 6], "x": 4, "y": 4, "w": 7},
{"matrix": [0, 11], "x": 11, "y": 4, "w": 1.5},
{"matrix": [0, 12], "x": 12.5, "y": 4},
{"matrix": [0, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
"LAYOUT_60_iso_wkl": {
"layout": [
{"matrix": [4, 0], "x": 0, "y": 0},
{"matrix": [4, 1], "x": 1, "y": 0},
{"matrix": [4, 2], "x": 2, "y": 0},
{"matrix": [4, 3], "x": 3, "y": 0},
{"matrix": [4, 4], "x": 4, "y": 0},
{"matrix": [4, 5], "x": 5, "y": 0},
{"matrix": [4, 6], "x": 6, "y": 0},
{"matrix": [4, 7], "x": 7, "y": 0},
{"matrix": [4, 8], "x": 8, "y": 0},
{"matrix": [4, 9], "x": 9, "y": 0},
{"matrix": [4, 10], "x": 10, "y": 0},
{"matrix": [4, 11], "x": 11, "y": 0},
{"matrix": [4, 12], "x": 12, "y": 0},
{"matrix": [4, 13], "x": 13, "y": 0, "w": 2},
{"matrix": [3, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [3, 1], "x": 1.5, "y": 1},
{"matrix": [3, 2], "x": 2.5, "y": 1},
{"matrix": [3, 3], "x": 3.5, "y": 1},
{"matrix": [3, 4], "x": 4.5, "y": 1},
{"matrix": [3, 5], "x": 5.5, "y": 1},
{"matrix": [3, 6], "x": 6.5, "y": 1},
{"matrix": [3, 7], "x": 7.5, "y": 1},
{"matrix": [3, 8], "x": 8.5, "y": 1},
{"matrix": [3, 9], "x": 9.5, "y": 1},
{"matrix": [3, 10], "x": 10.5, "y": 1},
{"matrix": [3, 11], "x": 11.5, "y": 1},
{"matrix": [3, 12], "x": 12.5, "y": 1},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 12], "x": 12.75, "y": 2},
{"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
{"matrix": [1, 0], "x": 0, "y": 3, "w": 1.25},
{"matrix": [1, 1], "x": 1.25, "y": 3},
{"matrix": [1, 2], "x": 2.25, "y": 3},
{"matrix": [1, 3], "x": 3.25, "y": 3},
{"matrix": [1, 4], "x": 4.25, "y": 3},
{"matrix": [1, 5], "x": 5.25, "y": 3},
{"matrix": [1, 6], "x": 6.25, "y": 3},
{"matrix": [1, 7], "x": 7.25, "y": 3},
{"matrix": [1, 8], "x": 8.25, "y": 3},
{"matrix": [1, 9], "x": 9.25, "y": 3},
{"matrix": [1, 10], "x": 10.25, "y": 3},
{"matrix": [1, 11], "x": 11.25, "y": 3},
{"matrix": [1, 12], "x": 12.25, "y": 3, "w": 2.75},
{"matrix": [0, 0], "x": 0, "y": 4, "w": 1.5},
{"matrix": [0, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [0, 6], "x": 4, "y": 4, "w": 7},
{"matrix": [0, 11], "x": 11, "y": 4, "w": 1.5},
{"matrix": [0, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
"LAYOUT_60_iso_wkl_split_bs_rshift": {
"layout": [
{"matrix": [4, 0], "x": 0, "y": 0},
{"matrix": [4, 1], "x": 1, "y": 0},
{"matrix": [4, 2], "x": 2, "y": 0},
{"matrix": [4, 3], "x": 3, "y": 0},
{"matrix": [4, 4], "x": 4, "y": 0},
{"matrix": [4, 5], "x": 5, "y": 0},
{"matrix": [4, 6], "x": 6, "y": 0},
{"matrix": [4, 7], "x": 7, "y": 0},
{"matrix": [4, 8], "x": 8, "y": 0},
{"matrix": [4, 9], "x": 9, "y": 0},
{"matrix": [4, 10], "x": 10, "y": 0},
{"matrix": [4, 11], "x": 11, "y": 0},
{"matrix": [4, 12], "x": 12, "y": 0},
{"matrix": [4, 13], "x": 13, "y": 0},
{"matrix": [4, 14], "x": 14, "y": 0},
{"matrix": [3, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [3, 1], "x": 1.5, "y": 1},
{"matrix": [3, 2], "x": 2.5, "y": 1},
{"matrix": [3, 3], "x": 3.5, "y": 1},
{"matrix": [3, 4], "x": 4.5, "y": 1},
{"matrix": [3, 5], "x": 5.5, "y": 1},
{"matrix": [3, 6], "x": 6.5, "y": 1},
{"matrix": [3, 7], "x": 7.5, "y": 1},
{"matrix": [3, 8], "x": 8.5, "y": 1},
{"matrix": [3, 9], "x": 9.5, "y": 1},
{"matrix": [3, 10], "x": 10.5, "y": 1},
{"matrix": [3, 11], "x": 11.5, "y": 1},
{"matrix": [3, 12], "x": 12.5, "y": 1},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 12], "x": 12.75, "y": 2},
{"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
{"matrix": [1, 0], "x": 0, "y": 3, "w": 1.25},
{"matrix": [1, 1], "x": 1.25, "y": 3},
{"matrix": [1, 2], "x": 2.25, "y": 3},
{"matrix": [1, 3], "x": 3.25, "y": 3},
{"matrix": [1, 4], "x": 4.25, "y": 3},
{"matrix": [1, 5], "x": 5.25, "y": 3},
{"matrix": [1, 6], "x": 6.25, "y": 3},
{"matrix": [1, 7], "x": 7.25, "y": 3},
{"matrix": [1, 8], "x": 8.25, "y": 3},
{"matrix": [1, 9], "x": 9.25, "y": 3},
{"matrix": [1, 10], "x": 10.25, "y": 3},
{"matrix": [1, 11], "x": 11.25, "y": 3},
{"matrix": [1, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [1, 13], "x": 14, "y": 3},
{"matrix": [0, 0], "x": 0, "y": 4, "w": 1.5},
{"matrix": [0, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [0, 6], "x": 4, "y": 4, "w": 7},
{"matrix": [0, 11], "x": 11, "y": 4, "w": 1.5},
{"matrix": [0, 13], "x": 13.5, "y": 4, "w": 1.5}
]
}
}
}

View File

@@ -0,0 +1,27 @@
# Matrix Diagram for LSJ Ares
```
┌───────┐
2u Backspace │4E │
└───────┘
┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
│40 │41 │42 │43 │44 │45 │46 │47 │48 │49 │4A │4B │4C │4D │4E │
├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ┌─────┐
│30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C │3D │ │ │
├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ ┌──┴┐2D │ ISO Enter
│20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2D │ │2C │ │
├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ └───┴────┘
│10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │1D │
├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬┴───┤
│00 │01 │02 │06 │0A │0B │0C │0D │
└────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
┌────────┐ ┌──────────┐
│10 │ 2.25u LShift 2.75u RShift │1C │
└────────┘ └──────────┘
┌─────┬───┬─────┬───────────────────────────┬─────┬───┬─────┐
│00 │01 │02 │06 │0B │0C │0D │ Tsangan/WKL/HHKB
└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
┌─────┬───┬─────┬───────────────────────┬─────┬───┬───┬─────┐
│00 │01 │02 │06 │0A │0B │0C │0D │ True HHKB
└─────┴───┴─────┴───────────────────────┴─────┴───┴───┴─────┘
```

View File

@@ -0,0 +1,11 @@
// Copyright 2024 Filip Strzałka (@philvec)
// SPDX-License-Identifier: GPL-3.0-or-later
#pragma once
#define SERIAL_USART_FULL_DUPLEX
#define AUDIO_PIN GP4
#define AUDIO_PWM_DRIVER PWMD2
#define AUDIO_PWM_CHANNEL RP2040_PWM_CHANNEL_A
#define AUDIO_INIT_DELAY

View File

@@ -0,0 +1,9 @@
// Copyright 2024 Filip Strzałka (@philvec)
// SPDX-License-Identifier: GPL-3.0-or-later
#pragma once
#include_next <halconf.h>
#undef HAL_USE_PWM
#define HAL_USE_PWM TRUE

View File

@@ -0,0 +1,320 @@
{
"manufacturer": "Arrow Mechanics",
"keyboard_name": "WINGS Mark 1",
"maintainer": "arrowmechanics",
"bootloader": "rp2040",
"diode_direction": "ROW2COL",
"encoder": {
"rotary": [
{"pin_a": "GP6", "pin_b": "GP7", "resolution": 2}
]
},
"features": {
"audio": true,
"bootmagic": true,
"encoder": true,
"extrakey": true,
"mousekey": true,
"rgb_matrix": true
},
"matrix_pins": {
"cols": ["GP8", "GP9", "GP10", "GP11", "GP12", "GP13", "GP14", "GP15", "GP16"],
"rows": ["GP22", "GP21", "GP20", "GP19", "GP18", "GP17"]
},
"processor": "RP2040",
"rgb_matrix": {
"animations": {
"alphas_mods": true,
"band_pinwheel_sat": true,
"band_pinwheel_val": true,
"band_sat": true,
"band_spiral_sat": true,
"band_spiral_val": true,
"band_val": true,
"breathing": true,
"cycle_all": true,
"cycle_left_right": true,
"cycle_out_in": true,
"cycle_out_in_dual": true,
"cycle_pinwheel": true,
"cycle_spiral": true,
"cycle_up_down": true,
"digital_rain": true,
"dual_beacon": true,
"gradient_left_right": true,
"gradient_up_down": true,
"hue_breathing": true,
"hue_pendulum": true,
"hue_wave": true,
"jellybean_raindrops": true,
"multisplash": true,
"pixel_flow": true,
"pixel_fractal": true,
"pixel_rain": true,
"rainbow_beacon": true,
"rainbow_moving_chevron": true,
"rainbow_pinwheels": true,
"raindrops": true,
"solid_multisplash": true,
"solid_reactive": true,
"solid_reactive_cross": true,
"solid_reactive_multicross": true,
"solid_reactive_multinexus": true,
"solid_reactive_multiwide": true,
"solid_reactive_nexus": true,
"solid_reactive_simple": true,
"solid_reactive_wide": true,
"solid_splash": true,
"splash": true,
"typing_heatmap": true
},
"default": {
"animation": "breathing",
"hue": 192
},
"driver": "ws2812",
"layout": [
{"matrix": [0, 7], "x": 93, "y": 2, "flags": 4},
{"matrix": [0, 6], "x": 80, "y": 1, "flags": 4},
{"matrix": [0, 5], "x": 67, "y": 0, "flags": 4},
{"matrix": [0, 4], "x": 54, "y": 1, "flags": 4},
{"matrix": [0, 3], "x": 42, "y": 3, "flags": 4},
{"matrix": [0, 2], "x": 29, "y": 5, "flags": 4},
{"matrix": [0, 1], "x": 16, "y": 5, "flags": 4},
{"matrix": [0, 0], "x": 3, "y": 5, "flags": 4},
{"matrix": [1, 0], "x": 3, "y": 17, "flags": 4},
{"matrix": [1, 1], "x": 16, "y": 17, "flags": 4},
{"matrix": [1, 2], "x": 29, "y": 17, "flags": 4},
{"matrix": [1, 3], "x": 42, "y": 15, "flags": 4},
{"matrix": [1, 4], "x": 54, "y": 13, "flags": 4},
{"matrix": [1, 5], "x": 67, "y": 12, "flags": 4},
{"matrix": [1, 6], "x": 80, "y": 13, "flags": 4},
{"matrix": [1, 7], "x": 93, "y": 14, "flags": 4},
{"matrix": [2, 8], "x": 106, "y": 25, "flags": 4},
{"matrix": [2, 7], "x": 93, "y": 25, "flags": 4},
{"matrix": [2, 6], "x": 80, "y": 25, "flags": 4},
{"matrix": [2, 5], "x": 67, "y": 24, "flags": 4},
{"matrix": [2, 4], "x": 54, "y": 25, "flags": 4},
{"matrix": [2, 3], "x": 42, "y": 27, "flags": 4},
{"matrix": [2, 2], "x": 26, "y": 29, "flags": 4},
{"matrix": [2, 0], "x": 6, "y": 29, "flags": 4},
{"matrix": [3, 0], "x": 3, "y": 40, "flags": 4},
{"matrix": [3, 2], "x": 22, "y": 40, "flags": 4},
{"matrix": [3, 3], "x": 42, "y": 38, "flags": 4},
{"matrix": [3, 4], "x": 54, "y": 36, "flags": 4},
{"matrix": [3, 5], "x": 67, "y": 35, "flags": 4},
{"matrix": [3, 6], "x": 80, "y": 36, "flags": 4},
{"matrix": [3, 7], "x": 93, "y": 37, "flags": 4},
{"matrix": [3, 8], "x": 106, "y": 37, "flags": 4},
{"matrix": [4, 8], "x": 106, "y": 49, "flags": 4},
{"matrix": [4, 7], "x": 93, "y": 49, "flags": 4},
{"matrix": [4, 6], "x": 80, "y": 48, "flags": 4},
{"matrix": [4, 5], "x": 67, "y": 47, "flags": 4},
{"matrix": [4, 4], "x": 54, "y": 48, "flags": 4},
{"matrix": [4, 3], "x": 42, "y": 50, "flags": 4},
{"matrix": [4, 1], "x": 21, "y": 52, "flags": 4},
{"matrix": [4, 0], "x": 0, "y": 52, "flags": 4},
{"matrix": [5, 0], "x": 0, "y": 64, "flags": 4},
{"matrix": [5, 1], "x": 13, "y": 64, "flags": 4},
{"matrix": [5, 2], "x": 26, "y": 64, "flags": 4},
{"matrix": [5, 3], "x": 43, "y": 62, "flags": 4},
{"matrix": [5, 4], "x": 59, "y": 60, "flags": 4},
{"matrix": [5, 6], "x": 75, "y": 60, "flags": 4},
{"matrix": [5, 7], "x": 98, "y": 61, "flags": 4},
{"matrix": [6, 1], "x": 131, "y": 2, "flags": 4},
{"matrix": [6, 2], "x": 144, "y": 1, "flags": 4},
{"matrix": [6, 3], "x": 157, "y": 0, "flags": 4},
{"matrix": [6, 4], "x": 170, "y": 1, "flags": 4},
{"matrix": [6, 5], "x": 182, "y": 3, "flags": 4},
{"matrix": [6, 6], "x": 195, "y": 5, "flags": 4},
{"matrix": [6, 7], "x": 208, "y": 5, "flags": 4},
{"matrix": [6, 8], "x": 221, "y": 5, "flags": 4},
{"matrix": [7, 8], "x": 214, "y": 17, "flags": 4},
{"matrix": [7, 6], "x": 195, "y": 17, "flags": 4},
{"matrix": [7, 5], "x": 182, "y": 15, "flags": 4},
{"matrix": [7, 4], "x": 170, "y": 13, "flags": 4},
{"matrix": [7, 3], "x": 157, "y": 12, "flags": 4},
{"matrix": [7, 2], "x": 144, "y": 13, "flags": 4},
{"matrix": [7, 1], "x": 131, "y": 14, "flags": 4},
{"matrix": [8, 0], "x": 118, "y": 25, "flags": 4},
{"matrix": [8, 1], "x": 131, "y": 25, "flags": 4},
{"matrix": [8, 2], "x": 144, "y": 25, "flags": 4},
{"matrix": [8, 3], "x": 157, "y": 24, "flags": 4},
{"matrix": [8, 4], "x": 170, "y": 25, "flags": 4},
{"matrix": [8, 5], "x": 182, "y": 27, "flags": 4},
{"matrix": [8, 6], "x": 195, "y": 29, "flags": 4},
{"matrix": [8, 7], "x": 208, "y": 29, "flags": 4},
{"matrix": [8, 8], "x": 221, "y": 29, "flags": 4},
{"matrix": [9, 8], "x": 216, "y": 40, "flags": 4},
{"matrix": [9, 6], "x": 195, "y": 40, "flags": 4},
{"matrix": [9, 5], "x": 182, "y": 38, "flags": 4},
{"matrix": [9, 4], "x": 170, "y": 36, "flags": 4},
{"matrix": [9, 3], "x": 157, "y": 35, "flags": 4},
{"matrix": [9, 2], "x": 144, "y": 36, "flags": 4},
{"matrix": [9, 1], "x": 131, "y": 37, "flags": 4},
{"matrix": [9, 0], "x": 118, "y": 37, "flags": 4},
{"matrix": [10, 0], "x": 118, "y": 49, "flags": 4},
{"matrix": [10, 1], "x": 131, "y": 49, "flags": 4},
{"matrix": [10, 2], "x": 144, "y": 48, "flags": 4},
{"matrix": [10, 3], "x": 157, "y": 47, "flags": 4},
{"matrix": [10, 4], "x": 170, "y": 48, "flags": 4},
{"matrix": [10, 5], "x": 182, "y": 50, "flags": 4},
{"matrix": [10, 6], "x": 197, "y": 52, "flags": 4},
{"matrix": [10, 7], "x": 211, "y": 52, "flags": 4},
{"matrix": [10, 8], "x": 224, "y": 52, "flags": 4},
{"matrix": [11, 8], "x": 224, "y": 64, "flags": 4},
{"matrix": [11, 7], "x": 211, "y": 64, "flags": 4},
{"matrix": [11, 6], "x": 198, "y": 64, "flags": 4},
{"matrix": [11, 5], "x": 181, "y": 62, "flags": 4},
{"matrix": [11, 4], "x": 165, "y": 60, "flags": 4},
{"matrix": [11, 2], "x": 149, "y": 60, "flags": 4},
{"matrix": [11, 1], "x": 126, "y": 61, "flags": 4}
],
"split_count": [47, 48]
},
"split": {
"enabled": true,
"transport": {
"sync": {
"layer_state": true,
"matrix_state": true
}
}
},
"tags": ["columnar", "split", "rgb", "hotswap", "encoder"],
"url": "https://arrowmechanics.com",
"usb": {
"device_version": "1.0.0",
"pid": "0x3134",
"vid": "0xA880"
},
"ws2812": {
"driver": "vendor",
"pin": "GP26"
},
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 0], "x": 0.25, "y": 0.43},
{"matrix": [0, 1], "x": 1.25, "y": 0.43},
{"matrix": [0, 2], "x": 2.25, "y": 0.43},
{"matrix": [0, 3], "x": 3.25, "y": 0.25},
{"matrix": [0, 4], "x": 4.25, "y": 0.08},
{"matrix": [0, 5], "x": 5.25, "y": 0},
{"matrix": [0, 6], "x": 6.25, "y": 0.08},
{"matrix": [0, 7], "x": 7.25, "y": 0.15},
{"matrix": [6, 1], "x": 10.45, "y": 0.15},
{"matrix": [6, 2], "x": 11.45, "y": 0.08},
{"matrix": [6, 3], "x": 12.45, "y": 0},
{"matrix": [6, 4], "x": 13.45, "y": 0.08},
{"matrix": [6, 5], "x": 14.45, "y": 0.25},
{"matrix": [6, 6], "x": 15.45, "y": 0.43},
{"matrix": [6, 7], "x": 16.45, "y": 0.43},
{"matrix": [6, 8], "x": 17.45, "y": 0.43},
{"matrix": [1, 0], "x": 0.25, "y": 1.43},
{"matrix": [1, 1], "x": 1.25, "y": 1.43},
{"matrix": [1, 2], "x": 2.25, "y": 1.43},
{"matrix": [1, 3], "x": 3.25, "y": 1.25},
{"matrix": [1, 4], "x": 4.25, "y": 1.08},
{"matrix": [1, 5], "x": 5.25, "y": 1},
{"matrix": [1, 6], "x": 6.25, "y": 1.08},
{"matrix": [1, 7], "x": 7.25, "y": 1.15},
{"matrix": [1, 8], "x": 8.25, "y": 1.15, "encoder": 0},
{"matrix": [7, 0], "x": 9.45, "y": 1.15},
{"matrix": [7, 1], "x": 10.45, "y": 1.15},
{"matrix": [7, 2], "x": 11.45, "y": 1.08},
{"matrix": [7, 3], "x": 12.45, "y": 1},
{"matrix": [7, 4], "x": 13.45, "y": 1.08},
{"matrix": [7, 5], "x": 14.45, "y": 1.25},
{"matrix": [7, 6], "x": 15.45, "y": 1.43},
{"matrix": [7, 8], "x": 16.45, "y": 1.43, "w": 2},
{"matrix": [2, 0], "x": 0.25, "y": 2.43, "w": 1.5},
{"matrix": [2, 2], "x": 1.75, "y": 2.43, "w": 1.5},
{"matrix": [2, 3], "x": 3.25, "y": 2.25},
{"matrix": [2, 4], "x": 4.25, "y": 2.08},
{"matrix": [2, 5], "x": 5.25, "y": 2},
{"matrix": [2, 6], "x": 6.25, "y": 2.08},
{"matrix": [2, 7], "x": 7.25, "y": 2.15},
{"matrix": [2, 8], "x": 8.25, "y": 2.15},
{"matrix": [8, 0], "x": 9.45, "y": 2.15},
{"matrix": [8, 1], "x": 10.45, "y": 2.15},
{"matrix": [8, 2], "x": 11.45, "y": 2.08},
{"matrix": [8, 3], "x": 12.45, "y": 2},
{"matrix": [8, 4], "x": 13.45, "y": 2.08},
{"matrix": [8, 5], "x": 14.45, "y": 2.25},
{"matrix": [8, 6], "x": 15.45, "y": 2.43},
{"matrix": [8, 7], "x": 16.45, "y": 2.43},
{"matrix": [8, 8], "x": 17.45, "y": 2.43},
{"matrix": [3, 0], "x": 0, "y": 3.43, "w": 1.5},
{"matrix": [3, 2], "x": 1.5, "y": 3.43, "w": 1.75},
{"matrix": [3, 3], "x": 3.25, "y": 3.25},
{"matrix": [3, 4], "x": 4.25, "y": 3.08},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3.08},
{"matrix": [3, 7], "x": 7.25, "y": 3.15},
{"matrix": [3, 8], "x": 8.25, "y": 3.15},
{"matrix": [9, 0], "x": 9.45, "y": 3.15},
{"matrix": [9, 1], "x": 10.45, "y": 3.15},
{"matrix": [9, 2], "x": 11.45, "y": 3.08},
{"matrix": [9, 3], "x": 12.45, "y": 3},
{"matrix": [9, 4], "x": 13.45, "y": 3.08},
{"matrix": [9, 5], "x": 14.45, "y": 3.25},
{"matrix": [9, 6], "x": 15.45, "y": 3.43},
{"matrix": [9, 8], "x": 16.45, "y": 3.43, "w": 2.25},
{"matrix": [4, 0], "x": 0, "y": 4.43},
{"matrix": [4, 1], "x": 1, "y": 4.43, "w": 2.25},
{"matrix": [4, 3], "x": 3.25, "y": 4.25},
{"matrix": [4, 4], "x": 4.25, "y": 4.08},
{"matrix": [4, 5], "x": 5.25, "y": 4},
{"matrix": [4, 6], "x": 6.25, "y": 4.08},
{"matrix": [4, 7], "x": 7.25, "y": 4.15},
{"matrix": [4, 8], "x": 8.25, "y": 4.15},
{"matrix": [10, 0], "x": 9.45, "y": 4.15},
{"matrix": [10, 1], "x": 10.45, "y": 4.15},
{"matrix": [10, 2], "x": 11.45, "y": 4.08},
{"matrix": [10, 3], "x": 12.45, "y": 4},
{"matrix": [10, 4], "x": 13.45, "y": 4.08},
{"matrix": [10, 5], "x": 14.45, "y": 4.25},
{"matrix": [10, 6], "x": 15.45, "y": 4.43, "w": 1.25},
{"matrix": [10, 7], "x": 16.7, "y": 4.43},
{"matrix": [10, 8], "x": 17.7, "y": 4.43},
{"matrix": [5, 0], "x": 0, "y": 5.43},
{"matrix": [5, 1], "x": 1, "y": 5.43},
{"matrix": [5, 2], "x": 2, "y": 5.43},
{"matrix": [5, 3], "x": 3.25, "y": 5.25, "w": 1.25},
{"matrix": [5, 4], "x": 4.5, "y": 5.08, "w": 1.25},
{"matrix": [5, 6], "x": 5.75, "y": 5.08, "w": 1.25},
{"matrix": [5, 7], "x": 7, "y": 5.15, "w": 2.25},
{"matrix": [11, 1], "x": 9.45, "y": 5.15, "w": 2.25},
{"matrix": [11, 2], "x": 11.7, "y": 5.08, "w": 1.25},
{"matrix": [11, 4], "x": 12.95, "y": 5.08, "w": 1.25},
{"matrix": [11, 5], "x": 14.2, "y": 5.25, "w": 1.25},
{"matrix": [11, 6], "x": 15.7, "y": 5.43},
{"matrix": [11, 7], "x": 16.7, "y": 5.43},
{"matrix": [11, 8], "x": 17.7, "y": 5.43}
]
}
}
}

View File

@@ -0,0 +1,25 @@
// Copyright 2024 Filip Strzałka (@philvec)
// SPDX-License-Identifier: GPL-3.0-or-later
#include QMK_KEYBOARD_H
enum layers {
BASE,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[BASE] = LAYOUT(
KC_VOLU, 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_EQL, KC_PSCR, KC_DEL,
KC_VOLD, KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, RGB_MOD, KC_BTN1, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_BSPC,
KC_MPLY, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, C(KC_C), C(KC_V), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_MNXT, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, C(KC_Z), C(KC_Y), KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_MPRV, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_ENT, KC_ENT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_HOME,
KC_LCTL, KC_NO, KC_NO, KC_LCTL, KC_LCMD, KC_LALT, KC_SPC, KC_SPC, KC_RALT, KC_RCMD, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
)
};
#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[BASE] = { ENCODER_CCW_CW(RGB_HUI, RGB_HUD), ENCODER_CCW_CW(KC_WH_U, KC_WH_D) },
};
#endif

View File

@@ -0,0 +1 @@
ENCODER_MAP_ENABLE = yes

View File

@@ -0,0 +1,9 @@
// Copyright 2024 Filip Strzałka (@philvec)
// SPDX-License-Identifier: GPL-3.0-or-later
#pragma once
#include_next <mcuconf.h>
#undef RP_PWM_USE_PWM2
#define RP_PWM_USE_PWM2 TRUE

View File

@@ -0,0 +1,29 @@
# Arrow Mechanics WINGS Mark 1
![Arrow Mechanics WINGS Mark 1](https://i.imgur.com/oQkDmSu.png)
ErgoDox-inspired SPLIT keyboard by [Arrow Mechanics](https://www.arrowmechanics.com/)
* 94 GATERON Low Profile 2.0 hotswap sockets
* RGB diode under each key for WS2812-driven lighting with [RGB Matrix](https://docs.qmk.fm/#/feature_rgb_matrix)
* 2 rotary encoders, one per half, with push-switches
* Buzzers for sound effects and/or [Music Mode](https://docs.qmk.fm/#/feature_audio?id=music-mode)
* Handy magnetic connectors for joining the halves together or splitting with the use of dedicated cable
* Anti-slip pads with magnetic expanding-legs for conveniently adjusting height/lean
* RP2040 Chip + 16MB Flash memory - Dual-core Cortex M0+
---
* Keyboard Maintainer: [arrowmechanics](https://github.com/arrowmechanics/)
* Hardware Supported: [Arrow Mechanics WINGS Keyboard set](https://www.arrowmechanics.com/produkty?view=product&id=8)
* Hardware Availability: [Official Arrow Mechanics E-SHOP](https://www.arrowmechanics.com/produkty?view=product&id=8)
Flashing example for this keyboard:
qmk flash -kb arrowmechanics/wings -km default
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
Enter the bootloader in 2 ways:
* **Bootmagic reset**: Hold down the top-left corner key on power-up.
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@@ -0,0 +1,2 @@
SERIAL_DRIVER = vendor
AUDIO_DRIVER = pwm_hardware

View File

@@ -39,15 +39,14 @@
/* SPI config for pmw3360 sensor. */
#define SPI_DRIVER SPID1
#define SPI_SCK_PIN B1
#define SPI_SCK_PIN A5
#define SPI_SCK_PAL_MODE 5
#define SPI_MOSI_PIN B2
#define SPI_MOSI_PIN A7
#define SPI_MOSI_PAL_MODE 5
#define SPI_MISO_PIN B3
#define SPI_MISO_PIN A6
#define SPI_MISO_PAL_MODE 5
/* PMW3360 settings. */
#define A1 PAL_LINE(GPIOA, 1)
#define POINTING_DEVICE_CS_PIN A1
#define PMW3360_CS_MODE 3
#define PMW3360_CS_DIVISOR 64

View File

@@ -7,20 +7,19 @@
"driver": "ws2812"
},
"ws2812": {
"pin": "D3",
"pin": "A2",
"driver": "pwm"
},
"build": {
"debounce_type": "asym_eager_defer_pk"
},
"matrix_pins": {
"cols": ["F5", "B6", "D7", "E6", "B4"],
"rows": ["F7", "C6", "D4", "B5"]
"cols": ["B2", "A4", "B4", "B5", "B8"],
"rows": ["B0", "B3", "A15", "B9"]
},
"diode_direction": "ROW2COL",
"split": {
"soft_serial_pin": "D2"
"soft_serial_pin": "A3"
},
"processor": "STM32F411",
"bootloader": "stm32-dfu"
"development_board": "stemcell"
}

View File

@@ -1,5 +1,3 @@
CONVERT_TO = stemcell
# Build Options
# change yes to no to disable
#

View File

@@ -39,15 +39,14 @@
/* SPI config for pmw3360 sensor. */
#define SPI_DRIVER SPID1
#define SPI_SCK_PIN B1
#define SPI_SCK_PIN A5
#define SPI_SCK_PAL_MODE 5
#define SPI_MOSI_PIN B2
#define SPI_MOSI_PIN A7
#define SPI_MOSI_PAL_MODE 5
#define SPI_MISO_PIN B3
#define SPI_MISO_PIN A6
#define SPI_MISO_PAL_MODE 5
/* PMW3360 settings. */
#define A1 PAL_LINE(GPIOA, 1)
#define POINTING_DEVICE_CS_PIN A1
#define PMW3360_CS_MODE 3
#define PMW3360_CS_DIVISOR 64

View File

@@ -7,20 +7,19 @@
"driver": "ws2812"
},
"ws2812": {
"pin": "D3",
"pin": "A2",
"driver": "pwm"
},
"build": {
"debounce_type": "asym_eager_defer_pk"
},
"matrix_pins": {
"cols": ["F6", "F5", "B6", "D7", "E6", "B4"],
"rows": ["F7", "C6", "D4", "B5"]
"cols": ["B1", "B2", "A4", "B4", "B5", "B8"],
"rows": ["B0", "B3", "A15", "B9"]
},
"diode_direction": "ROW2COL",
"split": {
"soft_serial_pin": "D2"
"soft_serial_pin": "A3"
},
"processor": "STM32F411",
"bootloader": "stm32-dfu"
"development_board": "stemcell"
}

View File

@@ -1,5 +1,3 @@
CONVERT_TO = stemcell
# Build Options
# change yes to no to disable
#

View File

@@ -39,15 +39,14 @@
/* SPI config for pmw3360 sensor. */
#define SPI_DRIVER SPID1
#define SPI_SCK_PIN B1
#define SPI_SCK_PIN A5
#define SPI_SCK_PAL_MODE 5
#define SPI_MOSI_PIN B2
#define SPI_MOSI_PIN A7
#define SPI_MOSI_PAL_MODE 5
#define SPI_MISO_PIN B3
#define SPI_MISO_PIN A6
#define SPI_MISO_PAL_MODE 5
/* PMW3360 settings. */
#define A1 PAL_LINE(GPIOA, 1)
#define POINTING_DEVICE_CS_PIN A1
#define PMW3360_CS_MODE 3
#define PMW3360_CS_DIVISOR 64

View File

@@ -7,20 +7,19 @@
"driver": "ws2812"
},
"ws2812": {
"pin": "D3",
"pin": "A2",
"driver": "pwm"
},
"build": {
"debounce_type": "asym_eager_defer_pk"
},
"matrix_pins": {
"cols": ["F6", "F5", "B6", "D7", "E6", "B4"],
"rows": ["F4", "F7", "C6", "D4", "B5"]
"cols": ["B1", "B2", "A4", "B4", "B5", "B8"],
"rows": ["B10", "B0", "B3", "A15", "B9"]
},
"diode_direction": "ROW2COL",
"split": {
"soft_serial_pin": "D2"
"soft_serial_pin": "A3"
},
"processor": "STM32F411",
"bootloader": "stm32-dfu"
"development_board": "stemcell"
}

View File

@@ -1,5 +1,3 @@
CONVERT_TO = stemcell
# Build Options
# change yes to no to disable
#

View File

@@ -7,20 +7,19 @@
"driver": "ws2812"
},
"ws2812": {
"pin": "D3",
"pin": "A2",
"driver": "pwm"
},
"build": {
"debounce_type": "asym_eager_defer_pk"
},
"matrix_pins": {
"cols": ["F6", "F5", "B6", "D7", "E6", "B4"],
"rows": ["F4", "F7", "C6", "D4", "B5"]
"cols": ["B1", "B2", "A4", "B4", "B5", "B8"],
"rows": ["B10", "B0", "B3", "A15", "B9"]
},
"diode_direction": "ROW2COL",
"split": {
"soft_serial_pin": "D2"
"soft_serial_pin": "A3"
},
"processor": "STM32F411",
"bootloader": "stm32-dfu"
"development_board": "stemcell"
}

View File

@@ -1,5 +1,3 @@
CONVERT_TO = stemcell
# Build Options
# change yes to no to disable
#

View File

@@ -7,20 +7,19 @@
"driver": "ws2812"
},
"ws2812": {
"pin": "D3",
"pin": "A2",
"driver": "pwm"
},
"build": {
"debounce_type": "asym_eager_defer_pk"
},
"matrix_pins": {
"cols": ["F5", "B6", "D7", "E6", "B4"],
"rows": ["F7", "C6", "D4", "B5"]
"cols": ["B2", "A4", "B4", "B5", "B8"],
"rows": ["B0", "B3", "A15", "B9"]
},
"diode_direction": "ROW2COL",
"split": {
"soft_serial_pin": "D2"
"soft_serial_pin": "A3"
},
"processor": "STM32F411",
"bootloader": "stm32-dfu"
"development_board": "stemcell"
}

View File

@@ -1,5 +1,3 @@
CONVERT_TO = stemcell
# Build Options
# change yes to no to disable
#

View File

@@ -7,20 +7,19 @@
"driver": "ws2812"
},
"ws2812": {
"pin": "D3",
"pin": "A2",
"driver": "pwm"
},
"build": {
"debounce_type": "asym_eager_defer_pk"
},
"matrix_pins": {
"cols": ["F6", "F5", "B6", "D7", "E6", "B4"],
"rows": ["F7", "C6", "D4", "B5"]
"cols": ["B1", "B2", "A4", "B4", "B5", "B8"],
"rows": ["B0", "B3", "A15", "B9"]
},
"diode_direction": "ROW2COL",
"split": {
"soft_serial_pin": "D2"
"soft_serial_pin": "A3"
},
"processor": "STM32F411",
"bootloader": "stm32-dfu"
"development_board": "stemcell"
}

View File

@@ -1,5 +1,3 @@
CONVERT_TO = stemcell
# Build Options
# change yes to no to disable
#

View File

@@ -3,8 +3,6 @@
#pragma once
#define ENCODER_DEFAULT_POS 0x3 // enable 1:1 resolution
// Default PIO0 cases flickering in this board. Setting to PIO1 resolves this issue.
#define WS2812_PIO_USE_PIO1

View File

@@ -8,7 +8,7 @@
"diode_direction": "COL2ROW",
"encoder": {
"rotary": [
{"pin_a": "GP13", "pin_b": "GP14"}
{"pin_a": "GP13", "pin_b": "GP14", "resolution": 2}
]
},
"features": {
@@ -83,4 +83,4 @@
]
}
}
}
}

View File

@@ -18,8 +18,8 @@
"url": "https://cannonkeys.com",
"usb": {
"device_version": "0.0.1",
"pid": "0x0028",
"vid": "0xCA04"
"pid": "0xCA04",
"vid": "0x0028"
},
"community_layouts": ["ortho_1x1"],
"layouts": {

View File

@@ -0,0 +1,9 @@
// Copyright 2024 Andrew Kannan
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U
#define PICO_XOSC_STARTUP_DELAY_MULTIPLIER 64

View File

@@ -0,0 +1,394 @@
{
"manufacturer": "CannonKeys",
"keyboard_name": "Petrichor",
"maintainer": "awkannan",
"bootloader": "rp2040",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true,
"rgblight": true
},
"matrix_pins": {
"cols": ["GP28", "GP27", "GP26", "GP25", "GP24", "GP23", "GP22", "GP21", "GP20", "GP19", "GP18", "GP17", "GP16", "GP9", "GP6", "GP5", "GP4", "GP3"],
"rows": ["GP13", "GP12", "GP11", "GP10", "GP8"]
},
"processor": "RP2040",
"rgblight": {
"animations": {
"rainbow_mood": true,
"rainbow_swirl": true,
"static_gradient": true,
"twinkle": true
},
"led_count": 3,
"layers": {
"enabled": true,
"override_rgb": false
},
"default": {
"animation": "rainbow_swirl"
}
},
"url": "https://cannonkeys.com",
"usb": {
"device_version": "0.0.1",
"pid": "0x0029",
"vid": "0xCA04"
},
"ws2812": {
"driver": "vendor",
"pin": "GP7"
},
"layouts": {
"LAYOUT_7u_no_split": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
{"matrix": [0, 14], "x": 15.5, "y": 0},
{"matrix": [0, 15], "x": 16.5, "y": 0},
{"matrix": [0, 16], "x": 17.5, "y": 0},
{"matrix": [0, 17], "x": 18.5, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [1, 14], "x": 15.5, "y": 1},
{"matrix": [1, 15], "x": 16.5, "y": 1},
{"matrix": [1, 16], "x": 17.5, "y": 1},
{"matrix": [1, 17], "x": 18.5, "y": 1, "h": 2},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [2, 14], "x": 15.5, "y": 2},
{"matrix": [2, 15], "x": 16.5, "y": 2},
{"matrix": [2, 16], "x": 17.5, "y": 2},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14.25, "y": 3.25},
{"matrix": [3, 14], "x": 15.5, "y": 3},
{"matrix": [3, 15], "x": 16.5, "y": 3},
{"matrix": [3, 16], "x": 17.5, "y": 3},
{"matrix": [3, 17], "x": 18.5, "y": 3, "h": 2},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
{"matrix": [4, 1], "x": 1.5, "y": 4, "w": 1.5},
{"matrix": [4, 6], "x": 3, "y": 4, "w": 7},
{"matrix": [4, 10], "x": 10, "y": 4, "w": 1.5},
{"matrix": [4, 11], "x": 11.5, "y": 4, "w": 1.5},
{"matrix": [4, 12], "x": 13.25, "y": 4.25},
{"matrix": [4, 13], "x": 14.25, "y": 4.25},
{"matrix": [4, 14], "x": 15.25, "y": 4.25},
{"matrix": [4, 15], "x": 16.5, "y": 4},
{"matrix": [4, 16], "x": 17.5, "y": 4}
]
},
"LAYOUT_all": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0},
{"matrix": [2, 12], "x": 14, "y": 0},
{"matrix": [0, 14], "x": 15.5, "y": 0},
{"matrix": [0, 15], "x": 16.5, "y": 0},
{"matrix": [0, 16], "x": 17.5, "y": 0},
{"matrix": [0, 17], "x": 18.5, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [1, 14], "x": 15.5, "y": 1},
{"matrix": [1, 15], "x": 16.5, "y": 1},
{"matrix": [1, 16], "x": 17.5, "y": 1},
{"matrix": [1, 17], "x": 18.5, "y": 1},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [2, 14], "x": 15.5, "y": 2},
{"matrix": [2, 15], "x": 16.5, "y": 2},
{"matrix": [2, 16], "x": 17.5, "y": 2},
{"matrix": [2, 17], "x": 18.5, "y": 2},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
{"matrix": [3, 1], "x": 1.25, "y": 3},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14.25, "y": 3.25},
{"matrix": [3, 14], "x": 15.5, "y": 3},
{"matrix": [3, 15], "x": 16.5, "y": 3},
{"matrix": [3, 16], "x": 17.5, "y": 3},
{"matrix": [3, 17], "x": 18.5, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
{"matrix": [4, 1], "x": 1.25, "y": 4},
{"matrix": [4, 2], "x": 2.25, "y": 4, "w": 1.25},
{"matrix": [4, 6], "x": 3.5, "y": 4, "w": 6},
{"matrix": [4, 9], "x": 9.5, "y": 4, "w": 1.25},
{"matrix": [4, 10], "x": 10.75, "y": 4},
{"matrix": [4, 11], "x": 11.75, "y": 4, "w": 1.25},
{"matrix": [4, 12], "x": 13.25, "y": 4.25},
{"matrix": [4, 13], "x": 14.25, "y": 4.25},
{"matrix": [4, 14], "x": 15.25, "y": 4.25},
{"matrix": [4, 15], "x": 16.5, "y": 4},
{"matrix": [4, 16], "x": 17.5, "y": 4},
{"matrix": [4, 17], "x": 18.5, "y": 4}
]
},
"LAYOUT_default": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
{"matrix": [0, 14], "x": 15.5, "y": 0},
{"matrix": [0, 15], "x": 16.5, "y": 0},
{"matrix": [0, 16], "x": 17.5, "y": 0},
{"matrix": [0, 17], "x": 18.5, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [1, 14], "x": 15.5, "y": 1},
{"matrix": [1, 15], "x": 16.5, "y": 1},
{"matrix": [1, 16], "x": 17.5, "y": 1},
{"matrix": [1, 17], "x": 18.5, "y": 1, "h": 2},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [2, 14], "x": 15.5, "y": 2},
{"matrix": [2, 15], "x": 16.5, "y": 2},
{"matrix": [2, 16], "x": 17.5, "y": 2},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14.25, "y": 3.25},
{"matrix": [3, 14], "x": 15.5, "y": 3},
{"matrix": [3, 15], "x": 16.5, "y": 3},
{"matrix": [3, 16], "x": 17.5, "y": 3},
{"matrix": [3, 17], "x": 18.5, "y": 3, "h": 2},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
{"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
{"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
{"matrix": [4, 10], "x": 10, "y": 4, "w": 1.5},
{"matrix": [4, 11], "x": 11.5, "y": 4, "w": 1.5},
{"matrix": [4, 12], "x": 13.25, "y": 4.25},
{"matrix": [4, 13], "x": 14.25, "y": 4.25},
{"matrix": [4, 14], "x": 15.25, "y": 4.25},
{"matrix": [4, 15], "x": 16.5, "y": 4},
{"matrix": [4, 16], "x": 17.5, "y": 4}
]
},
"LAYOUT_iso_6u_split_all": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0},
{"matrix": [2, 12], "x": 14, "y": 0},
{"matrix": [0, 14], "x": 15.5, "y": 0},
{"matrix": [0, 15], "x": 16.5, "y": 0},
{"matrix": [0, 16], "x": 17.5, "y": 0},
{"matrix": [0, 17], "x": 18.5, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
{"matrix": [1, 14], "x": 15.5, "y": 1},
{"matrix": [1, 15], "x": 16.5, "y": 1},
{"matrix": [1, 16], "x": 17.5, "y": 1},
{"matrix": [1, 17], "x": 18.5, "y": 1},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [1, 13], "x": 12.75, "y": 2},
{"matrix": [2, 14], "x": 15.5, "y": 2},
{"matrix": [2, 15], "x": 16.5, "y": 2},
{"matrix": [2, 16], "x": 17.5, "y": 2},
{"matrix": [2, 17], "x": 18.5, "y": 2},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
{"matrix": [3, 1], "x": 1.25, "y": 3},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14.25, "y": 3.25},
{"matrix": [3, 14], "x": 15.5, "y": 3},
{"matrix": [3, 15], "x": 16.5, "y": 3},
{"matrix": [3, 16], "x": 17.5, "y": 3},
{"matrix": [3, 17], "x": 18.5, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
{"matrix": [4, 1], "x": 1.25, "y": 4},
{"matrix": [4, 2], "x": 2.25, "y": 4, "w": 1.25},
{"matrix": [4, 6], "x": 3.5, "y": 4, "w": 6},
{"matrix": [4, 9], "x": 9.5, "y": 4, "w": 1.25},
{"matrix": [4, 10], "x": 10.75, "y": 4},
{"matrix": [4, 11], "x": 11.75, "y": 4, "w": 1.25},
{"matrix": [4, 12], "x": 13.25, "y": 4.25},
{"matrix": [4, 13], "x": 14.25, "y": 4.25},
{"matrix": [4, 14], "x": 15.25, "y": 4.25},
{"matrix": [4, 15], "x": 16.5, "y": 4},
{"matrix": [4, 16], "x": 17.5, "y": 4},
{"matrix": [4, 17], "x": 18.5, "y": 4}
]
}
}
}

View File

@@ -0,0 +1,24 @@
// Copyright 2024 Andrew Kannan
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_all( /* Base */
QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
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_P7, KC_P8, KC_P9, KC_PPLS,
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_P4, KC_P5, KC_P6, KC_PPLS,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RGUI, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT
),
[1] = LAYOUT_all( /* Function Layer */
QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______,_______, _______, _______, _______, _______, _______, _______
),
};

View File

@@ -0,0 +1,24 @@
// Copyright 2024 Andrew Kannan
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_all( /* Base */
QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
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_P7, KC_P8, KC_P9, KC_PPLS,
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_P4, KC_P5, KC_P6, KC_PPLS,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RGUI, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT
),
[1] = LAYOUT_all( /* Function Layer */
QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______,_______, _______, _______, _______, _______, _______, _______
),
};

View File

@@ -0,0 +1 @@
VIA_ENABLE = yes

View File

@@ -0,0 +1,40 @@
// Copyright 2023 Andrew Kannan
// SPDX-License-Identifier: GPL-2.0-or-later
#include "quantum.h"
const rgblight_segment_t PROGMEM my_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS(
{2, 1, HSV_PURPLE}
);
const rgblight_segment_t PROGMEM my_numlock_layer[] = RGBLIGHT_LAYER_SEGMENTS(
{1, 1, HSV_GREEN}
);
const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS(
{0, 1, HSV_BLUE}
);
const rgblight_segment_t* const PROGMEM enabled_rgb_layers[] = RGBLIGHT_LAYERS_LIST(
my_capslock_layer,
my_numlock_layer,
my_layer1_layer
);
void keyboard_post_init_kb(void) {
keyboard_post_init_user();
rgblight_layers = enabled_rgb_layers;
}
bool led_update_kb(led_t led_state) {
if(!led_update_user(led_state)){
return false;
}
rgblight_set_layer_state(0, led_state.caps_lock);
rgblight_set_layer_state(1, led_state.num_lock);
return true;
}
layer_state_t layer_state_set_kb(layer_state_t state) {
state = layer_state_set_user(state);
rgblight_set_layer_state(2, layer_state_cmp(state, 1));
return state;
}

View File

@@ -0,0 +1,28 @@
# Petrichor PCB
Petrichor PCB from CannonKeys for the AKB Petrichor keyboard
(This firmware is used for both the hotswap and solderable variant)
* Keyboard Maintainer: [Andrew Kannan](https://github.com/awkannan)
* Hardware Supported: RP2040
* Hardware Availability: [CannonKeys](https://cannonkeys.com)
Make example for this keyboard (after setting up your build environment):
make cannonkeys/petrichor:default
Flashing example for this keyboard:
make cannonkeys/petrichor:default:flash
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
Enter the bootloader in 4 ways:
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
* **Physical reset button**: Hold the "BOOTSEL" button on the back of the PCB and briefly press the "REBOOT" button on the back of the PCB.
* **Top side reboot pads**: Bridge the reboot pads on the top of the PCB with a pair of tweezers twice in a row, quickly.
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@@ -0,0 +1 @@
# This file intentionally left blank

11
keyboards/chew/config.h Normal file
View File

@@ -0,0 +1,11 @@
// Copyright 2024 Florent (@FLinguenheld)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
/* Flash */
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET // Activates the double-tap behavior
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 200U // In ms in which the double tap can occur
#define EE_HANDS
#define SERIAL_USART_TX_PIN GP11

84
keyboards/chew/info.json Normal file
View File

@@ -0,0 +1,84 @@
{
"manufacturer": "florent@linguenheld.fr",
"keyboard_name": "chew",
"maintainer": "florent@linguenheld.fr",
"bootloader": "rp2040",
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"matrix_pins": {
"direct": [
["GP4", "GP3", "GP2", "GP1", "GP0"],
["GP15", "GP26", "GP27", "GP28", "GP29"],
["GP14", "GP13", "GP9", "GP8", "NO_PIN"],
["GP7", "GP6", "GP5", "NO_PIN", "NO_PIN"]
]
},
"processor": "RP2040",
"split": {
"enabled": true,
"matrix_pins": {
"right": {
"direct": [
["GP0", "GP1", "GP2", "GP3", "GP4"],
["GP29", "GP28", "GP27", "GP26", "GP15"],
["GP8", "GP9", "GP13", "GP14", "NO_PIN"],
["GP5", "GP6", "GP7", "NO_PIN", "NO_PIN"]
]
}
},
"transport": {
"watchdog": true
}
},
"usb": {
"device_version": "1.0.0",
"pid": "0x0000",
"vid": "0xFEED"
},
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0.25},
{"matrix": [0, 1], "x": 1, "y": 0.125},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0.125},
{"matrix": [0, 4], "x": 4, "y": 0.25},
{"matrix": [4, 0], "x": 7, "y": 0.25},
{"matrix": [4, 1], "x": 8, "y": 0.125},
{"matrix": [4, 2], "x": 9, "y": 0},
{"matrix": [4, 3], "x": 10, "y": 0.125},
{"matrix": [4, 4], "x": 11, "y": 0.25},
{"matrix": [1, 0], "x": 0, "y": 1.25},
{"matrix": [1, 1], "x": 1, "y": 1.125},
{"matrix": [1, 2], "x": 2, "y": 1},
{"matrix": [1, 3], "x": 3, "y": 1.125},
{"matrix": [1, 4], "x": 4, "y": 1.25},
{"matrix": [5, 0], "x": 7, "y": 1.25},
{"matrix": [5, 1], "x": 8, "y": 1.125},
{"matrix": [5, 2], "x": 9, "y": 1},
{"matrix": [5, 3], "x": 10, "y": 1.125},
{"matrix": [5, 4], "x": 11, "y": 1.25},
{"matrix": [2, 0], "x": 0, "y": 2.25},
{"matrix": [2, 1], "x": 1, "y": 2.125},
{"matrix": [2, 2], "x": 2, "y": 2},
{"matrix": [2, 3], "x": 3, "y": 2.125},
{"matrix": [6, 0], "x": 8, "y": 2.125},
{"matrix": [6, 1], "x": 9, "y": 2},
{"matrix": [6, 2], "x": 10, "y": 2.125},
{"matrix": [6, 3], "x": 11, "y": 2.25},
{"matrix": [3, 0], "x": 2.5, "y": 3.25},
{"matrix": [3, 1], "x": 3.5, "y": 3.5},
{"matrix": [3, 2], "x": 4.5, "y": 3.75},
{"matrix": [7, 0], "x": 6.5, "y": 3.75},
{"matrix": [7, 1], "x": 7.5, "y": 3.5},
{"matrix": [7, 2], "x": 8.5, "y": 3.25}
]
}
}
}

View File

@@ -0,0 +1,27 @@
// Copyright 2024 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
* ┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐
* │ Q │ W │ E │ R │ T │ │ Y │ U │ I │ O │ P │
* ├───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┤
* │ A │ S │ D │ F │ G │ │ H │ J │ K │ L │ ; │
* ├───┼───┼───┼───┼───┘ └───┼───┼───┼───┼───┤
* │ Z │ X │ C │ V │ │ M │ , │ . │ / │
* └───┴───┴───┴───┘ └───┴───┴───┴───┘
* ┌───┐ ┌───┐
* │ B ├───┐ ┌───┤ N │
* └───┤Bsp├───┐ ┌───┤Ent├───┘
* └───┤Alt│ │ ├───┘
* └───┘ └───┘
*/
[0] = LAYOUT(
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_M, KC_COMM, KC_DOT, KC_SLSH,
KC_B, KC_BSPC, KC_RALT, KC_SPC, KC_ENT, KC_N
)
};

38
keyboards/chew/readme.md Normal file
View File

@@ -0,0 +1,38 @@
## Chew
![Chew front photo](https://live.staticflickr.com/65535/53681212617_90e4eebaf9_o.jpg)
![Chew front photo](https://live.staticflickr.com/65535/53682442119_1fcea26fef_o.jpg)
A humble 34 key choc-spaced keyboard.
- Keyboard Maintainer: [Florent Linguenheld](https://github.com/flinguenheld/)
- Visit the repository to get the last release: [Chew](https://github.com/flinguenheld/chew)
- Read the wiki to have some help or information: [Chew wiki](https://github.com/flinguenheld/chew/wiki)
![squirrel](https://github.com/flinguenheld/chew/blob/main/images/squirrel_brown.png?raw=true)
### Requirements
- 2x PCB
- 2x MCU board [RP2040-Zero](https://www.waveshare.com/wiki/RP2040-Zero)
- 2x TRRS jack
- 34 switches Choc V1 **only**
- 34 keycaps Choc V1
Optional:
- 23 [Mill Max sockets](https://splitkb.com/collections/keyboard-parts/products/mill-max-low-profile-sockets)
- 34 [kailh hotswap sockets](https://cdn.shopify.com/s/files/1/0588/1108/9090/files/5118-Choc-Socket.pdf?v=1686715063)
- 2x Back PCB + screws and bolts
- 2x [Tenting pucks](https://splitkb.com/collections/keyboard-parts/products/tenting-puck)
- 2x [Tripods](https://www.manfrotto.com/us-en/pocket-support-large-black-mp3-bk/)
### Bootloader
The controller has two buttons, so you can enter the bootloader in 2 ways:
- Maintain the **boot** button and plug the usb cable in.
- Press twice the **reset** button.
![hazelnuts](https://github.com/flinguenheld/chew/blob/main/images/hazelnuts.png?raw=true)
![Chew back photo](https://live.staticflickr.com/65535/53682442124_677ffa6cb5_o.jpg)

1
keyboards/chew/rules.mk Normal file
View File

@@ -0,0 +1 @@
SERIAL_DRIVER = vendor

View File

@@ -0,0 +1,118 @@
{
"manufacturer": "Cipulot",
"keyboard_name": "60XT",
"maintainer": "Cipulot",
"bootloader": "stm32-dfu",
"build": {
"lto": true
},
"qmk": {
"locking": {
"enabled": true,
"resync": true
}
},
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"indicators": {
"caps_lock": "A1"
},
"matrix_pins": {
"cols": ["A5", "A2", "A0", "F1", "F0", "C15", "C14", "C13", "B9", "B8", "B7", "B6", "B5", "B4", "B3", "A15"],
"rows": ["B1", "B2", "A6", "A7", "B0"]
},
"processor": "STM32F072",
"usb": {
"device_version": "0.0.1",
"pid": "0x6BC2",
"shared_endpoint": {
"keyboard": true
},
"vid": "0x6369"
},
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1.25, "y": 0},
{"matrix": [0, 2], "x": 2.25, "y": 0},
{"matrix": [0, 3], "x": 3.25, "y": 0},
{"matrix": [0, 4], "x": 4.25, "y": 0},
{"matrix": [0, 5], "x": 5.25, "y": 0},
{"matrix": [0, 6], "x": 6.25, "y": 0},
{"matrix": [0, 7], "x": 7.25, "y": 0},
{"matrix": [0, 8], "x": 8.25, "y": 0},
{"matrix": [0, 9], "x": 9.25, "y": 0},
{"matrix": [0, 10], "x": 10.25, "y": 0},
{"matrix": [0, 11], "x": 11.25, "y": 0},
{"matrix": [0, 12], "x": 12.25, "y": 0},
{"matrix": [0, 13], "x": 13.25, "y": 0},
{"matrix": [0, 14], "x": 14.25, "y": 0},
{"matrix": [0, 15], "x": 15.25, "y": 0},
{"matrix": [1, 15], "x": 16.5, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1},
{"matrix": [1, 1], "x": 1.25, "y": 1, "w": 1.5},
{"matrix": [1, 2], "x": 2.75, "y": 1},
{"matrix": [1, 3], "x": 3.75, "y": 1},
{"matrix": [1, 4], "x": 4.75, "y": 1},
{"matrix": [1, 5], "x": 5.75, "y": 1},
{"matrix": [1, 6], "x": 6.75, "y": 1},
{"matrix": [1, 7], "x": 7.75, "y": 1},
{"matrix": [1, 8], "x": 8.75, "y": 1},
{"matrix": [1, 9], "x": 9.75, "y": 1},
{"matrix": [1, 10], "x": 10.75, "y": 1},
{"matrix": [1, 11], "x": 11.75, "y": 1},
{"matrix": [1, 12], "x": 12.75, "y": 1},
{"matrix": [1, 13], "x": 13.75, "y": 1},
{"matrix": [1, 14], "x": 14.75, "y": 1, "w": 1.5},
{"matrix": [2, 15], "x": 16.5, "y": 1},
{"matrix": [2, 0], "x": 0, "y": 2},
{"matrix": [2, 1], "x": 1.25, "y": 2, "w": 1.75},
{"matrix": [2, 2], "x": 3, "y": 2},
{"matrix": [2, 3], "x": 4, "y": 2},
{"matrix": [2, 4], "x": 5, "y": 2},
{"matrix": [2, 5], "x": 6, "y": 2},
{"matrix": [2, 6], "x": 7, "y": 2},
{"matrix": [2, 7], "x": 8, "y": 2},
{"matrix": [2, 8], "x": 9, "y": 2},
{"matrix": [2, 9], "x": 10, "y": 2},
{"matrix": [2, 10], "x": 11, "y": 2},
{"matrix": [2, 11], "x": 12, "y": 2},
{"matrix": [2, 12], "x": 13, "y": 2},
{"matrix": [2, 13], "x": 14, "y": 2},
{"matrix": [2, 14], "x": 15, "y": 2, "w": 1.25},
{"matrix": [3, 15], "x": 16.5, "y": 2},
{"matrix": [3, 0], "x": 0, "y": 3},
{"matrix": [3, 1], "x": 1.25, "y": 3, "w": 1.25},
{"matrix": [3, 2], "x": 2.5, "y": 3},
{"matrix": [3, 3], "x": 3.5, "y": 3},
{"matrix": [3, 4], "x": 4.5, "y": 3},
{"matrix": [3, 5], "x": 5.5, "y": 3},
{"matrix": [3, 6], "x": 6.5, "y": 3},
{"matrix": [3, 7], "x": 7.5, "y": 3},
{"matrix": [3, 8], "x": 8.5, "y": 3},
{"matrix": [3, 9], "x": 9.5, "y": 3},
{"matrix": [3, 10], "x": 10.5, "y": 3},
{"matrix": [3, 11], "x": 11.5, "y": 3},
{"matrix": [3, 12], "x": 12.5, "y": 3},
{"matrix": [3, 13], "x": 13.5, "y": 3, "w": 1.75},
{"matrix": [3, 14], "x": 15.25, "y": 3},
{"matrix": [4, 14], "x": 16.5, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4},
{"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.5},
{"matrix": [4, 2], "x": 2.75, "y": 4},
{"matrix": [4, 3], "x": 3.75, "y": 4, "w": 1.5},
{"matrix": [4, 8], "x": 5.25, "y": 4, "w": 7},
{"matrix": [4, 11], "x": 12.25, "y": 4, "w": 1.5},
{"matrix": [4, 12], "x": 13.75, "y": 4},
{"matrix": [4, 13], "x": 14.75, "y": 4, "w": 1.5},
{"matrix": [4, 15], "x": 16.5, "y": 4}
]
}
}
}

View File

@@ -0,0 +1,43 @@
/* Copyright 2023 Cipulot
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// clang-format off
[0] = LAYOUT(
KC_F1, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_F6,
KC_F2, 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_F7,
KC_F3, 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_NUHS, KC_ENT, KC_F8,
KC_F4, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_F9,
KC_F5, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_F10
),
[1] = LAYOUT(
_______, 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_F12, _______, KC_DEL, _______,
_______, _______, _______, KC_UP, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUSE, _______, _______, _______, _______,
_______, _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, MO(2), _______
),
[2] = LAYOUT(
QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______
)
// clang-format on
};

View File

@@ -0,0 +1,43 @@
/* Copyright 2023 Cipulot
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// clang-format off
[0] = LAYOUT(
KC_F1, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_F6,
KC_F2, 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_F7,
KC_F3, 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_NUHS, KC_ENT, KC_F8,
KC_F4, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_F9,
KC_F5, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_F10
),
[1] = LAYOUT(
_______, 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_F12, _______, KC_DEL, _______,
_______, _______, _______, KC_UP, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUSE, _______, _______, _______, _______,
_______, _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, MO(2), _______
),
[2] = LAYOUT(
QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______
)
// clang-format on
};

View File

@@ -0,0 +1 @@
VIA_ENABLE = yes

View File

@@ -0,0 +1,27 @@
# 60XT
![60XT](https://i.imgur.com/7lAvjpmh.png)
A 60% XT solder and hot swap PCB.
* Keyboard Maintainer: [cipulot](https://github.com/cipulot)
* Hardware Supported: 60XT
* Hardware Availability: [Eloquent Clicks](https://eloquentclicks.com/)
Make example for this keyboard (after setting up your build environment):
make cipulot/60xt:default
Flashing example for this keyboard:
make cipulot/60xt:default:flash
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
Enter the bootloader in 3 ways:
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is configured.
* **Physical reset button**: Long press the reset button soldered on the PCB.
* **Bootmagic reset**: Hold down the top left key and plug in the controller.

View File

View File

@@ -0,0 +1,679 @@
{
"manufacturer": "Cipulot",
"keyboard_name": "Chroma",
"maintainer": "Cipulot",
"bootloader": "stm32-dfu",
"build": {
"lto": true
},
"diode_direction": "COL2ROW",
"features": {
"extrakey": true,
"mousekey": true,
"nkro": true
},
"matrix_pins": {
"cols": ["A5", "A6", "A7", "B0", "B1", "B2", "B10", "B11", "B12", "A15", "B3", "B4", "B5", "B7", "B6"],
"rows": ["F0", "A2", "A3", "A4", "C15"]
},
"processor": "STM32F072",
"usb": {
"device_version": "0.0.1",
"pid": "0x6BBF",
"shared_endpoint": {
"keyboard": true
},
"vid": "0x6369"
},
"community_layouts": ["60_ansi_tsangan", "60_tsangan_hhkb", "60_ansi_wkl", "60_ansi_wkl_split_bs_rshift", "60_hhkb", "60_iso_tsangan", "60_iso_tsangan_split_bs_rshift", "60_iso_wkl", "60_iso_wkl_split_bs_rshift"],
"layouts": {
"LAYOUT_60_ansi_tsangan": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 14], "x": 13, "y": 0, "w": 2},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
{"matrix": [4, 1], "x": 1.5, "y": 4},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 7], "x": 4, "y": 4, "w": 7},
{"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 12], "x": 12.5, "y": 4},
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
"LAYOUT_60_ansi_wkl": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 14], "x": 13, "y": 0, "w": 2},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 7], "x": 4, "y": 4, "w": 7},
{"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
"LAYOUT_60_ansi_wkl_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0},
{"matrix": [0, 14], "x": 14, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 7], "x": 4, "y": 4, "w": 7},
{"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
"LAYOUT_60_hhkb": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0},
{"matrix": [0, 14], "x": 14, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"matrix": [4, 1], "x": 1.5, "y": 4},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 7], "x": 4, "y": 4, "w": 7},
{"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 12], "x": 12.5, "y": 4}
]
},
"LAYOUT_60_iso_tsangan": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 14], "x": 13, "y": 0, "w": 2},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 12], "x": 12.75, "y": 2},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
{"matrix": [3, 1], "x": 1.25, "y": 3},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
{"matrix": [4, 1], "x": 1.5, "y": 4},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 7], "x": 4, "y": 4, "w": 7},
{"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 12], "x": 12.5, "y": 4},
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
"LAYOUT_60_iso_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0},
{"matrix": [0, 14], "x": 14, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 12], "x": 12.75, "y": 2},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
{"matrix": [3, 1], "x": 1.25, "y": 3},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
{"matrix": [4, 1], "x": 1.5, "y": 4},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 7], "x": 4, "y": 4, "w": 7},
{"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 12], "x": 12.5, "y": 4},
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
"LAYOUT_60_iso_wkl": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 14], "x": 13, "y": 0, "w": 2},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 12], "x": 12.75, "y": 2},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
{"matrix": [3, 1], "x": 1.25, "y": 3},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.75},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 7], "x": 4, "y": 4, "w": 7},
{"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
"LAYOUT_60_iso_wkl_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0},
{"matrix": [0, 14], "x": 14, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 12], "x": 12.75, "y": 2},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
{"matrix": [3, 1], "x": 1.25, "y": 3},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 7], "x": 4, "y": 4, "w": 7},
{"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
"LAYOUT_60_tsangan_hhkb": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0},
{"matrix": [0, 14], "x": 14, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
{"matrix": [4, 1], "x": 1.5, "y": 4},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 7], "x": 4, "y": 4, "w": 7},
{"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 12], "x": 12.5, "y": 4},
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
"LAYOUT_all": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0},
{"matrix": [0, 14], "x": 14, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 12], "x": 12.75, "y": 2},
{"matrix": [2, 13], "x": 13.75, "y": 2, "w": 1.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
{"matrix": [3, 1], "x": 1.25, "y": 3},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
{"matrix": [4, 1], "x": 1.5, "y": 4},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 7], "x": 4, "y": 4, "w": 7},
{"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 12], "x": 12.5, "y": 4},
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
}
}
}

View File

@@ -0,0 +1,43 @@
/* Copyright 2023 Cipulot
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// clang-format off
[0] = LAYOUT_60_ansi_tsangan(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, 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_RCTL
),
[1] = LAYOUT_60_ansi_tsangan(
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_F12, KC_DEL,
_______, _______, KC_UP, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUSE, _______, _______, _______,
_______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______
),
[2] = LAYOUT_60_ansi_tsangan(
QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______
)
// clang-format on
};

View File

@@ -0,0 +1,43 @@
/* Copyright 2023 Cipulot
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// clang-format off
[0] = LAYOUT_60_ansi_wkl(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, 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_LALT, KC_SPC, KC_RALT, KC_RCTL
),
[1] = LAYOUT_60_ansi_wkl(
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_F12, KC_DEL,
_______, _______, KC_UP, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUSE, _______, _______, _______,
_______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______
),
[2] = LAYOUT_60_ansi_wkl(
QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______
)
// clang-format on
};

View File

@@ -0,0 +1,43 @@
/* Copyright 2023 Cipulot
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// clang-format off
[0] = LAYOUT_60_ansi_wkl_split_bs_rshift(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, 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, MO(1),
KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL
),
[1] = LAYOUT_60_ansi_wkl_split_bs_rshift(
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_F12, _______, KC_DEL,
_______, _______, KC_UP, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUSE, _______, _______, _______,
_______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, MO(2)
),
[2] = LAYOUT_60_ansi_wkl_split_bs_rshift(
QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______
)
// clang-format on
};

View File

@@ -0,0 +1,43 @@
/* Copyright 2023 Cipulot
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// clang-format off
[0] = LAYOUT_60_iso_tsangan(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, 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_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
KC_LSFT, KC_NUBS, 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_RCTL
),
[1] = LAYOUT_60_iso_tsangan(
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_F12, KC_DEL,
_______, _______, KC_UP, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUSE, _______, _______,
_______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______
),
[2] = LAYOUT_60_iso_tsangan(
QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______
)
// clang-format on
};

View File

@@ -0,0 +1,43 @@
/* Copyright 2023 Cipulot
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// clang-format off
[0] = LAYOUT_60_iso_tsangan_split_bs_rshift(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, 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_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
),
[1] = LAYOUT_60_iso_tsangan_split_bs_rshift(
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_F12, _______, KC_DEL,
_______, _______, KC_UP, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUSE, _______, _______,
_______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, MO(2)
),
[2] = LAYOUT_60_iso_tsangan_split_bs_rshift(
QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______
)
// clang-format on
};

View File

@@ -0,0 +1,43 @@
/* Copyright 2023 Cipulot
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// clang-format off
[0] = LAYOUT_60_iso_wkl(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, 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_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
KC_LSFT, KC_NUBS, 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_LALT, KC_SPC, KC_RALT, KC_RCTL
),
[1] = LAYOUT_60_iso_wkl(
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_F12, KC_DEL,
_______, _______, KC_UP, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUSE, _______, _______,
_______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______
),
[2] = LAYOUT_60_iso_wkl(
QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______
)
// clang-format on
};

View File

@@ -0,0 +1,43 @@
/* Copyright 2023 Cipulot
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// clang-format off
[0] = LAYOUT_60_iso_wkl_split_bs_rshift(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, 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_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL
),
[1] = LAYOUT_60_iso_wkl_split_bs_rshift(
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_F12, _______, KC_DEL,
_______, _______, KC_UP, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUSE, _______, _______,
_______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, MO(2)
),
[2] = LAYOUT_60_iso_wkl_split_bs_rshift(
QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______
)
// clang-format on
};

View File

@@ -0,0 +1,43 @@
/* Copyright 2023 Cipulot
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// clang-format off
[0] = LAYOUT_all(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, 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_NUHS, KC_ENT,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
),
[1] = LAYOUT_all(
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_F12, _______, KC_DEL,
_______, _______, KC_UP, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUSE, _______, _______, _______,
_______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, MO(2)
),
[2] = LAYOUT_all(
QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______
)
// clang-format on
};

View File

@@ -0,0 +1,43 @@
/* Copyright 2023 Cipulot
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// clang-format off
[0] = LAYOUT_all(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, 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_NUHS, KC_ENT,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
),
[1] = LAYOUT_all(
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_F12, _______, KC_DEL,
_______, _______, KC_UP, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUSE, _______, _______, _______,
_______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, MO(2)
),
[2] = LAYOUT_all(
QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______
)
// clang-format on
};

View File

@@ -0,0 +1 @@
VIA_ENABLE = yes

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