From 36a9637e79cd15421f6b1fb3c9ada249565075e7 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Sat, 17 Sep 2022 14:50:23 +0200 Subject: [PATCH] fix(profiles): no bootstrap file for non-bootloaders If Doom doesn't live in ~/.emacs.d or ~/.config/emacs, then it cannot play the role of bootloader, so opt out of generating the profile bootstrappper in this case. That said, don't disable the profile system entirely; it can still be useful for internal, noninteractive, and sandbox use. --- lisp/cli/profiles.el | 6 +++--- lisp/cli/sync.el | 3 ++- lisp/doom-profiles.el | 9 +++++++-- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/lisp/cli/profiles.el b/lisp/cli/profiles.el index 8d8694c41..3a4c2e082 100644 --- a/lisp/cli/profiles.el +++ b/lisp/cli/profiles.el @@ -6,7 +6,9 @@ ;;; Variables (defvar doom-cli-known-profiles-file - (file-name-concat doom-cache-dir "known-profiles.el") + (file-name-concat doom-cache-dir (format "profiles.%s.el" (or (car doom-profile) "@"))) + ;; REVIEW: Use `doom-profile-data-dir' in v3 + ;; (file-name-concat doom-profile-data-dir "known-profiles.el") "TODO") @@ -68,8 +70,6 @@ (dolist (p removed) (print! (item "Removed %S") (car p))) (dolist (p changed) (print! (item "Changed %S") (car p))) (doom-file-write doom-cli-known-profiles-file (list new-profiles) :mode #o600) - (print! (success "Regenerated profile manifest: %s") - (path doom-cli-known-profiles-file)) (doom-profiles-save new-profiles doom-profiles-bootstrap-file) (print! (success "Regenerated profile init file: %s") (path doom-profiles-bootstrap-file))))))))) diff --git a/lisp/cli/sync.el b/lisp/cli/sync.el index 15515ca11..c6a18908b 100644 --- a/lisp/cli/sync.el +++ b/lisp/cli/sync.el @@ -45,7 +45,8 @@ OPTIONS: Defaults to the maximum number of threads (or 1, if your CPU's threadcount can't be determined)." :benchmark t - (call! '(profiles sync "--reload")) + (when (doom-profiles-bootloadable-p) + (call! '(profiles sync "--reload"))) (run-hooks 'doom-before-sync-hook) (add-hook 'kill-emacs-hook #'doom-sync--abort-warning-h) (when jobs diff --git a/lisp/doom-profiles.el b/lisp/doom-profiles.el index 66812c57e..1f6e46303 100644 --- a/lisp/doom-profiles.el +++ b/lisp/doom-profiles.el @@ -74,6 +74,12 @@ run.") ;; ;;; Helpers +(defun doom-profiles-bootloadable-p () + "Return non-nil if `doom-emacs-dir' can be a bootloader." + (with-memoization (get 'doom 'bootloader) + (or (file-equal-p doom-emacs-dir "~/.config/emacs") + (file-equal-p doom-emacs-dir "~/.emacs.d")))) + (defun doom-profiles-read (&rest paths) "TODO" (let (profiles) @@ -218,8 +224,7 @@ is non-nil, refresh the cache." (--defer-vars--)))))))) (lambda () (if (or noninteractive - (file-equal-p user-emacs-directory "~/.config/emacs") - (file-equal-p user-emacs-directory "~/.emacs.d")) + (,(symbol-function #'doom-profiles-bootloadable-p))) (user-error "Failed to find profile: %s" (getenv "DOOMPROFILE")) (user-error "To be a bootloader, Doom must be installed in ~/.config/emacs or ~/.emacs.d")))))) :mode #o600