Use doomscript instead of cli.el for dumping

Removes the need to build a stage1 DOOMDIR, we can just use the user's
DOOMDIR directly.

The same approach should work for the next stage, removing the need to
leave our cli.el in the final DOOMDIR.
This commit is contained in:
Marien Zwart 2024-04-25 16:09:42 +10:00
parent 6c394ec081
commit e41bb2e0e5
No known key found for this signature in database
2 changed files with 11 additions and 12 deletions

56
build-helpers/dump Executable file
View file

@ -0,0 +1,56 @@
#!/usr/bin/env doomscript
;; -*- lexical-binding: t; -*-
(require 'json)
(defcli! dump
((output-directory ("-o" dir) "Directory to dump into.")
(&flag full? ("--full")))
"Dump intermediates for nix-doom-emacs-unstraightened."
;; Load the user's init.el, or we'll dump only core packages.
(load! doom-module-init-file doom-user-dir t)
(let* ((all-packages (doom-package-list full?))
;; For built-in packages, the :ignore property is the location of the
;; built-in library, which is a Nix store path. We do not want that
;; path to escape: avoid it by just filtering ignored packages here.
(packages (seq-remove (lambda (p) (or (plist-get (cdr p) :ignore)
(plist-get (cdr p) :disable)))
all-packages))
;; For recipes with :files, print it to a string before json-encode.
;; Otherwise it is serialized as a plist if it starts with :defaults.
;; We either ignore this or pass it to melpa2nix in a recipe.
(packages
(mapcar (lambda (p)
(let* ((plist (cdr p))
(recipe (plist-get plist :recipe))
(files (plist-get recipe :files)))
(when files
(setcdr p
(plist-put plist :recipe
(plist-put recipe :files
(prin1-to-string files)))))
p))
packages))
(json (json-encode packages))
(json-path (expand-file-name "packages.json" output-directory)))
(write-region json nil json-path)
(with-temp-buffer
(insert ";;; packages.el -*- no-byte-compile: t; -*-
;; Package list generated by nix-doom-emacs-unstraightened.
;; Disabled packages:
")
(dolist (kp all-packages)
(when (plist-get (cdr kp) :disable)
(insert "(package! " (symbol-name (car kp)) " :disable t)\n")))
(insert "
;; Packages installed by nix-doom-emacs-unstraightened or ignored by you:
")
(dolist (kp all-packages)
(let ((p (cdr kp)))
(when (not (plist-get p :disable))
(insert "(package! " (symbol-name (car kp)) " :ignore t)\n"))))
(write-region nil nil (expand-file-name "packages.el" output-directory)))))
(run! "dump" (cdr (member "--" argv)))