diff --git a/early-init.el b/early-init.el index 277eeecb0..97d21e0f6 100644 --- a/early-init.el +++ b/early-init.el @@ -78,22 +78,20 @@ ;; FIX: Discard the switch to prevent "invalid option" errors later. (push (cons "--profile" (lambda (_) (pop argv))) command-switch-alist) ;; Running 'doom sync' or 'doom profile sync' (re)generates a light - ;; profile loader in $EMACSDIR/profiles/load.el (or + ;; profile loader in $XDG_DATA_HOME/doom/profiles.X.el (or ;; $DOOMPROFILELOADFILE), after reading `doom-profile-load-path'. This ;; loader requires `$DOOMPROFILE' be set to function. (setenv "DOOMPROFILE" profile) - (or (load (expand-file-name - (format (let ((lfile (getenv-internal "DOOMPROFILELOADFILE"))) - (if lfile - (concat (let ((suffix ".el")) - (if (string-suffix-p suffix lfile) - (substring lfile 0 (- (length lfile) (length suffix))) - lfile)) - ".%d.elc") - "profiles/load.%d.elc")) - emacs-major-version) - user-emacs-directory) - 'noerror (not init-file-debug) 'nosuffix) + (or (load (let ((windows? (memq system-type '(ms-dos windows-nt cygwin)))) + (expand-file-name + (format (or (getenv-internal "DOOMPROFILELOADFILE") + (file-name-concat (if windows? "doomemacs/data" "doom") + "profiles.%d.el")) + emacs-major-version) + (or (if windows? (getenv-internal "LOCALAPPDATA")) + (getenv-internal "XDG_DATA_HOME") + "~/.local/share")) + 'noerror (not init-file-debug) 'nosuffix)) (user-error "Profiles not initialized yet; run 'doom sync' first")))) ;; PERF: When `load'ing or `require'ing files, each permutation of diff --git a/lisp/doom-profiles.el b/lisp/doom-profiles.el index 89df57272..171cac3e1 100644 --- a/lisp/doom-profiles.el +++ b/lisp/doom-profiles.el @@ -33,9 +33,15 @@ Can be changed externally by setting $DOOMPROFILELOADPATH to a colon-delimited list of paths or profile config files (semi-colon delimited on Windows).") (defvar doom-profile-load-file - (if-let (loader (getenv-internal "DOOMPROFILELOADFILE")) - (expand-file-name loader doom-emacs-dir) - (file-name-concat doom-emacs-dir (format "profiles/load.el" emacs-major-version))) + ;; REVIEW: Derive from `doom-data-dir' in v3 + (expand-file-name + (format (or (getenv-internal "DOOMPROFILELOADFILE") + (file-name-concat (if doom--system-windows-p "doomemacs/data" "doom") + "profiles.%d.el")) + emacs-major-version) + (or (if doom--system-windows-p (getenv-internal "LOCALAPPDATA")) + (getenv-internal "XDG_DATA_HOME") + "~/.local/share")) "Where Doom writes its interactive profile loader script. Can be changed externally by setting $DOOMPROFILELOADFILE.")