summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAge
* release: v0.1.5v0.1.5user2026-09-02
|
* pty: install the terminfo entry implicitly when it is missing everywhereuser2026-09-02
| | | | | | | | | The lookup miss now writes the embedded entry to ~/.terminfo and uses it, so a bare box gets the full TERM with no step at all. An entry that exists anywhere is respected -- possibly newer, certainly somebody's -- and a HOME that cannot be written leaves the xterm-256color fallback standing. --install-terminfo stays as the by-hand spelling; the writer moved to pty.c where the panes are.
* slosh --install-terminfo: the binary carries its own terminfo entryuser2026-09-02
| | | | | | | | | | | | The xterm-256color fallback works everywhere; the real entry is better, and a tarball user on a bare box had no easy way to get it. The entry is generated from the vendored tree (contrib/terminfo, so it describes the terminal core we actually ship), compiled with tic, embedded as bytes, and written to ~/.terminfo under every name it answers to, letter and Darwin-hashed layouts both. No root, no package, no conflict with a ghostty installed later. Proven end to end in a mount namespace: bare box falls back, installs, and the next pane says xterm-ghostty.
* pty: fall back to xterm-256color where xterm-ghostty has no terminfouser2026-09-02
| | | | | | | | | | | | TERM=xterm-ghostty was unconditional, but the entry ships with ghostty and a machine that has never seen ghostty has ncurses' database and nothing else. There, nano exits the moment it opens (C-a e flashing a pane) and a shell that cannot look up kbs guesses at backspace. The entry is now looked up the way curses would -- TERMINFO, ~/.terminfo, TERMINFO_DIRS, the system dirs, letter and Darwin-hashed layouts -- and when absent, panes get xterm-256color, which every ncurses database carries. Verified both ways with a mount namespace hiding the database.
* version: never answer for somebody else's git; arch: 0.1.4-3user2026-09-02
| | | | | | | | | | | | | | | | The v0.1.4 arch packages introduced themselves as 0.1.4-dirty: the tag's tarball has no .git, makepkg builds it inside the release box's repository, and git describe walked up and answered for the outer tree -- mid-release, when the paperwork is honestly dirty. Found at 0.1.2, diagnosed, and then left unfixed by yours truly. Two fences now. contrib/version only trusts a .git whose toplevel is its own root (helps every future tarball). The PKGBUILD exports GIT_CEILING_DIRECTORIES for build and package (helps regardless of which contrib/version the pinned tarball carries, which is why the first rebuild still said -dirty: the fix was outside the tarball). pkgrel=3; both architectures rebuilt, verified 'slosh 0.1.4', and republished.
* ship: paperwork before the website, so the demo is not stamped -dirtyuser2026-09-02
| | | | | | | Steps 6 and 7 rewrite the formula and PKGBUILD; building the site from the tag checkout with those uncommitted made git describe say -dirty, and v0.1.4's demo introduced itself as 0.1.4-dirty+webdemo. Commit the pins first, build the site from a clean tag second.
* release: v0.1.4 paperwork -- formula and PKGBUILD pinneduser2026-09-02
|
* release: v0.1.4v0.1.4user2026-09-02
|
* vendor: libghostty-vt bedb6f2 -> 3c1ef5b3 (2026-09-01)user2026-09-02
| | | | | | | | | | | | | | | | | Three weeks of upstream: 504 commits, 120 touching the terminal core -- OSC 5522, kitty relative placements, C0 fixes, the wuffs pixel path. Rebuilt from ghostty's own dist step (zig build dist -Demit-lib-vt=true), zig floor unchanged at 0.16.0, and slosh's C usage compiled unmodified. Patch 0001 is re-implemented, not retired: upstream rewrote the area into ImageStorage.clearScreen but kept the behaviour we patch out -- a terminal clear still reclaims transmitted-but-unplaced images, which breaks the upload-once place-per-frame pattern the protocol's two verbs exist for. The patch now removes just that sweep; the placement clearing and orphan reaping stay upstream's. Their recent 'preserve data on unmatched delete' fixes the same class of bug, so sending ours upstream remains the way to actually retire it.
* contrib/vendor-check: watching upstream is one command nowuser2026-09-02
| | | | | | | | | | | | Vendoring by pinned commit stays (D12) -- the package channels build from source archives where submodules are empty, the arch build is offline-clean because the core is in the tarball, and upstream has no stable release channel to depend on anyway. What was missing is the watching: vendor-check reads the pin from vendor.json, asks the GitHub API what happened since, and lists the commits touching the terminal core. First run found 120 relevant commits in three weeks, including upstream fixing the same class of kitty-graphics bug our patch 0001 fixes -- which is the argument for finally sending it.
* arch-repo: find zig on PATH itself; release: v0.1.3 paperworkuser2026-09-02
| | | | | | | | | ship calls arch-repo without the ZIG= prefix the by-hand runs had, so the leg died on makepkg's dependency check mid-release. arch-repo now derives ZIG from PATH when pacman has no zig, and exports it. The formula and PKGBUILD pins ride along: ship's steps 6 and 7 had already written them when the leg failed, and its preflight rightly refuses a dirty tree.
* release: v0.1.3v0.1.3user2026-09-02
|
* web: the released version in the hero, linking to the releaseuser2026-09-02
| | | | | | Stamped by build-site from ./VERSION, which the release invariant keeps equal to the newest tag -- so the page cannot advertise a version that was never cut, and nothing is bumped by hand.
* web: contributing section, shorteruser2026-09-02
|
* web: a contributing section -- the github and the discorduser2026-09-02
| | | | | | The multiplayer patch proved the repo takes patches; say so where people can see it, and give the not-yet-an-issue conversations somewhere to happen.
* gen-docs: the page title separator is a middle dotuser2026-09-02
|
* docs: sweep the em dashesuser2026-09-02
| | | | | | | Parentheses for the asides, colons for the explanations, commas and semicolons for the joins, (none) for the empty table cells. Same treatment the landing page got, across README, docs/, and both manpages (\(em included).
* web: no em dashes on the landing pageuser2026-09-02
| | | | | | Colons, commas and semicolons where twelve of them stood. People read an em dash as the house style of a language model, and the landing page is not the place to argue.
* web: the sessions step mentions shared attachuser2026-09-02
|
* themes: pin the attach tag to each palette's muted chrome toneuser2026-09-02
| | | | | | Every shipped theme names attach_fg explicitly, reusing its own minbar colour -- the default gray suits the dark themes and nothing else, and paper's light ground proved it.
* attach tag: just the count, in theme coloursuser2026-09-02
| | | | | | | The +x+y offset goes -- 'N clients' says the thing that matters. The inverse-video chip goes with it: the tag now draws in attach_fg / attach_bg from the theme, defaulting to gray ink on the terminal's own background. Standing information, not an announcement.
* web: choreuser2026-09-02
|
* multi-attach: say who else is watching, and where you areuser2026-09-02
| | | | | | | | | | | | A small tag in each client's own top-right corner when several terminals share the session: the viewer count, and on a view that is a crop being panned by somebody else's cursor, the crop's offset into the shared screen ("2 clients +12+4") -- which is exactly the moment a screen moving on its own needs explaining. Stamped per client after projection, because every terminal has its own count of others and its own offset; the shared status bar is composed once and can be cropped out of a panned view anyway. attach_indicator false hides it.
* Merge branch 'multiplayer': shared multi-client attachuser2026-09-02
|\ | | | | | | | | | | | | | | | | Several terminals can attach to one session at once: the canonical screen becomes a model projected into every client's own size, with per-client diff history, input parsing and kitty graphics state. The active client (newest attach, then last input) sizes the canvas by default; multi_attach and size_follows in the config control both halves of the policy.
| * multi-attach: the config knobsuser2026-09-02
| | | | | | | | | | | | | | | | | | | | | | | | | | The patch made shared attach unconditional; these make it a policy. multi_attach false restores the classic displacing attach (EXIT_REPLACED, which old clients already understand). size_follows picks whose size the shared screen takes: active (the patch's rule), smallest (the tmux rule: filler, never a crop), or largest. The size fold lives in apply_canvas, so any attach, resize or departure can move the canvas under the folding policies -- including a non-active client leaving, which under smallest may have been the very client holding the floor down. A config reload re-applies both knobs to the running session.
| * Add competitive multiplayer support.Ingmar Steen2026-09-02
|/ | | | Last input wins, canvas size is adjusted to active connection.
* webdemo: version from contrib/version, published by shipuser2026-09-02
| | | | | | | | | | The demo's Makefile said VERSION := 0.1.0 by hand, so the in-browser slosh announced a release two tags old no matter what was built into it. It now derives from contrib/version like every other artifact, suffixed +webdemo so the guest build names itself. And ship gains a website step: the site (demo included) is rebuilt from the tag checkout and published as part of a release, so the demo cannot fall behind again.
* shaders: remove the .so plugin loaderuser2026-09-02
| | | | | | | | | | | | The static musl release builds cannot dlopen -- musl compiles it out -- so loadable shader plugins were a feature most shipped binaries could not use. Nothing we ship used it either: every shader in contrib/shaders is an expression. Gone: the dlopen/glob loader in shader.c, shader_dir in the config, the plugin ABI table and entry macro, the Windows dl*/glob shims that existed only for it, the contrib/shader-plugin skeleton, its tests, and every doc mention. shader_abi.h stays as the shader model (cell_t, shade_ctx_t, shader_t) with a note about what it used to be.
* web: the real site is the only site, and web/publish ships ituser2026-09-02
| | | | | | | | The coming-soon gate (FULL=1) and its page go: the site is finished enough to be the default. web/publish (make www-publish) builds, refuses to sync a tree that does not look like the site, and rsyncs to /opt/slosh -- around /arch, which contrib/ship owns, and around the served demo when a NO_DEMO build has none to offer.
* web: choreuser2026-09-02
|
* web: deprecate install.sh and the served dist/user2026-09-02
| | | | | | | GitHub releases host the binaries now; installing is a package manager (brew, pacman) or a manual download from the releases page. The curl|sh script and slosh.foo/dist are gone -- one less channel to keep in sync, one less thing to trust.
* contrib/ship: the whole release as one resumable commanduser2026-09-02
| | | | | | | | | | | | contrib/release cuts the tag and stops -- publishing is on purpose. ship is that purpose: push, artifacts (linux/windows here, macOS on the builder), the GitHub release, the brew tap, the arch repo, the paperwork commit. Each step skips when its result already exists, so a run that died mid-way resumes instead of rebuilding artifacts whose checksums are already published. Preflight checks every credential and machine before anything is cut, because half-published is the failure mode this exists to remove (v0.1.2 shipped while the arch repo still served v0.1.1).
* install: source tab clones from githubuser2026-09-02
|
* install: key enrollment commands right in the pacman tabuser2026-09-02
| | | | | | The three commands were a link away in contrib/arch; a repo whose packages refuse to install without the key should hand them over where the repo is advertised.
* public links: point at github.com/sl0p-foo/slosh instead of cgituser2026-09-02
| | | | | | | | GitHub is the public interaction point now. The formula and PKGBUILD fetch GitHub's /archive/ tarballs (same git-archive bytes, per-ref stable); the PKGBUILD is bumped to 0.1.2 while at it, and its cd's drop the v -- GitHub tag archives extract to slosh-X.Y.Z/. The cgit remote stays for pushing; only published URLs change.
* install tabs: macOS / linux / sourceuser2026-09-02
|
* install: drop install.sh, point at GitHub releases for binariesuser2026-09-02
| | | | | | | The landing page now shows the releases page for direct downloads and only lists package manager tabs (homebrew, arch, source). The linux installer script and the windows curl recipe are gone — the releases page is the single place for prebuilt binaries.
* brew: pin formula to v0.1.2user2026-09-02
|
* release: v0.1.2v0.1.2user2026-09-02
|
* point homebrew tap at github.com/sl0p-foo/homebrew-sloshuser2026-09-02
| | | | | brew auto-resolves GitHub taps, so the explicit URL is no longer needed: 'brew tap sl0p-foo/slosh' is all users type.
* find zig on PATH instead of hardcoding ~/zig-0.16.0/ziguser2026-09-02
|
* web: cleanupuser2026-09-02
|
* Merge remote-tracking branch 'origin/docs-new'user2026-09-02
|\
| * docs: choredocs-newPeter Geissler2026-09-02
| |
| * docs: deprecate boring design narrative, more trimming and cullingPeter Geissler2026-09-02
| |
| * docs: big overhaulPeter Geissler2026-09-02
| |
* | web: the logo becomes geometry -- fonts cannot break rectsuser2026-08-30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Android reports arrived of the logo rendering shattered, and the cause is the ascii itself: the default monospace there has no block glyphs, so every ▀▄█ falls back to whatever font volunteers, each with its own metrics, and the grid comes apart. No font stack fixes a missing glyph, and shipping a font is against the house rules. So the logo stops being text: web/gen-logo-mask turns logo.txt into an SVG of merged rects, inlined into site.css as a data URI and used as a CSS mask on an empty element. The animated background layers show through the mask exactly as they showed through background-clip: text, so every effect survives -- gradient slide, shine, hue, glow -- and two old hacks retire with the fonts: the letter-spacing pinstripe fix, and (after one round of seams at fractional mask scales) a vertical overlap baked into the rects. Same 318x84 box, same placement math, and a hero that reads as role=img with a label instead of seven rows of block glyphs.
* | web: the magnet scroll goesuser2026-08-30
| | | | | | | | | | | | | | | | Proximity snapping, even with the doorway steps freed, still catches some people's scrolling in ways worth no tour polish -- input devices and browsers disagree too much about what proximity means. The clickable steps and the smooth scrolling stay; a reader's wheel is theirs again, everywhere.
* | web: a one-line footer -- slosh is a sl0p.foo productuser2026-08-30
| | | | | | | | | | | | The page gets its colophon back, at a fraction of the old footer's size: one centred mono line in the floor's own greys, the link a shade brighter and pink under the pointer.
* | web: the hero logo cycles too, in truer coloursuser2026-08-30
| | | | | | | | | | | | | | | | | | The floating logo's dress on the big one, cut to the brand: no hue rotation -- that is what walks the little one off into blues -- just a 4s slide through the palette's own pinks and orchid and --dead's sunset orange, the most retrowave colour the theme already owns, with the shine crossing once a loop and a soft pink glow underneath. Reduced motion gets the gradient standing still.