diff --git a/bash/chatgpt/app_install.sh b/bash/chatgpt/app_install.sh new file mode 100755 index 0000000..cb9bd28 --- /dev/null +++ b/bash/chatgpt/app_install.sh @@ -0,0 +1,98 @@ +#!/usr/bin/env bash + +set -e + +# List of apps to install +APPS=( + git + curl + vim + htop +) + +# Detect package manager +detect_package_manager() { + if command -v apt >/dev/null 2>&1; then + PKG_MANAGER="apt" + elif command -v dnf >/dev/null 2>&1; then + PKG_MANAGER="dnf" + elif command -v yum >/dev/null 2>&1; then + PKG_MANAGER="yum" + elif command -v pacman >/dev/null 2>&1; then + PKG_MANAGER="pacman" + elif command -v zypper >/dev/null 2>&1; then + PKG_MANAGER="zypper" + elif command -v apk >/dev/null 2>&1; then + PKG_MANAGER="apk" + else + echo "Unsupported package manager." + exit 1 + fi +} + +# Check if package is installed +is_installed() { + local pkg="$1" + + case "$PKG_MANAGER" in + apt) + dpkg -s "$pkg" >/dev/null 2>&1 + ;; + dnf|yum) + rpm -q "$pkg" >/dev/null 2>&1 + ;; + pacman) + pacman -Qi "$pkg" >/dev/null 2>&1 + ;; + zypper) + rpm -q "$pkg" >/dev/null 2>&1 + ;; + apk) + apk info -e "$pkg" >/dev/null 2>&1 + ;; + esac +} + +# Install package +install_package() { + local pkg="$1" + + case "$PKG_MANAGER" in + apt) + sudo apt update + sudo apt install -y "$pkg" + ;; + dnf) + sudo dnf install -y "$pkg" + ;; + yum) + sudo yum install -y "$pkg" + ;; + pacman) + sudo pacman -Sy --noconfirm "$pkg" + ;; + zypper) + sudo zypper install -y "$pkg" + ;; + apk) + sudo apk add "$pkg" + ;; + esac +} + +detect_package_manager + +echo "Detected package manager: $PKG_MANAGER" +echo + +for app in "${APPS[@]}"; do + if is_installed "$app"; then + echo "[OK] $app is already installed." + else + echo "[INSTALL] Installing $app..." + install_package "$app" + fi +done + +echo +echo "Done." diff --git a/bash/chatgpt/prompt_apps.sh b/bash/chatgpt/prompt_apps.sh new file mode 100644 index 0000000..e69de29 diff --git a/bash/manus-ai/install-cli-apps.sh b/bash/manus-ai/install-cli-apps.sh new file mode 100755 index 0000000..7d7b918 --- /dev/null +++ b/bash/manus-ai/install-cli-apps.sh @@ -0,0 +1,193 @@ +#!/usr/bin/env bash +# ============================================================================= +# install-cli-apps.sh +# Detects the system package manager, then installs each app in APPS[]. +# Reports whether each app was already installed or freshly installed. +# ============================================================================= + +set -euo pipefail + +# ----------------------------------------------------------------------------- +# πŸ”§ CONFIGURATION β€” edit this list to suit your needs +# ----------------------------------------------------------------------------- +APPS=( + git + curl + wget + htop + tree + jq + unzip + ripgrep + fzf + bat + neofetch + tmux + vim +) + +# ----------------------------------------------------------------------------- +# Colour helpers +# ----------------------------------------------------------------------------- +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +CYAN='\033[0;36m' +BOLD='\033[1m' +RESET='\033[0m' + +info() { echo -e "${CYAN}${BOLD}[INFO]${RESET} $*"; } +success() { echo -e "${GREEN}${BOLD}[OK]${RESET} $*"; } +warn() { echo -e "${YELLOW}${BOLD}[SKIP]${RESET} $*"; } +error() { echo -e "${RED}${BOLD}[ERROR]${RESET} $*" >&2; } + +# ----------------------------------------------------------------------------- +# Detect package manager +# ----------------------------------------------------------------------------- +detect_package_manager() { + if command -v apt-get &>/dev/null; then PM="apt-get"; INSTALL_CMD="apt-get install -y" + elif command -v apt &>/dev/null; then PM="apt"; INSTALL_CMD="apt install -y" + elif command -v dnf &>/dev/null; then PM="dnf"; INSTALL_CMD="dnf install -y" + elif command -v yum &>/dev/null; then PM="yum"; INSTALL_CMD="yum install -y" + elif command -v pacman &>/dev/null; then PM="pacman"; INSTALL_CMD="pacman -S --noconfirm" + elif command -v zypper &>/dev/null; then PM="zypper"; INSTALL_CMD="zypper install -y" + elif command -v brew &>/dev/null; then PM="brew"; INSTALL_CMD="brew install" + elif command -v apk &>/dev/null; then PM="apk"; INSTALL_CMD="apk add" + elif command -v xbps-install &>/dev/null; then PM="xbps"; INSTALL_CMD="xbps-install -y" + elif command -v emerge &>/dev/null; then PM="emerge"; INSTALL_CMD="emerge" + else + error "No supported package manager found. Aborting." + exit 1 + fi +} + +# ----------------------------------------------------------------------------- +# Check if a binary is already available on PATH +# ----------------------------------------------------------------------------- +is_installed() { + command -v "$1" &>/dev/null +} + +# ----------------------------------------------------------------------------- +# Privilege escalation β€” skip sudo for root or brew +# ----------------------------------------------------------------------------- +maybe_sudo() { + if [[ "$PM" == "brew" ]] || [[ "$(id -u)" -eq 0 ]]; then + "$@" + else + sudo "$@" + fi +} + +# ----------------------------------------------------------------------------- +# Update package index (once, where applicable) +# ----------------------------------------------------------------------------- +update_index() { + case "$PM" in + apt-get|apt) + info "Updating package index (apt)…" + maybe_sudo apt-get update -qq + ;; + dnf|yum) + info "Refreshing metadata (${PM})…" + maybe_sudo "$PM" makecache -q + ;; + pacman) + info "Syncing package database (pacman)…" + maybe_sudo pacman -Sy --noconfirm + ;; + zypper) + info "Refreshing repos (zypper)…" + maybe_sudo zypper refresh -q + ;; + apk) + info "Updating index (apk)…" + maybe_sudo apk update -q + ;; + brew) + info "Running brew update…" + brew update --quiet + ;; + *) + : # xbps, emerge β€” no pre-update needed here + ;; + esac +} + +# ----------------------------------------------------------------------------- +# Install a single package +# ----------------------------------------------------------------------------- +install_package() { + local pkg="$1" + # shellcheck disable=SC2086 + maybe_sudo $INSTALL_CMD "$pkg" +} + +# ----------------------------------------------------------------------------- +# Main +# ----------------------------------------------------------------------------- +main() { + echo "" + echo -e "${BOLD}======================================${RESET}" + echo -e "${BOLD} CLI App Installer ${RESET}" + echo -e "${BOLD}======================================${RESET}" + echo "" + + detect_package_manager + info "Detected package manager: ${BOLD}${PM}${RESET}" + echo "" + + update_index + echo "" + + local already_installed=() + local newly_installed=() + local failed=() + + for app in "${APPS[@]}"; do + if is_installed "$app"; then + warn "${app} is already installed β€” skipping." + already_installed+=("$app") + else + info "Installing ${app}…" + if install_package "$app" &>/dev/null; then + success "${app} installed successfully." + newly_installed+=("$app") + else + error "Failed to install ${app}." + failed+=("$app") + fi + fi + done + + # ── Summary ──────────────────────────────────────────────────────────────── + echo "" + echo -e "${BOLD}======================================${RESET}" + echo -e "${BOLD} Summary ${RESET}" + echo -e "${BOLD}======================================${RESET}" + + echo -e "\n${GREEN}${BOLD}Newly installed (${#newly_installed[@]}):${RESET}" + if [[ ${#newly_installed[@]} -eq 0 ]]; then + echo " (none)" + else + for app in "${newly_installed[@]}"; do echo " βœ” $app"; done + fi + + echo -e "\n${YELLOW}${BOLD}Already installed (${#already_installed[@]}):${RESET}" + if [[ ${#already_installed[@]} -eq 0 ]]; then + echo " (none)" + else + for app in "${already_installed[@]}"; do echo " ● $app"; done + fi + + if [[ ${#failed[@]} -gt 0 ]]; then + echo -e "\n${RED}${BOLD}Failed (${#failed[@]}):${RESET}" + for app in "${failed[@]}"; do echo " ✘ $app"; done + echo "" + exit 1 + fi + + echo "" +} + +main "$@"