← Home

Configuration Neovim

Une configuration Neovim rapide et orientée TypeScript/JavaScript, construite sur NvChad v2.5, avec synchronisation automatique du thème macOS, une chaîne d'outils lint/format propulsée par oxc, et une intégration aux panneaux Zellij.

Cette configuration se trouve dans nvim/ au sein de mon monorepo dotfiles, aux côtés de mes outils shell, terminal et macOS.

Points forts

  • Thème adaptatif au système — lit AppleInterfaceStyle de macOS au démarrage et bascule automatiquement entre github_dark / github_light (même logique de détection réutilisée pour l'ombrage de toggleterm)
  • Chaîne d'outils JS/TS orientée oxcoxlint pour le linting et un formateur oxfmt personnalisé branché sur conform.nvim, avec typescript-tools.nvim pilotant une instance tsserver rapide (pas de ts_ls via Mason) et des commandes dédiées à l'auto-import
  • Tableau de bord personnalisé — l'écran d'accueil NvDash est réécrit pour lister les fichiers récents et les projets récents (suivis via une autocommande) avec des raccourcis à une seule lettre
  • Navigation consciente de Zellij<C-hjkl> déplace le focus entre les splits Neovim et les panneaux Zellij de manière transparente
  • Interface Noice ajustée — la ligne de commande, le popupmenu et le hover/signature LSP passent par noice.nvim, avec filtrage des messages de progression LSP bruyants et des "aucun résultat"
  • Discord Rich Presence — activable à la demande avec :DiscordRichPresence (encapsule cord.nvim)
  • Outils gérés par Mason — serveurs LSP, linters et formateurs sont déclarés une seule fois dans chadrc.lua et installés automatiquement

Prérequis

  • Neovim >= 0.10.0
  • Git
  • Nerd Font (JetBrains Mono, défini comme guifont)
  • Node.js (pour les serveurs LSP)
  • ripgrep (recherche live Telescope)
  • Zellij (optionnel, pour la navigation entre panneaux)

Installation

Cette configuration fait partie d'un repo dotfiles plus large, donc nvim/ est un sous-répertoire plutôt qu'une racine de repo autonome.

# Sauvegarder la configuration existante
mv ~/.config/nvim ~/.config/nvim.bak
mv ~/.local/share/nvim ~/.local/share/nvim.bak

# Cloner le repo dotfiles et créer un lien symbolique vers la config nvim
git clone git@github.com:UgolinOlle/dotfiles.git ~/dotfiles
ln -s ~/dotfiles/nvim ~/.config/nvim

# Démarrer Neovim — les plugins et outils Mason s'installent automatiquement
nvim

Structure

nvim/
├── init.lua                 # Point d'entrée, bootstrap lazy.nvim
├── .stylua.toml             # Règles de formatage Lua
├── .neoconf.json             # Paramètres neodev/neoconf pour lua_ls
├── lua/
│   ├── chadrc.lua           # Config NvChad : détection de thème, UI, liste d'outils Mason
│   ├── options.lua          # Options Vim
│   ├── mappings.lua         # Raccourcis clavier
│   ├── autocmds.lua         # Autocommandes
│   ├── commands.lua         # Commandes utilisateur personnalisées (DiscordRichPresence)
│   ├── configs/
│   │   ├── conform.lua      # Configuration des formateurs (oxfmt, prettier, stylua...)
│   │   ├── lspconfig.lua    # Configuration des serveurs LSP + raccourcis d'import
│   │   ├── lint.lua         # Configuration nvim-lint (oxlint)
│   │   ├── noice.lua        # Interface Noice + filtrage des messages
│   │   ├── nvdash.lua       # Tableau de bord personnalisé (fichiers/projets récents)
│   │   ├── lazy.lua         # Options de lazy.nvim
│   │   ├── cmp.lua          # Configuration de la complétion
│   │   └── luasnip.lua      # Configuration des snippets
│   └── plugins/
│       ├── init.lua         # Spécifications des plugins
│       ├── telescope.lua    # Configuration Telescope + ui-select
│       └── gitgraph.lua     # Plugin de graphe git

Plugins

CatégoriePluginRôle
BaseNvChadFramework de configuration de base
LSPnvim-lspconfigConfiguration du client LSP
mason.nvim + mason-lspconfigInstallateur d'outils LSP/lint/format
typescript-tools.nvimServeur TS/JS rapide, auto-import, corrections
nvim-lspimportAuto-import multi-langage
Complétionnvim-cmpMoteur d'autocomplétion
LuaSnip + friendly-snippetsMoteur de snippets + collection de snippets
nvim-autopairsFermeture auto des accolades, intégration cmp
Format/Lintconform.nvimExécuteur de formateurs, format à la sauvegarde
nvim-lintLinting asynchrone (oxlint)
UInoice.nvimLigne de commande, popupmenu, UI hover LSP
nvim-notifyGestionnaire de notifications
indent-blankline.nvimGuides d'indentation
markview.nvimAperçu Markdown
nvim-web-deviconsIcônes de fichiers
Navigationtelescope.nvim (+ ui-select)Recherche floue
zellij-nav.nvimNavigation entre panneaux Zellij
Gitgitsigns.nvimDécorations git, aperçu de hunks, blame
gitgraph.nvimVisualisation du graphe git
Éditionnvim-surroundObjets texte d'encadrement
Comment.nvimCommentaires intelligents
nvim-treesitter + textobjectsColoration syntaxique et objets texte avancés
Terminaltoggleterm.nvimGestion du terminal, ombrage adapté au thème
Autrecord.nvimDiscord Rich Presence

Raccourcis clavier

Touche leader : Espace

Général

ToucheModeAction
<leader>wnEnregistrer le fichier
QnFermer la fenêtre
;nEntrer en mode commande
jk / kjiQuitter le mode insertion
<leader><leader>nRechercher des fichiers (Telescope)
sv / ssnDiviser verticalement / horizontalement
<leader>bnNouveau buffer
<leader>thnChanger de thème (Telescope)
<leader>nnnFermer les notifications (Noice)

LSP & Imports

ToucheModeAction
KnDocumentation au survol (bordure arrondie)
<leader>canActions de code
<leader>fmn, vFormater le fichier / la sélection
<leader>dynCopier le diagnostic sous le curseur dans le presse-papiers
<leader>ihnBasculer les inlay hints
<leader>lnDéclencher le lint
<leader>io / <leader>ianImporter le symbole sous le curseur / importer tout ce qui manque
<leader>to / <leader>tsnOrganiser les imports / trier les imports (TS)
<leader>tr / <leader>tinSupprimer les imports inutilisés / ajouter les imports manquants (TS)
<leader>tfnCorriger tous les problèmes TS

Git

ToucheModeAction
<leader>gpnAperçu du hunk
<leader>gbnBlame de la ligne
<leader>glnDessiner le graphe git
ToucheModeAction
<C-h/j/k/l>nNaviguer entre les panneaux Zellij
<C-\>n, tBasculer le terminal

Serveurs LSP

Installés automatiquement via Mason (chadrc.lua) et configurés dans configs/lspconfig.lua :

LangageServeur
Lualua_ls (avec les chemins de bibliothèques NvChad/Lazy préchargés)
TypeScript/JavaScripttypescript-tools.nvim (plugin dédié, pas via Mason)
HTMLhtml
CSScssls, tailwindcss
Web (JSON/CSS-in-JS)biome
Emmetemmet_ls
ESLinteslint
Bashbashls
JSONjson-lsp
Dockerdockerfile-language-server, docker-compose-language-service
Markdownmarksman

Formatage & Linting

Le formatage et le linting JS/TS s'appuient sur oxc pour la rapidité ; tout le reste utilise Prettier ou des formateurs dédiés. Le format à la sauvegarde est activé via conform.nvim (configs/conform.lua), le linting s'exécute sur BufEnter / BufWritePost / InsertLeave via nvim-lint (configs/lint.lua).

LangageFormateurLinter
Luastylua
JavaScript/TypeScript (+ JSX/TSX)oxfmt (oxc)oxlint
JSON/JSONCprettier
HTML/CSSprettier
Markdownprettier
YAMLprettier
SQLsqlfmt
Shell (sh/bash/zsh)shfmt

Langages Treesitter

Installés automatiquement : vim, lua, vimdoc, html, css, javascript, typescript, tsx, json, yaml, markdown, bash

Personnalisation

Thème

Le thème se synchronise automatiquement avec l'apparence système de macOS (lua/chadrc.lua). Pour fixer un thème manuellement :

-- lua/chadrc.lua
M.base46 = {
  theme = "github_dark", -- ou n'importe quel thème NvChad
}

Ajouter des serveurs LSP

-- lua/configs/lspconfig.lua
local servers = {
  "html",
  "cssls",
  -- ajoutez votre serveur ici
}

Ajouter des formateurs

-- lua/configs/conform.lua
formatters_by_ft = {
  python = { "black" },
  -- ajoutez votre formateur ici
}

Licence

Unlicense — domaine public.