Created
March 13, 2025 03:35
-
-
Save TitusRobyK/313d9236e91fe3277ee3adce855b65a4 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# setup.sh - Installs Homebrew, Java 11, Maven, nvm, and Node.js (LTS) on macOS (Apple Silicon) | |
# This script checks for existing installations and environment variable setups before proceeding. | |
# | |
# Usage: | |
# chmod +x setup.sh | |
# ./setup.sh | |
# or bash setup.sh | |
set -e # Exit on error | |
LOGFILE="setup.log" | |
exec > >(tee -a "$LOGFILE") 2>&1 | |
echo "###############################" | |
echo "Installation Script Started at $(date)" | |
echo "###############################" | |
### 1. Check & Install Homebrew | |
if command -v brew >/dev/null; then | |
echo "[INFO] Homebrew is already installed. Version: $(brew --version)" | |
else | |
echo "[INFO] Homebrew not found. Installing Homebrew..." | |
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" | |
# For Apple Silicon, add Homebrew to the PATH in your profile. | |
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile | |
eval "$(/opt/homebrew/bin/brew shellenv)" | |
fi | |
### 2. Check & Install OpenJDK 11 | |
if /usr/libexec/java_home -v 11 >/dev/null 2>&1; then | |
echo "[INFO] Java 11 already installed: $(/usr/libexec/java_home -v 11)" | |
else | |
echo "[INFO] Installing OpenJDK 11..." | |
brew install openjdk@11 | |
echo "[INFO] Creating symlink for Java 11 to match macOS JDK layout..." | |
sudo ln -sfn /opt/homebrew/opt/openjdk@11/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-11.jdk | |
fi | |
### 3. Configure Java Environment Variables in ~/.zshrc | |
if grep -q "export JAVA_HOME=" ~/.zshrc; then | |
echo "[INFO] JAVA_HOME is already set in ~/.zshrc" | |
else | |
echo "[INFO] Appending Java environment variables to ~/.zshrc..." | |
{ | |
echo "" | |
echo "# Java 11 settings" | |
echo 'export PATH="/opt/homebrew/opt/openjdk@11/bin:$PATH"' | |
echo 'export JAVA_HOME=$(/usr/libexec/java_home -v 11)' | |
} >> ~/.zshrc | |
fi | |
echo "[INFO] Verifying Java Installation:" | |
java -version | |
### 4. Check & Install Maven | |
if command -v mvn >/dev/null; then | |
echo "[INFO] Maven is already installed. Version info:" | |
mvn -version | head -n 1 | |
else | |
echo "[INFO] Installing Maven..." | |
brew install maven | |
fi | |
# Determine Maven version from Homebrew info | |
MAVEN_VERSION=$(brew info maven | awk 'NR==1{print $3}') | |
if [ -z "$MAVEN_VERSION" ]; then | |
echo "[WARN] Could not determine Maven version automatically." | |
MAVEN_VERSION="unknown_version" | |
else | |
echo "[INFO] Detected Maven version: $MAVEN_VERSION" | |
fi | |
### 5. Configure Maven Environment Variables in ~/.zshrc | |
if grep -q "export M2_HOME=" ~/.zshrc; then | |
echo "[INFO] Maven (M2_HOME) variables are already set in ~/.zshrc" | |
else | |
echo "[INFO] Appending Maven environment variables to ~/.zshrc..." | |
{ | |
echo "" | |
echo "# Maven settings" | |
echo "export M2_HOME=\"/opt/homebrew/Cellar/maven/$MAVEN_VERSION\"" | |
echo 'export MAVEN_HOME="$M2_HOME"' | |
echo 'export PATH="$M2_HOME/bin:$PATH"' | |
} >> ~/.zshrc | |
fi | |
echo "[INFO] Verifying Maven Installation:" | |
mvn -version | |
### 6. Check & Install nvm (Node Version Manager) | |
if [ -d "$HOME/.nvm" ]; then | |
echo "[INFO] nvm is already installed." | |
else | |
echo "[INFO] Installing nvm (Node Version Manager)..." | |
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash | |
fi | |
### 7. Configure nvm in ~/.zshrc | |
if grep -q "export NVM_DIR=" ~/.zshrc; then | |
echo "[INFO] nvm initialization already present in ~/.zshrc" | |
else | |
echo "[INFO] Appending nvm initialization to ~/.zshrc..." | |
{ | |
echo "" | |
echo "# nvm settings" | |
echo 'export NVM_DIR="$HOME/.nvm"' | |
echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm' | |
echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion' | |
} >> ~/.zshrc | |
fi | |
# Load nvm for the current script session | |
export NVM_DIR="$HOME/.nvm" | |
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" | |
### 8. Check & Install Node.js (LTS) via nvm | |
if command -v node >/dev/null; then | |
echo "[INFO] Node is already installed. Version: $(node -v)" | |
else | |
echo "[INFO] Installing Node.js (LTS) using nvm..." | |
nvm install --lts | |
nvm use --lts | |
fi | |
echo "[INFO] Verifying Node and npm Installation:" | |
node -v | |
npm -v | |
echo "###############################" | |
echo "Installation Script Completed at $(date)" | |
echo "Please restart your terminal or run 'source ~/.zshrc' to apply all environment variable changes." | |
echo "Log file: $LOGFILE" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment