Compare commits

...

149 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
Pete Johanson
241ff39556 chore(main): release 0.2.1 (#2851) 2025-03-02 07:45:12 -07:00
Pete Johanson
f20e6ea759 fix(behaviors): Proper comma separated device list (#2850)
Properly generate the comma separated list of devs in caps word/
key repeat.
2025-03-02 06:49:07 -07:00
Pete Johanson
fadafc7759 chore(main): release 0.2.0 (#2693) 2025-03-01 11:29:58 -07:00
Pete Johanson
1e3e62c13d fix(pointing): Temp layer threading protection. (#2729)
fix(pointing): Temp layer threading protection.

Ensure all layer operations occur on the system work queue thread.

Fixes: #2719

fix(pointing): Handle layer events to disable events

Make the temp layer input processor propely handle layers getting
deactivated externally before the temp layer timeout.

Co-authored-by: Nicolas Munnich <98408764+Nick-Munnich@users.noreply.github.com>
2025-02-28 20:37:55 -05:00
Pete Johanson
21f54e7238 refactor(behaviors): Remove unneeded init funcs. (#2843)
Initialization functions are optional for Zephyr drivers, so remove
all our superfluous empty init functions.
2025-02-26 17:54:29 -05:00
Cem Aksoylar
7186528f77 fix(behaviors): Make multiple sticky keys work on same key position (#2758)
test(behaviors): Add same position sticky key tests

fix(behaviors): Make multiple sticky keys work on same key position

refactor(behaviors): Remove unused param2 in sticky keys
2025-02-26 17:54:08 -05:00
Pete Johanson
9406d39d14 refactor(behaviors): Small caps word RAM reduction. (#2842)
Don't use lazy initialized in-memory array of devices.
2025-02-26 17:01:04 -05:00
Nicolas Munnich
82216be635 chore: Add a deprecation warning to config/boards (#2811) 2025-02-26 15:16:50 -05:00
Xudong Zheng
ea267b0f35 fix(ble): enforce maximum length for dynamic device name (#2784) 2025-02-26 13:29:30 -05:00
Pete Johanson
2fe55c4c41 refactor(behaviors): Minor RAM usage tweaks (#2839)
Follow up cleanup of some config structs not marked as const.
2025-02-26 13:17:23 -05:00
Cem Aksoylar
d2eb6de7ad docs: Add query strings to tabs (#2840) 2025-02-25 16:31:57 -08:00
Pete Johanson
209085da73 refactor(behaviors): Add max-held tap-dance config (#2838)
refactor(behaviors): Add max-held tap-dance config

Add new `CONFIG_ZMK_BEHAVIOR_TAP_DANCE_MAX_HELD` config for reducing RAM
usage on more constrained devices.

refactor(behaviors): Move defaults to Kconfig.defaults
2025-02-25 14:12:27 -05:00
Pete Johanson
18d0d2f476 refactor(combos): Reduce combo RAM usage (#2837)
Properly mark combo configs as `const` so they are place in flash,
not RAM.
2025-02-25 13:38:51 -05:00
Cem Aksoylar
8575fc8a9d docs: Inline simple physical layout info in new shield guide (#2827)
docs: Inline simple physical layouts in new shield guide

docs: Fix broken anchor in module creation

docs: Make physical layout transform label consistent and comment
2025-02-17 15:59:54 -08:00
Cem Aksoylar
9d234cbb10 docs: Make default keymap in new shield guide complete (#2825)
Co-authored-by: Nicolas Munnich <98408764+Nick-Munnich@users.noreply.github.com>
2025-02-17 11:55:42 -08:00
Nicolas Munnich
e8ec9b65f8 docs: Add "planned: import/export keymap" to the studio features page (#2821) 2025-02-17 11:44:42 -08:00
Nicolas Munnich
d0d313409b docs: Improved some links to modules (#2822)
Co-authored-by: Cem Aksoylar <caksoylar@users.noreply.github.com>
2025-02-17 10:16:36 +01:00
Nicolas Munnich
5926269ea5 docs: Add KiCAD note and titles to physical layouts page (#2823)
docs: Note that Nick Coutsos' tool can import from KiCAD

docs: Add titles to some code blocks in physical layouts
2025-02-16 20:12:31 -08:00
Nicolas Munnich
eeb8a00778 docs: Add a page on module creation (#2456)
Co-authored-by: Cem Aksoylar <caksoylar@users.noreply.github.com>
2025-02-14 16:32:18 -08:00
Pete Johanson
aa3e5dd70f feat(display): Add config for display update period (#2819)
Add `CONFIG_ZMK_DISPLAY_TICK_PERIOD_MS` Kconfig to allow tweaking
the period between display updates.
2025-02-10 13:32:16 -05:00
Pete Johanson
627e6dbec9 feat(display): Add ability to set display on/off pin. (#2814)
Zephyr is still working on the plan upstream for generically controlling
display "backlight" pins with GPIO/PWM, so in the meantime, add our
own chosen property `zmk,display-led` that is set to an LED device child
to allow blanking/unblanking of devices that use a dedicated backlight
control pin.
2025-02-07 17:49:30 -07:00
Alex Rozhkov
424e53210e feat(shields): Add physical layout for Lotus58 (#2753)
Added physical layout and studio support for Lotus58.
2025-02-07 14:35:13 -05:00
Pete Johanson
4b4a8a35f3 fix(display): POSIX lvgl fixes (#2812)
fix(display): Do LVGL task processing in main on POSIX.

An SDL/Zephyr bug prevents proper display when SDL calls are
made from anything but the main thread, so add task handling
in our simple main function when on POSIX.

fix(usb): Compilation fix for 64-bit targets

Properly handle differences in the size of `size_t` on 64-bit
architectures.

fix(display): Imply, but don't force, LVGL mono theme

Some targets may be using color displays, so instead of forcing
on the mono theme, merely imply it to default it
2025-02-07 02:05:21 -05:00
Cem Aksoylar
0f7c11248a feat(pointing): Add pre-defined scroll scaler and mouse scroll tests (#2759)
feat(pointing): Add pre-defined scroll scaler

tests(pointing): Add mouse scroll tests
2025-02-04 10:27:14 -07:00
Nicolas Munnich
8e065d55b9 fix(kscan): Remove warning when keyboard is built without CONFIG_PM_DEVICE (#2808) 2025-02-01 11:16:52 -07:00
Pete Johanson
425256bc0d fix(display): Only default mono theme when 1bpp (#2804)
In order to have flexibility for color displays, only imply the mono
theme if we have 1bpp.
2025-01-31 22:53:35 -05:00
Cem Aksoylar
72b00b3f58 docs: Add pointers to final Kconfig/devicetree files (#2796)
docs: Add diagnosis pointers for Kconfig/devicetree outputs

docs: Add tip boxes for diagnosing config/devicetree changes
2025-01-25 13:04:50 -08:00
Cem Aksoylar
e4885d5d4c docs: Update keymaps index intro (#2790)
Co-authored-by: Nicolas Munnich <98408764+Nick-Munnich@users.noreply.github.com>
2025-01-25 12:30:50 -08:00
Cem Aksoylar
4f72e7cb25 docs: Update intro page (#2767) 2025-01-22 16:58:15 -08:00
Cem Aksoylar
4882a62c40 docs: Update dongle FAQ entry (#2788) 2025-01-22 10:09:03 +01:00
Xudong Zheng
40e9e5c5fa test(split): remove build banner from snapshot (#2787)
The test snapshot will otherwise be outdated each time there is a new
commit on https://github.com/zmkfirmware/zephyr.
2025-01-21 12:40:27 -05:00
Nick Winans
40ea92d201 docs: Link to ZMK Studio download page (#2783) 2025-01-20 21:30:55 -08:00
dependabot[bot]
db2fc2bffd chore(deps): bump katex from 0.16.11 to 0.16.21 in /docs (#2774)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-17 15:15:54 -08:00
Pete Johanson
e4f1454e0b refactor(keymap): Reduce flash usage for studio builds (#2771)
When building for ZMK Studio, we can use the constant stock keymap
for init of the in-memory keymap, to avoid duplicate flash usage
for the keymap from the devicetree.
2025-01-15 16:51:26 -05:00
Pete Johanson
c367d8f636 feat(core): Make physical layout key rotation optional (#2770)
To be able to save on flash space, for layouts on space constrained
devices that don't require rotation, make key rotation props
optional behind a new Kconfig flag.
2025-01-15 16:48:18 -05:00
Pete Johanson
6941abc2af fix(drivers): Proper static/const for data/config (#2769)
Save a tiny bit of RAM by properly marking our device config
struct instances const consistently, and also add missing static
modifiers to properly isolate config/data for drivers.
2025-01-15 12:35:35 -05:00
Cem Aksoylar
700e9b264f docs: Move more sections under hardware integration (#2704)
docs: Move battery sensing hardware integration to new page

docs: Refactor lighting hardware integrations to new category

docs: Link to pin control page from lighting pages

docs: Consolidate lighting feature pages

docs: Remove incorrect redirect

docs: Consolidate lighting config pages
2025-01-13 21:14:25 -08:00
Pete Johanson
8dddb1d9d7 Testing: split input test (#2762)
test(pointing): Add mock input device.

New mock input device to generate input events for tests.

test(split): Add peripheral input test.

Test event propagation from peripheral input devices.

fix(split): Proper scoping for local within switch.

Minor compile fix.

chore: Fix up test snapshots after logging changes.

Adjust the test snapshots after logging changes to the central.

fix(kscan): Don't fire last mock event twice.

Fix a bug where the kscan mock would raise the last mock event
twice before halting processing.
2025-01-13 15:15:16 -05:00
Cem Aksoylar
022603ec16 docs: Fix broken anchors in dongle page (#2764) 2025-01-13 09:21:55 +01:00
Aasim-A
b93bf6d3fd docs: Fix incorrect kscan value (#2763) 2025-01-12 15:51:30 +01:00
Pete Johanson
d0ee30bfaa Testing: split ble encoder test (#2754)
test(sensors): Add mock encoder sensor

Add a new mock sensor driver for generating mock encoder sensor channel
data.

test(split): Add a peripheral sensor split test

Test BLE split logic for peripheral sensors (encoders).
2025-01-06 14:41:02 -05:00
Cem Aksoylar
3377ed02a8 docs: Improve pointing docs (#2703)
docs: Add missing code fence languages in pointing

docs: Fix default msc exponent in example

docs: Make pointing hardware integration follow semantic structure
2025-01-04 11:15:32 -08:00
Pete Johanson
36508c27fd fix(studio): Allow adding layers after a layer move (#2748)
Properly return the available layers in the move layer response.
2025-01-03 19:19:19 -05:00
Pete Johanson
e6343f44ce test(split): Test split HID indicator setting. (#2747)
Add integration test for HID indicator state being propagated
to split peripherals.
2025-01-03 18:05:18 -05:00
Nicolas Munnich
bc6bb90414 docs: added a page on dongles.
Co-authored-by: rasmuskoit <rasmuskoit@gmail.com>
Co-authored-by: Cem Aksoylar <caksoylar@users.noreply.github.com>
2025-01-02 10:44:50 -08:00
Willow Herring
05abd677c5 chore: Add trailing lines to fix build warnings (#2743)
When building a unibody or central warnings get thrown for the backslash newlines at EOF in combos.h and input_listeners.h. Adding a trailing newline to the affected files rectifies this
2025-01-02 08:58:49 -07:00
Pete Johanson
f0a77b888a fix(combos): Properly report combos len with emply block (#2739)
Handle the scenario where there is an empty combos block and return
a zero combos length.
2025-01-01 18:14:53 -05:00
Pete Johanson
85aba16eec testing: Add split BLE tests (#2737)
* Enhance the BLE test runner to build additional peripheral builds
  when detecting peripheral*.overlay files in the test.
* Add basic and multiple-peripheral tests to exercise the testing
  support
* Add test for triggering local behaviors on split peripherals.

fix(ble): Fix building split code w/o settings

* Properly exclude storing peripheral addresses to settings when
  settings support isn't turned on.
2025-01-01 18:13:47 -05:00
Robert U
3f6841c95f chore: Allow running tests from anywhere and support EXTRA_MODULES (#2725)
* Allow running tests from anywhere in the workspace
* Trigger test workflow if run-test.sh changes
2024-12-20 15:19:56 -05:00
Nicolas Munnich
2f172f63c2 chore: Docs bullet point in PR checklist (#2718) 2024-12-20 14:31:37 -05:00
Nicolas Munnich
bb486619a1 fix: Kconfig refactor now works correctly with external modules (#2711) 2024-12-18 23:32:30 -07:00
Pete Johanson
cb867f92db Feature: input processor behavior invocation (#2714)
refactor(pointing): Allow stopping event propagation

    Allow input processors to return a special value if a given input event
    should not be further processed/propagated.

feat(pointing): Add behavior input processor

    Add the ability to intercept certain input events and trigger behaviors
    when they occur.

Co-authored-by: Jorge Villalobos <minusfive@users.noreply.github.com>
Co-authored-by: Cem Aksoylar <caksoylar@users.noreply.github.com>
2024-12-17 20:50:06 -05:00
dependabot[bot]
d0016b34f8 chore(deps-dev): bump the development group across 1 directory with 7 updates (#2698)
Bumps the development group with 7 updates in the /docs directory:

| Package | From | To |
| --- | --- | --- |
| [@docusaurus/module-type-aliases](https://github.com/facebook/docusaurus/tree/HEAD/packages/docusaurus-module-type-aliases) | `3.6.1` | `3.6.3` |
| [@docusaurus/tsconfig](https://github.com/facebook/docusaurus/tree/HEAD/packages/docusaurus-tsconfig) | `3.5.2` | `3.6.3` |
| [@docusaurus/types](https://github.com/facebook/docusaurus/tree/HEAD/packages/docusaurus-types) | `3.6.1` | `3.6.3` |
| [json-schema-to-typescript](https://github.com/bcherny/json-schema-to-typescript) | `15.0.2` | `15.0.3` |
| [prettier](https://github.com/prettier/prettier) | `3.3.3` | `3.4.2` |
| [typescript](https://github.com/microsoft/TypeScript) | `5.6.3` | `5.7.2` |
| [webpack](https://github.com/webpack/webpack) | `5.96.1` | `5.97.1` |



Updates `@docusaurus/module-type-aliases` from 3.6.1 to 3.6.3
- [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.6.3/packages/docusaurus-module-type-aliases)

Updates `@docusaurus/tsconfig` from 3.5.2 to 3.6.3
- [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.6.3/packages/docusaurus-tsconfig)

Updates `@docusaurus/types` from 3.6.1 to 3.6.3
- [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.6.3/packages/docusaurus-types)

Updates `json-schema-to-typescript` from 15.0.2 to 15.0.3
- [Changelog](https://github.com/bcherny/json-schema-to-typescript/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bcherny/json-schema-to-typescript/commits)

Updates `prettier` from 3.3.3 to 3.4.2
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.3.3...3.4.2)

Updates `typescript` from 5.6.3 to 5.7.2
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release.yml)
- [Commits](https://github.com/microsoft/TypeScript/compare/v5.6.3...v5.7.2)

Updates `webpack` from 5.96.1 to 5.97.1
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.96.1...v5.97.1)

---
updated-dependencies:
- dependency-name: "@docusaurus/module-type-aliases"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: development
- dependency-name: "@docusaurus/tsconfig"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: development
- dependency-name: "@docusaurus/types"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: development
- dependency-name: json-schema-to-typescript
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: development
- dependency-name: prettier
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: development
- dependency-name: typescript
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: development
- dependency-name: webpack
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-13 10:07:46 +01:00
Nicolas Munnich
ec6b770947 docs: Minor touchups to studio related bits (#2707) 2024-12-13 10:03:08 +01:00
Nicolas Munnich
4ef231f4bb feat: Added toggle-mode, allowing toggle-on and toggle-off (#2555)
feat: added toggle mode to key and layer toggles

docs: documented toggle mode changes
2024-12-12 19:13:56 -05:00
Joel Spadin
7013158a67 fix: Fix warnings in nanopb encoding code (#2643)
The "arg" field on nanopb structs is a void* because it is shared
between the encode and decode callbacks, even though the encode
callback probably should not modify the data. We are passing const data
using this non-const pointer, which causes warnings about discarding
const. This commit explicitly casts to void* to suppress these warnings.
2024-12-11 15:00:48 -05:00
svek1
a8f5ab67b5 fix: allow kscan-composite to wake up device. (#2682)
* include kscan.yaml so we can set kscan-composite as a wakeup source
* modify enable and disable callback to check for wakeup capabilities of
composite and children
* disable children wakeup source

The disable function is only called
when the composite is not an enabled wakeup source.
In that case the children should also not be an enabled
wakeup source, so they can get suspended
2024-12-11 14:46:22 -05:00
Pete Johanson
84baf929c9 fix(pointing): Complete header rename missed in refactor (#2702)
* Update a few mouse.h -> pointing.h missed refactors.
2024-12-10 02:29:35 -05:00
Pete Johanson
6b40bfda53 feat(mouse): Add mouse move and scroll support (#2477)
* feat(mouse): Add mouse move and scroll support

    * Use Zephyr input subsystem for all pointers.
    * Input processors for modifying events, e.g. scaling, swapping
      codes, temporary (mouse) layers, etc.
    * Mouse move/scroll behaviors.
    * Infrastructure in place for physical pointer input devices.

* feat: Add input split support.

* docs: Add initial pointer docs.

---------

Co-authored-by: Cem Aksoylar <caksoylar@users.noreply.github.com>
Co-authored-by: Alexander Krikun <krikun98@gmail.com>
Co-authored-by: Robert U <urob@users.noreply.github.com>
Co-authored-by: Shawn Meier <ftc@users.noreply.github.com>
Co-authored-by: Chris Andreae <chris@andreae.gen.nz>
Co-authored-by: Anant Thazhemadam <47104651+thazhemadam@users.noreply.github.com>
Co-authored-by: Erik Tollerud <erik.tollerud@gmail.com>
Co-authored-by: Nicolas Munnich <98408764+Nick-Munnich@users.noreply.github.com>
2024-12-09 19:45:41 -05:00
pabile
7e8c542c94 feat(studio): Add ortho_4x10 grid layout (#2651)
* added 4x10 grid layout

Co-authored-by: Cem Aksoylar <caksoylar@users.noreply.github.com>
2024-12-09 12:53:54 -05:00
Pete Johanson
0820991901 fix(studio): Properly return complete keymap from RPC (#2696)
Ensure the set active physical layout RPC returns the full keymap
details including the available layers.
2024-12-06 18:10:58 -05:00
yuki
b26058b6c7 feat(boards): Update for mikoto board definition (#1946)
* Set default revision to 5.20
* update mikoto board defs
* add revision info to mikoto.zmk.yml
* use zephyr aliases to handle mikoto_520
* enable pull-ups for on-board i2c
2024-12-05 02:02:58 -05:00
Nicolas Munnich
40925d48e6 refactor(Kconfig): Extracted designer defaults out into new files (#2537)
docs: Fix incorrect kconfig default values

fix(Kconfig): Added a name to EC11's trigger mode choice, allowing it to be set in device Kconfig.defconfig

refactor(Kconfig): Moved designer defaults out into new files
2024-12-04 16:19:35 -05:00
572 changed files with 21935 additions and 8721 deletions

View File

@@ -6,3 +6,4 @@
- [ ] Additional tests are included, if changing behaviors/core code that is testable. - [ ] Additional tests are included, if changing behaviors/core code that is testable.
- [ ] Proper Copyright + License headers added to applicable files (Generally, we stick to "The ZMK Contributors" for copyrights to help avoid churn when files get edited) - [ ] Proper Copyright + License headers added to applicable files (Generally, we stick to "The ZMK Contributors" for copyrights to help avoid churn when files get edited)
- [ ] [Pre-commit](https://zmk.dev/docs/development/local-toolchain/pre-commit) used to check formatting of files, commit messages, etc. - [ ] [Pre-commit](https://zmk.dev/docs/development/local-toolchain/pre-commit) used to check formatting of files, commit messages, etc.
- [ ] Includes any necessary [documentation changes](https://zmk.dev/docs/development/contributing/documentation).

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

@@ -4,12 +4,14 @@ on:
push: push:
paths: paths:
- ".github/workflows/test.yml" - ".github/workflows/test.yml"
- "app/run-test.sh"
- "app/tests/**" - "app/tests/**"
- "app/src/**" - "app/src/**"
- "app/include/**" - "app/include/**"
pull_request: pull_request:
paths: paths:
- ".github/workflows/test.yml" - ".github/workflows/test.yml"
- "app/run-test.sh"
- "app/tests/**" - "app/tests/**"
- "app/src/**" - "app/src/**"
- "app/include/**" - "app/include/**"
@@ -59,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.1.0"} {".":"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,99 @@
# 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)
### Bug Fixes
* **behaviors:** Proper comma separated device list ([#2850](https://github.com/zmkfirmware/zmk/issues/2850)) ([f20e6ea](https://github.com/zmkfirmware/zmk/commit/f20e6ea7594b49eef1e3acc017529073a0409962))
## [0.2.0](https://github.com/zmkfirmware/zmk/compare/v0.1.0...v0.2.0) (2025-03-01)
### Features
* Added `toggle-mode`, allowing toggle-on and toggle-off ([#2555](https://github.com/zmkfirmware/zmk/issues/2555)) ([4ef231f](https://github.com/zmkfirmware/zmk/commit/4ef231f4bba87151acfbd1cf3babd83b69813e45))
* added toggle mode to key and layer toggles ([4ef231f](https://github.com/zmkfirmware/zmk/commit/4ef231f4bba87151acfbd1cf3babd83b69813e45))
* **boards:** Update for mikoto board definition ([#1946](https://github.com/zmkfirmware/zmk/issues/1946)) ([b26058b](https://github.com/zmkfirmware/zmk/commit/b26058b6c7c83f8d1f095d2f9c6c3998b391a61b))
* **core:** Make physical layout key rotation optional ([#2770](https://github.com/zmkfirmware/zmk/issues/2770)) ([c367d8f](https://github.com/zmkfirmware/zmk/commit/c367d8f636f0842b414c2b58df6101761cdd676d))
* **display:** Add ability to set display on/off pin. ([#2814](https://github.com/zmkfirmware/zmk/issues/2814)) ([627e6db](https://github.com/zmkfirmware/zmk/commit/627e6dbec99211b3d7cce55904fb1c824ed87bf3))
* **display:** Add config for display update period ([#2819](https://github.com/zmkfirmware/zmk/issues/2819)) ([aa3e5dd](https://github.com/zmkfirmware/zmk/commit/aa3e5dd70fdd1b364fa9ad26f14425be613d180c))
* input processor behavior invocation ([#2714](https://github.com/zmkfirmware/zmk/issues/2714)) ([cb867f9](https://github.com/zmkfirmware/zmk/commit/cb867f92dbe4e32675c2137fc6aa914a44ecc8dc))
* **Kconfig:** Allow overriding ZMK Kconfig defaults ([#2537](https://github.com/zmkfirmware/zmk/issues/2537)) ([40925d4](https://github.com/zmkfirmware/zmk/commit/40925d48e67b3eeaeb3e848a2287ed628de9f674))
* **mouse:** Add mouse move and scroll support ([#2477](https://github.com/zmkfirmware/zmk/issues/2477)) ([6b40bfd](https://github.com/zmkfirmware/zmk/commit/6b40bfda53571f7a960ccc448aa87f29da7496ac))
* **pointing:** Add behavior input processor ([cb867f9](https://github.com/zmkfirmware/zmk/commit/cb867f92dbe4e32675c2137fc6aa914a44ecc8dc))
* **pointing:** Add pre-defined scroll scaler ([0f7c112](https://github.com/zmkfirmware/zmk/commit/0f7c11248a1ddb7c6559064c2a1e7a3c446d5d55))
* **pointing:** Add pre-defined scroll scaler and mouse scroll tests ([#2759](https://github.com/zmkfirmware/zmk/issues/2759)) ([0f7c112](https://github.com/zmkfirmware/zmk/commit/0f7c11248a1ddb7c6559064c2a1e7a3c446d5d55))
* **shields:** Add physical layout for Lotus58 ([#2753](https://github.com/zmkfirmware/zmk/issues/2753)) ([424e532](https://github.com/zmkfirmware/zmk/commit/424e53210ea16c2287abaf770ebf45be432d841a))
* **studio:** Add ortho_4x10 grid layout ([#2651](https://github.com/zmkfirmware/zmk/issues/2651)) ([7e8c542](https://github.com/zmkfirmware/zmk/commit/7e8c542c94908ac011ec7272a5f8ab10d2102632))
### Bug Fixes
* allow kscan-composite to wake up device. ([#2682](https://github.com/zmkfirmware/zmk/issues/2682)) ([a8f5ab6](https://github.com/zmkfirmware/zmk/commit/a8f5ab67b5d449a2624e2de7ddfb264da778ea6c))
* **behaviors:** Make multiple sticky keys work on same key position ([7186528](https://github.com/zmkfirmware/zmk/commit/7186528f77bf077173927c1c8506b4d434e5c371))
* **behaviors:** Make multiple sticky keys work on same key position ([#2758](https://github.com/zmkfirmware/zmk/issues/2758)) ([7186528](https://github.com/zmkfirmware/zmk/commit/7186528f77bf077173927c1c8506b4d434e5c371))
* **ble:** enforce maximum length for dynamic device name ([#2784](https://github.com/zmkfirmware/zmk/issues/2784)) ([ea267b0](https://github.com/zmkfirmware/zmk/commit/ea267b0f35f862b882ac568dde6365c3a0c85099))
* **combos:** Properly report combos len with emply block ([#2739](https://github.com/zmkfirmware/zmk/issues/2739)) ([f0a77b8](https://github.com/zmkfirmware/zmk/commit/f0a77b888ac482a863386ced08e04660ddacb026))
* **display:** Only default mono theme when 1bpp ([#2804](https://github.com/zmkfirmware/zmk/issues/2804)) ([425256b](https://github.com/zmkfirmware/zmk/commit/425256bc0de7ed08802533b170abba78ee90f546))
* **display:** POSIX lvgl fixes ([#2812](https://github.com/zmkfirmware/zmk/issues/2812)) ([4b4a8a3](https://github.com/zmkfirmware/zmk/commit/4b4a8a35f3f90f1af75cdf5d9c26b47d4b8dcabb))
* **drivers:** Proper static/const for data/config ([#2769](https://github.com/zmkfirmware/zmk/issues/2769)) ([6941abc](https://github.com/zmkfirmware/zmk/commit/6941abc2afab16502cff9c5149d8dc0fcd5112c9))
* Fix warnings in nanopb encoding code ([#2643](https://github.com/zmkfirmware/zmk/issues/2643)) ([7013158](https://github.com/zmkfirmware/zmk/commit/7013158a6715d94b34e8c471ce25bb5005f3bb49))
* Kconfig refactor now works correctly with external modules ([#2711](https://github.com/zmkfirmware/zmk/issues/2711)) ([bb48661](https://github.com/zmkfirmware/zmk/commit/bb486619a183f6df7fbb4620c80164555a22da0b))
* **Kconfig:** Added a name to EC11's trigger mode choice ([40925d4](https://github.com/zmkfirmware/zmk/commit/40925d48e67b3eeaeb3e848a2287ed628de9f674))
* **kscan:** Remove warning when keyboard is built without CONFIG_PM_DEVICE ([#2808](https://github.com/zmkfirmware/zmk/issues/2808)) ([8e065d5](https://github.com/zmkfirmware/zmk/commit/8e065d55b916481ef06ce37cddedb84cf1d15d99))
* **pointing:** Complete header rename missed in refactor ([#2702](https://github.com/zmkfirmware/zmk/issues/2702)) ([84baf92](https://github.com/zmkfirmware/zmk/commit/84baf929c9bb95f255d4bafd0e57f2ec47455fca))
* **pointing:** Temp layer threading protection. ([#2729](https://github.com/zmkfirmware/zmk/issues/2729)) ([1e3e62c](https://github.com/zmkfirmware/zmk/commit/1e3e62c13d0666d98831ee302ae2fb17e68196c9))
* **studio:** Allow adding layers after a layer move ([#2748](https://github.com/zmkfirmware/zmk/issues/2748)) ([36508c2](https://github.com/zmkfirmware/zmk/commit/36508c27fddfb84d912e0122e313ad3904ceb946))
* **studio:** Properly return complete keymap from RPC ([#2696](https://github.com/zmkfirmware/zmk/issues/2696)) ([0820991](https://github.com/zmkfirmware/zmk/commit/0820991901a95ab7a0eb1f1cc608a631d514e26c))
## 0.1.0 (2024-11-29) ## 0.1.0 (2024-11-29)

View File

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

View File

@@ -2,6 +2,7 @@ cmake_minimum_required(VERSION 3.13.1)
set(CONFIG_APPLICATION_DEFINED_SYSCALL true) set(CONFIG_APPLICATION_DEFINED_SYSCALL true)
set(ZEPHYR_BOARD_ALIASES "boards/aliases.cmake")
set(ZEPHYR_EXTRA_MODULES "${ZMK_EXTRA_MODULES};${CMAKE_CURRENT_SOURCE_DIR}/module;${CMAKE_CURRENT_SOURCE_DIR}/keymap-module") set(ZEPHYR_EXTRA_MODULES "${ZMK_EXTRA_MODULES};${CMAKE_CURRENT_SOURCE_DIR}/module;${CMAKE_CURRENT_SOURCE_DIR}/keymap-module")
# Find Zephyr. This also loads Zephyr's build system. # Find Zephyr. This also loads Zephyr's build system.
@@ -16,6 +17,7 @@ if(CONFIG_ZMK_BEHAVIOR_LOCAL_IDS)
endif() endif()
zephyr_syscall_header(${APPLICATION_SOURCE_DIR}/include/drivers/behavior.h) zephyr_syscall_header(${APPLICATION_SOURCE_DIR}/include/drivers/behavior.h)
zephyr_syscall_header(${APPLICATION_SOURCE_DIR}/include/drivers/input_processor.h)
zephyr_syscall_header(${APPLICATION_SOURCE_DIR}/include/drivers/ext_power.h) zephyr_syscall_header(${APPLICATION_SOURCE_DIR}/include/drivers/ext_power.h)
# Add your source file to the "app" target. This must come after # Add your source file to the "app" target. This must come after
@@ -36,15 +38,14 @@ target_sources_ifdef(CONFIG_ZMK_GPIO_KEY_WAKEUP_TRIGGER app PRIVATE src/gpio_key
target_sources(app PRIVATE src/events/activity_state_changed.c) target_sources(app PRIVATE src/events/activity_state_changed.c)
target_sources(app PRIVATE src/events/position_state_changed.c) target_sources(app PRIVATE src/events/position_state_changed.c)
target_sources(app PRIVATE src/events/sensor_event.c) target_sources(app PRIVATE src/events/sensor_event.c)
target_sources(app PRIVATE src/events/mouse_button_state_changed.c)
target_sources_ifdef(CONFIG_ZMK_WPM app PRIVATE src/events/wpm_state_changed.c) target_sources_ifdef(CONFIG_ZMK_WPM app PRIVATE src/events/wpm_state_changed.c)
target_sources_ifdef(CONFIG_USB_DEVICE_STACK app PRIVATE src/events/usb_conn_state_changed.c) target_sources_ifdef(CONFIG_USB_DEVICE_STACK app PRIVATE src/events/usb_conn_state_changed.c)
target_sources(app PRIVATE src/behaviors/behavior_reset.c) target_sources(app PRIVATE src/behaviors/behavior_reset.c)
target_sources_ifdef(CONFIG_ZMK_EXT_POWER app PRIVATE src/behaviors/behavior_ext_power.c) target_sources_ifdef(CONFIG_ZMK_EXT_POWER app PRIVATE src/behaviors/behavior_ext_power.c)
target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_SOFT_OFF app PRIVATE src/behaviors/behavior_soft_off.c) target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_SOFT_OFF app PRIVATE src/behaviors/behavior_soft_off.c)
add_subdirectory_ifdef(CONFIG_ZMK_POINTING src/pointing/)
if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_ROLE_CENTRAL) if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_ROLE_CENTRAL)
target_sources(app PRIVATE src/hid.c) target_sources(app PRIVATE src/hid.c)
target_sources_ifdef(CONFIG_ZMK_MOUSE app PRIVATE src/mouse.c)
target_sources(app PRIVATE src/behaviors/behavior_key_press.c) target_sources(app PRIVATE src/behaviors/behavior_key_press.c)
target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_KEY_TOGGLE app PRIVATE src/behaviors/behavior_key_toggle.c) target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_KEY_TOGGLE app PRIVATE src/behaviors/behavior_key_toggle.c)
target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_HOLD_TAP app PRIVATE src/behaviors/behavior_hold_tap.c) target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_HOLD_TAP app PRIVATE src/behaviors/behavior_hold_tap.c)
@@ -64,8 +65,9 @@ if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_ROLE_CENTRAL)
target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_SENSOR_ROTATE_COMMON app PRIVATE src/behaviors/behavior_sensor_rotate_common.c) target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_SENSOR_ROTATE_COMMON app PRIVATE src/behaviors/behavior_sensor_rotate_common.c)
target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_MOUSE_KEY_PRESS app PRIVATE src/behaviors/behavior_mouse_key_press.c) target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_MOUSE_KEY_PRESS app PRIVATE src/behaviors/behavior_mouse_key_press.c)
target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_STUDIO_UNLOCK app PRIVATE src/behaviors/behavior_studio_unlock.c) target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_STUDIO_UNLOCK app PRIVATE src/behaviors/behavior_studio_unlock.c)
target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_INPUT_TWO_AXIS app PRIVATE src/behaviors/behavior_input_two_axis.c)
target_sources(app PRIVATE src/combo.c) target_sources(app PRIVATE src/combo.c)
target_sources(app PRIVATE src/behaviors/behavior_tap_dance.c) target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_TAP_DANCE app PRIVATE src/behaviors/behavior_tap_dance.c)
target_sources(app PRIVATE src/behavior_queue.c) target_sources(app PRIVATE src/behavior_queue.c)
target_sources(app PRIVATE src/conditional_layer.c) target_sources(app PRIVATE src/conditional_layer.c)
target_sources(app PRIVATE src/endpoints.c) target_sources(app PRIVATE src/endpoints.c)
@@ -94,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

@@ -46,7 +46,7 @@ config NRF_STORE_REBOOT_TYPE_GPREGRET
bool bool
default y default y
endif endif # SOC_SERIES_NRF52X
menu "HID" menu "HID"
@@ -81,14 +81,11 @@ if ZMK_HID_REPORT_TYPE_HKRO
config ZMK_HID_KEYBOARD_REPORT_SIZE config ZMK_HID_KEYBOARD_REPORT_SIZE
int "# Keyboard Keys Reportable" int "# Keyboard Keys Reportable"
default 6
endif endif # ZMK_HID_REPORT_TYPE_HKRO
config ZMK_HID_CONSUMER_REPORT_SIZE config ZMK_HID_CONSUMER_REPORT_SIZE
int "# Consumer Keys Reportable" int "# Consumer Keys Reportable"
default 6
choice ZMK_HID_CONSUMER_REPORT_USAGES choice ZMK_HID_CONSUMER_REPORT_USAGES
prompt "HID Report Type" prompt "HID Report Type"
@@ -142,8 +139,7 @@ config USB_NUMOF_EP_WRITE_RETRIES
config USB_HID_POLL_INTERVAL_MS config USB_HID_POLL_INTERVAL_MS
default 1 default 1
#ZMK_USB endif # ZMK_USB
endif
menuconfig ZMK_BLE menuconfig ZMK_BLE
bool "BLE (HID over GATT)" bool "BLE (HID over GATT)"
@@ -163,17 +159,14 @@ if ZMK_BLE
config ZMK_BLE_EXPERIMENTAL_CONN config ZMK_BLE_EXPERIMENTAL_CONN
bool "Experimental BLE connection changes" bool "Experimental BLE connection changes"
help help
Enables a combination of settings that are planned to be default in future versions of ZMK Enables settings that are planned to be default in future versions of ZMK
to improve connection stability. This includes changes to timing on BLE pairing initiation, to improve connection stability.
restores use of the updated/new LLCP implementation, and disables 2M PHY support.
config ZMK_BLE_EXPERIMENTAL_SEC config ZMK_BLE_EXPERIMENTAL_SEC
bool "Experimental BLE security changes" bool "Experimental BLE security changes"
imply BT_SMP_ALLOW_UNAUTH_OVERWRITE imply BT_SMP_ALLOW_UNAUTH_OVERWRITE
help help
Enables a combination of settings that are planned to be officially supported in the future. Enables security settings that are planned to be officially supported in the future.
This includes enabling BT Secure Connection passkey entry, and allows overwrite of keys from
previously paired hosts.
config ZMK_BLE_EXPERIMENTAL_FEATURES config ZMK_BLE_EXPERIMENTAL_FEATURES
bool "Experimental BLE connection and security settings/features" bool "Experimental BLE connection and security settings/features"
@@ -196,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
@@ -245,19 +234,20 @@ config BT_PERIPHERAL_PREF_LATENCY
config BT_PERIPHERAL_PREF_TIMEOUT config BT_PERIPHERAL_PREF_TIMEOUT
default 400 default 400
#ZMK_BLE # The device name should be 16 characters or less so it fits within the
endif # advertising data.
config BT_DEVICE_NAME_MAX
default 16
#Output Types endif # ZMK_BLE
endmenu
# HID endmenu # Output Types
endmenu
endmenu # HID
rsource "src/split/Kconfig" rsource "src/split/Kconfig"
#Basic Keyboard Setup endmenu # Basic Keyboard Setup
endmenu
menu "Keymaps" menu "Keymaps"
@@ -275,7 +265,7 @@ config ZMK_KEYMAP_LAYER_NAME_MAX_LEN
int "Max Layer Name Length" int "Max Layer Name Length"
default 20 default 20
endif endif # ZMK_KEYMAP_SETTINGS_STORAGE
endmenu # Keymaps endmenu # Keymaps
@@ -292,67 +282,51 @@ menuconfig ZMK_RGB_UNDERGLOW
if ZMK_RGB_UNDERGLOW if ZMK_RGB_UNDERGLOW
# This default value cuts down on tons of excess .conf files, if you're using GPIO, manually disable this
config SPI
default y
config ZMK_RGB_UNDERGLOW_EXT_POWER config ZMK_RGB_UNDERGLOW_EXT_POWER
bool "RGB underglow toggling also controls external power" bool "RGB underglow toggling also controls external power"
default y
config ZMK_RGB_UNDERGLOW_BRT_MIN config ZMK_RGB_UNDERGLOW_BRT_MIN
int "RGB underglow minimum brightness in percent" int "RGB underglow minimum brightness in percent"
range 0 100 range 0 100
default 0
config ZMK_RGB_UNDERGLOW_BRT_MAX config ZMK_RGB_UNDERGLOW_BRT_MAX
int "RGB underglow maximum brightness in percent" int "RGB underglow maximum brightness in percent"
range ZMK_RGB_UNDERGLOW_BRT_MIN 100 range ZMK_RGB_UNDERGLOW_BRT_MIN 100
default 100
config ZMK_RGB_UNDERGLOW_HUE_STEP config ZMK_RGB_UNDERGLOW_HUE_STEP
int "RGB underglow hue step in degrees" int "RGB underglow hue step in degrees"
range 0 359 range 0 359
default 10
config ZMK_RGB_UNDERGLOW_SAT_STEP config ZMK_RGB_UNDERGLOW_SAT_STEP
int "RGB underglow saturation step in percent" int "RGB underglow saturation step in percent"
range 0 100 range 0 100
default 10
config ZMK_RGB_UNDERGLOW_BRT_STEP config ZMK_RGB_UNDERGLOW_BRT_STEP
int "RGB underglow brightness step in percent" int "RGB underglow brightness step in percent"
range 0 100 range 0 100
default 10
config ZMK_RGB_UNDERGLOW_HUE_START config ZMK_RGB_UNDERGLOW_HUE_START
int "RGB underglow start hue value in degrees" int "RGB underglow start hue value in degrees"
range 0 359 range 0 359
default 0
config ZMK_RGB_UNDERGLOW_SAT_START config ZMK_RGB_UNDERGLOW_SAT_START
int "RGB underglow start saturations value in percent" int "RGB underglow start saturations value in percent"
range 0 100 range 0 100
default 100
config ZMK_RGB_UNDERGLOW_BRT_START config ZMK_RGB_UNDERGLOW_BRT_START
int "RGB underglow start brightness value in percent" int "RGB underglow start brightness value in percent"
range ZMK_RGB_UNDERGLOW_BRT_MIN ZMK_RGB_UNDERGLOW_BRT_MAX range ZMK_RGB_UNDERGLOW_BRT_MIN ZMK_RGB_UNDERGLOW_BRT_MAX
default ZMK_RGB_UNDERGLOW_BRT_MAX
config ZMK_RGB_UNDERGLOW_SPD_START config ZMK_RGB_UNDERGLOW_SPD_START
int "RGB underglow start animation speed value" int "RGB underglow start animation speed value"
range 1 5 range 1 5
default 3
config ZMK_RGB_UNDERGLOW_EFF_START config ZMK_RGB_UNDERGLOW_EFF_START
int "RGB underglow start effect int value related to the effect enum list" int "RGB underglow start effect int value related to the effect enum list"
range 0 3 range 0 3
default 0
config ZMK_RGB_UNDERGLOW_ON_START config ZMK_RGB_UNDERGLOW_ON_START
bool "RGB underglow starts on by default" bool "RGB underglow starts on by default"
default y
config ZMK_RGB_UNDERGLOW_AUTO_OFF_IDLE config ZMK_RGB_UNDERGLOW_AUTO_OFF_IDLE
bool "Turn off RGB underglow when keyboard goes into idle state" bool "Turn off RGB underglow when keyboard goes into idle state"
@@ -361,8 +335,7 @@ config ZMK_RGB_UNDERGLOW_AUTO_OFF_USB
bool "Turn off RGB underglow when USB is disconnected" bool "Turn off RGB underglow when USB is disconnected"
depends on USB_DEVICE_STACK depends on USB_DEVICE_STACK
#ZMK_RGB_UNDERGLOW endif # ZMK_RGB_UNDERGLOW
endif
menuconfig ZMK_BACKLIGHT menuconfig ZMK_BACKLIGHT
bool "LED backlight" bool "LED backlight"
@@ -373,16 +346,13 @@ if ZMK_BACKLIGHT
config ZMK_BACKLIGHT_BRT_STEP config ZMK_BACKLIGHT_BRT_STEP
int "Brightness step in percent" int "Brightness step in percent"
range 1 100 range 1 100
default 20
config ZMK_BACKLIGHT_BRT_START config ZMK_BACKLIGHT_BRT_START
int "Default brightness in percent" int "Default brightness in percent"
range 1 100 range 1 100
default 40
config ZMK_BACKLIGHT_ON_START config ZMK_BACKLIGHT_ON_START
bool "Default backlight state" bool "Default backlight state"
default y
config ZMK_BACKLIGHT_AUTO_OFF_IDLE config ZMK_BACKLIGHT_AUTO_OFF_IDLE
bool "Turn off backlight when keyboard goes into idle state" bool "Turn off backlight when keyboard goes into idle state"
@@ -390,19 +360,11 @@ config ZMK_BACKLIGHT_AUTO_OFF_IDLE
config ZMK_BACKLIGHT_AUTO_OFF_USB config ZMK_BACKLIGHT_AUTO_OFF_USB
bool "Turn off backlight when USB is disconnected" bool "Turn off backlight when USB is disconnected"
#ZMK_BACKLIGHT endif # ZMK_BACKLIGHT
endif
#Display/LED Options endmenu # Display/LED Options
endmenu
menu "Mouse Options" rsource "src/pointing/Kconfig"
config ZMK_MOUSE
bool "Enable ZMK mouse emulation"
#Mouse Options
endmenu
menu "Power Management" menu "Power Management"
@@ -424,7 +386,8 @@ config ZMK_BATTERY_REPORTING_FETCH_MODE_LITHIUM_VOLTAGE
bool "Lithium Voltage" bool "Lithium Voltage"
endchoice endchoice
endif
endif # ZMK_BATTERY_REPORTING
config ZMK_IDLE_TIMEOUT config ZMK_IDLE_TIMEOUT
int "Milliseconds of inactivity before entering idle state (OLED shutoff, etc)" int "Milliseconds of inactivity before entering idle state (OLED shutoff, etc)"
@@ -446,12 +409,10 @@ config ZMK_IDLE_SLEEP_TIMEOUT
int "Milliseconds of inactivity before entering deep sleep" int "Milliseconds of inactivity before entering deep sleep"
default 900000 default 900000
#ZMK_SLEEP endif # ZMK_SLEEP
endif
config ZMK_EXT_POWER config ZMK_EXT_POWER
bool "Enable support to control external power output" bool "Enable support to control external power output"
default y
config ZMK_PM config ZMK_PM
bool bool
@@ -483,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
@@ -525,8 +490,7 @@ config ZMK_USB_HID_INIT_PRIORITY
int "USB HID Init Priority" int "USB HID Init Priority"
default 95 default 95
#USB endif # USB
endif
if ZMK_BLE || ZMK_SPLIT_BLE if ZMK_BLE || ZMK_SPLIT_BLE
@@ -534,11 +498,13 @@ config ZMK_BLE_INIT_PRIORITY
int "BLE Init Priority" int "BLE Init Priority"
default 50 default 50
#ZMK_BLE || ZMK_SPLIT_BLE endif # ZMK_BLE || ZMK_SPLIT_BLE
endif
#Initialization Priorities endmenu # Initialization Priorities
endmenu
config ZMK_PHYSICAL_LAYOUT_KEY_ROTATION
bool "Support rotation of keys in physical layouts"
default y
menuconfig ZMK_KSCAN menuconfig ZMK_KSCAN
bool "ZMK KScan Integration" bool "ZMK KScan Integration"
@@ -612,8 +578,7 @@ config USB_CDC_ACM_RINGBUF_SIZE
config LOG_PROCESS_THREAD_STARTUP_DELAY_MS config LOG_PROCESS_THREAD_STARTUP_DELAY_MS
default 1000 default 1000
#ZMK_USB_LOGGING endif # ZMK_USB_LOGGING
endif
config ZMK_RTT_LOGGING config ZMK_RTT_LOGGING
bool "Enable RTT logging to help debug" bool "Enable RTT logging to help debug"
@@ -629,8 +594,7 @@ if ZMK_RTT_LOGGING
config SEGGER_RTT_BUFFER_SIZE_UP config SEGGER_RTT_BUFFER_SIZE_UP
default 8192 default 8192
#ZMK_RTT_LOGGING endif # ZMK_RTT_LOGGING
endif
if ZMK_USB_LOGGING || ZMK_RTT_LOGGING if ZMK_USB_LOGGING || ZMK_RTT_LOGGING
@@ -640,11 +604,9 @@ config LOG_BUFFER_SIZE
config LOG_PROCESS_THREAD_SLEEP_MS config LOG_PROCESS_THREAD_SLEEP_MS
default 100 default 100
#ZMK_USB_LOGGING || ZMK_RTT_LOGGING endif # ZMK_USB_LOGGING || ZMK_RTT_LOGGING
endif
#Logging endmenu # Logging
endmenu
if SETTINGS if SETTINGS
@@ -660,21 +622,17 @@ config ZMK_SETTINGS_RESET_ON_START_INIT_PRIORITY
Initialization priority for the settings reset on start. Must be lower priority/ Initialization priority for the settings reset on start. Must be lower priority/
higher value than FLASH_INIT_PRIORITY if using the NVS/Flash settings backend. higher value than FLASH_INIT_PRIORITY if using the NVS/Flash settings backend.
endif # ZMK_SETTINGS_RESET_ON_START
endif
config ZMK_SETTINGS_SAVE_DEBOUNCE config ZMK_SETTINGS_SAVE_DEBOUNCE
int "Milliseconds to debounce settings saves" int "Milliseconds to debounce settings saves"
default 60000 default 60000
#SETTINGS endif # SETTINGS
endif
config ZMK_BATTERY_REPORT_INTERVAL config ZMK_BATTERY_REPORT_INTERVAL
depends on ZMK_BATTERY_REPORTING depends on ZMK_BATTERY_REPORTING
int "Battery level report interval in seconds" int "Battery level report interval in seconds"
default 60
config ZMK_LOW_PRIORITY_WORK_QUEUE config ZMK_LOW_PRIORITY_WORK_QUEUE
bool "Work queue for low priority items" bool "Work queue for low priority items"
@@ -689,13 +647,11 @@ config ZMK_LOW_PRIORITY_THREAD_PRIORITY
int "Low priority thread priority" int "Low priority thread priority"
default 10 default 10
endif endif # ZMK_LOW_PRIORITY_WORK_QUEUE
#Advanced endmenu # Advanced
endmenu
#ZMK endmenu # ZMK
endmenu
config KERNEL_BIN_NAME config KERNEL_BIN_NAME
default "zmk" default "zmk"
@@ -740,12 +696,22 @@ module = ZMK
module-str = zmk module-str = zmk
source "subsys/logging/Kconfig.template.log_config" source "subsys/logging/Kconfig.template.log_config"
# This loads ZMK's internal board and shield Kconfigs
rsource "boards/Kconfig" rsource "boards/Kconfig"
rsource "boards/shields/*/Kconfig.defconfig" rsource "boards/shields/*/Kconfig.defconfig"
rsource "boards/shields/*/Kconfig.shield" rsource "boards/shields/*/Kconfig.shield"
# This loads custom shields defconfigs (from BOARD_ROOT)
# Duplicated from Kconfig.zephyr
osource "$(KCONFIG_BINARY_DIR)/Kconfig.shield.defconfig"
source "$(BOARD_DIR)/Kconfig.defconfig"
# This loads board and shield Kconfigs found under zmk-config/config/
osource "$(ZMK_CONFIG)/boards/shields/*/Kconfig.defconfig" osource "$(ZMK_CONFIG)/boards/shields/*/Kconfig.defconfig"
osource "$(ZMK_CONFIG)/boards/shields/*/Kconfig.shield" osource "$(ZMK_CONFIG)/boards/shields/*/Kconfig.shield"
# This loads ZMK's sensible defaults
rsource "Kconfig.defaults"
source "Kconfig.zephyr" source "Kconfig.zephyr"

View File

@@ -51,13 +51,11 @@ if ZMK_BEHAVIOR_HOLD_TAP
config ZMK_BEHAVIOR_HOLD_TAP_MAX_HELD config ZMK_BEHAVIOR_HOLD_TAP_MAX_HELD
int "Hold Tap Max Held" int "Hold Tap Max Held"
default 10
help help
Max number of simultaneously held hold-taps Max number of simultaneously held hold-taps
config ZMK_BEHAVIOR_HOLD_TAP_MAX_CAPTURED_EVENTS config ZMK_BEHAVIOR_HOLD_TAP_MAX_CAPTURED_EVENTS
int "Hold Tap Max Captured Events" int "Hold Tap Max Captured Events"
default 40
help help
Max number of captured system events while waiting to resolve hold taps Max number of captured system events while waiting to resolve hold taps
@@ -71,8 +69,7 @@ config ZMK_BEHAVIOR_KEY_TOGGLE
config ZMK_BEHAVIOR_MOUSE_KEY_PRESS config ZMK_BEHAVIOR_MOUSE_KEY_PRESS
bool bool
default y default y
depends on DT_HAS_ZMK_BEHAVIOR_MOUSE_KEY_PRESS_ENABLED depends on DT_HAS_ZMK_BEHAVIOR_MOUSE_KEY_PRESS_ENABLED && ZMK_POINTING
imply ZMK_MOUSE
config ZMK_BEHAVIOR_STICKY_KEY config ZMK_BEHAVIOR_STICKY_KEY
bool bool
@@ -83,7 +80,6 @@ if ZMK_BEHAVIOR_STICKY_KEY
config ZMK_BEHAVIOR_STICKY_KEY_MAX_HELD config ZMK_BEHAVIOR_STICKY_KEY_MAX_HELD
int "Sticky Key Max Held" int "Sticky Key Max Held"
default 10
help help
Max number of simultaneously held sticky keys Max number of simultaneously held sticky keys
@@ -94,6 +90,26 @@ config ZMK_BEHAVIOR_SOFT_OFF
default y default y
depends on DT_HAS_ZMK_BEHAVIOR_SOFT_OFF_ENABLED && ZMK_PM_SOFT_OFF depends on DT_HAS_ZMK_BEHAVIOR_SOFT_OFF_ENABLED && ZMK_PM_SOFT_OFF
config ZMK_BEHAVIOR_TAP_DANCE
bool
default y
depends on DT_HAS_ZMK_BEHAVIOR_TAP_DANCE_ENABLED
if ZMK_BEHAVIOR_TAP_DANCE
config ZMK_BEHAVIOR_TAP_DANCE_MAX_HELD
int "Tap-Dance Max Held"
help
Max number of simultaneously held taps-dances
endif
config ZMK_BEHAVIOR_INPUT_TWO_AXIS
bool
default y
depends on DT_HAS_ZMK_BEHAVIOR_INPUT_TWO_AXIS_ENABLED && ZMK_POINTING
config ZMK_BEHAVIOR_SENSOR_ROTATE_COMMON config ZMK_BEHAVIOR_SENSOR_ROTATE_COMMON
bool bool

113
app/Kconfig.defaults Normal file
View File

@@ -0,0 +1,113 @@
# Copyright (c) 2024 The ZMK Contributors
# SPDX-License-Identifier: MIT
config SYSTEM_WORKQUEUE_STACK_SIZE
default 2048 if SOC_RP2040
default 2048 if ZMK_BLE
# HID
if ZMK_HID_REPORT_TYPE_HKRO
config ZMK_HID_KEYBOARD_REPORT_SIZE
default 6
endif
config ZMK_HID_CONSUMER_REPORT_SIZE
default 6
# Behaviors
if ZMK_BEHAVIOR_HOLD_TAP
config ZMK_BEHAVIOR_HOLD_TAP_MAX_HELD
default 10
config ZMK_BEHAVIOR_HOLD_TAP_MAX_CAPTURED_EVENTS
default 40
endif
if ZMK_BEHAVIOR_STICKY_KEY
config ZMK_BEHAVIOR_STICKY_KEY_MAX_HELD
default 10
endif
if ZMK_BEHAVIOR_TAP_DANCE
config ZMK_BEHAVIOR_TAP_DANCE_MAX_HELD
default 10
endif
# Underglow
if ZMK_RGB_UNDERGLOW
# This default value cuts down on tons of excess .conf files, if you're using GPIO, manually disable this
config SPI
default y
config ZMK_RGB_UNDERGLOW_EXT_POWER
default y
config ZMK_RGB_UNDERGLOW_BRT_MIN
default 0
config ZMK_RGB_UNDERGLOW_BRT_MAX
default 100
config ZMK_RGB_UNDERGLOW_HUE_STEP
default 10
config ZMK_RGB_UNDERGLOW_SAT_STEP
default 10
config ZMK_RGB_UNDERGLOW_BRT_STEP
default 10
config ZMK_RGB_UNDERGLOW_HUE_START
default 0
config ZMK_RGB_UNDERGLOW_SAT_START
default 100
config ZMK_RGB_UNDERGLOW_BRT_START
default ZMK_RGB_UNDERGLOW_BRT_MAX
config ZMK_RGB_UNDERGLOW_SPD_START
default 3
config ZMK_RGB_UNDERGLOW_EFF_START
default 0
config ZMK_RGB_UNDERGLOW_ON_START
default y
endif # ZMK_RGB_UNDERGLOW
# Backlight
if ZMK_BACKLIGHT
config ZMK_BACKLIGHT_BRT_STEP
default 20
config ZMK_BACKLIGHT_BRT_START
default 40
config ZMK_BACKLIGHT_ON_START
default y
endif # ZMK_BACKLIGHT
# Ext_power
config ZMK_EXT_POWER
default y
# Battery
config ZMK_BATTERY_REPORT_INTERVAL
default 60
# Imports
rsource "src/split/Kconfig.defaults"

View File

@@ -3,7 +3,7 @@ VERSION_MAJOR = 0
# x-release-please-end # x-release-please-end
# x-release-please-start-minor # x-release-please-start-minor
VERSION_MINOR = 1 VERSION_MINOR = 3
# x-release-please-end # x-release-please-end
# x-release-please-start-patch # x-release-please-start-patch

2
app/boards/aliases.cmake Normal file
View File

@@ -0,0 +1,2 @@
# defines board aliases for shorter names (or for renaming boards)
set(mikoto_520_BOARD_ALIAS "mikoto")

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

@@ -2,17 +2,17 @@ config BOARD_ENABLE_DCDC
bool "Enable DCDC mode" bool "Enable DCDC mode"
select SOC_DCDC_NRF52X select SOC_DCDC_NRF52X
default y default y
depends on (BOARD_MIKOTO_520) depends on (BOARD_MIKOTO)
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_520) depends on (BOARD_MIKOTO)
choice BOARD_MIKOTO_CHARGER_CURRENT choice BOARD_MIKOTO_CHARGER_CURRENT
prompt "Charge current to supply to attached batteries" prompt "Charge current to supply to attached batteries"
depends on (BOARD_MIKOTO_520) depends on (BOARD_MIKOTO)
config BOARD_MIKOTO_CHARGER_CURRENT_40MA config BOARD_MIKOTO_CHARGER_CURRENT_40MA
bool "40mA charge current, for battery capacity 40mAh or higher" bool "40mA charge current, for battery capacity 40mAh or higher"

View File

@@ -3,6 +3,6 @@
# Copyright (c) 2020 The ZMK Contributors # Copyright (c) 2020 The ZMK Contributors
# SPDX-License-Identifier: MIT # SPDX-License-Identifier: MIT
config BOARD_MIKOTO_520 config BOARD_MIKOTO
bool "mikoto_520" bool "mikoto"
depends on SOC_NRF52840_QIAA depends on SOC_NRF52840_QIAA

View File

@@ -3,7 +3,7 @@
# Copyright (c) 2020 The ZMK Contributors # Copyright (c) 2020 The ZMK Contributors
# SPDX-License-Identifier: MIT # SPDX-License-Identifier: MIT
if BOARD_MIKOTO_520 if BOARD_MIKOTO
config BOARD config BOARD
default "mikoto" default "mikoto"
@@ -25,4 +25,4 @@ choice BOARD_MIKOTO_CHARGER_CURRENT
default BOARD_MIKOTO_CHARGER_CURRENT_100MA default BOARD_MIKOTO_CHARGER_CURRENT_100MA
endchoice endchoice
endif # BOARD_MIKOTO_520 endif # BOARD_MIKOTO

View File

@@ -0,0 +1,59 @@
/*
* Copyright (c) 2020 The ZMK Contributors
*
* SPDX-License-Identifier: MIT
*/
/ {
pro_micro: connector {
compatible = "arduino-pro-micro";
#gpio-cells = <2>;
gpio-map-mask = <0xffffffff 0xffffffc0>;
gpio-map-pass-thru = <0 0x3f>;
gpio-map
= <0 0 &gpio0 4 0> /* D0 */
, <1 0 &gpio0 8 0> /* D1 */
, <2 0 &gpio0 17 0> /* D2 */
, <3 0 &gpio0 20 0> /* D3 */
, <4 0 &gpio0 22 0> /* D4/A6 */
, <5 0 &gpio0 24 0> /* D5 */
, <6 0 &gpio1 8 0> /* D6/A7 */
, <7 0 &gpio1 2 0> /* D7 */
, <8 0 &gpio1 4 0> /* D8/A8 */
, <9 0 &gpio1 6 0> /* D9/A9 */
, <10 0 &gpio0 9 0> /* D10/A10 */
, <16 0 &gpio0 10 0> /* D16 */
, <14 0 &gpio1 13 0> /* D14 */
, <15 0 &gpio0 2 0> /* D15 */
, <18 0 &gpio0 29 0> /* D18/A0 */
, <19 0 &gpio0 31 0> /* D19/A1 */
, <20 0 &gpio0 25 0> /* D20/A2 */
, <21 0 &gpio0 11 0> /* D21/A3 */
;
};
pro_micro_a: connector_a {
compatible = "arduino-pro-micro";
#gpio-cells = <2>;
gpio-map-mask = <0xffffffff 0xffffffc0>;
gpio-map-pass-thru = <0 0x3f>;
gpio-map
= <0 0 &gpio0 29 0> /* D18/A0 */
, <1 0 &gpio0 31 0> /* D19/A1 */
, <2 0 &gpio0 25 0> /* D20/A2 */
, <3 0 &gpio0 11 0> /* D21/A3 */
, <6 0 &gpio0 22 0> /* D4/A6 */
, <7 0 &gpio1 8 0> /* D6/A7 */
, <8 0 &gpio1 4 0> /* D8/A8 */
, <9 0 &gpio1 6 0> /* D9/A9 */
, <10 0 &gpio0 9 0> /* D10/A10 */
;
};
};
pro_micro_d: &pro_micro {};
pro_micro_i2c: &i2c0 {};
pro_micro_spi: &spi0 {};
pro_micro_serial: &uart0 {};

View File

@@ -6,8 +6,6 @@
/dts-v1/; /dts-v1/;
#include <nordic/nrf52840_qiaa.dtsi> #include <nordic/nrf52840_qiaa.dtsi>
#include "arduino_pro_micro_pins.dtsi"
#include "mikoto_520-pinctrl.dtsi"
/ { / {
model = "mikoto"; model = "mikoto";

View File

@@ -1,5 +1,5 @@
identifier: mikoto_520 identifier: mikoto
name: mikoto_520 name: mikoto
type: mcu type: mcu
arch: arm arch: arm
toolchain: toolchain:

View File

@@ -1,6 +1,6 @@
file_format: "1" file_format: "1"
id: mikoto_520 id: mikoto
name: Mikoto 5.20 name: Mikoto
type: board type: board
arch: arm arch: arm
outputs: outputs:
@@ -8,3 +8,9 @@ outputs:
- ble - ble
url: https://github.com/zhiayang/mikoto url: https://github.com/zhiayang/mikoto
exposes: [pro_micro] exposes: [pro_micro]
revisions:
- "5.20"
- "6.1"
- "6.3"
- "7.2"
default_revision: "5.20"

View File

@@ -0,0 +1,8 @@
/*
* Copyright (c) 2023 The ZMK Contributors
*
* SPDX-License-Identifier: MIT
*/
#include "mikoto-pinctrl.dtsi"
#include "arduino_pro_micro_pins_v5.dtsi"

View File

@@ -0,0 +1,8 @@
/*
* Copyright (c) 2023 The ZMK Contributors
*
* SPDX-License-Identifier: MIT
*/
#include "mikoto-pinctrl.dtsi"
#include "arduino_pro_micro_pins_v6.dtsi"

View File

@@ -0,0 +1,2 @@
CONFIG_I2C=y
CONFIG_ZMK_MAX17048=y

View File

@@ -0,0 +1,47 @@
/*
* Copyright (c) 2023 The ZMK Contributors
*
* SPDX-License-Identifier: MIT
*/
#include "mikoto-pinctrl.dtsi"
#include "arduino_pro_micro_pins_v6.dtsi"
&pinctrl {
i2c1_default: i2c1_default {
group1 {
psels = <NRF_PSEL(TWIM_SDA, 0, 23)>,
<NRF_PSEL(TWIM_SCL, 0, 19)>;
bias-pull-up;
};
};
i2c1_sleep: i2c1_sleep {
group1 {
psels = <NRF_PSEL(TWIM_SDA, 0, 23)>,
<NRF_PSEL(TWIM_SCL, 0, 19)>;
low-power-enable;
bias-pull-up;
};
};
};
&i2c1 {
status = "okay";
compatible = "nordic,nrf-twi";
pinctrl-0 = <&i2c1_default>;
pinctrl-1 = <&i2c1_sleep>;
pinctrl-names = "default", "sleep";
builtin_fuel_gauge: max17048@36 {
compatible = "zmk,maxim-max17048";
status = "okay";
reg = <0x36>;
};
};
/ {
chosen {
zmk,battery = &builtin_fuel_gauge;
};
};

View File

@@ -2,11 +2,10 @@
CONFIG_SOC_SERIES_NRF52X=y CONFIG_SOC_SERIES_NRF52X=y
CONFIG_SOC_NRF52840_QIAA=y CONFIG_SOC_NRF52840_QIAA=y
CONFIG_BOARD_MIKOTO_520=y CONFIG_BOARD_MIKOTO=y
# Enable MPU # Enable MPU
CONFIG_ARM_MPU=y CONFIG_ARM_MPU=y
CONFIG_PINCTRL=y CONFIG_PINCTRL=y
# enable GPIO # enable GPIO

View File

@@ -13,7 +13,7 @@
static int pinmux_mikoto_init(void) { static int pinmux_mikoto_init(void) {
#if CONFIG_BOARD_MIKOTO_520 #if CONFIG_BOARD_MIKOTO
const struct device *p0 = DEVICE_DT_GET(DT_NODELABEL(gpio0)); const struct device *p0 = DEVICE_DT_GET(DT_NODELABEL(gpio0));
const struct device *p1 = DEVICE_DT_GET(DT_NODELABEL(gpio1)); const struct device *p1 = DEVICE_DT_GET(DT_NODELABEL(gpio1));
#if CONFIG_BOARD_MIKOTO_CHARGER_CURRENT_40MA #if CONFIG_BOARD_MIKOTO_CHARGER_CURRENT_40MA

View File

@@ -0,0 +1,7 @@
board_check_revision(FORMAT MAJOR.MINOR.PATCH
DEFAULT_REVISION 5.20.0
VALID_REVISIONS
5.20.0 # first public release
6.1.0 6.3.0 # incompatible pinout change from v5+
7.2.0 # addition of MAX17048; compatible pinout with v6+
)

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

@@ -0,0 +1,71 @@
#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 50 0 0 0>
, <&key_physical_attrs 100 100 100 37 0 0 0>
, <&key_physical_attrs 100 100 200 12 0 0 0>
, <&key_physical_attrs 100 100 300 0 0 0 0>
, <&key_physical_attrs 100 100 400 12 0 0 0>
, <&key_physical_attrs 100 100 500 25 0 0 0>
, <&key_physical_attrs 100 100 1050 25 0 0 0>
, <&key_physical_attrs 100 100 1150 12 0 0 0>
, <&key_physical_attrs 100 100 1250 0 0 0 0>
, <&key_physical_attrs 100 100 1350 12 0 0 0>
, <&key_physical_attrs 100 100 1450 37 0 0 0>
, <&key_physical_attrs 100 100 1550 50 0 0 0>
, <&key_physical_attrs 100 100 0 150 0 0 0>
, <&key_physical_attrs 100 100 100 137 0 0 0>
, <&key_physical_attrs 100 100 200 112 0 0 0>
, <&key_physical_attrs 100 100 300 100 0 0 0>
, <&key_physical_attrs 100 100 400 112 0 0 0>
, <&key_physical_attrs 100 100 500 125 0 0 0>
, <&key_physical_attrs 100 100 1050 125 0 0 0>
, <&key_physical_attrs 100 100 1150 112 0 0 0>
, <&key_physical_attrs 100 100 1250 100 0 0 0>
, <&key_physical_attrs 100 100 1350 112 0 0 0>
, <&key_physical_attrs 100 100 1450 137 0 0 0>
, <&key_physical_attrs 100 100 1550 150 0 0 0>
, <&key_physical_attrs 100 100 0 250 0 0 0>
, <&key_physical_attrs 100 100 100 237 0 0 0>
, <&key_physical_attrs 100 100 200 212 0 0 0>
, <&key_physical_attrs 100 100 300 200 0 0 0>
, <&key_physical_attrs 100 100 400 212 0 0 0>
, <&key_physical_attrs 100 100 500 225 0 0 0>
, <&key_physical_attrs 100 100 625 75 0 0 0>
, <&key_physical_attrs 100 100 925 75 0 0 0>
, <&key_physical_attrs 100 100 1050 225 0 0 0>
, <&key_physical_attrs 100 100 1150 212 0 0 0>
, <&key_physical_attrs 100 100 1250 200 0 0 0>
, <&key_physical_attrs 100 100 1350 212 0 0 0>
, <&key_physical_attrs 100 100 1450 237 0 0 0>
, <&key_physical_attrs 100 100 1550 250 0 0 0>
, <&key_physical_attrs 100 100 0 350 0 0 0>
, <&key_physical_attrs 100 100 100 337 0 0 0>
, <&key_physical_attrs 100 100 200 312 0 0 0>
, <&key_physical_attrs 100 100 300 300 0 0 0>
, <&key_physical_attrs 100 100 400 312 0 0 0>
, <&key_physical_attrs 100 100 500 325 0 0 0>
, <&key_physical_attrs 100 100 625 275 0 0 0>
, <&key_physical_attrs 100 100 925 275 0 0 0>
, <&key_physical_attrs 100 100 1050 325 0 0 0>
, <&key_physical_attrs 100 100 1150 312 0 0 0>
, <&key_physical_attrs 100 100 1250 300 0 0 0>
, <&key_physical_attrs 100 100 1350 312 0 0 0>
, <&key_physical_attrs 100 100 1450 337 0 0 0>
, <&key_physical_attrs 100 100 1550 350 0 0 0>
, <&key_physical_attrs 100 100 250 412 0 0 0>
, <&key_physical_attrs 100 100 350 415 0 0 0>
, <&key_physical_attrs 100 100 450 425 0 0 0>
, <&key_physical_attrs 100 150 575 400 3000 625 475>
, <&key_physical_attrs 100 150 975 400 (-3000) 1025 475>
, <&key_physical_attrs 100 100 1100 425 0 0 0>
, <&key_physical_attrs 100 100 1200 415 0 0 0>
, <&key_physical_attrs 100 100 1300 415 0 0 0>
;
};
};

View File

@@ -6,17 +6,19 @@
#include <dt-bindings/zmk/matrix_transform.h> #include <dt-bindings/zmk/matrix_transform.h>
#include "lotus58-layouts.dtsi"
/ { / {
chosen { chosen {
zephyr,display = &oled; zephyr,display = &oled;
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 {
compatible = "zmk,matrix-transform"; compatible = "zmk,matrix-transform";
columns = <16>; columns = <16>;
rows = <4>; rows = <5>;
// | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 | | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | // | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 | | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 |
// | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | // | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 |
// | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | SW30 | | SW30 | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | // | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | SW30 | | SW30 | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 |
@@ -68,6 +70,10 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7
}; };
}; };
&physical_layout0 {
transform = <&default_transform>;
};
&pro_micro_i2c { &pro_micro_i2c {
status = "okay"; status = "okay";

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

@@ -9,6 +9,7 @@ features:
- keys - keys
- display - display
- encoder - encoder
- studio
siblings: siblings:
- lotus58_left - lotus58_left
- lotus58_right - lotus58_right

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 |

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