<feed xmlns='http://www.w3.org/2005/Atom'>
<title>sl0ppi.git/sl0ppij/src, branch main</title>
<subtitle>a sl0p.foo repository</subtitle>
<id>https://git.sl0p.foo/sl0ppi.git/atom/sl0ppij/src?h=main</id>
<link rel='self' href='https://git.sl0p.foo/sl0ppi.git/atom/sl0ppij/src?h=main'/>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0ppi.git/'/>
<updated>2026-08-12T18:02:26Z</updated>
<entry>
<title>sl0p: rename to sl0ppij behind a branding seam</title>
<updated>2026-08-12T18:02:26Z</updated>
<author>
<name>user</name>
<email>user@clank</email>
</author>
<published>2026-08-12T18:02:26Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0ppi.git/commit/?id=f0a56905d9d64034797bae1a457ada8f659321b7'/>
<id>urn:sha1:f0a56905d9d64034797bae1a457ada8f659321b7</id>
<content type='text'>
Makes the fork installable and runnable beside a stock zellij: separate binary
name, config dir, cache dir, socket dir, log file and plugin URL scheme.

Everything user-visible is defined once in zellij-utils/src/branding.rs and
referenced from the ~15 places that used to hold a literal, rather than sed-ing
the tree -- upstream has 3300 commits of future rebases, and each touched
upstream line is a conflict forever. A conflict in branding.rs itself always
resolves the same way: keep our constant, take their code.

  binary        zellij            -&gt; sl0ppij
  config dir    ~/.config/zellij  -&gt; ~/.config/sl0ppij
  system cfg    /etc/zellij       -&gt; /etc/sl0ppij
  cache/data    ProjectDirs(Zellij) -&gt; ProjectDirs(foo.sl0p.sl0ppij)
  socket/tmp    /tmp/zellij-$UID  -&gt; /tmp/sl0ppij-$UID
  log           zellij-log/zellij.log -&gt; sl0ppij-log/sl0ppij.log
  plugin urls   zellij:tab-bar    -&gt; sl0ppij:tab-bar (zellij: still parses)

Two things deliberately NOT renamed:

  - The cargo package stays `zellij`; only [[bin]] is renamed. Renaming the
    package would ripple through every intra-workspace dep, the plugin API and
    the 0.45.0+sl0p1 version trick for a name nobody sees.

  - The $ZELLIJ* environment variables stay, because the ecosystem (shell
    prompts, "am I in a multiplexer" checks, our own pi-ext) looks for them. We
    now export $SL0PPIJ* alongside them, and those take precedence on read.
    branding::import_compat_env() folds an inherited ZELLIJ_CONFIG_DIR into its
    SL0PPIJ_ spelling at startup, before clap reads the environment -- clap can
    only be told one variable name per argument.

Snapshots: 14 updated, all of them the plugin URL scheme or a session message.
The insta churn (assertion_line metadata, trailing newlines) that a bulk
--force-update introduces across 340+ other snapshots was reverted, so the diff
here is only what actually changed.

Tests: zellij-utils 471 passed, zellij-server 1499 passed. branding.rs carries
its own tests, including one asserting no shipped default path contains the
string "zellij".

Verified live: sl0ppij creates /tmp/sl0ppij-1000 next to an existing
/tmp/zellij-1000, and `sl0ppij list-sessions` reports none while a stock zellij
reports three running sessions.
</content>
</entry>
<entry>
<title>sl0p: --purpose flag and tab-level purpose</title>
<updated>2026-08-12T17:34:20Z</updated>
<author>
<name>user</name>
<email>user@clank</email>
</author>
<published>2026-08-12T16:44:24Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0ppi.git/commit/?id=21962a35caf351db30150a2b4cdcc30d76ff5fd7'/>
<id>urn:sha1:21962a35caf351db30150a2b4cdcc30d76ff5fd7</id>
<content type='text'>
Completes the two pieces deferred from the first workspace-hints pass.

`zellij run --purpose X` / `zellij action new-pane --purpose X` tag a pane at
spawn time, which is what an agent wants for panes it creates itself; the OSC
wrapper still works for programs that declare their own role. Not supported with
--in-place, which replaces another pane rather than being a pane of its own: clap
rejects the combination rather than accepting a flag that would do nothing.

`tab name="work" purpose="agent-work"` gives a whole tab a role, reported by
`list-tabs --json`. It rides the tab's ROOT layout node, reusing the pane field
because a tab's root is the tab container and never itself a pane -- asserted by a
test for the tightest case (a tab holding exactly one pane), since a leak there
would silently mislabel a pane.

The interesting part is why the flag first shipped broken. There are TWO protobuf
boundaries -- the plugin API and the client-&gt;server IPC contract -- and a CLI flag
must cross the second one. Defaulting the field in the conversion (what "no
protoc" usually forces) compiles cleanly and then silently drops the value in
transit, so --purpose parsed, printed a pane id, and did nothing. Fixed by adding
the field to both contracts by hand, in the .proto AND the committed generated
prost, kept in lockstep so a future regeneration reproduces it: protoc is only
needed to regenerate, not to build. Both boundaries now have a round-trip test,
and the IPC one was confirmed to fail when the wire read is removed.

Sanitising moved to Grid::set_authoritative_purpose, the single choke point every
out-of-band source passes through, after the CLI path was observed delivering
`bad purpose; rm -rf /` intact into list-panes --json.
</content>
</entry>
<entry>
<title>vendor(sl0ppij): import zellij v0.45.0 tree</title>
<updated>2026-08-12T17:34:15Z</updated>
<author>
<name>user</name>
<email>user@clank</email>
</author>
<published>2026-08-12T17:34:15Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0ppi.git/commit/?id=d1c14ff0f5c5b55c46d91ad12f4a291041480a99'/>
<id>urn:sha1:d1c14ff0f5c5b55c46d91ad12f4a291041480a99</id>
<content type='text'>
Squashed import of upstream zellij at 0e6e4404 ("Support the Kitty Image
Protocol (#5428)"), the merge-base our fork was developed against. Upstream's
3311 commits are deliberately NOT replayed here; only our own fork commits are,
so the monorepo stays small and `git log sl0ppij/` shows sl0p work, not zellij's
entire history.

Upstream provenance is tracked in FORKS.md and can always be re-fetched from
https://github.com/zellij-org/zellij.
</content>
</entry>
</feed>
