I think that using Emacs is a type of life-long project. It is deep, famously all-encompassing, and there are uncountable interesting rabbit holes to go down and endless tweaking which can be done. It’s exciting and fun, if you like that kind of thing (which I definitely do). Between the bouts of tweaking and honing your editing tool to fit your needs precisely, you get useful and satisfying writing and editing done with it.
However, I don’t think that I’m the only person who cycles through bouts of using one of the big Emacs frameworks (for me, usually Doom Emacs) and configuring Emacs from scratch. Looking back in this blog, my last ‘From Scratch’ cycle was in October of 2021, and before that, October of 2018, so I seem to be on about a 3-year Emacs From Scratch cycle. This — I have come to realise — is The Way of Things, and as natural as the annual migration of salmon to their spawning grounds, or the 13 or 17 year life cycle of some species of cicada. Let me try to explain.
It struck me the other day that there is probably more variation and diversity among different users’ Emacs configurations than among the configurations of any other editor. Users are able to change almost any aspect of the way that Emacs functions, with easy access to clear documentation explaining how it works right now, and how you can change it. This means that each instance of Emacs ends up a unique shape, like an old tool with a wooden handle worn down into the shape of its owners’ habitual grasp. That simile doesn’t quite work, because Emacs users work hard and deliberately to shape their Emacs tools to fit their needs, so it is more than just passive wear.
Nevertheless, if you can avoid using Emacs just to configure Emacs (which is an eternal temptation), there are many decisions to be made about what you need and want to help you to write and edit text (whether prose, code or a mixture of the two). It involves thinking deeply about how you write and edit. What helps you and what breaks your flow of thought?
In my most recent ‘From Scratch’ cycle, I decided to hold back on adding packages that I have used before and to only add things when I got genuinely irritated by not having them. Then I would install a package to fix that irritation, but honestly evaluate whether it worked better for me than the default. I was surprised to find that I ended up with very few additional packages. I tried some things out and then uninstalled them, including various modal editing packages. This time I am going with the standard Emacs editing commands, only very lightly supplemented with avy to jump around and future plans to steal some of Karthik’s brilliant avy actions if I feel the need for them. This has surprised me. I have been a die-hard modal editor for years, but as I get used to the Emacs editing shortcuts, learn to mark text more efficiently, and use negative and numbered prefixes more effectively, The Emacs Way is growing on me. There’s something about not having to mentally shift gears from writing to editing mode that is quite fluid and pleasant, and seems to be working well for me, in prose and code writing.
This paring down of complexity has helped me to keep focussed and only add the tools and commands that I actually use, instead of those that I might use. I added which-key to help remind me what my options are, but set up my own prefix of C-c with limited commands added to mappings for buffers, files and so on, including only the ones that I actually need and use. I use the Vertico/Consult/Orderless/Marginalia/Embark stack because Emacs does feel clunky without it, and because they work so seamlessly with the built-in tools. The only other substantial package I added was alphapapa’s activities.el, which lets you set up and save a configuration of windows and buffers in a frame or tab (I ended up using frames), and to switch to or suspend that configuration at will. For me, each activity is a project, and I wrote a couple of simple ‘do what I mean’ functions to call the project versions of switch-buffer or find-file if I am in a project, or the standard versions if not. I find it works very well, and is a seamless way to move between different working contexts without complexity or distraction.
That brings me back to the ‘From Scratch’ cycle again. This work of personalising your tools is fun but can require a lot of experimentation and many decisions. As you may know, I have made my own clothes for several years now, and I see that activity as being similar. If you make your own clothes, you can personalise every aspect of them, from the size, the fit, the fabric and colour, and even the size and placement of pockets. However, that involves a lot of thought and many decisions. Sometimes you find yourself thinking, “why don’t I just buy a nice ready-made T-shirt?” Again, this is not a perfect simile because frameworks like Doom also allow a huge amount of customisation. However, along with that, you have a lot of (often very smart) decisions made for you, and many features that you probably don’t need or use.
So when you weary of having to make a lot of decisions in order to tailor a garment, you end up buying a nice ready-made one. That’s lovely for a while, but then you notice that the shirt isn’t the length you prefer, and the sleeves could be a bit shorter or wider, and back you go to your sewing machine. It’s a natural cycle. What I have come to appreciate is that you don’t go back to zero each time. Every cycle teaches you more about how you want your personal Emacs to work, about what you need and what you think you want but don’t actually use. On every cycle, the curves of Emacs get smoothed and shaped a bit more to match your grasp. This is true even if you really start from scratch each time, because the thinking and learning is the important part, not the configuration.