Skip to main content

max / alloy_tui

Stand alone: split out of the alloy repo Extracted with git subtree so the crate's history came with it rather than starting from a copy. It was a workspace member inheriting edition, authors, and its dependency versions from alloy; those are now declared here. Bento releases one crate per repo, so a workspace member could not be published through it -- alloy_tui was the last crate still hand-published without a preflight gate. Version 0.1.1: 0.1.0 shipped with repository pointing at the alloy workspace, which is now the wrong repo for this crate and immutable on crates.io. This corrects it going forward.
Author: Max Johnson <me@maxj.phd> · 2026-07-19 21:28 UTC
Commit: aee287dee7714581a319be3d5b488ae9aab154c2
Parent: be54982
5 files changed, +56 insertions, -9 deletions
A .gitignore +5
@@ -0,0 +1,5 @@
1 + /target
2 + /Cargo.lock
3 +
4 + # Claude Code instructions (project-local; not for the public repo)
5 + CLAUDE.md
M Cargo.toml +7 -7
@@ -1,13 +1,13 @@
1 1 [package]
2 2 name = "alloy_tui"
3 - version = "0.1.0"
3 + version = "0.1.1"
4 4 description = "Alloy design system: makeover intents rendered as ratatui Color/Style, plus themed widgets for the alloy console and siblings."
5 - edition.workspace = true
6 - rust-version.workspace = true
5 + edition = "2024"
6 + rust-version = "1.86"
7 7 license = "MIT"
8 - repository.workspace = true
9 - authors.workspace = true
8 + repository = "https://git.sr.ht/~maxmj/alloy_tui"
9 + authors = ["Max Johnson <me@maxj.phd>"]
10 10
11 11 [dependencies]
12 - ratatui.workspace = true
13 - makeover.workspace = true
12 + ratatui = "0.30"
13 + makeover = "0.10.0"
M README.md +3 -2
@@ -46,6 +46,7 @@ colors that exist nowhere in the theme files.
46 46
47 47 MIT.
48 48
49 - The rest of the [Alloy](https://git.sr.ht/~maxmj/alloy) repository is
49 + Split out of the [Alloy](https://git.sr.ht/~maxmj/alloy) repository, which is
50 50 GPLv3-or-later. This crate is permissive on purpose: it is the reusable design
51 - system, not the application.
51 + system, not the application, and other terminal UIs should be able to adopt the
52 + look without inheriting copyleft.
A bento.toml +8
@@ -0,0 +1,8 @@
1 + # How Bento releases alloy_tui. Lives here rather than in the daemon's config so
2 + # it is versioned with the code it describes.
3 +
4 + # A crate, not an app: one publish.rhai rather than a recipe per platform, and
5 + # the target below names the host that uploads rather than a build matrix.
6 + kind = "library"
7 +
8 + targets = ["linux/x86_64"]
@@ -0,0 +1,33 @@
1 + // Publish this crate to crates.io.
2 + //
3 + // A library has no per-platform artifact, so this is the whole release: one
4 + // recipe, run on whichever host the manifest names.
5 + //
6 + // The preflight step is the point of routing this through Bento. crates.io
7 + // versions can be yanked but never edited, so a wrong repository URL, a
8 + // missing license, or a duplicate version is permanent the moment it uploads.
9 + // pter 0.1.0 went out with a dead repository link and could only be corrected
10 + // by releasing again.
11 +
12 + let h = build_host();
13 + let r = repo();
14 + let v = version();
15 +
16 + step("checkout");
17 + sh_ok(h, "cd " + r + " && git pull --ff-only");
18 +
19 + step("build");
20 + sh_ok(h, "cd " + r + " && cargo test " + feature_flags());
21 +
22 + step("verify");
23 + // Credentials are checked here too, and deliberately not passed through Bento:
24 + // the token stays in cargo's own 0600 store on the publishing host, where cargo
25 + // finds it. Handing it to a shell command would put it in the process list for
26 + // the length of the upload, and ops-exec renders env pairs into the shell line.
27 + // Aborts the run with the specific problems if anything is wrong.
28 + log(crate_preflight());
29 + sh_ok(h, "cd " + r + " && cargo publish --dry-run " + feature_flags());
30 +
31 + step("publish");
32 + sh_ok(h, "cd " + r + " && cargo publish " + feature_flags());
33 + log("published " + v + " to crates.io");