No description
  • Dockerfile 89.8%
  • Shell 10.2%
Find a file
chad 84a388aa2c
All checks were successful
verify / verify (push) Successful in 3s
Merge pull request 'pnpm,uv,mise: mode=rw on /persist state binds (engine default is ro)' (#34) from glen/pnpm-persist-rw-bind into main
Reviewed-on: #34
Reviewed-by: chad <chaddouglasrussell@gmail.com>
2026-10-27 16:51:56 -04:00
.agents/skills/bubblebox-package-campaign agents: Linux-only rule for candidate selection (Chad, 2026-09-28) 2026-09-28 15:58:43 -04:00
.forgejo/workflows ci: type the publish packages input (Forgejo dispatch validation) 2026-10-16 22:24:37 +00:00
actionlint actionlint: add 1.7.12 (archetype C) 2026-09-24 19:16:07 -04:00
age ci: backfill metadata.toml + smoke.toml for all 26 packages (E0) 2026-08-26 15:42:18 -04:00
age-keygen ci: backfill metadata.toml + smoke.toml for all 26 packages (E0) 2026-08-26 15:42:18 -04:00
agent-browser agent-browser: add 0.39.1 (archetype C, fedora final) 2026-10-21 16:38:16 +00:00
argocd argocd: add 3.5.3 (archetype C) 2026-09-28 16:53:33 -04:00
ast-grep ast-grep: add 0.45.3 (archetype C) 2026-09-24 19:46:13 -04:00
atuin atuin: add 18.20.1 (A) 2026-08-27 14:36:02 -04:00
aws ci: backfill metadata.toml + smoke.toml for all 26 packages (E0) 2026-08-26 15:42:18 -04:00
bat ci: fix the ldd lib-gather no-op (buildah mangles \/-escaped awk regexes across line continuations) 2026-08-27 13:42:46 -04:00
bc bc: add 1.08.2 (archetype B) 2026-09-23 15:52:30 -04:00
bind-utils bind-utils: expect DiG banner in smoke — f44 dig -v prints 'DiG 9.18.50', not the old 'dig Version' wording (PR #14 gate run) 2026-09-23 16:17:51 -04:00
broot broot: add 1.59.0 (A) 2026-08-27 14:36:02 -04:00
btop btop: convert to archetype C 1.4.7 (upstream static, sha256-verified) 2026-09-23 13:00:41 -04:00
bun bun: add 1.4.2 (archetype C) 2026-09-23 13:46:02 -04:00
chezmoi chezmoi: add 2.72.2 (archetype C) 2026-09-24 19:46:13 -04:00
choose choose: add 1.3.7 (A) 2026-08-27 13:42:56 -04:00
cmake cmake: add 4.4.3 (archetype C) 2026-09-24 19:25:34 -04:00
cosign cosign: add 3.1.3 (archetype C) 2026-09-23 13:42:20 -04:00
crane crane: add 0.22.0 (C) 2026-08-27 14:52:53 -04:00
csvlens csvlens: add 0.15.1 (A) 2026-08-27 14:36:02 -04:00
delta delta: add 0.19.2 (A) 2026-08-27 13:42:55 -04:00
deno deno: add 2.9.7 (archetype C) 2026-09-23 13:45:30 -04:00
difftastic difftastic: add 0.70.0 (A) 2026-08-27 14:36:02 -04:00
diffutils diffutils: add 3.12 (archetype B) 2026-09-23 15:54:04 -04:00
direnv direnv: add 2.37.1 (archetype C) 2026-09-23 13:39:39 -04:00
duckdb duckdb: add 1.5.5 (archetype C) 2026-09-24 19:17:32 -04:00
dust ci: backfill metadata.toml + smoke.toml for all 26 packages (E0) 2026-08-26 15:42:18 -04:00
exiftool exiftool: add 13.50 (archetype B) 2026-09-23 17:10:53 -04:00
eza ci: fix the ldd lib-gather no-op (buildah mangles \/-escaped awk regexes across line continuations) 2026-08-27 13:42:46 -04:00
fastfetch ci: backfill metadata.toml + smoke.toml for all 26 packages (E0) 2026-08-26 15:42:18 -04:00
fd ci: fix the ldd lib-gather no-op (buildah mangles \/-escaped awk regexes across line continuations) 2026-08-27 13:42:46 -04:00
ffmpeg ffmpeg: add 8.1.2 (archetype B) 2026-09-23 17:05:24 -04:00
fzf fzf: add 0.74.3 (C) 2026-08-27 14:52:53 -04:00
gh ci: backfill metadata.toml + smoke.toml for all 26 packages (E0) 2026-08-26 15:42:18 -04:00
ghostscript ghostscript: add 10.06.0 (archetype B) 2026-09-23 17:06:11 -04:00
ghostty ghostty: switch to scottames/ghostty COPR, pin 1.3.1-4.fc44 2026-09-22 17:27:12 -04:00
git git: add 2.55.0 (archetype B) 2026-09-23 16:01:00 -04:00
git-lfs git-lfs: add 3.7.1 (archetype B) 2026-09-23 16:01:00 -04:00
gitui gitui: add 0.28.1 (A) 2026-08-27 14:36:02 -04:00
glab glab: add 1.119.0 (archetype C) 2026-09-23 13:43:51 -04:00
golangci-lint golangci-lint,kubectx: install -D for LICENSE dirs (fetch stage lacks the parent); kubectx+osv-scanner smokes go hermetic 2026-09-28 20:29:46 -04:00
gpg gpg: add 2.4.9 (archetype B) 2026-09-23 17:11:27 -04:00
grpcurl grpcurl: add 1.9.4 (archetype C) 2026-09-24 20:25:18 -04:00
helm helm: add 4.2.4 (C) 2026-08-27 14:52:53 -04:00
htop ci: backfill metadata.toml + smoke.toml for all 26 packages (E0) 2026-08-26 15:42:18 -04:00
httpie httpie: pin entrypoint binary to http — the synthesized default resolved /usr/bin/httpie, the plugin manager (run 87) 2026-09-28 21:42:55 -04:00
hyperfine hyperfine: add 1.20.0 (A) 2026-08-27 13:42:55 -04:00
imagemagick imagemagick: pin entrypoint binary to magick — dir name is the distro brand, synthesized default exec'd /usr/bin/imagemagick (PR #15 gate run) 2026-09-23 17:25:25 -04:00
iperf3 iperf3: add 3.20 (archetype B) 2026-09-24 20:31:31 -04:00
jless jless: add 0.9.0 (A) 2026-08-27 13:42:56 -04:00
jq tools: nix-bridge.sh — a Containerfile SCAFFOLDER (design call with maintainer) 2026-09-23 10:04:38 -04:00
jsonnet jsonnet: add 0.22.0 (archetype B) 2026-09-24 20:26:41 -04:00
just just: add 1.58.0 (A) 2026-08-27 13:42:55 -04:00
k9s k9s: add 0.51.0 (C) 2026-08-27 14:52:53 -04:00
kubeconform kubeconform: add 0.8.0 (archetype C) 2026-09-28 16:40:31 -04:00
kubectl kubectl: add 1.37.0 (C) 2026-08-27 14:52:53 -04:00
kubectx golangci-lint,kubectx: install -D for LICENSE dirs (fetch stage lacks the parent); kubectx+osv-scanner smokes go hermetic 2026-09-28 20:29:46 -04:00
kubens kubectx: add 0.11.0 (archetype C) 2026-09-28 19:24:16 -04:00
lazydocker lazydocker: convert to archetype C 0.25.2 (upstream static, sha256-verified) 2026-09-23 12:58:31 -04:00
lazygit lazygit: convert to archetype C 0.65.1 (upstream static, sha256-verified) 2026-09-23 12:58:31 -04:00
lnav lnav: add 0.14.1 (archetype C) 2026-09-28 19:26:41 -04:00
make make: add 4.4.1 (archetype B) 2026-09-23 15:53:46 -04:00
mariadb-client mariadb-client: add 11.8.8 (archetype B) 2026-09-23 17:13:10 -04:00
mcfly mcfly: add 0.9.4 (A) 2026-08-27 14:36:02 -04:00
micro micro: convert to archetype C 2.0.15 (upstream static, sha256-verified) 2026-09-23 12:56:49 -04:00
mise pnpm,uv,mise: mode=rw on /persist state binds (engine default is ro) 2026-10-27 16:46:41 -04:00
mkcert mkcert: explicit footprint gate 300 — fedora base floor ~183 MB shared + 4.8 MB binary (PR #16 gate run); terraform/yt-dlp precedent 2026-09-24 14:16:21 -04:00
navi navi: add 2.24.0 (A) 2026-08-27 14:36:02 -04:00
ninja ninja: add 1.13.2 (archetype C) 2026-09-24 19:46:13 -04:00
nmap nmap: add 7.92 (archetype B) 2026-09-23 15:58:19 -04:00
noctalia ci: backfill metadata.toml + smoke.toml for all 26 packages (E0) 2026-08-26 15:42:18 -04:00
nushell nushell: add 0.115.1 (archetype C) 2026-09-24 20:30:36 -04:00
nvim ci: backfill metadata.toml + smoke.toml for all 26 packages (E0) 2026-08-26 15:42:18 -04:00
oh-my-posh ci: backfill metadata.toml + smoke.toml for all 26 packages (E0) 2026-08-26 15:42:18 -04:00
openssh-clients openssh-clients: add 10.2p1 (archetype B) + ssh/scp/sftp virtual entrypoints 2026-09-23 16:01:00 -04:00
opentofu opentofu: add 1.12.6 (C) 2026-08-27 14:52:53 -04:00
osv-scanner golangci-lint,kubectx: install -D for LICENSE dirs (fetch stage lacks the parent); kubectx+osv-scanner smokes go hermetic 2026-09-28 20:29:46 -04:00
packer packer: add 1.16.1 (archetype C) 2026-09-23 13:45:03 -04:00
pandoc pandoc: add 3.11 (archetype C) 2026-09-23 13:44:54 -04:00
pigz pigz: add 2.8 (archetype B) 2026-09-23 15:55:32 -04:00
pipx pipx: add 1.17.6 (archetype C) 2026-09-24 19:25:34 -04:00
pnpm pnpm,uv,mise: mode=rw on /persist state binds (engine default is ro) 2026-10-27 16:46:41 -04:00
poppler-utils poppler-utils: add 26.01.0 (archetype B) 2026-09-23 17:11:54 -04:00
procs procs: add 0.14.12 (A) 2026-08-27 13:42:56 -04:00
psql ci: backfill metadata.toml + smoke.toml for all 26 packages (E0) 2026-08-26 15:42:18 -04:00
railway railway: add 5.71.0 (archetype C) 2026-10-21 14:25:36 +00:00
rclone rclone: add 1.75.0 (C) 2026-08-27 14:52:53 -04:00
restic restic: add 0.19.1 (C) 2026-08-27 14:52:53 -04:00
rg ci: absolute ENGINE_TAR (steps start in the workspace, not the prior cwd); de-debug 2026-09-22 14:24:12 -04:00
rlwrap rlwrap: add 0.47.1 (archetype B) 2026-09-23 15:52:45 -04:00
ruff ruff: convert to archetype C 0.16.8 (upstream static, sha256-verified) 2026-09-23 12:56:49 -04:00
rust-dev ci: backfill metadata.toml + smoke.toml for all 26 packages (E0) 2026-08-26 15:42:18 -04:00
scp openssh-clients: add 10.2p1 (archetype B) + ssh/scp/sftp virtual entrypoints 2026-09-23 16:01:00 -04:00
sd sd: add 1.0.0 (A) 2026-08-27 13:42:56 -04:00
sftp openssh-clients: add 10.2p1 (archetype B) + ssh/scp/sftp virtual entrypoints 2026-09-23 16:01:00 -04:00
shellcheck shellcheck: convert to archetype C v0.11.0 (upstream static, sha256-verified) 2026-09-23 12:55:24 -04:00
shfmt shfmt: convert to archetype C v3.14.1 (upstream static, sha256-verified) 2026-09-23 12:55:24 -04:00
sk sk: add 5.6.6 (A) 2026-08-27 14:36:02 -04:00
slack ci: backfill metadata.toml + smoke.toml for all 26 packages (E0) 2026-08-26 15:42:18 -04:00
socat socat: add 1.8.1.1 (archetype B) 2026-09-23 15:53:02 -04:00
sops ci: backfill metadata.toml + smoke.toml for all 26 packages (E0) 2026-08-26 15:42:18 -04:00
sqlite sqlite: add 3.51.2 (archetype B) 2026-09-23 17:12:23 -04:00
ssh openssh-clients: add 10.2p1 (archetype B) + ssh/scp/sftp virtual entrypoints 2026-09-23 16:01:00 -04:00
starship starship: add 1.26.0 (A) 2026-08-27 13:42:56 -04:00
stern stern: add 1.34.0 (C) 2026-08-27 14:52:53 -04:00
strace strace: add 7.2 (archetype B) 2026-09-23 17:10:30 -04:00
task task: add 3.53.1 (archetype C) 2026-09-23 13:41:38 -04:00
tealdeer tealdeer: add 1.9.0 (A) 2026-08-27 13:42:56 -04:00
terraform ci: backfill metadata.toml + smoke.toml for all 26 packages (E0) 2026-08-26 15:42:18 -04:00
terraform-docs terraform-docs: add 0.24.0 (archetype C) 2026-09-24 20:30:21 -04:00
tmux tmux: pre-create /persist in image — bwrap can't mkdir a bind DEST on the RO rootfs (same gotcha as btop /sys, wiki Gotchas #11; nvim precedent) 2026-09-23 16:17:51 -04:00
tokei ci: fix the ldd lib-gather no-op (buildah mangles \/-escaped awk regexes across line continuations) 2026-08-27 13:42:46 -04:00
tools pnpm,uv,mise: mode=rw on /persist state binds (engine default is ro) 2026-10-27 16:46:41 -04:00
traceroute traceroute: add 2.1.6 (archetype B) 2026-09-23 15:53:38 -04:00
tree tree: add 2.2.1 (archetype B) 2026-09-23 15:52:17 -04:00
trivy trivy: add 0.74.0 (archetype C) 2026-09-23 13:44:24 -04:00
trufflehog trufflehog: add 3.97.9 (archetype C) 2026-09-28 16:51:44 -04:00
typos-cli typos-cli: add 1.50.2 (archetype C) 2026-09-24 20:30:36 -04:00
typst typst: add 0.15.1 (archetype C) 2026-09-24 19:17:09 -04:00
unzip unzip: add 6.0 (archetype B) 2026-09-23 15:54:40 -04:00
uv pnpm,uv,mise: mode=rw on /persist state binds (engine default is ro) 2026-10-27 16:46:41 -04:00
vicinae ci: backfill metadata.toml + smoke.toml for all 26 packages (E0) 2026-08-26 15:42:18 -04:00
vim vim: add 9.2.1119 (archetype B) 2026-09-23 15:53:29 -04:00
viu viu: add 1.6.1 (A) 2026-08-27 14:36:02 -04:00
wezterm wezterm: bump pin to 20260921_051727 (old nightly rotated out of the COPR; window-mapping re-verify due) 2026-09-22 17:07:01 -04:00
whois whois: replace update-alternatives indirection with a direct symlink — host /etc/alternatives overlay hides the image's link, leaving /usr/bin/whois dangling (PR #14 gate run) 2026-09-23 16:17:51 -04:00
witr ci: backfill metadata.toml + smoke.toml for all 26 packages (E0) 2026-08-26 15:42:18 -04:00
wl-party wl-party: add 0.3.0 (C) 2026-10-16 17:50:28 -04:00
xh xh: add 0.26.2 (A) 2026-08-27 13:42:56 -04:00
xz xz: add 5.8.2 (archetype B) 2026-09-23 15:55:19 -04:00
yazi ci: backfill metadata.toml + smoke.toml for all 26 packages (E0) 2026-08-26 15:42:18 -04:00
yq yq: convert to archetype C v4.53.6 (upstream static, sha256-verified) 2026-09-23 12:54:55 -04:00
yt-dlp yt-dlp: pin deterministic PATH — zipapp starts via env-shebang; bwrap inherits the invoking host's PATH (NixOS store paths on CI), so python3 resolved nowhere (PR #15 gate run) 2026-09-23 17:25:25 -04:00
zellij zellij: add 0.45.0 (A) 2026-08-27 14:36:02 -04:00
zip zip: add 3.0 (archetype B) 2026-09-23 15:54:23 -04:00
zoxide ci: fix the ldd lib-gather no-op (buildah mangles \/-escaped awk regexes across line continuations) 2026-08-27 13:42:46 -04:00
zstd zstd: add 1.5.7 (archetype B) 2026-09-23 15:54:59 -04:00
.gitignore Initial extraction from cn/hosts/thinkpad/bubblebox 2026-07-23 13:12:56 -04:00
AGENTS.md agents: deterministic PATH is now the engine default (§3) 2026-09-24 17:53:13 -04:00
channel.toml channel: activate signature verification (public_key) 2026-09-22 22:26:25 -04:00
DESIGN-ecosystem.md campaign: withdraw GUI batches 9-10 — GUI is flatpak territory 2026-09-24 16:48:08 -04:00
DESIGN-gitops.md docs: DESIGN-gitops — P3 activated + first green nightly; P4 landed 2026-09-23 00:13:13 -04:00
imports.toml glow: import 3.0.0 (upstream OCI) 2026-09-24 20:27:26 -04:00
PACKAGE-BACKLOG.md docs: clear delivered campaign 5 backlog 2026-09-28 21:48:38 -04:00
PACKAGE-REJECTIONS.md docs: select candidate campaign 5 2026-09-28 15:56:15 -04:00
README.md Initial extraction from cn/hosts/thinkpad/bubblebox 2026-07-23 13:12:56 -04:00

bubblebox-pkgs

A bubblebox package source — the build recipes (Containerfile) and default runtime specs (entrypoint.toml) for the tools this source ships. Consumed by the bubblebox engine via a source registration (local path or git URL) and declared in a host's profile.toml.

This is the nixpkgs-analog layer: packages and their default entrypoints. User dotfiles are a separate concern (they live in the host config repo and are reached at runtime via writable_home), and the bubblebox engine is a separate repo at ~/Code/bubblebox.

Layout

<pkg>/
  Containerfile       # the OCI image build recipe (the "package")
  entrypoint.toml     # the default runtime/sandbox spec (the "entrypoint")
  ...                 # vendored resources the Containerfile COPYs (scripts, configs)

A package is just an OCI image; an entrypoint is how bubblebox runs it — which /usr/bin/<binary> to exec, an optional compose list (overlay more packages at runtime), and a sandbox spec (binds, env, writable flags). The package author authors both, co-located, because they know what the tool needs to run sanely.

A virtual entrypoint — one that reuses another package's image — ships an entrypoint.toml with no Containerfile (e.g. age-keygen/ sets package = "age" + binary = "age-keygen", exec'ing /usr/bin/age-keygen from the age image with no duplicate build).

Entrypoint schema (default layer; the user override deep-merges over this)

package = "age"                       # required: the OCI image to mount
binary  = "age-keygen"                # optional: defaults to <package>
compose = ["nvim", "rg", "fd"]        # optional: defaults to [package]

[sandbox]                            # all optional
writable_home = true                  # /home rw (default ro)
writable_run  = true                  # /run/user/$UID rw (default ro)
dirs          = ["/dev/dri"]         # bwrap --dir targets
[[sandbox.bind]]      src=, dst=, mode=(ro|rw|dev|dev-bind), create=bool
[[sandbox.bind_try]]  ...             # conditional (skipped if src absent)
[sandbox.env]         KEY = "val"     # $VAR expanded

create = true on a bind mkdir's its (expanded) src before bwrap, so a required state-dir bind (e.g. $BUBBLEBOX_DATA_DIR/<pkg> -> /persist) materializes itself instead of failing.

Tools with no special sandbox needs (rg, fd, bat, ...) ship no entrypoint.toml — bubblebox run <name> synthesizes a default { package = <name> } when none is present.

The override layer lives outside this repo, at ~/.config/bubblebox/entrypoints/<pkg>.toml, and deep-merges over the default at run time. See the engine's AGENTS.md ("Override layering & deep-merge") for the full merge rules.

Adding a package

  1. Drop a <name>/ subdir with a Containerfile (and, if the tool needs binds/env, an entrypoint.toml).
  2. Add <name> to the consuming host's profile.toml packages list.
  3. bubblebox build <name> (or the host's cjust bubblebox-build <name>).