I switched from Vim to Spacemacs several years ago and have never looked back. At first, Spacemacs offered an amazingly polished and complete editing environment that I immediately fell in love with. But over the years my Spacemacs environment began to fall apart. My config grew stale, I found myself having to write clumsy custom layers to incorporate unsupported Emacs packages, and the background radiation of bugs and glitches started to become unignorable.
At the suggestion of Andrew on Twitter, I decided to ditch Spacemacs completely and roll my own Emacs configuration.
I couldn’t be happier with the result!
Before we dive into some of the details, here’s my entire Emacs init.el
file at the time of posting this article. My current configuration is modeled after the tiny subset of Spacemacs I found myself using on a day-to-day basis. You can get an idea of my typical workflow by looking at my General key mappings.
I work on several projects throughout the day, so I use Projectile to manage operations within each of those projects. I use Perspective to isolate buffers between those projects. The projectile-persp-switch-project
package acts as a nice bridge between the two projects:
"p" 'projectile-command-map
"pp" 'projectile-persp-switch-project
"pf" 'counsel-projectile
Spacemacs has the home-grown concept of a “layout” that lets you switch between numbered workspaces. I was worried I would miss this feature, as a common workflow for me was to hit SPC p l <workspace number>
to switch between various workspaces. Thankfully, I’ve found that projectile-persp-switch-project
works just as well if not better that Spacemac’s “layout” system. I hit SPC p p
and then type one or two characters to narrow down onto the project I want. I no longer have to remember workspace numbers, and I don’t need to worry about exceeding ten workspaces.
When I’m not using counsel-projectile
to find files within a project, I use deer
to navigate directories:
"a" '(:ignore t :which-key "Applications")
"ar" 'ranger
"ad" 'deer
The only other external application I use is a terminal, but I use it so frequently I’ve mapped it to SPC '
, just like Spacemacs:
"'" 'multi-term
I’ve also included a few cosmetic customizations to build out a distraction-free code editing environment.
As you can see, I have a fairly simple workflow, and my custom Emacs configuration reflects that simplicity. Not only is my configuration simpler, but I’ve noticed that startup times have reduced significantly, and the number of in-editor bugs and glitches I’ve encountered as dropped to zero. I’ve also developed a much deeper understanding of Emacs itself and the Emacs ecosystem.
I couldn’t be happier!