#!/usr/bin/env bash function fz { readarray -t lines < <(fzf \ --height 50% --reverse --expect alt-enter --print-query "$@" \ --bind "pgup:preview-page-up" --bind "pgdn:preview-page-down" ) query=${lines[0]} enter=${lines[1]} match=${lines[2]} if [[ "$enter" == "alt-enter" ]] then echo "$query" else echo "$match" fi } # cache accounts for speed accounts=$(mktemp) hledger accounts > $accounts & date=$(for n in $(seq 0 31); do date -d"$n days ago" "+%Y/%m/%d (%a)"; done \ | fzf --height 50% --reverse --delimiter '/' \ --preview="gcal -H yes %{1}{2}{3}" \ --preview-window 'noborder,top,8' \ --header-first --header "Today is $(date '+%Y/%m/%d (%a)')" \ | cut -d ' ' -f1 ) echo "date: $date" payee=$(hledger payees | fz --prompt="payee: " --preview='hledger print payee:{..}') echo "payee: $payee" # store past txs in a file, in the background, so I don't have to wait for the # command to re-run each time past_txs=$(mktemp) hledger print payee:"$payee" > $past_txs & read -rep "to amount: " to_amount to_account=$(cat $accounts \ | fz --prompt="to account: " --preview="cat $past_txs") echo "to account: $to_account" from_account=$(cat $accounts \ | fz --prompt="from account: " --preview="cat $past_txs") echo "from account: $from_account" read -rep "from amount: " -i "-$to_amount" from_amount read -r -d '' TX <> "$tmp" cat "$tmp" read -rep "all good? Y/e/n " ok case $ok in n) exit 1 ;; e) vim "$tmp" && cat "$tmp" >> ~/org/fund/ledger.journal ;; *) cat "$tmp" >> ~/org/fund/ledger.journal ;; esac