No description
Find a file
internaut fd23e389e2 feat: never lose user settings; one prompt; dock launchers; boot logo
Your settings are no longer collateral damage of a theme update. Four
places were overwriting them, all on both Mint and CachyOS.

1. terminalrc was written with `>`. Every terminal preference you had
   was destroyed on every --theming run: scrollback, tab position,
   menubar visibility, cursor shape, geometry, key bindings. Now merged
   through one new merge_ini helper: only the colour and font keys are
   replaced, every other line is kept. Proven on a seeded file --
   five unrelated keys survived, each theme key written exactly once, the
   stale ColorUseTheme=TRUE removed.

   Two defects in that helper were found by running it, not by reading
   it: command substitution strips the trailing newline, which glued the
   inserted key onto the user's next line and silently lost it; and
   awk -v rejects an embedded newline, so a multi-key merge died outright
   while the single-key settings.ini case happened to work. The insert
   block now comes from a file.

2. Dock launchers were about to be re-pinned from a fixed default set on
   every run, which would wipe favourites arranged by hand. Existing
   launcher plugins on the dock are now detected and kept in their order;
   the defaults are pinned only on a dock that has none. MX_DOCK_RESET=1
   opts into a reset.

3. Whisker Menu favourites live per PLUGIN ID in
   ~/.config/xfce4/panel/whiskermenu-<id>.rc. Minting a fresh id 11 for
   the bar handed you an empty menu and orphaned the favourites. The
   existing whiskermenu id is now reused. MX_MENU_RESET=1 forces a new one.

4. The backup covered the xfconf channel XML but NOT
   ~/.config/xfce4/panel, where the launcher .desktop files actually live,
   so the favourites themselves had no backup at all. New mx_backup_dir
   saves the directory before anything is written, first pristine copy
   wins like the file variant.

Dock visibility, properly this time. The official xfce4-panel docs say
"Automatically increase the length" only INCREASES, so length=10 is a
floor and the panel was never collapsing. It was EMPTY: its only plugin
was a tasklist, which shows nothing while no window is open, so a
10-percent-wide black translucent bar sat invisible on a black wallpaper
and appeared to come and go with the open windows. A macOS dock is
launchers first, so launchers are pinned (file manager, terminal,
browser, editor, settings -- probed per category so each distro gets what
it ships) and the tasklist follows. If nothing could be pinned the build
says so loudly instead of reporting success over an invisible dock.

One prompt, one password. A --boot run asked for a typed word five or six
times and then refused each step for not being root, because the steps
print "re-run with sudo" instead of elevating. The chain now confirms
once, exports MATRIX_ASSUME_YES so the steps do not re-ask, primes sudo
once and runs each step under it with -E. A single step run on its own
still asks.

Boot splash: the distro logo, centred, over the rain. The rain keeps
running behind it (Z 0 against Z 5). Opacity rises from 0.5 to 1.0 with
boot progress and breathes on a sine whose amplitude shrinks as the level
rises, so it is visibly alive early and a steady mark once booted. The
percentage is drawn under it. No logo is shipped -- bundling a Mint or
CachyOS mark would be a trademark question and wrong on the other distro
-- so the installer takes the one the machine has: the plymouth watermark
a Debian/Mint install already ships, then the pixmap locations, then
os-release ID, then an SVG through rsvg-convert/magick/inkscape. Missing
logo is handled: the splash is rain plus percentage and the installer
says which packages would give it one.
2026-09-18 19:11:00 +02:00
linux feat: never lose user settings; one prompt; dock launchers; boot logo 2026-09-18 19:11:00 +02:00
macos refactor(macos): Remove the retired matrix_metal.swift 2026-09-18 09:27:31 +02:00
.gitignore feat(linux): full matrix coverage on XFCE -- rain, decoration, icons, cursor, terminal, sounds 2026-09-18 13:38:48 +02:00
README.md feat: Add the Linux theme and split the tree per platform 2026-09-18 09:12:23 +02:00

matrix-themes

Matrix green for a whole desktop, on two operating systems. The same digital rain, the same 14 colours, and the same motion model in both.

macos/ macOS 27. Metal wallpaper host, screensaver bundle, icons, terminal, editor, login screen.
linux/ CachyOS and Arch. GNOME, KDE Plasma and wlroots, on Wayland and X11, plus boot splash, greeter and TTY.

The palette is the contract

#00FF41 is the green. Both trees carry the same 14 values in their own palette.md, and the two files were checked against each other value by value. A change to one is a change the other has to follow.

One shader per platform, never one per host

The rain is a fragment shader, and the motion lives in a single file on each side: macos/wallpaper-host/MatrixRain.swift holds the MSL, and linux/shader/matrix_core.glsl holds the GLSL. Every host on that platform compiles that one file.

This matters because the macOS tree grew a second copy of its renderer within a day of being written. That copy was the only source of visual drift it ever had. On Linux the same shader now serves three hosts, because the three desktops disagree about who owns the background.

The motion model came from a frame-by-frame analysis of the film's opening sequence. Runners make up 17.7 percent of passes and trails run 14 to 56 cells. The glyph is seeded from the pass number, so it stands still while the strand grows below it, and only one strand in five carries a bright head.

Cost

The macOS Metal host settles at 1.4 to 2.2 percent of one core at 5120x1440 and 30 fps. That is measured on an M4, over five samples under launchd, and it replaced a WebKit host that cost 16 percent and kept losing its renderer to the memory killer.

The Linux hosts were authored on macOS and have never been compiled by a real driver. Their own READMEs say so under a heading, and linux/doctor.sh turns most of those unknowns into measurements in one read-only run.

Start here

cd macos && ./install.sh --help     # macOS
cd linux && ./doctor.sh             # Linux, writes nothing

Both trees keep their installers separate from their boot-level steps, and both back up what they replace. The Linux boot chain writes to /usr and rebuilds the initramfs, so read linux/boot/README.md before running it.