diff options
Diffstat (limited to 'hledger-level')
-rwxr-xr-x | hledger-level | 134 |
1 files changed, 0 insertions, 134 deletions
diff --git a/hledger-level b/hledger-level deleted file mode 100755 index 98dd09c..0000000 --- a/hledger-level +++ /dev/null @@ -1,134 +0,0 @@ -#!/usr/bin/env bash -set -exo pipefail - -query='^as ^li' - -function floor { - printf %.f $1 -} - -function ceil { - printf %.f $(bc <<< "$1+1") -} - -function dec { - bc <<< "$1-1" -} - -function inc { - bc <<< "$1+1" -} - -function exp10 { - bc <<< "10^$1" -} - -function log10 { - bc -l <<< "l($1)/l(10)" -} - -function add { - bc -l <<< "$1 + $2" -} - -# colors -purple="#6961ff" -green="#61ff69" -red="#ff6961" - -datefmt="%Y-%m-%d" -today=$(date +$datefmt) -xstart=$(date -d"2 years ago" +$datefmt) - -# basically just calculates the log10 and removes some columns -process_row=$(cat <<EOF -import csv, sys, math -from datetime import datetime -data = sys.stdin.readlines() -rdr = csv.reader(data) -next(rdr, None) # skip header -prev=None -for row in rdr: - date = row[1] - networth = float(row[6][:-3].replace(",", "").strip()) - if prev: - x1 = datetime.strptime(prev[0], "$datefmt") - x2 = datetime.strptime(date, "$datefmt") - y1 = prev[1] - y2 = networth - change = (y1-y2) / max((x1-x2).days, 1) - change = ((networth / prev[1]) - 1) * 100 - else: - change = 1 - level = math.log10(networth) - print(date) - print(f"{date},{level:.2f},{networth:.2f},{change}") - prev = (date, networth) -EOF -) - -networth=$(hledger bal $query --depth=1 --value=now --infer-value \ - | tail -n1 \ - | awk '{ print $1 }' \ - | tr -d ',' -) -level=$(log10 $networth) -flevel=$(floor $level) - -data=$(mktemp --suffix=-data) -hledger reg $query --value=end,USD --infer-value -O csv \ - | python3 -c "$process_row" \ - > $data - -plot=$(mktemp --suffix=-plot) - -# here's the actual plotting code -cat <<EOF > $plot -set datafile separator "," - -set terminal png size 2560,1920 -#set term dumb - -set multiplot -set size 1, 0.5 -set grid - -# x axis -set xdata time -set timefmt '$datefmt' -set xrange ['$xstart':'$today'] -set format x '$datefmt' -set xtics rotate by 60 offset 0,-1.5 out nomirror - -# Level -set origin 0, 0.5 -set ytics 0.2 -set yrange [$(floor $(dec $level)):$(ceil $level)] -set ylabel "Overall Level" textcolor rgb "green" -plot '$data' using 1:2 linecolor rgb "red" smooth bezier with lines title "Level ($level)", \ - $(inc $flevel) linecolor rgb "$purple" with lines title "Level $(inc $flevel)", \ - $flevel linecolor rgb "$green" with lines title "Level $flevel", \ - $(dec $flevel) linecolor rgb "$red" with lines title "Level $(dec $flevel)" - - -# Net worth, within current level -set origin 0, 0.0 -set ytics $(exp10 $level) -set yrange [$(exp10 $(dec $flevel)):$(exp10 $(inc $flevel))] -set ylabel "Net worth within current level" textcolor rgb "green" -plot '$data' using 1:3 linecolor rgb "green" with filledcurves x1 title "Net Worth ($networth)", \ - $(exp10 $(inc $flevel)) linecolor rgb "$purple" with lines title "Level $(inc $flevel)", \ - $(exp10 $flevel) linecolor rgb "$green" with lines title "Level $flevel", \ - $(exp10 $(dec $flevel)) linecolor rgb "$red" with lines title "Level $(dec $flevel)" - -# Rate of change -#set origin 0, 0 -#set ytics 10 -#set yrange [-100:100] -#set ylabel "Rate of change" -#plot '$data' using 1:4 linecolor rgb "green" smooth csplines with lines title "rate of change" - -unset multiplot -EOF - -gnuplot -p $plot |