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.
56 lines
2.4 KiB
Text
Executable file
56 lines
2.4 KiB
Text
Executable file
#!/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)))
|