[Sync] cleanup

This commit is contained in:
coja
2026-08-12 23:49:33 +02:00
parent a700e23e0a
commit a099091b6c
9 changed files with 8 additions and 306 deletions
-114
View File
@@ -1,114 +0,0 @@
# Updating HyDE on a host
Operational runbook for the framework these dots sit on top of. Carried over from
dots-wm's `HYDE-UPDATE.md` before that repo was abandoned (2026-08-08); trimmed to the
update itself, since the migration it was written for is done.
## What HyDE is to this repo
GUI hosts hard-depend on it: `hypr/hyprland.conf` sources
`~/.local/share/hyde/hyprland.conf`, which defines `$mainMod` and the framework vars.
Without it a GUI host dies with `source globbing error` + `invalid mod $mainMod`. That
file is **generated**, not tracked here — see README's "HyDE dependency".
## Should an old HyDE be updated?
Yes, once the host's dots are settled — an old HyDE paired with a current Arch Hyprland
is a known-bad mix, and it fails *silently*. Symptoms actually observed on wm (HyDE from
April 2025):
- ships the pre-0.45 `layerrule = blur,waybar` form, which current Hyprland rejects —
HyDE wraps the source in `hyprlang noerror true`, so nothing is printed;
- hard-sources `hypr/themes/{theme,colors,wallbash}.conf`, which newer HyDE generates
itself — missing them, Hyprland falls back to compositor defaults (border 1,
rounding 0, `gaps_out` 20, no blur);
- `animations/theme.conf` is a `source = ./HyDE.conf` stub where `HyDE.conf` is a
newer-HyDE artifact that does not exist there.
Upstream has since shipped config fixes for Hyprland 0.53 (windowrule overhaul), 0.54
(togglesplit binds) and 0.55 (config breaking changes). A 2025 HyDE predates all three.
Because of that old-HyDE behaviour, the **wm overlay tracks
`wm/.config/hypr/themes/{colors,theme,wallbash}.conf` and
`wm/.config/hypr/animations/theme.conf`** (force-added past the `**/hypr/themes/`
gitignore) — wm's HyDE hard-sources the former and never generates the `HyDE.conf` the
`gui` animations stub points at. Theme switches on wm write *through* those symlinks and
dirty the repo — expected; fl works the same way. **When wm's HyDE is finally updated,
delete all four from the overlay** (newer HyDE generates its own) and let
`reconcile-hyde.sh` sort out the rest.
**Do it as its own change** — never in the same sitting as a dots migration, or a single
symptom is unattributable.
## Can it be reverted? Only partially
`~/HyDE/Scripts/install.sh` overwrites `~/.config/hypr/*`, **replaces stow symlinks with
real files**, backs the old configs up to `~/.config/cfg_backups`, and installs/upgrades
packages.
- Recoverable: the **config layer** — dots are git-tracked, and
`./bin/reconcile-hyde.sh --relink <host>` re-stows the repo versions (backing severed
files up to a timestamped dir).
- **Not** recoverable: packages it upgraded, and HyDE's generated state
(`~/.local/share/hyde/*`, `hyde/themes/`, wallpapers) — overwritten in place.
- There are **no system snapshots** on these machines (no timeshift, no btrfs
`/.snapshots`), so there is no whole-system rollback.
A real undo therefore requires the backup in step 1. It is not optional.
## Procedure
1. **Back up — this is the only revert path.**
```fish
tar czf ~/hyde-pre-update-(date +%F).tgz -C ~ .local/share/hyde .config/hypr .config/waybar
pacman -Qe > ~/pkgs-pre-update.txt
```
2. **Update** (clone HyDE first if `~/HyDE` is absent):
```fish
~/HyDE/Scripts/install.sh # -r restore mode overwrites ~/.config/hypr/*
```
3. **Reconcile the dots** — HyDE has just severed the stow symlinks:
```fish
cd ~/.dots
git commit -am wip # so reconcile choices stay reviewable
./bin/reconcile-hyde.sh <host> # report only, safe
./bin/reconcile-hyde.sh -i <host> # interactive: keep/take/merge per file
# or: ./bin/reconcile-hyde.sh --relink <host> # repo versions win, re-stow
```
Note `SUBTREES` in that script covers `.config/hypr` and `.config/waybar` only.
4. **Disable HyDE's own bar** (one-time; gui's exec-once launches the custom cava rig):
```fish
systemctl --user stop hyde-(echo $XDG_SESSION_DESKTOP)-bar.service
systemctl --user mask hyde-(echo $XDG_SESSION_DESKTOP)-bar.service
```
5. **Verify — `hyprctl configerrors` is not enough.** It returns empty even for a missing
`source =`, which is what hid every bug above. Check the log and the `set:` flag:
```fish
grep -cE 'globbing error|Error parsing gradient' /run/user/1000/hypr/*/hyprland.log
hyprctl getoption decoration:rounding # set: false = nothing ever assigned it
```
Then review `git -C ~/.dots status` after the reconcile.
6. **Check the keybind scripts still exist — this is the one that bites.** 24 binds in
`hypr/keybindings.conf` `exec` scripts out of HyDE's `$scrPath`, which the repo does not
define or ship. When HyDE renames or drops one, the bind stays valid, Hyprland logs
nothing, and the key simply stops doing anything. (This is how the 2026-07-20 lw clash
presented: "no keybinds, no errors".) `dontkillsteam.sh` is a known upstream
deprecation, and it is bound to **Super+Q and Alt+F4** — i.e. closing windows.
```fish
set scr (grep -oP '(?<=\$scrPath\s?=\s?).*' ~/.local/share/hyde/hyprland.conf \
| head -1 | string trim | string replace '$HOME' $HOME)
echo "scrPath = $scr"
for s in (grep -hoE '\$scrPath/[A-Za-z0-9._-]+' ~/.config/hypr/*.conf \
| string replace '$scrPath/' '' | sort -u)
test -e "$scr/$s"; or echo "MISSING: $s"
end
```
Anything listed MISSING needs its bind repointed at the current script name in
`gui/.config/hypr/keybindings.conf` — that is a dots fix, not a HyDE one.
## Reverting
Partial only: `./bin/reconcile-hyde.sh --relink <host>` plus `git restore` bring back the
config layer, and `~/.config/cfg_backups` holds HyDE's own pre-update copies. Packages and
`~/.local/share/hyde/*` come back only from the step-1 tarball.
+1 -1
View File
@@ -11,7 +11,7 @@ requires). `bin/` holds repo tooling and is **not** a package (never stowed):
``` ```
common/ # shared everywhere (mirrors $HOME): fish, nvim, bat, btop, tmux, pi, claude, presenterm, ... common/ # shared everywhere (mirrors $HOME): fish, nvim, bat, btop, tmux, pi, claude, presenterm, ...
gui/ # GUI configs shared by graphical hosts: hypr, waybar, kitty, alacritty, mpv, zellij gui/ # GUI configs shared by graphical hosts: hypr, waybar, kitty, alacritty, mpv, zellij
wm/ # desktop: 4K monitors, NVIDIA, cloud LLM (duskadiy), Wingman work aliases wm/ # desktop: 4K monitors, NVIDIA, cloud LLM (duskadiy), work aliases
lw/ # laptop: no NVIDIA, roaming VPNs, network/LLM tools lw/ # laptop: no NVIDIA, roaming VPNs, network/LLM tools
fl/ # KDE Plasma box: a few Hyprland overrides + llamacpp, evremap fl/ # KDE Plasma box: a few Hyprland overrides + llamacpp, evremap
bin/ # tooling (not a stow package): install.sh companions bin/ # tooling (not a stow package): install.sh companions
-119
View File
@@ -1,119 +0,0 @@
# Dots — TODO
Backlog after the HyDE modernization (legacy Hyprdots → current HyDE), merged to `main` 2026-07-22.
Hosts: **lw** current HyDE (active); **wm** current HyDE (not set up yet); **fl** KDE (future: bare Hyprland).
## Key architecture note (learned 2026-07-23)
On current HyDE, **waybar's `config.jsonc` is generated by `waybar.py` from the active *layout*** in
`~/.config/waybar/layouts/` (active layout tracked in `~/.local/state/hyde/staterc`). So the dots manage
the **layout + module defs**, NOT `config.jsonc` (HyDE overwrites it). Also: the Arch `waybar` build has
**no native `cava`** module — use the script module `custom/cava``hyde-shell cava.py waybar --json`.
## Cava (working on lw — remaining polish)
The rig: `layouts/custom.jsonc` + `layouts/custom.css` = **two bars launched standalone**
(`waybar -c …custom.jsonc -s …custom.css`, exec-once in userprefs.conf) — transparent main bar (top layer)
over a full-width `custom/cava` bar behind it (bottom layer; `margin-top: -33` cancels the main bar's
exclusive-zone displacement). **NOT HyDE-managed** — the raw `waybar -c` bind on `keybindings.conf:39` IS the
launcher/toggle; keep it as-is. Deployed on lw 2026-07-25: HyDE's bar unit stopped + masked, rig live.
**HyDE ownership rules (learned the hard way 2026-07-25):** HyDE's `waybar.py` *writes*
`~/.config/waybar/config.jsonc` AND `~/.config/waybar/style.css` (any `--set`/`--update` clobbers them —
through the stow symlink, i.e. into the repo checkout!). `theme.css` is wallbash-generated on theme change.
The rig therefore keeps its own files in `layouts/` (never written by HyDE) and only *imports* `../theme.css`.
HyDE's bar itself is systemd unit `hyde-<XDG_SESSION_DESKTOP>-bar.service` behind a `waybar.py --watch`
auto-restarter launched by `startup.conf` (`$start.BAR` — not overridable from user config; `variables.conf`
re-sets it after any user assignment).
- [ ] **`theme.css` is dirty-prone on lw**: wallbash writes through the dots symlink on every theme change —
decide: untrack it like config.jsonc (rig imports the live generated file either way) or keep a pinned
fallback for non-HyDE hosts (fl). Check `git status` on lw after a theme switch.
- [ ] Tune `cava.width` per host if the bars don't span the screen (gui default 94; wm overrides to 218).
- [ ] Icon map on the **HyDE-managed** bar (if ever unmasked/used again): `modules/window.jsonc` carries the
same map; if titles lack icons there, `includes.json` overrides it and the def must move there.
- [ ] Upstream HyDE **deprecated the header/footer module fragments** (its `footer.jsonc` is now a `{}` stub;
padding defs move to `custom-module.jsonc`). Our old-style `modules/footer.jsonc` still works with the
current generator — re-check against upstream at the next HyDE update (only matters if the managed bar is revived).
## Hardware-gated (needs the physical box)
- [ ] **Bring `wm` onto current HyDE:** install HyDE framework (`~/HyDE/Scripts/install.sh`), `dotsync`, relogin,
`hyprctl configerrors`; watch wm-specific `nvidia.conf` / `monitors.conf` — monitors.conf carries a FIXME
(`eDP-1` is a laptop panel name on a desktop; check `hyprctl monitors` for the real outputs first).
Then the same one-time bar disable as lw (gui's exec-once launches the rig here too):
`systemctl --user stop hyde-<XDG_SESSION_DESKTOP>-bar.service` + `mask` (name via
`systemctl --user list-units 'hyde*'` if unsure).
- [ ] **`fl` → bare Hyprland: deferred to flip-time.** Not worth a partial `windowrulev2` conversion now — fl is
dormant KDE, and when it flips it needs the *full* treatment (HyDE framework sourcing + rules), done in-context
like lw's was. Its only deprecated syntax is `windowrulev2` (windowrules.conf ×67, userprefs.conf ×18).
## Small / whenever
- [ ] `git push origin --delete worktree-hyde-modernize` — fully merged into main; remote copy is stale.
- [ ] `reconcile-hyde.sh` SUBTREES = `hypr`+`waybar` only — add `rofi` **if** rofi ever becomes dots-tracked (not yet).
- [ ] Waybar add and fix all nerd font icons
- [ ] keybind initialization failed, $mainMod + /
- [x] ~~Make all .file -> dotfile, because Telescope search is ignoring them~~ — solved 2026-08-08
*without* renaming anything: repo-root `.ignore` un-hides dotdirs for rg/fd/telescope, and
`FZF_DEFAULT_COMMAND=fd` points fzf (whose own walker ignores `.ignore`) at fd.
- [ ] **pi-vim on the other hosts (lw/fl/wm):** the tracked `settings.json > packages` gets `pi install npm:pi-vim`
done, but the AUR pi build can't resolve its embedded `@earendil-works/*`, so the extension won't load until
the peer dep is installed by hand — `cd ~/.pi/agent/npm && fnm exec --using=22 -- npm install
@earendil-works/pi-coding-agent@$(pi --version)`. Full rationale in `common/.pi/CLAUDE.md` (Vim input editor).
- [x] ~~`git rm` the parked `vim-editor.ts.disabled`~~ — done 2026-08-09, pi-vim confirmed good in daily
use. Recover with `git show c6566af^:common/.pi/agent/extensions/vim-editor.ts` if ever needed.
## Back-ported from dots-wm (2026-08-08) — verify on lw
The wm migration surfaced bugs that were live in `.dots` (and so on lw). Fixes are ported;
these are the checks that were only ever reproduced on wm. Full rationale: dots-wm
`MIGRATION-TEST.md` "Back-port list".
- [ ] **lw: confirm the hypr fixes took.** `grep -cE 'globbing error|Error parsing gradient'
/run/user/1000/hypr/*/hyprland.log` (should be 0 — catches the `$ANIMATION_PATH` fix) and
`hyprctl getoption decoration:rounding` (`set: true`; `set: false` = nothing ever assigned it).
`hyprctl configerrors` is useless here — it returns empty for a missing `source =`, which is
what hid all of this.
- [x] ~~lw: retune hyprlock sizes~~ — done 2026-08-08 via a per-host hook:
`hyprlock.conf` sources `~/.config/hypr/hyprlock-host.conf`, shipped empty in `gui/` (so the
source always resolves — a missing target is a hard parse error, and for hyprlock that means
the lock screen fails) and overridden in `lw/` with the 1920x1080 set.
- [ ] **lw: check hyprlock on the built-in panel.** The 1080p sizes are for the externals;
`monitors.conf` makes `$mainScreen` (eDP-1) 1366x768 and hyprlock draws on every output, so
the clock reads ~18% of height there instead of ~13%. A 768-tuned set is in the comment at the
top of `lw/.config/hypr/hyprlock-host.conf` if the laptop panel is the one that matters.
- [ ] **wm: `cantarell-fonts` + `adobe-source-code-pro-fonts`** for hyprlock's
`$timeFontFamily`/`$fontFamily` (both OFL-1.1, both in `extra`). Installed on lw 2026-08-08;
wm needs them at migration time. A missing family degrades silently to a fallback whose
metrics are not what the layout offsets were tuned against — install *before* judging the
lock screen's spacing on a new host.
- [x] ~~lw: check the lock screen has a wallpaper~~ — confirmed 2026-08-08. It had been pointing at
`~/sync/Drive/pics/`, which does not exist on lw either; the in-repo `hypr/hyprlock/assets/`
fixed it, once `./install.sh` had actually linked them (a pull alone does not — new files).
- [ ] **wm's old-HyDE window** (decided 2026-08-08: `hypr/themes/{colors,theme,wallbash}.conf` are
NOT being added — wm's HyDE is updated right after this merge, which makes them obsolete).
The gap is the interval: if wm runs `~/.dots` while still on the *old* HyDE, that HyDE
hard-sources all three and Hyprland silently falls back to compositor defaults (border 1,
rounding 0, gaps_out 20, no blur) while `hyprctl configerrors` still reports clean. So update
wm's HyDE with/before the switch — or copy the three out of dots-wm into `wm/` as a stopgap.
- [ ] **Capture `.config/hyde/` before dots-wm is abandoned.** `config.toml` + `wallbash/`
(`always/{cava,chrome}.dcol`, `scripts/{cava,chrome,code}.sh`, `theme/code.dcol` — 8 files,
~2.5k lines) exist in dots-wm and in **no** package here. Not an intentional exclusion:
`.gitignore` only drops the generated `**/hyde/themes/`, and `reconcile-hyde.sh` SUBTREES
covers just hypr+waybar. Best captured *after* wm's HyDE update — its installer rewrites
`~/.config/hyde`, so taking it now banks soon-stale content. `gui/` is the natural home (the
wallbash templates theme the cava bar), but check lw for real files there first: a stow
conflict aborts the entire package (same failure as the claude/settings.json item).
- [x] ~~`~/.config/claude/settings.json` is a real file, not a stow link~~ — reconciled 2026-08-08.
Claude Code had replaced the symlink with a real file, so `./install.sh` aborted **all** of
`common` (gui still stowed), meaning no new file under `common/` could deploy on this host.
It had not actually lost keys — all 20 were present, the apparent loss was key *reordering*
from Claude Code rewriting the file. Only `model` differed, so the live value
(`claude-fable-5[1m]`) was written into the repo copy and the symlink restored;
`install.sh` is clean again. Watch for it recurring: anything that rewrites a stowed file
in place instead of through the link re-severs it.
- [ ] **Before making the repo public: confirm the hyprlock images' provenance.**
`gui/.config/hypr/hyprlock/assets/{background.jpg,logo.jpg}` came over from dots-wm with EXIF
stripped, so nothing in the files says where they're from. GPL-3 can't relicense someone
else's photo. Everything else is settled: HyDE-derived configs are GPL-3 like this repo,
`dark.tmTheme` is MIT with its header intact, and the fastfetch PNGs are third-party marks
used nominatively (see README "Third-party content and licensing").
+2 -2
View File
@@ -114,8 +114,8 @@ bindd = Control Alt, T, $d terminal emulator , exec, $TERMINAL
# bindd = Control Shift, Alt, T, $d terminal emulator , exec, tilix # launch tilix terminal emulator - using for ssh # bindd = Control Shift, Alt, T, $d terminal emulator , exec, tilix # launch tilix terminal emulator - using for ssh
bindd = $mainMod Control, T, $d terminal emulator, exec, tilix # launch tilix terminal emulator bindd = $mainMod Control, T, $d terminal emulator, exec, tilix # launch tilix terminal emulator
# bindd = $mainMod, R, $d pyradio, exec, $TERMINAL pyradio #radio # bindd = $mainMod, R, $d pyradio, exec, $TERMINAL pyradio #radio
bindd = $mainMod, I, $d wingman, exec, kitty --session ~/.config/kitty/c2.conf bindd = $mainMod, I, $d work, exec, kitty --session ~/.config/kitty/c2.conf
bindd = $mainMod, O, $d wingman, exec, kitty --session ~/.config/kitty/runners.conf bindd = $mainMod, O, $d work, exec, kitty --session ~/.config/kitty/runners.conf
bindd = $mainMod, R, $d pyradio, exec, kitty --session ~/.config/kitty/music.conf bindd = $mainMod, R, $d pyradio, exec, kitty --session ~/.config/kitty/music.conf
bindd = $mainMod, E, $d file explorer , exec, $EXPLORER bindd = $mainMod, E, $d file explorer , exec, $EXPLORER
bindd = $mainMod, C, $d neovim, exec, $TERMINAL nvim #editor bindd = $mainMod, C, $d neovim, exec, $TERMINAL nvim #editor
-14
View File
@@ -1,14 +0,0 @@
# run with `kitty --session ~/.config/kitty/c2.conf`
# create a new tab
new_tab c2
cd ~/projects/wingman/wm-clients/c2/c2-main/
launch --var window=first nvim
# open the session focused on nvim
focus
new_tab git
cd ~/projects/wingman/wm-clients/c2/c2-main/
launch --var window=second lazygit
-25
View File
@@ -1,25 +0,0 @@
# run with `kitty --session ~/.config/kitty/runners.conf`
##### TAB Logs #####
new_tab logs
layout splits
cd ~/projects/wingman/wm-clients/c2/c2-main/
# --hold keeps the window open if the process crashes
launch --var window=first --hold pnpm dev
launch --location=hsplit lazydocker
# resize_window wider 120
##### TAB Runners #####
new_tab runners
layout splits
launch --var window=first react-devtools
cd ~/software/wmclient/
launch --location=hsplit --hold ./wmsimulator.sh
resize_window taller 120
+5 -1
View File
@@ -1,2 +1,6 @@
## lw-specific bash extras (mirror of the fish llamaserver abbr in host.fish) ## lw-specific bash extras (mirror of the fish llamaserver abbr in host.fish)
alias llamaserver="nice -n 19 llama-server --host 0.0.0.0 --port 11343 --models-max 1 --models-preset ~/.config/llamacpp/config.ini"
# --host 127.0.0.1 deliberately: laptop roams onto untrusted wifi and the API has no key.
# --cors-origins localhost: llama.cpp PR 25655 recommendation for same-machine use — without it
# the default CORS reflects any Origin, letting a malicious page in the local browser call the API.
alias llamaserver="nice -n 19 llama-server --host 127.0.0.1 --port 11343 --cors-origins localhost --models-max 1 --models-preset ~/.config/llamacpp/config.ini"
-8
View File
@@ -1,8 +0,0 @@
## wm-specific bash extras (mirror of the Wingman work aliases in fish host.fish)
alias tilesrv="cd /home/coja/software/wmclient/ && ./martin ./mapfiles/data -W 4 --font ./mapfiles/fonts"
alias blocks="~/Documents/Blocks/LinuxNoEditor/Blocks.sh -windowed -RenderOffscreen"
alias cur="cd ~/projects/wingman/wm-clients/c2/c2-main"
alias c2m="cd ~/projects/wingman/wm-clients/c2/c2-main"
alias c2mw="cd ~/projects/wingman/wm-clients/c2/c2-main/.worktrees/"
alias c2b="cd ~/projects/wingman/wm-clients/c2/c2-building"
alias todo="cd ~/sync/notes/wm-client/ && nvim todo.md"
-22
View File
@@ -1,22 +0,0 @@
## wm (desktop workstation, 4K, NVIDIA) — Wingman work machine
# NVIDIA VA-API (hardware video acceleration)
set -gx LIBVA_DRIVER_NAME nvidia
# Toys built from local clones (only on this box)
alias matrix="~/projects/random-clones/matrix/matrix"
# Local llama.cpp
abbr llamacpp "~/projects/random-clones/llama.cpp/build/bin/llama-server --alias Qwen3-Coder-30B-Instruct-XXS --jinja --ctx-size 8192 --temp 1.0 --top-p 0.95 --min-p 0.01 --port 11343 -m ~/Documents/models/Qwen3-Coder-30B-A3B-Instruct-UD-IQ2_XXS.gguf"
# Wingman work (paths only exist on this box)
alias tilesrv="cd /home/coja/software/wmclient/ && ./martin ./mapfiles/data -W 4 --font ./mapfiles/fonts"
alias blocks="~/Documents/Blocks/LinuxNoEditor/Blocks.sh -windowed -RenderOffscreen"
alias cur="cd ~/projects/wingman/wm-clients/c2/c2-main"
alias c2m="cd ~/projects/wingman/wm-clients/c2/c2-main"
alias c2mw="cd ~/projects/wingman/wm-clients/c2/c2-main/.worktrees/"
alias c2b="cd ~/projects/wingman/wm-clients/c2/c2-building"
# Notes live under ~/sync/notes on this box, not ~/sync/PersonalNotes — re-abbr todo
# (host.fish is sourced after config.fish, so this wins over common's definition).
abbr todo "cd ~/sync/notes/wm-client/ && nvim todo.md"