For me

I ventured down the rabbit hole of Emacs configuration. It happens rarely nowadays. It’s an activity similar to configuring X window managers of yore. Some enjoyment is had from the activity, it cannot be denied, but plan for a day of Whac-A-Mole to get all parts working well together. There is always a trigger, this time it was trying to setup Go language support using lsp-mode and gopls. Although gopls is still in alpha the old alternatives like guru, godef etc are essentially broken with the new Go module system. There is also a plan to use the lsp-mode for C++ code indexing at a later stage as my current RTags based setup is rather sluggish with larger projects. I do have got a lot of mileage out of RTags, it’s great software and I’m thankful to its author.

The Emacs setup has been very conservative for a good number of years. There’s the .emacs file and then manually copied elisp files for non standard packages. No fancy-schmancy package manager that download packages automatically. So lsp-mode turns out to be quite a large piece of software and initially I opted to ignore my principles and just use the MELPA package. Alas it was not to be; the package did not compile and so the journey begun. After some searching, a forum post pointed me to the straight package manager. Nothing to do with lsp-mode really, a typical side quest but I was sold on its core principles. Reproducibility of configuration by working with the original upstream vcs (version control system) repositories. Possibility to lock package versions by simply checking out the desired version and updating a lock file. Also possible to patch packages on local branches if needed that the package manager then will track.

To cut the story short. After immediately being successful in installing lsp-mode, quite some more time was spent converting the rest of the config to use straight. There’s no longer any franken packages in the Emacs config, all nice and tidy☺

The drawback of tracking upstream vcs repos is that they are LARGE. Commonly they contain lots of cruft that are not elisp files. The new config, which in fact is quite spartan, measures in at 233 MB. Totally reasonable for a text editor configuration.

Without further ado, here’s the config split in two parts. Both to be extracted to ~/.emacs.d. Requires Emacs ≥ 25.2.


Documentation and Planning:

Programming languages with IDE like support:

Simple programming language support:





The configuration has moved to github. I’ve given up on archiving all packages due to size. It bootstraps itself on first start. Local archiving is still possible.


One year of minor tweaks to init.el



Cleaned up key bindings to mostly adhere to Emacs key binding conventions.


Use lsp-mode with ccls instead of rtags for C/C++ indexing.


Initial release.

Published: 2020-05-03
Revised: 2022-10-07