diff --git a/core/autoload/packages.el b/core/autoload/packages.el index 9d567b26a..4b2cd8b44 100644 --- a/core/autoload/packages.el +++ b/core/autoload/packages.el @@ -335,134 +335,140 @@ package.el as appropriate." (defun doom//packages-install () "Interactive command for installing missing packages." (interactive) - (message! "Looking for packages to install...") - (let ((packages (reverse (doom-get-missing-packages)))) - (cond ((not packages) - (message! (green "No packages to install!"))) + (if (not noninteractive) + (doom-packages--async-run 'doom//packages-install) + (message! "Looking for packages to install...") + (let ((packages (reverse (doom-get-missing-packages)))) + (cond ((not packages) + (message! (green "No packages to install!"))) - ((not (or (getenv "YES") - (y-or-n-p - (format "%s packages will be installed:\n\n%s\n\nProceed?" - (length packages) - (mapconcat - (lambda (pkg) - (format "+ %s (%s)" - (car pkg) - (cond ((doom-package-different-recipe-p (car pkg)) - "new recipe") - ((doom-package-different-backend-p (car pkg)) - (if (plist-get (cdr pkg) :recipe) - "ELPA -> QUELPA" - "QUELPA -> ELPA")) - ((plist-get (cdr pkg) :recipe) - "QUELPA") - (t - "ELPA")))) - (sort (cl-copy-list packages) #'doom--sort-alpha) - "\n"))))) - (message! (yellow "Aborted!"))) + ((not (or (getenv "YES") + (y-or-n-p + (format "%s packages will be installed:\n\n%s\n\nProceed?" + (length packages) + (mapconcat + (lambda (pkg) + (format "+ %s (%s)" + (car pkg) + (cond ((doom-package-different-recipe-p (car pkg)) + "new recipe") + ((doom-package-different-backend-p (car pkg)) + (if (plist-get (cdr pkg) :recipe) + "ELPA -> QUELPA" + "QUELPA -> ELPA")) + ((plist-get (cdr pkg) :recipe) + "QUELPA") + (t + "ELPA")))) + (sort (cl-copy-list packages) #'doom--sort-alpha) + "\n"))))) + (message! (yellow "Aborted!"))) - (t - (doom-refresh-packages-maybe doom-debug-mode) - (dolist (pkg packages) - (message! "Installing %s" (car pkg)) - (doom--condition-case! - (message! "%s%s" - (cond ((and (package-installed-p (car pkg)) - (not (doom-package-different-backend-p (car pkg))) - (not (doom-package-different-recipe-p (car pkg)))) - (dark (white "⚠ ALREADY INSTALLED"))) - ((doom-install-package (car pkg) (cdr pkg)) - (green "✓ DONE")) - (t - (red "✕ FAILED"))) - (if (plist-member (cdr pkg) :pin) - (format " [pinned: %s]" (plist-get (cdr pkg) :pin)) - "")))) + (t + (doom-refresh-packages-maybe doom-debug-mode) + (dolist (pkg packages) + (message! "Installing %s" (car pkg)) + (doom--condition-case! + (message! "%s%s" + (cond ((and (package-installed-p (car pkg)) + (not (doom-package-different-backend-p (car pkg))) + (not (doom-package-different-recipe-p (car pkg)))) + (dark (white "⚠ ALREADY INSTALLED"))) + ((doom-install-package (car pkg) (cdr pkg)) + (green "✓ DONE")) + (t + (red "✕ FAILED"))) + (if (plist-member (cdr pkg) :pin) + (format " [pinned: %s]" (plist-get (cdr pkg) :pin)) + "")))) - (message! (bold (green "Finished!"))) - (doom//reload-load-path))))) + (message! (bold (green "Finished!"))) + (doom//reload-load-path)))))) ;;;###autoload (defun doom//packages-update () "Interactive command for updating packages." (interactive) - (message! "Looking for outdated packages...") - (doom-refresh-packages-maybe doom-debug-mode) - (let ((packages (sort (doom-get-outdated-packages) #'doom--sort-alpha))) - (cond ((not packages) - (message! (green "Everything is up-to-date"))) + (if (not noninteractive) + (doom-packages--async-run 'doom//packages-update) + (message! "Looking for outdated packages...") + (doom-refresh-packages-maybe doom-debug-mode) + (let ((packages (sort (doom-get-outdated-packages) #'doom--sort-alpha))) + (cond ((not packages) + (message! (green "Everything is up-to-date"))) - ((not (or (getenv "YES") - (y-or-n-p - (format "%s packages will be updated:\n\n%s\n\nProceed?" - (length packages) - (let ((max-len - (or (car (sort (mapcar (lambda (it) (length (symbol-name (car it)))) packages) - (lambda (it other) (> it other)))) - 10))) - (mapconcat - (lambda (pkg) - (format (format "+ %%-%ds %%-%ds -> %%s" (+ max-len 2) 14) - (symbol-name (car pkg)) - (package-version-join (cadr pkg)) - (package-version-join (cl-caddr pkg)))) - packages - "\n")))))) - (message! (yellow "Aborted!"))) + ((not (or (getenv "YES") + (y-or-n-p + (format "%s packages will be updated:\n\n%s\n\nProceed?" + (length packages) + (let ((max-len + (or (car (sort (mapcar (lambda (it) (length (symbol-name (car it)))) packages) + (lambda (it other) (> it other)))) + 10))) + (mapconcat + (lambda (pkg) + (format (format "+ %%-%ds %%-%ds -> %%s" (+ max-len 2) 14) + (symbol-name (car pkg)) + (package-version-join (cadr pkg)) + (package-version-join (cl-caddr pkg)))) + packages + "\n")))))) + (message! (yellow "Aborted!"))) - (t - (dolist (pkg packages) - (message! "Updating %s" (car pkg)) - (doom--condition-case! - (message! - (let ((result (doom-update-package (car pkg) t))) - (color (if result 'green 'red) - (if result "✓ DONE" "✕ FAILED")))))) + (t + (dolist (pkg packages) + (message! "Updating %s" (car pkg)) + (doom--condition-case! + (message! + (let ((result (doom-update-package (car pkg) t))) + (color (if result 'green 'red) + (if result "✓ DONE" "✕ FAILED")))))) - (message! (bold (green "Finished!"))) - (doom//reload-load-path))))) + (message! (bold (green "Finished!"))) + (doom//reload-load-path)))))) ;;;###autoload (defun doom//packages-autoremove () "Interactive command for auto-removing orphaned packages." (interactive) - (message! "Looking for orphaned packages...") - (let ((packages (doom-get-orphaned-packages))) - (cond ((not packages) - (message! (green "No unused packages to remove"))) + (if (not noninteractive) + (doom-packages--async-run 'doom//packages-autoremove) + (message! "Looking for orphaned packages...") + (let ((packages (doom-get-orphaned-packages))) + (cond ((not packages) + (message! (green "No unused packages to remove"))) - ((not - (or (getenv "YES") - (y-or-n-p - (format - "%s packages will be deleted:\n\n%s\n\nProceed?" - (length packages) - (mapconcat - (lambda (sym) - (format "+ %s (%s)" sym - (let ((backend (doom-package-backend sym))) - (if (doom-package-different-backend-p sym) - (if (eq backend 'quelpa) - "QUELPA->ELPA" - "ELPA->QUELPA") - (upcase (symbol-name backend)))))) - (sort (cl-copy-list packages) #'string-lessp) - "\n"))))) - (message! (yellow "Aborted!"))) + ((not + (or (getenv "YES") + (y-or-n-p + (format + "%s packages will be deleted:\n\n%s\n\nProceed?" + (length packages) + (mapconcat + (lambda (sym) + (format "+ %s (%s)" sym + (let ((backend (doom-package-backend sym))) + (if (doom-package-different-backend-p sym) + (if (eq backend 'quelpa) + "QUELPA->ELPA" + "ELPA->QUELPA") + (upcase (symbol-name backend)))))) + (sort (cl-copy-list packages) #'string-lessp) + "\n"))))) + (message! (yellow "Aborted!"))) - (t - (dolist (pkg packages) - (doom--condition-case! - (message! - (let ((result (doom-delete-package pkg t))) - (color (if result 'green 'red) - "%s %s" - (if result "✓ Removed" "✕ Failed to remove") - pkg))))) + (t + (dolist (pkg packages) + (doom--condition-case! + (message! + (let ((result (doom-delete-package pkg t))) + (color (if result 'green 'red) + "%s %s" + (if result "✓ Removed" "✕ Failed to remove") + pkg))))) - (message! (bold (green "Finished!"))) - (doom//reload-load-path))))) + (message! (bold (green "Finished!"))) + (doom//reload-load-path)))))) ;;