Description
This is a time tracker written entirely in Bash and Sqlite, with all activity progress stored in single a CSV file.
No longer in active development, some work on a SDL backed GUI in Rust was made and may be picked up again. For now the below setup works well enough for my needs.
Setup
Setup is a bit too simple, and could be made easier. These aliases are loaded to
whichever client machine is using the system. marble is a server configured to
have tim source files in the Projects
directory, which keeps all time tracking centralized.
alias start="ssh marble 'cd ~/Projects/tim && ./tog.sh start $1'"
alias stop="ssh marble 'cd ~/Projects/tim && ./tog.sh stop $1'"
alias view="ssh marble 'cd ~/Projects/tim && ./view.sh'"
alias pivot="ssh marble 'cd ~/Projects/tim && ./pivot.sh'"
There is no Tim specific instance or daemon or server software that needs to be running otherwise, so this can all be run locally if desired. The above is entirely for convenience in my homelab.
Features
Supported commands
view
- Displays currently running times, as well as activities that have been worked on that day.
start <activity>
- Begins tracking of the provided activity
stop <activity|all>
- stops the provided activity.
allcan be used to stop all currently running activities. Under the hood this is how pivot works.
pivot <activity>
- Toggles from all currently running activity to another activity
CSV file
The CSV file is formatted as below.
time,action,activity
With each being:
time: The time is in ISO 8601 format, but it is the local time of the machine
running the scripts. Take care when tracking across time zones.
action: "start" or "stop"
actvity: Name of the activity being started or stopped. "all" being read as a
keyword to stop all running activities.
2026-05-11T11:32:32-04:00,start,tim
2026-05-11T11:32:35-04:00,stop,tim
2026-05-11T11:49:06-04:00,start,dishes
2026-05-11T11:49:08-04:00,start,tim
2026-05-11T11:49:15-04:00,stop,dishes
2026-05-11T11:49:19-04:00,start,dishes
2026-05-11T11:49:24-04:00,stop,all
The view command displays this above snippet as below:
Today's Activity Times:
tim 0000-00-00 00:00:08.000
dishes 0000-00-00 00:00:09.000
No Activities Running.