diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
index 26513d6..8b0f8f1 100644
--- a/.github/workflows/deploy.yml
+++ b/.github/workflows/deploy.yml
@@ -23,13 +23,13 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
- name: Setup Pages
- uses: actions/configure-pages@v3
+ uses: actions/configure-pages@v5
- name: Upload artifact
- uses: actions/upload-pages-artifact@v2
+ uses: actions/upload-pages-artifact@v3
with:
path: "img/"
- name: Deploy to GitHub Pages
id: deployment
- uses: actions/deploy-pages@v2
+ uses: actions/deploy-pages@v4
diff --git a/.github/workflows/draw.yml b/.github/workflows/draw.yml
index 81e8a12..d4ca77a 100644
--- a/.github/workflows/draw.yml
+++ b/.github/workflows/draw.yml
@@ -5,10 +5,11 @@ on:
workflow_dispatch: # can be triggered manually
push:
paths:
- - "config/*.keymap"
+ - "config/corneish_zen.keymap"
- "config/*.dtsi"
- "knucklehead/*.dtsi"
- - "keymap_drawer.config.yaml"
+ - "keymap-drawer/config.yaml"
+ - ".github/workflows/draw.yml"
# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
@@ -18,14 +19,14 @@ concurrency:
jobs:
draw:
- uses: minusfive/keymap-drawer/.github/workflows/draw-zmk.yml@main
+ uses: caksoylar/keymap-drawer/.github/workflows/draw-zmk.yml@main
permissions:
contents: write
with:
install_branch: "main" # branch to install keymap-drawer from
- keymap_patterns: "config/*.keymap" # path to the keymaps to parse
- config_path: "keymap_drawer.config.yaml" # config file, ignored if not exists
- output_folder: "img" # path to save produced SVGs
+ keymap_patterns: "config/corneish_zen.keymap" # path to the keymaps to parse
+ config_path: "keymap-drawer/config.yaml" # config file, ignored if it doesn't exist
+ output_folder: "keymap-drawer" # path to save produced SVGs
# commit_message: "Draw: ${{ github.event.head_commit.message }}"
amend_commit: true # whether to amend the commit or create a new one
-
+ fail_on_error: true
diff --git a/.gitignore b/.gitignore
index 20354a8..3d758f2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,3 +5,4 @@ modules/
tools/
.west/
.DS_Store
+.venv/
diff --git a/README.md b/README.md
index 0971852..6d69f40 100644
--- a/README.md
+++ b/README.md
@@ -1,111 +1,116 @@
# ๐ Knucklehead
-Knucklehead is a mnemonic, macOS-optimized, 42[^1] key ergo columnar keyboard layout, designed[^2] to ease the transition [back-and-forth] between corne-style and Apple-style keyboards.
-
----
+Knucklehead[^1] is a mnemonic, macOS-optimized, 42 key ergonomic columnar layout for [corne-style split keyboards](https://github.com/foostan/crkbd), designed[^2] to ease the transition from standard ANSI Apple-style keyboards.
> [!WARNING]\
-> Under **_active development_**, expect changes. Scarce/incomplete documentation. Use at your own risk.
+> Under **_active development_**. Expect breaking changes and scarce/incomplete documentation.
-> [!NOTE]\
-> This layout was primarily **designed for [Colemak-DH](https://colemakmods.github.io/mod-dh/)** and influenced by decades of muscle memory using ANSI Apple keyboards.
->
-> By request I've started working on other alpha layouts, such as:
->
-> - [QWERTY](/minusfive/zmk-config/tree/QWERTY)
-> - [Colemak](/minusfive/zmk-config/tree/Colemak)
->
-> But keep in mind that while many of the mnemonic affordances will work well regardless of layout, many others will be "lost in translation".
+> [!IMPORTANT]\
+> [Home Row Mods](#timer-less-home-row-mods) are now enabled by default. To use the previous version, switch to the [legacy branch](/minusfive/zmk-config/tree/legacy).
----
+## [![Build ZMK firmware](https://github.com/minusfive/zmk-config/actions/workflows/build.yml/badge.svg)](https://github.com/minusfive/zmk-config/actions/workflows/build.yml)
-
+
![minusfive's Corne-ish Zen](img/corneish_zen.png)
-> Drawn with [Keymap Drawer](/caksoylar/keymap-drawer)
+> Drawn with [@caksoylar's Keymap Drawer](https://github.com/caksoylar/keymap-drawer)
## Legend
-| Symbol | Key Name |
-| :----: | ------------------------------------------------------------- |
-| โ | Control |
-| โฅ | Option |
-| โ | Command |
-| โง | Shift |
-| โช | Caps Lock |
-| โฒ | โโฅโง at once (a.k.a. "Meh") |
-| โซ | Backspace |
-| โฆ | Delete |
-| โ | Return |
-| โฅ | Tab |
-| โฃ | Space |
-| `w` | [Smart `w`ord behavior](#smart-word-behaviors) |
-| `ร` | [E`x`it smart `w`ord behavior](#exiting-smart-word-behaviors) |
-| `L1` | Layer 1 |
-| `L2` | Layer 2 |
-| `Fn` | Function Layer |
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+| Symbol | Key Name | Symbol | Key Name |
+| :----: | -------------------------------------------- | :----: | --------------------------------------------------------- |
+| ๐ | [Smart ๐ord behavior](#smart-๐ord-behaviors) | ๐ | [E๐it smart ๐ord behavior](#e๐iting-smart-๐ord-behaviors) |
+| โ | Control | โฅ | Tab |
+| โฅ | Option | โฃ | Space |
+| โ | Command | โก | Page Up |
+| โฒ | Meh (โ + โฅ + โง) | โฃ | Page Down |
+| โง | Shift | โญ | Brightness Up |
+| โช | Caps Lock | โฏ | Brightness Down |
+| โซ | Backspace | โฒ | Firmware reset (hold: bootloader mode) |
+| โฆ | Delete | `L1` | Layer 1 |
+| โ | Return | `L2` | Layer 2 |
+| โป | Power | `Fn` | Function Layer |
## Features
### Mnemonic Affordances
-> [!IMPORTANT]\
-> These are in the context of the (default) Colemak-DH layout.
-> Many will be lost in translation when using other alpha layouts.
+> [!NOTE]\
+> These are **optimized for the [Colemak-DH](https://colemakmods.github.io/mod-dh/)** layout. While many will work well regardless of layout, others will be "lost in translation".
+>
+> [Other layouts available](#using-layouts-other-than-colemak-dh):
+>
+> - [QWERTY](./knucklehead/L1_qwerty.dtsi)
+> - [Colemak](./knucklehead/L1_colemak.dtsi)
+>
+> See: [Using layouts other than Colemak-DH](#using-layouts-other-than-colemak-dh)
-| Key | Cue | Mnemonic Affordance(s) |
-| --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| **โ** | `C` or `,` | `C`ommand, `Comma`nd |
-| **โฅ** | `X` | shape similarity |
-| **โ** | `A` | shape similarity, proximity |
-| **^** | `A + Z` | (Caret) shape similarity, proximity |
-| **โฅ** | **โฃ** or **โ** | space multiplier, proximity; also near **โ** which is combined with for app switching |
-| `` ` ~ `` | `H`, **โฅ** or **โ** | `~` a.k.a. "home" directory on 'nix systems; proximity. Same position, opposite hand as **โฅ**, typically found near each other on Apple keyboards; also near **โ** which is combined with for window switching |
-| `- _` | `N + L` | `N`egative, `L`ow |
-| `= +` | `E + U` | `E`quals, `U`p (`+`) |
-| `[ {` | `N + H` | proximity; used to define a `N`ew `H`ash table/map on many programming languages; adjacent to `] }` |
-| `] }` | `E + ,` | proximity; used to `E`nd hash tables/maps on many programming languages; `,` is also typically used to delimit items within hash tables/maps; adjacent to `[ {` |
-| `\ \|` | `I + .` or `/ ?` | shape similarity, proximity; logical `OR` โ same position, opposite hand as `&` (logical `AND`) ย |
-| `&` | `R + X` | shape similarity; logical `AND` โ same position, opposite hand as `\|` (logical `OR`) |
-| `*` | `S + C` | `S`tar, wild `C`ard |
-| **โช** | **โง** | same position as โง (shift), but on `Fn` layer |
-| `! @ # $ %` `^ & * ( )` | `1 2 3 4 5` `6 7 8 9 0` | symbols maintain their standard ANSI association with numbers as laid-out on `L2`, replicated as combos on `L1` and `L2` |
-| `-_ =+` `[{ ]} \|\` | Apple ANSI position | this key cluster retains their order/position relative to each other on Apple keyboards, but is to vertical combos more easily accessible to stronger fingers. |
-| `Fn` **โ** **โฅ** **โ** **โ** **โฅ** **โ** `Fn` | Apple ANSI position | `Fn` and modifiers cluster retains their familiar Apple keyboard lower left corner (mirrored on the right) relative position and order |
+| Key | Cue | Mnemonic Affordance(s) |
+| --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| **โฅ** (Tab) | **โฃ** (Space) | Tab as a space multiplier; proximity. |
+| `` ` ~ `` | `H`, **โฅ** (Tab) | `~` a.k.a. "`H`ome" directory on 'nix systems; proximity. Same position, opposite hand as **โฅ** (Tab), typically adjacent on Apple keyboards. |
+| `- _` | `N + L` | `N`egative, `L`ow; adjacent to `= +` |
+| `= +` | `E + U` | `E`quals, `U`p (`+`); adjacent to `- _` |
+| `[ {` | `N + H` | Proximity; used to define a `N`ew `H`ash table/map on many programming languages; adjacent to `] }` |
+| `] }` | `E + ,` | Proximity; used to `E`nd hash tables/maps on many programming languages; `,` is also typically used to delimit items within hash tables/maps; adjacent to `[ {` |
+| `-_ =+` `[{ ]} \|\` | Apple ANSI position | This key cluster retains their order/position relative to each other as on Apple keyboards, but moved to vertical combos more easily accessible to stronger fingers. |
+| `\| \` | `I + .` or `/ ?` | Shape similarity, proximity; logical `OR` โ same position, opposite hand as `&` (logical `AND`) ย |
+| `&` | `R + X` | Shape similarity; logical `AND` โ same position, opposite hand as `\|` (logical `OR`) |
+| `*` | `S + C` | `S`tar, wild `C`ard |
+| **โช** (Caps Lock) | **โง** (Shift) | Same position as โง (shift), but on `Fn` layer |
+| `! @ # $ %` `^ & * ( )` | `1 2 3 4 5` `6 7 8 9 0` | Symbols maintain their standard ANSI association with numbers as laid-out on `L2`, replicated as combos on `L1` and `L2` |
+| `Fn` | Apple ANSI position | `Fn` keys retains their familiar lower left corner position, mirrored on the right. |
+
+### Other Associative Affordances
+
+Keys are repositioned in clusters to either "familiar" relative positions, or otherwise logical ones, using ANSI Apple keyboards as a reference, e.g.:
+
+- Arrow keys are placed on `Layer 2` in traditional `VIM + QWERTY` positions.
+- `;:` is accessible as a combo on a stronger finger, but retains its own relative position to the `'"` key.
+- `1โ5` numbers retain their familiar "left, upper-row" position on `Layer 2`, while `6โ0` are positioned in the next row below. This not only feels natural for single handed numeric typing, but also moves the most used symbols [for programming] to more accessible positions.
+- `Fn` keys are aligned with their corresponding numeric positions on `Layer 2`.
+- Bluetooth profile selector combos on the `Fn` layer are aligned with their corresponding numeric positions.
+- Media keys retain almost their relative position, except they're re-arranged a bit so:
+ - `volume up / down` align with `+ / -` and `Up / Down` arrows, and `U` ("up") and `L` ("low") keys.
+ - `back / forward` align with `Left / Right` arrows.
+
+---
+
+### Static, Associative Key Placement
+
+This layout aims to keep keys (and combos) in the same place across layers, and to strike a balance between comfort and intuitiveness.
+Layers may enhance that key's functionality, or replace it with another key, but that key itself won't move to a different location.
+
+When a key is replaced on upper layers, an associative mnemonic is used to make it easier to orientate yourself in the new layer (e.g. `Fn` keys are placed in the same positions as their corresponding numbers on `Layer 2`).
+
+On upper layers unused keys are "[transparent](https://zmk.dev/docs/behaviors/misc#transparent)", so events flow down to (and are activated on) the base layer, and thus the base layer's key placement is preserved.
+
+Together with the [single base layer](#single-base-layer) and [upper layer swapping](#upper-layer-swapping), these principles of static, associative key placement aim to make the [modal nature of layers]() more intuitive and predictable, enabling faster development of muscle memory.
+
+---
+
+### Timer-less Home Row Mods
+
+By using [@urob's Timer-less](https://github.com/urob/zmk-config?tab=readme-ov-file#timeless-homerow-mods) [Home Row Mods](https://precondition.github.io/home-row-mods), modifier keys (`โ`, `โฅ`, `โ`, `โฒ`) can be activated by holding keys in the "home row", consistently across layers, without interfering with normal typing (i.e. without the need to tap a key within a certain time window).
+
+> [!NOTE]\
+> To hold-repeat a key in the home row (or any other dual-purpose key), simply tap it twice and hold.
---
-### Smart `w`ord Behaviors
+### Smart ๐ord Behaviors
A smart word behavior is one where, to perform an action for which you would normally `hold` a key, you're only required to `tap` it at the beginning of a sequence to "enter" that special mode, and you remain in that mode until you press a key not in the defined "continue-list" (a "break-word" key, like **โฃ** [space]), **_or_** until you explicitly "exit" that mode.
The most common example of this type of behavior is [ZMK's `&caps_word`](https://zmk.dev/docs/behaviors/caps-word) (or [QMK's](https://docs.qmk.fm/#/feature_caps_word)).
-This layout uses 2 smart word behaviors (marked with the `w` symbol):
+This layout uses 2 smart word behaviors (marked with the ๐ symbol):
-> [!IMPORTANT]\
-> Both of these were taken from [@urob's fantastic layout](/urob/zmk-config), and use his [ZMK fork](/urob/zmk) which include a couple of (popular, but yet-to-be-merged) PRs to ZMK necessary for this to work.
+> [!NOTE]\
+> Both of these were taken from [@urob's fantastic layout](/urob/zmk-config).
#### Smart Shift
@@ -128,18 +133,18 @@ Both inner thumbs (marked as `L2` on `L1`) will act as follows:
| `tap` | [Sticky layer behavior](https://zmk.dev/docs/behaviors/sticky-layer), i.e. will switch to `L2` until the next key pressed (within 1s), and immediately exit back to `L1`. Useful to use single-handed sticky modifiers, entering a single number, single arrow movements, single media key actions, etc. |
| `double-tap` | Stays on `L2` while numbers, arrows, `, . / - _ + = *`, โซ or โฆ are pressed. Useful when entering longer numeric sequences, math operations, repetitive arrow navigation, etc. |
-#### E`x`iting Smart `w`ord Behaviors
+#### E๐iting Smart ๐ord Behaviors
-Sometimes you may enter a smart behavior by accident, or may need to cancel it to accommodate special use cases. For these situations there are special "cancel" keys, marked with an `x`:
+Sometimes you may enter a smart behavior by accident, or may need to cancel it to accommodate special use cases. For these situations there are special "cancel" keys, marked with an ๐:
-On `L1` the right-most `x` key (top row, right hand) โ and since on `L2` that key position is "[transparent](https://zmk.dev/docs/behaviors/misc#transparent)", it's essentially the same key on that layer โ will cancel any smart word behavior (i.e. it will exit `&caps_word`, and/or exit `L2`'s smart layer behavior and bump you back to `L1`).
+On `L1` the right-most ๐ key (top row, right hand) โ and since on `L2` that key position is "[transparent](https://zmk.dev/docs/behaviors/misc#transparent)", it's essentially the same key on that layer โ will cancel any smart word behavior (i.e. it will exit `&caps_word`, and/or exit `L2`'s smart layer behavior and bump you back to `L1`).
It's positioned to mirror the traditional `ESC` key since it's another type of "escape".
On `L2` the same thumb keys you use to summon it will act as follows:
| Action | Effect |
| ------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `tap` | Will exit the smart layer behavior and bump you back to `L1`. (It will also cancel `&caps_word`, so it can be used for that as well; from `L1` this would technically be a `triple-tap`, so the top-right `x` key is more convenient) |
+| `tap` | Will exit the smart layer behavior and bump you back to `L1`. (It will also cancel `&caps_word`, so it can be used for that as well; from `L1` this would technically be a `triple-tap`, so the top-right ๐ key is more convenient) |
| `hold` | Will also exit the smart layer behavior, but will immediately enter the normal [`&mo` "momentary layer"](https://zmk.dev/docs/behaviors/layers#momentary-layer) behavior as well and remain on `L2`, so as long as you keep holding it you shouldn't see a difference, but as soon as you let go you'll be bumped back to `L1`.
I implemented this to account for accidental "muscle memory" hold actions, making it more forgiving and less confusing. |
---
@@ -161,57 +166,31 @@ Since the aim of this keymap is to meet newcomers half-way (specifically those t
#### Upper Layer Swapping
-Additionally, in order to prevent even momentary layer stacking, a "cancel" (`x`) event is triggered in some circumstances prior to switching to a layer, so that you're first bumped back down to `L1` before switching to the desired layer.
+Additionally, in order to prevent even momentary layer stacking, a "cancel" (๐) event is triggered in some circumstances prior to switching to a layer, so that you're first bumped back down to `L1` before switching to the desired layer.
This all happens transparently without delay, so from your perspective you just "swapped" upper layers, instead of stacking them.
This ensures any transparent keys in that upper layer will fall through to `L1`, and sticky timeouts will bump you back to `L1` immediately, as you would expect.
-These special cases are marked with the same `x` symbol.
+These special cases are marked with the same ๐ symbol.
**Without this behavior**, for example, it might've been confusing if you pressed the `Fn` key while on `L2`'s smart layer mode, and pressed a transparent key expecting an `L1` keycode when instead you get an `L2`.
-#### Static Key Placement
-
-This layout also aims to keep keys in the same place across layers.
-Layers may change/enhance that key's functionality, or replace it with another key, but that key itself won't move to a different location.
-On upper layers unused keys are "[transparent](https://zmk.dev/docs/behaviors/misc#transparent)", so events flow down to (and are activated on) the base layer.
-
-Together with the [single base layer](#single-base-layer) and [upper layer swapping](#upper-layer-swapping), static key placement aims to make layers more intuitive and predictable.
-
---
-### Other Features
-
-Keys are repositioned in clusters to either "familiar" relative positions, or otherwise logical ones, using ANSI Apple keyboards as a reference, e.g.
-
-- `;:` is accessible as a combo on a stronger finger, but retains its own relative position to the `'"` key.
-- `1โ5` numbers retain their familiar "left, upper-row" position on `Layer 2`
-- `6โ0` are right below `1โ5` on `Layer 2`'s left hand home-row. This not only feels natural for single handed numeric typing, but also moves the most used symbols [for programming] to more accessible positions.
-- `Fn`, `Control`, `Option` and `Command` keep their relative Apple keyboard positions, but are moved to "mod-tap" keys on `Layer 1`, and on the same position but as "sticky keys" on `Layer 2`. This allows for easy 2 handed or 1 handed shortcuts.
-- Arrow keys are moved to `Layer 2` on traditional VIM positions.
-- **โฅ** and `` `~ `` are moved to inner thumbs on each hand, where their proximity to the `Command` key makes typical App/Window switching a more comfortable, symmetrical "pinch" ๐ค motion.
-- `Fn` key is duplicated on the right/bottom corner, and it activates the `Fn` layer, which has all `F` keys organized in the same position as their corresponding numbers on `Layer 2` (plus 2 extra ones which go where you imagine they would).
-- Bluetooth profile selectors can also be found on the `Fn` layer, as combos aligned with their corresponding numeric positions.
-- Media keys retain almost their relative position, except they're re-arranged a bit so:
- - `volume up / down` align with `+ / -` and `Up / Down` arrows, and `U` ("up") and `L` ("low") keys.
- - `back / forward` align with `Left / Right` arrows.
-
-A 4th `Meh` modifier is added to the cluster which corresponds to pressing `Control`, `Option` and `Shift` but with a single key, instead of 3. This makes complex shortcuts significantly more comfortable (works great for window managers, app launchers, etc.).
+## Using layouts other than Colemak-DH
----
+In order to use layouts other than the default [Colemak-DH](https://colemakmods.github.io/mod-dh/) layout, you'll need to comment-out the `#include "L1_colemak-dh.dtsi"` statement in [./knucklehead/base.dtsi](./knucklehead/base.dtsi), and uncomment the corresponding layout file you wish to use. E.g.:
-## F.A.Q.s
+```diff
+# ./knucklehead/base.dtsi
-#### Why "Knucklehead"?
+-#include "L1_colemak-dh.dtsi"
++// #include "L1_colemak-dh.dtsi"
-While searching for mnemonic-related names I saw the primary image on the [Wikipedia article for "mnemonic"](https://en.wikipedia.org/wiki/Mnemonic) (a representation of the [Knuckle mnemonic](https://en.wikipedia.org/wiki/Knuckle_mnemonic)), and it occurred to me it'd be a relevant and **_funny_** name (like a slightly more rude version of "a layout for dummies").
-The fact that the combos kind of resemble knuckles is just another happy coincidence. Ehrmโฆ I mean, _totally planned_.
+-// #include "L1_qwerty.dtsi"
++#include "L1_qwerty.dtsi"
+```
-#### Why no "home row mods"?
-
-- I wanted to keep them in the same position across layers without dictating the position of nor interfering with other typically held keys (e.g. arrows).
-- I wanted to diminish their interference with normal/fast typing without over-complicating their implementation, timing configuration, etc. Putting them on "less used" keys helps.
-- Decades of muscle memory for I don't know how many shortcuts across who knows how many apps had me unconsciously reaching for those positions anyway.
-- I feel like the deliberate, paused, "non-rolly" way I tend to use mods makes home position unnecessary.
-- While they don't eliminate hand movement like HMRs, on this new position they still greatly minimize movement/effort, improve comfort when compared to their traditional Apple keyboard position, with the added benefit of leveraging some of your muscle memory.
+> [!NOTE]\
+> Feel free to submit [PRs](/pulls) with additional layouts, or [open an issue](/issues) if you need help with a specific layout. Of course, you're also always welcome to fork this repo and create your own custom layouts.
---
@@ -222,35 +201,11 @@ The fact that the combos kind of resemble knuckles is just another happy coincid
- [ZMK Discord Server](https://zmk.dev/community/discord/invite)
- [@caksoylar's Keymap Drawer](/caksoylar/keymap-drawer), [ZMK config](/caksoylar/zmk-config) and [Display improvements for Corne-ish Zen](https://gist.github.com/caksoylar/c411313990978e1903c244f03039187a)
- [@urob's ZMK config](/urob/zmk-config)
-- ["Callum-style Mods"](/qmk/qmk_firmware/blob/master/users/callum/readme.md)
- [Colemak-DH](https://colemakmods.github.io/mod-dh/) and the [Effort Grid](https://colemakmods.github.io/mod-dh/model.html)
- [Darryl's amazing Corne-ish Zen](https://lowprokb.ca/collections/keyboards/products/corne-ish-zen)
---
-> [!IMPORTANT]\
-> Content below was inherited from the default Corne-ish Zen ZMK configuration repository, which is where this repo was forked from. It still needs to be updated, but leaving it here for now because it's still relevant.
-
-## Customization Instructions
-
-1. Edit the keymap file(s):
- - Change [the keymap file](/config/corneish_zen.keymap) to edit keycodes, add new layers etc.
- - Change [the conf file](/config/corneish_zen.conf) to edit configuration settings like changing the deep sleep timeout
-2. Commit and push. GitHub Actions will start building a new version of the firmware with the updated keymap and drawing.
-
-## Firmware Files
-
-To locate your firmware files...
-
-1. Click "Actions" in the main navigation, and in the left navigation click the "Build" link.
-2. Select the desired workflow run in the centre area of the page (based on date and time of the build you wish to use). You can also start a new build from this page by clicking the "Run workflow" button.
-3. After clicking the desired workflow run, you should be presented with a section at the bottom of the page called "Artifacts". This section contains the results of your build, in a file called "firmware.zip"
-4. Download the firmware zip archive and extract the two `.uf2` files. They are named according to which side they need to be flashed to.
-5. Flash the firmware to your keyboard by double-clicking the reset button to put the it in bootloader mode. A window should pop up showing the contents of the storage on the keyboard. Drag and drop the correct `.uf2` file into the window. When the upload is complete the window will close and the keyboard will exit bootloader mode.
- - If you only changed [the keymap file](/config/corneish_zen.keymap) you only need to flash the left side firmware to the left side.
- - If you changed [the conf file](/config/corneish_zen.conf) you should flash both sides their respective files.
-
-Your keyboard is now ready to use.
+[^1]: Name inspired by Inspired by the [Knuckle mnemonic](https://en.wikipedia.org/wiki/Knuckle_mnemonic)).
-[^1]: Currently 42 keys because that's what I use, but honestly sometimes I feels like I have a few keys I don't know what to do with; though I often go back to re-adding them when I try removing them, so :shrug:. May make it work for other boards in the future, but may not be a priority for a while. No promises.
[^2]: Well, "designed" is perhaps too strong a word. I've haphazardly and painfully iterated over dozens of permutations, gradually removing annoyances / disruptions to my flow.
diff --git a/config/corne.conf b/config/corne.conf
index 3148568..f6d3772 100644
--- a/config/corne.conf
+++ b/config/corne.conf
@@ -1,12 +1,30 @@
-# Uncomment the following line to enable deep sleep
-# CONFIG_ZMK_SLEEP=y
+# Turn on logging, and set ZMK logging to debug output
+# CONFIG_ZMK_USB_LOGGING=y
+
+# Reset BT connections on next firmware boot
+# CONFIG_ZMK_BLE_CLEAR_BONDS_ON_START=y
-# Uncomment the following line to increase the keyboard's wireless range
+# Boost Bluetooth TX power
CONFIG_BT_CTLR_TX_PWR_PLUS_8=y
+# Require passkey on pairing
+CONFIG_ZMK_BLE_PASSKEY_ENTRY=y
+
+# Sleep timeout 30 minutes
+CONFIG_ZMK_SLEEP=y
+CONFIG_ZMK_IDLE_SLEEP_TIMEOUT=1800000
+
# Enable eager debouncing
CONFIG_ZMK_KSCAN_DEBOUNCE_PRESS_MS=1
CONFIG_ZMK_KSCAN_DEBOUNCE_RELEASE_MS=7
-# Uncomment the following line to enable USB Logging (this increases power usage by a significant amount, turn it off when not in use)
-# CONFIG_ZMK_USB_LOGGING=y
+# Fix battery reporting on Windows
+CONFIG_BT_GATT_ENFORCE_SUBSCRIPTION=n
+
+# Experimental: BLE improvements
+CONFIG_ZMK_BLE_EXPERIMENTAL_FEATURES=y
+
+# Report battery peripheral battery level
+CONFIG_ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_PROXY=y
+CONFIG_ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_FETCHING=y
+
diff --git a/config/corne.keymap b/config/corne.keymap
index a2c36a5..e75da32 100644
--- a/config/corne.keymap
+++ b/config/corne.keymap
@@ -6,11 +6,3 @@
#include "../knucklehead/base.dtsi"
-// Alpha layer: uncomment desired, comment the others
-#include "../knucklehead/L1_colemak-dh.dtsi"
-// #include "../knucklehead/L1_colemak.dtsi"
-// #include "../knucklehead/L1_qwerty.dtsi"
-
-// Other layers
-#include "../knucklehead/L2.dtsi"
-#include "../knucklehead/L3.dtsi"
diff --git a/config/corneish_zen.conf b/config/corneish_zen.conf
index 97d8bb8..4137a08 100644
--- a/config/corneish_zen.conf
+++ b/config/corneish_zen.conf
@@ -1,6 +1,9 @@
# Turn on logging, and set ZMK logging to debug output
# CONFIG_ZMK_USB_LOGGING=y
+# Reset BT connections on next firmware boot
+# CONFIG_ZMK_BLE_CLEAR_BONDS_ON_START=y
+
# Boost Bluetooth TX power
CONFIG_BT_CTLR_TX_PWR_PLUS_8=y
@@ -11,19 +14,30 @@ CONFIG_ZMK_BLE_PASSKEY_ENTRY=y
CONFIG_ZMK_SLEEP=y
CONFIG_ZMK_IDLE_SLEEP_TIMEOUT=1800000
-# Reset BT connections on next firmware boot
-# CONFIG_ZMK_BLE_CLEAR_BONDS_ON_START=y
+# Enable eager debouncing
+CONFIG_ZMK_KSCAN_DEBOUNCE_PRESS_MS=1
+CONFIG_ZMK_KSCAN_DEBOUNCE_RELEASE_MS=7
+
+# Fix battery reporting on Windows
+CONFIG_BT_GATT_ENFORCE_SUBSCRIPTION=n
+
+# Experimental: BLE improvements
+CONFIG_ZMK_BLE_EXPERIMENTAL_FEATURES=y
+
+# Report battery peripheral battery level
+CONFIG_ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_PROXY=y
+CONFIG_ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_FETCHING=y
+
+# Stock status screen
+# CONFIG_ZMK_DISPLAY_HIDE_MOMENTARY_LAYERS=y
+# CONFIG_CUSTOM_WIDGET_LAYER_STATUS_HIDE_HEADING=y
+# CONFIG_CUSTOM_WIDGET_LOGO_IMAGE_ZMK=y
-#######################
# Zen display tweaks
-# https://gist.github.com/caksoylar/c411313990978e1903c244f03039187a
-#######################
-CONFIG_ZMK_DISPLAY_FULL_REFRESH_PERIOD=300
+# - See: https://gist.github.com/caksoylar/c411313990978e1903c244f03039187a
+# CONFIG_ZMK_DISPLAY_FULL_REFRESH_PERIOD=300
# Invert display
# CONFIG_IL0323_INVERT=y
# Use alternative refresh method
# CONFIG_IL0323_ALTERNATIVE_REFRESH=y
-# Stock status screen
-#CONFIG_ZMK_DISPLAY_HIDE_MOMENTARY_LAYERS=y
-CONFIG_CUSTOM_WIDGET_LAYER_STATUS_HIDE_HEADING=y
-#CONFIG_CUSTOM_WIDGET_LOGO_IMAGE_ZMK=y
+
diff --git a/config/corneish_zen.keymap b/config/corneish_zen.keymap
index b9ada91..6e9c726 100644
--- a/config/corneish_zen.keymap
+++ b/config/corneish_zen.keymap
@@ -6,17 +6,9 @@
#include "../knucklehead/base.dtsi"
-// Alpha layer: uncomment desired, comment the others
-#include "../knucklehead/L1_colemak-dh.dtsi"
-// #include "../knucklehead/L1_colemak.dtsi"
-// #include "../knucklehead/L1_qwerty.dtsi"
-
-// Other layers
-#include "../knucklehead/L2.dtsi"
-#include "../knucklehead/L3.dtsi"
-
/ {
chosen {
zmk,matrix_transform = &default_transform;
};
};
+
diff --git a/config/west.yml b/config/west.yml
index f709e56..784860d 100644
--- a/config/west.yml
+++ b/config/west.yml
@@ -1,11 +1,46 @@
+# Copied from: https://github.com/urob/zmk-config/blob/main/config/west.yml
+#
+# This file specifies the build dependencies for Github Action workflows and
+# for local build environments. The workspace has three toplevel directories
+# containing the user config, user modules and ZMK. Zephyr and its dependencies
+# are namespaced under /zmk to keep the toplevel clean.
+#
+# ZMK-Workspace
+# โโโ config
+# โโโ modules (user modules)
+# โโโ zmk
+# โโโ modules (Zephyr modules)
+#
+# To create a local build environment, clone this repository and then run the
+# following commands from its toplevel directory:
+#
+# $ west init -l config
+# $ west update
+# $ west zephyr-export
+#
+---
manifest:
remotes:
+ - name: zmkfirmware
+ url-base: https://github.com/zmkfirmware
- name: urob
url-base: https://github.com/urob
+ - name: caksoylar
+ url-base: https://github.com/caksoylar
+
projects:
- name: zmk
+ remote: zmkfirmware
+ import: app/west.yml
+ revision: main
+
+ - name: zmk-auto-layer
remote: urob
revision: main
- import: app/west.yml
+
+ - name: zmk-tri-state
+ remote: caksoylar
+ revision: split-locality
+
self:
path: config
diff --git a/img/corne.svg b/img/corne.svg
deleted file mode 100644
index 65fec7d..0000000
--- a/img/corne.svg
+++ /dev/null
@@ -1,1237 +0,0 @@
-
diff --git a/img/corne.yaml b/img/corne.yaml
deleted file mode 100644
index 55683af..0000000
--- a/img/corne.yaml
+++ /dev/null
@@ -1,203 +0,0 @@
-layout: {qmk_keyboard: corne_rotated, qmk_layout: LAYOUT_split_3x6_3}
-layers:
- L1:
- - $$mdi:keyboard-esc$$
- - Q
- - W
- - F
- - P
- - B
- - J
- - L
- - U
- - Y
- - {t: '''', s: '"'}
- - $$mdi:close-box$$
- - {t: '$$mdi:backspace$$', s: '$$mdi:backspace-reverse-outline$$', type: backspace}
- - A
- - R
- - S
- - T
- - G
- - M
- - N
- - E
- - I
- - O
- - {t: '$$mdi:keyboard-return$$', type: enter}
- - {t: Fn, h: '$$mdi:close-box$$'}
- - {t: Z, h: '$$mdi:apple-keyboard-control$$'}
- - {t: X, h: '$$mdi:apple-keyboard-option$$'}
- - {t: C, h: '$$mdi:apple-keyboard-command$$'}
- - {t: D, h: '$$mdi:star-three-points$$'}
- - V
- - K
- - {t: H, h: '$$mdi:star-three-points$$'}
- - {t: ',', h: '$$mdi:apple-keyboard-command$$', s: <}
- - {t: ., h: '$$mdi:apple-keyboard-option$$', s: '>'}
- - {t: /, h: '$$mdi:apple-keyboard-control$$', s: '?'}
- - {t: Fn, h: '$$mdi:close-box$$'}
- - $$mdi:keyboard-tab$$
- - {t: '$$mdi:keyboard-space$$', h: '$$mdi:apple-keyboard-shift$$'}
- - {t: L2, h: '$$mdi:gesture-tap-hold$$', s: '$$mdi:alpha-w-box$$'}
- - {t: L2, h: '$$mdi:gesture-tap-hold$$', s: '$$mdi:alpha-w-box$$'}
- - {t: '$$mdi:apple-keyboard-shift$$', h: '$$mdi:gesture-tap-hold$$', s: '$$mdi:alpha-w-box$$'}
- - {t: '`', s: '~'}
- L2:
- - {t: '$$mdi:transfer$$', type: trans}
- - {t: '1', s: '!'}
- - {t: '2', s: '@'}
- - {t: '3', s: '#'}
- - {t: '4', s: $}
- - {t: '5', s: '%'}
- - $$mdi:skip-previous$$
- - $$mdi:volume-low$$
- - $$mdi:volume-high$$
- - $$mdi:skip-next$$
- - $$mdi:volume-off$$
- - {t: '$$mdi:transfer$$', type: trans}
- - {t: '$$mdi:transfer$$', type: trans}
- - {t: '6', s: ^}
- - {t: '7', s: '&'}
- - {t: '8', s: '*'}
- - {t: '9', s: (}
- - {t: '0', s: )}
- - $$mdi:arrow-left-bold$$
- - $$mdi:arrow-down-bold$$
- - $$mdi:arrow-up-bold$$
- - $$mdi:arrow-right-bold$$
- - {t: '$$mdi:transfer$$', type: trans}
- - {t: '$$mdi:transfer$$', type: trans}
- - {t: '$$mdi:transfer$$', type: trans}
- - {t: '$$mdi:apple-keyboard-control$$', h: '$$mdi:gesture-tap-hold$$'}
- - {t: '$$mdi:apple-keyboard-option$$', h: '$$mdi:gesture-tap-hold$$'}
- - {t: '$$mdi:apple-keyboard-command$$', h: '$$mdi:gesture-tap-hold$$'}
- - {t: '$$mdi:star-three-points$$', h: '$$mdi:gesture-tap-hold$$'}
- - {t: '$$mdi:transfer$$', type: trans}
- - {t: '$$mdi:transfer$$', type: trans}
- - {t: '$$mdi:star-three-points$$', h: '$$mdi:gesture-tap-hold$$'}
- - {t: '$$mdi:transfer$$', type: trans}
- - {t: '$$mdi:transfer$$', type: trans}
- - {t: '$$mdi:transfer$$', type: trans}
- - {t: '$$mdi:transfer$$', type: trans}
- - {t: '$$mdi:transfer$$', type: trans}
- - {t: '$$mdi:transfer$$', type: trans}
- - {t: '$$mdi:close-box$$', h: L2}
- - {t: '$$mdi:close-box$$', h: L2}
- - {t: '$$mdi:transfer$$', type: trans}
- - {t: '$$mdi:transfer$$', type: trans}
- Fn:
- - {t: '$$mdi:toggle-switch$$', h: '$$mdi:bluetooth$$', s: '$$mdi:usb$$'}
- - F1
- - F2
- - F3
- - F4
- - F5
- - {t: '$$mdi:transfer$$', type: trans}
- - {t: '$$mdi:transfer$$', type: trans}
- - {t: '$$mdi:transfer$$', type: trans}
- - {t: '$$mdi:transfer$$', type: trans}
- - {t: '$$mdi:transfer$$', type: trans}
- - $$mdi:power-standby$$
- - {t: '$$mdi:backup-restore$$', type: bootloader}
- - F6
- - F7
- - F8
- - F9
- - F10
- - {t: '$$mdi:transfer$$', type: trans}
- - {t: '$$mdi:transfer$$', type: trans}
- - {t: '$$mdi:transfer$$', type: trans}
- - {t: '$$mdi:transfer$$', type: trans}
- - {t: '$$mdi:transfer$$', type: trans}
- - {t: '$$mdi:backup-restore$$', type: bootloader}
- - {t: '$$mdi:close-box$$', h: Fn}
- - F11
- - F12
- - {t: '$$mdi:transfer$$', type: trans}
- - {t: '$$mdi:transfer$$', type: trans}
- - $$mdi:progress-download$$
- - $$mdi:progress-download$$
- - {t: '$$mdi:transfer$$', type: trans}
- - {t: '$$mdi:transfer$$', type: trans}
- - {t: '$$mdi:transfer$$', type: trans}
- - {t: '$$mdi:transfer$$', type: trans}
- - {t: '$$mdi:close-box$$', h: Fn}
- - $$mdi:brightness-7$$
- - $$mdi:brightness-5$$
- - {t: '$$mdi:close-box$$', h: L2}
- - {t: '$$mdi:close-box$$', h: L2}
- - $$mdi:apple-keyboard-caps$$
- - {t: '$$mdi:transfer$$', type: trans}
-combos:
-- p: [1, 13]
- k: '!'
- l: [L1, L2]
-- p: [2, 14]
- k: '@'
- l: [L1, L2]
-- p: [3, 15]
- k: '#'
- l: [L1, L2]
-- p: [4, 16]
- k: $
- l: [L1, L2]
-- p: [5, 17]
- k: '%'
- l: [L1, L2]
-- p: [13, 25]
- k: ^
- l: [L1, L2]
-- p: [14, 26]
- k: '&'
- l: [L1, L2]
-- p: [15, 27]
- k: '*'
- l: [L1, L2]
-- p: [16, 28]
- k: (
- l: [L1, L2]
-- p: [17, 29]
- k: )
- l: [L1, L2]
-- p: [7, 19]
- k: {h: '-', s: _}
- l: [L1, L2, Fn]
-- p: [8, 20]
- k: {h: '=', s: +}
- l: [L1, L2, Fn]
-- p: [9, 21]
- k: {h: ;, s: ':'}
- l: [L1, L2, Fn]
-- p: [19, 31]
- k: {h: '[', s: '{'}
- l: [L1, L2, Fn]
-- p: [20, 32]
- k: {h: ']', s: '}'}
- l: [L1, L2, Fn]
-- p: [21, 33]
- k: {h: \, s: '|'}
- l: [L1, L2, Fn]
-- p: [1, 2, 3, 4]
- k: $$mdi:bluetooth-off$$
- l: [Fn]
- a: top
- o: 0.03
-- p: [1, 13]
- k: {h: '1', s: '$$mdi:bluetooth-connect$$'}
- l: [Fn]
-- p: [2, 14]
- k: {h: '2', s: '$$mdi:bluetooth-connect$$'}
- l: [Fn]
-- p: [3, 15]
- k: {h: '3', s: '$$mdi:bluetooth-connect$$'}
- l: [Fn]
-- p: [4, 16]
- k: {h: '4', s: '$$mdi:bluetooth-connect$$'}
- l: [Fn]
-- p: [5, 17]
- k: {h: '5', s: '$$mdi:bluetooth-connect$$'}
- l: [Fn]
-- p: [6, 7]
- k: $$mdi:play-pause$$
- l: [L1, L2, Fn]
diff --git a/keymap_drawer.config.yaml b/keymap-drawer/config.yaml
similarity index 99%
rename from keymap_drawer.config.yaml
rename to keymap-drawer/config.yaml
index 34d9544..75a531c 100644
--- a/keymap_drawer.config.yaml
+++ b/keymap-drawer/config.yaml
@@ -281,6 +281,7 @@ draw_config:
.hold {
dominant-baseline: ideographic;
fill: var(--color--key--text--hold);
+ translate: -25px 4px;
}
/*
@@ -311,7 +312,7 @@ draw_config:
}
.combo.hold {
font-size: 16px;
- /* translate: 2px 0px; */
+ translate: 0 0;
}
/*
@@ -462,6 +463,10 @@ parse_config:
tap: $$mdi:backup-restore$$
"&bootloader":
tap: $$mdi:progress-download$$
+ "&rst_boot 0 0":
+ type: bootloader
+ tap: $$mdi:backup-restore$$
+ hold: $$mdi:progress-download$$
# ZMK
zmk_keycode_map:
@@ -608,14 +613,15 @@ parse_config:
RSHIFT: $$mdi:apple-keyboard-shift$$
RSHFT: $$mdi:apple-keyboard-shift$$
RCMD: $$mdi:apple-keyboard-command$$
- # "Meh" key
- LS(LC(LALT)): $$mdi:star-three-points$$
+ LS(LC(LALT)): $$mdi:triangle$$ # Meh
# Arrows
UP: $$mdi:arrow-up-bold$$
DOWN: $$mdi:arrow-down-bold$$
LEFT: $$mdi:arrow-left-bold$$
RIGHT: $$mdi:arrow-right-bold$$
+ PG_UP: $$mdi:transfer-up$$
+ PG_DN: $$mdi:transfer-down$$
# Whitespace
ENTER:
diff --git a/img/corneish_zen.svg b/keymap-drawer/corneish_zen.svg
similarity index 94%
rename from img/corneish_zen.svg
rename to keymap-drawer/corneish_zen.svg
index 65fec7d..a19381e 100644
--- a/img/corneish_zen.svg
+++ b/keymap-drawer/corneish_zen.svg
@@ -1,4 +1,4 @@
-
+/* start glyphs */
@@ -87,15 +87,21 @@
-
-
-
+
+
+
+
+
+
+
+
+
@@ -348,6 +354,7 @@ rect.combo {
.hold {
dominant-baseline: ideographic;
fill: var(--color--key--text--hold);
+ translate: -25px 4px;
}
/*
@@ -378,7 +385,7 @@ path.combo {
}
.combo.hold {
font-size: 16px;
- /* translate: 2px 0px; */
+ translate: 0 0;
}
/*
@@ -455,7 +462,7 @@ path.combo {
}
-L1
+L1
@@ -518,34 +525,42 @@ path.combo {
R
+
S
+
T
+
G
+
M
+
N
+
E
+
I
+
@@ -563,22 +578,18 @@ path.combo {
Z
-
X
-
C
-
D
-
@@ -591,24 +602,20 @@ path.combo {
H
-
,
-
<.
-
>/
-
?
@@ -627,14 +634,16 @@ path.combo {
-L2
-
+
+L2
+
-L2
-
+
+L2
+
@@ -704,28 +713,36 @@ path.combo {
:
+
+
+
+
+
+
+
+[{
-
+]}
-
+\|
-
+
-L2
+L2
@@ -792,38 +809,46 @@ path.combo {
7
+
&8
+
*9
+
(0
+
)
+
+
+
+
@@ -837,25 +862,21 @@ path.combo {
-
-
-
-
+
+
+
-
-
-
-
+
+
+
-
-
-
-
+
+
+
-
-
-
-
+
+
+
@@ -865,10 +886,9 @@ path.combo {
-
-
-
-
+
+
+
@@ -897,13 +917,15 @@ path.combo {
-L2
-
+
+L2
+
-L2
-
+
+L2
+
@@ -968,29 +990,37 @@ path.combo {
:
+
+
+
+
+
+
+
+[{
-
+]}
-
+\|
-
+
-
-Fn
-
+
+L3
+
@@ -1044,6 +1074,7 @@ path.combo {
+
@@ -1052,18 +1083,22 @@ path.combo {
F7
+
F8
+
F9
+
F10
+
@@ -1088,6 +1123,7 @@ path.combo {
+
@@ -1110,13 +1146,13 @@ path.combo {
-
-
-
+
+
+
-
-
-
+
+
+
@@ -1150,13 +1186,15 @@ path.combo {
-L2
-
+
+L2
+
-L2
-
+
+L2
+
@@ -1181,21 +1219,29 @@ path.combo {
:
+
+
+
+
+
+
+
+[{
-
+]}
-
+\|
-
+
@@ -1203,32 +1249,32 @@ path.combo {
-
+1
-
+2
-
+3
-
+4
-
+5
-
+
diff --git a/img/corneish_zen.yaml b/keymap-drawer/corneish_zen.yaml
similarity index 67%
rename from img/corneish_zen.yaml
rename to keymap-drawer/corneish_zen.yaml
index 55683af..7a83f83 100644
--- a/img/corneish_zen.yaml
+++ b/keymap-drawer/corneish_zen.yaml
@@ -15,27 +15,27 @@ layers:
- $$mdi:close-box$$
- {t: '$$mdi:backspace$$', s: '$$mdi:backspace-reverse-outline$$', type: backspace}
- A
- - R
- - S
- - T
- - G
- - M
- - N
- - E
- - I
+ - {t: R, h: '$$mdi:apple-keyboard-control$$'}
+ - {t: S, h: '$$mdi:apple-keyboard-option$$'}
+ - {t: T, h: '$$mdi:apple-keyboard-command$$'}
+ - {t: G, h: '$$mdi:triangle$$'}
+ - {t: M, h: '$$mdi:triangle$$'}
+ - {t: N, h: '$$mdi:apple-keyboard-command$$'}
+ - {t: E, h: '$$mdi:apple-keyboard-option$$'}
+ - {t: I, h: '$$mdi:apple-keyboard-control$$'}
- O
- {t: '$$mdi:keyboard-return$$', type: enter}
- {t: Fn, h: '$$mdi:close-box$$'}
- - {t: Z, h: '$$mdi:apple-keyboard-control$$'}
- - {t: X, h: '$$mdi:apple-keyboard-option$$'}
- - {t: C, h: '$$mdi:apple-keyboard-command$$'}
- - {t: D, h: '$$mdi:star-three-points$$'}
+ - Z
+ - X
+ - C
+ - D
- V
- K
- - {t: H, h: '$$mdi:star-three-points$$'}
- - {t: ',', h: '$$mdi:apple-keyboard-command$$', s: <}
- - {t: ., h: '$$mdi:apple-keyboard-option$$', s: '>'}
- - {t: /, h: '$$mdi:apple-keyboard-control$$', s: '?'}
+ - H
+ - {t: ',', s: <}
+ - {t: ., s: '>'}
+ - {t: /, s: '?'}
- {t: Fn, h: '$$mdi:close-box$$'}
- $$mdi:keyboard-tab$$
- {t: '$$mdi:keyboard-space$$', h: '$$mdi:apple-keyboard-shift$$'}
@@ -58,24 +58,24 @@ layers:
- {t: '$$mdi:transfer$$', type: trans}
- {t: '$$mdi:transfer$$', type: trans}
- {t: '6', s: ^}
- - {t: '7', s: '&'}
- - {t: '8', s: '*'}
- - {t: '9', s: (}
- - {t: '0', s: )}
- - $$mdi:arrow-left-bold$$
- - $$mdi:arrow-down-bold$$
- - $$mdi:arrow-up-bold$$
- - $$mdi:arrow-right-bold$$
+ - {t: '7', h: '$$mdi:apple-keyboard-control$$', s: '&'}
+ - {t: '8', h: '$$mdi:apple-keyboard-option$$', s: '*'}
+ - {t: '9', h: '$$mdi:apple-keyboard-command$$', s: (}
+ - {t: '0', h: '$$mdi:triangle$$', s: )}
+ - {t: '$$mdi:arrow-left-bold$$', h: '$$mdi:triangle$$'}
+ - {t: '$$mdi:arrow-down-bold$$', h: '$$mdi:apple-keyboard-command$$'}
+ - {t: '$$mdi:arrow-up-bold$$', h: '$$mdi:apple-keyboard-option$$'}
+ - {t: '$$mdi:arrow-right-bold$$', h: '$$mdi:apple-keyboard-control$$'}
+ - {t: '$$mdi:transfer$$', type: trans}
+ - {t: '$$mdi:transfer$$', type: trans}
+ - {t: '$$mdi:transfer$$', type: trans}
+ - {t: '$$mdi:transfer$$', type: trans}
+ - {t: '$$mdi:transfer$$', type: trans}
- {t: '$$mdi:transfer$$', type: trans}
- {t: '$$mdi:transfer$$', type: trans}
- {t: '$$mdi:transfer$$', type: trans}
- - {t: '$$mdi:apple-keyboard-control$$', h: '$$mdi:gesture-tap-hold$$'}
- - {t: '$$mdi:apple-keyboard-option$$', h: '$$mdi:gesture-tap-hold$$'}
- - {t: '$$mdi:apple-keyboard-command$$', h: '$$mdi:gesture-tap-hold$$'}
- - {t: '$$mdi:star-three-points$$', h: '$$mdi:gesture-tap-hold$$'}
- {t: '$$mdi:transfer$$', type: trans}
- {t: '$$mdi:transfer$$', type: trans}
- - {t: '$$mdi:star-three-points$$', h: '$$mdi:gesture-tap-hold$$'}
- {t: '$$mdi:transfer$$', type: trans}
- {t: '$$mdi:transfer$$', type: trans}
- {t: '$$mdi:transfer$$', type: trans}
@@ -86,7 +86,7 @@ layers:
- {t: '$$mdi:close-box$$', h: L2}
- {t: '$$mdi:transfer$$', type: trans}
- {t: '$$mdi:transfer$$', type: trans}
- Fn:
+ L3:
- {t: '$$mdi:toggle-switch$$', h: '$$mdi:bluetooth$$', s: '$$mdi:usb$$'}
- F1
- F2
@@ -99,25 +99,25 @@ layers:
- {t: '$$mdi:transfer$$', type: trans}
- {t: '$$mdi:transfer$$', type: trans}
- $$mdi:power-standby$$
- - {t: '$$mdi:backup-restore$$', type: bootloader}
+ - {t: '$$mdi:backup-restore$$', h: '$$mdi:progress-download$$', type: bootloader}
- F6
- - F7
- - F8
- - F9
- - F10
+ - {t: F7, h: '$$mdi:apple-keyboard-control$$'}
+ - {t: F8, h: '$$mdi:apple-keyboard-option$$'}
+ - {t: F9, h: '$$mdi:apple-keyboard-command$$'}
+ - {t: F10, h: '$$mdi:triangle$$'}
- {t: '$$mdi:transfer$$', type: trans}
- {t: '$$mdi:transfer$$', type: trans}
- {t: '$$mdi:transfer$$', type: trans}
- {t: '$$mdi:transfer$$', type: trans}
- {t: '$$mdi:transfer$$', type: trans}
- - {t: '$$mdi:backup-restore$$', type: bootloader}
+ - {t: '$$mdi:backup-restore$$', h: '$$mdi:progress-download$$', type: bootloader}
- {t: '$$mdi:close-box$$', h: Fn}
- F11
- F12
- {t: '$$mdi:transfer$$', type: trans}
- {t: '$$mdi:transfer$$', type: trans}
- - $$mdi:progress-download$$
- - $$mdi:progress-download$$
+ - {t: '$$mdi:transfer$$', type: trans}
+ - {t: '$$mdi:transfer$$', type: trans}
- {t: '$$mdi:transfer$$', type: trans}
- {t: '$$mdi:transfer$$', type: trans}
- {t: '$$mdi:transfer$$', type: trans}
@@ -162,42 +162,48 @@ combos:
l: [L1, L2]
- p: [7, 19]
k: {h: '-', s: _}
- l: [L1, L2, Fn]
+ l: [L1, L2, L3]
- p: [8, 20]
k: {h: '=', s: +}
- l: [L1, L2, Fn]
+ l: [L1, L2, L3]
- p: [9, 21]
k: {h: ;, s: ':'}
- l: [L1, L2, Fn]
+ l: [L1, L2, L3]
+- p: [6, 18]
+ k: $$mdi:transfer-up$$
+ l: [L1, L2, L3]
+- p: [18, 30]
+ k: $$mdi:transfer-down$$
+ l: [L1, L2, L3]
- p: [19, 31]
k: {h: '[', s: '{'}
- l: [L1, L2, Fn]
+ l: [L1, L2, L3]
- p: [20, 32]
k: {h: ']', s: '}'}
- l: [L1, L2, Fn]
+ l: [L1, L2, L3]
- p: [21, 33]
k: {h: \, s: '|'}
- l: [L1, L2, Fn]
+ l: [L1, L2, L3]
- p: [1, 2, 3, 4]
k: $$mdi:bluetooth-off$$
- l: [Fn]
+ l: [L3]
a: top
o: 0.03
- p: [1, 13]
k: {h: '1', s: '$$mdi:bluetooth-connect$$'}
- l: [Fn]
+ l: [L3]
- p: [2, 14]
k: {h: '2', s: '$$mdi:bluetooth-connect$$'}
- l: [Fn]
+ l: [L3]
- p: [3, 15]
k: {h: '3', s: '$$mdi:bluetooth-connect$$'}
- l: [Fn]
+ l: [L3]
- p: [4, 16]
k: {h: '4', s: '$$mdi:bluetooth-connect$$'}
- l: [Fn]
+ l: [L3]
- p: [5, 17]
k: {h: '5', s: '$$mdi:bluetooth-connect$$'}
- l: [Fn]
+ l: [L3]
- p: [6, 7]
k: $$mdi:play-pause$$
- l: [L1, L2, Fn]
+ l: [L1, L2, L3]
diff --git a/knucklehead/L3.dtsi b/knucklehead/Fn.dtsi
similarity index 74%
rename from knucklehead/L3.dtsi
rename to knucklehead/Fn.dtsi
index 7d2615c..3cbdff6 100644
--- a/knucklehead/L3.dtsi
+++ b/knucklehead/Fn.dtsi
@@ -7,19 +7,19 @@
compatible = "zmk,keymap";
layer_3 {
- label = "Fn";
+ display-name = "L3";
bindings = <
// โญโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฎ โญโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฎ
-// 0 1 2 3 4 5 6 7 8 9 10 11
+// โ0 โ1 โ2 โ3 โ4 โ5 โ โ6 โ7 โ8 โ9 โ10 โ11 โ
&out OUT_TOG &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &trans &trans &trans &trans &trans &kp C_POWER
// โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโค โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโค
-// 12 13 14 15 16 17 18 19 20 21 22 23
- &sys_reset &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &trans &trans &trans &trans &trans &sys_reset
+// โ12 โ13 โ14 โ15 โ16 โ17 โ โ18 โ19 โ20 โ21 โ22 โ23 โ
+ &rst_boot 0 0 &kp F6 &hrml LCTRL F7 &hrml LALT F8 &hrml LCMD F9 &hrml MEH F10 &trans &trans &trans &trans &trans &rst_boot 0 0
// โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโค โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโค
-// 24 25 26 27 28 29 30 31 32 33 34 35
- &cmo Fn &kp F11 &kp F12 &trans &trans &bootloader &bootloader &trans &trans &trans &trans &cmo Fn
+// โ24 โ25 โ26 โ27 โ28 โ29 โ โ30 โ31 โ32 โ33 โ34 โ35 โ
+ &cmo Fn &kp F11 &kp F12 &trans &trans &trans &trans &trans &trans &trans &trans &cmo Fn
// โฐโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโค โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโฏ
-// 36 37 38 39 40 41
+// โ36 โ37 โ38 โ โ39 โ40 โ41 โ
&kp C_BRI_DN &kp C_BRI_UP &cmo L2 &cmo L2 &kp CAPSLOCK &trans
// โฐโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโฏ โฐโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโฏ
>;
diff --git a/knucklehead/L1_colemak-dh.dtsi b/knucklehead/L1_colemak-dh.dtsi
index ade34d5..091c71e 100644
--- a/knucklehead/L1_colemak-dh.dtsi
+++ b/knucklehead/L1_colemak-dh.dtsi
@@ -6,20 +6,20 @@
keymap {
compatible = "zmk,keymap";
- layer_1 {
- label = "L1";
+ colemak_dh {
+ display-name = "L1";
bindings = <
// โญโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฎ โญโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฎ
-// 0 1 2 3 4 5 6 7 8 9 10 11
+// โ0 โ1 โ2 โ3 โ4 โ5 โ โ6 โ7 โ8 โ9 โ10 โ11 โ
&kp ESC &kp Q &kp W &kp F &kp P &kp B &kp J &kp L &kp U &kp Y &kp SQT &kp K_CANCEL
// โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโค โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโค
-// 12 13 14 15 16 17 18 19 20 21 22 23
- &bkspc_del &kp A &kp R &kp S &kp T &kp G &kp M &kp N &kp E &kp I &kp O &kp ENTER
+// โ12 โ13 โ14 โ15 โ16 โ17 โ โ18 โ19 โ20 โ21 โ22 โ23 โ
+ &bkspc_del &kp A &hrml LCTRL R &hrml LALT S &hrml LCMD T &hrml MEH G &hrmr MEH M &hrmr LCMD N &hrmr LALT E &hrmr LCTRL I &kp O &kp ENTER
// โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโค โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโค
-// 24 25 26 27 28 29 30 31 32 33 34 35
- &csl Fn &mt LCTRL Z &mt LALT X &mt LCMD C &mt MEH D &kp V &kp K &mt MEH H &mt RCMD COMMA &mt RALT DOT &mt RCTRL SLASH &csl Fn
+// โ24 โ25 โ26 โ27 โ28 โ29 โ โ30 โ31 โ32 โ33 โ34 โ35 โ
+ &csl Fn &kp Z &kp X &kp C &kp D &kp V &kp K &kp H &kp COMMA &kp DOT &kp SLASH &csl Fn
// โฐโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโค โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโฏ
-// 36 37 38 39 40 41
+// โ36 โ37 โ38 โ โ39 โ40 โ41 โ
&kp TAB &mt LSHFT SPACE &smart_num L2 0 &smart_num L2 0 &smart_shift &kp GRAVE
// โฐโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโฏ โฐโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโฏ
>;
diff --git a/knucklehead/L1_colemak.dtsi b/knucklehead/L1_colemak.dtsi
index 29ec999..85b9fe9 100644
--- a/knucklehead/L1_colemak.dtsi
+++ b/knucklehead/L1_colemak.dtsi
@@ -6,20 +6,20 @@
keymap {
compatible = "zmk,keymap";
- layer_1 {
- label = "L1";
+ colemak {
+ display-name = "L1";
bindings = <
// โญโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฎ โญโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฎ
-// 0 1 2 3 4 5 6 7 8 9 10 11
+// โ0 โ1 โ2 โ3 โ4 โ5 โ โ6 โ7 โ8 โ9 โ10 โ11 โ
&kp ESC &kp Q &kp W &kp F &kp P &kp G &kp J &kp L &kp U &kp Y &kp SQT &kp K_CANCEL
// โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโค โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโค
-// 12 13 14 15 16 17 18 19 20 21 22 23
- &bkspc_del &kp A &kp R &kp S &kp T &kp D &kp H &kp N &kp E &kp I &kp O &kp ENTER
+// โ12 โ13 โ14 โ15 โ16 โ17 โ โ18 โ19 โ20 โ21 โ22 โ23 โ
+ &bkspc_del &kp A &hrml LCTRL R &hrml LALT S &hrml LCMD T &hrml MEH D &hrmr MEH H &hrmr LCMD N &hrmr LALT E &hrmr LCTRL I &kp O &kp ENTER
// โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโค โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโค
-// 24 25 26 27 28 29 30 31 32 33 34 35
- &csl Fn &mt LCTRL Z &mt LALT X &mt LCMD C &mt MEH V &kp B &kp K &mt MEH M &mt RCMD COMMA &mt RALT DOT &mt RCTRL SLASH &csl Fn
+// โ24 โ25 โ26 โ27 โ28 โ29 โ โ30 โ31 โ32 โ33 โ34 โ35 โ
+ &csl Fn &kp Z &kp X &kp C &kp V &kp B &kp K &kp M &kp COMMA &kp DOT &kp SLASH &csl Fn
// โฐโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโค โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโฏ
-// 36 37 38 39 40 41
+// โ36 โ37 โ38 โ โ39 โ40 โ41 โ
&kp TAB &mt LSHFT SPACE &smart_num L2 0 &smart_num L2 0 &smart_shift &kp GRAVE
// โฐโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโฏ โฐโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโฏ
>;
diff --git a/knucklehead/L1_qwerty.dtsi b/knucklehead/L1_qwerty.dtsi
index dcdacdf..d93bd52 100644
--- a/knucklehead/L1_qwerty.dtsi
+++ b/knucklehead/L1_qwerty.dtsi
@@ -6,20 +6,20 @@
keymap {
compatible = "zmk,keymap";
- layer_1 {
- label = "L1";
+ qwerty {
+ display-name = "L1";
bindings = <
// โญโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฎ โญโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฎ
-// 0 1 2 3 4 5 6 7 8 9 10 11
+// โ0 โ1 โ2 โ3 โ4 โ5 โ โ6 โ7 โ8 โ9 โ10 โ11 โ
&kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp K_CANCEL
// โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโค โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโค
-// 12 13 14 15 16 17 18 19 20 21 22 23
- &bkspc_del &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SQT &kp ENTER
+// โ12 โ13 โ14 โ15 โ16 โ17 โ โ18 โ19 โ20 โ21 โ22 โ23 โ
+ &bkspc_del &kp A &hrml LCTRL S &hrml LALT D &hrml LCMD F &hrml MEH G &hrmr MEH H &hrmr LCMD J &hrmr LALT K &hrmr LCTRL L &kp SQT &kp ENTER
// โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโค โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโค
-// 24 25 26 27 28 29 30 31 32 33 34 35
- &csl Fn &mt LCTRL Z &mt LALT X &mt LCMD C &mt MEH V &kp B &kp N &mt MEH M &mt RCMD COMMA &mt RALT DOT &mt RCTRL SLASH &csl Fn
+// โ24 โ25 โ26 โ27 โ28 โ29 โ โ30 โ31 โ32 โ33 โ34 โ35 โ
+ &csl Fn &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp SLASH &csl Fn
// โฐโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโค โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโฏ
-// 36 37 38 39 40 41
+// โ36 โ37 โ38 โ โ39 โ40 โ41 โ
&kp TAB &mt LSHFT SPACE &smart_num L2 0 &smart_num L2 0 &smart_shift &kp GRAVE
// โฐโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโฏ โฐโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโฏ
>;
diff --git a/knucklehead/L2.dtsi b/knucklehead/L2.dtsi
index a9aa90c..772b55a 100644
--- a/knucklehead/L2.dtsi
+++ b/knucklehead/L2.dtsi
@@ -7,19 +7,19 @@
compatible = "zmk,keymap";
layer_2 {
- label = "L2";
+ display-name = "L2";
bindings = <
// โญโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฎ โญโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฎ
-// 0 1 2 3 4 5 6 7 8 9 10 11
+// โ0 โ1 โ2 โ3 โ4 โ5 โ โ6 โ7 โ8 โ9 โ10 โ11 โ
&trans &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp C_PREV &kp C_VOL_DN &kp C_VOL_UP &kp C_NEXT &kp C_MUTE &trans
// โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโค โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโค
-// 12 13 14 15 16 17 18 19 20 21 22 23
- &trans &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp LEFT &kp DOWN &kp UP &kp RIGHT &trans &trans
+// โ12 โ13 โ14 โ15 โ16 โ17 โ โ18 โ19 โ20 โ21 โ22 โ23 โ
+ &trans &kp N6 &hrml LCTRL N7 &hrml LALT N8 &hrml LCMD N9 &hrml MEH N0 &hrmr MEH LEFT &hrmr LCMD DOWN &hrmr LALT UP &hrmr LCTRL RIGHT&trans &trans
// โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโค โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโค
-// 24 25 26 27 28 29 30 31 32 33 34 35
- &trans &sk LCTRL &sk LALT &sk LCMD &sk MEH &trans &trans &sk MEH &trans &trans &trans &trans
+// โ24 โ25 โ26 โ27 โ28 โ29 โ โ30 โ31 โ32 โ33 โ34 โ35 โ
+ &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans
// โฐโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโค โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโฏ
-// 36 37 38 39 40 41
+// โ36 โ37 โ38 โ โ39 โ40 โ41 โ
&trans &trans &cmo L2 &cmo L2 &trans &trans
// โฐโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโฏ โฐโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโฏ
>;
diff --git a/knucklehead/base.dtsi b/knucklehead/base.dtsi
index b78f151..abe4067 100644
--- a/knucklehead/base.dtsi
+++ b/knucklehead/base.dtsi
@@ -1,5 +1,6 @@
// ZMK Core Includes
#include
+#include // requires https://github.com/urob/zmk-auto-layer module
#include
#include
#include
@@ -15,12 +16,27 @@
// Behaviors Constants
#define TAPPING_TERM_MS 280
#define QUICK_TAP_MS 175
-#define GLOBAL_QUICK_TAP_MS 150
+#define REQUIRE_PRIOR_IDLE_MS 150
// Combos Constants
#define COMBO_TERM_DEFAULT 30
#define COMBO_QUICK_TAP_MS 100
+// Key positions per hand
+#define KEYS_L 0 1 2 3 4 5 12 13 14 15 16 17 24 25 26 27 28 29
+#define KEYS_R 6 7 8 9 10 11 18 19 20 21 22 23 30 31 32 33 34 35
+#define THUMBS 36 37 38 39 40 41
+
#include "behaviors.dtsi"
#include "macros.dtsi"
#include "combos.dtsi"
+
+// Alpha layer: uncomment desired, comment the others
+#include "L1_colemak-dh.dtsi"
+// #include "L1_colemak.dtsi"
+// #include "L1_qwerty.dtsi"
+
+// Other layers
+#include "L2.dtsi"
+#include "Fn.dtsi"
+
diff --git a/knucklehead/behaviors.dtsi b/knucklehead/behaviors.dtsi
index b53b122..05c6b55 100644
--- a/knucklehead/behaviors.dtsi
+++ b/knucklehead/behaviors.dtsi
@@ -1,15 +1,16 @@
+// ZMK Behaviors Configuration
&mt {
flavor = "balanced";
tapping-term-ms = ;
quick-tap-ms = ;
- global-quick-tap-ms = ;
+ require-prior-idle-ms = ;
};
< {
flavor = "balanced";
tapping-term-ms = ;
quick-tap-ms = ;
- global-quick-tap-ms = ;
+ require-prior-idle-ms = ;
};
&sk {
@@ -25,21 +26,50 @@
// num-word, requires PR https://github.com/zmkfirmware/zmk/pull/1451
// Adds arrows and shift to smart layer for more comfortable navigation/selection moves
&num_word {
- layers = ;
continue-list = ;
};
/ {
behaviors {
/*
- - tap: sticky shift
- - double-tap: caps-word (shift + tap mod-morph)
- - hold: shift
+ Home Row Mods
- From: https://github.com/urob/zmk-config/
- */
+ - tap: &kp
+ - hold: &kp
+
+ Example: &hrml LCMD T
+ */
+ /omit-if-no-ref/ hrml: hrm_left {
+ bindings = <&kp>, <&kp>;
+ compatible = "zmk,behavior-hold-tap";
+ flavor = "balanced";
+ hold-trigger-key-positions = ;
+ hold-trigger-on-release;
+ tapping-term-ms = ;
+ quick-tap-ms = ;
+ require-prior-idle-ms = ;
+ #binding-cells = <2>;
+ };
+ /omit-if-no-ref/ hrmr: hrm_right {
+ bindings = <&kp>, <&kp>;
+ compatible = "zmk,behavior-hold-tap";
+ flavor = "balanced";
+ hold-trigger-key-positions = ;
+ hold-trigger-on-release;
+ tapping-term-ms = ;
+ quick-tap-ms = ;
+ require-prior-idle-ms = ;
+ #binding-cells = <2>;
+ };
+
+ /*
+ - tap: sticky shift
+ - double-tap: caps-word (shift + tap mod-morph)
+ - hold: shift
+
+ From: https://github.com/urob/zmk-config/
+ */
/omit-if-no-ref/ smart_shift: smart_shift {
- label = "SMART_SHIFT";
compatible = "zmk,behavior-mod-morph";
bindings = <&sk RSHFT>, <&caps_word>;
mods = <(MOD_RSFT)>;
@@ -48,13 +78,12 @@
/*
- - tap: num-word
- - hold: &mo layer
+ - tap: num-word
+ - hold: &mo layer
- From: https://github.com/urob/zmk-config/
- */
+ From: https://github.com/urob/zmk-config/
+ */
/omit-if-no-ref/ smart_num: smart_num {
- label = "SMART_NUM";
compatible = "zmk,behavior-hold-tap";
flavor = "balanced";
tapping-term-ms = ;
@@ -63,27 +92,25 @@
};
/*
- - tap: &sl L2
- - tap x 2: &num_word
+ - tap: &sl L2
+ - tap x 2: &num_word
- From: https://github.com/urob/zmk-config/
- */
+ From: https://github.com/urob/zmk-config/
+ */
/omit-if-no-ref/ num_dance: num_dance {
- label = "NUM_DANCE";
compatible = "zmk,behavior-tap-dance";
tapping-term-ms = ;
- bindings = <&sl L2>, <&num_word>;
+ bindings = <&sl L2>, <&num_word L2>;
#binding-cells = <0>;
};
/*
- - tap: &kp
- - hold: &none
+ - tap: &kp
+ - hold: &none
- Example: &nh 0 K_CANCEL
- */
+ Example: &nh 0 K_CANCEL
+ */
/omit-if-no-ref/ nh: no_hold {
- label = "NO_HOLD";
compatible = "zmk,behavior-hold-tap";
flavor = "balanced";
tapping-term-ms = ;
@@ -92,15 +119,14 @@
};
/*
- - tap: sticky ctrl
- - hold: ctrl
- - double-tap: sticky meh (ctrl + tap mod-morph)
- - tap + hold: meh (ctrl + hold mod-morph)
+ - tap: sticky ctrl
+ - hold: ctrl
+ - double-tap: sticky meh (ctrl + tap mod-morph)
+ - tap + hold: meh (ctrl + hold mod-morph)
- From: https://github.com/urob/zmk-config/
- */
+ From: https://github.com/urob/zmk-config/
+ */
/omit-if-no-ref/ ctrl_meh: ctrl_meh {
- label = "CTRL_MEH";
compatible = "zmk,behavior-mod-morph";
bindings = <&sk LCTRL>, <&sk MEH>;
mods = <(MOD_LCTL)>;
@@ -108,15 +134,14 @@
};
/*
- - tap: backspace
- - hold: repeat backspace
- - shift + tap: delete
- - shift + hold: repeat delete
+ - tap: backspace
+ - hold: repeat backspace
+ - shift + tap: delete
+ - shift + hold: repeat delete
- From: https://zmk.dev/docs/behaviors/mod-morph#advanced-configuration
- */
+ From: https://zmk.dev/docs/behaviors/mod-morph#advanced-configuration
+ */
/omit-if-no-ref/ bkspc_del: backspace_delete {
- label = "BACKSPACE_DELETE";
compatible = "zmk,behavior-mod-morph";
bindings = <&kp BACKSPACE>, <&kp DELETE>;
mods = <(MOD_LSFT|MOD_RSFT)>;
@@ -124,13 +149,12 @@
};
/*
- - tap: brightness up
- - hold: repeat brightness up
- - shift + tap: brightness down
- - shift + hold: repeat brightness down
- */
+ - tap: brightness up
+ - hold: repeat brightness up
+ - shift + tap: brightness down
+ - shift + hold: repeat brightness down
+ */
/omit-if-no-ref/ brightness: brightness {
- label = "BRIGHTNESS";
compatible = "zmk,behavior-mod-morph";
bindings = <&kp C_BRI_UP>, <&kp C_BRI_DN>;
mods = <(MOD_LSFT|MOD_RSFT)>;
@@ -138,11 +162,10 @@
};
/*
- - tap: next track
- - shift + tap: prev track
- */
+ - tap: next track
+ - shift + tap: prev track
+ */
/omit-if-no-ref/ next_prev: next_prev {
- label = "NEXT_PREV_TRACK";
compatible = "zmk,behavior-mod-morph";
bindings = <&kp C_NEXT>, <&kp C_PREV>;
mods = <(MOD_LSFT|MOD_RSFT)>;
@@ -150,15 +173,26 @@
};
/*
- - tap: volume up
- - shift + tap: volume down
- */
+ - tap: volume up
+ - shift + tap: volume down
+ */
/omit-if-no-ref/ volume: volume {
- label = "VOLUME";
compatible = "zmk,behavior-mod-morph";
bindings = <&kp C_VOL_UP>, <&kp C_VOL_DN>;
mods = <(MOD_LSFT|MOD_RSFT)>;
#binding-cells = <0>;
};
+
+ /*
+ - tap: reset keyboard
+ - hold: enter bootloader mode
+ */
+ /omit-if-no-ref/ rst_boot: rst_boot {
+ compatible = "zmk,behavior-hold-tap";
+ #binding-cells = <2>;
+ tapping-term-ms = <500>;
+ flavor = "tap-preferred";
+ bindings = <&bootloader>, <&sys_reset>;
+ };
};
};
diff --git a/knucklehead/combos.dtsi b/knucklehead/combos.dtsi
index ddcfffa..aa67151 100644
--- a/knucklehead/combos.dtsi
+++ b/knucklehead/combos.dtsi
@@ -5,7 +5,7 @@
bindings = ; \
key-positions = ; \
layers = ; \
- global-quick-tap-ms = ; \
+ require-prior-idle-ms = ; \
};
/ {
@@ -40,6 +40,8 @@
COMBO(minus, &kp MINUS, 7 19, L1 L2 Fn, COMBO_TERM_DEFAULT, COMBO_QUICK_TAP_MS)
COMBO(equal, &kp EQUAL, 8 20, L1 L2 Fn, COMBO_TERM_DEFAULT, COMBO_QUICK_TAP_MS)
COMBO(semicolon, &kp SEMICOLON, 9 21, L1 L2 Fn, COMBO_TERM_DEFAULT, COMBO_QUICK_TAP_MS)
+ COMBO(pgup, &kp PG_UP, 6 18, L1 L2 Fn, COMBO_TERM_DEFAULT, COMBO_QUICK_TAP_MS)
+ COMBO(pgdn, &kp PG_DN, 18 30, L1 L2 Fn, COMBO_TERM_DEFAULT, COMBO_QUICK_TAP_MS)
COMBO(lbkt, &kp LBKT, 19 31, L1 L2 Fn, COMBO_TERM_DEFAULT, COMBO_QUICK_TAP_MS)
COMBO(rbkt, &kp RBKT, 20 32, L1 L2 Fn, COMBO_TERM_DEFAULT, COMBO_QUICK_TAP_MS)
COMBO(backslash, &kp BACKSLASH, 21 33, L1 L2 Fn, COMBO_TERM_DEFAULT, COMBO_QUICK_TAP_MS)
diff --git a/knucklehead/macros.dtsi b/knucklehead/macros.dtsi
index 3ac16da..b803f36 100644
--- a/knucklehead/macros.dtsi
+++ b/knucklehead/macros.dtsi
@@ -12,7 +12,6 @@
`&lm L1 LSHIFT`
*/
/omit-if-no-ref/ lm: lm {
- label = "Layer Mod";
wait-ms = <0>;
tap-ms = <0>;
compatible = "zmk,behavior-macro-two-param";
@@ -39,7 +38,6 @@
`&csl L1`
*/
/omit-if-no-ref/ csl: clear_sl {
- label = "Clear + Sticky Layer";
wait-ms = <0>;
tap-ms = <0>;
compatible = "zmk,behavior-macro-one-param";
@@ -65,7 +63,6 @@
`&cmo L1`
*/
/omit-if-no-ref/ cmo: clear_mo {
- label = "Clear + Momentary Layer";
wait-ms = <0>;
tap-ms = <0>;
compatible = "zmk,behavior-macro-one-param";
diff --git a/scripts/draw.sh b/scripts/draw.sh
new file mode 100755
index 0000000..2230ba4
--- /dev/null
+++ b/scripts/draw.sh
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+if [ $# -ne 1 ]; then
+ echo "Usage: $0 "
+ exit 1
+fi
+
+keymap -c ./keymap-drawer/config.yaml parse -z "./config/${1}.keymap" >"./keymap-drawer/${1}.yaml"
+keymap -c ./keymap-drawer/config.yaml draw "./keymap-drawer/${1}.yaml" >"./keymap-drawer/${1}.svg"