commit 7df89d3b1e7de8ea3a6aaa4c551d45d6dd491c23
parent 9821562b9925d3c73346cf003a97a94838d6054d
Author: MichaĆ M. Sapka <michal@sapka.me>
Date: Tue, 13 Jun 2023 11:57:34 +0200
feat: Migrate to Elpaca
Diffstat:
3 files changed, 91 insertions(+), 61 deletions(-)
diff --git a/emacs/.emacs.d/config.org b/emacs/.emacs.d/config.org
@@ -59,40 +59,59 @@
** Package management
#+BEGIN_SRC emacs-lisp
- (require 'package)
+ (defvar elpaca-installer-version 0.4)
+ (defvar elpaca-directory (expand-file-name "elpaca/" user-emacs-directory))
+ (defvar elpaca-builds-directory (expand-file-name "builds/" elpaca-directory))
+ (defvar elpaca-repos-directory (expand-file-name "repos/" elpaca-directory))
+ (defvar elpaca-order '(elpaca :repo "https://github.com/progfolio/elpaca.git"
+ :ref nil
+ :files (:defaults (:exclude "extensions"))
+ :build (:not elpaca--activate-package)))
+ (let* ((repo (expand-file-name "elpaca/" elpaca-repos-directory))
+ (build (expand-file-name "elpaca/" elpaca-builds-directory))
+ (order (cdr elpaca-order))
+ (default-directory repo))
+ (add-to-list 'load-path (if (file-exists-p build) build repo))
+ (unless (file-exists-p repo)
+ (make-directory repo t)
+ (when (< emacs-major-version 28) (require 'subr-x))
+ (condition-case-unless-debug err
+ (if-let ((buffer (pop-to-buffer-same-window "*elpaca-bootstrap*"))
+ ((zerop (call-process "git" nil buffer t "clone"
+ (plist-get order :repo) repo)))
+ ((zerop (call-process "git" nil buffer t "checkout"
+ (or (plist-get order :ref) "--"))))
+ (emacs (concat invocation-directory invocation-name))
+ ((zerop (call-process emacs nil buffer nil "-Q" "-L" "." "--batch"
+ "--eval" "(byte-recompile-directory \".\" 0 'force)")))
+ ((require 'elpaca))
+ ((elpaca-generate-autoloads "elpaca" repo)))
+ (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))
+
+
- (setq package-archives '(("melpa" . "https://melpa.org/packages/")
- ("org" . "https://orgmode.org/elpa/")
- ("elpa" . "https://elpa.gnu.org/packages/")))
- (package-initialize)
- (unless package-archive-contents (package-refresh-contents))
-
- ;; Initialize use-package on non-Linux platforms
- (unless (package-installed-p 'use-package)
- (package-install 'use-package))
-
- (require 'use-package)
#+end_src
- #+RESULTS:
- : use-package
-
-Auto-update packages.
#+begin_src emacs-lisp
- (use-package auto-package-update
- :ensure t
- :custom
- (auto-package-update-interval 7)
- (auto-package-update-prompt-before-update t)
- (auto-package-update-hide-results t)
- :config
- (auto-package-update-maybe)
- (auto-package-update-at-time "09:00"))
-#+END_SRC
+ (elpaca elpaca-use-package
+ ;; Enable :elpaca use-package keyword.
+ (elpaca-use-package-mode)
+ ;; Assume :elpaca t unless otherwise specified.
+ (setq elpaca-use-package-by-default t))
+#+end_src
-#+RESULTS:
-: t
+#+begin_src emacs-lisp
+ (elpaca-wait)
+#+end_src
** Encoding
@@ -193,7 +212,7 @@ so we'll see.
#+begin_src emacs-lisp
(use-package marginalia
- :ensure t
+ :elpaca t
;; Bind `marginalia-cycle' locally in the minibuffer. To make the binding
;; available in the *Completions* buffer, add it to the
;; `completion-list-mode-map'.
@@ -207,7 +226,7 @@ so we'll see.
#+begin_src emacs-lisp
(use-package savehist
- :ensure t
+ :elpaca nil
:init
(savehist-mode))
#+end_src
@@ -228,12 +247,12 @@ I don't get Tree Sitter but it makes syntax coloring more accurate.
#+BEGIN_SRC emacs-lisp
(use-package tree-sitter
- :ensure t
+ :elpaca t
:config
(global-tree-sitter-mode))
(use-package tree-sitter-langs
- :ensure t
+ :elpaca t
:after tree-sitter)
#+END_SRC
@@ -250,7 +269,7 @@ Essential package. An automatic cheat sheet for keyboard bindings.
(which-key-setup-side-window-bottom)
(set-face-attribute 'which-key-local-map-description-face nil
:weight 'bold)
- :ensure t)
+ :elpaca t)
#+END_SRC
** Tramp
@@ -293,7 +312,7 @@ They say it's the best UI for Git. I can't disagree.
*** Magit
#+BEGIN_SRC emacs-lisp
(use-package magit
- :ensure t
+ :elpaca t
:bind ("C-x g" . magit-status)
:config
(setq magit-save-repository-buffers nil))
@@ -303,7 +322,7 @@ They say it's the best UI for Git. I can't disagree.
#+begin_src emacs-lisp
(use-package forge
- :ensure t
+ :elpaca t
:after magit)
#+end_src
@@ -313,7 +332,7 @@ Show changed lines in the gutter
#+BEGIN_SRC emacs-lisp
(use-package git-gutter
- :ensure t
+ :elpaca t
:hook (prog-mode . git-gutter-mode)
:config
(setq git-gutter:update-interval 0.02))
@@ -322,24 +341,25 @@ Show changed lines in the gutter
*** Diff
#+begin_src emacs-lisp
-(use-package ediff
- :config
- (setq ediff-split-window-function 'split-window-horizontally)
- (setq ediff-window-setup-function 'ediff-setup-windows-plain)
- (defun my/command-line-diff (switch)
- (setq initial-buffer-choice nil)
- (let ((file1 (pop command-line-args-left))
- (file2 (pop command-line-args-left)))
- (ediff file1 file2)))
- ;; show the ediff command buffer in the same frame
- (add-to-list 'command-switch-alist '("-diff" . my/command-line-diff)))
+ (use-package ediff
+ :elpaca nil
+ :config
+ (setq ediff-split-window-function 'split-window-horizontally)
+ (setq ediff-window-setup-function 'ediff-setup-windows-plain)
+ (defun my/command-line-diff (switch)
+ (setq initial-buffer-choice nil)
+ (let ((file1 (pop command-line-args-left))
+ (file2 (pop command-line-args-left)))
+ (ediff file1 file2)))
+ ;; show the ediff command buffer in the same frame
+ (add-to-list 'command-switch-alist '("-diff" . my/command-line-diff)))
#+end_src
** Flycheck
#+BEGIN_SRC emacs-lisp
(use-package flycheck
- :ensure t
+ :elpaca t
:init (global-flycheck-mode))
(setq flycheck-command-wrapper-function
@@ -372,7 +392,7 @@ Yeah, force indentation
:config
(global-aggressive-indent-mode 1)
(add-to-list 'aggressive-indent-excluded-modes 'org-mode)
- :ensure t)
+ :elpaca t)
#+END_SRC
** Ripgrep
@@ -381,7 +401,7 @@ A much faster Grep
#+BEGIN_SRC emacs-lisp
(use-package rg
- :ensure t
+ :elpaca t
:config
(rg-enable-default-bindings))
#+END_SRC
@@ -390,7 +410,7 @@ A much faster Grep
#+BEGIN_SRC emacs-lisp
(use-package lsp-mode
- :ensure t
+ :elpaca t
:init
;; set prefix for lsp-command-keymap (few alternatives - "C-l", "C-c l")
(setq lsp-keymap-prefix "C-c l")
@@ -400,7 +420,7 @@ A much faster Grep
(lsp-enable-which-key-integration t))
(use-package lsp-ltex
- :ensure t
+ :elpaca t
:hook (text-mode . (lambda ()
(require 'lsp-ltex)
(lsp))) ; or lsp-deferred
@@ -409,7 +429,7 @@ A much faster Grep
;; optionally
(use-package lsp-ui
- :ensure t
+ :elpaca t
:commands lsp-ui-mode)
#+END_SRC
@@ -423,7 +443,7 @@ A much faster Grep
#+BEGIN_SRC emacs-lisp
(use-package notmuch
- :ensure t
+ :elpaca t
:commands notmuch-hello
:bind (("C-c m" . notmuch-hello)))
#+END_SRC
@@ -434,7 +454,7 @@ You can find me at https://emacs.ch/@ms
#+BEGIN_SRC emacs-lisp
(use-package mastodon
- :ensure t
+ :elpaca t
:config
(setq mastodon-instance-url "https://emacs.ch/"
mastodon-active-user "ms"))
@@ -446,7 +466,7 @@ You can find me at https://emacs.ch/@ms
#+BEGIN_SRC emacs-lisp
(use-package elfeed
- :ensure t
+ :elpaca t
:config
(defface important-elfeed-entry
'((t :foreground "#f77"))
@@ -472,7 +492,7 @@ REF: https://michal.sapka.me/2023/elfeed-literate-config/
#+BEGIN_SRC emacs-lisp
(use-package elfeed-org
- :ensure t
+ :elpaca t
:config
(setq rmh-elfeed-org-files (list "~/.emacs.d/config.org"))
(elfeed-org))
@@ -559,7 +579,7 @@ Epub in Emacs? Why not!
#+BEGIN_SRC emacs-lisp
(use-package nov
- :ensure t
+ :elpaca t
:config
(add-to-list 'auto-mode-alist '("\\.epub\\'" . nov-mode)))
#+END_SRC
@@ -569,7 +589,7 @@ Epub in Emacs? Why not!
** Org-mode
#+BEGIN_SRC emacs-lisp
(use-package org
- :ensure t
+ :elpaca t
:init
(setq org-directory (expand-file-name "~/org"))
(unless (file-exists-p org-directory)
@@ -583,7 +603,7 @@ A cool package which adds table of contents. Ref: [[https://github.com/snosov1/t
#+BEGIN_SRC emacs-lisp
(use-package toc-org
- :ensure t
+ :elpaca t
:config
(add-hook 'org-mode-hook 'toc-org-mode)
)
@@ -623,7 +643,7 @@ I'd love to keep bibligraphy in a managable way. Grown ups seem to agree that bi
#+begin_src emacs-lisp
(use-package ebib
- :ensure t)
+ :elpaca t)
#+end_src
#+RESULTS:
diff --git a/emacs/.emacs.d/early-init.el b/emacs/.emacs.d/early-init.el
@@ -0,0 +1,9 @@
+;; Example Elpaca early-init.el -*- lexical-binding: t; -*-
+
+(setq package-enable-at-startup nil)
+
+;; Local Variables:
+;; no-byte-compile: t
+;; no-native-compile: t
+;; no-update-autoloads: t
+;; End:
diff --git a/emacs/.emacs.d/init.el b/emacs/.emacs.d/init.el
@@ -1 +1,2 @@
(org-babel-load-file "~/.emacs.d/config.org")
+