{ pkgs, ... }:

let
  doom-org-capture = pkgs.writeShellScriptBin "doom-org-capture" ''

    set -e

    cleanup() {
      emacsclient --eval '(let (kill-emacs-hook) (kill-emacs))'
    }

    # If emacs isn't running, we start a temporary daemon, solely for this window.
    if ! emacsclient --suppress-output --eval nil 2>/dev/null; then
      echo "No Emacs daemon/server is available! Starting one..."
      emacs --daemon
      trap cleanup EXIT INT TERM
    fi

    # org-capture key mapped to argument flags
    # keys=$(emacsclient -e "(+org-capture-available-keys)" | cut -d '"' -f2)
    while getopts "hk:" opt; do
      key="\"$OPTARG\""
      break
    done
    shift $((OPTIND-1))

    # use remaining args, else read from stdin if passed a single dash
    str="$*"
    case "$str" in
      -) str=$(cat) ;;
    esac

    # Fix incompatible terminals that cause odd 'not a valid terminal' errors
    [ "$TERM" = "alacritty" ] && export TERM=xterm-256color

    # Non-daemon servers flicker a lot if frames are created from terminal, so we do
    # it internally instead.
    emacsclient -a "" \
      -e "(+org-capture/open-frame \"$str\" ${"key:-nil"})"


  '';
in {
  home.packages = [ doom-org-capture ];

}
