Thèmes
pi peut créer des thèmes. Demandez-lui d'en créer un pour votre configuration.
Les thèmes sont des fichiers JSON qui définissent les couleurs du TUI.
Table des matières
Emplacements
Pi charge les thèmes de:
- Intégré:
dark,light - Mondial:
~/.pi/agent/themes/*.json - Projet:
.pi/themes/*.json(uniquement une fois le projet approuvé) - Forfaits:
themes/répertoires oupi.themesentrées danspackage.json - Paramètres:
themestableau avec des fichiers ou des répertoires - CLI:
--theme <path>(répétable)
Désactivez la découverte avec --no-themes.
Sélection d'un thème
Sélectionnez un thème via /settings ou en settings.json:
{
"theme": "my-theme"
}Lors de la première exécution, pi détecte l'arrière-plan de votre terminal et prend par défaut la valeur dark ou light.
Création d'un thème personnalisé
- Créez un fichier de thème:
mkdir -p ~/.pi/agent/themes
vim ~/.pi/agent/themes/my-theme.json- Définissez le thème avec toutes les couleurs requises (voir Color Tokens):
{
"$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
"name": "my-theme",
"vars": {
"primary": "#00aaff",
"secondary": 242
},
"colors": {
"accent": "primary",
"border": "primary",
"borderAccent": "#00ffff",
"borderMuted": "secondary",
"success": "#00ff00",
"error": "#ff0000",
"warning": "#ffff00",
"muted": "secondary",
"dim": 240,
"text": "",
"thinkingText": "secondary",
"selectedBg": "#2d2d30",
"scrollbarThumb": "#555566",
"userMessageBg": "#2d2d30",
"userMessageText": "",
"customMessageBg": "#2d2d30",
"customMessageText": "",
"customMessageLabel": "primary",
"toolPendingBg": "#1e1e2e",
"toolSuccessBg": "#1e2e1e",
"toolErrorBg": "#2e1e1e",
"toolTitle": "primary",
"toolOutput": "",
"mdHeading": "#ffaa00",
"mdLink": "primary",
"mdLinkUrl": "secondary",
"mdCode": "#00ffff",
"mdCodeBlock": "",
"mdCodeBlockBorder": "secondary",
"mdQuote": "secondary",
"mdQuoteBorder": "secondary",
"mdHr": "secondary",
"mdListBullet": "#00ffff",
"toolDiffAdded": "#00ff00",
"toolDiffRemoved": "#ff0000",
"toolDiffContext": "secondary",
"syntaxComment": "secondary",
"syntaxKeyword": "primary",
"syntaxFunction": "#00aaff",
"syntaxVariable": "#ffaa00",
"syntaxString": "#00ff00",
"syntaxNumber": "#ff00ff",
"syntaxType": "#00aaff",
"syntaxOperator": "primary",
"syntaxPunctuation": "secondary",
"thinkingOff": "secondary",
"thinkingMinimal": "primary",
"thinkingLow": "#00aaff",
"thinkingMedium": "#00ffff",
"thinkingHigh": "#ff00ff",
"thinkingXhigh": "#ff0000",
"thinkingMax": "#ff0088",
"bashMode": "#ffaa00"
}
}- Sélectionnez le thème via
/settings.
Rechargement à chaud: Lorsque vous modifiez le fichier de thème personnalisé actuellement actif, pi le recharge automatiquement pour un retour visuel immédiat.
Format du thème
{
"$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
"name": "my-theme",
"vars": {
"blue": "#0066cc",
"gray": 242
},
"colors": {
"accent": "blue",
"muted": "gray",
"text": "",
...
}
}nameest obligatoire, doit être unique et ne doit pas contenir/.varsest facultatif. Définissez ici les couleurs réutilisables, puis référencez-les danscolors.colorsdoit définir les 51 jetons requis.thinkingMaxest facultatif et revient àthinkingXhigh;scrollbarThumbest facultatif et revient àselectedBg.
Le champ $schema permet la saisie semi-automatique et la validation de l'éditeur.
Jetons de couleur
Chaque thème doit définir les 51 jetons de couleur requis. thinkingMax et scrollbarThumb sont facultatifs pour la compatibilité avec les thèmes existants; lorsqu'ils sont omis, ils utilisent respectivement thinkingXhigh et selectedBg.
Interface utilisateur principale (11 couleurs)
| Jeton | But |
|---|---|
accent |
Accent principal (logo, éléments sélectionnés, curseur) |
border |
Frontières normales |
borderAccent |
Bordures en surbrillance |
borderMuted |
Bordures subtiles (éditeur) |
success |
États de réussite |
error |
États d'erreur |
warning |
États d'avertissement |
muted |
Texte secondaire |
dim |
Texte tertiaire |
text |
Texte par défaut (généralement "") |
thinkingText |
Texte du bloc de réflexion |
Arrière-plans et contenu (11 requis, 1 facultatif)
| Jeton | But |
|---|---|
selectedBg |
Arrière-plan de la ligne sélectionnée |
scrollbarThumb |
Arrière-plan du pouce de la barre de défilement plein écran; facultatif, revient à selectedBg |
userMessageBg |
Contexte du message utilisateur |
userMessageText |
Texte du message utilisateur |
customMessageBg |
Arrière-plan du message d'extension |
customMessageText |
Texte du message d'extension |
customMessageLabel |
Libellé du message d'extension |
toolPendingBg |
Boîte à outils (en attente) |
toolSuccessBg |
Boîte à outils (succès) |
toolErrorBg |
Boîte à outils (erreur) |
toolTitle |
Titre de l'outil |
toolOutput |
Texte de sortie de l'outil |
Markdown (10 couleurs)
| Jeton | But |
|---|---|
mdHeading |
Rubriques |
mdLink |
Texte du lien |
mdLinkUrl |
URL du lien |
mdCode |
Code en ligne |
mdCodeBlock |
Contenu du bloc de code |
mdCodeBlockBorder |
Clôtures de blocs de code |
mdQuote |
Texte de citation |
mdQuoteBorder |
Bordure de citation de bloc |
mdHr |
Règle horizontale |
mdListBullet |
Liste des puces |
Différents d'outils (3 couleurs)
| Jeton | But |
|---|---|
toolDiffAdded |
Lignes ajoutées |
toolDiffRemoved |
Lignes supprimées |
toolDiffContext |
Lignes de contexte |
Mise en évidence de la syntaxe (9 couleurs)
| Jeton | But |
|---|---|
syntaxComment |
Commentaires |
syntaxKeyword |
Mots-clés |
syntaxFunction |
Noms des fonctions |
syntaxVariable |
Variables |
syntaxString |
Cordes |
syntaxNumber |
Nombres |
syntaxType |
Espèces |
syntaxOperator |
Opérateurs |
syntaxPunctuation |
Ponctuation |
Bordures du niveau de réflexion (6 obligatoires, 1 facultative)
Couleurs de bordure de l'éditeur indiquant le niveau de réflexion (hiérarchie visuelle de subtil à proéminent):
| Jeton | But |
|---|---|
thinkingOff |
Penser |
thinkingMinimal |
Pensée minimale |
thinkingLow |
Faible réflexion |
thinkingMedium |
Pensée moyenne |
thinkingHigh |
Haute réflexion |
thinkingXhigh |
Réflexion très élevée |
thinkingMax |
Réflexion maximale; facultatif, revient à thinkingXhigh |
Mode Bash (1 couleur)
| Jeton | But |
|---|---|
bashMode |
Bordure de l'éditeur en mode bash (préfixe !) |
Exportation HTML (facultatif)
La section export contrôle les couleurs pour la sortie HTML /export. En cas d'omission, les couleurs sont dérivées de userMessageBg.
{
"export": {
"pageBg": "#18181e",
"cardBg": "#1e1e24",
"infoBg": "#3c3728"
}
}Valeurs de couleur
Quatre formats sont pris en charge:
| Format | Exemple | Description |
|---|---|---|
| Hex | "#ff0000" |
RVB hexadécimal à 6 chiffres |
| 256 couleurs | 39 |
Index de palette xterm de 256 couleurs (0-255) |
| Variable | "primary" |
Référence à une entrée vars |
| Défaut | "" |
Couleur par défaut du terminal |
Palette de 256 couleurs
0-15: couleurs ANSI de base (en fonction du terminal)16-231: cube RVB 6×6×6 (16 + 36×R + 6×G + Boù R, V, B sont 0-5)232-255: rampe en niveaux de gris
Compatibilité des terminaux
Pi utilise des couleurs RVB 24 bits. La plupart des terminaux modernes le prennent en charge (iTerm2, Kitty, WezTerm, Windows Terminal, VS Code). Pour les terminaux plus anciens ne prenant en charge que 256 couleurs, pi revient à l'approximation la plus proche.
Vérifiez la prise en charge des couleurs vraies:
echo $COLORTERM # Should output "truecolor" or "24bit"Conseils
Terminaux sombres: Utilisez des couleurs vives et saturées avec un contraste plus élevé.
Bornes claires: Utilisez des couleurs plus sombres et atténuées avec un contraste plus faible.
Harmonie des couleurs: Commencez par une palette de base (Nord, Gruvbox, Tokyo Night), définissez-la en vars et référencez-la de manière cohérente.
Test: Vérifiez votre thème avec différents types de messages, états d'outils, contenu de démarque et texte long renvoyé à la ligne.
Code VS: Réglez terminal.integrated.minimumContrastRatio sur 1 pour des couleurs précises.
Exemples
Voir les thèmes intégrés: