{
  writeShellScriptBin,
  makeDesktopItem,
  symlinkJoin,
}: {
  html,
  pathName ? "nvf",
  projectName ? pathName,
  name ? "${pathName}-help",
}: let
  helpScript = writeShellScriptBin name ''
    set -euo pipefail

    if [[ ! -v BROWSER || -z $BROWSER ]]; then
      for candidate in xdg-open open w3m; do
        BROWSER="$(type -P $candidate || true)"
        if [[ -x $BROWSER ]]; then
          break;
        fi
      done
    fi

    if [[ ! -v BROWSER || -z $BROWSER ]]; then
      echo "$0: unable to start a web browser; please set \$BROWSER"
      exit 1
    else
      exec "$BROWSER" "${html}/share/doc/${pathName}/index.xhtml"
    fi
  '';

  desktopItem = makeDesktopItem {
    name = "${pathName}-manual";
    desktopName = "${projectName} Manual";
    genericName = "View ${projectName} documentation in a web browser";
    icon = "nix-snowflake";
    exec = "${helpScript}/bin/${name}";
    categories = ["System"];
  };
in
  symlinkJoin {
    inherit name;
    paths = [helpScript desktopItem];
  }