Skip to content

Instantly share code, notes, and snippets.

@aurorabbit
Last active August 5, 2020 00:16
Show Gist options
  • Star 26 You must be signed in to star a gist
  • Fork 7 You must be signed in to fork a gist
  • Save aurorabbit/7fa0e4d76c97a85f7b0a7318f870ce64 to your computer and use it in GitHub Desktop.
Save aurorabbit/7fa0e4d76c97a85f7b0a7318f870ce64 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'"
## 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"
@aurorabbit
Copy link
Author

screen shot 2018-04-23 at 02 49 09

Final product ~

@aurorabbit
Copy link
Author

fill_char=""
empty_char=" "

screen shot 2018-04-23 at 03 11 27

@rhys-saldanha
Copy link

rhys-saldanha commented Apr 23, 2018

I hope I'm not being too picky but the text isn't centred vertically. Is there a way to fix this?
image

@aurorabbit
Copy link
Author

Hi, @rhys-saldanha sorry for the late reply, it bothered me too.
It's because the font size was 10, I added a revision with size=12 appended to Line 77, which fixes it.

screen shot 2018-04-30 at 11 00 24

This is what you use for Line 77 if you don't want the YY-MM-DD in front:

echo "$(round $d_progress)% | $bitbar size=12"

You can use $m_progress or $Y_progress instead off $d_progress if you would prefer the percentage of month or year.

@jasonrwang
Copy link

Hey @aurorabbit, is there a reason the colour in line 15 is set to #ffffff? This was invisible (understandably) until I clicked on it. Changing to #000000 renders properly.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment