{
  bashrcExtra = ''
    function v {
      if [[ $# -eq 0 ]]; then
        nvim ~/UNTITLED.md
      else
        nvim $1
      fi
    }

    # Modify killall for wrapped applications, e.g. firefox
    # killall firefox -> killall firefox || killall .firefox-wrapped
    function killall {
      `which killall` $1 || `which killall` .''${1}-wrapped
    }

    # pandoc macro
    # pandoc document.md -> pandoc document.md -o document.pdf ...
    function pdf {
      pandoc $1 -o ''${1%.*}.pdf --pdf-engine=xelatex -V mainfont="mplus-1c-medium" -V colorlinks=true -V linkcolor=blue
    }

    # Change to directory when exiting ranger with Q
    # https://github.com/ranger/ranger/issues/1554#issuecomment-491650123
    function ranger {
      local IFS=$'\t\n'
      local tempfile="$(mktemp -t tmp.XXXXXX)"
      local ranger_cmd=(
        command
        ranger
        --cmd="map Q chain shell echo %d > "$tempfile"; quitall"
      )
      
      ''${ranger_cmd[@]} "$@"
      if [[ -f "$tempfile" ]] && [[ "$(cat -- "$tempfile")" != "$(echo -n `pwd`)" ]]; then
        cd -- "$(cat "$tempfile")" || return
      fi
      command rm -f -- "$tempfile" 2>/dev/null
    }
  '';
  greeter = ''
    pfetch
    while true; do
      f=`fortune`
      if [ ''${#f} -lt 128 ]; then
        echo "''${f}"
        break
      fi
    done
    TERMINAL_STARTED=1 
  '';
}