{"id":17184811,"url":"https://github.com/liskin/arbtt-chart","last_synced_at":"2025-04-13T18:14:06.150Z","repository":{"id":57411302,"uuid":"344086130","full_name":"liskin/arbtt-chart","owner":"liskin","description":"Plot charts from arbtt-stats to terminal","archived":false,"fork":false,"pushed_at":"2024-06-16T21:36:45.000Z","size":105,"stargazers_count":18,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-27T08:58:24.395Z","etag":null,"topics":["arbtt","liskin-cookiecutter-python-cli","pandas","python","terminal"],"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/liskin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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}},"created_at":"2021-03-03T10:23:04.000Z","updated_at":"2024-09-19T12:16:26.000Z","dependencies_parsed_at":"2023-12-26T16:04:07.621Z","dependency_job_id":"2d458a9f-7939-453d-adf6-9112b299dab2","html_url":"https://github.com/liskin/arbtt-chart","commit_stats":{"total_commits":65,"total_committers":2,"mean_commits":32.5,"dds":0.06153846153846154,"last_synced_commit":"f2f3ccc344392a5e702eb6f2c2ff530b4d3d7a5f"},"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/liskin%2Farbtt-chart","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/liskin%2Farbtt-chart/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/liskin%2Farbtt-chart/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/liskin%2Farbtt-chart/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/liskin","download_url":"https://codeload.github.com/liskin/arbtt-chart/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248495621,"owners_count":21113660,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["arbtt","liskin-cookiecutter-python-cli","pandas","python","terminal"],"created_at":"2024-10-15T00:44:28.862Z","updated_at":"2025-04-13T18:14:06.128Z","avatar_url":"https://github.com/liskin.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# arbtt-chart\n\n[![PyPI Python Version badge](https://img.shields.io/pypi/pyversions/arbtt-chart)](https://pypi.org/project/arbtt-chart/)\n[![PyPI Version badge](https://img.shields.io/pypi/v/arbtt-chart)](https://pypi.org/project/arbtt-chart/)\n![License badge](https://img.shields.io/github/license/liskin/arbtt-chart)\n\n## Overview\n\n**Textual chart for [arbtt][], the automatic, rule-based time tracker.**\n\nSimilar to [arbtt-graph][], just in plain monospace text.\n\n![demo](https://user-images.githubusercontent.com/300342/109856066-57afba80-7c59-11eb-8771-9612ce478945.png)\n\n(The above screenshot is generated using my [liskin-arbtt-stats][] which\nprovides a few handy commands and combines data from multiple X sessions and\nStrava.)\n\nRaw `arbtt-stats` output for the same time period looks something like this:\n\n![arbtt-stats](https://user-images.githubusercontent.com/300342/109858182-caba3080-7c5b-11eb-890e-5bb9179bbd00.png)\n\n[arbtt]: http://arbtt.nomeata.de/\n[arbtt-graph]: https://github.com/rejuvyesh/arbtt-graph\n[liskin-arbtt-stats]: https://github.com/liskin/dotfiles/blob/home/bin/liskin-arbtt-stats\n\n## Getting started\n\n1. [Install arbtt](http://arbtt.nomeata.de/#install) and make sure\n   `arbtt-capture` runs in your graphical login session.\n\n2. Configure arbtt rules in `~/.arbtt/categorize.cfg`.\n   See [Configuring the arbtt categorizer][], [Effective Use of Arbtt][], and\n   [sample categorize.cfg for arbtt-graph][].\n\n3. [Install arbtt-chart](#installation).\n\n4. Try `arbtt-stats --output-format=csv --each-category | arbtt-chart` or\n   `arbtt-stats --output-format=csv --category=Graph | arbtt-chart`\n\n[Configuring the arbtt categorizer]: http://arbtt.nomeata.de/doc/users_guide/configuration.html\n[Effective Use of Arbtt]: http://arbtt.nomeata.de/doc/users_guide/effective-use.html\n[sample categorize.cfg for arbtt-graph]: https://github.com/rejuvyesh/arbtt-graph/blob/master/categorize.cfg\n\n## Installation\n\nUsing [pipx][]:\n\n```\npipx ensurepath\npipx install arbtt-chart\n```\n\nTo keep a local git clone around:\n\n```\ngit clone https://github.com/liskin/arbtt-chart\nmake -C arbtt-chart pipx\n```\n\nAlternatively, if you don't need the isolated virtualenv that [pipx][]\nprovides, feel free to just:\n\n```\npip install arbtt-chart\n```\n\nOr, since the only dependency is [pandas][], you can just `sudo apt install\npython3-pandas` and run `arbtt_chart.py` directly. :-)\n\n[pipx]: https://github.com/pypa/pipx\n[pandas]: https://pandas.pydata.org/\n\n## Usage\n\n\u003c!-- include tests/readme/help.md --\u003e\n\u003c!-- common\n    $ . \"$TESTDIR\"/common.sh\n--\u003e\n\n\u003c!-- argparse \u003c 3.10 compat: https://bugs.python.org/issue9694\n    $ function arbtt-chart {\n    \u003e   command arbtt-chart \"$@\" | sed -e 's/optional arguments:/options:/'\n    \u003e }\n--\u003e\n\n    $ arbtt-chart --help\n    usage: arbtt-chart [-h] [--no-stacked] [--subtags] [--totals-re RE]\n    \n    Plot charts from arbtt-stats to terminal. Expects `arbtt-stats --output-\n    format=csv --category=…` or `arbtt-stats --output-format=csv --each-category`\n    output on stdin.\n    \n    options:\n      -h, --help      show this help message and exit\n      --no-stacked    don't stack bar chart\n      --subtags       recognize subtags (separated by '-') and sort them together\n      --totals-re RE  totals row regexp, default: ^\\(total time\\)$\n\u003c!-- end include tests/readme/help.md --\u003e\n\n## Examples\n\n### single category\n\n```\n$ arbtt-stats --filter='$date \u003e= 2021-03-0220:00 \u0026\u0026 $date \u003c 2021-03-0303:00' \\\n\u003e             --min-percentage=2 --category=Activity --output-format=csv \\\n\u003e | arbtt-chart\nActivity                                                                        \n════════                                                                        \nProj-arbttⁱ          03:11:40  ███████████▓██████████▓██████████▓██▏········÷···\nChat                 00:30:20  ···········÷··········÷··········÷··█████▊···÷···\n(8 entries omitted)  00:15:40  ···········÷··········÷··········÷·······▕██▊÷···\nWeb-Social           00:08:20  ···········÷··········÷··········÷··········▐▓▏··\nWeb-otherⁱ           00:06:40  ···········÷··········÷··········÷···········÷█▍·\nWeb-HN               00:06:20  ···········÷··········÷··········÷···········÷·▐▊\n(unmatched time)     00:01:20  ···········÷··········÷··········÷···········÷··▕\n                                                                                \n(total time)         04:20:20  ███████████▓██████████▓██████████▓███████████▓███\n```\n\n### single category, subtags\n\n```\n$ arbtt-stats --filter='$date \u003e= 2021-03-0220:00 \u0026\u0026 $date \u003c 2021-03-0303:00' \\\n\u003e             --min-percentage=2 --category=Activity --output-format=csv \\\n\u003e | arbtt-chart --subtags\nActivity                                                                        \n════════                                                                        \nProj                arbttⁱ  03:11:40  █████████▓█████████▓█████████▓█·······÷···\nChat                        00:30:20  ·········÷·········÷·········÷▕████▊··÷···\nWeb                 Social  00:08:20  ·········÷·········÷·········÷·····▕█▏÷···\n                    otherⁱ  00:06:40  ·········÷·········÷·········÷·······█▏···\n                    HN      00:06:20  ·········÷·········÷·········÷········▓▏··\n(8 entries omitted)         00:15:40  ·········÷·········÷·········÷········÷██▋\n(unmatched time)            00:01:20  ·········÷·········÷·········÷········÷··▕\n                                                                                \n(total time)                04:20:20  █████████▓█████████▓█████████▓████████▓███\n```\n\n### multiple categories\n\n```\n$ arbtt-stats --filter='$date \u003e= 2021-03-0220:00 \u0026\u0026 $date \u003c 2021-03-0303:00' \\\n\u003e             --min-percentage=2 --each-category --output-format=csv \\\n\u003e | arbtt-chart\nActivity                                                                        \n════════                                                                        \nProj-arbttⁱ          03:11:40  ███████████▓██████████▓██████████▓██▏········÷···\nChat                 00:30:20  ···········÷··········÷··········÷··█████▊···÷···\n(8 entries omitted)  00:15:40  ···········÷··········÷··········÷·······▕██▊÷···\nWeb-Social           00:08:20  ···········÷··········÷··········÷··········▐▓▏··\nWeb-otherⁱ           00:06:40  ···········÷··········÷··········÷···········÷█▍·\nWeb-HN               00:06:20  ···········÷··········÷··········÷···········÷·▐▊\n(unmatched time)     00:01:20  ···········÷··········÷··········÷···········÷··▕\n                                                                                \n(total time)         04:20:20  ███████████▓██████████▓██████████▓███████████▓███\n                                                                                \nDesktop                                                                         \n═══════                                                                         \n4_arbtt              02:21:40  ███████████▓██████████▓███▊······÷···········÷···\n6_arbtt_web          00:50:20  ···········÷··········÷···▐██████▓██·········÷···\n1_irc                00:34:00  ···········÷··········÷··········÷··██████▌··÷···\n2_web                00:34:00  ···········÷··········÷··········÷········▐██▓███\n(1 entries omitted)  00:00:20  ···········÷··········÷··········÷···········÷··▕\n                                                                                \n(total time)         04:20:20  ███████████▓██████████▓██████████▓███████████▓███\n                                                                                \nProgram                                                                         \n═══════                                                                         \nurxvt                02:38:00  ███████████▓██████████▓██████▊···÷···········÷···\ngoogle-chrome        01:21:40  ···········÷··········÷······▐███▓██████████▉÷···\napp_element_io       00:14:40  ···········÷··········÷··········÷···········▓█▉·\n(3 entries omitted)  00:06:00  ···········÷··········÷··········÷···········÷·▕█\n                                                                                \n(total time)         04:20:20  ███████████▓██████████▓██████████▓███████████▓███\n```\n\n### custom inputs\n\n\u003c!-- include tests/readme/custom.md --\u003e\n\u003c!-- common\n    $ . \"$TESTDIR\"/common.sh\n--\u003e\n\n    $ arbtt-chart --totals-re='^\\(' \u003c\u003cEND\n    \u003e Tag,Time\n    \u003e Act:Work,02:30:00\n    \u003e Act:Social,01:20:00\n    \u003e Act:Mail,00:20:00\n    \u003e Act:Movie,01:30:00\n    \u003e (screen),05:40:00\n    \u003e \n    \u003e Tag,Time\n    \u003e Act:Sport,3600\n    \u003e Act:Commute,1800\n    \u003e (outside),5400\n    \u003e END\n    Act                                                                             \n    ═══                                                                             \n    Work       02:30:00  ████████▓███████▓███▋···÷·······÷········÷·······÷·······÷·\n    Movie      01:30:00  ········÷·······÷···▐███▓███████▉········÷·······÷·······÷·\n    Social     01:20:00  ········÷·······÷·······÷·······▕████████▓█▊·····÷·······÷·\n    Sport      01:00:00  ········÷·······÷·······÷·······÷········÷·▕█████▓██·····÷·\n    Commute    00:30:00  ········÷·······÷·······÷·······÷········÷·······÷··████▏÷·\n    Mail       00:20:00  ········÷·······÷·······÷·······÷········÷·······÷······█▓▊\n                                                                                    \n    (screen)   05:40:00  ████████▓███████▓███████▓███████▓████████▓████▊··÷·······÷·\n    (outside)  01:30:00  ████████▓███▍···÷·······÷·······÷········÷·······÷·······÷·\n\u003c!-- end include tests/readme/custom.md --\u003e\n\n### custom inputs, multiple tables at same scale\n\n\u003c!-- include tests/readme/custom-multitable.md --\u003e\n\u003c!-- common\n    $ . \"$TESTDIR\"/common.sh\n--\u003e\n\n    $ arbtt-chart \u003c\u003cEND\n    \u003e Tag,Time\n    \u003e Screen:Work,02:30:00\n    \u003e Screen:Social,01:20:00\n    \u003e Screen:Mail,00:20:00\n    \u003e Screen:Movie,01:30:00\n    \u003e (total time),05:40:00\n    \u003e \n    \u003e Tag,Time\n    \u003e Outside:Sport,3600\n    \u003e Outside:Commute,1800\n    \u003e (total time),5400\n    \u003e END\n    Screen                                                                          \n    ══════                                                                          \n    Work          02:30:00  █████████▓█████████▓████▊····÷·········÷·········÷······\n    Movie         01:30:00  ·········÷·········÷····▐████▓█████████▍·········÷······\n    Social        01:20:00  ·········÷·········÷·········÷·········▐█████████▓██▊···\n    Mail          00:20:00  ·········÷·········÷·········÷·········÷·········÷··▐██▉\n                                                                                    \n    (total time)  05:40:00  █████████▓█████████▓█████████▓█████████▓█████████▓██████\n                                                                                    \n    Outside                                                                         \n    ═══════                                                                         \n    Sport         01:00:00  █████████▓·········÷·········÷·········÷·········÷······\n    Commute       00:30:00  ·········▕████▊····÷·········÷·········÷·········÷······\n                                                                                    \n    (total time)  01:30:00  █████████▓████▉····÷·········÷·········÷·········÷······\n\u003c!-- end include tests/readme/custom-multitable.md --\u003e\n\n## Contributing\n\n### Code\n\nWe welcome bug fixes, (reasonable) new features, documentation improvements,\nand more. Submit these as GitHub pull requests. Use GitHub issues to report\nbugs and discuss non-trivial code improvements; alternatively, get in touch\nvia [IRC/Matrix/Fediverse](https://work.lisk.in/contact/).\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for more details about the code base\n(including running tests locally).\n\nNote that this project was born out of a desire to solve a problem I was\nfacing. While I'm excited to share it with the world, keep in mind that I'll\nbe prioritizing features and bug fixes that align with my personal use cases.\nThere may be times when I'm busy with other commitments and replies to\ncontributions might be delayed, or even occasionally missed. Progress may come\nin bursts. Adjust your expectations accordingly.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fliskin%2Farbtt-chart","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fliskin%2Farbtt-chart","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fliskin%2Farbtt-chart/lists"}