Previous editions Link to heading

Why would I do this? Link to heading

In this guide, I will show you how I (primarily a Linux user) setup a Windows workstation to get:

  • a nice terminal emulator (Windows Terminal)
  • a package manager to automate installing and updating software (winget)
  • a set of desktop utilities for Windows (PowerToys)
  • a UNIX-like work environment (Windows Subsystem for Linux)
  • a good text editor that won’t mess with formatting (Visual Studio Code)
  • a solution to create and manage virtual machines (VirtualBox and Vagrant)

Changes since 2020 Link to heading

Purpose201720202023
Package managerChocolateyWingetWinget
Terminal EmulatorCmderWindows TerminalWindows Terminal
ShellPowerShell 5.1PowerShell 7.0PowerShell 7.3
Text EditorNotepad++Visual Studio CodeVSCodium
UNIX EnvironmentMSYS2Windows Subsystem for LinuxN/A
VirtualizationVirtualBox + VagrantVirtualBox + VagrantN/A
  • Winget has gained much traction, with most popular applications available as installable packages;
  • Windows Terminal made steady progress as far as performance, Unicode support and configuration options are concerned;
  • VSCode and its derivatives (Code OSS, VSCodium) has become one of the de-facto industry standards for text editing, in competition with JetBrains IDEs;
  • LSP and DAP have been widely adopted by language and tooling maintainers, which benefits existing (Emacs, Vim, Neovim) and emerging (Kakoune, Helix, Zed) editors.

I scarcely have to do Windows-specific development nowadays, so have few uses for:

  • locally running virtual machines;
  • Windows Subsystem for Linux (WSL / WSL2).

Other than that, the setup is mostly the same as 2020, with some tweaks and QoL improvements here and there.

OS Information Link to heading

  • Windows 10
  • Professional Edition
  • 64-bit

Step 1: Install the Winget package manager Link to heading

Winget is now the official Windows Package Manager, with open source repositories for:

Once installed, winget can be used from any terminal to install, update or remove packages:

$ winget search python

Step 2: Install the Windows Terminal emulator and shell session manager Link to heading

Windows Terminal is another open source nicety that provides a native terminal emulator and shell session manager, with all the features you would expect:

  • tabs and panes;
  • color schemes;
  • font selection;
  • PowerShell integration.

It is available on Winget as Microsoft.WindowsTerminal:

$ winget install Microsoft.WindowsTerminal

Step 3: Install (or upgrade) PowerShell Link to heading

PowerShell has come a long way since being a quirky shell abstraction over Win32 / .Net APIs. I’d recommend installing the latest stable version available from Winget to benefit from the latest features and integrations.

It is available on Winget as Microsoft.PowerShell:

$ winget install Microsoft.PowerShell

PowerShell quality of life improvements Link to heading

For a nicer experience, I’d recommend installing PSReadline and Oh My Posh:

Oh My Posh provides helpers to install patched fonts with support for Unicode characters and extra glyphs such as Powerline elements (widely used in shell prompts and command-line interfaces).

Step 4: Install the PowerToys desktop utilities Link to heading

Microsoft PowerToys date back to Windows 95, and provide:

  • utilities to tweak system settings;
  • convenient keyboard shortcuts;
  • user interface customizations;
  • utilities to rename files, work with images, setup alternate keyboard layouts;
  • various Quality of Life improvements.

PowerToys for Windows 10 has been published under an open source license, and provides useful utilities such as:

They are available on Winget as Microsoft.PowerToys:

$ winget install Microsoft.PowerToys

Step 5: Install the Visual Studio Code text editor Link to heading

Visual Studio Code provides a straightforward text editing interface, similar to the Atom and Sublime Text editors.

There are many official and community extensions available on the marketplace for common programming languages and frameworks.

It is worth noticing that Microsoft has led two efforts to improve and homogenize:

These protocols define standardized interfaces for language servers and debuggers, that can be implemented by programming language maintainers and tooling developers, as well as by maintainers of other text editors and Integrated Development Environments.

Visual Studio Code is available on Winget as Microsoft.VisualStudioCode:

$ winget install Microsoft.VisualStudioCode

Alternative: VSCodium Link to heading

VSCodium is a community-driven, freely-licensed and telemetry-free rebuilt of Microsoft’s Visual Studio Code.

Please note that for legal and licensing reasons, VSCodium uses a distinct marketplace for extensions: OpenVSX.

Here are the most noticeable differences I have observed:

  • extensions may be published under a (slightly) different name;
  • extensions may be published by a different user or organization;
  • some extensions specific to Microsoft are not available through VSCodium (such as Live Share or Pylance).

If you’re feeling crafty, there are some workarounds to configure VSCodium to use Microsoft’s marketplace:

VSCodium is available on Winget as VSCodium.VSCodium:

$ winget install VSCodium.VSCodium

Personal preferences Link to heading

I have switched from VSCode to VSCodium for most of my daily text editing tasks:

And only use VSCode for specific features such as:

  • the Pylance extension for Python type checking and code completion;
  • the Live Share extension for collaborative editing during mob programming sessions.

Use cases Link to heading

The above setup is mostly for my gaming computer, which occasionally serves for:

  • cross-platform testing;
  • light scripting and text editing;
  • light development with Go and Rust.

I also sometimes spin a Windows VM at work for specific tasks, such as:

  • working with the graphical version of proprietary build toolchains (most specifically, when setting up CI/CD for embedded software);
  • building custom versions of the Chromium Web browser for Windows.