# Development and build notes ## Local development Mudmouth requires Rust stable. On NixOS, the included shell also provides the ALSA development metadata used by the Linux audio backend: ```bash nix-shell ``` Run the normal validation suite before submitting a change: ```bash cargo fmt --check cargo clippy --all-targets -- -D warnings cargo test cargo build --release ``` The parser tests cover the observed log formats, including NPC dialogue, channel-chat exclusion, zone events, normalization, persistent/random speaker voice policies, log truncation, and first-run log discovery. ## Running locally Start the local Kokoro FastAPI service when necessary, then pass an EverQuest log directly: ```bash doas systemctl start podman-kokoro-fastapi.service cargo run --release -- --log "$HOME/Games/EverQuestLegends/Logs/eqlog_Pleb_oggok.txt" ``` Starting without a log path opens first-time setup. Mudmouth scans common Steam and Daybreak install folders for `eqlog_*.txt` files and lets you choose a character; if it finds none, enter the EverQuest game directory. Use `[r]` to rescan after enabling `/log on` in EverQuest. You can also change the log path and Kokoro endpoint from **Settings**: ```bash cargo run --release cargo run --release -- --kokoro-url http://127.0.0.1:8880 ``` ## Release builds Build Linux and Windows from an x86_64 Linux builder with `release.nix`. Build macOS on a native x86_64 macOS runner, where Apple's SDK is available. The CI workflow performs these native builds on every push and retains their binaries as build artifacts. Package the three binaries with: ```bash nix-build release.nix -A linux -o result-linux nix-build release.nix -A windows -o result-windows # On x86_64 macOS: nix-build release.nix -A macos -o result-macos ./scripts/package-release.sh \ --linux result-linux/bin/mudmouth \ --macos result-macos/bin/mudmouth \ --windows result-windows/bin/mudmouth.exe ``` The packager writes platform-qualified archives and `SHA256SUMS.txt` to `dist/`. `scripts/publish-release.sh` uploads those exact assets as a Gitea pre-release after the worktree is committed and clean.