canrylog
v0.5.1
Published
A personal time tracker
Readme
canrylog-cli
CLI version of Canrylog, another time tracking system.
Emacs version: https://gitlab.com/canrylog/canrylog.el
My take on time tracking.
Currently in experimental stage, developed with the assumption that I'm the only user.
Getting started
- Install the package
- By default, the tracking file will be put under
~/.canrylog. To change this, modify thepath.repoconfiguration option. canrylog switch <task>to start tracking timecanrylog switch Downtimeto switch to the task called “Downtime”, which by convention means clocked out.canrylog visitto edit the tracking file with your editor. Hand editing is error prone: make sure events are sorted correctly and the timestamps are in the right format. Each event is<timestamp> <task name>(two spaces between).
Technology stack
- Using Bun as the package manager and bundler. It's not that Bun has great DX compared to, say, Cargo, it's just that Node and TypeScript's DX is infuriating. Let me import with the normal syntax in your repl! Why does the TS language server not work without a project wide config file?! Please use hard links or symlinks to save space usage!
- Package distributed to npm
- argument handling done with commander
- Prompts with enquirer
- Manages configuration with conf
Install
npm install -g canrylogUse
[X]
canrylog about: print an about message for Canrylog[X]
canrylog help [command]: print help text, optionally for[command][X]
canrylog config: see all configuration keys. TODO: make this interactive[X]
canrylog config <key>: read value of configuration<key>[X]
canrylog config <key> <value>: set configuration<key>to<value>[X]
canrylog switch: select a task and switch to it[X]
canrylog switch <task>: switch to<task>at the current moment[X]
canrylog switch <task> <moment>: switch to<task>at the specified moment.<moment>should be an ISO 8601 timstamp like2021-12-30T01:02:03+0900; the format is specifically whatever supported by Luxon's fromISO method.- [X]
canrylog switch <task> --prompt: switch to<task>asking for the moment
- [X]
[X]
canrylog clock-out: Same as switching to the “Downtime” task, representing the state of not doing anything of note.[X]
canrylog status: print current task and status[X]
canrylog task <task>: print information about<task>[X]
canrylog moment <moment>: print information about<moment>
Git-based tracking file synchonization: removed in favor of just managing it in Emacs because the old implementation was fragile.
Implemented for debugging but might be useful in the future:
- [X]
canrylog list-tasks: print all available tasks - [X]
canrylog visit: edit the tracking file with$EDITOR - [ ]
canrylog rename-task <task> <newname>: rename<task>to<newname>
Configuration
Incomplete.
Other solutions
https://www.emacswiki.org/emacs/CategoryTimeTracking
- logtime: plain text, very similar in concept
timeclock.el: C-h ftimeclock-inRET- Org mode
- WakaTime,
wakatime-modeon MELPA - ActivityWatch,
activity-watch-modeon MELPA - harvestime: plain text as well, centered around vim
