[Sync] adopt unified stow layout from the private repo

Mirrors the private dots tree at 900bdda: one shared base plus per-host
overlays, replacing the old flat .config/ layout (last synced 2026-06-28).

- packages: common/ gui/ wm/ lw/ fl/ + install.sh and bin/ tooling (dotsync,
  reconcile-hyde.sh)
- new README (layout, deploy order, HyDE dependency), plus ToDo.md and
  HYDE-UPDATE.md
- current HyDE waybar rig (layouts/, cava), pi agent extensions, claude/
  config, tmux, presenterm, aichat roles
- drops stale duplicates and generated cruft that should never have been
  tracked: the second top-level .pi/ copy, btop.log, zellij config.kdl.bak,
  fish_variables, nvim codecompanion.lua
- .pi/agent/auth.json is gitignored now; auth.json.example ships instead
- fl/ and wm/ hypr themes/ stay untracked (HyDE-generated per machine, per
  the root .gitignore)
This commit is contained in:
coja
2026-08-12 22:50:18 +02:00
parent f62cb40499
commit a700e23e0a
318 changed files with 12564 additions and 10772 deletions
+119
View File
@@ -0,0 +1,119 @@
# 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").