[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
+48
View File
@@ -0,0 +1,48 @@
[Unit]
Description=whisper.cpp STT server "%i" (CPU-only) — OpenAI-compatible /v1/audio/transcriptions
Documentation=file:///home/anon/.config/whisper/README.md
After=network-online.target
Wants=network-online.target
[Service]
User=anon
Group=anon
WorkingDirectory=/
# TEMPLATE UNIT — one file, N instances. `systemctl start whisper@small` reads its model/port/language
# from ~/.config/whisper/small.env. Deliberately not N copies of this unit: the --tmp-dir bug below had
# to be found once and fixed once, and that only holds if there is exactly one ExecStart in the repo.
EnvironmentFile=/home/anon/.config/whisper/%i.env
# whisper-server's --tmp-dir defaults to "." — with WorkingDirectory=/ that means it tries to write
# uploads and ffmpeg output into the filesystem root, and every request dies with
# {"error":"FFmpeg conversion failed."} (yes, even plain wav: --convert pipes everything to ffmpeg)
# RuntimeDirectory= creates /run/whisper-<instance>, owned by this user, wiped on stop. Per-instance so
# two servers can never collide on a temp filename.
RuntimeDirectory=whisper-%i
RuntimeDirectoryMode=0700
#
# ⚠⚠ --no-gpu IS LOAD-BEARING. The GPU on this box drives the display AND holds a 13-15 GB chat model;
# ROCm does not OOM cleanly, it spills to GTT and freezes the whole PC. Whisper is CPU-only BY
# DESIGN (same rule as the Qwen3-Embedding preset): 0 VRAM means it can never stack into an
# overcommit, and it never evicts / gets evicted by the router. Do not remove.
# --convert shells out to ffmpeg (webm/opus/ogg -> 16 kHz wav). This is the whole reason the Open WebUI
# mic button works — the browser records opus, whisper.cpp reads wav.
# --inference-path puts the route exactly where OWUI posts (--request-path defaults to empty), so a
# client's base URL is http://192.168.0.204:<port>/v1 .
ExecStart=/usr/bin/whisper-server \
--model ${WHISPER_MODEL} \
--host 0.0.0.0 --port ${WHISPER_PORT} \
--inference-path /v1/audio/transcriptions \
--convert \
--tmp-dir /run/whisper-%i \
--no-gpu \
--threads 6 \
--language ${WHISPER_LANG}
Restart=always
RestartSec=2
# Yield to the llama.cpp router: its CPU-offloaded MoE experts (n-cpu-moe) want the same 6 cores.
Nice=5
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target