10
Lezione dieci · ~35 min

Sync, hook e integrazioni

L'ultimo passo: portare Taskwarrior fuori dalla singola macchina, automatizzarne i comportamenti con script, e collegarlo agli altri strumenti del tuo flusso di lavoro.

Teoria

Tre ponti verso il resto del mondo

Sync. Dalla versione 3 il sistema di sincronizzazione è stato riscritto da zero ed è basato su Taskchampion. Il vecchio Taskserver/taskd non è più supportato. Le tre opzioni attualmente disponibili sono: un TaskChampion sync server self-hosted (HTTP), un bucket di cloud storage AWS S3 (o S3-compatibile) o Google Cloud Storage, oppure un file locale (utile soprattutto per test). I dati vengono cifrati lato client con una passphrase: anche chi gestisce il server o il bucket non può leggere i tuoi task.

Attenzione a una trappola comune: non sincronizzare la cartella ~/.task/ con Dropbox, Google Drive o iCloud Drive, come si faceva talvolta con la 2.x. Con il database SQLite della 3.x questa pratica può corrompere i dati e non è ufficialmente supportata.

Hook. Sono script eseguiti automaticamente in punti precisi del ciclo di vita di un task: on-add, on-modify, on-launch, on-exit. Possono bloccare l'operazione, modificarla, o produrre effetti collaterali. Scritti in qualunque linguaggio: bash, python, ruby, quello che vuoi.

Integrazioni. Esistono plugin per Vim/Neovim (taskwiki, taskwarrior.nvim), Emacs (taskwarrior.el), oltre a Timewarrior — il fratello tracker di tempo di Taskwarrior — che si collega via hook in modo nativo.

Pratica

Configurare la sync, un hook utile, e Timewarrior

Una configurazione minimale verso un TaskChampion sync server: serve un URL, un client ID (un UUID che identifica te) e una passphrase di cifratura (qualunque stringa segreta, deve essere identica su tutte le macchine):

~/sync-setup
# 1. URL del tuo TaskChampion sync server $task config sync.server.url https://tw.miodominio.it # 2. Un client ID che identifica te (genera con uuidgen) $task config sync.server.client_id a1b2c3d4-... # 3. Passphrase di cifratura (UGUALE su tutte le macchine!) $task config sync.encryption_secret una-passphrase-lunga-e-robusta # Sincronizza $task sync Sync successful.

In alternativa al sync server, puoi configurare AWS S3 o Google Cloud Storage con task config sync.aws.* oppure sync.gcp.* — i dettagli sono nella man task-sync.

Passiamo agli hook. Esempio: un on-add che impedisce di creare task senza progetto, per forzare un minimo di disciplina:

~/.task/hooks/on-add-require-project
#!/usr/bin/env bash # Legge il task in JSON da stdin task_json=$(cat) if ! echo "$task_json" | grep -q '"project"'; then echo "$task_json" echo "Errore: ogni task deve avere un progetto." >&2 exit 1 fi echo "$task_json" exit 0
~/installare-hook
$chmod +x ~/.task/hooks/on-add-require-project $task add "Test senza progetto" Errore: ogni task deve avere un progetto. $task add "Test con progetto" project:test Created task 15.

Per Timewarrior esiste un hook ufficiale: on-modify.timewarrior. Quando avvii un task con task 5 start, Timewarrior inizia automaticamente a tracciare il tempo. Quando lo fermi o lo completi, ferma il tracking. Risultato: tempo registrato senza alzare un dito, pronto per essere fatturato o analizzato.

Trucco

Il binomio Taskwarrior + Timewarrior è il punto di arrivo

Se arrivi a questo punto del corso, configura l'integrazione con Timewarrior subito. È letteralmente cinque minuti (il pacchetto Timewarrior include l'hook pronto, basta copiarlo in ~/.task/hooks/ e dargli permessi di esecuzione). Da quel momento in poi:

  • task 7 start avvia il task e il timer
  • task 7 stop ferma entrambi
  • timew summary :week ti dice quanto hai lavorato per ogni progetto
  • I tag del task diventano automaticamente tag di Timewarrior

Smetti di pensare al tracking del tempo come a un'attività separata: diventa un effetto collaterale del semplice lavorare sui task. Per chi fattura a ore, per chi vuole analizzare dove va il proprio tempo, o per chi semplicemente vuole capire se la propria stima delle cose corrisponde alla realtà, questo è il finale di partita.