Files
dots/ToDo.md
T
coja a700e23e0a [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)
2026-08-12 22:50:18 +02:00

9.7 KiB
Raw Blame History

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/cavahyde-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 + /
  • 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).
  • 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.
  • 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.
  • 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).
  • ~/.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").