A few months ago I wrote a post detailing my Emacs journey so far.
Having read quite a lot of community posts, I think my path is one oft-taken:
- Start out with someone else's opinionated config.
- Slowly adapt that config to fit my own
needswhims.- In my case how do I get this to be more like Vim?
- Play around with all the things Emacs can do, stuffing the config with packages and snippets copied uncritically from various sources.
- Read actual documentation (in my case Mastering Emacs) and learn to do things "the Emacs way".
- Rip out almost everything and start from scratch, focusing narrowly on my 'actual' needs.
At the time of my previous post, I was firmly at step 3.
My config was growing and growing, and I had layers of custom bindings and commands that were starting to feel productive, but were also keeping me from learning how to do things the Emacs way.
Emacs is radically extensible and can easily be made to emulate other tools that I'm familiar with like VS Code or Vim (via styling, plugins, or even just direct 'emulation'), but I felt an increasing dissonance the farther I pushed it in those directions.
Furthermore, as I lamented in a 'sidebar' in a previous post, I hadn't yet learned how to consult the built-in documentation in Emacs - a real limitation given that Emacs does more than any tool I've ever used in providing a veritable wealth of comprehensive documentation and guidance.
Working in Emacs
In January, I returned to work after a nearly 4-month long parental leave.
Returning to work meant:
- Far more time spent in Org mode trying to keep my work life structured,
- Far less tolerance for half-baked or half-working configuration,
- Far less time (i.e. none) to play around with new packages and hobby-coding.
Org mode has been nothing short of a godsend for me at work, and as I wrote in my previous posts on "Why/How I Emacs", Org mode was the first "killer app" for me with adopting Emacs. I was skeptical at first, and the learning curve was steep, but I'm so happy I stuck with it. After a few 7am coffee sessions at work tweaking different parts of my Org mode config, I now have a simple little setup that I love and still has lots of room to mature.1
When Emacs 30.1 released in mid-February, I decided to dive in and finally purchase Mastering Emacs. I'm so happy I did! The book eases you smoothly into "the Emacs way", with a great balance of technical and mindset explanations, to bring you along without ever feeling overwhelming.
Rip & tear
From January to today (April), my Emacs config - which I take as representative of how I use the tool - has transformed.
Over the past few months, a number of rip-and-tear sessions have dramatically reduced my init.el
file, from:
- ~1000 LoC2
- Split over multiple files (not a bad thing per se, but in my case indicative of too much complexity, too soon),
- Mostly unannotated,
- With:
- ~150 LoC for custom bindings (using general.el and SPC as leader),
- Most of the remainder a hodgepodge of useful & not-so-useful config lifted uncritically from other people's examples.
To:
- ~400 LoC
- In one file,
- Mostly annotated,
- Either written by myself or copied from package docs (while consulting the built-in references),
- With:
- ~150 LoC for general Emacs tweaks,
- ~150 for packages, all of which I use regularly,
- ~100 for custom functions (mostly for writing this blog on Jekyll or for making shopping lists).
Put in terms of a mindset shift, I've gone from seeing Emacs mostly as an amazing playground where anything that can be done in plaintext is possible,3 to seeing Emacs as an unparalleled organization and writing (and sometimes coding) tool that I can customize exactly to my needs.
Next steps
There's still lots to do and learn!
Every week I learn a new handful of Emacs bindings, but I'm still very much a noob - next week I hope to finally start grokking copying & pasting and figuring out how to use the "kill ring" and registers. Not a work session goes by where I don't catch myself struggling to copy-and-paste, especially if it's from another app into Emacs.
I now think I know how to make a decent coding setup for Ruby & JS/TS with Eglot and Treesit, but as I'm still mired in new-baby-parenting (with baby in my lap at this very moment), I simply haven't had the free time to start coding again.
I'm still making my way through Elisp guides, albeit at a glacial pace. I'll get to writing my own commands and scripts, eventually!
I have some obvious areas for improvement in my config. Eventually, I reckon I'll bring back Elpaca or something like it for smarter package management than I get out of the box. I'm using Org mode all the time at work, but haven't been using Agenda so much - as a consultant, I'm very dependent on Outlook to juggle my multiple work accounts & calendars, and don't see this changing in the near future.
Lastly, I'm still leaning entirely on Evil mode for in-buffer navigation & movements. This is one thing I can't see changing, as the Vim motions are baked into my fingers after over a decade of daily reinforcement. I'd love it if I could remove or disable everything in Evil except the Vim motions, but after looking into this a little, it doesn't seem easy to achieve.
That's all for now! Seeing the development from the first post to this one, I'm curious how things will be when I get around to making the next post in this little series ☺️
-
I am drafting a post on my use of Org mode, but have some final things to try out before I feel it's fully matured and ready to show off. ↩
-
Not much by many users' standards, but it's a lot for me, being allergic to complexity and wanting to understand (as much as possible) what each little piece is doing. ↩
-
Not to downplay this mindset at all though - it's for years been my dream to find such a thing, and it's still what fascinates me most about Emacs. ↩