Skip to content

Instantly share code, notes, and snippets.

@danielsz
Created October 3, 2012 08:38
Show Gist options
  • Save danielsz/3825823 to your computer and use it in GitHub Desktop.
Save danielsz/3825823 to your computer and use it in GitHub Desktop.
Towards a declarative dependency management solution for emacs
;; canonical list
(defvar my-packages
'(ack haskell-mode ruby-mode coffee-mode deft expand-region
gist inf-ruby magit yaml-mode)
"Canonical list of packages.")
(el-get-cleanup my-packages)
(el-get 'sync my-packages)
(require 'cl)
(defvar my-packages
'(ack haskell-mode ruby-mode coffee-mode deft expand-region
gist inf-ruby magit yaml-mode)
"Canonical list of packages.")
(defun my-packages-installed-p ()
(every 'package-installed-p my-packages))
(unless (my-packages-installed-p)
(message "%s" "Emacs is now refreshing its package database...")
(package-refresh-contents)
(message "%s" " done.")
;; install the missing packages
(loop for p in my-packages
unless (package-installed-p p)
do (package-install p)))
(defun el-get-cleanup (packages)
"Remove packages not explicitly declared"
(let* ((packages-to-keep (el-get-dependencies (mapcar 'el-get-as-symbol packages)))
(packages-to-remove (set-difference (mapcar 'el-get-as-symbol
(el-get-list-package-names-with-status
"installed")) packages-to-keep)))
(mapc 'el-get-remove packages-to-remove)))
*
!init.el
!.gitignore
;; So the idea is that you copy/paste this code into your *scratch* buffer,
;; hit C-j, and you have a working developper edition of el-get.
(url-retrieve
"https://raw.github.com/dimitri/el-get/master/el-get-install.el"
(lambda (s)
(let (el-get-master-branch)
(goto-char (point-max))
(eval-print-last-sexp))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment