Setup is first-time only: a complete tree prints the path and exits
(use upgrade, config edit, or uninstall). Incomplete leftovers from a
failed attempt are offered for cleanup. Uninstall is quieter and
remembers earlier install/media paths so stray trees still get found.
Stop copying cli.sh and a lib subset to ~/.local/bin. Setup and upgrade
write a short wrapper that execs $INSTALL_DIR/cli.sh. Leftover PATH libs
are removed. update-cli now points at upgrade.
Recyclarr sync, backup/restore archives, git fetches, and Prowlarr
indexer sync now use wait_while/wait_inline. Compose up/pull keep
their own progress instead of a fake overlay.
vpn-watchdog and media-purge-watch are build-only images; pull_policy
build stops the 'pull access denied' noise. Windows clones left CRLF
in .env.example so config.sh died with $'\\r' on /mnt/e — strip CR
when generating and sourcing .env.
A hung copy onto /mnt/e left the home pointer pointing at ~/assemblrr,
so uninstall --force --media never touched the E: trees. Write
INSTALL_DIRECTORY and MEDIA_DIRECTORY as soon as paths are chosen,
scan mounted drives for leftover assemblrr dirs, time out stuck
USB/WSL I/O, and let r refresh the drive picker (WSL automount).
Pin Recyclarr to ghcr.io/recyclarr/recyclarr:8 (:latest is unpublished)
and write ~/.local/bin into bashrc/zshrc/fish so the early CLI still
works after a failed setup on Arch/WSL. Setup now picks install/media
paths from an fzf list of home plus mounted drives.
Remove Portainer from managed compose and catalog; leave a custom.yaml
example for optional use. Upgrade/start use compose --remove-orphans and
migration 002 removes leftover Portainer containers unless custom.yaml
keeps it. Fix setup double URL list when status is unhealthy, share
OpenSubtitles y/N on express, and tone down indexer/provider prompts.
Always sync HD/UHD (and Sonarr WEB) as include packs, name them with
an assemblrr prefix, soften blocking CF scores, zero quality minSize,
relax minimumSeeders, and update Seerr on reconfigure. Document TRaSH
guide drift and tighten comments and uninstall messaging.
Docker creates missing volume parents as root, which broke setup after
the early VPN test (config/ owned by root). Add prepare_install_dirs,
call it before VPN test and full compose up, and reuse it on CLI start.