Daily shutdown script for Timingapp
When I’m in the middle of work I often tend to overlook how long I’ve already worked on any given day, especially when working from home during Covid where I mostly don’t have fixed start or end dates, like so many of us.
To avoid having my overtime balance increase unintentionally by working half an hour here and there I’ve created a script for myself based on the excellent Timing to see when I’ve worked about 7.5h to allow me to begin to shut down my work for the day.
You can do that with a small Applescript by looking for the total time tracked today in seconds and then creating a notification. There’s probably a more efficient way than running this command every minute and just comparing number of seconds, but it seems to do the trick.
In addition to the notification I also force dark mode to nudge myself a bit more proactively.
tell application "TimingHelper"
if not scripting support available then
error "Scripting support requires a Timing Expert license. Please contact support via https://timingapp.com/contact to upgrade."
end if
end tell
tell application "TimingHelper"
set usageData to get time summary between current date and current date
set total to overall total of usageData
# work day 8 * 60 * 60: 28'800s
# threshold 7.5 * 60 * 60: 27'000s
if total ≥ 27000 and total < 27060 then
display notification "You have worked 7.5h, begin shutting down." with title "Timing alert" sound name "Frog"
tell application "System Events"
tell appearance preferences
set dark mode to true
end tell
end tell
end if
delete usageData
end tell
Now add an agent to ~/Library/LaunchAgent such as the one shown below like
com.example.timing_monitor.plist and enable it with
launchctl load com.example.timing_monitor.plist
and you should be good to go.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.example.timing_monitor</string>
<key>Program</key>
<string>/usr/bin/osascript</string>
<key>ProgramArguments</key>
<array>
<string>osascript</string>
<string>/your/path/your script.scpt</string>
</array>
<key>StartInterval</key>
<integer>60</integer>
</dict>
</plist>