Compare commits

...

36 Commits

Author SHA1 Message Date
Pete Johanson
e4fb39d4a6 fix(studio): Allow setting UART RPC thread priority (#3290)
To ensure we can tune things when other threads may have priority,
preventing UART processing in time for the studio UI requirements,
adjust our default UART thread priority, and allow overriding as needed.
2026-03-20 03:51:46 -04:00
Peter Cock
9278505975 fix(core): One tick kscan wait on RP2350 (#3255)
Override kscan tick wait time on RP2350 as well, to match RP2040.
2026-03-19 16:48:06 -04:00
dependabot[bot]
ff9d326939 chore(deps): bump actions/checkout from 4 to 5 (#3033)
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 5.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-19 08:44:05 -06:00
André A. Gomes
df2e979d7e fix(ci): Skip build on empty build matrix (#3271)
Closes #3179
2026-03-16 10:37:54 -07:00
Pete Johanson
8feeb52eaf fix(ci): Better safeguards for ZMK variant build check (#3277)
Add an early guard to bail during the board compat check to ensure we
don't error out for out-of-tree boards with no ZMK variant.
2026-03-09 09:08:02 -06:00
Cem Aksoylar
714bbe30b0 docs: Fix #import to #include in dongle docs (#3276) 2026-03-05 15:38:51 -08:00
Pete Johanson
a23aa009d7 Add ZMK_BOARD_COMPAT symbol, that we can enable for our ZMK variants (#3265)
feat: Add ZMK_BOARD_COMPAT Kconfig symbol, and check for it

To properly detect users selecting a base board ID, when a ZMK variant
is available, add a ZMK_BOARD_COMPAT Kconfig symbol that the ZMK
variants will enable, allowing us to detect using the bare varand and
warn/error in CI so users don't end up with passing CI that results in
an unusable firmware due to missing ZMK enablement for keyboard name,
settings storage, etc.

refactor(boards): Add ZMK_BOARD_COMPAT to ZMK board variants

To clearly indicate the ZMK board variants are set up for ZMK usage,
select the ZMK_BOARD_COMPAT symbols for them.

fix(boards): Fix pillbug board.yml to report extension

Properly not the ZMK variant is part of an extension of the existing
pillbug board.
2026-03-03 10:39:11 -05:00
André A. Gomes
2a9ac3ba7f docs: Update Linux compatibility of C_AC_NEXT_KEYBOARD_LAYOUT_SELECT (#3268) 2026-03-02 11:39:08 -08:00
André A. Gomes
27afcb11ef docs: Add QMK comparison note for quick-tap-ms (#3257) 2026-02-27 13:19:37 -08:00
André A. Gomes
61f9ae4de2 docs: Replace deprecated variable names (#3260) 2026-02-27 13:17:36 -08:00
Seth Milliken
f6c629e895 fix: replace removed K_THREAD_STACK_MEMBER with K_KERNEL_STACK_MEMBER (#3218)
c.f.  https://docs.zephyrproject.org/latest/releases/release-notes-4.0.html#removed-apis-in-this-release
2026-02-26 18:14:36 -07:00
Seth Milliken
536375e45e fix: nice!view built-in widgets render failure from insufficient memory (#3243)
fixes #3219
2026-02-26 18:08:54 -07:00
André A. Gomes
e108e319c0 docs: Minor grammar fixes. (#3258) 2026-02-26 09:06:40 +00:00
Pete Johanson
9490391e1e fix(split): Use correct Kconfig for bumping TX buffers for discovery (#3216)
Newer Zephyr uses a different Kconfig value to control buffers for GATT
client discovery, so adjust our defaults to bump the correct value

Fixes: #3156
2026-02-18 03:16:16 -05:00
Pete Johanson
ed0fa157b1 docs: Fix up board IDs in the Zephyr 4.1 blog post to add ZMK variant (#3247)
Update the board revision/ID migration section of the Zephyr 4.1 blog
post to include the ZMK variant (`//zmk`).
2026-02-17 23:06:45 -08:00
Léo Cazenave
39a14154a9 docs: Fix C code examples in new behavior documentation (#3242) 2026-02-16 19:26:40 -08:00
Lucas SAUDON
5cfc67a334 fix(shields): Proper transparent binding in sofle raise layer (#3238)
Fix one binding in the Sofle raise layer that should be transparent in the stock keymap.
2026-02-15 12:18:40 -07:00
Peter Cock
75c9d5f6fd All 9 International & all 9 language keys recognized on macOS 15.6.1 (#3059)
* All nine International key recognized on macOS 15.6.1

Testing with Karabiner-EventViewer, reported as:
* international1
* japanese_pc_katakana
* international3
* japanese_pc_xfer
* international5
* international6
* japanese_pc_nfer
* international8
* international9

* All nine language keys recognized on macOS 15.6.1

Testing with Karabiner-EventViewer, reported as:
* japanese_eisuu (leave Japanese mode)
* japanese_kana (enter Japanese mode)
* lang3
* lang4
* lang5
* lang6
* lang7
* lang8
* lang9

* Insert line-break for style

* Move macOS Japanese notes to footnotes
2026-02-12 23:19:45 +01:00
Nicolas Munnich
e742da8e47 docs: Add new board guide (#3181)
* docs: Add new board guide

* docs: apply feedback from review
2026-02-12 20:26:11 +01:00
Pete Johanson
ada1542940 fix(ci): Pin @actions/artifact to a compatible release (#3230)
Fix build uploads by pinning our package version.
2026-02-12 02:24:12 -05:00
Pete Johanson
6690d535e6 refactor(core): Adjust our approach for upstream Zephyr boards (#3145)
refactor(core): Adjust our approach for upstream Zephyr boards

Move to using proper HWMv2 board extensions
https://docs.zephyrproject.org/4.1.0/hardware/porting/board_porting.html#board-extensions

for extending upstream Zephyr boards for use with ZMK. With this change,
using upstream Zephyr board IDs directly, e.g. `seeeduino_xiao` will be
stock versions as found upstream. To use a board variant that is tuned
for ZMK use, use the `zmk` variant, e.g. `seeeduino_xiao//zmk` which is
shorthand for `seeeduino_xiao/samd21g18a/zmk`.

refactor(boards): Move to ZMK specific variants for the nRFMicro board

For consistency, adjust the nRFMicro board definition to offer a
"vanilla" Zephyr board, and then ZMK variants, e.g.
`nrfmicro/nrf52840/zmk`.

refactor(boards): Move to ZMK specific variant for the bluemicro840 board

For consistency, adjust the bluemicro840 board definition to offer a
"vanilla" Zephyr board, and then ZMK variant, e.g. `bluemicro840//zmk`.

refactor(boards): Make tofu65 to ZMK variant by default

Make the standard Tofu65 board ID be `tofu65/rp2040/zmk` or
`tofu65//zmk` by shorthand.

refactor(boards): Move BDN9 to ZMK variant by default

Make the standard BDN9 board ID be `bdn9/stm32f072xb/zmk` or
`bdn9//zmk` by shorthand.

refactor(boards): Move Puchi BLE to ZMK variant by default

Make the standard Puchi BLE board ID be `puchi_ble/nrf52840/zmk` or
`puchi_ble//zmk` by shorthand.

refactor(boards): Move Adv360 Pro to ZMK variant by default

Make the standard Adv360 Pro board ID be `adv360pro_left/nrf52840/zmk` or
`adv360pro_left//zmk` by shorthand and for right as well.

refactor(boards): Move nRF52840 M2 to ZMK variant by default

Make the standard nRF52840 M2 board ID be `nrf52840_m2/nrf52840/zmk` or
`nrf52840_m2//zmk` by shorthand.

refactor(boards): Move Pillbug to ZMK variant by default

Make the standard Pillbug board ID be `pillbug/nrf52840/zmk` or
`pillbug//zmk` by shorthand.

refactor(boards): Move s40nc to ZMK variant by default

Make the standard s40nc board ID be `s40nc/nrf52840/zmk` or
`s40nc//zmk` by shorthand.

refactor(boards): Move nice!60 to ZMK variant by default

Make the standard nice!60 board ID be `nice60/nrf52840/zmk` or
`nice60//zmk` by shorthand.

refactor(boards): Move planck to ZMK variant by default

Make the standard planck board ID be `planck/stm32f303xc/zmk` or
`planck//zmk` by shorthand.

refactor(boards): Move preonic to ZMK variant by default

Make the standard preonic board ID be `preonic/stm32f303xc/zmk` or
`preonic//zmk` by shorthand.

refactor(boards): Move ferris to ZMK variant by default

Make the standard ferris board ID be `ferris/stm32f072xb/zmk` or
`ferris//zmk` by shorthand.

refactor(boards): Move Proton-C to ZMK variant by default

Make the standard Proton-C board ID be `proton_c/stm32f303xc/zmk` or
`proton_c//zmk` by shorthand.

refactor(boards): Move Corneish Zen to ZMK variant by default

Make the standard Corneish Zen board ID be `corneish_zen_left/nrf52840/zmk` or
`corneish_zen_left//zmk` by shorthand and for right as well.

refactor(boards): Move nice!nano to ZMK variant by default

Make the standard nice!nano board ID be `nice_nano/nrf52840/zmk` or
`nice_nano//zmk` by shorthand.

refactor(boards): Move mikoto to ZMK variant by default

Make the standard mikoto board ID be `mikoto/nrf52840/zmk` or
`mikoto//zmk` by shorthand.

refactor(boards): Move Polarity Works boards to ZMK variants

Make the standard Polarity Works board IDs be `zmk` variants.

doc: Update docs/blog post to reference ZMK variants

* Update Zephyr 4.1 blog post to mention ZMK variants
* Add note to hardware support page about variants

docs: Fix up shield board overlays for new board IDs

Adjust our documentation to properly use the correct qualified board
overlay file names that match our new board conventions.
2026-02-12 01:53:54 -05:00
Joel Spadin
6e7e0de2b6 feat(endpoints): add "no endpoint" value (#3140)
feat(endpoints): add "no endpoint" value

This adds ZMK_TRANSPORT_NONE, which can be set as the preferred
endpoint transport if you wish to prevent the keyboard from sending any
output. More usefully, it also is used to indicate that the preferred
endpoint is not available and it could not fall back to an available
one. To go along with this, many endpoint functions are renamed for
consistency, and a few new functions are added:

- zmk_endpoint_get_preferred_transport() returns the value that was set
  with zmk_endpoint_set_preferred_transport().

- zmk_endpoint_get_preferred() returns the endpoint that will be used
  if it is available. This endpoint always has the same transport as
  zmk_endpoint_get_preferred_transport().

- zmk_endpoint_is_connected() is a shortcut to check if the keyboard is
  actually connected to an endpoint.

This change is based on #2572 but without the option to disable endpoint
fallback. It does refactor code to allow adding that feature later.

fix(endpoints): Add endpoint setting upgrade

Adding ZMK_TRANSPORT_NONE at the start of enum zmk_transport results in
the preferred transport setting no longer representing the same values
when it is saved with earlier firmware and loaded with newer firmware.

To fix this, the "endpoints/preferred" setting is now deprecated and
replaced by "endpoints/preferred2". If the old setting is present, it
is interpreted as the old enum type, upgraded to the new type, and saved
immediately to the new setting. The old setting is then deleted.

To avoid this happening again in the future, enum zmk_transport now has
explicit values assigned to identifier, and a comment is also added to
explain that existing values must not be changed.

fix: Set default transport according to enabled transports

The default value for preferred_transport is now set to USB only if
CONFIG_ZMK_USB is enabled. If not, it falls back to BLE if
CONFIG_ZMK_BLE is enabled, then to "none" if nothing is enabled.
2026-02-12 01:51:42 -05:00
dependabot[bot]
ac7f75b859 chore(deps): bump lodash from 4.17.21 to 4.17.23 in /docs (#3211)
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.21 to 4.17.23.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.21...4.17.23)

---
updated-dependencies:
- dependency-name: lodash
  dependency-version: 4.17.23
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-29 19:55:24 +01:00
Joel Spadin
354cff9c36 fix(docs): Improve ZMK setup instructions (#3209)
* fix(docs): Improve link and code highlight contrast

Reset the theme's primary colors to the defaults, since the color of
links was a bit too low contrast in the dark theme. The default primary
color is a very similar but slightly lighter shade of blue.

The background color of highlighted lines in code blocks is also fairly
low contrast, but it needs to be in order to keep the text readable. To
add contrast here, we now add a colored block to the left side of a
highlighted line.

* fix(docs): Improve ZMK setup instructions

This makes several improvements to the instructions for installing and
using ZMK CLI:

- Windows Terminal is also named "Terminal", so reworded the terminal
  instructions to not separate Windows from other OSes.

- Specified that Windows Terminal should always be used on Windows, as
  on older installations of Windows, the default terminal when opening
  PowerShell may be the legacy console host, which may not support some
  of the VT sequences used by ZMK CLI.

- Switched from pipx to uv. This eliminates the need for instructions
  on installing Python, as uv will automatically install a supported
  version of Python if needed.

- Updated the instructions for running "zmk init", as ZMK CLI version
  0.4.0 switched from immediately asking for a repo URL to prompting
  the user to select between creating a new repo or cloning an existing
  one first.

- Since for a new user, having a keymap compile successfully on the
  first attempt after modifying it may be the exception rather than the
  norm, added a note about error messages in GitHub actions with a link
  to the troubleshooting page.

Also added instructions for updating ZMK CLI to the latest version on
the ZMK CLI page.
2026-01-17 20:00:01 -06:00
Willow Herring
ab46f48dde fix(keymap): Fix overflow in get/set bindings (#3205)
With the binding referenced to as uint8_t the keymap would be incorrect if more than 256 positions were in use, going to a uint16_t gives large enough headroom to not have to worry
2026-01-16 18:55:13 -05:00
Pete Johanson
24487bd974 feat(pointing): Release pressed keys on disconnect (#3204)
Match the behavior for key press release on split peripheral disconnect,
and track pressed input keys to release them as needed on disconnect.
2026-01-14 13:17:43 -05:00
Cem Aksoylar
88db5f34fe docs: Fix build.yaml references (#3203)
Fixes #3191
2026-01-13 07:16:45 +00:00
Xudong Zheng
9fc10ddc22 refactor(ble): use Zephyr macros for advertising data (#3173) 2026-01-11 17:12:28 -07:00
Nicolas Munnich
19582174f3 chore: Add basic tests for Studio's layer manipulation (#3164)
chore: Add test behaviors for Studio testing

chore: Add basic tests for studio layer adjustment

chore: Fixes from code review
2026-01-07 19:01:05 -05:00
cormoran
70ab6b243a fix(studio): avoid decoding buffer overflow (#3185)
This patch fixes studio rpc bug. Protobuf decoding buffer overflows when
multiple frames are in rx buffer.
2026-01-07 18:09:13 -05:00
Pete Johanson
f85ec7e7a2 SoC: stm32c0 support (#3174)
deps: Use hal_stm32 with stm32c0 USB device fixes.

Pull in ZMK fork of hal_stm32 with USB device driver fixes for stm32c0.

feat: Add nBOOT_SEL bit setup for STM32 G0/C0 targets

Newer STM32 C0 and G0 series SoCs do not by default allow use of the
BOOT0 pin/button to enter the bootloader once something has been flash
to the device, which is a change from previous series, and usually not
what's wanted for keyboards running ZMK. To address this, add some
optional, but default initialization code to check the nBOOT_SEL bit and
override it if necessary to ensure BOOT pin/button functionality.

docs: Extract bootloader config into a dedicated page.

Pull the bootloader intergration options out of the system configuration
page into their own dedicated one.

Co-authored-by: Nicolas Munnich <98408764+nmunnich@users.noreply.github.com>

---------

Co-authored-by: Nicolas Munnich <98408764+nmunnich@users.noreply.github.com>
2026-01-07 18:05:13 -05:00
dependabot[bot]
43b09e0fae chore(deps-dev): bump typescript-eslint (#3192)
Bumps the development group in /docs with 1 update: [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint).


Updates `typescript-eslint` from 8.51.0 to 8.52.0
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.52.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-version: 8.52.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-07 23:22:33 +01:00
Solodros
abce9deab7 fix(hid): initialize missing d_scroll_x field in mouse report (#3196)
The static mouse_report definition did not initialize the d_scroll_x
field. The zmk_hid_mouse_report_body structure contains five fields
(buttons, d_x, d_y, d_scroll_y, d_scroll_x), but d_scroll_x was left
uninitialized.

Initialize d_scroll_x to 0 to ensure all fields in the mouse report
are properly initialized and avoid potential undefined behavior.
2026-01-07 17:16:24 -05:00
Solodros
36dbf46764 fix(split): correct async UART RX buffer definition (#3193)
The RX buffer was previously defined as [RX_BUFFER_SIZE/2][2], which
created (RX_BUFFER_SIZE/2) small 2-byte buffers instead of the two
(RX_BUFFER_SIZE/2)-byte buffers required for DMA ping-pong operation.

Update the buffer definition to [2][RX_BUFFER_SIZE/2] and apply the
fix to both the central and peripheral wired split implementations.

This prevents potential DMA RX data corruption when using async UART.
2026-01-07 17:04:52 -05:00
Cem Aksoylar
cb786cd7d6 docs: Remove unneeded led strip config (#3186) 2026-01-02 21:02:29 +01:00
dependabot[bot]
76bf2e5774 chore(deps): bump qs from 6.14.0 to 6.14.1 in /docs (#3183)
Bumps [qs](https://github.com/ljharb/qs) from 6.14.0 to 6.14.1.
- [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/qs/compare/v6.14.0...v6.14.1)

---
updated-dependencies:
- dependency-name: qs
  dependency-version: 6.14.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-02 18:01:18 +01:00
489 changed files with 3236 additions and 921 deletions

View File

@@ -21,7 +21,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: Find test directories
id: test-dirs
run: |
@@ -38,7 +38,7 @@ jobs:
image: docker.io/zmkfirmware/zmk-build-arm:4.1
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: Cache west modules
uses: actions/cache@v4
env:

View File

@@ -30,17 +30,28 @@ jobs:
name: Fetch Build Keyboards
outputs:
build_matrix: ${{ env.build_matrix }}
has_valid_build_matrix: ${{ steps.fetch.outputs.has_valid_build_matrix }}
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: Fetch Build Matrix
id: fetch
run: |
echo "build_matrix=$(yq -oj -I0 '${{ inputs.build_matrix_path }}')" >> $GITHUB_ENV
yq -oj "${{ inputs.build_matrix_path }}"
matrix_content=$(yq -oj -I0 '${{ inputs.build_matrix_path }}')
if [ -z "$matrix_content" ] || [ "$matrix_content" = "null" ]; then
echo "::notice file=${{inputs.build_matrix_path}},title=Empty build matrix file::To add a keyboard to the build, see https://zmk.dev/docs/user-setup#add-a-keyboard."
echo "has_valid_build_matrix=false" >> $GITHUB_OUTPUT
else
echo "build_matrix=$matrix_content" >> $GITHUB_ENV
echo "has_valid_build_matrix=true" >> $GITHUB_OUTPUT
echo "$matrix_content"
fi
build:
runs-on: ubuntu-latest
if: needs.matrix.outputs.has_valid_build_matrix == 'true'
container:
image: zmkfirmware/zmk-build-arm:stable
needs: matrix
@@ -56,7 +67,7 @@ jobs:
curl -fsSL https://deb.nodesource.com/setup_22.x | bash && apt install -y nodejs
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: Create build directory
run: |
@@ -147,6 +158,29 @@ jobs:
echo "See also the [list of released versions](https://github.com/zmkfirmware/zmk/releases)." >> $GITHUB_STEP_SUMMARY
echo "If you wish to stay on main, check the most recent pending release PR for breaking changes. [Our blog](https://zmk.dev/blog) may have upgrade information if breaking changes are significant." >> $GITHUB_STEP_SUMMARY
- name: Check if building a board without explicit ZMK compat
if: always()
working-directory: "${{ env.base_dir }}/${{ inputs.config_path }}"
run: |
if ! (grep "CONFIG_ZMK_BOARD_COMPAT=y" "${{ env.build_dir }}/zephyr/.config" > /dev/null)
then
original_board=$(echo "${{ matrix.board }}" | sed -e 's$/.*$$')
west_board=$(west boards --board-root ${{ env.base_dir }}/zmk/app/module --board-root ${{ env.base_dir }}/zmk/app --board "${original_board}")
if [ -z "$west_board" ]; then
echo "Not found the board listed with west boards. Skipping further checking."
exit 0
fi
west boards --board-root ${{ env.base_dir }}/zmk/app/module --board-root ${{ env.base_dir }}/zmk/app --board "${original_board}" --format "{qualifiers}" | grep "zmk" > /dev/null
if [ $? -ne 0 ]
then
echo "::warning file=build/zephyr/.config,title=Missing ZMK Compat::The selected board does not report explicit ZMK compat. Please verify you've selected the correct board and ZMK variant if one exists"
else
echo "::error file=build/zephyr/.config,title=Missing ZMK Compat::The selected board is not set up for ZMK and there is a ZMK variant available. See https://zmk.dev/blog/2025/12/09/zephyr-4-1#zmk-board-variant."
exit 1
fi
fi
- name: ${{ env.display_name }} Kconfig file
run: |
if [ -f "${{ env.build_dir }}/zephyr/.config" ]
@@ -190,6 +224,7 @@ jobs:
merge:
runs-on: ubuntu-latest
if: needs.matrix.outputs.has_valid_build_matrix == 'true'
needs: build
name: Merge Output Artifacts
steps:

View File

@@ -30,7 +30,7 @@ jobs:
include: ${{ fromJSON(needs.compile-matrix.outputs.include-list) }}
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
with:
persist-credentials: false
- name: Cache west modules
@@ -61,7 +61,7 @@ jobs:
with:
node-version: "14.x"
- name: Install @actions/artifact
run: npm install @actions/artifact
run: npm install @actions/artifact@5.0.3
- name: Build
uses: actions/github-script@v7
id: boards-list
@@ -187,7 +187,7 @@ jobs:
core-include: ${{ steps.core-list.outputs.result }}
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
with:
persist-credentials: false
- name: Use Node.js
@@ -218,7 +218,7 @@ jobs:
boards-include: ${{ steps.boards-list.outputs.result }}
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: Use Node.js
uses: actions/setup-node@v4
with:
@@ -277,6 +277,7 @@ jobs:
);
} else {
console.error("Board without keys or interconnect");
return [];
}
break;
case "shield":
@@ -345,7 +346,7 @@ jobs:
organized-metadata: ${{ steps.organize-metadata.outputs.result }}
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
with:
persist-credentials: false
- name: Use Node.js
@@ -427,7 +428,7 @@ jobs:
core-changes: ${{ steps.core-changes.outputs.result }}
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
with:
persist-credentials: false
- uses: tj-actions/changed-files@9200e69727eb73eb060652b19946b8a2fdfb654b # pin to v45.0.8 due to https://github.com/tj-actions/changed-files/issues/2463 https://www.stepsecurity.io/blog/harden-runner-detection-tj-actions-changed-files-action-is-compromised

View File

@@ -14,7 +14,7 @@ jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- uses: bahmutov/npm-install@v1
with:
working-directory: docs
@@ -24,7 +24,7 @@ jobs:
typecheck:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- uses: bahmutov/npm-install@v1
with:
working-directory: docs

View File

@@ -20,7 +20,7 @@ jobs:
container:
image: docker.io/zmkfirmware/zmk-dev-arm:4.1
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- name: Install dependencies
run: pip install --break-system-packages -r app/scripts/requirements.txt
- name: West init

View File

@@ -8,7 +8,7 @@ jobs:
pre-commit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- uses: actions/setup-python@v5
with:
python-version: 3.x

View File

@@ -35,7 +35,7 @@ jobs:
ZMK_RELEASE_PLEASE_TOKEN: ${{ secrets.ZMK_RELEASE_PLEASE_TOKEN }}
VERSION: v${{ needs.handle-commit.outputs.major }}.${{ needs.handle-commit.outputs.minor }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- name: Create major.minor branch
if: ${{ needs.handle-commit.outputs.patch == '0' }}

View File

@@ -23,7 +23,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: Find test directories
id: test-dirs
run: |
@@ -40,7 +40,7 @@ jobs:
image: docker.io/zmkfirmware/zmk-build-arm:4.1
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: Cache west modules
uses: actions/cache@v4
env:

View File

@@ -5,6 +5,17 @@ mainmenu "ZMK Firmware"
menu "ZMK"
config ZMK_BOARD_COMPAT
bool
help
Hidden symbol used to hint that a board has been specifically
set up with various ZMK requirements in mind, e.g. settings
storage, bootloader integration, etc.
Failure to set this will warn users they may want to verify they
used a ZMK variant of an upstream board, or are using a board
properly migrated to a newer ZMK version.
menu "Basic Keyboard Setup"
config ZMK_KEYBOARD_NAME

View File

@@ -0,0 +1,9 @@
# Copyright (c) 2026 The ZMK Contributors
# SPDX-License-Identifier: MIT
config BOARD_ADAFRUIT_KB2040
select ZMK_BOARD_COMPAT if BOARD_ADAFRUIT_KB2040_RP2040_ZMK
imply RETAINED_MEM if BOARD_ADAFRUIT_KB2040_RP2040_ZMK
imply RETENTION if BOARD_ADAFRUIT_KB2040_RP2040_ZMK
imply RETENTION_BOOT_MODE if BOARD_ADAFRUIT_KB2040_RP2040_ZMK

View File

@@ -1,5 +1,5 @@
file_format: "1"
id: adafruit_kb2040
id: adafruit_kb2040//zmk
name: Adafruit KB2040
type: board
arch: arm

View File

@@ -4,6 +4,7 @@
* SPDX-License-Identifier: MIT
*/
#include <../boards/adafruit/kb2040/adafruit_kb2040.dts>
#include <arm/raspberrypi/rp2040-boot-mode-retention.dtsi>
&pro_micro_serial { status = "disabled"; };

View File

@@ -0,0 +1,23 @@
# SPDX-License-Identifier: MIT
CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=125000000
# Enable reset by default
CONFIG_RESET=y
# Enable clock control by default
CONFIG_CLOCK_CONTROL=y
# Code partition needed to target the correct flash range
CONFIG_USE_DT_CODE_PARTITION=y
# Output UF2 by default, native bootloader supports it.
CONFIG_BUILD_OUTPUT_UF2=y
# USB HID
CONFIG_ZMK_USB=y
# Bootloader Support
CONFIG_RETAINED_MEM=y
CONFIG_RETENTION=y
CONFIG_RETENTION_BOOT_MODE=y

View File

@@ -0,0 +1,5 @@
board:
extend: adafruit_kb2040
variants:
- name: zmk
qualifier: rp2040

View File

@@ -0,0 +1,9 @@
# Copyright (c) 2026 The ZMK Contributors
# SPDX-License-Identifier: MIT
config BOARD_ADAFRUIT_QT_PY_RP2040
select ZMK_BOARD_COMPAT if BOARD_ADAFRUIT_QT_PY_RP2040_RP2040_ZMK
imply RETAINED_MEM if BOARD_ADAFRUIT_QT_PY_RP2040_RP2040_ZMK
imply RETENTION if BOARD_ADAFRUIT_QT_PY_RP2040_RP2040_ZMK
imply RETENTION_BOOT_MODE if BOARD_ADAFRUIT_QT_PY_RP2040_RP2040_ZMK

View File

@@ -1,5 +1,5 @@
file_format: "1"
id: adafruit_qt_py_rp2040
id: adafruit_qt_py_rp2040//zmk
name: Adafruit QT Py RP2040
type: board
arch: arm

View File

@@ -4,6 +4,7 @@
* SPDX-License-Identifier: MIT
*/
#include <../boards/adafruit/qt_py_rp2040/adafruit_qt_py_rp2040.dts>
#include <arm/raspberrypi/rp2040-boot-mode-retention.dtsi>
&xiao_serial { status = "disabled"; };

View File

@@ -0,0 +1,23 @@
# SPDX-License-Identifier: MIT
CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=125000000
# Enable reset by default
CONFIG_RESET=y
# Enable clock control by default
CONFIG_CLOCK_CONTROL=y
# Code partition needed to target the correct flash range
CONFIG_USE_DT_CODE_PARTITION=y
# Output UF2 by default, native bootloader supports it.
CONFIG_BUILD_OUTPUT_UF2=y
# USB HID
CONFIG_ZMK_USB=y
# Bootloader Support
CONFIG_RETAINED_MEM=y
CONFIG_RETENTION=y
CONFIG_RETENTION_BOOT_MODE=y

View File

@@ -0,0 +1,5 @@
board:
extend: adafruit_qt_py_rp2040
variants:
- name: zmk
qualifier: rp2040

View File

@@ -1,9 +0,0 @@
file_format: "1"
id: boardsource_blok
name: BoardSource blok
type: board
arch: arm
outputs:
- usb
url: https://peg.software/docs/blok
exposes: [pro_micro]

View File

@@ -0,0 +1,9 @@
# Copyright (c) 2026 Pete Johanson
# SPDX-License-Identifier: MIT
config BOARD_BOARDSOURCE_BLOK
select ZMK_BOARD_COMPAT if BOARD_BOARDSOURCE_BLOK_RP2040_ZMK
imply RETAINED_MEM if BOARD_BOARDSOURCE_BLOK_RP2040_ZMK
imply RETENTION if BOARD_BOARDSOURCE_BLOK_RP2040_ZMK
imply RETENTION_BOOT_MODE if BOARD_BOARDSOURCE_BLOK_RP2040_ZMK

View File

@@ -0,0 +1,5 @@
board:
extend: boardsource_blok
variants:
- name: zmk
qualifier: rp2040

View File

@@ -0,0 +1,9 @@
file_format: "1"
id: boardsource_blok//zmk
name: Boardsource Blok
type: board
arch: arm
outputs:
- usb
url: https://boardsource.xyz/products/blok-rp2040-keyboard-controller
exposes: [pro_micro]

View File

@@ -0,0 +1,23 @@
/*
* Copyright (c) 2026 The ZMK Contributors
*
* SPDX-License-Identifier: MIT
*/
#include <../boards/boardsource/blok/boardsource_blok.dts>
#include <arm/raspberrypi/rp2040-boot-mode-retention.dtsi>
&pro_micro_serial { status = "disabled"; };
&code_partition {
reg = <0x100 (DT_SIZE_M(16) - 0x100 - DT_SIZE_K(512))>;
};
&flash0 {
partitions {
storage_partition: partition@f80000 {
reg = <0xf80000 DT_SIZE_K(512)>;
read-only;
};
};
};

View File

@@ -0,0 +1,30 @@
# SPDX-License-Identifier: MIT
CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=125000000
CONFIG_RESET=y
# Enable clock control by default
CONFIG_CLOCK_CONTROL=y
# Code partition needed to target the correct flash range
CONFIG_USE_DT_CODE_PARTITION=y
# Output UF2 by default, native bootloader supports it.
CONFIG_BUILD_OUTPUT_UF2=y
# USB HID
CONFIG_ZMK_USB=y
# Settings Support
CONFIG_MPU_ALLOW_FLASH_WRITE=y
CONFIG_NVS=y
CONFIG_SETTINGS_NVS=y
CONFIG_FLASH=y
CONFIG_FLASH_PAGE_LAYOUT=y
CONFIG_FLASH_MAP=y
# Bootloader Support
CONFIG_RETAINED_MEM=y
CONFIG_RETENTION=y
CONFIG_RETENTION_BOOT_MODE=y

View File

@@ -1,8 +0,0 @@
CONFIG_CONSOLE=n
CONFIG_SERIAL=n
CONFIG_UART_CONSOLE=n
CONFIG_ZMK_USB=y
CONFIG_RETAINED_MEM=y
CONFIG_RETENTION=y
CONFIG_RETENTION_BOOT_MODE=y

View File

@@ -1,9 +0,0 @@
/*
* Copyright (c) 2023 The ZMK Contributors
*
* SPDX-License-Identifier: MIT
*/
#include <arm/raspberrypi/rp2040-boot-mode-retention.dtsi>
&pro_micro_serial { status = "disabled"; };

View File

@@ -1,8 +0,0 @@
CONFIG_CONSOLE=n
CONFIG_SERIAL=n
CONFIG_UART_CONSOLE=n
CONFIG_ZMK_USB=y
CONFIG_RETAINED_MEM=y
CONFIG_RETENTION=y
CONFIG_RETENTION_BOOT_MODE=y

View File

@@ -1,6 +0,0 @@
CONFIG_CONSOLE=n
CONFIG_SERIAL=n
CONFIG_UART_CONSOLE=n
CONFIG_UART_INTERRUPT_DRIVEN=n
CONFIG_ZMK_USB=y
CONFIG_ZMK_KSCAN_MATRIX_POLLING=y

View File

@@ -1,6 +0,0 @@
CONFIG_CONSOLE=n
CONFIG_SERIAL=n
CONFIG_UART_CONSOLE=n
CONFIG_UART_INTERRUPT_DRIVEN=n
CONFIG_ZMK_USB=y
CONFIG_ZMK_KSCAN_MATRIX_POLLING=y

View File

@@ -1,6 +0,0 @@
CONFIG_CONSOLE=n
CONFIG_SERIAL=n
CONFIG_UART_CONSOLE=n
CONFIG_UART_INTERRUPT_DRIVEN=n
CONFIG_ZMK_USB=y
CONFIG_ZMK_KSCAN_MATRIX_POLLING=y

View File

@@ -1,8 +0,0 @@
CONFIG_CONSOLE=n
CONFIG_SERIAL=n
CONFIG_UART_CONSOLE=n
CONFIG_ZMK_USB=y
CONFIG_RETAINED_MEM=y
CONFIG_RETENTION=y
CONFIG_RETENTION_BOOT_MODE=y

View File

@@ -1,32 +0,0 @@
#include <dt-bindings/zmk/keys.h>
#include <dt-bindings/zmk/kscan_mock.h>
/ {
chosen {
zephyr,console = &uart0;
zmk,kscan = &kscan;
};
kscan: native_posix_64_kscan_mock {
compatible = "zmk,kscan-mock";
rows = <2>;
columns = <2>;
exit-after;
};
uart0: uart {
status = "okay";
compatible = "zephyr,native-posix-uart";
/* Dummy current-speed entry to comply with serial
* DTS binding
*/
current-speed = <0>;
};
};
&sdl_dc {
width = <128>;
height = <32>;
};

View File

@@ -1,12 +0,0 @@
# Copyright (c) 2025 The ZMK Contributors
# SPDX-License-Identifier: MIT
CONFIG_ZMK_BLE=y
CONFIG_ZMK_USB=y
CONFIG_MPU_ALLOW_FLASH_WRITE=y
CONFIG_NVS=y
CONFIG_SETTINGS_NVS=y
CONFIG_FLASH=y
CONFIG_FLASH_PAGE_LAYOUT=y
CONFIG_FLASH_MAP=y

View File

@@ -1,4 +0,0 @@
CONFIG_ZMK_BLE=y
CONFIG_LOG=y
CONFIG_LOG_BACKEND_SHOW_COLOR=n
CONFIG_ZMK_LOG_LEVEL_DBG=y

View File

@@ -1,6 +0,0 @@
CONFIG_ZMK_DISPLAY=y
CONFIG_LV_FONT_UNSCII_8=n
CONFIG_ZMK_USB=y
CONFIG_I2C=y
CONFIG_I2C_DW=y
CONFIG_LV_Z_VDB_SIZE=50

View File

@@ -1,7 +0,0 @@
/*
* Copyright (c) 2023 The ZMK Contributors
*
* SPDX-License-Identifier: MIT
*/
&xiao_serial { status = "disabled"; };

View File

@@ -1,16 +0,0 @@
CONFIG_CONSOLE=n
CONFIG_SERIAL=n
CONFIG_UART_CONSOLE=n
CONFIG_UART_INTERRUPT_DRIVEN=n
CONFIG_ZMK_USB=y
CONFIG_MPU_ALLOW_FLASH_WRITE=y
CONFIG_NVS=y
CONFIG_SETTINGS_NVS=y
CONFIG_FLASH=y
CONFIG_FLASH_PAGE_LAYOUT=y
CONFIG_FLASH_MAP=y
CONFIG_RETAINED_MEM=y
CONFIG_RETENTION=y
CONFIG_RETENTION_BOOT_MODE=y

View File

@@ -1,5 +0,0 @@
CONFIG_CONSOLE=n
CONFIG_SERIAL=n
CONFIG_UART_CONSOLE=n
CONFIG_UART_INTERRUPT_DRIVEN=n
CONFIG_ZMK_USB=y

View File

@@ -1,15 +0,0 @@
CONFIG_CONSOLE=n
CONFIG_SERIAL=n
CONFIG_UART_CONSOLE=n
CONFIG_ZMK_USB=y
CONFIG_MPU_ALLOW_FLASH_WRITE=y
CONFIG_NVS=y
CONFIG_SETTINGS_NVS=y
CONFIG_FLASH=y
CONFIG_FLASH_PAGE_LAYOUT=y
CONFIG_FLASH_MAP=y
CONFIG_RETAINED_MEM=y
CONFIG_RETENTION=y
CONFIG_RETENTION_BOOT_MODE=y

View File

@@ -1,15 +0,0 @@
CONFIG_CONSOLE=n
CONFIG_SERIAL=n
CONFIG_UART_CONSOLE=n
CONFIG_ZMK_USB=y
CONFIG_MPU_ALLOW_FLASH_WRITE=y
CONFIG_NVS=y
CONFIG_SETTINGS_NVS=y
CONFIG_FLASH=y
CONFIG_FLASH_PAGE_LAYOUT=y
CONFIG_FLASH_MAP=y
CONFIG_RETAINED_MEM=y
CONFIG_RETENTION=y
CONFIG_RETENTION_BOOT_MODE=y

View File

@@ -4,9 +4,10 @@
# SPDX-License-Identifier: MIT
config BOARD_NRFMICRO
select SOC_NRF52840_QIAA if BOARD_NRFMICRO_NRF52840
select SOC_NRF52840_QIAA if BOARD_NRFMICRO_NRF52840_FLIPPED
select SOC_NRF52833_QIAA if BOARD_NRFMICRO_NRF52833
imply RETAINED_MEM
imply RETENTION
imply RETENTION_BOOT_MODE
select SOC_NRF52840_QIAA if BOARD_NRFMICRO_NRF52840_ZMK
select SOC_NRF52840_QIAA if BOARD_NRFMICRO_NRF52840_FLIPPED_ZMK
select SOC_NRF52833_QIAA if BOARD_NRFMICRO_NRF52833_ZMK
select ZMK_BOARD_COMPAT if BOARD_NRFMICRO_NRF52840_ZMK || BOARD_NRFMICRO_NRF52840_FLIPPED_ZMK || BOARD_NRFMICRO_NRF52833_ZMK
imply RETAINED_MEM if BOARD_NRFMICRO_NRF52840_ZMK || BOARD_NRFMICRO_NRF52840_FLIPPED_ZMK || BOARD_NRFMICRO_NRF52833_ZMK
imply RETENTION if BOARD_NRFMICRO_NRF52840_ZMK || BOARD_NRFMICRO_NRF52840_FLIPPED_ZMK || BOARD_NRFMICRO_NRF52833_ZMK
imply RETENTION_BOOT_MODE if BOARD_NRFMICRO_NRF52840_ZMK || BOARD_NRFMICRO_NRF52840_FLIPPED_ZMK || BOARD_NRFMICRO_NRF52833_ZMK

View File

@@ -1,14 +1,9 @@
board:
name: nrfmicro
vendor: joric
socs:
- name: nrf52840
variants:
- name: flipped
- name: nrf52833
revision:
format: major.minor.patch
default: 1.3.0
revisions:
- name: 1.3.0
- name: 1.1.0
extend: nrfmicro
variants:
- name: zmk
qualifier: nrf52840
- name: flipped_zmk
qualifier: nrf52840
- name: zmk
qualifier: nrf52833

View File

@@ -1,5 +1,5 @@
file_format: "1"
id: nrfmicro/nrf52833
id: nrfmicro/nrf52833/zmk
name: nRFMicro (nRF52833)
type: board
arch: arm

View File

@@ -0,0 +1,29 @@
/*
* Copyright (c) 2026 The ZMK Contributors
*
* SPDX-License-Identifier: MIT
*/
#include <../boards/joric/nrfmicro/nrfmicro_nrf52833.dts>
#include <common/nordic/nrf52833_uf2_boot_mode.dtsi>
/ {
chosen {
zmk,battery = &vbatt;
};
// Node name must match original "EXT_POWER" label to preserve user settings.
EXT_POWER {
compatible = "zmk,ext-power-generic";
control-gpios = <&gpio1 9 GPIO_ACTIVE_LOW>;
init-delay-ms = <50>;
};
vbatt: vbatt {
compatible = "zmk,battery-voltage-divider";
io-channels = <&adc 2>;
output-ohms = <2000000>;
full-ohms = <(2000000 + 820000)>;
};
};

View File

@@ -1,5 +1,5 @@
file_format: "1"
id: nrfmicro/nrf52840
id: nrfmicro/nrf52840/zmk
name: nRFMicro (nRF52840) 1.1/1.2/1.3
type: board
arch: arm

View File

@@ -1,5 +1,5 @@
file_format: "1"
id: nrfmicro/nrf52840/flipped
id: nrfmicro/nrf52840/flipped_zmk
name: nRFMicro nRF52840 (flipped)
type: board
arch: arm

View File

@@ -1,6 +0,0 @@
/*
* Copyright (c) 2020 The ZMK Contributors
*
* SPDX-License-Identifier: MIT
*/

View File

@@ -0,0 +1,17 @@
/*
* Copyright (c) 2026 The ZMK Contributors
*
* SPDX-License-Identifier: MIT
*/
#include <../boards/joric/nrfmicro/nrfmicro_nrf52840_flipped.dts>
#include <common/nordic/nrf52840_uf2_boot_mode.dtsi>
/ {
// Node name must match original "EXT_POWER" label to preserve user settings.
EXT_POWER {
compatible = "zmk,ext-power-generic";
control-gpios = <&gpio1 9 GPIO_ACTIVE_HIGH>;
init-delay-ms = <50>;
};
};

View File

@@ -0,0 +1,29 @@
/*
* Copyright (c) 2026 The ZMK Contributors
*
* SPDX-License-Identifier: MIT
*/
#include <../boards/joric/nrfmicro/nrfmicro_nrf52840.dts>
#include <common/nordic/nrf52840_uf2_boot_mode.dtsi>
/ {
chosen {
zmk,battery = &vbatt;
};
// Node name must match original "EXT_POWER" label to preserve user settings.
EXT_POWER {
compatible = "zmk,ext-power-generic";
control-gpios = <&gpio1 9 GPIO_ACTIVE_LOW>;
init-delay-ms = <50>;
};
vbatt: vbatt {
compatible = "zmk,battery-voltage-divider";
io-channels = <&adc 2>;
output-ohms = <2000000>;
full-ohms = <(2000000 + 820000)>;
};
};

View File

@@ -1,8 +1,9 @@
# Copyright (c) 2020 Pete Johanson, Derek Schmell
# Copyright (c) 2026 Pete Johanson, Derek Schmell
# SPDX-License-Identifier: Apache-2.0
config BOARD_BLUEMICRO840
select SOC_NRF52840_QIAA
imply RETAINED_MEM
imply RETENTION
imply RETENTION_BOOT_MODE
select ZMK_BOARD_COMPAT if BOARD_BLUEMICRO840_NRF52840_ZMK
imply RETAINED_MEM if BOARD_BLUEMICRO840_NRF52840_ZMK
imply RETENTION if BOARD_BLUEMICRO840_NRF52840_ZMK
imply RETENTION_BOOT_MODE if BOARD_BLUEMICRO840_NRF52840_ZMK

View File

@@ -1,5 +1,5 @@
file_format: "1"
id: bluemicro840
id: bluemicro840//zmk
name: BlueMicro840 v1
type: board
arch: arm

View File

@@ -0,0 +1,29 @@
/*
* Copyright (c) 2026 Pete Johanson, Derek Schmell
*
* SPDX-License-Identifier: MIT
*/
#include <../boards/jpconstantineau/bluemicro840/bluemicro840.dts>
#include <common/nordic/nrf52840_uf2_boot_mode.dtsi>
/ {
chosen {
zmk,battery = &vbatt;
};
// Node name must match original "EXT_POWER" label to preserve user settings.
EXT_POWER {
compatible = "zmk,ext-power-generic";
init-delay-ms = <20>;
control-gpios = <&gpio0 12 GPIO_ACTIVE_HIGH>;
};
vbatt: vbatt {
compatible = "zmk,battery-voltage-divider";
io-channels = <&adc 7>;
output-ohms = <2000000>;
full-ohms = <(2000000 + 806000)>;
};
};

View File

@@ -1,5 +1,5 @@
board:
name: bluemicro840
vendor: jpconstantineau
socs:
- name: nrf52840
extend: bluemicro840
variants:
- name: zmk
qualifier: nrf52840

View File

@@ -3,6 +3,7 @@
config BOARD_TOFU65
select SOC_RP2040
select ZMK_BOARD_COMPAT
imply RETAINED_MEM
imply RETENTION
imply RETENTION_BOOT_MODE

View File

@@ -3,3 +3,5 @@ board:
vendor: kbdfans
socs:
- name: rp2040
variants:
- name: zmk

View File

@@ -1,5 +1,5 @@
file_format: "1"
id: tofu65
id: tofu65//zmk
name: KBDfans Tofu65 2.0
type: board
arch: arm

View File

@@ -3,3 +3,4 @@
config BOARD_BDN9
select SOC_STM32F072XB
select ZMK_BOARD_COMPAT

View File

@@ -1,5 +1,5 @@
file_format: "1"
id: bdn9
id: bdn9//zmk
name: BDN9 (Rev2)
type: board
arch: arm

View File

@@ -3,6 +3,8 @@ board:
vendor: keebio
socs:
- name: stm32f072xb
variants:
- name: zmk
revision:
format: major.minor.patch
default: 2.0.0

View File

@@ -3,9 +3,6 @@
if BOARD_PUCHI_BLE
config BOARD
default "puchi_ble"
if USB_DEVICE_STACK
config USB_NRFX
@@ -13,7 +10,4 @@ config USB_NRFX
endif # USB_DEVICE_STACK
config BT_CTLR
default BT
endif # BOARD_PUCHI_BLE

View File

@@ -5,6 +5,7 @@
config BOARD_PUCHI_BLE
select SOC_NRF52840_QIAA
imply RETAINED_MEM
imply RETENTION
imply RETENTION_BOOT_MODE
select ZMK_BOARD_COMPAT if BOARD_PUCHI_BLE_NRF52840_ZMK
imply RETAINED_MEM if BOARD_PUCHI_BLE_NRF52840_ZMK
imply RETENTION if BOARD_PUCHI_BLE_NRF52840_ZMK
imply RETENTION_BOOT_MODE if BOARD_PUCHI_BLE_NRF52840_ZMK

View File

@@ -1,5 +1,5 @@
board:
name: puchi_ble
vendor: keycapsss
socs:
- name: nrf52840
extend: puchi_ble
variants:
- name: zmk
qualifier: nrf52840

View File

@@ -1,5 +1,5 @@
file_format: "1"
id: puchi_ble
id: puchi_ble//zmk
name: Puchi-BLE V1
type: board
arch: arm

View File

@@ -0,0 +1,29 @@
/*
* Copyright (c) 2026 The ZMK Contributors
*
* SPDX-License-Identifier: MIT
*/
#include <../boards/keycapsss/puchi_ble/puchi_ble.dts>
#include <common/nordic/nrf52840_uf2_boot_mode.dtsi>
/ {
chosen {
zmk,battery = &vbatt;
};
// Node name must match original "EXT_POWER" label to preserve user settings.
EXT_POWER {
compatible = "zmk,ext-power-generic";
control-gpios = <&gpio1 9 GPIO_ACTIVE_LOW>;
};
vbatt: vbatt {
compatible = "zmk,battery-voltage-divider";
io-channels = <&adc 2>;
output-ohms = <2000000>;
full-ohms = <(2000000 + 820000)>;
};
};

View File

@@ -5,6 +5,7 @@
config BOARD_ADV360PRO_LEFT
select SOC_NRF52840_QIAA
select ZMK_BOARD_COMPAT
imply RETAINED_MEM
imply RETENTION
imply RETENTION_BOOT_MODE
imply RETENTION_BOOT_MODE

View File

@@ -5,6 +5,7 @@
config BOARD_ADV360PRO_RIGHT
select SOC_NRF52840_QIAA
select ZMK_BOARD_COMPAT
imply RETAINED_MEM
imply RETENTION
imply RETENTION_BOOT_MODE
imply RETENTION_BOOT_MODE

View File

@@ -13,5 +13,5 @@ outputs:
- usb
- ble
siblings:
- adv360pro_left
- adv360pro_right
- adv360pro_left//zmk
- adv360pro_right//zmk

View File

@@ -3,7 +3,11 @@ boards:
vendor: kinesis
socs:
- name: nrf52840
variants:
- name: zmk
- name: adv360pro_right
vendor: kinesis
socs:
- name: nrf52840
variants:
- name: zmk

View File

@@ -5,6 +5,7 @@
config BOARD_CORNEISH_ZEN_LEFT
select SOC_NRF52840_QIAA
select ZMK_BOARD_COMPAT
imply RETAINED_MEM
imply RETENTION
imply RETENTION_BOOT_MODE

View File

@@ -5,6 +5,7 @@
config BOARD_CORNEISH_ZEN_RIGHT
select SOC_NRF52840_QIAA
select ZMK_BOARD_COMPAT
imply RETAINED_MEM
imply RETENTION
imply RETENTION_BOOT_MODE

View File

@@ -3,6 +3,8 @@ boards:
vendor: lowprokb
socs:
- name: nrf52840
variants:
- name: zmk
revision:
format: major.minor.patch
default: 2.0.0
@@ -14,6 +16,8 @@ boards:
vendor: lowprokb
socs:
- name: nrf52840
variants:
- name: zmk
revision:
format: major.minor.patch
default: 2.0.0

View File

@@ -15,5 +15,5 @@ revisions:
- 2.0.0
- 1.0.0
siblings:
- corneish_zen_left
- corneish_zen_right
- corneish_zen_left//zmk
- corneish_zen_right//zmk

View File

@@ -45,7 +45,7 @@ struct output_status_state {
static struct output_status_state get_state(const zmk_event_t *_eh) {
return (struct output_status_state){
.selected_endpoint = zmk_endpoints_selected(),
.selected_endpoint = zmk_endpoint_get_selected(),
.active_profile_connected = zmk_ble_active_profile_is_connected(),
.active_profile_bonded = !zmk_ble_active_profile_is_open(),
};

View File

@@ -3,6 +3,7 @@
config BOARD_NRF52840_M2
select SOC_NRF52840_QIAA
imply RETAINED_MEM
imply RETENTION
imply RETENTION_BOOT_MODE
select ZMK_BOARD_COMPAT if BOARD_NRF52840_M2_NRF52840_ZMK
imply RETAINED_MEM if BOARD_NRF52840_M2_NRF52840_ZMK
imply RETENTION if BOARD_NRF52840_M2_NRF52840_ZMK
imply RETENTION_BOOT_MODE if BOARD_NRF52840_M2_NRF52840_ZMK

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