From 0c512d7a4bfe56803846ce3a07cb79837c2fd1d8 Mon Sep 17 00:00:00 2001 From: Ade Thompson Date: Sat, 9 Aug 2025 08:58:36 +0100 Subject: [PATCH] Amended --- fish_installer.sh | 79 ++++++++++++++--------------------------------- 1 file changed, 24 insertions(+), 55 deletions(-) diff --git a/fish_installer.sh b/fish_installer.sh index ed24765..0ba5311 100644 --- a/fish_installer.sh +++ b/fish_installer.sh @@ -1,35 +1,14 @@ #!/bin/bash set -euo pipefail -# -- utils --------------------------------------------------------- -prompt_yn() { - # usage: prompt_yn "Question (y/N): " N - local prompt="${1:-Proceed (y/N): }" - local default="${2:-N}" - local ans="" - if [ -t 0 ] && [ -t 1 ]; then - # interactive: read from the TTY (not stdin) - read -r -p "$prompt" ans /dev/null; then - if prompt_yn "Homebrew not found. Install it now? (y/N): " N; 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 + /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)" fi elif command -v apt &>/dev/null; then OS="debian"; PKG_MGR="apt" @@ -44,7 +23,7 @@ detect_platform() { fi } -# -- debian repo/key ----------------------------------------------- +# -------- Debian repo/key -------- install_gpg_if_needed() { if [[ "${OS}" == "debian" ]] && ! command -v gpg &>/dev/null; then sudo apt update && sudo apt install -y gnupg @@ -59,7 +38,7 @@ add_fish_repo_debian() { sudo apt update } -# -- install/update fish ------------------------------------------- +# -------- Install/Update fish -------- install_fish() { case "$OS" in debian) add_fish_repo_debian; sudo apt install -y fish ;; @@ -69,49 +48,40 @@ install_fish() { esac } -update_fish() { +update_fish_if_available() { case "$PKG_MGR" in apt) sudo apt update if apt list --upgradable 2>/dev/null | grep -q "^fish/"; then - if prompt_yn "Fish update available. Update now? (y/N): " N; then - sudo apt install -y fish - fi + sudo apt install -y fish fi ;; dnf|yum) sudo "$PKG_MGR" check-update || true if "$PKG_MGR" list updates | grep -q "^fish"; then - if prompt_yn "Fish update available. Update now? (y/N): " N; then - sudo "$PKG_MGR" update -y fish - fi + sudo "$PKG_MGR" update -y fish fi ;; pacman) sudo pacman -Sy --noconfirm if pacman -Qu | grep -q "^fish"; then - if prompt_yn "Fish update available. Update now? (y/N): " N; then - sudo pacman -S --noconfirm fish - fi + sudo pacman -S --noconfirm fish fi ;; brew) brew update if brew outdated | grep -q "^fish"; then - if prompt_yn "Fish update available. Update now? (y/N): " N; then - brew upgrade fish - fi + brew upgrade fish fi ;; esac } -# -- fisher & plugins ---------------------------------------------- +# -------- Fisher & plugins (stdin isolated) -------- install_fisher() { 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 - # prevent fisher from reading our script via stdin fish /tmp/install_fisher.fish /dev/null 2>&1 + + if [[ "${FISH_VERBOSE:-0}" == "1" ]]; then + fish /tmp/fish_plugins.fish /dev/null 2>&1 + fi } -# -- main ----------------------------------------------------------- +# -------- Main -------- detect_platform install_gpg_if_needed if command -v fish &>/dev/null; then - echo "Fish shell is already installed." - update_fish + update_fish_if_available else install_fish fi -if prompt_yn "Install Fisher plugin manager and recommended plugins? (y/N): " N; then - install_fisher - install_fish_plugins - echo "Fisher and plugins installed!" -else - echo "Skipping plugin installation." -fi +# Always ensure Fisher and plugins are present (idempotent) +install_fisher +install_fish_plugins -echo "✅ Fish shell setup complete on ${OS}!" \ No newline at end of file +echo "✅ Fish + Fisher + plugins ensured on ${OS}." \ No newline at end of file