Skip to content

Setup Wizard

The setup wizard walks you through configuring your entire homelab. Run it with:

sh
mithrandir setup

What It Does

The wizard runs through these steps in order:

  1. System initialization — Detects your OS, local IP, and loads any existing configuration
  2. Docker — Checks if Docker is installed, and installs it if needed
  3. Swap — Checks and configures 2 GB of swap space (important for Raspberry Pi and low-RAM systems)
  4. rclone — Installs rclone for cloud backup support
  5. Base directory — Confirms the base directory for all app data (defaults to your home directory)
  6. App selection — Choose which apps to install (by category or individually)
  7. Secrets — Prompts for any required API tokens, passwords, or keys
  8. Install apps — Pulls Docker images and starts all selected containers
  9. HTTPS — Offers to enable HTTPS via Caddy reverse proxy (requires DuckDNS). In --yes mode, auto-enables if ACME_EMAIL is already configured in .env
  10. Firewall — Offers to enable UFW firewall with ufw-docker to control access to container ports. SSH is always allowed. In --yes mode, the firewall is installed automatically
  11. Backup service — Sets up the systemd timer for daily automatic backups at 2:00 AM
  12. Summary — Shows all running services with their URLs

App Selection

You can select apps by category or pick individually:

Categories

CategoryApps
Media: Movies & TVqBittorrent, Prowlarr, Radarr, Sonarr, Bazarr, Seerr, Jellyfin, Profilarr
Media: AudioNavidrome, Lidarr, Audiobookshelf
Media: PicturesImmich
Media: GamesRetroAssembly
AutomationHome Assistant, n8n
MonitoringGatus
ProductivityAFFiNE, Excalidraw, Omni Tools, Paperless-ngx, Penpot, Stirling PDF
AIOpen WebUI
FinanceActual Budget, Sure
Network & SecurityPi-hole, WireGuard, DuckDNS, Vaultwarden
TravelAdventureLog, TRIP
StatisticsYour Spotify
HouseholdCookCLI
UtilitiesHomarr

Some apps have dependencies that are automatically included. For example, selecting Vaultwarden also installs Caddy, DuckDNS, and Pi-hole.

Auto-Configuration

After installing apps, the wizard optionally auto-configures integrations between services:

  • qBittorrent — Sets download paths and credentials
  • Prowlarr — Connects to Sonarr, Radarr, and Lidarr
  • Radarr / Sonarr / Lidarr — Configures root folders and download client
  • Jellyfin — Sets up media libraries
  • Seerr — Connects to Jellyfin, Sonarr, and Radarr
  • Gatus — Configures health checks for all installed services

Known Limitations

Due to API limitations and timing behaviors of some apps, auto-configuration may not always complete fully. Some apps may not be ready to accept API calls immediately after starting, and certain settings can only be configured through the app's web UI. Always double-check each app's configuration after the wizard finishes.

Configuration File

All settings are saved to a .env file in the project root. You can view the current configuration at any time with:

sh
mithrandir config

Key settings include:

VariableDefaultDescription
BASE_DIR~ (home directory)Root directory for all app data
PUID / PGID1000User/group ID for container file permissions
TZSystem timezoneTimezone for all containers
BACKUP_DIR/backupsLocal backup storage directory
LOCAL_RETENTION5Number of local backups to keep
REMOTE_RETENTION10Number of remote backups to keep
RCLONE_REMOTESgdriveComma-separated list of rclone remotes for cloud backups
BACKUP_HOUR2Hour (0-23) when the daily backup runs
ENABLE_HTTPSfalseEnable Caddy HTTPS reverse proxy
ENABLE_FIREWALL(not set)Enable UFW firewall with automatic rule management

Non-Interactive Mode

To run the setup without prompts (useful for scripting), pass --yes:

sh
mithrandir setup --yes

In --yes mode, the wizard runs unattended with these defaults:

StepBehavior
Base directoryUses existing BASE_DIR from .env, or defaults to your home directory
App selectionInstalls all non-hidden apps (after filtering out conflicts)
SecretsSkipped — any secrets not already in .env are left unset. Apps that require them will be installed but may not work until you add the missing values manually
Auto-configurationProceeds automatically. Default credentials are admin / admin for services like qBittorrent, Prowlarr, Radarr, Sonarr, Lidarr, Jellyfin, and Seerr
HTTPSEnabled only if DUCKDNS_TOKEN, DUCKDNS_SUBDOMAINS, and ACME_EMAIL are all already set in .env. Otherwise skipped silently
FirewallInstalled and enabled automatically

TIP

For a fully unattended setup, pre-populate your .env file with all required secrets before running --yes. See .env.example for the full list of available variables.