From time to time I’m asked, perhaps especially as a non-dev who uses Emacs every day, how I got into what is considered development software and one seen as esoteric and antiquated at that. I thought I’d write about my experience with Emacs and the advice I would personally give to people who are thinking of getting into it.

Destination: Emacs

It probably helped lead me to Emacs that I’ve been a hobby coder for decades and like to fiddle with computers. I’m known as the tech person in my family, and have written small apps in Python 2 including an IRC dicebot in the 00’s. (Yes, I’m That old.) I’ve used PHP and MySQL to run hosted blogs; I’ve tried Ubuntu and now use an Arch Linux installation daily. Coding and computers don’t scare me, and what I lack in expertise and training I make up for in sheer determination and willingness to pour countless hours into solving a problem (thanks, ADHD hyperfocus!!). So in a way a developer’s tool like Emacs was a natural fit for me.

Even so, I don’t think I would have bothered with something as complex as Emacs if it weren’t for my growing discontentment with the software I used in my writing. LibreOffice was and is my favorite word processor but still, it’s a word processor. They have their uses and are necessary for my work, but the mix of formatting and content was constraining for first drafts, and the completely linear treatment of the text did not lend itself to flexible thinking about the text and content. Ultimately, in my workflow, word processors are for presenting text, not creating it.

Scrivener was great while it lasted. At the time it was a completely new paradigm of writing software for me, with the ability to make text modular and to rearrange it, and snapshots as a rudimentary form of version control. Still, it too had its problems. The lack of certain functions like mobile editing, good collaboration support, and portable files became increasingly glaring.

The last straw came when I was locked out of software I had paid for–twice, on Windows and later Macbook!–due to the company’s server problems. Shortly afterward I moved to Linux because my perfectly serviceable Macbook Air was too low-spec for the newest Mac OS upgrades, and using Scrivener became a moot point anyway.

Years of experience with Scrivener did give me a better idea of what I wanted in a piece of writing software, however: Separation of content and presentation, version control, and the ability to move pieces of text around and edit them individually. I also wanted them in a form that couldn’t be arbitrarily locked down, corrupted, or otherwise made inaccessible.

Obviously, I learned over time that the things I wanted were doable by editing in plain text formats. I looked around for plaintext editing options that would also allow for making text modular. LaTeX was in serious running for a while and I even read a book about it before deciding it wasn’t right for me and my non-technical use-case. AsciiDoc was great and I worked on a fair number of projects with it writing on Vim, which was when I completely fell in love with Vim’s editing capabilities. The modular treatment of text was incomplete at best under this format and software combination, however. I even thought about writing an Atom plugin or even writing a text editor myself to get the functions I wanted—yeah, that would have gone well lol. (Update 2022-10-22: GitHub since pulled the plug on Atom so that option wouldn’t have worked out anyway.)

Then I found out about Emacs and Org Mode. Through my research I learned Org had everything I was looking for, could be exported to a bunch of other formats, and that it emulated Vim commands through Evil Mode. Sold, sold, and sold. I decided to make the jump. I installed Emacs and very slowly started trying things on it and learning the ropes.

Building up my Emacs configuration

It took me a while to “warm up” to real configuration work on Emacs. I used it intermittently for months learning basic commands, configuring almost nothing and even keeping the almost combatively ugly default start screen enabled. I did the built-in tutorial, read or watched some guides like this amazing talk by Org Mode creator Carsten Dominik, and tried to get used to the interface when I had spare time.

At first I didn’t even install Evil Mode despite not liking the default Emacs movement keys at all. For one thing I hadn’t figured out the package system yet, and even though it was always the plan to install Evil Mode and its availability was one reason I made the jump from Vim to Emacs, I wanted to give the native Emacs commands a fair shake and at least learn the basics first.

I slowly got into things like Org Mode, using the most basic functions which were more than enough when I was still new to it and learning the ropes. As Carsten Dominik put it, that’s a great thing about Org: You can start as simply as you like, and work your way up to as much or as little complexity as you need.

It was only after months of having at least a shaky grasp of basic Emacs functions that I started doing things like configuring visuals and adding packages, spurred on in part by the Emacs from Scratch videos on the System Crafters channel that was just taking off at the time. I didn’ use even a fraction of the advice given on that channel, though. Instead I mostly used the videos as inspiration and a jumping-off point for more research when I saw the host doing stuff I wanted for my own setup.

Satisfied Mode

Since then I’ve read two books about Emacs, Learning Gnu Emacs and Mastering Emacs. I found them engaging reads that taught me a lot more about how Emacs works. I have also been intermittently reading the Org Mode Manual, from which I learned a lot of little tricks to make Org more versatile and convenient for me.

Between these efforts and a lot of things I found out through YouTube, Reddit, and online friends, my init.el has grown to a little over 300 lines. (Update 2024-10-28: As of today it’s 653 lines.) That’s tiny in comparison to Emacs veterans, of course, but is in keeping with my motto, as they say, to move slow and fix things. I’m not technically ambitious or highly skilled; I just want a tool that works more or less how I want it to, and would not be pulled out from under users like the poor Atom editor. GNU Emacs, configured little by little entirely at my own pace and actively developed for decades by a worldwide team of maintainers and contributors, exactly fits that bill.

The good news is, that means you can use Emacs too as someone who isn’t necessarily technologically proficient and just wants a stable working environment, if you don’t mind a slow pace and some work including a little coding.

General advice

My best advice based on personal experience? Don’t rush it!

Emacs can seem big and intimidating if you want to learn the ins and outs and to customize it to your exact needs, and honestly it is intimidating and time-consuming to do all that.

It becomes more manageable, though, when you start simple and go slowly. Add configurations and packages as you feel the need and as you become more comfortable with the platform and Emacs Lisp, the everyday language of Emacs.

Going step by step, breaking and then fixing things as you go, will help you understand your configuration and learn with it. It’ll make the dreaded “.emacs bankruptcy” where your configuration breaks beyond repair less likely, both because your configuration will be easier to debug when it changes in increments and because you understand what went into it.

I guess the above tips my hand on the “vanilla or packaged distro” issue, too. By packaged distros I mean distributions like Doom Emacs or Space Emacs that come with a lot of configurations out of the box, with Vim-style keybindings in the case of both Doom and Space Emacs.

To be clear, I’m not about to tell anyone not to get an Emacs distro. They do cool stuff at only a fraction of the time and effort of setting up vanilla Emacs, and I can see why they’re popular. If spending a lot of painstaking effort on configurations isn’t your thing and a distro looks right for you, by all means go for it.

That said, I would not install a distro myself because I’ve heard stories of the codebase breaking or no longer being supported in some environments. This is not the kind of risk I’m willing to take, to lose an entire working environment I’ve come to rely on with no practical way to get it back. For me vanilla GNU Emacs, configured by my hand, is much more versatile and easier to repair in case something breaks or changes.

Distros are a valid choice depending on your personal balance of stability versus convenience. I just happen to fall more on the stability side of things, and it doesn’t hurt that I actually like to spend time on configurations because I find them fun to do, in reasonable doses.

Above all, I hope you’ll have fun with it! Emacs is a practical and powerful platform, but it can also be a deeply personal project that is molded to you and changes according to your needs, preferences, and growing skill. Emacs is my main software for writing, my file manager, my task and schedule manager, my email program, my main git interface, my feed reader… so much of my life is tied into it. It’s an experience like no other I’ve had with software and can be a rollercoaster of excitement for the new, the comfort of the familiar, and, I’ll be honest, bouts of hair-tearing frustration. There’s also the good, solid satisfaction of crafting a tool you use daily with your own hands, piece by piece. You can make it uniquely yours if you’re willing to put in the work. That may be the true gift of Emacs, the ability to make it your own in every sense.

(This post was edited and updated on October 28, 2024.)