+; my-packages.el
+(require 'package)
+(add-to-list 'package-archives
+ '("melpa" . "http://melpa.milkbox.net/packages/") t)
+(add-to-list 'package-archives
+ '("marmalade" . "http://marmalade-repo.org/packages/") t)
+(package-initialize)
+
+; fetch the list of packages available
+(unless package-archive-contents
+ (package-refresh-contents))
+
+;; make sure my list of packages are installed
+(setq package-list '(go-mode
+ rust-mode
+ haskell-mode
+ ghc
+ restclient
+ tangotango-theme
+ fill-column-indicator
+ paredit
+ leuven-theme
+ notmuch
+ railscasts-theme
+ racket-mode
+ auto-complete
+ magit
+ ledger-mode))
+
+; install the missing packages
+(dolist (package package-list)
+ (unless (package-installed-p package)
+ (package-install package)))
+
+;; upgrade installed
+(save-window-excursion
+ (package-list-packages t)
+ (package-menu-mark-upgrades)
+ (package-menu-execute t))