Buisson
D’aussi loin que je me souvienne, j’ai toujours aimé customiser les choses que j’aimais.
Ça a commencé sur les jeux vidéo. World of Warcraft avec la transmogrification : des heures à parfaire l’apparence d’un personnage que j’allais regarder pendant des centaines d’autres heures.


Diablo 3 aussi.

Avec les années, cet amour de la customisation a évolué vers deux rabbit holes : le linux ricing et les claviers custom. Deux univers entiers construits autour d’une même idée.


J’aime cette idée de master your craft. Et pour vraiment maîtriser ses outils, le meilleur moyen que j’ai trouvé c’est de les designer soi-même. Ils deviennent une extension de ta façon de penser. Ils rentrent chez toi.
Bon. Les thèmes de couleurs.
J’ai eu une période où je changeais de thème Zed / Ghostty en espérant tomber sur le thème définitif. Des dizaines d’essais plus tard, deux ont retenu mon attention.
Le premier : Evergarden. Il a l’équilibre de couleurs qui me plaît le plus parmi tout ce que j’ai essayé.

Evergarden est un thème Neovim créé par comfysage, maintenu aujourd’hui par l’organisation Everviolet sur GitHub. Sa base : Everforest.
Everforest, c’est l’œuvre de Sainnhe Park. Au départ, le projet s’appelait “Forest Night” : un mix de deux thèmes verts de l’époque, vim-color-spring-night et sacredforest-vim. Un point de départ, pas encore un thème à part entière.
Avec le temps, la variante dark absorbe des influences de Gruvbox Material, une autre création de sainnhe. Une variante light apparaît. En mars 2021, le nom change : Forest Night devient Everforest. Sainnhe lui-même reconnaît que le projet est devenu autre chose.
La philosophie reste la même depuis le début : du vert, mais chaud. Du contraste, mais soft. Un thème fait pour protéger les yeux pendant les longues sessions, qui marche bien avec redshift et f.lux. Plus de 4 000 étoiles sur GitHub, des ports sur des dizaines d’éditeurs.
Evergarden reprend cette palette et y ajoute ses propres couches : des variantes saisonnières (winter, fall, spring, summer), une organisation inspirée de Catppuccin, une ambiance que leur repo résume avec “cozy morning coding”.
C’est ça que j’aime. Pas juste les couleurs, l’ambiance que ça crée. C’est difficile à expliquer rationnellement. Mes yeux aiment aller là.
Le second : Flexoki, de Steph Ango, l’homme derrière Obsidian. Steph a passé des années à travailler avec des encres et des pigments, et a voulu résoudre un problème difficile : redonner la sensation du papier à un écran émissif. Flexoki est le résultat de cette recherche.

Le nom vient de la flexographie, un procédé d’impression industriel pour le papier et le carton.
L’encre sur papier est soustractive : on mélange des pigments qui absorbent la lumière. Un écran LCD ou OLED est additif : on additionne des lumières. Mélanger du bleu et du jaune en peinture donne du vert. En digital, ça donne un marron terne. Réduire l’opacité d’une couleur digitale la désature, alors qu’une aquarelle diluée reste vivante.
Sa principale référence : Solarized d’Ethan Schoonover (2011), un des premiers thèmes à avoir pensé en termes de relations de luminosité dans l’espace colorimétrique CIELAB. Steph a poussé ça plus loin avec l’espace Oklab, en augmentant l’intensité des couleurs de façon exponentielle pour simuler la vibrance des pigments dilués.
C’est le thème le plus abouti fonctionnellement que j’ai utilisé. Pensé pour la lisibilité, calibré pour la perception humaine, construit pour les sessions longues.
Du coup je naviguais entre les deux selon mon envie. Evergarden pour ses belles couleurs. Flexoki pour son accessibilité.
Tu le vois venir.
J’ai décidé de faire le mix de ces deux mondes : de belles couleurs avec un maximum d’accessibilité.
C’est là que Buisson est né.
Le nom vient de là : les couleurs d’Everforest, oui. Mais aussi parce qu’un buisson c’est accessible. On peut tomber dessus sans trop se faire mal, s’y cacher, vivre dedans je suppose. J’aurais pu l’appeler Bush, mais il fallait cette dernière pointe de patriotisme 🇫🇷

