Detect the host's GPU vendor(s) via PCI sysfs (no lspci dependency) and
append vendor-matched encoding-package steps to the install plan:
Intel -> intel-media-driver + vpl-gpu-rt + intel-compute-runtime,
AMD -> mesa + libva-mesa-driver. NVIDIA NVENC ships with the driver's
own userspace, so nothing is added when a driver is loaded, and a
warning step (never an automatic kernel-driver install) when it isn't.
Without these packages Jellyfin installs fine and direct-plays fine,
but any client that needs a transcode fails instantly with the opaque
"FFmpeg exited with code 251" / "fatal playback error" pair.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Every fstab writer deduped on the exact line, so a stale entry for the
same mount point (e.g. the UUID of a pool that was since recreated)
survived forever. systemd-fstab-generator only creates one mount unit
per mount point and the FIRST line wins — if that line is stale, the
pool never mounts at boot, shows up as detached, and the user has to
re-import it every reboot (manual `mount -a` walks fstab sequentially,
so the import itself appeared to work).
All four writers (add-drive, create-pool, import-pool, jellyfin bind
mounts) now remove any existing entry for the target mount point
before appending the fresh line — idempotent and self-healing.
Also add a --version flag, stamped at build time via
-ldflags "-X main.version=...".
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Three-tab Bubble Tea TUI (Setup / Manage / Monitor) for setting up and
running a headless Jellyfin server over SSH:
- Setup: install/uninstall Jellyfin, add media drives (single or btrfs
RAID pool), import an existing detached btrfs pool non-destructively,
firewall, move Jellyfin storage onto a media drive
- Boot-drive-safe drive classifier (walks LUKS/LVM/RAID to the physical
disk; never offers a disk hosting /, /boot or swap)
- Keep-existing-filesystem path previews on-disk content, skips starter
folders when content exists, and grants Jellyfin recursive read access
- Manage: copy from external drives, mount/eject, rename/delete
- Monitor: per-core CPU, load/mem/uptime, btrfs error counters, SMART
Single static binary; installs to /usr/local/bin so sudo can find it.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>