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.
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.
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" . "https://marmalade-repo.org/packages/")) (package-initialize)
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) (package-refresh-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)))
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.. I've been using it since 23 was released and have had no trouble with it.