Configuration
lazyshell config init écrit un fichier entièrement commenté au bon endroit, et
lazyshell config show affiche la configuration réellement en vigueur — après que
chaque couche a eu son mot à dire — avec les sources dont elle provient. Cette seconde commande
est la réponse à « pourquoi mon réglage ne prend pas ».
lazyshell config edit ouvre ce fichier dans votre éditeur — $VISUAL,
sinon $EDITOR, sinon le premier de nano, vim,
vi qui est installé — en le créant à partir du modèle commenté s'il n'existe pas
encore. À la sortie de l'éditeur, le fichier enregistré est relu et tout ce qui cloche (clé
inconnue, valeur hors bornes, raccourci illisible) est signalé immédiatement plutôt qu'au
prochain démarrage.
Où vit le fichier
lazyshell lit son fichier YAML au premier emplacement trouvé :
$LAZYSHELL_CONFIG, s'il est défini$XDG_CONFIG_HOME/lazyshell/config.yml~/.config/lazyshell/config.yml
Un fichier absent n'est pas une erreur : lazyshell tourne avec ses valeurs par défaut. Un fichier partiel n'a besoin de mentionner que les champs qu'il veut surcharger ; tout le reste garde sa valeur par défaut.
Précédence
valeurs par défaut < ~/.config/lazyshell/config.yml < lazyshell.yml du projet
< variables d'environnement < options de ligne de commande
Rien dans un fichier de configuration ne peut empêcher lazyshell de démarrer. Une clé inconnue, une valeur hors bornes, un raccourci illisible ou une couleur inconnue sont signalés sur la sortie d'erreur avant l'ouverture de l'interface, et la valeur par défaut est utilisée à la place — jamais un silence, jamais un refus de démarrer.
Référence des options
| Clé | Type | Défaut | Effet |
|---|---|---|---|
language | fr | en | fr | Langue de l'interface : raccourcis, popups, barre d'état, pieds de panneau et messages de session. La sortie CLI (lazyshell config …) reste en français. |
shell | chaîne | "" | Commande lancée derrière le pty de chaque session. Vide signifie $SHELL, à défaut /bin/bash. |
term | chaîne | xterm-256color | TERM annoncé aux sessions. Le baisser fait volontairement dégrader les programmes. |
scrollback_size | entier ≥ 0 | 10000 | Lignes conservées par session une fois sorties de l'écran. |
sessions_panel_width | entier ≥ 5 | 40 | Largeur de la liste des sessions, en colonnes, en mode paysage. |
sessions_panel_height | entier ≥ 5 | 10 | Hauteur de la liste des sessions, en lignes, en mode portrait. |
agents_panel_height | entier ≥ 3 | 6 | Hauteur du tableau de bord des agents, en lignes, sous la liste des sessions en mode paysage. Masqué automatiquement si aucune session d'agent IA n'est détectée, et en mode portrait. |
portrait_max_width | entier | 84 | Le mode portrait s'applique à cette largeur de terminal ou en dessous… |
portrait_min_height | entier | 45 | …et au-dessus de cette hauteur. Le portrait empile les panneaux au lieu de les juxtaposer. |
refresh_interval_ms | entier, 10–1000 | 30 | Période de redessin. Un panneau inchangé n'est jamais poussé, donc le coût au repos reste proche de zéro quelle que soit la valeur. |
kill_timeout_ms | entier ≥ 100 | 2000 | Attente après SIGTERM avant d'escalader en SIGKILL, puis avant d'abandonner. |
prefix_key | spéc. de touche | Ctrl+O | Verrouille le panneau : une pression, sortie du pass-through. Doit être une touche de contrôle, et elle ne peut plus être tapée dans une session. $LAZYSHELL_PREFIX le surcharge. |
keybindings | table | voir plus bas | Associe un identifiant d'action à une spécification de touche. Une action absente garde sa touche par défaut. |
markers.bell | 0–1 caractère | ! | Marqueur d'une session ayant sonné pendant qu'elle était masquée. "" le désactive. |
markers.alt_screen | 0–1 caractère | # | Marqueur d'une session où tourne une application plein écran. |
markers.activity | 0–1 caractère | ● | Marqueur d'une session ayant produit de la sortie pendant qu'elle était masquée. |
markers.broadcast | 0–1 caractère | + | Marqueur d'une session marquée pour recevoir les frappes diffusées. |
markers.agent_idle | 0–1 caractère | ● | Marqueur d'une session d'agent IA détectée, au repos. |
markers.agent_working | 0–1 caractère | ● | Marqueur d'une session d'agent IA en train de travailler. |
markers.agent_blocked | 0–1 caractère | ● | Marqueur d'une session d'agent IA qui vous attend. |
markers.agent_done | 0–1 caractère | ● | Marqueur d'une session d'agent IA ayant terminé son tour. |
markers.agent_idle_color | couleur | green | Couleur de markers.agent_idle. |
markers.agent_working_color | couleur | yellow | Couleur de markers.agent_working. Alterne entre pleine et faible luminosité (deux fois par seconde) tant que l'agent travaille — le seul des quatre états animé. |
markers.agent_blocked_color | couleur | red | Couleur de markers.agent_blocked. |
markers.agent_done_color | couleur | blue | Couleur de markers.agent_done. |
markers.command_failed | 0–1 caractère | ✗ | Marqueur (à côté de son code de sortie, dans les colonnes nom/état plutôt que dans la gouttière) pour une session sans agent dont la dernière commande — via l'intégration shell OSC 133 — a échoué. |
markers.restart | 0–1 caractère | ↻ | Marqueur (à côté de son compteur de tentatives, dans les colonnes nom/état plutôt que dans la gouttière) pour une session ayant eu besoin d'au moins un redémarrage automatique — voir restart:. |
scroll.page_lines | entier ≥ 0 | 0 | Lignes parcourues par PgUp/PgDn. 0 signifie une hauteur de panneau complète. |
scroll.half_page_divisor | entier ≥ 1 | 2 | Ctrl+U/Ctrl+D parcourent la hauteur du panneau divisée par cette valeur. |
theme.active_border_color | couleur | green | Bordure du panneau ayant le focus. |
theme.inactive_border_color | couleur | default | Bordure de tous les autres panneaux. |
theme.selected_bg_color | couleur | blue | Fond de la ligne sélectionnée dans la liste des sessions. |
theme.locked_border_color | couleur | red | Bordure du panneau de sortie quand il est verrouillé (hors pass-through). |
theme.tab_active_color | couleur | green | Onglet sélectionné dans la barre d'onglets du panneau de sortie. |
clipboard.fallback_command | chaîne | "" | Commande exécutée avec le texte copié sur son entrée standard, à la place d'OSC 52, pour un terminal qui ne le gère pas. Il n'existe aucun moyen de détecter ce support : c'est un interrupteur manuel, vide signifie OSC 52 seul. |
notify.fallback_command | chaîne | "" | Commande exécutée avec le texte de la notification sur son entrée standard, à la place d'OSC 9/777, quand une session d'agent IA passe bloquée ou terminée. Vide signifie OSC seul. |
window_title.enabled | booléen | true | Le titre de fenêtre / d'onglet du terminal hôte suit la session ayant le focus (son nom, plus son titre OSC 0/2 vivant s'il y en a un), via OSC 0. |
mouse.enabled | booléen | true | Clic, molette et glissé. L'activer coûte le pass-through de Shift+↑/Shift+↓ : gocui donne à ces touches et aux boutons de souris les mêmes valeurs, les deux ne peuvent pas coexister. |
mouse.wheel_lines | entier ≥ 1 | 3 | Lignes parcourues par un cran de molette dans le panneau de sortie. |
mouse.forward_to_app | booléen | true | Un programme dans une session peut recevoir la souris, et seulement une fois qu'il l'a demandée par un DECSET 9/1000/1002/1003 (vim avec set mouse=a, htop). Un shell ou une CLI d'agent ne la demande jamais. |
perf.refresh_interval_ms | 0, ou entier ≥ 100 | 5000 | Fréquence d'échantillonnage des process de chaque session pour l'onglet ressources. Tourne en arrière-plan que l'onglet soit ouvert ou non, en une seule passe pour toutes les sessions. 0 coupe l'échantillonnage : c'est le seul travail périodique qui lance un process. |
env_tab.mask_secrets | booléen | true | L'onglet environnement masque la valeur des variables dont le nom ressemble à un identifiant (TOKEN, SECRET, PASSWORD, AUTH, ..._KEY). |
control.enabled | booléen | false | L'API de contrôle par les agents est ouverte — le socket que lazyshell ctl pilote. Désactivée par défaut ; lire la page sessions d'agents IA avant de l'activer, car elle permet à tout processus tournant sous votre compte de créer des sessions, d'y taper et de lire leur sortie. |
agent_stats_command | chaîne | "" | Exécutée pour la session d'agent IA sélectionnée, avec $LAZYSHELL_SESSION_ID dans son environnement ; sa première ligne de sortie est affichée à côté de la durée du tour. Vide la désactive. |
restore_layout | ask | always | never | ask | Ce que fait le lancement d'une disposition de sessions sauvegardée pour le répertoire courant (voir persistance de la disposition) quand il n'y a pas de lazyshell.yml : ask affiche une popup de confirmation, always restaure sans la montrer, never ne la propose jamais. |
Spécifications de touches
Les spécifications suivent la syntaxe de gocui.Parse : un caractère nu
(n), ou Ctrl+N, Alt+Space, Tab,
Esc.
Les identifiants d'action remappables sont :
new_session, new_named_session, new_session_in_dir, kill_session,
delete_session, rename_session, duplicate_session,
restart_session, zoom, next_tab, prev_tab,
filter_sessions, export_session, toggle_broadcast,
jump_next_blocked, jump_prev_prompt, jump_next_prompt,
copy_last_output, arm_watch, set_group, filter_group,
broadcast_group, kill_group, restart_group,
toggle_debug,
select_next, select_prev,
cycle_focus, help, quit.
Un identifiant hors de cette liste est signalé plutôt qu'ignoré.
Couleurs
Les couleurs acceptent l'une des trois formes :
-
un nom de couleur ANSI —
black,red,green,yellow,blue,magenta,cyan,white, et chacun préfixé debright(brightblue, …). Ils suivent la palette de votre terminal ; -
un nom de couleur W3C/CSS (
navy,teal,chartreuse, …) ou#rrggbb, pour une couleur précise plutôt qu'un emplacement de palette ; default, pour la couleur par défaut du terminal.
Les deux jeux de noms se recouvrent et se contredisent : en CSS, blue vaut
#0000FF, que le terminal montre comme du bleu vif. lazyshell résout
d'abord les noms ANSI, donc blue vous donne le bleu ordinaire ; écrivez
navy pour celui du CSS, ou brightblue pour l'emplacement vif du
terminal.
Exemple complet
Voici ce qu'écrit lazyshell config init — chaque option à sa valeur par défaut, donc
vous pouvez supprimer tout ce que vous ne changez pas.
# ~/.config/lazyshell/config.yml
language: fr
shell: ""
term: xterm-256color
scrollback_size: 10000
sessions_panel_width: 40
sessions_panel_height: 10
agents_panel_height: 6
portrait_max_width: 84
portrait_min_height: 45
refresh_interval_ms: 30
kill_timeout_ms: 2000
prefix_key: Ctrl+O
keybindings:
new_session: "n"
new_named_session: "N"
new_session_in_dir: "M"
kill_session: "x"
delete_session: "D"
rename_session: "r"
duplicate_session: "c"
restart_session: "R"
zoom: "z"
next_tab: "]"
prev_tab: "["
filter_sessions: "/"
export_session: "w"
toggle_broadcast: "b"
jump_next_blocked: "B"
jump_prev_prompt: "{"
jump_next_prompt: "}"
copy_last_output: "Y"
arm_watch: "v"
set_group: "g"
filter_group: "G"
broadcast_group: "A"
kill_group: "X"
restart_group: "W"
toggle_debug: F12
select_next: "j"
select_prev: "k"
cycle_focus: Tab
help: "?"
quit: "q"
markers:
bell: "!"
alt_screen: "#"
activity: "●"
broadcast: "+"
agent_idle: "●"
agent_working: "●"
agent_blocked: "●"
agent_done: "●"
agent_idle_color: "green"
agent_working_color: "yellow"
agent_blocked_color: "red"
agent_done_color: "blue"
command_failed: "✗"
restart: "↻"
scroll:
page_lines: 0
half_page_divisor: 2
theme:
active_border_color: green
inactive_border_color: default
selected_bg_color: blue
locked_border_color: red
tab_active_color: green
clipboard:
fallback_command: ""
notify:
fallback_command: ""
window_title:
enabled: true
mouse:
enabled: true
wheel_lines: 3
forward_to_app: true
perf:
refresh_interval_ms: 5000
env_tab:
mask_secrets: true
control:
enabled: false
agent_stats_command: ""
restore_layout: ask