Files
omarchy/install/helpers/errors.sh
Ryan Hughes cfbc71c117 Add modifications to support Offline ISO (#1621)
* Change lazyvim and asdcontrol to packages

* Remove asdcontrol and lazyvim

* Add lazyvim setup

* Don't trigger rebuild. We already rebuild later.

* Add new pacman.conf after install

* Update config to keep mirrors in mirrorlist

* Add lazyvim setup back

* Make webapp installer work with local images

* Update tuis to work offline

* Update pacman config situation

* Extract the reboot segment into its own file

* Explainer

* Can't return in executed scripts

* Add post-install

* Extract the reboot segment into its own file

* Fix rebase doubling up

* Add run wrapper function for feedback

* Redirect output to log

* Move gnome updates to first-run

* Add theme to first-run

* Updat to try to get logging working

* Create the file and give permissions

* Test gsettings

* Revert "Test gsettings"

This reverts commit 49c27d319407f6c95fcbb4c5a2646e54b50c9ab4.

* Stop logging

* Add time outputs to end of logs

* Rearrange some scripts to cleanup

* Cleanup

* Add timing to run script

* Don't enable multilib for offline

* Add prebuild ruby

* Try spinner setup

* Prevent exit 1 due to grep not matching

* Update limine config to work for USB installs as well

* Add offline install to env report

* Fix grep pipefailure

* Update logs exports to work with subshells

* Fix backward logic

* Attempt to fix logging again

* Export chrootable for subshells

* Clean up outputs

* Move chrootable up

* Source chroot instead

* Changes for logging

* Center up reboot notice

* Update fixed paths

* Update trap

* Revert reverting precompiled ruby due to issues

* Revert "Revert reverting precompiled ruby due to issues"

This reverts commit c159e7dc51cfdd2fb750c49c66bc4468e1208446.

* Remove junk to cleanup fixed paths now that we have relative

* Add git branch check to transition beta to main

* Log output

* Add time output on summary screen

* We don't need sudo here

* Add ansi helpers to make code cleaner

* Add dry-run helpers for testing

* Split out some common / reused items

* Add log output function

* Use gum log to output cleaner

* Cleanup

* Update trap with options

* Fix reboot and pad it

* Cleanup

* Add dry-run for testing

* Use default $PADDING for gum

* More styles

* Styles and really exit

* Update to new format

* Add ansi vars

* Update log output to prevent flickering

* Fix logo exporting

* Trap updates

* Add exit handler

* Prevent double-trapping

* Update traps

* Consolidate logic

* Update reboot to work in chroot

* Eliminate double-guard

* Attempt to speed up by removing mkinitcpio hooks

* Add multilib for nvidia users

* Add back wireless-regdom

* Remove dryrun items

* Fix to be offline

* Set fonts for plymouth to solve freetype2 issue

* Required -y to run

* Update omarchy-refresh-plymouth to account for limine changes

* Update omarchy-refresh-plymouth to account for limine changes (#1575)

* Required -y to run

* Update omarchy-refresh-plymouth to account for limine changes

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>

* Update modes

* Remove direct executions of .sh files

* Add variable safety

* Add omarchy-upload-log

* Add broadcome fix for MBP

* Prevent printing on screen when rebooting

* Make packages list universal

* Rename

* Remove retry message

* Fix packages target

* Add system info to upload

* Update variable name

* Remove unnecessary executable statuses

* Remove gesture default

* Add bcm4360 fix to install

* Add useful debug info

* Add OMARCHY_PATH

* Only look locally offline

* Rename / rearrange files

* Export so they're available to subshells

* Update for alternate

* Rearrange

* Log install time if no arch

* Add limine to packages list

* Update comments

* Update sizing method

* Update mode switcher

* Move icons to be embedded in installer

* Set install mode to online

* shebang and sudo

* Remove deleted branch check

* Elim banners

* Elim verbosity

* Rename LOG_FILE

* Multilib on by default

* Flip to positive

* Switch to gnome-theme.sh for first run

* Elim ansi-codes helper

* Move guard up to be the first thing that's hit

* Extract a couple of functions

* Trim

* Trim

* Move back to trap

* Update to single gum file

* Just show total

* Pulled function to a helper

* Extract explaining function

* Use complete conditional flows where possible

* Reference variable close to its use

* Use modern bash conditional syntax

* Comment before function

* Use a simpler shared exit headline

Doesn't matter how we stopped, just that we did

* CRs

* Keep constants together

* Style on comment

* Explain QR Code

* Modern bash conditional and use lowercase for all local variables

* Use bash calculation syntax for numbers

* Use calculation syntax where possible

* cleanup was not intention revealing enough imo

* Spacing

* Retry won't produce something different in offline mode

* Not needed

* Use modern bash conditional style

* String-wrapping not needed in [[ ]]

* Might as well use constants for all of these

* Don't need the wrapping

* Move the output saving into where we're working with it

* Not needed as long as we just source this

* Gum is a helper

* Slim down logging setup

* Reflect broader scope of work

* Everything should live in file

* Simpler

* Ordering

* Style

* Better separation of concerns

* Stop pretending these are meant to run directly

* Move all packaging execution together

* No longer used in an offline centric setup

* None of these are directly executable any more either

* Modern bash conditional

* Better name

* Explain what's going on

* Use modern bash conditional

* Use modern bash styule

* No need for bashing

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
Co-authored-by: DoppioJP <jakub@doppio.jp>
2025-09-13 16:42:00 +02:00

160 lines
4.1 KiB
Bash

# Directs user to Omarchy Discord
QR_CODE='
█▀▀▀▀▀█ ▄ ▄ ▀▄▄▄█ █▀▀▀▀▀█
█ ███ █ ▄▄▄▄▀▄▀▄▀ █ ███ █
█ ▀▀▀ █ ▄█ ▄█▄▄▀ █ ▀▀▀ █
▀▀▀▀▀▀▀ ▀▄█ █ █ █ ▀▀▀▀▀▀▀
▀▀█▀▀▄▀▀▀▀▄█▀▀█ ▀ █ ▀ █
█▄█ ▄▄▀▄▄ ▀ ▄ ▀█▄▄▄▄ ▀ ▀█
▄ ▄▀█ ▀▄▀▀▀▄ ▄█▀▄█▀▄▀▄▀█▀
█ ▄▄█▄▀▄█ ▄▄▄ ▀ ▄▀██▀ ▀█
▀ ▀ ▀ █ ▀▄ ▀▀█▀▀▀█▄▀
█▀▀▀▀▀█ ▀█ ▄▀▀ █ ▀ █▄▀██
█ ███ █ █▀▄▄▀ █▀███▀█▄██▄
█ ▀▀▀ █ ██ ▀ █▄█ ▄▄▄█▀ █
▀▀▀▀▀▀▀ ▀ ▀ ▀▀▀ ▀ ▀▀▀▀▀▀'
# Track if we're already handling an error to prevent double-trapping
ERROR_HANDLING=false
# Cursor is usually hidden while we install
show_cursor() {
printf "\033[?25h"
}
# Display truncated log lines from the install log
show_log_tail() {
if [[ -f $OMARCHY_INSTALL_LOG_FILE ]]; then
local log_lines=$(($TERM_HEIGHT - $LOGO_HEIGHT - 35))
local max_line_width=$((LOGO_WIDTH - 4))
tail -n $log_lines "$OMARCHY_INSTALL_LOG_FILE" | while IFS= read -r line; do
if ((${#line} > max_line_width)); then
local truncated_line="${line:0:$max_line_width}..."
else
local truncated_line="$line"
fi
gum style "$truncated_line"
done
echo
fi
}
# Display the failed command or script name
show_failed_script_or_command() {
if [[ -n ${CURRENT_SCRIPT:-} ]]; then
gum style "Failed script: $CURRENT_SCRIPT"
else
# Truncate long command lines to fit the display
local cmd="$BASH_COMMAND"
local max_cmd_width=$((LOGO_WIDTH - 4))
if ((${#cmd} > max_cmd_width)); then
cmd="${cmd:0:$max_cmd_width}..."
fi
gum style "$cmd"
fi
}
# Save original stdout and stderr for trap to use
save_original_outputs() {
exec 3>&1 4>&2
}
# Restore stdout and stderr to original (saved in FD 3 and 4)
# This ensures output goes to screen, not log file
restore_outputs() {
if [ -e /proc/self/fd/3 ] && [ -e /proc/self/fd/4 ]; then
exec 1>&3 2>&4
fi
}
# Error handler
catch_errors() {
# Prevent recursive error handling
if [[ $ERROR_HANDLING == true ]]; then
return
else
ERROR_HANDLING=true
fi
# Store exit code immediately before it gets overwritten
local exit_code=$?
stop_log_output
restore_outputs
clear_logo
show_cursor
gum style --foreground 1 --padding "1 0 1 $PADDING_LEFT" "Omarchy installation stopped!"
show_log_tail
gum style "This command halted with exit code $exit_code:"
show_failed_script_or_command
gum style "$QR_CODE"
echo
gum style "Get help from the community via QR code or at https://discord.gg/tXFUdasqhY"
# Offer options menu
while true; do
options=()
# If online install, show retry first
if [[ ${OMARCHY_INSTALL_MODE:-offline} == "online" ]]; then
options+=("Retry installation")
fi
# Add upload option if internet is available
if ping -c 1 -W 1 1.1.1.1 >/dev/null 2>&1; then
options+=("Upload log for support")
fi
# Add remaining options
options+=("View full log")
options+=("Exit")
choice=$(gum choose "${options[@]}" --header "What would you like to do?" --height 6 --padding "1 $PADDING_LEFT")
case "$choice" in
"Retry installation")
bash ~/.local/share/omarchy/install.sh
break
;;
"View full log")
less "$OMARCHY_INSTALL_LOG_FILE"
;;
"Upload log for support")
omarchy-upload-install-log
;;
"Exit" | "")
exit 1
;;
esac
done
}
# Exit handler - ensures cleanup happens on any exit
exit_handler() {
local exit_code=$?
# Only run if we're exiting with an error and haven't already handled it
if [[ $exit_code -ne 0 && $ERROR_HANDLING != true ]]; then
catch_errors
else
stop_log_output
show_cursor
fi
}
# Set up traps
trap catch_errors ERR INT TERM
trap exit_handler EXIT
# Save original outputs in case we trap
save_original_outputs