Palette
Deux familles dans la palette. Les couleurs de base d’abord, qui couvrent tout ce qui n’est pas de la syntaxe : fonds, texte, numéros de ligne, commentaires. Puis les accents, les six couleurs botaniques qui colorent le code.
Toutes les accents ont un nom de plante ou de matière naturelle. Hibiscus, sage, river moss, slate sky, thistle, ochre. C’est volontaire : chaque nom contraint les décisions futures. Si une couleur ne peut pas s’appeler quelque chose de naturel, elle n’a pas sa place dans Buisson.

Syntax highlighting
La question centrale : quelle couleur va où, et pourquoi. Probablement ce que j’ai trouvé le plus dur à faire.
Trois niveaux de lecture.
Le niveau 1, c’est la structure du langage. Keywords et strings. Les deux éléments les plus présents dans n’importe quel fichier. Du coup ce sont eux qui reçoivent les couleurs les plus chaudes : hibiscus pour les keywords (if, def, for, return), ochre pour les strings.
Le choix d’hibiscus sur les keywords vient directement d’Evergarden. Leur rose-rouge sur chaque ligne de structure crée cette chaleur enveloppante que j’aimais dans leur thème. Le code respire.
Le niveau 2, c’est la sémantique : ce que le code fait (fonctions en sage) et ce qu’il est (types en river moss). Le vert pour les fonctions, c’est une convention qu’on retrouve dans Tokyo Night, Catppuccin, la plupart des grands thèmes. Le teal pour les types, c’est architectural.
Le niveau 3, c’est le support. Opérateurs en thistle, nombres en slate sky, commentaires en fg2 italique. Les commentaires en italique c’est non-négociable : c’est la convention pour dire “c’est une note, pas du code exécutable”. Les variables n’ont pas de couleur accent, juste fg0. Si tout est coloré, rien ne ressort.

Base colors
Le premier principe : aucun noir pur, aucun blanc pur.
Les backgrounds du mode sombre ont tous un undertone olive chaud. Le plus sombre, bg0, c’est #181916. Pas #000000. Pareil en clair : le fond principal c’est #f5f1e8. Du parchemin, pas du blanc éclatant.
C’est ça qui crée l’effet papier. Un blanc pur sur fond noir crée un halo rétinien. La fatigue après quelques heures de code vient souvent de là. Ajouter une teinte chaude aux fonds réduit ça sans sacrifier la lisibilité.
Neuf tokens, de bg0 à fg0 :

Chaque token a un ratio de contraste calculé. fg0 sur bg1 donne 11.55:1, AAA selon WCAG 2.1. Les commentaires à 5.49:1, AA. Intentionnellement plus bas : un commentaire doit être lisible mais ne rivalise pas avec le code.
Accent colors
Six couleurs. Chacune existe en deux versions : une pour le mode sombre, une pour le mode clair.
Le problème classique des thèmes clairs : les accents calibrés pour un fond sombre sont trop lumineux sur fond clair. Du coup chaque couleur a sa paire, même hue, lightness ajusté pour tenir le ratio AA sur les deux fonds.

Le processus de sélection a pris du temps. J’ai rejeté le goldenrod (trop jaune), le wild clove (trop proche d’hibiscus). River moss a dû être poussé vers H=180° en mode clair pour rester distinct du sage : à faible luminosité, deux verts séparés par 59° de hue se compriment et deviennent indiscernables. Ce genre de détail, tu ne le vois qu’en testant sur du vrai code, pendant des heures.
Ports
L’architecture : un repo principal buisson-theme comme source de vérité, des repos satellites dédiés que je ne touche jamais directement, un GitHub Action qui synchronise automatiquement à chaque modification.
Chaque marketplace a ses propres contraintes. Zed exige un git submodule avec un ID qui ne contient pas le mot “zed”. Obsidian veut manifest.json et theme.css exactement à la racine d’un repo dédié. VS Code a son propre process via Open VSX.
Publier un thème, c’est plus compliqué que de le créer.
Honnêtement, je ne crois pas que Buisson soit terminé. Les thèmes de couleurs ne le sont jamais vraiment.
Ce qui est sûr : c’est la première fois depuis longtemps que je n’ai plus envie d’en changer.
Ce blog tourne d’ailleurs sur Buisson — le fond crème, les accents rouges-rosés, les couleurs de code. C’est peut-être le meilleur test qu’un thème puisse passer : qu’on l’utilise pour construire les choses qu’on aime, et qu’on n’y pense plus.
- 01.07.2026 Ajout des liens vers les ports sur les différentes marketplaces