An open API service indexing awesome lists of open source software.

https://github.com/codegoalie/rttui


https://github.com/codegoalie/rttui

Last synced: about 1 month ago
JSON representation

Awesome Lists containing this project

README

          

# rttui

A terminal user interface for [Remember The Milk](https://www.rememberthemilk.com/).

Browse, search, add, and complete tasks without leaving the terminal.

## Features

- Task list grouped by date bucket: Overdue, Today, Tomorrow, day-of-week, No Due Date
- Within each bucket, tasks sorted by priority then due time
- Color-coded priority bar on each task (red = high, yellow = medium, blue = low)
- RTM filter search with vim-style navigation
- Smart task input with syntax highlighting for due dates, priorities, lists, tags, and recurrence
- Completes tasks in-place and refreshes the list

## Requirements

- Go 1.22+
- A Remember The Milk account
- An RTM API key and shared secret — request one at https://www.rememberthemilk.com/services/api/

## Setup

1. Clone and build:

```
git clone
cd rttui
go build -o rttui .
```

2. Set your credentials as environment variables:

```
export RTM_API_KEY=
export RTM_SHARED_SECRET=
```

See `.envrc.example` for a 1Password reference pattern if you use `direnv` + 1Password CLI.

3. Run:

```
./rttui
```

On first run, rttui will print an authorization URL. Open it in your browser, grant access, then press Enter. The token is saved to `$XDG_CONFIG_HOME/rttui/token` (typically `~/.config/rttui/token`) and reused on subsequent runs.

## Configuration

rttui reads an optional config file at `$XDG_CONFIG_HOME/rttui/config.json` (typically `~/.config/rttui/config.json`). All fields are optional.

```json
{
"default_filter": "list:Inbox",
"add_preset": "list:Chores",
"refresh_interval_secs": 120
}
```

| Field | Description |
|-------|-------------|
| `default_filter` | RTM filter applied on startup when no CLI argument is given |
| `add_preset` | Text pre-filled in the add bar when pressing `n`; cursor is placed after it so you can type the task name immediately. Backspace to remove it. |
| `refresh_interval_secs` | How often (in seconds) tasks are automatically refreshed from the server. Defaults to `60`. Set to a negative value to disable auto-refresh. |

## Usage

```
./rttui [filter]
```

Pass an optional RTM filter string as an argument to pre-filter the task list on startup. This overrides `default_filter` from the config file. Uses the same syntax as RTM's advanced search (e.g. `"list:Work AND priority:1"`).

### Keybindings

| Key | Action |
|-----|--------|
| `j` / `k` or arrow keys | Move up/down |
| `/` | Open search bar |
| `n` | Add a new task |
| `c` | Complete selected task |
| `r` | Refresh tasks from server |
| `q` / `ctrl+c` | Quit |

### Search bar

The search bar accepts any RTM filter expression. It supports vim-style editing:

| Key | Action |
|-----|--------|
| `Enter` | Submit search |
| `Esc` (insert mode) | Switch to normal mode |
| `Esc` (normal mode) | Close search bar |
| `i` / `a` / `A` / `I` | Enter insert mode |
| `h` / `l` | Move cursor left/right |
| `w` / `b` | Jump word forward/backward |
| `0` / `$` | Jump to start/end of line |
| `x` | Delete character under cursor |

### Adding tasks (Smart Add)

Press `n` to open the add bar. The input supports a Smart Add syntax with live syntax highlighting:

| Prefix | Meaning | Example |
|--------|---------|---------|
| `!1` `!2` `!3` | Priority (high/medium/low) | `!1` |
| `^` | Due date | `^tomorrow`, `^friday` |
| `#` | List | `#Work` |
| `%` | Tag | `%errand` |
| `*` | Recurrence | `*weekly` |

Press `Enter` to submit, `Esc` to cancel.

> The `%tag` syntax is a local convenience — rttui converts it to `#tag` when sending to RTM, since RTM uses `#` for both lists and tags.