Absortio

Email → Summary → Bookmark → Email

Developing on a Windows machine

Extracto

Yes, you can use Windows for software development— and it’s a fun experience! Here, I’ll share some of the steps I took to make my machine developer-friendly.

Resumen

Resumen Principal

El artículo aborda la viabilidad y optimización del uso de sistemas Windows para el desarrollo de software, destacando que esta plataforma puede ofrecer una experiencia eficiente y satisfactoria para los programadores. El autor comparte su experiencia personal en la transformación de un equipo Windows convencional en un entorno developer-friendly, enfatizando en la implementación de herramientas y configuraciones específicas que potencian la productividad. A través de un enfoque práctico, se demuestra cómo Windows ha evolucionado para competir efectivamente con otros sistemas operativos tradicionalmente preferidos por desarrolladores, como Linux o macOS. El contenido sugiere que con las configuraciones adecuadas y la integración de herramientas modernas, Windows se posiciona como una plataforma sólida para múltiples disciplinas del desarrollo de software. Esta perspectiva desmonta mitos previos sobre limitaciones inherentes de Windows en entornos de desarrollo, presentándolo como una opción versátil y poderosa cuando se configura correctamente. El enfoque se centra en la personalización estratégica del entorno de trabajo para maximizar el rendimiento y la comodidad del desarrollador.

Elementos Clave

  • Configuración de herramientas de desarrollo esenciales que transforman un sistema Windows estándar en un entorno optimizado para programación, incluyendo la instalación de terminales avanzadas, gestores de paquetes y entornos de ejecución modernos que facilitan el flujo de trabajo diario.
  • Integración de subsistemas como WSL (Windows Subsystem for Linux) que permite ejecutar distribuciones Linux directamente en Windows, brindando acceso a herramientas y comandos típicos de entornos Unix sin abandonar el ecosistema Windows.
  • Personalización del entorno de terminal y shell mediante la implementación de PowerShell mejorado, terminal personalizada y configuraciones que aumentan la eficiencia en tareas repetitivas, scripts y automatización de procesos de desarrollo.
  • Adopción de contenedores y herramientas de virtualización como Docker Desktop para Windows, que permiten crear ambientes de desarrollo consistentes y portables, facilitando la colaboración y el despliegue en diferentes entornos de producción.

Análisis e Implicaciones

La evolución de Windows como plataforma de desarrollo representa un cambio significativo en la industria, democratizando el acceso a herramientas profesionales independientemente del sistema operativo elegido por el desarrollador. Esta adaptabilidad tiene implicaciones importantes para equipos de desarrollo heterogéneos y organizaciones que buscan flexibilidad en sus entornos tecnológicos sin sacrificar rendimiento ni compatibilidad.

Contexto Adicional

La transformación de Windows en un entorno de desarrollo robusto se ha visto impulsada por inversiones significativas de Microsoft en herramientas open-source y compatibilidad con estándares de la industria. Esta evolución refleja una comprensión más profunda de las necesidades modernas de los desarrolladores y una apuesta estratégica por mantener la relevancia en el competitivo mercado de plataformas de desarrollo.

Contenido

Recently, I’ve been developing on a Windows machine, and it was surprisingly fun. At first, I was anxious because of my previous experience with Windows. Five years ago, installation instructions won’t just work, each step needs a workaround,1 and things break often. It was unpleasant. Now, I feel like the ecosystem has changed for the better.

In this blogpost, I’ll share some of the steps I took to make my machine developer-friendly. Hope you find these helpful as much as I did:

Install WSL2, Windows Terminal, and VSCode

Installing Windows Subsystem for Linux 2 (WSL2) feels like cheating because I’m literally just running Linux. Installation was painless, and all my dotfiles for vim, tmux, and bash worked out of the box. Also, you can choose any distro you want from the Microsoft Store! I’m pretty basic so I went with Ubuntu 20.04.


Figure: Windows Subsystem for Linux!

I also installed Visual Studio Code (VSCode) since it can seamlessly open files in both my Windows and Linux filesystems. Back then, I was bitten by the CRLF problem when opening files between the two. This has been solved in VSCode.

However, I wouldn’t even stop there. Instead of using the “WSL2 Terminal,” I went for the Windows Terminal (you can also find it in the Microsoft Store). It’s an emulator where you can open PowerShell, Command Prompt, and Bash in multiple tabs!


Figure: If you look at the top, then you can see that I can open Bash, PowerShell, and the Windows Command Prompt in just one place using Windows Terminal

It’s customizable too. You can change the color scheme and the font. Personally, I love using Gruvbox Dark and Fira code.2


Figure: You can update the font and color scheme in the Settings tab

After a few tweaks, my terminal already looks like the one I’ve been accustomed to in my Linux machine.


Figure: With WSL2 and Windows Terminal, I was able to replicate my Linux setup

Lastly, another thing I did is to set Bash as my default profile, and update the starting directory to //wsl$/Ubuntu-20.04/home/$USER/. So whenever I open the Windows Terminal, the bash profile is automatically loaded and is set to the actual home directory for Linux.

Prettify your PowerShell Prompt

