in which version two turns the inside out

I just got back last week from the Strange Loop conference in St. Louis. The conference showcased some really quality keynotes and session talks, but I had been invited to give a workshop teaching Emacs, which was a blast. The workshop was three hours long, but I still felt like I was zooming through. My outline is available, though it may not be all that useful unless you were there.

getting cozy

The talk focused on the task of crafting your own set of dotfiles. Naturally I did talk some about the Emacs Starter Kit, though my approach there has changed fairly radically. I've been developing version 2 of the Starter Kit since the beginning of the summer, but now I think it's time to make the release official and give it wider exposure.

The Emacs Starter Kit, version 2

Version 2 of the Starter Kit turns things inside out. The original version was very prescriptive; you used it by cloning a git repo to use as your entire ~/.emacs.d directory, and you fit your own customizations inside the structure it provided. This was mostly due to the fact that when it was released the packaging story for elisp was very immature. Use of package.el was not very widespread, so the Starter Kit had to include a copy as well as bundle a bunch of libraries that had not been packaged yet. As it turned out, I think the Starter Kit had a role in helping popularize package.el.

A lot has changed since 2008—primarily that package.el has been included in Emacs and Marmalade has picked up lots of steam, becoming the de-facto community package source with over 250 packages. It's now feasible for the Starter Kit to be distributed as just another package, leaving you free to structure your dotfiles however you like. All it takes is setting yourself up to get packages from Marmalade:

(require 'package)
(add-to-list 'package-archives
             '("marmalade" . ""))
rocket, man

Place that in ~/.emacs.d/init.el and evaluate it with M-x eval-buffer. From there you can run M-x package-refresh-contents to pull in the latest package lists (analogous to apt-get update) followed by M-x package-install starter-kit. And then you're set.

However, it's unlikely that the starter-kit is the only package you're interested in. Rather than picking packages by hand, I'm a fan of keeping a list of all the packages you use in your dotfiles. That way when you move to a new machine, you won't have to remember what packages you've come to depend upon; checking out your dotfiles on a new machine will pull in everything you've specified. Here's my list along with some code to handle it:

(when (not package-archive-contents)

(defvar my-packages '(starter-kit starter-kit-lisp starter-kit-eshell
                                  starter-kit-bindings scpaste
                                  clojure-mode clojure-test-mode
                                  markdown-mode yaml-mode tuareg
                                  marmalade oddmuse scpaste))

(dolist (p my-packages)
  (when (not (package-installed-p p))
    (package-install p)))

What's Changed

Being a 2.0 release, you can't expect 100% backwards compatibility with the old Starter Kit. In particular, it is much more modular. The base of the Starter Kit simply gives you better default settings and a few new commands. There are separate modules supporting various languages like Ruby, Lisp (Clojure, Emacs Lisp, Scheme, and Common Lisp), and Javascript, though right now the Lisp one is the most polished. If anyone is interested in helping maintain alternate language modules, please contact me on Github. Key bindings have also been spun out into their own module since they don't follow Emacs binding conventions strictly.

There is also no more elpa-to-submit directory; if you rely on packages that aren't on Marmalade yet, it's up to you to either check them into your own dotfiles or better yet upload them yourself. There's also no more explicit recentf support since a new feature called ido-use-virtual-buffers allows recent files to show up in the regular C-x b buffer switcher, simplifying things. The addition of the ido-ubiquitous package makes it so regular completion gets enhanced with ido magic, so functionality like ido-imenu is no longer needed.

The other breakage is that the Starter Kit is now intended only for use with Emacs 24 onward. Yes, technically Emacs 24 has not yet been released, but it's in active pretest and is readily available for most platforms.[1]. I've been using it since 23 was released and have had no trouble with it.

[1] It's not hard to compile from source, but precompiled versions are readily available for Debian-based systems, Mac OS X, and Windows.

« older | 2011-09-28T04:12:54Z | newer »