I've been toting more or less the same emacs config file around for most
of 20 years. I have occasionally sliced it up into multiple files—and
then inevitably reintegrated it back into one file—and I have
certainly added to it, removed from it, etc. The fundamental way I
approached Emacs' configuration, though, always stayed the same—a
bunch of require
statements, a gigantic setq
invocation, a few
miscellaneous functions copied from elsewhere, etc.
For most of that time I've also used Debian GNU/Linux, and once they
existed, I still resisted the idea of using the emacs package
facilities in preference to Debian packages—of which I've made a
couple, but it's a non-trivial amount of work; someone should write
dh-make-emacs
—so it had to be something that was really important
to me if I was going to go to the trouble of getting it installed. So
I didn't install much.
What I'm trying to say is that I've led a fairly impoverished Emacs life.
About a month ago, I decided that that was stupid. The specific catalyst
was that I wanted to take advantage of features in a newer version of
haskell-mode
, but packaging that—especially doing so in a way that I
could easily take development snapshots—would have been an almighty
amount of work; so I decided to capitulate, and move to using Emacs'
package facilities, and ELPA
and MELPA
and just go whole-hog.
This has made a huge difference in my productivity—I am taking such
better advantage of Emacs now it startles me, and, even more
astonishing, my init.el
file is far more coherent and comprehensible,
so much that I cannot imagine a reason to split it up at this point,
even as I try out additional packages.
I'll probably write more about specific stuff later—assuming I feel like I have something to contribute beyond, say, mere Projectile fanboyishness—but I wanted to lay out how I would approach bootstrapping from nothing, knowing what I know now.
My very first step would to be to get use-package
installed. This
lives in MELPA
, so it does require a true bootstrapping step. I would
pop open a *scratch*
buffer, type
(progn
(add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/"))
(package-list-packages))
Use ^X^E
to run it, and install use-package
.
Having bootstrapped use-package
, my initial init.el
would start out
with:
;; Using packages exclusively now
(package-initialize)
;; Easy correct loading and configuration support
(require 'use-package)
(use-package package
:config
(progn
(add-to-list 'package-archives '("marmalade" . "https://marmalade-repo.org/packages/") t)
(add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/") t)))
Almost everything else will end up in a use-package
invocation for its
associated package.