Skip to content

Latest commit

 

History

50 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

tdo

A terminal-native project and task manager built for Omarchy/Hyprland. Keyboard-driven, SQLite-backed, with a Quickshell bar widget and panel that surface your pending tasks for today.

Features

  • Project and task management — organize work into projects, each with tasks carrying priority, due dates, and tags
  • Lightweight checklists (Subtasks) — add subtasks under tasks with strict completion invariants (parent task cannot be finished while subtasks are pending; adding/marking a subtask undone automatically reopens the parent task)
  • Soft delete & recovery — deleting a project or task moves it to a trash view (:restore) where it can be brought back or permanently purged
  • Vim-style keybindingsj/k to navigate, i to edit, d to delete, space to toggle done
  • Smart date parsing — use natural shortcuts (today, tomorrow, mon), relative offsets (+3, +1w, +1m), or day-of-month (15) with instant normalization
  • Stats pane — live task counts with proportional bars and a per-project breakdown
  • Metadata pane — description, tags, priority, due date, or parent task status details for the selected item
  • Omarchy/Quickshell integration — a bar widget shows your pending task count for today, with a clickable panel listing today's tasks, inline mark-done checkboxes, and live updates
  • Omarchy theme support — reads ~/.config/omarchy/current/theme/colors.toml and applies colors live

Requirements

  • Rust toolchain (rustup)
  • Omarchy/Hyprland with Quickshell (optional — falls back to built-in defaults if theme file is absent)

Install

# clone the repo
git clone https://github.com/yourusername/tdo ~/Projects/tdo
cd ~/Projects/tdo

# install the binary to ~/.cargo/bin/tdo
cargo install --path crates/tdo

# verify
tdo

Omarchy/Quickshell integration

Omarchy moved from Waybar to Quickshell, so the bar integration now ships as a plugin in cipher.tdo/ rather than a standalone Waybar script.

# copy the plugin into your Omarchy plugins directory
cp -r cipher.tdo ~/.config/omarchy/plugins/cipher.tdo

Add the widget to the bar by editing ~/.config/omarchy/shell.json — insert a cipher.tdo entry into the right section of bar.layout:

"right": [
    {
        "id": "omarchy.tray"
    },
    {
        "id": "cipher.tdo"
    },
    {
        "id": "omarchy.agents"
    }
]

Restart Omarchy (or reload the shell) for the widget to appear.

The plugin provides:

  • Bar widget (Widget.qml) — a bar button showing the number of pending tasks for today, refreshed every 5 seconds
  • Panel (TodoPanel.qml) — opens on click, lists today's tasks with clickable checkboxes to mark them done (via tdo --mark-done), and auto-refreshes
  • Data helper (tdo-data.sh) — a shell wrapper around tdo --today (override the binary with TDO_BIN)

The plugin directory may lose execute permissions when copied, so make tdo-data.sh executable:

chmod +x ~/.config/omarchy/plugins/cipher.tdo/tdo-data.sh

Enable the plugin in the bar's right section — the entry points and capabilities are declared in cipher.tdo/manifest.json (bar-widget + panel kinds).

Keybindings

Browsing mode

Key Action
j / k Move selection down / up
enter Open selected project
esc Go back to home / project selection
/ Fuzzy search — navigate or create
i Edit selected project, task, or subtask
d Delete selected task or subtask (with confirmation) — soft delete, recoverable via :restore
space Toggle task or subtask done/pending
s Add subtask under selected task
: Open command mode (cp / mv / restore)
q Quit

Search mode (/)

Key Action
Type Filter list live
enter (match) Navigate into project / select task
enter (no match) Start creation form with typed name
esc Cancel, return to browsing

Form mode (i or create)

Key Action
j / k Move between fields
i Enter insert mode for current field
esc / enter (insert) Confirm field value, exit insert mode
enter (normal) Trigger save confirmation popup
esc (normal) Cancel form

Save Confirmation popup

Key Action
j/k / Down/Up Toggle between "Save" and "Keep editing"
enter Confirm chosen option
esc Close confirmation popup (equivalent to "Keep editing")

Command mode (:)

Key Action
cp <project> Copy the selected task (and its subtasks/tags) to another project
mv <project> Move the selected task to another project
restore Open the trash view to recover or permanently delete projects/tasks
tab Autocomplete the command name or destination project

Restore view (:restore)

Key Action
j / k Move selection down / up
enter Restore the selected project or task
d Permanently delete the selected item (with confirmation)
esc / q Exit back to browsing

Restored items reappear immediately in the project/task lists — no restart needed.

Smart Date Inputs

When editing the due date field, you don't need to type the full YYYY-MM-DD date. You can enter:

  • Relative offsets: +3 or +3d (3 days from now), +1w (1 week from now), +2m (2 months from now)
  • Shortcuts: today, tomorrow, tod, tom, t, tm
  • Weekdays: mon, tue, wednesday etc. (resolves to the next occurrence of that weekday)
  • Partial dates: MM-DD or MM/DD (e.g. 07-04 or 7/4, assuming current year)
  • Day of month: DD (e.g. 15 — assumes current month if the day is in the future, otherwise next month)

Upon exiting insert mode (esc), the shortcut is normalized instantly to YYYY-MM-DD.

Data

Tasks and projects are stored in ~/.local/share/tdo/tdo.db (SQLite, WAL mode).

Stack

Layer Tech
Language Rust
TUI Ratatui + Crossterm
Storage SQLite via rusqlite (bundled)
CLI args clap
Serialization serde + serde_json
Dates chrono

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages