aboutsummaryrefslogtreecommitdiffstats

Forks and pins

sl0ppi ships one version (see VERSION), but it is assembled from upstream projects we fork or pin. This file is the transparency record: for every component, what it is based on and how far it has drifted.

Keep this file honest. Update it in the same commit that moves a base.

Vendored forks

sl0ppij ← zellij

upstream https://github.com/zellij-org/zellij
upstream version 0.45.0
upstream base commit 0e6e4404 — Support the Kitty Image Protocol (#5428), 2026-07-31
our version string 0.45.0+sl0p1
lives at sl0ppij/
patches on top 62 commits (all prefixed sl0p:)
license MIT (upstream sl0ppij/LICENSE.md retained)

The 62 fork commits were replayed into sl0ppij/ from the standalone fork repo (ssh://git@git.sl0p.foo:39327/srv/git/sl0ppij.git, branch sl0p/base), so git log --oneline sl0ppij/ is the patch series. Upstream's own 3311 commits were squashed into a single vendor import to keep the monorepo small.

How to rebase onto a new zellij release

The fork commits live under a sl0ppij/ prefix here, which upstream's tree does not have, so a rebase happens outside the monorepo and comes back as patches:

# 1. in a scratch clone of the standalone fork repo
git remote add upstream https://github.com/zellij-org/zellij   # if missing
git fetch upstream
git rebase --onto upstream/main <old-base> sl0p/base           # resolve conflicts

# 2. re-import into the monorepo
git -C <fork> archive <new-upstream-base> | tar -x -C sl0ppij/  # new vendor import (own commit)
git -C <fork> format-patch --binary -o /tmp/p <new-base>..sl0p/base
git am --directory=sl0ppij /tmp/p/*.patch

# 3. verify the import is byte-identical, then update this file
test "$(git rev-parse HEAD:sl0ppij)" = "$(git -C <fork> rev-parse sl0p/base^{tree})"

The standalone fork repo stays alive purely as the rebase workbench; the monorepo is authoritative for what ships.

sl0pstatus ← zjstatus

upstream https://github.com/dj95/zjstatus
upstream version 0.24.0
upstream base commit 74f36b4 — chore: bump version to v0.24.0, 2026-07-15
lives at sl0pstatus/
patches on top 3 commits (double-click a tab to rename; a new-tab button and pane-gap margins; the bar as a framed box)
builds to zjstatus.wasm (cargo package name is still zjstatus)
standalone repo ssh://git@git.sl0p.foo:39327/srv/git/sl0pstatus.git, branch sl0p

Not optional decoration: config/layouts/default.kdl replaces zellij's stock tab-bar and status-bar with this plugin, so without it the default layout starts with a "failed to load plugin from disk" error and no status bar.

It depends on the released zellij-tile 0.44.3 from crates.io, not on sl0ppij's in-tree one — the plugin API is stable across that gap. Our build reproduces the previously hand-built zjstatus.wasm in the live config dir byte-for-byte.

Fork-only config keys, all inert when unset (upstream renders identically):

key what it does
margin_left / margin_right blank columns at each end, so the bar lines up with panes inset by the pane gap
new_tab format for the {new_tab} widget, a clickable button that opens and focuses a tab
bar_frame_enabled draw the bar as a box in the pane style, when its pane has 3+ rows
bar_frame_rounded ╭╮╰╯ vs ┌┐└┘; keep in step with rounded_corners in config.kdl
bar_frame_format style for the box glyphs (we use the theme's frame_unselected)

Its tests do not run under make test. The crate builds for wasm32-wasip1 and .cargo/config.toml points the test runner at wasmtime, which is not installed here. Run them against the host instead:

cd sl0pstatus && cargo test --lib --target x86_64-unknown-linux-gnu

Same rebase procedure as sl0ppij, with sl0pstatus/ as the prefix.

Pinned, not forked

pi (the agent)

upstream npm @earendil-works/pi-coding-agent
pinned version 0.84.1
vendored at (not yet — see docs/roadmap.md phase 3)

Our extensions in pi-ext/ target this version's extension API. pi is not forked; it is pinned and redistributed as-is.

bun (the runtime)

upstream https://bun.sh
pinned version 1.3.14
why pi is a Node/TS program; bun runs dist/cli.js directly (verified) and is a single static binary, so the tarball needs no system Node
which build bun-linux-x64-**baseline**.zip. The default build needs AVX2 and dies with Illegal instruction on a plain KVM guest — measured under qemu-x86_64 -cpu Nehalem, where baseline prints its version and the default one crashes.

pi upstream builds its own release binary with bun build --compile, so bun is a supported runtime for it rather than a gamble.