How we got here
I have been quite eager to shout out how much better MacOS is than Windows 10 (sorry about that). Even though I prefer Macs as my daily driver I’ve also used different versions of Windows quite a lot in the past. We had a bit of an on/off -relationship with Windows which ended rather promptly when Microsoft started shipping it with Candy Crush by default. That led me to use Linux on my desktops and MacOS on my laptops. I was actually rather sure that I would never make a comeback to Windows.
Since then I have picked up quite a personal taste for certain settings and keyboard shortcuts over the years. For example, from my time with Linux and tiling managers, I picked up a habit of controlling different windows on my desktop with the notorious h,j,k,l-kombination. My workflow is heavily centered around basic vim-bindings and I’m way too deep to back out of them now. I also tend to avoid using a mouse or touchpad (yet my favourite thing in the Macs has always been the brilliant touchpad) so it’s really important for me that things work pretty much the same way on each platform. This is to ensure that I can actually focus on my work rather than trivial things such as window management or searching for shortcuts.
Some time ago I ended up working on a project that really needed a Windows laptop. I tried to avoid it like a plague but eventually after trying every possible trick I ended up with a shiny new Thinkpad with Windows 10 on it. It turned out that I had been quite blind to the leaps happening at the Microsoft camp for the last few years so this has really been an eye opening experience. I can now have my workflow pretty much the same as always even with Windows 10.
What do I really want ?
For developers the computer is a tool, simple as that. So what really is important is that you know how to use it and feel comfortable with it. It should ‘just work’ the way that you’ve used to without needing to focus on how certain things work and god forbid if you have to use a mouse because you didn’t remember the shortcut. Usually things don’t work out of the box exactly as I would like but with some minor effort it should be doable.
Luckily most of the software I use in my work are multiplatform by nature. But then there are the small things, the keyboard shortcuts, how the shell behaves or how the window manager works. So here’s a few things that I’ve found helpful during my transition period.
While this might not be the kind of thing that actually matters that much, it was really nice to realize that Windows 10 comes with built in dark mode. It’s 2021 after all and everything is better with dark mode.
For some reason the default fonts for Visual Studio and Visual Studio Code are horrible even though Microsoft offers really nice fonts. Since this is easily fixed within two minutes with Cascadia Code fonts it’s really hard to come up with an excuse why we should suffer from those not so pleasing defaults.
It’s a collection of tools that should be Windows features by default. Check the full list of tools in the collection from GitHub link above. From this collection I’ve found the following really helpful.
Quick launcher for Windows 10 similar to Mac’s Spotlight. If you’re used to opening everything via cmd + space this is a must have. It works similarly and it opens by default from alt + space. I mean the default Windows way of doing this works quite nicely as well but I just prefer this since it works in the same way that I’m used to.
A window manager utility for creating custom layouts to Windows desktop. I would assume that this tool would be especially useful with ultrawide screens. It can be configured to override the default window positioning which makes it actually usable. I’ve created a five window split, which is similar to the default tiling options except it provides me with centering of windows as well. It’s no way comparable to some fancy tiling managers but it’s close enough to satisfy my needs. Since it’s configurable you can create multiple layouts based on your preferences.
The best for last. I can’t stress enough how useful of a tool this is. I’ve been using my own set of custom keyboard shortcuts for years now and it would be devastating to relearn them. For example I have shortcuts for window management based around hjkl-keys. By remapping my familiar bindings to Windows window manager defaults (with combination of Fancy Zones) my windowing now works like it should and I don’t have to bother relearning these keys. I’m also rather accustomed to close apps via cmd + q so by remapping alt + f4 to alt + q it works like I’m used to.
Since I swapped my caps lock and esc with each other years ago and use vim-keybindings quite extensively in my workflow, it’s really nice to see that it can now be done without opening regedit.exe. The main problem with that approach was that these kinds of hacks tended to disappear between Windows updates so you needed to re-do them way too often.
While on this topic I remember that switching the rolling direction of the mouse wheel was something that couldn’t be achieved without registry hacks. It was nice to realize that my new Thinkpad came with natural scrolling enabled by default.
There are actually at least two different viable package managers for Windows these days. I was actually eager to test out the new Win-Get but when I realized it needed access to Windows Insider preview builds I decided to use Chocolatey instead. This was mainly because this, after all, is a computer for doing work so it needs to be stable and work all the time. I’ve had some trouble with Windows Insider builds before so I decided to play it safe.
Chocolatey provides a rather large repository of different packages and by default I use it to install everything I use. Best place to start is by installing sudo so there is no need to hassle with the ‘Run Administrator’ dialogs. After that the packages can be installed easily from that open terminal window you have laying around when you need to, just be sudoing it like you’re used to. This of course means that you should be an admin user.
My initial thought was that I would be using WSL for everything so the first thing I did when I got this PC was to install WSL and Ubuntu to it. This really works nicely, it almost feels like cheating a little bit. I’ve read that it’s even possible to run GUI applications with this setup. It turns out that I don’t actually need this as much as I thought I would but it’s still really nice to have this as a fallback option.
For years I’ve been thinking that I should learn to use this at least for a little bit. The thing that actually helped me over the hump with this was vim-mode thanks to PSReadLine. After this I ended up actually recreating my zsh setup in Powershell. First thing I had to do was to learn how to make aliases in powershell. Another important thing is Git autocomplete. So after a little bit of Googling I found this guide on how to install both PSReadline (a little bit of eye candy never hurt anybody) and Posh-Git and it actually mentions even the same fonts I ended up using.
After a while I noticed that I was missing MasOS’s classic open command which in Microsoft world seems to go by Start. So I ended up creating an alias for ‘Start’-command as ‘open’.
I can’t stress enough how much this has changed the way that I feel about Windows. Now that there is actually a usable terminal (that’s also Open Source) there is actually some point to consider Windows as a development platform. I haven’t played around with the configurations of this that much since it comes with quite reasonable defaults and that’s actually a great thing.
One of my favourite software on MacOS is the brilliant Preview app. Since apparently no such programs exist outside MacOS, I needed to find a traditional pdf reader. I was looking for something that has vim-bindings by default and Sumatra was the first suggestion everywhere. It has really nice defaults, tabs and it remembers your sessions. With this fun little little hack it also has a ‘dark mode’. Since dark-mode was more of a hack after a while I ended up searching again and hit the jackpot: MuPDF. It’s a lightweight open source pdf reader that uses vim-keybindings by default, has color tinted-mode for night time reading and also can invert colors by default which can be used as a dark mode (this obsession has gotten a bit out of hand). I’ve been really happy with it since it allows me to browse through documents and search from them with the same keybindings I use in my browser.
Autohotkey + vi-mode
In MacOS I used to use Karabiner-Elements for creating (let’s be honest using scripts that someone else had created) new custom shortcuts to help with my workflow. On the Windows side there is a handy little tool called Autohotkey that does basically the same thing.
This one probably isn’t for everyone but I have to share this since it makes editing files in Word so much better than by default. Now I’m able to use those familiar and handy shortcuts that I’m used to when editing documents in Word. There is also a similar project for using Emacs bindings on Windows and probably many more.
It’s obviously not the same as working with Mac and there are subtle differences here and there, but it’s not all bad. I really like the Microsoft Hello face authentication feature for example. The keyboard on my Thinkpad is actually better than the old MBP’s keyboard and I’ve even started to use the mighty Trackpoint for some reason. It might be because it’s been quite a while that I’ve used Windows as my daily driver but this thing feels like something different than what it used to be. I’m not saying it’s perfect and it definitely has some quirks but it’s gotten way better than what it used to be. I would say that it’s comparable to a nice Linux-setup in that it needs maybe more of a tinkering than my previous Mac setup did, but it’s definitely not a deal breaker anymore.