Coder Social home page Coder Social logo

elpaca's People

Contributors

ashton314 avatar lebensterben avatar leotaku avatar progfolio avatar ryunix avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

elpaca's Issues

void function `elpaca-ui--buttonize`

Installing packages works fine until it stops working. I get an error saying that elpaca-ui--buttonize is void. I got the error first when I calling elpaca-try on the package solarized-theme and then when I tried installing
org-auto-tangle. Now, that being said, I suspect it doesn't have to do with the specific package being installed.

Looking at the source code I see that elpaca-ui--buttonize is an alias for buttonize (in my case with emacs 27). I
suspect somehow the alias wasn't compiled properly.

(defalias 'elpaca-ui--buttonize
  (with-no-warnings (if (version< emacs-version "29.1") #'button-buttonize #'buttonize)))

Here is a backtrace of me trying to install the company package. I noticed it's also mentioning a package I tried to install prior to this, lf.

Debugger entered--Lisp error: (void-function elpaca-ui--buttonize)
  elpaca-ui--buttonize(#("lf.el:1:427" 0 11 (face nil)) #f(compiled-function (&rest _) #<bytecode 0x1fde1d0d2f09>))
  #f(compiled-function (entry) #<bytecode 0x114dc5d>)((lf [#("lf" 0 2 (face default elpaca (elpaca< lf "lf" (lf :package "lf" :fetcher github :repo "alhassy/lf" :files ("*.el" "*.el.in" "dir" "*.info" "*.texi" "*.texinfo" "doc/dir" "doc/*.info" "doc/*.texi" "doc/*.texinfo" "lisp/*.el" ...)) (finished activation info byte-compilation autoloads linking cloning-deps ref-checked-out cloning queued) "/home/luis/.config/emacs/elpaca/repos/lf" "/home/luis/.config/emacs/elpaca/builds/lf" nil (("/home/luis/.config/emacs/elpaca/repos/lf/lf.el" . "/home/luis/.config/emacs/elpaca/builds/lf/lf.el")) nil (:package "lf" :fetcher github :repo "alhassy/lf" :files ("*.el" "*.el.in" "dir" "*.info" "*.texi" "*.texinfo" "doc/dir" "doc/*.info" "doc/*.texi" "doc/*.texinfo" "lisp/*.el" ...) :protocol https :remotes "origin" :inherit t :depth 1) ((elpaca< dash "dash" ... ... "/home/luis/.config/emacs/elpaca/repos/dash" "/home/luis/.config/emacs/elpaca/builds/dash" nil nil nil ... nil ... nil 0 ... t nil ...) (elpaca< s "s" ... ... "/home/luis/.config/emacs/elpaca/repos/s" "/home/luis/.config/emacs/elpaca/builds/s" nil nil nil ... nil ... nil 0 ... t nil ...)) nil nil 2 (25469 32856 655055 474000) nil #<process elpaca-clone-lf> ((finished ... "✓ 2.014 secs") (activation ... "Autoloads cached") (activation ... "Caching autoloads") (activation ... "Package build dir added to load-path") (activation ... "Activating package") (info ... "No .info files found") (info ... "Compiling Info files") (byte-compilation ... "Byte compilation complete") (byte-compilation ... "Done (Total of 1 file compiled, 1 skipped)") (byte-compilation ... "lf.el:427:1:Warning: Unused lexical variable ‘advi...") (byte-compilation ... "In toplevel form:") (byte-compilation ... "Compiling /home/luis/.config/emacs/elpaca/builds/l...") (byte-compilation ... "Compiling /home/luis/.config/emacs/elpaca/builds/l...") (byte-compilation ... "Checking /home/luis/.config/emacs/elpaca/builds/lf...") (byte-compilation ... "Byte compiling") (autoloads ... "Autoloads Generated") (autoloads ... "  INFO     Scraping files for lf-autoloads.el...do...") (autoloads ... "  INFO     Scraping files for lf-autoloads.el... ") (autoloads ... "Generating autoloads: /home/luis/.config/emacs/elp...") (linking ... "Build files linked") (linking ... "Linking build files") (cloning-deps ... "Cloning Dependencies") (ref-checked-out ... "No ref specified. Using default") (cloning ... "Remotes fetched") (cloning ... "Fetching origin") (cloning ... "Adding Remotes") (cloning ... "Resolving deltas: 100% (1/1), done.") (cloning ... "Cloning into '/home/luis/.config/emacs/elpaca/repo...") (queued ... "Package queued"))))) "byte-compilation" #("lf.el:427:1:Warning: Unused lexical variable ‘advi..." 0 58 (face elpaca-failed)) "23878.834045"]))
  mapcar(#f(compiled-function (entry) #<bytecode 0x114dc5d>) ((elpaca [... "rebuilding" "Rebuilding" "74652.378062"]) (lf [... "finished" "✓ 2.014 secs" "23878.841106"]) (lf [... "activation" "Autoloads cached" "23878.841043"]) (lf [... "activation" "Caching autoloads" "23878.840545"]) (lf [... "activation" "Package build dir added to..." "23878.840486"]) (lf [... "activation" "Activating package" "23878.840422"]) (lf [... "info" "No .info files found" "23878.840399"]) (lf [... "info" "Compiling Info files" "23878.840362"]) (lf [... "byte-compilation" "Byte compilation complete" "23878.840324"]) (lf [... "byte-compilation" "Done (Total of 1 file comp..." "23878.834065"]) (lf [... "byte-compilation" ... "23878.834045"]) (lf [... "byte-compilation" "In toplevel form:" "23878.834021"]) (lf [... "byte-compilation" "Compiling /home/luis/.conf..." "23878.755431"]) (lf [... "byte-compilation" "Compiling /home/luis/.conf..." "23878.755405"]) (lf [... "byte-compilation" "Checking /home/luis/.confi..." "23878.676771"]) (lf [... "byte-compilation" "Byte compiling" "23878.578816"]) (lf [... "autoloads" "Autoloads Generated" "23878.578797"]) (lf [... "autoloads" "  INFO     Scraping files ..." "23878.578712"]) (lf [... "autoloads" "  INFO     Scraping files ..." "23878.578688"]) (lf [... "autoloads" "Generating autoloads: /hom..." "23877.934781"]) (lf [... "linking" "Build files linked" "23877.933493"]) (lf [... "linking" "Linking build files" "23877.923880"]) (lf [... "cloning-deps" "Cloning Dependencies" "23877.922603"]) (lf [... "ref-checked-out" "No ref specified. Using de..." "23877.922551"]) (lf [... "cloning" "Remotes fetched" "23877.922479"]) (lf [... "cloning" "Fetching origin" "23877.533210"]) ...))
  elpaca-ui--byte-comp-warnings(((elpaca [... "rebuilding" "Rebuilding" "74652.378062"]) (lf [... "finished" "✓ 2.014 secs" "23878.841106"]) (lf [... "activation" "Autoloads cached" "23878.841043"]) (lf [... "activation" "Caching autoloads" "23878.840545"]) (lf [... "activation" "Package build dir added to..." "23878.840486"]) (lf [... "activation" "Activating package" "23878.840422"]) (lf [... "info" "No .info files found" "23878.840399"]) (lf [... "info" "Compiling Info files" "23878.840362"]) (lf [... "byte-compilation" "Byte compilation complete" "23878.840324"]) (lf [... "byte-compilation" "Done (Total of 1 file comp..." "23878.834065"]) (lf [... "byte-compilation" ... "23878.834045"]) (lf [... "byte-compilation" "In toplevel form:" "23878.834021"]) (lf [... "byte-compilation" "Compiling /home/luis/.conf..." "23878.755431"]) (lf [... "byte-compilation" "Compiling /home/luis/.conf..." "23878.755405"]) (lf [... "byte-compilation" "Checking /home/luis/.confi..." "23878.676771"]) (lf [... "byte-compilation" "Byte compiling" "23878.578816"]) (lf [... "autoloads" "Autoloads Generated" "23878.578797"]) (lf [... "autoloads" "  INFO     Scraping files ..." "23878.578712"]) (lf [... "autoloads" "  INFO     Scraping files ..." "23878.578688"]) (lf [... "autoloads" "Generating autoloads: /hom..." "23877.934781"]) (lf [... "linking" "Build files linked" "23877.933493"]) (lf [... "linking" "Linking build files" "23877.923880"]) (lf [... "cloning-deps" "Cloning Dependencies" "23877.922603"]) (lf [... "ref-checked-out" "No ref specified. Using de..." "23877.922551"]) (lf [... "cloning" "Remotes fetched" "23877.922479"]) (lf [... "cloning" "Fetching origin" "23877.533210"]) ...))
  #f(compiled-function () #<bytecode 0x1fde1d7e87a9>)()
  elpaca-ui--update-search-filter(#<buffer *elpaca-log*> "#latest #linked-errors")
  elpaca-log()
  elpaca-log--latest()
  elpaca-try((company :package "company" :repo "company-mode/company-mode" :fetcher github :files (:defaults "icons" ("images/small" "doc/images/small/*.png"))))
  funcall-interactively(elpaca-try (company :package "company" :repo "company-mode/company-mode" :fetcher github :files (:defaults "icons" ("images/small" "doc/images/small/*.png"))))
  call-interactively(elpaca-try nil nil)
  command-execute(elpaca-try)

Interestingly, this error doesn't happen immediately. It happens after
installing a few packages. Again, not sure whether certain packages triggering
this.

I tried:
1- re-evaluating this form
It evaluated successfully but I kept getting the same error.
2- re-building elpaca
The error doesn't let me re-build it.

Cannot install BBDB

Trying to install BBDB using

(elpaca-use-package bbdb)

results in it not being able to find bbdb-site when trying to require it.

The file exists as bbdb-site.el.in and is linked as such but the makefile build-process copies the two *.el.in files to *.el so that they can be processed properly.

I've tried renaming them using :pre-build but it doesn't seem to do anything.

[Support]: Cannot install a package

Emacs Version

GNU Emacs 29.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.34, cairo version 1.17.6) of 2022-10-29

Operating System

OS: Arch Linux x86_64

question

Hi, I'm trying to replace my current use-package + straight setup with elpaca. I started testing to replace package by package but it seems like I faced a problem trying to enable vertico. I added the bootstrap code and specified it to use to load elpaca and (elpaca use-package (require 'use-package)). In my configs I try to load vertico:

(elpaca-use-package vertico
  :demand t
  :init
  (vertico-mode))

But vertico is not installed (I cannot activate vertico-mode manually with M-x because it is not found). What I might be doing wrong?

Relevant information

No response

Confirmation

  • I've read the documentation and I still am unsure.

[Feature]: Install and manage a non elisp package

Feature Description

Hello I'm trying to install this tree-sitter language definitions bundle using elpaca like this:

(elpaca-use-package (tree-sitter-module
             :type git :host github
             :repo "casouri/tree-sitter-module"
             :pre-build (("./batch.sh"))
             :files ("dist/*.so" "dist/*.dll" "dist/*.dylib"))
  :init
  (with-eval-after-load 'treesit
    (add-to-list 'treesit-extra-load-path
		 (concat elpaca-builds-directory "tree-sitter-module"))))

It builds it and symlinks the modules in the builds directory but elpaca signals this error.
elpaca--queue-dependencies: (error "Unable to find main elisp file for tree-sitter-module)

How can I instruct it not look for a main elisp file, I tried :main nil and :build (:not elpaca--queue-dependencies)?

Confirmation

  • The feature I'm proposing does not already exist in Elpaca

[Support]: should elpaca modify `initial-buffer-choice`?

Emacs Version

GNU Emacs 28.2 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.34, cairo version 1.17.6)
of 2022-09-12

Operating System

Arch Linux x86_64

question

I want to argue that elpaca should not modify the variableinitial-buffer-choice and that that variable should be reserved exclusively for user modification.

I understand that when something goes wrong it can be convenient to show elpaca log.

One of my concerns that the indirection caused by elpaca's setting of initial-buffer-choice only to switch to the user's initial-buffer-choice is a source of unexpected behaviors. If some error occurs between elpaca's setting of initial-buffer-choice and the user setting it himself, or if the user's configuration has some code assumes (as it should be able to) that relies initial-buffer-choice's value never changes something unexpected may happen.

Arguably, even if this doesn't happen the user may not want *elpaca-log* or any other elpaca buffer to be the initial buffer even if something goes wrong with elpaca.

Furthermore, elpaca's manipulation of initial-buffer-choice means that it is more involved for the user to customize elpaca's default behavior on which buffer to show under which circumstances because in addition to writing his own function to add into initial-buffer-choice he has to then suppress elpaca from trying to do so itself.

I propose that elpaca instead provides a function that the user can add into initial-buffer-choice which would provide elpaca's behavior as to which buffer and in what circumstance to display it and would default to the user's value for initial-buffer-choice.

This way the user can add it in their bootstrap code easily if they wish (maybe it should be in the bootstrap code by default) but it is not imposed on them.

(setq initial-buffer-choice #'elpaca-default-elpaca-buffer-maybe)

The function elpaca-default-elpaca-buffer-maybe could optional take a user's initial-buffer-choice value to default to.

Relevant information

No response

Confirmation

  • I've read the documentation and I still am unsure.

[Support]: use-package's :ensure keyword uses package.el

Emacs Version

GNU Emacs 29.0.50 (build 1, x86_64-apple-darwin22.1.0, NS appkit-2299.00 Version 13.0 (Build 22A380)) of 2022-10-26

Operating System

Mac OS X

question

Thanks for the package, really great work! I have been trying to port my init.el to use elpaca-use-package and found a problem with some packages that seem to be only present in MELPA, they seem not to be found by use-package because my package.el does not have the MELPA repository data.

I tried to dig in but I am a bit out of my depth with the interaction of all the packages.

Relevant information

Debug trace:

Debugger entered--Lisp error: (error "Package ‘doom-modeline-’ is unavailable")
  error("Package `%s-%s' is unavailable" doom-modeline "")
  package-compute-transaction(nil ((doom-modeline)))
  package-install(doom-modeline)
  use-package-ensure-elpa(doom-modeline (t) nil)
  (progn (use-package-ensure-elpa 'doom-modeline '(t) 'nil) (defvar use-package--warning1 #'(lambda (keyword err) (let ((msg (format "%s/%s: %s" ... keyword ...))) (display-warning 'use-pa$
  (use-package doom-modeline :ensure t :hook (after-init . doom-modeline-mode) :config (setq doom-modeline-height 25))
  (progn (require 'use-package) (use-package compat :ensure t) (use-package doom-modeline :ensure t :hook (after-init . doom-modeline-mode) :config (setq doom-modeline-height 25)))

init.el to reproduce:
(setq load-prefer-newer t)
(declare-function elpaca-generate-autoloads "elpaca")
(defvar elpaca-directory (expand-file-name "elpaca/" user-emacs-directory))
(when-let ((elpaca-repo (expand-file-name "repos/elpaca/" elpaca-directory))
           (elpaca-build (expand-file-name "builds/elpaca/" elpaca-directory))
           (elpaca-target (if (file-exists-p elpaca-build) elpaca-build elpaca-repo))
           (elpaca-url  "https://www.github.com/progfolio/elpaca.git")
           ((add-to-list 'load-path elpaca-target))
           ((not (file-exists-p elpaca-repo)))
           (buffer (get-buffer-create "*elpaca-bootstrap*")))
  (condition-case-unless-debug err
      (progn
        (unless (zerop (call-process "git" nil buffer t "clone" elpaca-url elpaca-repo))
          (error "%s" (list (with-current-buffer buffer (buffer-string)))))
        (byte-recompile-directory elpaca-repo 0 'force)
        (require 'elpaca)
        (elpaca-generate-autoloads "elpaca" elpaca-repo)
        (kill-buffer buffer))
    ((error)
     (delete-directory elpaca-directory 'recursive)
     (with-current-buffer buffer
       (goto-char (point-max))
       (insert (format "\n%S" err))
       (display-buffer buffer)))))
(require 'elpaca-autoloads)
(add-hook 'after-init-hook #'elpaca-process-queues)
(elpaca (elpaca :host github :repo "progfolio/elpaca"))

(setq package-enable-at-startup nil)

;; Use-package as the package configuration tool of choice
(elpaca use-package (require 'use-package))

(elpaca-use-package compat
  :ensure t)

(elpaca-use-package doom-modeline
  :ensure t
  :hook (after-init . doom-modeline-mode)
  :config
  (setq doom-modeline-height 25))
(custom-set-variables
 ;; custom-set-variables was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 '(package-selected-packages '(doom-modeline compat)))
(custom-set-faces
 ;; custom-set-faces was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 )

I also had to patch elpaca-menu-gnu-elpa-mirror--clone because compat dependency was not downloading.

(defun elpaca-menu-gnu-elpa-mirror--clone ()
  "Clone GNU ELPA recipes repo to PATH."
  (make-directory elpaca-menu-gnu-elpa-mirror-path t)
  (message "Downloading GNU ELPA recipes...")
  (elpaca-with-process
      (elpaca-process-call "git" "clone"
                           elpaca-menu-gnu-elpa-mirror-address
                           elpaca-menu-gnu-elpa-mirror-path)
    (message "%s" (if success "GNU ELPA recipes downloaded." stderr))))

Confirmation

  • I've read the documentation and I still am unsure.

[Bug]: Updating packages won't always generate autoloads properly

Emacs Version

GNU Emacs 28.2 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.34, cairo version 1.17.6) of 2022-09-12

Operating System

Arch Linux x86_64 on kernel 6.0.10-arch2-1

Bug Description

Sometimes (not always) when I run M-x elpaca-update-all the autoloads will not get generated properly and I will be hit with void-function errors due to the packages no longer being loaded correctly. This also happens with the Elpaca package itself, which is annoying because then Emacs wont start loading the init at all. After updating and manually running elpaca-rebuild on the packages that broke will correctly produce autoloads.

Note: I did use chemacs2 when testing this, but I believe this doesnt affect the issue.

2022-12-31-114148_maim

I've managed to capture this behavior in a minimal working example. Due to the nature of this odd behavior I have zipped up the before and after state of the entire .emacs.d directory when running the elpaca-update-all command.
before.zip after.zip

The contents of elpaca-autoloads.el after updating will look like the following below (there is a hex 0x000c character on line 5 in the file which is not visually rendered):

Relevant log output

;;; elpaca-autoloads.el --- automatically extracted autoloads  -*- lexical-binding: t -*-
;;
;;; Code:


(provide 'elpaca-autoloads)
;; Local Variables:
;; version-control: never
;; no-byte-compile: t
;; no-update-autoloads: t
;; coding: utf-8
;; End:
;;; elpaca-autoloads.el ends here

[Bug]: point in *elpaca-log* buffer does not reflect new logs

Emacs Version

GNU Emacs 27.2 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.24, cairo version 1.16.0)

Operating System

Guix System 371aa5777a3805a3886f3feea5f1960fe3fe4219 x86_64

Bug Description

When the elpaca log buffer is displayed and actions are being logged into it, point stays at the beginning of the buffer.

In my experiences with logs which are actively updated, the point automatically goes to the bottom so that the user can see what's happening. Otherwise, the user has to keep scrolling down. This is what I think should be the default.

A specific example, I called elpaca-rebuild on elpaca to test a new commit and then the log buffer came up but I was confused momentarily and didn't know what was happening because I didn't see any change--there actually was change happening, but at the bottom of the buffer. My view was at the top of the buffer.

Relevant log output

No response

Trouble installing AUCTeX

What's wrong

I can't install AUCTeX. I get this warning:

⛔ Error (use-package): auctex/:catch: Loading file /Users/ashton/.emacs.d/elpaca/builds/auctex/auctex.elc failed to provide feature ‘auctex’

I don't know if this is a problem with elpaca or with AUCTeX. I've never installed AUCTeX before, so I don't know if this is expected behavior.

Directions to reproduce

(elpaca-use-package auctex)

Version information

  • Emacs version: 29.0.50
  • Operating system: macOS

Native compilation of packages

I've looked through the repo but I couldn't find any references to this, is this feature planned?
Or is this already possible with some additional elisp in my config?

--batch byte compiling init.el

User wants to be able to debug their config by compiling it on the command line before actually using it.
e.g.

emacs --batch -f batch-byte-compile init.el

what has been tried?

This works only, of course, if I wrap the initial bootstrapping / configuration steps
in eval-and-compile, like so (originally practiced with straight.el, and here adapted for elpaca):

(eval-and-compile

  (setq debug-on-error t)
  
  ;; init-elpaca.el --- ELPACA INIT DEMO   -*- lexical-binding: t; -*-
  ;; Bootstrap Elpaca
  (declare-function elpaca-generate-autoloads "elpaca")
  (defvar elpaca-directory (expand-file-name "elpaca/" user-emacs-directory))
  (when-let ((elpaca-repo (expand-file-name "repos/elpaca/" elpaca-directory))
           (elpaca-build (expand-file-name "builds/elpaca/" elpaca-directory))
           (elpaca-target (if (file-exists-p elpaca-build) elpaca-build elpaca-repo))
           (elpaca-url  "https://www.github.com/progfolio/elpaca.git")
           ((add-to-list 'load-path elpaca-target))
           ((not (file-exists-p elpaca-repo)))
           (buffer (get-buffer-create "*elpaca-bootstrap*")))
    (condition-case-unless-debug err
	(progn
          (unless (zerop (call-process "git" nil buffer t "clone" elpaca-url elpaca-repo))
          (error "%s" (list (with-current-buffer buffer (buffer-string)))))
          (byte-recompile-directory elpaca-repo 0 'force)
          (require 'elpaca)
          (elpaca-generate-autoloads "elpaca" elpaca-repo)
          (kill-buffer buffer))
      ((error)
       (delete-directory elpaca-directory 'recursive)
       (with-current-buffer buffer
	 (goto-char (point-max))
	 (insert (format "\n%S" err))
       (display-buffer buffer)))))
  (require 'elpaca-autoloads)
  (add-hook 'after-init-hook #'elpaca-process-queues)
  (elpaca (elpaca :host github :repo "progfolio/elpaca")))
  

(eval-and-compile
  ;; some very basic variables - YMMV
  (add-to-list 'load-path "~rx/el")
  (add-to-list 'load-path "~/cfg/gnus")
  (add-to-list 'custom-theme-load-path "~rx/el/themes")
  ;; (setq load-prefer-newer t) )

Originally posted by @reuleaux in #8 (comment)

[Bug]: failed to install org

Emacs Version

GNU Emacs 29.0.50 (build 1, aarch64-apple-darwin22.1.0, NS appkit-2299.00 Version 13.0.1 (Build 22A400))

Operating System

MacOS

Bug Description

Failed to install org with

(elpaca-use-package org)

Relevant log output

Info Time ▼ 
org                            queued               Package queued                                                                   00.395804
org                            queued               Adding Remotes                                                                   00.420607
org                            queued               Remotes fetched                                                                  01.246130
org                            ref-checked-out      No ref specified. Using default                                                  01.246168
org                            pre-build            Running :pre-build commands                                                      01.246194
org                            pre-build            running command: (progn (require 'elpaca-menu-org) (elpaca-menu-org--build))     01.454250
org                            pre-build            Error: error ("Failed to parse ORGVERSION")                                      01.478993
org                            pre-build              debug-early-backtrace()                                                        01.479000
org                            pre-build              debug-early(error (error "Failed to parse ORGVERSION"))                        01.479006
org                            pre-build              error("Failed to parse ORGVERSION")                                            01.479010
org                            pre-build              (if failure (error "Failed to parse ORGVERSION") (replace-regexp-in-string "-dev" "" stdout)) 01.479016
org                            pre-build              (let* ((result (elpaca-process-call "emacs" "-Q" "--batch" "--eval" "(require 'lisp-mnt)" "--visit" "org.el" "--eval" "(princ (lm-header \"version\"))")) (exit (car result)) (invoked (numberp exit)) (success (and invoked (= 0 exit))) (failure (not success)) (stdout (nth 1 result)) (stderr (nth 2 result))) (ignore result exit invoked success failure stdout stderr) (if failure (error "Failed to parse ORGVERSION") (replace-regexp-in-string "-dev" "" stdout))) 01.479020
org                            pre-build              (if failure (let* ((result (elpaca-process-call "emacs" "-Q" "--batch" "--eval" "(require 'lisp-mnt)" "--visit" "org.el" "--eval" "(princ (lm-header \"version\"))")) (exit (car result)) (invoked (numberp exit)) (success (and invoked (= 0 exit))) (failure (not success)) (stdout (nth 1 result)) (stderr (nth 2 result))) (ignore result exit invoked success failure stdout stderr) (if failure (error "Failed to parse ORGVERSION") (replace-regexp-in-string "-dev" "" stdout))) (string-trim (replace-regexp-in-string "release_" "" stdout))) 01.507311
org                            pre-build              (let* ((result (elpaca-process-call "git" "describe" "--match" "release*" "--abbrev=0" "HEAD")) (exit (car result)) (invoked (numberp exit)) (success (and invoked (= 0 exit))) (failure (not success)) (stdout (nth 1 result)) (stderr (nth 2 result))) (ignore result exit invoked success failure stdout stderr) (if failure (let* ((result (elpaca-process-call "emacs" "-Q" "--batch" "--eval" "(require 'lisp-mnt)" "--visit" "org.el" "--eval" "(princ (lm-header \"version\"))")) (exit (car result)) (invoked (numberp exit)) (success (and invoked (= 0 exit))) (failure (not success)) (stdout (nth 1 result)) (stderr (nth 2 result))) (ignore result exit invoked success failure stdout stderr) (if failure (error "Failed to parse ORGVERSION") (replace-regexp-in-string "-dev" "" stdout))) (string-trim (replace-regexp-in-string "release_" "" stdout)))) 01.535995
org                            pre-build              (let* ((default-directory (expand-file-name "lisp/")) (orgversion (let* ((result (elpaca-process-call "git" "describe" "--match" "release*" "--abbrev=0" "HEAD")) (exit (car result)) (invoked (numberp exit)) (success (and invoked (= 0 exit))) (failure (not success)) (stdout (nth 1 result)) (stderr (nth 2 result))) (ignore result exit invoked success failure stdout stderr) (if failure (let* ((result (elpaca-process-call "emacs" "-Q" "--batch" "--eval" "(require 'lisp-mnt)" "--visit" "org.el" "--eval" "(princ (lm-header \"version\"))")) (exit (car result)) (invoked (numberp exit)) (success (and invoked (= 0 exit))) (failure (not success)) (stdout (nth 1 result)) (stderr (nth 2 result))) (ignore result exit invoked success failure stdout stderr) (if failure (error "Failed to parse ORGVERSION") (replace-regexp-in-string "-dev" "" stdout))) (string-trim (replace-regexp-in-string "release_" "" stdout))))) (gitversion (concat orgversion "-g" (string-trim (elpaca-process-output "git" "rev-parse" "--short=6" "HEAD")))) (emacs (concat invocation-directory invocation-name))) (call-process emacs nil "*elpaca-byte-compilation*" nil "-Q" "--batch" "--eval" "(setq vc-handled-backends nil org-startup-folded nil)" "--eval" "(add-to-list 'load-path \".\")" "--eval" "(load \"org-compat.el\")" "--eval" "(load \"../mk/org-fixup.el\")" "--eval" "(org-make-org-loaddefs)" "--eval" (format "(org-make-org-version %S %S)" orgversion gitversion) "--eval" "(cd \"../doc\")" "--eval" "(org-make-manuals)")) 01.564310
org                            pre-build              elpaca-menu-org--build()                                                       01.564318
org                            pre-build              (progn (require 'elpaca-menu-org) (elpaca-menu-org--build))                    01.564323
org                            pre-build              eval((progn (require 'elpaca-menu-org) (elpaca-menu-org--build)) t)            01.564328
org                            pre-build              (if (cl-every #'stringp command) (let* ((result (apply #'elpaca-process-call command)) (exit (car result)) (invoked (numberp exit)) (success (and invoked (= 0 exit))) (failure (not success)) (stdout (nth 1 result)) (stderr (nth 2 result))) (ignore result exit invoked success failure stdout stderr) (if success (message stdout) (message "Build command error: %S" result) (error "Build command failed: %S" stderr))) (eval command t)) 01.593350
org                            pre-build              (let ((command (car tail))) (message "running command: %S" command) (if (cl-every #'stringp command) (let* ((result (apply #'elpaca-process-call command)) (exit (car result)) (invoked (numberp exit)) (success (and invoked (= 0 exit))) (failure (not success)) (stdout (nth 1 result)) (stderr (nth 2 result))) (ignore result exit invoked success failure stdout stderr) (if success (message stdout) (message "Build command error: %S" result) (error "Build command failed: %S" stderr))) (eval command t)) (setq tail (cdr tail))) 01.593360
org                            pre-build              (while tail (let ((command (car tail))) (message "running command: %S" command) (if (cl-every #'stringp command) (let* ((result (apply #'elpaca-process-call command)) (exit (car result)) (invoked (numberp exit)) (success (and invoked (= 0 exit))) (failure (not success)) (stdout (nth 1 result)) (stderr (nth 2 result))) (ignore result exit invoked success failure stdout stderr) (if success (message stdout) (message "Build command error: %S" result) (error "Build command failed: %S" stderr))) (eval command t)) (setq tail (cdr tail)))) 01.622006
org                            pre-build              (let ((tail (if (listp (car-safe commands)) commands (list commands)))) (while tail (let ((command (car tail))) (message "running command: %S" command) (if (cl-every #'stringp command) (let* ((result (apply #'elpaca-process-call command)) (exit (car result)) (invoked (numberp exit)) (success (and invoked (= 0 exit))) (failure (not success)) (stdout (nth 1 result)) (stderr (nth 2 result))) (ignore result exit invoked success failure stdout stderr) (if success (message stdout) (message "Build command error: %S" result) (error "Build command failed: %S" stderr))) (eval command t)) (setq tail (cdr tail))))) 01.622017
org                            pre-build              elpaca--run-build-commands((progn (require 'elpaca-menu-org) (elpaca-menu-org--build))) 01.622022
org                            pre-build              (progn (require 'elpaca) (normal-top-level-add-subdirs-to-load-path) (setq gc-cons-percentage 1.0) (elpaca--run-build-commands '(progn (require 'elpaca-menu-org) (elpaca-menu-org--build)))) 01.648733
org                            pre-build              command-line-1(("-L" "./" "-L" "/Users/jannesauvala/.emacs.d/elpaca/builds/elpaca/" "--eval" "(progn (require 'elpaca) (normal-top-level-add-subdirs-to-load-path) (setq gc-cons-percentage 1.0) (elpaca--run-build-commands '(progn (require 'elpaca-menu-org) (elpaca-menu-org--build))))")) 01.648745
org                            pre-build              command-line()                                                                 01.648750
org                            pre-build              normal-top-level()                                                             01.648754
org                            pre-build            Failed to parse ORGVERSION                                                       01.648760
org                            failed               Adding Remotes                                                                   01.652019

[Bug]: Code example in Queue section is wrong

Emacs Version

GNU Emacs 30.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.36, cairo version 1.17.6) of 2022-12-25

Operating System

Arch

Bug Description

I think the example code in Queue section doesn't work.
My understanding is that (2) and (3) is executed before (1). Shouldn't (2) and (3) be the body of (1)? or maybe my understanding is wrong.

(elpaca-queue
              (elpaca (melpulls :host github :repo "progfolio/melpulls"))   ;; (1)
              (add-to-list 'elpaca-menu-functions #'melpulls)  ;; (2)
              (elpaca-update-menus #'melpulls))  ;; (3)
;; Implicitly queued into a new queue.
(elpaca menu-item-available-in-melpulls)

Relevant log output

No response

Guidance on loading package extensions like vertico-directory

Hi there!

First off: this is amazing. The load time on my Emacs is just insane now. Thank you so much!

I use vertico, which has a number of extensions that come bundled with the package. I would like to get vertico-directory working.

If I were using straight.el, I would just put this:

(elpaca-use-package vertico
  :defer t
  :straight (vertico :files (:defaults "extensions/*")
                     :includes vertico-directory)
  :bind (:map vertico-map
              ("M-DEL" . vertico-directory-delete-word))
  :hook (rfn-eshadow-update-overlay . vertico-directory-tidy)
  :init
  (vertico-mode))

Or even this after (use-package vertico :init (vertico-mode)): (taken from vertico's README)

(use-package vertico-directory
  :after vertico
  :bind (:map vertico-map
              ("M-DEL" . vertico-directory-delete-word))
  :hook (rfn-eshadow-update-overlay . vertico-directory-tidy))

How would I do this with elpaca? (elpaca-use-package vertico-directory) can't find any repository. I'm honestly not sure what magic use-package and straight are doing to get it to work in the previous examples, but work it does.

[Support]: Use bundled version instead of installing package

Emacs Version

GNU Emacs 30.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.36, cairo version 1.17.6) of 2022-12-25

Operating System

Arch

question

consult-dir packages depends on project package. So when installing consult-dir:

(elpaca consult-dir)

elpaca also clone and build project package as well.

Recent Emacs bundles project.el. Is there a way to tell elpaca to not install project package and use the bundled one?
I'm thinking of something like:

(elpaca (project :use-bundled t))

Relevant information

No response

Confirmation

  • I've read the documentation and I still am unsure.

[Bug]: elpaca-use-package macro with quote expands to (use-package quote)

Emacs Version

GNU Emacs 28.2 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.34, cairo version 1.17.6) of 2022-09-12

Operating System

Arch Linux x86_64 on kernel 6.0.10-arch2-1

Bug Description

The current elpaca-use-package macro seems to only work with a list.

(elpaca-use-package 'which-key)
;; expands to
(elpaca 'which-key
  (use-package quote))
(elpaca-use-package (which-key))
;; expands to
(elpaca
    (which-key)
  (use-package which-key))

I don't know if both variants are desired, but under the quick start section of /README.org the quote variant is used.
In the /doc/manual.org document under the "Installing Packages" section the list variant is used.

Relevant log output

No response

elpaca and :defered t

Hi there,

While trying elpaca out, I noticed a lot of my packages were not loading when expected. E.g. magit would get installed, but when I'd hit C-x g with this config I would get an error saying that magit-status was not defined:

(elpaca-use-package magit
  :defer t
  :bind (("C-x g" . 'magit-status)
         ("s-g" . 'magit-status)))

Removing the :defer t makes it work; I did that will all my packages an my Emacs load time is somewhere between 3 and 5 seconds, which is pretty slow. (Though, oddly enough, emacs-init-time doesn't report this lag before Emacs becomes usable; is there a better way to clock whatever is going on during elpaca's init?)

Is there something I'm doing wrong? Or is elpaca not able to handle the :defer keyword and the lazy-loading properly?

[Feature]: move detailed information from README to someplace else

Feature Description

too much information in the readme

IMO although the readme does contain useful information I think that it goes too much in depth sometimes. Not that this shouldn't be documented, but I think that parts of the README are definitely more focused for a developer or for someone wishing to customize/do something more involved or nuanced as opposed to someone just wishing to try a new package manager and install packages.

sections I think should perhaps be moved to a developer readme.

inheritence-precedence
menus
orders
queues

what I think the readme should contain

Here I make the assumption that the README should be intended for users that are either not well versed in elisp or just want to get going and switch to a new package manager. To that end, the most important points are the bootstrapping, installing packages and--since I know people are going to be confused by this--the how to make sure their init is loaded in the proper order. Right now this is mentioned in the FAQ, but I would even put this in the example config.

Maybe the recipe format could go into the developer's readme as well because elpaca provides a lot of recipes out of the box so maybe those details don't need to be there. I think quelpa also doesn't have exact recipe details in its readme.

  • bootstrap snippet
  • recipe format
  • example config
  • example installing packages (maybe can be bundled with example config)

Also I think elpaca-try should be mentioned or maybe aliased to elpaca-install. I get why it's named try over install. But I definitely had trouble identifying this function when I first tried elpaca.

I think this could bring a lot of new users. I know I was a bit intimidated and confused by some of the depth of the readme which I later realized I didn't need to understand at all for basic usage. I think also the readme doesn't do justice to how good of a package manager elpaca actually is. I remember thinking "ah ok, looks like its a bit better than straight" when I first read the readme when it's in actuality leagues ahead of any other known package manager. Maybe a gif of the elpaca-log when installing a package would be nice too.

Confirmation

  • The feature I'm proposing does not already exist in Elpaca

Bootstrapping fails at call to `autoload-rubric`

What's wrong

I'm trying to run the example script provided in the README, and I get the following error:

Debugger entered--Lisp error: (wrong-number-of-arguments autoload-rubric 4)
  (autoload-rubric output nil 'feature 'compile)
  (write-region (autoload-rubric output nil 'feature 'compile) nil output nil 'silent)
  (let* ((default-directory dir) (auto-name (format "%s-autoloads.el" package)) (output (expand-file-name auto-name dir)) (generated-autoload-file output) (autoload-timestamps nil) (backup-inhibited t) (version-control 'never) (find-file-hook nil) (write-file-functions nil) (left-margin 0)) (write-region (autoload-rubric output nil 'feature 'compile) nil output nil 'silent) (cond ((fboundp 'loaddefs-generate) (loaddefs-generate dir auto-name nil nil nil t)) ((fboundp 'make-directory-autoloads) (make-directory-autoloads dir output)) ((fboundp 'update-directory-autoloads) (with-no-warnings (update-directory-autoloads dir)))) (let* ((buf (and t (find-buffer-visiting output)))) (if buf (kill-buffer buf) nil)) auto-name)
  elpaca-generate-autoloads("elpaca" "/Users/ashton/.emacs.d/elpaca/repos/elpaca/")
  (progn (if (= 0 (call-process "git" nil buffer t "clone" elpaca-url elpaca-repo)) nil (error "%s" (list (save-current-buffer (set-buffer buffer) (buffer-string))))) (byte-recompile-directory elpaca-repo 0 'force) (require 'elpaca) (elpaca-generate-autoloads "elpaca" elpaca-repo) (kill-buffer buffer))
  (condition-case err (progn (if (= 0 (call-process "git" nil buffer t "clone" elpaca-url elpaca-repo)) nil (error "%s" (list (save-current-buffer (set-buffer buffer) (buffer-string))))) (byte-recompile-directory elpaca-repo 0 'force) (require 'elpaca) (elpaca-generate-autoloads "elpaca" elpaca-repo) (kill-buffer buffer)) ((debug error) (delete-directory elpaca-directory 'recursive) (save-current-buffer (set-buffer buffer) (goto-char (point-max)) (insert (format "\n%S" err)) (display-buffer buffer))))
  (if buffer (condition-case err (progn (if (= 0 (call-process "git" nil buffer t "clone" elpaca-url elpaca-repo)) nil (error "%s" (list (save-current-buffer (set-buffer buffer) (buffer-string))))) (byte-recompile-directory elpaca-repo 0 'force) (require 'elpaca) (elpaca-generate-autoloads "elpaca" elpaca-repo) (kill-buffer buffer)) ((debug error) (delete-directory elpaca-directory 'recursive) (save-current-buffer (set-buffer buffer) (goto-char (point-max)) (insert (format "\n%S" err)) (display-buffer buffer)))) nil)
  (let* ((elpaca-repo (and t (expand-file-name "repos/elpaca/" elpaca-directory))) (elpaca-build (and elpaca-repo (expand-file-name "builds/elpaca/" elpaca-directory))) (elpaca-target (and elpaca-build (if (file-exists-p elpaca-build) elpaca-build elpaca-repo))) (elpaca-url (and elpaca-target "https://www.github.com/progfolio/elpaca.git")) (s (and elpaca-url (add-to-list 'load-path elpaca-target))) (s (and s (not (file-exists-p elpaca-repo)))) (buffer (and s (get-buffer-create "*elpaca-bootstrap*")))) (if buffer (condition-case err (progn (if (= 0 (call-process "git" nil buffer t "clone" elpaca-url elpaca-repo)) nil (error "%s" (list (save-current-buffer ... ...)))) (byte-recompile-directory elpaca-repo 0 'force) (require 'elpaca) (elpaca-generate-autoloads "elpaca" elpaca-repo) (kill-buffer buffer)) ((debug error) (delete-directory elpaca-directory 'recursive) (save-current-buffer (set-buffer buffer) (goto-char (point-max)) (insert (format "\n%S" err)) (display-buffer buffer)))) nil))
  load-with-code-conversion("/Users/ashton/.emacs.d/init.el" "/Users/ashton/.emacs.d/init.el" t t)
  load("/Users/ashton/.emacs.d/init" noerror nomessage)
  startup--load-user-init-file(#f(compiled-function () #<bytecode 0x1550e63276dba1>) #f(compiled-function () #<bytecode -0x1f3c6feddc0eaeb5>) t)
  command-line()
  normal-top-level()

Directions to reproduce

Copy the example bootstrap config into a clean ~/.emacs.d/init.el. Try opening Emacs.

Looks like a commit 33dcd33 added an extra argument to autoload-rubric.

Version information

  • Emacs version: 29.0.50
  • Operating system: macOS

[Support]: Guidance on updating all packages

Emacs Version

GNU Emacs 30.0.50 (build1, aarch64-apple-darwin21 ...) 2022-12-01

(Yes, running bleeding edge. Why not?)

Operating System

macOS

question

What is the "blessed way" to update all packages? I've been going into elpaca-manager, holding down u to mark all packages for update, hitting x, then waiting a while. Then I'll mark all packages with r and wait a little longer until they rebuild. Is there a better way?

Relevant information

No response

Confirmation

  • I've read the documentation and I still am unsure.

Customizing "builds" directory

I like to run different versions of emacs e.g. a stable 28.1 and a development branch on 29

As compiled .elc files are not necessarily compatible over versions you need different build directories for each version.
I can control the original bootstrap but elpaca-build-dir hard codes this.

straight.el has the variable straight-build-dir to control this.

basic example, using leaf with elpaca, to install and configure vertico

I am only just starting out with elpaca, so bear with me. - I am trying to get a very basic configuration running:
but I use leaf (https://github.com/conao3/leaf.el), and leaf-keywords (https://github.com/conao3/leaf-keywords.el),
instead of use-package (and I would think that this should work just as well [?]). After all, leaf is modeled after use-package.

Elpaca works for me, in the sense that I can see it downloading packages: leaf, leaf-keywords, and vertico -
which I want to configure then with leaf. This is my basic setup:

;;; init-elpaca.el --- ELPACA INIT DEMO   -*- lexical-binding: t; -*-
;; Bootstrap Elpaca
(declare-function elpaca-generate-autoloads "elpaca")
(defvar elpaca-directory (expand-file-name "elpaca/" user-emacs-directory))
(when-let ((elpaca-repo (expand-file-name "repos/elpaca/" elpaca-directory))
           (elpaca-build (expand-file-name "builds/elpaca/" elpaca-directory))
           (elpaca-target (if (file-exists-p elpaca-build) elpaca-build elpaca-repo))
           (elpaca-url  "https://www.github.com/progfolio/elpaca.git")
           ((add-to-list 'load-path elpaca-target))
           ((not (file-exists-p elpaca-repo)))
           (buffer (get-buffer-create "*elpaca-bootstrap*")))
  (condition-case-unless-debug err
      (progn
        (unless (zerop (call-process "git" nil buffer t "clone" elpaca-url elpaca-repo))
          (error "%s" (list (with-current-buffer buffer (buffer-string)))))
        (byte-recompile-directory elpaca-repo 0 'force)
        (require 'elpaca)
        (elpaca-generate-autoloads "elpaca" elpaca-repo)
        (kill-buffer buffer))
    ((error)
     (delete-directory elpaca-directory 'recursive)
     (with-current-buffer buffer
       (goto-char (point-max))
       (insert (format "\n%S" err))
       (display-buffer buffer)))))
(require 'elpaca-autoloads)
(add-hook 'after-init-hook #'elpaca-process-queues)
(elpaca (elpaca :host github :repo "progfolio/elpaca"))

  
(elpaca leaf (require 'leaf))
(elpaca leaf-keywords (require 'leaf-keywords))

(elpaca vertico (require 'vertico))

  
(leaf vertico
  :init
  (vertico-mode)
  )

If I comment out this last bit for a second in the stanza above:

;; (leaf vertico
;;  :init
;; (vertico-mode)
;; )

then I can see elpaca fetching recipes from Melpa, GNU ELPA, NonGNU ELPA, and installing
leaf, leaf-keywords, vertico, and their dependencies (the Elpaca Log "Package Status Info" is green, after that).

And I would think, that I could use leaf then as above:

(leaf vertico
  :init
   (vertico-mode)
  )

But apperently not:

Warning (initialization): An error occurred while loading ‘/home/rx/.emacs.d/init.el’:

Symbol's function definition is void: leaf

To ensure normal operation, you should investigate and remove the
cause of the error in your initialization file.  Start Emacs with
the ‘--debug-init’ option to view a complete error backtrace.

What I am doing wrong?

The situation is not much better for me, if I use use-package instead

(elpaca use-package (require 'use-package))
(elpaca vertico (require 'vertico))

(use-package
  :init
  (vertico-mode)
  )

So I guess, my configuration (weak understanding) is cauing this issue, rather than a use-package vs leaf thing.
Thanks,
-A

[Feature]: Roll back to previous packages version

Feature Description

As far as I know, Straight.el has command straight-freeze-version. Is similar feature planned for Elpaca? Ideally, I would love to have ability to roll back packages versions to ones before last upgrade

Confirmation

  • The feature I'm proposing does not already exist in Elpaca

[Feature]: Add a menu for built-in packages?

Feature Description

Add a menu for built-in packages? So other packages can depend on them(see error below),
and be listed when using elpaca-manager.

Built-in packages are indexed here C-h v package--builtins.


Recently, I elpaca-try password-store, and got the error below.

password-store                 failed               Failed dependencies: ("auth-source-pass")                                        19.267592
auth-source-pass               failed               elpaca--clone: (wrong-type-argument stringp nil)                              19.269149

I resolved it by (add-to-list 'elpaca-ignored-dependencies 'auth-source-pass)

Confirmation

  • The feature I'm proposing does not already exist in Elpaca

[Bug]: initial-buffer-choice is not reset after startup

Emacs Version

GNU Emacs 30.0.50 (build 1, x86_64-pc-linux-gnu, X toolkit, cairo version 1.16.0, Xaw3d scroll bars)

Operating System

Linux

Bug Description

When processing queues, elpaca will set initial-buffer-choice to a function for displaying the log buffer. The value is never reset, so frames created using e.g. emacsclient -c will always show the elpaca status buffer.

Relevant log output

No response

[Bug]: "fatal: dumb http transport does not support shallow capabilities"

Emacs Version

GNU Emacs 29.0.50 (build 3, x86_64-pc-linux-gnu, GTK+ Version 3.24.33, cairo version 1.16.0) of 2022-11-23

Operating System

Ubuntu 22.04 LTS x86_64
git version 2.34.1

Bug Description

Basic reproducible init file:

;; from README
(defvar elpaca-directory (expand-file-name "elpaca/" user-emacs-directory))
(defvar elpaca-builds-directory (expand-file-name "builds/" elpaca-directory))
(defvar elpaca-order '(elpaca :repo "https://github.com/progfolio/elpaca.git"
                              :ref nil
                              :build (:not elpaca--activate-package)))
(when-let ((repo  (expand-file-name "repos/elpaca/" elpaca-directory))
           (build (expand-file-name "elpaca/" elpaca-builds-directory))
           (order (cdr elpaca-order))
           ((add-to-list 'load-path (if (file-exists-p build) build repo)))
           ((not (file-exists-p repo)))
           (buffer (get-buffer-create "*elpaca-bootstrap*")))
  (condition-case-unless-debug err
      (if-let (((pop-to-buffer buffer '((display-buffer-reuse-window
                                         display-buffer-same-window))))
               ((zerop (call-process "git" nil buffer t "clone"
                                     (plist-get order :repo) repo)))
               (default-directory repo)
               ((zerop (call-process "git" nil buffer t "checkout"
                                     (or (plist-get order :ref) "--")))))
          (progn
            (byte-recompile-directory repo 0 'force)
            (require 'elpaca)
            (and (fboundp 'elpaca-generate-autoloads)
                 (elpaca-generate-autoloads "elpaca" repo))
            (kill-buffer buffer))
        (error "%s" (with-current-buffer buffer (buffer-string))))
    ((error)
     (warn "%s" err)
     (delete-directory repo 'recursive))))
(require 'elpaca-autoloads)
(add-hook 'after-init-hook #'elpaca-process-queues)
(elpaca `(,@elpaca-order))
;; reproduce error
(elpaca paredit)
(elpaca-rebuild 'paredit)

Expected behavior:
Emacs starts up normally

Actual behavior:
Elpaca log comes up and gives the below error about paredit.

This looks to be the same thing as radian-software/straight.el#777.

Relevant log output

paredit                        failed               fatal: dumb http transport does not support shallow capabilities

Some recipes missing

What's wrong

First off, thanks for this package! I've been migrating my setup to elpaca and not sure if I'm doing anything wrong, but I can't install some packages: ol-notmuch and consult-notmuch in particular. They do have MELPA recipes and I can see the files under elpaca-directory/cache/melpa/recipes, but I can't find them when I either try to install them or search in elpaca-manager. It seems that recipes that have a source other than github (e.g., sourcehut) are the problematic ones. Tried stepping through with edebug but didn't have any luck.

Directions to reproduce

  • Start emacs with emacs -Q
  • Evaluate the elpaca bootstrap snippet
  • Either try to install consult-notmuch or search for it in elpaca-manager

Version information

  • Emacs version: GNU Emacs 29.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.34, cairo version 1.16.0)
  • Operating system: Linux (NixOS)

Suggestion: use fboundp instead of checking the version for loaddefs

What's wrong

I'm getting the following error on init:

Debugger entered--Lisp error: (file-missing "Cannot open load file" "No such file or directory" "loaddefs-gen")
  require(loaddefs-gen)
  (and (require 'loaddefs-gen) nil)
  (or (and (version< emacs-version "29") (require 'autoload)) (and (require 'loaddefs-gen) nil))
  (let* ((autoloadp (or (and (version< emacs-version "29") (require 'autoload)) (and (require 'loaddefs-gen) nil))) (default-directory dir) (name (format "%s-autoloads.el" package)) (output (expand-file-name name dir)) (generated-autoload-file output) (autoload-timestamps nil) (backup-inhibited t) (version-control 'never) (find-file-hook nil) (write-file-functions nil) (left-margin 0)) (if autoloadp (progn (write-region (autoload-rubric output nil 'feature) nil output nil 'silent))) (cond ((fboundp 'loaddefs-generate) (loaddefs-generate (let* ((seen nil) (--cl-var-- (elpaca--directory-files-recursively dir "\\.el$")) (file nil) (d nil) (--cl-var-- nil) (--cl-var-- t)) (while (consp --cl-var--) (setq file (car --cl-var--)) (setq d (file-name-directory file)) (if (member d seen) (progn) (setq --cl-var-- ...)) (setq seen (cons d seen)) (setq --cl-var-- (cdr --cl-var--)) (setq --cl-var-- nil)) (nreverse --cl-var--)) name nil nil nil t)) ((fboundp 'make-directory-autoloads) (make-directory-autoloads dir output)) ((fboundp 'update-directory-autoloads) (with-no-warnings (update-directory-autoloads dir)))) (let* ((buf (and t (find-buffer-visiting output)))) (if buf (kill-buffer buf) nil)) name)
  elpaca-generate-autoloads("elpaca" "/Users/ashton/.emacs.d/elpaca/repos/elpaca/")
  (progn (if (= 0 (call-process "git" nil buffer t "clone" elpaca-url elpaca-repo)) nil (error "%s" (list (save-current-buffer (set-buffer buffer) (buffer-string))))) (byte-recompile-directory elpaca-repo 0 'force) (require 'elpaca) (elpaca-generate-autoloads "elpaca" elpaca-repo) (kill-buffer buffer))
  (condition-case err (progn (if (= 0 (call-process "git" nil buffer t "clone" elpaca-url elpaca-repo)) nil (error "%s" (list (save-current-buffer (set-buffer buffer) (buffer-string))))) (byte-recompile-directory elpaca-repo 0 'force) (require 'elpaca) (elpaca-generate-autoloads "elpaca" elpaca-repo) (kill-buffer buffer)) ((debug error) (delete-directory elpaca-directory 'recursive) (save-current-buffer (set-buffer buffer) (goto-char (point-max)) (insert (format "\n%S" err)) (display-buffer buffer))))
  (if buffer (condition-case err (progn (if (= 0 (call-process "git" nil buffer t "clone" elpaca-url elpaca-repo)) nil (error "%s" (list (save-current-buffer (set-buffer buffer) (buffer-string))))) (byte-recompile-directory elpaca-repo 0 'force) (require 'elpaca) (elpaca-generate-autoloads "elpaca" elpaca-repo) (kill-buffer buffer)) ((debug error) (delete-directory elpaca-directory 'recursive) (save-current-buffer (set-buffer buffer) (goto-char (point-max)) (insert (format "\n%S" err)) (display-buffer buffer)))) nil)
  (let* ((elpaca-repo (and t (expand-file-name "repos/elpaca/" elpaca-directory))) (elpaca-build (and elpaca-repo (expand-file-name "builds/elpaca/" elpaca-directory))) (elpaca-target (and elpaca-build (if (file-exists-p elpaca-build) elpaca-build elpaca-repo))) (elpaca-url (and elpaca-target "https://www.github.com/progfolio/elpaca.git")) (s (and elpaca-url (add-to-list 'load-path elpaca-target))) (s (and s (not (file-exists-p elpaca-repo)))) (buffer (and s (get-buffer-create "*elpaca-bootstrap*")))) (if buffer (condition-case err (progn (if (= 0 (call-process "git" nil buffer t "clone" elpaca-url elpaca-repo)) nil (error "%s" (list (save-current-buffer ... ...)))) (byte-recompile-directory elpaca-repo 0 'force) (require 'elpaca) (elpaca-generate-autoloads "elpaca" elpaca-repo) (kill-buffer buffer)) ((debug error) (delete-directory elpaca-directory 'recursive) (save-current-buffer (set-buffer buffer) (goto-char (point-max)) (insert (format "\n%S" err)) (display-buffer buffer)))) nil))
  load-with-code-conversion("/Users/ashton/.emacs.d/init.el" "/Users/ashton/.emacs.d/init.el" t t)
  load("/Users/ashton/.emacs.d/init" noerror nomessage)
  startup--load-user-init-file(#f(compiled-function () #<bytecode 0x1550e63276dba1>) #f(compiled-function () #<bytecode -0x1f3c6feddc0eaeb5>) t)
  command-line()
  normal-top-level()

After a little digging it seems this loaddefs-gen is pretty new. I'm down to rebuild my Emacs, but it's a little friction. Would checking if the necessary functions are defined work just as well as checking the version of Emacs? Though if this is behavior that's expected to be locked-in with the first release of Emacs 29, then I can see the case for leaving this as-is.

Version information

  • Emacs version: 29.0.50
  • Operating system: macOS

Installing packages failed with error stating "elpaca--repo-uri: wrong type argument: stringp, nil" even when using default recipes.

good morning sir,

recently, trying to find a better package management alternative to straight.el, I stumbled across your reddit post about this package manager. so I redited my config for elpaca but I don't know why I am recieving the following error in messages buffer:

elpaca--repo-uri: wrong type argument: stringp, nil

I have not changed or added the default elpaca recipes.

By the way, I am using arch linux with emacs-nativecomp package installed using pacman and if i am missing any essential information to provide please guide me for it though :) .

Also here is my emacs config (init.el) to reproduce the problem:

https://termbin.com/x8wr

What's wrong

Getting error stating elpaca--repo-uri: wrong type argument: stringp, nil even using default recipes.

Directions to reproduce

Here is my emacs config (init.el) to reproduce the problem:

https://termbin.com/x8wr

Version information

  • Emacs package info

Name : emacs-nativecomp
Installed from: Installed using pacman.

  • Emacs version:

GNU Emacs 28.1

  • Operating system:

Arch linux

[Support]: Installing local package

Emacs Version

GNU Emacs 29.0.50 (build 1, x86_64-pc-linux-gnu, X toolkit, cairo version 1.16.0, Xaw3d scroll bars)

Operating System

Linux

question

With straight i can install a local package in my user-emacsdirectory using the :local-repo keyword and straight will compile and do autoloads for me. Is it possible to do this with elpaca?

Relevant information

No response

Confirmation

  • I've read the documentation and I still am unsure.

[Support]: use-package's `:ensure nil` equivalent?

Emacs Version

28.something

Operating System

macOS

question

My old use-package config had customizations for several built-in Emacs modes, like org. But, org mode doesn't need to actually be downloaded/installed, so use-package has the :ensure nil option to avoid trying to install the package while still getting the convenient, consistent, configuration syntax with :config, :bind, etc.

Is there a way to do that with elpaca-use-package? Or should I just stick to using use-package directly for those modes? It doesn't matter for any technical reason, but it would be nice if all of my package configs used the same top form instead of some starting with (elpaca-use-package ...) and some starting with (use-package ...).

Relevant information

No response

Confirmation

  • I've read the documentation and I still am unsure.

emphasize that package-dependent code needs to happen after `elpaca-after-init-hook`

When using elpaca, probably the most important thing to keep in mind that I encountered is that packages are only guaranteed to be installed and initialized after elpaca-after-init-hook. This means that unless the user wants to install all the packages preemptively with a script and then start their real emacs config (which is my preference), they have to run any external package dependent code after the elpaca-after-init-hook. elpaca provides integration with use-package for this, but still this means--at least from my understanding--that the user would likely have to wrap many "free" forms in elpaca-use-package blocks.

(use-package foo :demand t)
;; can assume that foo is installed and initialized
(foo-message "hi")
(elpaca-use-package :demand t)
;; cannot assume foo is installed, must wrap this in `elpaca-use-package` as well (or add it to `elpaca-after-init-hook`).
(foo-message "hi")

I think this point should be emphasized more in the readme. It is kind of mentioned in the FAQs, but I don't think it is stated directly enough. Also I think it's important enough to be mentioned in the first section with the bootstrapping code. I imagine most users would think they just add the bootstrapping code to their config, tell use-package to use elpaca and they're all set.

Furthermore, I argue that the user should be able to "circumvent" this if they provide all their recipes via a lockfile. Something like elpaca-bootstrap-from-lockfile which would take a path to the lockfile.

;; bootstrap-code
(...)
(elpaca-bootstrap-from-lockfile "~/.emacs.d/lockfile") ; processing done immediately since we already have all package recipes

;; can assume everything is setup and don't have to wait until after the `elpaca-after-init-hook`.
(require 'foo)
(foo-message "hi")

Problem installing deps of kind-icon

What's wrong

I want to install the kind-icon package:

(elpaca-use-package kind-icon)

But I get this error when I try to install it:

error in process sentinel: Wrong type argument: listp, svg-lib

I looked in the source for kind-icon and it looks like the dependencies might be formatted in an unexpected way:

;; Package-Requires: ((emacs "27.1") svg-lib)

I haven't been able to find the spec for the package-requires declaration and whether or not versionless deps are allowed. As it stands, elpaca chokes on this. I'd like to know if this is something elpaca needs to fix, or if it's something that kind-icon should fix.

Directions to reproduce

Try installing kind-icon

Version information

  • Emacs version: 29
  • Operating system: macOS

[Bug]: auto-save directory created when installing packages

Emacs Version

GNU Emacs 27.2 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.24, cairo version 1.16.0)

Operating System

Guix System 371aa5777a3805a3886f3feea5f1960fe3fe4219 x86_64

Bug Description

auto-save-list directory created when bootstrapping elpaca.

My recommendation is to add (setq auto-save-list-file-prefix nil) to the bootstrap code or maybe to the build steps of packages. For me the former prevented it from being created. I don't think it's appropriate for this directory to be created as a result of installing packages.

Relevant log output

No response

[Support] Installing packages failed with error stating "elpaca--repo-uri: wrong type argument: stringp, nil" even when using default recipes.

good morning sir,

recently, trying to find a better package management alternative to straight.el, I stumbled across your reddit post about this package manager. so I redited my config for elpaca but I don't know why I am recieving the following error in messages buffer:

elpaca--repo-uri: wrong type argument: stringp, nil

I have not changed or added the default elpaca recipes.

By the way, I am using arch linux with emacs-nativecomp package installed using pacman and if i am missing any essential information to provide please guide for it though :) .

Also here is my emacs config (init.el) to reproduce the problem:

https://termbin.com/x8wr

Fails to install any package.

Emacs Version

GNU Emacs 28.2 build 2
x86_64-unknown-linux-gnu
GTK+ Version 3.24.34
cairo version 1.16.0

build-options: cairo gif gmp gnutls harfbuzz jpeg json m17n nativecomp png sound svg tiff xml xpm ~dbus ~imagemagick

Operating System

Void Linux 6.0.10_1
x86_64 GNU/Linux

Bug Description

I tried installing several different packages but ran into this same issue.


Did a fresh start with just two files init.el and early-init.el with the following contents:

;; init.el
<elpaca bootstrapping snippet>
(elpaca nano-theme)
(load-theme 'nano-dark t)

;; early-init.el
(setq package-enable-at-startup nil)

Once fetching package sources completes I get the error mentioned in the log output.

elpaca-log shows the following:

Package Status Info Time ▼ 
elpaca                         queued               Package queued                                                                   27.220514
nano-theme                     queued               Package queued                                                                   27.220894

Then if I do elpaca-rebuild nano-theme I get:

Package Status Info Time ▼ 
nano-theme                     cloning              Resolving deltas: 100% (2/2), done.                                              927.461470
nano-theme                     cloning              Adding Remotes                                                                   927.484334
nano-theme                     cloning              Remotes fetched                                                                  928.355380
nano-theme                     ref-checked-out      remote's HEAD checked out                                                        928.355432
nano-theme                     cloning-deps         Cloning Dependencies                                                             928.355449
nano-theme                     cloning-deps         No external dependencies detected                                                928.355679
nano-theme                     linking              Linking build files                                                              928.355704
nano-theme                     linking              Build files linked                                                               928.357357
nano-theme                     autoloads            Generating autoloads: /home/snakebite/.config/emacs/elpaca/builds/nano-theme     928.357678
nano-theme                     autoloads              INFO     Scraping files for nano-theme-autoloads.el...                         928.650038
nano-theme                     autoloads              INFO     Scraping files for nano-theme-autoloads.el...done                     928.658779
nano-theme                     autoloads            Autoloads Generated                                                              928.713499
nano-theme                     byte-compilation     Byte compiling                                                                   928.713537
nano-theme                     byte-compilation     Checking /home/user/.config/emacs/elpaca/builds/nano-theme...               928.846052
nano-theme                     byte-compilation     Compiling /home/user/.config/emacs/elpaca/builds/nano-theme/nano-dark-theme.el... 928.871431
nano-theme                     byte-compilation     Compiling /home/user/.config/emacs/elpaca/builds/nano-theme/nano-light-theme.el... 928.936611
nano-theme                     byte-compilation     Compiling /home/user/.config/emacs/elpaca/builds/nano-theme/nano-theme-autoloads.el... 928.936638
nano-theme                     byte-compilation     Compiling /home/user/.config/emacs/elpaca/builds/nano-theme/nano-theme-support.el... 928.936657
nano-theme                     byte-compilation     In nano-mode:                                                                    928.936672
nano-theme                     byte-compilation     nano-theme-support.el:9:379 Warning: assignment to free variable                 928.936688
nano-theme                     byte-compilation         ‘default-major-mode’                                                         928.936702
nano-theme                     byte-compilation     nano-theme-support.el:9:388 Warning: assignment to free variable                 928.936717
nano-theme                     byte-compilation         ‘auto-fill-mode’                                                             928.936730
nano-theme                     byte-compilation     In nano-new-frame:                                                               928.936745
nano-theme                     byte-compilation     nano-theme-support.el:10:464 Warning: Unused lexical variable                    928.936759
nano-theme                     byte-compilation         `background-mode'                                                            928.936779
nano-theme                     byte-compilation     nano-theme-support.el:26:464 Warning: Unused lexical variable                    928.936795
nano-theme                     byte-compilation         `selected-frame'                                                             928.936811
nano-theme                     byte-compilation     nano-theme-support.el:26:465 Warning: Unused lexical variable                    928.936826
nano-theme                     byte-compilation         `nano-theme-frame-only'                                                      928.936841
nano-theme                     byte-compilation     Compiling /home/user/.config/emacs/elpaca/builds/nano-theme/nano-theme.el... 928.936855
nano-theme                     byte-compilation     Done (Total of 4 files compiled, 1 skipped)                                      928.946514
nano-theme                     byte-compilation     Byte compilation complete                                                        928.946582
nano-theme                     info                 Compiling Info files                                                             928.946604
nano-theme                     info                 makeinfo executable not found                                                    928.946614
nano-theme                     activation           Activating package                                                               928.946639
nano-theme                     activation           Package build dir added to load-path                                             928.946669
nano-theme                     activated            Package activated                                                                928.947355
nano-theme                     finished             ✓ 4.031 secs                                                                     928.947399

Now with M-x customize-themes I'm able to activate the theme,
but when I restart emacs I again come across the same error mentioned in log output.
Although ".config/emacs/elpaca/builds/nano-theme/" has all related theme files.

elpaca-log again shows the same queued status:

Package Status Info Time ▼ 
elpaca                         queued               Package queued                                                                   27.220514
nano-theme                     queued               Package queued                                                                   27.220894

I tried (elpaca-use-package nano-theme) but got same results.
I also got this same issue when I tried it in termux on android phone.

Relevant log output

Debugger entered--Lisp error: (error "Unable to find theme file for ‘nano-dark’")
  error("Unable to find theme file for `%s'" nano-dark)
  load-theme(nano-dark t)
  load-with-code-conversion("/home/user/.config/emacs/init.el" "/home/user/.config/emacs/init.el" t t)
  load("/home/user/.config/emacs/init" noerror nomessage)
  startup--load-user-init-file(#f(compiled-function () #<bytecode 0x1aa15021294705b2>) #f(compiled-function () #<bytecode 0x4d12c0e0e454f0b>) t)
  command-line()
  normal-top-level()

Edit: added build options

Emacs 28 vs Emacs 29 Elpaca log differences on macOS

What's wrong

Elpaca log has borders around the header and clears each line as it completes.
GNU emacs 29 Keeps all the entries visible in a list and does not box the headers.

Directions to reproduce

Version information

  • Emacs version: emacs 28.1
  • Operating system: macOS

Originally reported by: @bestlem

[Support]: How to work with multiple remotes (forks, in particular)?

Emacs Version

GNU Emacs 30.0.50
Development version 26b93ce7cc1d on kt_fix_sieve-manage_multibyte_handling branch; build date 2022-12-31.

Operating System

Debian bookworm

question

I'm currently using straight.el and just started to play around with elpaca. I really like it, thanks for working on this!

However, somehow I cannot convert the following:

(use-package zenburn-theme
  :straight (:fork (:protocol ssh)) ;; :repo "ktetzlaff/zenburn-emacs"
  :init
  (load-theme 'zenburn t nil)

to an equivalent elpaca recipe.

With straight, the form above creates a clone with remotes origin (from the original recipe) and fork (my fork). straight then uses fork/master to install the package. However, elpaca ends up using origin/master (which is bbatsov/zenburn-emacs not ktetzlaff/zenburn-emacs) for the package installation.

I first tried the following:

(elpaca-use-package (zenburn-theme
                     :remotes (("fork"
                                :host github  ;; why is it necessary to specify the :host?
                                :protocol ssh ;; the :protocol keyword is missing in the documentation
                                :repo "ktetzlaff/zenburn-emacs")
                               "origin"))
  :init
  (load-theme 'zenburn t nil))

then:

(elpaca-use-package (zenburn-theme
                     :remotes (("fork"
                                :host github
                                :repo "ktetzlaff/zenburn-emacs"
                                :protocol ssh)
                               ("origin"
                                :host github ;; why is it necessary to repeat :host?
                                :repo "bbatsov/zenburn-emacs"
                                :protocol https)))
  (load-theme 'zenburn t nil))

But in both cases, the branch which gets used during the build/install phase, is origin/master (aka bbatsov/zenburn-emacs) not my fork.

I even tried:

(elpaca-use-package (zenburn-theme
                     :remotes ("fork"
                               ("fork"
                                :host github
                                :repo "ktetzlaff/zenburn-emacs"
                                :protocol ssh)))
  :init
  (load-theme 'zenburn t nil))

Which, at first glance, looked to do the right thing:

git -C zenburn-emacs status
# On branch master
# Your branch is up to date with 'fork/master'.

So, there is now a branch fork/master, but now forks' URLs points to bbatsov/zenburn-emacs and not ktetzlaff/zenburn-emacs:

git -C zenburn-emacs remote -v
fork    https://github.com/bbatsov/zenburn-emacs.git (fetch)
fork    https://github.com/bbatsov/zenburn-emacs.git (push)

After that, some remarks regarding the elpaca :remotes documentation:

The first element is the default remote when installing the package. If it is a string, it names the default remote. The remaining elements are lists of the form: (NAME . PROPS)

From this, it is not clear to me, how to select the default remote. The first sentence seems to indicate that the order of remotes decides which remote should be the default. However, the second sentence then seems to state that the first element is only used as default if it is a string?

Anyway, since I always end up with origin/master: What needs to be done to get fork/master?

The documentation then goes on:

NAME is a string used to name the remote. PROPS are recipe keyword/value pairs used to override values previously declared in the recipe.

Here, the ... used to override values previously declared in the recipe ... part doesn't seem to be working. E.g. even in the 2nd example, leaving out the :host in the origin remote results in an error (due to :host nil).

Relevant information

elpaca commit SHA: 008949ef8edf804e4833d5

Confirmation

  • I've read the documentation and I still am unsure.

[Feature]: Improve logging. E.g. (add option to) increase log verbosity/log external comands.

Feature Description

While trying to figure out what was going on in recipes with multiple remotes (s. #50), I found the available logs lacking. E.g. with the following recipe:

(elpaca-use-package (zenburn-theme
                     :remotes (("fork"
                                :host github
                                :repo "ktetzlaff/zenburn-emacs"
                                :protocol ssh)
                               ("origin"
                                :host github
                                :repo "bbatsov/zenburn-emacs"
                                :protocol https))))

the log contains:

...
zenburn-theme                  cloning              Adding Remotes                                                                   03.920017
zenburn-theme                  cloning              Fetching origin                                                                  04.024162
zenburn-theme                  cloning               * [new branch]      master     -> fork/master                                   08.925965
zenburn-theme                  cloning              Remotes fetched                                                                  08.926009
zenburn-theme                  ref-checked-out      remote's HEAD checked out                                                        08.926020
...

Which is missing a lot of relevant information and contains some inconsistencies. Like:

  • Adding Remotes: Which remotes got added/fetched?
  • Fetching origin: How? From where?
  • After Fetching origin, the next message is about a new branch fork/master. Why? Where did fork get fetched?
  • remote's HEAD checked out: HEAD of which remote?

As a quick overview, the current logging is fine. But also quite useless when it really matters. ;-)

As a suggestion: It would help a lot if the external (git, build, install, ...) commands which are executed would be logged. Maybe after enabling verbose logging via a customizable variable.


Further down, it gets much more detailed:

zenburn-theme                  byte-compilation     Byte compiling                                                                   09.122967
zenburn-theme                  byte-compilation     Checking /home/kai/.emacs.d/minimal/elpaca/builds/zenburn-theme...               09.249076
zenburn-theme                  byte-compilation     Compiling /home/kai/.emacs.d/minimal/elpaca/builds/zenburn-theme/zenburn-theme-autoloads.el... 09.261003
zenburn-theme                  byte-compilation     Compiling /home/kai/.emacs.d/minimal/elpaca/builds/zenburn-theme/zenburn-theme.el... 09.261011
zenburn-theme                  byte-compilation     Done (Total of 0 files compiled, 2 skipped)                                      09.261019
zenburn-theme                  byte-compilation     Byte compilation complete                                                        09.261058

However, now some of the messages are too long to fit into the elpaca-ui table and get cut off. The log seems to claim that two files got byte compiled (Compiling ...). But, in the next line the log continues with: Done (Total of 0 files compiled, 2 skipped). So actually nothing got compiled? Why? Maybe having the complete messages would clarify this (or maybe not, s. [1]).

Is there a way to see the complete log lines?

[1] The zenburn theme sources are a bit peculiar. Byte-compiling the .el files actually does not produce any output. I.e. there are no .elc files.

Confirmation

  • The feature I'm proposing does not already exist in Elpaca

[Bug]: Cannot clone org

Emacs Version

GNU Emacs 28.2 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.34, cairo version 1.17.6) of 2022-09-12

Operating System

Arch Linux

Bug Description

Org fails to clone after change in ded0a70

The org recipe is a full url to git repository on savannah. The change to expand-file-name if host is not set breaks this by prefixing the url with the current directory.

Reverting to d7d887a allows the clone to work again.

This likely also affects org-contrib since the recipe is a full url for the repo rather than host + repo.

Relevant log output

No response

[Support]: avoiding `head does not point to a branch`

Emacs Version

GNU Emacs 27.2 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.24, cairo version 1.16.0)

Operating System

OS: Guix System 371aa5777a3805a3886f3feea5f1960fe3fe4219 x86_64

question

How to avoid head does not point to a branch error when updating a package? I tried to update one of my packages tempel and the updating failed due to the before mentioned git error. When I visited the directory of the package I saw that it was not checkout out to a branch. And looking at my recipes I saw that there was no default branch. This is true even for packages I installed with elpaca after I started using it.

Should there be a default branch?

If not, I figure I should programmatically add one for all of the recipes I have.

Relevant information

tempel                         update-log           fatal: HEAD does not point to a branch                                           53463.776085


### Confirmation

- [X] I've read the documentation and I still am unsure.

bootstrapping fails if emacs isn't built with json support

What's wrong

I was using a build of emacs without json support.

The bootstrapping process failed with:

In end of data:
elpaca-menu-melpa.el:38:6: Warning: the function ‘json-parse-string’ is not known to be defined.
Compilation finished.

In my case, the solution was to say apt install libjansson-dev; rebuild emacs, including --with-json in configure's arguments, etc. This isn't exactly a fully generalizable solution 😄.

I think the instructions in README.org need to be clear that this requires a build of emacs with json support.

Directions to reproduce

Try to bootstrap elpaca per instructions in README.org using emacs built without --with-json.

Version information

  • Emacs version: 28.1, built without json support
  • Operating system: Ubuntu 20.04

installing packages from a list of recipes

background

I am in the process of migrating from straight.el. The way I used straight is unconventional. I used an elisp script to register a list of recipes with straight-register-package. I am trying to replicate this process with elpaca.

I have an org file with elpaca acceptable recipes for the packages I adapted from my straight recipes. Each heading in the file has a source block with a package recipe. I display the first one as an example below.

* evil-goggles
:PROPERTIES:
:LABELS:   [[id:e80a07f6-a377-4f86-b892-d221897e8980][recipe]]
:ID:       20cd3665-1f17-4a1a-b30f-ef428e192862
:END:
#+begin_src emacs-lisp
'(evil-goggles :host github :repo "edkolev/evil-goggles" :branch nil :depth 1 :ref "08a22058fd6a167f9f1b684c649008caef571459")
#+end_src

what I envision achieving

So in essense what I want is for a package manager to simply install a list of packages into a directory that I specify. And to provide me with directories I can append to the load-path, custom-theme-directory and Info-directory-files. I don't want my init file to install any packages, I just want it to assume these directories exist and append to these variables accordingly.

my thought process

I thought about just going down the list and calling elpaca on each recipe one by one, but some packages are dependencies of others. And installing a dependency might pull in other packages before I've had a chance to specify their recipe. For example, evil-goggles is (by chance) the first item in my list of recipes. But calling elpaca on it might install evil.

I recall straight had straight-register-package for this reason which would register package recipes before installing them.

what I tried

I tried using elpaca-recipe-functions for this. (I also tried adding to elpaca-order-functions, not sure which one to use). The idea being that I wanted merge plist values to the built-in recipes so that my preferences for :ref and :repo and :depth were respected.

;; create
;; An alist of elpaca recipes.
(defun oo-elpaca-custom-recipes ()
  "Return recipes in recipes.org as an alist."
  (with-temp-buffer
    (insert-file-contents "~/dotfiles/recipes.org")
    (goto-char (point-min))
    (let (orders)
      (while (re-search-forward (rx "#+begin_src emacs-lisp\n" (group-n 1 (1+ not-newline)) "\n#+end_src") nil t)
	(push (cadr (car (read-from-string (match-string 1)))) orders))
      orders)))

(defvar oo-elpaca-custom-recipes (oo-elpaca-custom-recipes)
  "Custom recipes derived from recipe files.")

(defun oo-elpaca-custom-recipes-fn (recipe)
  (alist-get (car recipe) oo-elpaca-custom-orders))

(add-hook 'elpaca-recipe-functions #'oo-elpaca-custom-recipes-fn)

;; I think this should work instead of the ugliness I did below.
;; (mapc #'elpaca-try (mapcar #'car oo-elpaca-custom-recipes))

(let* ((packages (mapcar #'car oo-elpaca-custom-recipes))
       (elpaca-forms (mapcar (lambda (package) `(elpaca ,package (message "Installed %s..." ',package))) packages)))
  (funcall `(lambda () ,@elpaca-forms)))

This didn't work.

second attempt

I try relying on elpaca merging the recipe I provide with its internal one to do what I mean.

(defun oo-elpaca-custom-orders ()
  "Try to see if I have a recipe registered."
  (with-temp-buffer
    (insert-file-contents "~/dotfiles/recipes.org")
    (goto-char (point-min))
    (let (orders)
      (while (re-search-forward (rx "#+begin_src emacs-lisp\n" (group-n 1 (1+ not-newline)) "\n#+end_src") nil t)
	(push (cadr (car (read-from-string (match-string 1)))) orders))
      orders)))

(defvar oo-elpaca-custom-orders (oo-elpaca-custom-orders)
  "Custom recipes derived from recipe files.")

(let* ((packages oo-elpaca-custom-orders)
       (elpaca-forms (mapcar (lambda (package) `(elpaca ,package (message "Installed %s..." ',package))) packages)))
  (funcall `(lambda () ,@elpaca-forms)))

This is successfully installing packages, but I'm not sure if my concern about registering packages/sorting by dependencies is being met. Maybe it is because elpaca works asyncronously so I'm not sure if it is actually installing packages yet until elpaca-process-queues is called.

result of what I tried

Many packages were installed, as claimed by elpaca-status. However, the queue processing seemed to stop on sevaral occations, I had to manually call elpaca-process-queues multiple times. I'm not completely sure what's happening.

[Feature]: optionally install packages synchronously

Feature Description

Either a certain parameter of a function or macro, or a variable (probably the former would be preferable) that forces elpaca to install packages synchronously.

when asynchronous installation is desirable

I understand that elpaca is specifically designed to work asynchronously so a synchronous install would be an "anti-feature".

Sometimes in which an asynchronous install of packages is preferable. For me this is nice when installing a package during an active emacs session. You can use elpaca-try to install one or more packages, and do other things while waiting for them to be installed.

recommended solution: put your init in elpaca-after-init-hook

The solution suggested for why did my init file execute out of order is to move all of your init file (or at least the external package dependant parts of it) into elpaca-after-init-hook. This way this code will be run only after package installation as ended.

practical problem to asynchronous installation : missing timing

Even if you follow the recommended solution, you still miss potentially the entire startup process when installing a sufficiently large number of packages. So any code you have involving after-init-hook, before-init-hook, frame-notice-user-settings, .etc has to be revised and likely modified so that it still works even if it missed timing.

stylistic and idealogical problems with suggested solution

In my opinion, requiring to move all their init file contents into a hook to accommodate a single emacs package is unreasonable. A package should require installation, configuration and installation of any dependencies it needs, but it shouldn't entail a restructuring of your entire config solely to meet its own needs.

installing packages asynchronously at startup does not benefit many users

I suspect many Emacs users like me have a config file that heavily relies on external packages--so much so that not having those packages would make emacs unusable for them. For these users, an asynchronous package installation during startup does not benefit them as much because even if emacs is unblocked, it would be too inconvenient to use until their main packages are installed.

others who have mentioned this

I am not the only one who has been concerned about this. I assert that enough users have expressed interest in a synchronous installation for it to be added as an alternative.

#29 (comment)
#29 (comment)
#7 (comment)
#7 (comment)

Confirmation

  • The feature I'm proposing does not already exist in Elpaca

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.