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
Purpose | 2017 | 2020 | 2023 |
---|---|---|---|
Package manager | Chocolatey | Winget | Winget |
Terminal Emulator | Cmder | Windows Terminal | Windows Terminal |
Shell | PowerShell 5.1 | PowerShell 7.0 | PowerShell 7.3 |
Text Editor | Notepad++ | Visual Studio Code | VSCodium |
UNIX Environment | MSYS2 | Windows Subsystem for Linux | N/A |
Virtualization | VirtualBox + Vagrant | VirtualBox + Vagrant | N/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:
- the package manager itself: winget-cli;
- the package repository: winget-pkgs.
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:
- PowerShell/PSReadline - A bash inspired readline implementation for PowerShell
- JanDeDobbeleer/oh-my-posh - Cross platform/shell prompt renderer
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:
- the FancyZones tiling manager;
- a Run quick command launcher;
- a Shortcut Guide Overview for additional keyboard shortcut management.
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:
- syntax highlighting, editing and completion with the Language Server Protocol;
- live debugging with the Debug Adapter Protocol.
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 - Extensions and the Marketplace
- VSCodium issue #519 - Switching between marketplaces;
- vscodium-marketplace on the Arch User Repository.
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:
- VSCodium - Free/Libre Open Source Software Binaries of VS Code
- Why VSCodium?
- More Info for:
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.