For a while my home computer (a NUC) has had Ubuntu on it and my work machine has been a Macbook Pro. As it’s summer holidays, and I sometimes find myself idle with funny thoughts, I decided to clean Ubuntu off my NUC and go full Windows 10.
In this blog post I give out some hints how
to cope with to make the best of this operating system really popular amongst ATMs and elderly people.
The spark to try Windows 10 once again was nothing ambitious like “I really want to try the new Windows 10 features!”, but rather I wanted to play Starcraft2 as I’ve been watching lots of Serral’s matches on Youtube recently. Yes, I’m that simple. No, I didn’t get SC2 working on Ubuntu.
- Getting Windows 10 up & running
- Windows Subsystem for Linux
- Wrapping it up
Getting Windows 10 up & running
I didn’t take too much time tweaking with Windows’s own internals. Just disabled all telemetry where I saw one and got a nice wallpaper from reddit. Didn’t install any registry cleaners as I’ve gained insight on them later on nor didn’t even bother to get a specific antivirus system (apart from Defender), as they are a bother.
From my previous experiences tweaking Windows or deleting the default apps via PowerShell magic doesn’t pay off, as the updates keep reinstalling everything and the NUC is performance-wise limited so all the bells and whistles would bite my backside in the end. ‘Boring is good’ is my mantra.
Whilst I was gone, Windows 10 got a pretty nice package manager called Chocolatey. It’s a 3rd party app, but apart from only a few programs (Battle.net & Chrome) I was able to set up my new Windows installation with this app. Just use it like a package manager in any civilized OS. I thought for a few minutes about doing Ansible scripts of the programs installed, as it’s supported, but got lazy.
FYI: There is also a Microsoft’s package manager coming up.
At some point in my history I had opted to Windows Insider program. I kinda like having new features to my system after reading about them, not after a wait of 6 months, so I included my new installation also to this program.
One setting and boot later my NUC was part of the preview program, and I didn’t notice any difference. Maybe that’s a good thing.
Windows Subsystem for Linux
The main reason Macs are handy (for me) is that you can use Linux shell on a machine that (usually) just works. WSL is a similar kind of promise for Windows. Microsoft itself has produced really good documentation on getting WSL up and running, requiring only a few minutes of your time (and a few reboots).
I went with Ubuntu 20.04LTS for my (only) subsystem, so the leap from my Ubuntu days was not so great. I could actually say that it works … nicely. I can run an Ubuntu shell straight from my desktop and pretty well ditch all the constraints of Windows for development work. Only if I could forget the sorrow and misery I endured with Cygwin.
For sharing stuff with Windows I just created a folder in Windows, pinned it to the Quick Access and on Ubuntu created a symbolic link to that path
ln -s /mnt/c/<path to shared folder> ~/Share. Otherwise you should just consider the two systems separate.
So, Microsoft made its own terminal with tabs and ability to mix CMD, PowerShell and Subsystem shells, and that terminal is configurable by JSON. You install it simply by getting it from the Microsoft store and profiles for your subsystems are automatically generated.
Getting the Shell itself configured was fast, as I my dotfiles reside in version control and I could just do a Git pull and Make and everything was in order; just like running shell in good ol' Ubuntu. Which in fact I was running, just entangled in weird Microsoft candy wrap. For configuring the Terminal I spent the better half of the day looking at various terminal theme colours only to stick with Solarized Dark.
You can check out my real simple Windows Terminal Config from here.
Visual studio code
Mixing Visual Studio Code to the WSL soup was something that I was pleasantly surprised with. First I installed VSCode using Choco and testingly used
code . on Windows Terminal on my Ubuntu WSL. This resulted in Visual Studio opening the path and prompting me if I would like to install Remote WSL add-on. I certainly would, and Visual Studio Code was now set up running inside the WSL. Plugins would be installed on the WSL (apart from the UI ones), and I wouldn’t have to be afraid about the file system being confused about Windows poking around.
It just works. And it’s really cool. The two sentences I haven’t said about Windows since I got introduced to the mouse in the 1990’s.
Did actually Google a bit about how to get Windows Terminal working within Visual Studio Code only to notice that it was set up automatically. Magics!
Wrapping it up
Stuff just works
You can expect all your peripherals just to basically work, as they have mostly been made in Windows users in mind. My NUC got a truckload of specific drivers, my Fiio K3 headphone AMP worked instantly, and I finally (finally!) got my Logitech MX Master 2S working with Bluetooth (which just wouldn’t work on Ubuntu without a RF dongle). It’s like working on a Mac, but everything is less nice.
Based on my experiences, the year of desktop linux is always the next year.
Windows - WSL - Visual Studio Code -trinity
This bundle of MS-products is working surprisingly well, and I think for most developers this is enough to get their work done. That and a nice browser (hint: it’s Firefox).
Windows UI is plain ugly
I don’t think there is any way around it, Windows is lightyears behind Mac in UI design and also few hops behind Gnome. It just looks.. elderly, and not in the wise and celebrated way.
Also the Start menu rubs me the wrong way, and I totally would vouch for an app dock in the design somewhere.
“So, you are saying that this is the absolute minimum width for an empty start menu?"
Windows Terminal experience
If you come from Gnome shell or iTerm2 you are accustomed to a certain level of functionality on a terminal. Well, now you have to accustom to something little less. There is a public roadmap so you can check what is coming and when, but you might be kinda surprised to notice that for example clickable links are coming on v2, which will come out in … 5/2021.
Also when comparing to native shells the Terminal is a little bit laggy and sometimes when switching windows the text cursor is lost somewhere and you have to start your row anew in order to find it again.
Chocolatey elevated shell
Probably the smallest of nags, but as CMD has no native form of Sudo and you cannot run Windows Terminal in elevated mode, you still have to use CMD with “run as administrator” in order to install apps with Choco. This is far from a sexy shell experience.
I think I might be sticking to the Windows 10 experience for a while now, there is nothing that bugs me to such an extent that I would run back to full Ubuntu, and I kinda want to see where the Microsoft Ship is sailing next. I don’t especially like Windows, but Windows 10 of 2020 makes it easy to disregard everything that is Windows, making it bearable.
Also, there is Starcraft.
After writing this blog post and answering a few questions, I came to a realization which might be the most valuable lesson of this experiment: using VSCode + Linux as a main development environment makes a mighty portable toolset: it works on Linux, Windows and Mac. Linux settings can be packaged in the form of dotfiles and put on version control and utilized similarly on all these platforms. It also seems that Visual Studio Code is taking steps into enabling synching of settings and extensions.
If you add developing inside containers into the mix, you will have a fully portable development system that can be shared with your team. And you really should, VSCode utilizes them quite nicely.