Update README with expanded feature descriptions

- Add detailed descriptions for each feature (Autocorrect, Combos, Home Row Mods, Repeat/Magic Keys)
- Resize and center images for better display on wide layouts
- Make keymap image collapsible by default
- Move Magic Sturdy reference to feature section
This commit is contained in:
♥ Minnie ♥ 2025-10-14 18:21:10 +08:00
parent e0bfafecc7
commit 837808e4c1
Signed by: jasmine
GPG key ID: 8563E358D4E8040E
5 changed files with 164 additions and 117 deletions

108
README.md
View file

@ -1,37 +1,101 @@
# QMK Keymaps
![ferris-sweep](./assets/img/keyboards/ferris-sweep.jpg)
<div align="center">
<img src="./assets/img/keyboards/ferris-sweep.jpg" width="70%" alt="ferris-sweep">
</div>
## Features
* **Autocorrect**
* **Case Modes**
* **Combos**
* **Home Row Mods**
* **Leader Key**
* **Repeat / Magic Keys**
## My Keymap
![ferris-keymap](./assets/img/keymaps/ferris-sajenim.svg)
See [**magic sturdy**](https://github.com/Ikcelaks/keyboard_layouts/blob/main/magic_sturdy/magic_sturdy.md) for usage of the magic key.
## Table of Contents
- [Installation](#installation)
- [About](#about)
- [Features](#features)
- [My Keymap](#my-keymap)
- [References](#references)
## Installation
### Prerequisites
Follow the [getting started](https://docs.qmk.fm/#/newbs_getting_started) docs to install [QMK Firmware](https://docs.qmk.fm/#/)
### Setup
```sh
# Clone the keymaps
# Clone the userspace
git clone https://git.sajenim.dev/jasmine/qmk_userspace.git
# Setup external userspace
# Configure QMK to use external userspace
qmk config user.overlay_dir="$(realpath qmk_userspace)"
# Compile the firmware
qmk compile -kb <keyboard> -km <keymap>
# Compile for Ferris Sweep
qmk compile -kb ferris/sweep -km sajenim
# Flash to keyboard (enter bootloader mode first)
qmk flash -kb ferris/sweep -km sajenim
```
## About
This is a custom QMK userspace for the Ferris Sweep keyboard, featuring the **[Canary layout](https://github.com/Apsu/Canary)** - a collaborative design by the Alternate Keyboard Layout (AKL) community with over 55% rolling trigrams for a flowy typing feel. The keymap includes extensive customizations for improved typing efficiency, emphasizing minimal finger movement through home row mods, combos, and intelligent repeat keys.
### Design Philosophy
- **Comfort first**: All frequently used keys accessible without leaving home position
- **Smart automation**: Let the keyboard handle common patterns (repeat key, magic completions, autocorrect)
- **Minimal layers**: 5 carefully designed layers (CANARY, NAV, NUM, SYM, FUN) with logical access patterns
## Features
### Autocorrect
Automatically fixes common typing mistakes in real-time. Maintains a dictionary of frequently mistyped words and corrects them as you type, reducing the need for manual backspacing and retyping.
### Combos
Press multiple keys simultaneously to output different characters or trigger actions. Enables access to numbers, symbols, and commands without leaving the home position, reducing finger travel and improving typing efficiency.
### Home Row Mods
Modifier keys (Alt, Shift, GUI, Ctrl) placed on the home row as dual-function keys. Tap for the letter, hold for the modifier. Eliminates the need to reach for traditional modifier positions, reducing hand movement and strain.
### Repeat / Magic Keys
Two intelligent repeat mechanisms on the thumb keys:
- **Repeat Key** - Repeats the last keystroke with context-aware enhancements for common trigrams and word briefs
- **Magic Key** - Context-aware completions based on the previous key. Reduces same-finger bigrams and enables common word completions
See [**magic sturdy**](https://github.com/Ikcelaks/keyboard_layouts/blob/main/magic_sturdy/magic_sturdy.md) for the inspiration behind the magic key implementation.
## My Keymap
<div align="center">
<img src="./assets/img/keymaps/ferris-sajenim.svg" width="100%" alt="ferris-keymap">
</div>
### Usage Examples
**Combos for Numbers:**
Press home row + upper row simultaneously for vertical number access:
- `L + R` → 2
- `Y + S` → 3
- `P + T` → 4
**Magic Key Completions:**
Type a letter, then press the Magic key (right thumb):
- `w` + Magic → `which`
- `b` + Magic → `efore`
- `+` + Magic → `=` (creates `+=`)
**Repeat Key Enhancements:**
Tap a key twice using the Repeat key (left thumb):
- `a` + Repeat → `nd` (completes "and")
- `i` + Repeat → `ng` (completes "ing")
- `.` + Repeat → `./` (first repeat), `../` (second repeat)
For complete documentation of all repeat and magic key behaviors, see the [wiki](https://git.sajenim.dev/jasmine/qmk_userspace/wiki).
## References
* [Precondition](https://precondition.github.io/home-row-mods)
* [Pascal Getreuer](https://getreuer.info/posts/keyboards/index.html)
* [Ikcelaks](https://github.com/Ikcelaks/keyboard_layouts/tree/main)
* [Andrew Rae](https://github.com/andrewjrae/kyria-keymap)
* [Jonas Hietala](https://www.jonashietala.se/series/t-34/)
**[Precondition](https://precondition.github.io/home-row-mods)**<br>
Home row mods timing and configuration guidance
**[Pascal Getreuer](https://getreuer.info/posts/keyboards/index.html)**<br>
Advanced QMK features and custom keycodes
**[Ikcelaks](https://github.com/Ikcelaks/keyboard_layouts/tree/main)**<br>
Magic key implementation and layout analysis
**[Jonas Hietala](https://www.jonashietala.se/series/t-34/)**<br>
Keyboard layout development journey

View file

@ -1,4 +1,4 @@
<svg width="732" height="1411" viewBox="0 0 732 1411" class="keymap" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<svg width="1464" height="734" viewBox="0 0 1464 734" class="keymap" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<style>/* inherit to force styles through use tags */
svg path {
fill: inherit;
@ -181,17 +181,16 @@ path.combo { stroke: #7f7f7f; }
<g transform="translate(28, 137)" class="key keypos-10">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">c</text>
<text x="0" y="24" class="key hold">Shift</text>
</g>
<g transform="translate(84, 102)" class="key keypos-11">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">r</text>
<text x="0" y="24" class="key hold">Ctrl</text>
<text x="0" y="24" class="key hold">Alt</text>
</g>
<g transform="translate(140, 84)" class="key keypos-12">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">s</text>
<text x="0" y="24" class="key hold">Alt</text>
<text x="0" y="24" class="key hold">Shift</text>
</g>
<g transform="translate(196, 100)" class="key keypos-13">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
@ -214,17 +213,16 @@ path.combo { stroke: #7f7f7f; }
<g transform="translate(532, 84)" class="key keypos-17">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">e</text>
<text x="0" y="24" class="key hold">Alt</text>
<text x="0" y="24" class="key hold">Shift</text>
</g>
<g transform="translate(588, 102)" class="key keypos-18">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">i</text>
<text x="0" y="24" class="key hold">Ctrl</text>
<text x="0" y="24" class="key hold">Alt</text>
</g>
<g transform="translate(644, 137)" class="key keypos-19">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">a</text>
<text x="0" y="24" class="key hold">Shift</text>
</g>
<g transform="translate(28, 193)" class="key keypos-20">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
@ -233,6 +231,7 @@ path.combo { stroke: #7f7f7f; }
<g transform="translate(84, 158)" class="key keypos-21">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">j</text>
<text x="0" y="24" class="key hold">Sym</text>
</g>
<g transform="translate(140, 140)" class="key keypos-22">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
@ -241,7 +240,7 @@ path.combo { stroke: #7f7f7f; }
<g transform="translate(196, 156)" class="key keypos-23">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">d</text>
<text x="0" y="24" class="key hold">Sym</text>
<text x="0" y="24" class="key hold">Ctrl</text>
</g>
<g transform="translate(252, 164)" class="key keypos-24">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
@ -254,7 +253,7 @@ path.combo { stroke: #7f7f7f; }
<g transform="translate(476, 156)" class="key keypos-26">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">h</text>
<text x="0" y="24" class="key hold">Sym</text>
<text x="0" y="24" class="key hold">Ctrl</text>
</g>
<g transform="translate(532, 140)" class="key keypos-27">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
@ -263,6 +262,7 @@ path.combo { stroke: #7f7f7f; }
<g transform="translate(588, 158)" class="key keypos-28">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">,</text>
<text x="0" y="24" class="key hold">Sym</text>
</g>
<g transform="translate(644, 193)" class="key keypos-29">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
@ -287,104 +287,80 @@ path.combo { stroke: #7f7f7f; }
<text x="0" y="24" class="key hold">Num</text>
</g>
<g class="combo combopos-0">
<rect rx="6" ry="6" x="98" y="24" width="28" height="26" class="combo"/>
<text x="112" y="37" class="combo tap">Lead</text>
</g>
<g class="combo combopos-1">
<rect rx="6" ry="6" x="490" y="23" width="28" height="26" class="combo"/>
<text x="504" y="36" class="combo tap">[</text>
</g>
<g class="combo combopos-2">
<rect rx="6" ry="6" x="546" y="24" width="28" height="26" class="combo"/>
<text x="560" y="37" class="combo tap">]</text>
</g>
<g class="combo combopos-3">
<rect rx="6" ry="6" x="14" y="96" width="28" height="26" class="combo"/>
<text x="28" y="109" class="combo tap">1</text>
</g>
<g class="combo combopos-4">
<g class="combo combopos-1">
<rect rx="6" ry="6" x="70" y="61" width="28" height="26" class="combo"/>
<text x="84" y="74" class="combo tap">2</text>
</g>
<g class="combo combopos-5">
<g class="combo combopos-2">
<rect rx="6" ry="6" x="126" y="43" width="28" height="26" class="combo"/>
<text x="140" y="56" class="combo tap">3</text>
</g>
<g class="combo combopos-6">
<g class="combo combopos-3">
<rect rx="6" ry="6" x="182" y="59" width="28" height="26" class="combo"/>
<text x="196" y="72" class="combo tap">4</text>
</g>
<g class="combo combopos-7">
<g class="combo combopos-4">
<rect rx="6" ry="6" x="238" y="67" width="28" height="26" class="combo"/>
<text x="252" y="80" class="combo tap">5</text>
</g>
<g class="combo combopos-8">
<g class="combo combopos-5">
<rect rx="6" ry="6" x="406" y="67" width="28" height="26" class="combo"/>
<text x="420" y="80" class="combo tap">6</text>
</g>
<g class="combo combopos-9">
<g class="combo combopos-6">
<rect rx="6" ry="6" x="462" y="59" width="28" height="26" class="combo"/>
<text x="476" y="72" class="combo tap">7</text>
</g>
<g class="combo combopos-10">
<g class="combo combopos-7">
<rect rx="6" ry="6" x="518" y="43" width="28" height="26" class="combo"/>
<text x="532" y="56" class="combo tap">8</text>
</g>
<g class="combo combopos-11">
<g class="combo combopos-8">
<rect rx="6" ry="6" x="574" y="61" width="28" height="26" class="combo"/>
<text x="588" y="74" class="combo tap">9</text>
</g>
<g class="combo combopos-12">
<g class="combo combopos-9">
<rect rx="6" ry="6" x="630" y="96" width="28" height="26" class="combo"/>
<text x="644" y="109" class="combo tap">0</text>
</g>
<g class="combo combopos-13">
<g class="combo combopos-10">
<rect rx="6" ry="6" x="98" y="80" width="28" height="26" class="combo"/>
<text x="112" y="93" class="combo tap">Tab</text>
</g>
<g class="combo combopos-14">
<g class="combo combopos-11">
<rect rx="6" ry="6" x="154" y="79" width="28" height="26" class="combo"/>
<text x="168" y="92" class="combo tap">C-w</text>
</g>
<g class="combo combopos-15">
<g class="combo combopos-12">
<rect rx="6" ry="6" x="490" y="79" width="28" height="26" class="combo"/>
<text x="504" y="92" class="combo tap">Esc</text>
</g>
<g class="combo combopos-16">
<g class="combo combopos-13">
<rect rx="6" ry="6" x="546" y="80" width="28" height="26" class="combo"/>
<text x="560" y="93" class="combo tap">Ent</text>
</g>
<g class="combo combopos-17">
<g class="combo combopos-14">
<rect rx="6" ry="6" x="98" y="136" width="28" height="26" class="combo"/>
<text x="112" y="149" class="combo tap">:</text>
</g>
<g class="combo combopos-18">
<g class="combo combopos-15">
<rect rx="6" ry="6" x="154" y="135" width="28" height="26" class="combo"/>
<text x="168" y="148" class="combo tap">M-a</text>
</g>
<g class="combo combopos-19">
<rect rx="6" ry="6" x="210" y="147" width="28" height="26" class="combo"/>
<text x="224" y="160" class="combo tap">
<tspan x="224" dy="-0.6em">OS</tspan><tspan x="224" dy="1.2em">Shift</tspan>
</text>
</g>
<g class="combo combopos-20">
<rect rx="6" ry="6" x="434" y="147" width="28" height="26" class="combo"/>
<text x="448" y="160" class="combo tap">
<tspan x="448" dy="-0.6em">OS</tspan><tspan x="448" dy="1.2em">Shift</tspan>
</text>
</g>
<g class="combo combopos-21">
<g class="combo combopos-16">
<rect rx="6" ry="6" x="490" y="135" width="28" height="26" class="combo"/>
<text x="504" y="148" class="combo tap">M1-a</text>
</g>
<g class="combo combopos-22">
<g class="combo combopos-17">
<rect rx="6" ry="6" x="546" y="136" width="28" height="26" class="combo"/>
<text x="560" y="149" class="combo tap">\</text>
</g>
</g>
</g>
<g transform="translate(30, 339)" class="layer-NAV">
<g transform="translate(762, 0)" class="layer-NAV">
<text x="0" y="28" class="label" id="NAV">NAV:</text>
<g transform="translate(0, 56)">
<g transform="translate(28, 81)" class="key keypos-0">
@ -437,20 +413,17 @@ path.combo { stroke: #7f7f7f; }
</g>
<g transform="translate(28, 137)" class="key keypos-10">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">
<tspan x="0" dy="-0.6em">OS</tspan><tspan x="0" dy="1.2em">Shift</tspan>
</text>
</g>
<g transform="translate(84, 102)" class="key keypos-11">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">
<tspan x="0" dy="-0.6em">OS</tspan><tspan x="0" dy="1.2em">Ctrl</tspan>
<tspan x="0" dy="-0.6em">OS</tspan><tspan x="0" dy="1.2em">Alt</tspan>
</text>
</g>
<g transform="translate(140, 84)" class="key keypos-12">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">
<tspan x="0" dy="-0.6em">OS</tspan><tspan x="0" dy="1.2em">Alt</tspan>
<tspan x="0" dy="-0.6em">OS</tspan><tspan x="0" dy="1.2em">Shift</tspan>
</text>
</g>
<g transform="translate(196, 100)" class="key keypos-13">
@ -492,12 +465,18 @@ path.combo { stroke: #7f7f7f; }
</g>
<g transform="translate(84, 158)" class="key keypos-21">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">
<tspan x="0" dy="-0.6em">OS</tspan><tspan x="0" dy="1.2em">Sym</tspan>
</text>
</g>
<g transform="translate(140, 140)" class="key keypos-22">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(196, 156)" class="key keypos-23">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">
<tspan x="0" dy="-0.6em">OS</tspan><tspan x="0" dy="1.2em">Ctrl</tspan>
</text>
</g>
<g transform="translate(252, 164)" class="key keypos-24">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
@ -507,6 +486,7 @@ path.combo { stroke: #7f7f7f; }
</g>
<g transform="translate(476, 156)" class="key keypos-26">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">Tab</text>
</g>
<g transform="translate(532, 140)" class="key keypos-27">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
@ -537,7 +517,7 @@ path.combo { stroke: #7f7f7f; }
</g>
</g>
</g>
<g transform="translate(30, 678)" class="layer-NUM">
<g transform="translate(30, 339)" class="layer-NUM">
<text x="0" y="28" class="label" id="NUM">NUM:</text>
<g transform="translate(0, 56)">
<g transform="translate(28, 81)" class="key keypos-0">
@ -565,18 +545,19 @@ path.combo { stroke: #7f7f7f; }
</g>
<g transform="translate(476, 44)" class="key keypos-6">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">*</text>
<text x="0" y="0" class="key tap">+</text>
</g>
<g transform="translate(532, 28)" class="key keypos-7">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">%</text>
<text x="0" y="0" class="key tap">-</text>
</g>
<g transform="translate(588, 46)" class="key keypos-8">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">/</text>
<text x="0" y="0" class="key tap">*</text>
</g>
<g transform="translate(644, 81)" class="key keypos-9">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">/</text>
</g>
<g transform="translate(28, 137)" class="key keypos-10">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
@ -596,7 +577,7 @@ path.combo { stroke: #7f7f7f; }
</g>
<g transform="translate(252, 108)" class="key keypos-14">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">.</text>
<text x="0" y="0" class="key tap">=</text>
</g>
<g transform="translate(420, 108)" class="key keypos-15">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
@ -610,24 +591,21 @@ path.combo { stroke: #7f7f7f; }
<g transform="translate(532, 84)" class="key keypos-17">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">
<tspan x="0" dy="-0.6em">OS</tspan><tspan x="0" dy="1.2em">Alt</tspan>
<tspan x="0" dy="-0.6em">OS</tspan><tspan x="0" dy="1.2em">Shift</tspan>
</text>
</g>
<g transform="translate(588, 102)" class="key keypos-18">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">
<tspan x="0" dy="-0.6em">OS</tspan><tspan x="0" dy="1.2em">Ctrl</tspan>
<tspan x="0" dy="-0.6em">OS</tspan><tspan x="0" dy="1.2em">Alt</tspan>
</text>
</g>
<g transform="translate(644, 137)" class="key keypos-19">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">
<tspan x="0" dy="-0.6em">OS</tspan><tspan x="0" dy="1.2em">Shift</tspan>
</text>
</g>
<g transform="translate(28, 193)" class="key keypos-20">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">&lt;</text>
<text x="0" y="0" class="key tap">,</text>
</g>
<g transform="translate(84, 158)" class="key keypos-21">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
@ -643,22 +621,25 @@ path.combo { stroke: #7f7f7f; }
</g>
<g transform="translate(252, 164)" class="key keypos-24">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">&gt;</text>
<text x="0" y="0" class="key tap">.</text>
</g>
<g transform="translate(420, 164)" class="key keypos-25">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(476, 156)" class="key keypos-26">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">+</text>
<text x="0" y="0" class="key tap">
<tspan x="0" dy="-0.6em">OS</tspan><tspan x="0" dy="1.2em">Ctrl</tspan>
</text>
</g>
<g transform="translate(532, 140)" class="key keypos-27">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">=</text>
</g>
<g transform="translate(588, 158)" class="key keypos-28">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">-</text>
<text x="0" y="0" class="key tap">
<tspan x="0" dy="-0.6em">OS</tspan><tspan x="0" dy="1.2em">Sym</tspan>
</text>
</g>
<g transform="translate(644, 193)" class="key keypos-29">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
@ -683,7 +664,7 @@ path.combo { stroke: #7f7f7f; }
</g>
</g>
</g>
<g transform="translate(30, 1016)" class="layer-SYM">
<g transform="translate(762, 339)" class="layer-SYM">
<text x="0" y="28" class="label" id="SYM">SYM:</text>
<g transform="translate(0, 56)">
<g transform="translate(28, 81)" class="key keypos-0">
@ -726,7 +707,7 @@ path.combo { stroke: #7f7f7f; }
</g>
<g transform="translate(28, 137)" class="key keypos-10">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">!</text>
<text x="0" y="0" class="key tap">|</text>
</g>
<g transform="translate(84, 102)" class="key keypos-11">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
@ -766,7 +747,7 @@ path.combo { stroke: #7f7f7f; }
</g>
<g transform="translate(28, 193)" class="key keypos-20">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">|</text>
<text x="0" y="0" class="key tap">!</text>
</g>
<g transform="translate(84, 158)" class="key keypos-21">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Before After
Before After

View file

@ -4,32 +4,30 @@ layout:
layers:
CANARY:
- [w, l, y, p, b, z, f, o, u, "'"]
- [{h: Shift, t: c}, {h: Ctrl, t: r}, {h: Alt, t: s}, {h: Gui, t: t}, g, m, {h: Gui, t: n}, {h: Alt, t: e}, {h: Ctrl, t: i}, {h: Shift, t: a}]
- [q, j, v, {h: Sym, t: d}, k, x, {h: Sym, t: h}, "/", ",", "."]
- [c, {h: Alt, t: r}, {h: Shift, t: s}, {h: Gui, t: t}, g, m, {h: Gui, t: n}, {h: Shift, t: e}, {h: Alt, t: i}, a]
- [q, {h: Sym, t: j}, v, {h: Ctrl, t: d}, k, x, {h: Ctrl, t: h}, "/", {h: Sym, t: ","}, "."]
- [{h: Nav, t: Repeat}, Spc, Bspc, {h: Num, t: Magic}]
NAV:
- [Null, Prev Track, Play Pause, Next Track, Vol Up, Page Up, Home, Up, End, Null]
- [OS Shift, OS Ctrl, OS Alt, OS Gui, Vol Down, Page Down, Left, Down, Right, Del]
- [Null, Null, Null, Null, Null, Null, Null, Null, Null, Null]
- [Null, OS Alt, OS Shift, OS Gui, Vol Down, Page Down, Left, Down, Right, Del]
- [Null, OS Sym, Null, OS Ctrl, Null, Null, Tab, Null, Null, Null]
- [{h: Nav, t: Repeat, type: trans}, {t: Spc, type: trans}, {t: Bspc, type: trans}, {h: Num, t: Magic, type: trans}]
NUM:
- ["(", 7, 8, 9, ")", Null, "*", "%", "/", Null]
- [0, 4, 5, 6, ".", Null, OS Gui, OS Alt, OS Ctrl, OS Shift]
- ["<", 1, 2, 3, ">", Null, "+", "=", "-", Null]
- ["(", 7, 8, 9, ")", Null, "+", "-", "*", "/"]
- [0, 4, 5, 6, "=", Null, OS Gui, OS Shift, OS Alt, Null]
- [",", 1, 2, 3, ".", Null, OS Ctrl, Null, OS Sym, Null]
- [{h: Nav, t: Repeat, type: trans}, {t: Spc, type: trans}, {t: Bspc, type: trans}, {h: Num, t: Magic, type: trans}]
SYM:
- ["`", "<", "-", ">", Null, Null, "[", "_", "]", "+"]
- ["!", "(", "=", ")", "#", "%", "{", "$", "}", ";"]
- ["|", "&", "^", "@", Null, Null, "*", {t: "/", type: trans}, {t: ",", type: trans}, {t: ".", type: trans}]
- ["|", "(", "=", ")", "#", "%", "{", "$", "}", ";"]
- ["!", "&", "^", "@", Null, Null, "*", {t: "/", type: trans}, {t: ",", type: trans}, {t: ".", type: trans}]
- [{h: Nav, t: Repeat, type: trans}, {t: Spc, type: trans}, {t: Bspc, type: trans}, {h: Num, t: Magic, type: trans}]
combos:
- {p: [1, 2], k: "Lead", l: ["CANARY"]}
- {p: [6, 7], k: "[", l: ["CANARY"]}
- {p: [7, 8], k: "]", l: ["CANARY"]}
# Vertical numbers
- {p: [0, 10], k: "1", l: ["CANARY"]}
- {p: [1, 11], k: "2", l: ["CANARY"]}
- {p: [2, 12], k: "3", l: ["CANARY"]}
@ -40,13 +38,19 @@ combos:
- {p: [7, 17], k: "8", l: ["CANARY"]}
- {p: [8, 18], k: "9", l: ["CANARY"]}
- {p: [9, 19], k: "0", l: ["CANARY"]}
# Home row left
- {p: [11, 12], k: "Tab", l: ["CANARY"]}
- {p: [12, 13], k: "C-w", l: ["CANARY"]}
# Home row right
- {p: [16, 17], k: "Esc", l: ["CANARY"]}
- {p: [17, 18], k: "Ent", l: ["CANARY"]}
# Bottom row left
- {p: [21, 22], k: ":", l: ["CANARY"]}
- {p: [22, 23], k: "M-a", l: ["CANARY"]}
- {p: [23, 24], k: "OS Shift", l: ["CANARY"]}
- {p: [25, 26], k: "OS Shift", l: ["CANARY"]}
- {p: [26, 27], k: "M1-a", l: ["CANARY"]}
# Bottom row right
- {p: [26, 27], k: "M1-a", l: ["CANARY"]}
- {p: [27, 28], k: "\\", l: ["CANARY"]}

View file

@ -19,17 +19,14 @@ COMB(delword, C(KC_BSPC), HRM_S, HRM_T)
// home row right
COMB(escape, KC_ESC, HRM_N, HRM_E)
COMB(enter, KC_ENT, HRM_E, HRM_I)
SUBS(vim_save, "\e:w\n", HRM_N, HRM_E, HRM_I)
// bottom row left
COMB(vim_cmd, KC_COLN, HRM_J, KC_V)
COMB(xmonad, G(KC_A), KC_V, HRM_D)
COMB(capsword, CW_TOGG, HRM_J, HRM_D)
// bottom row right
COMB(wezterm, A(KC_A), HRM_H, KC_SLSH)
COMB(esc_seq, KC_BSLS, KC_SLSH, HRM_COM)
COMB(paste, C(S(KC_V)), HRM_H, HRM_COM)
/* vim: set filetype=c: */

View file

@ -71,6 +71,7 @@ enum custom_keycodes {
#define OS_RSFT OSM(MOD_RSFT)
#define OS_RALT OSM(MOD_RALT)
#define OS_RGUI OSM(MOD_RGUI)
#define OS_SYM OSL(SYM)
#include "g/keymap_combo.h" // layer names must be defined before engine include
@ -94,7 +95,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------|
XXXXXXX, OS_LALT, OS_LSFT, OS_LGUI, KC_VOLD, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL,
//|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------|
XXXXXXX, XXXXXXX, XXXXXXX, OS_LCTL, XXXXXXX, XXXXXXX, KC_TAB, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, OS_SYM, XXXXXXX, OS_LCTL, XXXXXXX, XXXXXXX, KC_TAB, XXXXXXX, XXXXXXX, XXXXXXX,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
_______, _______, _______, _______
//`-----------------' `-----------------'
@ -106,7 +107,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------|
KC_0, KC_4, KC_5, KC_6, KC_EQL, XXXXXXX, OS_RGUI, OS_RSFT, OS_RALT, XXXXXXX,
//|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------|
KC_COMM, KC_1, KC_2, KC_3, KC_DOT, XXXXXXX, OS_RCTL, XXXXXXX, XXXXXXX, XXXXXXX,
KC_COMM, KC_1, KC_2, KC_3, KC_DOT, XXXXXXX, OS_RCTL, XXXXXXX, OS_SYM, XXXXXXX,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
_______, _______, _______, _______
//`-----------------' `-----------------'