TL;DR
In this final post, I’ll show you how to take my Ubuntu WSL bootstrap and make it your own.Whether you want to add dotfiles, set up Git identity, or install completely different tools, this structure makes it easy to fork, extend, and personalize.
Why Customization Matters
This project works for me, but you should own your environment.
My goal from the beginning was to make this:
- Modular (each tool gets its own script)
- Transparent (readable Bash, no black-box logic)
- Easy to tweak (just edit configs or scripts)
This isn’t a framework, it’s a blueprint.
1. Add or Remove Packages
You can edit packages.conf to:
- Add tools you always install (e.g.
jq,htop,gh) - Remove things you don’t use (e.g.
yazi,btop)
SYSTEM_UTILS_APT=(
wget curl jq htop
)
DEV_TOOLS_SNAP=(
nvim
)
These arrays are passed into helper functions from utils.sh, which handle install logic cleanly.
2. Add Your Own Scripts
To add new tooling (like Go, Deno, or Rust), follow this pattern:
- Create a new file like
go-setup.sh - Add install logic using
apt, Snap, curl, or custom methods - Append it to the
SCRIPTS=(...)array inrun.sh
Example:
readonly SCRIPTS=(
...
"go-setup.sh"
)
3. Include Dotfiles or Shell Config
Want to bootstrap your .bashrc, .tmux.conf, or .gitconfig?
You can:
- Clone your dotfiles repo in a new
dotfiles-setup.sh - Symlink them or append to existing configs
- Set aliases, functions, or themes
This is also a good place to add default Git config, like:
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
4. Handle Secrets and Git Identity
Avoid committing private tokens or configs. Instead:
- Keep a local
~/.local-setup.shscript with personal logic - Add
.local-setup.shto your.gitignore - Source it at the end of
run.sh(if it exists)
if [ -f "$HOME/.local-setup.sh" ]; then
echo "Running local custom setup..."
bash "$HOME/.local-setup.sh"
fi
5. WSL-Specific Optimizations
Some tweaks worth adding if you run WSL full time:
- Create a
.wslconfigon Windows for better resource limits - Add mounts or performance tweaks in
/etc/wsl.conf - Disable unnecessary services that don’t apply in WSL
You can even add a WSL check to run.sh:
grep -qi microsoft /proc/version && echo "Running under WSL"
Fork It, Extend It, Own It
- This whole project is meant to be cloned, forked, and hacked.
- Start with mine, and make it match your exact stack and preferences.
- If you build something cool from this, I’d love to see it.
Final Recap
Over the last 5 posts, you’ve seen how I:
- Automated my WSL Ubuntu setup from scratch
- Wrote modular Bash scripts with smart defaults
- Bootstrapped a full terminal dev stack
- Installed Node, Python, and Docker with zero hassle
- Built a foundation that anyone can extend
Takeaway?
Automate the boring stuff, personalize the rest, and keep improving it.
Top comments (0)