100 lines
2.3 KiB
Bash
Executable File
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"
|