Skip to content

Instantly share code, notes, and snippets.

@0guzhan
Created August 21, 2025 14:32
Show Gist options
  • Save 0guzhan/a503923175419b9d2b2a778ccdd356ec to your computer and use it in GitHub Desktop.
Save 0guzhan/a503923175419b9d2b2a778ccdd356ec to your computer and use it in GitHub Desktop.
fat development vm with vagrant
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/focal64"
config.vm.provider "virtualbox" do |vb|
vb.gui = false
vb.memory = 8000
vb.cpus = 4
end
# Provision: Install XFCE, asdf, Go, and Java 21
config.vm.provision "shell", inline: <<-SHELL
set -e
# Update and upgrade
sudo apt update -y
sudo apt upgrade -y
# Install some tools & dependencies
sudo apt install -y zsh git curl unzip zip build-essential libssl-dev wget
# Install asdf
if [ ! -d "$HOME/.asdf" ]; then
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.18.0
echo '. $HOME/.asdf/asdf.sh' >> ~/.bashrc
echo '. $HOME/.asdf/completions/asdf.bash' >> ~/.bashrc
fi
# Ensure asdf is available in this shell
. $HOME/.asdf/asdf.sh
# Add Go and Java plugins
asdf plugin add golang || true
asdf plugin add java || true
asdf plugin add maven || true
asdf plugin add elixir || true
asdf plugin add erlang || true
asdf plugin add nodejs || true
LATEST_MAVEN="$(asdf list all maven | grep -v '^$' | grep -E '^3\.[0-9]+\.[0-9]+$' | sort -V | tail -n 1)"
LATEST_NODEJS="$(asdf list all nodejs | grep -v '^$' | grep -E '^22\.[0-9]+\.[0-9]+$' | sort -V | tail -n 1)"
LATEST_ELIXIR="$(asdf list all elixir | grep -v '^$' | grep -E '^1\.18\.[0-9]+$' | sort -V | tail -n 1)"
LATEST_ERLANG="$(asdf list all erlang | grep -v '^$' | grep -E '^28\.[0-9]+$' | sort -V | tail -n 1)"
LATEST_GO="$(asdf list all golang | grep -v '^$' | grep -E '^1\.22\.[0-9]+$' | sort -V | tail -1)"
LATEST_JAVA="$(asdf list all java | grep '^temurin-21\.' | sort -V | tail -1)"
asdf install golang "$LATEST_GO"
asdf global golang "$LATEST_GO"
asdf install java "$LATEST_JAVA"
asdf global java "$LATEST_JAVA"
asdf install elixir "$LATEST_ELIXIR"
asdf global elixir "$LATEST_ELIXIR"
asdf install erlang "$LATEST_ERLANG"
asdf global erlang "$LATEST_ERLANG"
asdf install nodejs "$LATEST_NODEJS"
asdf global nodejs "$LATEST_NODEJS"
asdf install maven "$LATEST_MAVEN"
asdf global maven "$LATEST_MAVEN"
# Set environment variables in .bashrc
echo 'export PATH="$HOME/.asdf/shims:$HOME/.asdf/bin:$PATH"' >> ~/.bashrc
echo 'export GOROOT=$(asdf where golang)' >> ~/.bashrc
echo 'export GOPATH=$HOME/go' >> ~/.bashrc
echo 'export PATH="$GOPATH/bin:$PATH"' >> ~/.bashrc
echo 'export JAVA_HOME=$(asdf where java)' >> ~/.bashrc
echo 'export PATH="$JAVA_HOME/bin:$PATH"' >> ~/.bashrc
echo 'export ELIXIR_HOME=$(asdf where elixir)' >> ~/.bashrc
echo 'export PATH="$ELIXIR_HOME/bin:$PATH"' >> ~/.bashrc
echo 'export ERLANG_HOME=$(asdf where erlang)' >> ~/.bashrc
echo 'export PATH="$ERLANG_HOME/bin:$PATH"' >> ~/.bashrc
echo 'export NODEJS_HOME=$(asdf where nodejs)' >> ~/.bashrc
echo 'export PATH="$NODEJS_HOME/bin:$PATH"' >> ~/.bashrc
echo 'export MAVEN_HOME=$(asdf where maven)' >> ~/.bashrc
echo 'export PATH="$MAVEN_HOME/bin:$PATH"' >> ~/.bashrc
# Apply for current shell as well
export PATH="$HOME/.asdf/shims:$HOME/.asdf/bin:$PATH"
export GOROOT="$(asdf where golang)"
export GOPATH="$HOME/go"
export PATH="$GOPATH/bin:$PATH"
export JAVA_HOME="$(asdf where java)"
export PATH="$JAVA_HOME/bin:$PATH"
export ELIXIR_HOME="$(asdf where elixir)"
export PATH="$ELIXIR_HOME/bin:$PATH"
export ERLANG_HOME="$(asdf where erlang)"
export PATH="$ERLANG_HOME/bin:$PATH"
export NODEJS_HOME="$(asdf where nodejs)"
export PATH="$NODEJS_HOME/bin:$PATH"
export MAVEN_HOME="$(asdf where maven)"
export PATH="$MAVEN_HOME/bin:$PATH"
# Create workspace directories
mkdir -p "$HOME/workspace/go"
mkdir -p "$HOME/workspace/java"
mkdir -p "$HOME/workspace/elixir"
mkdir -p "$HOME/workspace/erlang"
mkdir -p "$HOME/workspace/nodejs"
# Print versions
go version
java -version
elixir -v
erl -version
node -v
mvn -v
SHELL
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment