6.1 KiB
Development setup
What the 29 projects in ~/Documents/Development need on the new machine, mapped against what
the image already provides. Scanned 2026-07 from each project's manifests, Dockerfiles, and
setup scripts. Run scripts/dev-setup.sh after first boot to install the
toolchain layer in one shot.
Already in the image — install nothing
| Need | Provided by | Used by |
|---|---|---|
| Docker CE + compose, Podman, skopeo | Bazzite DX base | requester, serverTransfer, ispy, keyWord, encoderPro, movieScanner, kidstube, Docker-Registry-Browser, smartSpeaker… |
| NVIDIA driver (610+ open) + container toolkit + CDI | base (nvidia image) | AIVoice, ispy, keyWord, encoderPro, smartSpeaker whisper, superBossMonster art pipeline |
| qemu/KVM + virt tooling | DX base | BC250 VM testing |
| android-tools (adb) | DX base | denon-bluetooth btsnoop captures |
| Steam + Proton | Bazzite base | BG4_UltraWide_fix |
| VS Code, git, Homebrew, just | DX base | everything |
| BlueZ/bluetoothd, rsync, openssh | Fedora base | denon-bluetooth, serverTransfer |
| Godot (current stable), Android Studio | first-boot Flatpaks | superBossMonster/FFCardGame, native-angular |
AIVoice's SETUP.md warning about snap Docker / Docker Desktop is moot here: Bazzite DX ships
native docker-ce, which is exactly what it wants. Its
nvidia-ctk runtime configure --runtime=docker step is the same one in the README's GPU
section.
Toolchains — mise (all per-version needs found in the scan)
No project commits .nvmrc/.python-version/.tool-versions, so versions below come from
Dockerfiles and build configs. dev-setup.sh installs mise and these versions:
- Node 22 global default (requester, movieScanner); projects also reference 18
(Docker-Registry-Browser, movieMetaTagger) and 20 (FFCardGame server, kidstube) — installed
side-by-side, pin per-project with
mise use node@18in the project dir (writesmise.toml— worth committing so this guesswork ends). - Python 3.12 (serverTransfer, movieMetaTagger, movieScanner, nameFixer4000, BG4 tools) and 3.11 floor (FRScanner). Fedora 44's system python is newer — don't rely on it for these.
- JDK 21 (villager-logic-fix, Minecraft-Village-Warriors release target), JDK 17 (native-angular android-host), JDK 25 (Minecraft-Village-Warriors toolchain — Gradle can also auto-provision it). Gradle itself always via each repo's wrapper.
- .NET 10 SDK (requester; also rebuilds the BG4 BepInEx plugin).
- Go and Rust — present on the old machine (
~/go,~/.cargo); no scanned project pins a version, so latest.
Native builds — use a distrobox, not the host
Compilers and C library headers don't belong on the atomic host. One Fedora distrobox covers every native-build need the scan found:
distrobox create dev --image registry.fedoraproject.org/fedora:44
distrobox enter dev
sudo dnf install -y gcc gcc-c++ make cmake pkgconf python3-devel \
gtk4-devel \ # native-angular linux-host (CMake + GTK4)
zbar \ # DVDPhotoMatic (pyzbar)
libsndfile mediainfo-libs \ # FRScanner audio / movieMetaTagger pymediainfo
rtl-sdr rtl-sdr-devel \ # FRScanner RTL-SDR + Cython builds
mkvtoolnix ffmpeg-free \ # movieMetaTagger mkvpropedit; ffmpeg fallback
python3-tkinter python3-dbus \ # denon-bluetooth GUI
flashrom # BC250 BIOS flashing (CH347 over USB)
Native node modules (kidstube's better-sqlite3, FFCardGame's bcrypt) build fine inside the distrobox too — or in their Docker builds, which is how they ship anyway.
Host-level odds and ends
- RTL-SDR udev rules (FRScanner): the dongle permissions must live on the host —
dev-setup.shwrites/etc/udev/rules.d/20-rtlsdr.rules(/etcis mutable and survives updates). - ffmpeg on the host (audioSticher, AIVoice host venv, encoderPro host runs): Bazzite
ships ffmpeg — verify with
ffmpeg -version; if a project needs full codecs beyond it,brew install ffmpegwins on PATH. - Pinned Godot binaries: superBossMonster hardcodes
~/godot/Godot_v4.3-stable_linux.x86_64and FFCardGame ships its own 4.2 binary. Keep the~/godot/directory from the old machine (plus export templates in~/.local/share/godot/); the Flatpak is only "current stable". - gh CLI:
brew install gh(indev-setup.sh) — used across projects. - BlueBuild CLI (BC250 and this repo): the installer one-liner in the README.
- API keys: ANTHROPIC_API_KEY (FFCardGame tools, DVDPhotoMatic), TMDB/OMDB
(movieScanner, nameFixer4000, DVDPhotoMatic), YouTube Data v3 (kidstube) — carried in
per-project
.envfiles; bring them over with your home directory.
Per-project cheat sheet
| Project | Needs beyond the image |
|---|---|
| AIVoice | py3.12 venv (mise), ffmpeg, GPU containers (covered) |
| AIVoices_HA, personal-landing, cardscraper, audioSticher, teamsTrick | nothing / stdlib python |
| BC250 | BlueBuild CLI, flashrom (distrobox) |
| BG4_UltraWide_fix | .NET 10, py3.12, Steam/Proton (covered) |
| denon-bluetooth | distrobox tkinter+dbus, adb (covered) |
| Docker-Registry-Browser | Node 18 |
| DVDPhotoMatic | finished project — py3.12, zbar (distrobox), webcam if ever revived; OpenSCAD flatpak for the jig files if needed |
| encoderPro, ispy, keyWord, movieScanner, nameFixer4000, serverTransfer | Docker (+GPU) only |
| FFCardGame | Godot 4.2 binary, Node 20, python+anthropic |
| FRScanner | py3.11+, rtl-sdr distrobox + host udev rules |
| kidstube | Node 20 (+distrobox for native build outside Docker) |
| Minecraft mods (×2) | JDK 21/25 via mise |
| movieMetaTagger | py3.12, Node 18, mkvtoolnix/mediainfo (distrobox) |
| native-angular | Node 20+, JDK 17, Android Studio (flatpak), GTK4 distrobox |
| requester | .NET 10, Node 22, postgres via compose |
| smartSpeaker | Docker (covered); Pi hardware is remote |
| superBossMonster | Godot 4.3 binary + templates, ComfyUI in GPU container |
| teamsTrick | X11 session note: KDE on Bazzite defaults to Wayland — run it in an X11 session or expect XTest to fail |