#!/bin/bash # Bootstrap a fresh clone of this repo so ba_dailies.sh can actually run. # # Run this ON nik-gpu, from the repo root (e.g. after `git clone` there) -- # not from macOS, since it installs into nik-gpu-local paths. # # It does NOT touch the game or take any screenshots; it only installs the # venv (host-level, genuinely outside the repo -- ~/.venvs/ba-auto-daily/) # and tab-completion. The runtime runs directly out of this checkout (see # CLAUDE.md's "Deployment model") -- there is no separate copy step for # ba_dailies.sh/ba_daily.py/ba_auto/assets, so re-running this after a # `git pull`/rsync can't drift out of sync with the code the way the old # copy-to-$HOME model could. set -e VENV_DIR="$HOME/.venvs/ba-auto-daily" echo "== Checking host tools ==" missing=0 for cmd in xdotool scrot; do if ! command -v "$cmd" >/dev/null 2>&1; then echo "MISSING: $cmd (install with your package manager, e.g. sudo apt install $cmd)" missing=1 fi done if [ "$missing" = 1 ]; then echo "Install the missing tool(s) above, then re-run this script." exit 1 fi echo "xdotool, scrot: OK" if ! command -v tesseract >/dev/null 2>&1; then echo "MISSING: tesseract (OCR engine binary -- e.g. sudo apt install tesseract-ocr)" echo "story_sweep's region/stage-label OCR (see CLAUDE.md \"OCR policy\") needs this." echo "This requires a password-interactive sudo, so it isn't installed for you here --" echo "install it yourself, then re-run this script." missing=1 fi if [ "$missing" = 1 ]; then exit 1 fi echo "tesseract: OK" if command -v tesseract >/dev/null 2>&1; then if tesseract --list-langs 2>/dev/null | grep -qx jpn; then echo "tesseract jpn (Japanese OCR) language pack: OK" else echo "MISSING: tesseract jpn language pack -- install with: sudo apt-get install -y tesseract-ocr-jpn" echo "event_sweep.py's finished-event-page text detection (_is_finished_event_page," echo "see config.py's EVENT_FINISHED_TEXT_RECT comment) needs this -- every other" echo "task's OCR only needs the base \"eng\" data already checked above, so this is" echo "not a hard requirement for the rest of the project. This also requires" echo "password-interactive sudo, so it isn't installed for you here -- install it" echo "yourself if you plan to run event_sweep, then re-run this script." fi fi echo "== Setting up Python venv at $VENV_DIR ==" if [ ! -x "$VENV_DIR/bin/python3" ]; then python3 -m venv "$VENV_DIR" fi "$VENV_DIR/bin/pip" install --quiet --upgrade pip "$VENV_DIR/bin/pip" install --quiet opencv-python-headless numpy pytesseract "$VENV_DIR/bin/python3" -c "import cv2, numpy; print('opencv', cv2.__version__, '/ numpy', numpy.__version__)" "$VENV_DIR/bin/python3" -c "import pytesseract; print('pytesseract', pytesseract.get_tesseract_version())" chmod +x ba_dailies.sh ba_cron_run.sh echo "== Installing tab completion ==" REPO_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" COMPLETION_LINE="source \"$REPO_DIR/completions/ba_dailies.bash\"" if [ -f "$HOME/.bashrc" ] && ! grep -qF "completions/ba_dailies.bash" "$HOME/.bashrc"; then printf '\n# Added by ba-auto-daily setup.sh\n%s\n' "$COMPLETION_LINE" >> "$HOME/.bashrc" echo "Added source line to ~/.bashrc" else echo "~/.bashrc already sources it (or doesn't exist) -- left untouched" fi echo "Run 'source ~/.bashrc' or open a new shell to pick up completion" echo "== Done ==" echo "Run with: $REPO_DIR/ba_dailies.sh [mailbox|cafe|stamina|story_sweep|shop_common|shop_tactical|lesson]" echo "(requires the game already running, window titled 'BlueArchive')"