;;; 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))