You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
125 lines
3.2 KiB
125 lines
3.2 KiB
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
BLUE='\033[0;36m'
|
|
YELLOW='\033[0;33m'
|
|
NC='\033[0m'
|
|
|
|
# Temporary directory for downloads
|
|
TMP_DIR=$(mktemp -d)
|
|
trap 'rm -rf "$TMP_DIR"' EXIT
|
|
|
|
# Check for required commands
|
|
check_requirements() {
|
|
if ! command -v curl >/dev/null 2>&1; then
|
|
echo -e "${RED}Error: curl is required${NC}"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Detect system information
|
|
detect_system() {
|
|
local os arch suffix
|
|
|
|
case "$(uname -s)" in
|
|
Linux*) os="linux";;
|
|
Darwin*) os="darwin";;
|
|
*) echo -e "${RED}Unsupported OS${NC}"; exit 1;;
|
|
esac
|
|
|
|
case "$(uname -m)" in
|
|
x86_64)
|
|
arch="x64"
|
|
[ "$os" = "darwin" ] && suffix="_intel"
|
|
;;
|
|
aarch64|arm64)
|
|
arch="arm64"
|
|
[ "$os" = "darwin" ] && suffix="_apple_silicon"
|
|
;;
|
|
i386|i686)
|
|
arch="x86"
|
|
[ "$os" = "darwin" ] && { echo -e "${RED}32-bit not supported on macOS${NC}"; exit 1; }
|
|
;;
|
|
*) echo -e "${RED}Unsupported architecture${NC}"; exit 1;;
|
|
esac
|
|
|
|
echo "$os $arch $suffix"
|
|
}
|
|
|
|
# Download with progress
|
|
download() {
|
|
local url="$1"
|
|
local output="$2"
|
|
curl -#L "$url" -o "$output"
|
|
}
|
|
|
|
# Check and create installation directory
|
|
setup_install_dir() {
|
|
local install_dir="$1"
|
|
|
|
if [ ! -d "$install_dir" ]; then
|
|
mkdir -p "$install_dir" || {
|
|
echo -e "${RED}Failed to create installation directory${NC}"
|
|
exit 1
|
|
}
|
|
fi
|
|
}
|
|
|
|
# Main installation function
|
|
main() {
|
|
check_requirements
|
|
|
|
echo -e "${BLUE}Starting installation...${NC}"
|
|
|
|
# Detect system
|
|
read -r OS ARCH SUFFIX <<< "$(detect_system)"
|
|
echo -e "${GREEN}Detected: $OS $ARCH${NC}"
|
|
|
|
# Set installation directory
|
|
INSTALL_DIR="/usr/local/bin"
|
|
|
|
# Setup installation directory
|
|
setup_install_dir "$INSTALL_DIR"
|
|
|
|
# Get latest release info
|
|
echo -e "${BLUE}Fetching latest release information...${NC}"
|
|
LATEST_URL="https://api.github.com/repos/yuaotian/go-cursor-help/releases/latest"
|
|
|
|
# Construct binary name
|
|
BINARY_NAME="cursor-id-modifier_${OS}_${ARCH}${SUFFIX}"
|
|
echo -e "${BLUE}Looking for asset: $BINARY_NAME${NC}"
|
|
|
|
# Get download URL directly
|
|
DOWNLOAD_URL=$(curl -s "$LATEST_URL" | tr -d '\n' | grep -o "\"browser_download_url\": \"[^\"]*${BINARY_NAME}[^\"]*\"" | cut -d'"' -f4)
|
|
|
|
if [ -z "$DOWNLOAD_URL" ]; then
|
|
echo -e "${RED}Error: Could not find appropriate binary for $OS $ARCH${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
echo -e "${GREEN}Found matching asset: $BINARY_NAME${NC}"
|
|
echo -e "${BLUE}Downloading from: $DOWNLOAD_URL${NC}"
|
|
|
|
download "$DOWNLOAD_URL" "$TMP_DIR/cursor-id-modifier"
|
|
|
|
# Install binary
|
|
echo -e "${BLUE}Installing...${NC}"
|
|
chmod +x "$TMP_DIR/cursor-id-modifier"
|
|
sudo mv "$TMP_DIR/cursor-id-modifier" "$INSTALL_DIR/"
|
|
|
|
echo -e "${GREEN}Installation completed successfully!${NC}"
|
|
echo -e "${BLUE}Running cursor-id-modifier...${NC}"
|
|
|
|
# Run the program with sudo, preserving environment variables
|
|
export AUTOMATED_MODE=1
|
|
if ! sudo -E cursor-id-modifier; then
|
|
echo -e "${RED}Failed to run cursor-id-modifier${NC}"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
main
|