Audited every non-shell context in the repo — hypr, waybar, systemd,
desktop entries — for repo scripts named without a path. Two real hits
beyond the scratchpad bind:
hyprctl_modify_wkspc1 runs from exec-once at every Hyprland startup, so it
has been failing silently on both laptops since ~/.local/bin stopped being
a symlink into the repo. Nothing surfaces an exec-once that cannot find its
binary.
system76's playlistBuilder bind had the same bare hypr_workspace. Its inner
command already used `zsh -lc`, so `play` resolved; the outer call did not.
Scratchpad terminal. The original config called hypr_workspace by absolute
path; splitting the config into common and host layers I rewrote those to
bare names, assuming PATH would resolve them. It does not: Hyprland's exec
runs with whatever PATH the session inherited at startup, which here is the
system default — no ~/.local/bin, no repo directories. That was survivable
while ~/.local/bin was a symlink into the repo, but the cutover made it a
real directory and removed the 29 duplicated scripts, so the binding broke.
Repo scripts are now named via $bin, defined per host in local-env.conf
because the home directory differs.
Same commit fixes toggleFloating.sh, which the shared config referenced as
/home/connor/.config/... — correct on two machines, wrong on the work
laptop. Now ~.
rbw. The old install.conf.yaml linked ~/.config/rbw on every host; I put it
in the mainframe and system76 host configs and forgot the work laptop, so
rbw there had no config at all. Moved to base, where it was always meant to
be.
The work laptop's first install left five files dirty, all of them wallust
targets. Tracking generated colour files means each machine rewrites the
others' palette on every theme change — exactly the churn a shared repo
should not have.
hypr, waybar and swaync now get their colours as real files written into
real directories, so nothing is linked and nothing is tracked. kitty and
qutebrowser land inside directories this repo links wholesale, so those two
are ignored by path instead. swaync switched from a directory link to two
file links to make room for its generated colors.css.
Regeneration is automatic: hypr_refresh runs every 15 seconds on both
laptops, so a fresh machine has colours within a quarter of a minute.
Replaces the previous repo, which had split into two histories that never
met (mainframe on a dead GitLab remote, the laptops on Gitea) with 146
dirty files across three machines and the NAS never enrolled at all.
Branch-per-machine is gone. One main, with host differences expressed as
small files under hosts/<hostname>/ rather than as branches, so there is
nothing to merge. The reconciled zsh layer reduces 15-33 line forks to
1-7 effective lines per host; distro differences (oh-my-zsh prefix,
syntax-highlighting path, fd vs fdfind) are probed in common/ instead.
Fresh history: the old one carried six plaintext credentials, 45 MB of
mail caches, browser caches and vendored binaries. 5,096 tracked files
and 144 MB become 462 files and 2.6 MB. The .gitignore is now an
allowlist, which is what keeps that true.
Root cause of the rot: ~/.local/bin was a symlink to scripts/ with GOPATH
inside it, so every go install wrote into version control (2.2 GB on the
work laptop). PATH now points at the repo instead of the reverse.
Also: Hyprland replaces sway and is sourced in two halves so $browser is
defined before use; singleton automations carry ConditionHost= alongside
host-layer-only placement; ddns moves from cron to a guarded timer;
package manifests and pkg-snapshot/pkg-restore replace the X11-era
install_scripts/; networkmanager-dmenu added to system76 (the binding
always existed, the package never did).