The Dream Server installer is modular — 6 libraries and 13 phases, each in its own file. This guide is your map to understanding, using, and customizing the installer.
installers/
lib/ # Pure libraries — define functions, no side effects
constants.sh # Colors, paths, VERSION, timezone detection
logging.sh # log(), success(), warn(), error(), install_elapsed()
ui.sh # CRT theme: typing effects, spinners, boot splash, lore
detection.sh # GPU detection, capability profiles, backend contracts, secure boot fix
tier-map.sh # resolve_tier_config() — tier → model/GGUF/context
compose-select.sh # resolve_compose_config() — compose overlay files + flags
phases/ # Sequential install steps — execute on source
01-preflight.sh # Root/OS/tools checks, existing installation check
02-detection.sh # Hardware detection → tier assignment → compose config
03-features.sh # Interactive feature selection menu
04-requirements.sh # RAM, disk, GPU, and port availability checks
05-docker.sh # Install Docker, Docker Compose, NVIDIA Container Toolkit
06-directories.sh # Create dirs, copy source, generate .env, configure services
07-devtools.sh # Install Claude Code, Codex CLI, OpenCode
08-images.sh # Build image pull list and download all Docker images
09-offline.sh # Configure M1 offline/air-gapped operation
10-amd-tuning.sh # AMD APU sysctl, modprobe, GRUB, and tuned setup
11-services.sh # Download GGUF model, generate models.ini, launch stack
12-health.sh # Verify services responding, configure Perplexica, pre-download STT
13-summary.sh # URLs, desktop shortcut, sidebar pin, summary JSON
install-core.sh # Orchestrator: trap → source libs → parse args → source phases
Libraries are safe to source. Every file in lib/ defines functions only — no
side effects. Sourcing them loads function definitions and constants into the shell
without executing anything. They must be sourced in order because later libraries
depend on earlier ones (e.g., logging.sh uses color codes from constants.sh).
Phases execute immediately when sourced. Each file in phases/ is a
self-contained install step that runs its logic the moment source evaluates it.
Phases rely on the functions defined by lib/ and on global variables set by
earlier phases (e.g., phase 04 checks the GPU tier assigned by phase 02).
The orchestrator is thin. install-core.sh (~150 lines) does exactly three things:
set up interrupt traps, source the 6 libraries, parse CLI arguments, then source the
13 phases in order. All files share one global bash namespace — everything is sourced,
not exec'd.
Every module uses a standardized header:
#!/bin/bash
# ============================================================================
# Dream Server Installer — <Module Name>
# ============================================================================
# Part of: installers/lib/ (or installers/phases/)
# Purpose: <one-line description>
#
# Expects: <comma-separated list of globals/functions this file reads>
# Provides: <comma-separated list of globals/functions this file defines>
#
# Modder notes:
# <when and why you'd edit this file>
# ============================================================================| Field | Meaning |
|---|---|
| Purpose | What this file does in one line |
| Expects | Globals and functions that must already exist when this file is sourced |
| Provides | Globals and functions this file creates for later files to use |
| Modder notes | Plain-English hint for customizers |
If you add a new file, copy this template. The Expects / Provides chain is
how you trace data flow without reading every line.
Common customizations and exactly where to make them:
| Recipe | What to edit | How |
|---|---|---|
| Add a hardware tier | lib/tier-map.sh + lib/detection.sh |
Add a case in resolve_tier_config() (tier-map.sh) and a detection path in detection.sh. Also update lib/compose-select.sh if a new compose overlay is needed, and add the tier to QUICKSTART.md and README.md hardware tables. |
| Swap CRT theme colors | lib/constants.sh |
Change the ANSI escape code variables (GRN, AMB, RED, etc.) near the top |
| Change lore messages | lib/ui.sh |
Edit the LORE_MESSAGES[] array — add, remove, or reword entries |
| Change boot splash | lib/ui.sh |
Edit the show_stranger_boot() function — it renders the CRT startup sequence |
| Skip a phase | install-core.sh |
Comment out or remove the source line for that phase (e.g., remove phase 07 to skip dev tools) |
| Add a new phase | installers/phases/ |
Create a numbered .sh file with the standard header, then add a source line in install-core.sh in the right order |
| Swap inference backend | lib/compose-select.sh |
Change the compose overlay logic in resolve_compose_config() to point at different compose files |
| Change model downloads | phases/11-services.sh |
Edit the GGUF download logic or add new model files |
| Add a service health check | phases/12-health.sh |
Add a new check_service() call for your service |
| Change minimum requirements | phases/04-requirements.sh |
Adjust RAM/disk/VRAM thresholds per tier |
What's shared vs platform-specific across the installer:
| Layer | Shared | Platform-specific |
|---|---|---|
| Colors, version, paths | lib/constants.sh |
— |
| Logging | lib/logging.sh |
— |
| CRT UI / spinners | lib/ui.sh |
— |
| GPU detection | lib/detection.sh |
Backend contract JSONs (config/backends/) |
| Tier → model mapping | lib/tier-map.sh |
— |
| Compose selection | lib/compose-select.sh |
Per-backend compose overlays |
| Pre-flight checks | phases/01-preflight.sh |
— |
| Docker setup | phases/05-docker.sh |
NVIDIA Container Toolkit vs ROCm |
| AMD system tuning | — | phases/10-amd-tuning.sh (AMD only) |
| Health checks | phases/12-health.sh |
Port/service differences per backend |
for f in installers/lib/*.sh installers/phases/*.sh install-core.sh; do
bash -n "$f"
doneIf any file has a syntax error, bash -n will print the file name and line number.
bash install-core.sh --dry-run --non-interactive --skip-docker --forceThis walks through every phase, printing what would happen without making changes.
bash tests/smoke/linux-nvidia.sh
bash tests/smoke/linux-amd.sh
bash tests/smoke/wsl-logic.sh
bash tests/smoke/macos-dispatch.shbash scripts/simulate-installers.sh
bash tests/integration-test.sh- CONTRIBUTING.md — Contributor validation checklist
- EXTENSIONS.md — Adding Docker services (not installer mods)
- BACKEND-CONTRACT.md — Backend runtime contract format