Deterministic Glove80 layout toolkit
Project description
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.
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.
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
print(list_families()) # ['default', 'tailorkey', 'quantum_touch', 'glorious_engrammer']
layout = build_layout("tailorkey", "mac")
build_layout(<family>, <variant>) always returns the same dictionary that the CLI would write into layouts/<family>/releases/….
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.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file glove80-1.1.0.tar.gz.
File metadata
- Download URL: glove80-1.1.0.tar.gz
- Upload date:
- Size: 319.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
466dad77730f4cb880b5d05cbcf46447c8a579693addffc5ac216912ef8c2d14
|
|
| MD5 |
c3f244dd879bcb79b306096016a0a9c1
|
|
| BLAKE2b-256 |
ea70221c21a8a05e954d893c246ece2d361e605a46d331175675164236ed7101
|
Provenance
The following attestation bundles were made for glove80-1.1.0.tar.gz:
Publisher:
release.yml on basnijholt/glove80
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
glove80-1.1.0.tar.gz -
Subject digest:
466dad77730f4cb880b5d05cbcf46447c8a579693addffc5ac216912ef8c2d14 - Sigstore transparency entry: 685674155
- Sigstore integration time:
-
Permalink:
basnijholt/glove80@d21ea2aca0b8abfab6098e357c2c4816f2f4c6e2 -
Branch / Tag:
refs/tags/v1.1.0 - Owner: https://github.com/basnijholt
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d21ea2aca0b8abfab6098e357c2c4816f2f4c6e2 -
Trigger Event:
release
-
Statement type:
File details
Details for the file glove80-1.1.0-py3-none-any.whl.
File metadata
- Download URL: glove80-1.1.0-py3-none-any.whl
- Upload date:
- Size: 110.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d14c62e4181c953d54bea627f2c4409c3efb28b7595cdc19751965a428c959ec
|
|
| MD5 |
434ce732a4d5731a615495e4ecce744c
|
|
| BLAKE2b-256 |
98dc4a868377662a33a21ec1acd4c5d576c1e83a66531dc33c4ed7d85f7f7b72
|
Provenance
The following attestation bundles were made for glove80-1.1.0-py3-none-any.whl:
Publisher:
release.yml on basnijholt/glove80
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
glove80-1.1.0-py3-none-any.whl -
Subject digest:
d14c62e4181c953d54bea627f2c4409c3efb28b7595cdc19751965a428c959ec - Sigstore transparency entry: 685674156
- Sigstore integration time:
-
Permalink:
basnijholt/glove80@d21ea2aca0b8abfab6098e357c2c4816f2f4c6e2 -
Branch / Tag:
refs/tags/v1.1.0 - Owner: https://github.com/basnijholt
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d21ea2aca0b8abfab6098e357c2c4816f2f4c6e2 -
Trigger Event:
release
-
Statement type: