4. Le cockpit TUI
Tout ce que tu as fait en ligne de commande a un foyer : un cockpit vivant, piloté au clavier — ta salle de contrôle pour toute la flotte. C’est dans l’esprit de k9s ou htop : une interface terminal plein écran où tu vois la flotte, tu plonges dans n’importe quel dépôt, PR ou run CI, et tu agis — fusionner, approuver, checkout — sans jamais quitter le terminal.
Tu l’as croisé un instant au chapitre 1. Maintenant que tu as une vraie flotte, faisons la visite guidée complète. Ouvre-le et suis le mouvement.
La salle de contrôle pour toute la flotte — lire, plonger et agir sans quitter le terminal.
🎯 Dans ce chapitre, tu vas apprendre à…
- Ouvrir le cockpit avec un simple
haw(ouhaw dash –demopour explorer hors ligne). - Lire la grille de flotte en direct — les mêmes colonnes que
haw status, qui se rafraîchissent d’elles-mêmes. - Maîtriser la boucle centrale : lire → entrer (
Enter) → agir → revenir (Esc). - Agir depuis la rangée de repos : synchroniser, marquer, exécuter, filtrer, parcourir les fichiers, et sauter vers les vues PR / CI / gouvernance avec les chiffres
1–7. - Ouvrir le menu d’actions contextuel d’une vue avec
a— fusionner, approuver, checkout, request-PR, land — chacune protégée par une confirmation. - Parcourir les fichiers de n’importe quel dépôt à n’importe quelle branche, tag ou SHA — en local ou directement depuis la forge, sans checkout.
- Utiliser la barre de commande (
:) qui reflète la CLI que tu connais déjà.
Ta salle de contrôle : la grille de la flotte, les plongées, les vues PR/CI et les actions au clavier — le tout dans le terminal.
🚁 1. Ouvre-le
Lance haw sans sous-commande :
haw
Tu veux juste explorer sans espace de travail réel ni réseau ? Utilise le contrôleur de démo intégré — il est peuplé de dépôts, PR et runs CI préfabriqués, donc chaque vue a quelque chose à montrer :
haw dash --demo
Dans les deux cas, tu atterris sur la grille de la flotte — l’écran d’accueil du cockpit.
📋 2. Lis la grille de la flotte
haw ▸ ~/work/gateway ───────────────────────── stack: gateway lock: ✓ repos: 3/3
──────────────────────────────────────────────────────────────────────────────────────
REPO BRANCH ▲ HEAD DIRTY DRIFT ↑ / ↓ MERGE
kernel v6.1.2 a1b2c3d4 · · 0 / 0 —
◉ hal main 9f8e7d6c yes · 2 / 0 —
▸⚠ app-mqtt release/2.x 4d5e6f7a · DRIFT 0 / 5 —
──────────────────────────────────────────────────────────────────────────────────────
hal › path hal/ branch main (ahead 2) dirty locked 9f8e7d6c grp firmware
──────────────────────────────────────────────────────────────────────────────────────
[s]ync [f]iles [x]shell [!]exec [/]filter [p]roblems [a]ctions [1-7]views [:]cmd [?]help
C’est haw status, vivant. Chaque ligne est un dépôt ; les colonnes sont les mêmes que tu connais déjà — branche, HEAD, dirty, drift, en avance/en retard. Le ▸ est ton curseur, ◉ marque un dépôt sélectionné et ⚠ signale un problème (comme la dérive sur app-mqtt). La grille s’actualise automatiquement environ toutes les 5 secondes en veille — jamais pendant que tu tapes — et F5 / Ctrl-R actualisent à la demande.
Déplace-toi avec ↑/↓ (ou k/j), exactement comme Vim.
🔬 3. Plonge — la boucle fondamentale est lire → plonger → agir
Place le curseur sur un dépôt et appuie sur Enter. Tu plonges dans le détail Git de ce dépôt : branche, SHA, statut de l’arbre de travail, log récent, diffstat, remotes. Appuie sur Esc (ou b) pour remonter d’un niveau.
C’est le rythme de tout le cockpit : lire la grille → plonger dans une chose → agir dessus → ressortir. Tu n’es jamais à plus d’une touche du détail ou de l’action.
⌨️ 4. Agis sur la flotte depuis la rangée de repos
Des touches uniques sur la ligne du curseur font des choses. Les essentielles :
| Touche | Fait |
|---|---|
s | sync — les dépôts marqués s’il y en a, sinon le dépôt sous le curseur, sinon la stack |
f | parcourir les fichiers du dépôt — disque local ou directement depuis la forge |
x | basculer dans un shell dans ce dépôt (quitte le cockpit) |
! | lancer une commande (exec) dans le dépôt, dans sa vue de détail |
/ | filtrer la grille en direct de façon floue — /knl restreint à kernel |
p | vue problèmes uniquement — seulement les dépôts qui demandent de l’attention |
Space | marquer / démarquer le dépôt sous le curseur (◉) |
r | run une commande — sur les dépôts marqués s’il y en a, sinon toute la flotte |
g | goto — quitter et afficher le chemin du dépôt sous le curseur (cd "$(haw dash)") |
Le git-fetch, le changement de stack et le lock ont migré vers la barre de commande — :fetch, :stack (sélecteur) ou :stack NAME, et :lock. Une touche que tu utiliseras partout est a — le menu d’actions. Il ouvre une petite popup listant exactement les actions que la vue courante prend en charge, chacune avec sa propre sous-touche ; choisis-en une et toute action d’écriture (fusionner, atterrir, …) te demande quand même y/n d’abord. Les vues sans action te le disent tout simplement.
Astuce : Les marques sont le super-pouvoir du cockpit. Appuie sur Space sur quelques dépôts, puis s (sync) ou r (run) agit sur ce seul ensemble. C’est comme ça que tu réalises une opération chirurgicale sur la flotte sans toucher à un manifeste.
🌐 5. Les vues réseau — PR, CI et agir dessus
Changer de vue tient en une touche : les chiffres 1–7 sautent directement vers une vue depuis n’importe quelle liste de premier niveau. Les vues réseau se chargent à la demande (rien ne touche le réseau tant que tu ne le demandes pas) :
| Touche | Vue | alias : |
|---|---|---|
1 | flotte | :fleet |
2 | changesets | :changesets |
3 | PR/MR — toutes les PR/MR ouvertes à travers la flotte | :prs |
4 | runs CI — runs récents, progression en direct | :ci |
5 | arbre | :tree |
6 | gouvernance — plugins, SBOM, conclusions | :governance |
7 | plugins | :plugins |
Dans les vues PR/MR (3) ou CI (4), Enter plonge dans le détail — les relecteurs et les checks d’une PR, ou les jobs et la progression en direct d’un run CI. Appuie sur d pour lire le diff d’une PR, l pour les logs d’un run CI, et f pour parcourir les fichiers modifiés d’une PR. (Un log CI que la forge a périmé — GitHub renvoie 410 — s’affiche honnêtement comme « logs indisponibles — expirés ou vides » plutôt que comme une erreur.)
Pour agir, appuie sur a pour le menu d’actions. Dans la vue PR/MR, il propose :
| Sous-touche | Fait |
|---|---|
m | fusionner la PR/MR sur sa forge |
a | approuver la PR/MR |
c | checkout la branche de la PR en local |
Chaque écriture est protégée par une confirmation y/n pour que tu ne fusionnes jamais par erreur de doigt. o ouvre la ligne sous le curseur dans ton navigateur. Ainsi tout le flux inter-forges du chapitre 5 — voir les PR, approuver, fusionner — est ici même, au clavier uniquement, le tout sous a.
📂 6. Parcourir fichiers & branches — n’importe quelle ref, locale ou forge
Appuie sur f sur n’importe quel dépôt pour ouvrir son navigateur de fichiers — une vue en lecture seule (il ne stage ni ne committe jamais, il lit seulement). Trois touches le transforment en véritable explorateur de code :
| Touche | Fait |
|---|---|
T | basculer entre la liste plate à un seul répertoire ⇄ un arbre navigable (▸/▾ pour déplier/replier, →/Enter déplier, ← replier) |
r | sélecteur de ref — choisis une branche ou un tag dans la liste, ou tape n’importe quel SHA ; la vue se recharge à hauteur de cette ref et l’en-tête affiche @ <ref> |
e | éditer le fichier sous le curseur dans ton $EDITOR (fichiers locaux uniquement) |
R | basculer entre le disque local ⇄ la forge |
La récompense : avec r tu peux lire un fichier tel qu’il existe sur n’importe quelle branche du remote — à travers GitHub, GitLab ou Bitbucket — sans rien checkout. Pointe vers la branche feature/x d’un collègue, lis le fichier directement depuis l’API de la forge, et ne touche jamais à ton arbre de travail. e est la seule exception à la lecture seule : il remet le fichier à ton éditeur pour une correction locale rapide, puis recharge la liste.
💬 7. La barre de commande — un seul langage pour la CLI et la TUI
Appuie sur : pour ouvrir la barre de commande (la palette de commandes). Ses verbes reflètent la CLI que tu as déjà apprise, et la ligne de statut renvoie la commande exacte que chacun lance — ainsi le cockpit sert aussi de moyen de découvrir la CLI :
:sync sync the current stack
:grep TODO fleet-wide grep
:switch platform switch to another stack
:change land FEAT-42
:theme nord change the skin live
Apprends-en une, connais les deux. :name amène aussi le curseur sur un dépôt par son nom.
🎨 8. Deux vues de plus, et les thèmes
7(:plugins) — la vue Plugins : chaque plugin disponible (les clés[plugins]du manifeste réunies avec les exécutableshaw-*sur tonPATH) ;Enteren lance un et affiche sa sortie dans un panneau. Tu en construiras un qui atterrira ici au chapitre 8.:errors(:err) — la vue Errors : un journal déroulant des échecs de cette session, pour qu’une erreur passagère ne disparaisse jamais du défilement avant que tu aies pu la lire.
Thèmes. Sept habillages intégrés — classic, catppuccin (par défaut), dracula, nord, gruvbox, solarized, monochrome. classic est un habillage neutre en ANSI standard qui se lit aussi bien sur les terminaux clairs que sombres. Tape :theme sans argument pour ouvrir un sélecteur interactif (j/k pour se déplacer, Enter pour appliquer) ; l’habillage choisi est appliqué en direct et enregistré dans ta configuration. :theme nord change toujours directement. Définis-en un au démarrage avec HAW_THEME=nord haw, et NO_COLOR force monochrome.
Personnalise-le — ~/.config/haw/config.toml. Optionnel et tolérant (un fichier absent ou partiel utilise simplement les valeurs par défaut). Définis un thème de démarrage, l’éditeur de la touche e, un en-tête replié et la cadence de rafraîchissement au repos — en plus de remapper un sous-ensemble sûr de touches d’action :
[ui]
theme = "classic" # startup skin
editor = "nvim" # the `e` key's editor ($VISUAL/$EDITOR still win)
compact_header = false # start with the one-line header
refresh_secs = 5 # idle auto-refresh cadence (2–60)
[keys] # remap: sync, goto, run, shell, files, problems, watch
sync = "s"
Les sélecteurs écrivent ce fichier pour toi : :editor (sans argument) liste les éditeurs de ton PATH, et :compact bascule l’en-tête replié — chacun persiste ton choix. Les globales gelées (j, k, :, /, ?, q, b, space, g, w, chiffres) ne peuvent pas être réassignées ; un remap invalide est ignoré avec une note au démarrage, et les indices de l’en-tête montrent toujours la touche réellement active.
Appuie sur ? à tout moment pour l’aide en surimpression, et q (ou Ctrl-C) pour quitter.
Astuce : Chaque action lourde tourne sur un worker en arrière-plan, donc l’interface ne se fige jamais pendant qu’une synchro, un fetch ou un appel à la forge est en cours. Continue de naviguer.
🙌 À toi de jouer
Aucun espace de travail ni réseau nécessaire — le contrôleur de démo a tout ce qu’il faut pour bricoler :
- Lance
haw dash –demo. Déplace-toi avec↑/↓, puis appuie surEnterpour entrer dans un dépôt etEscpour revenir — ressens le rythme lire → entrer → agir → revenir. - Appuie sur
Spacepour marquer deux ou trois dépôts (regarde le◉), puis/pour filtrer la grille en fuzzy. Appuie sur3pour les PR et4pour la CI, puisapour voir le menu d’actions. Appuie sur?pour l’aide en surimpression. - Appuie sur
fsur un dépôt pour parcourir ses fichiers, puisTpour l’arborescence etrpour lire un fichier à une autre branche ou tag. Appuie surbpour revenir. - Appuie sur
:et tape:theme nord. Le thème change en direct — et la ligne de statut affiche la commande exacte, si bien que le cockpit t’apprend la CLI au fur et à mesure.
✅ Récapitulatif
hawseul (ouhaw dash --demo) ouvre le cockpit — unhaw statusvivant sur lequel tu peux agir.- La boucle est lire → plonger (
Enter) → agir → revenir (Esc). - Touches de la flotte :
ssync,ffichiers,xshell,!exec,/filtrer,pproblèmes,Spacemarquer,rrun,ggoto,aactions. - Les sauts de vue sont les chiffres
1–7:1flotte,2changesets,3PR,4CI,5arbre,6gouvernance,7plugins. Dans les PR/CI,a(actions) fait fusionner/approuver/checkout (protégé par confirmation),ddiff,llogs,ffichiers de la PR. - Navigateur de fichiers (
f) :Tbascule l’arbre,rchoisit une branche/tag/SHA (lire n’importe quelle ref, locale ou forge, sans checkout),eédite en local,Rbascule entre local ⇄ forge. :est une barre de commande (palette) qui reflète la CLI ;:pluginset:errorsatteignent ces vues ; sept thèmes (dontclassic) via:theme/HAW_THEME, un sélecteur interactif:theme/:editor, et un~/.config/haw/config.tomlpour les thèmes, l’éditeur, les options d’affichage et les raccourcis personnalisés.
👉 La suite
Tu as vu tout le cockpit lire la flotte. Passons maintenant au mouvement signature qu’il pilote — livrer une fonctionnalité à travers plusieurs dépôts comme un seul changeset coordonné → 5. Les changesets à travers les dépôts.