DEV Community

Cover image for run.sh Diaries #4: From Zero to Coding-Ready with Node, Python & Docker
LazyDoomSlayer
LazyDoomSlayer

Posted on

run.sh Diaries #4: From Zero to Coding-Ready with Node, Python & Docker

TL;DR
This post covers how my WSL bootstrap sets up Node.js, Python, and Docker and the core tools I use for frontend, backend, scripting, and container work.
Each tool has its own setup script, designed to be modular, idempotent, and fast.

Why These Tools?

My day-to-day work (and open source projects) span across:

  • Frontend apps (Vue, Nuxt, TypeScript)
  • Scripts, automation, CLI tools (Python)
  • Testing infrastructure, running services, and debugging (Docker)

So my bootstrap includes all of them by default and no more grabbing install commands from old gists or StackOverflow every time I set up WSL.

Node.js Setup – node-setup.sh

I install Node.js LTS (v22) using nvm because it's the most flexible method for switching versions.

What the script does:

  • Installs or updates NVM
  • Loads it into the shell
  • Installs Node.js v22 and sets it as default
  • Installs global tools: pnpm and yarn
  • Disables Yarn telemetry

Why this approach?

  • Versioning via NVM makes switching Node versions trivial
  • I use pnpm for speed and monorepos, and yarn where needed
nvm install 22
npm install -g pnpm yarn
Enter fullscreen mode Exit fullscreen mode

Output is printed to verify versions and check everything succeeded.

Python Setup – python-setup.sh

Python is everywhere and whether I’m scripting quick tools, using CLI apps, or running data scripts.

What this setup covers:

  • Installs Python via APT
  • Installs pip, venv, and upgrades setuptools, wheel, etc.
  • Prepares the environment for creating isolated Python workspaces

This setup is intentionally minimal and just enough to bootstrap Python for development, automation, and further customization.

Docker Setup – docker-setup.sh

I use Docker for containers when testing services or building isolated environments.

What the script does:

  • Installs Docker via APT (using official repo)
  • Adds the current user to the docker group (so no need for sudo)
  • Enables the Docker service

Why this matters:

  • WSL2 supports Docker with great performance
  • You shouldn’t have to use sudo to run docker in dev environments

Docker is optional, but including it makes the bootstrap future-proof if I need containers down the line.

One Bootstrap to Install Them All

All of these are automatically set up when I run:

./run.sh
Enter fullscreen mode Exit fullscreen mode

I don’t have to worry about:

  • Which method to use (nvm, APT, Snap, curl?)
  • Forgetting steps like adding users to Docker groups
  • Repeating things across different machines

Future Improvements

Things I might add later:

  • Version pinning via .nvmrc or .tool-versions
  • Python virtualenv examples (or Poetry setup)
  • Docker Compose install

Next: Make It Yours

In run.sh Diaries #5, I’ll show you how to:

  • Add your own scripts
  • Customize package lists
  • Include dotfiles or Git config
  • Extend the bootstrap for your own stack

Top comments (0)