Skip to content

Instantly share code, notes, and snippets.

@tucq88
Forked from aurorabbit/progress.10s.sh
Created October 17, 2018 03:52
Show Gist options
  • Save tucq88/9e63f65585c48c36f0706ba3eac086ef to your computer and use it in GitHub Desktop.
Save tucq88/9e63f65585c48c36f0706ba3eac086ef to your computer and use it in GitHub Desktop.
Bitbar timely progress bar
#!/bin/sh
# add this to your bitbar directory
# don't forget to chmod +x
# width and characters for the progress bars
# feel free to configure these
width=30
fill_char="█"
empty_char="▁"
# bitbar parameters
# use a monospace font if you want the percentages to be right-aligned
# bitbar="size=10 color=#ffffff font='Fantasque Sans Mono'"
bitbar=""
## See Font Book.app's Fixed Width collection for what you can use
## you can also download this font for free and drag it into Font Book.app.
## https://github.com/belluzj/fantasque-sans/releases/latest
# all of the calculations are done using unix timestamps from date(1)
# mac uses bsd's date(1)
# whenever we set a date, make sure to add -j so it doesn't change the clock
# we use `date -j %m%d0000 +%s` to get the start timestamp, %Y is implied
# then we use `date -jr $start -v +1y/+1m/+1d +%s` to get the ending timestamp
# then we calculate the percentage with (now - start) / (end - start)
now=$(date +%s)
Y=$(date +%Y)
Y_start=$(date -j 01010000 +%s)
Y_end=$(date -jr $Y_start -v +1y +%s)
Y_progress=$(
echo "($now - $Y_start) * 100 / ($Y_end - $Y_start)" | bc -l
)
m=$(date +%m)
m_start=$(date -j $(date +%m)010000 +%s)
m_end=$(date -jr $m_start -v +1m +%s)
m_progress=$(
echo "($now - $m_start) * 100 / ($m_end - $m_start)" | bc -l
)
d=$(date +%d)
d_start=$(date -j $(date +%m%d)0000 +%s)
d_end=$(date -jr $d_start -v +1d +%s)
d_progress=$(
echo "($now - $d_start) * 100 / ($d_end - $d_start)" | bc -l
)
# padding to align progress bar and text
# Y-m-d = 10 + 2 spaces + 2 digits + percent sign = 15
# progress bar width - 15 = padding
padding=$(printf %$((width-15))s "")
# round function
round() { printf %.0f "$1"; }
# progress bar display function
progress() {
filled=$(round $(echo "$1 * $width / 100" | bc -l))
empty=$((width - filled))
# repeat the characters using printf
printf "$fill_char%0.s" $(seq $filled)
printf "$empty_char%0.s" $(seq $empty)
}
# output to bitbar
# first line
# echo "$Y-$m-$d: $(round $d_progress)% | $bitbar size=12"
# echo ---
# day + progress bar
echo "$Y-$m-$d $padding $(round $d_progress)% | $bitbar"
echo "$(progress $d_progress) " # | $bitbar"
echo ---
# month + progress bar
echo "$Y-$m $padding $(round $m_progress)% | $bitbar"
echo "$(progress $m_progress) " # | $bitbar"
echo ---
# year + progress bar
echo "$Y $padding $(round $Y_progress)% | $bitbar"
echo "$(progress $Y_progress) " # | $bitbar"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment