69 lines
1.9 KiB
EmacsLisp
69 lines
1.9 KiB
EmacsLisp
(add-to-list 'package-archives
|
|
'("melpa" . "https://melpa.org/packages/") t)
|
|
;; (add-to-list 'package-archives
|
|
;; '("melpa-stable" . "https://stable.melpa.org/packages/") t)
|
|
|
|
(defvar rc/package-contents-refreshed nil)
|
|
(defvar rc/required-packages nil)
|
|
|
|
(defun rc/package-refresh-contents-once ()
|
|
(when (not rc/package-contents-refreshed)
|
|
(setq rc/package-contents-refreshed t)
|
|
(package-refresh-contents)))
|
|
|
|
(defun rc/require-one-package (package)
|
|
(push package rc/required-packages)
|
|
(when (not (package-installed-p package))
|
|
(rc/package-refresh-contents-once)
|
|
(package-install package)))
|
|
|
|
(defun rc/require (&rest packages)
|
|
(dolist (package packages)
|
|
(rc/require-one-package package)))
|
|
|
|
(defun rc/require-theme (theme)
|
|
(let ((theme-package (->> theme
|
|
(symbol-name)
|
|
(funcall (-flip #'concat) "-theme")
|
|
(intern))))
|
|
(rc/require theme-package)
|
|
(load-theme theme t)))
|
|
|
|
(rc/require 'dash)
|
|
(require 'dash)
|
|
|
|
(rc/require 'dash-functional)
|
|
(require 'dash-functional)
|
|
|
|
(defun rc/package-reqs (package)
|
|
(let ((package-desc
|
|
(->> package-alist
|
|
(alist-get package)
|
|
(car))))
|
|
(when package-desc
|
|
(package-desc-reqs package-desc))))
|
|
|
|
(defun rc/package-dependencies (package)
|
|
(->> package
|
|
(rc/package-reqs)
|
|
(-map #'car)
|
|
(cons package)))
|
|
|
|
(defun rc/package-expand-dependencies (packages)
|
|
(->> packages
|
|
(-map #'rc/package-dependencies)
|
|
(-flatten)
|
|
(remove-duplicates)))
|
|
|
|
(defun rc/unused-packages ()
|
|
(let ((all-package (rc/package-expand-dependencies rc/required-packages)))
|
|
(->> package-alist
|
|
(-map #'car)
|
|
(-filter (-lambda (package)
|
|
(not (-contains? all-package package)))))))
|
|
|
|
(defun rc/remove-unused-packages ()
|
|
(interactive)
|
|
(message "Unused packages: %s" (rc/unused-packages)))
|
|
|