[Sync] Lua Hyprland chain, licence cleanup

This commit is contained in:
Coja committed 2026-11-09 18:25:35 +01:00
1 parent 93b4f695ce
commit 47166d877f
183 files changed
+5618 -5839

No files matched your search

+62 -33
View File
@@ -13,7 +13,7 @@ common/ # shared everywhere (mirrors $HOME): fish, nvim, bat, btop, tmux, pi,
gui/ # GUI configs shared by graphical hosts: hypr, waybar, kitty, alacritty, mpv, zellij
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
fl/ # KDE Plasma box (no Hyprland session): llamacpp, whisper, evremap
bin/ # tooling (not a stow package): install.sh companions
install.sh
```
@@ -22,6 +22,8 @@ A **headless** (terminal-only) machine has no overlay package — it runs `commo
headless with `touch ~/.config/dots-headless` (a machine-local, hostname-independent marker); it then
skips `gui` too, so the same terminal-only setup replicates across any number of machines. In other
words `common` *is* the headless baseline; `gui` and the host packages layer graphical machines on top.
Run it as a bare `./install.sh` — never `./install.sh common` (`common`/`gui` are layers, not hosts,
and install.sh refuses them).
### How it deploys
@@ -68,9 +70,8 @@ cd ~/.dots
`./install.sh -h` lists all options: `-n` dry-run, `-a` adopt (first run), `-D` unstow (revert),
`-h` help. GUI hosts also need **HyDE installed** first — see *HyDE dependency* below.
Once per machine afterwards: `bat cache --build` (registers the repo's custom bat themes —
without it every `bat` run warns `Unknown theme 'onedark'`), and `:Lazy restore` inside nvim
(`restore` obeys the shared `lazy-lock.json` pins; `sync`/`update` would rewrite them).
Once per machine afterwards: `:Lazy restore` inside nvim (`restore` obeys the shared
`lazy-lock.json` pins; `sync`/`update` would rewrite them).
nvim's treesitter (`main` branch) builds parsers via the `tree-sitter` CLI — `pacman -S
tree-sitter-cli` first, or `:TSInstallAll` fails with `ENOENT ... 'tree-sitter'`.
@@ -125,32 +126,40 @@ Because configs are symlinks into the repo, **you almost never run `install.sh`
| Difference | Mechanism |
|---|---|
| Monitors | `<h>/.config/hypr/monitors.conf` (sourced by the shared `hyprland.conf`) |
| NVIDIA | `wm/.config/hypr/nvidia.conf`, pulled in by wm's `host.conf` (fl/lw have no NVIDIA) |
| Monitors | `<h>/.config/hypr/host.lua` (`hl.monitor` + workspace pins; loaded by the shared `hyprland.lua`) |
| NVIDIA | the NVIDIA block in `wm/.config/hypr/host.lua` (lw has no NVIDIA) |
| Shell aliases | shared `config.fish` sources `~/.config/fish/host.fish` (per host) |
| Bash extras | shared `.bashrc` sources `~/.bashrc.host` (optional, per host) |
| fl's Hyprland | overrides ~9 hypr files (`hyprland.conf`, keybinds, windowrules, theme colors, monitors); inherits the rest from `gui` |
| Unique apps | in the owning host overlay (fl: llamacpp/evremap; lw: xremap) |
`aichat`, `pi`, and `opencode` share one config in `common` (LAN-first, with the cloud provider also
listed so any host can switch). `lw` carries a host overlay of all three that adds its local CPU
llama.cpp models — mirror edits between the common and `lw` copies. The opencode tree is documented
listed so any host can switch). `lw` and `wm` each carry a host overlay of all three that adds their
own llama.cpp models (lw: CPU; wm: the GTX 1080 Ti router, plus the duskadiy default) — mirror
edits between the common copy and both overlays. The opencode tree is documented
in `common/.config/opencode/README.md`.
## HyDE dependency (important for GUI hosts)
The Hyprland config is [HyDE](https://github.com/HyDE-Project/HyDE)-based. `gui/.config/hypr/*` is
your customization layer, but it **sources HyDE's framework**:
`source = ~/.local/share/hyde/hyprland.conf` — which defines `$mainMod` and other variables. So a GUI
host must have **HyDE installed**, or Hyprland fails to start (`source globbing error` +
`invalid mod $mainMod`).
The Hyprland config is [HyDE](https://github.com/HyDE-Project/HyDE)-based, since 2026-08-21 through
HyDE 26.x's **Lua chain** (live on wm since then and on lw since 2026-11; merged into `main`
2026-11-09 — see `LUA-PORT.md`). The repo pins `HYPRLAND_CONFIG` at
`~/.local/share/hypr/hyde.lua` in two files — `gui/.config/fish/conf.d/00-hypr-config.fish`
(SDDM/fish session path) and `gui/.config/uwsm/env-hyprland.d/10-dots.sh` (uwsm path) — and hyde.lua
loads HyDE's `lua/` modules, then the repo's override `gui/.config/hypr/hyprland.lua`, which pulls in
`dots_rules.lua` + `dots_binds.lua` (split out of it) and the per-host `host.lua`. So a GUI host must have **HyDE installed** — it ships `hyde.lua` and the
modules, both overwritten on HyDE updates; the dots layer lives only in `~/.config/hypr/*.lua`, which
survives them. `LUA-PORT.md` has the full map, flip recipe and rollback.
That file used to be generated-and-untracked, but **HyDE 26.x deploys neither it nor `hyde.conf`**,
so since the 2026-08-14 audit both are **tracked pins** in `gui/.local/share/hyde/` — the one
deliberate exception to the generated-files-are-never-tracked rule below, interim until the Lua port.
After pulling that audit, a machine must run **`./bin/hyde-materialize.sh` before `./install.sh`**:
the newly-untracked files leave dangling stow symlinks otherwise, and hypr/hyprlock treat a missing
`source =` as a hard parse error.
The legacy hyprlang chain (`gui/.config/hypr/*.conf`, plus the two `~/.local/share/hyde/
{hyprland,hyde}.conf` framework copies HyDE 26.x stopped shipping) was **retired 2026-09-10**
(`LUA-PORT.md` step 8) once the Lua soak closed — nothing reads a `.conf` in Lua mode. One line
survives: `gui/.local/share/hyde/hyde.conf` keeps `$default.FONT`, the fallback HyDE's rofi/menu
scripts resolve FONT through (`get_hyprConf`) when the theme's `hypr.theme` names no font. Rolling
back to hyprlang now means restoring those files from history (`git restore --source=bddbbf3 -- gui/.config/hypr wm/.config/hypr lw/.config/hypr gui/.local/share/hyde`), `./install.sh <host>`,
repointing the two pins and relogging; d851213 is the last hyprlang `main` (the port merged
2026-11-09). After pulling the 2026-08-14 audit, a machine must run
**`./bin/hyde-materialize.sh` before `./install.sh`**: the newly-untracked files leave dangling stow
symlinks otherwise, and hypr/hyprlock treat a missing `source =` as a hard parse error.
- Install/update HyDE with its own installer (`~/HyDE/Scripts/install.sh`); it also pulls the
required apps (`xdg-desktop-portal-hyprland`, `xdg-desktop-portal-gtk`, `hyprpolkitagent`).
@@ -172,8 +181,8 @@ track neither. HyDE-managed customization goes via:
**The custom cava rig is NOT HyDE-managed**: `layouts/custom.jsonc` + `layouts/custom.css` form a
self-contained two-bar config run by `wbar` (`gui/.local/bin/wbar`) as the supervised systemd
user unit `dots-waybar.service` (`Restart=always` — waybar 0.15.0 dies on every DP-2 link
drop/return, and as a bare process nothing relaunched it). The `exec-once` in `userprefs.conf`,
the Ctrl+Alt+W / Super+Shift+R binds and the `wbar` command all go through it; **never `killall
drop/return, and as a bare process nothing relaunched it). `hc.start.bar` in `hyprland.lua`, the
Ctrl+Alt+W / Super+Shift+R binds and the `wbar` command all go through it; **never `killall
waybar`** — systemd brings it back in seconds and a raw relaunch beside it means two bars
(`wbar toggle|restart|reload|stop`). **Never route it through `hyde-shell waybar --set`** — waybar.py would clobber the repo's files as above. HyDE only reads
from `layouts/`, which is what makes them safe to track. On a rig host, HyDE's own bar must be
@@ -181,10 +190,10 @@ disabled once, or **two bars appear at every login** — and the launcher differ
- current HyDE: systemd user unit `hyde-<XDG_SESSION_DESKTOP>-bar.service` (auto-restarting) —
`systemctl --user stop <unit>; systemctl --user mask <unit>`.
- older (pre-unit) HyDE, e.g. wm's: `exec-once = $start.BAR` in HyDE's generated `hyprland.conf`
— neutralized by `$start.BAR=` in `gui/.config/hypr/hyde.conf` (empty = unset; hyde.conf is
sourced before that exec-once). Current HyDE's `variables.conf` re-sets `$start.BAR`, so that
line stops working after an update — see HYDE-UPDATE.md step 4.
- older (pre-unit) HyDE: `exec-once = $start.BAR` in HyDE's generated `hyprland.conf` — the
hyprlang-era dots blanked it with `$start.BAR=` in `gui/.config/hypr/hyde.conf`; that file went
with the chain (LUA-PORT.md step 8), and under Lua the lever is `hc.start.bar` in
`hyprland.lua`, which launches the rig itself — see HYDE-UPDATE.md step 4.
Note: the Arch `waybar` build has **no native `cava`** module — the rig uses the script module
`custom/cava` running `cava-waybar.sh` (self-contained, no HyDE dependency).
@@ -225,11 +234,31 @@ The repo is GPL-3.0 (`LICENSE`). What that does and doesn't cover:
[HyDE](https://github.com/HyDE-Project/HyDE)** (and, further back, legacy Hyprdots). HyDE is
itself GPL-3.0, so the derivation and this repo's licence agree — no conflict, and the
Hyprdots-era ASCII banners in those files are left in place as attribution.
- **`common/.config/aichat/dark.tmTheme`** is *One Half Dark* by Son A. Pham, **MIT**. The
licence header at the top of that file is the attribution — don't strip it.
- **Colour themes**: the repo ships no third-party theme files, so it needs no notices file.
Each app gets its theme from somewhere else:
- **kitty**: HyDE renders `theme.conf` from the current HyDE theme. `kitty.conf` adds only
this repo's own background, foreground and tab bar.
- **aichat**: *One Half Dark* (MIT, by Son A. Pham) is downloaded from upstream at install
time by `bin/dots-themes-fetch.sh`, pinned by commit and checksum.
- **cava**: it writes its own shaders and themes.
- **zellij and bat**: their gruvbox-dark and OneHalfDark themes are built in.
The pi, opencode and alacritty themes are the repo's own files. They hold colour values from
the Catppuccin Mocha and SynthWave '84 palettes (both MIT, by Catppuccin and Robb Owen),
mapped onto each app's keys. Credit, gladly given: a set of colour values isn't a copy of
either licensed theme. Keep it that way: a theme file copied in brings its licence notice
with it.
- **`gui/.local/share/icons/dots-icons/`** ships only its `index.theme`. Its tray/status icons
are symlinks into each host's own *Tela-circle-dracula* (by vinceliuice, installed by HyDE),
made at install time by `bin/dots-icons-link.sh`. Tela-circle publishes no licence, so the
repo doesn't redistribute its SVGs.
- **`common/.config/fastfetch/pngs/`** holds project and distro marks (Arch, the Open Source
Initiative and Open Source Hardware logos, …). Trademarks aren't relicensable, so GPL-3 does
not extend to them; they are bundled as nominative use, the way most dotfiles repos do.
- **`gui/.config/hypr/hyprlock/assets/`** — the lock screen background and logo. EXIF is
stripped, so the files carry no provenance; confirm these are yours to redistribute before
publishing, or swap them for something you know the origin of.
Initiative and Open Source Hardware logos). Trademarks aren't relicensable, so GPL-3 does
not extend to them; they are bundled as nominative use, the way most dotfiles repos do. The
dmz.rs rabbit (`dmz-rabbit*.png`) and the decentrala.org network logo (`network*.png`) are
the community's own marks, used with permission. `neonom.png` is the repo owner's own render
of the Om glyph, offered as **CC0**.
- **`gui/.config/hypr/hyprlock/assets/`** — the lock screen background and logo are AI-generated
by the repo owner (February 2026). They sit outside the GPL-3 grant and are offered as **CC0**.
The keyhole in `background.jpg` is an AI-altered rendition of the Open Source Initiative mark,
used purely decoratively; no affiliation with or endorsement by the OSI is implied.