add better error handling for install script, add --yes flag.
This commit is contained in:
parent
9e1bc68a32
commit
1658e9527a
158
install.sh
158
install.sh
|
|
@ -1,4 +1,17 @@
|
|||
#!/bin/env bash
|
||||
#!/usr/bin/env bash
|
||||
|
||||
trap 'log WARN "Interrupted by user"; exit 130' INT
|
||||
|
||||
INSTALL_STATUS="none" # none | partial | complete | failed
|
||||
AUTO_YES=0
|
||||
|
||||
for arg in "$@"; do
|
||||
case "$arg" in
|
||||
--yes|--ci|--non-interactive)
|
||||
AUTO_YES=1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
log() {
|
||||
local level="$1"
|
||||
|
|
@ -51,8 +64,8 @@ choose_packages() {
|
|||
}
|
||||
|
||||
prompt_style() {
|
||||
gum style --border rounded \
|
||||
--border double \
|
||||
gum style \
|
||||
--border rounded \
|
||||
--padding "0 1" \
|
||||
"$1"
|
||||
}
|
||||
|
|
@ -62,7 +75,22 @@ gum_warn(){
|
|||
}
|
||||
|
||||
gum_to_array() {
|
||||
mapfile -t "$1"
|
||||
local -n arr="$1"
|
||||
mapfile -t arr
|
||||
local cleaned=()
|
||||
for item in "${arr[@]}"; do
|
||||
[[ -n "$item" ]] && cleaned+=("$item")
|
||||
done
|
||||
arr=("${cleaned[@]}")
|
||||
}
|
||||
|
||||
confirm() {
|
||||
local msg="$1"
|
||||
if ((AUTO_YES)); then
|
||||
log INFO "[auto] $msg → yes"
|
||||
return 0
|
||||
fi
|
||||
gum confirm --default=false "$msg"
|
||||
}
|
||||
|
||||
#################
|
||||
|
|
@ -92,7 +120,7 @@ You are STRONGLY ADVISED to back up:
|
|||
Proceed at your OWN RISK."
|
||||
)
|
||||
|
||||
gum confirm --default=false "$DISCLAIMER
|
||||
confirm "$DISCLAIMER
|
||||
|
||||
Do you understand the risks and want to continue?" || exit 1
|
||||
|
||||
|
|
@ -102,7 +130,11 @@ Do you understand the risks and want to continue?" || exit 1
|
|||
###########
|
||||
source "$currentDir/packages/pkg_utils.sh"
|
||||
prompt_style "Important utilities (Most likely go with defaults)"
|
||||
if ((AUTO_YES)); then
|
||||
DEV_PKGS=("${pkg_utils[@]}")
|
||||
else
|
||||
gum_to_array UTILITY_PKGS < <(choose_packages pkg_utils)
|
||||
fi
|
||||
|
||||
|
||||
###############
|
||||
|
|
@ -110,7 +142,12 @@ gum_to_array UTILITY_PKGS < <(choose_packages pkg_utils)
|
|||
###############
|
||||
source "$currentDir/packages/pkg_dev_tools.sh"
|
||||
prompt_style "Select Development Tools"
|
||||
if ((AUTO_YES)); then
|
||||
DEV_PKGS=("${pkg_dev_tools[@]}")
|
||||
else
|
||||
gum_to_array DEV_PKGS < <(choose_packages pkg_dev_tools)
|
||||
fi
|
||||
|
||||
|
||||
|
||||
#######################
|
||||
|
|
@ -118,7 +155,12 @@ gum_to_array DEV_PKGS < <(choose_packages pkg_dev_tools)
|
|||
#######################
|
||||
source "$currentDir/packages/pkg_optional.sh"
|
||||
prompt_style "Select Optional Desktop Packages"
|
||||
if ((AUTO_YES)); then
|
||||
OPTIONAL_PKGS=("${pkg_optional[@]}")
|
||||
else
|
||||
gum_to_array OPTIONAL_PKGS < <(choose_packages pkg_optional)
|
||||
fi
|
||||
|
||||
|
||||
|
||||
#################
|
||||
|
|
@ -126,7 +168,12 @@ gum_to_array OPTIONAL_PKGS < <(choose_packages pkg_optional)
|
|||
#################
|
||||
source "$currentDir/packages/pkg_gpu.sh"
|
||||
prompt_style "Select GPU drivers"
|
||||
if ((AUTO_YES)); then
|
||||
GPU_PKGS=("${pkg_gpu[@]}")
|
||||
else
|
||||
gum_to_array GPU_PKGS < <(choose_packages pkg_gpu)
|
||||
fi
|
||||
|
||||
|
||||
##########################
|
||||
## Configure Everything ##
|
||||
|
|
@ -139,9 +186,9 @@ WARNING=$(gum style \
|
|||
"⚠️ This will DELETE any conflicting files and replace them with symlinks from this repo.
|
||||
Make sure you have already backed up all your existing config files (~/.config)")
|
||||
|
||||
if gum confirm --default=false "$WARNING
|
||||
if confirm "$WARNING
|
||||
|
||||
Proceed with system configuration (stow, nvim, shell, keyd)?"; then
|
||||
Proceed with system configuration (stow, shell)?"; then
|
||||
###################
|
||||
## Stow dotfiles ##
|
||||
###################
|
||||
|
|
@ -159,12 +206,13 @@ Proceed with system configuration (stow, nvim, shell, keyd)?"; then
|
|||
printf ' %s\n' $conflicts
|
||||
read -rp "Proceed with deleting these files? (y/N): " ok
|
||||
if [[ ! "$ok" =~ ^[Yy]$ ]]; then
|
||||
echo "Aborted."
|
||||
log WARN "Aborted."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Remove conflicts relative to $HOME
|
||||
for path in $conflicts; do
|
||||
rm -rf "$HOME/$path" && log INFO "Removed $HOME/$path"
|
||||
[[ -n "$path" && "$path" != "/" ]] && rm -rf "$HOME/$path" && log INFO "Deleted $path"
|
||||
done
|
||||
|
||||
log INFO "Running stow..."
|
||||
|
|
@ -173,22 +221,11 @@ Proceed with system configuration (stow, nvim, shell, keyd)?"; then
|
|||
|| log ERROR "Stow failed"
|
||||
fi
|
||||
|
||||
###########################
|
||||
## Setup neovim dotfiles ##
|
||||
###########################
|
||||
log INFO "Setting up neovim configuration"
|
||||
log INFO "Taking backup of neovim config (if already exists)"
|
||||
mv ~/.config/nvim{,.bak}
|
||||
mv ~/.local/share/nvim{,.bak}
|
||||
mv ~/.local/state/nvim{,.bak}
|
||||
mv ~/.cache/nvim{,.bak}
|
||||
git clone --depth=1 https://github.com/krolyxon/nvim.git ~/.config/nvim
|
||||
|
||||
#################################
|
||||
## Change default shell to zsh ##
|
||||
#################################
|
||||
log INFO "Changing the default shell to ZSH"
|
||||
if [[ "$SHELL" != "$(which zsh)" ]]; then
|
||||
if [[ "$SHELL" != "$(command -v zsh)" ]]; then
|
||||
chsh -s $(which zsh) \
|
||||
&& log SUCCESS "Default shell successfully set to zsh" \
|
||||
|| log ERROR "Default shell could not be set to zsh"
|
||||
|
|
@ -205,26 +242,23 @@ fi
|
|||
##################
|
||||
source "$currentDir/packages/pkg_aur.sh"
|
||||
prompt_style "Select AUR packages"
|
||||
gum_to_array AUR_PKGS < <(choose_packages pkg_aur)
|
||||
if [[ ${#AUR_PKGS[@]} -eq 0 ]]; then
|
||||
log WARN "No AUR packages selected"
|
||||
|
||||
if ((AUTO_YES)); then
|
||||
AUR_PKGS=("${pkg_aur[@]}")
|
||||
else
|
||||
gum_to_array AUR_PKGS < <(choose_packages pkg_aur)
|
||||
fi
|
||||
|
||||
if ((${#AUR_PKGS[@]})); then
|
||||
if ! command -v paru >/dev/null 2>&1; then
|
||||
log INFO "Installing Paru (AUR package manager)"
|
||||
git clone https://aur.archlinux.org/paru.git
|
||||
cd paru
|
||||
makepkg -sri
|
||||
cd ..
|
||||
(cd paru && makepkg -sri)
|
||||
rm -rf paru
|
||||
else
|
||||
log INFO "Paru already in PATH, Skipping...."
|
||||
fi
|
||||
|
||||
if [[ ${#AUR_PKGS[@]} -eq 0 ]]; then
|
||||
log WARN "No AUR packages selected, Skipping...."
|
||||
else
|
||||
paru -S --needed "${AUR_PKGS[@]}"
|
||||
fi
|
||||
else
|
||||
log WARN "No AUR packages selected"
|
||||
fi
|
||||
|
||||
|
||||
|
|
@ -232,7 +266,7 @@ fi
|
|||
## Setup Keyd ##
|
||||
############################
|
||||
if command -v keyd >/dev/null 2>&1; then
|
||||
if gum confirm --default=false "Configure and enable keyd? "; then
|
||||
if confirm "Configure and enable keyd? "; then
|
||||
log INFO "Copying keyd configuration to /etc/keyd/default.conf"
|
||||
sudo cp "$currentDir/system/etc/keyd/default.conf" /etc/keyd/
|
||||
sudo systemctl enable --now keyd.service \
|
||||
|
|
@ -253,23 +287,59 @@ ALL_PKGS=(
|
|||
"${pkg_desktop[@]}"
|
||||
)
|
||||
|
||||
if [[ ${#ALL_PKGS[@]} -eq 0 ]]; then
|
||||
log WARN "No packages selected."
|
||||
else
|
||||
if gum confirm --default=false "Install all the selected packages?"; then
|
||||
if ((${#ALL_PKGS[@]})); then
|
||||
if confirm "Install all the selected packages?"; then
|
||||
log INFO "Installing selected packages..."
|
||||
sudo pacman -Sy --needed "${ALL_PKGS[@]}"
|
||||
if sudo pacman -Syu --needed "${ALL_PKGS[@]}"; then
|
||||
INSTALL_STATUS="complete"
|
||||
else
|
||||
INSTALL_STATUS="failed"
|
||||
fi
|
||||
else
|
||||
log WARN "Package installation skipped by user"
|
||||
INSTALL_STATUS="partial"
|
||||
fi
|
||||
else
|
||||
log WARN "No packages selected"
|
||||
INSTALL_STATUS="partial"
|
||||
fi
|
||||
|
||||
|
||||
case "$INSTALL_STATUS" in
|
||||
complete)
|
||||
gum style \
|
||||
--border rounded \
|
||||
--border-foreground 42 \
|
||||
--padding "1 2" \
|
||||
--bold \
|
||||
--foreground 42 \
|
||||
"🎉 Installation Complete!
|
||||
|
||||
Your system has been successfully configured.
|
||||
"✔ Installation Complete!
|
||||
|
||||
All selected packages were installed successfully.
|
||||
You may now reboot the system for all the changes to apply."
|
||||
;;
|
||||
partial)
|
||||
gum style \
|
||||
--border rounded \
|
||||
--border-foreground 220 \
|
||||
--padding "1 2" \
|
||||
--bold \
|
||||
"⚠ Setup Finished (Partial)
|
||||
|
||||
Some steps were skipped by user choice.
|
||||
Your system was NOT fully configured."
|
||||
;;
|
||||
failed)
|
||||
gum style \
|
||||
--border rounded \
|
||||
--border-foreground 196 \
|
||||
--padding "1 2" \
|
||||
--bold \
|
||||
"❌ Installation Failed
|
||||
|
||||
One or more steps did not complete successfully.
|
||||
Check the logs above."
|
||||
;;
|
||||
*)
|
||||
gum style --bold "Finished."
|
||||
;;
|
||||
esac
|
||||
|
|
|
|||
Loading…
Reference in New Issue