Blog #5: QuickLoad - One Script to Set Up a Fresh WSL2 Box
Introduction
Every time I reset a WSL distro (which happens more often than I would like to admit), I end up searching for the same install commands all over again. The Docker GPG key steps, the nvm curl command, the Elasticsearch apt repo and so on. After doing this hunt one too many times, I put all of it into a single interactive bash script and called it QuickLoad.
You run ./dev_setup.sh on a fresh WSL2 Ubuntu box, pick what you want from a numbered menu, and it installs my usual stack for you.
The source code can be found here
NOTE: The repo is archived. I am not actively maintaining it, but it is self-contained and might still save someone (mostly future me) an afternoon of setup. More on that at the end.
What it installs
- Git
- Java 21 + Maven
- Docker Engine
- KinD (Kubernetes-in-Docker)
- Elastic Stack OSS 7.10.2
- VS Code + extensions
- Node/React (via nvm, with a create-react-app scaffold)
- PostgreSQL + SQLite
- Godot Engine
- Python 3 + venv
How it works
The script shows a numbered menu of components. You can pick a single one, a comma separated list, or "Install All". Each installer is idempotent, so if a component fails you can just re-run the script and retry it without breaking whatever already got installed.
Before installing anything it runs a few pre-flight checks:
- Ubuntu version (meant for WSL2 Ubuntu 22.04+)
- That you are actually on WSL
- Internet connectivity
- At least 20GB of free disk
Everything gets logged to ~/dev-setup-install.log and at the end you get a pass/skip/fail summary, so you know exactly which component to retry.
NOTE: Run it as a normal user, not root. The script calls sudo by itself where needed, and some tools (Elasticsearch for one) refuse to run as root anyway.
KinD extras
There is also a small KinD/ folder with cluster configs (like kind-3nodes.yaml) and some dashboard notes, for bringing up a local multi-node kubernetes cluster once Docker and KinD are in place.
Rough edges worth knowing
- Elastic is deliberately pinned to OSS 7.10.2. That is the last Apache-licensed release before Elastic changed their license, and I wanted to stay on the open source side of that line.
- The React step uses create-react-app, which is deprecated now. Node and npm install fine either way, and the sample app scaffold failing is non-fatal. For anything real I would use Vite instead.
- Godot's editor needs a display, so WSLg (Windows 11) is required to actually open it. The install itself works without one.
- Docker and Postgres prefer systemd. The script falls back to the
serviceshim if systemd is off, but if you want things to auto-start you need[boot] systemd=truein/etc/wsl.conffollowed by awsl --shutdown. - The last verification I did covered script syntax and menu logic, not a full end-to-end run on a fresh box. The "latest release" downloads (KinD, Godot, Node) are the most likely things to have silently broken via a 404 since then.
On archiving it
I have marked the repo as archived because I know myself well enough to admit I will not be keeping the install steps current. Setup scripts like this rot quietly - the script does not change, the internet underneath it does. But since it is a single file with no dependencies on anything of mine, it felt more useful left up as-is than deleted. If a component fails, the log and the summary should point you to the exact step, and fixing one installer function is usually a small edit.