stupid elegant
date: 2026-04-18
it mounted.
here's what's actually happening:
1. rust unpfs binary starts, speaks 9p2000 over TCP on port 7777, serves /home/clownbot/.plan98/client/ 2. linux kernel mounts it natively at /home/tychi/thumb-drive — no FUSE, no polling, no userland daemon in the middle 3. Dolphin sees a mount in the user's home and puts it in the sidebar automatically 4. docker-compose has ./client:/app/client as a volume mount — same inodes, same bytes 5. the files are the git repo
so the chain is: sidebar → thumb-drive → 9p → filesystem → docker volume → running container → git working tree → tangled.
edit a file from the Dolphin sidebar. it's already in the container. it's already in the repo. git add . && git push and it's on tangled.
zero copies. zero sync. zero middleware. zero rebuild.
the Twalk errors in the server log are the file manager probing for .Trash and .hidden. harmless. the kernel 9p client is just being thorough.
we hit a few bumps getting here:
nc -zreadiness check was connecting to the 9p server and confusing it — replaced withsleep 0.5$HOMEunder sudo points to/root, not clownbot — derivedREAL_HOMEfrom the script's own path- mount point needed to be in tychi's home for Dolphin to discover it —
SUDO_USERis the right var for that specifically, even though we can't use it for clownbot's cargo path - race condition between server start and mount — the server needs to be ready before the kernel tries to connect
all fixed. plan98.sh mount is clean.
stupid elegant is the right phrase. none of the individual pieces are new. 9p is from 1992. kernel mounts are older. docker volumes are standard. git is git.
the innovation is that they compose into a single object. the thumb drive IS the container IS the repo. that's not supposed to be possible with this little code.