X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=myi3status;h=9aeccca8a4b0b8676d067f915ef4e4db276b6dbd;hb=c300392f92092b3a89281df462d42710f25d0351;hp=944319efaedcefb66598e2168fc4cd9b58beee25;hpb=ac3e00755e07d2e298769000f7ea50bc0854b510;p=distro-setup diff --git a/myi3status b/myi3status index 944319e..9aeccca 100755 --- a/myi3status +++ b/myi3status @@ -3,11 +3,53 @@ # SPDX-License-Identifier: AGPL-3.0-or-later # usage: -# * left click seconds to reset main timer +# +# * left click seconds to reset & enable main timer which shows 30 +# minutes in blue and half hours in orange. +# # * right click seconds to disable minutes & half hours of main timer -# * left click minutes to reset 2nd timer. +# +# * left click minutes to reset & enable 2nd timer. +# # * right click minutes to disable 2nd timer +# docs: +# +# Sections from right to left. +# +# section #1, labeled day_percent +# +# 1. Thousandths of a 16 hour day left. 1 = 57.6 seconds. +# 2. Bar of one thousand of a day which gets shorter by ninths. One ninth is 6.4 seconds. +# 3. Start of the day (only the non-zero numbers). Set this with the ds command. +# 4. The time right now. +# 5. Ten thousands of the year left. 1 = 52:34 minutes (leap year = 52:42) +# 6. Bar of 1/10,000 of a year shrinking by ninths. 1 ninth = 5:50 minutes (leap year = 5:51 mins). +# +# section #2, labeled seconds +# +# block characters, ▉, are added every 3 seconds, a total of 20 for 1 +# minute. The groups of 5 blocks = 15 seconds each. +# +# section #3, labeled mins +# +# Only enabled by clicking on seconds, see usage. +# +# Block characters are added every minute until 30, then reset. There +# are 6 groups of 5 minutes. +# +# Section #4 +# +# Half hours in orange, grouped into groups of 2. This will grow until +# it fills the screen. +# +# Section #5 & 6 +# +# Only enabled by clicking on mins section, see usage. +# +# These repeat sections 3 and 4 in violet and some other color. +# +# if [ -z "$BASH_VERSION" ]; then echo "error: shell is not bash" >&2; exit 1; fi source /a/bin/errhandle/err @@ -21,15 +63,22 @@ fast_blocks=30 start=$EPOCHSECONDS domins=false +if date -d 'february 29' &>/dev/null; then + days_in_this_year=366 +else + days_in_this_year=365 +fi get_daystart() { - if [[ /b/data/daystart -ot /b/data/daystart-generated && $day_tmp ]]; then + if [[ /b/data/daystart -ot /b/data/daystart-generated && $day_start_24h ]]; then return 0 fi - day_tmp=$(cat /b/data/daystart) - day_start_hour=${day_tmp%??} - day_start_min=${day_tmp: -2} + day_start_24h=$(cat /b/data/daystart) + day_start_sig_digits=${day_start_24h%?} + day_start_sig_digits=${day_start_sig_digits%0} + day_start_hour=${day_start_24h%??} + day_start_min=${day_start_24h: -2} echo $day_start_hour > /b/data/daystart-generated echo $day_start_min >> /b/data/daystart-generated day_start=$(date -d $day_start_hour:$day_start_min +%s) @@ -168,6 +217,8 @@ main() { i_end=$(( time % 60 / 3 + 1 )) if (( i_end - i > 15 )); then printf " " + elif (( i_end == 1 && i == 0 )); then + printf B elif (( i < i_end )); then printf ▉ else @@ -185,11 +236,13 @@ main() { day_start=$(date -d $day_start_hour:$day_start_min +%s) fi - spark_index="$(( (100000 -($EPOCHSECONDS - $day_start)*100000 / (16*60*60) ) % 100 / 11 ))" + # there are 9 spark levels, 1/9 = .111.... In order to keep it in bash math, we upscale + # the number and divide by 111, 3 digits is good enough accuracy. + spark_index="$(( (1000000 -($EPOCHSECONDS - $day_start)*1000000 / (16*60*60) ) % 1000 / 111 ))" spark=" ▁▂▃▄▅▆▇█" # note: 960 minutes, so 10 minutes is about 1% day_thousandth=$(( 1000 - (EPOCHSECONDS - day_start)*1000 / (16*60*60) )) - printf %s "$day_thousandth${spark:spark_index:1} $(date "+%l:%M")" + printf %s "$day_thousandth${spark:spark_index:1}$day_start_sig_digits $(date "+%l:%M")" # .1% of a waking year is ~5.75 hours, or 365 thousandths of a day. # 1% of a waking year is 3.7 days @@ -197,8 +250,8 @@ main() { year_start=$(date +%s -d 'january 1 6am') year_days=$(( (EPOCHSECONDS - year_start) / (24*60*60) )) year_start=$(( year_start + year_days * 8*60*60 )) - year_spark_index=$(( ( 100000 - (EPOCHSECONDS - year_start)*100000 / (365*16*60*60) ) % 100 / 11 )) - year_tenthousandth=$(( 10000 - (EPOCHSECONDS - year_start)*10000 / (365*16*60*60) )) + year_spark_index=$(( ( 1000000 - (EPOCHSECONDS - year_start)*1000000 / (days_in_this_year*16*60*60) ) % 1000 / 111 )) + year_tenthousandth=$(( 10000 - (EPOCHSECONDS - year_start)*10000 / (days_in_this_year*16*60*60) )) printf %s " $year_tenthousandth${spark:year_spark_index:1}"