.github | ||
.vscode | ||
builddefs | ||
data | ||
docs | ||
drivers | ||
keyboards | ||
layouts | ||
lib | ||
platforms | ||
quantum | ||
tests | ||
tmk_core | ||
users | ||
util | ||
.clang-format | ||
.editorconfig | ||
.gitattributes | ||
.gitignore | ||
.gitmodules | ||
Dockerfile | ||
Doxyfile | ||
doxygen-todo | ||
LICENSE | ||
license_GPLv2.md | ||
license_GPLv3.md | ||
license_Modified_BSD.md | ||
Makefile | ||
nose2.cfg | ||
paths.mk | ||
readme.md | ||
requirements-dev.txt | ||
requirements.txt | ||
setup.cfg | ||
shell.nix | ||
Vagrantfile |
QMK Steno Firmware
This repository is a fork of the QMK firmware containing changes specific to hobbyist steno keyboards that are not currently merged into upstream QMK:
- Support for protocols like Plover HID
- New keyboards, such as Ecosteno
- Optional behavior changes such as first-up chord send and chord repeat
See the QMK firmware repository and documentation for more information on QMK itself.
Keyboards Supported
Keyboard | Source | Binaries |
---|---|---|
Georgi | gboards/georgi |
|
Splitography | splitography |
|
The Uni (v2) | the_uni/pro_micro |
StenoKeyboards |
The Uni (v3) | the_uni/usb_c |
StenoKeyboards |
Ecosteno | noll/ecosteno |
Nolltronics |
Multisteno | noll/multisteno |
Nolltronics |
Steno Protocols
Serial (TX Bolt, Gemini PR)
The industry-standard TX Bolt and Gemini PR steno protocols are included in upstream QMK, and QMK's steno docs go into more detail on how to set that up, but in summary:
Add the following definitions to your keymap's rules.mk
file:
VIRTSER_ENABLE = yes
STENO_ENABLE = yes
And use the constants with the STN_
prefix
to specify what steno key each key on your board should send. For example, the
base layer for the Uni looks as follows:
/* keymap.c */
#include "keymap_steno.h"
LAYOUT(
STN_S1, STN_TL, STN_PL, STN_HL, STN_ST1, STN_ST3, STN_FR, STN_PR, STN_LR, STN_TR, STN_DR ,
STN_S2, STN_KL, STN_WL, STN_RL, STN_ST2, STN_ST4, STN_RR, STN_BR, STN_GR, STN_SR, STN_ZR ,
STN_N1, STN_A, STN_O, STN_E, STN_U, STN_N2,
),
Plover HID
The Plover HID protocol is an in-development protocol that relies on the standard HID protocol rather than USB serial, resulting in more customizability and a better user experience.
To use Plover HID, add the following definitions to your keymap's rules.mk
:
STENO_ENABLE = no
PLOVER_HID_ENABLE = yes
The keycodes for Plover HID are the same as the TX Bolt constants for serial,
but use the PLV_
prefix instead of STN_
:
/* keymap.c */
#include "keymap_plover_hid.h"
LAYOUT(
PLV_SL, PLV_TL, PLV_PL, PLV_HL, PLV_STR, PLV_STR, PLV_FR, PLV_PR, PLV_LR, PLV_TR, PLV_DR ,
PLV_SL, PLV_KL, PLV_WL, PLV_RL, PLV_STR, PLV_STR, PLV_RR, PLV_BR, PLV_GR, PLV_SR, PLV_ZR ,
PLV_NUM, PLV_A, PLV_O, PLV_E, PLV_U, PLV_NUM,
),
Optional Features
Josh Grams has implemented some steno extensions
to the QMK firmware, allowing for easier repetition of certain chords or outlines.
These features can be enabled by defining constants in your keymap's config.h
.
First-Up Send (STENO_1UP
)
/* config.h */
#define STENO_1UP
This feature sends a stroke when you release the first key, allowing you to hold down common keys across several strokes. For example, you can fingerspell by holding down the common chord on the right-hand side, and tapping the letters on the left-hand side:
↓ -FPLT
↓ O ↑ O → /OFPLT
↓ S ↑ S → /S-FPLT
↓ P ↑ P-FPLT → /P-FPLT
Auto-Repeat (STENO_REPEAT
)
/* config.h */
#define STENO_REPEAT
/* Maximum number of strokes in an outline to repeat */
#define MAX_REPEAT 8
/* Window of time within which a stroke is considered a repeat */
#define STENO_REPEAT_DELAY_MS 350
/* Percent multiplier for the speed of sending repeated strokes */
#define STENO_REPEAT_SPEED_PERCENT 400
This feature lets you double-tap a stroke to repeat it 4 times as fast as your double-tap (currently capped at 50 strokes per second):
↓ STPH ↑ STPH ↓ STPH → /STPH/STPH/STPH/...
↑ STPH
You can also repeat sequences up to 8 strokes long. Write the full outline, then press and hold the first stroke again, for example:
↓ SUD ↑ SUD → /SUD
↓ -PB ↑ PB → /SUD/-PB
↓ HREU ↑ HREU → /SUD/-PB/HREU
↓ SUD → /SUD/-PB/HREU/SUD/-PB/HREU/SUD/-PB/HREU/...
↑ SUD