(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
}
# Helper: install eza if the package manager couldn't provide it
install_eza_fallback() {
# Install eza using package manager or fallback methods
install_eza() {
local os=$(detect_os)
echo "Attempting fallback installation of eza..."
echo "Installing eza..."
case $os in
ubuntu|debian)
# 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
macos)
if ! command -v brew &> /dev/null; then
echo "Homebrew is not installed. Installing Homebrew..."
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
fi
brew install eza
;;
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
cargo install eza
;;
fedora)
sudo dnf install -y eza || {
command -v cargo &> /dev/null && cargo install eza
}
if ! sudo dnf install -y eza; then
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)
if command -v cargo &> /dev/null; then
cargo install eza
else
if ! sudo yum install -y eza; then
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
;;
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
sudo install -m 755 eza /usr/local/bin/eza
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
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
install_packages() {
local os=$(detect_os)
local base_packages="zsh git wget fontconfig eza zoxide"
local base_packages="zsh git wget fontconfig zoxide"
case $os in
macos)
@@ -129,7 +158,7 @@ install_packages() {
esac
# 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
}