This is a reference guide to set up a professional development environment on Windows for the Software, DevOps, or Cloud Engineer. This is not an exhaustive list, yet it is enough to get someone started.
First, get the Windows Terminal if you don’t have it already. It comes bundled with Windows 11 by default.
Note: I will be using “PowerShell” and “Windows Terminal” interchangeably in this guide.
In my opinion, it’s a good idea to have a package manager installed on Windows, regardless if you choose to operate with WSL or not. I’d recommend at least getting winget and chocolatey. There’s also scoop, but I haven’t personally used it myself. Ensure to do this from an Admin PowerShell.
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
Unless you want to stick with PowerShell, which perfectly fine, we will need a way to run bash scripts (.sh files) and potentially run Linux command line tools.
Very Important thing to note: If your company utilizes a VPN, WSL WILL NOT WORK. You can see why here: WSL2 Sucks in Ways People Ignore. Use Git-Bash Instead - YouTube. I personally had an issue due to my organization running a VPN and SSH keys on GitHub. If this is the case, Git Bash will be much easier to get up and running, especially if you are not familiar terminals.
You must be running Windows 10 version 2004 and higher (Build 19041 and higher) or Windows 11.
You can now install everything you need to run Windows Subsystem for Linux (WSL) by entering this command in an administrator PowerShell or Windows Command Prompt and then restarting your machine.
This command will enable the required optional components, download the latest Linux kernel, set WSL 2 as your default, and install a Linux distribution for you (Ubuntu by default, see below to change this).
wsl -l -v
This command will show which Linux distributions you have and which WSL version it’s on.
If you need to change versions, use the command:
wsl --set-version <distro name> 1 replacing with the name of the Linux distribution that you want to update.
You can also go to the Microsoft Store and download a distribution from there. I personally use Debian.
After you set up a UNIX username and password, ensure you perform an update.
sudo apt update && sudo apt upgrade
To open your WSL project in Windows File Explorer, enter:
explorer.exe . (In my .bashrc, I
alias ii=explorer.exe just like in PowerShell).
Be sure to add the period at the end of the command to open the current directory.
Microsoft recommends to store you project files on the same OS as the tools you plan to use (this can also cause problems with permissions). What I do is pin the
\\wsl$\<DistroName>\home\<UserName> filepath to Quick Access, make a directory called code, then put all my projects in there.
Using Git Bash does not include the overhead of a Linux VM running in parallel, such as with WSL. With Git Bash, you’ll still be working directly in the Windows file system and your home directory will be:
Installing Git for Windows will also install Git Bash.
winget install --id Git.Git -e --source winget
Open Windows Terminal > dropdown > Settings > Add a new profile:
- Name: Git Bash
- Command line: C:\Program Files\Git\bin\bash.exe (this may be different depending on your installation)
- Starting directory: %USERPROFILE%
- Icon: C:\Program Files\Git\mingw64\share\git\git-for-windows.ico
You’ll need git for downloading repositories and have version control over your source code.
If working in WSL 2, get git:
sudo apt install git
You already have git installed!
If your organization uses SSH, you’ll need to set up the ssh keys from the Windows side following these instructions:
- Open Services > OpenSSH Authentication Agent
- Set Startup Type to Automatic
- Click Apply, click Start and ensure Service status: Running
- You may need to restart the Windows Terminal, then follow GitHub’s guide for generating SSH keys
Another option is GitHub Desktop, which is a GUI alternative. Of course, this will only be viable if your company hosts their repositories on GitHub. You won’t have to deal with SSH keys and you’ll have the ability to directly sign into GitHub Enterprise. However, this does not install git, so the CLI commands will not work out of the box.
If your organization uses Amazon Web Services, you’ll need the AWS CLI.
If you have a different cloud provider:
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
sudo apt install unzip
See the documentation.
msiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2.msi
In PowerShell or Git Bash:
In order to provision container orchestration, VPCs, load balancers, etc. to your organization’s cloud provider, you’ll probably want to write the infrastructure as code (IaC) and to do that, you’ll probably need Terraform.
sudo apt-get install software-properties-common
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
sudo apt-get update && sudo apt-get install terraform
Download and install Terraform here: terraform.io/downloads.
Or, in PowerShell:
choco install terraform
In order to actually write code, we’ll need a code editor or IDE. If you chose WSL you’ll be able to access files in your Linux filesystem with Visual Studio Code and the Remote Development Extension Pack. Otherwise, feel free to use any IDE of your choice.
winget install -e --id Microsoft.VisualStudioCode
If you are a Java Developer, IntelliJ integrates with WSL as well.
Setup is minimal with Docker Desktop and WSL 2: Docker Desktop WSL 2 backend | Docker Documentation
In summary, just ensure WSL integration is checked and the correct Linux distro is set to default. You can check that by running this in PowerShell:
wsl -l -v
wsl --set-default <distro name>
docker command should work by default after the Docker Desktop installation.
Finally, here’s a copy of my aliases in my .bashrc that you can use in either WSL or Git Bash.
# Aliases alias ls="ls -ahN --group-directories-first --color=auto" alias cls="clear" alias w="curl wttr.in" alias ii="explorer.exe"
Feel free to read the links below to learn more about WSL and Git Bash. From here, everything else you would need is dependent the software that your company uses. Hopefully, this has given you a good foundation to start from.