Files
provision/scripts/packages.sh
2025-11-23 09:07:39 -08:00

109 lines
2.9 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/../lib/common.sh"
source "$SCRIPT_DIR/../lib/package.sh"
log_info "Installing packages"
# Essential packages
PACKAGES=(
"git"
"curl"
"wget"
"tmux"
"jq"
"fzf"
"ripgrep"
)
# Modern CLI tools
MODERN_TOOLS=(
"starship"
"zoxide"
"eza"
"fd"
"gh"
)
# Install essential packages
for pkg in "${PACKAGES[@]}"; do
if command_exists "$pkg" || command_exists "${pkg}find" 2>/dev/null; then
log_success "$pkg already installed"
else
log_info "Installing $pkg"
case "$pkg" in
fd)
install_package fd fd-find fd
;;
*)
install_package "$pkg"
;;
esac
fi
done
# Install modern tools
for tool in "${MODERN_TOOLS[@]}"; do
if command_exists "$tool"; then
log_success "$tool already installed"
continue
fi
log_info "Installing $tool"
case "$tool" in
starship)
if is_debian; then
curl -sS https://starship.rs/install.sh | sh -s -- -y
else
install_package starship
fi
;;
zoxide)
if is_debian && ! package_installed zoxide; then
install_cargo zoxide
else
install_package zoxide
fi
;;
eza)
if is_debian && ! package_installed eza; then
if command_exists exa; then
log_success "exa (predecessor) already installed"
else
install_cargo eza
fi
else
install_package eza
fi
;;
gh)
if is_debian && ! package_installed gh; then
maybe_sudo mkdir -p -m 755 /etc/apt/keyrings
wget -qO- https://cli.github.com/packages/githubcli-archive-keyring.gpg | maybe_sudo tee /etc/apt/keyrings/githubcli-archive-keyring.gpg > /dev/null
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | maybe_sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null
update_package_cache
fi
install_package gh gh github-cli
;;
*)
install_package "$tool"
;;
esac
done
# Install TPM (Tmux Plugin Manager)
TPM_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/tmux/plugins/tpm"
if [ ! -d "$TPM_DIR" ]; then
log_info "Installing TPM (Tmux Plugin Manager)"
ensure_dir "$(dirname "$TPM_DIR")"
git clone https://github.com/tmux-plugins/tpm "$TPM_DIR"
log_success "TPM installed"
else
log_success "TPM already installed"
fi
log_success "All packages installed"