# Install on a Hermes box ## 1. Clone ```sh git clone https://github.com//print-buddy.git ~/print-buddy cd ~/print-buddy python3 -m pip install -r requirements-test.txt ``` Needs Python 3.11+, Hermes (`~/.hermes/hermes-agent`), and OrcaSlicer as a Flatpak. Stock Flashforge IFS occupancy is read from `/detail` and is not verified on a live printer. ## 2. Settings: YAML preferred, TOML supported during migration Defaults live in `config/home.yaml`. Put machine-specific overrides in the gitignored `config/local.yaml`; existing `config/home.toml` and `config/local.toml` files remain supported. YAML takes precedence when both formats are present. See [the configuration guide](CONFIGURATION-YAML.md) for precedence, validation and migration details. - `services.moonraker_url` and `services.spoolman_url` - `paths.hermes_home`, `archive`, `records_vault`, `cache` and `hermes_bin` - `printer.model` and supported printer-specific overrides ## 3. Overlay: `config/overlay/` (gitignored) Your private profile files. Each is copied over the profile at the same relative path: `SOUL.md`, `MEMORY.md`, `config.yaml`, `.env`, and `systemd/.service.d/*.conf`. Without an overlay you get the generic templates in `hermes/profile/`. Fill template values from the environment on first install: `LLM_PROVIDER LLM_MODEL LLM_BASE_URL TIMEZONE DISCORD_CHANNEL_ID DISPLAY_NAME`. ## 4. Install ```sh scripts/install-hermes.sh --dry-run # show what would happen scripts/install-hermes.sh systemctl --user enable --now hermes-3dprinting-moonraker-listener.service ``` Options: `--hermes-home DIR`, `--python PATH`, env `SYSTEMD_USER_DIR`. It symlinks the skills, `print-feedback` plugin and docs into the profile, renders templates only where the target is missing, applies the overlay, and installs the systemd user units. It also writes a `print_buddy.pth` into the Hermes venv's site-packages so `python -m print_buddy...` works from any directory, and copies old `~/.print_bitch_*.json` (to the `print_buddy_*` names) and `~/.moonraker_discord_announcements.json` state files into `/state/` when the new copy is missing. An old private `scripts/` folder in the profile is moved aside. Anything replaced is moved to `/.install-backups/