Developer used to Windows going OSX

DEVELOPMENT -️ June 20, 2023

Why the switch?

It's probably a story you have read or seen multiple times.

I was in need of a new laptop, as the old one:

  • was thermal throttling due to thermal pads being thinned out or even gone
  • had broken speakers
  • simply was not cutting it memory wise, my workload often required more than 16GB of RAM

But also:

  • I wanted to know why colleague developers liked working with a MacBook
  • I wanted to be a guinea pig for the (then) new ARM M1 SOCs (I like the bleeding edge 🩸)
  • I always disliked the terminal experience on Windows, which I expected to be better on OSX.
  • I wanted something new and fancy like a true materialistic person

So I asked my company for an Apple MacBook Pro with a M1 Pro SOC and 32GB of RAM .

Disclaimer

I will be mentioning several software and hardware products. I am not affiliated to any of these brands. I am simply mentioning specific products for the reason that they do the things I expect them to do. Especially buying hardware to accompany a newer generation of MacBooks is not that easy, as there are a large amount of conflicting reviews online. My point is to just sum up what works for me and why it works for me, so that others might have more confidence in trying out / buying these products for use-cases which align with mine.

Software

General productivity

There's some things I missed in the out of the box OSX experience. Below I will cover a few subjects which enhance my developer experience on OSX.

Clipboard usage

  • To get a better copy paste experience I am using Maccy which allows me to get my clipboard history.

Mouse acceleration

In my free time I tend to play FPS games, which results in me not being able to cope with mouse acceleration.

  • Linearmouse is a tool to adjust mouse acceleration and accelerated scrolling on OSX. The good thing about this utility is that you can configure it per device. This means I can configure it for my 'WFH mouse' as well as my 'office mouse' whilst not changing the touchpad behavior.

Window management

Theres two modes in which windows reside in OSX: float around randomly or be fullscreened. This floating around behavior results in losing a % of your screen real estate, which feels like a waste. I have multiple monitors to use every pixel available on them, not to have my windows floating around randomly.

  • Rectangle provides very Windows-like behavior. It gives you shortcuts to snap for 50% or 100% of a monitor, whilst also giving you the ability to move windows to another monitor.
  • AltTab is a drop in replacement for the default Command+Tab app switcher in OSX. I am using AltTab because it is:

    • faster (has no annoying delay unlike the default OSX task switcher)
    • shows all windows across all virtual desktops (spaces) and all monitors
    • also tabs to windows that were minimized (default OSX is weird like this?)
  • Alfred is used to open any new application, kind of like the Windows button behavior, but with better search results. The Dock in OSX feels useless to me, as does the taskbar in Windows. I don't feel the need to use my mouse to open up an application. Using my keyboard, Alfred is basically a Search engine for my OS like Spotlight, but better.

Multiple monitors

  • My WFH setup has multiple high refresh rate monitors. I had some trouble of OSX not showing me all the resolution + refresh rate combinations. BetterDisplay allowed me to manually set refresh rate, which allowed me to use my monitors as intended.

General OS tweaks

  • Luckily OSX has a dark mode option, as my head/eyes simply cannot handle white on a monitor (or I have possibly trained myself to not being able to handle it).
  • Remove some animations with System Preferences > Accessibility > Display. And turn on "Reduce motion".
  • Fix readability of top bar by using System Preferences > Accessibility > Display. And turn on "Reduce Transparency".

Software development

  • I am convinced that Homebrew is the most downloaded tool by developers on OSX. Homebrew makes installation of applications a breeze. It even selects the correct platform versions of the software you need, all by typing one or two commands.
  • I have been using asdf before on Windows in Git Bash and it's been a life saver. It allows me to not worry about dependency versions in all of my projects, as it auto selects the correct version based on a .tool-versions file located in the repository root. It works just as well if not better on OSX
  • I was looking for a good terminal setup, and I went for the OSX staple: iTerm2 + zsh + Powerlevel10k

Hardware

WFH setup

Modern times require for modern solutions, which means I needed to be creative to connect to all of my peripherals.

I am using a CalDigit Element Hub TB4 dock to connect all my peripherals to my Mac as follows:

  • The only cables that are directly connected to my Mac are one HDMI cable for one my monitors (more on this later), and the one Thunderbolt 4 cable for power delivery and passing through the rest of the peripherals.
  • I have an I-tec USB 3.0 16 port hub (externally powered up to 90W, it's basically the OEM version of the Sabrent or Delock 16 port hub, but cheaper) connected to the CalDigit Element Hub. Below the list of peripherals I am connecting through this:

    • Mouse: Logitech G Pro Wireless
    • Keyboard: TADA68 with Cherry MX Red switches
    • USB capture card: Rybozen Game Capture Card USB 3.0 (Basically Chinese off brand capture card) which allows me to use my Sony a5100 as a webcam
    • AMP & DAC for headphones: FIIO E07K which powers my AKG K701 and Beyerdynamic DT 770 PRO 80 Ohm
    • AMP & DAC for speakers: LOXJIE A30 connected to my Q Acoustics Q3020i pair of speakers
    • Interface for microphone: Focusrite 2i2 driving a Shure SM7B activated by a FetHead The list above does contain some latency sensitive hardware, for which I was afraid of getting dropouts with. Luckily, none so far.
  • For Gigabit Ethernet I am using a Belkin USB-C Gigabit Ethernet dongle which is directly connected to the CalDigit Element Hub.
  • My LG 34GN850B (160hz, 3440x1440) is connected through the aforementioned HDMI cable straight into the MacBook. My Gigabyte M27Q X (240hz, 2560x1440) is connected through a CalDigit USB-C to HDMI 2.0b Video Adapter. On both of these monitors I am not getting the max refresh rate the monitors can handle. I am not entirely sure whether this is a bandwidth limitation or a misreading of EDID information. The reason I am connecting of the monitors directly, is however, I am sure, a bandwidth limitation as one of the monitors dropped in max resolution when trying to connect them both through dongles. All in all, using these monitors for work purposes, I am not too unhappy about this situation.
  • A magical DIGITUS USB 3.0 Sharing-switch which allows me to switch all my peripherals between my MacBook and my desktop computer by the press of one button. This little device lets my entire setup act as a KVM, and allows it be expandable.

A schematic of it all of how I planned it out: The master plan

Office setup

Even in the office, in the USB C and thunderbolt world, you will be using a dongle if you like external peripherals.

I am using a generic USB C dongle (which I'm pretty sure has a brand, but I simply cannot even find the name of it) to connect my Varmilo VA87M Panda keyboard and my SteelSeries Rival 300 mouse. Any external monitor is connected through the MacBook's HDMI port.

After a WFH setup like that, you expected something more complicated right? It actually does not to be complicated if it just works for whatever you are doing I guess.

Conclusion

Transitioning from a Windows setup to an OSX setup is not easy. The out of the box experience did not really cut it for me, which meant I needed some tools to boost my productivity.

Attempting to pair a large amount of peripherals with a new MacBook is also not easy. Doing it the hard way trying to keep direct cables to the MacBook a minimum also does not help. It is however possible, especially without having to buy an off-the-shelf KVM which is, based on my online research, mostly unreliable. Was it worth it for my use-case? Entirely, I love the fact that I only need to plug in two cables when coming home.

Was switching to a MacBook worth it? After customizing the hell out of my setup, I have not come across any blocker up till now. The hardware is fast and responsive, the battery life is great, the software does what I want it to do. It's not like I feel like switching to another machine. Except maybe... an M2 MacBook or even M3 MacBook in the future? Because more power equals better... right?

Initializing...