Last active
March 1, 2024 12:57
-
-
Save sogaiu/7a7ef4aca3bdd621e9c50368c7d62a23 to your computer and use it in GitHub Desktop.
partially analyzed elpaca startup code
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;; going to assume for concreteness that `user-emacs-directory` is "~/.emacs.d" | |
(defvar elpaca-installer-version 0.6) | |
;; "~/.emacs.d/elpaca" | |
(defvar elpaca-directory (expand-file-name "elpaca/" user-emacs-directory)) | |
;; "~/.emacs.d/elpaca/builds" | |
(defvar elpaca-builds-directory (expand-file-name "builds/" elpaca-directory)) | |
;; "~/.emacs.d/elpaca/repos" | |
(defvar elpaca-repos-directory (expand-file-name "repos/" elpaca-directory)) | |
;; used in the `let` binding below and on the very last line | |
(defvar elpaca-order | |
'(elpaca :repo "https://github.com/progfolio/elpaca.git" | |
:ref nil | |
:files (:defaults "elpaca-test.el" (:exclude "extensions")) | |
:build (:not elpaca--activate-package))) | |
;; | |
(let* (;; "~/.emacs.d/elapaca/repos/elpaca" | |
(repo (expand-file-name "elpaca/" elpaca-repos-directory)) | |
;; "~/.emacs.d/elpaca/builds/elpaca" | |
(build (expand-file-name "elpaca/" elpaca-builds-directory)) | |
;; everything after the `elpaca` in `elpaca-order` -- i.e. `(:repo ...)` | |
(order (cdr elpaca-order)) | |
(default-directory repo)) | |
;; changing `load-path` affects where things like `require` look for code | |
(add-to-list 'load-path (if (file-exists-p build) build repo)) | |
;; if the "elpaca/repos" subdirectory (of ~/.emacs.d) does not exist already... | |
(unless (file-exists-p repo) | |
;; create the "~/.emacs.d/elpaca/repos" directory | |
(make-directory repo t) | |
;; `subr-x needs to be required for emacsen with version 27 and below | |
(when (< emacs-major-version 28) (require 'subr-x)) | |
;; like `condition-case` except debugging is not prevented -- `condition-case` is a bit like `try` | |
(condition-case-unless-debug err | |
(if-let (;; select the "*elpaca-bootstrap*" window, creating it if necessary | |
(buffer (pop-to-buffer-same-window "*elpaca-bootstrap*")) | |
;; git clone https://github.com/progfolio/elpaca.git | |
((zerop (call-process "git" nil buffer t "clone" | |
(plist-get order :repo) repo))) | |
;; git checkout | |
((zerop (call-process "git" nil buffer t "checkout" | |
(or (plist-get order :ref) "--")))) | |
;; construct full path to emacs | |
(emacs (concat invocation-directory invocation-name)) | |
;; byte-compile | |
((zerop (call-process emacs nil buffer nil | |
"-Q" "-L" "." "--batch" | |
"--eval" | |
(concat "(byte-recompile-directory" | |
" \".\" 0 'force)")))) | |
;; require elpaca so `elpaca-*` callables become usable hereafter | |
((require 'elpaca)) | |
((elpaca-generate-autoloads "elpaca" repo))) | |
(progn (message "%s" (buffer-string)) (kill-buffer buffer)) | |
(error "%s" (with-current-buffer buffer (buffer-string)))) | |
((error) (warn "%s" err) (delete-directory repo 'recursive)))) | |
(unless (require 'elpaca-autoloads nil t) | |
(require 'elpaca) | |
(elpaca-generate-autoloads "elpaca" repo) | |
(load "./elpaca-autoloads"))) | |
(add-hook 'after-init-hook #'elpaca-process-queues) | |
(elpaca `(,@elpaca-order)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment