I am not a “sensible” person by the commonly-held definition of the adjective. I can prove it.
- Sensible people don’t use Unix-like operating systems.
- If they must use Unix, sensible people don’t use GNU Emacs.
- If they must use Emacs, sensible people don’t try to configure it themselves.
- If they must configure Emacs themselves, sensible people don’t put their custom configuration where unsuspecting newbies might find it.
However, I am not a sensible person. If you’re on this website, you might have noticed that without my needing to belabor the obvious.
This is not the first time I’ve thrown out a custom Emacs configuration and started from scratch. It might be the sixth, at the bare minimum. I haven’t been counting.
I do it myself because I’m not satisfied with prepackaged configurations like Spacemacs, Doom Emacs, or even Prelude. There is nothing wrong with any of these packages. If they suit you, by all means use them.
They just don’t suit me.
Even Prelude provides too much extraneous functionality, and both Spacemacs and Doom use Evil, the “extensible vi layer for Emacs”.
There’s nothing wrong with that, or with vi and friends, but if I want vi I know where to find it.
It’s right there in /usr/bin/ on Debian.
(I’ve got ed(1) in there, too.)
What I want is a configuration that gives me the functionality I want — nothing more or less. However, Emacs isn’t Burger King. If you want to have it your way, you’ve got to do it yourself.
So, what do I want? Not that much, really.
- I want to be able to add to my website by writing raw HTML, edit stylesheets, and maybe even bash out a little JavaScript if I ever get drunk enough to forget why I detest JS.
- I want to be able to use Markdown or Org Mode when it makes sense to do so.
- I want to be able to write and run makefiles.
- I want to be able to write shell scripts, sed scripts, and m4 macros.
- I want to be able to manually edit CSV and TSV files if necessary.
- I want to be able to listen to music without having to switch to a separate player app.
- I want to be able to read text on the World Wide Web without having to switch to a separate browser.
- I want to read my web feeds in Emacs, without having to mess with my config file every time I find a new feed.
- I want to be able to read public domain ebooks in EPUB format within Emacs.
- I want to be able to look up the definition of a word within Emacs.
- I want to use Emacs as a terminal emulator.
- I want to use Emacs as a file manager.
- I want — someday — to be able to read and write email in Emacs.
- I want tab completion where it makes sense to have it.
- I want a smoother
gitworkflow than bashing out commands in a separate terminal window. - I want Emacs to keep track of recent files and projects, while saving my place within files.
- I want to see what I last worked on when I start up Emacs after rebooting a computer.
- I want Emacs to look stylish. After all, I paid for a Berkeley Mono license, and by Arioch I mean to get my money’s worth.
tangent on email in Emacs
I don’t particularly want any other functionality right now, but if I change my mind I want to be able to easily add it.
And I certainly don’t want Emacs to pretend it’s vi, or work like some unholy bastard hybrid of the two.
As I mentioned earlier, if I want vi I know where to find it.
Fortunately, I know enough Emacs Lisp that I can cobble together a configuration, though I am indebted to Peter Prevos and Protesilaos Stavrou for sharing their configurations with the general public; they proved useful as reference implementations when I wasn’t copying stanzas wholesale into my scratch buffer and evaluating them before adding them to my config files. It was worthwhile to take an evening to bash out a new config, and then to spend the afternoon watching Chainsaw Man while manually pulling every feed URL out of NetNewsWire while adding a few new feeds from acquaintances on 32bit Cafe.
If you’re using Emacs as well, my configuration is available as a git repository. After making a backup of your current configuration, you can clone it as follows:
$ git clone https://git.sr.ht/~starbreaker/emacs-config ~/.config/emacs
You can also view my config files from here:
Take what you need and discard the rest.
If you are new to this, try running bits and pieces in your scratch buffer.
Just paste a snippet, run M-x eval-buffer and observe the result.
Below you’ll find some screenshots of Emacs with my current configuration in action.
Incidentally, I’m not the only one rebuilding an Emacs configuration lately.
- https://smol.hedy.dev/re-baty-emacs-from-scratch
- https://baty.net/posts/2024/12/emacs-from-scratch-once-again
update: using ready-play
I decided to get rid of bongo after trying the ready-player package by Álvaro Ramírez.
It lets me play media by selecting files in dired.
If you want to give it a go, add this to your config.
I had tried it once a few months ago, but it was still pretty rough.
It’s a lot better now.
(use-package ready-player
:ensure t
:config
(setq ready-player-my-media-collection-location "~/Music")
(ready-player-mode +1))
If your music collection doesn’t live in ~/Music, replace that with the appropriate path.
Here’s how it looks on one of my machines.