{"id":19272986,"url":"https://github.com/enzet/chronicle","last_synced_at":"2026-06-17T19:32:52.440Z","repository":{"id":88840833,"uuid":"567866435","full_name":"enzet/Chronicle","owner":"enzet","description":"A minimalist command-line journaling system for tracking daily activities, metrics, and insights","archived":false,"fork":false,"pushed_at":"2025-06-02T19:33:31.000Z","size":442,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-03T10:45:50.269Z","etag":null,"topics":["journaling","neovim","self-hosted","task-manager","vim"],"latest_commit_sha":null,"homepage":"","language":"Python","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/enzet.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-11-18T19:14:01.000Z","updated_at":"2025-06-02T19:33:35.000Z","dependencies_parsed_at":"2024-11-09T20:39:29.021Z","dependency_job_id":"d39bb242-6b1c-40fb-890e-dc6f88e84151","html_url":"https://github.com/enzet/Chronicle","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/enzet/Chronicle","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enzet%2FChronicle","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enzet%2FChronicle/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enzet%2FChronicle/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enzet%2FChronicle/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/enzet","download_url":"https://codeload.github.com/enzet/Chronicle/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enzet%2FChronicle/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34463552,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-17T02:00:05.408Z","response_time":127,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["journaling","neovim","self-hosted","task-manager","vim"],"created_at":"2024-11-09T20:39:25.785Z","updated_at":"2026-06-17T19:32:52.435Z","avatar_url":"https://github.com/enzet.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Chronicle\n\n\u003e A minimalist command-line journaling system for tracking daily activities,\nmetrics, and insights.\n\nChronicle is a lightweight tool that helps you systematically log and analyze\nyour daily life using simple, human-readable text files. It emphasizes privacy\nby storing all data locally while maintaining flexibility in how you record and\nreview your information.\n\n## Features\n\n  - Chronicle uses a **simple text format**: you can use any text editor with\n    our `.chr` file format.\n  - It is **privacy-first**: all data stored locally on your machine.\n  - You can **track multiple metrics**:\n      - daily activities and events,\n      - health and fitness metrics,\n      - tasks and goals,\n      - sleep patterns,\n      - custom metrics.\n  - Chronicle allows you to **generate insights**: analyze patterns and create\n    summaries.\n  - `.chr` files have a **flexible syntax**: intuitive format for quick entries.\n\n## Data Format\n\nChronicle uses plain text files with the `.chr` extension. The syntax is\ndesigned to be both human-readable and machine-parseable.\n\nEach line in the file is a separate record, that can be an event (or a task),\nan object definition, a special command, or a comment.\n\n### Events and Tasks\n\nEvents are activities that have occurred, while tasks are planned future events.\n\n\u003cpre\u003e\u003ccode\u003e\u003ci style=\"color: green;\"\u003e-- Comments start with `--`.\u003c/i\u003e\n\n\u003ci style=\"color: green;\"\u003e-- Completed events.\u003c/i\u003e\n\u003cb\u003epodcast\u003c/b\u003e @\u003cu\u003einner_french\u003c/u\u003e e147 00:00/45:00\n19:00/19:30 \u003cb\u003erun\u003c/b\u003e 5.2km\n\n\u003ci style=\"color: green;\"\u003e-- Tasks (prefixed with [ ] or [x]).\u003c/i\u003e\n[x] \u003cb\u003edo\u003c/b\u003e \u003ci\u003ethe dishes\u003c/i\u003e\n[ ] \u003cb\u003eclean\u003c/b\u003e @\u003cu\u003ebathroom\u003c/u\u003e\n\n\u003ci style=\"color: green;\"\u003e-- Future events (prefixed with \u003e\u003e\u003e).\u003c/i\u003e\n\u003e\u003e\u003e 20:00/ \u003cb\u003econcert\u003c/b\u003e @\u003cu\u003eradiohead\u003c/u\u003e\u003c/code\u003e\u003c/pre\u003e\n\n### Objects\n\nDefine reusable objects to simplify your entries:\n\n\u003cpre\u003e\u003ccode\u003e\u003cb\u003epodcast\u003c/b\u003e @\u003cu\u003einnerfrench\u003c/u\u003e = \u003ci\u003eInner French Podcast\u003c/i\u003e .fr\n\u003cb\u003ebook\u003c/b\u003e @\u003cu\u003edune\u003c/u\u003e = \u003ci\u003eDune\u003c/i\u003e by \u003ci\u003eFrank Herbert\u003c/i\u003e\u003c/code\u003e\u003c/pre\u003e\n\n### Special Commands\n\nDate entries help organize your journal chronologically:\n\n\u003cpre\u003e\u003ccode\u003e\u003cb\u003e2024-01-01\u003c/b\u003e \u003ci style=\"color: green;\"\u003e-- Sets the current date.\u003c/i\u003e\n\u003c/code\u003e\u003c/pre\u003e\n\n## Example\n\n### Chronicle file\n\n\u003cpre\u003e\u003ccode\u003e\u003cb\u003ebook\u003c/b\u003e @\u003cu\u003edune\u003c/u\u003e = \u003ci\u003eDune\u003c/i\u003e by \u003ci\u003eFrank Herbert\u003c/i\u003e .en /fiction 896p\n\u003cb\u003epodcast\u003c/b\u003e @\u003cu\u003einner_french\u003c/u\u003e = \u003ci\u003eInner French Podcast\u003c/i\u003e .fr\n\n\u003cb\u003e2000-01-01\u003c/b\u003e\n\n00:00/08:00 \u003cb\u003esleep\u003c/b\u003e\n09:00/09:30 \u003cb\u003erun\u003c/b\u003e 5.2km\n\n\u003cb\u003eread\u003c/b\u003e @\u003cu\u003edune\u003c/u\u003e 120/140p\n\u003cb\u003epodcast\u003c/b\u003e @\u003cu\u003einner_french\u003c/u\u003e e50 45:00\n\n\u003e\u003e\u003e 20:00/ \u003cb\u003econcert\u003c/b\u003e \u003ci\u003eRadiohead\u003c/i\u003e\n\n[x] \u003cb\u003ebuy\u003c/b\u003e \u003ci\u003emilk\u003c/i\u003e\n[ ] \u003cb\u003epay\u003c/b\u003e for \u003ci\u003einternet\u003c/i\u003e 15usd\n\u003c/code\u003e\u003c/pre\u003e\n\n### Text representation\n\nObjects:\n  - Book _Dune_ by Frank Herbert, 896 pages, in English, fiction.\n  - Podcast _Inner French Podcast_ in French.\n\n1 January 2000.\n  - Events:\n    - 00:00—08:00 Sleep.\n    - 09:00—09:30 Run 5.2 km.\n    - Read _Dune_ from page 120 to 140.\n    - Listen to _Inner French Podcast_ episode 50 for 45 minutes.\n  - Planned:\n    - 20:00 Concert _Radiohead_.\n  - Tasks:\n    - [x] Buy milk.\n    - [ ] Pay for internet $15.\n\n## Commands\n\n### `view` — Visualize data\n\n```shell\nchronicle --input \u003cfiles\u003e view [--style \u003cstyle\u003e] [--colors light|dark|no] \u003csubcommand\u003e\n```\n\n#### `view language` — Language learning statistics\n\n```shell\nchronicle --input \u003cfiles\u003e view language \\\n    [--form table|plot] \\\n    [--file \u003coutput file\u003e] \\\n    [--period day|week|month|year] \\\n    [--smooth \u003cdays\u003e] \\\n    [--interval \u003cdays\u003e] \\\n    [--plot-type fill|stack|bar|percent] \\\n    [--margin \u003chours\u003e] \\\n    [--exclude-languages \u003clang\u003e ...] \\\n    [--services \u003cservice\u003e ...] \\\n    [--cumulative]\n```\n\n#### `view travel` — Travel map\n\n```shell\nchronicle --input \u003cfiles\u003e view travel [--svg-output \u003cfile\u003e]\n```\n\n#### `view books` — Book list\n\n```shell\nchronicle --input \u003cfiles\u003e view books [--year \u003cyear\u003e] [--title \u003ctitle\u003e] [--finished]\n```\n\n#### `view podcasts` — Podcast list\n\n```shell\nchronicle --input \u003cfiles\u003e view podcasts [--title \u003ctitle\u003e]\n```\n\n#### `view sport` — Sport activity plot\n\n```shell\nchronicle --input \u003cfiles\u003e view sport\n```\n\n#### `view objects` — Object list as HTML\n\n```shell\nchronicle --input \u003cfiles\u003e view objects\n```\n\n### Other commands\n\n| Command | Description |\n|---|---|\n| `timeline` | Print the full timeline. |\n| `summary` | Print a summary of all events. |\n| `shows` | Show TV show progress. |\n| `movies` | List watched movies. |\n| `expired` | Show expired tasks. |\n| `dishes` | Show dishes log. |\n| `objects` | List all objects. |\n| `graph` | Build an object graph. |\n| `interpret` | Interactive mode: read commands from stdin. |\n\n## Requirements\n\n- Python 3.12+.\n\n## Installation\n\n```shell\npip install .\n```\n\n## Usage\n\nFor the most detailed help, run:\n\n```shell\nchronicle --help\n```\n\nCommon usage:\n\n```shell\nchronicle \\\n    --input \u003cinput Chronicle files\u003e \\\n    \u003cimport options\u003e \\\n    \u003ccommand\u003e\n```\n\nExample:\n\n```shell\nchronicle \\\n    --input timeline.chr \\\n    --import-wikimedia User1@en.wikipedia.org User2@wikidata.org \\\n    --import-memrise memrise.html \\\n    view language --form table\n```\n\n### Importing Data\n\n- `--import-memrise`: exported Memrise `.html` files. File can be requested at\n  [Memrise settings](https://app.memrise.com/settings/) by \"Download Personal\n  Data\" button.\n- `--import-duome`: exported Duome `.txt` files.\n- `--import-wikimedia`: import contributions from Wikimedia projects.\n  Argument format is `\u003cusername\u003e@\u003curl\u003e`, e.g. `User1@en.wikipedia.org`\n  or `User2@wikidata.org`.\n\n## Vim Syntax Highlighting\n\nChronicle can generate a Vim syntax file for `.chr` files that highlights event\ntypes, object definitions, timestamps, tags, languages, and other values.\n\n### How it works\n\nEvery time `chronicle` runs it writes a generated syntax file to\n`syntax/chronicle.vim` in the repository and, if `~/.vim/syntax/` exists, also\nto `~/.vim/syntax/chronicle.vim`. The generated file is built from the static\nheader `syntax/chronicle_header.vim` with auto-generated rules for every known\nevent and object type appended.\n\n### Setup\n\n1. Associate the `.chr` extension with the `chronicle` filetype. Add this line\n   to your `~/.vimrc` or `~/.config/nvim/init.vim`:\n\n   ```vim\n   au BufRead,BufNewFile *.chr set filetype=chronicle\n   ```\n\n2. Copy the pre-generated syntax file into your Vim syntax directory:\n\n   ```shell\n   cp syntax/chronicle.vim ~/.vim/syntax/chronicle.vim\n   ```\n\n   After that, re-running `chronicle` will keep `~/.vim/syntax/chronicle.vim`\n   up to date automatically.\n\n### What is highlighted\n\n| Element | Examples |\n|---|---|\n| Event and object types | `sleep`, `run`, `book`, `podcast` |\n| Timestamps and dates | `2024-01-01`, `09:00/09:30` |\n| Object references | `@inner_french` |\n| Languages | `.fr`, `.en` |\n| Tags | `!work`, `!every_day` |\n| Subjects | `/fiction`, `/language/de` |\n| Intervals and durations | `10:00/45:00`, `1:52:00` |\n| Season and episode numbers | `s2`, `e15` |\n| URLs | `https://...` |\n| Comments | `-- ...` |\n| Task markers | `[ ]`, `[x]` |\n\n## Neovim Integration\n\nChronicle provides a Lua script (`scripts/chronicle.lua`) for Neovim to help\nmanage tasks directly within your `.chr` files. This script adds convenient\ncommands and key mappings for working with tasks in your journal.\n\n### Available Neovim Task Commands\n\n- `:ChronicleStart` or \u003ckbd\u003eSpace\u003c/kbd\u003e \u003ckbd\u003es\u003c/kbd\u003e\n  - Changes the event start time to the current time.\n\n- `:ChronicleDone` or \u003ckbd\u003eSpace\u003c/kbd\u003e \u003ckbd\u003ed\u003c/kbd\u003e\n  - Marks the current task as done (completes the task under the cursor).\n  - Changes the event end time to the current time.\n  - If the task is recurring (e.g., contains `!every_day`), it will\n    automatically schedule the next occurrence on the appropriate date.\n\n- `:ChroniclePause` or \u003ckbd\u003eSpace\u003c/kbd\u003e \u003ckbd\u003ep\u003c/kbd\u003e\n  - Marks the current task as done and creates a new identical task.\n\nThese commands are available after sourcing the script in Neovim:\n\n```vim\n:source \u003cpath to Chronicle\u003e/scripts/chronicle.lua\n```\n\n### Example Usage\n\n1. Place your cursor on a task line in a `.chr` file.\n2. Press \u003ckbd\u003eSpace\u003c/kbd\u003e \u003ckbd\u003ed\u003c/kbd\u003e to mark it as done, or\n   \u003ckbd\u003eSpace\u003c/kbd\u003e \u003ckbd\u003es\u003c/kbd\u003e to start the task.\n3. If the task is recurring, the script will automatically insert the next\n   occurrence on the correct date.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fenzet%2Fchronicle","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fenzet%2Fchronicle","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fenzet%2Fchronicle/lists"}