* Initial commit of Nifty Numpad keyboard
* Initial commit of Nifty Numpad keyboard
* Fixed double repo
* Updated available effects
* Added a default and VIA keymap, moved cadence to its own keymap
* Fixed qmk_firmware submodule issue
* Updated Nifty Numpad readme
Updated Cadence keymap
Updated vscode settings to match QMK master
* Added Nifty Numpad
* Added config.h to idle_rgb_example
* renamed info.json, removed rules.mk
* Updated to conform with most recent PR checklist
- Removed VIA keymap
- Formatted keyboard.json with qmk format-json
- Updated custom keycodes in nifty_numpad.h to start at QK_USER
* Address review feedback
- Remove the config.h file from the idle_rgb_example keymap as the only
settings was equal to the default
- Added empty endline to the end of idle_rgb_example/rules.mk and post_rules.mk
- Updated RGB_DEF custom keycode to QK_KB
* Removed commented layout visuals
* Updated RGB Matrix keycodes
* Updated use of eeconfig_update_kb_datablock to new signature
* Explain how to use STORE_SETUPS and PRINT_SETUPS
I found the instructions a little terse, but managed.
This also adds a note about PRINT_SETUPS reporting random numbers if STORE_SETUPS hasn't been used.
* Remove line breaks
Existing docs seem to use a mix of hard line breaks at sentence
ends, or 80 chars-ish, versus no line breaks in paragraphs.
* Suggestion during review
Co-authored-by: フィルターペーパー <76888457+filterpaper@users.noreply.github.com>
---------
Co-authored-by: フィルターペーパー <76888457+filterpaper@users.noreply.github.com>
* Show how to flip semicolon and colon
* Apply whitespace suggestions from code review
Co-authored-by: Drashna Jaelre <drashna@live.com>
* Match line-wrapping
Co-authored-by: Joel Challis <git@zvecr.com>
---------
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Joel Challis <git@zvecr.com>
* Include userspace version in version.h
* Update lib/python/qmk/cli/generate/version_h.py
Co-authored-by: Joel Challis <git@zvecr.com>
* Update lib/python/qmk/cli/generate/version_h.py
Co-authored-by: Joel Challis <git@zvecr.com>
* Update lib/python/qmk/cli/generate/version_h.py
Co-authored-by: Joel Challis <git@zvecr.com>
---------
Co-authored-by: Joel Challis <git@zvecr.com>
When QMK_USERSPACE is empty, the wildcard check in build_keyboard.mk
incorrectly matches user home directories on case-insensitive filesystems
(macOS/Windows), causing USER_PATH to resolve to an absolute path instead
of a relative path.
This only affects users whose username matches their user directory name
(e.g., username 'psycher' with home '/Users/psycher' and QMK user dir
'users/psycher').
Fix by checking if QMK_USERSPACE is non-empty before performing the
wildcard check.
* Add 'the_grid_v2' to QMK
* Per documentation, formatted keyboard.json and add license to keymap.c
* Update keyboards/keenome_keys/the_grid_v2/keyboard.json
Co-authored-by: Jack Sangdahl <jack@pngu.org>
* Create readme.md for The Grid v2 keyboard
Added detailed readme for The Grid v2 keyboard including setup and bootloader instructions.
* Revise readme for The Grid v2 keyboard
Updated readme with specific hardware details.
---------
Co-authored-by: Jack Sangdahl <jack@pngu.org>
* Use less tap dance memory.
Use dynamically allocated sparse array for tap dance state, dynamically allocate tap dance state when needed and free it when the tap dance is done.
* new approach
* Use null, check for null
* Reformat with docker
* Use uint8 with idx rather than uint16 with keycode in state
* fix accidental change
* reformat
* Add null check
* add documentation tip suggested by tzarc
* Only allow tap dance state allocation on key down, not on key up
Co-authored-by: Sergey Vlasov <sigprof@gmail.com>
* Only allow tap dance allocation on key down, not on key up
Co-authored-by: Sergey Vlasov <sigprof@gmail.com>
* add user action required section
---------
Co-authored-by: Sergey Vlasov <sigprof@gmail.com>
* Add support for Coffee Break Keyboards Acai
* Apply suggestions from code review
Co-authored-by: Jack Sangdahl <jack@pngu.org>
* Ran qmk format-json
* Misssed one of @waffle87's suggestions
* Misssed another of @waffle87's suggestions
* Try hosting on imgur.com
* Remove empty layers, add boot to layer 2
* Enhance the default keymap
* Use correct keycodes for RGB
---------
Co-authored-by: Jack Sangdahl <jack@pngu.org>
* suspend: suppress wake up keypress
Waking the host from suspend is done by pressing any key on the
keyboard, the regular key codes assigned to the keys are not important
and must not be sent - otherwise they usually end up in password prompts
as ghost characters that have to be deleted again. This commit adds
suppression for all keys pressed at the time of wake up. Once a key is
released it functions as a regular key again.
Signed-off-by: Stefan Kerkmann <karlk90@pm.me>
* suspend: update wake up matrix after wake up delay
If USB_SUSPEND_WAKEUP_DELAY is set, the keyboard sleeps during wake up -
which can be up to multiple seconds. To handle key presses and releases
in that time frame we have to handle the following cases:
1. Key not pressed before suspend, and not pressed after wakeup → do
nothing (normal case).
2. Key not pressed before suspend, but pressed after wakeup → set the
wakeup_matrix bit to 1 (so that the press and release events would be
suppressed).
3. Key pressed before suspend, but not pressed after wakeup → do nothing
(the release event will be generated on the first matrix_task() call
after the wakeup).
4. Key pressed before suspend, and still pressed after wakeup → do
nothing (the release event will be generated some time later).
Signed-off-by: Stefan Kerkmann <karlk90@pm.me>
Co-authored-by: Sergey Vlasov <sigprof@gmail.com>
* keyboards: anavi: macropad8: disable snake and rgb_test effects
...to shrink the binary size.
* feat: adds a transmit and receive i2c method
* fix: address the i2c transmit and receive length on u16
* Add AVR/LUFA implementation
Didn't add a progmem version, since that would only apply to receive.
Figured it wasn't worth it, but can add.
* Rearrange order of functions
* Add docs
* Fix doc gen error
* Fix lint issues
* fix more lint issues
* Only perform key and mod remapping in keycode_config() and mod_config() when MAGIC_ENABLE is defined.
* If not set, these functions now return the original keycode or modifier unchanged.
* Reduces firmware size, and unnecessary code when MAGIC_ENABLE is not enabled.
* Removed space saving suggestion with magic functions from squeezing AVR documentation
* Indicate <keyboard>.h LAYOUT() deprecation in understanding_qmk.md
Initial documentation uses <keyboard>.json to define matrix pin definitions, rather than having users #define the LAYOUT() macro in <keyboard>.h - This change brings this docs inline with the [porting_guidelines](https://docs.qmk.fm/porting_your_keyboard_to_qmk), QMK MSYS will also throw an error if this is attempted.
* Update understanding_qmk.md
enclosed '<' using backtick
* style guideline, now builds correctly
prior version indicates directory, new indicates config. still the same idea.
I built three of these and was confused as to why my numpad 0 wasn't
working. Eventually, I consulted this website to see the key matrix for
the Model M
https://sharktastica.co.uk/sims/matrix?kb=enhanced
`kp_0` is in the matrix at [0, 12], not [0, 11]. Simple off by one
error. I fixed this, flashed to all my keyboards, and it worked.
Co-authored-by: Kay Barkbark <kay@laptop>
* Update tap_hold.md
Minor grammar/punctuation changes;
Added some more tap-hold examples;
Added a link about home row mods to the reference near the end;
Replaced directional quotation marks with symmetric variant, as this seem to be the only page using them;
Standardised formatting of "tap-hold" (hyphenated is slightly more frequent in existing documentation, so I went with that), as well as "Mod-Tap"/"Layer-Tap".
* Update docs/tap_hold.md
Co-authored-by: Ryan <fauxpark@gmail.com>
* Update docs/tap_hold.md
Co-authored-by: Ryan <fauxpark@gmail.com>
---------
Co-authored-by: Ryan <fauxpark@gmail.com>
* Fixup kprepublic/bm60hsrgb/rev2
- Remove RGBLight configuration and throw error if RGBLight & RGB Matrix
are enabled together - the WS2812 driver cannot be used for RGBLight
as it is being used by this keyboard's custom RGB Matrix driver
- Migrate RGB Matrix configuration to DD
- Migrate default keymap to JSON
- Use short SPDX license headers
* Fix OOB coordinate
Fixup kprepublic/bm60hsrgb_iso/rev2
- Remove RGBLight configuration and throw error if RGBLight & RGB Matrix
are enabled together - the WS2812 driver cannot be used for RGBLight
as it is being used by this keyboard's custom RGB Matrix driver
- Migrate RGB Matrix configuration to DD
- Migrate default keymap to JSON
- Use short SPDX license headers
Fixup kprepublic/bm60hsrgb/rev2
- Remove RGBLight configuration and throw error if RGBLight & RGB Matrix
are enabled together - the WS2812 driver cannot be used for RGBLight
as it is being used by this keyboard's custom RGB Matrix driver
- Migrate RGB Matrix configuration to DD
- Migrate default keymap to JSON
- Use short SPDX license headers
* Update pizzapad with encoder
* Added extra features to enable volume controls
* Added license header and updated pin number
* Remove config.h file
* Update keyboard.json features and pizzapad.c license header
* `atreus`: restore intended matrix implementations
PR 24010 inadvertently changed the switch matrix for the
`atreus/astar_mirrored` keyboard in removing the `PCBDOWN` configuration
option, and also made PCB up and down implementations available for all
Atreus variants, which is not intended usage.
This commit restores the intended behaviour, and makes all the keymaps
which are currently present agnostic to hardware variant.
* docs: fix misspellings
* docs: do line breaks with HTML instead of spaces
To remove trailing spaces and to avoid breaking things, line breaks can
be done with the HTML br tag.
* Refactor debounce counters with direct indexing
* Refactor code to use array indexing for debounce_counters
* Use global MATRIX_ROW_SHIFTER macro
* Refactor debounce algorithm with static allocation
* Converted arrays to static allocation
* Standardised use of MATRIX_ROWS_PER_HAND for array sizing
* Added Doxygen comments for primary debounce functions
* Removed debounce_free()
* Rewrite sym_defer_pr
* Modernise code using sym_defer_pk as template
* Format consistency with other current algorithms
* Use shorter SPDX-License-Identifier
* Remove ChibiOS core memory manager guard
* Keep type definition within DEBOUNCE guard
* Add change log
* Minor optimisation refactor
* Pre-calculate row_offset in per-key matrix loops
* Add inline compiler hints
* Improve readability with blank lines
* Limit elapsed time to the maximum debounce value
* Apply suggestions from code review
Declare counters with "DEBOUNCE_ELAPSED"
Co-authored-by: Joel Challis <git@zvecr.com>
* Update change log to new breaking change date
---------
Co-authored-by: Joel Challis <git@zvecr.com>
- Update aliases accordingly
- Remove unnecessary elite_c revision; an alternate bootloader or
development board can easily be set by a user. The PCB is not
dependant on an Elite-C pin compatible microcontroller
- Remove unnecessary nanoboot revision; any user going to the trouble of
using this bootloader will have no trouble manually setting the size
of their bootloader
- Move the promicro revision to be the "standard" for this keyboard
- Remove unnecessary rp2040_ce revision; the converter feature should be
used here instead
* Refactor bastardkb/charybdis/4x6
- Update keyboard aliases accordingly
- Migrate various configuration to data-driven
- Use short SPDX license headers
- Remove configuration that trends towards user-specific (CRC Table)
- Migrate common configuration upwards
- Migrate keymap to JSON
- Remove likely unneeded v1 revision per #23811
- Remove revisions splinky_2, splinky_3, and stemcell where a converter
should be used
- Rename v2/elitec -> elitec. Specifically named elitec, as this board
requires pin compatibility with an Elite-C (bottom 5 pins)
* Add aliases
* Replace unecessarily removed split hand pin configuration
* Revert "Replace unecessarily removed split hand pin configuration"
This reverts commit 0b98d1bc140a4b18c16d2b524cc8731f016372b1.
After second thought, it is not necessary to configure this by default,
as any user who wishes to set handedness by pin and is using an Elite-C
pin compatible development board will need to manually set the pin
anyway, which likely means referencing the readme.md file, which also
contains the necessary SPLIT_HAND_PIN_LOW_IS_LEFT configuration.
* Refactor bastardkb/charybdis/3x6
- Update keyboard aliases accordingly
- Migrate various configuration to data-driven
- Use short SPDX license headers
- Remove configuration that trends towards user-specific (CRC Table)
- Migrate common configuration upwards
- Migrate keymap to JSON
- Remove likely unneeded v1 revision per #23810
- Remove revisions splinky_2, splinky_3, and stemcell where a converter
should be used
- Rename v2/elitec -> elitec. Specifically named elitec, as this board
requires pin compatibility with an Elite-C (bottom 5 pins)
* Correct keyboard name in keymap
* Replace unecessarily removed split hand pin configuration
* Revert "Replace unecessarily removed split hand pin configuration"
This reverts commit 737cb635fa8de29bdf0f4ae54cf51b7a4715c7f3.
After second thought, it is not necessary to configure this by default,
as any user who wishes to set handedness by pin and is using an Elite-C
pin compatible development board will need to manually set the pin
anyway, which likely means referencing the readme.md file, which also
contains the necessary SPLIT_HAND_PIN_LOW_IS_LEFT configuration.
* Initial tidying up of top level helix/ directory
Align readme.md with template & provide more detailed PCB information
Remove unused rules.mk
Add common config.h file
Update glcdfont.c with formatting and license header
* Further migrations after PRs merged
Move shared configuration to top level info.json and config.h
More descriptive hardware compatibility
* Add changelog
* Align configuration between PCBs
- Migrate beta & pico to use RGB Matrix
- Move previously RGB Matrix-dependent OLED code in rev3/rev3.c to top level
- Remove reundant OLED code in beta/beta.c
- Remove RGBLight references
* Update changelog with RGB Matrix configuration
Update keyboard to match current standards:
* Move LED config to DD
* Revert back to core behaviour for keycodes
* Remove vendor code
* Configure dip switch map
* Align readme
* Fix serial speed DD configuration
- Fixes incorrect SOFT_SERIAL_SPEED mapping
- Renames key split.soft_serial_speed -> split.serial.speed
- Migrates keyoards that configure this, and remove configuration from keyboards that do not differ from the default behaviour
- Add deprecation notice and migration support
* Refactor helix/rev3_{4,5}rows
rev3_4rows and rev3_5rows are identical, except for the extra row users
can snap off of their PCBs.
- Add alias for rev3_4rows
- Migrates legacy defines and configuration to keyboard.json
- Tidy's keymap and migrates to JSON
- Removes RGB Light configuration, enables RGB Matrix
- Removes DIP switch configuration, as they do not appear to be present
on PCBs
- Adds an alternate 4 row layout for snappable PCB
- Tidy's up OLED code
- Enables standard features (bootmagic, extrakey, etc.)
* Alias for rev3_5rows -> rev3
* Add product URL
* Replace mistakenly removed DIP switch configuration
* Remove rebase artifact
* Refactor bastardkb/charybdis/3x5
- Migrate various configuration to data-driven
- Use short SPDX license headers
- Remove configuration that trends towards user-specific (CRC Table)
- Migrate common configuration upwards
- Migrate keymap to JSON
- Remove likely unneeded v1 revision per #23638
- Remove revisions splinky_2, splinky_3, and stemcell where a converter
should be used
- Rename v2/elitec -> elitec. Specifically named elitec, as this board
requires pin compatibility with an Elite-C (bottom 5 pins)
* Aliases
* 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
* Refactor bastardkb/dilemma/3x5_2
- Rename splinky -> promicro as the DIY PCB supports a Pro Micro
compatible development board
- Update keyboard aliases accordingly
- Migrated shared configuration to top level 3x5_2 directory
- Migrate keymap to JSON
- Migrate miscellaneous configuration to JSON
- Remove configuration that trends towards user-specific (CRC Table)
- Use short SPDX license headers
- Tidy up readme and make note of differences between PCBs
In short, the only difference between these two revisions (assembled vs.
promicro) is SPI vs. I2C (respectively) is used for the Cirque Trackpad.
* Migrate promicro configuration to AVR
The code in dilemma.c that reinitialises the ADC capable pins on RP2040
as digital inputs is not needed. Per section RP2040-E6 (p.630) of RP2040
datasheet, it appears digital inputs are *not* disabled, and this should
be handled internally anyway in matrix initialisation
* Refactor bastardkb/skeletyl
- Update keyboard aliases accordingly
- Migrate keymap to JSON
- skeletyl/blackpill
- Migrate common configuration to keyboard level
- Remove unnecessary or user-specific configuration
- Migrate some configuration to data-driven
- Use short SPDX license headers
- Remove unnecessary rules.mk file
- Formatting pass on keyboard.json
- skeletyl/v1
- Remove likely unneeded version, per qmk#23812
- skeletyl/v2
- Remove splinky_2 revision, per qmk#23812
- Remove splinky_3, stemcell revisions; converter feature should
be used here
- Rename skeletyl/v2/elitec -> skeletyl/promicro, as a converter can
be used for any pin-compatible microcontrollers
* Update keyboards/bastardkb/skeletyl/keymaps/default/keymap.json
Co-authored-by: Ryan <fauxpark@gmail.com>
---------
Co-authored-by: Ryan <fauxpark@gmail.com>
* Refactor bastardkb/scylla
- Update keyboard aliases accordingly
- Migrate keymap to JSON and better represent physical layout
- scylla/blackpill
- Migrate common configuration to keyboard level
- Remove unnecessary or user-specific configuration
- Migrate some configuration to data-driven
- Use short SPDX license headers
- Remove unnecessary rules.mk file
- Formatting pass on keyboard.json
- scylla/v1
- Remove likely unneeded version, per qmk#23814
- scylla/v2
- Remove splinky_2 revision, per qmk#23814
- Remove splinky_3, stemcell revisions; converter feature should
be used here
- Rename scylla/v2/elitec -> scylla/promicro, as a converter can
be used for any pin-compatible microcontrollers
* Small keymap fix
* 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
* 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.
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.
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.
* 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."
* 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.
* 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>
* 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>
# GitHub Copilot Instructions for QMK Pull Request Review
This document provides automated review guidance based on the [QMK PR Checklist](https://docs.qmk.fm/pr_checklist) and it is intended only for use by GitHub Copilot code-review agent during pull request reviews.
## General PR Requirements
### Branch and Submission Standards
- **Source Branch Policy**: Verify PR is NOT submitted from submitter's own `master` branch
- Flag if submitter is using their own `master` branch as source
- Suggest using feature branches instead for cleaner fork management
- **Target Branch Policy**:
- **New keyboard additions** → `master` branch (new folders under `keyboards/`)
- **All other changes** → `develop` branch:
- Keyboard updates, refactors, or moves
- Core code changes
- Data-driven configuration migrations
- Any modifications to existing keyboards
- **PR Scope**: PRs should contain the smallest set of modifications for a single change
- Flag PRs that modify multiple keyboards simultaneously
- Suggest splitting large PRs into focused, incremental changes
- **Merge Conflicts**: Check for unresolved merge conflicts
### File Naming and Structure
- **Lowercase Requirement**: All new directories and filenames must be lowercase
- Exception: Upstream sources with original uppercase (LUFA, ChibiOS)
- Exception: Core files with valid justification
- **Reject**: Board designer preference for uppercase is NOT valid justification
### License Headers
- **Required**: Valid license headers on all `*.c` and `*.h` files
- **Recommended**: GPL2/GPL3 for consistency
- **Format**: Check for proper GPL2+ header or SPDX identifier
```c
// Copyright 2024 Your Name (@yourgithub)
// SPDX-License-Identifier: GPL-2.0-or-later
```
- **Exception**: Simple assignment-only `rules.mk` files don't need headers
- **Flag**: Missing or ambiguous license headers (blocks merge)
### QMK Best Practices
- **Include Guards**: Use `#pragma once` instead of `#ifndef` guards in headers
- **Abstractions Required**: No low-level GPIO/I2C/SPI functions
- Must use QMK abstractions (flag direct hardware access)
- **Timing Functions**:
- Use `wait_ms()` instead of `_delay_ms()`
- Remove `#include<util/delay.h>`
- Use `timer_read()`, `timer_read32()` from `timer.h`
- **New Abstractions**: If proposing new abstraction, suggest:
1. Prototype in own keyboard first
2. Discuss with QMK Collaborators on Discord
3. Refactor as separate core change
4. Remove the keyboard-specific implementation from board
---
## Keymap PR Reviews
**Scope**: These rules apply to files within `keyboards/*/keymaps/*` subdirectories.
### Note on Personal Keymaps
- **Policy Change**: Personal keymap submissions no longer accepted
- Can be more feature-rich than stock `default` keymaps
### Keymap Code Standards
- **Includes**: `#include QMK_KEYBOARD_H` preferred over specific board files
- **Enums**: Prefer layer enums to `#define`s
- **Custom Keycodes**: First entry must be `QK_USER`
- **Formatting**: Check spacing alignment on commas and keycodes (spaces, not tabs)
- **VIA**: Keymaps should NOT enable VIA
- VIA keymaps belong in [VIA QMK Userspace](https://github.com/the-via/qmk_userspace_via)
---
## Keyboard PR Reviews
**Scope**: These rules apply to keyboard-level files in `keyboards/*` directories, excluding files within the `keymaps/` subdirectories. This includes:
- `info.json` or `keyboard.json` (keyboard root or variant level)
- Use of vendor-specific code (e.g., `wilba_tech/wt_main.c`) only when keyboard exists in the same enclosing vendor folder (e.g. a `wilba_tech` keyboard)
- Multi-board code is candidate for core refactoring when intended for use by multiple vendors
### Wireless Keyboards
- **Policy**: Wireless/Bluetooth PRs rejected without complete wireless code
- Wireless code may not include anything resembling precompiled data such as `*.a` files or other libraries
- Firmware blobs are not permitted in raw form or as compiled C-style arrays either.
- GPL2+ license requires full source disclosure
- Historically abused for VIA compatibility without releasing sources
- PRs without wireless capability will be held indefinitely
- Existing merged wireless boards from same vendor held until sources provided
### ChibiOS-Specific Requirements
- **Board Definitions**: Strong preference for existing ChibiOS board definitions
- Use equivalent Nucleo boards when possible
- Example: STM32L082KZ can use `BOARD = ST_NUCLEO64_L073RZ`
- QMK is eliminating custom board definitions due to maintenance burden
- **New Board Definitions**:
- Must NOT be embedded in keyboard PR
- Submit as separate Core PR
- `board.c` must have standard `__early_init()` and empty `boardInit()`
- Migrate code intended for `__early_init()` → keyboard-local `early_hardware_init_pre/post()`
- Migrate code intended for `boardInit()` → keyboard-local `board_init()`
---
## Core PR Reviews
### Targeting and Scope
- **Branch**: All core PRs must target `develop` branch
- **Single Focus**: Smallest set of changes per PR
- PRs with multiple areas will be asked to split
- Keyboard/keymap changes only if affecting base builds or default-like keymaps
- Keymap modifications (non-default) should be followup PR after core merge
- Large refactoring PRs affecting other keymaps raised separately
### Testing Requirements
- **New Hardware Support**: Requires test keyboard under `keyboards/handwired/onekey`
- New MCUs: Add child keyboard targeting new MCU for build verification
- New hardware (displays, matrix, peripherals): Provide associated keymap
- Exception: If existing keymap can leverage functionality (consult Collaborators)
- **Callbacks**: New `_kb`/`_user` callbacks must return `bool` for user override
- **Unit Tests**: Strongly recommended, may be required
- Critical code areas (keycode pipeline) will require tests
- Boost confidence in current and future correctness
### Code Quality
- **Subjective Review**: Other requirements at QMK Collaborators' discretion
- **Documentation**: Core changes should be well-documented
---
## Automated Review Checklist
When reviewing PRs, check the following systematically:
### File Changes Review
1. **License headers** on all C/H files (GPL2+ preferred, others must be GPL2+ compatible, SPDX format preferred)
1. **Schema Compliance**: `keyboard.json` and `info.json` files validate against `data/schemas/keyboard.jsonschema`
- Both files are identical syntax, however the `keyboard.json` dictates a buildable target, `info.json` does not
- Run `qmk lint -kb <keyboard>` to check schema validation
- Check for proper data types (strings, integers, arrays, objects)
- Verify required fields are present
- Ensure enum values match allowed options in schema
2. All mandatory fields present and valid
3. `qmk format-json -i` has been run (formats and validates)
4. Layout macros moved from headers
5. Community layout names used where applicable
### rules.mk Cleanup
1. Deprecated features removed
2. No size comments
3. No keymap-only features at keyboard level
4. No redundant MCU parameter definitions
### config.h Cleanup
1. No `DESCRIPTION`, `config_common.h`, or prohibited includes
2. No default value re-definitions
3. No commented-out defines or feature documentation blocks
4. No user preference defines at keyboard level
### Keymap Quality
1. Default keymaps are pristine (no custom keycodes/advanced features)
2. No `QMKBEST`/`QMKURL` macros
3. Encoder map feature used instead of `encoder_update_user()`
4. Tri Layer feature used for multi-layer access
5. No VIA enabled in default keymap
### Documentation
1. readme.md follows template
2. Flash command present with `:flash`
3. Reset instructions clear
4. External image hosting (direct links)
5. Valid hardware availability link
### Code Organization
1. Empty weak-defined functions removed from `<keyboard>.c`
2. Proper migration of init functions
3. No cross-vendor source files
4. No VIA/KLE JSON files
### Branch and Scope
1. Not submitted from submitter's own `master` branch (use feature branches)
2. PR is focused on single change
3. Targets correct branch:
- `master` for new keyboard additions
- `develop` for keyboard updates/refactors/moves and core changes
4. No merge conflicts
---
## Review Response Templates
### For source master branch usage:
```
⚠️ This PR appears to be submitted from your own `master` branch. For future PRs, we recommend using feature branches instead of committing to your `master`. This makes it easier to keep your fork updated and manage multiple PRs.
See: [Best Practices: Your Fork's Master](https://docs.qmk.fm/newbs_git_using_your_master_branch)
```
### For incorrect target branch:
```
❌ This PR targets the wrong branch:
- **New keyboard additions** should target `master`
- **Keyboard updates/refactors/moves** should target `develop`
- **Core changes** should target `develop`
Please change the target branch accordingly.
```
### For missing license headers:
```
❌ Missing GPL-compatible license headers on the following files:
- **Be constructive**: Suggest fixes, not just problems
- **Acknowledge trade-offs**: Some guidelines have valid exceptions
This is meant as a **first-pass review** to catch common issues before human review. Complex architectural decisions, code quality, and subjective assessments still require human QMK Collaborator review.
# OpenSUSE based (we skip Tumbleweed as it has issues with package versions between pattern installs and other dependencies preinstalled into the base container)
- opensuse/leap:latest
# Gentoo-based
- gentoo/stage3:latest
# Arch based
- archlinux:latest
- cachyos/cachyos:latest
- manjarolinux/base:latest
container:
image:${{ matrix.distribution }}
options:--privileged
steps:
- name:Install base dependencies
run:|
# Attempt to run the package installation up to 10 times to mitigate transient network issues
for n in $(seq 1 10); do
{
echo "Attempt #$n of 10 to install base dependencies:"
{ # Intentionally use `shuf` here so that we share manufacturers across all build groups -- some have a lot of ARM-based boards which inherently take longer
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.