HydroToDo is a stylish, terminal-based task manager written in Python.
It allows you to organize, check off, and visualize your to-dos efficiently using a modern Text User Interface (TUI) built with curses.
With features like tabbed lists, a fzf-style preview pane, vim-style keybindings, and Kitty terminal image support, HydroToDo brings ease and clarity to your daily workflow.
Based on HydroToDo by Henriquehnnm — all credit to the original project.
- Add, Remove, and Complete Tasks:
Easily manage your to-do list—add new tasks, mark as done, or delete with a keystroke. - Tabbed Lists:
Organize your tasks into multiple categories, each in its own tab. - Preview Pane:
fzf-style detail panel shows notes and metadata for the selected task. - Notes Editor:
Attach multiline notes to any task with a built-in editor (Ctrl+F or Esc to save & exit). - Per-task Timers:
Start/stop a timer per task witht— it persists in the database, so it keeps running (in wall-clock terms) even if you quit and reopen the app. Timed tasks show asPENDINGuntil marked done. UseTto manually set/edit the time spent (e.g.1h30m,90m). - Time Statistics:
Presssto see count/avg/median/std/min/max time spent, globally and per tab. - Vim-style Navigation:
Usej/kto move between tasks andh/lto switch tabs. - Custom Colors:
Editcolor1,color2,color4,color_highlight,color_done, andcolor_mutedat the top ofhydrotodo.pyto theme the app — accepts[r, g, b]lists or"#rrggbb"hex strings. - Kitty Image Support:
Displaysblaus.pngin the header using the Kitty terminal graphics protocol. - SQLite Persistence:
Tasks, notes, timers, and completion dates are stored locally in~/.hydrotodo.db. - Responsive Design:
Handles terminal resizing and warns if the window is too small.
hydroexample.mp4
- Python: Version 3.6 or higher
- sqlite3: Standard library (included with Python)
- curses: Terminal interface (native on Linux/macOS/WSL)
- Kitty terminal (optional): Required for the header image
Note: Officially supported on Linux, macOS, and WSL.
Windows users may try running HydroToDo with thewindows-cursespackage, but compatibility and support are not guaranteed.
Clone the repository and navigate to the project folder:
git clone https://github.com/GHeier/HydroToDo.git
cd HydroToDoIf on Windows:
pip install windows-cursesRun the script directly from your terminal:
python3 hydrotodo.py| Key | Action |
|---|---|
| j / ↓ / Ctrl+N | Move down in task list |
| k / ↑ / Ctrl+P | Move up in task list |
| h / ← | Switch to previous tab |
| l / → | Switch to next tab |
| Enter | Check/uncheck task |
| a | Add new task |
| d | Delete selected task |
| n | Edit notes for selected task |
| t | Start/stop timer for selected task (persists if you quit) |
| T | Manually edit time spent (e.g. 1h30m, 90m) |
| Ctrl+T | New tab (category) |
| Ctrl+W | Close current tab |
| p | Toggle preview pane |
| Alt+J / Alt+K | Scroll preview pane |
| s | Show/hide time statistics |
| Ctrl+H | Show/hide help |
| q | Quit the app |
Task checkboxes are tri-state: [ ] TODO, [-] PENDING (timer has been started), [X] DONE (toggled with Enter).
In the notes editor: Ctrl+F or Esc saves the note and exits — there's no discard/cancel option.
Edit the variables at the top of hydrotodo.py:
# ─── Theme colors ─────────────────────────────────────────────────────────
color1 = [40, 118, 252] # title / accent color
color2 = "#65dded" # secondary accent (cyan)
color4 = "#65dded" # help hint
color_highlight = [58, 58, 80] # selected task / active tab background
color_done = curses.COLOR_GREEN # completed task / "Done:" label
color_muted = [110, 110, 110] # grayed-out / completed task text
# ─── Layout constants ─────────────────────────────────────────────────────
BLAUS_DISPLAY_ROWS = 8 # height of mascot image in terminal rows
BLAUS_DISPLAY_COLS = 20 # width of mascot image in terminal columns
TASK_BOX_HEIGHT = 9 # height of task list box when preview panel is shownColors accept either [r, g, b] (0–255) or "#rrggbb" hex strings. Requires a terminal that supports can_change_color() (most modern terminals do).
HydroToDo is under active development and currently in Beta.
Suggestions and contributions are welcome via issues or pull requests.
This fork is built on top of HydroToDo by Henriquehnnm. The original project laid the foundation for everything here.
For questions or suggestions, please open an issue or contact via email.