(defun guix-build-package-at-point ()
"Evaluate sexp at point and build it in Geiser."
(interactive)
(let ((name (save-excursion
(beginning-of-defun)
(forward-char) (forward-sexp) (forward-comment (point-max))
(symbol-at-point)))
(sexp-string (save-mark-and-excursion
(mark-defun)
(buffer-substring-no-properties
(region-beginning)
(region-end)))))
(geiser-mode-switch-to-repl-and-enter) (geiser-repl-switch) (guix-geiser-eval sexp-string)
(guix-geiser-eval "(use-modules (guix))")
(guix-geiser-eval-in-repl (format ",build %s" name))
(let ((repl-text (save-mark-and-excursion
(buffer-substring-no-properties
(region-beginning)
(region-end)))))
(when (string-match (rx "View build log at '" (group (+ graphic)) "'.")
repl-text)
(guix-build-log-find-file (match-string 1 repl-text))))))