Software

I use Windows for my operating system. Here are my tips for a developer focused Windows setup.

Managing Software

macos has brew, Linux has various package managers but Windows was the odd fellow.

Windows update service supports Microsoft software - in addition to the normal security and device driver updates, but for the rest there is chocolatey.

It is the first thing that I install on a new Windows machine and I manage all software installation via its tasty choco command.

Windows Subsystem for Linux (WSL)

This is primary reason why I shifted to Windows. WSL is a compatibility layer that allows Linux binaries to run directly on Windows, without having to virtualize hardware.

This means:

  • No virtual machines
  • No hardware virtualization issues
  • Run Windows commands from WSL.
  • Its available always. No bootup delays or warming up. Just open a terminal window and type bash.exe, it really is that simple.

To get started, follow these steps.

If you are unable to use the Windows Store to download a WSL distribution, you can install distributions manually.

WSL is under active development and I recommend following the commandline blog to find out what is in the pipeline.

Currently a lot of what you would expect from a Linux distribution just works. You can also install multiple distributions and switch. There is even a distro designed for WSL.

Command Line Experience

One of the main reasons I hesitated to switch to Windows was that the command line experience in macos and Linux is vastly superior. There still are issues with the terminal experience (especially around font rendering and emoji support), but from my conversations with the team they are well aware and are working to solve what isn’t a trivial problem.

Things are changing for the better, starting with Powershell, but the good news is with a few tweaks the terminal can again be your happy place.

First, you need a good terminal emulator. Hyper is quite popular, but I found that there are some weird annoyances with its mouse handling and a lot of times it seemed to get stuck with simple prompt customizations. A few times an update corrupted the entire installation.

For a while I used wsl-terminal which is a mashup of mintty, fatty and wslbridge wrapped up in a nice set of scripts. The great thing is you can create customized shortcuts for your WSL installation.

I then stumbed upon fluent and this has become my standard terminal even for cmd.exe; here is why it won me over:

  • It has proper, serious and well-thought out tab support.
  • Its a UWP application, so mouse support, right click customization, transparency, a configuration and settings menu everything is there.
  • Did I mention tabs? You can customize them with shortcut keys and background colors, want them on top, on the bottom? You got it.
  • Supports themes!
  • If that wasn’t enough, its open source.

Everthing just works as expected which is the best compliment I can give.

Install it with choco install fluent-terminal.

Text Editor

If ever there was a polarizing argument among developers, its text editors. Well, this and tabs vs. spaces.

My rule is, use that which makes you productive. Your time is worth more than anything.

I would agree with the majority of users though:

I have reached a point where my code install (with all the extensions) has reached parity to some commercial IDEs.

Fonts

Fonts are not something one would normally think to mention in a software setup guide (after all, operating systems ship with a large library of fonts), but the truth is the right font can affect your comfort level when staring a piece of glass with a light behind it for the majority of your day.

Fonts really came into the forefront as the web became the standard channel for delivery of software. Some of the problems with fonts is that if you are writing in multiple languages (say an English sentence with a Japanese character), how does bold work? What is “normal” for these two fonts?

Google tackled this problem as only Google would by creating their own font Noto. This great talk by Xiangye Xiao explains the problems Noto tries to solve and I highly recommend it.

The font that I prefer for development is Fira Code. It is a monospaced font, contains programming ligatures and is supported well.

WSL Setup

Once the font is installed, fluent is on board and WSL has been setup, its time to customize WSL.

If you are coming from macos or Linux and have a preferred command prompt setup, you can copy it over to WSL and expect it to work.

Otherwise, you can start customizing assuming you are running a traditional Linux desktop.

Start with updating the Linux installation with sudo apt update && sudo apt upgrade. You can add a -y to automatically accept the prompt. Next, install some basic tooling sudo apt install git build-essential.

I use bash and zsh although these days both are on par with features and compatibility.

My customizations are the following:

Next, before I start anything else I generate a fresh key pair with ssh-keygen and update remote services.

Basic Tooling

These are the tools that I find most useful, but this is by no means exhaustive or the “best”, use what you feel works for you; remember the most valuable thing is your time.

  • WSL
  • Windows
    • Visual Studio 2019 Community Edition choco install visualstudio2019community
    • Visual Studio Code choco install vscode
      • Settings Sync plugin choco install vscode-settingssync
    • Fluent Terminal choco install fluent-terminal
    • Fira Code choco install FiraCode
    • Jetbrains Toolbox choco install jetbrainstoolbox