Starting Emacs from Scratch (again)

Oh well, like for many others, my history of Emacs configurations is long and varied. Time to start the next chapter.

I’m not sure if I can recollect everything 100% correctly, but I will try my best. My history of Emacs goes something like this…

Raw mode

Way back when, I started with bare bones Emacs. No special configuration, just the raw out-of-the-box experience.

Everyone remotely familiar with Emacs will know that this is an interesting experience. Emacs, being the dinosaur that it is, is nothing like other editors. It breaks many conventions we are nowadays used to. Want to use Ctrl-C and Ctrl-V for copy/paste? Good luck, let me know how it goes!

Besides the idiosyncrasies and outdated UI (all of which is configurable) it was a very different kind of choice back then. If you were looking for a powerful editor there weren’t too many choices actually.

Sure, there were several big IDEs: Eclipse, Visual Studio (the big one, not VS Code) and the like. But that’s IDEs, not text editors.

There was also Vim of course, Notepad++ was often recommended on Windows, TextMate had quite some following on the Mac, and many others floated around as well. I remember Sublime also gained quite some traction but at that point it hadn’t entered the scene yet. Atom and then VS Code weren’t even on the horizon.

Given the “competition” I can still somewhat understand why I chose and stuck with Emacs, even after experiencing bare bones mode. I honestly don’t know what would happen if I was editor shopping nowadays. It’s much less clear to me that I would still make the same choice. This thought saddens me, because you have to invest significant time before you really understand the power of Emacs. A few years later and I might not have invested that time.

Anyways. Onto the next stage of my Emacs configuration journey.

Feeling my way in Elisp

After no configuration, the next step was writing some configuration. It wasn’t fancy at all. Some basic “settings” in my init.el. Small snippets of Elisp that I mostly copied from somewhere.

Mind you that the Emacs packages of today didn’t exist yet, neither did GitHub. The main source for Elisp was random blogs and pages on the internet, and of course the venerable https://www.emacswiki.org/.

I believe I also did some first little steps with integrating LaTeX and org-mode at this point. Nothing too sophisticated. It was a few weeks, maybe a month or two, from bare bones to some first meaningful customizations.

It also didn’t take too long until I a) fell deep into the Emacs rabbit hole and b) my config became an unmanageable mess. I had to declare Emacs configuration bankruptcy.

Literate tangling

The next big transformation I remember was a literal config in org mode that got tangled to an init.el file. This is still an approach many people choose to organize their Emacs configuration.

My customizations grew quite a bit during my literate config time. Unfortunately I have no trace left of it. But I did use, or at least experimented with using, Emacs for almost anything. I tried to use many, many functionalities of org-mode, used it for writing LaTeX, programming in several languages and I believe this was also the first time I gave e-mail, IRC, and RSS a shot in Emacs.

One thing I remember clearly is that I wrote a lot of LaTeX back then and my LaTex config was quite sophisticated. I believe Emacs was literally the best LaTeX authoring environment one could get at that time. I’m not using LaTeX anymore and I can’t say if this still holds true. My guess would be that Emacs is still great, but that some of the specialized online editors or VS Code got quite sophisticated by now too.

My literate org-based config worked quite well actually. Well enough so that I did not have to declare configuration bankruptcy. No, the reason for throwing out my configuration yet again was a different one this time.

The dawn of Emacs distributions

When Spacemacs dropped onto the scene 1 my head exploded. Spacemacs is a community-driven Emacs configuration. I had spent many hours with my configuration by then, but this was on a whole other level.

Long story short: I threw out my home-grown literal config and switched to Spacemacs. My Emacs game got to another level. Not so much because I learned how to do things, but because I learned what was even possible. This was not just configuring Emacs, this was programming Emacs, transforming it, bending it, building on top of it.

I stuck with Spacemacs for quite some time. Doom Emacs - another such community-driven configuration - was all over the Emacs scene already when I was still happy with Spacemacs.

Eventually, I drank the cool-aid and switched over to Doom. Doom is a tremendous project and I stuck with Doom for probably the longest of all my configuration variations so far. However, there’s not much else to say about it. Conceptually it is very similar to Spacemacs - a pre-canned, extremely advanced and powerful Emacs configuration.

Since then also something else happened. Something that I want to call the cambrian explosion of the Emacs ecosystem. A massive amount of high-quality, ingenious and tremendously useful packages entered the scene. Starting with helm and company-mode, over to vertico, marginalia, orderless, embark, consult, corfu, eglot, lsp-mode, which-key, general, vterm, eat, treesitter integration, use-package, package.el, straight, gpt.el, chatgpt-shell, and uncountable little helpers,… the list is sheer endless.

What also came with this cambrian explosion is that it was never easier to roll your own high-quality, extremely capable Emacs “distribution” from scratch — tailored exactly to your needs.

Back to the beginnings

I guess this was a long time coming. I was very happy with Doom and I was afraid that I couldn’t get such a smooth and polished experience by rolling my own configuration. At least not without a lot of time and effort.

There are so many little tweaks, hacks and ironed-out quirks in these pre-made distributions. The thought alone of duplicating all this on my own was daunting, and not having them scared me too. I rely heavily on Emacs at work and I just cannot take some hours off to iron out some Emacs quirk there. Emacs has to work reliably. It felt like Doom takes care of this for me, and without Doom I’m doomed.

Doom does provide a lot, but it also takes some. Namingly, it makes your own configuration harder and less tailored. It comes with additional layers and its own concepts on top of the already vast sea of Emacs concepts. There was just no way around it. If I wanted to level up in my Emacs game yet again, I had to bite the bullet.

I spent many hours over the last week to roll my own Emacs again. For the most part I knew what I wanted from Doom. It was still a lot of effort to get there. I am now writing this from my new “Emacs from Scratch” and so far I’m happy with the result. I understand everything in my config. It contains exactly what I need. Nothing more, nothing less. Tweaking little things (and I did this a couple times since then already) was never simpler. In part because I understand every little detail about my config now. It is hand-made exactly to my needs. Emacs is my editor again.


  1. Another Emacs-first I believe. Nowadays, there are many such pre-canned, community-driven configurations for various editors. But I think it was pretty much an Emacs invention back then. ↩︎