Thought

Why I'm Still Using My M2 MacBook Air

Why my 16GB M2 MacBook Air is still enough when paired with a Linux desktop.

I bought my M2 MacBook Air in 2022 with 16GB of RAM and a 1TB SSD.

Every time a new MacBook rumor shows up, I still look. I configure one, check the price, and think about 32GB of memory for a while. More memory would be nice. I would not say no to it.

Then I look at how I actually use this machine, and I usually close the tab.

I do not really have a laptop problem

The first thing I checked was memory pressure. Most of the time it sits around 30–40%. Swap is not doing anything scary. Neovim opens quickly. Git is fine. The browser is fine. The battery is still good.

So the upgrade thought is not coming from a real problem. It is mostly just the usual feeling of wanting the newer thing.

For my current setup, the Air is not the machine that does everything. It is the machine I use directly.

The laptop as a client

This feels normal to me because I spent four years at Google. There, the laptop was mostly a client. Builds and tests ran somewhere else. The laptop mattered, but not because it had to carry all the work by itself.

My home setup is a small and less polished version of that.

I have a Linux desktop next to the Air:

  • RTX 4090
  • 128GB DDR4
  • Ryzen 5 5600X

The CPU is not new, and the setup is not special. It is just a Linux machine with a lot of memory and a good GPU.

The MacBook is where I edit, browse, and use the terminal. The desktop is where heavier things run.

Edit locally, run remotely

I keep Neovim local on the Mac.

I can edit over SSH or mosh, and for quick changes it is fine. I also still like mosh for normal terminal work. I wrote about that setup here: Making Mosh My Default Remote Terminal.

But for my main editor, local still feels better. LSP, Telescope, Treesitter, file search — small delays there bother me more than I expected.

So the source tree stays on the Mac. When I need to build, test, or run something on Linux, I sync it over.

rsync -avz --delete --exclude='.git' \
  ~/projects/myapp/ user@linux:/home/user/projects/myapp/

The Linux copy is just a copy. I do not edit there, and I do not treat it as the source of truth.

For branch-heavy work, git worktrees make this easier. Each branch has its own directory, and each directory can have a stable rsync target. It is boring, but it works.

When I need a Linux screen

Most of the time, a terminal is enough. When it is not, I use ThinLinc.

It lets me open a real Linux desktop from the Mac over Tailscale. If I need a browser on Linux, a GUI tool, or a few terminal windows that stay in one place, I use that.

I do not use ThinLinc as my main editor. The Mac is still where I type most of the code. ThinLinc is more like a window into the desktop machine.

The split is simple:

  • Mac for editing
  • mosh or SSH for terminal work
  • ThinLinc when I want the Linux desktop
  • rsync when the code needs to run there

Heavy Docker use belongs on the desktop

I still use Docker on the Mac when it makes sense. For small things, it is fine.

But Docker is a Linux tool at heart. On macOS it runs through a Linux VM. Usually that does not matter much, but it starts to matter when containers get heavy or stay running all day.

I do not like leaving big Docker setups running on the laptop. They eat memory, wake the machine up, and slowly turn a light laptop into a small server.

The desktop is better for that. It runs Docker on Linux and has 128GB of RAM, so I can leave bigger stacks running without thinking about it too much. I use it for things like Immich and Excalidraw, and also for random test services when I want a clean place to run something.

This is one of the reasons the Air still feels fine. The Mac can run Docker, but it does not need to be my server, my build box, my heavy Docker host, and my laptop at the same time.

Why the 16GB Air still works

If the Air had to run everything locally, 16GB would bother me more.

But it does not. Large Docker stacks, GPU work, and long Linux builds can move to the desktop. The Air only needs to stay responsive while I write code and move around projects.

That is also why the fanless design has not been a problem. The machine is quiet because I am not asking it to act like a workstation all day.

The CPU is not the main point

The Ryzen 5 5600X is from 2020. It is old enough that people can call it old.

For my use, it is still fine. Six cores are not amazing for huge parallel builds, but it has not been annoying enough to replace. If that changes, AM4 still gives me an easy path to a 5900X or 5950X.

The GPU matters more to me anyway.

Local LLMs

The 4090 has 24GB of VRAM, which makes local coding models useful enough to keep around.

I used to reach for Ollama for this kind of thing, but these days I usually run models through llama.cpp directly. It is a little more manual, but I like knowing what is actually running.

The model changes from time to time, so the name is not important here. The desktop runs the model, and the Mac reaches it over Tailscale.

When I want to keep a coding agent local, I point it at the llama.cpp server instead of sending everything to a hosted model.

It is not a replacement for the best hosted models. For hard work, I still want the strongest model I can get. But for simple refactors, boilerplate, code search, or trying an idea, a local model on the 4090 is useful enough.

What would make me upgrade

If I lost the Linux desktop, I would probably feel differently very quickly. Then the Air would have to do everything: containers, builds, local models, and all the usual browser and editor work. In that world, 16GB would feel tight.

But that is not my setup right now.

Right now the Air is a portable front end to a stronger Linux machine. It has a good keyboard, good battery life, and it stays out of the way.

So I am keeping it.

M2 MacBook Air 16GB / Linux Desktop: RTX 4090, Ryzen 5 5600X, 128GB DDR4 / Tailscale / Neovim / rsync / git worktree / ThinLinc / Docker / llama.cpp / coding agents

More thoughts

Making Pi Feel Local, Safely

A local-feeling agent, contained behind snapshots.

What OSCP Taught Me About Problem Solving

Learning to break systems, and rebuild confidence.

Making Mosh My Default Remote Terminal

A remote shell that stays connected, scrollable, and quiet.