Windows¶
I got a Windows 95 installation CD with my first PC. I installed it and played around with Pinball, Hearts, Moto Racer, and QUAKE. Then I installed Borland Delphi, followed by Apache and PHP. Eventually, I started getting annoyed with Windows and switched to FreeBSD, and later to Linux. I have not used Windows for my personal computer since then, except of course to play games that would not run on Wine.
However, I have needed Windows in a number of scenarios, but usually running it via a virtual machine would suffice. So I cannot really shake Windows. That is why I decided to note down a couple of nice things that are actually possible today, which make it not too terrible to use.
Here are a few notes on setting up a Windows machine in a way that makes it bearable to use. The first steps involve waiting for updates to finish, giving the system a proper name, and enabling remote access via RDP and SSH. Then the tool installation can begin, starting with the Chocolatey package manager and MSYS2. Later comes the other software, such as Microsoft Visual Studio.
Recent Developments¶
The above was state of things, for me atleast, until i in 2025 stumbled upon Windows 11 with WSL2. Wow, the landscape has changed! I had always found that Windows was more a nuisance, However, today, some 25 years later, Windows now have some fundamentals done right, and baked in:
Software is easy to install via
winget
Finally MS provides what FreeBSD and Linux had for ages, package management with a decent cli interface. Stuff, like Chocolatey and Scoop are not really needed anymore.
winget
+ WSL2 checks all the boxes for me.
A functional Terminal emulator
Although the Window “shells”
cmd.exe
andPowerShell
remain absolutely useless as a daily-driver, then atleast, there is now a decent Terminal built-in and aptly named.
Windows System for Linux
It is well known that MS cannot create a useful shell. However, what they have managed to do very well, is integrate Linux and Windows. Tightly integrating access to file-system and HW ressources even with nested virtualization. E.g. one can do qemu-development with ease. Thus, you get your favorite shell and the entire Linux userland, plus the option to customize the kernel. Boom. Mike drop.
Window-manager
Although not a neat tiling window-manager such as sway, but not entirely useless like macOS. Then Windows now provides a bit of throwing windows around, jumping between virtual desktops, and snapping windows to grids.
Also, with WSL + ZelliJ, then most of the
Game Streaming
Although not a Windows-feat, however, still related is the usability of game-streaming service, especially GeforceNow. No need to install, and keep a library of games updated, just sign in and play.
Thus, piloting Windows with these fundamentals in place makes it a far bit more than bearable. It is actually a quite nice merge of proprietary and open systems. You can utilize Windows for all the proprietary HW stuff that usually always break on Linux, and leave all the toolchain essentials to the Linux.
Thus, the following are notes on setting up Windows 11 in ways I have found useful.
Windows Native Software¶
Run the following in a Powershell:
winget install `
AutoHotkey.AutoHotkey `
Cisco.Webex `
Citrix.Workspace `
DEVCOM.JetBrainsMonoNerdFont `
Discord.Discord `
Google.Chrome `
Microsoft.Office `
Microsoft.PowerToys `
Mozilla.Firefox `
SlackTechnologies.Slack `
SublimeHQ.SublimeText.4 `
WireGuard.WireGuard
Attaching USB devices to in WSL instances:
winget install `
dorssel.usbipd-win
And for a bit of entertainment:
winget install `
Nvidia.GeForceNow `
Spotify.Spotify
AutoHotKey¶
I am missing several things from Sway the most important one is
Alt+ArrowKey`
for window navigation. With AutoHotKey, one can make a script
that does that. Along the lines of:
#Requires AutoHotkey v2.0
AltFocus(direction) {
hwndCurrent := WinActive("A")
if !hwndCurrent
return
WinGetPos(&curX, &curY, &curW, &curH, hwndCurrent)
curCenterX := curX + curW // 2
curCenterY := curY + curH // 2
winList := []
for hwnd in WinGetList() {
if hwnd = hwndCurrent || !WinExist(hwnd)
continue
WinGetPos(&x, &y, &w, &h, hwnd)
centerX := x + w // 2
centerY := y + h // 2
dx := centerX - curCenterX
dy := centerY - curCenterY
if (direction = "Left" && dx < 0 && Abs(dy) < h) {
winList.Push({hwnd: hwnd, dist: Abs(dx)})
} else if (direction = "Right" && dx > 0 && Abs(dy) < h) {
winList.Push({hwnd: hwnd, dist: dx})
} else if (direction = "Up" && dy < 0 && Abs(dx) < w) {
winList.Push({hwnd: hwnd, dist: Abs(dy)})
} else if (direction = "Down" && dy > 0 && Abs(dx) < w) {
winList.Push({hwnd: hwnd, dist: dy})
}
}
if winList.Length = 0
return
; Manual sort by distance
for i, _ in winList {
j := i + 1
while j <= winList.Length {
if winList[j].dist < winList[i].dist {
temp := winList[i]
winList[i] := winList[j]
winList[j] := temp
}
j++
}
}
WinActivate(winList[1].hwnd)
}
!Left::AltFocus("Left")
!Right::AltFocus("Right")
!Up::AltFocus("Up")
!Down::AltFocus("Down")
Note, the script above was made with the assistance of the default provided CoPilot in Windows 11.
WSL2¶
Install Windows Subsystem for Linux 2 and a Fedora distro:
wsl --install
wsl --status
wsl --set-default-version 2
wsl --list --online
wsl --install -d Fedora
wsl --set-default Fedora
Rename your PC¶
…