 (defun +vterm--configure-project-root-and-display (arg display-fn)
   "Sets the environment variable PROOT and displays a terminal using `display-fn`.
 
-If prefix ARG is non-nil, cd into `default-directory' instead of project root."
+If prefix ARG is non-nil, cd into `default-directory' instead of project root.
+
+Returns the vterm buffer."
   (unless (fboundp 'module-load)
     (user-error "Your build of Emacs lacks dynamic modules support and cannot load vterm"))
   (let* ((project-root (or (doom-project-root) default-directory))

             (unless (eq major-mode 'vterm-mode)
               (vterm-mode))
             (+vterm--change-directory-if-remote))
           (pop-to-buffer buffer)))))))

;;;###autoload
(defun +vterm/here (arg)
  "Open a terminal buffer in the current window at project root.

If prefix ARG is non-nil, cd into `default-directory' instead of project root."
  (interactive "P")
  (+vterm--configure-project-root-and-display
   arg
   (lambda()
     (require 'vterm)
     ;; This hack forces vterm to redraw, fixing strange artefacting in the tty.
     (save-window-excursion
       (pop-to-buffer "*scratch*"))
     (let (display-buffer-alist)

               default-directory
             project-root)))
    (setenv "PROOT" project-root)
    (prog1 (funcall display-fn)
      (+vterm--change-directory-if-remote))))

(defun +vterm--change-directory-if-remote ()
  "When `default-directory` is remote, use the corresponding
