diff --git a/README.md b/README.md new file mode 100644 index 0000000..16f15c3 --- /dev/null +++ b/README.md @@ -0,0 +1,230 @@ +# Git 'er Done + +A simple, powerful command-line todo manager that stores tasks in SQLite databases. Perfect for developers and power users who want a lightweight task management solution that works entirely from the terminal. + +## Features + +- **Simple CLI interface** - Add, list, and manage tasks with intuitive commands +- **Natural language date parsing** - Use dates like "tomorrow", "next friday", or "2025-08-20" +- **Multiple task lists** - Organize tasks across different projects or contexts +- **SQLite storage** - Reliable, portable database backend +- **Task statistics** - Track completion rates and overdue items +- **Flexible scheduling** - Reschedule tasks easily +- **Data management** - Purge old completed tasks to keep lists clean + +## Installation + +1. Clone the repository: + ```bash + git clone https://github.com/stormux/git-er-done.git + cd git-er-done + ``` + +2. Make the script executable: + ```bash + chmod +x ged + ``` + +3. Copy to a directory in your PATH (optional): + ```bash + sudo cp ged /usr/local/bin/ + ``` + +## Quick Start + +```bash +# Add a task +ged "Fix the login bug" + +# Add a task with a due date +ged "Call dentist" tomorrow + +# List all pending tasks +ged + +# Mark task 1 as complete +ged -d 1 + +# Show help +ged -h +``` + +## Usage + +### Basic Commands + +| Command | Description | +|---------|-------------| +| `ged` | List all pending tasks | +| `ged "task description"` | Add a new task | +| `ged "task description" "due_date"` | Add a task with due date | +| `ged -d ` | Mark task as done | +| `ged -r "new_date"` | Reschedule a task | +| `ged -x ` | Permanently delete a task | + +### Task List Management + +| Command | Description | +|---------|-------------| +| `ged -l` | List pending tasks (same as no arguments) | +| `ged -a` | List all tasks with status | +| `ged -c` | List completed tasks only | +| `ged -s` | Show task statistics | +| `ged -L` | List all available task files | + +### Multiple Task Lists + +Use the `-f` flag to work with different task lists: + +```bash +# Work tasks +ged -f work "Review pull requests" +ged -f work -l + +# Personal tasks +ged -f personal "Buy groceries" +ged -f personal -s + +# Project-specific tasks +ged -f project-alpha "Deploy to staging" +``` + +### Data Management + +| Command | Description | +|---------|-------------| +| `ged -p` | Remove completed tasks older than 30 days | +| `ged -p 7` | Remove completed tasks older than 7 days | + +## Date Formats + +Git 'er Done accepts various date formats: + +- **ISO format**: `2025-08-20` +- **Natural language**: `tomorrow`, `next monday`, `next week` +- **Relative dates**: Any format accepted by the `date` command + +Examples: +```bash +ged "Submit report" "2025-08-25" +ged "Team meeting" "next tuesday" +ged "Doctor appointment" "tomorrow" +``` + +## Examples + +### Basic Usage +```bash +# Add some tasks +ged "Fix bug in authentication module" +ged "Write unit tests" "friday" +ged "Deploy to production" "2025-08-30" + +# List tasks +ged +# Output: +# Git 'er Done task list +# 1. Fix bug in authentication module +# 2. Write unit tests Due by Friday, August 22, 2025 +# 3. Deploy to production Due by Saturday, August 30, 2025 + +# Mark first task complete +ged -d 1 +# Output: Task 1 "Fix bug in authentication module" marked as done. + +# Reschedule second task +ged -r 2 "next monday" +# Output: Task 2 "Write unit tests" rescheduled to Monday, August 25, 2025. +``` + +### Multiple Projects +```bash +# Work tasks +ged -f work "Code review for PR #123" +ged -f work "Update documentation" + +# Side project +ged -f sideproject "Implement user authentication" +ged -f sideproject "Set up CI/CD pipeline" + +# Personal tasks +ged -f personal "Buy birthday gift" +ged -f personal "Schedule dentist appointment" + +# List all task files +ged -L +# Output: +# Available task files: +# ==================== +# personal 2 pending, 0 done, 2 total (<1 KB) +# sideproject 2 pending, 0 done, 2 total (<1 KB) +# tasks 0 pending, 1 done, 1 total (<1 KB) (default) +# work 2 pending, 0 done, 2 total (<1 KB) +``` + +### Task Statistics +```bash +ged -s +# Output: +# Task Statistics: +# ================== +# Total tasks: 15 +# Pending: 8 +# Completed: 7 +# Completion rate: 46.7% +# ⚠️ Overdue tasks: 2 +# 📅 Due today: 1 +``` + +## Data Storage + +Tasks are stored in SQLite databases in your system's data directory: + +- **Linux**: `$HOME/.local/share/git-er-done/` +- **Default database**: `tasks.db` +- **Custom databases**: `.db` (when using `-f` flag) + +Each database contains a table with the following structure: +- Task ID (auto-incrementing) +- Description +- Due date (optional) +- Status (pending/completed) +- Creation timestamp +- Completion timestamp +- Project tag + +## Command Reference + +### Flags + +| Flag | Long Form | Arguments | Description | +|------|-----------|-----------|-------------| +| `-a` | `--all` | None | List all tasks with status | +| `-c` | `--completed` | None | List completed tasks only | +| `-d` | | `` | Mark task as done | +| `-f` | | `` | Use specified database file | +| `-h` | `--help` | None | Show help screen | +| `-l` | | None | List pending tasks | +| `-L` | `--list` | None | List available task files | +| `-p` | `--purge` | `[days]` | Remove old completed tasks (default: 30 days) | +| `-r` | | ` ` | Reschedule task | +| `-s` | `--stats` | None | Show task statistics | +| `-x` | `--remove` | `` | Permanently delete task | + +## Requirements + +- **Bash** 4.0 or later +- **SQLite3** command-line tool +- **GNU date** command (for date parsing) + +## License + +MIT License - see [LICENSE](LICENSE) file for details. + +## Contributing + +Contributions are welcome! Please feel free to submit pull requests or open issues for bugs and feature requests. + +## Author + +Created by Stormux