From NixOS on Thinkpad to MacBook Pro M1

Half a year ago, I replaced my Thinkpad T14 with a 14" MacBook Pro M1. I was a happy Linux and Thinkpad user for over 7 years.

This is how it went.

Previous setup

My previous setup was NixOS with i3wm and XFCE as the desktop manager on a Lenovo Thinkpad T14 Gen2. I reviewed it in detail.

The AMD CPU didn’t get hot and the fans didn’t make any noise. Battery life was around 4 hours after some power management tweaks.

The build quality was good, like other Thinkpad T models.

The Good

These are the things I enjoy about my new setup.

  • CPU: The M1 is the main reason I switched. Apple is a few years ahead of everyone else. The M1 is a leap in computing power and energy efficiency. The M1 Pro runs demanding games. Some games don’t support Apple Silicon and are running on an emulation layer called Rosetta. Gaming or compiling, I haven’t heard the fans yet.
  • Battery life: Coming from a Linux laptop, it’s not that hard to blow my mind. Yet a full day of CPU-intensive work without charging is something else.
  • UX polish: To be fair, I didn’t spend much effort polishing my UX on Linux. I used default configs for NixOS, i3wm, and XFCE as my desktop manager. Full disclosure, I also got an iPhone and AirPods. Everything works so well together which might be adding to my awe.
  • Screen: I didn’t know that I cared about screen resolution and refresh rate until now. The font size is smaller than what I have been using before, but I get less eye strain now.

The Bad

These are the things that worked better with the old setup.

  • No declarative configuration: I can’t describe the operating system with .nix files anymore. It feels wrong to configure the OS by clicking things. It’s like poking a ball of mud with a stick. I considered using Mitchell Hashimoto’s NixOS config but I decided to “get” the MacOS way first.
  • Docker: Docker for Desktops is slow and buggy. The M1 compensates for some of the performance issues.
  • The world is not on Apple Silicon yet: I ran into compatibility around C linking layer. C packages sometimes expect headers to be in Intel locations. It’s possible to have Intel brew and Apple Silicon brew at the same time. For me, it became a mess so I ditched the Intel version.
  • No i3wm: I haven’t tried tiling window managers on MacOS yet. It seems they can’t hook into the window management of MacOS the same way i3wm can on Linux. For now, I decided to do it the MacOS way and CMD+Tab my way through open windows and spaces.
  • Finding solutions: The Arch wiki and NixOS repository were my way to go to fix issues myself. Sometimes the fixes were nasty workarounds, but they were fixes. On MacOS I have to wade through threads where the accepted solution is to reboot or clear some cache. The search results reflect that the power users are in the minority.

Apple knows what’s good for you

I am halfway serious. Apple is a trillion-dollar company and has the resources to know what’s good for you. The UX polish comes from the holistic approach to design across the ecosystem.

But who are they designing for? Not programmers.

This is where most of my headache comes from. MacOS doesn’t feel like it’s made to empower developers. How could a tool, that was optimized for a broad audience, possibly empower power users who live in the shell?

If it means clicking on colorful menu items every now and then to use Apple Silicon, so be it!