Files
omarchy-iso/bin/omarchy-iso-installer
T

100 lines
2.3 KiB
Bash
Executable File

#!/usr/bin/env bash
# Preview the shipped Omarchy installer dashboard without building an ISO.
set -euo pipefail
simulate_install() {
local state_file="$1"
python - "$state_file" <<'PY'
import json
import os
import sys
import time
state_file = sys.argv[1]
started_at = time.time()
phases = [
("Starting installation", 0.5),
("Preparing live environment", 0.8),
("Installing Arch + Omarchy", 5.0),
("Configuring system", 1.2),
("Finalizing Limine boot", 1.0),
("Finalizing user", 1.0),
("Configuring login", 0.6),
("Validating boot setup", 0.8),
]
def write_state(current_phase, phase_started_at, finished_at=None):
state = {
"started_at": started_at,
"phase_started_at": phase_started_at,
"current_phase": current_phase,
}
if finished_at is not None:
state["finished_at"] = finished_at
temporary = f"{state_file}.tmp"
with open(temporary, "w") as output:
json.dump(state, output)
os.replace(temporary, state_file)
for phase, duration in phases:
phase_started_at = time.time()
write_state(phase, phase_started_at)
time.sleep(duration)
finished_at = time.time()
write_state("Installation complete", finished_at, finished_at)
time.sleep(0.3)
PY
}
if [[ ${1:-} == "--simulate-install" ]]; then
(( $# == 2 )) || exit 2
simulate_install "$2"
exit 0
fi
if (( $# > 0 )); then
echo "Usage: $0" >&2
exit 2
fi
repo_root="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)"
dashboard="$repo_root/configs/airootfs/usr/local/bin/omarchy-install-dashboard"
if [[ ! -x $dashboard ]]; then
echo "Installer dashboard is not executable: $dashboard" >&2
exit 1
fi
if [[ -z ${OMARCHY_PATH:-} ]]; then
for candidate in "$repo_root/../omarchy" /usr/share/omarchy; do
if [[ -f $candidate/logo.txt ]]; then
export OMARCHY_PATH="$candidate"
break
fi
done
fi
if [[ -z ${OMARCHY_PATH:-} || ! -f $OMARCHY_PATH/logo.txt ]]; then
echo "Unable to find Omarchy logo.txt; set OMARCHY_PATH to an Omarchy checkout." >&2
exit 1
fi
preview_dir="$(mktemp -d)"
cleanup() {
rm -rf "$preview_dir"
}
trap cleanup EXIT
log_file="$preview_dir/install.log"
state_file="$preview_dir/state.json"
touch "$log_file"
OMARCHY_UI_AUTO_REBOOT=no \
"$dashboard" "$log_file" "$state_file" -- \
"$0" --simulate-install "$state_file"