I’m keeping this configuration synchronized between two machines. For most changes simply pushing the change to my Emacs Reboot GitHub repo and pulling it on the other machine is all I need. But when the customizations depend on a certain package being installed, the configuration breaks on the other machine until I manually install the package.
Today I add a customization which ensures all needed packages are installed at the time Emacs starts up:
(setq package-archives '(("gnu" . "http://elpa.gnu.org/packages/") ("marmalade" . "http://marmalade-repo.org/packages/") ("Tromey" . "http://tromey.com/elpa/"))) (package-initialize) (setq abg-required-packages (list 'xml-rpc 'magit 'gh)) (dolist (package abg-required-packages) (when (not (package-installed-p package)) (package-refresh-contents) (package-install package)))
This code is pretty straightforward: first, define the list of package archives to search, and make sure the package system is initialized. Then define a list of needed packages, and iterate over the list, installing the ones which are missing from this Emacs.