Hi, I'm @onetom and this is my Emacs configuration, built from scratch.
I use it on macOS only, with the emacs-mac variant of Emacs, made by
Mitsuharu Yamamoto (aka @railwaycat
).
I started building it, after I tried tons of other configuration systems, like
- Doom Emacs
- Spacemacs
- Prelude
- Centaur Emacs
- and so on...
I don't use it for work yet, because it still lacks lots of features, which I use daily in IntelliJ with Cursive.
Trying off-the-shelf configurations were a great way to get acquainted with Emacs and its package ecosystem. I got to learn a lot of terminology, which is wildly different from the language used by the "more modern" editors and IDEs.
I had a common issue with such configurations, though.
While I could figure out how to customize some common aspects of them, more often than not, I had no idea where to start. Quite frequently, I didn't even know what package was providing a certain feature.
Generally, I had to do deconstructive work to achieve the changes I desired.
I prefer the constructive (additive) approach much more though.
I can experience Emacs in all the intermediary states, as its complexity grows with every package I load into it.
If anything breaks, the reasons for it are a lot more limited; I have to do a lot less guess work.
That's why I started my configuration from scratch.
The 1st step was to adjust all those basic settings, which I find familiar and also common in every other editor/IDE, which was built in recent decades.
This made the whole exercise a lot more bearable. You can find these settings
around the top of the init.el
.
Next step was to understand and decide about managing Emacs packages. I choose straight.el
.
I'm using the Nix package manager on macOS for a couple of years now and I quite
sold on its approach. straight.el
documentation explicitly states that it was
inspired by Nix, so it got me interested. After I've learnt that Doom Emacs is
also using straight under the hood, I was pretty convinced to put my bet on
straight.
There is a lot to learn from the various, full fledged Emacs "distros", so it's very desirable to have access to them, while developing your own configuration.
To that end, I use chemacs2, to keep multiple Emacs configurations around.
chemacs2
configures some aspects of Emacs, like the path to the custom-file
,
so my .gitignore
assumes the following settings in
~/.config/chemacs/profiles.el
:
(("onetom"
. ((server-name . "onetom")
(user-emacs-directory . "~/src/emacs-cfg")
(custom-file . "~/src/emacs-cfg/custom.el")
(straight-p . t)))
("onetom-doom"
. ((server-name . "onetom-doom")
(user-emacs-directory . "~/src/doom-emacs")))
("spacemacs"
. ((server-name . "spacemacs")
(user-emacs-directory . "~/src/spacemacs")
(env . (("SPACEMACSDIR" . "~/src/some-dotfiles/.spacemacs.d"))))))