用Borg主要还是因为 straight.el 太慢了(可能是我网络慢吧…),而且有些包无法用 straight.el 安装。
Borg基本就是一个裸奔包管理器,简单粗暴 less magic,主要就是利用 git submodules,结合 magit 很好用。目前看来,修改文件之后不会自动生成 autoloads,需要稍微配置下。
Borg 已经可以和 package.el 一起用了,melpa 的插件用 package.el,fork 魔改的插件用 Borg,值得一试。
用Borg主要还是因为 straight.el 太慢了(可能是我网络慢吧…),而且有些包无法用 straight.el 安装。
Borg基本就是一个裸奔包管理器,简单粗暴 less magic,主要就是利用 git submodules,结合 magit 很好用。目前看来,修改文件之后不会自动生成 autoloads,需要稍微配置下。
Borg 已经可以和 package.el 一起用了,melpa 的插件用 package.el,fork 魔改的插件用 Borg,值得一试。
我目前的做法是从 melpa 安装 borg,然后:
;;; borg
(require 'borg)
(borg-initialize)
再把下面这段代码放到 kill-emacs-hook
里:
(let ((libs (directory-files
(locate-user-emacs-file "lib/")
nil directory-files-no-dot-files-regexp)))
(dolist (lib libs)
(borg-update-autoloads lib)))
跟我差不多(package.el配合git),不过我是用shallow clone
使用submodule
有一个坏处是需要自己维护想使用哪个commit
,而straight.el
就可以
不用管这个。
我在用,我是基于Centaur Emacs,把包管理部分换成了 borg, 然后再往上加自己的配置。目前工作流比较顺畅了。
我以前主要是会在机器之间同步配置,经常需要用 Diff-compare,比对后覆盖。现在都在git里面了,直接用git的patch,方便不少。最近还跟作者讨论下,安装完包后,在 borg-initialize
中去掉对 git调用的依赖。Split package add/remove management and personal config management · Discussion #118 · emacscollective/borg · GitHub
多谢分享,git 在 Windows下确实比较慢。今天用 bootstrap 那个项目试了一下,安装了 vertico,在Windows 上启动时间都要 2.6s 了 。
请问一下,我老的项目(100个包左右)迁移过来,难道要一个个 borg-clone?感觉好费力啊。没法直接解析 init.el 中的 use-package 关键字来自动 clone,像 straight 那样比较简单一些。
我翻了下,这是当时的安装笔记:
(defun my-install ( pkgs)
(let* (pkg url)
(dolist (el pkgs)
(setq pkg (epkg (symbol-name el)))
(setq url (and pkg
(if (or (epkg-git-package-p pkg)
(epkg-github-package-p pkg)
(epkg-orphaned-package-p pkg)
(epkg-gitlab-package-p pkg))
(eieio-oref pkg 'url)
(eieio-oref pkg 'mirror-url))))
(when url
(pcase-dolist (`(,orig . ,base) borg-rewrite-urls-alist)
(when (string-prefix-p orig url)
(setq url (concat base (substring url (length orig)))))))
(when url
(print el)
(condition-case err
(borg-assimilate (symbol-name el) url)
(error ; Condition.
(message "%s" (error-message-string err)) ))) ) ) )
我的办法比较low。当时是先将 Centaur Emacs安装好,有200多个包,那就到包的lisp目录,找出用了些什么包,dired拷贝出来,去掉日期后缀,编辑出一个包的列表,然后用 my-install
这个函数慢慢安装。
这个就是在 borg-initialize
中,多次调用 git 进程。我上面提到的那个讨论,里面的代码可以只是在修改包后,首次加载时调用,然后像 doom-emacs 一样生成一个大的 autoloads, 再次启动时直接加载就行了。当然可能不太完善,但目前还没碰到问题。
看你和作者的讨论,他并不打算再实现这个功能。 Windows 用户需要更多的关爱 。
所以我用那段代码实现了,目前已经能工作。最大的方便就是所有都在git 中。我这个想法避免了在.emacs.d根目录下调用git status的慢,因为平时修改就在我自己的z-init中,涉及到包的管理才在.emacs.d目录下,慢也次数少点。
我回头试试你的方案。
我一直在用。
你使用 auto-compile 不会引起启动慢吗?我之前用 purcell 配置的时候,这个包会引起启动慢很多。 还提过一个issue,Automatic byte compilation cause startup and loading org-mode slow · Issue #765 · purcell/emacs.d · GitHub ,特别是 Windows 下更加严重。
综合下来,现在暂时考虑用 straight 了,从 use-package 迁移更加方便一点。 感觉 Borg 就是手动挡,straight 相当于自动挡 ,不过 borg 和 magit 集成的更好。
我用的是emacsclient, 所以启动速度无所谓。。
其实也可以不用auto-compile,因为完全可以在命令行实现:
我包装了一个命令,make update-build , 可以只编译更新的submodule为elc,好像也可以直接在命令行编译成eln,有个branch build-native,我待会试一下。
用 straight 的速度也不快,我原来用package.el + use-pacskage 的配置 启动时 0.9s 的,到了 straight 要 3s 以上。
看来鱼和熊掌不可兼得,用Git 子模块版本控制好,速度稍微慢点。
请问下 borg-clones
这个命令是不是用来批量克隆多个包的?
straight 慢可能是因为每次启动 check 比较费时?我关了之后启动时间比 package 快近一倍(macOS上)
关闭哪个check?在哪里设置?
GitHub - radian-software/straight.el: 🍀 Next-generation, purely functional package manager for the Emacs hacker. 反正我这 straight 启动和 package 差不多,autoload 放到了一个文件带来的优化去掉 check 就能看出来了