{"id":17102117,"url":"https://github.com/netgusto/tax","last_synced_at":"2025-04-13T00:36:42.358Z","repository":{"id":43332097,"uuid":"277659527","full_name":"netgusto/tax","owner":"netgusto","description":"CLI Task List Manager","archived":false,"fork":false,"pushed_at":"2024-08-20T08:27:02.000Z","size":1546,"stargazers_count":16,"open_issues_count":2,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-13T00:36:36.279Z","etag":null,"topics":["cli","cli-task","markdown","org-mode","prompt","rust","shell","task","task-manager","tmux-status","todo"],"latest_commit_sha":null,"homepage":"https://crates.io/crates/tax","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/netgusto.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-07-06T22:13:30.000Z","updated_at":"2024-10-15T09:59:32.000Z","dependencies_parsed_at":"2022-07-21T22:17:53.048Z","dependency_job_id":null,"html_url":"https://github.com/netgusto/tax","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netgusto%2Ftax","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netgusto%2Ftax/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netgusto%2Ftax/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netgusto%2Ftax/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/netgusto","download_url":"https://codeload.github.com/netgusto/tax/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248650415,"owners_count":21139671,"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":["cli","cli-task","markdown","org-mode","prompt","rust","shell","task","task-manager","tmux-status","todo"],"created_at":"2024-10-14T15:28:13.756Z","updated_at":"2025-04-13T00:36:42.338Z","avatar_url":"https://github.com/netgusto.png","language":"Rust","readme":"# tax, CLI Task List Manager\n\nDisplays / manages the tasks in `~/tasks.md`, or from the file pointed by `$TAX_FILE` if set.\n\nTasks are markdown:\n\n```markdown\n# Things to do\n\n- [x] Do the laundry\n- [ ] **Call mom**\n- [ ] Send that email\n```\n\n**tax** offers basic operations to manage a task list from the CLI.\n\n![](assets/demo.gif)\n\n\n## Build/Install\n\nBuilding and installing requires Rust: https://www.rust-lang.org/tools/install\n\n```sh\ncargo install tax\n```\n\n## Task file format\n\n### Task\n\nTasks are single text lines.\n\nOpen tasks are with prefixed with `- [ ]`. Completed tasks are prefixed with `- [x]`.\n\n```markdown\n- [ ] This is an open task\n- [x] This is a completed task\n```\n\n### Comment in task\n\nTasks can have comments. This is useful to keep the task name short while providing detailed information.\n\n```markdown\n- [ ] Do this thing // this a comment; see http://example.com/issue/#555\n```\n\nA comment is signaled by `//`, except when immediately preceded by `:`. That way, URLS can be included in tasks without being parsed as comments.\n\nFor instance, this task does not have a comment:\n\n```markdown\n- [ ] http://github.com/tax/issues\n```\n\n### Focused task\n\nTasks in bold markup are focused. They will be displayed with priority over non focused tasks when a subset of the task list is displayed.\n\n```markdown\n- [ ] **This is a focused task**\n```\n\nFocused tasks can have a comment; in that case, only the task name is focused, not the comment\n\n```markdown\n- [ ] **This is a focused task** // with a comment, outside of the focus\n```\n\n### Section\n\nA task file can optionnaly feature sections, subdivizing the task list in sub-lists.\n\nA section is denoted by a markdown Header of any level.\n\nWhen the task file contains only one section, **tax** will behave the same as without any section.\n\n```\n# Job\n\n- [ ] Send that email\n\n## Perso\n\n- [ ] Fix the roof\n- [ ] Prepare Korean BBQ\n```\n\nSections can be focused. When a section is focused, **tax** will display only the tasks it contains.\n\n## Commands\n\n#### `tax list [-a|--all]`\n\nAlias `tax`, `tax ls`.\n\nPrint all open tasks of the list, or of the focused section if any.\n\nIf `-a|--all` is set, all open tasks will be listed, regardless of section focus.\n\n#### `tax current`\n\nPrint the first open (focused if any) task of the list. Useful in prompt or tmux status.\n\n#### `tax cycle`\n\nLike `tax current`, but changes task every minute if no task is focused.\n\n#### `tax cat`\n\nAlias `tax view`.\n\nPrint the content of the task file without any processing.\n\n#### `tax check $TASK_NUM` and `tax uncheck $TASK_NUM`\n\nChecks/Unchecks the task corresponding to the given number `$TASK_NUM`.\n\n#### `tax focus $TASK_NUM` and `tax blur $TASK_NUM`\n\nFocuses/Blurs the task corresponding to the given number `$TASK_NUM`.\n\nA focused task is a bold task in markdown formatting.\n\nEx:\n\n```markdown\n- [ ] **This is a focused task**\n```\n\nFocused tasks will be displayed with priority over non focused tasks by the `tax current` and `tax cycle` commands.\n\n#### `tax focus $SECTION` and `tax blur $SECTION`\n\nFocuses/Blurs the section corresponding to the given name `$SECTION`.\n\nA focused section is a bold header in markdown formatting.\n\nEx:\n\n```markdown\n# **This is a focused section**\n- [ ] Some task\n```\n\nWhen a section is focused, **tax** will display the tasks of this section only.\n\n#### `tax add [-s \"section\"|--section \"section\"] \"The task\"`\n\nAliases: `tax push`, `tax prepend`.\n\nAdds the given task to the task list.\n\nIf `-s|--section` is provided, the task will be added to the matching section.\n\nIf a section is focused, the task will be added to the focused section.\n\nOtherwise, the task will be added at the top of the task list.\n\n#### `tax append [-s \"section\"|--section \"section\"] \"The task\"`\n\nLike `tax add`, but appends the task to the list instead of pushing it on top.\n\n#### `tax prune`\n\nRemoves all checked tasks from the task list.\n\n#### `tax edit`\n\nOpens the current task file in `$EDITOR`.\n\n#### `tax which`\n\nTells which tasks file is currently in use. Useful for scripting.\n\n## Use\n\n### Include in prompt\n\n```sh\n# Put tax in your $PATH or:\n# alias tax=/path/to/tax\n```\n\nThen, to display the current task in your bash prompt:\n\n```sh\nexport PS1='= $(tax current)\n\u003e '\n```\n\nReplace `tax current` with `tax cycle` for the displayed task to change every minute.\n\n### Include in tmux status\n\nIn your `tmux.conf`, for instance:\n\n```sh\nset -g status-right '[...your status config...] #(/path/to/tax cycle)'\n```\n\n## Color support\n\nIf **tax** is running in the context of a TTY, it will emit ANSI escape sequences to display focused tasks in bold font, instead of markdown bold markup.\n\nIf **tax** is not running in a TTY (for instance, in a shell `$PS1`), emitting ANSI escape sequences can be forced by setting the environment variable `CLICOLOR_FORCE=1`.\n\nYou can disable all ANSI escape sequences by setting the environment variable `NO_COLOR=1`.\n\nNote: tmux status line does not interpret ANSI escape sequences (not a TTY).\n\n### React to changes\n\nIf `$TAX_CHANGE_CMD` is set in the environment and contains a valid command, **tax** will execute it as a `sh` command after every change it makes to your task file.\n\n**tax** exposes a set of environment variables to `$TAX_CHANGE_CMD` to provide information about the change.\n\n* **For all tax commands:**\n  * `$TAX_FILE`: the absolute path of the changed tasks file\n  * `$TAX_FILE_FOLDER`: the absolute path of the folder containing the tasks file\n  * `$TAX_CMD`: the command that applied the change; one of `add`, `check`, `edit`, `focus`, `prune`\n  * `$TAX_OPERATION`: the operation applied to the file; one of `APPEND`, `PREPEND`, `CHECK`, `UNCHECK`, `EDIT`, `FOCUS`, `BLUR`, `PRUNE`\n  * `$TAX_MESSAGE`: a human-readable description of the change, include the task name if available\n\n* **For commands add, check, uncheck, focus, blur (post-change values)**\n  * `$TAX_TASK_NUM`: the number of the changed task in the task list (1-indexed)\n  * `$TAX_TASK_NAME`: the name of the changed task\n  * `$TAX_TASK_PLAIN_NAME`: the plain name of the changed task (without focus markup if present)\n  * `$TAX_TASK_LINE`: the complete markdown line of the changed task\n  * `$TAX_TASK_LINE_NUM`: the line number of the changed task\n  * `$TAX_TASK_CHECKED`: `1` if the task is completed, `0` otherwise\n  * `$TAX_TASK_FOCUSED`: `1` if the task is focused, `0` otherwise\n\nI use it to version my task file using this command:\n\n```sh\nexport TAX_CHANGE_CMD='git -C \"$TAX_TAXFILE_FOLDER\" commit -am \"$TAX_MESSAGE\"'\n```\n\n## License\n\nSee [LICENSE.md]()\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnetgusto%2Ftax","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnetgusto%2Ftax","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnetgusto%2Ftax/lists"}