diff --git a/HYDE-UPDATE.md b/HYDE-UPDATE.md deleted file mode 100644 index 1062ab0..0000000 --- a/HYDE-UPDATE.md +++ /dev/null @@ -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 ` 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 # report only, safe - ./bin/reconcile-hyde.sh -i # interactive: keep/take/merge per file - # or: ./bin/reconcile-hyde.sh --relink # 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 ` 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. diff --git a/README.md b/README.md index 31eb5ab..88dbe7c 100644 --- a/README.md +++ b/README.md @@ -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, ... 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 fl/ # KDE Plasma box: a few Hyprland overrides + llamacpp, evremap bin/ # tooling (not a stow package): install.sh companions diff --git a/ToDo.md b/ToDo.md deleted file mode 100644 index 8f7c33b..0000000 --- a/ToDo.md +++ /dev/null @@ -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--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--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"). - diff --git a/gui/.config/hypr/keybindings.conf b/gui/.config/hypr/keybindings.conf index 66cbdd8..e2a6207 100644 --- a/gui/.config/hypr/keybindings.conf +++ b/gui/.config/hypr/keybindings.conf @@ -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 = $mainMod Control, T, $d terminal emulator, exec, tilix # launch tilix terminal emulator # bindd = $mainMod, R, $d pyradio, exec, $TERMINAL pyradio #radio -bindd = $mainMod, I, $d wingman, exec, kitty --session ~/.config/kitty/c2.conf -bindd = $mainMod, O, $d wingman, exec, kitty --session ~/.config/kitty/runners.conf +bindd = $mainMod, I, $d work, exec, kitty --session ~/.config/kitty/c2.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, E, $d file explorer , exec, $EXPLORER bindd = $mainMod, C, $d neovim, exec, $TERMINAL nvim #editor diff --git a/gui/.config/kitty/c2.conf b/gui/.config/kitty/c2.conf deleted file mode 100644 index 5553cdc..0000000 --- a/gui/.config/kitty/c2.conf +++ /dev/null @@ -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 diff --git a/gui/.config/kitty/runners.conf b/gui/.config/kitty/runners.conf deleted file mode 100644 index 7cc0036..0000000 --- a/gui/.config/kitty/runners.conf +++ /dev/null @@ -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 diff --git a/lw/.bashrc.host b/lw/.bashrc.host index 1f02ff3..cab6324 100644 --- a/lw/.bashrc.host +++ b/lw/.bashrc.host @@ -1,2 +1,6 @@ ## 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" diff --git a/wm/.bashrc.host b/wm/.bashrc.host deleted file mode 100644 index c12c258..0000000 --- a/wm/.bashrc.host +++ /dev/null @@ -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" diff --git a/wm/.config/fish/host.fish b/wm/.config/fish/host.fish deleted file mode 100644 index 8245c73..0000000 --- a/wm/.config/fish/host.fish +++ /dev/null @@ -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"