From a8258d2f89ed27f89d6655530e74bbbb1b65308d Mon Sep 17 00:00:00 2001 From: SinTan1729 Date: Wed, 27 Jul 2022 02:16:16 -0500 Subject: [PATCH] clean up code and add comments --- brightness-by-daylight.sh | 41 +++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/brightness-by-daylight.sh b/brightness-by-daylight.sh index 8060b8a..1cd6895 100644 --- a/brightness-by-daylight.sh +++ b/brightness-by-daylight.sh @@ -1,8 +1,8 @@ #!/bin/sh -# This is a script to set my external monitor's brightness +# this is a script to set my external monitor's brightness # to high (70%) or low (40%) automatically according to day/night. -# It uses ddcutil to access the monitor's settings and sunwait to know +# it uses ddcutil to access the monitor's settings and sunwait to know # if it's day or night. It expects a file in the following format in # the .config directory (the values should be according to location) @@ -13,14 +13,16 @@ # high=70 # low=40 -# Just run this script one manually to set it up to run perpetually (hopefully) using 'at' -# (Some distros don't come with 'at' preinstalled, so you might need to install 'at' and enable the 'atd' service.) +# just run this script one manually to set it up to run perpetually (hopefully) using 'at' +# (some distros don't come with 'at' preinstalled, so you might need to install 'at' and enable the 'atd' service.) -# It might also be a good idea to add ' scheduler' to your DE's autostart list, or to '.profile' so that it launches on system login -# (Sometimes I forget to turn on the monitor when I start my PC, so this is better than having a crontab) +# it might also be a good idea to add ' scheduler wait' to your DE's autostart list, or to '.profile' so that it launches on system login +# (sometimes I forget to turn on the monitor when I start my PC, so this is better than having a crontab) +# location of the config file confdir="/home/sintan/.config" +# read from the config file if test -f $confdir/latlong.toml ; then source $confdir/latlong.toml else @@ -28,19 +30,15 @@ else exit fi +# get sun status sun_status=$(sunwait poll $latitude $longitude) +[ $sun_status == "DAY" ] && target=$high || target=$low -if [ $sun_status == "DAY" ]; then - target=$high - else - target=$low -fi - +# do the brightness adjustment using ddcutil ddcutil setvcp 10 $target echo "Monitor brightness set to $target%, since it's $(echo $sun_status | tr '[:upper:]' '[:lower:]') time" -# Check if we want to access the scheduler. If yes, create a schedule using `at` - +# check if we want to access the scheduler. If yes, create a schedule using `at` if [ "$1" == "scheduler" ]; then if [ $sun_status == "DAY" ]; then time_next=$(sunwait report 35.221050N 97.445938W | grep "Daylight:" | awk '{print $6}') @@ -49,15 +47,16 @@ if [ "$1" == "scheduler" ]; then fi task_list=$(atq | grep $time_next | awk '{print $1}') + # loop through all `at` entries to see if a task already exists + flag=true for item in $task_list do - if ! [ $(at -c $item | sed 'x;$!d' | awk '{print $4}') == "$scriptdir/brightness-by-daylight.sh" ]; then - # we wait a minute so that the next schedule is set up properly (or sunwait reports day/night in a misleading way) - at -m $time_next <<< "sleep 60 && $scriptdir/brightness-by-daylight.sh scheduler" - fi + [ "$(at -c $item | sed 'x;$!d')" == "$scriptdir/brightness-by-daylight.sh scheduler wait" ] && flag=false done - if [ -z "$task_list" ]; then # in case there's no at entry - at -m $time_next <<< "sleep 60 && $scriptdir/brightness-by-daylight.sh scheduler" - fi + # sometimes we need to wait a minute so that the next schedule is set up properly (or sunwait reports day/night in a misleading way) + [ "$2" == "wait" ] && sleep 60 + + # actually create the schedule + $flag && at -m $time_next <<< "$scriptdir/brightness-by-daylight.sh scheduler wait" fi \ No newline at end of file