diff --git a/bin/.local/bin/setup.sh b/bin/.local/bin/setup.sh index c81e95a..9e0e1bc 100755 --- a/bin/.local/bin/setup.sh +++ b/bin/.local/bin/setup.sh @@ -9,138 +9,138 @@ PLATFORM="" # -------- OS detection -------- if [[ "$OS" == "Darwin" ]]; then - PLATFORM="macos" + PLATFORM="macos" elif [[ "$OS" == "FreeBSD" ]]; then - PLATFORM="freebsd" + PLATFORM="freebsd" elif [[ "$OS" == "Linux" ]]; then - if [[ -r /etc/os-release ]]; then - # shellcheck disable=SC1091 - . /etc/os-release - fi + if [[ -r /etc/os-release ]]; then + # shellcheck disable=SC1091 + . /etc/os-release + fi - is_arch=0 - case "${ID:-}" in - arch|endeavouros) is_arch=1 ;; - esac - if [[ $is_arch -eq 0 && -n "${ID_LIKE:-}" ]] && echo "$ID_LIKE" | grep -qi arch; then - is_arch=1 - fi + is_arch=0 + case "${ID:-}" in + arch | endeavouros) is_arch=1 ;; + esac + if [[ $is_arch -eq 0 && -n "${ID_LIKE:-}" ]] && echo "$ID_LIKE" | grep -qi arch; then + is_arch=1 + fi - is_fedora=0 - case "${ID:-}" in + is_fedora=0 + case "${ID:-}" in fedora) is_fedora=1 ;; - esac - if [[ $is_fedora -eq 0 && -n "${ID_LIKE:-}" ]] && echo "$ID_LIKE" | grep -qiE 'fedora|rhel'; then - is_fedora=1 - fi + esac + if [[ $is_fedora -eq 0 && -n "${ID_LIKE:-}" ]] && echo "$ID_LIKE" | grep -qiE 'fedora|rhel'; then + is_fedora=1 + fi - if [[ $is_arch -eq 1 ]]; then - PLATFORM="arch" - elif [[ $is_fedora -eq 1 ]]; then - PLATFORM="fedora" - else - echo "Unsupported Linux distro (ID=${ID:-unknown}, ID_LIKE=${ID_LIKE:-unknown})." - exit 1 - fi + if [[ $is_arch -eq 1 ]]; then + PLATFORM="arch" + elif [[ $is_fedora -eq 1 ]]; then + PLATFORM="fedora" + else + echo "Unsupported Linux distro (ID=${ID:-unknown}, ID_LIKE=${ID_LIKE:-unknown})." + exit 1 + fi else - echo "Unsupported OS: $OS" - exit 1 + echo "Unsupported OS: $OS" + exit 1 fi # -------- Helpers -------- install_pacman() { - local pkgs=("$@") - log "pacman install: ${pkgs[*]}" - sudo pacman -Sy --needed --noconfirm "${pkgs[@]}" + local pkgs=("$@") + log "pacman install: ${pkgs[*]}" + sudo pacman -Sy --needed --noconfirm "${pkgs[@]}" } install_dnf() { - local pkgs=("$@") - log "dnf install: ${pkgs[*]}" - sudo dnf install -y "${pkgs[@]}" + local pkgs=("$@") + log "dnf install: ${pkgs[*]}" + sudo dnf install -y "${pkgs[@]}" } brew_install() { - local pkgs=("$@") - log "brew install: ${pkgs[*]}" - brew install "${pkgs[@]}" + local pkgs=("$@") + log "brew install: ${pkgs[*]}" + brew install "${pkgs[@]}" } brew_cask() { - local pkgs=("$@") - log "brew install --cask: ${pkgs[*]}" - brew install --cask "${pkgs[@]}" + local pkgs=("$@") + log "brew install --cask: ${pkgs[*]}" + brew install --cask "${pkgs[@]}" } install_pkg() { - local pkgs=("$@") - log "pkg install: ${pkgs[*]}" - sudo pkg install -y "${pkgs[@]}" + local pkgs=("$@") + log "pkg install: ${pkgs[*]}" + sudo pkg install -y "${pkgs[@]}" } # Best-effort install loops (skip missing packages cleanly) dnf_install_best_effort() { - local pkgs=("$@") - for p in "${pkgs[@]}"; do - if sudo dnf info "$p" >/dev/null 2>&1; then - install_dnf "$p" - else - log "Skipping (dnf not found): $p" - fi - done + local pkgs=("$@") + for p in "${pkgs[@]}"; do + if sudo dnf info "$p" >/dev/null 2>&1; then + install_dnf "$p" + else + log "Skipping (dnf not found): $p" + fi + done } pacman_install_best_effort() { - local pkgs=("$@") - for p in "${pkgs[@]}"; do - if pacman -Si "$p" >/dev/null 2>&1; then - install_pacman "$p" - else - log "Skipping (pacman not found): $p" - fi - done + local pkgs=("$@") + for p in "${pkgs[@]}"; do + if pacman -Si "$p" >/dev/null 2>&1; then + install_pacman "$p" + else + log "Skipping (pacman not found): $p" + fi + done } pkg_install_best_effort() { - local pkgs=("$@") - for p in "${pkgs[@]}"; do - if pkg search -q "^${p}$" >/dev/null 2>&1; then - install_pkg "$p" - else - log "Skipping (pkg not found): $p" - fi - done + local pkgs=("$@") + for p in "${pkgs[@]}"; do + if pkg search -q "^${p}$" >/dev/null 2>&1; then + install_pkg "$p" + else + log "Skipping (pkg not found): $p" + fi + done } aur_install_if_possible() { - local pkgs=("$@") - if have yay; then - log "AUR install via yay: ${pkgs[*]}" - yay -S --needed --noconfirm "${pkgs[@]}" - else - log "Skipping AUR packages (yay not found): ${pkgs[*]}" - fi + local pkgs=("$@") + if have yay; then + log "AUR install via yay: ${pkgs[*]}" + yay -S --needed --noconfirm "${pkgs[@]}" + else + log "Skipping AUR packages (yay not found): ${pkgs[*]}" + fi } ensure_brew() { - if have brew; then return 0; fi - log "Homebrew not found; installing Homebrew..." - /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" + if have brew; then return 0; fi + log "Homebrew not found; installing Homebrew..." + /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" - if [[ -x /opt/homebrew/bin/brew ]]; then - eval "$(/opt/homebrew/bin/brew shellenv)" - elif [[ -x /usr/local/bin/brew ]]; then - eval "$(/usr/local/bin/brew shellenv)" - fi + if [[ -x /opt/homebrew/bin/brew ]]; then + eval "$(/opt/homebrew/bin/brew shellenv)" + elif [[ -x /usr/local/bin/brew ]]; then + eval "$(/usr/local/bin/brew shellenv)" + fi } ensure_flathub() { - if ! have flatpak; then - log "flatpak not installed; skipping flathub apps." - return 0 - fi - log "Ensuring Flathub remote exists..." - sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo + if ! have flatpak; then + log "flatpak not installed; skipping flathub apps." + return 0 + fi + log "Ensuring Flathub remote exists..." + sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo } # -------- Package sets (portable intent) -------- @@ -153,54 +153,55 @@ EXTRA_CLI=(fd editorconfig git) DEV_TOOLS_LINUX=(cmake libtool make gcc gcc-c++) UTILS_LINUX=(gnuplot graphviz shfmt shellcheck pandoc) -DESKTOP_LINUX=(kitty alacritty dino syncthing snapcast) +DESKTOP_LINUX=(kitty alacritty dino syncthing) FEDORA_EXTRAS=( - gnome-extensions-app - gnome-tweaks - spice-vdagent - kernel-modules-extra - pinentry-tty - NetworkManager-openvpn-gnome - openvpn - openvpn3-client - libpq-devel - postgresql - pass-otp - chromium - google-chrome-stable + gnome-extensions-app + gnome-tweaks + spice-vdagent + kernel-modules-extra + pinentry-tty + NetworkManager-openvpn-gnome + openvpn + openvpn3-client + libpq-devel + postgresql + pass-otp + chromium + google-chrome-stable ) ARCH_EXTRAS=( - gnome-extensions-app - gnome-tweaks - spice-vdagent - linux-headers - pinentry - networkmanager-openvpn - openvpn - postgresql-libs - postgresql - pass-otp - chromium + gnome-extensions-app + gnome-tweaks + spice-vdagent + linux-headers + pinentry + networkmanager-openvpn + openvpn + postgresql-libs + postgresql + pass-otp + chromium + snapcast ) MAC_BREW_PKGS=( - fzf direnv stow pass just - fd editorconfig git - cmake libtool - gnuplot graphviz shfmt shellcheck pandoc - postgresql - syncthing - pinentry-mac + fzf direnv stow pass just + fd editorconfig git + cmake libtool + gnuplot graphviz shfmt shellcheck pandoc + postgresql + syncthing + pinentry-mac ) MAC_CASKS=( - kitty - alacritty - slack - google-chrome - chromium + kitty + alacritty + slack + google-chrome + chromium ) # FreeBSD name mapping (best-effort) @@ -213,14 +214,14 @@ MAC_CASKS=( # - direnv exists. FREEBSD_CORE=(fzf direnv stow just password-store) FREEBSD_EXTRA=(fd-find editorconfig-core-c git) -FREEBSD_DEV=(cmake libtool gmake llvm) # gmake instead of make; llvm as a sane default toolchain +FREEBSD_DEV=(cmake libtool gmake llvm) # gmake instead of make; llvm as a sane default toolchain FREEBSD_UTILS=(gnuplot graphviz shfmt shellcheck pandoc) -FREEBSD_SECURITY=(gnupg pinentry) # helpful for pass +FREEBSD_SECURITY=(gnupg pinentry) # helpful for pass FREEBSD_MISC=(postgresql16-client syncthing) # -------- Install per-platform -------- case "$PLATFORM" in - fedora) +fedora) log "Platform: Fedora. Refreshing + upgrading..." sudo dnf -y upgrade --refresh || true @@ -232,12 +233,12 @@ case "$PLATFORM" in ensure_flathub if have flatpak; then - log "Optional: Slack via Flatpak" - sudo flatpak install -y flathub com.slack.Slack || true + log "Optional: Slack via Flatpak" + sudo flatpak install -y flathub com.slack.Slack || true fi ;; - arch) +arch) log "Platform: EndeavourOS/Arch. Updating package databases..." sudo pacman -Sy --noconfirm @@ -250,7 +251,7 @@ case "$PLATFORM" in aur_install_if_possible google-chrome slack-desktop || true ;; - macos) +macos) log "Platform: macOS. Ensuring Homebrew..." ensure_brew @@ -261,12 +262,12 @@ case "$PLATFORM" in brew_cask "${MAC_CASKS[@]}" || true if [[ -f "$(brew --prefix)/opt/fzf/install" ]]; then - log "Tip: run fzf install helper if you want keybindings/completion:" - echo " $(brew --prefix)/opt/fzf/install" + log "Tip: run fzf install helper if you want keybindings/completion:" + echo " $(brew --prefix)/opt/fzf/install" fi ;; - freebsd) +freebsd) log "Platform: FreeBSD. Updating pkg metadata..." sudo pkg update -f