M-% || M-x query-replace

Sachin’s random thoughts.

12 Jul 2023

Doom or Vanilla Emacs

What is Emacs?

For the unenlightened, Emacs1 according GNU is “an extensible, customizable, free/libre text editor - and more”. Due to it’s extensibility and vibrant community, it can become a catch all application for many of the operations2 on your computer. Emacs can take on everything from a simple text editor, to an IDE3, to a fully fledged window manager and desktop environment4. Using one application for most tasks can help reduce context switching5.

What is Doom Emacs?

From the Doom Emacs repo6:

Doom is a configuration framework for GNU Emacs tailored for Emacs bankruptcy veterans who want less framework in their frameworks, a modicum of stability (and reproducibility) from their package manager, and the performance of a hand rolled config (or better). It can be a foundation for your own config or a resource for Emacs enthusiasts to learn more about our favorite operating system.

Essentially, not unlike how Arch Linux provides a baseline over the linux kernel, so you don’t have to deal with linux from scratch, Doom provides a similar abstraction layer over the almost unusable kernel7 that is Vanilla Emacs. Doom Emacs expands on Vanilla Emacs to enable friendly extensibility and sane defaults.

Doom Emacs vs Vanilla Emacs

If you are writing code in today’s world, there are a few things that you might expect of your editor:

  • █ means full support
  • ▅ means some support
  • ▁ means limited support
    Vanilla Doom
    Syntax Highlighting
    Code Completion
    Code Formatting 8
    Integrated Debugging Capabilities
    Version Control Integration
    Integrated Terminal9
    Code Navigation and Search
    Plugin and Extension System
    Performance Analysis10
    Project Management
    Cross Platform11

By the way, these are my opinions from my experiences. There are links to packages and documentation where available.

Who uses Emacs?

I think that there are 3 classes of users; new users, moderately experienced users, and extreme veterans, with new users making up the majority of users12.

Vanilla Emacs does a really bad job of appealing to new users. The Emacs manual13 is hard to navigate, and the defaults are horrendous14. Mainline Emacs defaults unlike Vim15 has failed to keep up with the times.

My Experience

0-2 years

I started with Emacs in console mode16, which forced me to learn emacs commands (cause there is no mouse interface).

2-6 years

Then, I used Emacs in GUI mode for 4 years with a custom emacs config which was quite difficult to manage. I really learned a lot more elisp in this time.

6-7 years

Finally, I have switched to Doom and my config is way nicer. The most significant differences for me are package management, startup time17, and configuration18.

In addition, my Doom Emacs config is startlingly similar to my old config (just more stable). I had a lot of the same packages installed, but just with a lot more cleanliness.

New Users

The argument is perhaps most convincing for new users. If you are coming to Emacs new, chances are (especially with well-polished tools like VSCode), you are not interested in using a clunky piece of software from the 80s19. I think that the batteries included approach of Doom Emacs has no comparison with Vanilla Emacs.

The only issue with Doom Emacs for new users is that you don’t learn the true Emacs internals well (however this may not be necessary for most users).

Moderately Experienced Users

If you have experience with Emacs already, I think that Doom Emacs just gives you a way to build the environment you are looking for faster and cleaner than you otherwise would be able to do.

In addition, Doom is extensible enough to where to can customize pretty much everything that you need to20.

Extreme Veterans

I don’t know how much authority I have to talk on this. But if something works perfectly, and you can manage it perfectly, you should not switch to Doom.

It might make your life easier if you want, but also if you’re extremely experienced with Emacs, you probably shouldn’t be reading this.

Summary

Whether it is a completely preconfigured environment for a new user, or a batteries included shell to build a home in, Doom has something to offer. I think the exception to this is for an advanced user who is perfectly happy with their current config. Other than that, for the vast majority of users Doom really is a great tool.

If you want to install Doom, here’s the Doom getting started guide


  1. Emacs GNU site ↩︎

  2. Some examples are Email, Calendar, Web Browsing, Interactive Development Environment, File Viewing, Data Processing, and even Window Management ↩︎

  3. lsp-mode and eglot are amazing ↩︎

  4. exwm and it’s arch wiki page ↩︎

  5. Impact of Task Switching and Work Interruptions on Software Development Processes - Specifically the concept of reimmersion ↩︎

  6. Source and Documentation ↩︎

  7. This is a hot take, however, I don’t know anyone (except my OOP Prof) that uses Vanilla Emacs ↩︎

  8. Doom Emacs integrates with language server protocol, so there is language specific formatting for everything. ↩︎

  9. There are a few main terminals eshell, shell, term, and vterm. I have a strong devotion to vterm and really dislike the rest, but there is valid disagreement. Everything except vterm is native. ↩︎

  10. I don’t actually know any tooling that is integrated that does this. ↩︎

  11. I really only run on Linux, and Emacs works best on Linux. There are forks for MacOS, and Windows, however it is the the year of the linux desktop ↩︎

  12. Taken from the emacs survey for 2020 (just the graph↩︎

  13. Bring it up with C-h. GNU site ↩︎

  14. idiomdrottning has a few listed. ↩︎

  15. neovim is pretty amazing and modern. ↩︎

  16. This just means that everything was TUI (only in my terminal) ↩︎

  17. “Gotta go fast. Startup and run-time performance are priorities. Doom goes beyond by modifying packages to be snappier and load lazier”, from Doom intro↩︎

  18. Package installation and package customization ↩︎

  19. Gosling Emacs was written in 1981, and then Stallman wrote GNU Emacs in 1985. The real major difference is that Gosling Emacs is written in C, and then Stallman converted it to true Lisp and made it more extensible along the way. ↩︎

  20. Everything is use-package under the hood ↩︎