Files
main-desktop/DEVELOPMENT.md
T
2026-07-30 09:54:44 -04:00

6.1 KiB
Raw Blame History

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@18 in the project dir (writes mise.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 hostdev-setup.sh writes /etc/udev/rules.d/20-rtlsdr.rules (/etc is 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 ffmpeg wins on PATH.
  • Pinned Godot binaries: superBossMonster hardcodes ~/godot/Godot_v4.3-stable_linux.x86_64 and 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 (in dev-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 .env files; 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