Package management and configuration in emacs
What’s the best way to manage packages in emacs? I’ve tried quite a few and prefer
package.el (builtin)
I used this until I ran into two problems:
- Using packages not yet in elpa or melpa easily from github
- “https://elpa.gnu.org/packages/archive-contents” “Bad Request”
Maybe now there are better solutions, but I moved on to straight.el.
Sometimes I think about returning because I’ve found sticking to base packages that closely follow emacs conventions seems to make debugging and maintaining my configuration easier for some reason.
This also reminds me of
straight.el
Straight worked well for me for some time, and I could really relate to parts of it’s readme given I was already into Haskell and NixOS:
Next-generation, purely functional package manager
Init-file and version lockfiles as the sole source of truth. No persistent state kept elsewhere.
100% reproducible package management, accounting for changes in packages, recipe repositories, configuration, and the package manager itself.
In practice though, I kept running into some issue where I had to keep re-running the straight-check-packages
command or likely some other command.
You can see other reproducability issues in the straight.el issue tracker. I still turn to straight anywhere I can’t just use NixOS though.
NixOS
Nix builds packages in isolation from each other. This ensures that they are reproducible and don’t have undeclared dependencies, so if a package works on one machine, it will also work on another.
Given my struggles with package.el and straight.el, this sounded great!
From experience I knew NixOS has a steep learning curve, but I’d already paid parts of it while trying to develop Haskell projects using NixOS.
Essentially you add emacs packages to your NixOS configuratin and make emacs assume the packages will be in load-path somehow just as if you’d cloned them and then configure them normally.
To my surprise I’ve had 0 issues with this method of Package management and configuration in emacs.
For more details on this, see Replacing straight.el with Nix to manage my emacs packages.