Files
Fishing_Tackle/fish_installer.sh
Ade Thompson aa9d2cf3f4 Ameneded
Below is the corrected setup—note the </dev/null on the two fish calls.
2025-08-09 08:35:20 +01:00

158 lines
5.0 KiB
Bash

#!/bin/bash
set -e
# 🔍 Detect OS and Package Manager
detect_platform() {
if [[ "$OSTYPE" == "darwin"* ]]; then
OS="macos"
if ! command -v brew &>/dev/null; then
echo "🍺 Homebrew not found. Install it now? (y/N): "
read -r confirm
if [[ "$confirm" =~ ^[Yy]$ ]]; then
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
else
echo "❌ Homebrew is required to install Fish on macOS. Exiting."
exit 1
fi
fi
PKG_MGR="brew"
elif command -v apt &>/dev/null; then
OS="debian"
PKG_MGR="apt"
elif command -v dnf &>/dev/null; then
OS="rhel"
PKG_MGR="dnf"
elif command -v yum &>/dev/null; then
OS="rhel"
PKG_MGR="yum"
elif command -v pacman &>/dev/null; then
OS="arch"
PKG_MGR="pacman"
else
echo "❌ Unsupported platform."
exit 1
fi
}
# 🔐 Install gpg if not present (Debian only)
install_gpg_if_needed() {
if [[ "$OS" == "debian" ]] && ! command -v gpg &>/dev/null; then
echo "🔑 gpg not found. Installing..."
sudo apt update && sudo apt install -y gnupg
fi
}
# 📦 Add Fish shell repo for Debian/Ubuntu
add_fish_repo_debian() {
echo "Adding Fish shell repo for Debian/Ubuntu..."
echo 'deb http://download.opensuse.org/repositories/shells:/fish:/release:/4/Debian_12/ /' | \
sudo tee /etc/apt/sources.list.d/fish.list
curl -fsSL https://download.opensuse.org/repositories/shells:fish:release:4/Debian_12/Release.key | \
gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/fish.gpg > /dev/null
sudo apt update
}
# 🐟 Install Fish shell
install_fish() {
echo "🐟 Installing Fish shell for $OS..."
case "$OS" in
debian)
add_fish_repo_debian
sudo apt install -y fish
;;
rhel)
sudo $PKG_MGR install -y fish
;;
arch)
sudo pacman -Sy --noconfirm fish
;;
macos)
brew install fish
;;
esac
}
# ♻️ Update Fish shell if needed
update_fish() {
echo "🔄 Checking for updates to Fish shell..."
case "$PKG_MGR" in
apt)
sudo apt update
if apt list --upgradable 2>/dev/null | grep -q "^fish/"; then
read -rp "An update is available. Update Fish? (y/N): " confirm
[[ "$confirm" =~ ^[Yy]$ ]] && sudo apt install -y fish
else
echo "Fish is already up to date."
fi
;;
dnf|yum)
sudo $PKG_MGR check-update || true
if $PKG_MGR list updates | grep -q "^fish"; then
read -rp "An update is available. Update Fish? (y/N): " confirm
[[ "$confirm" =~ ^[Yy]$ ]] && sudo $PKG_MGR update -y fish
else
echo "Fish is already up to date."
fi
;;
pacman)
sudo pacman -Sy --noconfirm
if pacman -Qu | grep -q "^fish"; then
read -rp "An update is available. Update Fish? (y/N): " confirm
[[ "$confirm" =~ ^[Yy]$ ]] && sudo pacman -S --noconfirm fish
else
echo "Fish is already up to date."
fi
;;
brew)
brew update
if brew outdated | grep -q "^fish"; then
read -rp "An update is available. Update Fish? (y/N): " confirm
[[ "$confirm" =~ ^[Yy]$ ]] && brew upgrade fish
else
echo "Fish is already up to date."
fi
;;
esac
}
# 🎣 Install Fisher plugin manager (stdin isolated)
install_fisher() {
echo "Installing Fisher plugin manager..."
curl -fsSL https://git.mycod.in/apt/fish_install/raw/branch/main/install_fisher.fish -o /tmp/install_fisher.fish
chmod +x /tmp/install_fisher.fish
fish /tmp/install_fisher.fish </dev/null
}
# 🧩 Install plugins via external .fish script (stdin isolated)
install_fish_plugins() {
echo "Installing recommended Fish plugins..."
curl -fsSL https://git.mycod.in/apt/fish_install/raw/branch/main/fish_plugins.fish -o /tmp/fish_plugins.fish
chmod +x /tmp/fish_plugins.fish
fish /tmp/fish_plugins.fish </dev/null
}
# 🏁 Main script
detect_platform
install_gpg_if_needed
if command -v fish &>/dev/null; then
echo "Fish shell is already installed."
update_fish
else
install_fish
fi
# Ask if user wants to install Fisher and plugins
read -rp "Do you want to install Fisher plugin manager and some plugins? (y/N): " install_plugins
if [[ "$install_plugins" =~ ^[Yy]$ ]]; then
install_fisher
install_fish_plugins
echo "Fisher and plugins installed!"
else
echo "Skipping plugin installation."
fi
echo "✅ Fish shell setup complete on $OS!"