{"id":15588203,"url":"https://github.com/qbart/timelog","last_synced_at":"2026-03-05T04:03:33.112Z","repository":{"id":57516295,"uuid":"238054179","full_name":"qbart/timelog","owner":"qbart","description":"Time logging in CLI","archived":false,"fork":false,"pushed_at":"2022-09-06T21:29:29.000Z","size":1037,"stargazers_count":9,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-10-07T14:48:44.840Z","etag":null,"topics":["cli","csv","fzf","go","golang","linux","polybar","timelog","timelogging"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/qbart.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-02-03T20:22:00.000Z","updated_at":"2024-04-05T15:32:09.000Z","dependencies_parsed_at":"2022-08-30T01:41:14.887Z","dependency_job_id":null,"html_url":"https://github.com/qbart/timelog","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/qbart/timelog","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qbart%2Ftimelog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qbart%2Ftimelog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qbart%2Ftimelog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qbart%2Ftimelog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/qbart","download_url":"https://codeload.github.com/qbart/timelog/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qbart%2Ftimelog/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30109077,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-05T03:40:26.266Z","status":"ssl_error","status_checked_at":"2026-03-05T03:39:15.902Z","response_time":93,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","csv","fzf","go","golang","linux","polybar","timelog","timelogging"],"created_at":"2024-10-02T22:21:50.437Z","updated_at":"2026-03-05T04:03:33.003Z","avatar_url":"https://github.com/qbart.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# timelog\n\n[![LICENSE](https://img.shields.io/github/license/qbart/timelog)](https://github.com/qbart/timelog/blob/master/LICENSE)\n[![Language](https://img.shields.io/badge/Language-Go-blue.svg)](https://golang.org/)\n[![Go Report Card](https://goreportcard.com/badge/github.com/qbart/timelog)](https://goreportcard.com/report/github.com/qbart/timelog)\n[![Last commit](https://img.shields.io/github/last-commit/qbart/timelog)](https://github.com/qbart/timelog/commits/master)\n\n\n```\nTime logging in CLI\n\nUsage:\n  timelog [flags]\n  timelog [command]\n\nAvailable Commands:\n  adjust       Adjusts time between entries\n  archive      Archive data file\n  autocomplete Autocomplete for entries\n  clear        Clears all entries\n  help         Help about any command\n  polybar      Polybar configuration\n  qlist        Prints all quicklist entries\n  start        Starts a new time entry\n  stop         Stops active time entry\n  version      Prints software version\n\nFlags:\n  -h, --help   help for timelog\n\nUse \"timelog [command] --help\" for more information about a command.\n```\n\n## Install\n\n```\ngit clone git@github.com:qbart/timelog.git\ncd timelog\nmake build\n```\n\n## Usage\n\n### Print current timelog\n\n```\ntimelog\n```\n\n![timelog](./doc/timelog.png)\n\n\n### Start next task\n\n```\ntimelog start \u003ccomment\u003e\n```\n\n### Stop current task\n\n```\ntimelog stop\n```\n\n### Clear\n\n```\ntimelog clear\n```\n\n1. Current timelog will be printed.\n2. Once confirmed local database will be cleared :warning:.\n\n### Adjust time\n\n```\ntimelog adjust\n```\n\n1. Console UI will start (use arrows or hjkl).\n2. Enter to continue.\n3. After changes you will see git-like diff to accept/reject changes.\n\n![timelog](./doc/timelog_adjust_step1.png)\n![timelog](./doc/timelog_adjust_step2.png)\n\n### Archive\n\n```\ntimelog archive\n```\n\n1. Current timelog will be printed.\n2. Once confirmed file will be moved to archive (`~/.config/timelog/archive/`)\n\n## Configuration\n\n### Install autocompleter (bash + fzf using complete)\n\nTested only in Ubuntu (PR appreciated for other OSes)\n```\ntimelog autocomplete install \u003e\u003e ~/.bash_profile\n```\n\n```\ntimelog [hit TAB]\n```\n![timelog](./doc/timelog_autocomplete_cmds.png)\n\n### Quicklist\n\nQuicklist is a data source for autocompleter (fzf). Tasks should not contain whitespaces.\n\n```\nvim ~/.config/timelog/config.ini\n```\n\n```\n[quicklist]\ntask-1\ntask-2\ntask-3\nhello\n```\n\n```\ntask start [hit TAB]\n```\n![timelog](./doc/timelog_autocomplete_qlist.png)\n\n## Polybar (or any other bar) integration\n\nYou can integrate timelog with your custom bar:\n```\ntimelog polybar format \"FORMAT\"\n```\n\n`FORMAT` exposes following vars in `go` template:\n```go\ntype polybarItem struct {\n\tComment         string // task comment\n\tDuration        string // last task duration\n\tTotal           string // tasks total duration\n\tCount           int    // task count\n\tCountNotZero    bool   //\n\tTotalGtDuration bool   // true when total \u003e duration\n}\n```\n\n### Polybar example\n\n```\n[module/timelog]\ntype=custom/script\ninterval=10\nexec=timelog polybar format \"{{if .CountNotZero }}%{F#011814}%{B#24f5bf} {{.Comment}} %{B-}%{B#0adba6} {{.Duration}} %{B-}{{ if .TotalGtDuration}}%{B#08aa81} {{.Total}} %{B-}{{ end }}%{F-}{{ end }}\"\n```\n\n#### When duration equals total\n![timelog](./doc/timelog_polybar_same.png)\n#### When duration does not equal total\n![timelog](./doc/timelog_polybar.png)\n\n## Config\n\n## How to contribute?\n\nAsk first before any implementation.\nPossible todos:\n- edit comments `timelog edit` (similar to `timelog adjust` editor)\n- quicklist management from CLI ie. `timelog qlist.add ENTRY`\n- multi-autocomplete i.e `timelog start [TAB]`, then `timelog start autocompleted-1 [TAB]` \u003c- currently this will replace `autocompleted-1` with new qlist entry, goal is to append next one\n- autocomplete for other OSes (OSx integration anyone?)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fqbart%2Ftimelog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fqbart%2Ftimelog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fqbart%2Ftimelog/lists"}