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. |
||
|---|---|---|
| linux | ||
| macos | ||
| .gitignore | ||
| README.md | ||
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.