Now that I’m looking at Windows with my more experienced developer eyes, I was curious as to how I can get around the OS through the shell. Previously, I’ve always used the GUI. With that, I learned that the main entrypoint is through PowerShell.

I don’t really see myself writing PowerShell scripts in the future. So in order to dip my toes into the environment, my tiny task is to prettify my terminal.

PowerShell

However, we won’t be using the pre-installed “Windows PowerShell” for our tasks. Instead, we will download another PowerShell (named just “PowerShell”) from the Microsoft Store. Confusing? Yeah, here’s what I got:

  • The pre-installed PowerShell, or Windows PowerShell (or PowerShell 5.1) is a Windows-only program that relies on an older .NET Core runtime. It’s no longer in active development aside from bug-fixes.
  • The new PowerShell, named PowerShell (or PowerShell 7.x) supports cross-platform development. So programs developed there can run on Windows, macOS, and Linux.

You can check your PowerShell version by typing $PSVersionTable and checking the value in the PSVersion key. On my machine, PowerShell 7.x is installed side-by-side with PowerShell 5.1. I am not sure if it’s possible to upgrade 5.1 to 7.X., so I opted to keep them separate.


Figure: After installing Powershell, calling PSVersionTable shows the 7.x version

Personally, it feels similar to the Python 2 to 3 conundrum. Sometimes it’s okay to keep them both so as to not break anything in your system.

Install chocolatey

The next thing I did is to download the Chocolatey package manager. We will use it to install the prompt theme engine for PowerShell. You can liken Chocolatey to apt in Linux. Also, note that it’s a third-party app, as there is an official package manager by the name winget.

I chose Chocolatey over winget because the former seems more mature and is feature-complete. To be honest, I am not sure of all the nuances between the two. A quick Reddit search on “winget vs chocolatey” shows some hesitation from other developers over winget. As for me, I value stability, so I just went with Chocolatey.

Install Oh-My-Posh

Oh-My-Posh is a prompt theme engine for customizing PowerShell. I found this through Scott Hanselman’s blogpost on making your terminal pretty. To install it via Chocolatey, I ran:

Then, I have to add the following line to my $PROFILE:

oh-my-posh --init --shell pwsh --config ~/jandedobbeleer.omp.json | Invoke-Expression

I spent an hour figuring out where that $PROFILE file is located. Turns out, you can find it at:

C:\\Users\%USER%\Documents\Powershell\Microsoft.PowerShell_profile.ps1

If you haven’t configured your PowerShell profile before, then that file may not exist yet. Create one and copy the oh-my-posh line above. Instead of navigating through your File Explorer, you can jump ahead using VSCode by typing:

You can also change your theme by updating the --config option. There’s a wide selection of themes, but I opted to use nu4a as it fits nicely to Gruvbox.

# Pre-installed themes can be found in ~\AppData\Local\Programs\oh-my-posh\themes\*.omp.json
oh-my-posh --init --shell pwsh --config ~\AppData\Local\Programs\oh-my-posh\themes\nu4a.omp.json | Invoke-Expression


Figure: At first, some glyphs won’t render properly. We’ll fix that by installing a NerdFont-compatible typeface Most fonts were already patched, so you’ll most likely find a patched version of your favorite font.

At first, the prompt looks weird because some glyphs didn’t render properly. To fix that, I used the patched version of Fira Code so that I have access to all icons and shapes.


Figure: After installing the patched font, the powerline should now render properly.

I decided to be more extra and installed Terminal Icons. This adds small and cute icons whenever you type ls and dir. I installed it by typing the command below:

Install-Module -Name Terminal-Icons -Repository PSGallery

and by adding the following line in my $PROFILE:

Import-Module -Name Terminal-Icons

now it looks awesome!


Figure: I installed Terminal-Icons because I want to be more extra

Install Microsoft Powertoys for more control

Lastly, I installed Microsoft Powertoys to help improve my developer experience. You can think of it as a collection of tools bundled into one package. One of my favorites are:

  • Powertoys Awake: it functions similarly to Linux’s Caffeine Indicator, where you can toggle your display to remain on for an indefinite amount of time. I find it perfect for long-running tasks, or when I just want my screen to be on while I’m away from my desk.
  • Keyboard Manager allows me to remap keys however I want. I used this to rebind my Caps Lock key to Esc, so that I have less “travel time” when using Vim. I think that using Keyboard Manager is safer than editing registry files directly, so I went for this option.

Aside from these two, there are still a lot of utilities included in Powertoys, but I still have to check them out.

FAQs

  • Why did you change to Windows? I’ve been gaming recently and some NVIDIA drivers don’t work out-of-the-box on Linux, especially on current-gen GPUs. If they do, they cause weird errors like screen stuttering and blackouts.
  • What made you take the leap? Mostly curiosity. I’ve seen a lot of developers be productive on Windows, and I’d like to try it out myself.
  • You’re overselling it a bit, now tell me about the quirks Sure, yanking to/from clipboard is not straightforward in Vim, network assignment is buggy (I need to restart to get connection), and nested virtualization (running Docker) is not yet solid. However, I still find these issues a bit minor (the first two can easily be solved by some tweaks), so I’m sticking to WLS2 for now.

Footnotes

Fuente: Lj Miranda