(install.sh): refactor eza installation logic to streamline package manager checks and enhance fallback methods for various operating systems

This commit is contained in:
Frank Qing
2025-05-28 04:24:44 +08:00
parent 1bd3a2dcb8
commit e3e219e55b

View File

@@ -42,36 +42,65 @@ detect_os() {
fi fi
} }
# Helper: install eza if the package manager couldn't provide it # Install eza using package manager or fallback methods
install_eza_fallback() { install_eza() {
local os=$(detect_os) local os=$(detect_os)
echo "Attempting fallback installation of eza..." echo "Installing eza..."
case $os in case $os in
ubuntu|debian) macos)
# Install cargo if it doesn't exist if ! command -v brew &> /dev/null; then
if ! command -v cargo &> /dev/null; then echo "Homebrew is not installed. Installing Homebrew..."
echo "Installing Rust and cargo..." /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
sudo apt-get update fi
sudo apt-get install -y curl build-essential brew install eza
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y ;;
source ~/.cargo/env ubuntu|debian)
sudo apt-get update
if ! sudo apt-get install -y eza; then
echo "Package manager installation failed, attempting fallback..."
# Install cargo if it doesn't exist
if ! command -v cargo &> /dev/null; then
echo "Installing Rust and cargo..."
sudo apt-get update
sudo apt-get install -y curl build-essential
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source ~/.cargo/env
fi
cargo install eza
fi fi
cargo install eza
;; ;;
fedora) fedora)
sudo dnf install -y eza || { if ! sudo dnf install -y eza; then
command -v cargo &> /dev/null && cargo install eza echo "Package manager installation failed, attempting fallback..."
} if command -v cargo &> /dev/null; then
cargo install eza
else
wget -qO- https://github.com/eza-community/eza/releases/latest/download/eza_x86_64-unknown-linux-gnu.tar.gz | tar xz
sudo install -m 755 eza /usr/local/bin/eza
fi
fi
;; ;;
centos|rhel) centos|rhel)
if command -v cargo &> /dev/null; then if ! sudo yum install -y eza; then
cargo install eza echo "Package manager installation failed, attempting fallback..."
else if command -v cargo &> /dev/null; then
cargo install eza
else
wget -qO- https://github.com/eza-community/eza/releases/latest/download/eza_x86_64-unknown-linux-gnu.tar.gz | tar xz
sudo install -m 755 eza /usr/local/bin/eza
fi
fi
;;
arch|manjaro)
if ! sudo pacman -Syu --noconfirm eza; then
echo "Package manager installation failed, attempting fallback..."
wget -qO- https://github.com/eza-community/eza/releases/latest/download/eza_x86_64-unknown-linux-gnu.tar.gz | tar xz wget -qO- https://github.com/eza-community/eza/releases/latest/download/eza_x86_64-unknown-linux-gnu.tar.gz | tar xz
sudo install -m 755 eza /usr/local/bin/eza sudo install -m 755 eza /usr/local/bin/eza
fi fi
;; ;;
*) *)
echo "Unsupported operating system for package manager installation, using fallback..."
wget -qO- https://github.com/eza-community/eza/releases/latest/download/eza_x86_64-unknown-linux-gnu.tar.gz | tar xz wget -qO- https://github.com/eza-community/eza/releases/latest/download/eza_x86_64-unknown-linux-gnu.tar.gz | tar xz
sudo install -m 755 eza /usr/local/bin/eza sudo install -m 755 eza /usr/local/bin/eza
;; ;;
@@ -100,7 +129,7 @@ install_zoxide_fallback() {
# Core: install required packages via the preferred package manager, then fall back where needed # Core: install required packages via the preferred package manager, then fall back where needed
install_packages() { install_packages() {
local os=$(detect_os) local os=$(detect_os)
local base_packages="zsh git wget fontconfig eza zoxide" local base_packages="zsh git wget fontconfig zoxide"
case $os in case $os in
macos) macos)
@@ -129,7 +158,7 @@ install_packages() {
esac esac
# Fallbacks for any tools that are still missing after the package-manager step # Fallbacks for any tools that are still missing after the package-manager step
command -v eza &> /dev/null || install_eza_fallback command -v eza &> /dev/null || install_eza
command -v zoxide &> /dev/null || install_zoxide_fallback command -v zoxide &> /dev/null || install_zoxide_fallback
} }