ltmenezes

Desktop Build - 2025

hardware

My first professional software engineering job was working with C# and one of the great influences that I had back then was the engineering blog from Nick Craver, who worked in Stack Overflow at the time (which was also built with C#). Nick had a great practice of sharing the desktop build that engineers at SO (opens in a new tab) received when they joined, it was great to get inspiration and to see what hardware requirements their engineering team had.

Desktop builds are not that frequently talked about nowadays as most big tech companies operate only with Macbooks for the sake of simplifying logistics and to give flexibility of work locations to their engineers, however, I still feel like there's a lost science of perfecting a desktop build to your own needs. So, for the sake of carrying on the tradition, I will share here my own personal desktop build in 2025 and go over some of these components in case this can be of help to anyone.

Image of part of my local desktop build.

I'm currently running a Windows desktop and a Mac Mini M4 on the same setup, I still code C# and can't live without Visual Studio for it, but at the same time coding in any other ecosystem, such as mobile dev, is too much of a pain on Windows. One potential option would be to go with a dual-boot with Linux and Windows, however, that would require shutting off my Windows system to enter the Linux one and vice versa, which I didn't want to, as I prefer keeping both systems running with my tools and servers. For this reason, I chose to go with the two systems approach, both sharing the same screens and peripherals (I will go in depth in a bit on how I can make it work), these are the components of my Windows Desktop:

For the Mac Mini M4 I went with 512gb SSD and 24gb of RAM as this is only a dev box, all the hardware intensive operations run on the main Windows desktop.

One of the challenges with this setup was to easily swap back and forth between them, specially given that they are running on the same peripherals, let's start with the simple part:

Now for the interesting part, I wanted to make the transition between these two systems seamless and the last pain-point was to use the monitor controls to swap the input sources, on both of them, every single time. To fix this I used DDC (display data channel), which is a protocol of communication that you can use to send and receive signals to your monitors, its capabilities are pretty extensive, you can swap input devices, change brightness, and other features that you would normally use the monitor control for. I then wrote two separate scripts to do the swapping, for the Mac I used the betterdisplaycli (opens in a new tab) on a small shell script to run under Mac Shortcuts, and on Windows I did it in Python:

from monitorcontrol import get_monitors
import sys
 
for monitor in get_monitors():
    with monitor:
        monitor.set_input_source(sys.argv[1])

The last remaining part was to attach both of them to a key combination shortcut (I chose ^⌘L), I also programmed my keyboard's firmware via VIA (opens in a new tab) to perform this shortcut for me as a Macro on a special key that my keyboard has, and because this macro is programmed on a firmware level it works no matter which system I'm using. With this in place I'm able to swap between my two systems by pressing a single key, in roughly a second.

© Leonardo Teixeira MenezesRSS