aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAge
...
| * 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.
* | web: the demo poster rises above the lightened flooruser2026-08-30
| | | | | | | | | | | | | | The body gradient's ground passes --panel by, and a box darker than its floor reads as a hole. The poster steps up to --code-bg -- the same raised step the install boxes beside it use -- and its border moves to --faint, since the old border colour is now the fill.
* | web: the page lightens toward the ground, barelyuser2026-08-30
| | | | | | | | | | | | | | | | A gradient on the body, whose box is the whole document, so the fade maps to scroll distance: near-black held through the hero and the tour, then a slow climb to a grey that stops shy of the panels' own colour -- the floor lightens, the boxes on it stay boxes. html keeps the solid top colour, so over-scroll rubber-banding stays dark.
* | web: the logo trades the glitch for the shineuser2026-08-30
| | | | | | | | | | | | | | | | | | | | A band of light sweeping the glyphs once a loop -- the logo running slosh's own shine preset, which is a better advertisement than a signal fault. The band is a second background layer on the same text clip, parked off the ink for 86% of the loop and crossing in the closing 0.7s; one set of keyframes drives both layers, the colour slide holding its linear pace through every stop. The glitch keyframes go, and reduced motion still keeps only the hue.
* | web: the logo glitches, briefly, every seven secondsuser2026-08-30
|/ | | | | | | | | | | A signal that is fine, fine, fine, and then for a third of a second is not: torn into bands by clip-path, shoved and sheared by transform -- the two properties the other animations left free, filter being the hue's and background the slide's. Doubled keyframe percentages make the cuts hard instead of smeared, and 7s against the 5s slide and 4s hue lands the burst somewhere new in the colour every time. Reduced motion never sees it: the glitch is nothing but motion, and the reduced lane already keeps only the hue.
* web: the hero button says try it, like the section it goes touser2026-08-30
|
* web: the whole step is the road, not just its titleuser2026-08-30
| | | | | | | | | | Clicking anywhere in a dimmed article glides it to the centre and so, through the observer, switches the recording. Three guards keep the click meaning navigation: the active step does not react (clicks there are for reading and selecting, not going where you already are), a selection is not a click, and a link is a link. The pointer cursor and the title's breath of pink now belong to dimmed steps only -- the active one is just prose.
* web: the tour's doorway steps stop grabbinguser2026-08-30
| | | | | | | | | Proximity snapping traps at the edges: between steps, adjacent fields hand you from magnet to magnet, but at the first and last there is no next field -- a wheel tick toward the hero or past the final demo ends inside the boundary step's radius and is pulled straight back, forever. The interior steps keep their snap-align; the doorways go without, because a doorway that grabs is worse than a step that does not snap.
* web: the tour magnets, politelyuser2026-08-30
| | | | | | | | | | | | scroll-snap-type: y proximity on the root, snap-align: center on the steps and nothing else: a scroll that ends near a step is settled onto its centre -- the exact spot the tour activates it, so the rest position and the lit step agree -- and momentum, half-reads and every snapless section are left alone, by spec. Proximity, never mandatory: the mandatory kind on a page that also has prose is a trap, and the JS kind is worse. Off in the one-column layout, where the sticky stage covers the upper viewport and a centred step would sit half beneath it.
* web: a step's title is a road to the stepuser2026-08-30
| | | | | | | | Clicking an article's h3 glides it to the middle of the viewport -- the exact spot where the tour's observer activates it, so the click also switches the recording, through the same door scrolling uses rather than a second mechanism. The pointer cursor and a breath of pink on hover say clickable.
* web: the floating logo yields to the buttons and the rising terminaluser2026-08-30
| | | | | | | | | | | | | | | Two overlaps the section observers missed. The show opened on the big logo leaving, but the hero's buttons sit below it, so there was a band of scroll with the little logo arriving on top of install/try/docs -- observe the whole hero instead. And at the tour's exit the stage unpins and is dragged up through the logo's air before the try section crosses its line -- no section boundary says so, but two rects do: a rAF-throttled collision check against the pinned player's rect, and whenever the terminal would touch the logo, the logo yields. Verified by sweeping fifteen scroll positions: shown through the whole tour, hidden over the buttons, the rising terminal, the demo box and the install tabs, with zero overlapping frames.
* web: the config cast zeroes the padding before going compactuser2026-08-30
| | | | | | | | padding 1 2 was still in force when compact arrived, and the dense school reads best with the panes flush against its dividers. The cast now takes the padding back first -- cc rewrites the line to padding 0 on camera, one more save applying live -- so the compact beat lands on the layout it was designed around.
* web: the config cast edits in colouruser2026-08-30
| | | | | | | | | | vim -u NONE kept the render machine's dotfiles out of the cast, but NONE also switches off filetype detection and syntax -- so the config demo was editing kdl in monochrome, underselling vim and the file both. The demo now authors its own six-line vimrc instead: syntax on, habamax (the webdemo's own look), shortmess for the column. The cast depends on vim's runtime and nothing personal, which is what NONE was protecting in the first place.
* web: the casts play at 1.75x -- the owner has watched them enoughuser2026-08-30
|
* web: the config cast turns the layout before it editsuser2026-08-30
| | | | | | | | | | | C-a e arrived as a strip along the bottom, and a 66-line config in a twelve-row strip reads like a keyhole. A quarter turn (C-a Space) right after it opens makes the editor a column with the height the file deserves -- and shows off the rotate while at it. The column brought back vim's hit-enter stall (the file-info message wraps at 49 columns), so the recording's EDITOR gains the same shortmess the webdemo's vimrc already carries.
* web: one knob to hurry every cast on the pageuser2026-08-30
| | | | | | | | | window.SLOSHCAST_SPEED, multiplied into each mount's own data-speed: the front page sets 1.25 and every recording plays a quarter faster than authored, the scripts under demos/ untouched -- their pacing is theirs, and how much of it a visitor's attention span gets is the page's call. The clock keeps counting cast-time, so the timestamps mean the same thing at any speed.
* web: the panes cast shows the drop bands, not just the swapuser2026-08-30
| | | | | | | | | | | | | | | | The title drag had one beat -- drop in the middle, trade places -- which undersells the feature: carried over a pane, the target subdivides into a centre and four edge bands, a band meaning "in beside it, on this side", filling the half it would hand over while every other candidate greys out. The cast now lingers over the centre, steers into a band, and drops -- and the drop restacks the whole tab, a rearrangement no swap could produce, chosen so the release visibly changes the layout (the first cut dropped a pane beside the neighbour it already had, and proved nothing). The band is aimed by its entry in the compositor's hit list, like every coordinate in these demos: the rect the program promised is the rect the pointer hits. The panes article's bullet follows suit.
* web: the demo poster keeps to the content columnuser2026-08-30
| | | | | | The tour-width breakout belongs to the machine, not to the offer of one: unbooted, the panel now sits flush with the prose and the install box; booted, it still takes the tour's width and most of a viewport.
* web: power off is a button, not a cheeky linkuser2026-08-30
| | | | | | A real ghost button centred under the running machine, in the hero buttons' own dress -- ghost on purpose: booting stays the loud verb, stopping the quiet one. The caption drops to a side note beside it.
* web: the demo machine can be powered offuser2026-08-30
| | | | | | | | | | | | A caption under the running machine offers the off switch, dressed as a link inside a sentence. Dropping the iframe out of the DOM tears the whole VM down -- emulator, kernel, disk cache, the lot -- the stage shrinks back into the poster (the original nodes come back from a stash, listeners and all, so the boot button is immediately live again), and the scroll follows both ways. Reload always did this; the button does it without taking the rest of the page with it.
* webdemo: no attach splash -- the welcome float already greetsuser2026-08-30
| | | | | | | Two logos in quick succession -- the splash's, then the welcome float's -- reads as a glitch, not a greeting, technically correct or not. splash_ms 0 in the guest config; the comment leaves the knob visible for anyone editing their way through the playground.
* web: the demo machine, bootable in the front pageuser2026-08-30
| | | | | | | | | | | | | | | | | | | | | | | A try section between the tour and the install box: a modest poster with one button, and the machine only when the button is pushed -- the front page keeps costing two files, which is the decision the README recorded when the demo got its own page, still being honoured. The click grows the stage to most of a viewport *before* the iframe goes in (the guest reads its geometry from the room exactly once, at boot), then glides the scroll to land the machine centred. An iframe, not the demo's scripts inlined: the emulator's emscripten glue owns its globals by name, and isolation is what keeps this page and that blob out of each other's namespaces. ?embed=1 makes the demo page drop its own header and footer inside the frame; standalone it is unchanged, and phones navigate to it rather than embedding -- wasm under a soft keyboard in an iframe helps nobody. The floating logo learns the tour's edges properly while at it: the try section arriving closes the show (measured with a -45% rootMargin, because the tour's exit margin lets the section ride high while the last step is still centred), and a section scrolled past counts as arrived, not gone.
* web: the logo cycles hyper, and casts a glow to matchuser2026-08-30
| | | | | | | | | | | | | Fewer colours at once, more per second: the gradient slims to three stops -- pink, orchid, blue -- and the hue rotation takes over the variety, a full wheel in 4s (5s in the reduced-motion lane, colour in place, still nothing travelling). The slide drops to 5s with it. And a drop shadow, inside the hue keyframes because the filter property is the animation's to own -- a static filter would lose to it -- and listed before the hue-rotate so the glow is rotated with the letters and always matches their current colour. Soft and low: on a near-black page a shadow can only read as a faint underglow.
* web: reduced motion stills the logo's slide, not its colouruser2026-08-30
| | | | | | | | | | | Both of the owner's browsers showed the cycle frozen, and the culprit was neither of the browsers: the OS asks for reduced motion, both pass it on, and the media rule here answered by killing every animation. The preference is about motion -- patterns that travel, the vestibular kind -- not about colour, so the position slide goes and the in-place hue rotation stays, at half speed. Nothing moves, everything still breathes, and a visitor who asked the OS for stillness gets exactly the stillness they asked for.
* web: the logo's colour cycle gets range, speed, and a Safari laneuser2026-08-30
| | | | | | | | | | | | | | More of the wheel -- the gradient now walks pink, orchid, blue, cyan, mint and back, all colours the demo's own terminal palette already speaks -- and a faster walk, 8s to the position slide's loop. And a second motion: WebKit caches a text-clipped paint and never repaints it for a background-position animation, so on Safari the wash sat frozen, pink on the left, cyan on the right, which rather defeats a colour cycle. A hue rotation runs alongside (12s to the full wheel): filters apply post-paint on the compositor, so every engine animates it over the cached clip. Chrome and Firefox get both motions, WebKit gets the rotation alone -- either way, nothing stays pink.