diff --git a/install.sh b/install.sh index 0357e1b..f71e3ff 100755 --- a/install.sh +++ b/install.sh @@ -2,14 +2,41 @@ set -e -sudo -v || exit 1 +################### +## Spinner stuff ## +################### -# keep sudo alive until script exits -while true; do - sudo -n true - sleep 60 - kill -0 "$$" || exit -done 2>/dev/null & +execute_with_spinner() { + local title="$1" + shift + + spinner='⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏' + local i=0 + + draw_status() { + tput sc + tput cup $(($(tput lines) - 1)) 0 + printf "%s %s" "${spinner:i++%${#spinner}:1}" "$title" + tput el + tput rc + } + + while sleep 0.05; do + draw_status + done & + SPIN_PID=$! + + "$@" + + local status=$? + + kill "$SPIN_PID" + wait "$SPIN_PID" 2>/dev/null || true + + echo + + return $status +} ######################### ## gum style variables ## @@ -18,7 +45,7 @@ done 2>/dev/null & GUM_SPIN_SPINNER="minidot" GUM_SPIN_SHOW_OUTPUT="true" -sudo -v +sudo -v || exit 1 #################### ## Installing gum ## @@ -26,7 +53,7 @@ sudo -v if ! command -v gum &>/dev/null; then echo "Installing gum" - sudo pacman -S --needed --noconfirm gum + execute_with_spinner "Installing gum" sudo pacman -S --needed --noconfirm gum fi ################################### @@ -34,19 +61,19 @@ fi ################################### if ! command -v yay &>/dev/null; then - sudo -v + sudo -v || exit 1 # gum spin --title "Installing yay dependencies" -- \ - sudo pacman -S base-devel git --needed --noconfirm + execute_with_spinner "Installing yay dependencies" sudo pacman -S base-devel git --needed --noconfirm TEMP_DIR=$(mktemp -d) # gum spin --title "Cloning yay-bin from AUR" -- \ - git clone https://aur.archlinux.org/yay-bin.git $TEMP_DIR/yay + execute_with_spinner "Cloning yay-bin from AUR" git clone https://aur.archlinux.org/yay-bin.git $TEMP_DIR/yay cd $TEMP_DIR/yay - sudo -v + sudo -v || exit 1 # gum spin --title "Installing yay" -- \ - makepkg -si --noconfirm + execute_with_spinner "Installing yay" makepkg -si --noconfirm fi ############################# @@ -86,9 +113,9 @@ mapfile -t extratools < <( ## Installing stow ## ##################### -sudo -v +sudo -v || exit 1 # gum spin --title "Installing GNU Stow" -- \ -yay -S --needed --noconfirm stow +execute_with_spinner "Installing GNU Stow" yay -S --needed --noconfirm stow ###################### ## Applying configs ## @@ -97,9 +124,9 @@ yay -S --needed --noconfirm stow for choice in "${desktop[@]}"; do case "$choice" in "Niri") - sudo -v + sudo -v || exit 1 # gum spin --title "Installing niri alongside required packages" -- \ - yay -S --needed --noconfirm \ + execute_with_spinner "Installing niri and required packages" yay -S --needed --noconfirm \ niri \ ly \ nautilus \ @@ -121,9 +148,9 @@ for choice in "${desktop[@]}"; do ;; "KDE Plasma") - sudo -v + sudo -v || exit 1 # gum spin --title "Installing KDE Plasma" -- \ - pacman -S --needed --noconfirm plasma kde-applications + execute_with_spinner "Installing KDE Plasma" pacman -S --needed --noconfirm plasma kde-applications sudo systemctl enable sddm ;; esac @@ -132,9 +159,9 @@ done for choice in "${tools[@]}"; do case "$choice" in "Terminal") - sudo -v + sudo -v || exit 1 # gum spin --title "Installing Terminal packages..." -- \ - yay -S --needed --noconfirm \ + "Installing Terminal packages" yay -S --needed --noconfirm \ fastfetch \ hyfetch \ neovim \ @@ -149,21 +176,21 @@ for choice in "${tools[@]}"; do reflector stow fastfetch hyfetch nvim zsh --override # gum spin --title "Updating Tealdeer database" -- \ - tldr --update + execute_with_spinner "Updating Tealdeer database" tldr --update ;; "Terminal Emulator") - sudo -v + sudo -v || exit 1 # gum spin --title "Installing Terminal Emulator..." -- \ - yay -S --needed --noconfirm \ + execute_with_spinner "Installing Terminal Emulator" yay -S --needed --noconfirm \ ghostty stow ghostty --override ;; "Gaming") - sudo -v + sudo -v || exit 1 # gum spin --title "Installing Gaming Packages..." -- \ - yay -S --needed --noconfirm \ + execute_with_spinner "Installing Gaming packages" yay -S --needed --noconfirm \ mangohud \ gamemode \ steam \ @@ -172,24 +199,24 @@ for choice in "${tools[@]}"; do arrpc stow mangohud --override - sudo -v + sudo -v || exit 1 # gum spin --spinner minidot --title "Applying arrpy systemd fix..." -- \ sudo cp /usr/lib/systemd/user/arrpc.service /etc/systemd/system/arrpc.service && sudo systemctl enable arrpc --now ;; "VR Gaming") - sudo -v + sudo -v || exit 1 # gum spin --title "Installing VR Gaming Packages..." -- \ - yay -S --needed --noconfirm \ + execute_with_spinner "Installing VR Gaming packages" yay -S --needed --noconfirm \ alvr-launcher-bin \ wlx-overlay-s-bin ;; "Hamr Sticker Picker") - sudo -v + sudo -v || exit 1 # gum spin --title "Installing hamr..." -- \ - yay -S --needed --noconfirm \ + execute_with_spinner "Installing hamr" yay -S --needed --noconfirm \ hamr stow hamr-sticker-picker --override @@ -230,6 +257,6 @@ extpkgstr=$( echo "${extrapkgs[*]}" ) -sudo -v +sudo -v || exit 1 # gum spin --title "Installing extra packages" -- \ -yay -S --needed --noconfirm "$extpkgstr" +execute_with_spinner "Installing extra packages" yay -S --needed --noconfirm "$extpkgstr" diff --git a/setup.sh b/setup.sh index ab1339f..eb73717 100755 --- a/setup.sh +++ b/setup.sh @@ -17,7 +17,7 @@ if ! command -v yay &>/dev/null; then fi echo "Installing packages" -sudo -v +sudo -v || exit 1 yay -S --noconfirm --needed - <$DOTFILES_DIR/packages.txt echo "Changing default shell"