anchor.diff:          until (eq object :eof)
           do (funcall callback object)))
   
  -(define-command install-os-package ()
  -  "Install select packages."
  -  ;; TODO: Allow profile creation.  Need multi-source support for that?
  -  (let* ((profile (prompt-minibuffer
  -                   :suggestion-function (os-profile-suggestion-filter)
  -                   :input-prompt "Target profile"))
  -         (packages (prompt-minibuffer
  -                    :suggestion-function (os-package-suggestion-filter)
  -                    :input-prompt "Install OS package(s)"
  -                    :multi-selection-p t))
  -         ;; TODO: Check for running process.
  +(defun operate-os-package (title command profile packages)
  +  (let* (;; TODO: Check for running process.
            (buffer (or (find-buffer 'os-package-manager-mode)
                        (nyxt/os-package-manager-mode:os-package-manager-mode
                         :activate t
  
positive.code:          (content
            (markup:markup
             (:style (style buffer))
             (:h1 "Installing packages...")))
           (insert-content (ps:ps (setf (ps:@ document body |innerHTML|)
                                        (ps:lisp content)))))
      (ffi-buffer-evaluate-javascript-async buffer insert-content)
      (chanl:pexec ()
        (let ((process-info (ospama:install packages profile)))
          (format-command-stream process-info
                                 (lambda (s)
                                   (ffi-buffer-evaluate-javascript-async
  
negative.code:          (packages (prompt-minibuffer
                      :suggestion-function (os-installed-package-suggestion-filter profile)
                      :input-prompt "Uninstall OS package(s)"
                      :multi-selection-p t)))
      (operate-os-package "Uninstalling packages..." #'ospama:uninstall profile packages)))
  
  ;; TODO: Parse Texinfo for Guix descriptions.
  ;; TODO: Add commands:
  ;; - find-files (open in editor, with select program) -- leverage file-manager
  ;; - show-deps, show-reverse-deps (when minibuffer has actions)
  