Glove80 Layout Toolkit
This repository is the canonical, code-first source of the Glove80 layout families (Default, TailorKey, QuantumTouch, and Glorious Engrammer).
Every release JSON under layouts/*/releases can be regenerated deterministically from the declarative specs and metadata checked into src/glove80.
Why this exists: TailorKey (and now QuantumTouch, Glorious Engrammer, etc.) used to be kept in sync by hand in the layout editor, which made even trivial tweaks error-prone and slow to propagate across Windows/macOS/Dual/Bilateral variants. By expressing every layer, macro, combo, and alpha layout in Python, we get reproducible builds, automated regression tests, and the ability to spin up new variants (Colemak, Colemak-DH, Dvorak, custom mixes) by reusing the same building blocks instead of copying JSON around. You can still download the generated JSON into the editor for visualization, but the code here is the single source of truth that guarantees consistency.
Highlights
- The default, TailorKey, QuantumTouch, and Glorious Engrammer families live under
src/glove80/families/with typed specs, factories, and regression tests. - Metadata travels with the package (
src/glove80/families/*/metadata.json), so the CLI and library always agree on UUIDs, release notes, and output paths. - A Typer-powered CLI (
glove80 generate …) replaces ad-hoc scripts and keeps the regeneration workflow uniform across layouts. - Release artifacts are grouped under
layouts/<layout>/releases, keeping the repo root clean while preserving the published JSON verbatim. - Reusable "feature" helpers under
glove80.features(e.g.,bilateral_home_row_components) bundle macros plus ready-made layers so you can drop complex behaviors into custom layouts without spelunking through family internals. - Third-party packages can register additional families via the
glove80.layoutsentry-point group, so custom specs integrate without forking this repo.
Quick Start
- Install dependencies (the repo uses uv):
uv sync - Regenerate every release JSON:
just regen - Run the full regression suite (per-layer tests + layout parity checks):
just ci - Need a single variant? Use the CLI directly:
glove80 generate --layout tailorkey --variant mac
just --list shows the available helper tasks.
Using the Python API
The public API lives on the root package:
from glove80 import (
build_layout,
list_families,
apply_feature,
bilateral_home_row_components,
)
print(list_families()) # ['default', 'tailorkey', 'quantum_touch', 'glorious_engrammer']
layout = build_layout("tailorkey", "mac")
components = bilateral_home_row_components("mac")
apply_feature(layout, components)
build_layout(<family>, <variant>) returns the same dictionary that the CLI writes into layouts/<family>/releases/….
Minimal Example (<10 lines)
from glove80 import build_layout, apply_feature, bilateral_home_row_components
layout = build_layout("tailorkey", "windows")
apply_feature(layout, bilateral_home_row_components("windows"))
# now `layout` contains the merged macros/layers and can be serialized
CLI Tips
- Validate any layout JSON:
glove80 validate path/to.json - Override output destination:
glove80 generate --layout tailorkey --variant windows --out /tmp/out.json - Families list:
glove80 families - Scaffold a starter spec file:
glove80 scaffold src/glove80/families/custom/specs.py --layout custom --variant beta
Notes:
- The CLI accepts
glorious-engrammeras an alias forglorious_engrammer.
Repository Layout
.
├─ layouts/ # checked-in release JSON + layout-specific README.md files
│ ├─ default/
│ │ └─ releases/
│ ├─ tailorkey/
│ │ └─ releases/
│ ├─ quantum_touch/
│ │ └─ releases/
│ └─ glorious-engrammer/
│ └─ releases/
├─ docs/ # architecture overview
├─ src/glove80/
│ ├─ cli/ # Typer CLI
│ ├─ layouts/ # registry, common helpers, CLI wiring
│ └─ families/ # default, TailorKey, QuantumTouch, Glorious Engrammer implementations + metadata
│ ├─ default/
│ ├─ tailorkey/
│ ├─ quantum_touch/
│ └─ glorious_engrammer/
└─ tests/ # split by layout family
- Read
docs/architecture.mdfor a walkthrough of the data flow and regeneration pipeline. layouts/default/README.md,layouts/tailorkey/README.md,layouts/quantum_touch/README.md, andlayouts/glorious-engrammer/README.mdexplain how each layout family is structured, the available layers, and the steps for adding new variants.
CI Contract
.github/workflows/ci.yml runs the same steps you do locally:
just regenmust leavelayouts/*/releasesunchanged or the build fails, proving the checked-in JSON matches the current code.just ci(uv run pytest) covers every layer factory plus whole-layout comparisons.- Pull requests are required to keep both commands clean, so regeneration plus tests are the only gatekeepers.
Contributing
- Edit specs or metadata, re-run
just regen, and inspect the resulting diffs underlayouts/. - Extend/adjust the targeted per-layer tests under
tests/<layout>/when you change behavior. - Document intentional changes in the relevant
layouts/<family>/README.md(anddocs/architecture.mdif the pipeline changes) so future contributors understand the rationale.
Metadata
Release files for glove80 2.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| glove80-2.0.0.tar.gz | 366.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| glove80-2.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 510.0 kB
Release files / glove80-2.0.0.tar.gz
| Download URL | glove80-2.0.0.tar.gz |
|---|---|
| Size | 366.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4e2b712bbf13c97b2dc2691fe5d3801b82d3975d40178d85b3bcc905c3dcb3f1
|
|
BLAKE2b-256 checksum How to use checksums |
ad3359ca987c29febfa652ec6a9e13235847d0bccc79630ab076ae1b652a7184
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 10, 2025.
Transparency logRelease files / glove80-2.0.0-py3-none-any.whl
| Download URL | glove80-2.0.0-py3-none-any.whl |
|---|---|
| Size | 143.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a20215395041de4b9c6a6fe7b6d9611bee366f1bee348d268a25508391da8ce4
|
|
BLAKE2b-256 checksum How to use checksums |
cbaa02d2aa3118a8f172a71311bfa5d1b164508f6979033424921d8955c18619
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 10, 2025.
Transparency log