init.el (4174B)
1 ;; -*- lexical-binding: t; -*- 2 ;; Start elpaca bootstrap 3 (defvar elpaca-installer-version 0.12) 4 (defvar elpaca-directory (expand-file-name "elpaca/" user-emacs-directory)) 5 (defvar elpaca-builds-directory (expand-file-name "builds/" elpaca-directory)) 6 (defvar elpaca-sources-directory (expand-file-name "sources/" elpaca-directory)) 7 (defvar elpaca-order '(elpaca :repo "https://github.com/progfolio/elpaca.git" 8 :ref nil :depth 1 :inherit ignore 9 :files (:defaults "elpaca-test.el" (:exclude "extensions")) 10 :build (:not elpaca-activate))) 11 (let* ((repo (expand-file-name "elpaca/" elpaca-sources-directory)) 12 (build (expand-file-name "elpaca/" elpaca-builds-directory)) 13 (order (cdr elpaca-order)) 14 (default-directory repo)) 15 (add-to-list 'load-path (if (file-exists-p build) build repo)) 16 (unless (file-exists-p repo) 17 (make-directory repo t) 18 (when (<= emacs-major-version 28) (require 'subr-x)) 19 (condition-case-unless-debug err 20 (if-let* ((buffer (pop-to-buffer-same-window "*elpaca-bootstrap*")) 21 ((zerop (apply #'call-process `("git" nil ,buffer t "clone" 22 ,@(when-let* ((depth (plist-get order :depth))) 23 (list (format "--depth=%d" depth) "--no-single-branch")) 24 ,(plist-get order :repo) ,repo)))) 25 ((zerop (call-process "git" nil buffer t "checkout" 26 (or (plist-get order :ref) "--")))) 27 (emacs (concat invocation-directory invocation-name)) 28 ((zerop (call-process emacs nil buffer nil "-Q" "-L" "." "--batch" 29 "--eval" "(byte-recompile-directory \".\" 0 'force)"))) 30 ((require 'elpaca)) 31 ((elpaca-generate-autoloads "elpaca" repo))) 32 (progn (message "%s" (buffer-string)) (kill-buffer buffer)) 33 (error "%s" (with-current-buffer buffer (buffer-string)))) 34 ((error) (warn "%s" err) (delete-directory repo 'recursive)))) 35 (unless (require 'elpaca-autoloads nil t) 36 (require 'elpaca) 37 (elpaca-generate-autoloads "elpaca" repo) 38 (let ((load-source-file-function nil)) (load "./elpaca-autoloads")))) 39 (add-hook 'after-init-hook #'elpaca-process-queues) 40 (elpaca `(,@elpaca-order)) 41 ;; End elpaca bootstrap 42 43 ;; For windows hosts, we need to enable `elpaca-no-symlink-mode' 44 (when (eq system-type 'windows-nt) 45 (elpaca-no-symlink-mode)) 46 47 ;; Installing the latest Org package so that we have live LaTeX previews: 48 (elpaca '(org :repo "https://code.tecosaur.net/tec/org-mode" :branch "dev")) 49 50 ;; The main literate Emacs config is stored in config.org: 51 (defvar ethandl/config-fname 52 (expand-file-name "config.org" user-emacs-directory) 53 "Fully qualified filename of the literate org config for 54 Emacs") 55 56 ;; We will also generate platform-specific files in platform-config 57 (defvar ethandl/platform-config-dir 58 (expand-file-name "platform-config/" user-emacs-directory) 59 "Fully qualified path for platform-specific config files") 60 61 ;; Ensuring we have this folder created 62 (unless (file-directory-p ethandl/platform-config-dir) 63 (make-directory ethandl/platform-config-dir t)) 64 65 ;; Waiting for latest version of Org to install: 66 (elpaca-wait) 67 68 ;; We want all tangled files to have the lexical binding header: 69 (defun ethandl/insert-lexical-binding () 70 (when (derived-mode-p 'emacs-lisp-mode) 71 (goto-char (point-min)) 72 (unless (string-match-p "lexical-binding" (buffer-string)) 73 (insert ";; -*- lexical-binding: t -*-\n") 74 (basic-save-buffer)))) 75 (add-hook 'org-babel-post-tangle-hook #'ethandl/insert-lexical-binding) 76 77 ;; Finally we can tangle the main config 78 (when (file-readable-p ethandl/config-fname) 79 (org-babel-load-file ethandl/config-fname)) 80 81 (defvar ethandl/custom-file 82 (expand-file-name "custom.el" user-emacs-directory) 83 "The filename for the custom file that stores Emacs' 84 automaticaly generated vars") 85 86 (setq custom-file ethandl/custom-file) 87 (load custom-file)