ltmenezes
Desktop Build - 2025
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.
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:
- Corsair 128GB (4x32GB) DDR4 3200MHz CL16
- A bit of an overkill but wanted to make sure I could have games running without exiting my dev tools.
- Corsair RM850X 850W v2
- Corsair Hydro H115i RGB Platinum
- MSI GeForce RTX 3090 24GB VENTUS 3X OC
- Outdated now with the launch of the 50 Series, I'd recommend going for the 5070 right now unless you are in game dev.
- Gigabyte AORUS NVMe Gen4 SSD 2TB
- AMD Ryzen 9 5950X 3.4 GHz 72MB
- ASUS PRIME X570-PRO
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:
- Monitors: 2x ASUS VG27AQA1A (opens in a new tab)
- Keyboard: Keychron Q6 Pro (opens in a new tab)
- Keychron makes amazing keyboards, they offer options to run in both wired and wireless mode, connecting up to three devices at the same time, so I connected with my two systems
- Speaker: JBL 104-BT (opens in a new tab)
- Great speakers and also connect in both wired and wireless mode. It's also able to automatically pick up which one is playing, so it smoothly transitions back-and-forth.
- Mouse:
- For the mouse I decided to use a logitech one for Windows and a Mac's trackpad on the Mac, I just put it aside when I'm not using it.
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