add: manus-ai and other chatgpt related bash scripts
This commit is contained in:
Executable
+98
@@ -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."
|
||||
Executable
+193
@@ -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 "$@"
|
||||
Reference in New Issue
Block a user