feat: make bin/doom profile aware
- Fixes Doom's former inability to (trivially) juggle multiple profiles based on the same EMACSDIR (see #6593). - Adds '--profile NAME' switch to bin/doom (also recognized $DOOMPROFILE). - Adds new doom-profile* variables. These will eventually replace doom-{local,etc,cache}-dir and doom-{autoloads,env}-file. This is intentionally messy to ensure backwards compatibility for a little while longer. This will be fixed over the next couple weeks. Ref: #6593
This commit is contained in:
parent
1ecb5c7b9b
commit
5af38fb08e
5 changed files with 154 additions and 67 deletions
|
@ -121,44 +121,46 @@
|
|||
(setq user-emacs-directory profile-dir)
|
||||
(throw 'found t)))
|
||||
|
||||
(user-error "No %S profile found" profile))))))
|
||||
(user-error "No %S profile found" profile)))
|
||||
|
||||
;; Ensure the selected profile persists through the session
|
||||
(setenv "DOOMPROFILE" profile))))
|
||||
|
||||
|
||||
;;
|
||||
;;; Bootstrap
|
||||
|
||||
;; Let er rip
|
||||
(let (init-file)
|
||||
;; Load the heart of Doom Emacs
|
||||
(if (load (expand-file-name "core/core" user-emacs-directory) t t)
|
||||
;; ...and prepare it for an interactive session.
|
||||
(setq init-file (expand-file-name "core-start" doom-core-dir))
|
||||
;; ...but if that fails, then this is likely not a Doom config.
|
||||
(setq early-init-file (expand-file-name "early-init" user-emacs-directory))
|
||||
(load early-init-file t t))
|
||||
;; Load the heart of Doom Emacs
|
||||
(unless (load (expand-file-name "core/core" user-emacs-directory) t t)
|
||||
;; ...but if that fails, then this is likely not a Doom config.
|
||||
(setq early-init-file (expand-file-name "early-init" user-emacs-directory))
|
||||
(load early-init-file t t))
|
||||
|
||||
;; We hijack Emacs' initfile resolver to inject our own entry point. Why do
|
||||
;; this? Because:
|
||||
;;
|
||||
;; - It spares Emacs the effort of looking for/loading useless initfiles, like
|
||||
;; ~/.emacs and ~/_emacs. And skips ~/.emacs.d/init.el, which won't exist if
|
||||
;; you're using Doom (fyi: doom hackers or chemacs users could then use
|
||||
;; $EMACSDIR as their $DOOMDIR, if they wanted).
|
||||
;; - Later, 'doom sync' will dynamically generate its bootstrap file, which
|
||||
;; will be important for Doom's profile system later. Until then, we'll use
|
||||
;; core/core-start.el.
|
||||
;; - A "fallback" initfile can be trivially specified, in case the
|
||||
;; bootstrapper is missing (if the user hasn't run 'doom sync' or is a
|
||||
;; first-timer). This is an opportunity to display a "safe mode" environment
|
||||
;; that's less intimidating and more helpful than the broken state errors
|
||||
;; would've left Emacs in, otherwise.
|
||||
;; - A generated config allows for a file IO optimized startup.
|
||||
(define-advice startup--load-user-init-file (:filter-args (args) init-doom)
|
||||
"Initialize Doom Emacs in an interactive session."
|
||||
(list (lambda ()
|
||||
(or init-file
|
||||
(expand-file-name "init.el" user-emacs-directory)))
|
||||
nil ; TODO Replace with safe mode initfile
|
||||
(caddr args))))
|
||||
;; We hijack Emacs' initfile resolver to inject our own entry point. Why do
|
||||
;; this? Because:
|
||||
;;
|
||||
;; - It spares Emacs the effort of looking for/loading useless initfiles, like
|
||||
;; ~/.emacs and ~/_emacs. And skips ~/.emacs.d/init.el, which won't exist if
|
||||
;; you're using Doom (fyi: doom hackers or chemacs users could then use
|
||||
;; $EMACSDIR as their $DOOMDIR, if they wanted).
|
||||
;; - Later, 'doom sync' will dynamically generate its bootstrap file, which
|
||||
;; will be important for Doom's profile system later. Until then, we'll use
|
||||
;; core/core-start.el.
|
||||
;; - A "fallback" initfile can be trivially specified, in case the
|
||||
;; bootstrapper is missing (if the user hasn't run 'doom sync' or is a
|
||||
;; first-timer). This is an opportunity to display a "safe mode" environment
|
||||
;; that's less intimidating and more helpful than the broken state errors
|
||||
;; would've left Emacs in, otherwise.
|
||||
;; - A generated config allows for a file IO optimized startup.
|
||||
(define-advice startup--load-user-init-file (:filter-args (args) init-doom)
|
||||
"Initialize Doom Emacs in an interactive session."
|
||||
(list (lambda ()
|
||||
(if (boundp 'doom-core-dir)
|
||||
(expand-file-name "core-start" doom-core-dir)
|
||||
(expand-file-name "init.el" user-emacs-directory)))
|
||||
(when (boundp 'doom-profiles-dir)
|
||||
(lambda ()
|
||||
(expand-file-name "safe-mode@static/init.el" doom-profiles-dir)))
|
||||
(caddr args)))
|
||||
|
||||
;;; early-init.el ends here
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue