diff --git a/core/autoload/packages.el b/core/autoload/packages.el index 1884e896d..5200f3cf4 100644 --- a/core/autoload/packages.el +++ b/core/autoload/packages.el @@ -112,10 +112,10 @@ fed to `doom/packages-delete'." ;;;###autoload (defun doom-read-packages (&optional force-p nopackages) "Parses your Emacs config to keep track of packages declared with `package!' -in `doom-packages' and enabled modules in `doom-enabled-modules'." +in `doom-packages' and enabled modules in `doom-modules'." (doom-initialize) - (when (or force-p (not doom-enabled-modules) (not doom-packages)) - (setq doom-enabled-modules + (when (or force-p (not doom-modules) (not doom-packages)) + (setq doom-modules (let (paths mode enabled-modules) (--each (doom--scrape-sexps 'doom! (f-expand "init.el" doom-emacs-dir)) (dolist (module it) @@ -144,7 +144,7 @@ in `doom-packages' and enabled modules in `doom-enabled-modules'." (doom--scrape-sexps 'package! file))) (append (f-glob "core*.el" doom-core-dir) (--map (doom-module-path (car it) (cdr it) "packages.el") - doom-enabled-modules))))))) + doom-modules))))))) t))) ;;;###autoload @@ -168,25 +168,26 @@ in `doom-packages' and enabled modules in `doom-enabled-modules'." "Installs package NAME with optional quelpa RECIPE (see `quelpa-recipe' for an example; the package name can be omitted)." (doom-refresh-packages) + (doom-read-packages) (when (package-installed-p name) (error "%s is already installed, skipping" name)) (when (plist-get plist :disabled) (error "%s is disabled, skipping" name)) (when (plist-get plist :load-path) (error "%s has a local load-path, skipping" name)) - (cond ((plist-get plist :recipe) - (let ((recipe (plist-get plist :recipe))) - (when (and recipe (= 0 (mod (length recipe) 2))) - (setq recipe (cons name recipe))) - (quelpa recipe))) - (t (package-install name))) + (let ((needs (plist-get plist :needs))) + (when (and needs + (--any-p (not (rassq it doom-modules)) + (-list needs))) + (error "%s doesn't have necessary dependencies (%s), skipping" needs))) + (let ((inhibit-message (not doom-debug-mode))) + (cond ((plist-get plist :recipe) + (let ((recipe (plist-get plist :recipe))) + (when (and recipe (= 0 (mod (length recipe) 2))) + (setq recipe (cons name recipe))) + (quelpa recipe))) + (t (package-install name)))) (cl-pushnew (cons name plist) doom-packages :key 'car) - (when (plist-member plist :setup) - (let ((setup (plist-get plist :setup))) - (when (listp setup) - (setq setup (assq (doom-os) setup))) - (when setup - (async-shell-command setup)))) (package-installed-p name)) (defun doom-update-package (name) @@ -196,7 +197,8 @@ appropriate." (unless (package-installed-p name) (error "%s isn't installed" name)) (when (doom-package-outdated-p name) - (let (quelpa-modified-p) + (let ((inhibit-message (not doom-debug-mode)) + quelpa-modified-p) (pcase (doom-package-backend name) ('quelpa (let ((quelpa-upgrade-p t)) diff --git a/core/core-packages.el b/core/core-packages.el index 7e8ca52d3..5a6d30587 100644 --- a/core/core-packages.el +++ b/core/core-packages.el @@ -25,7 +25,7 @@ ;; ;; See core/autoload/packages.el for more functions. -(defvar doom-enabled-modules nil +(defvar doom-modules nil "List of enabled modules; each element is a cons cell (MODULE . SUBMODULE), where MODULE is the module's property symbol, e.g. :lang, and SUBMODULE is the submodule symbol, e.g. 'evil.") @@ -85,11 +85,11 @@ byte-compilation." ((not mode) (error "No namespace specified on `doom!' for %s" p)) (t - (setq doom-enabled-modules (append doom-enabled-modules (list (cons mode p)))))))) - `(unless noninteractive - (let (file-name-handler-alist) + (setq doom-modules (append doom-modules (list (cons mode p)))))))) + (unless noninteractive + `(let (file-name-handler-alist) ,@(mapcar (lambda (pkg) `(load! ,(car pkg) ,(cdr pkg))) - doom-enabled-modules) + doom-modules) (when (display-graphic-p) (require 'server) @@ -210,7 +210,7 @@ Examples: file (concat (symbol-name module) ".el"))) (t (cl-pushnew (cons module submodule) - doom-enabled-modules + doom-modules :test (lambda (x y) (and (eq (car x) (car y)) (eq (cdr x) (cdr y))))) (setq path (doom-module-path module submodule) @@ -240,7 +240,7 @@ Examples: ;; (defun doom/reload () - "Reload `load-path', `doom-enabled-modules' and `doom-packages' by + "Reload `load-path', `doom-modules' and `doom-packages' by reinitializing doom and parsing config files for `package!' and `doom!' calls. There are few reasons to use this." (interactive) @@ -269,7 +269,7 @@ the commandline." ((f-exists-p auto-file) auto-file))) (--map (doom-module-path (car it) (cdr it)) - doom-enabled-modules))) + doom-modules))) (f-glob "autoload/*.el" doom-core-dir))) (when (f-exists-p generated-autoload-file) (f-delete generated-autoload-file) @@ -300,7 +300,7 @@ There should be a measurable benefit from this, but it may take a while." (or (string= (f-base it) "config") (string-prefix-p "+" (f-base it)))) t) - doom-enabled-modules))))) + doom-modules))))) (n 0) results) (dolist (file targets)