Compare commits

..

19 Commits

Author SHA1 Message Date
Nicolas Munnich
bc577ffbbd docs: Document the new predefined behaviors
Reorganising the pages of the docs can be done in a followup PR.

Co-authored-by: Cem Aksoylar <caksoylar@users.noreply.github.com>
2026-02-12 19:27:17 +00:00
Nicolas Munnich
a05f5699dd feat: Add more predefined behaviors
Adds predefined kt_on, kt_off, tog_on, tog_off, ktap behaviors.
2026-02-12 19:27:16 +00: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
448 changed files with 2895 additions and 878 deletions

View File

@@ -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
@@ -277,6 +277,7 @@ jobs:
);
} else {
console.error("Board without keys or interconnect");
return [];
}
break;
case "shield":

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

@@ -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,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,9 @@
# 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
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,8 @@
# 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
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,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

@@ -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,6 @@
config BOARD_PUCHI_BLE
select SOC_NRF52840_QIAA
imply RETAINED_MEM
imply RETENTION
imply RETENTION_BOOT_MODE
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

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

@@ -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,6 @@
config BOARD_NRF52840_M2
select SOC_NRF52840_QIAA
imply RETAINED_MEM
imply RETENTION
imply RETENTION_BOOT_MODE
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

View File

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

View File

@@ -1,5 +1,5 @@
file_format: "1"
id: nrf52840_m2
id: nrf52840_m2//zmk
name: nRF52840 M.2 Module
type: board
arch: arm

View File

@@ -0,0 +1,25 @@
/*
* Copyright (c) 2026 The ZMK Contributors
*
* SPDX-License-Identifier: MIT
*/
/dts-v1/;
#include <../boards/makerdiary/nrf52840_m2/nrf52840_m2.dts>
#include <common/nordic/nrf52840_uf2_boot_mode.dtsi>
/ {
model = "Makerdiary nRF52840 M.2 module";
compatible = "makerdiary,nrf52840_m2";
chosen {
zmk,battery = &vbatt;
};
vbatt: vbatt {
compatible = "zmk,battery-voltage-divider";
io-channels = <&adc 0>;
output-ohms = <1000000>;
full-ohms = <(1000000 + 1000000)>;
};
};

View File

@@ -3,6 +3,6 @@
config BOARD_PILLBUG
select SOC_NRF52840_QIAA
imply RETAINED_MEM
imply RETENTION
imply RETENTION_BOOT_MODE
imply RETAINED_MEM if BOARD_PILLBUG_NRF52840_ZMK
imply RETENTION if BOARD_PILLBUG_NRF52840_ZMK
imply RETENTION_BOOT_MODE if BOARD_PILLBUG_NRF52840_ZMK

View File

@@ -1,5 +1,5 @@
board:
name: pillbug
vendor: mechwild
socs:
- name: nrf52840
variants:
- name: zmk
qualifier: nrf52840

View File

@@ -1,5 +1,5 @@
file_format: "1"
id: pillbug
id: pillbug//zmk
name: PillBug
type: board
arch: arm

View File

@@ -0,0 +1,32 @@
/*
* Copyright (c) 2026 The ZMK Contributors
*
* SPDX-License-Identifier: MIT
*/
/dts-v1/;
#include <../boards/mechwild/pillbug/pillbug.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 7 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

@@ -3,3 +3,5 @@ board:
vendor: mechwild
socs:
- name: nrf52840
variants:
- name: zmk

View File

@@ -1,5 +1,5 @@
file_format: "1"
id: s40nc
id: s40nc//zmk
name: S40NC
type: board
arch: arm

View File

@@ -0,0 +1,11 @@
config BOARD_NATIVE_SIM
bool
select POSIX_ARCH_CONSOLE
select NATIVE_LIBRARY
select NATIVE_POSIX_TIMER
select 64BIT if BOARD_NATIVE_SIM_NATIVE_ZMK_TEST_MOCK || BOARD_NATIVE_SIM_NATIVE_ZMK_DISPLAY_TESTING
imply BOARD_NATIVE_POSIX if NATIVE_SIM_NATIVE_POSIX_COMPAT
help
Native simulator (Single Core)
Will produce a console Linux process which can be executed natively.

View File

@@ -0,0 +1,7 @@
board:
extend: native_sim
variants:
- name: zmk_display_testing
qualifier: native
- name: zmk_test_mock
qualifier: native

View File

@@ -0,0 +1,20 @@
#include <dt-bindings/zmk/keys.h>
#include <behaviors.dtsi>
/ {
keymap {
compatible = "zmk,keymap";
default_layer {
bindings = <
&none &mo 1
&kp A &none>;
};
lower_layer {
bindings = <
&none &trans
&none &kp A>;
};
};
};

View File

@@ -0,0 +1,12 @@
# SPDX-License-Identifier: MIT
CONFIG_ZMK_DISPLAY=y
CONFIG_CONSOLE=y
CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=1000000
CONFIG_LOG=y
CONFIG_LOG_BACKEND_SHOW_COLOR=n
CONFIG_ZMK_LOG_LEVEL_DBG=y
CONFIG_DEBUG=y
CONFIG_SYS_CLOCK_TICKS_PER_SEC=1000

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