feat: mac setup script
This commit is contained in:
268
install.sh
Normal file
268
install.sh
Normal file
@@ -0,0 +1,268 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Mac Setup Script - Install Git, Node.js, and Python
|
||||
# This script will install essential development tools on macOS
|
||||
|
||||
set -e # Exit on any error
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Function to print colored output
|
||||
print_status() {
|
||||
echo -e "${BLUE}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
print_success() {
|
||||
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||||
}
|
||||
|
||||
print_warning() {
|
||||
echo -e "${YELLOW}[WARNING]${NC} $1"
|
||||
}
|
||||
|
||||
print_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
# Function to check if command exists
|
||||
command_exists() {
|
||||
command -v "$1" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
# Function to check if running on macOS
|
||||
check_macos() {
|
||||
if [[ "$OSTYPE" != "darwin"* ]]; then
|
||||
print_error "This script is designed for macOS only"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to install Homebrew if not present
|
||||
install_homebrew() {
|
||||
if command_exists brew; then
|
||||
print_success "Homebrew is already installed"
|
||||
print_status "Updating Homebrew..."
|
||||
brew update
|
||||
else
|
||||
print_status "Installing Homebrew..."
|
||||
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
||||
|
||||
# Add Homebrew to PATH for Apple Silicon Macs
|
||||
if [[ $(uname -m) == "arm64" ]]; then
|
||||
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
|
||||
eval "$(/opt/homebrew/bin/brew shellenv)"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to install Git
|
||||
install_git() {
|
||||
if command_exists git; then
|
||||
print_success "Git is already installed: $(git --version)"
|
||||
else
|
||||
print_status "Installing Git..."
|
||||
brew install git
|
||||
print_success "Git installed successfully: $(git --version)"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to install Node.js
|
||||
install_nodejs() {
|
||||
if command_exists node; then
|
||||
print_success "Node.js is already installed: $(node --version)"
|
||||
print_status "Node.js version: $(node --version)"
|
||||
print_status "npm version: $(npm --version)"
|
||||
else
|
||||
print_status "Installing Node.js..."
|
||||
brew install node
|
||||
print_success "Node.js installed successfully: $(node --version)"
|
||||
print_status "npm version: $(npm --version)"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to install Python
|
||||
install_python() {
|
||||
if command_exists python3; then
|
||||
print_success "Python3 is already installed: $(python3 --version)"
|
||||
else
|
||||
print_status "Installing Python..."
|
||||
brew install python
|
||||
print_success "Python installed successfully: $(python3 --version)"
|
||||
fi
|
||||
|
||||
# Check if pip is available
|
||||
if command_exists pip3; then
|
||||
print_success "pip3 is available: $(pip3 --version)"
|
||||
else
|
||||
print_warning "pip3 not found, installing..."
|
||||
python3 -m ensurepip --upgrade
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to install synchan
|
||||
install_synchan() {
|
||||
local synchan_dir="$HOME/synchan"
|
||||
|
||||
if [ -d "$synchan_dir" ]; then
|
||||
print_warning "Synchan directory already exists at $synchan_dir"
|
||||
read -p "Do you want to remove the existing directory and reinstall? [y/N]: " -n 1 -r
|
||||
echo ""
|
||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||
print_status "Removing existing synchan directory..."
|
||||
rm -rf "$synchan_dir"
|
||||
else
|
||||
print_status "Skipping synchan installation"
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
|
||||
print_status "Installing synchan from https://github.com/lancatlin/synchan..."
|
||||
|
||||
# Check if git is available
|
||||
if ! command_exists git; then
|
||||
print_error "Git is required to install synchan. Please install Git first."
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Check if yarn is available
|
||||
if ! command_exists yarn; then
|
||||
print_status "Yarn not found, installing yarn..."
|
||||
if command_exists npm; then
|
||||
npm install -g yarn
|
||||
else
|
||||
print_error "npm is required to install yarn. Please install Node.js first."
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Clone the repository
|
||||
print_status "Cloning synchan repository..."
|
||||
if git clone https://github.com/lancatlin/synchan.git "$synchan_dir"; then
|
||||
print_success "Repository cloned successfully"
|
||||
else
|
||||
print_error "Failed to clone synchan repository"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Navigate to the directory and install dependencies
|
||||
print_status "Installing dependencies with yarn..."
|
||||
cd "$synchan_dir"
|
||||
|
||||
if yarn install; then
|
||||
print_success "Dependencies installed successfully"
|
||||
print_success "Synchan installed at: $synchan_dir"
|
||||
print_status "To use synchan, navigate to: cd $synchan_dir"
|
||||
else
|
||||
print_error "Failed to install dependencies with yarn"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Return to original directory
|
||||
cd - > /dev/null
|
||||
}
|
||||
|
||||
# Function to install additional useful tools
|
||||
install_additional_tools() {
|
||||
print_status "Installing additional useful development tools..."
|
||||
|
||||
# Install common tools
|
||||
brew install curl wget jq tree
|
||||
|
||||
# Install development tools
|
||||
brew install --cask visual-studio-code
|
||||
brew install --cask iterm2
|
||||
|
||||
print_success "Additional tools installed"
|
||||
}
|
||||
|
||||
# Function to verify installations
|
||||
verify_installations() {
|
||||
print_status "Verifying installations..."
|
||||
|
||||
echo ""
|
||||
print_status "=== Installation Summary ==="
|
||||
|
||||
if command_exists git; then
|
||||
print_success "✓ Git: $(git --version)"
|
||||
else
|
||||
print_error "✗ Git installation failed"
|
||||
fi
|
||||
|
||||
if command_exists node; then
|
||||
print_success "✓ Node.js: $(node --version)"
|
||||
print_success "✓ npm: $(npm --version)"
|
||||
else
|
||||
print_error "✗ Node.js installation failed"
|
||||
fi
|
||||
|
||||
if command_exists python3; then
|
||||
print_success "✓ Python3: $(python3 --version)"
|
||||
if command_exists pip3; then
|
||||
print_success "✓ pip3: $(pip3 --version)"
|
||||
fi
|
||||
else
|
||||
print_error "✗ Python3 installation failed"
|
||||
fi
|
||||
|
||||
if command_exists brew; then
|
||||
print_success "✓ Homebrew: $(brew --version | head -n1)"
|
||||
else
|
||||
print_error "✗ Homebrew installation failed"
|
||||
fi
|
||||
|
||||
# Check synchan installation
|
||||
if [ -d "$HOME/synchan" ]; then
|
||||
print_success "✓ Synchan: Installed at $HOME/synchan"
|
||||
else
|
||||
print_warning "⚠ Synchan: Not installed"
|
||||
fi
|
||||
}
|
||||
|
||||
# Main execution
|
||||
main() {
|
||||
print_status "Starting Mac development environment setup..."
|
||||
print_status "This script will install: Git, Node.js, Python, Homebrew, and optionally synchan"
|
||||
echo ""
|
||||
|
||||
# Check if running on macOS
|
||||
check_macos
|
||||
|
||||
# Install Homebrew first (required for other packages)
|
||||
install_homebrew
|
||||
|
||||
# Install core development tools
|
||||
install_git
|
||||
install_nodejs
|
||||
install_python
|
||||
|
||||
# Ask if user wants to install synchan
|
||||
echo ""
|
||||
read -p "Do you want to install synchan from GitHub? [y/N]: " -n 1 -r
|
||||
echo ""
|
||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||
install_synchan
|
||||
fi
|
||||
|
||||
# Ask if user wants additional tools
|
||||
echo ""
|
||||
read -p "Do you want to install additional development tools (VS Code, iTerm2, etc.)? [y/N]: " -n 1 -r
|
||||
echo ""
|
||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||
install_additional_tools
|
||||
fi
|
||||
|
||||
# Verify all installations
|
||||
verify_installations
|
||||
|
||||
echo ""
|
||||
print_success "Setup complete! Your Mac development environment is ready."
|
||||
print_status "You may need to restart your terminal or run 'source ~/.zprofile' to use the new tools."
|
||||
}
|
||||
|
||||
# Run main function
|
||||
main "$@"
|
||||
Reference in New Issue
Block a user