[English](README.md) · [中文](README-zh.md) · [日本語](README-ja.md) · [한국어](README-ko.md) · [Español](README-es.md) · [Français](README-fr.md) · [Русский](README-ru.md) · [Deutsch](README-de.md) · [Português](README-pt-br.md)
███████╗██████╗ ██████╗ ██████╗ ██╗████████╗
██╔════╝██╔══██╗██╔═══██╗██╔═══██╗██║╚══██╔══╝
█████╗ ██║ ██║██║ ██║██║ ██║██║ ██║
██╔══╝ ██║ ██║██║ ██║██║ ██║██║ ██║
██║ ██████╔╝╚██████╔╝╚██████╔╝██║ ██║
╚═╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝
faster-dooit
Votre app de tâches met deux secondes à s'ouvrir. Pas celle-ci.
gestionnaire de tâches en terminal, style vim · Go + Bubble Tea · 10k tâches en ~34 ms
> **Sans lien avec le projet officiel [dooit](https://github.com/dooit-org/dooit)** — il s'agit d'un port indépendant écrit de zéro. Projet hobby assisté par IA.
## Pourquoi
Votre outil de tâches ne devrait pas vous faire attendre. Le dooit original paie **1,9 s** de démarrage à froid et reconstruit tout son arbre à chaque frame. faster-dooit charge **10 000 tâches en ~34 ms**, ne rend que ce qui est visible et ne sonde jamais la base de données. C'est vim, pour vos tâches.
## Fonctionnalités
- ⚡ **Assez rapide pour sembler instantané** — 10k tâches chargées en ~34 ms ; l'original met ~1,9 s sur la même machine
- 🎯 **Mémoire musculaire de vim** — `j`/`k` se déplacer, `a` ajouter, `d 3d` fixer une échéance, `c` terminer
- 🗂️ **Arbre à deux volets avec pliage** — workspaces et tâches imbriqués, `z`/`Z` pour plier, `collapse_depth` pour auto-plier les nœuds profonds
- 🎨 **Des thèmes qui collent** — 7 presets (`nord`, `dracula`, `catppuccin_mocha`…) plus surcharge de couleurs et fonds transparents
- 🔌 **Configuration Lua propre** — sans préfixe `api.` : `theme.name`, `keys.set`, `vars.urgency_colors`
- 📦 **Un seul binaire statique** — Go pur, sans CGO, sans runtime, sans arbre de dépendances à auditer
## Démarrage rapide
```bash
# macOS / Linux
curl -fsSL https://raw.githubusercontent.com/XiaTian-AC/faster-dooit/main/install.sh | bash
```
```powershell
# Windows
iwr -useb https://raw.githubusercontent.com/XiaTian-AC/faster-dooit/main/install.ps1 | iex
```
Ou avec votre gestionnaire de paquets :
```bash
brew tap XiaTian-AC/XiaTian-AC-bucket && brew install faster-dooit # macOS/Linux
scoop bucket add faster-dooit https://github.com/XiaTian-AC/XiaTian-AC-bucket && scoop install faster-dooit # Windows
```
La commande est `fdooit`. Compiler depuis le code source ne nécessite que Go ≥ 1.22.
## Utilisation
```bash
fdooit
```
```text
┌─ Workspaces ────────────────┐ ┌─ Todos ───────────────────────────────┐
│ ⌄ Work │ │ ⌄ o finish release notes @today │
│ > Personal │ │ o write the spec │
└─────────────────────────────┘ └───────────────────────────────────────┘
```
- `a` ajouter une tâche · `A` ajouter un enfant · `c` basculer le statut · `d` fixer l'échéance (`tomorrow`, `3d`, `next monday`)
- `z`/`Z` plier un nœud / son parent · `o` déplier une longue description
- `S` rechercher · `ctrl+s` trier · `y`/`Y` copier · `p`/`P` coller · `?` aide
- Les colonnes vides (sans due/recurrence) se masquent ; une barre de défilement apparaît sur les terminaux bas
## Architecture
```mermaid
graph LR
A[Terminal
fdooit] --> B[App
modèle Bubble Tea]
B --> C[Store
SQLite chargement unique]
B --> D[Lua
runtime config.lua]
B --> E[Thème
presets + surcharges]
C --> F[(todo.db)]
style A fill:#E6A23C,color:#fff
style B fill:#409EFF,color:#fff
style C fill:#67C23A,color:#fff
style D fill:#F56C6C,color:#fff
style E fill:#9B59B6,color:#fff
style F fill:#909399,color:#fff
```
Le modèle de performance repose sur trois choix délibérés : **chargement unique** (DB en mémoire au démarrage, écriture directe), **rendu viewport uniquement** (cache de lignes par `pane,id,version`) et **SQLite direct** (Go pur, sans CGO, connexion unique).
## Configuration
`config.lua` se trouve dans `~/.config/faster-dooit/config.lua` (toutes plateformes). Un fichier invalide affiche une erreur `file:line` et quitte.
| Réglage | Exemple |
|---|---|
| Thème | `theme.name = "dracula"` |
| Surcharge couleur | `theme.primary = "#FF79C6"` |
| Fond transparent | `theme.background = "transparent"` |
| Profondeur de pliage | `vars.collapse_depth = 0` |
| Lignes de description longue | `vars.max_description_lines = 3` |
| Réassigner touche | `keys.set("i", add_sibling)` |
| Barre d'état | `bar.set({ fn, fn, ... })` |
Presets : `nord`, `catppuccin_mocha`, `catppuccin_latte`, `dracula`, `gruvbox_dark`, `solarized_light`, `tokyo_night`. Douze couleurs surchargables plus `urgency_colors`.
## API
faster-dooit expose une **API Lua** (un sous-ensemble délibéré de la surface Python d'origine) pour personnaliser :
| API | Objectif |
|---|---|
| `keys.set(key\|{keys}, action)` | Réassigner les touches |
| `formatter.todos..add(fn)` | Styliser les colonnes |
| `bar.set({fn, ...})` | Barre d'état sur mesure |
| `dashboard.set({line, ...})` | Écran de bienvenue |
| `theme` / `vars` | Couleurs, presets, profondeur de pliage, lignes máx |
| `notify(msg, level)` / `now(fmt)` | Feedback et temps |
| `subscribe(event, fn)` / `timer(sec, fn)` | Événements et callbacks périodiques |
## Structure des répertoires
```
faster-dooit/
├── main.go # entrée : flags, chemins, démarrage TUI
├── internal/
│ ├── app/ # modèle Bubble Tea : modes, touches, rendu, scrollbar
│ ├── model/ # arbre en mémoire : Workspace/Todo, cascades
│ ├── store/ # persistance SQLite : chargement unique, écriture directe
│ ├── lua/ # évaluation de config.lua en sandbox
│ ├── theme/ # thème résolu + 7 presets
│ └── dateparse/ # dates en langage naturel ("tomorrow", "3d")
├── install.sh / install.ps1 # installateurs en une ligne
└── config.lua # configuration utilisateur par défaut
```
## Stack technique
| Couche | Technologie |
|---|---|
| Langage | Go |
| TUI | [Bubble Tea](https://github.com/charmbracelet/bubbletea), lipgloss |
| Base de données | SQLite (`modernc.org/sqlite`, Go pur) |
| Configuration | gopher-lua (sandbox) |
| Release | GoReleaser + GitHub Actions |
## Contribuer
1. Forkez le dépôt
2. Créez une branche (`git checkout -b feat/amazing`)
3. Commitez vos changements
4. Poussez et ouvrez une Pull Request
```bash
go test ./... # unit + parity + e2e
go vet ./...
go test ./internal/app/ -bench . -benchmem # portes de performance
```
## Licence
[MIT](LICENSE)