iex> Ken</>

Evicted by an OS beta: moving from Doom Emacs to Neovim on macOS 27

iex> Blog.post!("20260914-doom-emacs-to-neovim")
%Post{
title: "Evicted by an OS beta: moving from Doom Emacs to Neovim on macOS 27",
date: ~D[],
author: ,
reading_time: 5, # minutes
tags: [:emacs, :neovim, :macos],
body: """

I run the macOS beta. I know what that means. It means that a few times a year, something I depend on stops working and I am not allowed to be surprised about it.

This time it was Doom Emacs. After updating to macOS 27, the daemon wouldn't start and the GUI wouldn't open. Not a slow start, not a broken package, not a mode misbehaving. Nothing on screen.

The circular part

The specific cruelty of an editor breaking is that the editor is what you fix things with. Every path back to a working Doom went through reading config, reading logs, editing elisp, and the comfortable place to do all of that was the thing that would no longer launch.

This is a solvable problem. Of course it is. Somewhere down there is a rebuild, a native-comp question, a Homebrew formula that hasn't caught up to a beta OS yet, and a few evenings of my life. I've done that dance before and I'd have done it again.

But I made the mistake of asking why I wanted to.

The detour through Zed

First I tried Zed. It's fast, it's modern, people whose taste I trust like it, and it was sitting right there being an obvious answer.

It's a GUI editor. I am a terminal person. Not in an ideological way, just in the way where my editor lives in a pane next to other panes and everything I do assumes that. Zed is a good piece of software that wants to be a window, and I wanted a buffer in a terminal, and no amount of quality fixes a mismatch that basic.

Evil mode had been preparing me for this

Here's the thing about running Doom with evil mode for years: your hands are not Emacs hands. They're vim hands. hjkl, ciw, dap, all of it, for so long that the motions stopped being a thing I think about.

Which means the part of Doom I actually used every second of every day was a very elaborate vim. The Emacs underneath was the delivery mechanism, not the thing itself.

None of which is an argument about vim versus Emacs. That war is older than my career, both sides settled it to their own satisfaction decades ago, and I have nothing to add to it. This is a story about which process starts on a beta OS.

So the honest version of my situation was not "my editor broke". It was "the runtime hosting my editor broke, and there's another runtime right there, and it starts".

The switch took one command

brew install neovim

It opened. That was the entire drama.

I'd braced for a project: a week of config archaeology, a plugin manager to learn, a list of things to port. Instead the motions were already in my fingers, the defaults were sane, and getting to something I could work in took an afternoon rather than a weekend. Modern Neovim is genuinely easy to set up in a way I was not expecting from the vim of my memory, which was a text editor that treated configuration as a hazing ritual.

Doom, for all its virtues, was never easy to configure. Good defaults are the pitch, and the pitch holds exactly until you want something the defaults don't do. Then you're writing elisp against a config framework, sitting on a package manager, sitting on Emacs, and the hard part isn't deciding what you want. It's working out which of the three layers is supposed to want it for you.

What I actually like about it

Three things, none of them nostalgia.

It's light. It starts immediately and stays out of the way, which after years of an editor I ran as a daemon specifically so I'd never have to watch it start is a slightly pointed observation.

Tree-sitter. Real parsing, a real syntax tree, so highlighting and motions operate on the structure of the code instead of a pile of regexes doing an impression of understanding it.

Plugins. The ecosystem assumes you'll want to assemble your own thing, and assembling your own thing is straightforward rather than a rite of passage. That's the part I keep being surprised by.

What I haven't answered yet

Doom was never only an editor, and I'm still finding out which of the surrounding pieces I actually miss versus which ones I merely had. Some of it I've clearly been carrying out of habit. Some of it I'll notice the absence of in three weeks, at the worst possible moment, mid-task. That list isn't finished.

So: undecided, officially. I've been on Neovim for a short enough time that anyone declaring a verdict at this point is performing, not reporting.

Unofficially, I notice I haven't tried to fix Doom. It's been days. There's a version of me that spends this weekend rebuilding Emacs against the new OS, and I don't seem to be him. When an upstream fix lands I'll probably read the release note, nod, and not act on it.

Which is a strange way to leave a tool you liked. No argument, no better feature, no conversion. Just an OS beta that reset the default, and the thing that started.

"""
}
iex> Blog.Post.tip()
"If this post saved you time or taught you something, please consider buying me a coffee on Ko-fi ☕. It keeps me writing in the open."
iex> Blog.archive()
iex> Blog.subscribe(:atom)
"/blog/atom.xml" # paste into any RSS reader
iex> Ken.tip()