Windows has been my main dev environment for about 4 years with some linux interspersed in there. Before that, I used OSX and Windows interchangeably. When I made the switch, I wrote an article on my Windows Dev environment and today, I want to write a sort-of update, and sort-of introduction on how to make your Windows machine the best place possible for web development, whatever language you may be using.

Without further ado, let’s start!

The Terminal

In my previous post linked above, I mentioned several options. Well, no more. I’ve come across a winner, and it’s ConEmu. What’s ConEmu? Well, it’s a terminal emulator that can run PowerShell, CMD, Bash, Cygwin and pretty much any other terminal.

It has tabbing, color settings, custom fonts, hotkeys, and so much more. I can’t work without it. You are more than welcome to copy over my conemu.xml settings file which includes my favorite shortcuts:

  • ctrl + win + l and ctrl + win + h to switch between tabs
  • ctrl + shift + v which will paste text with newlines
  • ctrl + shift + t which will open a dialog to create a new tab with terminal settings (regular ctrl + t just opens a new tab with whatever your defaults are)

The best thing about ConEmu is really that it handles those tabs for you. You can run a tab with webpack, node server, and run another tab with Bash if you want.

If you want a slightly more preconfigured version, checkout CMDer which has a ton of customizations around CMD.

The console/shell

Before moving away from the terminal, I highly recommend setting up ConEmu with PowerShell and the subsystem Bash. I run one system where I default to PS and one where I default to Bash and honestly, it’s up to you what you do but I’ve noticed that I still have to occasionally jump into PowerShell even if I want to mainly use Bash.

PowerShell is REALLY powerful and it’s amazing. I only scratched the surface with it but to me, it’s a good rival to Bash and other shells. Plus, the output from commands is usually nicer than what Bash provides! PowerShell can also be configured just like Bash. Checkout my Profile PS1 file and make sure to install Posh-Git for full git support.

I do use Fish for the Windows Linux subsystem and found it pretty cool. I definitely don’t know enough about it to configure it for 100% productivity but it works well-enough that I prefer it over plain Bash.

VIM

Despite being a full-time user of VS Code, I still jump into VIM for a few small things — whether it’s a quick file edit or just wanting a nice Golang development experience. It’s worthwhile setting up just in case.

The awesome thing is that VIM 8.1 now supports running a terminal within VIM itself.

You can download VIM from the official website.

Package Manager

Okay, so I have a controversial view on this: don’t bother. Chocolatey is great but I found that going straight to the source is better.

Node installation and upgrades are pretty straightforward. Same goes for Elixir or Golang. Does it take more than a single command to upgrade? Yep! But it’s not as big of a deal as it looks. Precompiled binaries ftw.

Docker

I use Docker at work and it’s great. Windows support is pretty good too but you need Hyper-V. Hyper-V essentially disables using VirtualBox for anything at all so be aware that using Docker usually means that you cannot use VB.

If you want to use Docker in the Linux subsystem, I recommend following this guide which will take you step-by-step through making the Windows Docker system available via command line in the Linux subsystem very seamlessly.

Notepad++

If you’re deving on windows, you MUST have heard of Np++. Notepad++ is by far the best text editor I’ve seen. It works exceptionally well as a scratch pad, a quick todo list, markdown editor, CSV viewer, text manipulator and so much more. What do I use it for?

  • daily list of todos
  • editing my markdown
  • writing SQL queries
  • editing/cleaning up CSVs (there is an AWESOME CSV plugin)
  • quick edits when I’m using explorer (if I’m in terminal, I use VIM)

It’s powerful, it’s amazing. Go download it right now.

Code Editor

I’ve been a VIM purist for years now but VSCode swept me off my feet and put a ring on it. Before that I’ve tried Emacs, Atom, and a few other code editors. On windows, all of them run quite well.

I still keep VIM around and want to do a hard reset on my .vimrc and start over. I keep Emacs around, too, hoping to get back into it. Its org-mode is to die for and doesn’t have an alternative that works so damned well.

With VSCode, I try to keep a short number of extensions around. The more languages, tools, and frameworks I work with, the more extensions I need. That kind of extension creep is inevitable the more you work in a diverse ecosystem:

  • Angular Language Services – code completion for angular templates which read your component typescript files
  • Bracket Pair Colorizer – changes color of brackets based on nesting level
  • Docker – docker syntax highlighter
  • DotEnv – syntax highlight for .env files
  • EditorConfig for VS Code – editor config support
  • elm – Elm support
  • Eslint – JS linter
  • Gitignore – language support for .gitignore files
  • Material Icon Theme
  • npm intellisense – autocomplete for installed NPM modules
  • org-mode – basic org mode support for the well-known Emacs org-mode
  • path intellisense – filename autocomplete
  • polacode – select code and export it as a beautiful image
  • PowerShell – powershell script syntax highlight
  • prettier – prettier formatting support
  • prettify json – makes JSON look nice
  • Rust – rust lang support
  • Sass – sass support
  • Settings Sync super important – this will upload settings to a gist and download it as well. Process is manual but it helps me keep my VS Code installs in sync
  • stylelint – linter for CSS/SCSS/Less
  • TSLint – typescript linter
  • Vim – Vim emulation! I wouldn’t use VS Code without it
  • VS Live Share – real-time collab/share
  • vscode-elixir – Elixir lang support
  • vscode-elixir-formatter – formatter for Elixir files

Utilities

I use a collection of several small tools to make my life easier that I think are worth sharing:

  1. Lightshot – a superb screenshotting tool

Is that it?

I can’t think of anything else off the top of my head right now but this should be it!