CLI Utility to log time for different projects.
Timelog
is a CLI program to log time for your every day projects. Whether it's for professional use or a hobby project, it's easy to track how many hours and minutes you have logged for different projects of different weeks.
The purpose of this tool is to have a terminal friendly tool that can easily track time(since terminals are fast and easy these days).
Timelog
used to be a conversion tool that turned military time(HH:mm
) to decimal time. I(@Lilja) worked for a company that used to log their time in decimal time(where working 8 hours and 30 minutes is not 8:30
but 8.5
. After a couple of iterations it turned from a conversion tool into a time logging tool.
This new repository with a full re-write has more tools and support to log multiple different projects.
This gif shows a simple demonstration that creates a project, logs the time between 08:00-16:00 with 45 minutes of break time, logs time for yesterday with similar times and finally shows a weekly report that shows various statistics.
Created with ttygif
Clone the repository, then just add the bin
directory to the $PATH
by running:
$ export PATH=$PATH:$PWD/bin/
This is only temporary though. For being able to consistent run timelog
wherever you are on the filesystem, please put the export inside a .profile
or .zprofile
if you're running ZSH
.
Run timelog --purge
and then delete the source files.
Timelog is a script written for keeping track of time for projects.
It will log time inputed via this CLI to store it to the disk in $HOME/.config/timelog/project_id.log.
Usage: timelog
- log (project_id) (start time) (end time) (break time) [--note] [--date timestamp]
- view (project_id) (week) [year] [--raw]
- project
- create
- list
- delete
- start (project_id)
- pause (project_id)
- resume (project_id)
- calc start time, end time, break time
- --help
- --version
- --purge
For debugging, run with -v
To see examples, run timelog --examples
All arguments in parenthesis will be prompted to the user if not supplied
All arguments in brackets are optional
timelog project create
to create a new project(interactively)
timelog project list
to list current projects that are configured
timelog log (project id) (start time) (end time) (break time) [--note] [--date]
to log project for project id
using start time
end time
break time
.
It's possible to log a note for the entry with --note
. A prompt will later let you fill in text.
It's also possible to log something that is different from today. Specify a date with --date
like --date 2017-01-01
to log for the 1st of Jan, 2017
.
timelog view (project id) (week) (year) | [--raw]
to show logs for a project id
during week number
and year
or specify --raw
to open up the logs with less
timelog project delete
to delete a project(interactively)
timelog calc start time end time [break time]
to calculate a period between start time, end time and break time
timelog --purge
to purge or remove all configuration and logs made
timelog start
to save the time right now as start time
timelog pause
to save the time right now as break time.
timelog resume
to save the time right now as the work time is now continued.
sed
tested with 4.4
grep
tested with 3.0
less
tested with 481
bash
tested with 4.4.12(1)-release
awk
tested with 4.1.4
cut
tested with 8.26
tr
tested with 8.26
Creating a project
timelog project create
Creating a new project
What would you like to call it?
Test
What is an ID that you would call it?
(This is used to specify which project you would like to submit time to)
ts
What does the project pay(per hour)?
50
What is the target hours per week?
40
What is the currency paid?
kr
Listing the projects that are created
timelog project list
The projects are:
1: Test [ts]
Logging time for a project
timelog log ts 08:00 15:30 45
Times: 08:00, 15:30, 45. Decimal time: 6.75 Military time: 06:45
Save this to Test project log? y/n
y
Showing logs for a project given a week
timelog view ts 28
Days worked for week 28
Monday: 6.75h / 06:45
------
You have worked for 6.75 hours at the following days: Monday
You have 33.25 hours out of 40 hours giving you an estimate of
8.3125 hours for 4 more days.
You have earned 337.5 kr pre-tax!
Deleting a project
timelog project delete
The projects
1: Test [ts]
Which project do you want deleted?
1
Are you sure you want to delete it? (y/n)
y
To purge all configuration
timelog --purge
Are you sure that you want to purge timelog? There is no undo in doing this.
Type out: 'timelog' to delete all configuration and logs that you have created."
timelog
Removing ~/.config/timelog
timelog
uses shunit2 for unit tests. In order to run the unit tests, please use the test_dep.sh
script to download the dependency
log_path=$HOME/.config/timelogs
The program will default to $log_path
for init configuration and log storage.
The def
folder contains project definition which is used as meta-data for the project.
config
file contains program wide configuration. The program will create a default config-file if it does not exist in $log_path
${project_name}.logs
contains the log entries for the days that the user has created logs.
The program will read from $log_path
and list the projects that are created if project id
has not been specified
timelog project create
project create
is keywords.
The program will prompt for input after it has been invoked.
timelog project list
project list
is keywords.
timelog log (project id) (start_time) (end time) (break time) [--note]
log
is a keyword.
project id
Optional/prompted. Is an ID that was specified during the creation. No need to specify a project_id
if there is only one project created.
start time
Optional/prompted. Is a timestamp to begin logging time from. 8, 8:00, 800, 08:00, 0800
is all valid and mean the same thing.
end time
Optional/prompted. Is a timestamp to end logging time. 8, 8:00, 800, 08:00, 0800
is all valid and mean the same thing.
break time
Optional/prompted. Is the total amount of minutes to deduct from the calculation. Enter 0
for no breaks.
--note
Optional. Able to process text from the prompt to make a note that is visible in the show logs
command.
--date
Optional. Possible to log for a different date, specify with --date timestamp
where timestamp
is something the program date
can format.
timelog view (project id) (week) (year) | (--raw)
show logs
is keywords.
project id
Optional/prompted. Is an ID that was specified during the creation.
week
Optional/prompted. The week to view logs from.
year
Optional. The year to view logs from. Defaults to the current year.
--raw
Optional. If the user wants to open the log file for a project in less
. Mostly used to debug.
Debug tool
timelog edit logs
edit logs
is keywords.
First, checks if xdg-open
is a command. If so, will run it. Otherwise, it will check for $EDITOR
. If neither are present, fall back to vim
.
timelog start (project_id)
start
is a keyword.
project id
Optional/prompted. Is an ID that was specified during the creation.
Writes the time down onto the filesystem and is later read when logging.
timelog pause (project_id)
pause
is a keyword.
project id
Optional/prompted. Is an ID that was specified during the creation.
Writes the time down onto the filesystem and is later read when logging.
timelog resume (project_id)
resume
is a keyword.
project id
Optional/prompted. Is an ID that was specified during the creation.
Writes the time down onto the filesystem and is later read when logging.
timelog project delete
project delete
is keywords.
The program will prompt for which project to delete.
timelog calc start time end time [break time]
calc
is a keyword.
start time
Required. Is a timestamp to begin logging time from. 8, 8:00, 800, 08:00, 0800
is all valid and mean the same thing.
end time
Required. Is a timestamp to begin logging time from. 8, 8:00, 800, 08:00, 0800
is all valid and mean the same thing.
break time
Optional. Is the total amount of minutes to deduct from the calculation. Enter 0
for no breaks.
timelog --purge
--purge
is a keyword.
The program will prompt for a string that needs to be typed out, after doing that there is no going back unless you have made backups.