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