{"id":24908970,"url":"https://github.com/sectore/timr-tui","last_synced_at":"2026-04-10T13:04:51.352Z","repository":{"id":266471370,"uuid":"895165567","full_name":"sectore/timr-tui","owner":"sectore","description":"TUI to organize your time: Pomodoro, Countdown, Timer, Event.","archived":false,"fork":false,"pushed_at":"2026-03-21T16:33:52.000Z","size":2583,"stargazers_count":313,"open_issues_count":2,"forks_count":20,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-03-22T05:52:01.706Z","etag":null,"topics":["pomodoro","ratatui","rust","tui"],"latest_commit_sha":null,"homepage":"","language":"Rust","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/sectore.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2024-11-27T17:16:56.000Z","updated_at":"2026-03-22T04:31:50.000Z","dependencies_parsed_at":null,"dependency_job_id":"89797835-b546-4936-9196-7d56456b9ce8","html_url":"https://github.com/sectore/timr-tui","commit_stats":{"total_commits":21,"total_committers":1,"mean_commits":21.0,"dds":0.0,"last_synced_commit":"b7d6a6c139a57053ebb38aa5c7e3ef3d176559fd"},"previous_names":["sectore/timr","sectore/timr-tui"],"tags_count":18,"template":false,"template_full_name":null,"purl":"pkg:github/sectore/timr-tui","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sectore%2Ftimr-tui","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sectore%2Ftimr-tui/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sectore%2Ftimr-tui/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sectore%2Ftimr-tui/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sectore","download_url":"https://codeload.github.com/sectore/timr-tui/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sectore%2Ftimr-tui/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31643456,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-10T07:40:12.752Z","status":"ssl_error","status_checked_at":"2026-04-10T07:40:11.664Z","response_time":98,"last_error":"SSL_read: 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":["pomodoro","ratatui","rust","tui"],"created_at":"2025-02-02T02:34:52.484Z","updated_at":"2026-04-10T13:04:51.345Z","avatar_url":"https://github.com/sectore.png","language":"Rust","readme":"# timr-tui\n\n[![crate.io](https://img.shields.io/crates/v/timr-tui)](https://crates.io/crates/timr-tui) [![CI](https://img.shields.io/github/actions/workflow/status/sectore/timr-tui/ci.yml)](https://github.com/sectore/timr-tui/actions/workflows/ci.yml) [![License](https://img.shields.io/crates/l/timr-tui)](./LICENSE) [![Built With Ratatui](https://img.shields.io/badge/Built_With-Ratatui-000?logo=ratatui\u0026logoColor=fff\u0026labelColor=000\u0026color=fff)](https://ratatui.rs/)\n\nTUI to organize your time: Pomodoro, Countdown, Timer, Event.\n\n- `[1] countdown` Use it for your workout, yoga/breathing sessions, meditation, handstand or whatever.\n- `[2] timer` Check the time on anything you are doing.\n- `[3] pomodoro` Organize your working time to be focused all the time by following the [Pomodoro Technique](https://en.wikipedia.org/wiki/Pomodoro_Technique).\n- `[4] event` Count the time for any event in the future or past.\n\n# Table of Contents\n\n- [Preview](./#preview)\n- [CLI](./#cli)\n- [Keybindings](./#keybindings)\n- [Installation](./#installation)\n- [Development](./#development)\n- [Misc](./#misc)\n- [Contributing](./#contributing)\n- [License](./#license)\n\n# Preview\n\n_(theme depends on your terminal preferences)_\n\n## Pomodoro\n\n\u003ca href=\"demo/pomodoro.gif\"\u003e\n  \u003cimg alt=\"pomodoro\" src=\"demo/pomodoro.gif\" /\u003e\n\u003c/a\u003e\n\n## Timer\n\n\u003ca href=\"demo/timer.gif\"\u003e\n  \u003cimg alt=\"pomodoro\" src=\"demo/timer.gif\" /\u003e\n\u003c/a\u003e\n\n## Countdown (_incl. [Mission Elapsed Time](https://en.wikipedia.org/wiki/Mission_Elapsed_Time)_)\n\n\u003ca href=\"demo/countdown.gif\"\u003e\n  \u003cimg alt=\"countdown\" src=\"demo/countdown.gif\" /\u003e\n\u003c/a\u003e\n\n## Event (_past/future_)\n\n\u003ca href=\"demo/event.gif\"\u003e\n  \u003cimg alt=\"event\" src=\"demo/event.gif\" /\u003e\n\u003c/a\u003e\n\n## Local time\n\n\u003ca href=\"demo/local-time.gif\"\u003e\n  \u003cimg alt=\"local time\" src=\"demo/local-time.gif\" /\u003e\n\u003c/a\u003e\n\n## Local time (_footer_)\n\n\u003ca href=\"demo/local-time-footer.gif\"\u003e\n  \u003cimg alt=\"local time at footer\" src=\"demo/local-time-footer.gif\" /\u003e\n\u003c/a\u003e\n\n## Toggle deciseconds\n\n\u003ca href=\"demo/decis.gif\"\u003e\n  \u003cimg alt=\"deciseconds\" src=\"demo/decis.gif\" /\u003e\n\u003c/a\u003e\n\n## Maximum (_`9999y`_ _`364d`_ _`23:59:59.9`_)\n\n\u003ca href=\"demo/timer-max.png\"\u003e\n  \u003cimg alt=\"maximum\" src=\"demo/timer-max.png\" /\u003e\n\u003c/a\u003e\n\n## Change style\n\n\u003ca href=\"demo/style.gif\"\u003e\n  \u003cimg alt=\"style\" src=\"demo/style.gif\" /\u003e\n\u003c/a\u003e\n\n## Menu\n\n\u003ca href=\"demo/menu.gif\"\u003e\n  \u003cimg alt=\"menu\" src=\"demo/menu.gif\" /\u003e\n\u003c/a\u003e\n\n# CLI\n\n```sh\ntimr-tui --help\n\nUsage: timr-tui [OPTIONS]\n\nOptions:\n  -c, --countdown \u003cCOUNTDOWN\u003e        Countdown time to start from. Formats: 'Yy Dd hh:mm:ss', 'Dd hh:mm:ss', 'Yy mm:ss', 'Dd mm:ss', 'Yy ss', 'Dd ss', 'hh:mm:ss', 'mm:ss', 'ss'. Examples: '1y 5d 10:30:00', '2d 4:00', '1d 10', '5:03'.\n  -w, --work \u003cWORK\u003e                  Work time to count down from. Formats: 'ss', 'mm:ss', 'hh:mm:ss'\n  -p, --pause \u003cPAUSE\u003e                Pause time to count down from. Formats: 'ss', 'mm:ss', 'hh:mm:ss'\n  -e, --event \u003cEVENT\u003e                Event date time and title (optional). Format: 'YYYY-MM-DD HH:MM:SS' or 'time=YYYY-MM-DD HH:MM:SS[,title=...]'. Examples: '2025-10-10 14:30:00' or 'time=2025-10-10 14:30:00,title=My Event'.\n  -d, --decis                        Show deciseconds.\n  -m, --mode \u003cMODE\u003e                  Mode to start with. [possible values: countdown, timer, pomodoro, event, localtime]\n  -s, --style \u003cSTYLE\u003e                Style to display time with. [possible values: full, light, medium, dark, thick, cross, braille]\n      --menu                         Open menu.\n  -v, --vim \u003cVIM\u003e                    Enable/disable Vim motions. [possible values: on, off]\n  -r, --reset                        Reset stored values to defaults.\n  -n, --notification \u003cNOTIFICATION\u003e  Enable/disable desktop notifications. Experimental. [possible values: on, off]\n      --blink \u003cBLINK\u003e                Enable/disable blink mode to animate a clock when it reaches its finished mode. [possible values: on, off]\n      --log [\u003cLOG\u003e]                  Directory for log file. If not set, standard application log directory is used (check README for details).\n  -h, --help                         Print help\n  -V, --version                      Print version\n```\n\nExtra option (if `--features sound` is enabled by local build only):\n\n```sh\n--sound \u003cSOUND\u003e                Path to sound file (.mp3 or .wav) to play as notification. Experimental.\n```\n\n# Keybindings\n\nNote: To enable Vim motions key binding, run with `--vim=on` once. It will be stored as part of settings, so only running once is needed. To disable, run `--vim=off`.\n\n## Menu\n\n| Key          | Description |\n| ------------ | ----------- |\n| \u003ckbd\u003em\u003c/kbd\u003e | Toggle menu |\n\n## Screens\n\n| Key          | Description                     |\n| ------------ | ------------------------------- |\n| \u003ckbd\u003e1\u003c/kbd\u003e | Pomodoro                        |\n| \u003ckbd\u003e2\u003c/kbd\u003e | Countdown                       |\n| \u003ckbd\u003e3\u003c/kbd\u003e | Timer                           |\n| \u003ckbd\u003e4\u003c/kbd\u003e | Event                           |\n| \u003ckbd\u003e0\u003c/kbd\u003e | Local Time                      |\n| \u003ckbd\u003e→\u003c/kbd\u003e | next screen                     |\n| \u003ckbd\u003e←\u003c/kbd\u003e | previous screen                 |\n| \u003ckbd\u003el\u003c/kbd\u003e | next screen _(Vim motions)_     |\n| \u003ckbd\u003eh\u003c/kbd\u003e | previous screen _(Vim motions)_ |\n\n## Controls\n\n| Key              | Description     |\n| ---------------- | --------------- |\n| \u003ckbd\u003espace\u003c/kbd\u003e | start/stop      |\n| \u003ckbd\u003er\u003c/kbd\u003e     | reset           |\n| \u003ckbd\u003ee\u003c/kbd\u003e     | enter edit mode |\n| \u003ckbd\u003eq\u003c/kbd\u003e     | quit            |\n\n**In `edit` mode only:**\n\n| Key                          | Description                         |\n| ---------------------------- | ----------------------------------- |\n| \u003ckbd\u003es\u003c/kbd\u003e                 | save changes                        |\n| \u003ckbd\u003eesc\u003c/kbd\u003e               | skip changes                        |\n| \u003ckbd\u003e←\u003c/kbd\u003e or \u003ckbd\u003e→\u003c/kbd\u003e | change selection                    |\n| \u003ckbd\u003eh\u003c/kbd\u003e or \u003ckbd\u003el\u003c/kbd\u003e | change selection _(Vim motions)_    |\n| \u003ckbd\u003e↑\u003c/kbd\u003e                 | edit to go up                       |\n| \u003ckbd\u003ek\u003c/kbd\u003e                 | edit to go up _(Vim motions)_       |\n| \u003ckbd\u003ectrl+↑\u003c/kbd\u003e            | edit to go up 10x                   |\n| \u003ckbd\u003ectrl+k\u003c/kbd\u003e            | edit to go up 10x _(Vim motions)_   |\n| \u003ckbd\u003e↓\u003c/kbd\u003e                 | edit to go down                     |\n| \u003ckbd\u003ej\u003c/kbd\u003e                 | edit to go down _(Vim motions)_     |\n| \u003ckbd\u003ectrl+↓\u003c/kbd\u003e            | edit to go down 10x                 |\n| \u003ckbd\u003ectrl+j\u003c/kbd\u003e            | edit to go down 10x _(Vim motions)_ |\n\n**In `Event` `edit` mode only:**\n\n| Key              | Description  |\n| ---------------- | ------------ |\n| \u003ckbd\u003eenter\u003c/kbd\u003e | save changes |\n| \u003ckbd\u003eesc\u003c/kbd\u003e   | skip changes |\n| \u003ckbd\u003etab\u003c/kbd\u003e   | switch input |\n\n**In `Pomodoro` screen only:**\n\n| Key                                    | Description                       |\n| -------------------------------------- | --------------------------------- |\n| \u003ckbd\u003ectrl+←\u003c/kbd\u003e or \u003ckbd\u003ectrl+→\u003c/kbd\u003e | switch work/pause                 |\n| \u003ckbd\u003ectrl+h\u003c/kbd\u003e or \u003ckbd\u003ectrl+l\u003c/kbd\u003e | switch work/pause _(Vim motions)_ |\n| \u003ckbd\u003ectrl+r\u003c/kbd\u003e                      | reset round                       |\n| \u003ckbd\u003ectrl+s\u003c/kbd\u003e                      | save initial value                |\n\n**In `Countdown` screen only:**\n\n| Key               | Description        |\n| ----------------- | ------------------ |\n| \u003ckbd\u003ectrl+e\u003c/kbd\u003e | edit by local time |\n| \u003ckbd\u003ectrl+s\u003c/kbd\u003e | save initial value |\n\n## Appearance\n\n| Key          | Description        |\n| ------------ | ------------------ |\n| \u003ckbd\u003e,\u003c/kbd\u003e | toggle styles      |\n| \u003ckbd\u003e.\u003c/kbd\u003e | toggle deciseconds |\n| \u003ckbd\u003e:\u003c/kbd\u003e | toggle local time  |\n\n# Installation\n\n## Cargo\n\n### From [crates.io](https://crates.io/crates/timr-tui)\n\n```sh\ncargo install timr-tui\n```\n\n### From GitHub repository\n\n```sh\ncargo install --git https://github.com/sectore/timr-tui\n```\n\n## Arch Linux\n\nInstall [from the AUR](https://aur.archlinux.org/packages/timr/):\n\n```sh\nparu -S timr\n```\n\n## Nix\n\n_Note:_ Currently `timr-tui` is [available on the `unstable` channel](https://search.nixos.org/packages?channel=unstable\u0026query=timr-tui) only.\n\n### Command line\n\n```sh\n# default (w/o sound)\nnix-env -iA nixpkgs.timr-tui\n# or w/ sound enabled\nnix-env -iA nixpkgs.timr-tui --arg timr-tui '(timr-tui.override { enableSound = true; })'\n```\n\n### Configuration\n\n```nix\n# default (w/o sound)\nenvironment.systemPackages = with pkgs; [\n  timr-tui\n];\n# or w/ sound enabled\nenvironment.systemPackages = with pkgs; [\n  (timr-tui.override { enableSound = true; })\n];\n```\n\n### Home Manager\n\n```nix\n# default (w/o sound)\nhome.packages = with pkgs; [\n  timr-tui\n];\n# or w/ sound enabled\nhome.packages = with pkgs; [\n  (timr-tui.override { enableSound = true; })\n];\n```\n\nSource at `nixpkgs`: \u003chttps://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/by-name/ti/timr-tui/package.nix\u003e\n\n## Release binaries\n\nPre-built artifacts are available to download from [latest GitHub release](https://github.com/sectore/timr-tui/releases).\n\n# Development\n\n## Requirements\n\n### Nix users (recommend)\n\n`cd` into root directory.\n\nIf you have [`direnv`](https://direnv.net) installed, run `direnv allow` once to install dependencies. In other case run `nix develop`.\n\n### Non Nix users\n\n- [`Rust`](https://www.rust-lang.org/learn/get-started)\n- [`Clippy`](https://github.com/rust-lang/rust-clippy)\n- [`rustfmt`](https://github.com/rust-lang/rustfmt)\n- [`dprint`](https://dprint.dev)\n- [`just`](https://just.systems)\n\n### Commands\n\n```sh\njust\n\nAvailable recipes:\n    default                  # list commands\n\n    [build]\n    build                    # build app [alias: b]\n\n    [demo]\n    demo-blink               # build demo: blink animation [alias: db]\n    demo-countdown           # build demo: countdown [alias: dc]\n    demo-countdown-met       # build demo: countdown + met [alias: dcm]\n    demo-decis               # build demo: deciseconds [alias: dd]\n    demo-event               # build demo: event [alias: de]\n    demo-local-time          # build demo: local time [alias: dlt]\n    demo-local-time-footer   # build demo: local time (footer) [alias: dltf]\n    demo-menu                # build demo: menu [alias: dm]\n    demo-pomodoro            # build demo: pomodoro [alias: dp]\n    demo-rocket-countdown    # build demo: rocket countdown [alias: drc]\n    demo-style               # build demo: styles [alias: ds]\n    demo-timer               # build demo: timer [alias: dt]\n\n    [dev]\n    run                      # run app [alias: r]\n    run-args args            # run app with arguments. It expects arguments as a string (e.g. \"-c 5:00\"). [alias: ra]\n    run-sound path           # run app while sound feature is enabled. It expects a path to a sound file. [alias: rs]\n    run-sound-args path args # run app while sound feature is enabled by adding a path to a sound file and other arguments as string (e.g. \"-c 5:00\"). [alias: rsa]\n\n    [misc]\n    format                   # format files [alias: f]\n    lint                     # lint [alias: l]\n\n    [test]\n    test                     # run tests [alias: t]\n```\n\n### Build\n\n- Linux\n\n```sh\nnix build\n# or for bulding w/ statically linked binaries\nnix build .#linuxStatic\n```\n\n- Windows (cross-compilation)\n\n```sh\nnix build .#windows\n```\n\n### Run tests\n\n```sh\ncargo test\n```\n\n# Misc\n\n## Persistant app state\n\nStored on file system:\n\n```sh\n# Linux\n~/.local/state/timr-tui/data/app.data\n# macOS\n/Users/{user}/Library/Application Support/timr-tui/data/app.data\n# Windows\nC:/Users/{user}/AppData/Local/timr-tui/data/app.data\n```\n\n## Logs\n\nTo get log output, start the app by passing `--log` to `timr-tui`. See [CLI](./#cli) for details.\n\nLogs will be stored in an `app.log` file at following locations:\n\n```sh\n# Linux\n~/.local/state/timr-tui/logs/app.log\n# macOS\n/Users/{user}/Library/Application Support/timr-tui/logs/app.log\n# `Windows`\nC:/Users/{user}/AppData/Local/timr-tui/logs/app.log\n```\n\nOptional: You can use a custom directory by passing it via `--log` arg.\n\n# Contributing\n\n[CONTRIBUTING.md](./CONTRIBUTING.md)\n\n# License\n\n[MIT License](./LICENSE)\n","funding_links":[],"categories":["💻 Apps","\u003ca name=\"Rust\"\u003e\u003c/a\u003eRust"],"sub_categories":["🚀 Productivity and Utilities"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsectore%2Ftimr-tui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsectore%2Ftimr-tui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsectore%2Ftimr-tui/lists"}