Skip to content

Instantly share code, notes, and snippets.

@TitusRobyK
Created March 13, 2025 03:35
Show Gist options
  • Save TitusRobyK/313d9236e91fe3277ee3adce855b65a4 to your computer and use it in GitHub Desktop.
Save TitusRobyK/313d9236e91fe3277ee3adce855b65a4 to your computer and use it in GitHub Desktop.
#!/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