97 lines
2.6 KiB
Bash
Executable File
97 lines
2.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Preview the shipped Omarchy installer dashboard without building an ISO.
|
|
set -euo pipefail
|
|
|
|
write_simulation_state() {
|
|
local state_file="$1" started_at="$2" phase_started_at="$3" current_phase="$4"
|
|
local finished_at="${5:-null}" temporary="${state_file}.tmp"
|
|
|
|
jq -n \
|
|
--argjson started_at "$started_at" \
|
|
--argjson phase_started_at "$phase_started_at" \
|
|
--arg current_phase "$current_phase" \
|
|
--argjson finished_at "$finished_at" \
|
|
'{
|
|
started_at: $started_at,
|
|
phase_started_at: $phase_started_at,
|
|
current_phase: $current_phase
|
|
} + if $finished_at == null then {} else {finished_at: $finished_at} end' \
|
|
>"$temporary"
|
|
mv -f -- "$temporary" "$state_file"
|
|
}
|
|
|
|
simulate_install() {
|
|
local state_file="$1"
|
|
local started_at="$EPOCHREALTIME"
|
|
local phase phase_started_at finished_at duration i
|
|
local -a 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
|
|
)
|
|
|
|
for ((i = 0; i < ${#phases[@]}; i += 2)); do
|
|
phase="${phases[i]}"
|
|
duration="${phases[i + 1]}"
|
|
phase_started_at="$EPOCHREALTIME"
|
|
write_simulation_state "$state_file" "$started_at" "$phase_started_at" "$phase"
|
|
sleep "$duration"
|
|
done
|
|
|
|
finished_at="$EPOCHREALTIME"
|
|
write_simulation_state "$state_file" "$started_at" "$finished_at" "Installation complete" "$finished_at"
|
|
sleep 0.3
|
|
}
|
|
|
|
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"
|