;;; Guix automation.
(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 1)        ;skip (
                (forward-sexp 1)        ;define-public
                (forward-comment (point-max))
                (symbol-at-point))))
    ;; Evaluate the package.
    (geiser-mode-switch-to-repl-and-enter) ;start geiser/load module
    (geiser-repl-switch)                   ;switch back to scheme buffer
    (geiser-eval-definition-and-go)        ;eval package definition

    ;; Build the package.
    ;; TODO: Load (guix) module silently.
    
    (geiser-repl--send ",use (guix)" t)
    ;;(guix-geiser-eval-in-repl ",use (guix)")
    ;; (guix-geiser-eval-in-repl-synchronously (format ",build %s" name))

    ;; ;; TODO: if no error, return point at original location. If error,
    ;; ;; open log file.
    ;; (geiser-repl-switch)
    ))

;;; Bind it to F7.
(with-eval-after-load 'scheme
  (define-key scheme-mode-map
              (kbd "<f7>")
              #'guix-build-package-at-point))

Generated by apteryx using scpaste at Fri Jun 5 16:27:28 2026. JST. (original)