Compare commits

...

86 Commits

Author SHA1 Message Date
dependabot[bot]
259c40b5d0 chore(deps): bump actions/setup-node from 4 to 6
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 4 to 6.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v4...v6)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-14 05:01:09 +00:00
dependabot[bot]
4ec69cb7e6 chore(deps): bump webpack-dev-server, @docusaurus/core, @docusaurus/preset-classic and @docusaurus/theme-mermaid (#3080)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-30 12:05:36 -07:00
Andrés Mejía
61de01abb0 feat(layouts): Add physical layout for Redox shield 2025-09-16 23:23:46 +02:00
dependabot[bot]
c44343509a chore(deps): bump brace-expansion in /docs (#3067)
Bumps  and [brace-expansion](https://github.com/juliangruber/brace-expansion). These dependencies needed to be updated together.

Updates `brace-expansion` from 1.1.11 to 1.1.12
- [Release notes](https://github.com/juliangruber/brace-expansion/releases)
- [Commits](https://github.com/juliangruber/brace-expansion/compare/1.1.11...v1.1.12)

Updates `brace-expansion` from 2.0.1 to 2.0.2
- [Release notes](https://github.com/juliangruber/brace-expansion/releases)
- [Commits](https://github.com/juliangruber/brace-expansion/compare/1.1.11...v1.1.12)

---
updated-dependencies:
- dependency-name: brace-expansion
  dependency-version: 1.1.12
  dependency-type: indirect
- dependency-name: brace-expansion
  dependency-version: 2.0.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-12 22:23:33 +02:00
dependabot[bot]
540bf2c32b chore(deps): bump mermaid from 11.6.0 to 11.10.1 in /docs (#3042)
Bumps [mermaid](https://github.com/mermaid-js/mermaid) from 11.6.0 to 11.10.1.
- [Release notes](https://github.com/mermaid-js/mermaid/releases)
- [Commits](https://github.com/mermaid-js/mermaid/compare/mermaid@11.6.0...mermaid@11.10.1)

---
updated-dependencies:
- dependency-name: mermaid
  dependency-version: 11.10.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-12 22:17:59 +02:00
Peter Cock
df3db57c4c docs: K_VOLUME_UP and K_VOLUME_DOWN work in macOS (#3057)
Tested via ZMK Studio, both the 'keyboard' and the
'consumer' volume up/down work on macOS Sequoia 15.6.1
2025-09-12 14:08:17 +01:00
Aurélien Vallée
197d104fc9 chore(shields): Add missing display-name for existing keymaps (#3048) 2025-09-10 15:48:33 -07:00
Nicolas Munnich
522971f41d fix(ci): disable nrf5340dk from being built in our CI (#3066)
This build is currently broken, and will be fixed once we bump to 4.1.
2025-09-10 10:30:09 -07:00
Peter Cock
d28f73bcfa docs: documenting PASTE/COPY/CUT keycodes on macOS (#3058)
* Testing PASTE/COPY/CUT on macOS

Testing using ZMK Studio v0.3.1 to send these keys.

Using Karabiner-EventViewer, nothing from C_AC_CUT, C_AC_COPY, C_AC_PASTE, nor from paste special which I assume would be called C_AC_PASTE_SPECIAL (while for example C_AC_SEARCH was detected).

Did see K_CUT, K_COPY, K_PASTE, but they appear to do nothing by default.

* Add macOS footnote for editing keys K_CUT, K_COPY, K_PASTE

* Add macOS testing for K_UNDO, K_REDO etc.

    C_AC_UNDO - not even registering as a keypress

    K_UNDO - detected as a keypress, but no effect. Does not act like command+z

    C_AC_REDO - not even registering as a keypress

    K_AGAIN aka K_REDO - detected as a keypress, but no effect. Does not act like shift+command+z

* None of the six 'Input Assist' consumer keys work on macOS

Testing using ZMK Studio v0.3.1 to send these keys with macOS 15.6.1 (ARM),
and watching for keypresses with Karabiner-EventViewer v15.5.0.
2025-09-09 19:52:41 +02:00
Thomas Oberndörfer
d5ba120d79 docs: Fix hold-trigger-on-release description (#3065) 2025-09-09 19:48:24 +02:00
Adrien LUDWIG
8d06a9b713 docs: fix missing link and example introduction (#3064)
* docs: fix example introduction

* docs: fix missing link
2025-09-08 18:15:41 +02:00
Chris Helming
9a8fdd66ea docs: Add missing semicolon to kscan.md composite example (#3052) 2025-09-02 20:42:30 -07:00
Pete Johanson
0b5a103c18 fix(core): Generate correct keymap layer names for all builds (#3047)
Properly account for studio and non-studio builds for the generation of
the layer names stored within the keymap system.

Fixes #3045
2025-08-26 03:26:20 -06:00
Cem Aksoylar
f09e551929 docs: Add warning box for clearing settings for splits, generalize troubleshooting procedure (#3039)
Co-authored-by: Nicolas Munnich <98408764+nmunnich@users.noreply.github.com>
2025-08-19 17:27:21 -07:00
Nicolas Munnich
ee69b9e3c7 docs: Add a dedicated page on ZMK events (#2815)
* docs: Added a dedicated page on ZMK events

* docs: Apply suggestions from code review

Co-authored-by: Cem Aksoylar <caksoylar@users.noreply.github.com>

* docs: Apply suggestions from code review

Bring the code snipper in new-behavior back, touchups on the page

* docs: clarify "calling" hold tap

Adjustment after feedback from code review

---------

Co-authored-by: Cem Aksoylar <caksoylar@users.noreply.github.com>
2025-08-18 23:45:16 +02:00
Cem Aksoylar
5144de677d docs: Document usage of persistent settings explicitly (#3036) 2025-08-18 12:04:35 -07:00
Kurtis Lew
5225952f96 chore(docs): Typo in CMake Arguments example code blocks (#3038) 2025-08-18 09:15:58 +01:00
Cem Aksoylar
9fcce45cb5 docs: Fix remaining typos for requirements extras (#3035) 2025-08-16 22:29:11 -07:00
Nicolas Munnich
62007e500b docs: Add devicetree primer (#2715)
* docs: Add devicetree primer

* docs: Apply suggestions from code review

Co-authored-by: Cem Aksoylar <caksoylar@users.noreply.github.com>

* docs: Move devicetree property types into primer and link to primer

* docs: Changes from code review

Co-authored-by: Cem Aksoylar <caksoylar@users.noreply.github.com>

---------

Co-authored-by: Cem Aksoylar <caksoylar@users.noreply.github.com>
2025-08-16 10:05:27 +02:00
Nicolas Munnich
ccf20a1f5c feat(boards/shields): Add settings for Rpi Pico and add tester_rpi_pico shield (#2900)
* feat(boards): Properly support settings for RPi Pico board.

* feat(shields): Add a tester_rpi_pico shield

---------

Co-authored-by: Peter Johanson <peter@peterjohanson.com>
2025-08-10 22:00:35 +01:00
Marius Petcu
c7fae18ae1 feat(boards): add support for nrf52840dongle_nrf52840 (#3011)
This adds additional required configs for the Nordic NRF52840 Dongle (PCA10059),
which was already supported by Zephyr, but didn't have flash settings
and Bluetooth enabled.
2025-08-08 23:47:03 +01:00
Nicolas Munnich
61da930ed5 chore(ci): Set days before issue stale to 1000 (#3022) 2025-08-08 13:13:57 -04:00
Maxim
3609ac6fc8 docs: fix typo for pip requirements (#3029) 2025-08-07 23:33:38 +02:00
Peter Cock
45700887ba Suggest using cu for USB log viewing on macOS (#3027)
* Suggest using cu for USB log viewing on macOS

It may not be as friendly, but cu should be available while tio could be hard to install.

* Polish wording

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

* Suggest "man cu" for how to use this tool

---------

Co-authored-by: Nicolas Munnich <98408764+nmunnich@users.noreply.github.com>
2025-08-07 23:26:17 +02:00
Artem
a8a392807e chore(docs): correct a misleading _defconfig description (#3015)
* docs: correct a misleading _defconfig description

* chore(docs): improve _defconfig description

Co-authored-by: Joel Spadin <joelspadin@gmail.com>

---------

Co-authored-by: Joel Spadin <joelspadin@gmail.com>
2025-08-05 00:20:39 +01:00
Nicolas Munnich
f3233c1b60 fix(ci): Fix release please template bump (#3021) 2025-08-04 18:54:03 -04:00
Nicolas Munnich
919bce7962 fix(docs): Tweak layer tap example to be clearer (#3023) 2025-08-04 23:44:16 +01:00
dependabot[bot]
cc19ff7c5b chore(deps): bump http-proxy-middleware from 2.0.7 to 2.0.9 in /docs (#2929)
Bumps [http-proxy-middleware](https://github.com/chimurai/http-proxy-middleware) from 2.0.7 to 2.0.9.
- [Release notes](https://github.com/chimurai/http-proxy-middleware/releases)
- [Changelog](https://github.com/chimurai/http-proxy-middleware/blob/v2.0.9/CHANGELOG.md)
- [Commits](https://github.com/chimurai/http-proxy-middleware/compare/v2.0.7...v2.0.9)

---
updated-dependencies:
- dependency-name: http-proxy-middleware
  dependency-version: 2.0.9
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-04 22:54:01 +01:00
dependabot[bot]
90363719a2 chore(deps): bump on-headers and compression in /docs (#2999)
---
updated-dependencies:
- dependency-name: on-headers
  dependency-version: 1.1.0
  dependency-type: indirect
- dependency-name: compression
  dependency-version: 1.8.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-04 22:32:36 +01:00
dependabot[bot]
e57bf5af37 chore(deps): bump the docusaurus-minor-patch group across 1 directory with 3 updates (#2973)
Bumps the docusaurus-minor-patch group with 3 updates in the /docs directory: [@docusaurus/core](https://github.com/facebook/docusaurus/tree/HEAD/packages/docusaurus), [@docusaurus/preset-classic](https://github.com/facebook/docusaurus/tree/HEAD/packages/docusaurus-preset-classic) and [@docusaurus/theme-mermaid](https://github.com/facebook/docusaurus/tree/HEAD/packages/docusaurus-theme-mermaid).


Updates `@docusaurus/core` from 3.8.0 to 3.8.1
- [Release notes](https://github.com/facebook/docusaurus/releases)
- [Changelog](https://github.com/facebook/docusaurus/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/docusaurus/commits/v3.8.1/packages/docusaurus)

Updates `@docusaurus/preset-classic` from 3.8.0 to 3.8.1
- [Release notes](https://github.com/facebook/docusaurus/releases)
- [Changelog](https://github.com/facebook/docusaurus/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/docusaurus/commits/v3.8.1/packages/docusaurus-preset-classic)

Updates `@docusaurus/theme-mermaid` from 3.8.0 to 3.8.1
- [Release notes](https://github.com/facebook/docusaurus/releases)
- [Changelog](https://github.com/facebook/docusaurus/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/docusaurus/commits/v3.8.1/packages/docusaurus-theme-mermaid)

---
updated-dependencies:
- dependency-name: "@docusaurus/core"
  dependency-version: 3.8.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: docusaurus-minor-patch
- dependency-name: "@docusaurus/preset-classic"
  dependency-version: 3.8.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: docusaurus-minor-patch
- dependency-name: "@docusaurus/theme-mermaid"
  dependency-version: 3.8.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: docusaurus-minor-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-04 22:29:08 +01:00
Léon Hagenaars-Keus
9aaf87c6d2 docs: Updated putty link (#3020)
Solves issue #3019 (incorrect putty link)

- putty.org is not affiliated with the putty software
- the site now hosts links to interviews about a recent pandemic
- this pull request updates the link to the actual project page

Co-authored-by: Léon Hagenaars-Keus <lhagenaars@sogyo.nl>
2025-08-04 13:16:38 +01:00
Pete Johanson
edf5c0814f chore(main): release 0.3.0 (#2858) 2025-08-01 18:44:20 -04:00
Nicolas Munnich
6c266b7123 chore(ci): Automatically bump version in user config template when releasing a new version (#3016) 2025-08-01 18:27:45 -04:00
Robert U
c25e927a2f chore(ci): Optimize build workflow (#2757)
* Use treeless clones in workflows
* Replace yaml2json with yq

Github's ubuntu runners come with `yq` installed, which can replace
piping `yaml2json` to `jq`. It also saves installing `yaml2json`.

It's worth noting that the `yq` version installed is the `go` version
(which has a slightly different syntax than the competing `python`
version).
2025-07-31 18:36:04 -04:00
Nicolas Munnich
c86f0d6ff4 chore: Add some basic encoder tests (#2845)
Adds some encoder tests for rotating, and basic layers.
Mock Kscans don't seem to interact nicely, slightly on the hacky side.
However, better to have hacky tests than no tests.
2025-07-31 18:29:59 -04:00
Genteure
af967667b0 fix(core): Correctly sync BAS battery level (#2977)
Fix BAS battery level showing 100% if controller boots up with 0% battery charge.

Closes zmkfirmware/zmk#2972
2025-07-31 17:51:21 -04:00
Pete Johanson
2ae5185419 fix(split): Compile and run properly in wired polling mode. (#3012)
Fixes for regressions from split refactors that broke polling mode
specifically.

Co-authored-by: honorless <86894501+lesshonor@users.noreply.github.com>
Co-authored-by: Cem Aksoylar <caksoylar@users.noreply.github.com>
2025-07-31 17:09:25 -04:00
Pete Johanson
1530ae36c2 fix(split): Enable wired split by default if DTS is set (#3010)
Remove the previous condition on ZMK_SPLIT_WIRED that only enabled it if
!ZMK_BLE. We'll defer to the `depends on` to ensure the DTS exists to
use wired split to make that decision on enabling the feature.
2025-07-30 13:43:46 -04:00
Cem Aksoylar
1bac680c4f fix(behaviors): Correct macro release state for parametrized macros (#2942)
test(behaviors): Add parametrized macro test that fails

fix(behaviors): Correct macro release state for parametrized
2025-07-29 18:39:26 -04:00
snoyer
d09087f4dc feat(display): nice!view individual profile status (#2265)
Allow the nice!view widget to display the status of each profile by:

- not adding a circle around the number if the profile is not bound
- drawing a dashed circle around the number if a profile is bound but not connected
2025-07-26 18:46:51 +02:00
Nicolas Munnich
6d7bbc8670 feat(ci): Add stale GitHub Action to automatically close stale PRs (#2924)
Co-authored-by: Cem Aksoylar <caksoylar@users.noreply.github.com>
2025-07-21 19:11:56 +02:00
Joel Spadin
8059e671b2 fix(boards): Disable high voltage DC-DC by default (#2995)
Given a typical setup of a battery at ~4 V and a nice!nano v2 running at
3.3 V, I measured a small increase in power usage (using a Nordic PPK2)
when SOC_DCDC_NRF52X_HV was enabled. This changes the nice_nano_v2 and
mikoto boards so this option is disabled by default.

Fixes #2990
2025-07-21 17:14:29 +02:00
Cem Aksoylar
61325ee82c docs: Document requirements-extra.txt and endpoint selection for Studio (#3001)
* docs: Document requirements-extra.txt for Studio builds

* docs: Note endpoint selection requirement for Studio

* docs: Fix indents in list items in native setup page

Add this file to .prettierignore because it messes all the additional indents.
There is also no way to make prettier ignore a range of lines in MDX files AFAICT.

* Revert "docs: Fix indents in list items in native setup page"

This reverts commit 6d8aeba801.
2025-07-21 17:11:06 +02:00
Tobias Adolph
342d838913 fix(ble,hid): Fix smooth scrolling over BLE (#2998)
- Use correct MIN16 value in hid report. -32768 in 2's compliment is 8000(hex)
- Initialize resolution multiplier array
- Properly implement `read_hids_mouse_feature_report`

Fixes: #2957

Co-authored-by: Tobias Adolph <43353209+adolto@users.noreply.github.comgit>
2025-07-20 09:13:18 -06:00
Dimitri Krassovski
7292df02d4 feat(shields): Add a physical layout for a_dux (#3000) 2025-07-19 21:44:05 -07:00
snoyer
fe91cc6625 refactor(ble): add functions to check if profile is open/connected by address (#2993)
Helper functions for BLE profile statuses.
2025-07-19 07:51:53 -06:00
Joel Spadin
cef7af4408 fix: Fix build with Studio and USB but not UART (#2996)
Changed CONFIG_ZMK_STUDIO_TRANSPORT_UART to automatically enable itself
whenever a zmk,studio-rpc-uart chosen node is specified. The previous
behavior of enabling if CONFIG_ZMK_USB was enabled broke builds when
CONFIG_ZMK_STUDIO was enabled but the chosen node wasn't specified.
2025-07-11 22:07:38 -06:00
snoyer
9e905d6593 feat(ble): Add function to get profile address by index (#2992) 2025-07-09 20:25:11 -06:00
Nicolas Munnich
e93cd31a58 blog: Add blog post on pinning ZMK version (#2974)
* blog: Add blog post on pinning ZMK version

* docs: apply suggestions from code review

Co-authored-by: Cem Aksoylar <caksoylar@users.noreply.github.com>

* docs: bump date for correctly pinned template

---------

Co-authored-by: Cem Aksoylar <caksoylar@users.noreply.github.com>
2025-07-03 17:27:11 +02:00
Pete Johanson
6b44d33db2 feat(split): Runtime selection of split transport (#2886)
feat(split): Runtime selection of split transport

Allow building multiple split transports, and select an active
one based on the transport availability. Wired split availability
depends on additional `detect-gpios` which must be a GPIO pin
that goes active when a wired connection is present.

feat(split): Suspend/resume wired UART devices.

To better support runtime split support, suspend/resume the UART
as necessary to save power when not using the UART.

docs(split): Document adjusting nRF52 UART interrupt priorities

For wired split on nRF52, you may need to adjust the priority for UART
interrupts lower, to ensure the interrupts used for timing sensitive
BT operations can run when needed, so document this in our pinctrl docs.

refactor(split): Restore use of aync UART on nRF52.

With fixes for Zephyr UART driver, re-enable using async API on nRF52.

fix(split): Minor wired split fixes.

Various minor fixes for wired split to avoid spurious TX in half duplex,
etc.

fix: Unconditionally define HID payloads to avoid error.

Don't conditionally define HID indicator payload, to avoid compilation
errors.

docs(split): Expand on details of split transports.

Expand the split keyboard documentation with a more fleshed out section
on the available split trasnports, and what is and isn't supported by
each, including the runtime selection functionality.

---------

Co-authored-by: Nicolas Munnich <98408764+nmunnich@users.noreply.github.com>
2025-06-16 03:45:25 -04:00
badjeff
462d48b78e feat(pointing): Allow peripheral input processing to stop propagation (#2844)
Allow peripheral input processors to prevent event propagation to centrals.

---------

Co-authored-by: Pete Johanson <peter@peterjohanson.com>
2025-06-16 02:23:25 -04:00
ouj4k2q5
eb99b4ede0 fix(docs): Fix soft off waker configuration example (#2960) 2025-06-08 17:24:21 +02:00
George Norton
239baa4875 feat(metadata): Add metadata to the mouse_key_press behavior (#2950)
Adds metadata to the mouse key press behavior so that mouse buttons can be
configured through studio
2025-06-02 14:32:18 -04:00
Cem Aksoylar
9da5d3ba82 fix(display): Make stock battery widget depend on the right symbol (#2953) 2025-06-02 07:25:08 -06:00
dependabot[bot]
f568b25e56 chore(deps): bump the docusaurus-minor-patch group (#2948) 2025-06-01 23:21:14 -07:00
Pete Johanson
cb00077273 chore(docs): Fix prettier warnings (#2952)
* chore(docs): Fix prettier warnings
2025-06-01 12:02:39 -07:00
cormoran
461f5c832f fix(pointing): Avoids mutex leak for default layer toggle event (#2934)
Remove unnecessary special check for toggle of layer 0,
to avoid mutex leak.
2025-05-09 20:01:17 -04:00
Steven Sheldon
879cff7595 docs: Document the default flavor of layer-tap (#2937) 2025-05-08 11:43:48 -07:00
FearlessSpiff
ad6a181d7e feat(shield): Add underglow for reviung5 (#2191) 2025-05-05 20:46:21 +02:00
Omar L.
f1b944b1ef docs: Add secondary functions for the keypad number keys (#2933)
* docs: Add secondary functions for the keypad number keys

* docs: Change descriptions of secondary functions for the keypad number keys

The descriptions were updated to match those of the USB HID usage tables.
2025-04-30 17:32:22 +01:00
Aasim-A
4235c8b491 chore: Add typescript support to eslint, fix errors (#2923) 2025-04-22 20:51:41 -07:00
Pete Johanson
e3030bfcc8 fix(combos): Properly clean up all old candidates. (#2928) 2025-04-22 01:17:12 -04:00
Pete Johanson
00ff486931 fix(combos): Restore prompts for two deprecated Kconfigs (#2926)
Restore prompts for deprecated combo Kconfig symbols, to avoid errors
for existing builds that set them explicitly.
2025-04-21 02:47:39 -04:00
Pete Johanson
c4ee8ab86b refactor(combos): Reduce RAM usage, simplify config (#2849)
* Reference combos by index, not 32-bit pointers, and store bitfields
instead of arrays in several places, to bring down our flash/RAM usage.
* Use bit field to track candidate combos, to avoid needing an explicit
`ZMK_COMBO_MAX_COMBOS_PER_KEY` setting.
* Determine the max keys per combo automatically from the devicetree,
so we remove the ZMK_COMBO_MAX_KEYS_PER_COMBO Kconfig symbol.
2025-04-20 05:01:22 -04:00
romil-soni
d9576c5534 fix(docs): remove title as alt text (#2922) 2025-04-20 10:41:13 +02:00
Xudong Zheng
c6738ce2e5 refactor(split): use LOG_HEXDUMP_DBG() to print position state data (#2854)
The previous code prints one line per byte, making debugging difficult.
2025-04-20 04:36:52 -04:00
Joel Spadin
2a7ab8ed0a Improve VS Code Python settings (#2860)
chore: Fix deprecated vscode Python formatter

The python.formatting.provider setting was deprecated in favor of
having a separate extension for each Python formatter and using
editor.defaultFormatter instead. This adds a recommendation for the
Black formatter extension and selects it for Python files.

chore: Limit vscode Python analysis paths

This limits vscode's Python analysis to the scripts folders so it
doesn't slow down trying to scan all of Zephyr.
2025-04-20 04:34:15 -04:00
Tobias Adolph
2c0e7daced fix(hid): Fix scroll value truncation (#2865)
Fix 8 bit truncation of 16 bit scroll values when passed into
functions `zmk_hid_mouse_scroll_set` and
`zmk_hid_mouse_scroll_update`.

Fixes: #2864

Co-authored-by: Tobias Adolph <43353209+adolto@users.noreply.github.comgit>
2025-04-20 04:28:51 -04:00
Tygo van den Hurk
84772ebf14 fix: changed shebang to make scripts more platform independent (#2893)
See for example this thread:

https://stackoverflow.com/questions/21612980/why-is-usr-bin-env-bash-superior-to-bin-bash

on why its better to use '#!/usr/bin/env bash' instead.
Without this change these scripts will not run on some
platforms. This is not a breaking change for the
platforms it already works on.
2025-04-20 04:23:31 -04:00
Genteure
7823a43f62 docs: fix path typo in module-creation.md (#2920) 2025-04-16 09:53:56 -07:00
dependabot[bot]
90bca78300 chore(deps): bump estree-util-value-to-estree in /docs (#2914) 2025-04-07 21:54:32 -07:00
Will Hack
a34839f001 chore(eslint): upgrade to eslint v9 and flat config (#2909) 2025-04-06 18:16:03 -07:00
Maximilian Engl
6f85f48b19 fix(split): add source to battery event (#2901) 2025-04-04 10:43:51 -07:00
dependabot[bot]
9aadc3e5ab chore(deps): bump image-size from 1.2.0 to 1.2.1 in /docs (#2903) 2025-04-03 22:54:30 -07:00
Nicolas Munnich
1c76bcb0a1 blog: Add meeting notes from February (#2890)
Co-authored-by: Cem Aksoylar <caksoylar@users.noreply.github.com>
2025-03-25 19:20:50 +01:00
Cem Aksoylar
d733fbafa5 docs: Document missing user-defined input processors (#2895) 2025-03-25 14:35:38 +01:00
Nicolas Munnich
49f86f7ed0 docs: Update hold-tap page (#2888)
Co-authored-by: Cem Aksoylar <caksoylar@users.noreply.github.com>
2025-03-23 18:12:50 -07:00
Pete Johanson
5bb39ec3ea fix(split): Conditionally build all split code (#2884)
Don't add the split CMake subdirectory unless the feature is enabled.
2025-03-18 18:49:59 -04:00
Pete Johanson
147c340c6e Feature: Full-Duplex Wired Split (#2766)
refactor(split): Refactor split code for extension

Extract central/peripheral code to allow for plugging in alternate
transports, instead of tying all split logic to BT.

feat(split): Add full-duplex wired split support

* Depends on full-duplex hardware UART for communication.
* Supports all existing central commands/peripheral events, including
  sensors/inputs from peripherals.
* Only one wired split peripheral supported (for now)
* Relies on chosen `zmk,split-uart` referencing the UART device.

docs: Add wired split config docs.

Migrate split to its own dedicated config file, and add details
on wired split config.

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

fix: Properly override stack size on RP2040

Move the system work queue stack size override on RP2040 ouf of
a `ZMK_BLE` conditional so it is properly applied generally for that
SoC.

---------

Co-authored-by: Nicolas Munnich <98408764+Nick-Munnich@users.noreply.github.com>
2025-03-18 02:48:32 -04:00
Genteure
5ba7e260f4 docs: update name of XIAO boards (#2869) 2025-03-17 15:15:57 -07:00
Cem Aksoylar
bffbccc748 chore(deps): npm update on docs (#2878) 2025-03-16 20:47:42 -07:00
Cem Aksoylar
b366df8b17 docs: Fix powershell tab in user setup (#2879) 2025-03-16 20:14:48 -07:00
JJGadgets
4da89bd997 fix(ci): pin tj-actions/changed-files due to compromise (#2874)
Ideally it's be swapped out for an alternative but for now this is to mitigate.
2025-03-15 02:25:01 -04:00
idesignstuff
5d9920406c Update container.mdx for clarity about ZMK repo folder location (#2868) 2025-03-10 21:52:30 -07:00
Cem Aksoylar
f5a838b4bd docs: Fix wakeup-source property location for composite kscan (#2861) 2025-03-09 14:59:57 -07:00
Allister MacLeod
eb170c930f feat(shields): Add physical layouts for tester_xiao and tester_pro_micro (#2852)
feat(shields): Add tester_xiao layouts

Added two layouts for the XIAO tester shield:

 - Keys arranged to match the XIAO pinout, viewed from the front
 - Single row of eleven keys

These layouts are abstractions since the tester_xiao shield may be
used in a situation where the "keys" are actually jumper wires on a
breadboard or the like.

feat(shields): Add tester_pro_micro layouts

Added two layouts for the Pro Micro tester shield:

 - Keys arranged to match the Pro Micro pinout, viewed from the front
 - Single row of eighteen keys
2025-03-07 19:22:25 -07:00
246 changed files with 13332 additions and 8112 deletions

View File

@@ -61,7 +61,7 @@ jobs:
- name: Enable babblesim group filter - name: Enable babblesim group filter
run: west config manifest.group-filter -- +babblesim run: west config manifest.group-filter -- +babblesim
- name: Update modules (west update) - name: Update modules (west update)
run: west update run: west update --fetch-opt=--filter=tree:0
- name: Export Zephyr CMake package (west zephyr-export) - name: Export Zephyr CMake package (west zephyr-export)
run: west zephyr-export run: west zephyr-export
- name: Build BabbleSim components - name: Build BabbleSim components

View File

@@ -34,13 +34,10 @@ jobs:
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: Install yaml2json
run: python3 -m pip install remarshal
- name: Fetch Build Matrix - name: Fetch Build Matrix
run: | run: |
echo "build_matrix=$(yaml2json '${{ inputs.build_matrix_path }}' | jq -c .)" >> $GITHUB_ENV echo "build_matrix=$(yq -oj -I0 '${{ inputs.build_matrix_path }}')" >> $GITHUB_ENV
yaml2json "${{ inputs.build_matrix_path }}" | jq yq -oj "${{ inputs.build_matrix_path }}"
build: build:
runs-on: ubuntu-latest runs-on: ubuntu-latest
@@ -117,7 +114,7 @@ jobs:
- name: West Update - name: West Update
working-directory: ${{ env.base_dir }} working-directory: ${{ env.base_dir }}
run: west update run: west update --fetch-opt=--filter=tree:0
- name: West Zephyr export - name: West Zephyr export
working-directory: ${{ env.base_dir }} working-directory: ${{ env.base_dir }}

View File

@@ -53,11 +53,11 @@ jobs:
- name: Initialize workspace (west init) - name: Initialize workspace (west init)
run: west init -l app run: west init -l app
- name: Update modules (west update) - name: Update modules (west update)
run: west update run: west update --fetch-opt=--filter=tree:0
- name: Export Zephyr CMake package (west zephyr-export) - name: Export Zephyr CMake package (west zephyr-export)
run: west zephyr-export run: west zephyr-export
- name: Use Node.js - name: Use Node.js
uses: actions/setup-node@v4 uses: actions/setup-node@v6
with: with:
node-version: "14.x" node-version: "14.x"
- name: Install @actions/artifact - name: Install @actions/artifact
@@ -191,7 +191,7 @@ jobs:
with: with:
persist-credentials: false persist-credentials: false
- name: Use Node.js - name: Use Node.js
uses: actions/setup-node@v4 uses: actions/setup-node@v6
with: with:
node-version: "14.x" node-version: "14.x"
- name: Install js-yaml - name: Install js-yaml
@@ -220,7 +220,7 @@ jobs:
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: Use Node.js - name: Use Node.js
uses: actions/setup-node@v4 uses: actions/setup-node@v6
with: with:
node-version: "14.x" node-version: "14.x"
- name: Install js-yaml - name: Install js-yaml
@@ -349,7 +349,7 @@ jobs:
with: with:
persist-credentials: false persist-credentials: false
- name: Use Node.js - name: Use Node.js
uses: actions/setup-node@v4 uses: actions/setup-node@v6
with: with:
node-version: "14.x" node-version: "14.x"
- name: Install js-yaml - name: Install js-yaml
@@ -430,7 +430,7 @@ jobs:
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
persist-credentials: false persist-credentials: false
- uses: tj-actions/changed-files@v45 - 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
id: changed-files id: changed-files
with: with:
json: true json: true

View File

@@ -11,28 +11,70 @@ permissions:
name: release-please name: release-please
jobs: jobs:
release-please: handle-commit:
name: Handle new commit
runs-on: ubuntu-latest runs-on: ubuntu-latest
outputs:
release_created: ${{ steps.release.outputs.release_created }}
major: ${{ steps.release.outputs.major }}
minor: ${{ steps.release.outputs.minor }}
patch: ${{ steps.release.outputs.patch }}
steps: steps:
- uses: googleapis/release-please-action@v4 - uses: googleapis/release-please-action@v4
id: release id: release
with: with:
token: ${{ secrets.ZMK_RELEASE_PLEASE_TOKEN }} token: ${{ secrets.ZMK_RELEASE_PLEASE_TOKEN }}
target-branch: ${{ github.ref_name }} target-branch: ${{ github.ref_name }}
release-new-version:
name: Release new version
needs: handle-commit
runs-on: ubuntu-latest
if: ${{ needs.handle-commit.outputs.release_created }}
env:
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@v4
if: ${{ steps.release.outputs.release_created }}
- name: create major, minor branch - name: Create major.minor branch
if: ${{ steps.release.outputs.release_created && steps.release.outputs.patch == '0' }} if: ${{ needs.handle-commit.outputs.patch == '0' }}
run: | run: |
git remote add gh-token-branch "https://x-access-token:${{ secrets.ZMK_RELEASE_PLEASE_TOKEN }}@github.com/${{ github.repository }}.git" git remote add gh-token-branch "https://x-access-token:$ZMK_RELEASE_PLEASE_TOKEN@github.com/${{ github.repository }}.git"
git checkout -b v${{ steps.release.outputs.major }}.${{ steps.release.outputs.minor }}-branch git checkout -b $VERSION-branch
git push gh-token-branch v${{ steps.release.outputs.major }}.${{ steps.release.outputs.minor }}-branch git push gh-token-branch $VERSION-branch
- name: tag major and minor versions - name: tag major and minor versions
if: ${{ steps.release.outputs.release_created }}
run: | run: |
git config user.name github-actions[bot] git config user.name github-actions[bot]
git config user.email 41898282+github-actions[bot]@users.noreply.github.com git config user.email 41898282+github-actions[bot]@users.noreply.github.com
git remote add gh-token "https://x-access-token:${{ secrets.ZMK_RELEASE_PLEASE_TOKEN }}@github.com/${{ github.repository }}.git" git remote add gh-token "https://x-access-token:$ZMK_RELEASE_PLEASE_TOKEN@github.com/${{ github.repository }}.git"
git tag -d v${{ steps.release.outputs.major }}.${{ steps.release.outputs.minor }} || true git tag -d $VERSION || true
git tag -a v${{ steps.release.outputs.major }}.${{ steps.release.outputs.minor }} -m "Release v${{ steps.release.outputs.major }}.${{ steps.release.outputs.minor }}" git tag -a $VERSION -m "Release $VERSION"
git push --force gh-token v${{ steps.release.outputs.major }}.${{ steps.release.outputs.minor }} git push --force gh-token $VERSION
bump-user-config-template-version:
name: Bump user config template version
needs: handle-commit
runs-on: ubuntu-latest
if: ${{ needs.handle-commit.outputs.release_created }}
env:
ZMK_RELEASE_PLEASE_TOKEN: ${{ secrets.ZMK_RELEASE_PLEASE_TOKEN }}
VERSION: v${{ needs.handle-commit.outputs.major }}.${{ needs.handle-commit.outputs.minor }}
steps:
- name: Bump user config template
run: |
if [ -z "$VERSION" ]; then
echo "VERSION is not set, exiting."
exit 1
fi
git clone "https://x-access-token:$ZMK_RELEASE_PLEASE_TOKEN@github.com/zmkfirmware/unified-zmk-config-template.git"
cd unified-zmk-config-template
git config user.name github-actions[bot]
git config user.email 41898282+github-actions[bot]@users.noreply.github.com
sed -i 's/^\(\s*\)revision: .*/\1revision: '"$VERSION"'/' config/west.yml
sed -i 's|uses: zmkfirmware/zmk/.github/workflows/build-user-config.yml@.*|uses: zmkfirmware/zmk/.github/workflows/build-user-config.yml@'"$VERSION"'|' .github/workflows/build.yml
git add .
git commit -m "Version bump to $VERSION"
git push origin main

28
.github/workflows/stale.yml vendored Normal file
View File

@@ -0,0 +1,28 @@
name: "Mark and close stale PRs in the repo"
on:
schedule:
- cron: "00 14 * * *" # runs daily at 14:00 https://crontab.guru/#00_14_*_*_*
jobs:
stale:
runs-on: ubuntu-24.04
steps:
- uses: actions/stale@v9.1.0
with:
days-before-pr-stale: 300 # ~10 months
stale-pr-label: "stale"
stale-pr-message: >
This PR has been automatically marked as stale because it has not
had activity in 10 months. It will be closed in 14 days if no
further activity occurs. Feel free to give a status update or
re-open when it has been rebased and is ready for review (again).
Thanks!
days-before-pr-close: 14
close-pr-message: >
This PR was closed because it had no activity for over 10 months.
Feel free to give a status update or re-open when it has been
rebased and is ready for review (again).
days-before-issue-stale: 1000 # ~3 years
days-before-issue-close: -1
ascending: true # Process older PRs first
operations-per-run: 30 # Default value, listed here again to make it explicit

View File

@@ -61,7 +61,7 @@ jobs:
- name: Initialize workspace (west init) - name: Initialize workspace (west init)
run: west init -l app run: west init -l app
- name: Update modules (west update) - name: Update modules (west update)
run: west update run: west update --fetch-opt=--filter=tree:0
- name: Export Zephyr CMake package (west zephyr-export) - name: Export Zephyr CMake package (west zephyr-export)
run: west zephyr-export run: west zephyr-export
- name: Test ${{ matrix.test }} - name: Test ${{ matrix.test }}

View File

@@ -12,8 +12,8 @@ repos:
types_or: [c++, c] types_or: [c++, c]
args: args:
- -i - -i
- repo: https://github.com/pre-commit/mirrors-prettier - repo: https://github.com/rbubley/mirrors-prettier
rev: v2.7.1 rev: 787fb9f542b140ba0b2aced38e6a3e68021647a3
hooks: hooks:
- id: prettier - id: prettier
exclude: | exclude: |
@@ -22,9 +22,6 @@ repos:
CHANGELOG.md| CHANGELOG.md|
.release-please-manifest.json .release-please-manifest.json
)$ )$
# Workaround for https://github.com/pre-commit/mirrors-prettier/issues/29
additional_dependencies:
- prettier@2.8.7
- repo: https://github.com/jorisroovers/gitlint - repo: https://github.com/jorisroovers/gitlint
rev: v0.19.1 rev: v0.19.1
hooks: hooks:

View File

@@ -1 +1 @@
{".":"0.2.1"} {".":"0.3.0"}

View File

@@ -1,6 +1,7 @@
{ {
"recommendations": [ "recommendations": [
"esbenp.prettier-vscode", "esbenp.prettier-vscode",
"ms-python.black-formatter",
"ms-python.python", "ms-python.python",
"ms-vscode.cpptools", "ms-vscode.cpptools",
"plorefice.devicetree", "plorefice.devicetree",

View File

@@ -3,7 +3,7 @@
"*.overlay": "dts", "*.overlay": "dts",
"*.keymap": "dts" "*.keymap": "dts"
}, },
"python.formatting.provider": "black", "python.analysis.include": ["app/scripts", "zephyr/scripts"],
"[c]": { "[c]": {
"editor.formatOnSave": true "editor.formatOnSave": true
}, },
@@ -13,7 +13,7 @@
}, },
"[python]": { "[python]": {
"editor.formatOnSave": true, "editor.formatOnSave": true,
"editor.defaultFormatter": "ms-python.python" "editor.defaultFormatter": "ms-python.black-formatter"
}, },
"[css][json][jsonc][html][markdown][yaml]": { "[css][json][jsonc][html][markdown][yaml]": {
"editor.formatOnSave": true, "editor.formatOnSave": true,

View File

@@ -1,5 +1,52 @@
# Changelog # Changelog
## [0.3.0](https://github.com/zmkfirmware/zmk/compare/v0.2.1...v0.3.0) (2025-08-01)
### Features
* **ble:** Add function to get profile address by index ([#2992](https://github.com/zmkfirmware/zmk/issues/2992)) ([9e905d6](https://github.com/zmkfirmware/zmk/commit/9e905d65936348824588dc3f424755353ac61186))
* **ci:** Add stale GitHub Action to automatically close stale PRs ([#2924](https://github.com/zmkfirmware/zmk/issues/2924)) ([6d7bbc8](https://github.com/zmkfirmware/zmk/commit/6d7bbc8670d175fd63e8c834feb41f80e7b52e74))
* **display:** nice!view individual profile status ([#2265](https://github.com/zmkfirmware/zmk/issues/2265)) ([d09087f](https://github.com/zmkfirmware/zmk/commit/d09087f4dc280b8fdb1d32d63b03cc10162b89ce))
* Full-Duplex Wired Split ([#2766](https://github.com/zmkfirmware/zmk/issues/2766)) ([147c340](https://github.com/zmkfirmware/zmk/commit/147c340c6e8d377304acfdd64dc86cf83ebdfef2))
* **metadata:** Add metadata to the mouse_key_press behavior ([#2950](https://github.com/zmkfirmware/zmk/issues/2950)) ([239baa4](https://github.com/zmkfirmware/zmk/commit/239baa487509ace108d36f0e5c627d61a3d95f53))
* **pointing:** Allow peripheral input processing to stop propagation ([#2844](https://github.com/zmkfirmware/zmk/issues/2844)) ([462d48b](https://github.com/zmkfirmware/zmk/commit/462d48b78edac8bedb75666699ea4fa446d2152c))
* **shield:** Add underglow for reviung5 ([#2191](https://github.com/zmkfirmware/zmk/issues/2191)) ([ad6a181](https://github.com/zmkfirmware/zmk/commit/ad6a181d7ec34fb6e31134f6bb991a9b2d0b8f78))
* **shields:** Add a physical layout for a_dux ([#3000](https://github.com/zmkfirmware/zmk/issues/3000)) ([7292df0](https://github.com/zmkfirmware/zmk/commit/7292df02d4b05d783f432f8658de22d940909fe4))
* **shields:** Add physical layouts for tester_xiao and tester_pro_micro ([#2852](https://github.com/zmkfirmware/zmk/issues/2852)) ([eb170c9](https://github.com/zmkfirmware/zmk/commit/eb170c930f56e3fb3df0b813d987abfd1dc31b9a))
* **shields:** Add tester_pro_micro layouts ([eb170c9](https://github.com/zmkfirmware/zmk/commit/eb170c930f56e3fb3df0b813d987abfd1dc31b9a))
* **shields:** Add tester_xiao layouts ([eb170c9](https://github.com/zmkfirmware/zmk/commit/eb170c930f56e3fb3df0b813d987abfd1dc31b9a))
* **split:** Add full-duplex wired split support ([147c340](https://github.com/zmkfirmware/zmk/commit/147c340c6e8d377304acfdd64dc86cf83ebdfef2))
* **split:** Runtime selection of split transport ([6b44d33](https://github.com/zmkfirmware/zmk/commit/6b44d33db2f4bad7d98e475e6f7968493b05af73))
* **split:** Runtime selection of split transport ([#2886](https://github.com/zmkfirmware/zmk/issues/2886)) ([6b44d33](https://github.com/zmkfirmware/zmk/commit/6b44d33db2f4bad7d98e475e6f7968493b05af73))
* **split:** Suspend/resume wired UART devices. ([6b44d33](https://github.com/zmkfirmware/zmk/commit/6b44d33db2f4bad7d98e475e6f7968493b05af73))
### Bug Fixes
* **behaviors:** Correct macro release state for parametrized ([1bac680](https://github.com/zmkfirmware/zmk/commit/1bac680c4fb4f07e43c01754b6f1e72dab455e50))
* **behaviors:** Correct macro release state for parametrized macros ([#2942](https://github.com/zmkfirmware/zmk/issues/2942)) ([1bac680](https://github.com/zmkfirmware/zmk/commit/1bac680c4fb4f07e43c01754b6f1e72dab455e50))
* **ble,hid:** Fix smooth scrolling over BLE ([#2998](https://github.com/zmkfirmware/zmk/issues/2998)) ([342d838](https://github.com/zmkfirmware/zmk/commit/342d83891301b1be53233a12c7723bb99cbe5ff6)), closes [#2957](https://github.com/zmkfirmware/zmk/issues/2957)
* **boards:** Disable high voltage DC-DC by default ([#2995](https://github.com/zmkfirmware/zmk/issues/2995)) ([8059e67](https://github.com/zmkfirmware/zmk/commit/8059e671b24a261939401afb5a65c4fa756adc2d)), closes [#2990](https://github.com/zmkfirmware/zmk/issues/2990)
* changed shebang to make scripts more platform independent ([#2893](https://github.com/zmkfirmware/zmk/issues/2893)) ([84772eb](https://github.com/zmkfirmware/zmk/commit/84772ebf14e5a7c67ba573a61f0a50048802c799))
* **ci:** pin tj-actions/changed-files due to compromise ([#2874](https://github.com/zmkfirmware/zmk/issues/2874)) ([4da89bd](https://github.com/zmkfirmware/zmk/commit/4da89bd99716bf6c1d7d788f3cdaec4cee7403e9))
* **combos:** Properly clean up all old candidates. ([#2928](https://github.com/zmkfirmware/zmk/issues/2928)) ([e3030bf](https://github.com/zmkfirmware/zmk/commit/e3030bfcc87b7f511b0ebe993fb1f1f06215982e))
* **combos:** Restore prompts for two deprecated Kconfigs ([#2926](https://github.com/zmkfirmware/zmk/issues/2926)) ([00ff486](https://github.com/zmkfirmware/zmk/commit/00ff48693113ed74a3345aa1ac81fdea302b3a09))
* **core:** Correctly sync BAS battery level ([#2977](https://github.com/zmkfirmware/zmk/issues/2977)) ([af96766](https://github.com/zmkfirmware/zmk/commit/af967667b0e139a963178e63028c7be341cade9e))
* **display:** Make stock battery widget depend on the right symbol ([#2953](https://github.com/zmkfirmware/zmk/issues/2953)) ([9da5d3b](https://github.com/zmkfirmware/zmk/commit/9da5d3ba82b38b74ad798a82a838d84c52220bbe))
* **docs:** Fix soft off waker configuration example ([#2960](https://github.com/zmkfirmware/zmk/issues/2960)) ([eb99b4e](https://github.com/zmkfirmware/zmk/commit/eb99b4ede06bc01674ce16217ebbad40bc11ec50))
* **docs:** remove title as alt text ([#2922](https://github.com/zmkfirmware/zmk/issues/2922)) ([d9576c5](https://github.com/zmkfirmware/zmk/commit/d9576c55346acfc8eed36709aaae28f91e0d06ad))
* Fix build with Studio and USB but not UART ([#2996](https://github.com/zmkfirmware/zmk/issues/2996)) ([cef7af4](https://github.com/zmkfirmware/zmk/commit/cef7af4408cc44c20fab93a0b2e20b3429d0a98e))
* **hid:** Fix scroll value truncation ([#2865](https://github.com/zmkfirmware/zmk/issues/2865)) ([2c0e7da](https://github.com/zmkfirmware/zmk/commit/2c0e7daced1421c34a9d417b7d3e9bccbf0ebd7f)), closes [#2864](https://github.com/zmkfirmware/zmk/issues/2864)
* **pointing:** Avoids mutex leak for default layer toggle event ([#2934](https://github.com/zmkfirmware/zmk/issues/2934)) ([461f5c8](https://github.com/zmkfirmware/zmk/commit/461f5c832fb8854d87dca54d113d306323697219))
* Properly override stack size on RP2040 ([147c340](https://github.com/zmkfirmware/zmk/commit/147c340c6e8d377304acfdd64dc86cf83ebdfef2))
* **split:** add source to battery event ([#2901](https://github.com/zmkfirmware/zmk/issues/2901)) ([6f85f48](https://github.com/zmkfirmware/zmk/commit/6f85f48b19afae04f98e9abacb36ce1425b61f78))
* **split:** Compile and run properly in wired polling mode. ([#3012](https://github.com/zmkfirmware/zmk/issues/3012)) ([2ae5185](https://github.com/zmkfirmware/zmk/commit/2ae51854192aed92af95536f79547e2928cd1bf5))
* **split:** Conditionally build all split code ([#2884](https://github.com/zmkfirmware/zmk/issues/2884)) ([5bb39ec](https://github.com/zmkfirmware/zmk/commit/5bb39ec3eae23055593350cb3689a8240028181e))
* **split:** Enable wired split by default if DTS is set ([#3010](https://github.com/zmkfirmware/zmk/issues/3010)) ([1530ae3](https://github.com/zmkfirmware/zmk/commit/1530ae36c22e3e2285e895737c74de5d960a5ae4))
* **split:** Minor wired split fixes. ([6b44d33](https://github.com/zmkfirmware/zmk/commit/6b44d33db2f4bad7d98e475e6f7968493b05af73))
* Unconditionally define HID payloads to avoid error. ([6b44d33](https://github.com/zmkfirmware/zmk/commit/6b44d33db2f4bad7d98e475e6f7968493b05af73))
## [0.2.1](https://github.com/zmkfirmware/zmk/compare/v0.2.0...v0.2.1) (2025-03-02) ## [0.2.1](https://github.com/zmkfirmware/zmk/compare/v0.2.0...v0.2.1) (2025-03-02)

View File

@@ -1,3 +1,4 @@
module.exports = { module.exports = {
endOfLine: "auto", endOfLine: "auto",
trailingComma: "es5",
}; };

View File

@@ -96,7 +96,7 @@ target_sources_ifdef(CONFIG_ZMK_BATTERY_REPORTING app PRIVATE src/battery.c)
target_sources_ifdef(CONFIG_ZMK_HID_INDICATORS app PRIVATE src/events/hid_indicators_changed.c) target_sources_ifdef(CONFIG_ZMK_HID_INDICATORS app PRIVATE src/events/hid_indicators_changed.c)
target_sources_ifdef(CONFIG_ZMK_SPLIT app PRIVATE src/events/split_peripheral_status_changed.c) target_sources_ifdef(CONFIG_ZMK_SPLIT app PRIVATE src/events/split_peripheral_status_changed.c)
add_subdirectory(src/split) add_subdirectory_ifdef(CONFIG_ZMK_SPLIT src/split)
target_sources_ifdef(CONFIG_USB_DEVICE_STACK app PRIVATE src/usb.c) target_sources_ifdef(CONFIG_USB_DEVICE_STACK app PRIVATE src/usb.c)
target_sources_ifdef(CONFIG_ZMK_USB app PRIVATE src/usb_hid.c) target_sources_ifdef(CONFIG_ZMK_USB app PRIVATE src/usb_hid.c)

View File

@@ -189,10 +189,6 @@ config BT_CTLR_PHY_2M
config BT_TINYCRYPT_ECC config BT_TINYCRYPT_ECC
default y if BT_HCI && !BT_CTLR default y if BT_HCI && !BT_CTLR
config SYSTEM_WORKQUEUE_STACK_SIZE
default 4096 if SOC_RP2040
default 2048
config ZMK_BLE_THREAD_STACK_SIZE config ZMK_BLE_THREAD_STACK_SIZE
int "BLE notify thread stack size" int "BLE notify thread stack size"
default 768 default 768
@@ -448,12 +444,16 @@ config ZMK_COMBO_MAX_PRESSED_COMBOS
default 4 default 4
config ZMK_COMBO_MAX_COMBOS_PER_KEY config ZMK_COMBO_MAX_COMBOS_PER_KEY
int "Maximum number of combos per key" int "Deprecated: Max combos per key"
default 5 default 0
help
Deprecated: Storage for combos is now determined automatically
config ZMK_COMBO_MAX_KEYS_PER_COMBO config ZMK_COMBO_MAX_KEYS_PER_COMBO
int "Maximum number of keys per combo" int "Deprecated: Max keys per combo"
default 4 default 0
help
Deprecated: This is now auto-calculated based on `key-positions` in devicetree
# Combo options # Combo options
endmenu endmenu

View File

@@ -1,6 +1,10 @@
# Copyright (c) 2024 The ZMK Contributors # Copyright (c) 2024 The ZMK Contributors
# SPDX-License-Identifier: MIT # SPDX-License-Identifier: MIT
config SYSTEM_WORKQUEUE_STACK_SIZE
default 2048 if SOC_RP2040
default 2048 if ZMK_BLE
# HID # HID
if ZMK_HID_REPORT_TYPE_HKRO if ZMK_HID_REPORT_TYPE_HKRO

View File

@@ -3,11 +3,11 @@ VERSION_MAJOR = 0
# x-release-please-end # x-release-please-end
# x-release-please-start-minor # x-release-please-start-minor
VERSION_MINOR = 2 VERSION_MINOR = 3
# x-release-please-end # x-release-please-end
# x-release-please-start-patch # x-release-please-start-patch
PATCHLEVEL = 1 PATCHLEVEL = 0
# x-release-please-end # x-release-please-end
VERSION_TWEAK = 0 VERSION_TWEAK = 0

View File

@@ -6,7 +6,7 @@ if BOARD_GLOVE80_LH
config BOARD config BOARD
default "glove80 lh" default "glove80 lh"
config ZMK_SPLIT_BLE_ROLE_CENTRAL config ZMK_SPLIT_ROLE_CENTRAL
default y default y
endif # BOARD_GLOVE80_LH endif # BOARD_GLOVE80_LH

View File

@@ -7,7 +7,7 @@ config BOARD_ENABLE_DCDC
config BOARD_ENABLE_DCDC_HV config BOARD_ENABLE_DCDC_HV
bool "High voltage DCDC converter" bool "High voltage DCDC converter"
select SOC_DCDC_NRF52X_HV select SOC_DCDC_NRF52X_HV
default y default n
depends on (BOARD_MIKOTO) depends on (BOARD_MIKOTO)
choice BOARD_MIKOTO_CHARGER_CURRENT choice BOARD_MIKOTO_CHARGER_CURRENT

View File

@@ -9,5 +9,5 @@ config BOARD_ENABLE_DCDC
config BOARD_ENABLE_DCDC_HV config BOARD_ENABLE_DCDC_HV
bool "High voltage DCDC converter" bool "High voltage DCDC converter"
select SOC_DCDC_NRF52X_HV select SOC_DCDC_NRF52X_HV
default y default n
depends on (BOARD_NICE_NANO_V2) depends on (BOARD_NICE_NANO_V2)

View File

@@ -1,6 +1,6 @@
file_format: "1" file_format: "1"
id: seeeduino_xiao id: seeeduino_xiao
name: Seeeduino XIAO name: Seeed Studio XIAO SAMD21
type: board type: board
arch: arm arch: arm
outputs: outputs:

View File

@@ -1,6 +1,6 @@
file_format: "1" file_format: "1"
id: seeeduino_xiao_ble id: seeeduino_xiao_ble
name: Seeeduino XIAO BLE name: Seeed Studio XIAO nRF52840
type: board type: board
arch: arm arch: arm
outputs: outputs:

View File

@@ -1,6 +1,6 @@
file_format: "1" file_format: "1"
id: seeeduino_xiao_rp2040 id: seeeduino_xiao_rp2040
name: Seeeduino XIAO RP2040 name: Seeed Studio XIAO RP2040
type: board type: board
arch: arm arch: arm
outputs: outputs:

View File

@@ -5,9 +5,9 @@ type: interconnect
url: https://wiki.seeedstudio.com/Seeeduino-XIAO/ url: https://wiki.seeedstudio.com/Seeeduino-XIAO/
manufacturer: Seeed manufacturer: Seeed
description: | description: |
The Seeed(uino) XIAO is a popular smaller format micro-controller, that has gained popularity as an alternative The Seeed Studio XIAO is a popular smaller format micro-controller, that has gained popularity as an alternative
to the SparkFun Pro Micro. Since its creation, several pin compatible controllers, such to the SparkFun Pro Micro. Since its creation, several pin compatible controllers, such
as the Seeeduino XIAO BLE, Adafruit QT Py and Adafruit QT Py RP2040, have become available. as the Seeed Studio XIAO nRF52840 (also known as XIAO BLE), Adafruit QT Py and Adafruit QT Py RP2040, have become available.
node_labels: node_labels:
gpio: xiao_d gpio: xiao_d
i2c: xiao_i2c i2c: xiao_i2c

View File

@@ -0,0 +1,12 @@
# 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

@@ -3,3 +3,10 @@ CONFIG_SERIAL=n
CONFIG_UART_CONSOLE=n CONFIG_UART_CONSOLE=n
CONFIG_UART_INTERRUPT_DRIVEN=n CONFIG_UART_INTERRUPT_DRIVEN=n
CONFIG_ZMK_USB=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

@@ -0,0 +1,15 @@
&uart0 { status = "disabled"; };
&code_partition {
reg = <0x100 (DT_SIZE_M(2) - 0x100 - DT_SIZE_K(512))>;
};
&flash0 {
partitions {
storage_partition: partition@180000 {
reg = <0x180000 DT_SIZE_K(512)>;
read-only;
};
};
};

View File

@@ -0,0 +1,50 @@
/*
* Copyright (c) 2025 The ZMK Contributors
*
* SPDX-License-Identifier: MIT
*/
#include <physical_layouts.dtsi>
/ {
physical_layout0: physical_layout_0 {
compatible = "zmk,physical-layout";
display-name = "Default";
keys // w h x y rot rx ry
= <&key_physical_attrs 100 100 0 133 0 0 0>
, <&key_physical_attrs 100 100 100 31 0 0 0>
, <&key_physical_attrs 100 100 200 0 0 0 0>
, <&key_physical_attrs 100 100 300 28 0 0 0>
, <&key_physical_attrs 100 100 400 42 0 0 0>
, <&key_physical_attrs 100 100 800 42 0 0 0>
, <&key_physical_attrs 100 100 900 28 0 0 0>
, <&key_physical_attrs 100 100 1000 0 0 0 0>
, <&key_physical_attrs 100 100 1100 31 0 0 0>
, <&key_physical_attrs 100 100 1200 133 0 0 0>
, <&key_physical_attrs 100 100 0 233 0 0 0>
, <&key_physical_attrs 100 100 100 131 0 0 0>
, <&key_physical_attrs 100 100 200 100 0 0 0>
, <&key_physical_attrs 100 100 300 128 0 0 0>
, <&key_physical_attrs 100 100 400 142 0 0 0>
, <&key_physical_attrs 100 100 800 142 0 0 0>
, <&key_physical_attrs 100 100 900 128 0 0 0>
, <&key_physical_attrs 100 100 1000 100 0 0 0>
, <&key_physical_attrs 100 100 1100 131 0 0 0>
, <&key_physical_attrs 100 100 1200 233 0 0 0>
, <&key_physical_attrs 100 100 0 333 0 0 0>
, <&key_physical_attrs 100 100 100 231 0 0 0>
, <&key_physical_attrs 100 100 200 200 0 0 0>
, <&key_physical_attrs 100 100 300 228 0 0 0>
, <&key_physical_attrs 100 100 400 242 0 0 0>
, <&key_physical_attrs 100 100 800 242 0 0 0>
, <&key_physical_attrs 100 100 900 228 0 0 0>
, <&key_physical_attrs 100 100 1000 200 0 0 0>
, <&key_physical_attrs 100 100 1100 231 0 0 0>
, <&key_physical_attrs 100 100 1200 333 0 0 0>
, <&key_physical_attrs 100 100 400 375 0 0 0>
, <&key_physical_attrs 100 100 500 400 0 0 0>
, <&key_physical_attrs 100 100 700 400 0 0 0>
, <&key_physical_attrs 100 100 800 375 0 0 0>
;
};
};

View File

@@ -5,12 +5,18 @@
*/ */
#include <dt-bindings/zmk/matrix_transform.h> #include <dt-bindings/zmk/matrix_transform.h>
#include "a_dux-layouts.dtsi"
&physical_layout0 {
transform = <&default_transform>;
};
/ { / {
chosen { chosen {
zmk,kscan = &kscan0; zmk,kscan = &kscan0;
zmk,matrix-transform = &default_transform; zmk,physical-layout = &physical_layout0;
}; };
default_transform: keymap_transform_0 { default_transform: keymap_transform_0 {
@@ -49,5 +55,4 @@
<&pro_micro 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> <&pro_micro 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
; ;
}; };
}; };

View File

@@ -14,6 +14,7 @@
// This is a sample keymap intended to be replaced with your own // This is a sample keymap intended to be replaced with your own
base_layer { base_layer {
display-name = "Base Layer";
bindings = < bindings = <
&kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P
&kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI

View File

@@ -20,6 +20,7 @@
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default_layer { default_layer {
display-name = "Default Layer";
bindings = < bindings = <
&kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp MINUS &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp MINUS
&kp TAB &kp A &kp S &kp D &kp F &kp G &kp BSPC &kp H &kp J &kp K &kp L &kp SEMI &kp RSHFT &kp TAB &kp A &kp S &kp D &kp F &kp G &kp BSPC &kp H &kp J &kp K &kp L &kp SEMI &kp RSHFT
@@ -29,6 +30,7 @@
>; >;
}; };
lower_layer { lower_layer {
display-name = "Lower Layer";
bindings = < bindings = <
&trans &none &none &none &none &none &none &kp EQUAL &kp PLUS &kp STAR &kp PRCNT &trans &trans &none &none &none &none &none &none &kp EQUAL &kp PLUS &kp STAR &kp PRCNT &trans
&trans &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &trans &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &trans &trans &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &trans &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &trans
@@ -38,6 +40,7 @@
>; >;
}; };
raise_layer { raise_layer {
display-name = "Raise Layer";
bindings = < bindings = <
&trans &kp BSLH &kp EXCL &kp AMPS &kp PIPE &none &none &kp EQUAL &kp PLUS &kp STAR &kp PRCNT &trans &trans &kp BSLH &kp EXCL &kp AMPS &kp PIPE &none &none &kp EQUAL &kp PLUS &kp STAR &kp PRCNT &trans
&trans &kp HASH &kp GRAVE &kp DQT &kp SQT &kp TILDE &trans &kp LEFT &kp DOWN &kp UP &kp RIGHT &kp DLLR &trans &trans &kp HASH &kp GRAVE &kp DQT &kp SQT &kp TILDE &trans &kp LEFT &kp DOWN &kp UP &kp RIGHT &kp DLLR &trans

View File

@@ -19,6 +19,7 @@
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default_layer { default_layer {
display-name = "Default Layer";
// | Esc | Vol Up | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Del | // | Esc | Vol Up | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Del |
// | Home | Vol Dn | ` | 1 | 2 | 3 | 4 | 5 | 6 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Bk Spc | // | Home | Vol Dn | ` | 1 | 2 | 3 | 4 | 5 | 6 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Bk Spc |
// | End | Tab | Tab | Q | W | E | R | T | Y | T | Y | U | I | O | P | [ | ] | \ | // | End | Tab | Tab | Q | W | E | R | T | Y | T | Y | U | I | O | P | [ | ] | \ |
@@ -36,6 +37,7 @@
}; };
lower_layer { lower_layer {
display-name = "Lower Layer";
// | | | | | | | | | | | | | | | | | | | // | | | | | | | | | | | | | | | | | | |
// | | | | | | | | | | | | | | | | | | | // | | | | | | | | | | | | | | | | | | |
// | | | | | | | | | | | | | | | | | | | // | | | | | | | | | | | | | | | | | | |

View File

@@ -13,6 +13,7 @@
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default_layer { default_layer {
display-name = "Default Layer";
bindings = < bindings = <
&tog 1 &kp C_PREV &kp C_PP &kp C_NEXT &tog 1 &kp C_PREV &kp C_PP &kp C_NEXT
@@ -23,6 +24,7 @@
}; };
num_layer { num_layer {
display-name = "Num Layer";
bindings = < bindings = <
&trans &kp N7 &kp N8 &kp N9 &trans &kp N7 &kp N8 &kp N9
&trans &kp N4 &kp N5 &kp N6 &trans &kp N4 &kp N5 &kp N6
@@ -31,6 +33,7 @@
}; };
lower_layer { lower_layer {
display-name = "Lower Layer";
bindings = < bindings = <
&bt BT_CLR &none &sys_reset &bootloader &bt BT_CLR &none &sys_reset &bootloader
&trans &bt BT_SEL 3 &bt BT_SEL 4 &none &trans &bt BT_SEL 3 &bt BT_SEL 4 &none
@@ -39,6 +42,7 @@
}; };
raise_layer { raise_layer {
display-name = "Raise Layer";
bindings = < bindings = <
&kp 0x68 &kp 0x69 &kp 0x6A &kp 0x6B &kp 0x68 &kp 0x69 &kp 0x6A &kp 0x6B
&kp 0x6C &kp 0x6D &kp 0x6E &kp 0x6F &kp 0x6C &kp 0x6D &kp 0x6E &kp 0x6F

View File

@@ -15,6 +15,7 @@
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default_layer { default_layer {
display-name = "Default Layer";
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
// | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | BSPC | // | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | BSPC |
// | TAB | Q | W | E | R | T | Y | U | I | O | P | \ | // | TAB | Q | W | E | R | T | Y | U | I | O | P | \ |
@@ -33,6 +34,7 @@
}; };
lower_layer { lower_layer {
display-name = "Lower Layer";
// ------------------------------------------------------------------------------------------- // -------------------------------------------------------------------------------------------
// | ESC | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | // | ESC | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
// | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | DEL | // | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | DEL |
@@ -49,6 +51,7 @@
}; };
raise_layer { raise_layer {
display-name = "Raise Layer";
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
// | ESC | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | // | ESC | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
// | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | DEL | // | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | DEL |
@@ -65,6 +68,7 @@
}; };
adjust_layer { adjust_layer {
display-name = "Adjust Layer";
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
// |tog(4)| F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | // |tog(4)| F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
// | | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |LALT(PRTSN)| // | | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |LALT(PRTSN)|
@@ -81,6 +85,7 @@
}; };
flock_layer { flock_layer {
display-name = "Flock Layer";
// ---------------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------------
// |tog(4) | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | | // |tog(4) | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | |
// |out tog|BT_SEL 0|BT_SEL 1|BT_SEL 2|BT_SEL 3|BT_SEL 4|BT_PRV|BT_NXT|BT_CLR| | | | // |out tog|BT_SEL 0|BT_SEL 1|BT_SEL 2|BT_SEL 3|BT_SEL 4|BT_PRV|BT_NXT|BT_CLR| | | |

View File

@@ -15,6 +15,7 @@
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default_layer { default_layer {
display-name = "Default Layer";
bindings = < bindings = <
&kp ESC &kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC &kp ESC &kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC
@@ -26,6 +27,7 @@
}; };
function_layer { function_layer {
display-name = "Function Layer";
bindings = < bindings = <
&bootloader &out OUT_TOG &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &trans &bootloader &out OUT_TOG &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &trans

View File

@@ -75,6 +75,7 @@
compatible = "zmk,keymap"; compatible = "zmk,keymap";
MAIN_layer { MAIN_layer {
display-name = "Main Layer";
bindings = < bindings = <
&kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O
&kp Q &kp A &kp S &kp D &lt SYM F &kp G &kp H &lt SYM J &kp K &kp L &kp SQT &kp P &kp Q &kp A &kp S &kp D &lt SYM F &kp G &kp H &lt SYM J &kp K &kp L &kp SQT &kp P
@@ -84,6 +85,7 @@
}; };
SYM_layer { SYM_layer {
display-name = "Sym Layer";
bindings = < bindings = <
&kp N7 &kp N8 &kp N9 &kp STAR &kp DLLR &kp LBRC &kp RBRC &kp HASH &kp N7 &kp N8 &kp N9 &kp STAR &kp DLLR &kp LBRC &kp RBRC &kp HASH
&kp AMPS &kp EXCL &kp N1 &kp N2 &kp N3 &kp EQUAL &kp LT &kp LPAR &kp RPAR &kp GT &kp PIPE &none &kp AMPS &kp EXCL &kp N1 &kp N2 &kp N3 &kp EQUAL &kp LT &kp LPAR &kp RPAR &kp GT &kp PIPE &none
@@ -93,6 +95,7 @@
}; };
NAV_layer { NAV_layer {
display-name = "Nav Layer";
bindings = < bindings = <
&kp C_VOL_DN &kp C_VOL_UP &kp C_NEXT &kp C_PP &none &kp F7 &kp F8 &kp F9 &kp C_VOL_DN &kp C_VOL_UP &kp C_NEXT &kp C_PP &none &kp F7 &kp F8 &kp F9
&kp C_PREV &kp LEFT &kp DOWN &kp UP &kp RIGHT &kp LC(TAB) &kp PSCRN &kp F1 &kp F2 &kp F3 &kp F10 &kp F12 &kp C_PREV &kp LEFT &kp DOWN &kp UP &kp RIGHT &kp LC(TAB) &kp PSCRN &kp F1 &kp F2 &kp F3 &kp F10 &kp F12
@@ -102,6 +105,7 @@
}; };
BT_layer { BT_layer {
display-name = "BT Layer";
bindings = < bindings = <
&none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none
&none &none &none &none &none &none &none &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &none &none &none &none &none &none &none &none &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &none

View File

@@ -12,6 +12,7 @@
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default_layer { default_layer {
display-name = "Default Layer";
bindings = < bindings = <
&kp N9 &kp N8 &kp N9 &kp N8
&kp N7 &kp N6 &kp N7 &kp N6

View File

@@ -17,6 +17,7 @@
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default_layer { default_layer {
display-name = "Default Layer";
bindings = < bindings = <
&kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSPC &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSPC
&kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT
@@ -26,6 +27,7 @@
}; };
num_mods { num_mods {
display-name = "Num Mods";
bindings = < bindings = <
&kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp DEL &kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp DEL
&kp TAB &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp MINUS &kp PG_UP &kp LBKT &kp RBKT &kp BSLH &kp TAB &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp MINUS &kp PG_UP &kp LBKT &kp RBKT &kp BSLH
@@ -35,6 +37,7 @@
}; };
bt_control { bt_control {
display-name = "Bt Control";
bindings = < bindings = <
&bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &trans &trans &trans &trans &trans &trans &bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &trans &trans &trans &trans &trans &trans
&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans

View File

@@ -13,6 +13,7 @@
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default_layer { default_layer {
display-name = "Default Layer";
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
// | TAB | Q | W | E | R | T | | Y | U | I | O | P | BSPC | // | TAB | Q | W | E | R | T | | Y | U | I | O | P | BSPC |
// | CTRL | A | S | D | F | G | | H | J | K | L | ; | ' | // | CTRL | A | S | D | F | G | | H | J | K | L | ; | ' |
@@ -26,6 +27,7 @@
>; >;
}; };
lower_layer { lower_layer {
display-name = "Lower Layer";
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
// | TAB | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | BSPC | // | TAB | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | BSPC |
// | BTCLR| BT1 | BT2 | BT3 | BT4 | BT5 | | LFT | DWN | UP | RGT | | | // | BTCLR| BT1 | BT2 | BT3 | BT4 | BT5 | | LFT | DWN | UP | RGT | | |
@@ -40,6 +42,7 @@
}; };
raise_layer { raise_layer {
display-name = "Raise Layer";
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
// | TAB | ! | @ | # | $ | % | | ^ | & | * | ( | ) | BSPC | // | TAB | ! | @ | # | $ | % | | ^ | & | * | ( | ) | BSPC |
// | CTRL | | | | | | | - | = | [ | ] | \ | ` | // | CTRL | | | | | | | - | = | [ | ] | \ | ` |

View File

@@ -33,6 +33,7 @@
keymap { keymap {
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default_layer { default_layer {
display-name = "Default Layer";
bindings = < bindings = <
//╭──────────┬──────────┬──────────┬──────────┬──────────╮ ╭──────────┬──────────┬──────────┬──────────┬──────────╮ //╭──────────┬──────────┬──────────┬──────────┬──────────╮ ╭──────────┬──────────┬──────────┬──────────┬──────────╮
//│ Q │ W │ E │ R │ T │ │ Y │ U │ I │ O │ P │ //│ Q │ W │ E │ R │ T │ │ Y │ U │ I │ O │ P │
@@ -50,6 +51,7 @@
}; };
right_layer { right_layer {
display-name = "Right Layer";
bindings = < bindings = <
//╭──────────┬──────────┬──────────┬──────────┬──────────╮ ╭──────────┬──────────┬──────────┬──────────┬──────────╮ //╭──────────┬──────────┬──────────┬──────────┬──────────╮ ╭──────────┬──────────┬──────────┬──────────┬──────────╮
//│ INSERT │ 1 │ 2 │ 3 │ │ │ HOME │ PAGE DN │ PAGE UP │ END │ : │ //│ INSERT │ 1 │ 2 │ 3 │ │ │ HOME │ PAGE DN │ PAGE UP │ END │ : │
@@ -67,6 +69,7 @@
}; };
left_layer { left_layer {
display-name = "Left Layer";
bindings = < bindings = <
//╭──────────┬──────────┬──────────┬──────────┬──────────╮ ╭──────────┬──────────┬──────────┬──────────┬──────────╮ //╭──────────┬──────────┬──────────┬──────────┬──────────╮ ╭──────────┬──────────┬──────────┬──────────┬──────────╮
//│ │ [ │ { │ } │ │ │ ^ │ ( │ ) │ ] │ ~ │ //│ │ [ │ { │ } │ │ │ ^ │ ( │ ) │ ] │ ~ │
@@ -84,6 +87,7 @@
}; };
tri_layer { tri_layer {
display-name = "Tri Layer";
bindings = < bindings = <
//╭──────────┬──────────┬──────────┬──────────┬──────────╮ ╭──────────┬──────────┬──────────┬──────────┬──────────╮ //╭──────────┬──────────┬──────────┬──────────┬──────────╮ ╭──────────┬──────────┬──────────┬──────────┬──────────╮
//│ RESET │ │ │ │PROFILE 0 │ │ │ │ │ │ RESET │ //│ RESET │ │ │ │PROFILE 0 │ │ │ │ │ │ RESET │

View File

@@ -13,6 +13,7 @@
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default_layer { default_layer {
display-name = "Default Layer";
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
// | TAB | Q | W | E | R | T | Y | U | I | O | P | BSPC | // | TAB | Q | W | E | R | T | Y | U | I | O | P | BSPC |
// | ESC | A | S | D | F | G | H | J | K | L | ; | ' | // | ESC | A | S | D | F | G | H | J | K | L | ; | ' |
@@ -29,6 +30,7 @@
}; };
lower { lower {
display-name = "Lower";
bindings = < bindings = <
&kp LS(GRAVE) &kp LS(N1) &kp LS(N2) &kp LS(N3) &kp LS(N4) &kp LS(N5) &kp LS(N6) &kp LS(N7) &kp LS(N8) &kp LS(N9) &kp LS(N0) &kp DEL &kp LS(GRAVE) &kp LS(N1) &kp LS(N2) &kp LS(N3) &kp LS(N4) &kp LS(N5) &kp LS(N6) &kp LS(N7) &kp LS(N8) &kp LS(N9) &kp LS(N0) &kp DEL
&kp DEL &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp UNDER &kp PLUS &kp LBRC &kp RBRC &kp PIPE &kp DEL &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp UNDER &kp PLUS &kp LBRC &kp RBRC &kp PIPE
@@ -40,6 +42,7 @@
}; };
raise { raise {
display-name = "Raise";
bindings = < bindings = <
&kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp BSPC &kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp BSPC
&kp DEL &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp MINUS &kp EQUAL &kp LBKT &kp RBKT &kp BSLH &kp DEL &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp MINUS &kp EQUAL &kp LBKT &kp RBKT &kp BSLH
@@ -51,6 +54,7 @@
}; };
control { control {
display-name = "Control";
bindings = < bindings = <
&sys_reset &bootloader &bt BT_CLR &bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &trans &trans &trans &sys_reset &bootloader &bt BT_CLR &bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &trans &trans &trans
&bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &trans &trans &trans &trans &trans &trans &trans &trans &trans &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &trans &trans &trans &trans &trans &trans &trans &trans &trans

View File

@@ -14,6 +14,7 @@
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default { default {
display-name = "Default";
// -------------------------------------------------------------------------------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Q | W | E | R | T | | Y | U | I | O | P | // Q | W | E | R | T | | Y | U | I | O | P |
// A | S | D | F | G | | H | J | K | L | ; | // A | S | D | F | G | | H | J | K | L | ; |
@@ -27,6 +28,7 @@
>; >;
}; };
numbers { numbers {
display-name = "Numbers";
// -------------------------------------------------------------------------------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------------------------------------------------------------------------
// 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | // 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 |
// TAB | BT_PRV | BT_NXT | VOL-| VOL+| | < | v | ∧ | > | ' | // TAB | BT_PRV | BT_NXT | VOL-| VOL+| | < | v | ∧ | > | ' |
@@ -40,6 +42,7 @@
>; >;
}; };
symbols { symbols {
display-name = "Symbols";
// -------------------------------------------------------------------------------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------------------------------------------------------------------------
// ESC | F1 | F2 | F3 | F4 | | OUT_USB | OUT_BLE | | = | - | // ESC | F1 | F2 | F3 | F4 | | OUT_USB | OUT_BLE | | = | - |
// CAPS| F5 | F6 | F7 | F8 | | [ | ] | | ` | \ | // CAPS| F5 | F6 | F7 | F8 | | [ | ] | | ` | \ |

View File

@@ -18,6 +18,7 @@
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default_layer { default_layer {
display-name = "Default Layer";
bindings = < bindings = <
&lt ADJT ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp DEL &lt ADJT ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp DEL
&mt LCTRL TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &mt LCTRL TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT
@@ -27,6 +28,7 @@
}; };
lower { lower {
display-name = "Lower";
bindings = < bindings = <
&kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp C_PLAY_PAUSE &kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp C_PLAY_PAUSE
&trans &trans &trans &trans &trans &trans &kp LEFT &kp DOWN &kp UP &kp RIGHT &trans &trans &trans &trans &trans &trans &trans &trans &kp LEFT &kp DOWN &kp UP &kp RIGHT &trans &trans
@@ -35,6 +37,7 @@
>; >;
}; };
raise { raise {
display-name = "Raise";
bindings = < bindings = <
&kp TILDE &trans &trans &trans &trans &trans &trans &trans &trans &kp MINUS &kp EQUAL &kp C_PLAY_PAUSE &kp TILDE &trans &trans &trans &trans &trans &trans &trans &trans &kp MINUS &kp EQUAL &kp C_PLAY_PAUSE
&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &kp BSLH &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &kp BSLH
@@ -44,6 +47,7 @@
}; };
adjust { adjust {
display-name = "Adjust";
bindings = < bindings = <
&trans &bt BT_NXT &bt BT_PRV &trans &trans &bt BT_CLR &trans &trans &trans &trans &trans &trans &trans &bt BT_NXT &bt BT_PRV &trans &trans &bt BT_CLR &trans &trans &trans &trans &trans &trans
&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans

View File

@@ -18,6 +18,7 @@
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default_layer { default_layer {
display-name = "Default Layer";
/* QWERTY /* QWERTY
* .----------------------------------------------------------------------------------------------------------------------. * .----------------------------------------------------------------------------------------------------------------------.
* | ` | 1 | 2 | 3 | 4 | 5 | [ | | ] | 6 | 7 | 8 | 9 | 0 | PScr | * | ` | 1 | 2 | 3 | 4 | 5 | [ | | ] | 6 | 7 | 8 | 9 | 0 | PScr |
@@ -40,6 +41,7 @@
>; >;
}; };
lower_layer { lower_layer {
display-name = "Lower Layer";
/* .----------------------------------------------------------------------------------------------------------------------. /* .----------------------------------------------------------------------------------------------------------------------.
* | F11 | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F12 | * | F11 | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F12 |
* |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------|
@@ -61,6 +63,7 @@
>; >;
}; };
raise_layer { raise_layer {
display-name = "Raise Layer";
/* .----------------------------------------------------------------------------------------------------------------------. /* .----------------------------------------------------------------------------------------------------------------------.
* | | BT 0 | BT 1 | BT 2 | BT 3 | | BTCL | | | | | | | | | * | | BT 0 | BT 1 | BT 2 | BT 3 | | BTCL | | | | | | | | |
* |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------|

View File

@@ -24,6 +24,7 @@
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default_layer { default_layer {
display-name = "Default Layer";
bindings = < bindings = <
&kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6
&kp TAB &kp Q &kp W &kp E &kp R &kp T &kp N7 &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp N7
@@ -34,6 +35,7 @@
}; };
arrow_layer { arrow_layer {
display-name = "Arrow Layer";
bindings = < bindings = <
&bt BT_SEL 0 &bt BT_SEL 1 &trans &trans &trans &out OUT_USB &out OUT_BLE &bt BT_SEL 0 &bt BT_SEL 1 &trans &trans &trans &out OUT_USB &out OUT_BLE
&trans &trans &kp UP &trans &rgb_ug RGB_TOG &rgb_ug RGB_HUI &rgb_ug RGB_HUD &trans &trans &kp UP &trans &rgb_ug RGB_TOG &rgb_ug RGB_HUI &rgb_ug RGB_HUD
@@ -44,6 +46,7 @@
}; };
function_layer { function_layer {
display-name = "Function Layer";
bindings = < bindings = <
&trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6
&trans &kp P &kp O &kp I &kp U &kp Y &kp F7 &trans &kp P &kp O &kp I &kp U &kp Y &kp F7

View File

@@ -24,6 +24,7 @@
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default_layer { default_layer {
display-name = "Default Layer";
bindings = < bindings = <
&kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6
&kp TAB &kp Q &kp W &kp E &kp R &kp T &kp N7 &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp N7
@@ -34,6 +35,7 @@
}; };
arrow_layer { arrow_layer {
display-name = "Arrow Layer";
bindings = < bindings = <
&bt BT_SEL 0 &bt BT_SEL 1 &trans &trans &trans &out OUT_USB &out OUT_BLE &bt BT_SEL 0 &bt BT_SEL 1 &trans &trans &trans &out OUT_USB &out OUT_BLE
&trans &trans &kp UP &trans &rgb_ug RGB_TOG &rgb_ug RGB_HUI &rgb_ug RGB_HUD &trans &trans &kp UP &trans &rgb_ug RGB_TOG &rgb_ug RGB_HUI &rgb_ug RGB_HUD
@@ -44,6 +46,7 @@
}; };
function_layer { function_layer {
display-name = "Function Layer";
bindings = < bindings = <
&trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6
&trans &kp P &kp O &kp I &kp U &kp Y &kp F7 &trans &kp P &kp O &kp I &kp U &kp Y &kp F7

View File

@@ -21,6 +21,7 @@
// ------------------------------------------- ----------------------------------------------- // ------------------------------------------- -----------------------------------------------
default_layer { default_layer {
display-name = "Default Layer";
bindings = < bindings = <
&kp ESC &kp Q &kp W &kp E &kp R &kp T /**/ &kp Y &kp U &kp I &kp O &kp P &none &kp BACKSPACE &kp ESC &kp Q &kp W &kp E &kp R &kp T /**/ &kp Y &kp U &kp I &kp O &kp P &none &kp BACKSPACE
&kp TAB &kp A &kp S &kp D &kp F &kp G /**/ &kp H &kp J &kp K &kp L &kp SQT &kp ENTER &kp TAB &kp A &kp S &kp D &kp F &kp G /**/ &kp H &kp J &kp K &kp L &kp SQT &kp ENTER
@@ -37,6 +38,7 @@
// ------------------------------------------- ----------------------------------------------- // ------------------------------------------- -----------------------------------------------
symbols_layer { symbols_layer {
display-name = "Symbols Layer";
bindings = < bindings = <
&kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 /**/ &kp N7 &kp N8 &kp N9 &kp N0 &kp PSCRN &none &kp DEL &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 /**/ &kp N7 &kp N8 &kp N9 &kp N0 &kp PSCRN &none &kp DEL
&kp GRAVE &none &kp LEFT &kp UP &kp RIGHT &kp C_VOL_UP /**/ &kp LBKT &kp RBKT &kp MINUS &kp EQUAL &kp SEMI &kp BACKSLASH &kp GRAVE &none &kp LEFT &kp UP &kp RIGHT &kp C_VOL_UP /**/ &kp LBKT &kp RBKT &kp MINUS &kp EQUAL &kp SEMI &kp BACKSLASH
@@ -53,6 +55,7 @@
// ------------------------------------------- ----------------------------------------------- // ------------------------------------------- -----------------------------------------------
fn_layer { fn_layer {
display-name = "Fn Layer";
bindings = < bindings = <
&kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 /**/ &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &none &kp F12 &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 /**/ &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &none &kp F12
&kp CAPS &none &kp HOME &kp PG_UP &kp END &none /**/ &none &none &none &none &none &none &kp CAPS &none &kp HOME &kp PG_UP &kp END &none /**/ &none &none &none &none &none &none

View File

@@ -25,6 +25,7 @@ As such, those are in use within the default layer at this time.*/
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default_layer { default_layer {
display-name = "Default Layer";
// --------------------------------------------------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------------------------------------------------
// | GRAVE | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | DEL | // | GRAVE | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | DEL |
// | TAB | Q | W | E | R | T | | Y | U | I | O | P | BSPC | // | TAB | Q | W | E | R | T | | Y | U | I | O | P | BSPC |
@@ -40,6 +41,7 @@ As such, those are in use within the default layer at this time.*/
>; >;
}; };
lower_layer { lower_layer {
display-name = "Lower Layer";
// --------------------------------------------------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------------------------------------------------
// | | | | | | | | | | | | | | // | | | | | | | | | | | | | |
// | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | | // | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | |
@@ -55,6 +57,7 @@ As such, those are in use within the default layer at this time.*/
>; >;
}; };
raise_layer { raise_layer {
display-name = "Raise Layer";
// --------------------------------------------------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------------------------------------------------
// | | | | | | | | | | | | | | // | | | | | | | | | | | | | |
// | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | DEL | // | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | DEL |
@@ -70,6 +73,7 @@ As such, those are in use within the default layer at this time.*/
>; >;
}; };
adjust_layer { adjust_layer {
display-name = "Adjust Layer";
// --------------------------------------------------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------------------------------------------------
// | ` | ! | @ | # | $ | % | | ^ | & | * | ( | ) | EP TOG | // | ` | ! | @ | # | $ | % | | ^ | & | * | ( | ) | EP TOG |
// | BT CLR | BT SEL0 | BT SEL1 | BT SEL2 | BGT SEL3 | BT SEL4 | | RGB EFF+ | RGB HUE+ | RGB SAT+ | RGB SPD+ | RGB BRI+ | RGB TOG | // | BT CLR | BT SEL0 | BT SEL1 | BT SEL2 | BGT SEL3 | BT SEL4 | | RGB EFF+ | RGB HUE+ | RGB SAT+ | RGB SPD+ | RGB BRI+ | RGB TOG |

View File

@@ -56,6 +56,7 @@
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default_layer { default_layer {
display-name = "Default Layer";
bindings = < bindings = <
&kp Q &kp W &kp E &kp R &kp T &kp H &kp U &kp I &kp O &kp P &kp Q &kp W &kp E &kp R &kp T &kp H &kp U &kp I &kp O &kp P
&hm LGUI A &hm LALT S &hm LCTRL D &hm LSHFT F &kp G &kp N &hm RSHFT J &hm RCTRL K &hm LALT L &hm RGUI SQT &hm LGUI A &hm LALT S &hm LCTRL D &hm LSHFT F &kp G &kp N &hm RSHFT J &hm RCTRL K &hm LALT L &hm RGUI SQT

View File

@@ -13,6 +13,7 @@
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default_layer { default_layer {
display-name = "Default Layer";
// ------------------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------------------
// | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` | // | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` |
// | TAB | Q | W | E | R | T | | Y | U | I | O | P | - | // | TAB | Q | W | E | R | T | | Y | U | I | O | P | - |
@@ -29,6 +30,7 @@
}; };
lower_layer { lower_layer {
display-name = "Lower Layer";
// ------------------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------------------
// | BTCLR | BT1 | BT2 | BT3 | BT4 | BT5 | | | | | | | | // | BTCLR | BT1 | BT2 | BT3 | BT4 | BT5 | | | | | | | |
// | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | // | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 |
@@ -45,6 +47,7 @@
}; };
raise_layer { raise_layer {
display-name = "Raise Layer";
// ------------------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------------------
// | | | | | | | | | | | | | | // | | | | | | | | | | | | | |
// | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | | // | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | |

View File

@@ -13,6 +13,7 @@
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default_layer { default_layer {
display-name = "Default Layer";
bindings = < bindings = <
&kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS
&kp LGUI &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &mt RGUI RBKT &kp LGUI &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &mt RGUI RBKT
@@ -23,6 +24,7 @@
}; };
lower_layer { lower_layer {
display-name = "Lower Layer";
bindings = < bindings = <
&kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp EQUAL &kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp EQUAL
&kp F11 &kp TAB &bt BT_CLR &kp HOME &sys_reset &kp PG_UP &kp C_VOL_UP &kp C_VOL_UP &kp PG_UP &studio_unlock &kp HOME &kp INS &kp DEL &kp F12 &kp F11 &kp TAB &bt BT_CLR &kp HOME &sys_reset &kp PG_UP &kp C_VOL_UP &kp C_VOL_UP &kp PG_UP &studio_unlock &kp HOME &kp INS &kp DEL &kp F12

View File

@@ -13,6 +13,7 @@
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default_layer { default_layer {
display-name = "Default Layer";
bindings = < bindings = <
&trans &kp EQUAL &kp KP_SLASH &kp KP_MULTIPLY &kp KP_MINUS &trans &kp EQUAL &kp KP_SLASH &kp KP_MULTIPLY &kp KP_MINUS
@@ -26,6 +27,7 @@
}; };
num_layer { num_layer {
display-name = "Num Layer";
bindings = < bindings = <
&trans &bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &trans &bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2
&trans &kp HOME &trans &kp PAGE_UP &trans &trans &kp HOME &trans &kp PAGE_UP &trans

View File

@@ -13,6 +13,7 @@
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default_layer { default_layer {
display-name = "Default Layer";
// --------------------------------------------------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------------------------------------------------
// | ESC | Q | W | E | R | T | | Y | U | I | O | P | \ | // | ESC | Q | W | E | R | T | | Y | U | I | O | P | \ |
// | TAB | A | S | D | F | G | | H | J | K | L | ; | ' | // | TAB | A | S | D | F | G | | H | J | K | L | ; | ' |
@@ -28,6 +29,7 @@
sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>; sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>;
}; };
function_layer { function_layer {
display-name = "Function Layer";
// --------------------------------------------------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------------------------------------------------
// | | |BT_CLR|BTSEL0|BTSEL1|BTSEL2| | | | | | | | // | | |BT_CLR|BTSEL0|BTSEL1|BTSEL2| | | | | | | |
// | | | |BTSEL3|BTSEL4| | | | | | | | | // | | | |BTSEL3|BTSEL4| | | | | | | | |

View File

@@ -13,6 +13,7 @@
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default_layer { default_layer {
display-name = "Default Layer";
// --------------------------------------------------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------------------------------------------------
// | ESC | Q | W | E | R | T | | Y | U | I | O | P | \ | // | ESC | Q | W | E | R | T | | Y | U | I | O | P | \ |
// | TAB | A | S | D | F | G | | H | J | K | L | ; | ' | // | TAB | A | S | D | F | G | | H | J | K | L | ; | ' |
@@ -28,6 +29,7 @@
sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>; sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>;
}; };
function_layer { function_layer {
display-name = "Function Layer";
// --------------------------------------------------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------------------------------------------------
// | | |BT_CLR|BTSEL0|BTSEL1|BTSEL2| | | | | | | | // | | |BT_CLR|BTSEL0|BTSEL1|BTSEL2| | | | | | | |
// | | | |BTSEL3|BTSEL4| | | | | | | | | // | | | |BTSEL3|BTSEL4| | | | | | | | |

View File

@@ -21,6 +21,7 @@
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default_layer { default_layer {
display-name = "Default Layer";
// --------------------------------------------------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------------------------------------------------
// | ESC | Q | W | E | R | T | | Y | U | I | O | P | \ | // | ESC | Q | W | E | R | T | | Y | U | I | O | P | \ |
// | TAB | A | S | D | F | G | | H | J | K | L | ; | ' | // | TAB | A | S | D | F | G | | H | J | K | L | ; | ' |
@@ -36,6 +37,7 @@
sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>; sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>;
}; };
function_layer { function_layer {
display-name = "Function Layer";
// --------------------------------------------------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------------------------------------------------
// | | |BT_CLR|BTSEL0|BTSEL1|BTSEL2| | | | | | | | // | | |BT_CLR|BTSEL0|BTSEL1|BTSEL2| | | | | | | |
// | | | |BTSEL3|BTSEL4| | | | | | | | | // | | | |BTSEL3|BTSEL4| | | | | | | | |

View File

@@ -14,6 +14,7 @@
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default_layer { default_layer {
display-name = "Default Layer";
// ------------------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------------------
// | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` | // | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` |
// | TAB | Q | W | E | R | T | | Y | U | I | O | P | - | // | TAB | Q | W | E | R | T | | Y | U | I | O | P | - |
@@ -32,6 +33,7 @@
}; };
lower_layer { lower_layer {
display-name = "Lower Layer";
// ------------------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------------------
// | BTCLR | BT1 | BT2 | BT3 | BT4 | BT5 | | | | | | | | // | BTCLR | BT1 | BT2 | BT3 | BT4 | BT5 | | | | | | | |
// | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | // | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 |
@@ -50,6 +52,7 @@
}; };
raise_layer { raise_layer {
display-name = "Raise Layer";
// ------------------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------------------
// | | | | | | | | | | | | | | // | | | | | | | | | | | | | |
// | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | | // | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | |

View File

@@ -45,6 +45,7 @@
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default_layer { default_layer {
display-name = "Default Layer";
// ------------------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------------------
// 0| ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | = | 11 // 0| ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | = | 11
// 12| TAB | Q | W | E | R | T | | Y | U | I | O | P | [ | 23 // 12| TAB | Q | W | E | R | T | | Y | U | I | O | P | [ | 23
@@ -63,6 +64,7 @@
}; };
lower_layer { lower_layer {
display-name = "Lower Layer";
// ------------------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------------------
// | ` | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 | // | ` | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 |
// | | ! | HOME| ^ | END | % | | VOL^ | PGUP | INS | ^ | PSCR | - | // | | ! | HOME| ^ | END | % | | VOL^ | PGUP | INS | ^ | PSCR | - |
@@ -81,6 +83,7 @@
}; };
raise_layer { raise_layer {
display-name = "Raise Layer";
// ------------------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------------------
// |BTCLR| BT1 | BT2 | BT3 | BT4 | BT5 | |OUTTOG|OUTUSB| OUTBT | | RESET | FLASH | // |BTCLR| BT1 | BT2 | BT3 | BT4 | BT5 | |OUTTOG|OUTUSB| OUTBT | | RESET | FLASH |
// | | INS | PSCR | GUI | RESET | | | PGUP | | ^ | | | | // | | INS | PSCR | GUI | RESET | | | PGUP | | ^ | | | |

View File

@@ -13,6 +13,7 @@
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default_layer { default_layer {
display-name = "Default Layer";
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
// | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BSPC | // | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BSPC |
// | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | // | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ |
@@ -30,6 +31,7 @@
}; };
fn_layer { fn_layer {
display-name = "Fn Layer";
bindings = < bindings = <
&kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &bootloader &kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &bootloader
&trans &bt BT_CLR &none &none &none &none &none &none &none &none &none &none &none &sys_reset &trans &bt BT_CLR &none &none &none &none &none &none &none &none &none &none &none &sys_reset

View File

@@ -13,6 +13,7 @@
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default_layer { default_layer {
display-name = "Default Layer";
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
// | Q | W | E | R | T | | Y | U | I | O | P | // | Q | W | E | R | T | | Y | U | I | O | P |
// | A | S | D | F | G | | H | J | K | L | ; | // | A | S | D | F | G | | H | J | K | L | ; |
@@ -26,6 +27,7 @@
>; >;
}; };
nav_layer { nav_layer {
display-name = "Nav Layer";
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
// |BTCLR| | ESC | ~ | | | TAB | HOME | UP | END | DEL | // |BTCLR| | ESC | ~ | | | TAB | HOME | UP | END | DEL |
// | BT1 | GUI | ALT | CTRL | NUM | | / | LEFT | DOWN | RGT | BSPC | // | BT1 | GUI | ALT | CTRL | NUM | | / | LEFT | DOWN | RGT | BSPC |
@@ -40,6 +42,7 @@
}; };
sym_layer { sym_layer {
display-name = "Sym Layer";
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
// | ! | @ | # | $ | % | | ^ | & | * | ( | ) | // | ! | @ | # | $ | % | | ^ | & | * | ( | ) |
// | | | | | | | - | = | { | } | "|" | // | | | | | | | - | = | { | } | "|" |
@@ -56,6 +59,7 @@
// This layer is unreachable until "tri layer state" is sorted out. // This layer is unreachable until "tri layer state" is sorted out.
// Leaving it here for completeness. // Leaving it here for completeness.
num_layer { num_layer {
display-name = "Num Layer";
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
// | | | | | | | A | 7 | 8 | 9 | D | // | | | | | | | A | 7 | 8 | 9 | D |
// | | | | | | | B | 4 | 5 | 6 | E | // | | | | | | | B | 4 | 5 | 6 | E |

View File

@@ -15,6 +15,7 @@
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default_layer { default_layer {
display-name = "Default Layer";
// ---------------------------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------------------------
// | ESC | 1 | 2 | 3 | 4 | 5 |-------|-------| 6 | 7 | 8 | 9 | 0 | BSPC | // | ESC | 1 | 2 | 3 | 4 | 5 |-------|-------| 6 | 7 | 8 | 9 | 0 | BSPC |
// | TAB | Q | W | E | R | T |-------|-------| Y | U | I | O | P | \ | // | TAB | Q | W | E | R | T |-------|-------| Y | U | I | O | P | \ |
@@ -33,6 +34,7 @@
}; };
lower { lower {
display-name = "Lower";
// ---------------------------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------------------------
// | ESC | F2 | F3 | F4 | F5 | F6 |-------|-------| F7 | F8 | F9 | F10 | F11 | F12 | // | ESC | F2 | F3 | F4 | F5 | F6 |-------|-------| F7 | F8 | F9 | F10 | F11 | F12 |
// | ~ | ! | @ | # | $ | % |-------|-------| ^ | & | * | ( | ) | DEL | // | ~ | ! | @ | # | $ | % |-------|-------| ^ | & | * | ( | ) | DEL |
@@ -49,6 +51,7 @@
}; };
raise { raise {
display-name = "Raise";
// ---------------------------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------------------------
// | ESC | F2 | F3 | F4 | F5 | F6 |-------|-------| F7 | F8 | F9 | F10 | F11 | F12 | // | ESC | F2 | F3 | F4 | F5 | F6 |-------|-------| F7 | F8 | F9 | F10 | F11 | F12 |
// | ~ | 1 | 2 | 3 | 4 | 5 |-------|-------| 6 | 7 | 8 | 9 | 0 | DEL | // | ~ | 1 | 2 | 3 | 4 | 5 |-------|-------| 6 | 7 | 8 | 9 | 0 | DEL |
@@ -65,6 +68,7 @@
}; };
adjust { adjust {
display-name = "Adjust";
// ---------------------------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------------------------
// |tog(4)| F2 | F3 | F4 | F5 | F6 |------|------| F7 | F8 | F9 | F10 | F11 | F12 | // |tog(4)| F2 | F3 | F4 | F5 | F6 |------|------| F7 | F8 | F9 | F10 | F11 | F12 |
// | | NA | NA | NA | NA | NA |------|------| NA | NA | NA | NA | NA |LALT(PRTSN)| // | | NA | NA | NA | NA | NA |------|------| NA | NA | NA | NA | NA |LALT(PRTSN)|
@@ -81,6 +85,7 @@
}; };
flock { flock {
display-name = "Flock";
// ---------------------------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------------------------
// |tog(4) | F2 | F3 | F4 | F5 | F6 |-------|-------| F7 | F8 | F9 | F10 | F11 | | // |tog(4) | F2 | F3 | F4 | F5 | F6 |-------|-------| F7 | F8 | F9 | F10 | F11 | |
// |out tog|BT_SEL 0|BT_SEL 1|BT_SEL 2|BT_SEL 3|BT_SEL 4|-------|-------|BT_PRV|BT_NXT|BT_CLR| | | | // |out tog|BT_SEL 0|BT_SEL 1|BT_SEL 2|BT_SEL 3|BT_SEL 4|-------|-------|BT_PRV|BT_NXT|BT_CLR| | | |

View File

@@ -4,9 +4,21 @@ The nice!view is a low-power, high refresh rate display meant to replace I2C OLE
This shield requires that an `&nice_view_spi` labeled SPI bus is provided with _at least_ MOSI, SCK, and CS pins defined. This shield requires that an `&nice_view_spi` labeled SPI bus is provided with _at least_ MOSI, SCK, and CS pins defined.
## Custom widget
The nice!view shield includes a custom vertical widget.
Profile indicators show the status of the first five BLE profiles using numbers from 1 to 5.
The number corresponding to the currently selected profile is drawn in a filled disk
and the circle outline around each profile number correspond to the following states:
- solid outline: connected
- dashed outline: not connected
- no outline: not bound
## Disable custom widget ## Disable custom widget
The nice!view shield includes a custom vertical widget. To use the built-in ZMK one, add the following item to your `.conf` file: To use the built-in ZMK widget instead of the custom nice!view one, add the following item to your `.conf` file:
``` ```
CONFIG_ZMK_DISPLAY_STATUS_SCREEN_BUILT_IN=y CONFIG_ZMK_DISPLAY_STATUS_SCREEN_BUILT_IN=y

View File

@@ -1,6 +1,6 @@
/* /*
* *
* Copyright (c) 2023 The ZMK Contributors * Copyright (c) 2025 The ZMK Contributors
* SPDX-License-Identifier: MIT * SPDX-License-Identifier: MIT
* *
*/ */
@@ -33,6 +33,8 @@ struct output_status_state {
int active_profile_index; int active_profile_index;
bool active_profile_connected; bool active_profile_connected;
bool active_profile_bonded; bool active_profile_bonded;
bool profiles_connected[NICEVIEW_PROFILE_COUNT];
bool profiles_bonded[NICEVIEW_PROFILE_COUNT];
}; };
struct layer_status_state { struct layer_status_state {
@@ -142,15 +144,24 @@ static void draw_middle(lv_obj_t *widget, lv_color_t cbuf[], const struct status
lv_canvas_draw_rect(canvas, 0, 0, CANVAS_SIZE, CANVAS_SIZE, &rect_black_dsc); lv_canvas_draw_rect(canvas, 0, 0, CANVAS_SIZE, CANVAS_SIZE, &rect_black_dsc);
// Draw circles // Draw circles
int circle_offsets[5][2] = { int circle_offsets[NICEVIEW_PROFILE_COUNT][2] = {
{13, 13}, {55, 13}, {34, 34}, {13, 55}, {55, 55}, {13, 13}, {55, 13}, {34, 34}, {13, 55}, {55, 55},
}; };
for (int i = 0; i < 5; i++) { for (int i = 0; i < NICEVIEW_PROFILE_COUNT; i++) {
bool selected = i == state->active_profile_index; bool selected = i == state->active_profile_index;
if (state->profiles_connected[i]) {
lv_canvas_draw_arc(canvas, circle_offsets[i][0], circle_offsets[i][1], 13, 0, 360, lv_canvas_draw_arc(canvas, circle_offsets[i][0], circle_offsets[i][1], 13, 0, 360,
&arc_dsc); &arc_dsc);
} else if (state->profiles_bonded[i]) {
const int segments = 8;
const int gap = 20;
for (int j = 0; j < segments; ++j)
lv_canvas_draw_arc(canvas, circle_offsets[i][0], circle_offsets[i][1], 13,
360. / segments * j + gap / 2.0,
360. / segments * (j + 1) - gap / 2.0, &arc_dsc);
}
if (selected) { if (selected) {
lv_canvas_draw_arc(canvas, circle_offsets[i][0], circle_offsets[i][1], 9, 0, 359, lv_canvas_draw_arc(canvas, circle_offsets[i][0], circle_offsets[i][1], 9, 0, 359,
@@ -234,6 +245,10 @@ static void set_output_status(struct zmk_widget_status *widget,
widget->state.active_profile_index = state->active_profile_index; widget->state.active_profile_index = state->active_profile_index;
widget->state.active_profile_connected = state->active_profile_connected; widget->state.active_profile_connected = state->active_profile_connected;
widget->state.active_profile_bonded = state->active_profile_bonded; widget->state.active_profile_bonded = state->active_profile_bonded;
for (int i = 0; i < NICEVIEW_PROFILE_COUNT; ++i) {
widget->state.profiles_connected[i] = state->profiles_connected[i];
widget->state.profiles_bonded[i] = state->profiles_bonded[i];
}
draw_top(widget->obj, widget->cbuf, &widget->state); draw_top(widget->obj, widget->cbuf, &widget->state);
draw_middle(widget->obj, widget->cbuf2, &widget->state); draw_middle(widget->obj, widget->cbuf2, &widget->state);
@@ -245,12 +260,17 @@ static void output_status_update_cb(struct output_status_state state) {
} }
static struct output_status_state output_status_get_state(const zmk_event_t *_eh) { static struct output_status_state output_status_get_state(const zmk_event_t *_eh) {
return (struct output_status_state){ struct output_status_state state = {
.selected_endpoint = zmk_endpoints_selected(), .selected_endpoint = zmk_endpoints_selected(),
.active_profile_index = zmk_ble_active_profile_index(), .active_profile_index = zmk_ble_active_profile_index(),
.active_profile_connected = zmk_ble_active_profile_is_connected(), .active_profile_connected = zmk_ble_active_profile_is_connected(),
.active_profile_bonded = !zmk_ble_active_profile_is_open(), .active_profile_bonded = !zmk_ble_active_profile_is_open(),
}; };
for (int i = 0; i < MIN(NICEVIEW_PROFILE_COUNT, ZMK_BLE_PROFILE_COUNT); ++i) {
state.profiles_connected[i] = zmk_ble_profile_is_connected(i);
state.profiles_bonded[i] = !zmk_ble_profile_is_open(i);
}
return state;
} }
ZMK_DISPLAY_WIDGET_LISTENER(widget_output_status, struct output_status_state, ZMK_DISPLAY_WIDGET_LISTENER(widget_output_status, struct output_status_state,

View File

@@ -1,6 +1,6 @@
/* /*
* *
* Copyright (c) 2023 The ZMK Contributors * Copyright (c) 2025 The ZMK Contributors
* SPDX-License-Identifier: MIT * SPDX-License-Identifier: MIT
* *
*/ */
@@ -8,6 +8,8 @@
#include <lvgl.h> #include <lvgl.h>
#include <zmk/endpoints.h> #include <zmk/endpoints.h>
#define NICEVIEW_PROFILE_COUNT 5
#define CANVAS_SIZE 68 #define CANVAS_SIZE 68
#define LVGL_BACKGROUND \ #define LVGL_BACKGROUND \
@@ -23,6 +25,8 @@ struct status_state {
int active_profile_index; int active_profile_index;
bool active_profile_connected; bool active_profile_connected;
bool active_profile_bonded; bool active_profile_bonded;
bool profiles_connected[NICEVIEW_PROFILE_COUNT];
bool profiles_bonded[NICEVIEW_PROFILE_COUNT];
uint8_t layer_index; uint8_t layer_index;
const char *layer_label; const char *layer_label;
uint8_t wpm[10]; uint8_t wpm[10];

View File

@@ -75,6 +75,7 @@
compatible = "zmk,keymap"; compatible = "zmk,keymap";
MAIN_layer { MAIN_layer {
display-name = "Main Layer";
bindings = < bindings = <
&kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O
&kp Q &kp A &kp S &kp D &lt SYM F &kp G &kp H &lt SYM J &kp K &kp L &kp SQT &kp P &kp Q &kp A &kp S &kp D &lt SYM F &kp G &kp H &lt SYM J &kp K &kp L &kp SQT &kp P
@@ -84,6 +85,7 @@
}; };
SYM_layer { SYM_layer {
display-name = "Sym Layer";
bindings = < bindings = <
&kp N7 &kp N8 &kp N9 &kp STAR &kp DLLR &kp LBRC &kp RBRC &kp HASH &kp N7 &kp N8 &kp N9 &kp STAR &kp DLLR &kp LBRC &kp RBRC &kp HASH
&kp AMPS &kp EXCL &kp N1 &kp N2 &kp N3 &kp EQUAL &kp LT &kp LPAR &kp RPAR &kp GT &kp PIPE &none &kp AMPS &kp EXCL &kp N1 &kp N2 &kp N3 &kp EQUAL &kp LT &kp LPAR &kp RPAR &kp GT &kp PIPE &none
@@ -93,6 +95,7 @@
}; };
NAV_layer { NAV_layer {
display-name = "Nav Layer";
bindings = < bindings = <
&kp C_VOL_DN &kp C_VOL_UP &kp C_NEXT &kp C_PP &none &kp F7 &kp F8 &kp F9 &kp C_VOL_DN &kp C_VOL_UP &kp C_NEXT &kp C_PP &none &kp F7 &kp F8 &kp F9
&kp C_PREV &kp LEFT &kp DOWN &kp UP &kp RIGHT &kp LC(TAB) &kp PSCRN &kp F1 &kp F2 &kp F3 &kp F10 &kp F12 &kp C_PREV &kp LEFT &kp DOWN &kp UP &kp RIGHT &kp LC(TAB) &kp PSCRN &kp F1 &kp F2 &kp F3 &kp F10 &kp F12
@@ -102,6 +105,7 @@
}; };
BT_layer { BT_layer {
display-name = "BT Layer";
bindings = < bindings = <
&none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none
&none &none &none &none &none &none &none &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &none &none &none &none &none &none &none &none &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &none

View File

@@ -19,6 +19,7 @@
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default_layer { default_layer {
display-name = "Default Layer";
bindings = < bindings = <
&kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSPC &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSPC
&kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SQT &kp SEMI &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SQT &kp SEMI
@@ -28,6 +29,7 @@
}; };
lower_layer { lower_layer {
display-name = "Lower Layer";
bindings = < bindings = <
&kp TILDE &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp STAR &kp LPAR &kp RPAR &kp BSPC &kp TILDE &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp STAR &kp LPAR &kp RPAR &kp BSPC
&trans &trans &trans &trans &trans &trans &trans &trans &kp UNDER &kp PLUS &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &kp UNDER &kp PLUS &trans &trans
@@ -37,6 +39,7 @@
}; };
raise_layer { raise_layer {
display-name = "Raise Layer";
bindings = < bindings = <
&kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp BSPC &kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp BSPC
&trans &trans &trans &trans &trans &trans &trans &trans &kp MINUS &kp EQUAL &trans &kp BSLH &trans &trans &trans &trans &trans &trans &trans &trans &kp MINUS &kp EQUAL &trans &kp BSLH
@@ -46,6 +49,7 @@
}; };
function_layer { function_layer {
display-name = "Function Layer";
bindings = < bindings = <
&bootloader &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &trans &bootloader &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &trans
&trans &trans &trans &trans &trans &trans &trans &trans &kp MINUS &kp F11 &kp F12 &trans &trans &trans &trans &trans &trans &trans &trans &trans &kp MINUS &kp F11 &kp F12 &trans

View File

@@ -29,6 +29,7 @@
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default_layer { default_layer {
display-name = "Default Layer";
bindings = < bindings = <
&kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P
&hm LGUI A &hm LALT S &hm LCTRL D &hm LSHFT F &kp G &kp H &hm RSHFT J &hm RCTRL K &hm RALT L &hm RGUI RET &hm LGUI A &hm LALT S &hm LCTRL D &hm LSHFT F &kp G &kp H &hm RSHFT J &hm RCTRL K &hm RALT L &hm RGUI RET
@@ -37,6 +38,7 @@
>; >;
}; };
num_sym { num_sym {
display-name = "Num Sym";
bindings = < bindings = <
&kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0
&trans &trans &trans &trans &trans &trans &trans &trans &kp EQUAL &kp MINUS &trans &trans &trans &trans &trans &trans &trans &trans &kp EQUAL &kp MINUS
@@ -46,6 +48,7 @@
}; };
nav { nav {
display-name = "Nav";
bindings = < bindings = <
&bt BT_CLR &bt BT_NXT &bt BT_PRV &none &none &none &none &kp UP &none &kp BSPC &bt BT_CLR &bt BT_NXT &bt BT_PRV &none &none &none &none &kp UP &none &kp BSPC
&trans &trans &trans &trans &none &none &kp LEFT &kp DOWN &kp RIGHT &none &trans &trans &trans &trans &none &none &kp LEFT &kp DOWN &kp RIGHT &none

View File

@@ -21,6 +21,7 @@
// ------------------------------------------- ------------------------------------------------------ // ------------------------------------------- ------------------------------------------------------
default_layer { default_layer {
display-name = "Default Layer";
bindings = < bindings = <
&kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 /**/ &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC &kp GRAVE &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 /**/ &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC &kp GRAVE
&kp TAB &kp Q &kp W &kp E &kp R &kp T /**/ &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH &kp HOME &kp TAB &kp Q &kp W &kp E &kp R &kp T /**/ &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH &kp HOME
@@ -39,6 +40,7 @@
// ------------------------------------------- ------------------------------------------------------ // ------------------------------------------- ------------------------------------------------------
fn_layer { fn_layer {
display-name = "Fn Layer";
bindings = < bindings = <
&bt BT_CLR &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 /**/ &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &trans &bt BT_CLR &bt BT_CLR &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 /**/ &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &trans &bt BT_CLR
&trans &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &trans &trans /**/ &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &trans &trans /**/ &trans &trans &trans &trans &trans &trans &trans &trans &trans

View File

@@ -0,0 +1,87 @@
/*
* Copyright (c) 2025 The ZMK Contributors
*
* SPDX-License-Identifier: MIT
*/
#include <physical_layouts.dtsi>
/ {
redox_physical_layout: redox_physical_layout {
compatible = "zmk,physical-layout";
display-name = "Default";
keys // w h x y rot rx ry
= <&key_physical_attrs 100 100 0 35 0 0 0>
, <&key_physical_attrs 100 100 100 35 0 0 0>
, <&key_physical_attrs 100 100 200 15 0 0 0>
, <&key_physical_attrs 100 100 300 0 0 0 0>
, <&key_physical_attrs 100 100 400 15 0 0 0>
, <&key_physical_attrs 100 100 500 35 0 0 0>
, <&key_physical_attrs 100 100 1100 35 0 0 0>
, <&key_physical_attrs 100 100 1200 15 0 0 0>
, <&key_physical_attrs 100 100 1300 0 0 0 0>
, <&key_physical_attrs 100 100 1400 15 0 0 0>
, <&key_physical_attrs 100 100 1500 35 0 0 0>
, <&key_physical_attrs 100 100 1600 35 0 0 0>
, <&key_physical_attrs 100 100 0 135 0 0 0>
, <&key_physical_attrs 100 100 100 135 0 0 0>
, <&key_physical_attrs 100 100 200 115 0 0 0>
, <&key_physical_attrs 100 100 300 100 0 0 0>
, <&key_physical_attrs 100 100 400 115 0 0 0>
, <&key_physical_attrs 100 100 500 135 0 0 0>
, <&key_physical_attrs 100 100 600 85 0 0 0>
, <&key_physical_attrs 100 100 1000 85 0 0 0>
, <&key_physical_attrs 100 100 1100 135 0 0 0>
, <&key_physical_attrs 100 100 1200 115 0 0 0>
, <&key_physical_attrs 100 100 1300 100 0 0 0>
, <&key_physical_attrs 100 100 1400 115 0 0 0>
, <&key_physical_attrs 100 100 1500 135 0 0 0>
, <&key_physical_attrs 100 100 1600 135 0 0 0>
, <&key_physical_attrs 100 100 0 235 0 0 0>
, <&key_physical_attrs 100 100 100 235 0 0 0>
, <&key_physical_attrs 100 100 200 215 0 0 0>
, <&key_physical_attrs 100 100 300 200 0 0 0>
, <&key_physical_attrs 100 100 400 215 0 0 0>
, <&key_physical_attrs 100 100 500 235 0 0 0>
, <&key_physical_attrs 100 100 600 205 0 0 0>
, <&key_physical_attrs 100 100 1000 205 0 0 0>
, <&key_physical_attrs 100 100 1100 235 0 0 0>
, <&key_physical_attrs 100 100 1200 215 0 0 0>
, <&key_physical_attrs 100 100 1300 200 0 0 0>
, <&key_physical_attrs 100 100 1400 215 0 0 0>
, <&key_physical_attrs 100 100 1500 235 0 0 0>
, <&key_physical_attrs 100 100 1600 235 0 0 0>
, <&key_physical_attrs 100 100 0 335 0 0 0>
, <&key_physical_attrs 100 100 100 335 0 0 0>
, <&key_physical_attrs 100 100 200 315 0 0 0>
, <&key_physical_attrs 100 100 300 300 0 0 0>
, <&key_physical_attrs 100 100 400 315 0 0 0>
, <&key_physical_attrs 100 100 500 335 0 0 0>
, <&key_physical_attrs 100 100 600 335 3000 550 435>
, <&key_physical_attrs 100 100 700 335 3000 550 435>
, <&key_physical_attrs 100 100 900 335 (-3000) 1150 435>
, <&key_physical_attrs 100 100 1000 335 (-3000) 1150 435>
, <&key_physical_attrs 100 100 1100 335 0 0 0>
, <&key_physical_attrs 100 100 1200 315 0 0 0>
, <&key_physical_attrs 100 100 1300 300 0 0 0>
, <&key_physical_attrs 100 100 1400 315 0 0 0>
, <&key_physical_attrs 100 100 1500 335 0 0 0>
, <&key_physical_attrs 100 100 1600 335 0 0 0>
, <&key_physical_attrs 100 100 0 435 0 0 0>
, <&key_physical_attrs 100 100 100 435 0 0 0>
, <&key_physical_attrs 100 100 200 415 0 0 0>
, <&key_physical_attrs 100 100 300 400 0 0 0>
, <&key_physical_attrs 100 100 450 435 1000 450 435>
, <&key_physical_attrs 100 100 600 435 3000 550 435>
, <&key_physical_attrs 100 100 700 435 3000 550 435>
, <&key_physical_attrs 100 100 900 435 (-3000) 1150 435>
, <&key_physical_attrs 100 100 1000 435 (-3000) 1150 435>
, <&key_physical_attrs 100 100 1150 435 (-1000) 1250 435>
, <&key_physical_attrs 100 100 1300 400 0 0 0>
, <&key_physical_attrs 100 100 1400 415 0 0 0>
, <&key_physical_attrs 100 100 1500 435 0 0 0>
, <&key_physical_attrs 100 100 1600 435 0 0 0>
;
};
};

View File

@@ -5,11 +5,17 @@
*/ */
#include <dt-bindings/zmk/matrix_transform.h> #include <dt-bindings/zmk/matrix_transform.h>
#include "redox-layouts.dtsi"
&redox_physical_layout {
transform = <&default_transform>;
};
/ { / {
chosen { chosen {
zmk,kscan = &kscan0; zmk,kscan = &kscan0;
zmk,matrix-transform = &default_transform; zmk,physical-layout = &redox_physical_layout;
}; };
default_transform: keymap_transform_0 { default_transform: keymap_transform_0 {

View File

@@ -15,6 +15,7 @@
compatible = "zmk,keymap" ; compatible = "zmk,keymap" ;
default_layer { default_layer {
display-name = "Default Layer";
// -------------------------------------------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------------------------------------
// | ESC | 1 | 2 | 3 | 4 | 5 | --- | 6 | 7 | 8 | 9 | 0 | BSPC | // | ESC | 1 | 2 | 3 | 4 | 5 | --- | 6 | 7 | 8 | 9 | 0 | BSPC |
// | TAB | Q | W | E | R | T | ( | --- | ) | Y | U | I | O | P | - | // | TAB | Q | W | E | R | T | ( | --- | ) | Y | U | I | O | P | - |
@@ -32,6 +33,7 @@
}; };
lower_layer { lower_layer {
display-name = "Lower Layer";
// -------------------------------------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------------------------------
// | ESC | 1 | 2 | 3 | 4 | 5 | --- | 6 | 7 | 8 | 9 | 0 | DEL | // | ESC | 1 | 2 | 3 | 4 | 5 | --- | 6 | 7 | 8 | 9 | 0 | DEL |
// | ESC | 1 | 2 | 3 | 4 | 5 | ( | --- | ) | 6 | 7 | 8 | 9 | 0 | DEL | // | ESC | 1 | 2 | 3 | 4 | 5 | ( | --- | ) | 6 | 7 | 8 | 9 | 0 | DEL |
@@ -48,6 +50,7 @@
}; };
raise_layer { raise_layer {
display-name = "Raise Layer";
// ---------------------------------------------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------------------------------------------
// | ESC | 1 | 2 | 3 | 4 | 5 | --- | 6 | 7 | 8 | 9 | 0 | DEL | // | ESC | 1 | 2 | 3 | 4 | 5 | --- | 6 | 7 | 8 | 9 | 0 | DEL |
// | ESC | ! | @ | # | $ | % | ( | --- | ) | ^ | & | * | ( | ) | DEL | // | ESC | ! | @ | # | $ | % | ( | --- | ) | ^ | & | * | ( | ) | DEL |
@@ -64,6 +67,7 @@
}; };
adjust_layer { adjust_layer {
display-name = "Adjust Layer";
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
// | F1 | F2 | F3 | F4 | F5 | F6 | --- | F7 | F8 | F9 | F10 | F11 | F12 | // | F1 | F2 | F3 | F4 | F5 | F6 | --- | F7 | F8 | F9 | F10 | F11 | F12 |
// | TAB | | | | | | BOOTL | --- | ) | BT1 | BT2 | BT3 | BT4 | BT5 | OUTPUT TGL | // | TAB | | | | | | BOOTL | --- | ) | BT1 | BT2 | BT3 | BT4 | BT5 | OUTPUT TGL |

View File

@@ -14,6 +14,7 @@
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default_layer { default_layer {
display-name = "Default Layer";
// ------------------------------------------------------------------------------------- // -------------------------------------------------------------------------------------
// | TAB | Q | W | E | R | T | | Y | U | I | O | P | BSPC | // | TAB | Q | W | E | R | T | | Y | U | I | O | P | BSPC |
// | CTRL | A | S | D | F | G | | H | J | K | L | ; | ' | // | CTRL | A | S | D | F | G | | H | J | K | L | ; | ' |
@@ -28,6 +29,7 @@
}; };
lower_layer { lower_layer {
display-name = "Lower Layer";
// ------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------
// | | ! | @ | # | $ | % | | ^ | & | * | ( | ) | DEL | // | | ! | @ | # | $ | % | | ^ | & | * | ( | ) | DEL |
// | | _ | + | { | } | "|" | | LFT | DWN | UP | RGT | ` | ~ | // | | _ | + | { | } | "|" | | LFT | DWN | UP | RGT | ` | ~ |
@@ -42,6 +44,7 @@
}; };
raise_layer { raise_layer {
display-name = "Raise Layer";
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// | | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | DEL | // | | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | DEL |
// | | - | = | [ | ] | \ | | F1 | F2 | F3 | F4 | F5 | F6 | // | | - | = | [ | ] | \ | | F1 | F2 | F3 | F4 | F5 | F6 |
@@ -56,6 +59,7 @@
}; };
adjust_layer { adjust_layer {
display-name = "Adjust Layer";
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
// | RGB BRI+ | RGB SAT+ | RGB HUE+ | RGB ANI+ | | RGB TOG | | BT1 | BT2 | BT3 | BT4 | BT5 | BT CLR | // | RGB BRI+ | RGB SAT+ | RGB HUE+ | RGB ANI+ | | RGB TOG | | BT1 | BT2 | BT3 | BT4 | BT5 | BT CLR |
// | RGB BRI- | RGB SAT- | RGB HUE- | RGB ANI- | | | | | | | | | | // | RGB BRI- | RGB SAT- | RGB HUE- | RGB ANI- | | | | | | | | | |

View File

@@ -0,0 +1,52 @@
/*
* Copyright (c) 2024 The ZMK Contributors
*
* SPDX-License-Identifier: MIT
*/
#include <dt-bindings/led/led.h>
&pinctrl {
spi3_default: spi3_default {
group1 {
psels = <NRF_PSEL(SPIM_MOSI, 0, 6)>;
};
};
spi3_sleep: spi3_sleep {
group1 {
psels = <NRF_PSEL(SPIM_MOSI, 0, 6)>;
low-power-enable;
};
};
};
&spi3 {
compatible = "nordic,nrf-spim";
status = "okay";
pinctrl-0 = <&spi3_default>;
pinctrl-1 = <&spi3_sleep>;
pinctrl-names = "default", "sleep";
led_strip: ws2812@0 {
compatible = "worldsemi,ws2812-spi";
/* SPI */
reg = <0>; /* ignored, but necessary for SPI bindings */
spi-max-frequency = <4000000>;
/* WS2812 */
chain-length = <4>;
spi-one-frame = <0x70>;
spi-zero-frame = <0x40>;
color-mapping = <LED_COLOR_ID_GREEN LED_COLOR_ID_RED LED_COLOR_ID_BLUE>;
};
};
/ {
chosen {
zmk,underglow = &led_strip;
};
};

View File

@@ -1,3 +1,7 @@
# Encoder support. Uncomment to enable. # Uncomment the following two lines to add support for encoders
# CONFIG_EC11=y # CONFIG_EC11=y
# CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y # CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y
# Uncomment the following two lines to enable RGB underglow
# CONFIG_ZMK_RGB_UNDERGLOW=y
# CONFIG_WS2812_STRIP=y

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2022 The ZMK Contributors * Copyright (c) 2024 The ZMK Contributors
* *
* SPDX-License-Identifier: MIT * SPDX-License-Identifier: MIT
*/ */
@@ -8,20 +8,31 @@
#include <dt-bindings/zmk/keys.h> #include <dt-bindings/zmk/keys.h>
#include <dt-bindings/zmk/bt.h> #include <dt-bindings/zmk/bt.h>
#include <dt-bindings/zmk/outputs.h> #include <dt-bindings/zmk/outputs.h>
#include <dt-bindings/zmk/rgb.h>
#define BASE 0 #define BASE 0
#define BLE 1 #define BLE 1
#define RGB 2
/ { / {
behaviors {
rgb_encoder: rgb_encoder {
compatible = "zmk,behavior-sensor-rotate";
#sensor-binding-cells = <0>;
bindings = <&rgb_ug RGB_BRI>, <&rgb_ug RGB_BRD>;
};
};
keymap { keymap {
compatible = "zmk,keymap"; compatible = "zmk,keymap";
base_layer { base_layer {
display-name = "BASE"; display-name = "BASE";
bindings = < bindings = <
// ╭───────────────────────────┬──────────────────┬────────────┬─────────────╮ // ╭─────────────────────────┬──────────────────┬────────────┬────────────────╮
&mo BLE &kp C_PREVIOUS &kp C_PLAY_PAUSE &kp C_NEXT &kp C_MUTE &mo BLE &kp C_PREVIOUS &kp C_PLAY_PAUSE &kp C_NEXT &lt RGB C_MUTE
// ╰───────────────────────────┴──────────────────┴────────────┴─────────────╯ // ╰─────────────────────────┴──────────────────┴────────────┴────────────────╯
>; >;
sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>;
}; };
@@ -29,10 +40,20 @@
ble_layer { ble_layer {
display-name = "BLE"; display-name = "BLE";
bindings = < bindings = <
// ╭─────────────┬─────────────┬─────────────┬────────────┬─────────────╮ // ╭────────┬─────────────┬────────────┬────────────┬────────────╮
&trans &out OUT_TOG &bt BT_PRV &bt BT_NXT &bt BT_CLR &trans &out OUT_TOG &bt BT_PRV &bt BT_NXT &bt BT_CLR
// ╰─────────────┴─────────────┴─────────────┴────────────┴─────────────╯ // ╰────────┴─────────────┴────────────┴────────────┴────────────╯
>; >;
}; };
rgb_layer {
display-name = "RGB";
bindings = <
// ╭──────────────────┬─────────────────┬─────────────────┬──────────────────────────────────┬────────╮
&rgb_ug RGB_TOG &rgb_ug RGB_EFR &rgb_ug RGB_EFF &rgb_ug RGB_COLOR_HSB(307,89,98) &trans
// ╰──────────────────┴─────────────────┴─────────────────┴──────────────────────────────────┴────────╯
>;
sensor-bindings = <&rgb_encoder>;
};
}; };
}; };

View File

@@ -7,3 +7,4 @@ requires: [pro_micro]
features: features:
- keys - keys
- encoder - encoder
- underglow

View File

@@ -22,6 +22,7 @@
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default_layer { default_layer {
display-name = "Default Layer";
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
// | | | ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | DEL | // | | | ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | DEL |
// | TAB | Q | W | E | R | T | Y | U | I | O | P | BSPC | // | TAB | Q | W | E | R | T | Y | U | I | O | P | BSPC |
@@ -39,6 +40,7 @@
}; };
lower_layer { lower_layer {
display-name = "Lower Layer";
// -------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------
// | | | | F9 | F10 | F11 | F12 | INS | PAU | SCR | PSCR | | // | | | | F9 | F10 | F11 | F12 | INS | PAU | SCR | PSCR | |
// | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | | // | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | |
@@ -56,6 +58,7 @@
}; };
raise_layer { raise_layer {
display-name = "Raise Layer";
// -------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------
// | | | | F9 | F10 | F11 | F12 | MUTE | VOL+ | VOL- | PLAY | | // | | | | F9 | F10 | F11 | F12 | MUTE | VOL+ | VOL- | PLAY | |
// | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | | // | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | |
@@ -73,6 +76,7 @@
}; };
adjust_layer { adjust_layer {
display-name = "Adjust Layer";
// ------------------------------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------------------------------
// | | | BT CLR | BT1 | BT2 | BT3 | BT4 | BT5 | | | | BT CLR | // | | | BT CLR | BT1 | BT2 | BT3 | BT4 | BT5 | | | | BT CLR |
// | RGB BRI+ | RGB SAT+ | RGB HUE+ | RGB ANI+ | | RGB TOG | | | | | | | // | RGB BRI+ | RGB SAT+ | RGB HUE+ | RGB ANI+ | | RGB TOG | | | | | | |
@@ -90,6 +94,7 @@
}; };
nav_layer { nav_layer {
display-name = "Nav Layer";
// ------------------------------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------------------------------
// | | | ESC | | | | | | | | | DEL | // | | | ESC | | | | | | | | | DEL |
// | TAB | | UP | | | | | | | | | BSPC | // | TAB | | UP | | | | | | | | | BSPC |

View File

@@ -13,6 +13,7 @@
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default_layer { default_layer {
display-name = "Default Layer";
// ------------------- // -------------------
// | 7 | 8 | 9 | // | 7 | 8 | 9 |
// | 4 | 5 | 6 | // | 4 | 5 | 6 |
@@ -28,6 +29,7 @@
}; };
nav_layer { nav_layer {
display-name = "Nav Layer";
// ----------------------- // -----------------------
// | BTNXT | HOME | PGUP | // | BTNXT | HOME | PGUP |
// | BTPRV | END | PGDN | // | BTPRV | END | PGDN |

View File

@@ -13,6 +13,7 @@
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default_layer { default_layer {
display-name = "Default Layer";
// -------------------------- // --------------------------
// | 7 | 8 | 9 | // | 7 | 8 | 9 |
// | 4 | 5 | 6 | // | 4 | 5 | 6 |
@@ -30,6 +31,7 @@
}; };
nav_layer { nav_layer {
display-name = "Nav Layer";
// -------------------------- // --------------------------
// | BT_CLR | HOME | PGUP | // | BT_CLR | HOME | PGUP |
// | _ | END | PGDN | // | _ | END | PGDN |

View File

@@ -13,6 +13,7 @@
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default_layer { default_layer {
display-name = "Default Layer";
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
// | TAB | Q | W | E | R | T | | Y | U | I | O | P | BSPC | // | TAB | Q | W | E | R | T | | Y | U | I | O | P | BSPC |
// | CTRL | A | S | D | F | G | | H | J | K | L | ; | ' | // | CTRL | A | S | D | F | G | | H | J | K | L | ; | ' |
@@ -26,6 +27,7 @@
>; >;
}; };
lower_layer { lower_layer {
display-name = "Lower Layer";
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
// | TAB | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | BSPC | // | TAB | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | BSPC |
// | BTCLR| BT1 | BT2 | BT3 | BT4 | BT5 | | LFT | DWN | UP | RGT | | | // | BTCLR| BT1 | BT2 | BT3 | BT4 | BT5 | | LFT | DWN | UP | RGT | | |
@@ -40,6 +42,7 @@
}; };
raise_layer { raise_layer {
display-name = "Raise Layer";
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
// | TAB | ! | @ | # | $ | % | | ^ | & | * | ( | ) | BSPC | // | TAB | ! | @ | # | $ | % | | ^ | & | * | ( | ) | BSPC |
// | CTRL | | | | | | | - | = | [ | ] | \ | ` | // | CTRL | | | | | | | - | = | [ | ] | \ | ` |

View File

@@ -33,6 +33,7 @@ As such, those are in use within the default layer at this time.*/
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default_layer { default_layer {
display-name = "Default Layer";
// --------------------------------------------------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------------------------------------------------
// | GRAVE | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | DEL | // | GRAVE | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | DEL |
// | TAB | Q | W | E | R | T | | Y | U | I | O | P | BSPC | // | TAB | Q | W | E | R | T | | Y | U | I | O | P | BSPC |
@@ -48,6 +49,7 @@ As such, those are in use within the default layer at this time.*/
>; >;
}; };
lower_layer { lower_layer {
display-name = "Lower Layer";
// --------------------------------------------------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------------------------------------------------
// | | | | | | | | | | | | | | // | | | | | | | | | | | | | |
// | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | | // | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | |
@@ -63,6 +65,7 @@ As such, those are in use within the default layer at this time.*/
>; >;
}; };
raise_layer { raise_layer {
display-name = "Raise Layer";
// --------------------------------------------------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------------------------------------------------
// | | | | | | | | | | | | | | // | | | | | | | | | | | | | |
// | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | DEL | // | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | DEL |
@@ -78,6 +81,7 @@ As such, those are in use within the default layer at this time.*/
>; >;
}; };
adjust_layer { adjust_layer {
display-name = "Adjust Layer";
// --------------------------------------------------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------------------------------------------------
// | ` | ! | @ | # | $ | % | | ^ | & | * | ( | ) | EP TOG | // | ` | ! | @ | # | $ | % | | ^ | & | * | ( | ) | EP TOG |
// | BT CLR | BT SEL0 | BT SEL1 | BT SEL2 | BGT SEL3 | BT SEL4 | | RGB EFF+ | RGB HUE+ | RGB SAT+ | RGB SPD+ | RGB BRI+ | RGB TOG | // | BT CLR | BT SEL0 | BT SEL1 | BT SEL2 | BGT SEL3 | BT SEL4 | | RGB EFF+ | RGB HUE+ | RGB SAT+ | RGB SPD+ | RGB BRI+ | RGB TOG |

View File

@@ -14,6 +14,7 @@
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default_layer { default_layer {
display-name = "Default Layer";
// ------------------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------------------
// | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` | // | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` |
// | TAB | Q | W | E | R | T | | Y | U | I | O | P | - | // | TAB | Q | W | E | R | T | | Y | U | I | O | P | - |
@@ -32,6 +33,7 @@
}; };
lower_layer { lower_layer {
display-name = "Lower Layer";
// ------------------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------------------
// | BTCLR | BT1 | BT2 | BT3 | BT4 | BT5 | | | | | | | | // | BTCLR | BT1 | BT2 | BT3 | BT4 | BT5 | | | | | | | |
// | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | // | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 |
@@ -50,6 +52,7 @@
}; };
raise_layer { raise_layer {
display-name = "Raise Layer";
// ------------------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------------------
// | | | | | | | | | | | | | | // | | | | | | | | | | | | | |
// | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | | // | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | |

View File

@@ -22,6 +22,7 @@
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default_layer { default_layer {
display-name = "Default Layer";
// ------------------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------------------
// | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` | // | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` |
// | TAB | Q | W | E | R | T | | Y | U | I | O | P | - | // | TAB | Q | W | E | R | T | | Y | U | I | O | P | - |
@@ -40,6 +41,7 @@
}; };
lower_layer { lower_layer {
display-name = "Lower Layer";
// ------------------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------------------
// | BTCLR | BT1 | BT2 | BT3 | BT4 | BT5 | | | | | | | | // | BTCLR | BT1 | BT2 | BT3 | BT4 | BT5 | | | | | | | |
// | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | // | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 |
@@ -58,6 +60,7 @@
}; };
raise_layer { raise_layer {
display-name = "Raise Layer";
// ------------------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------------------
// | | | | | | | | | | | | | | // | | | | | | | | | | | | | |
// | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | | // | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | |

View File

@@ -63,6 +63,7 @@
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default_layer { default_layer {
display-name = "Default Layer";
bindings = < bindings = <
&kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P
&kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SQT &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SQT
@@ -72,6 +73,7 @@
}; };
left_layer { left_layer {
display-name = "Left Layer";
bindings = < bindings = <
&kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0
&kp TAB &kp LC(S) &kp DQT &kp PIPE2 &kp HASH &kp MINUS &kp EQUAL &kp LBKT &kp RBKT &kp DEL &kp TAB &kp LC(S) &kp DQT &kp PIPE2 &kp HASH &kp MINUS &kp EQUAL &kp LBKT &kp RBKT &kp DEL
@@ -81,6 +83,7 @@
}; };
right_layer { right_layer {
display-name = "Right Layer";
bindings = < bindings = <
&kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp KP_MULTIPLY &kp LPAR &kp RPAR &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp KP_MULTIPLY &kp LPAR &kp RPAR
&kp HASH &kp QMARK &kp FSLH &kp COLON &kp SEMI &kp MINUS &kp KP_EQUAL &kp LBRC &kp RBRC &kp BSPC &kp HASH &kp QMARK &kp FSLH &kp COLON &kp SEMI &kp MINUS &kp KP_EQUAL &kp LBRC &kp RBRC &kp BSPC
@@ -90,6 +93,7 @@
}; };
tri_layer { tri_layer {
display-name = "Tri Layer";
bindings = < bindings = <
&kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &trans &trans &trans &trans &trans &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &trans &trans &trans &trans &trans
&kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &trans &kp PG_UP &kp K_VOL_UP &kp K_MUTE &trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &trans &kp PG_UP &kp K_VOL_UP &kp K_MUTE &trans

View File

@@ -13,6 +13,7 @@
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default_layer { default_layer {
display-name = "Default Layer";
// ------------------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------------------
// | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - | // | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - |
// | TAB | Q | W | E | R | T | | Y | U | I | O | P | \ | // | TAB | Q | W | E | R | T | | Y | U | I | O | P | \ |

View File

@@ -0,0 +1,80 @@
/*
* Copyright (c) 2025 The ZMK Contributors
*
* SPDX-License-Identifier: MIT
*/
#include <physical_layouts.dtsi>
/ {
tester_position_map {
compatible = "zmk,physical-layout-position-map";
complete;
pinout_map: pinout_positions {
physical-layout = <&physical_layout0>;
positions = <0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17>;
};
inline_map: single_row_positions {
physical-layout = <&physical_layout1>;
positions = <0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17>;
};
};
physical_layout0: physical_layout_0 {
compatible = "zmk,physical-layout";
display-name = "Pro Micro Pinout";
// Map key positions to the Pro Micro pinout. The coordinate
// deltas jump around a little because some of the Pro Micro
// pins are out of order: D0 is "after" D1 and D16 is "before"
// D14.
keys // w h x y rot rx ry
= <&key_physical_attrs 100 100 0 100 0 0 0> // D0
, <&key_physical_attrs 100 100 0 0 0 0 0> // D1
, <&key_physical_attrs 100 100 0 400 0 0 0> // D2
, <&key_physical_attrs 100 100 0 500 0 0 0> // D3
, <&key_physical_attrs 100 100 0 600 0 0 0> // D4
, <&key_physical_attrs 100 100 0 700 0 0 0> // D5
, <&key_physical_attrs 100 100 0 800 0 0 0> // D6
, <&key_physical_attrs 100 100 0 900 0 0 0> // D7
, <&key_physical_attrs 100 100 0 1000 0 0 0> // D8
, <&key_physical_attrs 100 100 0 1100 0 0 0> // D9
, <&key_physical_attrs 100 100 600 1100 0 0 0> // D10
, <&key_physical_attrs 100 100 600 900 0 0 0> // D14
, <&key_physical_attrs 100 100 600 800 0 0 0> // D15
, <&key_physical_attrs 100 100 600 1000 0 0 0> // D16
, <&key_physical_attrs 100 100 600 700 0 0 0> // D18
, <&key_physical_attrs 100 100 600 600 0 0 0> // D19
, <&key_physical_attrs 100 100 600 500 0 0 0> // D20
, <&key_physical_attrs 100 100 600 400 0 0 0> // D21
;
};
physical_layout1: physical_layout_1 {
compatible = "zmk,physical-layout";
display-name = "Single Row";
// Single row of eighteen "keys", in ascending "Arduino" order.
keys // w h x y rot rx ry
= <&key_physical_attrs 100 100 0 0 0 0 0>
, <&key_physical_attrs 100 100 100 0 0 0 0>
, <&key_physical_attrs 100 100 200 0 0 0 0>
, <&key_physical_attrs 100 100 300 0 0 0 0>
, <&key_physical_attrs 100 100 400 0 0 0 0>
, <&key_physical_attrs 100 100 500 0 0 0 0>
, <&key_physical_attrs 100 100 600 0 0 0 0>
, <&key_physical_attrs 100 100 700 0 0 0 0>
, <&key_physical_attrs 100 100 800 0 0 0 0>
, <&key_physical_attrs 100 100 900 0 0 0 0>
, <&key_physical_attrs 100 100 1000 0 0 0 0>
, <&key_physical_attrs 100 100 1100 0 0 0 0>
, <&key_physical_attrs 100 100 1200 0 0 0 0>
, <&key_physical_attrs 100 100 1300 0 0 0 0>
, <&key_physical_attrs 100 100 1400 0 0 0 0>
, <&key_physical_attrs 100 100 1500 0 0 0 0>
, <&key_physical_attrs 100 100 1600 0 0 0 0>
, <&key_physical_attrs 100 100 1700 0 0 0 0>
;
};
};

View File

@@ -1,9 +1,18 @@
#include <dt-bindings/zmk/matrix_transform.h> #include <dt-bindings/zmk/matrix_transform.h>
#include "tester_pro_micro-layouts.dtsi"
&physical_layout0 {
transform = <&transform0>;
};
&physical_layout1 {
transform = <&transform0>;
};
/ { / {
chosen { chosen {
zmk,kscan = &kscan0; zmk,kscan = &kscan0;
zmk,matrix-transform = &transform0; zmk,physical-layout = &physical_layout0;
}; };
kscan0: kscan { kscan0: kscan {

View File

@@ -0,0 +1,12 @@
if SHIELD_TESTER_RPI_PICO
config ZMK_KEYBOARD_NAME
default "ZMK Tester"
config ZMK_BLE
def_bool n
config SETTINGS
def_bool n
endif

View File

@@ -0,0 +1,2 @@
config SHIELD_TESTER_RPI_PICO
def_bool $(shields_list_contains,tester_rpi_pico)

View File

@@ -0,0 +1,95 @@
/*
* Copyright (c) 2025 The ZMK Contributors
*
* SPDX-License-Identifier: MIT
*/
#include <physical_layouts.dtsi>
/ {
tester_position_map {
compatible = "zmk,physical-layout-position-map";
complete;
pinout_map: pinout_positions {
physical-layout = <&physical_layout0>;
positions = <0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25>;
};
inline_map: single_row_positions {
physical-layout = <&physical_layout1>;
positions = <0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25>;
};
};
physical_layout0: physical_layout_0 {
compatible = "zmk,physical-layout";
display-name = "Rpi Pico Pinout";
kscan = <&kscan0>;
transform = <&matrix_transform0>;
keys // w h x y rot rx ry
= <&key_physical_attrs 100 100 0 0 0 0 0>
, <&key_physical_attrs 100 100 0 100 0 0 0>
, <&key_physical_attrs 100 100 0 300 0 0 0>
, <&key_physical_attrs 100 100 0 400 0 0 0>
, <&key_physical_attrs 100 100 0 500 0 0 0>
, <&key_physical_attrs 100 100 0 600 0 0 0>
, <&key_physical_attrs 100 100 0 800 0 0 0>
, <&key_physical_attrs 100 100 0 900 0 0 0>
, <&key_physical_attrs 100 100 0 1000 0 0 0>
, <&key_physical_attrs 100 100 0 1100 0 0 0>
, <&key_physical_attrs 100 100 0 1300 0 0 0>
, <&key_physical_attrs 100 100 0 1400 0 0 0>
, <&key_physical_attrs 100 100 0 1500 0 0 0>
, <&key_physical_attrs 100 100 0 1600 0 0 0>
, <&key_physical_attrs 100 100 0 1800 0 0 0>
, <&key_physical_attrs 100 100 0 1900 0 0 0>
, <&key_physical_attrs 100 100 600 1900 0 0 0>
, <&key_physical_attrs 100 100 600 1800 0 0 0>
, <&key_physical_attrs 100 100 600 1600 0 0 0>
, <&key_physical_attrs 100 100 600 1500 0 0 0>
, <&key_physical_attrs 100 100 600 1400 0 0 0>
, <&key_physical_attrs 100 100 600 1300 0 0 0>
, <&key_physical_attrs 100 100 600 1100 0 0 0>
, <&key_physical_attrs 100 100 600 900 0 0 0>
, <&key_physical_attrs 100 100 600 800 0 0 0>
, <&key_physical_attrs 100 100 600 600 0 0 0>
;
};
physical_layout1: physical_layout_1 {
compatible = "zmk,physical-layout";
display-name = "Single Row";
// Single row of eighteen "keys", in ascending "Arduino" order.
keys // w h x y rot rx ry
= <&key_physical_attrs 100 100 0 0 0 0 0>
, <&key_physical_attrs 100 100 100 0 0 0 0>
, <&key_physical_attrs 100 100 200 0 0 0 0>
, <&key_physical_attrs 100 100 300 0 0 0 0>
, <&key_physical_attrs 100 100 400 0 0 0 0>
, <&key_physical_attrs 100 100 500 0 0 0 0>
, <&key_physical_attrs 100 100 600 0 0 0 0>
, <&key_physical_attrs 100 100 700 0 0 0 0>
, <&key_physical_attrs 100 100 800 0 0 0 0>
, <&key_physical_attrs 100 100 900 0 0 0 0>
, <&key_physical_attrs 100 100 1000 0 0 0 0>
, <&key_physical_attrs 100 100 1100 0 0 0 0>
, <&key_physical_attrs 100 100 1200 0 0 0 0>
, <&key_physical_attrs 100 100 1300 0 0 0 0>
, <&key_physical_attrs 100 100 1400 0 0 0 0>
, <&key_physical_attrs 100 100 1500 0 0 0 0>
, <&key_physical_attrs 100 100 1600 0 0 0 0>
, <&key_physical_attrs 100 100 1700 0 0 0 0>
, <&key_physical_attrs 100 100 1800 0 0 0 0>
, <&key_physical_attrs 100 100 1900 0 0 0 0>
, <&key_physical_attrs 100 100 2000 0 0 0 0>
, <&key_physical_attrs 100 100 2100 0 0 0 0>
, <&key_physical_attrs 100 100 2200 0 0 0 0>
, <&key_physical_attrs 100 100 2300 0 0 0 0>
, <&key_physical_attrs 100 100 2400 0 0 0 0>
, <&key_physical_attrs 100 100 2500 0 0 0 0>
;
};
};

View File

@@ -0,0 +1,77 @@
#include <behaviors.dtsi>
#include <dt-bindings/zmk/keys.h>
#define PIN_MACRO(name, pin) \
/ { \
macros { \
name: name { \
compatible = "zmk,behavior-macro"; \
wait-ms = <5>; \
tap-ms = <5>; \
#binding-cells = <0>; \
bindings = <&kp P &kp I &kp N &kp SPACE>, pin, <&kp ENTER>; \
}; \
}; \
};
PIN_MACRO(pin0, <&kp N0>)
PIN_MACRO(pin1, <&kp N1>)
PIN_MACRO(pin2, <&kp N2>)
PIN_MACRO(pin3, <&kp N3>)
PIN_MACRO(pin4, <&kp N4>)
PIN_MACRO(pin5, <&kp N5>)
PIN_MACRO(pin6, <&kp N6>)
PIN_MACRO(pin7, <&kp N7>)
PIN_MACRO(pin8, <&kp N8>)
PIN_MACRO(pin9, <&kp N9>)
PIN_MACRO(pin10, <&kp N1 &kp N0>)
PIN_MACRO(pin11, <&kp N1 &kp N1>)
PIN_MACRO(pin12, <&kp N1 &kp N2>)
PIN_MACRO(pin13, <&kp N1 &kp N3>)
PIN_MACRO(pin14, <&kp N1 &kp N4>)
PIN_MACRO(pin15, <&kp N1 &kp N5>)
PIN_MACRO(pin16, <&kp N1 &kp N6>)
PIN_MACRO(pin17, <&kp N1 &kp N7>)
PIN_MACRO(pin18, <&kp N1 &kp N8>)
PIN_MACRO(pin19, <&kp N1 &kp N9>)
PIN_MACRO(pin20, <&kp N2 &kp N0>)
PIN_MACRO(pin21, <&kp N2 &kp N1>)
PIN_MACRO(pin22, <&kp N2 &kp N2>)
PIN_MACRO(pin26, <&kp N2 &kp N6>)
PIN_MACRO(pin27, <&kp N2 &kp N7>)
PIN_MACRO(pin28, <&kp N2 &kp N8>)
/ {
keymap {
compatible = "zmk,keymap";
default_layer {
bindings = <&pin0
&pin1
&pin2
&pin3
&pin4
&pin5
&pin6
&pin7
&pin8
&pin9
&pin10
&pin11
&pin12
&pin13
&pin14
&pin15
&pin16
&pin17
&pin18
&pin19
&pin20
&pin21
&pin22
&pin26
&pin27
&pin28>;
};
};
};

View File

@@ -0,0 +1,63 @@
#include <dt-bindings/zmk/matrix_transform.h>
#include "tester_rpi_pico-layouts.dtsi"
&physical_layout0 {
transform = <&transform0>;
};
&physical_layout1 {
transform = <&transform0>;
};
/ {
chosen {
zmk,kscan = &kscan0;
zmk,physical-layout = &physical_layout0;
};
kscan0: kscan {
compatible = "zmk,kscan-gpio-direct";
wakeup-source;
debounce-press-ms = <10>;
debounce-release-ms = <10>;
input-gpios
= <&pico_header 0 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pico_header 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pico_header 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pico_header 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pico_header 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pico_header 5 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pico_header 6 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pico_header 7 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pico_header 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pico_header 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pico_header 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pico_header 11 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pico_header 12 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pico_header 13 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pico_header 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pico_header 15 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pico_header 16 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pico_header 17 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pico_header 18 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pico_header 19 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pico_header 20 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pico_header 21 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pico_header 22 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pico_header 26 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pico_header 27 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pico_header 28 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
;
};
transform0: keymap_transform {
compatible = "zmk,matrix-transform";
columns = <26>;
rows = <1>;
map = <
RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9)
RC(0,10) RC(0,11) RC(0,12) RC(0,13) RC(0,14) RC(0,15) RC(0,16) RC(0,17) RC(0,18) RC(0,19)
RC(0,20) RC(0,21) RC(0,22) RC(0,23) RC(0,24) RC(0,25)
>;
};
};

View File

@@ -0,0 +1,6 @@
file_format: "1"
id: tester_rpi_pico
name: TesterRpiPico
type: shield
url: https://zmk.dev/docs/troubleshooting/hardware-issues
requires: [rpi_pico]

View File

@@ -0,0 +1,66 @@
/*
* Copyright (c) 2025 The ZMK Contributors
*
* SPDX-License-Identifier: MIT
*/
#include <physical_layouts.dtsi>
// The tester might not have any physical keys at all, so these
// physical layouts are pretty much imaginary.
/ {
tester_position_map {
compatible = "zmk,physical-layout-position-map";
complete;
pinout_map: pinout_positions {
physical-layout = <&physical_layout0>;
positions = <0 1 2 3 4 5 6 7 8 9 10>;
};
inline_map: single_row_positions {
physical-layout = <&physical_layout1>;
positions = <0 1 2 3 4 5 6 7 8 9 10>;
};
};
physical_layout0: physical_layout_0 {
compatible = "zmk,physical-layout";
display-name = "XIAO Pinout";
// Map key positions to the XIAO pinout.
keys // w h x y rot rx ry
= <&key_physical_attrs 100 100 0 0 0 0 0>
, <&key_physical_attrs 100 100 0 100 0 0 0>
, <&key_physical_attrs 100 100 0 200 0 0 0>
, <&key_physical_attrs 100 100 0 300 0 0 0>
, <&key_physical_attrs 100 100 0 400 0 0 0>
, <&key_physical_attrs 100 100 0 500 0 0 0>
, <&key_physical_attrs 100 100 0 600 0 0 0>
, <&key_physical_attrs 100 100 600 600 0 0 0>
, <&key_physical_attrs 100 100 600 500 0 0 0>
, <&key_physical_attrs 100 100 600 400 0 0 0>
, <&key_physical_attrs 100 100 600 300 0 0 0>
;
};
physical_layout1: physical_layout_1 {
compatible = "zmk,physical-layout";
display-name = "Single Row";
// Single row of eleven "keys".
keys // w h x y rot rx ry
= <&key_physical_attrs 100 100 0 0 0 0 0>
, <&key_physical_attrs 100 100 100 0 0 0 0>
, <&key_physical_attrs 100 100 200 0 0 0 0>
, <&key_physical_attrs 100 100 300 0 0 0 0>
, <&key_physical_attrs 100 100 400 0 0 0 0>
, <&key_physical_attrs 100 100 500 0 0 0 0>
, <&key_physical_attrs 100 100 600 0 0 0 0>
, <&key_physical_attrs 100 100 700 0 0 0 0>
, <&key_physical_attrs 100 100 800 0 0 0 0>
, <&key_physical_attrs 100 100 900 0 0 0 0>
, <&key_physical_attrs 100 100 1000 0 0 0 0>
;
};
};

View File

@@ -1,9 +1,18 @@
#include <dt-bindings/zmk/matrix_transform.h> #include <dt-bindings/zmk/matrix_transform.h>
#include "tester_xiao-layouts.dtsi"
&physical_layout0 {
transform = <&transform0>;
};
&physical_layout1 {
transform = <&transform0>;
};
/ { / {
chosen { chosen {
zmk,kscan = &kscan0; zmk,kscan = &kscan0;
zmk,matrix-transform = &transform0; zmk,physical-layout = &physical_layout0;
}; };
kscan0: kscan { kscan0: kscan {

View File

@@ -23,6 +23,7 @@
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default_layer { default_layer {
display-name = "Default Layer";
bindings = < bindings = <
&kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp SEMI &kp BSPC &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp SEMI &kp BSPC
&ht CAPS TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp APOS &kp RET &ht CAPS TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp APOS &kp RET
@@ -32,6 +33,7 @@
}; };
function_layer { function_layer {
display-name = "Function Layer";
bindings = < bindings = <
&kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp DEL &kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp DEL
&none &kp HOME &kp PG_UP &trans &trans &trans &kp LBKT &kp RBKT &kp EQUAL &kp BSLH &kp FSLH &trans &none &kp HOME &kp PG_UP &trans &trans &trans &kp LBKT &kp RBKT &kp EQUAL &kp BSLH &kp FSLH &trans
@@ -41,6 +43,7 @@
}; };
other_layer { other_layer {
display-name = "Other Layer";
bindings = < bindings = <
&kp PRINTSCREEN &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp PRINTSCREEN &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12
&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans

View File

@@ -44,6 +44,7 @@
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default_layer { default_layer {
display-name = "Default Layer";
bindings = < bindings = <
&kp KP_NUMLOCK &kp KP_ASTERISK &kp KP_MINUS &kp KP_NUMLOCK &kp KP_ASTERISK &kp KP_MINUS
&kp KP_NUMBER_7 &kp KP_NUMBER_8 &kp KP_NUMBER_9 &kp KP_PLUS &kp KP_NUMBER_7 &kp KP_NUMBER_8 &kp KP_NUMBER_9 &kp KP_PLUS
@@ -56,6 +57,7 @@
}; };
func_layer { func_layer {
display-name = "Func Layer";
bindings = < bindings = <
&none &sys_reset &bootloader &none &sys_reset &bootloader
&out OUT_TOG &out OUT_USB &out OUT_BLE &none &out OUT_TOG &out OUT_USB &out OUT_BLE &none

View File

@@ -13,6 +13,7 @@
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default_layer { default_layer {
display-name = "Default Layer";
bindings = < bindings = <
&kp X &kp X
&kp Z &kp Z

View File

@@ -13,6 +13,7 @@
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default_layer { default_layer {
display-name = "Default Layer";
/* QWERTY /* QWERTY
* *
* ,----------------------------------. ,----------------------------------. * ,----------------------------------. ,----------------------------------.
@@ -42,6 +43,7 @@
}; };
navnum_layer { navnum_layer {
display-name = "Navnum Layer";
/* NAVNUM /* NAVNUM
* *
* ,----------------------------------. ,----------------------------------. * ,----------------------------------. ,----------------------------------.
@@ -71,6 +73,7 @@
}; };
symbol_layer { symbol_layer {
display-name = "Symbol Layer";
/* SYM /* SYM
* *
* ,----------------------------------. ,----------------------------------. * ,----------------------------------. ,----------------------------------.
@@ -100,6 +103,7 @@
}; };
function_layer { function_layer {
display-name = "Function Layer";
/* FUNC /* FUNC
* *
* ,----------------------------------. ,----------------------------------. * ,----------------------------------. ,----------------------------------.

View File

@@ -24,6 +24,7 @@
compatible = "zmk,keymap"; compatible = "zmk,keymap";
default_layer { default_layer {
display-name = "Default Layer";
bindings = < bindings = <
&kp A &bl BL_TOG &kp A &bl BL_TOG
&rgb_ug RGB_EFF &bt BT_CLR &rgb_ug RGB_EFF &bt BT_CLR

View File

@@ -11,11 +11,20 @@ left_encoder: &encoder {
status = "disabled"; status = "disabled";
}; };
&arduino_serial {
status = "okay";
};
/ { / {
chosen { chosen {
zmk,physical-layout = &split_matrix_physical_layout; zmk,physical-layout = &split_matrix_physical_layout;
}; };
wired_split {
compatible = "zmk,wired-split";
device = <&arduino_serial>;
};
split_matrix_transform: split_matrix_transform { split_matrix_transform: split_matrix_transform {
compatible = "zmk,matrix-transform"; compatible = "zmk,matrix-transform";
rows = <4>; rows = <4>;

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