Files
main-desktop/DEVELOPMENT.md
T

104 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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](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), OpenSCAD, Android Studio | first-boot Flatpaks | superBossMonster/FFCardGame, DVDPhotoMatic jigs, 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:
```bash
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.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 | py3.12, zbar (distrobox), OpenSCAD (flatpak), webcam |
| 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 |