2 min read

Windows Terminal and WSL Tips and Tricks

Windows Terminal and WSL Tips and Tricks

Did you find yourself ever having to set-up your development environment all the time? Well I did as well! What if I could tell you, you could save many minutes each day by automating this? Enter the world of Windows Terminal and WSL! 😎

Requirements

WSL Environment

For this post we will need an initialized WSL environment. To get started feel free to follow my previous blog post which gives you full control of where you want WSL to be installed!

Windows Terminal

If you don't have it yet (you should) go download Windows Terminal or install it with winget install Microsoft.WindowsTerminal

Tips and Tricks

Automating Development Environment Startup

Windows Terminal has a lot of CLI tricks up its sleeves, one of these is that you can use 1 single command to open up your entire development environment. Typically, I make a shortcut with the following command in it that opens up my environment, starts processes and lets me know how I can start my other programs:

CMD /C wt.exe --title "Services" wsl -d "Ubuntu-20.04" -- bash -c "cd ~/ && sudo service postgresql start && sudo service docker start && exec bash"; new-tab --title "Site" wsl -d "Ubuntu-20.04" -- bash -c "cd ~/frontend && sleep 3 && npm run dev"; split-pane -V wsl -d "Ubuntu-20.04" -- bash -c "cd ~/ && sleep 3 && npm run dev"; new-tab --title "Flow Engine" wsl -d "Ubuntu-20.04" -- bash -c "cd ~/backend/dotnet/API && sleep 1 && ./start.sh"; focus-tab -t 0

In the following sections I will dissect some of the tricks used above:

Starting a Service

When WSL boots, not all your services are started automatically. You want to do this but not always adapt the ~/.bashrc file, so add yourself to sudoers first so you don't have to enter a password all the time and then execute the line below on Windows.

# on WSL
echo "$USER ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/$USER

# on Windows
CMD /C wt.exe --title "Services" wsl -d "Ubuntu-20.04" -- bash -c "cd ~/ && sudo service postgresql start && sudo service docker start && exec bash";

Starting a Program

Besides starting a service you also might want to start your program automatically after navigating to a specific directory. The trick here is to make bash interactive by appending -i

CMD /C wt.exe --title "Services" wsl -d "Ubuntu-20.04" -- bash -i -c "cd ~/ && sudo service postgresql start && sudo service docker start && exec bash";

Printing to Console

You can print to console by just using echo, just don't forget to open an interactive shell afterwards so it doesn't closes.

CMD /C wt.exe --title "Demo" wsl -d "Ubuntu-20.04" -- bash -c "cd ~/ && echo 'hello world' && exec bash"

Open interactive Bash

Sometimes you want to have an interactive bash screen and not just your program running. For this just append exec bash behind it:

CMD /C wt.exe --title "Demo" wsl -d "Ubuntu-20.04" -- bash -c "cd ~/ && exec bash";