Compare commits

...

638 Commits

Author SHA1 Message Date
Joel Challis
36c3f4deba
[docs] Align more keyboard placeholders (#25510) 2025-07-23 13:08:48 +01:00
Joel Challis
74d64c7f43
[docs] Align keyboard and keymap placeholders (#25509) 2025-07-23 04:33:37 +01:00
Brandon
7098252252
Add null65ansi keyboard (#25464) 2025-07-17 18:09:17 +01:00
Brandon
16ffaa6482
Add null65iso keyboard (#25465) 2025-07-17 18:09:01 +01:00
Jack Sangdahl
86badb394e
Enable correct SPI peripheral dilemma/3x5_2/assembled (#25479)
Initial
2025-07-12 19:38:32 -06:00
Joel Challis
c7a24a441f
Add zip to .gitignore (#25483) 2025-07-12 16:56:32 +01:00
Jon Henry Fernandez
9e757bc2ec
[Keyboard] Add togkey/pad_pocket (#25470)
* Initial Source for Pad Pocket

* Added Tap Dance and Combo Configurations

* Updated LED Count

* Updated read me

* Updated Readme

* -Removed config.h file
- Added tap dance and combos to keymap level
- Removed tap dance and combos from keyboard.json
- Fixed conflict with submodules

* Fixed Formatting
2025-07-11 21:29:16 -06:00
TweyHugs
c3773d9c35
[Keyboard] Add cloud_macro (#24904)
* Added cloud_macro to keyboards folder

* Update readme.md

* Update readme.md

* Update readme.md

* Add files via upload

* Update keyboards/cloud_macro/keyboard.json

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

* Update keyboards/cloud_macro/keymaps/default/keymap.c

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

* Update keyboards/cloud_macro/keyboard.json

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

* Update keyboards/cloud_macro/keyboard.json

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

* Update readme.md

* Update keyboards/cloud_macro/readme.md

Co-authored-by: Thanh Son Tran <62438883+trnthsn@users.noreply.github.com>

* Update keyboards/cloud_macro/keyboard.json

Co-authored-by: jack <jack@pngu.org>

* Update keyboards/cloud_macro/keymaps/default/keymap.c

Co-authored-by: jack <jack@pngu.org>

* Update keyboards/cloud_macro/readme.md

Co-authored-by: jack <jack@pngu.org>

* Update readme.md

* Update readme.md

reverting description to KB2040

---------

Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Thanh Son Tran <62438883+trnthsn@users.noreply.github.com>
Co-authored-by: jack <jack@pngu.org>
2025-07-11 10:51:45 -06:00
Andrew Cooney
87e5df1b9e
Changes to the Stenography documentation page. (#25426) 2025-07-10 12:02:08 +01:00
jack
c3b3f09702
[Docs] Tidy up keyboard guidelines (#25461)
* Initial

* Grammar
2025-07-08 13:17:33 -06:00
JhaKob
8a47896263
[Keyboard] Add Monsgeek M2 (#25387)
* Adding Monsgeek M2 keyboard

* Update readme.md

* Switch tab -> space

* Addressing PR comments.
- Removing values that are set to defaults
- Updating readme verbiage
- Using host nkro instead of usb force_nkro
2025-07-08 00:03:12 -06:00
ASHIJA
f1b2449ce5
[Keyboard] Add Slimorta (#25348)
* Add Slimorta

* Update readme.md

* Apply suggestions from code review for #25348

Co-authored-by: jack <jack@pngu.org>

---------

Co-authored-by: jack <jack@pngu.org>
2025-07-08 00:00:20 -06:00
Cipulot
a26dbbfe96
[Keyboard] Add MX65X (#25214)
* Addition of MX65X

* Folder separation

* Fix

* Update readme

* Update keymap.c

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keymap.c

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keymap.c

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keymap.c

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keymap.c

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update info.json

---------

Co-authored-by: Drashna Jaelre <drashna@live.com>
2025-07-07 23:59:45 -06:00
Ning
2916c3f098
[Keyboard] Update ning_tinyboard_tb16rgb diode direction (#25379)
* Update ning_tinyboard_tb16rgb diode_direction

* enable LTO
add rules.mk and enable RGB_MATRIX_CUSTOM_USER
add
add rgb_matrix_user.inc

* remove files
2025-07-07 23:49:44 -06:00
srk24
0524a6d848
[keyboard]Graystudio BD60 Support (#25337) 2025-07-07 20:23:46 +01:00
Ryan
8ff7b1de11
[docs] WS2812: rewrite Open Drain section (#25454) 2025-07-07 13:12:11 -06:00
snappykey
9c965bb62e
Add Snappy Pad v.1 (#25419) 2025-07-06 08:39:10 +01:00
Ryan
ba63bac661
Add short aliases for OSM() (#25443) 2025-07-06 16:57:51 +10:00
Copilot
90b5c17034
Fix SPI bus lock issue in spi_start_extended when using mutual exclusion (#25447) 2025-07-06 07:20:48 +01:00
SneakboxKB
da7811f82a
Add lilBAE support (#25259) 2025-07-06 06:59:20 +01:00
Joel Challis
9e103614f8
Fix invalid layer API usage in RGB Matrix docs (#25449) 2025-07-04 20:09:27 +01:00
Jon Henry Fernandez
177e461d90
[Keyboard] Add togkey pad & pad_plus (#25217)
* Initial Commit for Adding TogKey Pad and TogKey Pad Plus to QMK

* Added TogKey Pad default Keymap

* Changed Pins for Encoder

* added images to read me

* Updated Read Me Pictures Links

* Applied Suggested Changes and Formatting to keyboard.json

* Applied suggested keycodes to keymap.c for togkey pad

* Updated Hardware Availability Links in Readme

* Set development board instead of seperate bootloader and processor.

* Added pad_plus.c for oled. Added config.h for pad_plus.
Applied Suggested Changes.

* - Moved oled arrays outside of oled_task function.
- Removed white spaces from pad_plus keymaps.
- Made suggested changes to oled_task function.

* Updated with Changes
- Updated pad json. Removed extra features, remvoed rgb test from rgb animations.
- Updated pad_plus functions
- Updated Pad Plus Config file

* Readded display defintion.

* Corrected OLED resolution definition.

* Applied Suggested Changes
- Updated Copyright Information
- Updated Layout Names
- Updated TogKey Pad Layout

* Applied Suggested Changes
- Removed move layer function.
- Repolaced with "TO" keycodes
- Updated OLED images

* Fixed Layout name in keyboard.json for togkey pad

* - Updated Readme for both pad and pad plus.
- Updated Oled pictures for pad plus.

* - Added bootmagic and extrakey features to togkey pad keyboard.json.
2025-06-28 10:29:57 -06:00
Pascal Getreuer
b42191a2dd
[Docs] Fix typo in Chordal Hold example JSON, comma to colon. (#25424) 2025-06-28 13:21:12 +10:00
Ryan
36636205dd
Clean up mod & mod-tap shortcuts (#25399) 2025-06-28 12:44:24 +10:00
Peter Cock
89e39b9858
[Docs] Link to awesome-qmk userspaces repository (#25357)
* Fix link - users folder now empty on default branch

* Point at drashna/qmk_userspace repo

* Link to awesome-qmk instead
2025-06-27 14:23:05 -06:00
Thanh Son Tran
4ae2b4f371
[Keyboard] Add support S6xty Tsangan (#24898)
* Update support S6xty5

* Delete chconf.h

* Update manufacturer, community layout for hhkb

* Update layout

* fix row index

* Update tyson60s

* Update community layout and layout name

* Update remove rgb test mode

* Update capslock led

* Apply suggestions from code review

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

* Remove deprecated s6xty5

* Update support S6xty Tsangan

* Update pinout config

* Update render

* Update default animation

* Update layout

* Update keymap keycode

* Update hardware supported

* Update keyboard.json

* Update layout s6xty tsangan

* Update led indicator for s6xtyfs

* Apply suggestions from code review

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

---------

Co-authored-by: Trần Thanh Sơn <son.tt1@teko.vn>
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
2025-06-27 14:00:50 -06:00
Andrew Litt
6e55870a82
inland/kb83: Remove unnecessary EEPROM write (#25401)
There's no reason to save the base layer to EEPROM when the base layer
is set based on DIP switch.
2025-06-27 13:11:43 -06:00
Joel Challis
e15d9ca4b3
Update link to AW20216S datasheet (#25416) 2025-06-27 06:49:26 +01:00
timovp
5354ec5791
fix order of code in tapdance example3 (#25410) 2025-06-26 08:19:42 +01:00
Dave Alvarado
235d18f360
Update readme.md to clarify Lily Pad V2 support (#25405) 2025-06-25 23:38:15 -07:00
Andrew Litt
de5fd5d4e2
Orient side LEDs on GMMK2 65% ANSI to match the rest of the matrix (#25402)
Orient side LEDs on GMMK2 65% to match the rest of the matrix

On GMMK2 P65 ANSI, the side LEDs were mapped to the wrong sides
of the keyboard resulting in effects not being consistent with
the key surface. This was most jarring in effects like pinwheel
where the pattern involves the side LEDs and there is a distinctly
different flow on the left and right halves of the board.

This PR swaps the side LEDs in the map so that they are correctly
oriented. Applied to both ANSI and ISO variants.
2025-06-23 16:01:56 -06:00
Andrew Litt
f5b02fbc11
Fix inverted encoder on Inland KB83 (#25400) 2025-06-23 10:18:48 +01:00
Ryan
611460c9db
ymdk/id75: fix keymap (#25396) 2025-06-22 17:11:53 +10:00
Ryan
1ac255fd1c
[docs] Change GUI key references to "Meta" -> "Super" (#25394) 2025-06-22 12:33:53 +10:00
YodaDistro
664c0bc4c3
Add YodaDistro Macropad (#25174)
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Less/Rikki <86894501+lesshonor@users.noreply.github.com>
2025-06-21 12:31:49 +01:00
ClownFish
6626084cb8
fix incorrect damapad layout macros (#25364) 2025-06-19 22:24:37 +01:00
Marius
bb27c69675
Applied usb detection fixes from Squalius-cephalus (#25380)
Co-authored-by: Dr. Marius Feilhauer <software@feilhauer.de>
2025-06-19 22:23:53 +01:00
Christoffer Larsen
03a53e29af
Fix Enter key matrix coordinates for smk65/revf ISO layout (#25373) 2025-06-19 22:15:54 +01:00
Xelus22
096696d86d
[Bug] Fix usb_endpoint_interface_lut multiple def compile err (#25378) 2025-06-18 10:44:49 +01:00
Nick Brassel
7f9ceef3dd
More compiledb fixes. (#25355) 2025-06-15 11:56:10 +10:00
luroc
7ecdb57414
[Docs] Fix example code on key_overrides.md (#25367)
The description of the code snippet says right alt, but the snippet itself contained the right control keycode
2025-06-13 21:11:58 -06:00
Álvaro A. Volpato
dcdd037276
Add support for Protagonist PCBs (#22918) 2025-06-13 00:40:25 +01:00
ClownFish
8ae01715d6
fix winry25tc lightsout keymap (#25353) 2025-06-12 13:43:15 +01:00
oxnh
f4aa8ae845
Add keyboard Lily58 Koca (#24847)
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Dasky <32983009+daskygit@users.noreply.github.com>
2025-06-12 13:31:05 +01:00
Nick Brassel
0516cf5ed8
Specify language standard when generating compilation database. (#25354) 2025-06-11 14:29:37 +10:00
Pablo Martínez
802a199bbd
[Bugfix] User eeconfig utility macros (#25350) 2025-06-09 19:35:48 +01:00
VeyPatch
1a54ecf246
[Keyboard] Add splitkb.com's Halcyon Corne rev2 (#25143)
Co-authored-by: Dasky <32983009+daskygit@users.noreply.github.com>
2025-06-09 02:43:31 +01:00
VeyPatch
319844407c
[Keyboard] Add splitkb.com's Halcyon Ferris rev1 (#25145)
Co-authored-by: Thomas Baart <support@splitkb.com>
2025-06-08 18:24:54 +01:00
VeyPatch
e57226d9a2
[Keyboard] Add splitkb.com's Halcyon Lily58 rev2 (#25144) 2025-06-08 18:04:56 +01:00
Nick Brassel
1646000c9b
[tzarc/djinn] Include community modules in RGB naming. (#25343) 2025-06-07 14:08:56 +10:00
bytetinkerer
824ad46e5d
add kinesis/kint32 (#25013)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2025-06-06 00:02:38 +01:00
Nick Brassel
0d477bf570
More Yunzii notes regarding refusal to provide sources. (#25335) 2025-06-05 16:29:53 +01:00
obosob
2e3664d2c0
Add CrossDIY to license_violations.md (#25324)
Co-authored-by: jack <jack@pngu.org>
2025-06-04 22:42:57 +10:00
Joel Challis
fad44ae10c
[Docs] Fix PS/2 Driver headers (#25332) 2025-06-04 22:41:37 +10:00
Dasky
8525ab03de
Fix dynamic keymap static assert (#25327) 2025-06-03 13:03:59 +01:00
Joel Challis
faf77f1651
Fix typo in Battery Driver docs (#25312)
* Fix typo in Battery Driver docs

* Update battery.md
2025-05-28 16:05:44 +10:00
Idkau
2b8aeed02b
Fix Sofle OLED layer indication code (#25311)
Fixed oled raise/lower layer order and added adjust layer text to oled display
2025-05-27 18:47:00 -06:00
Sergey Radionov
9e2d8999bf
Fix reference to wrong layer when LM used with right modifiers (#25303) 2025-05-27 23:24:20 +01:00
dependabot[bot]
c8a39b69a0
Bump vite from 5.4.18 to 5.4.19 in /builddefs/docsgen (#25306)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.4.18 to 5.4.19.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v5.4.19/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.4.19/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 5.4.19
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-27 18:07:22 +01:00
Dasky
41b1bb4aef
Fix dynamic keymap macro only sending first. (#25309) 2025-05-27 14:22:55 +01:00
Nick Brassel
75a037d2f0
Merge remote-tracking branch 'upstream/develop' 2025-05-26 21:41:49 +10:00
Joel Challis
3703699757
2025 Q2 changelog (#25297)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Nick Brassel <nick@tzarc.org>
2025-05-26 21:04:52 +10:00
Joel Challis
c97a798af7
Configure boards to use development_board - T (#25294) 2025-05-24 21:20:16 +01:00
Joel Challis
dd871d0105
Configure boards to use development_board - S (#25293) 2025-05-24 21:19:52 +01:00
Joel Challis
ba5c707327
salicylic_acid3/getta25 - Fix oled keymap (#25295) 2025-05-24 19:04:01 +01:00
Joel Challis
8b7c351e56
[Docs] Fix tap_hold code blocks (#25298) 2025-05-24 19:00:22 +01:00
Joel Challis
196285c59c
Configure boards to use development_board - UVWXYZ (#25288) 2025-05-23 01:27:00 +01:00
Stefan Kerkmann
f3b974f216
[Fix] lib8tion: enable fixed scale8 and blend functions (#25272)
lib8tion: enable fixed scale8 and blend functions

These FastLED derived lib8tion functions have been fixed and enabled by
default in FastLED. QMK just never set these defines, there is no reason
to keep the buggy implementation. It is assumed that nobody relied on
the buggy behavior.
2025-05-22 22:52:45 +01:00
Joel Challis
243c21568a
Configure boards to use development_board - 0-9 (#25287) 2025-05-22 20:49:22 +01:00
Pablo Martínez
955809bd5a
Add compiler_support.h (#25274) 2025-05-22 23:31:15 +10:00
Nick Brassel
fa24b0fcce
Remove outdated nix support due to bit-rot. (#25280) 2025-05-21 07:17:58 +10:00
Stefan Kerkmann
4f0a0f32f2
[Chore] use {rgblight,rgb_matrix}_hsv_to_rgb overrides (#25271) 2025-05-20 19:23:20 +01:00
ivan
24895c46f3
Move rookiebwoy to ivndbt (#25142) 2025-05-19 22:15:19 +01:00
QMK Bot
190e0eff23 Merge remote-tracking branch 'origin/master' into develop 2025-05-19 20:53:40 +00:00
ClownFish
28720c4d34
add doio/kb03 (#24815)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Joel Challis <git@zvecr.com>
2025-05-19 13:53:02 -07:00
Nick Brassel
919e2a4f5c
Use relative paths for schemas, instead of $id. Enables VScode validation. (#25251) 2025-05-19 22:10:39 +10:00
Stefan Kerkmann
f686ad9e63
[Core] STM32G0x1 support (#24301) 2025-05-19 15:51:28 +10:00
Nick Brassel
a4ef1ae736
gcc15 AVR compilation fixes (#25238) 2025-05-19 09:22:31 +10:00
Florent Linguenheld
81355045cc
Chew folders (#24785) 2025-05-18 18:53:00 +01:00
QMK Bot
bcd06f03a5 Merge remote-tracking branch 'origin/master' into develop 2025-05-18 15:43:21 +00:00
Joel Challis
02517bd806
Update PR checklist notes on custom matrix (#25240) 2025-05-18 16:42:43 +01:00
QMK Bot
6b25bfb0ff Merge remote-tracking branch 'origin/master' into develop 2025-05-18 15:29:20 +00:00
Joel Challis
0f948fe039
Add Waveshare RP2040-Keyboard-3 support (#25269) 2025-05-18 16:28:42 +01:00
QMK Bot
fffa553c25 Merge remote-tracking branch 'origin/master' into develop 2025-05-18 03:29:00 +00:00
Infos
e73b3c08a0
Add Zeropad (#24737)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Joel Challis <git@zvecr.com>
2025-05-17 20:28:24 -07:00
Joel Challis
fa35be5135
Resolve miscellaneous keyboard lint warnings (#25268) 2025-05-16 17:35:17 +01:00
Joel Challis
0b6a460b7f
Remove duplicate of SPI default config from keyboards (#25266) 2025-05-16 17:35:05 +01:00
QMK Bot
15e45b1d4b Merge remote-tracking branch 'origin/master' into develop 2025-05-16 16:09:52 +00:00
Danny
40d0de39b7
Add BDN9 Rev. 3 (#25261) 2025-05-16 12:08:51 -04:00
Joel Challis
05ff5443b1
Deprecate usb.force_nkro/FORCE_NKRO (#25262) 2025-05-14 22:02:43 +10:00
QMK Bot
e553cf7214 Merge remote-tracking branch 'origin/master' into develop 2025-05-14 12:01:11 +00:00
Joel Challis
cd95294a25
Remove more USB only branches from NKRO handling (#25263) 2025-05-14 22:01:08 +10:00
Joel Challis
8c108efb0d
dlip/haritev2 - Post merge fixes (#25264) 2025-05-14 22:00:33 +10:00
QMK Bot
b4f0314b35 Merge remote-tracking branch 'origin/master' into develop 2025-05-14 10:13:34 +00:00
Dane Lipscombe
59c3612590
Add Harite v2 keyboard (#24975) 2025-05-14 11:12:59 +01:00
QMK Bot
55e4a1c7dc Merge remote-tracking branch 'origin/master' into develop 2025-05-14 03:23:53 +00:00
Wasteland Fluttershy
e0b037c2cd
Fixes the numlock indicator for Magic Force MF17 numpad (#25260) 2025-05-13 20:23:16 -07:00
Matti Hiljanen
070dea4a9c
Fix OS_DETECTION_KEYBOARD_RESET (#25015)
Co-authored-by: Nick Brassel <nick@tzarc.org>
2025-05-12 12:15:40 +10:00
Pascal Getreuer
f4171412a6
Enable community modules to define LED matrix and RGB matrix effects. (#25187)
Co-authored-by: Joel Challis <git@zvecr.com>
2025-05-12 09:30:19 +10:00
art-was-here
7f42a5bc03
[New Feature/Core] New RGB Matrix Animation "Starlight Smooth" (#25203) 2025-05-12 08:50:36 +10:00
Joel Challis
3e7ce54902
Fix Wear Leveling compilation (#25254) 2025-05-12 08:39:38 +10:00
Joel Challis
88c094908b
Add raw_hid support to host driver (#25255) 2025-05-12 08:38:48 +10:00
QMK Bot
c045c3e00c Merge remote-tracking branch 'origin/master' into develop 2025-05-11 05:58:16 +00:00
cyxae
6b1a376aee
[Keyboard] Add Jason Hazel’s Bad Wings v2 (#25252)
Co-authored-by: Florent Allard <florent.allard@savoirfairelinux.com>
2025-05-10 22:57:40 -07:00
HorrorTroll
02525f683e
Allow LVGL onekey keymap to be able compile for other board (#25005) 2025-05-10 19:26:50 +01:00
Drashna Jaelre
5a57d2115b
[Docs] Fix typos introduced by PR #25050 (#25250)
It isn't a drashna PR if there aren't some typos in it somewhere.
2025-05-09 07:18:30 +10:00
Joel Challis
660d248549
Add debounce to duplicated defaults check (#25246) 2025-05-08 01:12:58 +01:00
QMK Bot
1bc3494494 Merge remote-tracking branch 'origin/master' into develop 2025-05-07 17:38:45 +00:00
muge
33a12ca0b6
CXT Studio 12E3: Fix encoder resolutions not applying (#25242)
* add resolution to encoders so they apply

* Tweak default keymap

* replace KC_UNDO with C(KC_Z) as well
2025-05-07 11:38:10 -06:00
QMK Bot
084ed078d6 Merge remote-tracking branch 'origin/master' into develop 2025-05-07 14:42:14 +00:00
Nathan Cain
32204095e5
Docs update for installing qmk with uv (#24995) 2025-05-07 15:41:37 +01:00
QMK Bot
b76bf29d25 Merge remote-tracking branch 'origin/master' into develop 2025-05-07 14:39:04 +00:00
VeyPatch
396fb4dde7
Fix Aurora sweep default keymap configuration (#25148) 2025-05-07 15:38:29 +01:00
QMK Bot
4836fcf831 Merge remote-tracking branch 'origin/master' into develop 2025-05-07 07:09:37 +00:00
dabstractor
1becbaefbe
Fixed print statement after enabling 32-bit layers (#25027) 2025-05-07 00:09:01 -07:00
QMK Bot
e3c613c79c Merge remote-tracking branch 'origin/master' into develop 2025-05-06 06:23:47 +00:00
Duncan Sutherland
04fbcdc68d
Layout corrections: Zed60 (#25003) 2025-05-05 23:23:10 -07:00
Drashna Jaelre
55909141ef
[Keyboard] Update Tractyl Manuform and add F405 (weact) variant (#24764) 2025-05-05 23:19:38 -07:00
QMK Bot
cd6e065f6e Merge remote-tracking branch 'origin/master' into develop 2025-05-06 06:04:11 +00:00
Silvino R.
bb2b7ce7e4
[Keyboard] Add Binepad KnobX1 (#25222)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2025-05-05 23:03:30 -07:00
QMK Bot
2fbc222bb0 Merge remote-tracking branch 'origin/master' into develop 2025-05-06 05:56:06 +00:00
yiancar
a1469abc8d
Keycult 60 (#25213)
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
Co-authored-by: jack <jack@pngu.org>
2025-05-05 22:55:31 -07:00
Joel Challis
ab1332bb6c
Remove force disable of NKRO when Bluetooth enabled (#25201) 2025-05-06 06:47:44 +01:00
Nick Brassel
ac991405d0
Deprecate qmk generate-compilation-database. (#25237) 2025-05-06 09:52:41 +10:00
Joel Challis
842c840145
Bind Bluetooth driver to host_driver_t (#25199) 2025-05-05 04:05:04 +01:00
Joel Challis
614b631ee2
Ensure qmk_userspace_paths maintains detected order (#25204) 2025-05-05 03:43:14 +01:00
Joel Challis
5611a40064
Add battery changed callbacks (#25207) 2025-05-05 03:28:33 +01:00
QMK Bot
11c8b2841e Merge remote-tracking branch 'origin/master' into develop 2025-05-05 01:46:48 +00:00
Silvino R.
0c0d038a40
[Keyboard] Add Binepad KN01 (#25224)
* Add Binepad NeoKnob KN01

* post @waffle87 recommendations
2025-05-04 19:46:11 -06:00
Joel Challis
5f31d5cc80
Resolve alias for qmk new-keymap keyboard prompts (#25210) 2025-05-05 11:14:40 +10:00
Joel Challis
dbe30a1b6f
Generate versions to keycode headers (#25219) 2025-05-05 10:44:08 +10:00
QMK Bot
a992e32bd5 Merge remote-tracking branch 'origin/master' into develop 2025-05-05 00:23:26 +00:00
Joel Challis
cf5ce64b1b
Workaround for resolving keyboard alias for config file values (#25228) 2025-05-05 10:22:51 +10:00
Drashna Jaelre
12caf0be4e
Add additional hooks for Community modules (#25050) 2025-05-05 10:21:47 +10:00
Nick Brassel
bb9dd05c6a
[Bug] Minimise force-included files (#25194) 2025-05-05 10:07:53 +10:00
QMK Bot
59f607b963 Merge remote-tracking branch 'origin/master' into develop 2025-05-02 01:53:11 +00:00
Christopher Hoage
60ac859852
Fix Spleeb compile when pointing device is enabled (#25016) 2025-05-01 18:52:36 -07:00
Joel Challis
4fb3cf0712
Remove redundant keyboard headers (#25208) 2025-05-01 15:02:17 +01:00
QMK Bot
e98c41c02f Merge remote-tracking branch 'origin/master' into develop 2025-04-30 18:09:14 +00:00
takashicompany
45091b0473
[Keyboard] Add Gravity-45(#25206)
* add gravity-45

* readme.md

* fix readme

* Update keyboards/green_keys/gravity_45/keyboard.json

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

* run qmk format-json -i keyboards/green_keys/gravity_45/keyboard.json

* add url

* Update keyboards/green_keys/gravity_45/keyboard.json

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

* Update keyboard.json

* Update keyboard.json

* Update keyboards/green_keys/gravity_45/keyboard.json

Co-authored-by: Drashna Jaelre <drashna@live.com>

---------

Co-authored-by: jack <0x6a73@protonmail.com>
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2025-04-30 12:08:37 -06:00
Joel Challis
3cf328c644
amptrics/0422 - Prevent OOB in update_leds_for_layer (#25209) 2025-04-28 14:37:50 -07:00
Pascal Getreuer
c26449e64f
[Core] Enhance Flow Tap to work better for rolls over multiple tap-hold keys. (#25200)
* Flow Tap revision for rolling press.

* Remove debugging cruft.

* Formatting fix.
2025-04-28 09:52:20 +02:00
zvecr
7fa65aa877 Merge remote-tracking branch 'origin/master' into develop 2025-04-28 07:24:00 +01:00
vchowl
4e2191ce20
Amptrics 0420 keyboard addition (#24744)
Co-authored-by: jack <jack@pngu.org>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2025-04-27 23:08:13 -07:00
josephawilliamsiv
3de04e0386
Add Umbra keyboard (#24569)
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2025-04-27 23:02:30 -07:00
Cipulot
2e648d7e48
Addition of OK-1 (#24646)
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2025-04-27 22:55:51 -07:00
hen-des
1fd0139b91
Added new keyboard epssp75 (#24756)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2025-04-27 22:28:22 -07:00
mizma
3478ae5795
[Keyboard] mzmkb/slimdash/rev1 (#24804)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: jack <jack@pngu.org>
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2025-04-27 22:26:47 -07:00
VeyPatch
01354fffb4
[Keyboard] Add splitkb.com's Halcyon Elora rev2 (#24790)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2025-04-27 22:25:09 -07:00
Jeremy Cook
92c4f0095d
Add jcpm2 (JC Pro Macro 2) (#24816)
Co-authored-by: jack <jack@pngu.org>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Joel Challis <git@zvecr.com>
2025-04-27 21:03:50 -07:00
LucasMateijsen
ac8b914a11
Add handwired 4x14 LuMaWing keyboard (#24885) 2025-04-27 20:58:47 -07:00
Matheus Marques
de598ac8f0
[Keymap] Sofle RGB - fixed stuck on numpad layer and layout comments (#24942) 2025-04-27 11:42:11 -07:00
QMK Bot
142952cac8 Merge remote-tracking branch 'origin/master' into develop 2025-04-27 18:19:53 +00:00
takashicompany
a07360e0f1
Add new keyboard MirageiX (#25054)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: jack <0x6a73@protonmail.com>
2025-04-27 11:19:19 -07:00
QMK Bot
1fc7066713 Merge remote-tracking branch 'origin/master' into develop 2025-04-26 00:40:58 +00:00
Michał Kopeć
ca425971d5
keyboards/annepro2/ld: Add per-variant linker scripts (#24999)
C18 has an MCU with 16K SRAM, up from C15's 8K.

Split the linker script into C15 and C18 variants to make use of the
larger RAM capacity of C18.
2025-04-26 01:40:17 +01:00
QMK Bot
dffa59dca5 Merge remote-tracking branch 'origin/master' into develop 2025-04-26 00:32:07 +00:00
Aidan Gauland
3319474c5c
Add Lemokey X0 keyboard (#24994) 2025-04-26 01:31:25 +01:00
QMK Bot
802e2f54c6 Merge remote-tracking branch 'origin/master' into develop 2025-04-26 00:29:24 +00:00
Álvaro A. Volpato
12d70ab1a4
First TypeK support (#22876) 2025-04-26 01:28:49 +01:00
Joel Beckmeyer
4ae24004b7
modelh: add prerequisites for via support (#24932) 2025-04-24 13:04:30 -07:00
Joel Challis
8244659b44
Extend lint checks to reject duplication of defaults (#25149) 2025-04-24 05:39:56 +01:00
Joel Challis
0bd02952ea
Remove "command":false from keyboards (#25193) 2025-04-24 10:28:13 +10:00
jack
5ea7283159
Fix boardsource/beiwagon RGB Matrix coordinates (#25018) 2025-04-23 04:06:17 +01:00
QMK Bot
acedfc3fcb Merge remote-tracking branch 'origin/master' into develop 2025-04-23 02:26:26 +00:00
dependabot[bot]
e5466df800
Bump vite from 5.4.15 to 5.4.18 in /builddefs/docsgen (#25192)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-23 12:25:47 +10:00
Joel Challis
ce1801aeda
Align new-keyboard template to current standards (#25191) 2025-04-23 12:14:11 +10:00
Joel Challis
11cb5cf347
Remove more duplication of defaults (#25189) 2025-04-23 12:11:28 +10:00
QMK Bot
24d896ca06 Merge remote-tracking branch 'origin/master' into develop 2025-04-23 02:10:54 +00:00
Joel Challis
da2e897f55
Update 'qmk generate-api' to only publish pure DD keymaps (#24782) 2025-04-23 12:10:14 +10:00
Joel Challis
07684bcc99
Remove "console":false from keyboards (#25190) 2025-04-23 12:09:56 +10:00
QMK Bot
847bef3177 Merge remote-tracking branch 'origin/master' into develop 2025-04-23 02:03:39 +00:00
Joel Challis
c6a93b5a56
Bump rlespinasse/github-slug-action from 3 to 5 (#25021) 2025-04-23 12:03:02 +10:00
Joel Challis
8cd71917ce
Avoid duplication in generated community modules rules.mk (#25135) 2025-04-23 10:27:47 +10:00
eynsai
7a2cd0fa96
High resolution scrolling (without feature report parsing) (#24423)
* hires scrolling without feature report parsing

* fix valid range for exponent

* fix incorrect minimum exponent value documentation
2025-04-23 00:04:31 +02:00
Joel Challis
83818d1d6f
Prompt for converter when creating new keymap (#25116) 2025-04-22 17:59:16 +01:00
Joel Challis
960c4969a5
Remove empty url fields (#25181) 2025-04-22 17:59:00 +01:00
Pascal Getreuer
73e2ef486a
[Bug][Core] Fix for Flow Tap: fix handling of distinct taps and timer updates. (#25175)
* Flow Tap bug fix.

As reported by @amarz45 and @mwpardue, there is a bug where if two
tap-hold keys are pressed in distinct taps back to back, then Flow Tap
is not applied on the second tap-hold key, but it should be.

In a related bug reported by @NikGovorov, if a tap-hold key is held
followed by a tap of a tap-hold key, then Flow Tap updates its timer on
the release of the held tap-hold key, but it should be ignored.

The problem common to both these bugs is that I incorrectly assumed
`tapping_key` is cleared to noevent once it is released, when actually
`tapping_key` is still maintained for `TAPPING_TERM` ms after release
(for Quick Tap). This commit fixes that. Thanks to @amarz45, @mwpardue,
and @NikGovorov for reporting!

Details:

* Logic for converting the current tap-hold event to a tap is extracted
  to `flow_tap_key_if_within_term()`, which is now invoked also in the
  post-release "interfered with other tap key" case. This fixes the
  distinct taps bug.

* The Flow Tap timer is now updated at the beginning of each call to
  `process_record()`, provided that there is no unsettled tap-hold key
  at that time and that the record is not for a mod or layer switch key.
  By moving this update logic to `process_record()`, it is conceptually
  simpler and more robust.

* Unit tests extended to cover the reported scenarios.

* Fix formatting.

* Revision to fix @NikGovorov's scenario.

The issue is that when another key is pressed while a layer-tap hasn't
been settled yet, the `prev_keycode` remembers the keycode from before
the layer switched. This can then enable Flow Tap for the following key
when it shouldn't, or vice versa.

Thanks to @NikGovorov for reporting!

This commit revises Flow Tap in the following ways:

* The previous key and timer are both updated from `process_record()`.
  This is slightly later in the sequence of processing than before, and
  by this point, a just-settled layer-tap should have taken effect so
  that the keycode from the correct layer is remembered.

* The Flow Tap previous key and timer are updated now also on key
  release events, except for releases of modifiers and held layer
  switches.

* The Flow Tap previous key and timer are now updated together, for
  simplicity. This makes the logic easier to think about.

* A few additional unit tests, including @NikGovorov's scenario as
  "layer_tap_ignored_with_disabled_key_complex."
2025-04-22 09:59:49 +02:00
Joel Challis
b5f8f4d6a2
Align ChibiOS USB_WAIT_FOR_ENUMERATION implementation (#25184) 2025-04-22 14:31:42 +10:00
QMK Bot
0c4124c1c0 Merge remote-tracking branch 'origin/master' into develop 2025-04-22 04:15:10 +00:00
Nick Brassel
9f04023d35
Decrease firmware size for anavi/macropad8. (#25185)
Preparation for bootstrapper.
2025-04-22 14:14:28 +10:00
QMK Bot
43e3831df9 Merge remote-tracking branch 'origin/master' into develop 2025-04-21 23:56:44 +00:00
CJ Pais
ebfa3cdd5c
Add handwired/footy (#25151)
Co-authored-by: jack <jack@pngu.org>
2025-04-21 16:56:10 -07:00
Joel Challis
c7cb7ba976
Implement connection keycode logic (#25176) 2025-04-21 22:27:56 +01:00
Joel Challis
ec324af22e
Add lint warning for empty url (#25182) 2025-04-21 20:07:05 +01:00
Eric Molitor
2c54ff3e63
Update develop branch to Pico SDK 1.5.1 (#25178) 2025-04-21 15:05:22 +01:00
QMK Bot
402b5ba6d7 Merge remote-tracking branch 'origin/master' into develop 2025-04-21 14:03:22 +00:00
Nick Brassel
53f1f3b6d7
Fix for .clangd. (#25180) 2025-04-22 00:02:47 +10:00
QMK Bot
b779c5f567 Merge remote-tracking branch 'origin/master' into develop 2025-04-20 09:42:05 +00:00
Jan Bláha
a1cb822861
DOCS: qmk-hid missing in bootloaders list? (#25177) 2025-04-20 19:41:30 +10:00
Nick Brassel
a4aabea511
Fixup eeconfig lighting reset. (#25166) 2025-04-19 23:10:33 +01:00
QMK Bot
c8763c9fdb Merge remote-tracking branch 'origin/master' into develop 2025-04-19 22:10:27 +00:00
Joel Challis
edf34315af
Fix 'Would you like to clone the submodules?' prompt under msys (#24958) 2025-04-20 08:09:54 +10:00
Joel Challis
ce8b8414d9
Remove bluefruit_le_read_battery_voltage function (#25129) 2025-04-19 22:52:25 +01:00
Less/Rikki
7e68cfc6fa
[keyboard] ymdk/id75/rp2040 (#25157)
Co-authored-by: tao heihei <>
2025-04-19 13:11:08 -07:00
Nick Brassel
5c39722ab9
Allow for disabling EEPROM subsystem entirely. (#25173) 2025-04-19 20:20:00 +01:00
Pascal Getreuer
ea85ace4a9
Ignore the Layer Lock key in Repeat Key and Caps Word. (#25171) 2025-04-19 11:57:00 -07:00
Joel Challis
88453acc6a
Remove duplication of RGBLight defaults (#25169) 2025-04-19 11:56:45 -07:00
QMK Bot
988d81581d Merge remote-tracking branch 'origin/master' into develop 2025-04-18 09:05:59 +00:00
lsh4711
800bc78d26
Fix missing and extra commas in JSON schema (#25057) 2025-04-18 19:05:25 +10:00
Joel Challis
b43fc33be3
Remove duplication of RGB Matrix defaults (#25146)
* Remove duplication of RGB Matrix defaults

* Remove more duplication of defaults

* fix
2025-04-17 20:59:59 -06:00
QMK Bot
d33aa82c51 Merge remote-tracking branch 'origin/master' into develop 2025-04-17 18:51:15 +00:00
JamesWilson1996
576325e2f4
[Keyboard] Add voidhhkb-hotswap (#25007)
* Added files for voidhhkb-hotswap

* Updated keyboard name to resolve build errors

* Implement suggestions from PR. Use 60_hhkb community layout.

* Update keyboards/void/voidhhkb_hotswap/readme.md

Co-authored-by: Ryan <fauxpark@gmail.com>

* Apply suggestions from code review

Co-authored-by: jack <jack@pngu.org>

---------

Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: jack <jack@pngu.org>
2025-04-17 12:50:41 -06:00
QMK Bot
642c169bc3 Merge remote-tracking branch 'origin/master' into develop 2025-04-17 16:24:18 +00:00
ClownFish
7641359240
[Docs] Unify lighting step descriptions (#25167)
unify lighting step descriptions and defaults across docs
2025-04-17 10:23:16 -06:00
QMK Bot
944a206d1f Merge remote-tracking branch 'origin/master' into develop 2025-04-17 02:41:54 +00:00
Nick Brassel
e83b709169
[Keyboard] Kobold r1 (#25161)
* Kobold r1

* Apply suggestions from code review

Co-authored-by: jack <jack@pngu.org>

* `board_init` => `early_hardware_init_post`.

---------

Co-authored-by: jack <jack@pngu.org>
2025-04-16 20:41:20 -06:00
QMK Bot
00f07ec343 Merge remote-tracking branch 'origin/master' into develop 2025-04-14 17:28:26 +00:00
Daniel Reisch
80612c8ec0
Added Keyboard LumPy27 (#24967)
Co-authored-by: jack <jack@pngu.org>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2025-04-14 10:27:52 -07:00
jack
32b9d33bbb
Remove Sofle rgb_default keymap & tidy readme's (#25010) 2025-04-14 09:58:14 -07:00
QMK Bot
9208fb5adb Merge remote-tracking branch 'origin/master' into develop 2025-04-14 16:54:03 +00:00
Andrew Kannan
af141d1a5c
Add Link keyboard (#25058)
Co-authored-by: jack <jack@pngu.org>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2025-04-14 09:52:51 -07:00
Pascal Getreuer
8d8dcb089e
[Core] Flow Tap tap-hold option to disable HRMs during fast typing (#25125)
aka Global Quick Tap, Require Prior Idle
2025-04-14 09:46:24 -07:00
Stefan Kerkmann
a7bf8e64a5
[chore]: move and rename mouse/scroll min/max defines (#25141)
* protocol: move {XY/HV}_REPORT_{MIN,MAX} into report.h

..to allow easier re-use in other code implementations.

* protocol: rename {XY/HV}_REPORT_{MIN/MAX} to MOUSE_REPORT_{XY/HV}_{MIN/MAX}

..to avoid naming collisions.
2025-04-13 18:36:13 +02:00
QMK Bot
d0611b0468 Merge remote-tracking branch 'origin/master' into develop 2025-04-13 16:25:00 +00:00
suikagiken
1388daa0cc
[Keyboard] Add suika83opti (#24991) 2025-04-13 10:20:42 -06:00
Sylvain Huguet
d99eb01ee4
Update shuguet/shu89 (#24780)
* Update keyboard.json

Update mod keys location in RGB layout.

* Update keyboard.json

* Update keyboards/shuguet/shu89/keyboard.json

Co-authored-by: Ryan <fauxpark@gmail.com>

---------

Co-authored-by: Ryan <fauxpark@gmail.com>
2025-04-13 10:19:12 -06:00
Olivier Mehani
e17878ad15
kradoindustries_promenade: add LAYOUT_1x2u (#25090) 2025-04-13 10:14:34 -06:00
Christian C. Berclaz
ba72094b69
New standard layout for Savage65 (65_ansi_blocker_tsangan_split_bs) (#24690)
* Added a default firmware and layout for the WindStudio Wind X R1
keyboard.

* Wind X R1: cleaned-up the folders to make clear that this firmware is
for the release 1 of this keyboard.

* Delete keyboards/windstudio/wind_x/R1 directory

Removing the uppercase R1 folder

* feat(cannonkeys/savage65): Added layout to keyboard.json
- Added the layout LAYOUT_65_ansi_blocker_tsangan_split_bs to the
  community layouts.
2025-04-13 10:11:18 -06:00
QMK Bot
0d7d75d3d5 Merge remote-tracking branch 'origin/master' into develop 2025-04-11 16:26:48 +00:00
Luis Garcia
daf6968947
fix: Fix startup sound for Preonic (#25132) (#25133)
Add `AUDIO_INIT_DELAY ` to config.h to resolve
2025-04-11 17:26:13 +01:00
Joel Challis
e27dd0f26f
Exclude external userspace from lint checking (#24680) 2025-04-11 22:19:02 +10:00
QMK Bot
6624671a60 Merge remote-tracking branch 'origin/master' into develop 2025-04-11 05:26:44 +00:00
Luis Garcia
f549b30760
chore: Allow disabling underglow on Work Louder devices (#25123) (#25120)
* Allow disabling Underglow on Work Louder devices

Allows disabling Underglow on Work Louder devices by using `RGBLIGHT_ENABLE = no` on rules.mk

* Update keyboards/work_louder/rgb_functions.c

Suggested by @zvecr on review.

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

---------

Co-authored-by: Joel Challis <git@zvecr.com>
2025-04-10 23:26:11 -06:00
Nick Brassel
6b8670fe8f
Cater for use of __errno_r() in ChibiOS syscalls.c with newer picolibc revisions (#25121) 2025-04-10 01:43:25 +01:00
QMK Bot
dc26e99dd5 Merge remote-tracking branch 'origin/master' into develop 2025-04-09 14:29:06 +00:00
Nick Brassel
a0f40d9410
Include math.h where necessary. (#25122) 2025-04-09 15:28:30 +01:00
QMK Bot
4dc846f21c Merge remote-tracking branch 'origin/master' into develop 2025-04-09 00:15:49 +00:00
Nick Brassel
575abc48a3
More Windows->Unix style path fixes. (#25119) 2025-04-09 10:15:14 +10:00
QMK Bot
4643681888 Merge remote-tracking branch 'origin/master' into develop 2025-04-08 22:13:51 +00:00
Andrew Kannan
0ec96ddd52
Add Vida to QMK (#24225)
Co-authored-by: jack <jack@pngu.org>
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
2025-04-09 08:13:16 +10:00
QMK Bot
35019fe136 Merge remote-tracking branch 'origin/master' into develop 2025-04-08 02:36:21 +00:00
Joel Challis
2645751ce1
Add warning when deprecated 'promicro_rp2040' is used (#25112) 2025-04-08 12:35:43 +10:00
QMK Bot
f35f4ee933 Merge remote-tracking branch 'origin/master' into develop 2025-04-08 02:31:52 +00:00
Joel Challis
ca84b57042
Remove direct docs.qmk.fm links from docs (#25113) 2025-04-08 12:31:17 +10:00
Joel Challis
06610c3da6
Remove CTPC/CONVERT_TO_PROTON_C options (#25111) 2025-04-08 01:55:49 +01:00
QMK Bot
ca635876ce Merge remote-tracking branch 'origin/master' into develop 2025-04-07 17:03:39 +00:00
sudo pacman -Syu
5f222a3e02
Fix coban pad9a wrong layout in keyboard.json (#25100) 2025-04-07 11:03:05 -06:00
QMK Bot
bca0aca8c5 Merge remote-tracking branch 'origin/master' into develop 2025-04-07 06:30:11 +00:00
Ivan Gromov
f94c8fd766
[Keyboard] Add Ortho Slayer (#25099)
* Add Ortho Slayer

* Update keyboards/keyten/ortho_slayer/keymaps/default/keymap.c

Co-authored-by: jack <jack@pngu.org>

* Update keyboards/keyten/ortho_slayer/readme.md

Co-authored-by: jack <jack@pngu.org>

---------

Co-authored-by: jack <jack@pngu.org>
2025-04-07 00:29:37 -06:00
QMK Bot
73ec19f0cb Merge remote-tracking branch 'origin/master' into develop 2025-04-07 04:03:57 +00:00
nonameCCC
a7ac6e4e68
[Keyboard] Add PHDesign PH60/Multi Keyboard PCB (#25086)
* Add PH60/Multi Support

* Add PCB PIcture for README

* Remove MO(_FN2)

* README Typo Fix

* Layout and README Adjustment

* Add README for PHDesign Main Folder

* Keymap Improvement

* Update README.md
2025-04-06 22:03:24 -06:00
QMK Bot
0da4c26d9c Merge remote-tracking branch 'origin/master' into develop 2025-04-06 18:03:03 +00:00
Dam Vu Duy
9e775b8e9d
Add Coban Pad 12A (#25039)
Co-authored-by: jack <jack@pngu.org>
2025-04-06 10:56:19 -07:00
Pham Duc Minh
30c0036db1
Refactor Deemen17 Works DE60 (#25088) 2025-04-06 10:53:13 -07:00
QMK Bot
4d3726050e Merge remote-tracking branch 'origin/master' into develop 2025-04-05 21:22:08 +00:00
Joel Challis
625d62efdf
Fix 'qmk lint -kb' argument handling (#25093) 2025-04-06 07:21:04 +10:00
Ivan Gromov
0f1dcc0592
Add kt60HS-T v2 PCB (#25080)
* Add kt60HS-Tv2

* Update keyboards/keyten/kt60hs_t/readme.md

Co-authored-by: Sergey Vlasov <sigprof@gmail.com>

* Update keyboards/keyten/kt60hs_t/v1/readme.md

Co-authored-by: Sergey Vlasov <sigprof@gmail.com>

* Update keyboards/keyten/kt60hs_t/v2/keyboard.json

Co-authored-by: Sergey Vlasov <sigprof@gmail.com>

* Update keyboards/keyten/kt60hs_t/v2/readme.md

Co-authored-by: Sergey Vlasov <sigprof@gmail.com>

* Update keyboards/keyten/kt60hs_t/info.json

Co-authored-by: Sergey Vlasov <sigprof@gmail.com>

* Change of structure

* Moving the keyboard

* Update data/mappings/keyboard_aliases.hjson

Co-authored-by: Sergey Vlasov <sigprof@gmail.com>

* Update keyboards/keyten/kt60hs_t/v1/keyboard.json

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

* Update keyboards/keyten/kt60hs_t/v2/keyboard.json

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

---------

Co-authored-by: Sergey Vlasov <sigprof@gmail.com>
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
2025-04-03 12:51:25 -06:00
Pascal Getreuer
da166d4d8b
Add "license" field to Community Module JSON schema. (#25085)
Add "license" field to community module schema.
2025-04-01 16:06:42 +11:00
QMK Bot
3cd2924985 Merge remote-tracking branch 'origin/master' into develop 2025-03-30 00:18:16 +00:00
henrikosorensen
bc42a7ea89
At101ish (#25072)
* Dell AT101 replacement pcb support

* Update keyboards/at101ish/readme.md

Co-Authored-By: fauxpark <fauxpark@gmail.com>

* remove empty src clause in makefile

* feature: Update at101ish to qmk v0.28

* feature: Add osdetecting keymap variant.

* refactor: Move at101ish keyboard to handwired folder.

* fix: Adjust at101ish readme-

* fix: review changes.

* chore: Remove unneeded feature.

---------

Co-authored-by: fauxpark <fauxpark@gmail.com>
2025-03-29 18:17:38 -06:00
QMK Bot
7adb4dc6fb Merge remote-tracking branch 'origin/master' into develop 2025-03-29 13:20:13 +00:00
Nick Brassel
49d13595f6
Fix lockups on AVR with qmk/hello_world module (#25074)
Fix lockups on AVR.
2025-03-30 00:19:38 +11:00
QMK Bot
a8fb9e1462 Merge remote-tracking branch 'origin/master' into develop 2025-03-29 02:48:02 +00:00
フィルターペーパー
d0cfb938ef
Module documentation typo correction (#25073) 2025-03-28 20:47:26 -06:00
QMK Bot
0682cf9242 Merge remote-tracking branch 'origin/master' into develop 2025-03-28 13:38:59 +00:00
Ben Green
94a9099c38
Update onekey example for nucleo f446re (#25067)
* use accessible pins for nucleo f446re onekey example

* remove pin collision with matrix in keyboard.json

* use accessible pins for LED

* remove pin collision with matrix

* Update readme.md to reflect pin changes
2025-03-29 00:38:24 +11:00
QMK Bot
cbe48b67df Merge remote-tracking branch 'origin/master' into develop 2025-03-28 10:04:33 +00:00
lsh4711
5a6595357d
Fix path typo related RP2040 (#25069)
Fix path typo
2025-03-28 21:03:59 +11:00
QMK Bot
d61798169d Merge remote-tracking branch 'origin/master' into develop 2025-03-28 09:19:41 +00:00
Geoffrey Frogeye
25fb4a498a
Allow AnnePro2 to reboot (#24886)
Without this, the QK_REBOOT key did nothing.
2025-03-28 20:19:07 +11:00
QMK Bot
b9e4d22765 Merge remote-tracking branch 'origin/master' into develop 2025-03-28 08:56:42 +00:00
dependabot[bot]
6f3b494a4d
Bump vite from 5.4.12 to 5.4.15 in /builddefs/docsgen (#25065)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.4.12 to 5.4.15.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v5.4.15/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.4.15/packages/vite)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-28 08:56:08 +00:00
QMK Bot
bc110b1533 Merge remote-tracking branch 'origin/master' into develop 2025-03-28 08:28:10 +00:00
Hyphen-ated
d4120b1def
Add "Large Lad" keyboard (#24727)
Co-authored-by: jack <jack@pngu.org>
2025-03-28 01:27:54 -07:00
Sắn
ce9713c47d
Add support for Starry FRL (#24626)
Co-authored-by: jack <jack@pngu.org>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2025-03-28 01:27:36 -07:00
QMK Bot
183b093698 Merge remote-tracking branch 'origin/master' into develop 2025-03-28 06:26:12 +00:00
Erik Peyronson
64fe4aff31
Add handwired/erikpeyronson/erkbd (#25030)
Co-authored-by: Erik Peyronson <erik.peyronson@gmail.com>
Co-authored-by: jack <jack@pngu.org>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2025-03-27 23:25:39 -07:00
yiancar
a02ed6a36d
Update keymap for keycult 1800 (#25070)
Update keymap

Co-authored-by: yiancar <yiancar@gmail.com>
2025-03-27 17:25:46 -06:00
QMK Bot
c130b08f8e Merge remote-tracking branch 'origin/master' into develop 2025-03-26 19:24:00 +00:00
Joel Challis
a3c39bde0e
Create tags when lib/python changes (#25064)
Create tags when lib/python changes
2025-03-27 06:23:28 +11:00
Nick Brassel
1a6a9a7c77
[Modules] Provide access to current path in rules.mk. (#25061) 2025-03-26 10:30:45 +00:00
jack
86c22a15ab
Fix outdated GPIO control function usage (#25060) 2025-03-26 07:51:56 +00:00
QMK Bot
558b074c93 Merge remote-tracking branch 'origin/master' into develop 2025-03-23 05:17:37 +00:00
Grigory Avdyushin
ce2f7d86be
Franky36 handwired keyboard (#25029) 2025-03-22 22:17:05 -07:00
jack
2d37e80ac9
Migrate remaining split.soft_serial_pin to split.serial.pin (#25046)
* Migrate keyboards/bastardkb

* Migrate keyboards/handwired

* Migrate keyboards/helix

* Fix duplicate serial key
2025-03-22 09:58:33 -06:00
QMK Bot
38825610a5 Merge remote-tracking branch 'origin/master' into develop 2025-03-21 18:01:05 +00:00
Dasky
6a947fa534
Add Mechboards Crkbd (#24993) 2025-03-21 18:00:28 +00:00
Nick Brassel
2b00b846dc
Non-volatile memory data repository pattern (#24356)
* First batch of eeconfig conversions.

* Offset and length for datablocks.

* `via`, `dynamic_keymap`.

* Fix filename.

* Commentary.

* wilba leds

* satisfaction75

* satisfaction75

* more keyboard whack-a-mole

* satisfaction75

* omnikeyish

* more whack-a-mole

* `generic_features.mk` to automatically pick up nvm repositories

* thievery

* deferred variable resolve

* whitespace

* convert api to structs/unions

* convert api to structs/unions

* convert api to structs/unions

* fixups

* code-side docs

* code size fix

* rollback

* nvm_xxxxx_erase

* Updated location of eeconfig magic numbers so non-EEPROM nvm drivers can use them too.

* Fixup build.

* Fixup compilation error with encoders.

* Build fixes.

* Add `via_ci` keymap to onekey to exercise VIA bindings (and thus dynamic keymap et.al.), fixup compilation errors based on preprocessor+sizeof.

* Build failure rectification.
2025-03-21 23:38:34 +11:00
Stefan Kerkmann
c9d62ddc78
[Core] use keycode_string in unit tests (#25042)
* tests: use keycode_string feature

With a proper keycode to string implementation in qmk there is no need
to use the unit tests only implementation anymore.

Signed-off-by: Stefan Kerkmann <karlk90@pm.me>

* tests: remove keycode_util feature

This feature is no longer used as we switched the tests to the
keycode string implementation.

Signed-off-by: Stefan Kerkmann <karlk90@pm.me>
2025-03-21 08:47:22 +01:00
QMK Bot
d603fb0913 Merge remote-tracking branch 'origin/master' into develop 2025-03-20 22:34:52 +00:00
plodah
f4dfa218ff
fix swapped encoder pins on ploopy thumb rev1_001 (#25044)
fix swapped pins on ploopy thumb rev1_001 encoder
2025-03-20 15:34:14 -07:00
QMK Bot
b84ab51343 Merge remote-tracking branch 'origin/master' into develop 2025-03-20 22:22:52 +00:00
uv777bk
f6dbb56a10
Update Lighting Mode Animations on Monsgeek M5 (#24981)
Update keyboard.json
2025-03-21 09:22:43 +11:00
Max Rumpf
894b9c458d
Enable mouse key feature and disable leader key on Maxr1998/Phoebe (#24982)
* Enable mousekey support on Maxr1998/Phoebe

* Add GPLv2 license header
2025-03-21 09:22:02 +11:00
QMK Bot
ad20f8287a Merge remote-tracking branch 'origin/master' into develop 2025-03-20 22:21:55 +00:00
Icy Avocado
9f44488bb1
Add directpins 21 keys pico (#24919)
* Add directpins 21 keys pico
- https://learn.adafruit.com/diy-pico-mechanical-keyboard-with-fritzing-circuitpython/21-key-pico-keyboard

* Rename from 21keys to pico_pad

* Add pico_pad readme

* Update bootloader instruction

---------

Co-authored-by: Dai <dai@ovacoda.com>
2025-03-21 09:21:18 +11:00
QMK Bot
0be239b45c Merge remote-tracking branch 'origin/master' into develop 2025-03-20 22:13:25 +00:00
Drashna Jaelre
a958276a76
Add Super Alt-Tab macro example as module (#24970)
* Add Super Alt-Tab macro example as module

* Make module more configurable

* remove unneeded comments

Co-authored-by: jack <jack@pngu.org>

* Update modules/qmk/super_alt_tab/super_alt_tab.c

Co-authored-by: Nick Brassel <nick@tzarc.org>

---------

Co-authored-by: jack <jack@pngu.org>
Co-authored-by: Nick Brassel <nick@tzarc.org>
2025-03-21 09:12:46 +11:00
QMK Bot
54dbde68e1 Merge remote-tracking branch 'origin/master' into develop 2025-03-20 22:01:02 +00:00
Akshay Atam
7fd12c2b98
Ducky one2mini ansi tsangan layout (#24909)
* Added ANSI Tsangan keymap for Ducky One2 Mini

* Updated keyboard.json to support ANSI Tsangan layout for Ducky One2 Mini
2025-03-21 09:00:01 +11:00
QMK Bot
add459f0ac Merge remote-tracking branch 'origin/master' into develop 2025-03-20 21:55:29 +00:00
mikiya418
3a8c76fae5
Develop 5keys (#24555)
* [Keyboard]Add 5keys

* Add files via upload

* Delete 5keys.json

* Add files via upload

* Delete 5keys_default.hex

* Add keyboard 5keys

* Add Copylight

* Update keyboards/5keys/keyboard.json

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/5keys/keyboard.json

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update readme.md

---------

Co-authored-by: Drashna Jaelre <drashna@live.com>
2025-03-21 08:54:54 +11:00
Ramon Imbao
ea238d5a8a
Add the plywrks ply8x hotswap variant. (#23558)
* Add hotswap variant

* Update RGB matrix

* Move files around to target develop

* Revert rules.mk for keyboards/jaykeeb/joker/rules.mk

* Update keyboards/plywrks/ply8x/hotswap/keyboard.json

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Apply suggestions from code review

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

* Add missing community layouts

* Delete keyboards/plywrks/ply8x/rules.mk

* Update missing keys in RGB matrix

* Add missing key in RGB matrix for hotswap ver

* Remove via keymaps

* Add keyboard alias for plywrks/ply8x to plywrks/ply8x/solder

* Fix typo

* Fix another typo

---------

Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
2025-03-21 08:53:27 +11:00
Duncan Sutherland
14ef6c9830
Add Community Layout support to daskeyboard4 (#23884)
add ansi CL
2025-03-21 08:44:59 +11:00
Duncan Sutherland
96882c6a67
Correct json for Fullsize JIS Community Layouts (#23660)
initial commit
2025-03-21 08:44:19 +11:00
QMK Bot
fd1d4d71aa Merge remote-tracking branch 'origin/master' into develop 2025-03-20 21:36:32 +00:00
Anthony Abruzzini
c5232ba699
Fix typo in docs: split_keyboard.md SPLIT_USB_DETECT ("theres's -> "there's") (#24984)
* Fix typo "theres's"

* Update docs/features/split_keyboard.md

Co-authored-by: jack <jack@pngu.org>

---------

Co-authored-by: jack <jack@pngu.org>
2025-03-21 08:35:58 +11:00
QMK Bot
61479c4bf2 Merge remote-tracking branch 'origin/master' into develop 2025-03-20 05:07:29 +00:00
Andrew Kannan
e7c5695a0c
Minor keymap fix on Cerberus HS (#25043) 2025-03-20 05:06:54 +00:00
Joel Challis
f820a186d4
Align to latest CLI dependencies (#24553)
* Align to latest CLI dependencies

* Update docs
2025-03-20 14:04:10 +11:00
Pascal Getreuer
3484f0a0df
[Core] get_keycode_string(): function to format keycodes as strings, for more readable debug logging. (#24787)
* keycode_string(): Format keycodes as strings.

This adds the `keycode_string()` function described in
https://getreuer.info/posts/keyboards/keycode-string/index.html
as a core feature.

* Fix formatting.

* keycode_string review revisions.

* Rename keycode_string() -> get_keycode_string() for consistency with
  existing string utils like get_u8_str().

* Revise custom keycode names with separate _user and _kb tables.

* Correct indent in builddefs/generic_features.mk.

Co-authored-by: Ryan <fauxpark@gmail.com>

* Add KC_NUHS, KC_NUBS, and KC_CAPS.

* Fix linking error with custom names.

* Attempt at simplifying interface.

* Formatting fix.

* Several fixes and revisions.

* Don't use PSTR in KEYCODE_STRING_NAME, since this fails to build on
  AVR. Store custom names in RAM.
* Revise the internal table of common keycode names to use its own
  storage representation, still in PROGMEM, and now more efficiently
  stored flat in 8 bytes per entry.
* Support Swap Hands keycodes and a few other keycodes.

* Revert "Formatting fix."

This reverts commit 2a2771068c.

* Revert "Attempt at simplifying interface."

This reverts commit 8eaf67de76.

* Simplify custom names API by sigprof's suggestion.

* Support more keycodes.

* Add QK_LOCK keycode.
* Add Secure keycodes.
* Add Joystick keycodes.
* Add Programmable Button keycodes.
* Add macro MC_ keycodes.
* For remaining keys in known code ranges, stringify them as
  "QK_<feature>+<number>". For instance, "QK_MIDI+7".

* Bug fix and a few improvements.

* Fix missing right-hand bit when displaying 5-bit mods numerically.
* Support KC_HYPR, KC_MEH, HYPR_T(kc), MEH_T(kc).
* Exclude one-shot keycodes when NO_ACTION_ONESHOT is defined.

---------

Co-authored-by: Ryan <fauxpark@gmail.com>
2025-03-19 20:45:56 +01:00
QMK Bot
40a446a0ec Merge remote-tracking branch 'origin/master' into develop 2025-03-19 16:34:27 +00:00
Wilson Pika Choo
46829663aa
[Keyboard] Change uzu42 usb.vid (#25014)
change generic vendor code
2025-03-19 10:33:53 -06:00
QMK Bot
d6850bab3f Merge remote-tracking branch 'origin/master' into develop 2025-03-19 01:46:02 +00:00
Nick Brassel
386a5019a8
Fixup MSYS + unix-style paths in Community Modules. (#25012)
Fixup MSYS + unix-style paths.
2025-03-19 12:45:28 +11:00
QMK Bot
80b16f688c Merge remote-tracking branch 'origin/master' into develop 2025-03-18 15:49:02 +00:00
Nick Brassel
271efeb8bc
Latest batch of license violations. (#25031) 2025-03-18 15:48:27 +00:00
QMK Bot
40fafad6bc Merge remote-tracking branch 'origin/master' into develop 2025-03-17 19:07:56 +00:00
Nick Brassel
95223aa872
Latest batch of license violations as per #24085. (#25023)
* Latest batch of license violations as per #24085.

* No links.
2025-03-18 06:07:24 +11:00
QMK Bot
e6dcdf2d65 Merge remote-tracking branch 'origin/master' into develop 2025-03-16 08:45:02 +00:00
Joel Challis
c6446aeaf9
Bump tj-actions/changed-files from 45 to 46 (#25020) 2025-03-16 08:44:31 +00:00
QMK Bot
4f257711e0 Merge remote-tracking branch 'origin/master' into develop 2025-03-13 21:05:09 +00:00
André Cruz
65aef7be95
[Keyboard] Add Sofle Choc Prog from keebart (#24974) 2025-03-13 14:04:32 -07:00
QMK Bot
27b115151f Merge remote-tracking branch 'origin/master' into develop 2025-03-13 21:01:31 +00:00
Joel Challis
8ae5d34c0d
keyten/kt60_mu - Add missing header guard (#25011) 2025-03-14 08:00:58 +11:00
QMK Bot
fab39d49e6 Merge remote-tracking branch 'origin/master' into develop 2025-03-13 19:21:29 +00:00
Ivan Gromov
25af20bef4
[Keyboard] Add kt60-MU PCB (#24797)
* Add kt60-MU

* Adding some license headers

* Update keyboards/keyten/kt60_mu/keyboard.json

Co-authored-by: Sergey Vlasov <sigprof@gmail.com>

* Update keyboards/keyten/kt60_mu/keyboard.json

Co-authored-by: Sergey Vlasov <sigprof@gmail.com>

* Update keyboard.json

* Update keyboard.json

* Update keyboards/keyten/kt60_mu/keyboard.json

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

* Update keyboards/keyten/kt60_mu/keyboard.json

Co-authored-by: Sergey Vlasov <sigprof@gmail.com>

---------

Co-authored-by: Sergey Vlasov <sigprof@gmail.com>
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
2025-03-13 13:20:56 -06:00
QMK Bot
3306d78bbd Merge remote-tracking branch 'origin/master' into develop 2025-03-11 09:43:13 +00:00
Dasky
84f9b6dd3e
Add Mechboards Sofle (#25004)
* add sofle

* fix readme
2025-03-11 02:42:33 -07:00
Duncan Sutherland
808c4d4e38
add 75_(ansi|iso) Community Layouts to mechlovin/olly/octagon (#22459)
* expand mechlovin/olly/octagon

* Update info.json

* Rename info.json to keyboard.json

* correct matrix position for key

* remove VIA
2025-03-10 00:48:35 -07:00
Joel Challis
67934546ea
Only configure STM32_HSECLK within board.h (#25001) 2025-03-09 23:41:24 +00:00
Joel Challis
21c1fd5e5b
Require 'x'/'y' properties for LED/RGB Matrix layout (#24997) 2025-03-09 23:40:59 +00:00
Matthijs Muller
30daeaf09f
Add Icebreaker keyboard (#24723)
Co-authored-by: jack <jack@pngu.org>
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2025-03-09 00:51:29 -08:00
QMK Bot
21f7c915df Merge remote-tracking branch 'origin/master' into develop 2025-03-09 07:59:37 +00:00
Christian C. Berclaz
a70288bc4a
New standard layout for Mechlovin' Zed60 (60_tsangan_hhkb) (#24801)
* Added a default firmware and layout for the WindStudio Wind X R1
keyboard.

* Wind X R1: cleaned-up the folders to make clear that this firmware is
for the release 1 of this keyboard.

* Delete keyboards/windstudio/wind_x/R1 directory

Removing the uppercase R1 folder

* feat(mechlovin/zed60): Added the missing standard 60_tsangan_hhkb

* style(mechlovin/zed60): Ran qmk format-json -i on keyboard.json
2025-03-08 23:59:02 -08:00
QMK Bot
7cc18f2b11 Merge remote-tracking branch 'origin/master' into develop 2025-03-06 23:17:53 +00:00
Joel Challis
6e1d3d6d07
Add EOL to non-keyboard files (#24990) 2025-03-06 23:17:51 +00:00
Joel Challis
3c6a691126
keychron/c*_pro_v2: Migrate DIP_SWITCH_PINS (#24978) 2025-03-06 23:17:21 +00:00
QMK Bot
12f9f34fc8 Merge remote-tracking branch 'origin/master' into develop 2025-03-04 23:40:42 +00:00
Joel Challis
0302171fac
Remove invalid RGB Matrix effects (#24977) 2025-03-04 23:40:28 +00:00
Joel Challis
fcfe0e8a95
Fix xelus/valor/rev3 compilation (#24976) 2025-03-04 23:40:08 +00:00
QMK Bot
4d3a9ce13a Merge remote-tracking branch 'origin/master' into develop 2025-03-03 19:23:41 +00:00
dnlnm
f0a5db96c8
Add keyboard Cloak (#24858)
Co-authored-by: jack <jack@pngu.org>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2025-03-03 11:22:37 -08:00
QMK Bot
a0a999976f Merge remote-tracking branch 'origin/master' into develop 2025-03-03 19:22:27 +00:00
takashicompany
c2979e309f
Add new keyboard "Palmslave" (#24814)
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2025-03-03 11:21:47 -08:00
QMK Bot
40f08b47ae Merge remote-tracking branch 'origin/master' into develop 2025-03-03 19:19:08 +00:00
Armand du Parc Locmaria
b2ee1612fa
Fix Lily58 Lite Rev3 reversed columns (#24968) 2025-03-03 11:18:33 -08:00
QMK Bot
a052adb659 Merge remote-tracking branch 'origin/master' into develop 2025-03-03 05:34:50 +00:00
floookay
cc09f17111
add keyboard: zwerg (#24918)
Co-authored-by: jack <jack@pngu.org>
Co-authored-by: Joel Challis <git@zvecr.com>
2025-03-02 21:34:16 -08:00
QMK Bot
3968f5b370 Merge remote-tracking branch 'origin/master' into develop 2025-03-03 03:32:59 +00:00
yiancar
a585bd08a3
Keycult Zero (#24927)
* Initial Commit for Keycult Zero

* Update keyboards/keycult/keycult_zero/keycult_zero.c

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/keycult/keycult_zero/rules.mk

Co-authored-by: Drashna Jaelre <drashna@live.com>

---------

Co-authored-by: yiancar <yiancar@gmail.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2025-03-02 19:32:25 -08:00
QMK Bot
c46cefa898 Merge remote-tracking branch 'origin/master' into develop 2025-03-02 21:33:36 +00:00
leah-splitkb
cb6e1c1af5
Add splitkb.com's Elora (#22557)
* Add splitkb's Elora

* WIP

* Make requested changes

* fix missing call to keyboard init user for elora

* sync vial_qmk with qmk

* Add fixes

* Add encoder quadrature and update files

* Update Readme

* Implement changes

* Remove encoder driver from keyboard.json

* make requested changed

* Implement changes and remove myriad_task as it wasn't actually doing anything.

* Remove myriad.h from matrix.c

* Simplify OLED code debug

* Update RGB keycodes (qmk#24484)

* remove rules.mk (qmk#23281)

* Add matrix state sync

---------

Co-authored-by: NapOli1084 <10320176+NapOli1084@users.noreply.github.com>
Co-authored-by: harveysch <126267034+harvey-splitkb@users.noreply.github.com>
Co-authored-by: harvey <harvey@splitkb.com>
Co-authored-by: VeyPatch <126267034+VeyPatch@users.noreply.github.com>
2025-03-02 14:33:03 -07:00
QMK Bot
d0153368b8 Merge remote-tracking branch 'origin/master' into develop 2025-03-02 21:05:06 +00:00
Xelus22
563eb6fdc9
[Keyboard] Valor Rev3 (#22581)
* initial valor

* update

* fixup and move to info.json

* clean up keymap

* code review from lesshonor

* Update keyboards/xelus/valor/rev3/readme.md

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

* Update readme.md

* Update keyboards/xelus/valor/rev3/rev3.c

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update rev3.c

* Remove custom rev3.c

* remove via keymap

* remove empty rules.mk

* Update keyboards/xelus/valor/rev3/keymaps/default/keymap.c

Co-authored-by: jack <jack@pngu.org>

---------

Co-authored-by: Less/Rikki <86894501+lesshonor@users.noreply.github.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Xelus22 <>
Co-authored-by: jack <jack@pngu.org>
2025-03-02 14:04:33 -07:00
QMK Bot
a076412b2b Merge remote-tracking branch 'origin/master' into develop 2025-03-02 01:00:30 +00:00
adophoxia
6c10839e33
Add Keychron C2 Pro V2 (#24900)
Same changes as for C1 Pro V2
2025-03-01 17:57:15 -07:00
QMK Bot
37c581690c Merge remote-tracking branch 'origin/master' into develop 2025-03-02 00:49:36 +00:00
adophoxia
abea50c26e
Add Keychron C1 Pro V2 (#24899)
* Add C1 Pro V2

* Remove default values for f401xC generic board definition

* Update clang and copyright years

* Add version description
2025-03-01 17:48:59 -07:00
QMK Bot
ac70b81d3f Merge remote-tracking branch 'origin/master' into develop 2025-03-01 22:24:49 +00:00
blindassassin111
acec6904d8
Adding support for the VKR 94 (#24883)
* Adding support for the VKR 94

* Update keyboards/viktus/vkr94/keyboard.json

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

* Delete keyboards/viktus/vkr94/config.h

* Delete keyboards/viktus/vkr94/rules.mk

* Update readme.md

---------

Co-authored-by: Joel Challis <git@zvecr.com>
2025-03-01 15:24:15 -07:00
QMK Bot
107f9a4cb3 Merge remote-tracking branch 'origin/master' into develop 2025-03-01 21:50:43 +00:00
suikagiken
655bf4008a
Add keyboard suika15tone (#24947)
* Add keyboard suika15tone

* Update keyboards/suikagiken/suika15tone/keyboard.json

Co-authored-by: Drashna Jaelre <drashna@live.com>

---------

Co-authored-by: Drashna Jaelre <drashna@live.com>
2025-03-01 14:50:10 -07:00
QMK Bot
2f69eb5f8f Merge remote-tracking branch 'origin/master' into develop 2025-03-01 21:27:15 +00:00
era
516fa90f99
Add Chickpad (#24895)
* Add ChickPad

Add ChickPad

* Add Chickpad

Add Chickpad

* Add PCB image

Add PCB image

* Update keyboards/era/sirind/chickpad/keyboard.json

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

* Update keyboards/era/sirind/chickpad/config.h

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

* Update keyboards/era/sirind/chickpad/keymaps/default/keymap.c

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

* Update keyboards/era/sirind/chickpad/readme.md

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

---------

Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: jack <jack@pngu.org>
2025-03-01 14:25:26 -07:00
QMK Bot
5151abc298 Merge remote-tracking branch 'origin/master' into develop 2025-03-01 21:02:04 +00:00
Eric Banker
0419cd2eed
[Docs] Fix example code in quantum_painter.md (#24897)
https://github.com/qmk/qmk_firmware/issues/24896
2025-03-01 14:01:30 -07:00
QMK Bot
cbfbd173d3 Merge remote-tracking branch 'origin/master' into develop 2025-03-01 21:00:36 +00:00
telybelly
a3a3af1184
Add Janky No.9 (#24910)
* Add Janky No.9

Add Janky No.9

* Update readme.md

* Update keyboard.json

updated as per waffle87 suggestions, and run qmk format-json

* Apply suggestions from code review

updated as per suggestions from zvecr

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

---------

Co-authored-by: Joel Challis <git@zvecr.com>
2025-03-01 13:59:52 -07:00
QMK Bot
8606e78920 Merge remote-tracking branch 'origin/master' into develop 2025-03-01 20:48:45 +00:00
arcmags
88d1f61f10
Add tkl_f13_ansi_tsangan community layout to novelkeys/nk87* (#24730)
* missing LAYOUTS added to novelkeys/nk87*/rules.mk

* Revert "missing LAYOUTS added to novelkeys/nk87*/rules.mk"

This reverts commit 43917bfc36.

* missing community layouts added to novelkeys/nk87*/keyboard.json
2025-03-01 13:48:11 -07:00
QMK Bot
665a12b50e Merge remote-tracking branch 'origin/master' into develop 2025-03-01 20:47:51 +00:00
Danny
e0e96c2a75
Add Handwired Cherry Protype (#24806)
* Add handwired Cherry Protype

* Fix instructions

* Replace tabs with spaces

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/handwired/protype/keyboard.json

Co-authored-by: Drashna Jaelre <drashna@live.com>

---------

Co-authored-by: Drashna Jaelre <drashna@live.com>
2025-03-01 13:47:16 -07:00
QMK Bot
53e61900fe Merge remote-tracking branch 'origin/master' into develop 2025-02-28 19:08:29 +00:00
Dasky
a4d86a63f2
Add Mechboards Lily58 variant and common code. (#24937)
* Add lily58 and common code

* Apply suggestions from code review

Co-authored-by: jack <jack@pngu.org>

* Apply suggestions from code review

Co-authored-by: jack <jack@pngu.org>

---------

Co-authored-by: jack <jack@pngu.org>
2025-02-28 11:07:51 -08:00
Pablo Martínez
e62352e606
[Cleanup] Handling of optional *.mk files (#24952)
replace check + `include` with `-include`
2025-02-28 17:39:43 +00:00
Joel Challis
6ee806f376
Implement battery level interface (#24666)
Co-authored-by: Nick Brassel <nick@tzarc.org>
2025-02-28 16:46:14 +11:00
Nick Brassel
312f42945d
Branch point for 2025q2 breaking change. 2025-02-28 09:26:13 +11:00
Nick Brassel
40b9dada5c
Merge remote-tracking branch 'upstream/master' into develop 2025-02-28 09:24:51 +11:00
Nick Brassel
a63fd7f01c
Merge remote-tracking branch 'upstream/develop' 2025-02-28 09:23:04 +11:00
Nick Brassel
cdb865cf60
Merge point for 2025q1 breaking change. 2025-02-28 09:20:58 +11:00
Joel Challis
c4aaab5fa3
2025q1 develop changelog (#24949)
Co-authored-by: Nick Brassel <nick@tzarc.org>
2025-02-28 09:14:32 +11:00
Nick Brassel
1efc82403b
Community modules (#24848) 2025-02-26 22:25:41 +11:00
Joel Beckmeyer
63b095212b
fix EEPROM driver for STM32L0/1 cat.1 devices (#24928) 2025-02-26 22:25:01 +11:00
Joel Challis
63daf94ee6
Migrate some DEFAULT_FOLDER to keyboard_aliases.hjson (#24938) 2025-02-22 01:48:42 +00:00
ploopyco
50967dbe7e
Updates to Ploopy Classic, Mouse, and Thumb for RP2040 hardware upgrade (#24880)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2025-02-21 00:01:29 -08:00
QMK Bot
2f27b3dc78 Merge remote-tracking branch 'origin/master' into develop 2025-02-20 14:07:54 +00:00
dependabot[bot]
6d0e5728aa
Bump JamesIves/github-pages-deploy-action from 4.7.2 to 4.7.3 (#24933)
Bumps [JamesIves/github-pages-deploy-action](https://github.com/jamesives/github-pages-deploy-action) from 4.7.2 to 4.7.3.
- [Release notes](https://github.com/jamesives/github-pages-deploy-action/releases)
- [Commits](https://github.com/jamesives/github-pages-deploy-action/compare/v4.7.2...v4.7.3)

---
updated-dependencies:
- dependency-name: JamesIves/github-pages-deploy-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-20 14:07:18 +00:00
QMK Bot
c592e10590 Merge remote-tracking branch 'origin/master' into develop 2025-02-18 16:05:34 +00:00
Juno Nguyen
a5c77b5c45
Fix startup sound for Planck (#24893) 2025-02-18 08:04:57 -08:00
Steve Storck
c00b0c5bc9
Created SH1107 driver for quantum painter (#24724)
Co-authored-by: Sergey Vlasov <sigprof@gmail.com>
2025-02-17 08:41:07 +11:00
Joel Challis
164b7331c3
Migrate some DEFAULT_FOLDER to keyboard_aliases.hjson (#24915) 2025-02-17 08:39:29 +11:00
Nizhegorodtsev Vyacheslav Sergeyevich
132efa9076
Update for 'A-JAZZ AKC084' ('A-JAZZ AKP846') (#24868)
Fix indicators, image, bootloader instructions and default keymap for 'A-JAZZ AKC084'
2025-02-16 16:32:50 +00:00
HorrorTroll
d035f02c08
Patch up issue for inverted complementary output on Backlight (#24794)
Change complementary output to active high, when backlight on state is 1
2025-02-16 15:07:17 +00:00
QMK Bot
47e66c8a24 Merge remote-tracking branch 'origin/master' into develop 2025-02-16 10:24:35 +00:00
Nick Brassel
ad2c0f3565
Add more stale exemption labels. (#24922) 2025-02-16 21:24:01 +11:00
Joel Challis
110cc0923b
Reject readme dummy content (#24913) 2025-02-16 10:22:57 +00:00
John
b69bf4b885
Retro Tapping Re-Write; Key Roll Fix (#23641) 2025-02-16 20:50:42 +11:00
DavidSannier
3ab2b3b6e2
Chaining OSL and MO (#23065) 2025-02-16 20:48:40 +11:00
QMK Bot
8ca303168e Merge remote-tracking branch 'origin/master' into develop 2025-02-15 04:56:34 +00:00
wmatex
5e88647879
Fix installation of clang in gentoo install script (#24917)
fix: sys-devel/clang was renamed to llvm-core/clang

see: 1f9f1999cd
2025-02-15 15:56:00 +11:00
Joel Challis
8400fad3d8
Remove readme dummy content (#24912) 2025-02-13 07:03:55 +00:00
Joel Challis
37e234252e
Extend lint to reject 'blank' files (#23994) 2025-02-12 17:16:27 +00:00
QMK Bot
14c7164b01 Merge remote-tracking branch 'origin/master' into develop 2025-02-08 12:18:11 +00:00
Joel Challis
2699e2f7c8
Avoid WindowsPath errors for 'qmk format-text' (#24905) 2025-02-08 12:17:35 +00:00
Drashna Jaelre
7fe168a8ed
[Keyboard] Move Ergodox STM32 to handwired folder (#24903)
* [Keyboard] Move Erogdox STM32 to handwired folder

To minimize confusion with ZSA's ergodox EZ ST (stm32f303) and because this is basically a one-off board

* Don't forget mapping

* Fix readme
2025-02-07 19:10:45 +11:00
Ryan
273d8d6a1a
qmk docs: restore --port and --browser arguments (#24623)
* `qmk docs`: restore `--port` and `--browser` arguments

* Make docs command args always a list
2025-02-01 21:19:30 +11:00
QMK Bot
ff09b921f1 Merge remote-tracking branch 'origin/master' into develop 2025-01-29 19:30:22 +00:00
adophoxia
fa98117a3e
Add Keychron C3 Pro (Red & RGB) (#24874)
* Add Keychron C3 Pro variants

* Update to upstream standards

* Apply suggestions from code review

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

* Reformatted `keyboard.json` for `red`/`rgb` and `c3_pro.c`

* Apply suggestions from code review

Co-authored-by: Ryan <fauxpark@gmail.com>

* Update keyboards/keychron/c3_pro/ansi/red/config.h

Co-authored-by: Daniel <1767914+iamdanielv@users.noreply.github.com>

* Apply suggestions from code review

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Add C Pro V2 variants

* remove boards by accident

---------

Co-authored-by: jack <0x6a73@protonmail.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Daniel <1767914+iamdanielv@users.noreply.github.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2025-01-29 12:28:58 -07:00
QMK Bot
ae01f1b63e Merge remote-tracking branch 'origin/master' into develop 2025-01-29 19:28:06 +00:00
Drashna Jaelre
8bf01dd796
[OS Detection] Improve MacOS detection (#24708) 2025-01-30 06:25:21 +11:00
Joel Challis
0c14fc3a21
Resolve keyboard_aliases when processing keyboard make targets (#24834) 2025-01-30 06:22:05 +11:00
QMK Bot
db68fd88bd Merge remote-tracking branch 'origin/master' into develop 2025-01-29 19:21:51 +00:00
Joel Challis
7073ba3dbb
Migrate some DEFAULT_FOLDER to keyboard_aliases.hjson (#24845) 2025-01-30 06:21:09 +11:00
dependabot[bot]
ea3a968510
Bump vite from 5.2.14 to 5.4.12 in /builddefs/docsgen (#24852) 2025-01-30 06:20:08 +11:00
Nick Brassel
d7fb12164a
Invoke process_record_via after _user/_kb have a chance to handle it. (#24879) 2025-01-30 06:18:07 +11:00
QMK Bot
cfcb8488ed Merge remote-tracking branch 'origin/master' into develop 2025-01-29 19:18:02 +00:00
Pascal Getreuer
9d799aff97
[Bug][Core] Fix for Chordal Hold: stuck mods when mod-taps are pressed in a stuttered sequence. (#24878) 2025-01-30 06:17:54 +11:00
Joel Challis
76b5cef793
Reject keyboard.json next to info.json (#24882) 2025-01-30 06:17:29 +11:00
Joy Lee
08dcc8856f
Add more layout for skiller_sgk50_s4 (#24784)
* Add more layout for skiller_sgk50_s4

* Update skiller_sgk50_s4 default keymap

* update keymap.c

Co-authored-by: Ryan <fauxpark@gmail.com>

* Update keymap.c

Co-authored-by: Ryan <fauxpark@gmail.com>

* Update keyboard.json

* Update keyboard.json

* Update keyboard.json

* Update keyboard.json

---------

Co-authored-by: wb <wb@westberrytech.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2025-01-28 20:09:12 -07:00
muge
8afa3f2f08
Add CXT Studio 12E3 keyboard (#24749)
Co-authored-by: jack <jack@pngu.org>
Co-authored-by: Joel Challis <git@zvecr.com>
2025-01-28 18:18:41 -08:00
Joel Challis
c7904502e5
handwired/xealous - Remove DEFAULT_FOLDER (#24877) 2025-01-28 05:58:21 +00:00
Pascal Getreuer
544ddde113
[Core] Add Chordal Hold, an "opposite hands rule" tap-hold option similar to Achordion, Bilateral Combinations. (#24560)
* Chordal Hold: restrict what chords settle as hold

* Chordal Hold: docs and further improvements

* Fix formatting.

* Doc rewording and minor edit.

* Support Chordal Hold of multiple tap-hold keys.

* Fix formatting.

* Simplification and additional test.

* Fix formatting.

* Tighten tests.

* Add test two_mod_taps_same_hand_hold_til_timeout.

* Revise handing of pairs of tap-hold keys.

* Generate a default chordal_hold_layout.

* Document chordal_hold_handedness().

* Add license notice to new and branched files in PR.

* Add `tapping.chordal_hold` property for info.json.

* Update docs/reference_info_json.md

* Revise "hand" jsonschema.

* Chordal Hold: Improved layout handedness heuristic.

This commit improves the heuristic used in generate-keyboard-c for
inferring key handedness from keyboard.json geometry data.

Heuristic summary:

1. If the layout is symmetric (e.g. most split keyboards), guess the
   handedness based on the sign of (x - layout_x_midpoint).

2. Otherwise, if the layout has a key of >=6u width, it is probably the
   spacebar. Form a dividing line through the spacebar, nearly vertical
   but with a slight angle to follow typical row stagger.

3. Otherwise, assume handedness based on the widest horizontal
   separation.

I have tested this strategy on a couple dozen keyboards and found it to
work reliably.

* Use Optional instead of `| None`.

* Refactor to avoid lambdas.

* Remove trailing comma in chordal_hold_layout.

* Minor docs edits.

* Revise to allow combining multiple same-hand mods.

This commit revises Chordal Hold as described in discussion in
https://github.com/qmk/qmk_firmware/pull/24560#discussion_r1894655238

1. In "RCTL_T(KC_A)↓, RSFT_T(KC_C)↓, RCTL_T(KC_A)↑" before the tapping
   term, RCTL_T(KC_A) is settled as tapped.
2. In "RCTL_T(KC_A)↓, RSFT_T(KC_C)↓, RSFT_T(KC_C)↑", both RCTL_T(KC_A)
   and RSFT_T(KC_C) are settled as tapped.
3. In "RCTL_T(KC_A)↓, RSFT_T(KC_C)↓, KC_U↓" (all keys on the same side),
   both RCTL_T(KC_A) and RSFT_T(KC_C) are settled as tapped.
4. In "RCTL_T(KC_A)↓, RSFT_T(KC_C)↓, LSFT_T(KC_T)↓", with the third key
   on the other side, we allow Permissive Hold or Hold On Other Keypress
   to decide how/when to settle the keys.
5. In "RCTL_T(KC_A)↓, RSFT_T(KC_C)↓" held until the tapping term, the
   keys are settled as held.

1–3 provide same-hand roll protection. 4–5 are for combining multiple
same-hand modifiers.

I've updated the unit tests and have been running it on my keyboard, for
a few hours so far, and all seems good. I really like this scheme. It
allows combining same-side mods, yet it also has roll protection on
streaks. For me, this feels like Achordion, but clearly better streak
handling and improved responsiveness.

* Fix formatting.

* Add a couple tests with LT keys.

* Remove stale use of CHORDAL_HOLD_LAYOUT.

* Fix misspelling lastest -> latest

* Handling tweak for LTs and tests.

* Fix formatting.

* More tests with LT keys.

* Fix formatting.
2025-01-27 12:32:23 +01:00
Ryan
ee63d39058
Unify spi_master headers (#24857)
* Move default config to .c file

* Explicitly define PAL modes for boards with custom init

* Unify spi_master headers
2025-01-26 22:37:37 +01:00
QMK Bot
0747f887d6 Merge remote-tracking branch 'origin/master' into develop 2025-01-26 16:25:49 +00:00
Mick Hohmann
04c2dbd3df
Add keyboard clap_studio/flame60 (#24870)
- Got the source code from the _Clap_Studio_ Discord server
- Migrated the source code to `keyboard.json` format
- Added more layouts for most common cases
- Fixed errors in `keymaps/default/keymap.c`
- Updated the picture with a real picture of the PCB, to avoid confusion
2025-01-26 09:25:15 -07:00
Ryan
ef29a46c87
Unify i2c_master headers (#24846)
* Unify i2c_master headers

* More documentation improvements

* Reorganise PAL mode defaults
2025-01-26 13:48:46 +01:00
Ryan
291d154d7b
Unify UART headers (#24855)
* Remove deprecated defines

* Move default config to .c files

* Unify UART headers

* Clean up docs

* Reorganise PAL mode defaults
2025-01-26 13:46:46 +01:00
QMK Bot
e4f736e685 Merge remote-tracking branch 'origin/master' into develop 2025-01-25 17:07:02 +00:00
Thanh Son Tran
5f711f04f1
[Keyboard] Add Support E8ghtyNeo (#24859)
* Update support S6xty5

* Delete chconf.h

* Update manufacturer, community layout for hhkb

* Update layout

* fix row index

* Update tyson60s

* Update community layout and layout name

* Update remove rgb test mode

* Update capslock led

* Apply suggestions from code review

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

* Remove deprecated s6xty5

* handle init e8ghtyneo firmware

* Update qk boot firmware

* Update firmware e8ghtyNeo

* Update matrix

* update manufacture

* Update copyright

---------

Co-authored-by: Trần Thanh Sơn <son.tt1@teko.vn>
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
2025-01-25 10:06:29 -07:00
QMK Bot
a2353df422 Merge remote-tracking branch 'origin/master' into develop 2025-01-25 15:59:13 +00:00
Xelus22
0a049163f1
[License Violation] add pressplayid (#24869)
add pressplayid lic viol

Co-authored-by: Xelus22 <>
2025-01-25 08:58:38 -07:00
Ryan
a6e931400e
Relocate base WS2812 code (#24850) 2025-01-25 17:38:12 +11:00
QMK Bot
2dd2d4eb81 Merge remote-tracking branch 'origin/master' into develop 2025-01-25 03:12:14 +00:00
Drashna Jaelre
6a9ccae18d
Fix missing wait.h include in Dip Switch Map (#24863) 2025-01-25 03:11:38 +00:00
QMK Bot
d908501478 Merge remote-tracking branch 'origin/master' into develop 2025-01-24 17:34:15 +00:00
Brian Hill
5650894c20
Add Model-B keyboard (#24681)
* Add Model-B keyboard

* PR changes for Model-B

* Update to OLED on Model-B

* added license to pass lint check

* update virtual eeprom for Model-B

* eeconfig_read_kb() update on Model-B

* cleanup changes for Model B

* implementing Model B suggestions
2025-01-24 10:33:38 -07:00
QMK Bot
acb2f34c5c Merge remote-tracking branch 'origin/master' into develop 2025-01-21 00:01:34 +00:00
Rory Chatterton
163b894b97
Updated Licence Violations for Chosfox L75 (#24833)
Co-authored-by: Joel Challis <git@zvecr.com>
2025-01-21 11:01:02 +11:00
Ryan
68130cc8a5
ferris/0_1: update I2C API usage (#24839) 2025-01-20 22:53:46 +00:00
Ryan
a98070f212
[Docs] Correct I2C API reference (#24840) 2025-01-20 22:53:35 +00:00
Joel Challis
207dc01d49
rgbkb/pan - Remove invalid build target (#24844) 2025-01-20 22:47:42 +00:00
Joel Challis
1a30e2b32b
Migrate some DEFAULT_FOLDER to keyboard_aliases.hjson (#24835) 2025-01-20 22:26:25 +00:00
Nick Brassel
7431401116
Fix up CI with DEFAULT_FOLDER. (#24842) 2025-01-20 21:54:41 +00:00
QMK Bot
df8cdde782 Merge remote-tracking branch 'origin/master' into develop 2025-01-20 21:33:27 +00:00
Nick Brassel
a573931fef
License violations updates. (#24831) 2025-01-21 08:32:52 +11:00
Nick Brassel
a6a0dc8039
Consolidate send_string implementations. (#24817) 2025-01-21 08:24:39 +11:00
Ryan
47575d4af1
LED drivers: remove deprecated defines (#24837) 2025-01-20 15:30:19 +00:00
Joel Challis
5c33ff8be4
Remove DEFAULT_FOLDER where keyboard aliases already exists (#24838) 2025-01-20 15:24:14 +00:00
Joel Challis
7a0dbe36f3
Formally deprecate DEFAULT_FOLDER (#24836) 2025-01-20 04:55:01 +00:00
Joel Challis
d30cd87556
Update via2json layout macro searching (#24640) 2025-01-20 03:45:47 +00:00
Ryan
58aea4b479
i2c_master: remove deprecated functions (#24832) 2025-01-19 23:24:28 +00:00
Joel Challis
cedd49c59b
Consolidate timer_elapsed implementations (#24830) 2025-01-19 17:07:11 +00:00
QMK Bot
a62f9a2ffd Merge remote-tracking branch 'origin/master' into develop 2025-01-18 17:53:08 +00:00
Cipulot
3c40e14013
Add Lily (#24813)
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
2025-01-18 09:52:33 -08:00
QMK Bot
ca737d4496 Merge remote-tracking branch 'origin/master' into develop 2025-01-18 06:19:51 +00:00
Ryan
d73c64e591
kikoslab/kl90: fix keymap (#24826) 2025-01-18 17:19:18 +11:00
QMK Bot
92e660833f Merge remote-tracking branch 'origin/master' into develop 2025-01-18 04:02:51 +00:00
Patrick Fan
6b368f4ab2
[Keyboard] Add ic45v2 (#24818)
* adding in ic45 handwired

* fix wrong title

* Apply suggestions from code review

Thank you @waffle87

Co-authored-by: jack <jack@pngu.org>

* Update keyboards/handwired/ic45_v2/keyboard.json

adding whitespace

Co-authored-by: Drashna Jaelre <drashna@live.com>

---------

Co-authored-by: jack <jack@pngu.org>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2025-01-17 21:02:19 -07:00
QMK Bot
1174d16b5a Merge remote-tracking branch 'origin/master' into develop 2025-01-15 19:36:54 +00:00
Haim Gelfenbeyn
7b83bb9d26
Allow running Docker container on MacOS (without in-container USB support) (#24412) 2025-01-16 06:36:20 +11:00
HorrorTroll
7f1c236c75
Bugfix and update for AT32F415 (#24807) 2025-01-13 21:20:36 -08:00
QMK Bot
eb29f8befc Merge remote-tracking branch 'origin/master' into develop 2025-01-13 00:40:15 +00:00
Ryan
26f898c8a5
salane/ncr80alpsskfl: add additional layouts (#24809) 2025-01-13 11:39:40 +11:00
Dasky
62e98327d2
Azoteq - improve I2C behaviour while polling. (#24611)
Co-authored-by: Stefan Kerkmann <karlk90@pm.me>
2025-01-10 17:29:58 -08:00
QMK Bot
15bfe6240c Merge remote-tracking branch 'origin/master' into develop 2025-01-10 21:00:08 +00:00
dependabot[bot]
35c6520560
Bump nanoid from 3.3.7 to 3.3.8 in /builddefs/docsgen (#24713)
Bumps [nanoid](https://github.com/ai/nanoid) from 3.3.7 to 3.3.8.
- [Release notes](https://github.com/ai/nanoid/releases)
- [Changelog](https://github.com/ai/nanoid/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ai/nanoid/compare/3.3.7...3.3.8)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-10 20:59:33 +00:00
Joel Challis
f9430e530b
Ensure qmk flash rejects invalid files for uf2 compatible bootloaders (#24802)
Ensure 'qmk flash' rejects invalid files for uf2 compatible bootloaders
2025-01-10 16:21:07 +00:00
QMK Bot
9332439d5c Merge remote-tracking branch 'origin/master' into develop 2025-01-10 15:04:53 +00:00
Ryan
d90b6e4689
Fix a build warning and tidy up a keymap (#24805) 2025-01-11 02:04:17 +11:00
Nick Brassel
9d2b416fe1
Update ChibiOS-Contrib. (#24803) 2025-01-09 17:53:44 +11:00
QMK Bot
e28799d790 Merge remote-tracking branch 'origin/master' into develop 2025-01-08 16:51:30 +00:00
HorrorTroll
c1565bebce
Patch up issue when compile with APA102 driver (#24800) 2025-01-08 08:51:28 -08:00
Drashna Jaelre
80c90a6952
[Bug] Fix Underglow keycode processing (#24798)
Co-authored-by: Ryan <fauxpark@gmail.com>
2025-01-08 08:50:54 -08:00
QMK Bot
8247f9e114 Merge remote-tracking branch 'origin/master' into develop 2025-01-08 03:13:29 +00:00
jack
95c74b6276
[Docs] Fix wording in Mod Tap documentation (#24796) 2025-01-07 19:13:04 -08:00
Joel Challis
6facb7a079
Convert stray legacy warn/info docs panels (#24799) 2025-01-07 19:12:54 -08:00
QMK Bot
1cc42e8c6e Merge remote-tracking branch 'origin/master' into develop 2025-01-06 21:49:38 +00:00
Nick Brassel
bcee1d2f2e
Remove preprocessor sanity check for STM32L0/L1 now that it relies on types in C. (#24793) 2025-01-07 08:48:28 +11:00
Ryan
a336c04a6a
macOS install: remove bad ARM toolchains (#24637) 2025-01-06 13:19:45 +11:00
Clocks
9339e3c35d
Add watchdog service to RGBKB Sol 3 (#24786)
Due to power demands, the Sol 3 might get initially ignored or something by the attached device.

The solution is the enable watchdog, which would have the keyboard repoll the system to connect again.

I have been using watchdog for awhile, but given that the RGBKB developer never progressed #24279,
 I made this to add in the essential feature.
2025-01-05 21:46:58 +01:00
QMK Bot
5eb60827d5 Merge remote-tracking branch 'origin/master' into develop 2025-01-04 11:09:00 +00:00
Tocho Tochev
c9f9475243
Fix durgod k3x0 docs (#24774) 2025-01-04 11:08:26 +00:00
QMK Bot
a25df1ab7a Merge remote-tracking branch 'origin/master' into develop 2025-01-04 08:42:05 +00:00
takashicompany
9dba024d76
Add EE_HANDS for KLEC-02 (#24777)
Add #define EE_HANDS
2025-01-04 09:41:32 +01:00
QMK Bot
28700b0a23 Merge remote-tracking branch 'origin/master' into develop 2025-01-04 00:24:15 +00:00
Leo Lou
4da260a49a
[Keyboard] Add 3W6HS (#22539)
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
Co-authored-by: jack <0x6a73@protonmail.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Joel Challis <git@zvecr.com>
2025-01-03 16:23:42 -08:00
QMK Bot
e6a08dbc64 Merge remote-tracking branch 'origin/master' into develop 2025-01-03 20:33:57 +00:00
HorrorTroll
cc3823f767
Update some changes for AT32F415 (#24766)
* Fixed SPI can't compiled issue

* Added solenoid support and use 256KB ldscript for Onekey board
2025-01-03 20:33:22 +00:00
QMK Bot
69f4d2a086 Merge remote-tracking branch 'origin/master' into develop 2025-01-03 06:19:17 +00:00
Sylvain Huguet
9a0f4e586a
Add shuguet shu89 (#24758)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: jack <jack@pngu.org>
2025-01-02 22:18:38 -08:00
Juho T.
43800d7934
Add Silakka54 keyboard (#24757)
* Added new keyboard Silakka54

* Update keyboards/silakka54/config.h

Co-authored-by: jack <jack@pngu.org>

* Update keyboards/silakka54/keyboard.json

Co-authored-by: jack <jack@pngu.org>

* Delete keyboards/silakka54/rules.mk

* Update keyboards/silakka54/keyboard.json

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/silakka54/config.h

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update readme.md

Fixed small typo, "inpired" to "inspired"

---------

Co-authored-by: jack <jack@pngu.org>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2025-01-02 13:07:38 +01:00
QMK Bot
69faa4ff1a Merge remote-tracking branch 'origin/master' into develop 2025-01-02 11:54:10 +00:00
Philip
172c349675
[Keyboard] Add handwired/dactyl_manuform/5x8 (#24726)
* add handwired/dactyl_manuform/5x8 config

* add keymap scheme

* Update keymap.c

* Update keyboard.json

* Update keyboard.json

* fix and compile worked configs

* Update readme.md

* Update readme.md

* Update readme.md

* add dynamic macros support

* change key sets on first workday/add right2left layer

* Update keyboard.json

* Update keymap.c

* move license header to top keymap.c

* Update keyboard.json

* I rewrote the layout so that the halves are not stacked.

* I rewrote the layout so that the halves are not stacked (keymap.c)

* change "serial pin" syntactic

change 
"soft_serial_pin": "D0" 
to         
"serial": {
            "pin": "D0"
        }

* fix KC_BSPC and KC_SPC on right keyboard

* Update readme.md

* Update keymap.c

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keymap.c

Co-authored-by: Drashna Jaelre <drashna@live.com>

---------

Co-authored-by: skandiPC <slinkinfs@yandex.ru>
Co-authored-by: iliorik-ph <140731596+iliorik-ph@users.noreply.github.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2025-01-02 12:50:43 +01:00
QMK Bot
b01db68476 Merge remote-tracking branch 'origin/master' into develop 2025-01-02 11:45:59 +00:00
Tocho Tochev
ac140e563c
Fix link to TMK magic commands (#24773) 2025-01-02 12:45:26 +01:00
フィルターペーパー
c23e64f551
Refactor Hue Breathing matrix effect with runner (#24525) 2025-01-02 02:23:41 -08:00
Will Spooner
b603094995
Add leader_add_user callback (#24266) 2025-01-01 23:12:58 -08:00
フィルターペーパー
e016b9b4c5
Update Raindrops effect to respect LED range limits (#24531) 2025-01-01 23:11:28 -08:00
David Hoelscher
c53d02d511
Ensure timer_read() is safe to call from interrupt handlers on ARM (#24529) 2025-01-01 23:11:10 -08:00
フィルターペーパー
cf975e2bfa
Update Starlight matrix effects (#24521) 2025-01-01 23:10:34 -08:00
David Hoelscher
8157b37438
always return audio pin to 0 on ARM (#24503) 2025-01-01 23:10:07 -08:00
QMK Bot
d5a0424987
[CI] Regenerate Files (#24772)
Regenerate Files
2025-01-01 02:22:28 +00:00
QMK Bot
1e6eb5e35c Merge remote-tracking branch 'origin/master' into develop 2025-01-01 02:09:51 +00:00
QMK Bot
57f89e5388
[CI] Regenerate Files (#24770)
Regenerate Files
2025-01-01 13:02:16 +11:00
QMK Bot
4d182ec117 Merge remote-tracking branch 'origin/master' into develop 2025-01-01 01:59:15 +00:00
Joel Challis
53680fa6da
Fix g_led_config parse warning (#24769) 2025-01-01 01:58:41 +00:00
QMK Bot
08c1c045f9 Merge remote-tracking branch 'origin/master' into develop 2024-12-31 12:36:59 +00:00
Joel Challis
fe2200f73a
Remove invalid "effect_max" animation from keyboards (#24767) 2024-12-31 12:36:24 +00:00
QMK Bot
efcd6187d1 Merge remote-tracking branch 'origin/master' into develop 2024-12-30 21:45:28 +00:00
chillKB
fd0a552fc1
[Keyboard] Ghoul TKL (#24762)
Co-authored-by: jack <jack@pngu.org>
2024-12-30 13:44:51 -08:00
QMK Bot
92534d8e3d Merge remote-tracking branch 'origin/master' into develop 2024-12-27 19:43:49 +00:00
Joel Challis
f549948bbd
Skip parsing g_led_config when matrix_size is missing (#24739) 2024-12-28 06:42:54 +11:00
QMK Bot
4d3d8887e7 Merge remote-tracking branch 'origin/master' into develop 2024-12-27 19:25:25 +00:00
Nick Brassel
5593e73ba7
[bug] Djinn theme fix. (#24754)
Theme fix.
2024-12-28 06:24:53 +11:00
muge
93de533580
Move cxt_studio keyboard to own folder (#24748) 2024-12-26 08:58:26 +00:00
QMK Bot
fc4d9c63fb Merge remote-tracking branch 'origin/master' into develop 2024-12-25 02:58:06 +00:00
Drashna Jaelre
58323017ff
Add ArteryTek AT32 dfu to udev rules (#24747) 2024-12-25 02:57:30 +00:00
QMK Bot
8037c7332c Merge remote-tracking branch 'origin/master' into develop 2024-12-24 18:26:40 +00:00
Joel Challis
a822545da0
Set custom effect defines for LED Matrix (#24745) 2024-12-24 10:26:08 -08:00
QMK Bot
1741901281 Merge remote-tracking branch 'origin/master' into develop 2024-12-24 18:06:18 +00:00
James Gzowski
40c93bcdc6
[Keyboard] Add Somei70 (#24444)
* Somei70 addition

* Changes made, added VIA keymap, cleaned formatting

* keymap via

* Create rules.mk

* Add files via upload

* Delete keyboards/somei70/keymaps/via directory

* Fixed RGB and matrix

* Layout corrections and LED positions

* removal of rules.mk

* Moved OLED Settings to somei70.c, formatted C removed TABs, removed _LAYERC

* Forgot to include license header

* Further changes as per suggestions, replaced _user for _kb within somei70.c

* Updated keymap 'changes in Nov24'

* Requested changes
2024-12-24 11:05:43 -07:00
j-hap
38eb643a82
Add keymap-extras for EurKEY layout (#24241)
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Stefan Kerkmann <karlk90@pm.me>
2024-12-23 23:23:51 -08:00
QMK Bot
b78bf7ec43 Merge remote-tracking branch 'origin/master' into develop 2024-12-24 07:23:00 +00:00
chalex
276f84a9a8
add chlx piche (#24252)
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: jack <0x6a73@protonmail.com>
Co-authored-by: chalex <alejandrelee+magbogbro@gmail.com>
2024-12-23 23:22:22 -08:00
QMK Bot
a09f9bbb41 Merge remote-tracking branch 'origin/master' into develop 2024-12-24 07:14:13 +00:00
dztech
0b5e7052f9
add mellow keyboard (#24319)
Co-authored-by: jack <jack@pngu.org>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2024-12-23 23:13:41 -08:00
QMK Bot
c65dd3ba50 Merge remote-tracking branch 'origin/master' into develop 2024-12-24 07:13:28 +00:00
era
18f0d11737
[Keyboard] Add SIRIND Brick65S (#24315)
Co-authored-by: Joel Challis <git@zvecr.com>
2024-12-23 23:12:54 -08:00
QMK Bot
d3585110a3 Merge remote-tracking branch 'origin/master' into develop 2024-12-24 06:27:16 +00:00
Bertrand Le Roy
e6fa351d3b
DecenTKL numpad (#24696) 2024-12-23 22:26:44 -08:00
QMK Bot
1ed3878d15 Merge remote-tracking branch 'origin/master' into develop 2024-12-24 06:26:11 +00:00
Bertrand Le Roy
18cca2062e
DecenTKL main keyboard (#24702) 2024-12-23 22:25:37 -08:00
Less/Rikki
b4ece24c7d
move ymdk/id75 to revision (#24590) 2024-12-22 13:03:03 -08:00
QMK Bot
5c1c4874d7 Merge remote-tracking branch 'origin/master' into develop 2024-12-22 20:23:46 +00:00
J
58807b0288
Clarify keymap location and format in newbs_building_firmware.md (#24663) 2024-12-22 12:23:14 -08:00
Feags
32ea7025fb
[Keyboard] Promenade fixes (#24705)
(Missing keys in matrix, other minor changes to keymap)

Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: jack <0x6a73@protonmail.com>
2024-12-22 11:58:57 -08:00
QMK Bot
5f0ffd2704 Merge remote-tracking branch 'origin/master' into develop 2024-12-22 19:57:59 +00:00
yiancar
9877af9bf8
[Keyboard] Add keycult 1800 (#24729)
Co-authored-by: jack <jack@pngu.org>
Co-authored-by: yiancar <yiancar@gmail.com>
2024-12-22 11:57:25 -08:00
QMK Bot
24e2466de3 Merge remote-tracking branch 'origin/master' into develop 2024-12-22 05:15:34 +00:00
Less/Rikki
f3fe59afe2
fix: mechwild/bb65 coordinate mix-up (#24738) 2024-12-21 22:14:59 -07:00
QMK Bot
2c6a37021c Merge remote-tracking branch 'origin/master' into develop 2024-12-18 18:17:00 +00:00
Andrew Kannan
c988584fc1
Add Reverie to QMK (#24227)
* Add Reverie to QMK

* Add backlight to reverie

* Update reverie readme and copyright notices

* Use format json to update keyboard.json formatting

* Update to have solderable and hotswap variants split

* Update copyright noticeS

* JSON formatting updates

* inherit config.h

* fix broken keymap

* Update reverie hs keyboard.json to be accurate

* Update keyboards/cannonkeys/reverie/hotswap/keyboard.json

Co-authored-by: jack <jack@pngu.org>

* Remove VIA keymaps

* Update keymap

---------

Co-authored-by: jack <jack@pngu.org>
2024-12-18 11:16:25 -07:00
QMK Bot
10cdcbd057 Merge remote-tracking branch 'origin/master' into develop 2024-12-18 05:02:42 +00:00
Less/Rikki
a7d12e4e8f
[Keyboard] wilba_tech/wt45_h1 (#24717) 2024-12-17 21:02:05 -08:00
boessu
d3c9dff9d2
small refactoring of TIMER_DIFF (#24678)
A small refactoring of the defines TIMER_DIFF_8, TIMER_DIFF_16, TIMER_DIFF_32, TIMER_DIFF_RAW.
Removing obsolete TIMER_DIFF helper.
Discussion: https://github.com/qmk/qmk_firmware/issues/24652
2024-12-16 10:27:42 +01:00
Ryan
0f3993b9a3
default_keyboard.h generation tweaks (#24715) 2024-12-15 19:06:05 +00:00
Stefan Kerkmann
8e6bfbfdc2
[Core] chibios: usb_main: remove OTG sof workaround (#24259)
chibios: usb_main: remove OTG sof workaround

With the update of ChibiOS and ChibiOS-Contrib containing fixes for the
OTGv1 LLD the workaround is not necessarry anymore.

Signed-off-by: Stefan Kerkmann <karlk90@pm.me>
2024-12-15 18:42:43 +01:00
Nick Brassel
be6ff3af2b
Update ChibiOS stable_21.11.x. (#24714) 2024-12-15 23:44:12 +11:00
QMK Bot
cb7608b9e2 Merge remote-tracking branch 'origin/master' into develop 2024-12-15 04:00:50 +00:00
Joel Challis
767dfbbd3f
Resolve cli.log.warn warnings (#24551) 2024-12-15 15:00:18 +11:00
QMK Bot
31631537d5 Merge remote-tracking branch 'origin/master' into develop 2024-12-14 23:16:27 +00:00
Xelus22
296e4539f5
[Keyboard] swagkeys integral (#24712)
swagkeys integral

Co-authored-by: Xelus22 <>
2024-12-14 16:15:52 -07:00
QMK Bot
77fb523fa5 Merge remote-tracking branch 'origin/master' into develop 2024-12-14 17:19:42 +00:00
Xelus22
2d33a20956
[Keyboard] add swagkeys eave (#24711)
* add swagkeys eave

* fix up

* Update keyboards/swagkeys/eave/keyboard.json

Co-authored-by: jack <jack@pngu.org>

* Update keyboards/swagkeys/eave/keymaps/default/keymap.c

Co-authored-by: jack <jack@pngu.org>

---------

Co-authored-by: Xelus22 <>
Co-authored-by: jack <jack@pngu.org>
2024-12-14 10:19:11 -07:00
QMK Bot
ad9efdaf0e Merge remote-tracking branch 'origin/master' into develop 2024-12-13 09:43:19 +00:00
Nick Brassel
597bbcb567
Add licensing violations page. (#24697) 2024-12-13 20:42:47 +11:00
フィルターペーパー
e1351b4f4b
Subscript alef correction (#24707)
Output for U+0656 is AltGr + V
2024-12-12 11:01:50 -07:00
QMK Bot
76ac62c326 Merge remote-tracking branch 'origin/master' into develop 2024-12-12 17:59:41 +00:00
Guido Bartolucci
d589dbb05b
Added VT-40 keyboard (#24706)
* Added VT-40 keyboard

* Remove commented out code. Oops

Co-authored-by: jack <jack@pngu.org>

* Change name of planck_layers to layers.

Co-authored-by: jack <jack@pngu.org>

* Update keyboards/vt40/keymaps/default/keymap.c

Co-authored-by: jack <jack@pngu.org>

* Removed unused features that I stole from the contra config

* Removed unused features that I stole from the contra config

* fixed lower/raise keys

* make adjust layer accessible

* Added adjust key for real this time

* Update keyboards/vt40/keyboard.json

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

---------

Co-authored-by: jack <jack@pngu.org>
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
2024-12-12 10:59:07 -07:00
QMK Bot
56f4ba366e Merge remote-tracking branch 'origin/master' into develop 2024-12-11 20:30:14 +00:00
Lostdotfish
d283e27bf8
[Keymap] Update rp2040_orbweaver (#24704)
* Update keymap.c

enhancement - power down indicator LEDs when host sleeps

* Update keyboards/lostdotfish/rp2040_orbweaver/keymaps/default/keymap.c

Co-authored-by: jack <jack@pngu.org>

* Update keyboards/lostdotfish/rp2040_orbweaver/keymaps/default/keymap.c

Co-authored-by: jack <jack@pngu.org>

---------

Co-authored-by: jack <jack@pngu.org>
2024-12-11 13:29:36 -07:00
jack
0228806ae8
Change new-keymap keymap name prompt (#24701) 2024-12-11 12:28:30 -08:00
QMK Bot
1b5ae7aa71 Merge remote-tracking branch 'origin/master' into develop 2024-12-09 06:34:19 +00:00
Cipulot
847257c3c7
Addition of EC TKL X (#24647) 2024-12-08 23:34:07 -07:00
Cipulot
388c3c6d12
Addition of EC65X (#24648) 2024-12-08 23:33:40 -07:00
QMK Bot
c7c91700b8 Merge remote-tracking branch 'origin/master' into develop 2024-12-09 06:32:41 +00:00
Lostdotfish
39958fe854
[Keyboard] Add Orbweaver (#24692)
* Create README.md

* Add files via upload

* Create keymap.c

* Update README.md

* Update keyboards/lostdotfish/rp2040_orbweaver/README.md

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/lostdotfish/rp2040_orbweaver/keyboard.json

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Rename README.md to readme.md

* Update readme.md

* Update keyboards/lostdotfish/rp2040_orbweaver/keyboard.json

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/lostdotfish/rp2040_orbweaver/mcuconf.h

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboard.json

* Update keyboards/lostdotfish/rp2040_orbweaver/config.h

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboard.json

* Update mcuconf.h

* Update rp2040_orbweaver.c

* Delete keyboards/lostdotfish/rp2040_orbweaver/halconf.h

* Update config.h

* Update readme.md

* Update readme.md

* Update readme.md

* Update keyboards/lostdotfish/rp2040_orbweaver/keyboard.json

---------

Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: jack <jack@pngu.org>
2024-12-08 23:31:49 -07:00
QMK Bot
af53c13d53 Merge remote-tracking branch 'origin/master' into develop 2024-12-09 06:22:24 +00:00
nuess0r
3c35952944
Adding ctrl-M replacement controller for IBM Model M (#24375)
* This is a configuration of QMK intended to be used with the [ctrl-M controller](https://github.com/nuess0r/ctrl-M).

* Move USB_MAX_POWER_CONSUMPTION to data driven due to upstream change

* Clean up according to PR checklist

Check the keymaps/nuess0r how you can make better use of your Model M
including Windows, multimedia keys etc.

* Move CAPS_HOLD feature from default build to custom keymap

* More data driven configuration

Move layout definition from ctrl_m.h to info.json
Move has_ghost to info.json -> this makes the config.h file obsolete

* Implement changes suggested by review

* Removing user keymap (nuess0r) to follow current guidelines

The nuess0r keymap which is shipped with the ctrl-M controller is kept here:
https://github.com/nuess0r/qmk_firmware/tree/nuess0r_keymap

* Changed image hosting location to Github

requested in review by drashna

* Changed image hosting location to imgur

* Settings removed from info.json that are disabled by default.

* Change URL as suggested by @dunk2k

Not pointing to the QMK firmware but to the replacement controller electronics
project.

* Migrate build target markers to keyboard.json

* Adding tindie link and implement review suggestions

* Removing via keymap to follow current guidelines

Will be moved to the https://github.com/the-via/qmk_userspace_via repo.

* Add LAYOUT_all to support ANSI and ISO keyboards with the same firmware

Add a LAYOUT_all similar to other keyboards that defines all available keys.
Change the default keymap to use the _all layout so both ANSI and ISO Model M
variants work out of the box.

* Remove unnecessary enum from default keymap

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

---------

Co-authored-by: Less/Rikki <86894501+lesshonor@users.noreply.github.com>
2024-12-08 23:21:49 -07:00
QMK Bot
86f8694580 Merge remote-tracking branch 'origin/master' into develop 2024-12-09 05:44:45 +00:00
Amund Tenstad
379bb77005
fix: KC_MEDIA_PLAY_PAUSE label (#24693) 2024-12-08 22:44:12 -07:00
QMK Bot
a683f10bff Merge remote-tracking branch 'origin/master' into develop 2024-12-09 03:30:58 +00:00
Feags
1c6d3d0cbc
Adding new keyboard Promenade RP24S (#24689)
* adding keymaps for krado industries

* Modified default keymap.c files to be the same as via.

* Changing vendor ID for Krado Industries

* Suggested changes made

Making changes suggested by zvecr.
Removed dynamic_layer indicator, updated copyright year, deleted unused layers in keymaps.

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

* rgbpin for ws2812 changed in info.json

* Added encoder mapping rule file for default keymaps; added Fn layer shortcuts to Promenade layouts

* Added rules.mk with encoder mapping for encoder boards at keymaps level.

* Deleted extra key in LAYOUT

* Update keyboards/kradoindustries/kousa/rules.mk

Move WS2812 Driver from rules.mk to info.json

Co-authored-by: jack <jack@pngu.org>

* Update keyboards/kradoindustries/kousa/info.json

Move WS2812 Driver from rules.mk to info.json

Co-authored-by: jack <jack@pngu.org>

* Update keyboards/kradoindustries/kousa/keymaps/default/keymap.c

Move WS2812 Driver from rules.mk to info.json

Co-authored-by: jack <jack@pngu.org>

* Reverting settings.json

* Encoder map code change [2]>[NUM_DIRECTIONS]

* Adding Promenade RP24S

Adding Promenade RP24S keyboard.json, default keymap, and readme

* Adding layer access to Promenade RP24S

Adding layer access to layers 1 and 2

---------

Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: jack <jack@pngu.org>
2024-12-08 20:30:26 -07:00
Joel Challis
68f67e23aa
skyloong/gk61: Remove overriding of core keycode behaviour (#24655) 2024-12-08 06:35:12 -08:00
QMK Bot
001e190935 Merge remote-tracking branch 'origin/master' into develop 2024-12-08 06:06:35 +00:00
era
782f91a73a
[Keyboard] Add SIRIND Tomak79S (#24684)
* Add Tomak79S

Add Tomak79S

* Update keyboards/era/sirind/tomak79s/keymaps/default/keymap.c

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

---------

Co-authored-by: jack <jack@pngu.org>
2024-12-07 23:06:03 -07:00
QMK Bot
e3000fabb7 Merge remote-tracking branch 'origin/master' into develop 2024-12-06 22:06:14 +00:00
Ryan
a12ff287ee
Organise default community layouts summary (#24500)
* Organise default community layouts summary

* Remove erroneous layout
2024-12-07 09:05:40 +11:00
QMK Bot
98291bc281 Merge remote-tracking branch 'origin/master' into develop 2024-12-06 05:44:06 +00:00
Patrickemm
03937e0c86
Add Macroflow Original macropad firmware (#24538)
* Adding Macroflow Macropad

* Macroflow_Macropad

* Macroflow_Macropad

* Adding My Macropad

* Adding Macroflow Macropad

* Adding Macroflow Macropad

* Adding Macroflow Macropad

* Adding Macroflow Macropad

* Adding Macroflow Macropad

* Added License Headers

* Updated code for merge

* Added License Header

* Added Encoder Map

* Updated Files

* Fixed Matrix

* Update keyboards/macroflow_original/keyboard.json

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/macroflow_original/keymaps/default/keymap.c

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/macroflow_original/keymaps/default/keymap.c

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/macroflow_original/keymaps/default/rules.mk

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Update keyboards/macroflow_original/macroflow_original.c

Co-authored-by: Drashna Jaelre <drashna@live.com>

---------

Co-authored-by: Drashna Jaelre <drashna@live.com>
2024-12-05 22:43:35 -07:00
QMK Bot
55ea94832c Merge remote-tracking branch 'origin/master' into develop 2024-12-05 18:59:00 +00:00
suikagiken
09fdabf37c
Fix keymap.json error of keyboard/suikagiken/suika27melo (#24677) 2024-12-06 05:58:28 +11:00
QMK Bot
f4dc0c33cc Merge remote-tracking branch 'origin/master' into develop 2024-12-05 18:18:59 +00:00
Andrew Kannan
d76f7bfac3
Add Cerberus to QMK (#24226)
* Add Cerberus to QMK

* Update readme to add hotswap callouts

* Update readme formatting

* Use format json to update keyboard.json formatting

* Split Cerberus HS and Solderable into separate folders

* Update JSON formatting

* make solderable keymaps a bit more useful

* Backlight fix on solderable

* Update keyboards/cannonkeys/cerberus/hotswap/keyboard.json

Co-authored-by: jack <jack@pngu.org>

* Remove cerberus VIA keymaps

* Apply suggestions from code review

Change some whitespace

Co-authored-by: Drashna Jaelre <drashna@live.com>

* Add RGB control keycodes to cerberus keymap

* Add backlight controls to default keymap on solderable version

* Update keyboards/cannonkeys/cerberus/readme.md

---------

Co-authored-by: jack <jack@pngu.org>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2024-12-05 11:18:25 -07:00
QMK Bot
daf4746da7 Merge remote-tracking branch 'origin/master' into develop 2024-12-04 17:19:20 +00:00
Vino Rodrigues
3c324cb5e6
[Keyboard] Add Binepad BNK8 keyboard (#24598)
* Add Binepad BNK8 keyboard

* Moved keymap.c to keymap.json

* Fix product page URL

* RGB_ -> RM_ keycodes after this round of breaking changes

Co-authored-by: Ryan <fauxpark@gmail.com>

---------

Co-authored-by: Ryan <fauxpark@gmail.com>
2024-12-04 10:10:11 -07:00
QMK Bot
e64adcef7e Merge remote-tracking branch 'origin/master' into develop 2024-12-04 17:08:07 +00:00
kbd0
d01303c060
[Keyboard] add kbd0 Curve0 60 ANSI (#24609)
* add kbd0/curve0/60_ansi keyboard

* Apply suggestions from code review

Co-authored-by: jack <jack@pngu.org>

* Apply suggestions from code review

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

---------

Co-authored-by: unknown <code-monke>
Co-authored-by: jack <jack@pngu.org>
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
2024-12-04 10:07:26 -07:00
QMK Bot
6992401770 Merge remote-tracking branch 'origin/master' into develop 2024-12-04 16:58:38 +00:00
Cipulot
5dc92edf11
Addition of EC1-AT (#24645) 2024-12-04 09:57:16 -07:00
QMK Bot
3d3f14044a Merge remote-tracking branch 'origin/master' into develop 2024-12-04 16:55:49 +00:00
Cipulot
8094a1d182
Addition of EC Constellation (#24644)
* Addition of EC Constellation

* Fix layout macro name
2024-12-04 09:55:08 -07:00
QMK Bot
094933f002 Merge remote-tracking branch 'origin/master' into develop 2024-12-04 16:52:23 +00:00
Marco Pelegrini
88d4462e52
[Keyboard] Add Marcopad (#24636)
* Marcopad debut

* Applying core review suggestions

* Optional layout with backlit

* Line feeds and replacing dev board configs

* Function to toggle backlight

* Move to RGB Matrix

* Fixing capitalization

* Review comments

---------

Co-authored-by: Marco Pelegrini <mpelegrini@microsoft.com>
2024-12-04 09:51:40 -07:00
QMK Bot
25da6bc359 Merge remote-tracking branch 'origin/master' into develop 2024-12-04 16:37:37 +00:00
Can Baytok
c2bc6e2b3c
[Keyboard] Add cans12erv2 (#24628)
Co-authored-by: jack <jack@pngu.org>
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Can Baytok <baytok@dydocon.com>
2024-12-04 08:37:02 -08:00
QMK Bot
b6192ef8a0 Merge remote-tracking branch 'origin/master' into develop 2024-12-03 23:10:02 +00:00
GustawXYZ
a794ceeb51
[Keyboard] Add dactyl_manuform_pi_pico (#23891)
Adds new keyboard under handwired/dactyl_manuform_pi_pico

It is a dactyl_manuform(5x6) running on Pi Pico micro controller
2024-12-03 16:09:24 -07:00
QMK Bot
176aa00abb Merge remote-tracking branch 'origin/master' into develop 2024-12-03 22:48:59 +00:00
Stephen Edwards
85222dfd8c
Add a keyboard entry for yacobo model m replacement control boards (#23827)
* add the keyboard

* Update keyboards/ibm/model_m/yacobo/keyboard.json

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

* remove dead file

* PR Comments

* standardize comments

* PR Comments

---------

Co-authored-by: Stephen Edwards <stephenedwardsemail@gmail.com>
Co-authored-by: jack <jack@pngu.org>
2024-12-03 15:43:14 -07:00
QMK Bot
fefb4180aa Merge remote-tracking branch 'origin/master' into develop 2024-12-03 22:40:41 +00:00
Vaarai
e7f1388317
Add cornia keyboard (#24442)
* Add cornia keyboard

* Update Fire keymap

* [Cornia/Doc] Host image on imgur

* [Cornia/config] Remove unnecessary defines

* [Cornia] Move I2C stuff to keyboard level

* [Cornia/config] Remove unnecessary defines & move all callbacks to keymap.c

* [Cornia] Use tri-layer in default keymap

* [Cornia/makefiles] remove license headers & root makefile

* [Cornia] Put common configuration to top keyboard level

* [Cornia] Remove unecessary custom keycodes

* [Cornia] Fix readme

* [Cornia] Fix RGB keycodes

* [Cornia] Fix config files

* [Cornia] Fix readme

* [Cornia] Fix mcuconf.h license
2024-12-03 15:40:07 -07:00
QMK Bot
0196298b10 Merge remote-tracking branch 'origin/master' into develop 2024-12-03 19:31:52 +00:00
dependabot[bot]
f0eb2460d9
Bump JamesIves/github-pages-deploy-action from 4.7.1 to 4.7.2 (#24672)
Bumps [JamesIves/github-pages-deploy-action](https://github.com/jamesives/github-pages-deploy-action) from 4.7.1 to 4.7.2.
- [Release notes](https://github.com/jamesives/github-pages-deploy-action/releases)
- [Commits](https://github.com/jamesives/github-pages-deploy-action/compare/v4.7.1...v4.7.2)

---
updated-dependencies:
- dependency-name: JamesIves/github-pages-deploy-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-03 19:31:16 +00:00
QMK Bot
d44fe48a55 Merge remote-tracking branch 'origin/master' into develop 2024-12-03 18:36:17 +00:00
russell-myers1
93765bb0ef
Update hardware_keyboard_guidelines.md to Fix Typos (#24671)
Corrected a typo in the phrase "iOS device need lessthan 100" to "iOS devices need less than 100."
This was to improve clarity and professionalism of the doc.
2024-12-03 11:35:39 -07:00
QMK Bot
6f2c032459 Merge remote-tracking branch 'origin/master' into develop 2024-12-03 07:47:37 +00:00
gtips
c5eeac9686
[Keyboard] Add keyboard reviung46 (#24245)
* add keyboard reviung46

* modified keyboards/reviung/reviung46/readme.md

* modified keyboards/reviung/reviung46/keyboard.json

* modified keyboards/reviung/reviung46/readme.md

* fix keyboards/reviung/reviung46/keyboard.json

* fix keyboards/reviung/reviung46/keymaps/default/keymap.c
fix keyboards/reviung/reviung46/keymaps/via/keymap.c

* fix keyboards/reviung/reviung46/keymaps/via/keymap.c

* fix keyboards/reviung/reviung46/keyboard.json

* fix keyboards/reviung/reviung46/keyboard.json

* modified reviung/reviung46/readme.md

* fixed  keyboards/reviung/reviung46/keyboard.json

* fixed keyboards/reviung/reviung46/keymaps/default/keymap.c
deleted keyboards/reviung/reviung46/keymaps/via/keymap.c
deleted keyboards/reviung/reviung46/keymaps/via/rules.mk

* fix keyboards/reviung/reviung46/keyboard.json and keyboards/reviung/reviung46/keymaps/default/keymap.c

* Update keyboards/reviung/reviung46/readme.md

---------

Co-authored-by: jack <jack@pngu.org>
2024-12-03 00:46:37 -07:00
QMK Bot
2d5d3ac959 Merge remote-tracking branch 'origin/master' into develop 2024-12-03 07:35:59 +00:00
Sắn
191172aa4e
[Keyboard] Add NCR80 ALPS SKFL/FR (#24625)
* ADD NCR80 ALPS SKFL/FR

* fix

* Update config.h

* Update config.h

* Update keyboards/salane/ncr80alpsskfl/keyboard.json

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

* Update keyboards/salane/ncr80alpsskfl/keymaps/default/keymap.c

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

* Update keyboards/salane/ncr80alpsskfl/keymaps/default/keymap.c

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

* Update keyboards/salane/ncr80alpsskfl/keyboard.json

Co-authored-by: jack <jack@pngu.org>

* Update keyboards/salane/ncr80alpsskfl/readme.md

Co-authored-by: jack <jack@pngu.org>

---------

Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
Co-authored-by: jack <jack@pngu.org>
2024-12-03 00:35:24 -07:00
QMK Bot
7858f84366 Merge remote-tracking branch 'origin/master' into develop 2024-12-02 21:26:44 +00:00
VeyPatch
c8fe565ee6
[Keyboard] Add splitkb.com's Halcyon Kyria rev4 (#24512)
* Add Halcyon Kyria Rev4

* Remove bootmagic and unused features

* Fix encoderindex

* Update readme.md

* Remove rgblight

* Implement requested changes

* Add encoder update user

* Remove rules.mk and add VIK configuration

* Move options to config.h

* Update RGB keycodes (qmk#24484)

* implement changes

---------

Co-authored-by: harvey-splitkb <126267034+harvey-splitkb@users.noreply.github.com>
2024-12-02 14:26:10 -07:00
QMK Bot
384e42cb23 Merge remote-tracking branch 'origin/master' into develop 2024-12-02 17:10:39 +00:00
takashicompany
50966934b2
Add new keyboard "Jourkey" (#24409)
* jourkey

* rotary encoder

* fix keymap

* jourkey

* format json

* Update keyboards/takashicompany/jourkey/readme.md

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

* fix layout

* Update readme.md

---------

Co-authored-by: Joel Challis <git@zvecr.com>
2024-12-02 10:10:01 -07:00
QMK Bot
22849a59d4 Merge remote-tracking branch 'origin/master' into develop 2024-12-02 16:49:47 +00:00
Josh Hinnebusch
09dfbf8efe
[Keyboard] Add h88 gen2 (#24454)
* initial commit

* small updates

* matrix fix

* fix rgb lighting

* updates

* fix rgb pin

* pin fixes

* readme update

* json formatting

* Update keyboards/hineybush/h88_g2/config.h

Co-authored-by: Drashna Jaelre <drashna@live.com>

---------

Co-authored-by: jack <0x6a73@protonmail.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2024-12-02 09:49:11 -07:00
QMK Bot
750a3f1e60 Merge remote-tracking branch 'origin/master' into develop 2024-12-02 16:49:00 +00:00
Thomas Queste
e4e66c61ad
[murcielago] Enable split watchdog (#24463) 2024-12-02 09:48:26 -07:00
QMK Bot
777ae4fb8d Merge remote-tracking branch 'origin/master' into develop 2024-12-02 15:37:41 +00:00
Thanh Son Tran
28320f0cb5
[Keyboard] Add support S6xty5Neo Rev.2 (#24631)
* Update support S6xty5

* Delete chconf.h

* Update manufacturer, community layout for hhkb

* Update layout

* fix row index

* Update tyson60s

* Update community layout and layout name

* Update remove rgb test mode

* Update capslock led

* Apply suggestions from code review

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

* Add support for S6xty5Neo Rev.2

* Remove deprecated s6xty5

* Update layout

* Apply suggestions from code review

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

* Move mcuconf and config to outer folder

---------

Co-authored-by: Trần Thanh Sơn <son.tt1@teko.vn>
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
2024-12-02 08:37:02 -07:00
QMK Bot
97870b27a1 Merge remote-tracking branch 'origin/master' into develop 2024-12-02 15:33:45 +00:00
suikagiken
cd286e4b9d
[Keyboard] Add suika27melo (#24616)
* add keyboard suika27melo

* Update keyboards/suikagiken/suika27melo/keyboard.json

Co-authored-by: jack <jack@pngu.org>

* Update keyboards/suikagiken/suika27melo/keyboard.json

Co-authored-by: jack <jack@pngu.org>

* Update keyboards/suikagiken/suika27melo/readme.md

Co-authored-by: jack <jack@pngu.org>

* Update keyboards/suikagiken/suika27melo/readme.md

Co-authored-by: jack <jack@pngu.org>

* change to imgur link

---------

Co-authored-by: jack <jack@pngu.org>
2024-12-02 08:30:02 -07:00
QMK Bot
0c176f6123 Merge remote-tracking branch 'origin/master' into develop 2024-12-02 15:24:25 +00:00
Thanh Son Tran
0ad3ffdfbc
[Keyboard] Add support E8ghty (#24632)
* Update support S6xty5

* Delete chconf.h

* Update manufacturer, community layout for hhkb

* Update layout

* fix row index

* Update tyson60s

* Update community layout and layout name

* Update remove rgb test mode

* Update capslock led

* Apply suggestions from code review

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

* Remove deprecated s6xty5

* Update support for E8ghty

* remove rgb test mode

* Update community layout

* Update fix pipeline build ci

* Apply suggestions from code review

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

---------

Co-authored-by: Trần Thanh Sơn <son.tt1@teko.vn>
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
2024-12-02 08:20:48 -07:00
QMK Bot
b3a1dc0658 Merge remote-tracking branch 'origin/master' into develop 2024-12-02 15:07:28 +00:00
Sắn
fa3be8a3fb
sawnsprojects/bunnygirl65: Fix typo in name (#24668) 2024-12-02 15:02:29 +00:00
Nibell
e592a7da00
[Keyboard] Added nibell micropad4x4 (#24662)
* feat: added nibell micropad4x4

* chore: updated readme

* chore: updated keymap

* feat: added layers

* chore: added bootloader doc

* Added layers

* changed RSHIFT and RCTRL

* Update keyboards/nibell/micropad4x4/keyboard.json

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

* Update keyboards/nibell/micropad4x4/readme.md

---------

Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
Co-authored-by: jack <jack@pngu.org>
2024-12-02 08:00:29 -07:00
QMK Bot
2bfc0e07d1 Merge remote-tracking branch 'origin/master' into develop 2024-12-02 14:58:10 +00:00
Stephen Onnen
be7786bfc6
Addition of Hotdog Pad (#24650)
* Add Hotdog Pad

* remove encoder_map feature

* Add rules.mk

* move rules.mk into keymap

* Update keyboards/onnenon/hotdog_pad/keyboard.json

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

* Update keyboards/onnenon/hotdog_pad/keyboard.json

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

* Update keyboards/onnenon/hotdog_pad/keymaps/default/keymap.c

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

* Update keyboards/onnenon/hotdog_pad/keymaps/default/keymap.c

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

* add hotdog_pad.c

* fix reversed encoder pins

* Update keyboards/onnenon/hotdog_pad/hotdog_pad.c

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

---------

Co-authored-by: Joel Challis <git@zvecr.com>
2024-12-02 07:57:34 -07:00
Drashna Jaelre
b599c78548
Fix Quantum Painter compiliation issues with heavy optimization (#24667) 2024-12-02 16:58:18 +11:00
QMK Bot
fa96609e0b Merge remote-tracking branch 'origin/master' into develop 2024-12-02 04:12:12 +00:00
Christian C. Berclaz
39c40f55cb
Add Xlant XL keyboard (#24608)
Co-authored-by: jack <jack@pngu.org>
2024-12-01 20:05:29 -08:00
QMK Bot
1d5de078c7 Merge remote-tracking branch 'origin/master' into develop 2024-12-02 04:01:40 +00:00
Less/Rikki
b022d3bc6b
[Keyboard] Add fistbnmp (#24595) 2024-12-01 20:01:05 -08:00
QMK Bot
aa9e48dae2 Merge remote-tracking branch 'origin/master' into develop 2024-12-01 19:25:16 +00:00
Joel Challis
5eb53be671
Avoid loading keymap rules.mk twice (#24665) 2024-12-02 06:24:44 +11:00
Nick Brassel
df9bf9efa1
Update ChibiOS to latest stable branch. (#24651) 2024-11-30 22:51:41 +11:00
QMK Bot
5b827356bb Merge remote-tracking branch 'origin/master' into develop 2024-11-30 05:31:16 +00:00
Ryan
1da8aa8259
Improve "feature/encoder config both specified" warnings (#24641) 2024-11-30 05:30:45 +00:00
QMK Bot
0ae7639f6c Merge remote-tracking branch 'origin/master' into develop 2024-11-30 05:30:38 +00:00
Ryan
97547ac762
Update leftover RGB keycodes (#24653) 2024-11-30 05:30:05 +00:00
Joel Challis
50491c44ca
moky/moky88: Remove use of deprecated defines (#24656) 2024-11-29 13:51:16 -08:00
QMK Bot
653d1a5e37 Merge remote-tracking branch 'origin/master' into develop 2024-11-28 19:46:32 +00:00
dependabot[bot]
66d0d53dc1
Bump JamesIves/github-pages-deploy-action from 4.6.9 to 4.7.1 (#24654)
Bumps [JamesIves/github-pages-deploy-action](https://github.com/jamesives/github-pages-deploy-action) from 4.6.9 to 4.7.1.
- [Release notes](https://github.com/jamesives/github-pages-deploy-action/releases)
- [Commits](https://github.com/jamesives/github-pages-deploy-action/compare/v4.6.9...v4.7.1)

---
updated-dependencies:
- dependency-name: JamesIves/github-pages-deploy-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-28 19:45:59 +00:00
Nick Brassel
b0ac5bcf91
Branch point for 2025q1 breaking change 2024-11-27 21:31:31 +11:00
Nick Brassel
f8ba76a771
Merge branch 'master' into develop 2024-11-27 21:30:59 +11:00
4689 changed files with 81805 additions and 19858 deletions

33
.clangd
View File

@ -1,4 +1,33 @@
CompileFlags: CompileFlags:
Add: [-Wno-unknown-attributes, -Wno-maybe-uninitialized, -Wno-unknown-warning-option] Add:
Remove: [-W*, -mmcu=*, -mcpu=*, -mfpu=*, -mfloat-abi=*, -mno-unaligned-access, -mno-thumb-interwork, -mcall-prologues] [
-Wno-unknown-attributes,
-Wno-maybe-uninitialized,
-Wno-unknown-warning-option,
-Wno-pointer-to-int-cast,
-Wno-int-to-void-pointer-cast,
-DPROGMEM=,
]
Remove:
[
-W*,
-mmcu=*,
-mcpu=*,
-mfpu=*,
-mfloat-abi=*,
-mno-unaligned-access,
-mno-thumb-interwork,
-mcall-prologues,
-D__has_include*,
-mlra,
]
Compiler: clang Compiler: clang
Diagnostics:
UnusedIncludes: None
Suppress:
[
asm_invalid_output_constraint,
asm_invalid_input_constraint,
invalid_asm_value_for_constraint,
anyx86_interrupt_attribute,
]

4
.github/labeler.yml vendored
View File

@ -54,3 +54,7 @@ dd:
- data/constants/** - data/constants/**
- data/mappings/** - data/mappings/**
- data/schemas/** - data/schemas/**
community_module:
- changed-files:
- any-glob-to-any-file:
- modules/**

View File

@ -15,6 +15,7 @@ on:
- quantum/**/* - quantum/**/*
- tests/**/* - tests/**/*
- tmk_core/**/* - tmk_core/**/*
- lib/python/**/*
- util/**/* - util/**/*
- Makefile - Makefile
- '*.mk' - '*.mk'

View File

@ -56,7 +56,7 @@ jobs:
- name: Deploy - name: Deploy
if: ${{ github.event_name == 'push' && github.repository == 'qmk/qmk_firmware' }} if: ${{ github.event_name == 'push' && github.repository == 'qmk/qmk_firmware' }}
uses: JamesIves/github-pages-deploy-action@v4.6.9 uses: JamesIves/github-pages-deploy-action@v4.7.3
with: with:
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
branch: gh-pages branch: gh-pages

View File

@ -10,6 +10,7 @@ on:
- 'lib/arm_atsam/**' - 'lib/arm_atsam/**'
- 'lib/lib8tion/**' - 'lib/lib8tion/**'
- 'lib/python/**' - 'lib/python/**'
- 'modules/**'
- 'platforms/**' - 'platforms/**'
- 'quantum/**' - 'quantum/**'
- 'tests/**' - 'tests/**'
@ -35,7 +36,7 @@ jobs:
- name: Get changed files - name: Get changed files
id: file_changes id: file_changes
uses: tj-actions/changed-files@v45 uses: tj-actions/changed-files@v46
with: with:
use_rest_api: true use_rest_api: true

View File

@ -39,7 +39,7 @@ jobs:
qmk format-text -a qmk format-text -a
git diff git diff
- uses: rlespinasse/github-slug-action@v3.x - uses: rlespinasse/github-slug-action@v5
- name: Become QMK Bot - name: Become QMK Bot
run: | run: |

View File

@ -27,7 +27,7 @@ jobs:
- name: Get changed files - name: Get changed files
id: file_changes id: file_changes
uses: tj-actions/changed-files@v45 uses: tj-actions/changed-files@v46
with: with:
use_rest_api: true use_rest_api: true

View File

@ -26,7 +26,7 @@ jobs:
util/regen.sh util/regen.sh
git diff git diff
- uses: rlespinasse/github-slug-action@v3.x - uses: rlespinasse/github-slug-action@v5
- name: Become QMK Bot - name: Become QMK Bot
run: | run: |

View File

@ -45,7 +45,7 @@ jobs:
stale-pr-label: stale stale-pr-label: stale
days-before-pr-stale: 45 days-before-pr-stale: 45
days-before-pr-close: 30 days-before-pr-close: 30
exempt-pr-labels: bug,awaiting review,breaking_change,in progress,on hold exempt-pr-labels: bug,awaiting review,breaking_change,in progress,on hold,needs-core-wireless,crippled-firmware
stale-pr-message: > stale-pr-message: >
Thank you for your contribution! Thank you for your contribution!

1
.gitignore vendored
View File

@ -64,6 +64,7 @@ build/
cmake-build-debug cmake-build-debug
CMakeLists.txt CMakeLists.txt
*.pdf *.pdf
*.zip
# Let these ones be user specific, since we have so many different configurations # Let these ones be user specific, since we have so many different configurations
*.code-workspace *.code-workspace

27
.vscode/settings.json vendored
View File

@ -10,6 +10,13 @@
"**/*.uf2": true "**/*.uf2": true
}, },
"files.associations": { "files.associations": {
// QMK Filetypes
"keyboard.json": "jsonc",
"info.json": "jsonc",
"keymap.json": "jsonc",
"qmk.json": "jsonc",
"qmk_module.json": "jsonc",
// Standard filetypes
"*.h": "c", "*.h": "c",
"*.c": "c", "*.c": "c",
"*.inc": "c", "*.inc": "c",
@ -28,7 +35,23 @@
"[json]": { "[json]": {
"editor.formatOnSave": false "editor.formatOnSave": false
}, },
"clangd.arguments": [ "clangd.arguments": ["--header-insertion=never"],
"--header-insertion=never" "json.schemas": [
{
"fileMatch": ["qmk.json"],
"url": "./data/schemas/user_repo_v1_1.jsonschema"
},
{
"fileMatch": ["qmk_module.json"],
"url": "./data/schemas/community_module.jsonschema"
},
{
"fileMatch": ["keyboard.json", "info.json"],
"url": "./data/schemas/keyboard.jsonschema"
},
{
"fileMatch": ["keymap.json"],
"url": "./data/schemas/keymap.jsonschema"
}
] ]
} }

View File

@ -59,6 +59,7 @@ ifeq ($(ROOT_DIR),)
endif endif
include paths.mk include paths.mk
include $(BUILDDEFS_PATH)/support.mk
TEST_OUTPUT_DIR := $(BUILD_DIR)/test TEST_OUTPUT_DIR := $(BUILD_DIR)/test
ERROR_FILE := $(BUILD_DIR)/error_occurred ERROR_FILE := $(BUILD_DIR)/error_occurred
@ -113,6 +114,29 @@ endef
# Make it easier to call TRY_TO_MATCH_RULE_FROM_LIST # Make it easier to call TRY_TO_MATCH_RULE_FROM_LIST
TRY_TO_MATCH_RULE_FROM_LIST = $(eval $(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER,$1))$(RULE_FOUND) TRY_TO_MATCH_RULE_FROM_LIST = $(eval $(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER,$1))$(RULE_FOUND)
# As TRY_TO_MATCH_RULE_FROM_LIST_HELPER, but with additional
# resolution of DEFAULT_FOLDER and keyboard_aliases.hjson for provided rule
define TRY_TO_MATCH_RULE_FROM_LIST_HELPER_KB
# Split on ":", padding with empty strings to avoid indexing issues
TOKEN1:=$$(shell python3 -c "import sys; print((sys.argv[1].split(':',1)+[''])[0])" $$(RULE))
TOKENr:=$$(shell python3 -c "import sys; print((sys.argv[1].split(':',1)+[''])[1])" $$(RULE))
TOKEN1:=$$(shell $(QMK_BIN) resolve-alias --allow-unknown $$(TOKEN1))
FOUNDx:=$$(shell echo $1 | tr " " "\n" | grep -Fx $$(TOKEN1))
ifneq ($$(FOUNDx),)
RULE := $$(TOKENr)
RULE_FOUND := true
MATCHED_ITEM := $$(TOKEN1)
else
RULE_FOUND := false
MATCHED_ITEM :=
endif
endef
# Make it easier to call TRY_TO_MATCH_RULE_FROM_LIST_KB
TRY_TO_MATCH_RULE_FROM_LIST_KB = $(eval $(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER_KB,$1))$(RULE_FOUND)
define ALL_IN_LIST_LOOP define ALL_IN_LIST_LOOP
OLD_RULE$1 := $$(RULE) OLD_RULE$1 := $$(RULE)
$$(eval $$(call $1,$$(ITEM$1))) $$(eval $$(call $1,$$(ITEM$1)))
@ -138,7 +162,7 @@ define PARSE_RULE
$$(eval $$(call PARSE_TEST)) $$(eval $$(call PARSE_TEST))
# If the rule starts with the name of a known keyboard, then continue # If the rule starts with the name of a known keyboard, then continue
# the parsing from PARSE_KEYBOARD # the parsing from PARSE_KEYBOARD
else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(shell $(QMK_BIN) list-keyboards --no-resolve-defaults)),true) else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST_KB,$$(shell $(QMK_BIN) list-keyboards)),true)
KEYBOARD_RULE=$$(MATCHED_ITEM) KEYBOARD_RULE=$$(MATCHED_ITEM)
$$(eval $$(call PARSE_KEYBOARD,$$(MATCHED_ITEM))) $$(eval $$(call PARSE_KEYBOARD,$$(MATCHED_ITEM)))
else else
@ -170,17 +194,6 @@ define PARSE_KEYBOARD
# include the correct makefile to determine the actual name of it # include the correct makefile to determine the actual name of it
CURRENT_KB := $1 CURRENT_KB := $1
# KEYBOARD_FOLDERS := $$(subst /, , $(CURRENT_KB))
DEFAULT_FOLDER := $$(CURRENT_KB)
# We assume that every rules.mk will contain the full default value
$$(eval include $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/rules.mk)
ifneq ($$(DEFAULT_FOLDER),$$(CURRENT_KB))
$$(eval include $(ROOT_DIR)/keyboards/$$(DEFAULT_FOLDER)/rules.mk)
endif
CURRENT_KB := $$(DEFAULT_FOLDER)
# 5/4/3/2/1 # 5/4/3/2/1
KEYBOARD_FOLDER_PATH_1 := $$(CURRENT_KB) KEYBOARD_FOLDER_PATH_1 := $$(CURRENT_KB)
KEYBOARD_FOLDER_PATH_2 := $$(patsubst %/,%,$$(dir $$(KEYBOARD_FOLDER_PATH_1))) KEYBOARD_FOLDER_PATH_2 := $$(patsubst %/,%,$$(dir $$(KEYBOARD_FOLDER_PATH_1)))

View File

@ -25,8 +25,6 @@ $(TEST_OUTPUT)_SRC := \
tests/test_common/test_driver.cpp \ tests/test_common/test_driver.cpp \
tests/test_common/keyboard_report_util.cpp \ tests/test_common/keyboard_report_util.cpp \
tests/test_common/mouse_report_util.cpp \ tests/test_common/mouse_report_util.cpp \
tests/test_common/keycode_util.cpp \
tests/test_common/keycode_table.cpp \
tests/test_common/test_fixture.cpp \ tests/test_common/test_fixture.cpp \
tests/test_common/test_keymap_key.cpp \ tests/test_common/test_keymap_key.cpp \
tests/test_common/test_logger.cpp \ tests/test_common/test_logger.cpp \

View File

@ -11,6 +11,7 @@ endif
.DEFAULT_GOAL := all .DEFAULT_GOAL := all
include paths.mk include paths.mk
include $(BUILDDEFS_PATH)/support.mk
include $(BUILDDEFS_PATH)/message.mk include $(BUILDDEFS_PATH)/message.mk
# Helper to add defines with a 'QMK_' prefix # Helper to add defines with a 'QMK_' prefix
@ -97,20 +98,44 @@ endif
# Pull in rules.mk files from all our subfolders # Pull in rules.mk files from all our subfolders
ifneq ("$(wildcard $(KEYBOARD_PATH_5)/rules.mk)","") -include $(KEYBOARD_PATH_5)/rules.mk
include $(KEYBOARD_PATH_5)/rules.mk -include $(KEYBOARD_PATH_4)/rules.mk
-include $(KEYBOARD_PATH_3)/rules.mk
-include $(KEYBOARD_PATH_2)/rules.mk
-include $(KEYBOARD_PATH_1)/rules.mk
# Create dependencies on DD keyboard config - structure validated elsewhere
DD_CONFIG_FILES :=
ifneq ("$(wildcard $(KEYBOARD_PATH_1)/info.json)","")
DD_CONFIG_FILES += $(KEYBOARD_PATH_1)/info.json
endif endif
ifneq ("$(wildcard $(KEYBOARD_PATH_4)/rules.mk)","") ifneq ("$(wildcard $(KEYBOARD_PATH_2)/info.json)","")
include $(KEYBOARD_PATH_4)/rules.mk DD_CONFIG_FILES += $(KEYBOARD_PATH_2)/info.json
endif endif
ifneq ("$(wildcard $(KEYBOARD_PATH_3)/rules.mk)","") ifneq ("$(wildcard $(KEYBOARD_PATH_3)/info.json)","")
include $(KEYBOARD_PATH_3)/rules.mk DD_CONFIG_FILES += $(KEYBOARD_PATH_3)/info.json
endif endif
ifneq ("$(wildcard $(KEYBOARD_PATH_2)/rules.mk)","") ifneq ("$(wildcard $(KEYBOARD_PATH_4)/info.json)","")
include $(KEYBOARD_PATH_2)/rules.mk DD_CONFIG_FILES += $(KEYBOARD_PATH_4)/info.json
endif endif
ifneq ("$(wildcard $(KEYBOARD_PATH_1)/rules.mk)","") ifneq ("$(wildcard $(KEYBOARD_PATH_5)/info.json)","")
include $(KEYBOARD_PATH_1)/rules.mk DD_CONFIG_FILES += $(KEYBOARD_PATH_5)/info.json
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_1)/keyboard.json)","")
DD_CONFIG_FILES += $(KEYBOARD_PATH_1)/keyboard.json
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_2)/keyboard.json)","")
DD_CONFIG_FILES += $(KEYBOARD_PATH_2)/keyboard.json
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_3)/keyboard.json)","")
DD_CONFIG_FILES += $(KEYBOARD_PATH_3)/keyboard.json
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_4)/keyboard.json)","")
DD_CONFIG_FILES += $(KEYBOARD_PATH_4)/keyboard.json
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_5)/keyboard.json)","")
DD_CONFIG_FILES += $(KEYBOARD_PATH_5)/keyboard.json
endif endif
MAIN_KEYMAP_PATH_1 := $(KEYBOARD_PATH_1)/keymaps/$(KEYMAP) MAIN_KEYMAP_PATH_1 := $(KEYBOARD_PATH_1)/keymaps/$(KEYMAP)
@ -197,25 +222,27 @@ ifneq ("$(wildcard $(KEYMAP_JSON))", "")
KEYMAP_C := $(INTERMEDIATE_OUTPUT)/src/keymap.c KEYMAP_C := $(INTERMEDIATE_OUTPUT)/src/keymap.c
KEYMAP_H := $(INTERMEDIATE_OUTPUT)/src/config.h KEYMAP_H := $(INTERMEDIATE_OUTPUT)/src/config.h
# Load the keymap-level rules.mk if exists ifeq ($(OTHER_KEYMAP_C),)
# Load the keymap-level rules.mk if exists (and we havent already loaded it for keymap.c)
-include $(KEYMAP_PATH)/rules.mk -include $(KEYMAP_PATH)/rules.mk
endif
# Load any rules.mk content from keymap.json # Load any rules.mk content from keymap.json
INFO_RULES_MK = $(shell $(QMK_BIN) generate-rules-mk --quiet --escape --output $(INTERMEDIATE_OUTPUT)/src/rules.mk $(KEYMAP_JSON)) INFO_RULES_MK = $(shell $(QMK_BIN) generate-rules-mk --quiet --escape --output $(INTERMEDIATE_OUTPUT)/src/rules.mk $(KEYMAP_JSON))
include $(INFO_RULES_MK) include $(INFO_RULES_MK)
# Add rules to generate the keymap files - indentation here is important # Add rules to generate the keymap files - indentation here is important
$(INTERMEDIATE_OUTPUT)/src/keymap.c: $(KEYMAP_JSON) $(INTERMEDIATE_OUTPUT)/src/keymap.c: $(KEYMAP_JSON) $(DD_CONFIG_FILES)
@$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD) @$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD)
$(eval CMD=$(QMK_BIN) json2c --quiet --output $(KEYMAP_C) $(KEYMAP_JSON)) $(eval CMD=$(QMK_BIN) json2c --quiet --output $(KEYMAP_C) $(KEYMAP_JSON))
@$(BUILD_CMD) @$(BUILD_CMD)
$(INTERMEDIATE_OUTPUT)/src/config.h: $(KEYMAP_JSON) $(INTERMEDIATE_OUTPUT)/src/config.h: $(KEYMAP_JSON) $(DD_CONFIG_FILES)
@$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD) @$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD)
$(eval CMD=$(QMK_BIN) generate-config-h --quiet --output $(KEYMAP_H) $(KEYMAP_JSON)) $(eval CMD=$(QMK_BIN) generate-config-h --quiet --output $(KEYMAP_H) $(KEYMAP_JSON))
@$(BUILD_CMD) @$(BUILD_CMD)
$(INTERMEDIATE_OUTPUT)/src/keymap.h: $(KEYMAP_JSON) $(INTERMEDIATE_OUTPUT)/src/keymap.h: $(KEYMAP_JSON) $(DD_CONFIG_FILES)
@$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD) @$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD)
$(eval CMD=$(QMK_BIN) generate-keymap-h --quiet --output $(INTERMEDIATE_OUTPUT)/src/keymap.h $(KEYMAP_JSON)) $(eval CMD=$(QMK_BIN) generate-keymap-h --quiet --output $(INTERMEDIATE_OUTPUT)/src/keymap.h $(KEYMAP_JSON))
@$(BUILD_CMD) @$(BUILD_CMD)
@ -224,6 +251,44 @@ generated-files: $(INTERMEDIATE_OUTPUT)/src/config.h $(INTERMEDIATE_OUTPUT)/src/
endif endif
# Community modules
COMMUNITY_RULES_MK = $(shell $(QMK_BIN) generate-community-modules-rules-mk -kb $(KEYBOARD) --quiet --escape --output $(INTERMEDIATE_OUTPUT)/src/community_rules.mk $(KEYMAP_JSON))
include $(COMMUNITY_RULES_MK)
$(INTERMEDIATE_OUTPUT)/src/community_modules.h: $(KEYMAP_JSON) $(DD_CONFIG_FILES)
@$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD)
$(eval CMD=$(QMK_BIN) generate-community-modules-h -kb $(KEYBOARD) --quiet --output $(INTERMEDIATE_OUTPUT)/src/community_modules.h $(KEYMAP_JSON))
@$(BUILD_CMD)
$(INTERMEDIATE_OUTPUT)/src/community_modules.c: $(KEYMAP_JSON) $(DD_CONFIG_FILES)
@$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD)
$(eval CMD=$(QMK_BIN) generate-community-modules-c -kb $(KEYBOARD) --quiet --output $(INTERMEDIATE_OUTPUT)/src/community_modules.c $(KEYMAP_JSON))
@$(BUILD_CMD)
$(INTERMEDIATE_OUTPUT)/src/community_modules_introspection.c: $(KEYMAP_JSON) $(DD_CONFIG_FILES)
@$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD)
$(eval CMD=$(QMK_BIN) generate-community-modules-introspection-c -kb $(KEYBOARD) --quiet --output $(INTERMEDIATE_OUTPUT)/src/community_modules_introspection.c $(KEYMAP_JSON))
@$(BUILD_CMD)
$(INTERMEDIATE_OUTPUT)/src/community_modules_introspection.h: $(KEYMAP_JSON) $(DD_CONFIG_FILES)
@$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD)
$(eval CMD=$(QMK_BIN) generate-community-modules-introspection-h -kb $(KEYBOARD) --quiet --output $(INTERMEDIATE_OUTPUT)/src/community_modules_introspection.h $(KEYMAP_JSON))
@$(BUILD_CMD)
$(INTERMEDIATE_OUTPUT)/src/led_matrix_community_modules.inc: $(KEYMAP_JSON) $(DD_CONFIG_FILES)
@$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD)
$(eval CMD=$(QMK_BIN) generate-led-matrix-community-modules-inc -kb $(KEYBOARD) --quiet --output $(INTERMEDIATE_OUTPUT)/src/led_matrix_community_modules.inc $(KEYMAP_JSON))
@$(BUILD_CMD)
$(INTERMEDIATE_OUTPUT)/src/rgb_matrix_community_modules.inc: $(KEYMAP_JSON) $(DD_CONFIG_FILES)
@$(SILENT) || printf "$(MSG_GENERATING) $@" | $(AWK_CMD)
$(eval CMD=$(QMK_BIN) generate-rgb-matrix-community-modules-inc -kb $(KEYBOARD) --quiet --output $(INTERMEDIATE_OUTPUT)/src/rgb_matrix_community_modules.inc $(KEYMAP_JSON))
@$(BUILD_CMD)
SRC += $(INTERMEDIATE_OUTPUT)/src/community_modules.c
generated-files: $(INTERMEDIATE_OUTPUT)/src/community_modules.h $(INTERMEDIATE_OUTPUT)/src/community_modules.c $(INTERMEDIATE_OUTPUT)/src/community_modules_introspection.c $(INTERMEDIATE_OUTPUT)/src/community_modules_introspection.h $(INTERMEDIATE_OUTPUT)/src/led_matrix_community_modules.inc $(INTERMEDIATE_OUTPUT)/src/rgb_matrix_community_modules.inc
include $(BUILDDEFS_PATH)/converters.mk include $(BUILDDEFS_PATH)/converters.mk
# Generate the board's version.h file. # Generate the board's version.h file.
@ -313,6 +378,14 @@ endif
# Find all of the config.h files and add them to our CONFIG_H define. # Find all of the config.h files and add them to our CONFIG_H define.
CONFIG_H := CONFIG_H :=
define config_h_community_module_appender
ifneq ("$(wildcard $(1)/config.h)","")
CONFIG_H += $(1)/config.h
endif
endef
$(foreach module,$(COMMUNITY_MODULE_PATHS),$(eval $(call config_h_community_module_appender,$(module))))
ifneq ("$(wildcard $(KEYBOARD_PATH_5)/config.h)","") ifneq ("$(wildcard $(KEYBOARD_PATH_5)/config.h)","")
CONFIG_H += $(KEYBOARD_PATH_5)/config.h CONFIG_H += $(KEYBOARD_PATH_5)/config.h
endif endif
@ -330,6 +403,14 @@ ifneq ("$(wildcard $(KEYBOARD_PATH_1)/config.h)","")
endif endif
POST_CONFIG_H := POST_CONFIG_H :=
define post_config_h_community_module_appender
ifneq ("$(wildcard $(1)/post_config.h)","")
POST_CONFIG_H += $(1)/post_config.h
endif
endef
$(foreach module,$(COMMUNITY_MODULE_PATHS),$(eval $(call post_config_h_community_module_appender,$(module))))
ifneq ("$(wildcard $(KEYBOARD_PATH_1)/post_config.h)","") ifneq ("$(wildcard $(KEYBOARD_PATH_1)/post_config.h)","")
POST_CONFIG_H += $(KEYBOARD_PATH_1)/post_config.h POST_CONFIG_H += $(KEYBOARD_PATH_1)/post_config.h
endif endif
@ -346,40 +427,6 @@ ifneq ("$(wildcard $(KEYBOARD_PATH_5)/post_config.h)","")
POST_CONFIG_H += $(KEYBOARD_PATH_5)/post_config.h POST_CONFIG_H += $(KEYBOARD_PATH_5)/post_config.h
endif endif
# Create dependencies on DD keyboard config - structure validated elsewhere
DD_CONFIG_FILES :=
ifneq ("$(wildcard $(KEYBOARD_PATH_1)/info.json)","")
DD_CONFIG_FILES += $(KEYBOARD_PATH_1)/info.json
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_2)/info.json)","")
DD_CONFIG_FILES += $(KEYBOARD_PATH_2)/info.json
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_3)/info.json)","")
DD_CONFIG_FILES += $(KEYBOARD_PATH_3)/info.json
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_4)/info.json)","")
DD_CONFIG_FILES += $(KEYBOARD_PATH_4)/info.json
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_5)/info.json)","")
DD_CONFIG_FILES += $(KEYBOARD_PATH_5)/info.json
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_1)/keyboard.json)","")
DD_CONFIG_FILES += $(KEYBOARD_PATH_1)/keyboard.json
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_2)/keyboard.json)","")
DD_CONFIG_FILES += $(KEYBOARD_PATH_2)/keyboard.json
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_3)/keyboard.json)","")
DD_CONFIG_FILES += $(KEYBOARD_PATH_3)/keyboard.json
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_4)/keyboard.json)","")
DD_CONFIG_FILES += $(KEYBOARD_PATH_4)/keyboard.json
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_5)/keyboard.json)","")
DD_CONFIG_FILES += $(KEYBOARD_PATH_5)/keyboard.json
endif
CONFIG_H += $(INTERMEDIATE_OUTPUT)/src/info_config.h CONFIG_H += $(INTERMEDIATE_OUTPUT)/src/info_config.h
KEYBOARD_SRC += $(INTERMEDIATE_OUTPUT)/src/default_keyboard.c KEYBOARD_SRC += $(INTERMEDIATE_OUTPUT)/src/default_keyboard.c
@ -444,21 +491,18 @@ ifneq ("$(CONVERTER)","")
endif endif
# Pull in post_rules.mk files from all our subfolders # Pull in post_rules.mk files from all our subfolders
ifneq ("$(wildcard $(KEYBOARD_PATH_1)/post_rules.mk)","") -include $(KEYBOARD_PATH_1)/post_rules.mk
include $(KEYBOARD_PATH_1)/post_rules.mk -include $(KEYBOARD_PATH_2)/post_rules.mk
endif -include $(KEYBOARD_PATH_3)/post_rules.mk
ifneq ("$(wildcard $(KEYBOARD_PATH_2)/post_rules.mk)","") -include $(KEYBOARD_PATH_4)/post_rules.mk
include $(KEYBOARD_PATH_2)/post_rules.mk -include $(KEYBOARD_PATH_5)/post_rules.mk
endif
ifneq ("$(wildcard $(KEYBOARD_PATH_3)/post_rules.mk)","") define post_rules_mk_community_module_includer
include $(KEYBOARD_PATH_3)/post_rules.mk ifneq ("$(wildcard $(1)/post_rules.mk)","")
endif include $(1)/post_rules.mk
ifneq ("$(wildcard $(KEYBOARD_PATH_4)/post_rules.mk)","") endif
include $(KEYBOARD_PATH_4)/post_rules.mk endef
endif $(foreach module,$(COMMUNITY_MODULE_PATHS),$(eval $(call post_rules_mk_community_module_includer,$(module))))
ifneq ("$(wildcard $(KEYBOARD_PATH_5)/post_rules.mk)","")
include $(KEYBOARD_PATH_5)/post_rules.mk
endif
ifneq ("$(wildcard $(KEYMAP_PATH)/config.h)","") ifneq ("$(wildcard $(KEYMAP_PATH)/config.h)","")
CONFIG_H += $(KEYMAP_PATH)/config.h CONFIG_H += $(KEYMAP_PATH)/config.h

View File

@ -7,6 +7,7 @@ endif
OPT = g OPT = g
include paths.mk include paths.mk
include $(BUILDDEFS_PATH)/support.mk
include $(BUILDDEFS_PATH)/message.mk include $(BUILDDEFS_PATH)/message.mk
TARGET=test/$(TEST_OUTPUT) TARGET=test/$(TEST_OUTPUT)

View File

@ -30,6 +30,8 @@ QUANTUM_SRC += \
$(QUANTUM_DIR)/logging/sendchar.c \ $(QUANTUM_DIR)/logging/sendchar.c \
$(QUANTUM_DIR)/process_keycode/process_default_layer.c \ $(QUANTUM_DIR)/process_keycode/process_default_layer.c \
include $(QUANTUM_DIR)/nvm/rules.mk
VPATH += $(QUANTUM_DIR)/logging VPATH += $(QUANTUM_DIR)/logging
# Fall back to lib/printf if there is no platform provided print # Fall back to lib/printf if there is no platform provided print
ifeq ("$(wildcard $(PLATFORM_PATH)/$(PLATFORM_KEY)/printf.mk)","") ifeq ("$(wildcard $(PLATFORM_PATH)/$(PLATFORM_KEY)/printf.mk)","")
@ -169,9 +171,10 @@ endif
VALID_EEPROM_DRIVER_TYPES := vendor custom transient i2c spi wear_leveling legacy_stm32_flash VALID_EEPROM_DRIVER_TYPES := vendor custom transient i2c spi wear_leveling legacy_stm32_flash
EEPROM_DRIVER ?= vendor EEPROM_DRIVER ?= vendor
ifeq ($(filter $(EEPROM_DRIVER),$(VALID_EEPROM_DRIVER_TYPES)),) ifneq ($(strip $(EEPROM_DRIVER)),none)
ifeq ($(filter $(EEPROM_DRIVER),$(VALID_EEPROM_DRIVER_TYPES)),)
$(call CATASTROPHIC_ERROR,Invalid EEPROM_DRIVER,EEPROM_DRIVER="$(EEPROM_DRIVER)" is not a valid EEPROM driver) $(call CATASTROPHIC_ERROR,Invalid EEPROM_DRIVER,EEPROM_DRIVER="$(EEPROM_DRIVER)" is not a valid EEPROM driver)
else else
OPT_DEFS += -DEEPROM_ENABLE OPT_DEFS += -DEEPROM_ENABLE
COMMON_VPATH += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/eeprom COMMON_VPATH += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/eeprom
COMMON_VPATH += $(DRIVER_PATH)/eeprom COMMON_VPATH += $(DRIVER_PATH)/eeprom
@ -216,7 +219,7 @@ else
COMMON_VPATH += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/flash COMMON_VPATH += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/flash
COMMON_VPATH += $(DRIVER_PATH)/flash COMMON_VPATH += $(DRIVER_PATH)/flash
SRC += eeprom_driver.c eeprom_legacy_emulated_flash.c legacy_flash_ops.c SRC += eeprom_driver.c eeprom_legacy_emulated_flash.c legacy_flash_ops.c
else ifneq ($(filter $(MCU_SERIES),STM32F1xx STM32F3xx STM32F4xx STM32L4xx STM32G4xx WB32F3G71xx WB32FQ95xx AT32F415 GD32VF103),) else ifneq ($(filter $(MCU_SERIES),STM32F1xx STM32F3xx STM32F4xx STM32L4xx STM32G0xx STM32G4xx WB32F3G71xx WB32FQ95xx AT32F415 GD32VF103),)
# Wear-leveling EEPROM implementation, backed by MCU flash # Wear-leveling EEPROM implementation, backed by MCU flash
OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_WEAR_LEVELING OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_WEAR_LEVELING
SRC += eeprom_driver.c eeprom_wear_leveling.c SRC += eeprom_driver.c eeprom_wear_leveling.c
@ -245,6 +248,7 @@ else
SRC += eeprom.c SRC += eeprom.c
endif endif
endif endif
endif
endif endif
VALID_WEAR_LEVELING_DRIVER_TYPES := custom embedded_flash spi_flash rp2040_flash legacy VALID_WEAR_LEVELING_DRIVER_TYPES := custom embedded_flash spi_flash rp2040_flash legacy
@ -263,18 +267,14 @@ ifneq ($(strip $(WEAR_LEVELING_DRIVER)),none)
ifeq ($(strip $(WEAR_LEVELING_DRIVER)), embedded_flash) ifeq ($(strip $(WEAR_LEVELING_DRIVER)), embedded_flash)
OPT_DEFS += -DHAL_USE_EFL OPT_DEFS += -DHAL_USE_EFL
SRC += wear_leveling_efl.c SRC += wear_leveling_efl.c
POST_CONFIG_H += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/wear_leveling/wear_leveling_efl_config.h
else ifeq ($(strip $(WEAR_LEVELING_DRIVER)), spi_flash) else ifeq ($(strip $(WEAR_LEVELING_DRIVER)), spi_flash)
FLASH_DRIVER := spi FLASH_DRIVER := spi
SRC += wear_leveling_flash_spi.c SRC += wear_leveling_flash_spi.c
POST_CONFIG_H += $(DRIVER_PATH)/wear_leveling/wear_leveling_flash_spi_config.h
else ifeq ($(strip $(WEAR_LEVELING_DRIVER)), rp2040_flash) else ifeq ($(strip $(WEAR_LEVELING_DRIVER)), rp2040_flash)
SRC += wear_leveling_rp2040_flash.c SRC += wear_leveling_rp2040_flash.c
POST_CONFIG_H += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_PATH)/wear_leveling/wear_leveling_rp2040_flash_config.h
else ifeq ($(strip $(WEAR_LEVELING_DRIVER)), legacy) else ifeq ($(strip $(WEAR_LEVELING_DRIVER)), legacy)
COMMON_VPATH += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/flash COMMON_VPATH += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/flash
SRC += legacy_flash_ops.c wear_leveling_legacy.c SRC += legacy_flash_ops.c wear_leveling_legacy.c
POST_CONFIG_H += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/wear_leveling/wear_leveling_legacy_config.h
endif endif
endif endif
endif endif
@ -433,6 +433,13 @@ ifeq ($(strip $(LED_MATRIX_ENABLE)), yes)
SRC += snled27351-mono.c SRC += snled27351-mono.c
endif endif
ifeq ($(strip $(LED_MATRIX_CUSTOM_KB)), yes)
OPT_DEFS += -DLED_MATRIX_CUSTOM_KB
endif
ifeq ($(strip $(LED_MATRIX_CUSTOM_USER)), yes)
OPT_DEFS += -DLED_MATRIX_CUSTOM_USER
endif
endif endif
# Deprecated driver names - do not use # Deprecated driver names - do not use
@ -628,6 +635,15 @@ ifeq ($(strip $(VIA_ENABLE)), yes)
TRI_LAYER_ENABLE := yes TRI_LAYER_ENABLE := yes
endif endif
ifeq ($(strip $(RAW_ENABLE)), yes)
OPT_DEFS += -DRAW_ENABLE
SRC += raw_hid.c
endif
ifeq ($(strip $(DYNAMIC_KEYMAP_ENABLE)), yes)
SEND_STRING_ENABLE := yes
endif
VALID_CUSTOM_MATRIX_TYPES:= yes lite no VALID_CUSTOM_MATRIX_TYPES:= yes lite no
CUSTOM_MATRIX ?= no CUSTOM_MATRIX ?= no
@ -706,6 +722,7 @@ ifeq ($(strip $(LIB8TION_ENABLE)), yes)
# ATmegaxxU2 does not have hardware MUL instruction - lib8tion must be told to use software multiplication routines # ATmegaxxU2 does not have hardware MUL instruction - lib8tion must be told to use software multiplication routines
OPT_DEFS += -DLIB8_ATTINY OPT_DEFS += -DLIB8_ATTINY
endif endif
OPT_DEFS += -DFASTLED_SCALE8_FIXED=1 -DFASTLED_BLEND_FIXED=1
SRC += $(LIB_PATH)/lib8tion/lib8tion.c SRC += $(LIB_PATH)/lib8tion/lib8tion.c
endif endif
@ -877,19 +894,19 @@ ifeq ($(strip $(BLUETOOTH_ENABLE)), yes)
OPT_DEFS += -DBLUETOOTH_ENABLE OPT_DEFS += -DBLUETOOTH_ENABLE
OPT_DEFS += -DBLUETOOTH_$(strip $(shell echo $(BLUETOOTH_DRIVER) | tr '[:lower:]' '[:upper:]')) OPT_DEFS += -DBLUETOOTH_$(strip $(shell echo $(BLUETOOTH_DRIVER) | tr '[:lower:]' '[:upper:]'))
NO_USB_STARTUP_CHECK := yes NO_USB_STARTUP_CHECK := yes
CONNECTION_ENABLE := yes
COMMON_VPATH += $(DRIVER_PATH)/bluetooth COMMON_VPATH += $(DRIVER_PATH)/bluetooth
SRC += outputselect.c process_connection.c SRC += $(DRIVER_PATH)/bluetooth/bluetooth.c
ifeq ($(strip $(BLUETOOTH_DRIVER)), bluefruit_le) ifeq ($(strip $(BLUETOOTH_DRIVER)), bluefruit_le)
SPI_DRIVER_REQUIRED = yes SPI_DRIVER_REQUIRED = yes
ANALOG_DRIVER_REQUIRED = yes SRC += $(DRIVER_PATH)/bluetooth/bluetooth_drivers.c
SRC += $(DRIVER_PATH)/bluetooth/bluetooth.c
SRC += $(DRIVER_PATH)/bluetooth/bluefruit_le.cpp SRC += $(DRIVER_PATH)/bluetooth/bluefruit_le.cpp
endif endif
ifeq ($(strip $(BLUETOOTH_DRIVER)), rn42) ifeq ($(strip $(BLUETOOTH_DRIVER)), rn42)
UART_DRIVER_REQUIRED = yes UART_DRIVER_REQUIRED = yes
SRC += $(DRIVER_PATH)/bluetooth/bluetooth.c SRC += $(DRIVER_PATH)/bluetooth/bluetooth_drivers.c
SRC += $(DRIVER_PATH)/bluetooth/rn42.c SRC += $(DRIVER_PATH)/bluetooth/rn42.c
endif endif
endif endif
@ -923,6 +940,28 @@ ifeq ($(strip $(DIP_SWITCH_ENABLE)), yes)
endif endif
endif endif
VALID_BATTERY_DRIVER_TYPES := adc custom vendor
BATTERY_DRIVER ?= adc
ifeq ($(strip $(BATTERY_DRIVER_REQUIRED)), yes)
ifeq ($(filter $(BATTERY_DRIVER),$(VALID_BATTERY_DRIVER_TYPES)),)
$(call CATASTROPHIC_ERROR,Invalid BATTERY_DRIVER,BATTERY_DRIVER="$(BATTERY_DRIVER)" is not a valid battery driver)
endif
OPT_DEFS += -DBATTERY_DRIVER
OPT_DEFS += -DBATTERY_$(strip $(shell echo $(BATTERY_DRIVER) | tr '[:lower:]' '[:upper:]'))
COMMON_VPATH += $(DRIVER_PATH)/battery
SRC += battery.c
SRC += battery_$(strip $(BATTERY_DRIVER)).c
# add extra deps
ifeq ($(strip $(BATTERY_DRIVER)), adc)
ANALOG_DRIVER_REQUIRED = yes
endif
endif
VALID_WS2812_DRIVER_TYPES := bitbang custom i2c pwm spi vendor VALID_WS2812_DRIVER_TYPES := bitbang custom i2c pwm spi vendor
WS2812_DRIVER ?= bitbang WS2812_DRIVER ?= bitbang
@ -933,6 +972,8 @@ ifeq ($(strip $(WS2812_DRIVER_REQUIRED)), yes)
OPT_DEFS += -DWS2812_$(strip $(shell echo $(WS2812_DRIVER) | tr '[:lower:]' '[:upper:]')) OPT_DEFS += -DWS2812_$(strip $(shell echo $(WS2812_DRIVER) | tr '[:lower:]' '[:upper:]'))
COMMON_VPATH += $(DRIVER_PATH)/led
SRC += ws2812.c ws2812_$(strip $(WS2812_DRIVER)).c SRC += ws2812.c ws2812_$(strip $(WS2812_DRIVER)).c
ifeq ($(strip $(PLATFORM)), CHIBIOS) ifeq ($(strip $(PLATFORM)), CHIBIOS)

View File

@ -168,7 +168,7 @@ MOVE_DEP = mv -f $(patsubst %.o,%.td,$@) $(patsubst %.o,%.d,$@)
# For a ChibiOS build, ensure that the board files have the hook overrides injected # For a ChibiOS build, ensure that the board files have the hook overrides injected
define BOARDSRC_INJECT_HOOKS define BOARDSRC_INJECT_HOOKS
$(INTERMEDIATE_OUTPUT)/$(patsubst %.c,%.o,$(patsubst ./%,%,$1)): INIT_HOOK_CFLAGS += -include $(TOP_DIR)/tmk_core/protocol/chibios/init_hooks.h $(INTERMEDIATE_OUTPUT)/$(patsubst %.c,%.o,$(patsubst ./%,%,$1)): FILE_SPECIFIC_CFLAGS += -include $(TOP_DIR)/tmk_core/protocol/chibios/init_hooks.h
endef endef
$(foreach LOBJ, $(BOARDSRC), $(eval $(call BOARDSRC_INJECT_HOOKS,$(LOBJ)))) $(foreach LOBJ, $(BOARDSRC), $(eval $(call BOARDSRC_INJECT_HOOKS,$(LOBJ))))
@ -289,10 +289,10 @@ $1/%.o : %.c $1/%.d $1/cflags.txt $1/compiler.txt | $(BEGIN)
ifneq ($$(VERBOSE_C_INCLUDE),) ifneq ($$(VERBOSE_C_INCLUDE),)
$$(if $$(filter $$(notdir $$(VERBOSE_C_INCLUDE)),$$(notdir $$<)),$$(eval CC_EXEC += -H)) $$(if $$(filter $$(notdir $$(VERBOSE_C_INCLUDE)),$$(notdir $$<)),$$(eval CC_EXEC += -H))
endif endif
$$(eval CMD := $$(CC_EXEC) -c $$($1_CFLAGS) $$(INIT_HOOK_CFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP)) $$(eval CMD := $$(CC_EXEC) -c $$($1_CFLAGS) $$(FILE_SPECIFIC_CFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP))
@$$(BUILD_CMD) @$$(BUILD_CMD)
ifneq ($$(DUMP_C_MACROS),) ifneq ($$(DUMP_C_MACROS),)
$$(eval CMD := $$(CC) -E -dM $$($1_CFLAGS) $$(INIT_HOOK_CFLAGS) $$(GENDEPFLAGS) $$<) $$(eval CMD := $$(CC) -E -dM $$($1_CFLAGS) $$(FILE_SPECIFIC_CFLAGS) $$(GENDEPFLAGS) $$<)
@$$(if $$(filter $$(notdir $$(DUMP_C_MACROS)),$$(notdir $$<)),$$(BUILD_CMD)) @$$(if $$(filter $$(notdir $$(DUMP_C_MACROS)),$$(notdir $$<)),$$(BUILD_CMD))
endif endif
@ -300,13 +300,13 @@ $1/%.o : %.c $1/%.d $1/cflags.txt $1/compiler.txt | $(BEGIN)
$1/%.o : %.cpp $1/%.d $1/cxxflags.txt $1/compiler.txt | $(BEGIN) $1/%.o : %.cpp $1/%.d $1/cxxflags.txt $1/compiler.txt | $(BEGIN)
@mkdir -p $$(@D) @mkdir -p $$(@D)
@$$(SILENT) || printf "$$(MSG_COMPILING_CXX) $$<" | $$(AWK_CMD) @$$(SILENT) || printf "$$(MSG_COMPILING_CXX) $$<" | $$(AWK_CMD)
$$(eval CMD=$$(CC) -c $$($1_CXXFLAGS) $$(INIT_HOOK_CFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP)) $$(eval CMD=$$(CC) -c $$($1_CXXFLAGS) $$(FILE_SPECIFIC_CFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP))
@$$(BUILD_CMD) @$$(BUILD_CMD)
$1/%.o : %.cc $1/%.d $1/cxxflags.txt $1/compiler.txt | $(BEGIN) $1/%.o : %.cc $1/%.d $1/cxxflags.txt $1/compiler.txt | $(BEGIN)
@mkdir -p $$(@D) @mkdir -p $$(@D)
@$$(SILENT) || printf "$$(MSG_COMPILING_CXX) $$<" | $$(AWK_CMD) @$$(SILENT) || printf "$$(MSG_COMPILING_CXX) $$<" | $$(AWK_CMD)
$$(eval CMD=$$(CC) -c $$($1_CXXFLAGS) $$(INIT_HOOK_CFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP)) $$(eval CMD=$$(CC) -c $$($1_CXXFLAGS) $$(FILE_SPECIFIC_CFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP))
@$$(BUILD_CMD) @$$(BUILD_CMD)
# Assemble: create object files from assembler source files. # Assemble: create object files from assembler source files.

View File

@ -1,10 +1,3 @@
# Note for new boards -- CTPC and CONVERT_TO_PROTON_C are deprecated terms
# and should not be replicated for new boards. These will be removed from
# documentation as well as existing keymaps in due course.
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
ifneq (,$(filter $(MCU),atmega32u4)) ifneq (,$(filter $(MCU),atmega32u4))
# TODO: opt in rather than assume everything uses a pro micro # TODO: opt in rather than assume everything uses a pro micro
PIN_COMPATIBLE ?= promicro PIN_COMPATIBLE ?= promicro

View File

@ -1,7 +1,7 @@
{ {
"license": "GPL-2.0-or-later", "license": "GPL-2.0-or-later",
"devDependencies": { "devDependencies": {
"vite": "^5.2.14", "vite": "^5.4.19",
"vitepress": "^1.1.0", "vitepress": "^1.1.0",
"vitepress-plugin-tabs": "^0.5.0", "vitepress-plugin-tabs": "^0.5.0",
"vue": "^3.4.24" "vue": "^3.4.24"

View File

@ -178,205 +178,220 @@
"@docsearch/css" "3.6.0" "@docsearch/css" "3.6.0"
algoliasearch "^4.19.1" algoliasearch "^4.19.1"
"@esbuild/aix-ppc64@0.20.2": "@esbuild/aix-ppc64@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz#a70f4ac11c6a1dfc18b8bbb13284155d933b9537" resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz#c7184a326533fcdf1b8ee0733e21c713b975575f"
integrity sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g== integrity sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==
"@esbuild/android-arm64@0.20.2": "@esbuild/android-arm64@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz#db1c9202a5bc92ea04c7b6840f1bbe09ebf9e6b9" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz#09d9b4357780da9ea3a7dfb833a1f1ff439b4052"
integrity sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg== integrity sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==
"@esbuild/android-arm@0.20.2": "@esbuild/android-arm@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.20.2.tgz#3b488c49aee9d491c2c8f98a909b785870d6e995" resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz#9b04384fb771926dfa6d7ad04324ecb2ab9b2e28"
integrity sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w== integrity sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==
"@esbuild/android-x64@0.20.2": "@esbuild/android-x64@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.20.2.tgz#3b1628029e5576249d2b2d766696e50768449f98" resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz#29918ec2db754cedcb6c1b04de8cd6547af6461e"
integrity sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg== integrity sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==
"@esbuild/darwin-arm64@0.20.2": "@esbuild/darwin-arm64@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz#6e8517a045ddd86ae30c6608c8475ebc0c4000bb" resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz#e495b539660e51690f3928af50a76fb0a6ccff2a"
integrity sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA== integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==
"@esbuild/darwin-x64@0.20.2": "@esbuild/darwin-x64@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz#90ed098e1f9dd8a9381695b207e1cff45540a0d0" resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz#c13838fa57372839abdddc91d71542ceea2e1e22"
integrity sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA== integrity sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==
"@esbuild/freebsd-arm64@0.20.2": "@esbuild/freebsd-arm64@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz#d71502d1ee89a1130327e890364666c760a2a911" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz#646b989aa20bf89fd071dd5dbfad69a3542e550e"
integrity sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw== integrity sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==
"@esbuild/freebsd-x64@0.20.2": "@esbuild/freebsd-x64@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz#aa5ea58d9c1dd9af688b8b6f63ef0d3d60cea53c" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz#aa615cfc80af954d3458906e38ca22c18cf5c261"
integrity sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw== integrity sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==
"@esbuild/linux-arm64@0.20.2": "@esbuild/linux-arm64@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz#055b63725df678379b0f6db9d0fa85463755b2e5" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz#70ac6fa14f5cb7e1f7f887bcffb680ad09922b5b"
integrity sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A== integrity sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==
"@esbuild/linux-arm@0.20.2": "@esbuild/linux-arm@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz#76b3b98cb1f87936fbc37f073efabad49dcd889c" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz#fc6fd11a8aca56c1f6f3894f2bea0479f8f626b9"
integrity sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg== integrity sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==
"@esbuild/linux-ia32@0.20.2": "@esbuild/linux-ia32@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz#c0e5e787c285264e5dfc7a79f04b8b4eefdad7fa" resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz#3271f53b3f93e3d093d518d1649d6d68d346ede2"
integrity sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig== integrity sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==
"@esbuild/linux-loong64@0.20.2": "@esbuild/linux-loong64@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz#a6184e62bd7cdc63e0c0448b83801001653219c5" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz#ed62e04238c57026aea831c5a130b73c0f9f26df"
integrity sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ== integrity sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==
"@esbuild/linux-mips64el@0.20.2": "@esbuild/linux-mips64el@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz#d08e39ce86f45ef8fc88549d29c62b8acf5649aa" resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz#e79b8eb48bf3b106fadec1ac8240fb97b4e64cbe"
integrity sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA== integrity sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==
"@esbuild/linux-ppc64@0.20.2": "@esbuild/linux-ppc64@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz#8d252f0b7756ffd6d1cbde5ea67ff8fd20437f20" resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz#5f2203860a143b9919d383ef7573521fb154c3e4"
integrity sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg== integrity sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==
"@esbuild/linux-riscv64@0.20.2": "@esbuild/linux-riscv64@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz#19f6dcdb14409dae607f66ca1181dd4e9db81300" resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz#07bcafd99322d5af62f618cb9e6a9b7f4bb825dc"
integrity sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg== integrity sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==
"@esbuild/linux-s390x@0.20.2": "@esbuild/linux-s390x@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz#3c830c90f1a5d7dd1473d5595ea4ebb920988685" resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz#b7ccf686751d6a3e44b8627ababc8be3ef62d8de"
integrity sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ== integrity sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==
"@esbuild/linux-x64@0.20.2": "@esbuild/linux-x64@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz#86eca35203afc0d9de0694c64ec0ab0a378f6fff" resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz#6d8f0c768e070e64309af8004bb94e68ab2bb3b0"
integrity sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw== integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==
"@esbuild/netbsd-x64@0.20.2": "@esbuild/netbsd-x64@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz#e771c8eb0e0f6e1877ffd4220036b98aed5915e6" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz#bbe430f60d378ecb88decb219c602667387a6047"
integrity sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ== integrity sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==
"@esbuild/openbsd-x64@0.20.2": "@esbuild/openbsd-x64@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz#9a795ae4b4e37e674f0f4d716f3e226dd7c39baf" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz#99d1cf2937279560d2104821f5ccce220cb2af70"
integrity sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ== integrity sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==
"@esbuild/sunos-x64@0.20.2": "@esbuild/sunos-x64@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz#7df23b61a497b8ac189def6e25a95673caedb03f" resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz#08741512c10d529566baba837b4fe052c8f3487b"
integrity sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w== integrity sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==
"@esbuild/win32-arm64@0.20.2": "@esbuild/win32-arm64@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz#f1ae5abf9ca052ae11c1bc806fb4c0f519bacf90" resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz#675b7385398411240735016144ab2e99a60fc75d"
integrity sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ== integrity sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==
"@esbuild/win32-ia32@0.20.2": "@esbuild/win32-ia32@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz#241fe62c34d8e8461cd708277813e1d0ba55ce23" resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz#1bfc3ce98aa6ca9a0969e4d2af72144c59c1193b"
integrity sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ== integrity sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==
"@esbuild/win32-x64@0.20.2": "@esbuild/win32-x64@0.21.5":
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz#9c907b21e30a52db959ba4f80bb01a0cc403d5cc" resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c"
integrity sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ== integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==
"@jridgewell/sourcemap-codec@^1.4.15": "@jridgewell/sourcemap-codec@^1.4.15":
version "1.4.15" version "1.4.15"
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
"@rollup/rollup-android-arm-eabi@4.22.4": "@rollup/rollup-android-arm-eabi@4.31.0":
version "4.22.4" version "4.31.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.4.tgz#8b613b9725e8f9479d142970b106b6ae878610d5" resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.31.0.tgz#d4dd60da0075a6ce9a6c76d71b8204f3e1822285"
integrity sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w== integrity sha512-9NrR4033uCbUBRgvLcBrJofa2KY9DzxL2UKZ1/4xA/mnTNyhZCWBuD8X3tPm1n4KxcgaraOYgrFKSgwjASfmlA==
"@rollup/rollup-android-arm64@4.22.4": "@rollup/rollup-android-arm64@4.31.0":
version "4.22.4" version "4.31.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.4.tgz#654ca1049189132ff602bfcf8df14c18da1f15fb" resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.31.0.tgz#25c4d33259a7a2ccd2f52a5ffcc0bb3ab3f0729d"
integrity sha512-VXoK5UMrgECLYaMuGuVTOx5kcuap1Jm8g/M83RnCHBKOqvPPmROFJGQaZhGccnsFtfXQ3XYa4/jMCJvZnbJBdA== integrity sha512-iBbODqT86YBFHajxxF8ebj2hwKm1k8PTBQSojSt3d1FFt1gN+xf4CowE47iN0vOSdnd+5ierMHBbu/rHc7nq5g==
"@rollup/rollup-darwin-arm64@4.22.4": "@rollup/rollup-darwin-arm64@4.31.0":
version "4.22.4" version "4.31.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.4.tgz#6d241d099d1518ef0c2205d96b3fa52e0fe1954b" resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.31.0.tgz#d137dff254b19163a6b52ac083a71cd055dae844"
integrity sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q== integrity sha512-WHIZfXgVBX30SWuTMhlHPXTyN20AXrLH4TEeH/D0Bolvx9PjgZnn4H677PlSGvU6MKNsjCQJYczkpvBbrBnG6g==
"@rollup/rollup-darwin-x64@4.22.4": "@rollup/rollup-darwin-x64@4.31.0":
version "4.22.4" version "4.31.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.4.tgz#42bd19d292a57ee11734c980c4650de26b457791" resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.31.0.tgz#58ff20b5dacb797d3adca19f02a21c532f9d55bf"
integrity sha512-aJJyYKQwbHuhTUrjWjxEvGnNNBCnmpHDvrb8JFDbeSH3m2XdHcxDd3jthAzvmoI8w/kSjd2y0udT+4okADsZIw== integrity sha512-hrWL7uQacTEF8gdrQAqcDy9xllQ0w0zuL1wk1HV8wKGSGbKPVjVUv/DEwT2+Asabf8Dh/As+IvfdU+H8hhzrQQ==
"@rollup/rollup-linux-arm-gnueabihf@4.22.4": "@rollup/rollup-freebsd-arm64@4.31.0":
version "4.22.4" version "4.31.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.4.tgz#f23555ee3d8fe941c5c5fd458cd22b65eb1c2232" resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.31.0.tgz#96ce1a241c591ec3e068f4af765d94eddb24e60c"
integrity sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ== integrity sha512-S2oCsZ4hJviG1QjPY1h6sVJLBI6ekBeAEssYKad1soRFv3SocsQCzX6cwnk6fID6UQQACTjeIMB+hyYrFacRew==
"@rollup/rollup-linux-arm-musleabihf@4.22.4": "@rollup/rollup-freebsd-x64@4.31.0":
version "4.22.4" version "4.31.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.4.tgz#f3bbd1ae2420f5539d40ac1fde2b38da67779baa" resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.31.0.tgz#e59e7ede505be41f0b4311b0b943f8eb44938467"
integrity sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg== integrity sha512-pCANqpynRS4Jirn4IKZH4tnm2+2CqCNLKD7gAdEjzdLGbH1iO0zouHz4mxqg0uEMpO030ejJ0aA6e1PJo2xrPA==
"@rollup/rollup-linux-arm64-gnu@4.22.4": "@rollup/rollup-linux-arm-gnueabihf@4.31.0":
version "4.22.4" version "4.31.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.4.tgz#7abe900120113e08a1f90afb84c7c28774054d15" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.31.0.tgz#e455ca6e4ff35bd46d62201c153352e717000a7b"
integrity sha512-AdPRoNi3NKVLolCN/Sp4F4N1d98c4SBnHMKoLuiG6RXgoZ4sllseuGioszumnPGmPM2O7qaAX/IJdeDU8f26Aw== integrity sha512-0O8ViX+QcBd3ZmGlcFTnYXZKGbFu09EhgD27tgTdGnkcYXLat4KIsBBQeKLR2xZDCXdIBAlWLkiXE1+rJpCxFw==
"@rollup/rollup-linux-arm64-musl@4.22.4": "@rollup/rollup-linux-arm-musleabihf@4.31.0":
version "4.22.4" version "4.31.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.4.tgz#9e655285c8175cd44f57d6a1e8e5dedfbba1d820" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.31.0.tgz#bc1a93d807d19e70b1e343a5bfea43723bcd6327"
integrity sha512-Gl0AxBtDg8uoAn5CCqQDMqAx22Wx22pjDOjBdmG0VIWX3qUBHzYmOKh8KXHL4UpogfJ14G4wk16EQogF+v8hmA== integrity sha512-w5IzG0wTVv7B0/SwDnMYmbr2uERQp999q8FMkKG1I+j8hpPX2BYFjWe69xbhbP6J9h2gId/7ogesl9hwblFwwg==
"@rollup/rollup-linux-powerpc64le-gnu@4.22.4": "@rollup/rollup-linux-arm64-gnu@4.31.0":
version "4.22.4" version "4.31.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.4.tgz#9a79ae6c9e9d8fe83d49e2712ecf4302db5bef5e" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.31.0.tgz#f38bf843f1dc3d5de680caf31084008846e3efae"
integrity sha512-3aVCK9xfWW1oGQpTsYJJPF6bfpWfhbRnhdlyhak2ZiyFLDaayz0EP5j9V1RVLAAxlmWKTDfS9wyRyY3hvhPoOg== integrity sha512-JyFFshbN5xwy6fulZ8B/8qOqENRmDdEkcIMF0Zz+RsfamEW+Zabl5jAb0IozP/8UKnJ7g2FtZZPEUIAlUSX8cA==
"@rollup/rollup-linux-riscv64-gnu@4.22.4": "@rollup/rollup-linux-arm64-musl@4.31.0":
version "4.22.4" version "4.31.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.4.tgz#67ac70eca4ace8e2942fabca95164e8874ab8128" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.31.0.tgz#b3987a96c18b7287129cf735be2dbf83e94d9d05"
integrity sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA== integrity sha512-kpQXQ0UPFeMPmPYksiBL9WS/BDiQEjRGMfklVIsA0Sng347H8W2iexch+IEwaR7OVSKtr2ZFxggt11zVIlZ25g==
"@rollup/rollup-linux-s390x-gnu@4.22.4": "@rollup/rollup-linux-loongarch64-gnu@4.31.0":
version "4.22.4" version "4.31.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.4.tgz#9f883a7440f51a22ed7f99e1d070bd84ea5005fc" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.31.0.tgz#0f0324044e71c4f02e9f49e7ec4e347b655b34ee"
integrity sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q== integrity sha512-pMlxLjt60iQTzt9iBb3jZphFIl55a70wexvo8p+vVFK+7ifTRookdoXX3bOsRdmfD+OKnMozKO6XM4zR0sHRrQ==
"@rollup/rollup-linux-x64-gnu@4.22.4": "@rollup/rollup-linux-powerpc64le-gnu@4.31.0":
version "4.22.4" version "4.31.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz#70116ae6c577fe367f58559e2cffb5641a1dd9d0" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.31.0.tgz#809479f27f1fd5b4eecd2aa732132ad952d454ba"
integrity sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg== integrity sha512-D7TXT7I/uKEuWiRkEFbed1UUYZwcJDU4vZQdPTcepK7ecPhzKOYk4Er2YR4uHKme4qDeIh6N3XrLfpuM7vzRWQ==
"@rollup/rollup-linux-x64-musl@4.22.4": "@rollup/rollup-linux-riscv64-gnu@4.31.0":
version "4.22.4" version "4.31.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.4.tgz#f473f88219feb07b0b98b53a7923be716d1d182f" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.31.0.tgz#7bc75c4f22db04d3c972f83431739cfa41c6a36e"
integrity sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g== integrity sha512-wal2Tc8O5lMBtoePLBYRKj2CImUCJ4UNGJlLwspx7QApYny7K1cUYlzQ/4IGQBLmm+y0RS7dwc3TDO/pmcneTw==
"@rollup/rollup-win32-arm64-msvc@4.22.4": "@rollup/rollup-linux-s390x-gnu@4.31.0":
version "4.22.4" version "4.31.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.4.tgz#4349482d17f5d1c58604d1c8900540d676f420e0" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.31.0.tgz#cfe8052345c55864d83ae343362cf1912480170e"
integrity sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw== integrity sha512-O1o5EUI0+RRMkK9wiTVpk2tyzXdXefHtRTIjBbmFREmNMy7pFeYXCFGbhKFwISA3UOExlo5GGUuuj3oMKdK6JQ==
"@rollup/rollup-win32-ia32-msvc@4.22.4": "@rollup/rollup-linux-x64-gnu@4.31.0":
version "4.22.4" version "4.31.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.4.tgz#a6fc39a15db618040ec3c2a24c1e26cb5f4d7422" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.31.0.tgz#c6b048f1e25f3fea5b4bd246232f4d07a159c5a0"
integrity sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g== integrity sha512-zSoHl356vKnNxwOWnLd60ixHNPRBglxpv2g7q0Cd3Pmr561gf0HiAcUBRL3S1vPqRC17Zo2CX/9cPkqTIiai1g==
"@rollup/rollup-win32-x64-msvc@4.22.4": "@rollup/rollup-linux-x64-musl@4.31.0":
version "4.22.4" version "4.31.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.4.tgz#3dd5d53e900df2a40841882c02e56f866c04d202" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.31.0.tgz#615273ac52d1a201f4de191cbd3389016a9d7d80"
integrity sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q== integrity sha512-ypB/HMtcSGhKUQNiFwqgdclWNRrAYDH8iMYH4etw/ZlGwiTVxBz2tDrGRrPlfZu6QjXwtd+C3Zib5pFqID97ZA==
"@rollup/rollup-win32-arm64-msvc@4.31.0":
version "4.31.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.31.0.tgz#32ed85810c1b831c648eca999d68f01255b30691"
integrity sha512-JuhN2xdI/m8Hr+aVO3vspO7OQfUFO6bKLIRTAy0U15vmWjnZDLrEgCZ2s6+scAYaQVpYSh9tZtRijApw9IXyMw==
"@rollup/rollup-win32-ia32-msvc@4.31.0":
version "4.31.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.31.0.tgz#d47effada68bcbfdccd30c4a788d42e4542ff4d3"
integrity sha512-U1xZZXYkvdf5MIWmftU8wrM5PPXzyaY1nGCI4KI4BFfoZxHamsIe+BtnPLIvvPykvQWlVbqUXdLa4aJUuilwLQ==
"@rollup/rollup-win32-x64-msvc@4.31.0":
version "4.31.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.31.0.tgz#7a2d89a82cf0388d60304964217dd7beac6de645"
integrity sha512-ul8rnCsUumNln5YWwz0ted2ZHFhzhRRnkpBZ+YRuHoRAlUji9KChpOUOndY7uykrPEPXVbHLlsdo6v5yXo/TXw==
"@shikijs/core@1.3.0", "@shikijs/core@^1.3.0": "@shikijs/core@1.3.0", "@shikijs/core@^1.3.0":
version "1.3.0" version "1.3.0"
@ -390,10 +405,10 @@
dependencies: dependencies:
shiki "1.3.0" shiki "1.3.0"
"@types/estree@1.0.5": "@types/estree@1.0.6":
version "1.0.5" version "1.0.6"
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50"
integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==
"@types/linkify-it@*": "@types/linkify-it@*":
version "3.0.5" version "3.0.5"
@ -589,34 +604,34 @@ entities@^4.5.0:
resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
esbuild@^0.20.1: esbuild@^0.21.3:
version "0.20.2" version "0.21.5"
resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.20.2.tgz#9d6b2386561766ee6b5a55196c6d766d28c87ea1" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.21.5.tgz#9ca301b120922959b766360d8ac830da0d02997d"
integrity sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g== integrity sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==
optionalDependencies: optionalDependencies:
"@esbuild/aix-ppc64" "0.20.2" "@esbuild/aix-ppc64" "0.21.5"
"@esbuild/android-arm" "0.20.2" "@esbuild/android-arm" "0.21.5"
"@esbuild/android-arm64" "0.20.2" "@esbuild/android-arm64" "0.21.5"
"@esbuild/android-x64" "0.20.2" "@esbuild/android-x64" "0.21.5"
"@esbuild/darwin-arm64" "0.20.2" "@esbuild/darwin-arm64" "0.21.5"
"@esbuild/darwin-x64" "0.20.2" "@esbuild/darwin-x64" "0.21.5"
"@esbuild/freebsd-arm64" "0.20.2" "@esbuild/freebsd-arm64" "0.21.5"
"@esbuild/freebsd-x64" "0.20.2" "@esbuild/freebsd-x64" "0.21.5"
"@esbuild/linux-arm" "0.20.2" "@esbuild/linux-arm" "0.21.5"
"@esbuild/linux-arm64" "0.20.2" "@esbuild/linux-arm64" "0.21.5"
"@esbuild/linux-ia32" "0.20.2" "@esbuild/linux-ia32" "0.21.5"
"@esbuild/linux-loong64" "0.20.2" "@esbuild/linux-loong64" "0.21.5"
"@esbuild/linux-mips64el" "0.20.2" "@esbuild/linux-mips64el" "0.21.5"
"@esbuild/linux-ppc64" "0.20.2" "@esbuild/linux-ppc64" "0.21.5"
"@esbuild/linux-riscv64" "0.20.2" "@esbuild/linux-riscv64" "0.21.5"
"@esbuild/linux-s390x" "0.20.2" "@esbuild/linux-s390x" "0.21.5"
"@esbuild/linux-x64" "0.20.2" "@esbuild/linux-x64" "0.21.5"
"@esbuild/netbsd-x64" "0.20.2" "@esbuild/netbsd-x64" "0.21.5"
"@esbuild/openbsd-x64" "0.20.2" "@esbuild/openbsd-x64" "0.21.5"
"@esbuild/sunos-x64" "0.20.2" "@esbuild/sunos-x64" "0.21.5"
"@esbuild/win32-arm64" "0.20.2" "@esbuild/win32-arm64" "0.21.5"
"@esbuild/win32-ia32" "0.20.2" "@esbuild/win32-ia32" "0.21.5"
"@esbuild/win32-x64" "0.20.2" "@esbuild/win32-x64" "0.21.5"
estree-walker@^2.0.2: estree-walker@^2.0.2:
version "2.0.2" version "2.0.2"
@ -662,29 +677,29 @@ mitt@^3.0.1:
resolved "https://registry.yarnpkg.com/mitt/-/mitt-3.0.1.tgz#ea36cf0cc30403601ae074c8f77b7092cdab36d1" resolved "https://registry.yarnpkg.com/mitt/-/mitt-3.0.1.tgz#ea36cf0cc30403601ae074c8f77b7092cdab36d1"
integrity sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw== integrity sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==
nanoid@^3.3.7: nanoid@^3.3.8:
version "3.3.7" version "3.3.8"
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf"
integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==
perfect-debounce@^1.0.0: perfect-debounce@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/perfect-debounce/-/perfect-debounce-1.0.0.tgz#9c2e8bc30b169cc984a58b7d5b28049839591d2a" resolved "https://registry.yarnpkg.com/perfect-debounce/-/perfect-debounce-1.0.0.tgz#9c2e8bc30b169cc984a58b7d5b28049839591d2a"
integrity sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA== integrity sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==
picocolors@^1.0.0: picocolors@^1.1.1:
version "1.0.0" version "1.1.1"
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b"
integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
postcss@^8.4.38: postcss@^8.4.38, postcss@^8.4.43:
version "8.4.38" version "8.5.1"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.1.tgz#e2272a1f8a807fafa413218245630b5db10a3214"
integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== integrity sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==
dependencies: dependencies:
nanoid "^3.3.7" nanoid "^3.3.8"
picocolors "^1.0.0" picocolors "^1.1.1"
source-map-js "^1.2.0" source-map-js "^1.2.1"
preact@^10.0.0: preact@^10.0.0:
version "10.20.2" version "10.20.2"
@ -696,29 +711,32 @@ rfdc@^1.3.1:
resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.1.tgz#2b6d4df52dffe8bb346992a10ea9451f24373a8f" resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.1.tgz#2b6d4df52dffe8bb346992a10ea9451f24373a8f"
integrity sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg== integrity sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==
rollup@^4.13.0: rollup@^4.20.0:
version "4.22.4" version "4.31.0"
resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.22.4.tgz#4135a6446671cd2a2453e1ad42a45d5973ec3a0f" resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.31.0.tgz#b84af969a0292cb047dce2c0ec5413a9457597a4"
integrity sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A== integrity sha512-9cCE8P4rZLx9+PjoyqHLs31V9a9Vpvfo4qNcs6JCiGWYhw2gijSetFbH6SSy1whnkgcefnUwr8sad7tgqsGvnw==
dependencies: dependencies:
"@types/estree" "1.0.5" "@types/estree" "1.0.6"
optionalDependencies: optionalDependencies:
"@rollup/rollup-android-arm-eabi" "4.22.4" "@rollup/rollup-android-arm-eabi" "4.31.0"
"@rollup/rollup-android-arm64" "4.22.4" "@rollup/rollup-android-arm64" "4.31.0"
"@rollup/rollup-darwin-arm64" "4.22.4" "@rollup/rollup-darwin-arm64" "4.31.0"
"@rollup/rollup-darwin-x64" "4.22.4" "@rollup/rollup-darwin-x64" "4.31.0"
"@rollup/rollup-linux-arm-gnueabihf" "4.22.4" "@rollup/rollup-freebsd-arm64" "4.31.0"
"@rollup/rollup-linux-arm-musleabihf" "4.22.4" "@rollup/rollup-freebsd-x64" "4.31.0"
"@rollup/rollup-linux-arm64-gnu" "4.22.4" "@rollup/rollup-linux-arm-gnueabihf" "4.31.0"
"@rollup/rollup-linux-arm64-musl" "4.22.4" "@rollup/rollup-linux-arm-musleabihf" "4.31.0"
"@rollup/rollup-linux-powerpc64le-gnu" "4.22.4" "@rollup/rollup-linux-arm64-gnu" "4.31.0"
"@rollup/rollup-linux-riscv64-gnu" "4.22.4" "@rollup/rollup-linux-arm64-musl" "4.31.0"
"@rollup/rollup-linux-s390x-gnu" "4.22.4" "@rollup/rollup-linux-loongarch64-gnu" "4.31.0"
"@rollup/rollup-linux-x64-gnu" "4.22.4" "@rollup/rollup-linux-powerpc64le-gnu" "4.31.0"
"@rollup/rollup-linux-x64-musl" "4.22.4" "@rollup/rollup-linux-riscv64-gnu" "4.31.0"
"@rollup/rollup-win32-arm64-msvc" "4.22.4" "@rollup/rollup-linux-s390x-gnu" "4.31.0"
"@rollup/rollup-win32-ia32-msvc" "4.22.4" "@rollup/rollup-linux-x64-gnu" "4.31.0"
"@rollup/rollup-win32-x64-msvc" "4.22.4" "@rollup/rollup-linux-x64-musl" "4.31.0"
"@rollup/rollup-win32-arm64-msvc" "4.31.0"
"@rollup/rollup-win32-ia32-msvc" "4.31.0"
"@rollup/rollup-win32-x64-msvc" "4.31.0"
fsevents "~2.3.2" fsevents "~2.3.2"
shiki@1.3.0, shiki@^1.3.0: shiki@1.3.0, shiki@^1.3.0:
@ -733,6 +751,11 @@ source-map-js@^1.2.0:
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af"
integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==
source-map-js@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46"
integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==
speakingurl@^14.0.1: speakingurl@^14.0.1:
version "14.0.1" version "14.0.1"
resolved "https://registry.yarnpkg.com/speakingurl/-/speakingurl-14.0.1.tgz#f37ec8ddc4ab98e9600c1c9ec324a8c48d772a53" resolved "https://registry.yarnpkg.com/speakingurl/-/speakingurl-14.0.1.tgz#f37ec8ddc4ab98e9600c1c9ec324a8c48d772a53"
@ -743,14 +766,14 @@ tabbable@^6.2.0:
resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97" resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97"
integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew== integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==
vite@^5.2.14, vite@^5.2.9: vite@^5.2.9, vite@^5.4.19:
version "5.2.14" version "5.4.19"
resolved "https://registry.yarnpkg.com/vite/-/vite-5.2.14.tgz#fd5f60facf6b5f90ec7da6323c467a365d380c3d" resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.19.tgz#20efd060410044b3ed555049418a5e7d1998f959"
integrity sha512-TFQLuwWLPms+NBNlh0D9LZQ+HXW471COABxw/9TEUBrjuHMo9BrYBPrN/SYAwIuVL+rLerycxiLT41t4f5MZpA== integrity sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==
dependencies: dependencies:
esbuild "^0.20.1" esbuild "^0.21.3"
postcss "^8.4.38" postcss "^8.4.43"
rollup "^4.13.0" rollup "^4.20.0"
optionalDependencies: optionalDependencies:
fsevents "~2.3.3" fsevents "~2.3.3"

View File

@ -25,6 +25,7 @@ GENERIC_FEATURES = \
CAPS_WORD \ CAPS_WORD \
COMBO \ COMBO \
COMMAND \ COMMAND \
CONNECTION \
CRC \ CRC \
DEFERRED_EXEC \ DEFERRED_EXEC \
DIGITIZER \ DIGITIZER \
@ -34,6 +35,7 @@ GENERIC_FEATURES = \
DYNAMIC_TAPPING_TERM \ DYNAMIC_TAPPING_TERM \
GRAVE_ESC \ GRAVE_ESC \
HAPTIC \ HAPTIC \
KEYCODE_STRING \
KEY_LOCK \ KEY_LOCK \
KEY_OVERRIDE \ KEY_OVERRIDE \
LAYER_LOCK \ LAYER_LOCK \
@ -60,6 +62,7 @@ define HANDLE_GENERIC_FEATURE
SRC += $$(wildcard $$(QUANTUM_DIR)/process_keycode/process_$2.c) SRC += $$(wildcard $$(QUANTUM_DIR)/process_keycode/process_$2.c)
SRC += $$(wildcard $$(QUANTUM_DIR)/$2/$2.c) SRC += $$(wildcard $$(QUANTUM_DIR)/$2/$2.c)
SRC += $$(wildcard $$(QUANTUM_DIR)/$2.c) SRC += $$(wildcard $$(QUANTUM_DIR)/$2.c)
SRC += $$(wildcard $$(QUANTUM_DIR)/nvm/$$(NVM_DRIVER_LOWER)/nvm_$2.c)
VPATH += $$(wildcard $$(QUANTUM_DIR)/$2/) VPATH += $$(wildcard $$(QUANTUM_DIR)/$2/)
OPT_DEFS += -D$1_ENABLE OPT_DEFS += -D$1_ENABLE
endef endef

11
builddefs/support.mk Normal file
View File

@ -0,0 +1,11 @@
# Helper to determine if a compiler option is supported
# Args:
# $(1) = option to test, if successful will be output
# $(2) = option to use if $(1) is not supported
# $(3) = additional arguments to pass to the compiler during the test, but aren't contained in the output
cc-option = $(shell \
if { echo 'int main(){return 0;}' | $(CC) $(1) $(3) -o /dev/null -x c /dev/null >/dev/null 2>&1; }; \
then echo "$(1)"; else echo "$(2)"; fi)
# Helper to pass comma character to make functions (use with `$(,)` to pass in `$(call ...)` arguments)
, := ,

View File

@ -0,0 +1,596 @@
{
"aliases": {
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
* │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
* │ │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
* │ │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ │
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
* │ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ │
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
* │ │ │ │ │ │ │ │ │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
"KC_GRV": {
"key": "EU_GRV",
"label": "`",
}
"KC_1": {
"key": "EU_1",
"label": "1",
}
"KC_2": {
"key": "EU_2",
"label": "2",
}
"KC_3": {
"key": "EU_3",
"label": "3",
}
"KC_4": {
"key": "EU_4",
"label": "4",
}
"KC_5": {
"key": "EU_5",
"label": "5",
}
"KC_6": {
"key": "EU_6",
"label": "6",
}
"KC_7": {
"key": "EU_7",
"label": "7",
}
"KC_8": {
"key": "EU_8",
"label": "8",
}
"KC_9": {
"key": "EU_9",
"label": "9",
}
"KC_0": {
"key": "EU_0",
"label": "0",
}
"KC_MINS": {
"key": "EU_MINS",
"label": "-",
}
"KC_EQL": {
"key": "EU_EQL",
"label": "=",
}
"KC_Q": {
"key": "EU_Q",
"label": "Q",
}
"KC_W": {
"key": "EU_W",
"label": "W",
}
"KC_E": {
"key": "EU_E",
"label": "E",
}
"KC_R": {
"key": "EU_R",
"label": "R",
}
"KC_T": {
"key": "EU_T",
"label": "T",
}
"KC_Y": {
"key": "EU_Y",
"label": "Y",
}
"KC_U": {
"key": "EU_U",
"label": "U",
}
"KC_I": {
"key": "EU_I",
"label": "I",
}
"KC_O": {
"key": "EU_O",
"label": "O",
}
"KC_P": {
"key": "EU_P",
"label": "P",
}
"KC_LBRC": {
"key": "EU_LBRC",
"label": "[",
}
"KC_RBRC": {
"key": "EU_RBRC",
"label": "]",
}
"KC_BSLS": {
"key": "EU_BSLS",
"label": "\\",
}
"KC_A": {
"key": "EU_A",
"label": "A",
}
"KC_S": {
"key": "EU_S",
"label": "S",
}
"KC_D": {
"key": "EU_D",
"label": "D",
}
"KC_F": {
"key": "EU_F",
"label": "F",
}
"KC_G": {
"key": "EU_G",
"label": "G",
}
"KC_H": {
"key": "EU_H",
"label": "H",
}
"KC_J": {
"key": "EU_J",
"label": "J",
}
"KC_K": {
"key": "EU_K",
"label": "K",
}
"KC_L": {
"key": "EU_L",
"label": "L",
}
"KC_SCLN": {
"key": "EU_SCLN",
"label": ";",
}
"KC_QUOT": {
"key": "EU_QUOT",
"label": "'",
}
"KC_Z": {
"key": "EU_Z",
"label": "Z",
}
"KC_X": {
"key": "EU_X",
"label": "X",
}
"KC_C": {
"key": "EU_C",
"label": "C",
}
"KC_V": {
"key": "EU_V",
"label": "V",
}
"KC_B": {
"key": "EU_B",
"label": "B",
}
"KC_N": {
"key": "EU_N",
"label": "N",
}
"KC_M": {
"key": "EU_M",
"label": "M",
}
"KC_COMM": {
"key": "EU_COMM",
"label": ",",
}
"KC_DOT": {
"key": "EU_DOT",
"label": ".",
}
"KC_SLSH": {
"key": "EU_SLSH",
"label": "/",
}
/* Shifted symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
* │ ~ │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ ( │ ) │ _ │ + │ │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
* │ │ │ │ │ │ │ │ │ │ │ │ { │ } │ | │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
* │ │ │ │ │ │ │ │ │ │ │ : │ " │ │
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
* │ │ │ │ │ │ │ │ │ < │ > │ ? │ │
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
* │ │ │ │ │ │ │ │ │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
"S(EU_GRV)": {
"key": "EU_TILD",
"label": "~",
}
"S(EU_1)": {
"key": "EU_EXLM",
"label": "!",
}
"S(EU_2)": {
"key": "EU_AT",
"label": "@",
}
"S(EU_3)": {
"key": "EU_HASH",
"label": "#",
}
"S(EU_4)": {
"key": "EU_DLR",
"label": "$",
}
"S(EU_5)": {
"key": "EU_PERC",
"label": "%",
}
"S(EU_6)": {
"key": "EU_CIRC",
"label": "^",
}
"S(EU_7)": {
"key": "EU_AMPR",
"label": "&",
}
"S(EU_8)": {
"key": "EU_ASTR",
"label": "*",
}
"S(EU_9)": {
"key": "EU_LPRN",
"label": "(",
}
"S(EU_0)": {
"key": "EU_RPRN",
"label": ")",
}
"S(EU_MINS)": {
"key": "EU_UNDS",
"label": "_",
}
"S(EU_EQL)": {
"key": "EU_PLUS",
"label": "+",
}
"S(EU_LBRC)": {
"key": "EU_LCBR",
"label": "{",
}
"S(EU_RBRC)": {
"key": "EU_RCBR",
"label": "}",
}
"S(EU_BSLS)": {
"key": "EU_PIPE",
"label": "|",
}
"S(EU_SCLN)": {
"key": "EU_COLN",
"label": ":",
}
"S(EU_QUOT)": {
"key": "EU_DQUO",
"label": "\"",
}
"S(EU_COMM)": {
"key": "EU_LABK",
"label": "<",
}
"S(EU_DOT)": {
"key": "EU_RABK",
"label": ">",
}
"S(EU_SLSH)": {
"key": "EU_QUES",
"label": "?",
}
/* AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
* │ ` │ ¡ │ ª │ º │ £ │ € │ ^ │ ˚ │ „ │ “ │ ” │ × │ │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
* │ │ æ │ å │ ë │ ý │ þ │ ÿ │ ü │ ï │ ö │ œ │ « │ » │ ¬ │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
* │ │ ä │ ß │ ð │ è │ é │ ù │ ú │ ij │ ø │ ° │ ´ │ │
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
* │ │ à │ á │ ç │ ì │ í │ ñ │ μ │ ò │ ó │ ¿ │ │
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
* │ │ │ │ │ │ │ │ │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
"ALGR(EU_GRV)": {
"key": "EU_DGRV",
"label": "` (dead)",
}
"ALGR(EU_1)": {
"key": "EU_IEXL",
"label": "¡",
}
"ALGR(EU_2)": {
"key": "EU_FORD",
"label": "ª",
}
"ALGR(EU_3)": {
"key": "EU_MORD",
"label": "º",
}
"ALGR(EU_4)": {
"key": "EU_PND",
"label": "£",
}
"ALGR(EU_5)": {
"key": "EU_EURO",
"label": "€",
}
"ALGR(EU_6)": {
"key": "EU_DCIR",
"label": "^ (dead)",
}
"ALGR(EU_7)": {
"key": "EU_RNGA",
"label": "˚ (dead)",
}
"ALGR(EU_8)": {
"key": "EU_DLQU",
"label": "„",
}
"ALGR(EU_9)": {
"key": "EU_LDQU",
"label": "“",
}
"ALGR(EU_0)": {
"key": "EU_RDQU",
"label": "”",
}
"ALGR(EU_MINS)": {
"key": "EU_NDSH",
"label": "",
}
"ALGR(EU_EQL)": {
"key": "EU_MUL",
"label": "×",
}
"ALGR(EU_Q)": {
"key": "EU_AE",
"label": "æ",
}
"ALGR(EU_W)": {
"key": "EU_ARNG",
"label": "Å",
}
"ALGR(EU_E)": {
"key": "EU_EDIA",
"label": "Ë",
}
"ALGR(EU_R)": {
"key": "EU_YACU",
"label": "Ý",
}
"ALGR(EU_T)": {
"key": "EU_THRN",
"label": "Þ",
}
"ALGR(EU_Y)": {
"key": "EU_YDIA",
"label": "Ÿ",
}
"ALGR(EU_U)": {
"key": "EU_UDIA",
"label": "Ü",
}
"ALGR(EU_I)": {
"key": "EU_IDIA",
"label": "Ï",
}
"ALGR(EU_O)": {
"key": "EU_ODIA",
"label": "Ö",
}
"ALGR(EU_P)": {
"key": "EU_OE",
"label": "Œ",
}
"ALGR(EU_LBRC)": {
"key": "EU_LDAQ",
"label": "«",
}
"ALGR(EU_RBRC)": {
"key": "EU_RDAQ",
"label": "»",
}
"ALGR(EU_BSLS)": {
"key": "EU_NOT",
"label": "¬",
}
"ALGR(EU_A)": {
"key": "EU_ADIA",
"label": "Ä",
}
"ALGR(EU_S)": {
"key": "EU_SS",
"label": "ß",
}
"ALGR(EU_D)": {
"key": "EU_ETH",
"label": "Ð",
}
"ALGR(EU_F)": {
"key": "EU_EGRV",
"label": "È",
}
"ALGR(EU_G)": {
"key": "EU_EACU",
"label": "É",
}
"ALGR(EU_H)": {
"key": "EU_UGRV",
"label": "Ù",
}
"ALGR(EU_J)": {
"key": "EU_UACU",
"label": "Ú",
}
"ALGR(EU_K)": {
"key": "EU_IJ",
"label": "IJ",
}
"ALGR(EU_L)": {
"key": "EU_OSTR",
"label": "Ø",
}
"ALGR(EU_SCLN)": {
"key": "EU_DEG",
"label": "°",
}
"ALGR(EU_QUOT)": {
"key": "EU_ACUT",
"label": "´ (dead)",
}
"ALGR(EU_Z)": {
"key": "EU_AGRV",
"label": "À",
}
"ALGR(EU_X)": {
"key": "EU_AACU",
"label": "Á",
}
"ALGR(EU_C)": {
"key": "EU_CCED",
"label": "Ç",
}
"ALGR(EU_V)": {
"key": "EU_IGRV",
"label": "Ì",
}
"ALGR(EU_B)": {
"key": "EU_IACU",
"label": "Í",
}
"ALGR(EU_N)": {
"key": "EU_NTIL",
"label": "Ñ",
}
"ALGR(EU_M)": {
"key": "EU_DGRK",
"label": "μ (dead Greek key)",
}
"ALGR(EU_COMM)": {
"key": "EU_OGRV",
"label": "Ò",
}
"ALGR(EU_DOT)": {
"key": "EU_OACU",
"label": "Ó",
}
"ALGR(EU_SLSH)": {
"key": "EU_IQUE",
"label": "¿",
}
/* Shift+AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
* │ ~ │ ¹ │ ² │ ³ │ ¥ │ ¢ │ ˇ │ ¯ │ │ — │ ÷ │ │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
* │ │ │ │ │ │ │ │ │ │ │ │ │ ¦ │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
* │ │ │ § │ │ │ │ │ │ │ │ · │ ¨ │ │
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
* │ │ │ │ │ │ │ │ │ │ │ … │ │
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
* │ │ │ │ │ │ │ │ │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
"ALGR(EU_TILD)": {
"key": "EU_DTIL",
"label": "~ (dead)",
}
"S(ALGR(EU_1))": {
"key": "EU_SUP1",
"label": "¹",
}
"S(ALGR(EU_2))": {
"key": "EU_SUP2",
"label": "²",
}
"S(ALGR(EU_3))": {
"key": "EU_SUP3",
"label": "³",
}
"ALGR(EU_DLR)": {
"key": "EU_YEN",
"label": "¥",
}
"S(EU_EURO)": {
"key": "EU_CENT",
"label": "¢",
}
"S(EU_DCIR)": {
"key": "EU_CARN",
"label": "ˇ (dead)",
}
"S(ALGR(EU_7))": {
"key": "EU_MACR",
"label": "¯ (dead)",
}
"S(EU_DLQU)": {
"key": "EU_SLQU",
"label": "",
}
"S(EU_LDQU)": {
"key": "EU_LSQU",
"label": "",
}
"S(EU_RDQU)": {
"key": "EU_RSQU",
"label": "",
}
"S(EU_NDSH)": {
"key": "EU_MDSH",
"label": "—",
}
"S(EU_MUL)": {
"key": "EU_DIV",
"label": "÷",
}
"S(EU_LDAQ)": {
"key": "EU_LSAQ",
"label": "",
}
"S(EU_RDAQ)": {
"key": "EU_RSAQ",
"label": "",
}
"S(ALGR(EU_BSLS))": {
"key": "EU_BRKP",
"label": "¦",
}
"S(ALGR(EU_S))": {
"key": "EU_SECT",
"label": "§",
}
"S(ALGR(EU_SCLN))": {
"key": "EU_MDDT",
"label": "·",
}
"ALGR(EU_DQUO)": {
"key": "EU_DIAE",
"label": "¨ (dead)",
}
"ALGR(EU_QUES)": {
"key": "EU_ELLP",
"label": "…",
}
}
}

View File

@ -527,7 +527,7 @@
"key": "FA_PIPE", "key": "FA_PIPE",
"label": "|", "label": "|",
} }
"ALGR(FA_RA)": { "ALGR(FA_RE)": {
"key": "FA_SUBA", "key": "FA_SUBA",
"label": "ٖ", "label": "ٖ",
} }

View File

@ -1140,7 +1140,7 @@
"0x00AE": { "0x00AE": {
"group": "media", "group": "media",
"key": "KC_MEDIA_PLAY_PAUSE", "key": "KC_MEDIA_PLAY_PAUSE",
"label": "Mute", "label": "Play/Pause Track",
"aliases": [ "aliases": [
"KC_MPLY" "KC_MPLY"
] ]

View File

@ -0,0 +1,7 @@
{
"ranges": {
"0x77C0/0x003F": {
"define": "QK_COMMUNITY_MODULE"
}
}
}

View File

@ -0,0 +1,25 @@
{
keyboard_pre_init: {
ret_type: void
args: void
}
keyboard_post_init: {
ret_type: void
args: void
}
pre_process_record: {
ret_type: bool
args: uint16_t keycode, keyrecord_t *record
call_params: keycode, record
}
process_record: {
ret_type: bool
args: uint16_t keycode, keyrecord_t *record
call_params: keycode, record
}
post_process_record: {
ret_type: void
args: uint16_t keycode, keyrecord_t *record
call_params: keycode, record
}
}

View File

@ -0,0 +1,26 @@
{
housekeeping_task: {
ret_type: void
args: void
}
suspend_power_down: {
ret_type: void
args: void
}
suspend_wakeup_init: {
ret_type: void
args: void
}
shutdown: {
ret_type: bool
args: bool jump_to_bootloader
call_params: jump_to_bootloader
}
process_detected_host_os: {
ret_type: bool
args: os_variant_t os
call_params: os
guard: defined(OS_DETECTION_ENABLE)
header: os_detection.h
}
}

View File

@ -0,0 +1,55 @@
{
pointing_device_init: {
ret_type: void
args: void
guard: defined(POINTING_DEVICE_ENABLE)
}
pointing_device_task: {
ret_type: report_mouse_t
args: report_mouse_t mouse_report
call_params: mouse_report
guard: defined(POINTING_DEVICE_ENABLE)
header: report.h
}
rgb_matrix_indicators: {
ret_type: bool
args: void
guard: defined(RGB_MATRIX_ENABLE)
header: rgb_matrix.h
}
rgb_matrix_indicators_advanced: {
ret_type: bool
args: uint8_t led_min, uint8_t led_max
call_params: led_min, led_max
guard: defined(RGB_MATRIX_ENABLE)
header: rgb_matrix.h
}
led_matrix_indicators: {
ret_type: bool
args: void
guard: defined(LED_MATRIX_ENABLE)
header: led_matrix.h
}
led_matrix_indicators_advanced: {
ret_type: bool
args: uint8_t led_min, uint8_t led_max
call_params: led_min, led_max
guard: defined(LED_MATRIX_ENABLE)
header: led_matrix.h
}
default_layer_state_set: {
ret_type: layer_state_t
args: layer_state_t state
call_params: state
guard: !defined(NO_ACTION_LAYER)
header: action_layer.h
}
layer_state_set: {
ret_type: layer_state_t
args: layer_state_t state
call_params: state
guard: !defined(NO_ACTION_LAYER)
header: action_layer.h
}
}

View File

@ -0,0 +1,3 @@
{
// This version exists to signify addition of LED/RGB effect support.
}

View File

@ -64,6 +64,9 @@
"WEAR_LEVELING_BACKING_SIZE": {"info_key": "eeprom.wear_leveling.backing_size", "value_type": "int", "to_json": false}, "WEAR_LEVELING_BACKING_SIZE": {"info_key": "eeprom.wear_leveling.backing_size", "value_type": "int", "to_json": false},
"WEAR_LEVELING_LOGICAL_SIZE": {"info_key": "eeprom.wear_leveling.logical_size", "value_type": "int", "to_json": false}, "WEAR_LEVELING_LOGICAL_SIZE": {"info_key": "eeprom.wear_leveling.logical_size", "value_type": "int", "to_json": false},
// host
"NKRO_DEFAULT_ON": {"info_key": "host.default.nkro", "value_type": "bool"},
// Layer locking // Layer locking
"LAYER_LOCK_IDLE_TIMEOUT": {"info_key": "layer_lock.timeout", "value_type": "int"}, "LAYER_LOCK_IDLE_TIMEOUT": {"info_key": "layer_lock.timeout", "value_type": "int"},
@ -200,6 +203,8 @@
"SPLIT_WPM_ENABLE": {"info_key": "split.transport.sync.wpm", "value_type": "flag"}, "SPLIT_WPM_ENABLE": {"info_key": "split.transport.sync.wpm", "value_type": "flag"},
// Tapping // Tapping
"CHORDAL_HOLD": {"info_key": "tapping.chordal_hold", "value_type": "flag"},
"FLOW_TAP_TERM": {"info_key": "tapping.flow_tap_term", "value_type": "int"},
"HOLD_ON_OTHER_KEY_PRESS": {"info_key": "tapping.hold_on_other_key_press", "value_type": "flag"}, "HOLD_ON_OTHER_KEY_PRESS": {"info_key": "tapping.hold_on_other_key_press", "value_type": "flag"},
"HOLD_ON_OTHER_KEY_PRESS_PER_KEY": {"info_key": "tapping.hold_on_other_key_press_per_key", "value_type": "flag"}, "HOLD_ON_OTHER_KEY_PRESS_PER_KEY": {"info_key": "tapping.hold_on_other_key_press_per_key", "value_type": "flag"},
"PERMISSIVE_HOLD": {"info_key": "tapping.permissive_hold", "value_type": "flag"}, "PERMISSIVE_HOLD": {"info_key": "tapping.permissive_hold", "value_type": "flag"},
@ -213,7 +218,6 @@
"TAPPING_TOGGLE": {"info_key": "tapping.toggle", "value_type": "int"}, "TAPPING_TOGGLE": {"info_key": "tapping.toggle", "value_type": "int"},
// USB // USB
"FORCE_NKRO": {"info_key": "usb.force_nkro", "value_type": "flag"},
"USB_MAX_POWER_CONSUMPTION": {"info_key": "usb.max_power", "value_type": "int"}, "USB_MAX_POWER_CONSUMPTION": {"info_key": "usb.max_power", "value_type": "int"},
"USB_POLLING_INTERVAL_MS": {"info_key": "usb.polling_interval", "value_type": "int"}, "USB_POLLING_INTERVAL_MS": {"info_key": "usb.polling_interval", "value_type": "int"},
"USB_SUSPEND_WAKEUP_DELAY": {"info_key": "usb.suspend_wakeup_delay", "value_type": "int"}, "USB_SUSPEND_WAKEUP_DELAY": {"info_key": "usb.suspend_wakeup_delay", "value_type": "int"},
@ -251,6 +255,7 @@
"PRODUCT": {"info_key": "keyboard_name", "warn_duplicate": false, "value_type": "str", "deprecated": true, "replace_with": "`keyboard_name` in info.json"}, "PRODUCT": {"info_key": "keyboard_name", "warn_duplicate": false, "value_type": "str", "deprecated": true, "replace_with": "`keyboard_name` in info.json"},
"PRODUCT_ID": {"info_key": "usb.pid", "value_type": "hex", "deprecated": true, "replace_with": "`usb.pid` in info.json"}, "PRODUCT_ID": {"info_key": "usb.pid", "value_type": "hex", "deprecated": true, "replace_with": "`usb.pid` in info.json"},
"VENDOR_ID": {"info_key": "usb.vid", "value_type": "hex", "deprecated": true, "replace_with": "`usb.vid` in info.json"}, "VENDOR_ID": {"info_key": "usb.vid", "value_type": "hex", "deprecated": true, "replace_with": "`usb.vid` in info.json"},
"FORCE_NKRO": {"info_key": "usb.force_nkro", "value_type": "flag", "deprecated": true, "replace_with": "`host.default.nkro` in info.json"},
// Items we want flagged in lint // Items we want flagged in lint
"VIAL_KEYBOARD_UID": {"info_key": "_invalid.vial_uid", "invalid": true}, "VIAL_KEYBOARD_UID": {"info_key": "_invalid.vial_uid", "invalid": true},

View File

@ -0,0 +1,74 @@
{
"bootmagic": {
"matrix": [0, 0]
},
"backlight": {
"default": {
"on": true
},
"breathing_period": 6,
"levels": 3,
"on_state": 1
},
"debounce": 5,
"features": {
"command": false,
"console": false
},
"indicators": {
"on_state": 1
},
"led_matrix": {
"default": {
"animation": "solid",
"on": true,
"val": 255,
"speed": 128
},
"led_flush_limit": 16,
"max_brightness": 255,
"sleep": false,
"speed_steps": 16,
"val_steps": 16
},
"rgblight": {
"default": {
"animation": "static_light",
"on": true,
"hue": 0,
"sat": 255,
"val": 255,
"speed": 0
},
"brightness_steps": 17,
"hue_steps": 8,
"max_brightness": 255,
"saturation_steps": 17,
"sleep": false
},
"rgb_matrix": {
"default": {
"animation": "cycle_left_right",
"on": true,
"hue": 0,
"sat": 255,
"val": 255,
"speed": 128
},
"hue_steps": 8,
"led_flush_limit": 16,
"max_brightness": 255,
"sat_steps": 16,
"sleep": false,
"speed_steps": 16,
"val_steps": 16
},
"split": {
"serial": {
"driver": "bitbang"
}
},
"ws2812": {
"driver": "bitbang"
}
}

View File

@ -53,7 +53,8 @@
"WS2812_DRIVER": {"info_key": "ws2812.driver"}, "WS2812_DRIVER": {"info_key": "ws2812.driver"},
// Items we want flagged in lint // Items we want flagged in lint
"CTPC": {"info_key": "_deprecated.ctpc", "deprecated": true, "replace_with": "CONVERT_TO=proton_c"}, "DEFAULT_FOLDER": {"info_key": "_deprecated.default_folder", "deprecated": true},
"CONVERT_TO_PROTON_C": {"info_key": "_deprecated.ctpc", "deprecated": true, "replace_with": "CONVERT_TO=proton_c"}, "CTPC": {"info_key": "_invalid.ctpc", "invalid": true, "replace_with": "CONVERT_TO=proton_c"},
"CONVERT_TO_PROTON_C": {"info_key": "_invalid.ctpc", "invalid": true, "replace_with": "CONVERT_TO=proton_c"},
"VIAL_ENABLE": {"info_key": "_invalid.vial", "invalid": true} "VIAL_ENABLE": {"info_key": "_invalid.vial", "invalid": true}
} }

View File

@ -140,9 +140,15 @@
"custommk/genesis": { "custommk/genesis": {
"target": "custommk/genesis/rev1" "target": "custommk/genesis/rev1"
}, },
"cxt_studio":{
"target":"cxt_studio/12e4"
},
"daisy": { "daisy": {
"target": "ktec/daisy" "target": "ktec/daisy"
}, },
"deemen17/de60": {
"target": "deemen17/de60/r1"
},
"dp3000": { "dp3000": {
"target": "dp3000/rev1" "target": "dp3000/rev1"
}, },
@ -194,6 +200,9 @@
"ergodone": { "ergodone": {
"target": "ktec/ergodone" "target": "ktec/ergodone"
}, },
"ergodox_stm32": {
"target": "handwired/ergodox_stm32"
},
"ergoinu": { "ergoinu": {
"target": "dm9records/ergoinu" "target": "dm9records/ergoinu"
}, },
@ -341,6 +350,9 @@
"keycapsss/plaid_pad": { "keycapsss/plaid_pad": {
"target": "keycapsss/plaid_pad/rev1" "target": "keycapsss/plaid_pad/rev1"
}, },
"keyten/kt60hs_t": {
"target": "keyten/kt60hs_t/v1"
},
"kira75": { "kira75": {
"target": "kira/kira75" "target": "kira/kira75"
}, },
@ -575,6 +587,9 @@
"ploopyco/trackball": { "ploopyco/trackball": {
"target": "ploopyco/trackball/rev1_005" "target": "ploopyco/trackball/rev1_005"
}, },
"plywrks/ply8x": {
"target": "plywrks/ply8x/solder"
},
"polilla": { "polilla": {
"target": "polilla/rev1" "target": "polilla/rev1"
}, },
@ -1027,7 +1042,7 @@
"target": "kprepublic/bm68hsrgb/rev1" "target": "kprepublic/bm68hsrgb/rev1"
}, },
"late9/rev1": { "late9/rev1": {
"target": "rookiebwoy/late9/rev1" "target": "ivndbt/late9/rev1"
}, },
"latin17rgb": { "latin17rgb": {
"target": "latincompass/latin17rgb" "target": "latincompass/latin17rgb"
@ -1192,7 +1207,7 @@
"target": "spaceholdings/nebula68b" "target": "spaceholdings/nebula68b"
}, },
"neopad/rev1": { "neopad/rev1": {
"target": "rookiebwoy/neopad/rev1" "target": "ivndbt/neopad/rev1"
}, },
"niu_mini": { "niu_mini": {
"target": "kbdfans/niu_mini" "target": "kbdfans/niu_mini"
@ -1515,6 +1530,9 @@
"ymd96": { "ymd96": {
"target": "ymdk/ymd96" "target": "ymdk/ymd96"
}, },
"ymdk/id75": {
"target": "ymdk/id75/f103"
},
"ymdk_np21": { "ymdk_np21": {
"target": "ymdk/np21" "target": "ymdk/np21"
}, },
@ -1552,5 +1570,693 @@
}, },
"dnworks/9973": { "dnworks/9973": {
"target": "dnworks/tkl87" "target": "dnworks/tkl87"
},
// DEFAULT_FOLDER removed during 2025 Q1 cycle
"0_sixty": {
"target": "0_sixty/base"
},
"0xcb/splaytoraid": {
"target": "0xcb/splaytoraid/rp2040_ce"
},
"1upkeyboards/pi40": {
"target": "1upkeyboards/pi40/mit_v1_0"
},
"1upkeyboards/pi50": {
"target": "1upkeyboards/pi50/grid"
},
"1upkeyboards/sweet16": {
"target": "1upkeyboards/sweet16/v1"
},
"25keys/aleth42": {
"target": "25keys/aleth42/rev1"
},
"25keys/zinc": {
"target": "25keys/zinc/rev1"
},
"40percentclub/i75": {
"target": "40percentclub/i75/promicro"
},
"40percentclub/polyandry": {
"target": "40percentclub/polyandry/promicro"
},
"8pack": {
"target": "8pack/rev12"
},
"adkb96": {
"target": "adkb96/rev1"
},
"adm42": {
"target": "adm42/rev4"
},
"aeboards/satellite": {
"target": "aeboards/satellite/rev1"
},
"atreus": {
"target": "atreus/astar"
},
"atreyu": {
"target": "atreyu/rev1"
},
"biacco42/ergo42": {
"target": "biacco42/ergo42/rev1"
},
"binepad/bn009": {
"target": "binepad/bn009/r2"
},
"binepad/bnr1": {
"target": "binepad/bnr1/v2"
},
"boston_meetup": {
"target": "boston_meetup/2019"
},
"bpiphany/frosty_flake": {
"target": "bpiphany/frosty_flake/20140521"
},
"buzzard": {
"target": "buzzard/rev1"
},
"cannonkeys/db60": {
"target": "cannonkeys/db60/rev2"
},
"clickety_split/leeloo": {
"target": "clickety_split/leeloo/rev3"
},
"converter/palm_usb": {
"target": "converter/palm_usb/stowaway"
},
"crkbd": {
"target": "crkbd/rev1"
},
"dailycraft/bat43": {
"target": "dailycraft/bat43/rev2"
},
"dailycraft/claw44": {
"target": "dailycraft/claw44/rev1"
},
"dailycraft/sandbox": {
"target": "dailycraft/sandbox/rev2"
},
"dailycraft/wings42": {
"target": "dailycraft/wings42/rev2"
},
"delikeeb/vanana": {
"target": "delikeeb/vanana/rev2"
},
"delikeeb/waaffle/rev3": {
"target": "delikeeb/waaffle/rev3/pro_micro"
},
"deltasplit75": {
"target": "deltasplit75/v2"
},
"drhigsby/ogurec": {
"target": "drhigsby/ogurec/left_pm"
},
"duck/octagon": {
"target": "duck/octagon/v2"
},
"duck/orion": {
"target": "duck/orion/v3"
},
"ducky/one2mini": {
"target": "ducky/one2mini/1861st"
},
"ducky/one2sf": {
"target": "ducky/one2sf/1967st"
},
"dumbpad": {
"target": "dumbpad/v0x"
},
"durgod/galaxy": {
"target": "durgod/dgk6x/galaxy"
},
"durgod/venus": {
"target": "durgod/dgk6x/venus"
},
"dztech/tofu/ii": {
"target": "dztech/tofu/ii/v1"
},
"dztech/tofu/jr": {
"target": "dztech/tofu/jr/v1"
},
"eco": {
"target": "eco/rev2"
},
"ergoslab": {
"target": "ergoslab/rev1"
},
"ergotravel": {
"target": "ergotravel/rev1"
},
"evyd13/atom47": {
"target": "evyd13/atom47/rev4"
},
"fortitude60": {
"target": "fortitude60/rev1"
},
"fruitykeeb/fruitbar/r1": {
"target": "fruitykeeb/fruitbar/r1/promicro"
},
"ghs/jem": {
"target": "ghs/jem/soldered"
},
"hadron": {
"target": "hadron/ver2"
},
"handwired/bento": {
"target": "handwired/bento/rev1"
},
"handwired/dactyl_manuform/6x6": {
"target": "handwired/dactyl_manuform/6x6/promicro"
},
"handwired/meck_tkl": {
"target": "handwired/meck_tkl/blackpill_f401"
},
"handwired/ms_sculpt_mobile": {
"target": "handwired/ms_sculpt_mobile/teensy2pp"
},
"handwired/onekey": {
"target": "handwired/onekey/promicro"
},
"handwired/pill60": {
"target": "handwired/pill60/bluepill"
},
"handwired/postageboard": {
"target": "handwired/postageboard/mini"
},
"handwired/qc60": {
"target": "handwired/qc60/proto"
},
"handwired/sono1": {
"target": "handwired/sono1/t2pp"
},
"handwired/splittest": {
"target": "handwired/splittest/promicro"
},
"handwired/stef9998/split_5x7": {
"target": "handwired/stef9998/split_5x7/rev1"
},
"handwired/symmetric70_proto/promicro": {
"target": "handwired/symmetric70_proto/promicro/base"
},
"handwired/symmetric70_proto/proton_c": {
"target": "handwired/symmetric70_proto/proton_c/base"
},
"handwired/unk": {
"target": "handwired/unk/rev1"
},
"handwired/xealous": {
"target": "handwired/xealous/rev1"
},
"hillside/46": {
"target": "hillside/46/0_1"
},
"hhkb/ansi": {
"target": "hhkb/ansi/32u4"
},
"hillside/48": {
"target": "hillside/48/0_1"
},
"hillside/52": {
"target": "hillside/52/0_1"
},
"ibnuda/squiggle": {
"target": "ibnuda/squiggle/rev1"
},
"idobao/id80/v1": {
"target": "idobao/id80/v2/ansi"
},
"idobao/id80/v3": {
"target": "idobao/id80/v3/ansi"
},
"inett_studio/sq80": {
"target": "inett_studio/sq80/hotswap_layout_i"
},
"input_club/infinity60": {
"target": "input_club/infinity60/led"
},
"jacky_studio/bear_65": {
"target": "jacky_studio/bear_65/rev1"
},
"jacky_studio/piggy60/rev1": {
"target": "jacky_studio/piggy60/rev1/solder"
},
"jadookb/jkb65": {
"target": "jadookb/jkb65/r1"
},
"jian": {
"target": "jian/rev2"
},
"jiran": {
"target": "jiran/rev1"
},
"jorne": {
"target": "jorne/rev1"
},
"junco": {
"target": "junco/rev1"
},
"kakunpc/angel17": {
"target": "kakunpc/angel17/rev1"
},
"kakunpc/angel64": {
"target": "kakunpc/angel64/rev1"
},
"kakunpc/business_card": {
"target": "kakunpc/business_card/beta"
},
"kakunpc/suihankey": {
"target": "kakunpc/suihankey/rev1"
},
"kakunpc/suihankey/split": {
"target": "kakunpc/suihankey/split/rev1"
},
"kapcave/paladinpad": {
"target": "kapcave/paladinpad/rev2"
},
"kapl": {
"target": "kapl/rev1"
},
"kbdfans/d45": {
"target": "kbdfans/d45/v2"
},
"kbdfans/kbd75": {
"target": "kbdfans/kbd75/rev1"
},
"keebio/bdn9": {
"target": "keebio/bdn9/rev1"
},
"keebio/convolution": {
"target": "keebio/convolution/rev1"
},
"keebio/foldkb": {
"target": "keebio/foldkb/rev1"
},
"keebio/kbo5000": {
"target": "keebio/kbo5000/rev1"
},
"keebio/levinson": {
"target": "keebio/levinson/rev2"
},
"keebio/quefrency": {
"target": "keebio/quefrency/rev1"
},
"keebio/rorschach": {
"target": "keebio/rorschach/rev1"
},
"keebio/sinc": {
"target": "keebio/sinc/rev1"
},
"keebio/viterbi": {
"target": "keebio/viterbi/rev2"
},
"keycapsss/kimiko": {
"target": "keycapsss/kimiko/rev2"
},
"keyhive/navi10": {
"target": "keyhive/navi10/rev3"
},
"keyhive/uno": {
"target": "keyhive/uno/rev1"
},
"kin80": {
"target": "kin80/blackpill401"
},
"kumaokobo/kudox_full": {
"target": "kumaokobo/kudox_full/rev1"
},
"kumaokobo/kudox_game": {
"target": "kumaokobo/kudox_game/rev2"
},
"kumaokobo/kudox": {
"target": "kumaokobo/kudox/rev3"
},
"kumaokobo/pico": {
"target": "kumaokobo/pico/65keys"
},
"lazydesigners/dimple": {
"target": "lazydesigners/dimple/staggered/rev1"
},
"lets_split": {
"target": "lets_split/rev2"
},
"lfkeyboards/lfk87": {
"target": "lfkeyboards/lfk78/revc"
},
"lily58": {
"target": "lily58/rev1"
},
"lime": {
"target": "lime/rev1"
},
"maple_computing/christmas_tree": {
"target": "maple_computing/christmas_tree/v2017"
},
"maple_computing/ivy": {
"target": "maple_computing/ivy/rev1"
},
"maple_computing/launchpad": {
"target": "maple_computing/launchpad/rev1"
},
"maple_computing/minidox": {
"target": "maple_computing/minidox/rev1"
},
"mariorion_v25": {
"target": "mariorion_v25/prod"
},
"marksard/rhymestone": {
"target": "marksard/rhymestone/rev1"
},
"marksard/treadstone32": {
"target": "marksard/treadstone32/rev1"
},
"marksard/treadstone48": {
"target": "marksard/treadstone48/rev1"
},
"maxipad": {
"target": "maxipad/promicro"
},
"mechkeys/mechmini": {
"target": "mechkeys/mechmini/v2"
},
"mechllama/g35": {
"target": "mechllama/g35/v2"
},
"mechlovin/adelais": {
"target": "mechlovin/adelais/standard_led/arm/rev2"
},
"mechlovin/adelais/standard_led/arm/rev4": {
"target": "mechlovin/adelais/standard_led/arm/rev4/stm32f303"
},
"mechlovin/adelais/standard_led/arm": {
"target": "mechlovin/adelais/standard_led/arm/rev2"
},
"mechlovin/adelais/standard_led/avr": {
"target": "mechlovin/adelais/standard_led/avr/rev1"
},
"mechlovin/hannah65/rev1": {
"target": "mechlovin/hannah65/rev1/haus"
},
"mechlovin/infinity87/rev1": {
"target": "mechlovin/infinity87/rev1/standard"
},
"mechlovin/infinity87": {
"target": "mechlovin/infinity87/rgb_rev1"
},
"mechlovin/mechlovin9": {
"target": "mechlovin/mechlovin9/rev1"
},
"mechlovin/olly/jf": {
"target": "mechlovin/olly/jf/rev1"
},
"mechlovin/zed1800": {
"target": "mechlovin/zed1800/saber"
},
"mechlovin/zed65/no_backlight": {
"target": "mechlovin/zed65/no_backlight/wearhaus66"
},
"mechlovin/zed65": {
"target": "mechlovin/zed65/no_backlight/wearhaus66"
},
"mechwild/bde": {
"target": "mechwild/bde/rev2"
},
"mechwild/mokulua": {
"target": "mechwild/mokulua/standard"
},
"mechwild/obe/f401": {
"target": "mechwild/obe/f401/base"
},
"mechwild/obe/f411": {
"target": "mechwild/obe/f411/base"
},
"mechwild/obe": {
"target": "mechwild/obe/f401/base"
},
"mechwild/waka60/f401": {
"target": "mechwild/waka60/f401/base"
},
"mechwild/waka60/f411": {
"target": "mechwild/waka60/f411/base"
},
"mechwild/waka60": {
"target": "mechwild/waka60/f401/base"
},
"murcielago": {
"target": "murcielago/rev1"
},
"nullbitsco/scramble": {
"target": "nullbitsco/scramble/v2"
},
"omkbd/ergodash": {
"target": "omkbd/ergodash/rev1"
},
"omkbd/runner3680": {
"target": "omkbd/runner3680/5x8"
},
"orthodox": {
"target": "orthodox/rev3"
},
"peej/rosaline": {
"target": "peej/rosaline/staggered"
},
"peej/tripel": {
"target": "peej/tripel/left"
},
"peranekofactory/tone": {
"target": "peranekofactory/tone/rev2"
},
"phase_studio/titan65": {
"target": "phase_studio/titan65/hotswap"
},
"pica40": {
"target": "pica40/rev2"
},
"pinky": {
"target": "pinky/3"
},
"ploopyco/madromys": {
"target": "ploopyco/madromys/rev1_001"
},
"ploopyco/trackball_mini": {
"target": "ploopyco/trackball_mini/rev1_001"
},
"ploopyco/trackball_nano": {
"target": "ploopyco/trackball_nano/rev1_001"
},
"ploopyco/trackball_thumb": {
"target": "ploopyco/trackball_thumb/rev1_001"
},
"primekb/meridian": {
"target": "primekb/meridian/ktr1010"
},
"primekb/prime_e": {
"target": "primekb/prime_e/std"
},
"program_yoink": {
"target": "program_yoink/staggered"
},
"projectcain/vault35": {
"target": "projectcain/vault35/atmega32u4"
},
"qpockets/space_space": {
"target": "qpockets/space_space/rev2"
},
"qwertyydox": {
"target": "qwertyydox/rev1"
},
"rate/pistachio": {
"target": "rate/pistachio/rev2"
},
"recompile_keys/choco60": {
"target": "recompile_keys/choco60/rev1"
},
"recompile_keys/nomu30": {
"target": "recompile_keys/nomu30/rev1"
},
"redox/rev1": {
"target": "redox/rev1/base"
},
"rgbkb/mun": {
"target": "rgbkb/mun/rev1"
},
"rgbkb/sol3": {
"target": "rgbkb/sol3/rev1"
},
"rgbkb/sol": {
"target": "rgbkb/sol/rev2"
},
"rgbkb/zen": {
"target": "rgbkb/zen/rev2"
},
"rgbkb/zygomorph": {
"target": "rgbkb/zygomorph/rev1"
},
"rmi_kb/herringbone": {
"target": "rmi_kb/herringbone/v1"
},
"rmi_kb/mona": {
"target": "rmi_kb/mona/v1_1"
},
"rmi_kb/tkl_ff": {
"target": "rmi_kb/tkl_ff/v1"
},
"rmi_kb/wete": {
"target": "rmi_kb/wete/v2"
},
"rookiebwoy/late9": {
"target": "ivndbt/late9/rev1"
},
"rookiebwoy/neopad": {
"target": "ivndbt/neopad/rev1"
},
"ivndbt/late9": {
"target": "ivndbt/late9/rev1"
},
"ivndbt/neopad": {
"target": "ivndbt/neopad/rev1"
},
"rura66": {
"target": "rura66/rev1"
},
"salicylic_acid3/7skb": {
"target": "salicylic_acid3/7skb/rev1"
},
"salicylic_acid3/getta25": {
"target": "salicylic_acid3/getta25/rev1"
},
"salicylic_acid3/jisplit89": {
"target": "salicylic_acid3/jisplit89/rev1"
},
"salicylic_acid3/naked48": {
"target": "salicylic_acid3/naked48/rev1"
},
"salicylic_acid3/naked60": {
"target": "salicylic_acid3/naked60/rev1"
},
"salicylic_acid3/naked64": {
"target": "salicylic_acid3/naked64/rev1"
},
"salicylic_acid3/setta21": {
"target": "salicylic_acid3/setta21/rev1"
},
"sawnsprojects/okayu": {
"target": "sawnsprojects/okayu/stm32f072"
},
"smoll/lefty": {
"target": "smoll/lefty/rev2"
},
"sofle": {
"target": "sofle/rev1"
},
"spaceholdings/nebula68b": {
"target": "spaceholdings/nebula68b/solder"
},
"spacetime": {
"target": "spacetime/rev1"
},
"splitkb/aurora/corne": {
"target": "splitkb/aurora/corne/rev1"
},
"splitkb/aurora/helix": {
"target": "splitkb/aurora/helix/rev1"
},
"splitkb/aurora/lily58": {
"target": "splitkb/aurora/lily58/rev1"
},
"splitkb/aurora/sofle_v2": {
"target": "splitkb/aurora/sofle_v2/rev1"
},
"splitkb/aurora/sweep": {
"target": "splitkb/aurora/sweep/rev1"
},
"splitkb/kyria": {
"target": "splitkb/kyria/rev3"
},
"splitkb/kyria/rev1": {
"target": "splitkb/kyria/rev1/base"
},
"splitkb/kyria/rev2": {
"target": "splitkb/kyria/rev2/base"
},
"splitty": {
"target": "splitty/rev1"
},
"studiokestra/galatea": {
"target": "studiokestra/galatea/rev1"
},
"takashiski/hecomi": {
"target": "takashiski/hecomi/alpha"
},
"takashiski/namecard2x4": {
"target": "takashiski/namecard2x4/rev2"
},
"teleport/native": {
"target": "teleport/native/iso"
},
"themadnoodle/noodlepad": {
"target": "themadnoodle/noodlepad/v1"
},
"tkw/grandiceps": {
"target": "tkw/grandiceps/rev1"
},
"tominabox1/le_chiffre": {
"target": "tominabox1/le_chiffre/rev1"
},
"tominabox1/littlefoot_lx": {
"target": "tominabox1/littlefoot_lx/rev1"
},
"tominabox1/underscore33": {
"target": "tominabox1/underscore33/rev1"
},
"trnthsn/e8ghty": {
"target": "trnthsn/e8ghty/stm32f103"
},
"trnthsn/s6xty5neor2": {
"target": "trnthsn/s6xty5neor2/stm32f103"
},
"tweetydabird/lotus58": {
"target": "tweetydabird/lotus58/promicro"
},
"unison": {
"target": "unison/v04"
},
"uzu42": {
"target": "uzu42/rev1"
},
"vitamins_included": {
"target": "vitamins_included/rev2"
},
"westm/westm68": {
"target": "westm/westm68/rev2"
},
"westm/westm9": {
"target": "westm/westm9/rev2"
},
"woodkeys/meira": {
"target": "woodkeys/meira/promicro"
},
"work_louder/loop": {
"target": "work_louder/loop/rev3"
},
"work_louder/work_board": {
"target": "work_louder/work_board/rev3"
},
"yanghu/unicorne": {
"target": "yanghu/unicorne/f411"
},
"yosino58": {
"target": "yosino58/rev1"
},
"ymdk/yd60mq": {
"target": "ymdk/yd60mq/12led"
},
"yushakobo/navpad/10": {
"target": "yushakobo/navpad/10/rev1"
},
"yynmt/acperience12": {
"target": "yynmt/acperience12/rev1"
},
"zsa/planck_ez": {
"target": "zsa/planck_ez/base"
} }
} }

View File

@ -1,7 +1,7 @@
{ {
"$id": "qmk.api.keyboard.v1", "$id": "qmk.api.keyboard.v1",
"allOf": [ "allOf": [
{"$ref": "qmk.keyboard.v1"}, {"$ref": "./keyboard.jsonschema#"},
{ {
"properties": { "properties": {
"keymaps": { "keymaps": {
@ -10,8 +10,8 @@
"url": {"type": "string"} "url": {"type": "string"}
} }
}, },
"parse_errors": {"$ref": "qmk.definitions.v1#/string_array"}, "parse_errors": {"$ref": "./definitions.jsonschema#/string_array"},
"parse_warnings": {"$ref": "qmk.definitions.v1#/string_array"}, "parse_warnings": {"$ref": "./definitions.jsonschema#/string_array"},
"processor_type": {"type": "string"}, "processor_type": {"type": "string"},
"protocol": {"type": "string"}, "protocol": {"type": "string"},
"keyboard_folder": {"type": "string"}, "keyboard_folder": {"type": "string"},

View File

@ -0,0 +1,18 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema#",
"$id": "qmk.community_module.v1",
"title": "Community Module Information",
"type": "object",
"required": ["module_name", "maintainer"],
"properties": {
"module_name": {"$ref": "./definitions.jsonschema#/text_identifier"},
"maintainer": {"$ref": "./definitions.jsonschema#/text_identifier"},
"license": {"type": "string"},
"url": {
"type": "string",
"format": "uri"
},
"keycodes": {"$ref": "./definitions.jsonschema#/keycode_decl_array"},
"features": {"$ref": "./keyboard.jsonschema#/definitions/features_config"}
}
}

View File

@ -17,9 +17,9 @@
"additionalProperties": false, "additionalProperties": false,
"required": ["pin_a", "pin_b"], "required": ["pin_a", "pin_b"],
"properties": { "properties": {
"pin_a": {"$ref": "qmk.definitions.v1#/mcu_pin"}, "pin_a": {"$ref": "./definitions.jsonschema#/mcu_pin"},
"pin_b": {"$ref": "qmk.definitions.v1#/mcu_pin"}, "pin_b": {"$ref": "./definitions.jsonschema#/mcu_pin"},
"resolution": {"$ref": "qmk.definitions.v1#/unsigned_int"} "resolution": {"$ref": "./definitions.jsonschema#/unsigned_int"}
} }
} }
} }
@ -28,17 +28,22 @@
"dip_switch_config": { "dip_switch_config": {
"type": "object", "type": "object",
"properties": { "properties": {
"pins": {"$ref": "qmk.definitions.v1#/mcu_pin_array"} "pins": {"$ref": "./definitions.jsonschema#/mcu_pin_array"}
} }
},
"features_config": {
"$ref": "./definitions.jsonschema#/boolean_array",
"propertyNames": {"$ref": "./definitions.jsonschema#/snake_case"},
"not": {"required": ["lto"]}
} }
}, },
"type": "object", "type": "object",
"not": {"required": ["vendorId", "productId"]}, // reject via keys... "not": {"required": ["vendorId", "productId"]}, // reject via keys...
"properties": { "properties": {
"keyboard_name": {"$ref": "qmk.definitions.v1#/text_identifier"}, "keyboard_name": {"$ref": "./definitions.jsonschema#/text_identifier"},
"keyboard_folder": {"$ref": "qmk.definitions.v1#/keyboard"}, "keyboard_folder": {"$ref": "./definitions.jsonschema#/keyboard"},
"maintainer": {"$ref": "qmk.definitions.v1#/text_identifier"}, "maintainer": {"$ref": "./definitions.jsonschema#/text_identifier"},
"manufacturer": {"$ref": "qmk.definitions.v1#/text_identifier"}, "manufacturer": {"$ref": "./definitions.jsonschema#/text_identifier"},
"url": { "url": {
"type": "string", "type": "string",
"format": "uri" "format": "uri"
@ -79,6 +84,7 @@
"STM32F407", "STM32F407",
"STM32F411", "STM32F411",
"STM32F446", "STM32F446",
"STM32G0B1",
"STM32G431", "STM32G431",
"STM32G474", "STM32G474",
"STM32H723", "STM32H723",
@ -113,8 +119,8 @@
"type": "object", "type": "object",
"additionalProperties": false, "additionalProperties": false,
"properties": { "properties": {
"data_pin": {"$ref": "qmk.definitions.v1#/mcu_pin"}, "data_pin": {"$ref": "./definitions.jsonschema#/mcu_pin"},
"clock_pin": {"$ref": "qmk.definitions.v1#/mcu_pin"}, "clock_pin": {"$ref": "./definitions.jsonschema#/mcu_pin"},
"default_brightness": { "default_brightness": {
"type": "integer", "type": "integer",
"minimum": 0, "minimum": 0,
@ -139,13 +145,13 @@
"enum": ["dac_additive", "dac_basic", "pwm_software", "pwm_hardware"] "enum": ["dac_additive", "dac_basic", "pwm_software", "pwm_hardware"]
}, },
"macro_beep": {"type": "boolean"}, "macro_beep": {"type": "boolean"},
"pins": {"$ref": "qmk.definitions.v1#/mcu_pin_array"}, "pins": {"$ref": "./definitions.jsonschema#/mcu_pin_array"},
"power_control": { "power_control": {
"type": "object", "type": "object",
"additionalProperties": false, "additionalProperties": false,
"properties": { "properties": {
"on_state": {"$ref": "qmk.definitions.v1#/bit"}, "on_state": {"$ref": "./definitions.jsonschema#/bit"},
"pin": {"$ref": "qmk.definitions.v1#/mcu_pin"} "pin": {"$ref": "./definitions.jsonschema#/mcu_pin"}
} }
}, },
"voices": {"type": "boolean"} "voices": {"type": "boolean"}
@ -165,20 +171,20 @@
"properties": { "properties": {
"on": {"type": "boolean"}, "on": {"type": "boolean"},
"breathing": {"type": "boolean"}, "breathing": {"type": "boolean"},
"brightness": {"$ref": "qmk.definitions.v1#/unsigned_int_8"} "brightness": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}
} }
}, },
"breathing": {"type": "boolean"}, "breathing": {"type": "boolean"},
"breathing_period": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, "breathing_period": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
"levels": { "levels": {
"type": "integer", "type": "integer",
"minimum": 1, "minimum": 1,
"maximum": 31 "maximum": 31
}, },
"max_brightness": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, "max_brightness": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
"pin": {"$ref": "qmk.definitions.v1#/mcu_pin"}, "pin": {"$ref": "./definitions.jsonschema#/mcu_pin"},
"pins": {"$ref": "qmk.definitions.v1#/mcu_pin_array"}, "pins": {"$ref": "./definitions.jsonschema#/mcu_pin_array"},
"on_state": {"$ref": "qmk.definitions.v1#/bit"}, "on_state": {"$ref": "./definitions.jsonschema#/bit"},
"as_caps_lock": {"type": "boolean"} "as_caps_lock": {"type": "boolean"}
} }
}, },
@ -263,7 +269,7 @@
"type": "string", "type": "string",
"enum": ["COL2ROW", "ROW2COL"] "enum": ["COL2ROW", "ROW2COL"]
}, },
"debounce": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "debounce": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"caps_word": { "caps_word": {
"type": "object", "type": "object",
"additionalProperties": false, "additionalProperties": false,
@ -271,20 +277,20 @@
"enabled": {"type": "boolean"}, "enabled": {"type": "boolean"},
"both_shifts_turns_on": {"type": "boolean"}, "both_shifts_turns_on": {"type": "boolean"},
"double_tap_shift_turns_on": {"type": "boolean"}, "double_tap_shift_turns_on": {"type": "boolean"},
"idle_timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "idle_timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"invert_on_shift": {"type": "boolean"} "invert_on_shift": {"type": "boolean"}
} }
}, },
"combo": { "combo": {
"type": "object", "type": "object",
"properties": { "properties": {
"count": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "count": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"term": {"$ref": "qmk.definitions.v1#/unsigned_int"} "term": {"$ref": "./definitions.jsonschema#/unsigned_int"}
} }
}, },
"community_layouts": { "community_layouts": {
"type": "array", "type": "array",
"items": {"$ref": "qmk.definitions.v1#/filename"} "items": {"$ref": "./definitions.jsonschema#/filename"}
}, },
"dip_switch": { "dip_switch": {
"$ref": "#/definitions/dip_switch_config", "$ref": "#/definitions/dip_switch_config",
@ -314,10 +320,10 @@
"properties": { "properties": {
"driver": { "driver": {
"type": "string", "type": "string",
"enum": ["custom", "embedded_flash", "legacy", "rp2040_flash", "spi_flash"] "enum": ["none", "custom", "embedded_flash", "legacy", "rp2040_flash", "spi_flash"]
}, },
"backing_size": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "backing_size": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"logical_size": {"$ref": "qmk.definitions.v1#/unsigned_int"} "logical_size": {"$ref": "./definitions.jsonschema#/unsigned_int"}
} }
} }
} }
@ -328,20 +334,16 @@
"enabled": {"type": "boolean"} "enabled": {"type": "boolean"}
} }
}, },
"features": { "features": { "$ref": "#/definitions/features_config" },
"$ref": "qmk.definitions.v1#/boolean_array",
"propertyNames": {"$ref": "qmk.definitions.v1#/snake_case"},
"not": {"required": ["lto"]}
},
"indicators": { "indicators": {
"type": "object", "type": "object",
"properties": { "properties": {
"caps_lock": {"$ref": "qmk.definitions.v1#/mcu_pin"}, "caps_lock": {"$ref": "./definitions.jsonschema#/mcu_pin"},
"num_lock": {"$ref": "qmk.definitions.v1#/mcu_pin"}, "num_lock": {"$ref": "./definitions.jsonschema#/mcu_pin"},
"scroll_lock": {"$ref": "qmk.definitions.v1#/mcu_pin"}, "scroll_lock": {"$ref": "./definitions.jsonschema#/mcu_pin"},
"compose": {"$ref": "qmk.definitions.v1#/mcu_pin"}, "compose": {"$ref": "./definitions.jsonschema#/mcu_pin"},
"kana": {"$ref": "qmk.definitions.v1#/mcu_pin"}, "kana": {"$ref": "./definitions.jsonschema#/mcu_pin"},
"on_state": {"$ref": "qmk.definitions.v1#/bit"} "on_state": {"$ref": "./definitions.jsonschema#/bit"}
} }
}, },
"joystick": { "joystick": {
@ -349,20 +351,20 @@
"properties": { "properties": {
"enabled": {"type": "boolean"}, "enabled": {"type": "boolean"},
"driver": {"type": "string"}, "driver": {"type": "string"},
"button_count": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "button_count": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"axis_resolution": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "axis_resolution": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"axes": { "axes": {
"type": "object", "type": "object",
"propertyNames": {"enum": ["x", "y", "z", "rx", "ry", "rz"]} "propertyNames": {"enum": ["x", "y", "z", "rx", "ry", "rz"]},
"additionalProperties": { "additionalProperties": {
"oneOf": [ "oneOf": [
{ {
"type": "object", "type": "object",
"properties": { "properties": {
"input_pin": {"$ref": "qmk.definitions.v1#/mcu_pin"}, "input_pin": {"$ref": "./definitions.jsonschema#/mcu_pin"},
"low": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "low": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"rest": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "rest": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"high": {"$ref": "qmk.definitions.v1#/unsigned_int"} "high": {"$ref": "./definitions.jsonschema#/unsigned_int"}
} }
}, },
{ {
@ -374,20 +376,20 @@
} }
} }
}, },
"keycodes": {"$ref": "qmk.definitions.v1#/keycode_decl_array"}, "keycodes": {"$ref": "./definitions.jsonschema#/keycode_decl_array"},
"layer_lock": { "layer_lock": {
"type": "object", "type": "object",
"properties": { "properties": {
"timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"} "timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"}
} }
}, },
"layout_aliases": { "layout_aliases": {
"type": "object", "type": "object",
"additionalProperties": {"$ref": "qmk.definitions.v1#/layout_macro"} "additionalProperties": {"$ref": "./definitions.jsonschema#/layout_macro"}
}, },
"layouts": { "layouts": {
"type": "object", "type": "object",
"propertyNames": {"$ref": "qmk.definitions.v1#/layout_macro"}, "propertyNames": {"$ref": "./definitions.jsonschema#/layout_macro"},
"additionalProperties": { "additionalProperties": {
"type": "object", "type": "object",
"additionalProperties": false, "additionalProperties": false,
@ -402,7 +404,7 @@
"additionalProperties": false, "additionalProperties": false,
"required": ["x", "y"], "required": ["x", "y"],
"properties": { "properties": {
"encoder": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "encoder": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"label": { "label": {
"type": "string", "type": "string",
"pattern": "^[^\\n]*$" "pattern": "^[^\\n]*$"
@ -416,13 +418,17 @@
"minimum": 0 "minimum": 0
} }
}, },
"r": {"$ref": "qmk.definitions.v1#/signed_decimal"}, "r": {"$ref": "./definitions.jsonschema#/signed_decimal"},
"rx": {"$ref": "qmk.definitions.v1#/unsigned_decimal"}, "rx": {"$ref": "./definitions.jsonschema#/unsigned_decimal"},
"ry": {"$ref": "qmk.definitions.v1#/unsigned_decimal"}, "ry": {"$ref": "./definitions.jsonschema#/unsigned_decimal"},
"h": {"$ref": "qmk.definitions.v1#/key_unit"}, "h": {"$ref": "./definitions.jsonschema#/key_unit"},
"w": {"$ref": "qmk.definitions.v1#/key_unit"}, "w": {"$ref": "./definitions.jsonschema#/key_unit"},
"x": {"$ref": "qmk.definitions.v1#/key_unit"}, "x": {"$ref": "./definitions.jsonschema#/key_unit"},
"y": {"$ref": "qmk.definitions.v1#/key_unit"} "y": {"$ref": "./definitions.jsonschema#/key_unit"},
"hand": {
"type": "string",
"enum": ["L", "R", "*"]
}
} }
} }
} }
@ -438,12 +444,24 @@
} }
} }
}, },
"host": {
"type": "object",
"properties": {
"default": {
"type": "object",
"additionalProperties": false,
"properties": {
"nkro": {"type": "boolean"}
}
}
}
},
"leader_key": { "leader_key": {
"type": "object", "type": "object",
"properties": { "properties": {
"timing": {"type": "boolean"}, "timing": {"type": "boolean"},
"strict_processing": {"type": "boolean"}, "strict_processing": {"type": "boolean"},
"timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"} "timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"}
} }
}, },
"matrix_pins": { "matrix_pins": {
@ -453,32 +471,38 @@
"custom": {"type": "boolean"}, "custom": {"type": "boolean"},
"custom_lite": {"type": "boolean"}, "custom_lite": {"type": "boolean"},
"ghost": {"type": "boolean"}, "ghost": {"type": "boolean"},
"input_pressed_state": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "input_pressed_state": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"io_delay": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "io_delay": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"direct": { "direct": {
"type": "array", "type": "array",
"items": {"$ref": "qmk.definitions.v1#/mcu_pin_array"} "items": {"$ref": "./definitions.jsonschema#/mcu_pin_array"}
}, },
"cols": {"$ref": "qmk.definitions.v1#/mcu_pin_array"}, "cols": {"$ref": "./definitions.jsonschema#/mcu_pin_array"},
"rows": {"$ref": "qmk.definitions.v1#/mcu_pin_array"} "rows": {"$ref": "./definitions.jsonschema#/mcu_pin_array"}
}
},
"modules": {
"type": "array",
"items": {
"type": "string"
} }
}, },
"mouse_key": { "mouse_key": {
"type": "object", "type": "object",
"properties": { "properties": {
"enabled": {"type": "boolean"}, "enabled": {"type": "boolean"},
"delay": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, "delay": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
"interval": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, "interval": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
"max_speed": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, "max_speed": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
"time_to_max": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, "time_to_max": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
"wheel_delay": {"$ref": "qmk.definitions.v1#/unsigned_int_8"} "wheel_delay": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}
} }
}, },
"oneshot": { "oneshot": {
"type": "object", "type": "object",
"properties": { "properties": {
"tap_toggle": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "tap_toggle": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"} "timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"}
} }
}, },
"led_matrix": { "led_matrix": {
@ -486,7 +510,7 @@
"properties": { "properties": {
"animations": { "animations": {
"type": "object", "type": "object",
"propertyNames": {"$ref": "qmk.definitions.v1#/snake_case"}, "propertyNames": {"$ref": "./definitions.jsonschema#/snake_case"},
"additionalProperties": {"type": "boolean"} "additionalProperties": {"type": "boolean"}
}, },
"default": { "default": {
@ -495,8 +519,8 @@
"properties": { "properties": {
"on": {"type": "boolean"}, "on": {"type": "boolean"},
"animation": {"type": "string"}, "animation": {"type": "string"},
"val": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, "val": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
"speed": {"$ref": "qmk.definitions.v1#/unsigned_int_8"} "speed": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}
} }
}, },
"driver": { "driver": {
@ -522,27 +546,28 @@
"type": "array", "type": "array",
"minItems": 2, "minItems": 2,
"maxItems": 2, "maxItems": 2,
"items": {"$ref": "qmk.definitions.v1#/unsigned_int_8"} "items": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}
}, },
"max_brightness": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, "max_brightness": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
"timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"val_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "val_steps": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"speed_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "speed_steps": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"led_flush_limit": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "led_flush_limit": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"led_process_limit": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "led_process_limit": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"react_on_keyup": {"type": "boolean"}, "react_on_keyup": {"type": "boolean"},
"sleep": {"type": "boolean"}, "sleep": {"type": "boolean"},
"split_count": { "split_count": {
"type": "array", "type": "array",
"minItems": 2, "minItems": 2,
"maxItems": 2, "maxItems": 2,
"items": {"$ref": "qmk.definitions.v1#/unsigned_int"} "items": {"$ref": "./definitions.jsonschema#/unsigned_int"}
}, },
"layout": { "layout": {
"type": "array", "type": "array",
"items": { "items": {
"type": "object", "type": "object",
"additionalProperties": false, "additionalProperties": false,
"required": ["x", "y"],
"properties": { "properties": {
"matrix": { "matrix": {
"type": "array", "type": "array",
@ -553,9 +578,9 @@
"minimum": 0 "minimum": 0
} }
}, },
"x": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "x": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"y": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "y": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"flags": {"$ref": "qmk.definitions.v1#/unsigned_int_8"} "flags": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}
} }
} }
} }
@ -566,7 +591,7 @@
"properties": { "properties": {
"animations": { "animations": {
"type": "object", "type": "object",
"propertyNames": {"$ref": "qmk.definitions.v1#/snake_case"}, "propertyNames": {"$ref": "./definitions.jsonschema#/snake_case"},
"additionalProperties": {"type": "boolean"} "additionalProperties": {"type": "boolean"}
}, },
"default": { "default": {
@ -575,10 +600,10 @@
"properties": { "properties": {
"on": {"type": "boolean"}, "on": {"type": "boolean"},
"animation": {"type": "string"}, "animation": {"type": "string"},
"hue": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, "hue": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
"sat": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, "sat": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
"val": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, "val": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
"speed": {"$ref": "qmk.definitions.v1#/unsigned_int_8"} "speed": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}
} }
}, },
"driver": { "driver": {
@ -606,29 +631,30 @@
"type": "array", "type": "array",
"minItems": 2, "minItems": 2,
"maxItems": 2, "maxItems": 2,
"items": {"$ref": "qmk.definitions.v1#/unsigned_int_8"} "items": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}
}, },
"max_brightness": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, "max_brightness": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
"timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"hue_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "hue_steps": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"sat_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "sat_steps": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"val_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "val_steps": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"speed_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "speed_steps": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"led_flush_limit": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "led_flush_limit": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"led_process_limit": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "led_process_limit": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"react_on_keyup": {"type": "boolean"}, "react_on_keyup": {"type": "boolean"},
"sleep": {"type": "boolean"}, "sleep": {"type": "boolean"},
"split_count": { "split_count": {
"type": "array", "type": "array",
"minItems": 2, "minItems": 2,
"maxItems": 2, "maxItems": 2,
"items": {"$ref": "qmk.definitions.v1#/unsigned_int"} "items": {"$ref": "./definitions.jsonschema#/unsigned_int"}
}, },
"layout": { "layout": {
"type": "array", "type": "array",
"items": { "items": {
"type": "object", "type": "object",
"additionalProperties": false, "additionalProperties": false,
"required": ["x", "y"],
"properties": { "properties": {
"matrix": { "matrix": {
"type": "array", "type": "array",
@ -639,9 +665,9 @@
"minimum": 0 "minimum": 0
} }
}, },
"x": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "x": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"y": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "y": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"flags": {"$ref": "qmk.definitions.v1#/unsigned_int_8"} "flags": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}
} }
} }
} }
@ -653,27 +679,27 @@
"properties": { "properties": {
"animations": { "animations": {
"type": "object", "type": "object",
"propertyNames": {"$ref": "qmk.definitions.v1#/snake_case"}, "propertyNames": {"$ref": "./definitions.jsonschema#/snake_case"},
"additionalProperties": {"type": "boolean"} "additionalProperties": {"type": "boolean"}
}, },
"brightness_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "brightness_steps": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"default": { "default": {
"type": "object", "type": "object",
"additionalProperties": false, "additionalProperties": false,
"properties": { "properties": {
"on": {"type": "boolean"}, "on": {"type": "boolean"},
"animation": {"type": "string"}, "animation": {"type": "string"},
"hue": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, "hue": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
"sat": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, "sat": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
"val": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, "val": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
"speed": {"$ref": "qmk.definitions.v1#/unsigned_int_8"} "speed": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}
} }
}, },
"driver": { "driver": {
"type": "string", "type": "string",
"enum": ["apa102", "custom", "ws2812"] "enum": ["apa102", "custom", "ws2812"]
}, },
"hue_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "hue_steps": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"layers": { "layers": {
"type": "object", "type": "object",
"additionalProperties": false, "additionalProperties": false,
@ -688,29 +714,29 @@
"override_rgb": {"type": "boolean"} "override_rgb": {"type": "boolean"}
} }
}, },
"led_count": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "led_count": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"led_map": { "led_map": {
"type": "array", "type": "array",
"minItems": 2, "minItems": 2,
"items": {"$ref": "qmk.definitions.v1#/unsigned_int"} "items": {"$ref": "./definitions.jsonschema#/unsigned_int"}
}, },
"max_brightness": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, "max_brightness": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
"pin": { "pin": {
"$ref": "qmk.definitions.v1#/mcu_pin", "$ref": "./definitions.jsonschema#/mcu_pin",
"$comment": "Deprecated: use ws2812.pin instead" "$comment": "Deprecated: use ws2812.pin instead"
}, },
"rgbw": { "rgbw": {
"type": "boolean", "type": "boolean",
"$comment": "Deprecated: use ws2812.rgbw instead" "$comment": "Deprecated: use ws2812.rgbw instead"
}, },
"saturation_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "saturation_steps": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"sleep": {"type": "boolean"}, "sleep": {"type": "boolean"},
"split": {"type": "boolean"}, "split": {"type": "boolean"},
"split_count": { "split_count": {
"type": "array", "type": "array",
"minItems": 2, "minItems": 2,
"maxItems": 2, "maxItems": 2,
"items": {"$ref": "qmk.definitions.v1#/unsigned_int"} "items": {"$ref": "./definitions.jsonschema#/unsigned_int"}
} }
} }
}, },
@ -719,8 +745,8 @@
"additionalProperties": false, "additionalProperties": false,
"properties": { "properties": {
"enabled": {"type": "boolean"}, "enabled": {"type": "boolean"},
"unlock_timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "unlock_timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"idle_timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "idle_timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"unlock_sequence": { "unlock_sequence": {
"type": "array", "type": "array",
"minItems": 1, "minItems": 1,
@ -754,8 +780,8 @@
"properties": { "properties": {
"enabled": {"type": "boolean"}, "enabled": {"type": "boolean"},
"mouse_enabled": {"type": "boolean"}, "mouse_enabled": {"type": "boolean"},
"clock_pin": {"$ref": "qmk.definitions.v1#/mcu_pin"}, "clock_pin": {"$ref": "./definitions.jsonschema#/mcu_pin"},
"data_pin": {"$ref": "qmk.definitions.v1#/mcu_pin"}, "data_pin": {"$ref": "./definitions.jsonschema#/mcu_pin"},
"driver": { "driver": {
"type": "string", "type": "string",
"enum": ["busywait", "interrupt", "usart", "vendor"] "enum": ["busywait", "interrupt", "usart", "vendor"]
@ -792,11 +818,11 @@
"properties": { "properties": {
"direct": { "direct": {
"type": "array", "type": "array",
"items": {"$ref": "qmk.definitions.v1#/mcu_pin_array"} "items": {"$ref": "./definitions.jsonschema#/mcu_pin_array"}
}, },
"cols": {"$ref": "qmk.definitions.v1#/mcu_pin_array"}, "cols": {"$ref": "./definitions.jsonschema#/mcu_pin_array"},
"rows": {"$ref": "qmk.definitions.v1#/mcu_pin_array"}, "rows": {"$ref": "./definitions.jsonschema#/mcu_pin_array"},
"unused": {"$ref": "qmk.definitions.v1#/mcu_pin_array"} "unused": {"$ref": "./definitions.jsonschema#/mcu_pin_array"}
} }
} }
} }
@ -823,16 +849,16 @@
"type": "object", "type": "object",
"additionalProperties": false, "additionalProperties": false,
"properties": { "properties": {
"pin": {"$ref": "qmk.definitions.v1#/mcu_pin"}, "pin": {"$ref": "./definitions.jsonschema#/mcu_pin"},
"matrix_grid": { "matrix_grid": {
"$ref": "qmk.definitions.v1#/mcu_pin_array", "$ref": "./definitions.jsonschema#/mcu_pin_array",
"minItems": 2, "minItems": 2,
"maxItems": 2 "maxItems": 2
} }
} }
}, },
"soft_serial_pin": { "soft_serial_pin": {
"$ref": "qmk.definitions.v1#/mcu_pin", "$ref": "./definitions.jsonschema#/mcu_pin",
"$comment": "Deprecated: use split.serial.pin instead" "$comment": "Deprecated: use split.serial.pin instead"
}, },
"soft_serial_speed": { "soft_serial_speed": {
@ -848,7 +874,7 @@
"type": "string", "type": "string",
"enum": ["bitbang", "usart", "vendor"] "enum": ["bitbang", "usart", "vendor"]
}, },
"pin": {"$ref": "qmk.definitions.v1#/mcu_pin"} "pin": {"$ref": "./definitions.jsonschema#/mcu_pin"}
} }
}, },
"transport": { "transport": {
@ -876,7 +902,7 @@
} }
}, },
"watchdog": {"type": "boolean"}, "watchdog": {"type": "boolean"},
"watchdog_timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "watchdog_timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"sync_matrix_state": { "sync_matrix_state": {
"type": "boolean", "type": "boolean",
"$comment": "Deprecated: use sync.matrix_state instead" "$comment": "Deprecated: use sync.matrix_state instead"
@ -892,8 +918,8 @@
"additionalProperties": false, "additionalProperties": false,
"properties": { "properties": {
"enabled": {"type": "boolean"}, "enabled": {"type": "boolean"},
"polling_interval": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "polling_interval": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"} "timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"}
} }
}, },
"main": { "main": {
@ -903,7 +929,7 @@
}, },
"matrix_grid": { "matrix_grid": {
"type": "array", "type": "array",
"items": {"$ref": "qmk.definitions.v1#/mcu_pin"}, "items": {"$ref": "./definitions.jsonschema#/mcu_pin"},
"$comment": "Deprecated: use split.handedness.matrix_grid instead" "$comment": "Deprecated: use split.handedness.matrix_grid instead"
} }
} }
@ -915,6 +941,7 @@
"tapping": { "tapping": {
"type": "object", "type": "object",
"properties": { "properties": {
"chordal_hold": {"type": "boolean"},
"force_hold": {"type": "boolean"}, "force_hold": {"type": "boolean"},
"force_hold_per_key": {"type": "boolean"}, "force_hold_per_key": {"type": "boolean"},
"ignore_mod_tap_interrupt": {"type": "boolean"}, "ignore_mod_tap_interrupt": {"type": "boolean"},
@ -924,9 +951,9 @@
"permissive_hold_per_key": {"type": "boolean"}, "permissive_hold_per_key": {"type": "boolean"},
"retro": {"type": "boolean"}, "retro": {"type": "boolean"},
"retro_per_key": {"type": "boolean"}, "retro_per_key": {"type": "boolean"},
"term": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "term": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"term_per_key": {"type": "boolean"}, "term_per_key": {"type": "boolean"},
"toggle": {"$ref": "qmk.definitions.v1#/unsigned_int"} "toggle": {"$ref": "./definitions.jsonschema#/unsigned_int"}
} }
}, },
"usb": { "usb": {
@ -934,16 +961,20 @@
"additionalProperties": false, "additionalProperties": false,
"properties": { "properties": {
"device_ver": { "device_ver": {
"$ref": "qmk.definitions.v1#/hex_number_4d", "$ref": "./definitions.jsonschema#/hex_number_4d",
"$comment": "Deprecated: use device_version instead" "$comment": "Deprecated: use device_version instead"
}, },
"device_version": {"$ref": "qmk.definitions.v1#/bcd_version"}, "device_version": {"$ref": "./definitions.jsonschema#/bcd_version"},
"force_nkro": {"type": "boolean"}, "force_nkro": {
"pid": {"$ref": "qmk.definitions.v1#/hex_number_4d"}, "type": "boolean",
"vid": {"$ref": "qmk.definitions.v1#/hex_number_4d"}, "$comment": "Deprecated: use host.default.nkro instead"
"max_power": {"$ref": "qmk.definitions.v1#/unsigned_int"},
},
"pid": {"$ref": "./definitions.jsonschema#/hex_number_4d"},
"vid": {"$ref": "./definitions.jsonschema#/hex_number_4d"},
"max_power": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"no_startup_check": {"type": "boolean"}, "no_startup_check": {"type": "boolean"},
"polling_interval": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, "polling_interval": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
"shared_endpoint": { "shared_endpoint": {
"type": "object", "type": "object",
"additionalProperties": false, "additionalProperties": false,
@ -952,7 +983,7 @@
"mouse": {"type": "boolean"} "mouse": {"type": "boolean"}
} }
}, },
"suspend_wakeup_delay": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "suspend_wakeup_delay": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"wait_for_enumeration": {"type": "boolean"} "wait_for_enumeration": {"type": "boolean"}
} }
}, },
@ -960,9 +991,9 @@
"type": "object", "type": "object",
"additionalProperties": false, "additionalProperties": false,
"properties": { "properties": {
"keys_per_scan": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, "keys_per_scan": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
"tap_keycode_delay": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "tap_keycode_delay": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"tap_capslock_delay": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "tap_capslock_delay": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"locking": { "locking": {
"type": "object", "type": "object",
"additionalProperties": false, "additionalProperties": false,
@ -977,10 +1008,10 @@
"type": "object", "type": "object",
"additionalProperties": false, "additionalProperties": false,
"properties": { "properties": {
"esc_output": {"$ref": "qmk.definitions.v1#/mcu_pin"}, "esc_output": {"$ref": "./definitions.jsonschema#/mcu_pin"},
"esc_input": {"$ref": "qmk.definitions.v1#/mcu_pin"}, "esc_input": {"$ref": "./definitions.jsonschema#/mcu_pin"},
"led": {"$ref": "qmk.definitions.v1#/mcu_pin"}, "led": {"$ref": "./definitions.jsonschema#/mcu_pin"},
"speaker": {"$ref": "qmk.definitions.v1#/mcu_pin"} "speaker": {"$ref": "./definitions.jsonschema#/mcu_pin"}
} }
}, },
"ws2812": { "ws2812": {
@ -991,10 +1022,10 @@
"type": "string", "type": "string",
"enum": ["bitbang", "custom", "i2c", "pwm", "spi", "vendor"] "enum": ["bitbang", "custom", "i2c", "pwm", "spi", "vendor"]
}, },
"pin": {"$ref": "qmk.definitions.v1#/mcu_pin"}, "pin": {"$ref": "./definitions.jsonschema#/mcu_pin"},
"rgbw": {"type": "boolean"}, "rgbw": {"type": "boolean"},
"i2c_address": {"$ref": "qmk.definitions.v1#/hex_number_2d"}, "i2c_address": {"$ref": "./definitions.jsonschema#/hex_number_2d"},
"i2c_timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"} "i2c_timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"}
} }
} }
} }

View File

@ -30,10 +30,10 @@
"keycodes": { "keycodes": {
"type": "object", "type": "object",
"propertyNames": { "propertyNames": {
"$ref": "qmk.definitions.v1#/hex_number_4d" "$ref": "./definitions.jsonschema#/hex_number_4d"
}, },
"additionalProperties": { "additionalProperties": {
"type": "object", // use 'qmk.definitions.v1#/keycode_decl' when problem keycodes are removed "type": "object", // use './definitions.jsonschema#/keycode_decl' when problem keycodes are removed
"required": [ "required": [
"key" "key"
], ],

View File

@ -10,10 +10,10 @@
"minLength": 1, "minLength": 1,
"pattern": "^[a-z][0-9a-z_]*$" "pattern": "^[a-z][0-9a-z_]*$"
}, },
"host_language": {"$ref": "qmk.definitions.v1#/text_identifier"}, "host_language": {"$ref": "./definitions.jsonschema#/text_identifier"},
"keyboard": {"$ref": "qmk.definitions.v1#/text_identifier"}, "keyboard": {"$ref": "./definitions.jsonschema#/text_identifier"},
"keymap": {"$ref": "qmk.definitions.v1#/text_identifier"}, "keymap": {"$ref": "./definitions.jsonschema#/text_identifier"},
"layout": {"$ref": "qmk.definitions.v1#/layout_macro"}, "layout": {"$ref": "./definitions.jsonschema#/layout_macro"},
"layers": { "layers": {
"type": "array", "type": "array",
"items": { "items": {
@ -55,11 +55,11 @@
"keycodes": { "keycodes": {
"type": "array", "type": "array",
"items": { "items": {
"$ref": "qmk.definitions.v1#/text_identifier" "$ref": "./definitions.jsonschema#/text_identifier"
} }
}, },
"duration": { "duration": {
"$ref": "qmk.definitions.v1#/unsigned_int" "$ref": "./definitions.jsonschema#/unsigned_int"
} }
} }
} }
@ -67,10 +67,16 @@
} }
} }
}, },
"keycodes": {"$ref": "qmk.definitions.v1#/keycode_decl_array"}, "keycodes": {"$ref": "./definitions.jsonschema#/keycode_decl_array"},
"config": {"$ref": "qmk.keyboard.v1"}, "config": {"$ref": "./keyboard.jsonschema#"},
"notes": { "notes": {
"type": "string" "type": "string"
},
"modules": {
"type": "array",
"items": {
"type": "string"
}
} }
} }
} }

View File

@ -8,7 +8,7 @@
], ],
"properties": { "properties": {
"userspace_version": { "userspace_version": {
"type": "string", "type": "string"
}, }
} }
} }

View File

@ -6,10 +6,10 @@
"definitions": { "definitions": {
"build_target": { "build_target": {
"oneOf": [ "oneOf": [
{"$ref": "qmk.definitions.v1#/keyboard_keymap_tuple"}, {"$ref": "./definitions.jsonschema#/keyboard_keymap_tuple"},
{"$ref": "qmk.definitions.v1#/json_file_path"} {"$ref": "./definitions.jsonschema#/json_file_path"}
] ]
}, }
}, },
"required": [ "required": [
"userspace_version", "userspace_version",

View File

@ -6,11 +6,11 @@
"definitions": { "definitions": {
"build_target": { "build_target": {
"oneOf": [ "oneOf": [
{"$ref": "qmk.definitions.v1#/keyboard_keymap_tuple"}, {"$ref": "./definitions.jsonschema#/keyboard_keymap_tuple"},
{"$ref": "qmk.definitions.v1#/keyboard_keymap_env"}, {"$ref": "./definitions.jsonschema#/keyboard_keymap_env"},
{"$ref": "qmk.definitions.v1#/json_file_path"} {"$ref": "./definitions.jsonschema#/json_file_path"}
] ]
}, }
}, },
"required": [ "required": [
"userspace_version", "userspace_version",

View File

@ -14,8 +14,6 @@
}, },
"features": { "features": {
"bootmagic": true, "bootmagic": true,
"command": false,
"console": false,
"extrakey": true, "extrakey": true,
"mousekey": true, "mousekey": true,
"nkro": true "nkro": true

135
docs/ChangeLog/20250223.md Normal file
View File

@ -0,0 +1,135 @@
# QMK Breaking Changes - 2025 February 23 Changelog
## Notable Features
### Community Modules ([#24848](https://github.com/qmk/qmk_firmware/pull/24848))
Community Modules are a feature within QMK which allows code to be implemented by third parties, making it available for other people to import into their own builds.
These modules can provide implementations which override or enhance normal QMK processing; initialization, key processing, suspend, and shutdown are some of the provided hooks which modules may currently implement.
See the [Community Modules documentation](../features/community_modules) for more information, including the full list of available hooks.
First-class support for [External Userspace](../newbs_external_userspace) is included out of the box, so there's even more reason to take the plunge and convert your keymap builds to a userspace repository!
::: tip
An example with a new keycode and some debugging information in the QMK repository [lives here](https://github.com/qmk/qmk_firmware/tree/master/modules/qmk/hello_world), and a community module port of [getreuer's SOCD Cleaner](https://getreuer.info/posts/keyboards/socd-cleaner/) can be found in [tzarc's modules repo](https://github.com/tzarc/qmk_modules).
:::
### Chordal Hold ([#24560](https://github.com/qmk/qmk_firmware/pull/24560))
Chordal Hold implements, by default, an "opposite hands" rule. Suppose a tap-hold key is pressed and then, before the tapping term, another key is pressed. With Chordal Hold, the tap-hold key is settled as tapped if the two keys are on the same hand.
Chordal Hold may be useful to avoid accidental modifier activation with mod-taps, particularly in rolled keypresses when using home row mods.
See the [Chordal Hold documentation](../tap_hold#chordal-hold) for more information.
## Changes Requiring User Action
### Updated Keyboard Codebases
| Old Keyboard Name | New Keyboard Name |
|-------------------------|-----------------------------|
| cxt_studio | cxt_studio/12e4 |
| ergodox_stm32 | handwired/ergodox_stm32 |
| ploopyco/mouse | ploopyco/mouse/rev1_002 |
| ploopyco/trackball/rev1 | ploopyco/trackball/rev1_004 |
| ymdk/id75 | ymdk/id75/f103 |
## Deprecation Notices
In line with the [notice period](../support_deprecation_policy#how-much-advance-notice-will-be-given), deprecation notices for larger items are listed here.
### DEFAULT_FOLDER removal ([#24836](https://github.com/qmk/qmk_firmware/pull/24836))
`DEFAULT_FOLDER` was originally introduced to work around limitations within the build system.
Parent folders containing common configuration would create invalid build targets.
With the introduction of [`keyboard.json`](./20240526#keyboard-json) as a configuration file, the build system now has a consistent method to detect build targets.
The `DEFAULT_FOLDER` functionality is now redundant and the intent is for `rules.mk` to become pure configuration.
Backwards compatibility of build targets has been maintained where possible.
## Full changelist
Core:
* Chaining OSL and MO ([#23065](https://github.com/qmk/qmk_firmware/pull/23065))
* Add extra keymap for EurKEY layout ([#24241](https://github.com/qmk/qmk_firmware/pull/24241))
* Add leader_add_user callback ([#24266](https://github.com/qmk/qmk_firmware/pull/24266))
* always return audio pin to 0 on ARM ([#24503](https://github.com/qmk/qmk_firmware/pull/24503))
* Update Starlight matrix effects ([#24521](https://github.com/qmk/qmk_firmware/pull/24521))
* Refactor Hue Breathing matrix effect with runner ([#24525](https://github.com/qmk/qmk_firmware/pull/24525))
* Ensure timer_read() is safe to call from interrupt handlers on ARM ([#24529](https://github.com/qmk/qmk_firmware/pull/24529))
* Update Raindrops effect to respect LED range limits ([#24531](https://github.com/qmk/qmk_firmware/pull/24531))
* Add Chordal Hold, an "opposite hands rule" tap-hold option similar to Achordion, Bilateral Combinations. ([#24560](https://github.com/qmk/qmk_firmware/pull/24560))
* Azoteq - improve I2C behaviour while polling. ([#24611](https://github.com/qmk/qmk_firmware/pull/24611))
* macOS install: remove bad ARM toolchains ([#24637](https://github.com/qmk/qmk_firmware/pull/24637))
* small refactoring of TIMER_DIFF ([#24678](https://github.com/qmk/qmk_firmware/pull/24678))
* Subscript alef correction ([#24707](https://github.com/qmk/qmk_firmware/pull/24707))
* Created SH1107 driver for quantum painter ([#24724](https://github.com/qmk/qmk_firmware/pull/24724))
* [CI] Regenerate Files ([#24772](https://github.com/qmk/qmk_firmware/pull/24772))
* Patch up issue for inverted complementary output on Backlight ([#24794](https://github.com/qmk/qmk_firmware/pull/24794))
* Patch up issue when compile with APA102 driver ([#24800](https://github.com/qmk/qmk_firmware/pull/24800))
* Consolidate send_string implementations. ([#24817](https://github.com/qmk/qmk_firmware/pull/24817))
* Consolidate timer_elapsed implementations ([#24830](https://github.com/qmk/qmk_firmware/pull/24830))
* `i2c_master`: remove deprecated functions ([#24832](https://github.com/qmk/qmk_firmware/pull/24832))
* Resolve keyboard_aliases when processing keyboard make targets ([#24834](https://github.com/qmk/qmk_firmware/pull/24834))
* LED drivers: remove deprecated defines ([#24837](https://github.com/qmk/qmk_firmware/pull/24837))
* `ferris/0_1`: update I2C API usage ([#24839](https://github.com/qmk/qmk_firmware/pull/24839))
* Unify i2c_master headers ([#24846](https://github.com/qmk/qmk_firmware/pull/24846))
* Community modules ([#24848](https://github.com/qmk/qmk_firmware/pull/24848))
* Relocate base WS2812 code ([#24850](https://github.com/qmk/qmk_firmware/pull/24850))
* Unify UART headers ([#24855](https://github.com/qmk/qmk_firmware/pull/24855))
* Unify spi_master headers ([#24857](https://github.com/qmk/qmk_firmware/pull/24857))
* Invoke `process_record_via` after `_user`/`_kb` have a chance to handle it. ([#24879](https://github.com/qmk/qmk_firmware/pull/24879))
CLI:
* Extend lint to reject 'blank' files ([#23994](https://github.com/qmk/qmk_firmware/pull/23994))
* `qmk docs`: restore `--port` and `--browser` arguments ([#24623](https://github.com/qmk/qmk_firmware/pull/24623))
* Update via2json layout macro searching ([#24640](https://github.com/qmk/qmk_firmware/pull/24640))
* Change `new-keymap` keymap name prompt ([#24701](https://github.com/qmk/qmk_firmware/pull/24701))
* default_keyboard.h generation tweaks ([#24715](https://github.com/qmk/qmk_firmware/pull/24715))
* Ensure `qmk flash` rejects invalid files for uf2 compatible bootloaders ([#24802](https://github.com/qmk/qmk_firmware/pull/24802))
* Reject readme dummy content ([#24913](https://github.com/qmk/qmk_firmware/pull/24913))
Submodule updates:
* chibios: usb_main: remove OTG sof workaround ([#24259](https://github.com/qmk/qmk_firmware/pull/24259))
* Update ChibiOS to latest stable branch. ([#24651](https://github.com/qmk/qmk_firmware/pull/24651))
* Update ChibiOS `stable_21.11.x`. ([#24714](https://github.com/qmk/qmk_firmware/pull/24714))
* Update ChibiOS-Contrib. ([#24803](https://github.com/qmk/qmk_firmware/pull/24803))
Keyboards:
* refactor: move ymdk/id75 to revision ([#24590](https://github.com/qmk/qmk_firmware/pull/24590))
* skyloong/gk61: Remove overriding of core keycode behaviour ([#24655](https://github.com/qmk/qmk_firmware/pull/24655))
* moky/moky88: Remove use of deprecated defines ([#24656](https://github.com/qmk/qmk_firmware/pull/24656))
* Updating Promenade keyboard (Missing keys in matrix, other minor changes to keymap) ([#24705](https://github.com/qmk/qmk_firmware/pull/24705))
* Moving cxt_studio keyboard to own folder ([#24748](https://github.com/qmk/qmk_firmware/pull/24748))
* Add CXT Studio 12E3 keyboard ([#24749](https://github.com/qmk/qmk_firmware/pull/24749))
* Add Silakka54 keyboard ([#24757](https://github.com/qmk/qmk_firmware/pull/24757))
* Add more layout for skiller_sgk50_s4 ([#24784](https://github.com/qmk/qmk_firmware/pull/24784))
* Add watchdog service to RGBKB Sol 3 ([#24786](https://github.com/qmk/qmk_firmware/pull/24786))
* Migrate some DEFAULT_FOLDER to keyboard_aliases.hjson ([#24835](https://github.com/qmk/qmk_firmware/pull/24835))
* Remove DEFAULT_FOLDER where keyboard aliases already exists ([#24838](https://github.com/qmk/qmk_firmware/pull/24838))
* Migrate some DEFAULT_FOLDER to keyboard_aliases.hjson ([#24845](https://github.com/qmk/qmk_firmware/pull/24845))
* Update for 'A-JAZZ AKC084' ('A-JAZZ AKP846') ([#24868](https://github.com/qmk/qmk_firmware/pull/24868))
* handwired/xealous - Remove DEFAULT_FOLDER ([#24877](https://github.com/qmk/qmk_firmware/pull/24877))
* Updates to Ploopy Classic, Mouse, and Thumb for RP2040 hardware upgrade ([#24880](https://github.com/qmk/qmk_firmware/pull/24880))
* Move Ergodox STM32 to handwired folder ([#24903](https://github.com/qmk/qmk_firmware/pull/24903))
* Remove readme dummy content ([#24912](https://github.com/qmk/qmk_firmware/pull/24912))
* Migrate some DEFAULT_FOLDER to keyboard_aliases.hjson ([#24915](https://github.com/qmk/qmk_firmware/pull/24915))
* Migrate some DEFAULT_FOLDER to keyboard_aliases.hjson ([#24938](https://github.com/qmk/qmk_firmware/pull/24938))
Keyboard fixes:
* Fix up CI with `DEFAULT_FOLDER`. ([#24842](https://github.com/qmk/qmk_firmware/pull/24842))
* rgbkb/pan - Remove invalid build target ([#24844](https://github.com/qmk/qmk_firmware/pull/24844))
Others:
* Formally deprecate DEFAULT_FOLDER ([#24836](https://github.com/qmk/qmk_firmware/pull/24836))
* Correct I2C API reference ([#24840](https://github.com/qmk/qmk_firmware/pull/24840))
Bugs:
* Retro Tapping Re-Write; Key Roll Fix ([#23641](https://github.com/qmk/qmk_firmware/pull/23641))
* Fix Quantum Painter compiliation issues with heavy optimization ([#24667](https://github.com/qmk/qmk_firmware/pull/24667))
* Bugfix and update for AT32F415 ([#24807](https://github.com/qmk/qmk_firmware/pull/24807))
* Fix for Chordal Hold: stuck mods when mod-taps are pressed in a stuttered sequence. ([#24878](https://github.com/qmk/qmk_firmware/pull/24878))
* fix EEPROM driver for STM32L0/1 cat.1 devices ([#24928](https://github.com/qmk/qmk_firmware/pull/24928))

299
docs/ChangeLog/20250525.md Normal file
View File

@ -0,0 +1,299 @@
# QMK Breaking Changes - 2025 May 25 Changelog
## Notable Features
### Flow Tap ([#25125](https://github.com/qmk/qmk_firmware/pull/25125))
Adds Flow Tap as a core tap-hold option to disable HRMs during fast typing, aka Global Quick Tap, Require Prior Idle.
Flow Tap modifies mod-tap MT and layer-tap LT keys such that when pressed within a short timeout of the preceding key, the tapping behavior is triggered. It basically disables the hold behavior during fast typing, creating a "flow of taps." It also helps to reduce the input lag of tap-hold keys during fast typing, since the tapped behavior is sent immediately.
See the [Flow Tap documentation](../tap_hold#flow-tap) for more information.
### Community Modules `1.1.1` ([#25050](https://github.com/qmk/qmk_firmware/pull/25050), [#25187](https://github.com/qmk/qmk_firmware/pull/25187))
Version `1.1.1` introduces support for module defined RGB matrix effects and indicator callbacks, as well as pointing and layer state callbacks.
See the [Community Modules documentation](../features/community_modules) for more information, including the full list of available hooks.
## Changes Requiring User Action
### Updated Keyboard Codebases
| Old Keyboard Name | New Keyboard Name |
|------------------------|----------------------|
| chew | chew/split |
| deemen17/de60fs | deemen17/de60/r1 |
| keyten/kt60hs_t | keyten/kt60hs_t/v1 |
| plywrks/ply8x | plywrks/ply8x/solder |
| rookiebwoy/late9/rev1 | ivndbt/late9/rev1 |
| rookiebwoy/neopad/rev1 | ivndbt/neopad/rev1 |
## Deprecation Notices
In line with the [notice period](../support_deprecation_policy#how-much-advance-notice-will-be-given), deprecation notices for larger items are listed here.
### Deprecation of `qmk generate-compilation-database` ([#25237](https://github.com/qmk/qmk_firmware/pull/25237))
This command has been deprecated as it cannot take into account configurables such as [converters](/feature_converters) or environment variables normally specified on the command line; please use the `--compiledb` flag with `qmk compile` instead.
### Deprecation of `usb.force_nkro`/`FORCE_NKRO` ([#25262](https://github.com/qmk/qmk_firmware/pull/25262))
Unpicking the assumption that only USB can do NKRO, forcing of NKRO on every boot has been deprecated. As this setting persists, it produces unnecessary user confusion when the various NKRO keycodes (for example `NK_TOGG`) do not behave as expected.
The new defaults can be configured in the following ways:
:::::tabs
==== keyboard.json
```json [keyboard.json]
{
"host": { // [!code focus]
"default": { // [!code focus]
"nkro": true // [!code focus]
} // [!code focus]
} // [!code focus]
}
```
==== keymap.json
```json [keymap.json]
{
"config": {
"host": { // [!code focus]
"default": { // [!code focus]
"nkro": true // [!code focus]
} // [!code focus]
} // [!code focus]
}
}
```
==== config.h
```c [config.h]
#pragma once
#define NKRO_DEFAULT_ON true // [!code focus]
```
:::::
The deprecated options will be removed in a future breaking changes cycle.
### `CTPC`/`CONVERT_TO_PROTON_C` removal ([#25111](https://github.com/qmk/qmk_firmware/pull/25111))
Deprecated build options `CTPC` and `CONVERT_TO_PROTON_C` have been removed. Users should of these should migrate to `CONVERT_TO=proton_c`.
see the [Converters Feature](../feature_converters) documentation for more information.
### `DEFAULT_FOLDER` removal ([#23281](https://github.com/qmk/qmk_firmware/pull/23281))
`DEFAULT_FOLDER` was originally introduced to work around limitations within the build system.
Parent folders containing common configuration would create invalid build targets.
With the introduction of [`keyboard.json`](./20240526#keyboard-json) as a configuration file, the build system now has a consistent method to detect build targets.
The `DEFAULT_FOLDER` functionality is now redundant and the intent is for `rules.mk` to become pure configuration.
Backwards compatibility of build targets has been maintained where possible.
### Converter `Pin Compatible` updates ([#20330](https://github.com/qmk/qmk_firmware/pull/20330))
Converter support will be further limited to only function if a keyboard declares that is is compatible.
This can be configured in the following ways:
:::::tabs
==== keyboard.json
```json [keyboard.json]
{
"development_board": "promicro", // [!code focus]
}
```
==== rules.mk
```make [rules.mk]
PIN_COMPATIBLE = promicro
```
:::::
see the [Converters Feature](../feature_converters) documentation for more information.
### Deprecation of `encoder_update_{kb|user}`
These callbacks are now considered end-of-life and will be removed over the next breaking changes cycle, ending August 2025. PRs containing these callbacks will be asked to change to use [encoder mapping](/features/encoders#encoder-map).
`ENCODER_MAP_ENABLE` will subsequently be changed to "default-on" when encoders are enabled, and future breaking changes cycles will remove this flag entirely.
To migrate usage of `encoder_update_user` to encoder map you'll need to handle all of the following changes in your `keymap.c`:
:::::tabs
=== 1. Add keycode definitions
Define new keycodes:
```c
enum {
MY_ENCODER_LEFT = QK_USER, // [!code focus]
MY_ENCODER_RIGHT, // [!code focus]
};
```
=== 2. Add encoder mapping
Add the keycodes to a new encoder map (optionally with transparent layers above, if you want identical functionality of layer-independence):
```c
#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[0] = { ENCODER_CCW_CW(MY_ENCODER_LEFT, MY_ENCODER_RIGHT) }, // [!code focus]
[1] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, // [!code focus]
[2] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, // [!code focus]
[3] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, // [!code focus]
};
#endif
```
=== 3. Add keycode processing
Handle the new keycodes within `process_record_user`, much like any other keycode in your keymap:
```c
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case MY_ENCODER_LEFT: // [!code focus]
if (record->event.pressed) { // [!code focus]
// Add the same code you had in your `encoder_update_user` for the left-rotation code // [!code focus]
} // [!code focus]
return false; // Skip all further processing of this keycode // [!code focus]
case MY_ENCODER_RIGHT: // [!code focus]
if (record->event.pressed) { // [!code focus]
// Add the same code you had in your `encoder_update_user` for the right-rotation code // [!code focus]
} // [!code focus]
return false; // Skip all further processing of this keycode // [!code focus]
}
}
```
=== 4. Remove old code
Remove your implementation of `encoder_update_user` from your `keymap.c`.
::::::
If your board has multiple encoders, each encoder will need its own pair of keycodes defined as per above.
## Full changelist
Core:
* Non-volatile memory data repository pattern ([#24356](https://github.com/qmk/qmk_firmware/pull/24356))
* High resolution scrolling (without feature report parsing) ([#24423](https://github.com/qmk/qmk_firmware/pull/24423))
* Implement battery level interface ([#24666](https://github.com/qmk/qmk_firmware/pull/24666))
* get_keycode_string(): function to format keycodes as strings, for more readable debug logging. ([#24787](https://github.com/qmk/qmk_firmware/pull/24787))
* [Cleanup] Handling of optional `*.mk` files ([#24952](https://github.com/qmk/qmk_firmware/pull/24952))
* Add EOL to non-keyboard files ([#24990](https://github.com/qmk/qmk_firmware/pull/24990))
* use `keycode_string` in unit tests ([#25042](https://github.com/qmk/qmk_firmware/pull/25042))
* Add additional hooks for Community modules ([#25050](https://github.com/qmk/qmk_firmware/pull/25050))
* Remove `CTPC`/`CONVERT_TO_PROTON_C` options ([#25111](https://github.com/qmk/qmk_firmware/pull/25111))
* Flow Tap tap-hold option to disable HRMs during fast typing (aka Global Quick Tap, Require Prior Idle). ([#25125](https://github.com/qmk/qmk_firmware/pull/25125))
* Remove `bluefruit_le_read_battery_voltage` function ([#25129](https://github.com/qmk/qmk_firmware/pull/25129))
* Avoid duplication in generated community modules `rules.mk` ([#25135](https://github.com/qmk/qmk_firmware/pull/25135))
* [chore]: move and rename mouse/scroll min/max defines ([#25141](https://github.com/qmk/qmk_firmware/pull/25141))
* Ignore the Layer Lock key in Repeat Key and Caps Word. ([#25171](https://github.com/qmk/qmk_firmware/pull/25171))
* Allow for disabling EEPROM subsystem entirely. ([#25173](https://github.com/qmk/qmk_firmware/pull/25173))
* Implement connection keycode logic ([#25176](https://github.com/qmk/qmk_firmware/pull/25176))
* Align ChibiOS `USB_WAIT_FOR_ENUMERATION` implementation ([#25184](https://github.com/qmk/qmk_firmware/pull/25184))
* Enable community modules to define LED matrix and RGB matrix effects. ([#25187](https://github.com/qmk/qmk_firmware/pull/25187))
* Bind Bluetooth driver to `host_driver_t` ([#25199](https://github.com/qmk/qmk_firmware/pull/25199))
* Enhance Flow Tap to work better for rolls over multiple tap-hold keys. ([#25200](https://github.com/qmk/qmk_firmware/pull/25200))
* Remove force disable of NKRO when Bluetooth enabled ([#25201](https://github.com/qmk/qmk_firmware/pull/25201))
* [New Feature/Core] New RGB Matrix Animation "Starlight Smooth" ([#25203](https://github.com/qmk/qmk_firmware/pull/25203))
* Add battery changed callbacks ([#25207](https://github.com/qmk/qmk_firmware/pull/25207))
* Generate versions to keycode headers ([#25219](https://github.com/qmk/qmk_firmware/pull/25219))
* Add raw_hid support to host driver ([#25255](https://github.com/qmk/qmk_firmware/pull/25255))
* Deprecate `usb.force_nkro`/`FORCE_NKRO` ([#25262](https://github.com/qmk/qmk_firmware/pull/25262))
* [Chore] use {rgblight,rgb_matrix}_hsv_to_rgb overrides ([#25271](https://github.com/qmk/qmk_firmware/pull/25271))
* Remove outdated `nix` support due to bit-rot. ([#25280](https://github.com/qmk/qmk_firmware/pull/25280))
CLI:
* Align to latest CLI dependencies ([#24553](https://github.com/qmk/qmk_firmware/pull/24553))
* Exclude external userspace from lint checking ([#24680](https://github.com/qmk/qmk_firmware/pull/24680))
* [Modules] Provide access to current path in `rules.mk`. ([#25061](https://github.com/qmk/qmk_firmware/pull/25061))
* Add "license" field to Community Module JSON schema. ([#25085](https://github.com/qmk/qmk_firmware/pull/25085))
* Prompt for converter when creating new keymap ([#25116](https://github.com/qmk/qmk_firmware/pull/25116))
* Extend lint checks to reject duplication of defaults ([#25149](https://github.com/qmk/qmk_firmware/pull/25149))
* Add lint warning for empty url ([#25182](https://github.com/qmk/qmk_firmware/pull/25182))
* Deprecate `qmk generate-compilation-database`. ([#25237](https://github.com/qmk/qmk_firmware/pull/25237))
* Use relative paths for schemas, instead of $id. Enables VScode validation. ([#25251](https://github.com/qmk/qmk_firmware/pull/25251))
Submodule updates:
* STM32G0x1 support ([#24301](https://github.com/qmk/qmk_firmware/pull/24301))
* Update develop branch to Pico SDK 1.5.1 ([#25178](https://github.com/qmk/qmk_firmware/pull/25178))
* Add `compiler_support.h` ([#25274](https://github.com/qmk/qmk_firmware/pull/25274))
Keyboards:
* add 75_(ansi|iso) Community Layouts to mechlovin/olly/octagon ([#22459](https://github.com/qmk/qmk_firmware/pull/22459))
* Add the plywrks ply8x hotswap variant. ([#23558](https://github.com/qmk/qmk_firmware/pull/23558))
* Add Community Layout support to daskeyboard4 ([#23884](https://github.com/qmk/qmk_firmware/pull/23884))
* New standard layout for Savage65 (65_ansi_blocker_tsangan_split_bs) ([#24690](https://github.com/qmk/qmk_firmware/pull/24690))
* Add Icebreaker keyboard ([#24723](https://github.com/qmk/qmk_firmware/pull/24723))
* Update Tractyl Manuform and add F405 (weact) variant ([#24764](https://github.com/qmk/qmk_firmware/pull/24764))
* Chew folders ([#24785](https://github.com/qmk/qmk_firmware/pull/24785))
* modelh: add prerequisites for via support ([#24932](https://github.com/qmk/qmk_firmware/pull/24932))
* Only configure `STM32_HSECLK` within `board.h` ([#25001](https://github.com/qmk/qmk_firmware/pull/25001))
* Allow LVGL onekey keymap to be able compile for other board ([#25005](https://github.com/qmk/qmk_firmware/pull/25005))
* Remove Sofle `rgb_default` keymap & tidy readme's ([#25010](https://github.com/qmk/qmk_firmware/pull/25010))
* Migrate remaining `split.soft_serial_pin` to `split.serial.pin` ([#25046](https://github.com/qmk/qmk_firmware/pull/25046))
* Update keymap for keycult 1800 ([#25070](https://github.com/qmk/qmk_firmware/pull/25070))
* Add kt60HS-T v2 PCB ([#25080](https://github.com/qmk/qmk_firmware/pull/25080))
* Refactor Deemen17 Works DE60 ([#25088](https://github.com/qmk/qmk_firmware/pull/25088))
* Rookiebwoy to ivndbt ([#25142](https://github.com/qmk/qmk_firmware/pull/25142))
* Remove duplication of RGB Matrix defaults ([#25146](https://github.com/qmk/qmk_firmware/pull/25146))
* ymdk/id75/rp2040 ([#25157](https://github.com/qmk/qmk_firmware/pull/25157))
* Remove duplication of RGBLight defaults ([#25169](https://github.com/qmk/qmk_firmware/pull/25169))
* Remove empty `url` fields ([#25181](https://github.com/qmk/qmk_firmware/pull/25181))
* Remove more duplication of defaults ([#25189](https://github.com/qmk/qmk_firmware/pull/25189))
* Remove `"console":false` from keyboards ([#25190](https://github.com/qmk/qmk_firmware/pull/25190))
* Remove `"command":false` from keyboards ([#25193](https://github.com/qmk/qmk_firmware/pull/25193))
* Remove redundant keyboard headers ([#25208](https://github.com/qmk/qmk_firmware/pull/25208))
* Add debounce to duplicated defaults check ([#25246](https://github.com/qmk/qmk_firmware/pull/25246))
* Remove duplicate of SPI default config from keyboards ([#25266](https://github.com/qmk/qmk_firmware/pull/25266))
* Resolve miscellaneous keyboard lint warnings ([#25268](https://github.com/qmk/qmk_firmware/pull/25268))
* Configure boards to use development_board - 0-9 ([#25287](https://github.com/qmk/qmk_firmware/pull/25287))
* Configure boards to use development_board - UVWXYZ ([#25288](https://github.com/qmk/qmk_firmware/pull/25288))
* Configure boards to use development_board - S ([#25293](https://github.com/qmk/qmk_firmware/pull/25293))
* Configure boards to use development_board - T ([#25294](https://github.com/qmk/qmk_firmware/pull/25294))
Keyboard fixes:
* Fix `boardsource/beiwagon` RGB Matrix coordinates ([#25018](https://github.com/qmk/qmk_firmware/pull/25018))
* amptrics/0422 - Prevent OOB in `update_leds_for_layer` ([#25209](https://github.com/qmk/qmk_firmware/pull/25209))
* salicylic_acid3/getta25 - Fix oled keymap ([#25295](https://github.com/qmk/qmk_firmware/pull/25295))
Others:
* Require 'x'/'y' properties for LED/RGB Matrix layout ([#24997](https://github.com/qmk/qmk_firmware/pull/24997))
* Align `new-keyboard` template to current standards ([#25191](https://github.com/qmk/qmk_firmware/pull/25191))
Bugs:
* Fix OS_DETECTION_KEYBOARD_RESET ([#25015](https://github.com/qmk/qmk_firmware/pull/25015))
* Fix outdated GPIO control function usage ([#25060](https://github.com/qmk/qmk_firmware/pull/25060))
* Cater for use of `__errno_r()` in ChibiOS syscalls.c with newer picolibc revisions ([#25121](https://github.com/qmk/qmk_firmware/pull/25121))
* Fixup eeconfig lighting reset. ([#25166](https://github.com/qmk/qmk_firmware/pull/25166))
* Fix for Flow Tap: fix handling of distinct taps and timer updates. ([#25175](https://github.com/qmk/qmk_firmware/pull/25175))
* Minimise force-included files ([#25194](https://github.com/qmk/qmk_firmware/pull/25194))
* Ensure `qmk_userspace_paths` maintains detected order ([#25204](https://github.com/qmk/qmk_firmware/pull/25204))
* Resolve alias for `qmk new-keymap` keyboard prompts ([#25210](https://github.com/qmk/qmk_firmware/pull/25210))
* gcc15 AVR compilation fixes ([#25238](https://github.com/qmk/qmk_firmware/pull/25238))
* Fix typos introduced by PR #25050 ([#25250](https://github.com/qmk/qmk_firmware/pull/25250))
* Fix Wear Leveling compilation ([#25254](https://github.com/qmk/qmk_firmware/pull/25254))
* Remove more USB only branches from NKRO handling ([#25263](https://github.com/qmk/qmk_firmware/pull/25263))
* [Fix] lib8tion: enable fixed scale8 and blend functions ([#25272](https://github.com/qmk/qmk_firmware/pull/25272))
* Fix tap_hold code blocks ([#25298](https://github.com/qmk/qmk_firmware/pull/25298))

View File

@ -21,7 +21,8 @@
{ "text": "Debugging QMK", "link": "/faq_debug" }, { "text": "Debugging QMK", "link": "/faq_debug" },
{ "text": "Keymap FAQ", "link": "/faq_keymap" }, { "text": "Keymap FAQ", "link": "/faq_keymap" },
{ "text": "Squeezing Space from AVR", "link": "/squeezing_avr" }, { "text": "Squeezing Space from AVR", "link": "/squeezing_avr" },
{ "text": "Glossary", "link": "/reference_glossary" } { "text": "Glossary", "link": "/reference_glossary" },
{ "text": "License Violations", "link": "/license_violations" }
] ]
}, },
{ {
@ -59,6 +60,7 @@
"items": [ "items": [
{ "text": "Customizing Functionality", "link": "/custom_quantum_functions" }, { "text": "Customizing Functionality", "link": "/custom_quantum_functions" },
{ "text": "Driver Installation with Zadig", "link": "/driver_installation_zadig" }, { "text": "Driver Installation with Zadig", "link": "/driver_installation_zadig" },
{ "text": "Community Modules", "link": "/features/community_modules" },
{ "text": "Keymap Overview", "link": "/keymap" }, { "text": "Keymap Overview", "link": "/keymap" },
{ {
"text": "Development Environments", "text": "Development Environments",
@ -205,7 +207,7 @@
{ "text": "My Pull Request Was Flagged", "link": "/breaking_changes_instructions" }, { "text": "My Pull Request Was Flagged", "link": "/breaking_changes_instructions" },
{ {
"text": "Most Recent ChangeLog", "text": "Most Recent ChangeLog",
"link": "/ChangeLog/20241124" "link": "/ChangeLog/20250525"
}, },
{ "text": "Past Breaking Changes", "link": "/breaking_changes_history" }, { "text": "Past Breaking Changes", "link": "/breaking_changes_history" },
{ "text": "Deprecation Policy", "link": "/support_deprecation_policy" } { "text": "Deprecation Policy", "link": "/support_deprecation_policy" }
@ -225,6 +227,7 @@
{ "text": "ADC Driver", "link": "/drivers/adc" }, { "text": "ADC Driver", "link": "/drivers/adc" },
{ "text": "APA102 Driver", "link": "/drivers/apa102" }, { "text": "APA102 Driver", "link": "/drivers/apa102" },
{ "text": "Audio Driver", "link": "/drivers/audio" }, { "text": "Audio Driver", "link": "/drivers/audio" },
{ "text": "Battery Driver", "link": "/drivers/battery" },
{ "text": "EEPROM Driver", "link": "/drivers/eeprom" }, { "text": "EEPROM Driver", "link": "/drivers/eeprom" },
{ "text": "Flash Driver", "link": "/drivers/flash" }, { "text": "Flash Driver", "link": "/drivers/flash" },
{ "text": "I2C Driver", "link": "/drivers/i2c" }, { "text": "I2C Driver", "link": "/drivers/i2c" },

View File

@ -10,25 +10,25 @@ Practically, this means QMK merges the `develop` branch into the `master` branch
## What has been included in past Breaking Changes? ## What has been included in past Breaking Changes?
* [2025 May 25](ChangeLog/20250525)
* [2025 Feb 23](ChangeLog/20250223)
* [2024 Nov 24](ChangeLog/20241124) * [2024 Nov 24](ChangeLog/20241124)
* [2024 Aug 25](ChangeLog/20240825)
* [2024 May 26](ChangeLog/20240526)
* [Older Breaking Changes](breaking_changes_history) * [Older Breaking Changes](breaking_changes_history)
## When is the next Breaking Change? ## When is the next Breaking Change?
The next Breaking Change is scheduled for February 23, 2025. The next Breaking Change is scheduled for Aug 31, 2025.
### Important Dates ### Important Dates
* 2024 Nov 24 - `develop` is tagged with a new release version. Each push to `master` is subsequently merged to `develop` by GitHub actions. * 2025 May 25 - `develop` is tagged with a new release version. Each push to `master` is subsequently merged to `develop` by GitHub actions.
* 2025 Jan 26 - `develop` closed to new PRs. * 2025 Aug 3 - `develop` closed to new PRs.
* 2025 Jan 26 - Call for testers. * 2025 Aug 3 - Call for testers.
* 2025 Feb 9 - Last day for merges -- after this point `develop` is locked for testing and accepts only bugfixes * 2025 Aug 17 - Last day for merges -- after this point `develop` is locked for testing and accepts only bugfixes
* 2025 Feb 16 - `develop` is locked, only critical bugfix PRs merged. * 2025 Aug 24 - `develop` is locked, only critical bugfix PRs merged.
* 2024 Nov 21 - `master` is locked, no PRs merged. * 2025 Aug 29 - `master` is locked, no PRs merged.
* 2025 Feb 23 - Merge `develop` to `master`. * 2025 Aug 31 - Merge `develop` to `master`.
* 2025 Feb 23 - `master` is unlocked. PRs can be merged again. * 2025 Aug 31 - `master` is unlocked. PRs can be merged again.
## What changes will be included? ## What changes will be included?

View File

@ -2,6 +2,8 @@
This page links to all previous changelogs from the QMK Breaking Changes process. This page links to all previous changelogs from the QMK Breaking Changes process.
* [2025 May 25](ChangeLog/20250525) - version 0.29.0
* [2025 Feb 23](ChangeLog/20250223) - version 0.28.0
* [2024 Nov 24](ChangeLog/20241124) - version 0.27.0 * [2024 Nov 24](ChangeLog/20241124) - version 0.27.0
* [2024 Aug 25](ChangeLog/20240825) - version 0.26.0 * [2024 Aug 25](ChangeLog/20240825) - version 0.26.0
* [2024 May 26](ChangeLog/20240526) - version 0.25.0 * [2024 May 26](ChangeLog/20240526) - version 0.25.0

View File

@ -6,7 +6,7 @@ The QMK CLI (command line interface) makes building and working with QMK keyboar
### Requirements {#requirements} ### Requirements {#requirements}
QMK requires Python 3.7 or greater. We try to keep the number of requirements small but you will also need to install the packages listed in [`requirements.txt`](https://github.com/qmk/qmk_firmware/blob/master/requirements.txt). These are installed automatically when you install the QMK CLI. QMK requires Python 3.9 or greater. We try to keep the number of requirements small but you will also need to install the packages listed in [`requirements.txt`](https://github.com/qmk/qmk_firmware/blob/master/requirements.txt). These are installed automatically when you install the QMK CLI.
### Install Using Homebrew (macOS, some Linux) {#install-using-homebrew} ### Install Using Homebrew (macOS, some Linux) {#install-using-homebrew}
@ -18,9 +18,21 @@ export QMK_HOME='~/qmk_firmware' # Optional, set the location for `qmk_firmware`
qmk setup # This will clone `qmk/qmk_firmware` and optionally set up your build environment qmk setup # This will clone `qmk/qmk_firmware` and optionally set up your build environment
``` ```
### Install Using uv {#install-using-uv}
If you have installed [uv](https://docs.astral.sh/uv/), the QMK CLI can be installed and managed as a uv tool:
```
uv tool install qmk
export QMK_HOME='~/qmk_firmware' # Optional, set the location for `qmk_firmware`
qmk setup # This will clone `qmk/qmk_firmware` and optionally set up your build environment
```
This installation can be updated via `uv tool upgrade qmk`. See [Upgrading tools](https://docs.astral.sh/uv/guides/tools/#upgrading-tools) for more information.
### Install Using pip {#install-using-easy_install-or-pip} ### Install Using pip {#install-using-easy_install-or-pip}
If your system is not listed above you can install QMK manually. First ensure that you have Python 3.7 (or later) installed and have installed pip. Then install QMK with this command: If your system is not listed above you can install QMK manually. First ensure that you have Python 3.9 (or later) installed and have installed pip. Then install QMK with this command:
``` ```
python3 -m pip install qmk python3 -m pip install qmk

View File

@ -17,12 +17,12 @@ qmk compile [-c] <configuratorExport.json>
**Usage for Keymaps**: **Usage for Keymaps**:
``` ```
qmk compile [-c] [-e <var>=<value>] [-j <num_jobs>] -kb <keyboard_name> -km <keymap_name> qmk compile [-c] [-e <var>=<value>] [-j <num_jobs>] [--compiledb] -kb <keyboard> -km <keymap>
``` ```
**Usage in Keyboard Directory**: **Usage in Keyboard Directory**:
Must be in keyboard directory with a default keymap, or in keymap directory for keyboard, or supply one with `--keymap <keymap_name>` Must be in keyboard directory with a default keymap, or in keymap directory for keyboard, or supply one with `--keymap <keymap>`
``` ```
qmk compile qmk compile
``` ```
@ -30,7 +30,7 @@ qmk compile
**Usage for building all keyboards that support a specific keymap**: **Usage for building all keyboards that support a specific keymap**:
``` ```
qmk compile -kb all -km <keymap_name> qmk compile -kb all -km <keymap>
``` ```
**Example**: **Example**:
@ -62,7 +62,7 @@ $ qmk compile
Must be under `qmk_firmware/layouts/`, and in a keymap folder. Must be under `qmk_firmware/layouts/`, and in a keymap folder.
``` ```
qmk compile -kb <keyboard_name> qmk compile -kb <keyboard>
``` ```
**Example**: **Example**:
@ -77,11 +77,30 @@ $ qmk compile -kb dz60
It is possible to speed up compilation by adding the `-j`/`--parallel` flag. It is possible to speed up compilation by adding the `-j`/`--parallel` flag.
``` ```
qmk compile -j <num_jobs> -kb <keyboard_name> qmk compile -j <num_jobs> -kb <keyboard>
``` ```
The `num_jobs` argument determines the maximum number of jobs that can be used. Setting it to zero will enable parallel compilation without limiting the maximum number of jobs. The `num_jobs` argument determines the maximum number of jobs that can be used. Setting it to zero will enable parallel compilation without limiting the maximum number of jobs.
``` ```
qmk compile -j 0 -kb <keyboard_name> qmk compile -j 0 -kb <keyboard>
```
**Compilation Database**:
Creates a `compile_commands.json` file.
Does your IDE/editor use a language server but doesn't _quite_ find all the necessary include files? Do you hate red squigglies? Do you wish your editor could figure out `#include QMK_KEYBOARD_H`? You might need a [compilation database](https://clang.llvm.org/docs/JSONCompilationDatabase.html)! Compiling using this argument can create this for you.
**Example:**
```
$ cd ~/qmk_firmware/keyboards/gh60/satan/keymaps/colemak
$ qmk compile --compiledb
Ψ Making clean
Ψ Gathering build instructions from make ........
Ψ Found 63 compile commands
Ψ Writing build database to /Users/you/src/qmk_firmware/compile_commands.json
Ψ Compiling keymap with make ........
... build log continues ...
``` ```
## `qmk flash` ## `qmk flash`
@ -101,7 +120,7 @@ qmk flash [-bl <bootloader>] [-c] [-e <var>=<value>] [-j <num_jobs>] <configurat
**Usage for Keymaps**: **Usage for Keymaps**:
``` ```
qmk flash -kb <keyboard_name> -km <keymap_name> [-bl <bootloader>] [-c] [-e <var>=<value>] [-j <num_jobs>] qmk flash -kb <keyboard> -km <keymap_name> [-bl <bootloader>] [-c] [-e <var>=<value>] [-j <num_jobs>]
``` ```
**Usage for pre-compiled firmwares**: **Usage for pre-compiled firmwares**:
@ -694,52 +713,28 @@ qmk format-c
qmk format-c -b branch_name qmk format-c -b branch_name
``` ```
## `qmk generate-compilation-database`
**Usage**:
```
qmk generate-compilation-database [-kb KEYBOARD] [-km KEYMAP]
```
Creates a `compile_commands.json` file.
Does your IDE/editor use a language server but doesn't _quite_ find all the necessary include files? Do you hate red squigglies? Do you wish your editor could figure out `#include QMK_KEYBOARD_H`? You might need a [compilation database](https://clang.llvm.org/docs/JSONCompilationDatabase.html)! The qmk tool can build this for you.
This command needs to know which keyboard and keymap to build. It uses the same configuration options as the `qmk compile` command: arguments, current directory, and config files.
**Example:**
```
$ cd ~/qmk_firmware/keyboards/gh60/satan/keymaps/colemak
$ qmk generate-compilation-database
Ψ Making clean
Ψ Gathering build instructions from make -n gh60/satan:colemak
Ψ Found 50 compile commands
Ψ Writing build database to /Users/you/src/qmk_firmware/compile_commands.json
```
Now open your dev environment and live a squiggly-free life.
## `qmk docs` ## `qmk docs`
This command starts a local HTTP server which you can use for browsing or improving the docs. Default port is 5173. This command starts a local HTTP server which you can use for browsing or improving the docs, and provides live reload capability whilst editing. Default port is 8936.
Use the `-b`/`--browser` flag to automatically open the local webserver in your default browser.
This command requires `node` and `yarn` to be installed as prerequisites, and provides live reload capability whilst editing. Requires `node` and `yarn` to be installed as prerequisites.
**Usage**: **Usage**:
``` ```
usage: qmk docs [-h] usage: qmk docs [-h] [-b] [-p PORT]
options: options:
-h, --help show this help message and exit -h, --help show this help message and exit
-b, --browser Open the docs in the default browser.
-p, --port PORT Port number to use.
``` ```
## `qmk generate-docs` ## `qmk generate-docs`
This command allows you to generate QMK documentation locally. It can be uses for general browsing or improving the docs. This command generates QMK documentation for production.
Use the `-s`/`--serve` flag to also serve the static site once built. Default port is 4173. Use the `-s`/`--serve` flag to also serve the static site on port 4173 once built. Note that this does not provide live reloading; use `qmk docs` instead for development purposes.
This command requires `node` and `yarn` to be installed as prerequisites, and requires the operating system to support symlinks. This command requires `node` and `yarn` to be installed as prerequisites, and requires the operating system to support symlinks.
@ -882,3 +877,13 @@ Run single test:
``` ```
qmk test-c --test basic qmk test-c --test basic
``` ```
## `qmk generate-compilation-database`
**Usage**:
```
qmk generate-compilation-database [-kb KEYBOARD] [-km KEYMAP]
```
This command has been deprecated as it cannot take into account configurables such as [converters](/feature_converters) or environment variables normally specified on the command line; please use the `--compiledb` flag with `qmk compile` instead.

View File

@ -44,7 +44,7 @@ def hello(cli):
First we import the `cli` object from `milc`. This is how we interact with the user and control the script's behavior. We use `@cli.argument()` to define a command line flag, `--name`. This also creates a configuration variable named `hello.name` (and the corresponding `user.name`) which the user can set so they don't have to specify the argument. The `cli.subcommand()` decorator designates this function as a subcommand. The name of the subcommand will be taken from the name of the function. First we import the `cli` object from `milc`. This is how we interact with the user and control the script's behavior. We use `@cli.argument()` to define a command line flag, `--name`. This also creates a configuration variable named `hello.name` (and the corresponding `user.name`) which the user can set so they don't have to specify the argument. The `cli.subcommand()` decorator designates this function as a subcommand. The name of the subcommand will be taken from the name of the function.
Once inside our function we find a typical "Hello, World!" program. We use `cli.log` to access the underlying [Logger Object](https://docs.python.org/3.7/library/logging.html#logger-objects), whose behavior is user controllable. We also access the value for name supplied by the user as `cli.config.hello.name`. The value for `cli.config.hello.name` will be determined by looking at the `--name` argument supplied by the user, if not provided it will use the value in the `qmk.ini` config file, and if neither of those is provided it will fall back to the default supplied in the `cli.argument()` decorator. Once inside our function we find a typical "Hello, World!" program. We use `cli.log` to access the underlying [Logger Object](https://docs.python.org/3.9/library/logging.html#logger-objects), whose behavior is user controllable. We also access the value for name supplied by the user as `cli.config.hello.name`. The value for `cli.config.hello.name` will be determined by looking at the `--name` argument supplied by the user, if not provided it will use the value in the `qmk.ini` config file, and if neither of those is provided it will fall back to the default supplied in the `cli.argument()` decorator.
# User Interaction # User Interaction
@ -56,13 +56,13 @@ There are two main methods for outputting text in a subcommand- `cli.log` and `c
You can use special tokens to colorize your text, to make it easier to understand the output of your program. See [Colorizing Text](#colorizing-text) below. You can use special tokens to colorize your text, to make it easier to understand the output of your program. See [Colorizing Text](#colorizing-text) below.
Both of these methods support built-in string formatting using python's [printf style string format operations](https://docs.python.org/3.7/library/stdtypes.html#old-string-formatting). You can use tokens such as `%s` and `%d` within your text strings then pass the values as arguments. See our Hello, World program above for an example. Both of these methods support built-in string formatting using python's [printf style string format operations](https://docs.python.org/3.9/library/stdtypes.html#old-string-formatting). You can use tokens such as `%s` and `%d` within your text strings then pass the values as arguments. See our Hello, World program above for an example.
You should never use the format operator (`%`) directly, always pass values as arguments. You should never use the format operator (`%`) directly, always pass values as arguments.
### Logging (`cli.log`) ### Logging (`cli.log`)
The `cli.log` object gives you access to a [Logger Object](https://docs.python.org/3.7/library/logging.html#logger-objects). We have configured our log output to show the user a nice emoji for each log level (or the log level name if their terminal does not support unicode.) This way the user can tell at a glance which messages are most important when something goes wrong. The `cli.log` object gives you access to a [Logger Object](https://docs.python.org/3.9/library/logging.html#logger-objects). We have configured our log output to show the user a nice emoji for each log level (or the log level name if their terminal does not support unicode.) This way the user can tell at a glance which messages are most important when something goes wrong.
The default log level is `INFO`. If the user runs `qmk -v <subcommand>` the default log level will be set to `DEBUG`. The default log level is `INFO`. If the user runs `qmk -v <subcommand>` the default log level will be set to `DEBUG`.

View File

@ -2,7 +2,7 @@
Most of our style follows PEP8 with some local modifications to make things less nit-picky. Most of our style follows PEP8 with some local modifications to make things less nit-picky.
* We target Python 3.7 for compatibility with all supported platforms. * We target Python 3.9 for compatibility with all supported platforms.
* We indent using four (4) spaces (soft tabs) * We indent using four (4) spaces (soft tabs)
* We encourage liberal use of comments * We encourage liberal use of comments
* Think of them as a story describing the feature * Think of them as a story describing the feature
@ -317,7 +317,7 @@ At the time of this writing our tests are not very comprehensive. Looking at the
## Integration Tests ## Integration Tests
Integration tests can be found in `lib/python/qmk/tests/test_cli_commands.py`. This is where CLI commands are actually run and their overall behavior is verified. We use [`subprocess`](https://docs.python.org/3.7/library/subprocess.html#module-subprocess) to launch each CLI command and a combination of checking output and returncode to determine if the right thing happened. Integration tests can be found in `lib/python/qmk/tests/test_cli_commands.py`. This is where CLI commands are actually run and their overall behavior is verified. We use [`subprocess`](https://docs.python.org/3.9/library/subprocess.html#module-subprocess) to launch each CLI command and a combination of checking output and returncode to determine if the right thing happened.
## Unit Tests ## Unit Tests

View File

@ -140,8 +140,6 @@ If you define these options you will enable the associated feature, which may in
* `#define ENABLE_COMPILE_KEYCODE` * `#define ENABLE_COMPILE_KEYCODE`
* Enables the `QK_MAKE` keycode * Enables the `QK_MAKE` keycode
* `#define FORCE_NKRO`
* NKRO by default requires to be turned on, this forces it on during keyboard startup regardless of EEPROM setting. NKRO can still be turned off but will be turned on again if the keyboard reboots.
* `#define STRICT_LAYER_RELEASE` * `#define STRICT_LAYER_RELEASE`
* force a key release to be evaluated using the current layer stack instead of remembering which layer it came from (used for advanced cases) * force a key release to be evaluated using the current layer stack instead of remembering which layer it came from (used for advanced cases)
@ -401,6 +399,7 @@ This is a [make](https://www.gnu.org/software/make/manual/make.html) file that i
* `atmel-dfu` * `atmel-dfu`
* `lufa-dfu` * `lufa-dfu`
* `qmk-dfu` * `qmk-dfu`
* `qmk-hid`
* `halfkay` * `halfkay`
* `caterina` * `caterina`
* `bootloadhid` * `bootloadhid`

View File

@ -54,7 +54,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
[1] = LAYOUT_all( [1] = LAYOUT_all(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, BL_TOGG, BL_DOWN, BL_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, UG_TOGG, UG_NEXT, UG_HUED, UG_HUEU, UG_SATD, UG_SATU, UG_VALD, UG_VALU, BL_TOGG, BL_DOWN, BL_UP,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_MNXT, KC_VOLD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_MNXT, KC_VOLD,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
@ -82,7 +82,7 @@ The default keymap uses the `LAYOUT_all` macro, so that will be the value of the
"KC_LCTL", "KC_LGUI", "KC_LALT", "KC_SPC", "KC_RALT", "MO(1)", "KC_RGUI", "KC_RCTL", "KC_LEFT", "KC_DOWN", "KC_RGHT" "KC_LCTL", "KC_LGUI", "KC_LALT", "KC_SPC", "KC_RALT", "MO(1)", "KC_RGUI", "KC_RCTL", "KC_LEFT", "KC_DOWN", "KC_RGHT"
], ],
[ [
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "RGB_TOG", "RGB_MOD", "RGB_HUD", "RGB_HUI", "RGB_SAD", "RGB_SAI", "RGB_VAD", "RGB_VAI", "BL_TOGG", "BL_DOWN", "BL_UP", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "UG_TOGG", "UG_NEXT", "UG_HUED", "UG_HUEU", "UG_SATD", "UG_SATU", "UG_VALD", "UG_VALU", "BL_TOGG", "BL_DOWN", "BL_UP",
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_VOLU", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_VOLU",
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "QK_BOOT", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_MPLY", "KC_MNXT", "KC_VOLD", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "QK_BOOT", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_MPLY", "KC_MNXT", "KC_VOLD",
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS",

View File

@ -106,10 +106,10 @@ enum my_keycodes {
Before opening a pull request, you can preview your changes if you have set up the development environment by running this command from the `qmk_firmware/` folder: Before opening a pull request, you can preview your changes if you have set up the development environment by running this command from the `qmk_firmware/` folder:
``` ```
qmk docs qmk docs -b
``` ```
and navigating to `http://localhost:5173/`. Which should automatically open your browser; otherwise, navigate to `http://localhost:8936/`.
## Keyboards ## Keyboards

View File

@ -9,12 +9,19 @@ This page does not assume any special knowledge about QMK, but reading [Understa
We have structured QMK as a hierarchy: We have structured QMK as a hierarchy:
* Core (`_quantum`) * Core (`_quantum`)
* Community Module (`_<module>`)
* Community Module -> Keyboard/Revision (`_<module>_kb`)
* Community Module -> Keymap (`_<module>_user`)
* Keyboard/Revision (`_kb`) * Keyboard/Revision (`_kb`)
* Keymap (`_user`) * Keymap (`_user`)
Each of the functions described below can be defined with a `_kb()` suffix or a `_user()` suffix. We intend for you to use the `_kb()` suffix at the Keyboard/Revision level, while the `_user()` suffix should be used at the Keymap level. Each of the functions described below can be defined with a `_kb()` suffix or a `_user()` suffix. We intend for you to use the `_kb()` suffix at the Keyboard/Revision level, while the `_user()` suffix should be used at the Keymap level.
When defining functions at the Keyboard/Revision level it is important that your `_kb()` implementation call `_user()` before executing anything else- otherwise the keymap level function will never be called. When defining functions at the Keyboard/Revision level it is important that your `_kb()` implementation call `_user()` at an appropriate location, otherwise the keymap level function will never be called.
Functions at the `_<module>_xxx()` level are intended to allow keyboards or keymaps to override or enhance the processing associated with a [community module](/features/community_modules).
When defining module overrides such as `process_record_<module>()`, the same pattern should be used; the module must invoke `process_record_<module>_kb()` as appropriate.
# Custom Keycodes # Custom Keycodes
@ -99,7 +106,7 @@ These are the three main initialization functions, listed in the order that they
* `keyboard_post_init_*` - Happens at the end of the firmware's startup process. This is where you'd want to put "customization" code, for the most part. * `keyboard_post_init_*` - Happens at the end of the firmware's startup process. This is where you'd want to put "customization" code, for the most part.
::: warning ::: warning
For most people, the `keyboard_post_init_user` function is what you want to call. For instance, this is where you want to set up things for RGB Underglow. For most people, the `keyboard_post_init_user` function is what you want to implement. For instance, this is where you want to set up things for RGB Underglow.
::: :::
## Keyboard Pre Initialization code ## Keyboard Pre Initialization code

View File

@ -2,7 +2,7 @@
SPI 18x12 LED matrix driver by Awinic. Supports a maximum of four drivers, each controlling up to 216 single-color LEDs, or 72 RGB LEDs. SPI 18x12 LED matrix driver by Awinic. Supports a maximum of four drivers, each controlling up to 216 single-color LEDs, or 72 RGB LEDs.
[AW20216S Datasheet](https://doc.awinic.com/doc/20230609wm/b6a9c70b-e1bd-495b-925f-bcbed3fc2620.pdf) [AW20216S Datasheet](https://doc.awinic.com/doc/202412/a055779b-49c0-4d09-8f04-73029f44b72b.pdf)
## Usage {#usage} ## Usage {#usage}
@ -44,7 +44,7 @@ Depending on the ChibiOS board configuration, you may need to [enable and config
## LED Mapping {#led-mapping} ## LED Mapping {#led-mapping}
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboardname>.c`: In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboard>.c`:
```c ```c
const aw20216s_led_t PROGMEM g_aw20216s_leds[AW20216S_LED_COUNT] = { const aw20216s_led_t PROGMEM g_aw20216s_leds[AW20216S_LED_COUNT] = {

73
docs/drivers/battery.md Normal file
View File

@ -0,0 +1,73 @@
# Battery Driver
This driver provides support for sampling battery level.
## Usage
To use this driver, add the following to your `rules.mk`:
```make
BATTERY_DRIVER_REQUIRED = yes
```
## Basic Configuration {#basic-configuration}
Add the following to your `config.h`:
|Define |Default |Description |
|--------------------------|--------|--------------------------------------------------|
|`BATTERY_SAMPLE_INTERVAL` |`30000` |The time between battery samples in milliseconds. |
## Driver Configuration {#driver-configuration}
Driver selection can be configured in `rules.mk` as `BATTERY_DRIVER`. Valid values are `adc` (default), `vendor`, or `custom`. See below for information on individual drivers.
### ADC Driver {#adc-driver}
This is the default battery driver. The default configuration assumes the battery is connected to a ADC capable pin through a voltage divider.
```make
BATTERY_DRIVER = adc
```
The following `#define`s apply only to the `adc` driver:
|Define |Default |Description |
|-----------------------------|--------------|--------------------------------------------------------------|
|`BATTERY_PIN` |*Not defined* |The GPIO pin connected to the voltage divider. |
|`BATTERY_REF_VOLTAGE_MV` |`3300` |The ADC reverence voltage, in millivolts. |
|`BATTERY_VOLTAGE_DIVIDER_R1` |`100` |The voltage divider resistance, in kOhm. Set to 0 to disable. |
|`BATTERY_VOLTAGE_DIVIDER_R2` |`100` |The voltage divider resistance, in kOhm. Set to 0 to disable. |
|`BATTERY_ADC_RESOLUTION` |`10` |The ADC resolution configured for the ADC Driver. |
## Functions
### `uint8_t battery_get_percent(void)` {#api-battery-get-percent}
Sample battery level.
#### Return Value {#api-battery-get-percent-return}
The battery percentage, in the range 0-100.
## Callbacks
### `void battery_percent_changed_user(uint8_t level)` {#api-battery-percent-changed-user}
User hook called when battery level changed.
### Arguments {#api-battery-percent-changed-user-arguments}
- `uint8_t level`
The battery percentage, in the range 0-100.
---
### `void battery_percent_changed_kb(uint8_t level)` {#api-battery-percent-changed-kb}
Keyboard hook called when battery level changed.
### Arguments {#api-battery-percent-changed-kb-arguments}
- `uint8_t level`
The battery percentage, in the range 0-100.

View File

@ -16,17 +16,22 @@ You can then call the I2C API by including `i2c_master.h` in your code.
## I2C Addressing {#note-on-i2c-addresses} ## I2C Addressing {#note-on-i2c-addresses}
All of the addresses expected by this driver should be pushed to the upper 7 bits of the address byte. Setting I2C addresses listed on datasheets and the internet are usually represented as a 7-bit value. The eighth bit (the least significant bit) controls whether the operation is a read or a write.
the lower bit (indicating read/write) will be done by the respective functions. Almost all I2C addresses listed
on datasheets and the internet will be represented as 7 bits occupying the lower 7 bits and will need to be
shifted to the left (more significant) by one bit. This is easy to do via the bitwise shift operator `<< 1`.
You can either do this on each call to the functions below, or once in your definition of the address. For example, if your device has an address of `0x18`: All of the address parameters expected by the driver API should therefore be pushed to the upper 7 bits of the address byte; the driver will take care of setting the read/write bit as appropriate.
This is easy to do via the bitwise left shift operator. For example, if your device has an address of `0x18` you might create a define for convenience:
```c ```c
#define MY_I2C_ADDRESS (0x18 << 1) #define MY_I2C_ADDRESS (0x18 << 1)
``` ```
Or, you can shift the address ahead of time:
```c
#define MY_I2C_ADDRESS 0x30
```
See https://www.robot-electronics.co.uk/i2c-tutorial for more information about I2C addressing and other technical details. See https://www.robot-electronics.co.uk/i2c-tutorial for more information about I2C addressing and other technical details.
## AVR Configuration {#avr-configuration} ## AVR Configuration {#avr-configuration}
@ -40,9 +45,9 @@ The following defines can be used to configure the I2C master driver:
No further setup is required - just connect the `SDA` and `SCL` pins of your I2C devices to the matching pins on the MCU: No further setup is required - just connect the `SDA` and `SCL` pins of your I2C devices to the matching pins on the MCU:
|MCU |`SCL`|`SDA`| |MCU |`SCL`|`SDA`|
|------------------|-----|-----| |-------------|-----|-----|
|ATmega16/32U4 |`D0` |`D1` | |ATmega16/32U4|`D0` |`D1` |
|AT90USB64/128 |`D0` |`D1` | |AT90USB64/128|`D0` |`D1` |
|ATmega32A |`C0` |`C1` | |ATmega32A |`C0` |`C1` |
|ATmega328/P |`C5` |`C4` | |ATmega328/P |`C5` |`C4` |
@ -52,7 +57,7 @@ The ATmega16/32U2 does not possess I2C functionality, and so cannot use this dri
## ChibiOS/ARM Configuration {#arm-configuration} ## ChibiOS/ARM Configuration {#arm-configuration}
You'll need to determine which pins can be used for I2C -- a an example, STM32 parts generally have multiple I2C peripherals, labeled I2C1, I2C2, I2C3 etc. You'll need to determine which pins can be used for I2C -- as an example, STM32 parts generally have multiple I2C peripherals, labeled I2C1, I2C2, I2C3 etc.
To enable I2C, modify your board's `halconf.h` to enable I2C, then modify your board's `mcuconf.h` to enable the peripheral you've chosen: To enable I2C, modify your board's `halconf.h` to enable I2C, then modify your board's `mcuconf.h` to enable the peripheral you've chosen:
@ -83,15 +88,19 @@ To enable I2C, modify your board's `halconf.h` to enable I2C, then modify your b
Configuration-wise, you'll need to set up the peripheral as per your MCU's datasheet -- the defaults match the pins for a Proton-C, i.e. STM32F303. Configuration-wise, you'll need to set up the peripheral as per your MCU's datasheet -- the defaults match the pins for a Proton-C, i.e. STM32F303.
|`config.h` Overrride |Description |Default| |`config.h` Override|Description |Default|
|------------------------|--------------------------------------------------------------|-------| |-------------------|-------------------------------------------------------------|-------|
|`I2C_DRIVER` |I2C peripheral to use - I2C1 -> `I2CD1`, I2C2 -> `I2CD2` etc. |`I2CD1`| |`I2C_DRIVER` |I2C peripheral to use - I2C1 -> `I2CD1`, I2C2 -> `I2CD2` etc.|`I2CD1`|
|`I2C1_SCL_PIN` |The pin definition for SCL |`B6` | |`I2C1_SCL_PIN` |The pin to use for SCL |`B6` |
|`I2C1_SCL_PAL_MODE` |The alternate function mode for SCL |`4` | |`I2C1_SCL_PAL_MODE`|The alternate function mode for SCL |`4` |
|`I2C1_SDA_PIN` |The pin definition for SDA |`B7` | |`I2C1_SDA_PIN` |The pin to use for SDA |`B7` |
|`I2C1_SDA_PAL_MODE` |The alternate function mode for SDA |`4` | |`I2C1_SDA_PAL_MODE`|The alternate function mode for SDA |`4` |
The following configuration values depend on the specific MCU in use. ::: tip
Currently only a single I2C peripheral is supported, therefore the `I2C1_*` defines are used for configuration regardless of the selected peripheral.
:::
The following configuration values are dependent on the ChibiOS I2C LLD, which is dictated by the microcontroller.
### I2Cv1 {#arm-configuration-i2cv1} ### I2Cv1 {#arm-configuration-i2cv1}
@ -147,7 +156,7 @@ void i2c_init(void) {
--- ---
### `i2c_status_t i2c_transmit(uint8_t address, uint8_t *data, uint16_t length, uint16_t timeout)` {#api-i2c-transmit} ### `i2c_status_t i2c_transmit(uint8_t address, const uint8_t* data, uint16_t length, uint16_t timeout)` {#api-i2c-transmit}
Send multiple bytes to the selected I2C device. Send multiple bytes to the selected I2C device.
@ -155,7 +164,7 @@ Send multiple bytes to the selected I2C device.
- `uint8_t address` - `uint8_t address`
The 7-bit I2C address of the device. The 7-bit I2C address of the device.
- `uint8_t *data` - `const uint8_t* data`
A pointer to the data to transmit. A pointer to the data to transmit.
- `uint16_t length` - `uint16_t length`
The number of bytes to write. Take care not to overrun the length of `data`. The number of bytes to write. Take care not to overrun the length of `data`.
@ -168,6 +177,29 @@ Send multiple bytes to the selected I2C device.
--- ---
### `i2c_status_t i2c_transmit_P(uint8_t address, const uint8_t* data, uint16_t length, uint16_t timeout)` {#api-i2c-transmit-p}
Send multiple bytes from PROGMEM to the selected I2C device.
On ARM devices, this function is simply an alias for `i2c_transmit(address, data, length, timeout)`.
#### Arguments {#api-i2c-transmit-p-arguments}
- `uint8_t address`
The 7-bit I2C address of the device.
- `const uint8_t* data`
A pointer to the data to transmit.
- `uint16_t length`
The number of bytes to write. Take care not to overrun the length of `data`.
- `uint16_t timeout`
The time in milliseconds to wait for a response from the target device.
#### Return Value {#api-i2c-transmit-p-return}
`I2C_STATUS_TIMEOUT` if the timeout period elapses, `I2C_STATUS_ERROR` if some other error occurs, otherwise `I2C_STATUS_SUCCESS`.
---
### `i2c_status_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout)` {#api-i2c-receive} ### `i2c_status_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout)` {#api-i2c-receive}
Receive multiple bytes from the selected I2C device. Receive multiple bytes from the selected I2C device.
@ -176,8 +208,8 @@ Receive multiple bytes from the selected I2C device.
- `uint8_t address` - `uint8_t address`
The 7-bit I2C address of the device. The 7-bit I2C address of the device.
- `uint8_t *data` - `uint8_t* data`
A pointer to the buffer to read into. A pointer to a buffer to read into.
- `uint16_t length` - `uint16_t length`
The number of bytes to read. Take care not to overrun the length of `data`. The number of bytes to read. Take care not to overrun the length of `data`.
- `uint16_t timeout` - `uint16_t timeout`
@ -189,9 +221,9 @@ Receive multiple bytes from the selected I2C device.
--- ---
### `i2c_status_t i2c_write_register(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout)` {#api-i2c-write-register} ### `i2c_status_t i2c_write_register(uint8_t devaddr, uint8_t regaddr, const uint8_t* data, uint16_t length, uint16_t timeout)` {#api-i2c-write-register}
Writes to a register with an 8-bit address on the I2C device. Write to a register with an 8-bit address on the I2C device.
#### Arguments {#api-i2c-write-register-arguments} #### Arguments {#api-i2c-write-register-arguments}
@ -199,7 +231,7 @@ Writes to a register with an 8-bit address on the I2C device.
The 7-bit I2C address of the device. The 7-bit I2C address of the device.
- `uint8_t regaddr` - `uint8_t regaddr`
The register address to write to. The register address to write to.
- `uint8_t *data` - `const uint8_t* data`
A pointer to the data to transmit. A pointer to the data to transmit.
- `uint16_t length` - `uint16_t length`
The number of bytes to write. Take care not to overrun the length of `data`. The number of bytes to write. Take care not to overrun the length of `data`.
@ -212,9 +244,9 @@ Writes to a register with an 8-bit address on the I2C device.
--- ---
### `i2c_status_t i2c_write_register16(uint8_t devaddr, uint16_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout)` {#api-i2c-write-register16} ### `i2c_status_t i2c_write_register16(uint8_t devaddr, uint16_t regaddr, const uint8_t* data, uint16_t length, uint16_t timeout)` {#api-i2c-write-register16}
Writes to a register with a 16-bit address (big endian) on the I2C device. Write to a register with a 16-bit address (big endian) on the I2C device.
#### Arguments {#api-i2c-write-register16-arguments} #### Arguments {#api-i2c-write-register16-arguments}
@ -222,7 +254,7 @@ Writes to a register with a 16-bit address (big endian) on the I2C device.
The 7-bit I2C address of the device. The 7-bit I2C address of the device.
- `uint16_t regaddr` - `uint16_t regaddr`
The register address to write to. The register address to write to.
- `uint8_t *data` - `const uint8_t* data`
A pointer to the data to transmit. A pointer to the data to transmit.
- `uint16_t length` - `uint16_t length`
The number of bytes to write. Take care not to overrun the length of `data`. The number of bytes to write. Take care not to overrun the length of `data`.
@ -237,7 +269,7 @@ Writes to a register with a 16-bit address (big endian) on the I2C device.
### `i2c_status_t i2c_read_register(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout)` {#api-i2c-read-register} ### `i2c_status_t i2c_read_register(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout)` {#api-i2c-read-register}
Reads from a register with an 8-bit address on the I2C device. Read from a register with an 8-bit address on the I2C device.
#### Arguments {#api-i2c-read-register-arguments} #### Arguments {#api-i2c-read-register-arguments}
@ -245,6 +277,8 @@ Reads from a register with an 8-bit address on the I2C device.
The 7-bit I2C address of the device. The 7-bit I2C address of the device.
- `uint8_t regaddr` - `uint8_t regaddr`
The register address to read from. The register address to read from.
- `uint8_t data`
A pointer to a buffer to read into.
- `uint16_t length` - `uint16_t length`
The number of bytes to read. Take care not to overrun the length of `data`. The number of bytes to read. Take care not to overrun the length of `data`.
- `uint16_t timeout` - `uint16_t timeout`
@ -258,7 +292,7 @@ Reads from a register with an 8-bit address on the I2C device.
### `i2c_status_t i2c_read_register16(uint8_t devaddr, uint16_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout)` {#api-i2c-read-register16} ### `i2c_status_t i2c_read_register16(uint8_t devaddr, uint16_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout)` {#api-i2c-read-register16}
Reads from a register with a 16-bit address (big endian) on the I2C device. Read from a register with a 16-bit address (big endian) on the I2C device.
#### Arguments {#api-i2c-read-register16-arguments} #### Arguments {#api-i2c-read-register16-arguments}
@ -266,6 +300,8 @@ Reads from a register with a 16-bit address (big endian) on the I2C device.
The 7-bit I2C address of the device. The 7-bit I2C address of the device.
- `uint16_t regaddr` - `uint16_t regaddr`
The register address to read from. The register address to read from.
- `uint8_t* data`
A pointer to a buffer to read into.
- `uint16_t length` - `uint16_t length`
The number of bytes to read. Take care not to overrun the length of `data`. The number of bytes to read. Take care not to overrun the length of `data`.
- `uint16_t timeout` - `uint16_t timeout`
@ -279,19 +315,19 @@ Reads from a register with a 16-bit address (big endian) on the I2C device.
### `i2c_status_t i2c_ping_address(uint8_t address, uint16_t timeout)` {#api-i2c-ping-address} ### `i2c_status_t i2c_ping_address(uint8_t address, uint16_t timeout)` {#api-i2c-ping-address}
Pings the I2C bus for a specific address. Ping the I2C bus for a specific address.
On ChibiOS a "best effort" attempt is made by reading a single byte from register 0 at the requested address. This should generally work except for I2C devices that do not not respond to a register 0 read request, which will result in a false negative result (unsucessful response to ping attempt). On ChibiOS a "best effort" attempt is made by reading a single byte from register 0 at the given address. This should generally work except for I2C devices that do not not respond to a register 0 read request, which will result in a false negative result (unsuccessful response to ping attempt).
This function is weakly defined, meaning it can be overridden if necessary for your particular use case: This function is weakly defined, meaning it can be overridden if necessary for your particular use case.
#### Arguments #### Arguments {#api-i2c-ping-address-arguments}
- `uint8_t address` - `uint8_t address`
The 7-bit I2C address of the device (ie. without the read/write bit - this will be set automatically). The 7-bit I2C address of the device.
- `uint16_t timeout` - `uint16_t timeout`
The time in milliseconds to wait for a response from the target device. The time in milliseconds to wait for a response from the target device.
#### Return Value #### Return Value {#api-i2c-ping-address-return}
`I2C_STATUS_TIMEOUT` if the timeout period elapses, `I2C_STATUS_ERROR` if some other error occurs, otherwise `I2C_STATUS_SUCCESS`. `I2C_STATUS_TIMEOUT` if the timeout period elapses, `I2C_STATUS_ERROR` if some other error occurs, otherwise `I2C_STATUS_SUCCESS`.

View File

@ -37,7 +37,7 @@ Depending on the ChibiOS board configuration, you may need to [enable and config
## LED Mapping {#led-mapping} ## LED Mapping {#led-mapping}
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboardname>.c`: In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboard>.c`:
```c ```c
const is31fl3218_led_t PROGMEM g_is31fl3218_leds[IS31FL3218_LED_COUNT] = { const is31fl3218_led_t PROGMEM g_is31fl3218_leds[IS31FL3218_LED_COUNT] = {

View File

@ -50,7 +50,7 @@ Depending on the ChibiOS board configuration, you may need to [enable and config
## LED Mapping {#led-mapping} ## LED Mapping {#led-mapping}
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboardname>.c`: In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboard>.c`:
```c ```c
const is31fl3236_led_t PROGMEM g_is31fl3236_leds[IS31FL3236_LED_COUNT] = { const is31fl3236_led_t PROGMEM g_is31fl3236_leds[IS31FL3236_LED_COUNT] = {

View File

@ -120,7 +120,7 @@ Depending on the ChibiOS board configuration, you may need to [enable and config
## LED Mapping {#led-mapping} ## LED Mapping {#led-mapping}
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboardname>.c`: In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboard>.c`:
```c ```c
const is31fl3729_led_t PROGMEM g_is31fl3729_leds[IS31FL3729_LED_COUNT] = { const is31fl3729_led_t PROGMEM g_is31fl3729_leds[IS31FL3729_LED_COUNT] = {

View File

@ -61,7 +61,7 @@ Depending on the ChibiOS board configuration, you may need to [enable and config
## LED Mapping {#led-mapping} ## LED Mapping {#led-mapping}
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboardname>.c`: In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboard>.c`:
```c ```c
const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = {

View File

@ -145,7 +145,7 @@ Depending on the ChibiOS board configuration, you may need to [enable and config
## LED Mapping {#led-mapping} ## LED Mapping {#led-mapping}
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboardname>.c`: In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboard>.c`:
```c ```c
const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = {

View File

@ -129,7 +129,7 @@ Depending on the ChibiOS board configuration, you may need to [enable and config
## LED Mapping {#led-mapping} ## LED Mapping {#led-mapping}
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboardname>.c`: In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboard>.c`:
```c ```c
const is31fl3736_led_t PROGMEM g_is31fl3736_leds[IS31FL3736_LED_COUNT] = { const is31fl3736_led_t PROGMEM g_is31fl3736_leds[IS31FL3736_LED_COUNT] = {

View File

@ -117,7 +117,7 @@ Depending on the ChibiOS board configuration, you may need to [enable and config
## LED Mapping {#led-mapping} ## LED Mapping {#led-mapping}
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboardname>.c`: In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboard>.c`:
```c ```c
const is31fl3737_led_t PROGMEM g_is31fl3737_leds[IS31FL3737_LED_COUNT] = { const is31fl3737_led_t PROGMEM g_is31fl3737_leds[IS31FL3737_LED_COUNT] = {

View File

@ -117,7 +117,7 @@ Depending on the ChibiOS board configuration, you may need to [enable and config
## LED Mapping {#led-mapping} ## LED Mapping {#led-mapping}
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboardname>.c`: In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboard>.c`:
```c ```c
const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = {

View File

@ -117,7 +117,7 @@ Depending on the ChibiOS board configuration, you may need to [enable and config
## LED Mapping {#led-mapping} ## LED Mapping {#led-mapping}
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboardname>.c`: In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboard>.c`:
```c ```c
const is31fl3742a_led_t PROGMEM g_is31fl3742a_leds[IS31FL3742A_LED_COUNT] = { const is31fl3742a_led_t PROGMEM g_is31fl3742a_leds[IS31FL3742A_LED_COUNT] = {

View File

@ -127,7 +127,7 @@ Depending on the ChibiOS board configuration, you may need to [enable and config
## LED Mapping {#led-mapping} ## LED Mapping {#led-mapping}
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboardname>.c`: In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboard>.c`:
```c ```c
const is31fl3743a_led_t PROGMEM g_is31fl3743a_leds[IS31FL3743A_LED_COUNT] = { const is31fl3743a_led_t PROGMEM g_is31fl3743a_leds[IS31FL3743A_LED_COUNT] = {

View File

@ -127,7 +127,7 @@ Depending on the ChibiOS board configuration, you may need to [enable and config
## LED Mapping {#led-mapping} ## LED Mapping {#led-mapping}
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboardname>.c`: In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboard>.c`:
```c ```c
const is31fl3745_led_t PROGMEM g_is31fl3745_leds[IS31FL3745_LED_COUNT] = { const is31fl3745_led_t PROGMEM g_is31fl3745_leds[IS31FL3745_LED_COUNT] = {

View File

@ -132,7 +132,7 @@ Depending on the ChibiOS board configuration, you may need to [enable and config
## LED Mapping {#led-mapping} ## LED Mapping {#led-mapping}
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboardname>.c`: In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboard>.c`:
```c ```c
const is31fl3746a_led_t PROGMEM g_is31fl3746a_leds[IS31FL3746A_LED_COUNT] = { const is31fl3746a_led_t PROGMEM g_is31fl3746a_leds[IS31FL3746A_LED_COUNT] = {

View File

@ -52,7 +52,7 @@ Depending on the ChibiOS board configuration, you may need to [enable and config
## LED Mapping {#led-mapping} ## LED Mapping {#led-mapping}
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboardname>.c`: In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboard>.c`:
```c ```c
const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = {

View File

@ -39,8 +39,6 @@ To enable SPI, modify your board's `halconf.h` to enable SPI, then modify your b
#pragma once #pragma once
#define HAL_USE_SPI TRUE // [!code focus] #define HAL_USE_SPI TRUE // [!code focus]
#define SPI_USE_WAIT TRUE // [!code focus]
#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD // [!code focus]
#include_next <halconf.h> #include_next <halconf.h>
``` ```
@ -88,7 +86,7 @@ Start an SPI transaction.
#### Arguments {#api-spi-start-arguments} #### Arguments {#api-spi-start-arguments}
- `pin_t slavePin` - `pin_t slavePin`
The QMK pin to assert as the slave select pin, eg. `B4`. The GPIO pin connected to the desired device's `SS` line.
- `bool lsbFirst` - `bool lsbFirst`
Determines the endianness of the transmission. If `true`, the least significant bit of each byte is sent first. Determines the endianness of the transmission. If `true`, the least significant bit of each byte is sent first.
- `uint8_t mode` - `uint8_t mode`
@ -106,7 +104,7 @@ Start an SPI transaction.
#### Return Value {#api-spi-start-return} #### Return Value {#api-spi-start-return}
`false` if the supplied parameters are invalid or the SPI peripheral is already in use, or `true`. `true` if the operation was successful, otherwise `false` if the supplied parameters are invalid or the SPI peripheral is already in use.
--- ---
@ -131,7 +129,7 @@ Read a byte from the selected SPI device.
#### Return Value {#api-spi-read-return} #### Return Value {#api-spi-read-return}
`SPI_STATUS_TIMEOUT` if the timeout period elapses, or the byte read from the device. `SPI_STATUS_TIMEOUT` if the timeout period elapses, otherwise the byte read from the device.
--- ---
@ -159,7 +157,7 @@ Receive multiple bytes from the selected SPI device.
#### Arguments {#api-spi-receive-arguments} #### Arguments {#api-spi-receive-arguments}
- `uint8_t *data` - `uint8_t *data`
A pointer to the buffer to read into. A pointer to a buffer to read into.
- `uint16_t length` - `uint16_t length`
The number of bytes to read. Take care not to overrun the length of `data`. The number of bytes to read. Take care not to overrun the length of `data`.

View File

@ -45,17 +45,17 @@ To enable UART, modify your board's `mcuconf.h` to enable the peripheral you've
Configuration-wise, you'll need to set up the peripheral as per your MCU's datasheet -- the defaults match the pins for a Proton-C, i.e. STM32F303. Configuration-wise, you'll need to set up the peripheral as per your MCU's datasheet -- the defaults match the pins for a Proton-C, i.e. STM32F303.
| `config.h` override | Description | Default Value | |`config.h` Override|Description |Default|
| --------------------------- | --------------------------------------------------------------- | ------------- | |-------------------|---------------------------------------------------------------|-------|
| `#define UART_DRIVER` | USART peripheral to use - USART1 -> `SD1`, USART2 -> `SD2` etc. | `SD1` | |`UART_DRIVER` |USART peripheral to use - USART1 -> `SD1`, USART2 -> `SD2` etc.|`SD1` |
| `#define UART_TX_PIN` | The pin to use for TX | `A9` | |`UART_TX_PIN` |The pin to use for TX |`A9` |
| `#define UART_TX_PAL_MODE` | The alternate function mode for TX | `7` | |`UART_TX_PAL_MODE` |The alternate function mode for TX |`7` |
| `#define UART_RX_PIN` | The pin to use for RX | `A10` | |`UART_RX_PIN` |The pin to use for RX |`A10` |
| `#define UART_RX_PAL_MODE` | The alternate function mode for RX | `7` | |`UART_RX_PAL_MODE` |The alternate function mode for RX |`7` |
| `#define UART_CTS_PIN` | The pin to use for CTS | `A11` | |`UART_CTS_PIN` |The pin to use for CTS |`A11` |
| `#define UART_CTS_PAL_MODE` | The alternate function mode for CTS | `7` | |`UART_CTS_PAL_MODE`|The alternate function mode for CTS |`7` |
| `#define UART_RTS_PIN` | The pin to use for RTS | `A12` | |`UART_RTS_PIN` |The pin to use for RTS |`A12` |
| `#define UART_RTS_PAL_MODE` | The alternate function mode for RTS | `7` | |`UART_RTS_PAL_MODE`|The alternate function mode for RTS |`7` |
## API {#api} ## API {#api}
@ -111,7 +111,7 @@ Receive multiple bytes.
#### Arguments {#api-uart-receive-arguments} #### Arguments {#api-uart-receive-arguments}
- `uint8_t *data` - `uint8_t *data`
A pointer to the buffer to read into. A pointer to a buffer to read into.
- `uint16_t length` - `uint16_t length`
The number of bytes to read. Take care not to overrun the length of `data`. The number of bytes to read. Take care not to overrun the length of `data`.
@ -123,4 +123,4 @@ Return whether the receive buffer contains data. Call this function to determine
#### Return Value {#api-uart-available-return} #### Return Value {#api-uart-available-return}
`true` if the receive buffer length is non-zero. `true` if there is data available to read.

View File

@ -144,18 +144,30 @@ The following defines apply only to ARM devices:
|`WS2812_T1L`|`(WS2812_TIMING - WS2812_T1H)`|The length of a "1" bit's low phase in nanoseconds (bitbang and PIO drivers only)| |`WS2812_T1L`|`(WS2812_TIMING - WS2812_T1H)`|The length of a "1" bit's low phase in nanoseconds (bitbang and PIO drivers only)|
|`WS2812_T0L`|`(WS2812_TIMING - WS2812_T0H)`|The length of a "0" bit's low phase in nanoseconds (bitbang and PIO drivers only)| |`WS2812_T0L`|`(WS2812_TIMING - WS2812_T0H)`|The length of a "0" bit's low phase in nanoseconds (bitbang and PIO drivers only)|
### Push-Pull and Open Drain {#push-pull-open-drain} ### Logic Levels {#logic-levels}
By default, the GPIO used for data transmission is configured as a *push-pull* output, meaning the pin is effectively always driven either to VCC or to ground. WS2812 LEDs usually operate at 5V, but some microcontrollers, particularly ARM-based ones, run on 3.3V. This can pose an issue when driving the LED chain as the logic level voltage is lower than the power supply voltage, leading to unreliable data transmission. There are two main workarounds:
For situations where the logic level voltage is lower than the power supply voltage, however, this can pose an issue. The solution is to configure the pin for *open drain* mode instead, and use a pullup resistor between the DI pin and VCC. In this mode, the MCU can only pull the GPIO *low*, or leave it floating. The pullup resistor is then responsible for pulling the line high, when the MCU is not driving the GPIO. #### 1. Open Drain Circuit {#open-drain-circuit}
To configure the DI pin for open drain configuration, add the following to your `config.h`: By default, `WS2812_DI_PIN` is configured as a *push-pull* output, meaning the pin is effectively always driven either to VCC or to ground; however, it can be configured in *open drain* mode instead.
In this mode, the MCU will only pull the GPIO *low*, and leaves it floating otherwise. A pullup resistor (typically around 10kΩ) between DI and 5V is then responsible for pulling the line high when the MCU is not driving the GPIO.
To use the DI pin in open drain configuration, add the following to your `config.h`:
```c ```c
#define WS2812_EXTERNAL_PULLUP #define WS2812_EXTERNAL_PULLUP
``` ```
::: warning
Because the GPIO is being pulled to 5V in this situation rather than VCC (3.3V), **it must be a 5V tolerant pin**. Consult your MCU's datasheet first if there are no eligible pins, you must use a level shifter instead.
:::
#### 2. Level Shifter {#level-shifter}
A level shifter IC, such as the SN74LV1T34, can be placed between the GPIO and the first LED's DI pin to convert the 3.3V logic to 5V. This requires no additional configuration in the firmware, nor a 5V tolerant GPIO, but may be more expensive and is generally less handwire-friendly.
### SPI Driver {#arm-spi-driver} ### SPI Driver {#arm-spi-driver}
Depending on the ChibiOS board configuration, you may need to enable SPI at the keyboard level. For STM32, this would look like: Depending on the ChibiOS board configuration, you may need to enable SPI at the keyboard level. For STM32, this would look like:

View File

@ -77,6 +77,17 @@ KL: kc: 172, col: 2, row: 0, pressed: 1, time: 16303, int: 0, count: 0
KL: kc: 172, col: 2, row: 0, pressed: 0, time: 16411, int: 0, count: 0 KL: kc: 172, col: 2, row: 0, pressed: 0, time: 16411, int: 0, count: 0
``` ```
### Which keycode is this keypress?
Keycodes are logged in the example above as numerical codes, which may be difficult to interpret. For more readable logging, add `KEYCODE_STRING_ENABLE = yes` in your `rules.mk` and use `get_keycode_string(kc)`. For example:
```c
uprintf("kc: %s\n", get_keycode_string(keycode));
```
This logs the keycode as a human-readable string like "`LT(2,KC_D)`" rather than a numerical code like "`0x4207`." See the [Keycode String](unit_testing#keycode-string) section of the Unit Testing page for more information.
### How long did it take to scan for a keypress? ### How long did it take to scan for a keypress?
When testing performance issues, it can be useful to know the frequency at which the switch matrix is being scanned. To enable logging for this scenario, add the following code to your keymaps `config.h` When testing performance issues, it can be useful to know the frequency at which the switch matrix is being scanned. To enable logging for this scenario, add the following code to your keymaps `config.h`
@ -129,7 +140,7 @@ needed for older distros.
## Can't Get Message on Console ## Can't Get Message on Console
Check: Check:
- *hid_listen* finds your device. See above. - *hid_listen* finds your device. See above.
- Enable debug by pressing **Magic**+d. See [Magic Commands](https://github.com/tmk/tmk_keyboard#magic-commands). - Enable debug by pressing **Magic**+d. See [Magic Commands](https://github.com/tmk/tmk_keyboard/wiki#magic-commands-for-debug).
- Set `debug_enable=true`. See [Debugging](#debugging) - Set `debug_enable=true`. See [Debugging](#debugging)
- Try using `print` function instead of debug print. See **common/print.h**. - Try using `print` function instead of debug print. See **common/print.h**.
- Disconnect other devices with console function. See [Issue #97](https://github.com/tmk/tmk_keyboard/issues/97). - Disconnect other devices with console function. See [Issue #97](https://github.com/tmk/tmk_keyboard/issues/97).

View File

@ -3,28 +3,39 @@
These allow you to combine a modifier with a keycode. When pressed, the keydown event for the modifier, then `kc` will be sent. On release, the keyup event for `kc`, then the modifier will be sent. These allow you to combine a modifier with a keycode. When pressed, the keydown event for the modifier, then `kc` will be sent. On release, the keyup event for `kc`, then the modifier will be sent.
|Key |Aliases |Description | |Key |Aliases |Description |
|----------|----------------------------------|------------------------------------------------------| |----------|----------------------------------|-------------------------------------------------------------------------------|
|`LCTL(kc)`|`C(kc)` |Hold Left Control and press `kc` | |`LCTL(kc)`|`C(kc)` |Hold Left Control and press `kc` |
|`LSFT(kc)`|`S(kc)` |Hold Left Shift and press `kc` | |`LSFT(kc)`|`S(kc)` |Hold Left Shift and press `kc` |
|`LALT(kc)`|`A(kc)`, `LOPT(kc)` |Hold Left Alt and press `kc` | |`LALT(kc)`|`A(kc)`, `LOPT(kc)` |Hold Left Alt and press `kc` |
|`LGUI(kc)`|`G(kc)`, `LCMD(kc)`, `LWIN(kc)` |Hold Left GUI and press `kc` | |`LGUI(kc)`|`G(kc)`, `LCMD(kc)`, `LWIN(kc)` |Hold Left GUI and press `kc` |
|`LCS(kc)` | |Hold Left Control and Left Shift and press `kc` |
|`LCA(kc)` | |Hold Left Control and Left Alt and press `kc` |
|`LCG(kc)` | |Hold Left Control and Left GUI and press `kc` |
|`LSA(kc)` | |Hold Left Shift and Left Alt and press `kc` |
|`LSG(kc)` |`SGUI(kc)`, `SCMD(kc)`, `SWIN(kc)`|Hold Left Shift and Left GUI and press `kc` |
|`LAG(kc)` | |Hold Left Alt and Left GUI and press `kc` |
|`LCSG(kc)`| |Hold Left Control, Left Shift and Left GUI and press `kc` |
|`LCAG(kc)`| |Hold Left Control, Left Alt and Left GUI and press `kc` |
|`LSAG(kc)`| |Hold Left Shift, Left Alt and Left GUI and press `kc` |
|`RCTL(kc)`| |Hold Right Control and press `kc` | |`RCTL(kc)`| |Hold Right Control and press `kc` |
|`RSFT(kc)`| |Hold Right Shift and press `kc` | |`RSFT(kc)`| |Hold Right Shift and press `kc` |
|`RALT(kc)`|`ROPT(kc)`, `ALGR(kc)` |Hold Right Alt and press `kc` | |`RALT(kc)`|`ROPT(kc)`, `ALGR(kc)` |Hold Right Alt and press `kc` |
|`RGUI(kc)`|`RCMD(kc)`, `RWIN(kc)` |Hold Right GUI and press `kc` | |`RGUI(kc)`|`RCMD(kc)`, `RWIN(kc)` |Hold Right GUI and press `kc` |
|`LSG(kc)` |`SGUI(kc)`, `SCMD(kc)`, `SWIN(kc)`|Hold Left Shift and GUI and press `kc` | |`RCA(kc)` | |Hold Right Control and Right Alt and press `kc` |
|`LAG(kc)` | |Hold Left Alt and Left GUI and press `kc` | |`RCS(kc)` | |Hold Right Control and Right Shift and press `kc` |
|`RCG(kc)` | |Hold Right Control and Right GUI and press `kc` |
|`RSA(kc)` |`SAGR(kc)` |Hold Right Shift and Right Alt and press `kc` |
|`RSG(kc)` | |Hold Right Shift and Right GUI and press `kc` | |`RSG(kc)` | |Hold Right Shift and Right GUI and press `kc` |
|`RAG(kc)` | |Hold Right Alt and Right GUI and press `kc` | |`RAG(kc)` | |Hold Right Alt and Right GUI and press `kc` |
|`LCA(kc)` | |Hold Left Control and Alt and press `kc` | |`RCSG(kc)`| |Hold Right Control, Right Shift and Right GUI and press `kc` |
|`LSA(kc)` | |Hold Left Shift and Left Alt and press `kc` | |`RCAG(kc)`| |Hold Right Control, Right Alt and Right GUI and press `kc` |
|`RSA(kc)` |`SAGR(kc)` |Hold Right Shift and Right Alt (AltGr) and press `kc` | |`RSAG(kc)`| |Hold Right Shift, Right Alt and Right GUI and press `kc` |
|`RCS(kc)` | |Hold Right Control and Right Shift and press `kc` | |`MEH(kc)` | |Hold Left Control, Left Shift and Left Alt and press `kc` |
|`LCAG(kc)`| |Hold Left Control, Alt and GUI and press `kc` | |`HYPR(kc)`| |Hold Left Control, Left Shift, Left Alt and Left GUI and press `kc`<sup>1</sup>|
|`MEH(kc)` | |Hold Left Control, Shift and Alt and press `kc` |
|`HYPR(kc)`| |Hold Left Control, Shift, Alt and GUI and press `kc` |
You can also chain them, for example `LCTL(LALT(KC_DEL))` or `C(A(KC_DEL))` makes a key that sends Control+Alt+Delete with a single keypress. <sup>1. More information on the Hyper key can be found on [this blog post by Brett Terpstra](https://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/).</sup>
You can also chain them, for example `LCTL(LALT(KC_DEL))`, `C(A(KC_DEL))`, or `LCA(KC_DEL)` all make a key that sends Control+Alt+Delete with a single keypress.
# Checking Modifier State {#checking-modifier-state} # Checking Modifier State {#checking-modifier-state}

View File

@ -117,7 +117,9 @@ If yes, we send the string `"QMK is the best thing ever!"` to the computer via t
We return `true` to indicate to the caller that the key press we just processed should continue to be processed as normal (as we didn't replace or alter the functionality). We return `true` to indicate to the caller that the key press we just processed should continue to be processed as normal (as we didn't replace or alter the functionality).
Finally, we define the keymap so that the first button activates our macro and the second button is just an escape button. Finally, we define the keymap so that the first button activates our macro and the second button is just an escape button.
?>It is recommended to use the SAFE_RANGE macro as per [Customizing Functionality](custom_quantum_functions). ::: tip
It is recommended to use the SAFE_RANGE macro as per [Customizing Functionality](custom_quantum_functions).
:::
You might want to add more than one macro. You might want to add more than one macro.
You can do that by adding another keycode and adding another case to the switch statement, like so: You can do that by adding another keycode and adding another case to the switch statement, like so:

View File

@ -74,8 +74,9 @@ Additionally, `config.h` here will be processed like the same file in your keyma
The reason for this, is that `<name>.h` won't be added in time to add settings (such as `#define TAPPING_TERM 100`), and including the `<name.h>` file in any `config.h` files will result in compile issues. The reason for this, is that `<name>.h` won't be added in time to add settings (such as `#define TAPPING_TERM 100`), and including the `<name.h>` file in any `config.h` files will result in compile issues.
!>You should use the `config.h` for [configuration options](config_options), and the `<name>.h` file for user or keymap specific settings (such as the enum for layer or keycodes) ::: warning
You should use the `config.h` for [configuration options](config_options), and the `<name>.h` file for user or keymap specific settings (such as the enum for layer or keycodes)
:::
## Readme (`readme.md`) ## Readme (`readme.md`)
@ -118,7 +119,7 @@ This is ideal for when you want ensure everything compiles successfully when pre
## Examples ## Examples
For a brief example, checkout [`/users/_example/`](https://github.com/qmk/qmk_firmware/tree/master/users/_example). For a brief example, checkout [`/users/_example/`](https://github.com/qmk/qmk_firmware/tree/master/users/_example).
For a more complicated example, checkout [`/users/drashna/`](https://github.com/qmk/qmk_firmware/tree/master/users/drashna)'s userspace. For more complicated examples, checkout the [`awesome-qmk` colletion](https://github.com/qmk/awesome-qmk).
### Customized Functions ### Customized Functions

View File

@ -0,0 +1,164 @@
# Community Modules
Community Modules are a feature within QMK which allows code to be implemented by third parties, making it available for other people to import into their own builds.
These modules can provide implementations which override or enhance normal QMK processing; initialization, key processing, suspend, and shutdown are some of the provided hooks which modules may implement.
## Adding a Community Module to your build
Community Modules have first-class support for [External Userspace](/newbs_external_userspace), and QMK strongly recommends using External Userspace for hosting keymaps and Community Modules together.
Modules must live in either of two locations:
* `<QMK_USERSPACE>/modules/`
* `<QMK_FIRMWARE>/modules/`
A basic module is provided within QMK itself -- `qmk/hello_world` -- which prints out a notification over [HID console](/faq_debug) after 10 seconds, and adds a new keycode, `COMMUNITY_MODULE_HELLO` (aliased to `CM_HELO`) which types `Hello there.` to the active application when the corresponding key is pressed.
To add this module to your build, in your keymap's directory create a `keymap.json` with the following content:
```json
{
"modules": [
"qmk/hello_world"
]
}
```
If you already have a `keymap.json`, you'll need to manually merge the `modules` section into your keymap.
::: warning
Community Modules are not supported by QMK Configurator. If you wish to use Community Modules, you must build your own firmware.
:::
## Adding a Community Module to your External Userspace
Module authors are encouraged to provide a git repository on GitHub which may be imported into a user's external userspace. If a user wishes to import a module repository, they can do the following:
```sh
cd /path/to/your/external/userspace
mkdir -p modules
# Replace the following {user} and {repo} with the author's community module repository
git submodule add https://github.com/{user}/{repo}.git modules/{user}
git submodule update --init --recursive
```
This will ensure the copy of the module is made in your userspace.
Add a new entry into your `keymap.json` with the desired modules, replacing `{user}` and `{module_name}` as appropriate:
```json
{
"modules": [
"qmk/hello_world",
"{user}/{module_name}"
]
}
```
::: info
The module listed in `keymap.json` is the relative path within the `modules/` directory. So long as the module is present _somewhere_ under `modules/`, then the `keymap.json` can refer to that path.
:::
## Writing a QMK Community Module
As stated earlier, Community Module authors are strongly encouraged to provide their modules through git, allowing users to leverage submodules to import functionality.
### `qmk_module.json`
A Community Module is denoted by a `qmk_module.json` file such as the following:
```json
{
"module_name": "Hello World",
"maintainer": "QMK Maintainers",
"license": "GPL-2.0-or-later",
"features": {
"deferred_exec": true
},
"keycodes": [
{
"key": "COMMUNITY_MODULE_HELLO",
"aliases": ["CM_HELO"]
}
]
}
```
At minimum, the module must provide the `module_name` and `maintainer` fields.
The `license` field is encouraged to indicate the terms for using and sharing the module. It is recommended to use a [SPDX license identifier](https://spdx.org/licenses/) like "`Apache-2.0`" or "`GPL-2.0-or-later`" if possible.
The `url` field may specify a URL to more information about the module.
The use of `features` matches the definition normally provided within `keyboard.json` and `info.json`, allowing a module to signal to the build system that it has its own dependencies. In the example above, it enables the _deferred executor_ feature whenever the above module is used in a build.
The `keycodes` array allows a module to provide new keycodes (as well as corresponding aliases) to a keymap.
### `rules.mk` / `post_rules.mk`
These two files follows standard QMK build system logic, allowing for `Makefile`-style customisation as if it were present in the keyboard or keymap.
### `<module>.c`
This file will be automatically added to the build if the filename matches the directory name. For example, the `qmk/hello_world` module contains a `hello_world.c` file, which is automatically added to the build.
::: info
Other files intended to be included must use the normal method of `SRC += my_file.c` inside `rules.mk`.
:::
::: tip
This file should use `ASSERT_COMMUNITY_MODULES_MIN_API_VERSION(1,0,0);` to enforce a minimum version of the API that it requires, ensuring the Community Module is built with a compatible version of QMK. The list of APIs and corresponding version is given at the bottom of this document. Note the use of commas instead of periods.
:::
### `introspection.c` / `introspection.h`
These two files hook into the keymap introspection logic -- the header is prepended before the user keymap, and the C source file is appended after the user keymap.
The header may provide definitions which are useful to the user's `keymap.c`.
The source file may provide functions which allow access to information specified in the user's `keymap.c`.
::: warning
Introspection is a relatively advanced topic within QMK, and existing patterns should be followed. If you need help please [open an issue](https://github.com/qmk/qmk_firmware/issues/new) or [chat with us on Discord](https://discord.gg/qmk).
:::
### `led_matrix_module.inc`
This file defines LED matrix effects in the same form as used with `led_matrix_kb.inc` and `led_matrix_user.inc` (see [Custom LED Matrix Effects](led_matrix#custom-led-matrix-effects)). Effect mode names are prepended with `LED_MATRIX_COMMUNITY_MODULE_`.
### `rgb_matrix_module.inc`
This file defines RGB matrix effects in the same form as used with `rgb_matrix_kb.inc` and `rgb_matrix_user.inc` (see [Custom RGB Matrix Effects](rgb_matrix#custom-rgb-matrix-effects)). Effect mode names are prepended with `RGB_MATRIX_COMMUNITY_MODULE_`.
### Compatible APIs
Community Modules may provide specializations for the following APIs:
| Base API | API Format | Example (`hello_world` module) | API Version |
|----------------------------------|-------------------------------------------|---------------------------------------------|-------------|
| `keyboard_pre_init` | `keyboard_pre_init_<module>` | `keyboard_pre_init_hello_world` | `0.1.0` |
| `keyboard_post_init` | `keyboard_post_init_<module>` | `keyboard_post_init_hello_world` | `0.1.0` |
| `pre_process_record` | `pre_process_record_<module>` | `pre_process_record_hello_world` | `0.1.0` |
| `process_record` | `process_record_<module>` | `process_record_hello_world` | `0.1.0` |
| `post_process_record` | `post_process_record_<module>` | `post_process_record_hello_world` | `0.1.0` |
| `housekeeping_task` | `housekeeping_task_<module>` | `housekeeping_task_hello_world` | `1.0.0` |
| `suspend_power_down` | `suspend_power_down_<module>` | `suspend_power_down_hello_world` | `1.0.0` |
| `suspend_wakeup_init` | `suspend_wakeup_init_<module>` | `suspend_wakeup_init_hello_world` | `1.0.0` |
| `shutdown` | `shutdown_<module>` | `shutdown_hello_world` | `1.0.0` |
| `process_detected_host_os` | `process_detected_host_os_<module>` | `process_detected_host_os_hello_world` | `1.0.0` |
| `default_layer_state_set` | `default_layer_state_set_<module>` | `default_layer_state_set_hello_world` | `1.1.0` |
| `layer_state_set` | `layer_state_set_<module>` | `layer_state_set_hello_world` | `1.1.0` |
| `led_matrix_indicators` | `led_matrix_indicators_<module>` | `led_matrix_indicators_hello_world` | `1.1.0` |
| `led_matrix_indicators_advanced` | `led_matrix_indicators_advanced_<module>` | `led_matrix_indicators_advanced_hello_world` | `1.1.0` |
| `rgb_matrix_indicators` | `rgb_matrix_indicators_<module>` | `rgb_matrix_indicators_hello_world` | `1.1.0` |
| `rgb_matrix_indicators_advanced` | `rgb_matrix_indicators_advanced_<module>` | `rgb_matrix_indicators_advanced_hello_world` | `1.1.0` |
| `pointing_device_init` | `pointing_device_init_<module>` | `pointing_device_init_hello_world` | `1.1.0` |
| `pointing_device_task` | `pointing_device_task_<module>` | `pointing_device_task_hello_world` | `1.1.0` |
::: info
An unspecified API is disregarded if a Community Module does not provide a specialization for it.
:::
Each API has an equivalent `_<module>_kb()` and `_<module>_user()` hook, as per the normal QMK [`_quantum`, `_kb`, and `_user` functions](/custom_quantum_functions#a-word-on-core-vs-keyboards-vs-keymap).

View File

@ -135,11 +135,11 @@ bool momentary_layer(bool key_down, void *layer) {
return false; return false;
} }
const key_override_t fn_override = {.trigger_mods = MOD_BIT(KC_RGUI) | MOD_BIT(KC_RCTL), // const key_override_t fn_override = {.trigger_mods = MOD_BIT(KC_RGUI) | MOD_BIT(KC_RALT), //
.layers = ~(1 << LAYER_FN), // .layers = ~(1 << LAYER_FN), //
.suppressed_mods = MOD_BIT(KC_RGUI) | MOD_BIT(KC_RCTL), // .suppressed_mods = MOD_BIT(KC_RGUI) | MOD_BIT(KC_RALT), //
.options = ko_option_no_unregister_on_other_key_down, // .options = ko_option_no_unregister_on_other_key_down, //
.negative_mod_mask = (uint8_t) ~(MOD_BIT(KC_RGUI) | MOD_BIT(KC_RCTL)), // .negative_mod_mask = (uint8_t) ~(MOD_BIT(KC_RGUI) | MOD_BIT(KC_RALT)), //
.custom_action = momentary_layer, // .custom_action = momentary_layer, //
.context = (void *)LAYER_FN, // .context = (void *)LAYER_FN, //
.trigger = KC_NO, // .trigger = KC_NO, //

View File

@ -154,6 +154,21 @@ User callback, invoked when the leader sequence ends.
--- ---
### `bool leader_add_user(uint16_t keycode)` {#api-leader-add-user}
User callback, invoked when a keycode is added to the leader sequence.
#### Arguments {#api-leader-add-user-arguments}
- `uint16_t keycode`
The keycode to added to the leader sequence.
#### Return Value {#api-leader-add-user-return}
`true` to finish the key sequence, `false` to continue.
---
### `void leader_start(void)` {#api-leader-start} ### `void leader_start(void)` {#api-leader-start}
Begin the leader sequence, resetting the buffer and timer. Begin the leader sequence, resetting the buffer and timer.

View File

@ -227,6 +227,8 @@ For inspiration and examples, check out the built-in effects under `quantum/led_
#define LED_MATRIX_DEFAULT_MODE LED_MATRIX_SOLID // Sets the default mode, if none has been set #define LED_MATRIX_DEFAULT_MODE LED_MATRIX_SOLID // Sets the default mode, if none has been set
#define LED_MATRIX_DEFAULT_VAL LED_MATRIX_MAXIMUM_BRIGHTNESS // Sets the default brightness value, if none has been set #define LED_MATRIX_DEFAULT_VAL LED_MATRIX_MAXIMUM_BRIGHTNESS // Sets the default brightness value, if none has been set
#define LED_MATRIX_DEFAULT_SPD 127 // Sets the default animation speed, if none has been set #define LED_MATRIX_DEFAULT_SPD 127 // Sets the default animation speed, if none has been set
#define LED_MATRIX_VAL_STEP 8 // The value by which to increment the brightness per adjustment action
#define LED_MATRIX_SPD_STEP 16 // The value by which to increment the animation speed per adjustment action
#define LED_MATRIX_DEFAULT_FLAGS LED_FLAG_ALL // Sets the default LED flags, if none has been set #define LED_MATRIX_DEFAULT_FLAGS LED_FLAG_ALL // Sets the default LED flags, if none has been set
#define LED_MATRIX_SPLIT { X, Y } // (Optional) For split keyboards, the number of LEDs connected on each half. X = left, Y = Right. #define LED_MATRIX_SPLIT { X, Y } // (Optional) For split keyboards, the number of LEDs connected on each half. X = left, Y = Right.
// If reactive effects are enabled, you also will want to enable SPLIT_TRANSPORT_MIRROR // If reactive effects are enabled, you also will want to enable SPLIT_TRANSPORT_MIRROR

View File

@ -214,7 +214,9 @@ When additional overlapping mouse key is pressed, the mouse cursor will continue
|`MOUSEKEY_OVERLAP_WHEEL_DELTA`|`MOUSEKEY_WHEEL_DELTA`|Step size of reset mouse wheel acceleration | |`MOUSEKEY_OVERLAP_WHEEL_DELTA`|`MOUSEKEY_WHEEL_DELTA`|Step size of reset mouse wheel acceleration |
|`MOUSEKEY_OVERLAP_INTERVAL` |`MOUSEKEY_INTERVAL` |Reset time between cursor movements in milliseconds (Kinetic mode only)| |`MOUSEKEY_OVERLAP_INTERVAL` |`MOUSEKEY_INTERVAL` |Reset time between cursor movements in milliseconds (Kinetic mode only)|
?> This feature will not be applied on Inertial mode ::: tip
This feature will not be applied on Inertial mode
:::
## Use with PS/2 Mouse and Pointing Device ## Use with PS/2 Mouse and Pointing Device

View File

@ -419,6 +419,32 @@ The `POINTING_DEVICE_CS_PIN`, `POINTING_DEVICE_SDIO_PIN`, and `POINTING_DEVICE_S
Any pointing device with a lift/contact status can integrate inertial cursor feature into its driver, controlled by `POINTING_DEVICE_GESTURES_CURSOR_GLIDE_ENABLE`. e.g. PMW3360 can use Lift_Stat from Motion register. Note that `POINTING_DEVICE_MOTION_PIN` cannot be used with this feature; continuous polling of `get_report()` is needed to generate glide reports. Any pointing device with a lift/contact status can integrate inertial cursor feature into its driver, controlled by `POINTING_DEVICE_GESTURES_CURSOR_GLIDE_ENABLE`. e.g. PMW3360 can use Lift_Stat from Motion register. Note that `POINTING_DEVICE_MOTION_PIN` cannot be used with this feature; continuous polling of `get_report()` is needed to generate glide reports.
::: :::
## High Resolution Scrolling
| Setting | Description | Default |
| ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------- |
| `POINTING_DEVICE_HIRES_SCROLL_ENABLE` | (Optional) Enables high resolution scrolling. | _not defined_ |
| `POINTING_DEVICE_HIRES_SCROLL_MULTIPLIER`| (Optional) Resolution mutiplier value used by high resolution scrolling. Must be between 1 and 127, inclusive. | `120` |
| `POINTING_DEVICE_HIRES_SCROLL_EXPONENT` | (Optional) Resolution exponent value used by high resolution scrolling. Must be between 0 and 127, inclusive. | `0` |
The `POINTING_DEVICE_HIRES_SCROLL_ENABLE` setting enables smooth and continuous scrolling when using trackballs or high-end encoders as mouse wheels (as opposed to the typical stepped behavior of most mouse wheels).
This works by adding a resolution multiplier to the HID descriptor for mouse wheel reports, causing the host computer to interpret each wheel tick sent by the keyboard as a fraction of a normal wheel tick.
The resolution multiplier is set to `1 / (POINTING_DEVICE_HIRES_SCROLL_MULTIPLIER * (10 ^ POINTING_DEVICE_HIRES_SCROLL_EXPONENT))`, which is `1 / 120` by default.
If even smoother scrolling than provided by this default value is desired, first try using `#define POINTING_DEVICE_HIRES_SCROLL_EXPONENT 1` which will result in a multiplier of `1 / 1200`.
The function `pointing_device_get_hires_scroll_resolution()` can be called to get the pre-computed resolution multiplier value as a `uint16_t`.
::: warning
High resolution scrolling usually results in larger and/or more frequent mouse reports. This can result in overflow errors and overloading of the host computer's input buffer.
To deal with these issues, define `WHEEL_EXTENDED_REPORT` and throttle the rate at which mouse reports are sent.
:::
::: warning
Many programs, especially those that implement their own smoothing for scrolling, don't work well when they receive simultaneous vertical and horizontal wheel inputs (e.g. from high resolution drag-scroll using a trackball).
These programs typically implement their smoothing in a way that assumes the user will only scroll in one axis at a time, resulting in slow or jittery motion when trying to scroll at an angle.
This can be addressed by snapping scrolling to one axis at a time.
:::
## Split Keyboard Configuration ## Split Keyboard Configuration
The following configuration options are only available when using `SPLIT_POINTING_ENABLE` see [data sync options](split_keyboard#data-sync-options). The rotation and invert `*_RIGHT` options are only used with `POINTING_DEVICE_COMBINED`. If using `POINTING_DEVICE_LEFT` or `POINTING_DEVICE_RIGHT` use the common configuration above to configure your pointing device. The following configuration options are only available when using `SPLIT_POINTING_ENABLE` see [data sync options](split_keyboard#data-sync-options). The rotation and invert `*_RIGHT` options are only used with `POINTING_DEVICE_COMBINED`. If using `POINTING_DEVICE_LEFT` or `POINTING_DEVICE_RIGHT` use the common configuration above to configure your pointing device.

View File

@ -23,8 +23,11 @@ MODULE 5+ --------+--+--------- PWR CONTROLLER
CLK ------+------------ PIN CLK ------+------------ PIN
``` ```
## Driver Configuration {#driver-configuration}
## Busywait Version {#busywait-version} Driver selection can be configured in `rules.mk` as `PS2_DRIVER`, or in `info.json` as `ps2.driver`. Valid values are `busywait` (default), `interrupt`, `usart`, or `vendor`. See below for information on individual drivers.
### Busywait Driver {#busywait-driver}
Note: This is not recommended, you may encounter jerky movement or unsent inputs. Please use interrupt or USART version if possible. Note: This is not recommended, you may encounter jerky movement or unsent inputs. Please use interrupt or USART version if possible.
@ -45,7 +48,7 @@ In your keyboard config.h:
#endif #endif
``` ```
### Interrupt Version (AVR/ATMega32u4) {#interrupt-version-avr} ### Interrupt Driver (AVR/ATMega32u4) {#interrupt-driver-avr}
The following example uses D2 for clock and D5 for data. You can use any INT or PCINT pin for clock, and any pin for data. The following example uses D2 for clock and D5 for data. You can use any INT or PCINT pin for clock, and any pin for data.
@ -78,7 +81,7 @@ In your keyboard config.h:
#endif #endif
``` ```
### Interrupt Version (ARM chibios) {#interrupt-version-chibios} ### Interrupt Driver (ARM chibios) {#interrupt-driver-chibios}
Pretty much any two pins can be used for the (software) interrupt variant on ARM cores. The example below uses A8 for clock, and A9 for data. Pretty much any two pins can be used for the (software) interrupt variant on ARM cores. The example below uses A8 for clock, and A9 for data.
@ -107,7 +110,7 @@ And in the ChibiOS specific `halconf.h`:
#include_next <halconf.h> #include_next <halconf.h>
``` ```
### USART Version {#usart-version} ### USART Driver {#usart-driver}
To use USART on the ATMega32u4, you have to use PD5 for clock and PD2 for data. If one of those are unavailable, you need to use interrupt version. To use USART on the ATMega32u4, you have to use PD5 for clock and PD2 for data. If one of those are unavailable, you need to use interrupt version.
@ -159,7 +162,7 @@ In your keyboard config.h:
#endif #endif
``` ```
### RP2040 PIO Version {#rp2040-pio-version} ### RP2040 PIO Driver {#rp2040-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. The `PIO` subsystem is a Raspberry Pi RP2040 specific implementation, using the integrated PIO peripheral and is therefore only available on this MCU.

View File

@ -150,6 +150,7 @@ enum rgb_matrix_effects {
RGB_MATRIX_SOLID_SPLASH, // Hue & value pulse away from a single key hit then fades value out RGB_MATRIX_SOLID_SPLASH, // Hue & value pulse away from a single key hit then fades value out
RGB_MATRIX_SOLID_MULTISPLASH, // Hue & value pulse away from multiple key hits then fades value out RGB_MATRIX_SOLID_MULTISPLASH, // Hue & value pulse away from multiple key hits then fades value out
RGB_MATRIX_STARLIGHT, // LEDs turn on and off at random at varying brightness, maintaining user set color RGB_MATRIX_STARLIGHT, // LEDs turn on and off at random at varying brightness, maintaining user set color
RGB_MATRIX_STARLIGHT_SMOOTH, // LEDs slowly increase and decrease in brightness randomly
RGB_MATRIX_STARLIGHT_DUAL_HUE, // LEDs turn on and off at random at varying brightness, modifies user set hue by +- 30 RGB_MATRIX_STARLIGHT_DUAL_HUE, // LEDs turn on and off at random at varying brightness, modifies user set hue by +- 30
RGB_MATRIX_STARLIGHT_DUAL_SAT, // LEDs turn on and off at random at varying brightness, modifies user set saturation by +- 30 RGB_MATRIX_STARLIGHT_DUAL_SAT, // LEDs turn on and off at random at varying brightness, modifies user set saturation by +- 30
RGB_MATRIX_RIVERFLOW, // Modification to breathing animation, offset's animation depending on key location to simulate a river flowing RGB_MATRIX_RIVERFLOW, // Modification to breathing animation, offset's animation depending on key location to simulate a river flowing
@ -193,6 +194,7 @@ You can enable a single effect by defining `ENABLE_[EFFECT_NAME]` in your `confi
|`#define ENABLE_RGB_MATRIX_PIXEL_FLOW` |Enables `RGB_MATRIX_PIXEL_FLOW` | |`#define ENABLE_RGB_MATRIX_PIXEL_FLOW` |Enables `RGB_MATRIX_PIXEL_FLOW` |
|`#define ENABLE_RGB_MATRIX_PIXEL_RAIN` |Enables `RGB_MATRIX_PIXEL_RAIN` | |`#define ENABLE_RGB_MATRIX_PIXEL_RAIN` |Enables `RGB_MATRIX_PIXEL_RAIN` |
|`#define ENABLE_RGB_MATRIX_STARLIGHT` |Enables `RGB_MATRIX_STARLIGHT` | |`#define ENABLE_RGB_MATRIX_STARLIGHT` |Enables `RGB_MATRIX_STARLIGHT` |
|`#define ENABLE_RGB_MATRIX_STARLIGHT_SMOOTH` |Enables `RGB_MATRIX_STARLIGHT_SMOOTH` |
|`#define ENABLE_RGB_MATRIX_STARLIGHT_DUAL_HUE` |Enables `RGB_MATRIX_STARLIGHT_DUAL_HUE` | |`#define ENABLE_RGB_MATRIX_STARLIGHT_DUAL_HUE` |Enables `RGB_MATRIX_STARLIGHT_DUAL_HUE` |
|`#define ENABLE_RGB_MATRIX_STARLIGHT_DUAL_SAT` |Enables `RGB_MATRIX_STARLIGHT_DUAL_SAT` | |`#define ENABLE_RGB_MATRIX_STARLIGHT_DUAL_SAT` |Enables `RGB_MATRIX_STARLIGHT_DUAL_SAT` |
|`#define ENABLE_RGB_MATRIX_RIVERFLOW` |Enables `RGB_MATRIX_RIVERFLOW` | |`#define ENABLE_RGB_MATRIX_RIVERFLOW` |Enables `RGB_MATRIX_RIVERFLOW` |
@ -378,6 +380,10 @@ These are defined in [`color.h`](https://github.com/qmk/qmk_firmware/blob/master
#define RGB_MATRIX_DEFAULT_SAT 255 // Sets the default saturation value, if none has been set #define RGB_MATRIX_DEFAULT_SAT 255 // Sets the default saturation value, if none has been set
#define RGB_MATRIX_DEFAULT_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS // Sets the default brightness value, if none has been set #define RGB_MATRIX_DEFAULT_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS // Sets the default brightness value, if none has been set
#define RGB_MATRIX_DEFAULT_SPD 127 // Sets the default animation speed, if none has been set #define RGB_MATRIX_DEFAULT_SPD 127 // Sets the default animation speed, if none has been set
#define RGB_MATRIX_HUE_STEP 8 // The value by which to increment the hue per adjustment action
#define RGB_MATRIX_SAT_STEP 16 // The value by which to increment the saturation per adjustment action
#define RGB_MATRIX_VAL_STEP 16 // The value by which to increment the brightness per adjustment action
#define RGB_MATRIX_SPD_STEP 16 // The value by which to increment the animation speed per adjustment action
#define RGB_MATRIX_DEFAULT_FLAGS LED_FLAG_ALL // Sets the default LED flags, if none has been set #define RGB_MATRIX_DEFAULT_FLAGS LED_FLAG_ALL // Sets the default LED flags, if none has been set
#define RGB_MATRIX_SPLIT { X, Y } // (Optional) For split keyboards, the number of LEDs connected on each half. X = left, Y = Right. #define RGB_MATRIX_SPLIT { X, Y } // (Optional) For split keyboards, the number of LEDs connected on each half. X = left, Y = Right.
// If reactive effects are enabled, you also will want to enable SPLIT_TRANSPORT_MIRROR // If reactive effects are enabled, you also will want to enable SPLIT_TRANSPORT_MIRROR
@ -480,7 +486,7 @@ This example sets the modifiers to be a specific color based on the layer state.
bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
hsv_t hsv = {0, 255, 255}; hsv_t hsv = {0, 255, 255};
if (layer_state_is(layer_state, 2)) { if (get_highest_layer(layer_state|default_layer_state) == 2) {
hsv = (hsv_t){130, 255, 255}; hsv = (hsv_t){130, 255, 255};
} else { } else {
hsv = (hsv_t){30, 255, 255}; hsv = (hsv_t){30, 255, 255};

View File

@ -97,9 +97,9 @@ Your RGB lighting can be configured by placing these `#define`s in your `config.
|Define |Default |Description | |Define |Default |Description |
|---------------------------|----------------------------|---------------------------------------------------------------------------------------------------------------------------| |---------------------------|----------------------------|---------------------------------------------------------------------------------------------------------------------------|
|`RGBLIGHT_HUE_STEP` |`8` |The number of steps to cycle through the hue by | |`RGBLIGHT_HUE_STEP` |`8` |The value by which to increment the hue per adjustment action |
|`RGBLIGHT_SAT_STEP` |`17` |The number of steps to increment the saturation by | |`RGBLIGHT_SAT_STEP` |`17` |The value by which to increment the saturation per adjustment action |
|`RGBLIGHT_VAL_STEP` |`17` |The number of steps to increment the brightness by | |`RGBLIGHT_VAL_STEP` |`17` |The value by which to increment the brightness per adjustment action |
|`RGBLIGHT_LIMIT_VAL` |`255` |The maximum brightness level | |`RGBLIGHT_LIMIT_VAL` |`255` |The maximum brightness level |
|`RGBLIGHT_SLEEP` |*Not defined* |If defined, the RGB lighting will be switched off when the host goes to sleep | |`RGBLIGHT_SLEEP` |*Not defined* |If defined, the RGB lighting will be switched off when the host goes to sleep |
|`RGBLIGHT_SPLIT` |*Not defined* |If defined, synchronization functionality for split keyboards is added | |`RGBLIGHT_SPLIT` |*Not defined* |If defined, synchronization functionality for split keyboards is added |

View File

@ -444,7 +444,7 @@ This setting implies that `RGBLIGHT_SPLIT` is enabled, and will forcibly enable
#define SPLIT_USB_DETECT #define SPLIT_USB_DETECT
``` ```
Enabling this option changes the startup behavior to listen for an active USB communication to delegate which part is master and which is slave. With this option enabled and theres's USB communication, then that half assumes it is the master, otherwise it assumes it is the slave. Enabling this option changes the startup behavior to listen for an active USB communication to delegate which part is master and which is slave. With this option enabled and active USB communication, then that half assumes it is the master, otherwise it assumes it is the slave.
Without this option, the master is the half that can detect voltage on the physical USB connection (VBUS detection). Without this option, the master is the half that can detect voltage on the physical USB connection (VBUS detection).

View File

@ -4,24 +4,32 @@
The [Open Steno Project](https://www.openstenoproject.org/) has built an open-source program called Plover that provides real-time translation of steno strokes into words and commands. It has an established dictionary and supports The [Open Steno Project](https://www.openstenoproject.org/) has built an open-source program called Plover that provides real-time translation of steno strokes into words and commands. It has an established dictionary and supports
## Steno Support in QMK
There are three ways that QMK keyboards can support steno, with varying degrees of configuration required:
1. Plover with [Arpeggiation](https://plover.wiki/index.php/Glossary#Arpeggiate) requires no changes to any keyboard and is supported by QMK as well as any other QWERTY keyboard.
2. Plover with [NKRO](https://plover.wiki/index.php/Using_a_standard_keyboard_with_Plover#NKRO). If your keyboard supports NKRO in hardware and you have NKRO enabled as a USB endpoint, you can chord with the keyboard. Many devices will arrive stock like this and will require no changes.
3. Steno Machine Protocols. This requires the most configuration, but this has the advantage of allowing you to use your keyboard keys normally (either on another layer or another piece of hardware) without enabling and disabling your steno software.
## Plover with QWERTY Keyboard {#plover-with-qwerty-keyboard} ## Plover with QWERTY Keyboard {#plover-with-qwerty-keyboard}
Plover can work with any standard QWERTY keyboard, although it is more efficient if the keyboard supports NKRO (n-key rollover) to allow Plover to see all the pressed keys at once. An example keymap for Plover can be found in `planck/keymaps/default`. Switching to the `PLOVER` layer adjusts the position of the keyboard to support the number bar. Plover can work with any standard QWERTY keyboard, although it is more efficient if the keyboard supports NKRO (n-key rollover) to allow Plover to see all the pressed keys at once. An example keymap for Plover can be found in `planck/keymaps/default`. Switching to the `PLOVER` layer adjusts the position of the keyboard to support the number bar.
To enable NKRO, add `NKRO_ENABLE = yes` in your `rules.mk` and make sure to press `NK_ON` to turn it on because `NKRO_ENABLE = yes` merely adds the possibility of switching to NKRO mode but it doesn't automatically switch to it. If you want to automatically switch, add `#define FORCE_NKRO` in your `config.h`. To enable NKRO, add `NKRO_ENABLE = yes` in your `rules.mk` and make sure to press `NK_ON` to turn it on because `NKRO_ENABLE = yes` merely adds the possibility of switching to NKRO mode but it doesn't automatically switch to it. If you want to automatically switch, add `#define NKRO_DEFAULT_ON true` in your `config.h`.
You may also need to adjust your layout, either in QMK or in Plover, if you have anything other than a standard layout. You may also want to purchase some steno-friendly keycaps to make it easier to hit multiple keys. You may also need to adjust your layout, either in QMK or in Plover, if you have anything other than a standard layout. You may also want to purchase some steno-friendly keycaps to make it easier to hit multiple keys.
## Plover with Steno Protocol {#plover-with-steno-protocol} ## Plover with Steno Protocol {#plover-with-steno-protocol}
Plover also understands the language of several steno machines. QMK can speak a couple of these languages: TX Bolt and GeminiPR. An example layout can be found in `planck/keymaps/steno`. Plover also understands the language of several steno machines. QMK can speak a couple of these languages: TX Bolt and GeminiPR. An example layout can be found in `splitography/keymaps/default`.
When QMK speaks to Plover over a steno protocol, Plover will not use the keyboard as input. This means that you can switch back and forth between a standard keyboard and your steno keyboard, or even switch layers from Plover to standard and back without needing to activate/deactivate Plover. When QMK speaks to Plover over a steno protocol, Plover will not use the keyboard as input. This means that you can switch back and forth between a standard keyboard and your steno keyboard, or even switch layers from Plover to standard and back without needing to activate/deactivate Plover.
In this mode, Plover expects to speak with a steno machine over a serial port so QMK will present itself to the operating system as a virtual serial port in addition to a keyboard. In this mode, Plover expects to speak with a steno machine over a serial port so QMK will present itself to the operating system as a virtual serial port in addition to a keyboard.
::: info ::: info
Note: Due to hardware limitations, you might not be able to run both a virtual serial port and mouse emulation at the same time. Due to hardware limitations, you might not be able to run both a virtual serial port and other features (mouse keys, NKRO, or MIDI support) at the same time. You will likely encounter a compile time error if this is the case. Disable those other features as necessary.
::: :::
::: warning ::: warning
@ -156,7 +164,7 @@ At the end of this scenario given as an example, `chord` would have five bits se
## Keycode Reference {#keycode-reference} ## Keycode Reference {#keycode-reference}
::: info ::: info
Note: TX Bolt does not support the full set of keys. The TX Bolt implementation in QMK will map the GeminiPR keys to the nearest TX Bolt key so that one key map will work for both. TX Bolt does not support the full set of keys. The TX Bolt implementation in QMK will map the GeminiPR keys to the nearest TX Bolt key so that one key map will work for both.
::: :::
|GeminiPR|TX Bolt|Steno Key| |GeminiPR|TX Bolt|Steno Key|

View File

@ -170,20 +170,6 @@ typedef struct {
uint16_t held; uint16_t held;
} tap_dance_tap_hold_t; } tap_dance_tap_hold_t;
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
tap_dance_action_t *action;
switch (keycode) {
case TD(CT_CLN): // list all tap dance keycodes with tap-hold configurations
action = &tap_dance_actions[QK_TAP_DANCE_GET_INDEX(keycode)];
if (!record->event.pressed && action->state.count && !action->state.finished) {
tap_dance_tap_hold_t *tap_hold = (tap_dance_tap_hold_t *)action->user_data;
tap_code16(tap_hold->tap);
}
}
return true;
}
void tap_dance_tap_hold_finished(tap_dance_state_t *state, void *user_data) { void tap_dance_tap_hold_finished(tap_dance_state_t *state, void *user_data) {
tap_dance_tap_hold_t *tap_hold = (tap_dance_tap_hold_t *)user_data; tap_dance_tap_hold_t *tap_hold = (tap_dance_tap_hold_t *)user_data;
@ -212,11 +198,28 @@ void tap_dance_tap_hold_reset(tap_dance_state_t *state, void *user_data) {
} }
#define ACTION_TAP_DANCE_TAP_HOLD(tap, hold) \ #define ACTION_TAP_DANCE_TAP_HOLD(tap, hold) \
{ .fn = {NULL, tap_dance_tap_hold_finished, tap_dance_tap_hold_reset}, .user_data = (void *)&((tap_dance_tap_hold_t){tap, hold, 0}), } { \
.fn = {NULL, tap_dance_tap_hold_finished, tap_dance_tap_hold_reset}, \
.user_data = (void *)&((tap_dance_tap_hold_t){tap, hold, 0}), \
}
tap_dance_action_t tap_dance_actions[] = { tap_dance_action_t tap_dance_actions[] = {
[CT_CLN] = ACTION_TAP_DANCE_TAP_HOLD(KC_COLN, KC_SCLN), [CT_CLN] = ACTION_TAP_DANCE_TAP_HOLD(KC_COLN, KC_SCLN),
}; };
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
tap_dance_action_t *action;
switch (keycode) {
case TD(CT_CLN): // list all tap dance keycodes with tap-hold configurations
action = &tap_dance_actions[QK_TAP_DANCE_GET_INDEX(keycode)];
if (!record->event.pressed && action->state.count && !action->state.finished) {
tap_dance_tap_hold_t *tap_hold = (tap_dance_tap_hold_t *)action->user_data;
tap_code16(tap_hold->tap);
}
}
return true;
}
``` ```
#### Example 4: 'Quad Function Tap-Dance' {#example-4} #### Example 4: 'Quad Function Tap-Dance' {#example-4}

View File

@ -50,6 +50,13 @@ By default docker or podman are automatically detected and docker is preferred o
RUNTIME="podman" util/docker_build.sh keyboard:keymap:target RUNTIME="podman" util/docker_build.sh keyboard:keymap:target
``` ```
If flashing is not required, it's possible to run the container as unprivileged (on Linux), and without docker-machine (on Windows/macOS):
```
SKIP_FLASHING_SUPPORT=1 util/docker_build.sh keyboard:keymap:target
```
## FAQ ## FAQ
### Why can't I flash on Windows/macOS ### Why can't I flash on Windows/macOS

View File

@ -19,8 +19,8 @@ Within the folder `keyboards`, its subfolder `handwired` and its vendor and manu
* `config.h`: The file that sets the default compile time options. Do not edit this file directly, instead use a keymap specific `config.h`. * `config.h`: The file that sets the default compile time options. Do not edit this file directly, instead use a keymap specific `config.h`.
* `info.json`: The file used for setting layout for QMK Configurator. See [Configurator Support](reference_configurator_support) for more information. * `info.json`: The file used for setting layout for QMK Configurator. See [Configurator Support](reference_configurator_support) for more information.
* `readme.md`: A brief overview of the keyboard. * `readme.md`: A brief overview of the keyboard.
* `<keyboardName>.h`: This file is where the keyboard layout is defined against the keyboard's switch matrix. * `<keyboard>.h`: This file is where the keyboard layout is defined against the keyboard's switch matrix.
* `<keyboardName>.c`: This file is where you can find custom code for the keyboard. * `<keyboard>.c`: This file is where you can find custom code for the keyboard.
For more information on project structure, see [QMK Keyboard Guidelines](hardware_keyboard_guidelines). For more information on project structure, see [QMK Keyboard Guidelines](hardware_keyboard_guidelines).

View File

@ -1,8 +1,8 @@
# More Detailed `make` Instructions # More Detailed `make` Instructions
The full syntax of the `make` command is `<keyboard_folder>:<keymap>:<target>`, where: The full syntax of the `make` command is `<keyboard>:<keymap>:<target>`, where:
* `<keyboard_folder>` is the path of the keyboard, for example `planck` * `<keyboard>` is the path of the keyboard, for example `planck`
* Use `all` to compile all keyboards * Use `all` to compile all keyboards
* Specify the path to compile a revision, for example `planck/rev4` or `planck/rev3` * Specify the path to compile a revision, for example `planck/rev4` or `planck/rev3`
* If the keyboard doesn't have any folders, it can be left out * If the keyboard doesn't have any folders, it can be left out

View File

@ -231,7 +231,7 @@ Once you have confirmed that the keyboard is working, if you have used a seperat
If you found this fullfilling you could experiment by adding additional features such as [in switch LEDs](https://geekhack.org/index.php?topic=94258.0), [in switch RGB](https://www.reddit.com/r/MechanicalKeyboards/comments/5s1l5u/photoskeyboard_science_i_made_a_handwired_rgb/), [RGB underglow](https://medium.com/@DavidNZ/hand-wired-custom-keyboard-cdd14429c7b3#.7a1ovebsk) or even an [OLED display!](https://www.reddit.com/r/olkb/comments/5zy7og/adding_ssd1306_oled_display_to_your_build/) If you found this fullfilling you could experiment by adding additional features such as [in switch LEDs](https://geekhack.org/index.php?topic=94258.0), [in switch RGB](https://www.reddit.com/r/MechanicalKeyboards/comments/5s1l5u/photoskeyboard_science_i_made_a_handwired_rgb/), [RGB underglow](https://medium.com/@DavidNZ/hand-wired-custom-keyboard-cdd14429c7b3#.7a1ovebsk) or even an [OLED display!](https://www.reddit.com/r/olkb/comments/5zy7og/adding_ssd1306_oled_display_to_your_build/)
There are a lot of possibilities inside the firmware - explore [docs.qmk.fm](https://docs.qmk.fm) for a full feature list, and dive into the different keyboards to see how people use all of them. You can always stop by [the OLKB subreddit](https://reddit.com/r/olkb) or [QMK Discord](https://discord.gg/qmk) for help! There are a lot of possibilities inside the firmware - explore [the documentation](/) for a full feature list, and dive into the different keyboards to see how people use all of them. You can always stop by [the OLKB subreddit](https://reddit.com/r/olkb) or [QMK Discord](https://discord.gg/qmk) for help!
## Links to Other Guides ## Links to Other Guides

View File

@ -44,7 +44,11 @@ QMK uses sub-folders both for organization and to share code between revisions o
qmk_firmware/keyboards/top_folder/sub_1/sub_2/sub_3/sub_4 qmk_firmware/keyboards/top_folder/sub_1/sub_2/sub_3/sub_4
``` ```
If a sub-folder has a `rules.mk` file it will be considered a compilable keyboard. It will be available in QMK Configurator and tested with `make all`. If you are using a folder to organize several keyboards from the same maker you should not have a `rules.mk` file. If a sub-folder has a `keyboard.json` file it will be considered a compilable keyboard. It will be available in QMK Configurator and tested with `make all`. If you are using a folder to organize several keyboards from the same maker you should not have a `keyboard.json` file.
::: tip
When configuring a keyboard with multiple revisions (like the `clueboard/66` example below), an `info.json` file at the top keyboard level (eg. `clueboard/66`) should be used for configuration shared between revisions. Then `keyboard.json` in each revision directory containing revision-specific configuration, and indicating a buildable keyboard.
:::
Example: Example:
@ -52,35 +56,49 @@ Clueboard uses sub-folders for both purposes, organization and keyboard revision
* [`qmk_firmware`](https://github.com/qmk/qmk_firmware/tree/master) * [`qmk_firmware`](https://github.com/qmk/qmk_firmware/tree/master)
* [`keyboards`](https://github.com/qmk/qmk_firmware/tree/master/keyboards) * [`keyboards`](https://github.com/qmk/qmk_firmware/tree/master/keyboards)
* [`clueboard`](https://github.com/qmk/qmk_firmware/tree/master/keyboards/clueboard) &larr; This is the organization folder, there's no `rules.mk` file * [`clueboard`](https://github.com/qmk/qmk_firmware/tree/master/keyboards/clueboard) &larr; This is the organization folder, there's no `keyboard.json` file
* [`60`](https://github.com/qmk/qmk_firmware/tree/master/keyboards/clueboard/60) &larr; This is a compilable keyboard, it has a `rules.mk` file * [`60`](https://github.com/qmk/qmk_firmware/tree/master/keyboards/clueboard/60) &larr; This is a compilable keyboard - it has a `keyboard.json` file
* [`66`](https://github.com/qmk/qmk_firmware/tree/master/keyboards/clueboard/66) &larr; This is also compilable- it uses `DEFAULT_FOLDER` to specify `rev3` as the default revision * [`66`](https://github.com/qmk/qmk_firmware/tree/master/keyboards/clueboard/66) &larr; This is not a compilable keyboard - a revision must be specified
* [`rev1`](https://github.com/qmk/qmk_firmware/tree/master/keyboards/clueboard/66/rev1) &larr; compilable: `make clueboard/66/rev1` * [`rev1`](https://github.com/qmk/qmk_firmware/tree/master/keyboards/clueboard/66/rev1) &larr; compilable: `make clueboard/66/rev1`
* [`rev2`](https://github.com/qmk/qmk_firmware/tree/master/keyboards/clueboard/66/rev2) &larr; compilable: `make clueboard/66/rev2` * [`rev2`](https://github.com/qmk/qmk_firmware/tree/master/keyboards/clueboard/66/rev2) &larr; compilable: `make clueboard/66/rev2`
* [`rev3`](https://github.com/qmk/qmk_firmware/tree/master/keyboards/clueboard/66/rev3) &larr; compilable: `make clueboard/66/rev3` or `make clueboard/66` * [`rev3`](https://github.com/qmk/qmk_firmware/tree/master/keyboards/clueboard/66/rev3) &larr; compilable: `make clueboard/66/rev3`
## Keyboard Folder Structure ## Keyboard Folder Structure
Your keyboard should be located in `qmk_firmware/keyboards/` and the folder name should be your keyboard's name as described in the previous section. Inside this folder should be several files: Your keyboard should be located in `qmk_firmware/keyboards/` and the folder name should be your keyboard's name as described in the previous section. Inside this folder should be several files, some of which are optional:
* `readme.md` * `readme.md`
* `info.json` * `keyboard.json` (or `info.json`)
* `config.h` * `config.h`
* `rules.mk` * `rules.mk`
* `<keyboard_name>.c` * `<keyboard>.c`
* `<keyboard_name>.h` * `<keyboard>.h`
### `readme.md` ### `readme.md`
All projects need to have a `readme.md` file that explains what the keyboard is, who made it and where it's available. If applicable, it should also contain links to more information, such as the maker's website. Please follow the [published template](documentation_templates#keyboard-readmemd-template). All projects need to have a `readme.md` file that explains what the keyboard is, who made it and where it's available. If applicable, it should also contain links to more information, such as the maker's website. Please follow the [published template](documentation_templates#keyboard-readmemd-template).
### `info.json` ### `keyboard.json`/`info.json`
This file is used by the [QMK API](https://github.com/qmk/qmk_api). It contains the information [QMK Configurator](https://config.qmk.fm/) needs to display a representation of your keyboard. You can also set metadata here. For more information see the [reference page](reference_info_json). The `keyboard.json` file is necessary for your keyboard (or keyboard revision) to be considered a buildable keyboard. The same content is valid in both `info.json` and `keyboard.json`. For the available configuration options of this file, see the [reference page](reference_info_json). This file is also used by the [QMK API](https://github.com/qmk/qmk_api), and by the [QMK Configurator](https://config.qmk.fm/) to display a representation of the available layouts of your keyboard.
Additionally, this is where layouts available on your keyboard are defined. If you only have a single layout, it should be named `LAYOUT`. When defining multiple layouts, you should have a base layout, named `LAYOUT_all`, that supports all possible switch positions in your matrix, even if that layout is impossible to build physically. This is the layout that should be used in the `default` keymap. You should then have additional keymaps named `default_<layout>` that configure keymaps for the other layouts. Layout macro names are entirely lowercase, except for the prefix of `LAYOUT`.
As an example, if you have a 60% PCB that supports ANSI and ISO, you might define the following layouts and keymaps:
| Layout Name | Keymap Name | Description |
|-------------|--------------|------------------------------------------|
| LAYOUT_all | default | A layout that supports both ISO and ANSI |
| LAYOUT_ansi | default_ansi | An ANSI layout |
| LAYOUT_iso | default_iso | An ISO layout |
::: tip
Providing only `LAYOUT_all` is invalid, as is providing a `LAYOUT` when multiple layouts are present.
:::
### `config.h` ### `config.h`
All projects need to have a `config.h` file that sets things like the matrix size, product name, USB VID/PID, description and other settings. In general, use this file to set essential information and defaults for your keyboard that will always work. Some projects will need to have a `config.h` that configures parameters that are not possible to be set in `keyboard.json`. This is not a required file.
The `config.h` files can also be placed in sub-folders, and the order in which they are read is as follows: The `config.h` files can also be placed in sub-folders, and the order in which they are read is as follows:
@ -111,7 +129,7 @@ The `post_config.h` file can be used for additional post-processing, depending o
#define USB_MAX_POWER_CONSUMPTION 400 #define USB_MAX_POWER_CONSUMPTION 400
#else #else
// fix iPhone and iPad power adapter issue // fix iPhone and iPad power adapter issue
// iOS device need lessthan 100 // iOS devices need less than 100
#define USB_MAX_POWER_CONSUMPTION 100 #define USB_MAX_POWER_CONSUMPTION 100
#endif #endif
@ -138,7 +156,7 @@ If you define options using `post_config.h` as in the above example, you should
### `rules.mk` ### `rules.mk`
The presence of this file means that the folder is a keyboard target and can be used in `make` commands. This is where you setup the build environment for your keyboard and configure the default set of features. This file is typically used to configure hardware drivers (eg. pointing device), or to include additional C files in compilation. This is not a required file.
The `rules.mk` file can also be placed in a sub-folder, and its reading order is as follows: The `rules.mk` file can also be placed in a sub-folder, and its reading order is as follows:
@ -185,9 +203,9 @@ The `post_rules.mk` file can interpret `features` of a keyboard-level before `co
See `build_keyboard.mk` and `common_features.mk` for more details. See `build_keyboard.mk` and `common_features.mk` for more details.
::: :::
### `<keyboard_name.c>` ### `<keyboard>.c`
This is where you will write custom code for your keyboard. Typically you will write code to initialize and interface with the hardware in your keyboard. If your keyboard consists of only a key matrix with no LEDs, speakers, or other auxiliary hardware this file can be blank. This file should contain C code required for the functionality of your keyboard, for example hardware initialisation code, OLED display code, and so on. This file should only contain code necessary for the keyboard to work, and *not* things that should be left to the end user to configure in their keymap. This file is automatically included in compilation if it exists. This is not a required file.
The following functions are typically defined in this file: The following functions are typically defined in this file:
@ -196,33 +214,13 @@ The following functions are typically defined in this file:
* `bool process_record_kb(uint16_t keycode, keyrecord_t *record)` * `bool process_record_kb(uint16_t keycode, keyrecord_t *record)`
* `bool led_update_kb(led_t led_state)` * `bool led_update_kb(led_t led_state)`
### `<keyboard_name.h>` ### `<keyboard>.h`
This file is used to define the matrix for your keyboard. You should define at least one C macro which translates an array into a matrix representing the physical switch matrix for your keyboard. If it's possible to build your keyboard with multiple layouts you should define additional macros. This file can contain function prototypes for custom functions and other header file code utilised by `<keyboard>.c`. The `<keyboard>.c` file should include this file. This is not a required file.
If you have only a single layout you should call this macro `LAYOUT`.
When defining multiple layouts you should have a base layout, named `LAYOUT_all`, that supports all possible switch positions on your matrix, even if that layout is impossible to build physically. This is the macro you should use in your `default` keymap. You should then have additional keymaps named `default_<layout>` that use your other layout macros. This will make it easier for people to use the layouts you define.
Layout macro names are entirely lowercase, except for the word `LAYOUT` at the front.
As an example, if you have a 60% PCB that supports ANSI and ISO you might define the following layouts and keymaps:
| Layout Name | Keymap Name | Description |
|-------------|-------------|-------------|
| LAYOUT_all | default | A layout that supports both ISO and ANSI |
| LAYOUT_ansi | default_ansi | An ANSI layout |
| LAYOUT_iso | default_iso | An ISO layout |
::: tip
Providing only `LAYOUT_all` is invalid - especially when implementing the additional layouts within 3rd party tooling.
:::
## Image/Hardware Files ## Image/Hardware Files
In an effort to keep the repo size down we're no longer accepting binary files of any format, with few exceptions. Hosting them elsewhere (such as <https://imgur.com>) and linking them in the `readme.md` is preferred. In an effort to keep the repo size down we do not accept binary files of any format, with few exceptions. Hosting them elsewhere (such as <https://imgur.com>) and linking them in the `readme.md` is preferred. Hardware files such as plates, cases, and PCBs can be published in a personal repository or elsewhere, and linked to by your keyboard's `readme.md` file.
Hardware files (such as plates, cases, pcb) can be contributed to the [qmk.fm repo](https://github.com/qmk/qmk.fm) and they will be made available on [qmk.fm](https://qmk.fm). Downloadable files are stored in `/<keyboard>/` (name follows the same format as above) which are served at `https://qmk.fm/<keyboard>/`, and pages are generated from `/_pages/<keyboard>/` which are served at the same location (.md files are generated into .html files through Jekyll). Check out the `lets_split` folder for an example.
## Keyboard Defaults ## Keyboard Defaults
@ -232,8 +230,6 @@ Given the amount of functionality that QMK exposes it's very easy to confuse new
[Magic Keycodes](keycodes_magic) and [Command](features/command) are two related features that allow a user to control their keyboard in non-obvious ways. We recommend you think long and hard about if you're going to enable either feature, and how you will expose this functionality. Keep in mind that users who want this functionality can enable it in their personal keymaps without affecting all the novice users who may be using your keyboard as their first programmable board. [Magic Keycodes](keycodes_magic) and [Command](features/command) are two related features that allow a user to control their keyboard in non-obvious ways. We recommend you think long and hard about if you're going to enable either feature, and how you will expose this functionality. Keep in mind that users who want this functionality can enable it in their personal keymaps without affecting all the novice users who may be using your keyboard as their first programmable board.
By far the most common problem new users encounter is accidentally triggering Bootmagic while they're plugging in their keyboard. They're holding the keyboard by the bottom, unknowingly pressing in alt and spacebar, and then they find that these keys have been swapped on them. We recommend leaving this feature disabled by default, but if you do turn it on consider setting `BOOTMAGIC_KEY_SALT` to a key that is hard to press while plugging your keyboard in.
If your keyboard does not have 2 shift keys you should provide a working default for `IS_COMMAND`, even when you have set `COMMAND_ENABLE = no`. This will give your users a default to conform to if they do enable Command. If your keyboard does not have 2 shift keys you should provide a working default for `IS_COMMAND`, even when you have set `COMMAND_ENABLE = no`. This will give your users a default to conform to if they do enable Command.
## Custom Keyboard Programming ## Custom Keyboard Programming
@ -242,7 +238,7 @@ As documented on [Customizing Functionality](custom_quantum_functions) you can d
## Non-Production/Handwired Projects ## Non-Production/Handwired Projects
We're happy to accept any project that uses QMK, including prototypes and handwired ones, but we have a separate `/keyboards/handwired/` folder for them, so the main `/keyboards/` folder doesn't get overcrowded. If a prototype project becomes a production project at some point in the future, we'd be happy to move it to the main `/keyboards/` folder! We're happy to accept any project that uses QMK, including handwired ones, but we have a separate `/keyboards/handwired/` folder for them, so the main `/keyboards/` folder doesn't get overcrowded. If a prototype project becomes a production project at some point in the future, we'd be happy to move it to the main `/keyboards/` folder!
## Warnings as Errors ## Warnings as Errors

View File

@ -176,11 +176,11 @@ See also: [Basic Keycodes](keycodes_basic)
|`KC_LEFT_CTRL` |`KC_LCTL` |Left Control |✔ |✔ |✔ | |`KC_LEFT_CTRL` |`KC_LCTL` |Left Control |✔ |✔ |✔ |
|`KC_LEFT_SHIFT` |`KC_LSFT` |Left Shift |✔ |✔ |✔ | |`KC_LEFT_SHIFT` |`KC_LSFT` |Left Shift |✔ |✔ |✔ |
|`KC_LEFT_ALT` |`KC_LALT`, `KC_LOPT` |Left Alt (Option) |✔ |✔ |✔ | |`KC_LEFT_ALT` |`KC_LALT`, `KC_LOPT` |Left Alt (Option) |✔ |✔ |✔ |
|`KC_LEFT_GUI` |`KC_LGUI`, `KC_LCMD`, `KC_LWIN`|Left GUI (Windows/Command/Meta key) |✔ |✔ |✔ | |`KC_LEFT_GUI` |`KC_LGUI`, `KC_LCMD`, `KC_LWIN`|Left GUI (Windows/Command/Super key) |✔ |✔ |✔ |
|`KC_RIGHT_CTRL` |`KC_RCTL` |Right Control |✔ |✔ |✔ | |`KC_RIGHT_CTRL` |`KC_RCTL` |Right Control |✔ |✔ |✔ |
|`KC_RIGHT_SHIFT` |`KC_RSFT` |Right Shift |✔ |✔ |✔ | |`KC_RIGHT_SHIFT` |`KC_RSFT` |Right Shift |✔ |✔ |✔ |
|`KC_RIGHT_ALT` |`KC_RALT`, `KC_ROPT`, `KC_ALGR`|Right Alt (Option/AltGr) |✔ |✔ |✔ | |`KC_RIGHT_ALT` |`KC_RALT`, `KC_ROPT`, `KC_ALGR`|Right Alt (Option/AltGr) |✔ |✔ |✔ |
|`KC_RIGHT_GUI` |`KC_RGUI`, `KC_RCMD`, `KC_RWIN`|Right GUI (Windows/Command/Meta key) |✔ |✔ |✔ | |`KC_RIGHT_GUI` |`KC_RGUI`, `KC_RCMD`, `KC_RWIN`|Right GUI (Windows/Command/Super key) |✔ |✔ |✔ |
|`KC_SYSTEM_POWER` |`KC_PWR` |System Power Down |✔ |✔<sup>3</sup>|✔ | |`KC_SYSTEM_POWER` |`KC_PWR` |System Power Down |✔ |✔<sup>3</sup>|✔ |
|`KC_SYSTEM_SLEEP` |`KC_SLEP` |System Sleep |✔ |✔<sup>3</sup>|✔ | |`KC_SYSTEM_SLEEP` |`KC_SLEP` |System Sleep |✔ |✔<sup>3</sup>|✔ |
|`KC_SYSTEM_WAKE` |`KC_WAKE` |System Wake | |✔<sup>3</sup>|✔ | |`KC_SYSTEM_WAKE` |`KC_WAKE` |System Wake | |✔<sup>3</sup>|✔ |
@ -404,7 +404,6 @@ See also: [Layer Switching](feature_layers#switching-and-toggling-layers)
|`DF(layer)` |Set the base (default) layer until the keyboard loses power | |`DF(layer)` |Set the base (default) layer until the keyboard loses power |
|`PDF(layer)` |Set the base (default) layer in EEPROM | |`PDF(layer)` |Set the base (default) layer in EEPROM |
|`MO(layer)` |Momentarily turn on `layer` when pressed (requires `KC_TRNS` on destination layer)| |`MO(layer)` |Momentarily turn on `layer` when pressed (requires `KC_TRNS` on destination layer)|
|`OSL(layer)` |Momentarily activates `layer` until a key is pressed. See [One Shot Keys](one_shot_keys) for details. |
|`LM(layer, mod)`|Momentarily turn on `layer` (like MO) with `mod` active as well. Where `mod` is a mods_bit. Mods can be viewed [here](mod_tap). Example Implementation: `LM(LAYER_1, MOD_LALT)`| |`LM(layer, mod)`|Momentarily turn on `layer` (like MO) with `mod` active as well. Where `mod` is a mods_bit. Mods can be viewed [here](mod_tap). Example Implementation: `LM(LAYER_1, MOD_LALT)`|
|`LT(layer, kc)` |Turn on `layer` when held, `kc` when tapped | |`LT(layer, kc)` |Turn on `layer` when held, `kc` when tapped |
|`TG(layer)` |Toggle `layer` on or off | |`TG(layer)` |Toggle `layer` on or off |
@ -659,57 +658,73 @@ See also: [Mouse Keys](features/mouse_keys)
See also: [Modifier Keys](feature_advanced_keycodes#modifier-keys) See also: [Modifier Keys](feature_advanced_keycodes#modifier-keys)
|Key |Aliases |Description | |Key |Aliases |Description |
|----------|----------------------------------|------------------------------------------------------| |----------|----------------------------------|-------------------------------------------------------------------|
|`LCTL(kc)`|`C(kc)` |Hold Left Control and press `kc` | |`LCTL(kc)`|`C(kc)` |Hold Left Control and press `kc` |
|`LSFT(kc)`|`S(kc)` |Hold Left Shift and press `kc` | |`LSFT(kc)`|`S(kc)` |Hold Left Shift and press `kc` |
|`LALT(kc)`|`A(kc)`, `LOPT(kc)` |Hold Left Alt and press `kc` | |`LALT(kc)`|`A(kc)`, `LOPT(kc)` |Hold Left Alt and press `kc` |
|`LGUI(kc)`|`G(kc)`, `LCMD(kc)`, `LWIN(kc)` |Hold Left GUI and press `kc` | |`LGUI(kc)`|`G(kc)`, `LCMD(kc)`, `LWIN(kc)` |Hold Left GUI and press `kc` |
|`RCTL(kc)`| |Hold Right Control and press `kc` | |`LCS(kc)` | |Hold Left Control and Left Shift and press `kc` |
|`RSFT(kc)`| |Hold Right Shift and press `kc` | |`LCA(kc)` | |Hold Left Control and Left Alt and press `kc` |
|`RALT(kc)`|`ROPT(kc)`, `ALGR(kc)` |Hold Right Alt (AltGr) and press `kc` | |`LCG(kc)` | |Hold Left Control and Left GUI and press `kc` |
|`RGUI(kc)`|`RCMD(kc)`, `RWIN(kc)` |Hold Right GUI and press `kc` | |`LSA(kc)` | |Hold Left Shift and Left Alt and press `kc` |
|`LSG(kc)` |`SGUI(kc)`, `SCMD(kc)`, `SWIN(kc)`|Hold Left Shift and Left GUI and press `kc` | |`LSG(kc)` |`SGUI(kc)`, `SCMD(kc)`, `SWIN(kc)`|Hold Left Shift and Left GUI and press `kc` |
|`LAG(kc)` | |Hold Left Alt and Left GUI and press `kc` | |`LAG(kc)` | |Hold Left Alt and Left GUI and press `kc` |
|`LCSG(kc)`| |Hold Left Control, Left Shift and Left GUI and press `kc` |
|`LCAG(kc)`| |Hold Left Control, Left Alt and Left GUI and press `kc` |
|`LSAG(kc)`| |Hold Left Shift, Left Alt and Left GUI and press `kc` |
|`RCTL(kc)`| |Hold Right Control and press `kc` |
|`RSFT(kc)`| |Hold Right Shift and press `kc` |
|`RALT(kc)`|`ROPT(kc)`, `ALGR(kc)` |Hold Right Alt and press `kc` |
|`RGUI(kc)`|`RCMD(kc)`, `RWIN(kc)` |Hold Right GUI and press `kc` |
|`RCS(kc)` | |Hold Right Control and Right Shift and press `kc` |
|`RCA(kc)` | |Hold Right Control and Right Alt and press `kc` |
|`RCG(kc)` | |Hold Right Control and Right GUI and press `kc` |
|`RSA(kc)` |`SAGR(kc)` |Hold Right Shift and Right Alt and press `kc` |
|`RSG(kc)` | |Hold Right Shift and Right GUI and press `kc` | |`RSG(kc)` | |Hold Right Shift and Right GUI and press `kc` |
|`RAG(kc)` | |Hold Right Alt and Right GUI and press `kc` | |`RAG(kc)` | |Hold Right Alt and Right GUI and press `kc` |
|`LCA(kc)` | |Hold Left Control and Alt and press `kc` | |`RCSG(kc)`| |Hold Right Control, Right Shift and Right GUI and press `kc` |
|`LSA(kc)` | |Hold Left Shift and Left Alt and press `kc` | |`RCAG(kc)`| |Hold Right Control, Right Alt and Right GUI and press `kc` |
|`RSA(kc)` |`SAGR(kc)` |Hold Right Shift and Right Alt (AltGr) and press `kc` | |`RSAG(kc)`| |Hold Right Shift, Right Alt and Right GUI and press `kc` |
|`RCS(kc)` | |Hold Right Control and Right Shift and press `kc` | |`MEH(kc)` | |Hold Left Control, Left Shift and Left Alt and press `kc` |
|`LCAG(kc)`| |Hold Left Control, Alt and GUI and press `kc` | |`HYPR(kc)`| |Hold Left Control, Left Shift, Left Alt and Left GUI and press `kc`|
|`MEH(kc)` | |Hold Left Control, Shift and Alt and press `kc` | |`KC_MEH` | |Left Control, Left Shift and Left Alt |
|`HYPR(kc)`| |Hold Left Control, Shift, Alt and GUI and press `kc` | |`KC_HYPR` | |Left Control, Left Shift, Left Alt and Left GUI |
|`KC_MEH` | |Left Control, Shift and Alt |
|`KC_HYPR` | |Left Control, Shift, Alt and GUI |
## Mod-Tap Keys {#mod-tap-keys} ## Mod-Tap Keys {#mod-tap-keys}
See also: [Mod-Tap](mod_tap) See also: [Mod-Tap](mod_tap)
|Key |Aliases |Description | |Key |Aliases |Description |
|-------------|-----------------------------------------------------------------|--------------------------------------------------------------| |-------------|-----------------------------------------------------------------|---------------------------------------------------------------------------|
|`MT(mod, kc)`| |`mod` when held, `kc` when tapped | |`MT(mod, kc)`| |`mod` when held, `kc` when tapped |
|`LCTL_T(kc)` |`CTL_T(kc)` |Left Control when held, `kc` when tapped | |`LCTL_T(kc)` |`CTL_T(kc)` |Left Control when held, `kc` when tapped |
|`LSFT_T(kc)` |`SFT_T(kc)` |Left Shift when held, `kc` when tapped | |`LSFT_T(kc)` |`SFT_T(kc)` |Left Shift when held, `kc` when tapped |
|`LALT_T(kc)` |`LOPT_T(kc)`, `ALT_T(kc)`, `OPT_T(kc)` |Left Alt when held, `kc` when tapped | |`LALT_T(kc)` |`ALT_T(kc)`, `LOPT_T(kc)`, `OPT_T(kc)` |Left Alt when held, `kc` when tapped |
|`LGUI_T(kc)` |`LCMD_T(kc)`, `LWIN_T(kc)`, `GUI_T(kc)`, `CMD_T(kc)`, `WIN_T(kc)`|Left GUI when held, `kc` when tapped | |`LGUI_T(kc)` |`GUI_T(kc)`, `LCMD_T(kc)`, `LWIN_T(kc)`, `CMD_T(kc)`, `WIN_T(kc)`|Left GUI when held, `kc` when tapped |
|`LCS_T(kc)` | |Left Control and Left Shift when held, `kc` when tapped |
|`LCA_T(kc)` | |Left Control and Left Alt when held, `kc` when tapped |
|`LCG_T(kc)` | |Left Control and Left GUI when held, `kc` when tapped |
|`LSA_T(kc)` | |Left Shift and Left Alt when held, `kc` when tapped |
|`LSG_T(kc)` |`SGUI_T(kc)`, `SCMD_T(kc)`, `SWIN_T(kc)` |Left Shift and Left GUI when held, `kc` when tapped |
|`LAG_T(kc)` | |Left Alt and Left GUI when held, `kc` when tapped |
|`LCSG_T(kc)` | |Left Control, Left Shift and Left GUI when held, `kc` when tapped |
|`LCAG_T(kc)` | |Left Control, Left Alt and Left GUI when held, `kc` when tapped |
|`LSAG_T(kc)` | |Left Shift, Left Alt and Left GUI when held, `kc` when tapped |
|`RCTL_T(kc)` | |Right Control when held, `kc` when tapped | |`RCTL_T(kc)` | |Right Control when held, `kc` when tapped |
|`RSFT_T(kc)` | |Right Shift when held, `kc` when tapped | |`RSFT_T(kc)` | |Right Shift when held, `kc` when tapped |
|`RALT_T(kc)` |`ROPT_T(kc)`, `ALGR_T(kc)` |Right Alt (AltGr) when held, `kc` when tapped | |`RALT_T(kc)` |`ROPT_T(kc)`, `ALGR_T(kc)` |Right Alt when held, `kc` when tapped |
|`RGUI_T(kc)` |`RCMD_T(kc)`, `RWIN_T(kc)` |Right GUI when held, `kc` when tapped | |`RGUI_T(kc)` |`RCMD_T(kc)`, `RWIN_T(kc)` |Right GUI when held, `kc` when tapped |
|`LSG_T(kc)` |`SGUI_T(kc)`, `SCMD_T(kc)`, `SWIN_T(kc)` |Left Shift and GUI when held, `kc` when tapped |
|`LAG_T(kc)` | |Left Alt and GUI when held, `kc` when tapped |
|`RSG_T(kc)` | |Right Shift and GUI when held, `kc` when tapped |
|`RAG_T(kc)` | |Right Alt and GUI when held, `kc` when tapped |
|`LCA_T(kc)` | |Left Control and Alt when held, `kc` when tapped |
|`LSA_T(kc)` | |Left Shift and Left Alt when held, `kc` when tapped |
|`RSA_T(kc)` |`SAGR_T(kc)` |Right Shift and Right Alt (AltGr) when held, `kc` when tapped |
|`RCS_T(kc)` | |Right Control and Right Shift when held, `kc` when tapped | |`RCS_T(kc)` | |Right Control and Right Shift when held, `kc` when tapped |
|`LCAG_T(kc)` | |Left Control, Alt and GUI when held, `kc` when tapped | |`RCA_T(kc)` | |Right Control and Right Alt when held, `kc` when tapped |
|`RCAG_T(kc)` | |Right Control, Alt and GUI when held, `kc` when tapped | |`RCG_T(kc)` | |Right Control and Right GUI when held, `kc` when tapped |
|`C_S_T(kc)` | |Left Control and Shift when held, `kc` when tapped | |`RSA_T(kc)` |`SAGR_T(kc)` |Right Shift and Right Alt when held, `kc` when tapped |
|`MEH_T(kc)` | |Left Control, Shift and Alt when held, `kc` when tapped | |`RSG_T(kc)` | |Right Shift and Right GUI when held, `kc` when tapped |
|`HYPR_T(kc)` |`ALL_T(kc)` |Left Control, Shift, Alt and GUI when held, `kc` when tapped - more info [here](https://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/)| |`RAG_T(kc)` | |Right Alt and Right GUI when held, `kc` when tapped |
|`RCSG_T(kc)` | |Right Control, Right Shift and Right GUI when held, `kc` when tapped |
|`RCAG_T(kc)` | |Right Control, Right Alt and Right GUI when held, `kc` when tapped |
|`RSAG_T(kc)` | |Right Shift, Right Alt and Right GUI when held, `kc` when tapped |
|`MEH_T(kc)` | |Left Control, Left Shift and Left Alt when held, `kc` when tapped |
|`HYPR_T(kc)` |`ALL_T(kc)` |Left Control, Left Shift, Left Alt and Left GUI when held, `kc` when tapped|
## Tapping Term Keys {#tapping-term-keys} ## Tapping Term Keys {#tapping-term-keys}
@ -802,12 +817,40 @@ See also: [US ANSI Shifted Symbols](keycodes_us_ansi_shifted)
See also: [One Shot Keys](one_shot_keys) See also: [One Shot Keys](one_shot_keys)
|Key |Aliases |Description | |Key |Aliases |Description |
|--------------------|---------|----------------------------------| |--------------------|---------|---------------------------------------------------------------------|
|`OSM(mod)` | |Hold `mod` for one keypress |
|`OSL(layer)` | |Switch to `layer` for one keypress|
|`QK_ONE_SHOT_TOGGLE`|`OS_TOGG`|Toggles One Shot keys status | |`QK_ONE_SHOT_TOGGLE`|`OS_TOGG`|Toggles One Shot keys status |
|`QK_ONE_SHOT_ON` |`OS_ON` |Turns One Shot keys on | |`QK_ONE_SHOT_ON` |`OS_ON` |Turns One Shot keys on |
|`QK_ONE_SHOT_OFF` |`OS_OFF` |Turns One Shot keys off | |`QK_ONE_SHOT_OFF` |`OS_OFF` |Turns One Shot keys off |
|`OSL(layer)` | |Switch to `layer` for one keypress |
|`OSM(mod)` | |Hold `mod` for one keypress |
|`OS_LCTL` | |Hold Left Control for one keypress |
|`OS_LSFT` | |Hold Left Shift for one keypress |
|`OS_LALT` | |Hold Left Alt for one keypress |
|`OS_LGUI` | |Hold Left GUI for one keypress |
|`OS_LCS` | |Hold Left Control and Left Shift for one keypress |
|`OS_LCA` | |Hold Left Control and left Alt for one keypress |
|`OS_LCG` | |Hold Left Control and Left GUI for one keypress |
|`OS_LSA` | |Hold Left Shift and Left Alt for one keypress |
|`OS_LSG` | |Hold Left Shift and Left GUI for one keypress |
|`OS_LAG` | |Hold Left Alt and Left GUI for one keypress |
|`OS_LCSG` | |Hold Left Control, Left Shift and Left GUI for one keypress |
|`OS_LCAG` | |Hold Left Control, Left Alt and Left GUI for one keypress |
|`OS_LSAG` | |Hold Left Shift, Left Alt and Left GUI for one keypress |
|`OS_RCTL` | |Hold Right Control for one keypress |
|`OS_RSFT` | |Hold Right Shift for one keypress |
|`OS_RALT` | |Hold Right Alt for one keypress |
|`OS_RGUI` | |Hold Right GUI for one keypress |
|`OS_RCS` | |Hold Right Control and Right Shift for one keypress |
|`OS_RCA` | |Hold Right Control and Right Alt for one keypress |
|`OS_RCG` | |Hold Right Control and Right GUI for one keypress |
|`OS_RSA` | |Hold Right Shift and Right Alt for one keypress |
|`OS_RSG` | |Hold Right Shift and Right GUI for one keypress |
|`OS_RAG` | |Hold Right Alt and Right GUI for one keypress |
|`OS_RCSG` | |Hold Right Control, Right Shift and Right GUI for one keypress |
|`OS_RCAG` | |Hold Right Control, Right Alt and Right GUI for one keypress |
|`OS_RSAG` | |Hold Right Shift, Right Alt and Right GUI for one keypress |
|`OS_MEH` | |Hold Left Control, Left Shift and Left Alt for one keypress |
|`OS_HYPR` | |Hold Left Control, Left Shift, Left Alt and Left GUI for one keypress|
## Programmable Button Support {#programmable-button} ## Programmable Button Support {#programmable-button}

View File

@ -109,15 +109,15 @@ The basic set of keycodes are based on the [HID Keyboard/Keypad Usage Page (0x07
## Modifiers ## Modifiers
|Key |Aliases |Description | |Key |Aliases |Description |
|----------------|-------------------------------|------------------------------------| |----------------|-------------------------------|-------------------------------------|
|`KC_LEFT_CTRL` |`KC_LCTL` |Left Control | |`KC_LEFT_CTRL` |`KC_LCTL` |Left Control |
|`KC_LEFT_SHIFT` |`KC_LSFT` |Left Shift | |`KC_LEFT_SHIFT` |`KC_LSFT` |Left Shift |
|`KC_LEFT_ALT` |`KC_LALT`, `KC_LOPT` |Left Alt (Option) | |`KC_LEFT_ALT` |`KC_LALT`, `KC_LOPT` |Left Alt (Option) |
|`KC_LEFT_GUI` |`KC_LGUI`, `KC_LCMD`, `KC_LWIN`|Left GUI (Windows/Command/Meta key) | |`KC_LEFT_GUI` |`KC_LGUI`, `KC_LCMD`, `KC_LWIN`|Left GUI (Windows/Command/Super key) |
|`KC_RIGHT_CTRL` |`KC_RCTL` |Right Control | |`KC_RIGHT_CTRL` |`KC_RCTL` |Right Control |
|`KC_RIGHT_SHIFT`|`KC_RSFT` |Right Shift | |`KC_RIGHT_SHIFT`|`KC_RSFT` |Right Shift |
|`KC_RIGHT_ALT` |`KC_RALT`, `KC_ROPT`, `KC_ALGR`|Right Alt (Option/AltGr) | |`KC_RIGHT_ALT` |`KC_RALT`, `KC_ROPT`, `KC_ALGR`|Right Alt (Option/AltGr) |
|`KC_RIGHT_GUI` |`KC_RGUI`, `KC_RCMD`, `KC_RWIN`|Right GUI (Windows/Command/Meta key)| |`KC_RIGHT_GUI` |`KC_RGUI`, `KC_RCMD`, `KC_RWIN`|Right GUI (Windows/Command/Super key)|
## International ## International

105
docs/license_violations.md Normal file
View File

@ -0,0 +1,105 @@
# License Violations
QMK Firmware has seen its fair share of license violations, which hurts the community and frustrates the QMK maintainers.
Typical non-compliance includes:
* Not providing any source code
* Providing "crippled" source code, such as a wired-only firmware for a wireless-capable board
Boards from vendors who don't provide source code are proving to be a significant time sink as the QMK team and other support helpers volunteer their time trying to determine which board someone has before they can help -- and in these cases they can't help. Occasionally this is followed by abuse; something that QMK and its volunteers should not be subjected to, rather redirected to the vendor in question.
The QMK team now actively directs support requests back to each vendor - vendors must provide their own product support for their boards. The QMK team are volunteers, the vendor must not expect the team to act as their support staff.
## Offending Vendors
The QMK team cannot tell you which boards you should or should not purchase, but please consider the lack of license compliance from the following vendors before making your decision. If you wish to look at the boards upstream QMK Firmware currently supports, you can search [here](https://browse.qmk.fm/).
If you own a board from one of the following vendors already, consider asking them for the equivalent QMK source code if it's not already available. With enough customers demanding corresponding source code, vendors may start to change their policies.
| Vendor | Reason |
|------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Ajazz | Selling tri-mode boards based on QMK without sources. |
| Alpaca / Apos | Selling wireless boards with "open" source code, but linking against closed-source wireless libraries. Crippled source code already unknowingly merged to QMK. |
| Attack Shark | Selling tri-mode boards based on QMK without sources. (Clones of Ajazz?) |
| BBB Keyboard | Selling tri-mode boards based on QMK without sources, attempted upstreaming crippled firmware without wireless. |
| Chosfox | Selling L75 wired/wireless boards based on QMK without sources, just `via.json` provided. Raised on discord over multiple weeks without response. |
| CIDOO | Selling wired boards based on QMK without sources, just `via.json` provided. |
| ColorReco | Selling tri-mode boards based on QMK without sources. |
| CrossDIY | Selling wired boards based on QMK without sources. |
| Darmoshark | Selling wired boards based on QMK without sources, just `via.json` provided. |
| Epomaker | Lots of historical keyboards with `via.json` but no corresponding sources. Wireless code for a small handful provided, pending core cleanup for QMK upstreaming. Most other boards have source nowhere to be seen. |
| Ergokbd (IFKB) | At least their crkbd clone ships with QMK+Vial, seemingly refuses to disclose sources despite multiple customers requesting them. |
| iLovBee | Official 30-day copyright source code request issued Sep 11 2024 due to deception on PR, no response received. Ambiguity on PRs -- marketing says wireless, PR author said wired-only, then included wireless code anyway. Seemingly intentionally deceptive. |
| KiiBOOM | Seems to use the same OEM as Epomaker, same problems. |
| kprepublic | Makes no attempt to release source code, all boards in QMK are reverse-engineered, created, and supported by the community. New board variants magically appear without telling customers they're incompatible with existing QMK versions, in some cases bricking boards or requiring ISP flashing. |
| Luminkey | Selling tri-mode boards based on QMK without sources, just `via.json` provided. |
| Meletrix | Selling tri-mode boards based on QMK without sources, just `via.json` provided. |
| mmd / Smartmmd / i-game.tech | Ambiguity on PRs -- marketing says wireless, PR author said wired-only, then included wireless code anyway. Seemingly intentionally deceptive. |
| MyKeyClub | Community-supported JRIS75, vendor was contacted by community members and refused to cooperate. |
| owlab | Selling wired based on QMK without sources, just `via.json` provided. Ambiguous as to whether or not wireless firmware is based on QMK, given that their configuration tool looks very similar to VIA. |
| pressplayid | Selling wired and tri-mode boards based on QMK without sources, just `via.json` provided |
| qwertykeys | Selling wired and tri-mode boards based on QMK without sources, just `via.json` provided. |
| Redragon | Selling tri-mode boards based on QMK without sources, attempted upstreaming crippled firmware without wireless. |
| Riccks | Selling tri-mode boards based on QMK without sources. |
| Royal Kludge | PRs for fake boards in order to attain VIA compatibility identified. Lots of other keyboards with `via.json` but no corresponding sources, attempted upstreaming crippled firmware without wireless. Wireless code for some provided, pending core cleanup for QMK upstreaming. PRs including different manufacturer names as well. |
| Shenzhen Hangsheng | PR submissions with crippled firmware, debating with maintainers about wireless despite marketing material clearly stating tri-mode. |
| Tacworks | Selling tri-mode boards based on QMK, crippled firmware already merged into QMK without wireless without QMK team realising. |
| TKD / Vertex | Selling tri-mode boards based on QMK without sources, attempted upstreaming crippled firmware without wireless. |
| WOBKEY | Selling tri-mode boards based on QMK without sources, attempted upstreaming crippled firmware without wireless. |
| Weikav | Selling tri-mode boards based on QMK without sources, just `via.json` provided. |
| Womier | Selling tri-mode boards based on QMK without sources, attempted upstreaming crippled firmware without wireless. |
| Wuque Studio | Selling wired and tri-mode boards based on QMK without sources, just `via.json` provided. |
| XVX | Ambiguity on PRs -- marketing says wireless, PR author said wired-only. Seemingly intentionally deceptive. |
| Yunzii | Selling tri-mode boards based on QMK without sources, just `via.json` provided. Refuses to release sources due to proprietary wireless driver, in direct violation of the GPL. |
| Zuoya | Selling tri-mode boards based on QMK without sources, just `via.json` provided. |
::: danger Violations
Links are not provided above as the QMK team does not wish to inadvertently promote purchases of boards in violation of QMK's license.
:::
## Licensing
QMK Firmware's license requires full disclosure of source code for any firmware which is based on QMK. This includes any of the following scenarios:
* Use of public QMK Firmware, but with "closed source" privately-held board definitions
* Vendor-customised QMK Firmware, which the vendor keeps private for building their own boards
* Any other non-QMK firmware which includes portions of QMK Firmware, such as adaptation of `via.c` into any other non-QMK firmware, even if used as a reference when translated to another programming language.
As per the GPL license requirements, vendors must provide entire source code for the as-shipped firmware.
QMK has traditionally been lenient with this clause -- providing source code to the QMK community is necessary but reproducing the exact build may not be possible. QMK has required functionally-equivalent source code to be made available. In rare cases exact code may be requested; vendors must keep copies regardless.
At minimum, vendors must provide the source code through some distribution mechanism. This could potentially be an clearly available downloadable copy of the code online, a fork of QMK Firmware, or even a DVD accompanying the product in the box.
If sources are unable to be provided in a timely fashion, QMK may revoke the vendor's license, effectively rendering them unable to leverage QMK.
Vendors choosing to keep things closed-source because of a desire to have a "competitive edge" compared to other vendors is unacceptable to both QMK and the community, and is a breach of the QMK license. There's no reason to do so; any new or interesting vendor-specific feature will be quickly replicated by other vendors or the community anyway.
## QMK PR Considerations
Vendors who submit PRs to QMK Firmware whilst not providing full sources for all of their license-violating boards will be put on hold until source code for all violating boards is provided. Intentional deception may result in boards being removed from QMK and all future PRs for that manufacturer being denied outright.
Submitting crippled source code in order to attain a merge into QMK Firmware to pave the way for VIA support is unacceptable. This includes submitting a wired-only firmware for a wireless-capable board, or any other PR which does not include key features as-advertised.
Reusing the `VID` and `PID` for multiple boards (such as for two variants, wired and wireless) is an unacceptable scenario as this creates confusion for support. Many customers have flashed boards with the wrong firmware, which could have been avoided if vendors were obvious about their board identification mechanisms.
If there is sufficient ambiguity about a board, supporting evidence will need to be presented to the QMK team. This may include impartial third parties who can demonstrate a board's existence and can confirm its feature set, such as well-known content producers; popular review sites or notable video creators may be leveraged. If such evidence is unavailable, as a last resort the vendor may be required to ship a fully functional board in full retail packaging to QMK maintainers for verification. Engineering samples will not be accepted, as one-off boards have been deceptively used in the past.
PRs submitted to upstream QMK should not expect an instant merge just because source code has been provided -- code from OEMs has historically been of a quality lower than QMK standards, so as per the [PR checklist](pr_checklist) submitters should make the changes as small as possible and be prepared to change their implementation.
## Detection
If the QMK team identifies or is informed of a license violation from a vendor:
* Any current and future PRs for that vendor will be indefinitely put on hold, preventing merge into QMK Firmware, thus preventing any out-of-the-box VIA support
* Any existing keyboards from the vendor may be removed from QMK Firmware
* Vendors will be added to the _offending vendors_ list above
Repeated violations may result in that vendor being disallowed from contributing the QMK in its entirety. In the worst case, the QMK team may choose to revoke a vendor's license to use QMK Firmware outright.
## Remediation
Vendors must provide fully-featured source code for each of their identified violations, matching the feature capabilities of their as-shipped products. This will usually be in their own fork of QMK Firmware while awaiting a merge into upstream.
Once all identified violations have been remediated, current and future PRs will no longer be on hold and the vendor will be removed from the offending vendors list above.

View File

@ -2,18 +2,18 @@
The Mod-Tap key `MT(mod, kc)` acts like a modifier when held, and a regular keycode when tapped. In other words, you can have a key that sends Escape when you tap it, but functions as a Control or Shift key when you hold it down. The Mod-Tap key `MT(mod, kc)` acts like a modifier when held, and a regular keycode when tapped. In other words, you can have a key that sends Escape when you tap it, but functions as a Control or Shift key when you hold it down.
The modifiers this keycode and `OSM()` accept are prefixed with `MOD_`, not `KC_`: The modifiers (`mod`) argument to the `MT()` macro are prefixed with `MOD_`, not `KC_`:
|Modifier |Description | |Modifier |Description |
|----------|----------------------------------------| |----------|----------------------------------------|
|`MOD_LCTL`|Left Control | |`MOD_LCTL`|Left Control |
|`MOD_LSFT`|Left Shift | |`MOD_LSFT`|Left Shift |
|`MOD_LALT`|Left Alt | |`MOD_LALT`|Left Alt |
|`MOD_LGUI`|Left GUI (Windows/Command/Meta key) | |`MOD_LGUI`|Left GUI (Windows/Command/Super key) |
|`MOD_RCTL`|Right Control | |`MOD_RCTL`|Right Control |
|`MOD_RSFT`|Right Shift | |`MOD_RSFT`|Right Shift |
|`MOD_RALT`|Right Alt (AltGr) | |`MOD_RALT`|Right Alt (AltGr) |
|`MOD_RGUI`|Right GUI (Windows/Command/Meta key) | |`MOD_RGUI`|Right GUI (Windows/Command/Super key) |
|`MOD_HYPR`|Hyper (Left Control, Shift, Alt and GUI)| |`MOD_HYPR`|Hyper (Left Control, Shift, Alt and GUI)|
|`MOD_MEH` |Meh (Left Control, Shift, and Alt) | |`MOD_MEH` |Meh (Left Control, Shift, and Alt) |
@ -28,28 +28,37 @@ This key would activate Left Control and Left Shift when held, and send Escape w
For convenience, QMK includes some Mod-Tap shortcuts to make common combinations more compact in your keymap: For convenience, QMK includes some Mod-Tap shortcuts to make common combinations more compact in your keymap:
|Key |Aliases |Description | |Key |Aliases |Description |
|------------|-----------------------------------------------------------------|--------------------------------------------------------------| |------------|-----------------------------------------------------------------|---------------------------------------------------------------------------------------|
|`LCTL_T(kc)`|`CTL_T(kc)` |Left Control when held, `kc` when tapped | |`LCTL_T(kc)`|`CTL_T(kc)` |Left Control when held, `kc` when tapped |
|`LSFT_T(kc)`|`SFT_T(kc)` |Left Shift when held, `kc` when tapped | |`LSFT_T(kc)`|`SFT_T(kc)` |Left Shift when held, `kc` when tapped |
|`LALT_T(kc)`|`LOPT_T(kc)`, `ALT_T(kc)`, `OPT_T(kc)` |Left Alt when held, `kc` when tapped | |`LALT_T(kc)`|`ALT_T(kc)`, `LOPT_T(kc)`, `OPT_T(kc)` |Left Alt when held, `kc` when tapped |
|`LGUI_T(kc)`|`LCMD_T(kc)`, `LWIN_T(kc)`, `GUI_T(kc)`, `CMD_T(kc)`, `WIN_T(kc)`|Left GUI when held, `kc` when tapped | |`LGUI_T(kc)`|`GUI_T(kc)`, `LCMD_T(kc)`, `LWIN_T(kc)`, `CMD_T(kc)`, `WIN_T(kc)`|Left GUI when held, `kc` when tapped |
|`LCS_T(kc)` | |Left Control and Left Shift when held, `kc` when tapped |
|`LCA_T(kc)` | |Left Control and Left Alt when held, `kc` when tapped |
|`LCG_T(kc)` | |Left Control and Left GUI when held, `kc` when tapped |
|`LSA_T(kc)` | |Left Shift and Left Alt when held, `kc` when tapped |
|`LSG_T(kc)` |`SGUI_T(kc)`, `SCMD_T(kc)`, `SWIN_T(kc)` |Left Shift and Left GUI when held, `kc` when tapped |
|`LAG_T(kc)` | |Left Alt and Left GUI when held, `kc` when tapped |
|`LCSG_T(kc)`| |Left Control, Left Shift and Left GUI when held, `kc` when tapped |
|`LCAG_T(kc)`| |Left Control, Left Alt and Left GUI when held, `kc` when tapped |
|`LSAG_T(kc)`| |Left Shift, Left Alt and Left GUI when held, `kc` when tapped |
|`RCTL_T(kc)`| |Right Control when held, `kc` when tapped | |`RCTL_T(kc)`| |Right Control when held, `kc` when tapped |
|`RSFT_T(kc)`| |Right Shift when held, `kc` when tapped | |`RSFT_T(kc)`| |Right Shift when held, `kc` when tapped |
|`RALT_T(kc)`|`ROPT_T(kc)`, `ALGR_T(kc)` |Right Alt when held, `kc` when tapped | |`RALT_T(kc)`|`ROPT_T(kc)`, `ALGR_T(kc)` |Right Alt when held, `kc` when tapped |
|`RGUI_T(kc)`|`RCMD_T(kc)`, `RWIN_T(kc)` |Right GUI when held, `kc` when tapped | |`RGUI_T(kc)`|`RCMD_T(kc)`, `RWIN_T(kc)` |Right GUI when held, `kc` when tapped |
|`LSG_T(kc)` |`SGUI_T(kc)`, `SCMD_T(kc)`, `SWIN_T(kc)` |Left Shift and GUI when held, `kc` when tapped |
|`LAG_T(kc)` | |Left Alt and GUI when held, `kc` when tapped |
|`RSG_T(kc)` | |Right Shift and GUI when held, `kc` when tapped |
|`RAG_T(kc)` | |Right Alt and GUI when held, `kc` when tapped |
|`LCA_T(kc)` | |Left Control and Alt when held, `kc` when tapped |
|`LSA_T(kc)` | |Left Shift and Alt when held, `kc` when tapped |
|`RSA_T(kc)` |`SAGR_T(kc)` |Right Shift and Right Alt (AltGr) when held, `kc` when tapped |
|`RCS_T(kc)` | |Right Control and Right Shift when held, `kc` when tapped | |`RCS_T(kc)` | |Right Control and Right Shift when held, `kc` when tapped |
|`LCAG_T(kc)`| |Left Control, Alt and GUI when held, `kc` when tapped | |`RCA_T(kc)` | |Right Control and Right Alt when held, `kc` when tapped |
|`RCAG_T(kc)`| |Right Control, Alt and GUI when held, `kc` when tapped | |`RCG_T(kc)` | |Right Control and Right GUI when held, `kc` when tapped |
|`C_S_T(kc)` | |Left Control and Shift when held, `kc` when tapped | |`RSA_T(kc)` |`SAGR_T(kc)` |Right Shift and Right Alt when held, `kc` when tapped |
|`MEH_T(kc)` | |Left Control, Shift and Alt when held, `kc` when tapped | |`RSG_T(kc)` | |Right Shift and Right GUI when held, `kc` when tapped |
|`HYPR_T(kc)`|`ALL_T(kc)` |Left Control, Shift, Alt and GUI when held, `kc` when tapped - more info [here](https://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/)| |`RAG_T(kc)` | |Right Alt and Right GUI when held, `kc` when tapped |
|`RCSG_T(kc)`| |Right Control, Right Shift and Right GUI when held, `kc` when tapped |
|`RCAG_T(kc)`| |Right Control, Right Alt and Right GUI when held, `kc` when tapped |
|`RSAG_T(kc)`| |Right Shift, Right Alt and Right GUI when held, `kc` when tapped |
|`MEH_T(kc)` | |Left Control, Left Shift and Left Alt when held, `kc` when tapped |
|`HYPR_T(kc)`|`ALL_T(kc)` |Left Control, Left Shift, Left Alt and Left GUI when held, `kc` when tapped<sup>1</sup>|
<sup>1. More information on the Hyper key can be found on [this blog post by Brett Terpstra](https://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/).</sup>
## Caveats ## Caveats

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