RuTD
RuTD stands for "Rush To Do" or "Rust To Do". It is a simple command line tool for managing your to-do list in Rust. It is designed to be fast, easy to use, flexible, and git friendly.
⚠️ RuTD is a work in progress and is not yet feature complete.
Shell completion
RuTD supports shell completion with clap_complete. For better experience, RuTD uses dynamic completion for commands, so it is recommended to source the completion script in your shell configuration file. Specific instructions for each shell are provided below.
Bash
Add the following line to your ~/.bashrc or ~/.bash_profile:
Zsh
Add the following line to your ~/.zshrc:
Fish
Add the following line to your ~/.config/fish/config.fish:
source (COMPLETE=fish your_program | psub)
Elvish
Add the following line to your ~/.elvish/rc.elv:
eval (E:COMPLETE=elvish your_program | slurp)
Xonsh
Install fish shell and follow the steps for fish completion. Then, install xonsh-fish-completer and add the following line to your ~/.xonshrc:
xontrib load fish_completer
Roadmap
Below is the development roadmap for the RuTD project, based on the planned phased feature rollout:
Phase 1: MVP - Core Features and Git Integration (Completed)
- Core Task Management (CLI):
- Add tasks, including description, priority (Urgent, High, Normal, Low), scope (
<project-name>), and type (<feat|fix|docs|etc.>). - List tasks, supporting basic filtering (priority, scope, type, status).
- Mark tasks as completed.
- Edit task descriptions via
$EDITOR.
- Add tasks, including description, priority (Urgent, High, Normal, Low), scope (
- Storage:
- Implement TOML-based storage, one file per task, using UUID as filename, stored in the
~/.rutddirectory. - Use Serde for serialization/deserialization.
- Implement TOML-based storage, one file per task, using UUID as filename, stored in the
- Basic Git Integration:
- Initialize a Git repository in
~/.rutdif one does not exist. - Automatically commit changes to task files (add, edit, complete).
- Generate basic commit messages (e.g.,
chore(<task_id>): Update task).
- Initialize a Git repository in
- Basic CLI:
- Use
clapto implement core commands (add,list,done,edit). - Generate basic help information.
- Use
Phase 2: Enhanced Task Management and Git Workflow (Work in Progress)
- Advanced Task Management (CLI):
- Implement task state transitions:
start,stop,abort. - Implement time tracking related to
start/stopactions (time_spent), usingchrono. - Enforce "single active task" rule.
- Enhance
listcommand: filter by completion date range, fuzzy description matching (usingfuzzy-matcher), display statistics (count, total time spent). - Implement
cleancommand to delete tasks based on filters.
- Implement task state transitions:
- Improved Git Integration:
- Automatically generate Conventional Commit messages based on action type and task details (scope, ID), e.g.,
<type>(<scope>): Mark task as done\n\n<id>. - Implement manual
synccommand (fetch/pull + push), usinggit2-rs. - Basic push/pull authentication handling (default SSH key path, username/password via environment variable or prompt).
- Automatically generate Conventional Commit messages based on action type and task details (scope, ID), e.g.,
- CLI Enhancements:
- Use
clap_completeto implement static shell completion (e.g., priority, status).
- Use
Phase 3: TUI, Background Sync, and Optimization (Not Completed)
- Terminal User Interface (TUI):
- Develop TUI using
Ratatuiandcrossterm. - Display tasks in interactive lists/tables.
- Allow task selection, view details, and trigger actions via shortcuts (start/stop/finish/edit).
- Integrate launching
$EDITORfor editing from TUI.
- Develop TUI using
- Background Sync:
- Use
notifyto implement file system monitoring, detecting changes in the task directory. - Trigger automatic
syncoperations (commit, pull, push) on change detection, with debounce handling. - Use
service-managerfor cross-platform background service management (install/start/stop).
- Use
- Advanced Git and Optimization:
- Implement application-aware merge conflict resolution strategies (detect conflicts, deserialize versions, prompt user via CLI/TUI for field-level resolution).
- Implement
gccommand by invokinggit gc(possibly using--autoor configurable--prune) for repository optimization. - Enhanced authentication (SSH agent, credential helpers via
auth-git2-rsor similar).
- CLI/TUI Enhancements:
- Use
clap_completeand custom completers to implement dynamic shell completion (e.g., existing scopes, types, and task IDs).
- Use
Future Considerations (Post-Phase 3) (Not Completed)
- Schema Validation: Integrate schema validation (e.g., use
schemarsfor generation and Serde deserialization for runtime checks). - Advanced TUI Editing: Implement in-TUI editing features, not just relying on
$EDITOR. - Reporting and Visualization: Add more advanced reporting features or TUI visualizations (e.g., calendar view, progress summary).
- Plugin System: Explore a WASI-based plugin system for extensibility.
- Alternative Git Backend: If
gitoxidematures and its feature set (especially around nativegc) becomes advantageous, evaluate migrating fromgit2-rstogitoxide.