T
ThePrimeagen
#Arch Linux#Hyprland#Neovim

Optimiser son environnement de développement Linux Arch

Découvrez comment configurer un environnement de développement Linux Arch rapide et efficace, axé sur l'expérience développeur et la navigation clavier, avec Hyprland, Neovim et tmux.

5 min de lectureGuide IA

Introduction

Cet article détaille la configuration d'un environnement de développement Linux Arch optimisé pour la productivité et l'expérience développeur, en mettant l'accent sur la navigation clavier rapide et l'efficacité des outils.

Précis de configuration

Élément Version / Lien
Système d'exploitation Arch Linux x86_64
Noyau Linux 6.1.4-arch1-1
Shell zsh 5.9
Gestionnaire de fenêtres Hyprland 0.49.0 (Wayland)
Terminal Ghostty (non spécifié) + tmux 3.5a
Éditeur de texte Neovim v0.11.2
Navigateur Zen (non spécifié)
Plugins Neovim Harpoon, Telescope, UndoTree, Fugitive (pour Git)
Outils CI/CD Blacksmith (pour GitHub Actions)
Autres outils waybar (barre de statut), hyprshot (capture d'écran), wshowkeys (affichage des touches)

Guide étape par étape

Philosophie de l'optimisation

La philosophie derrière cette configuration est de privilégier l'expérience développeur et la rapidité d'exécution plutôt que l'esthétique pure. L'objectif est de minimiser les cycles mentaux et les distractions.

  1. Ne pas s'éloigner des valeurs par défaut : Moins il y a de configurations personnalisées, moins il y a de maintenance et de risques de rupture.
  2. Ne jamais chercher avec les yeux (si possible) : Utiliser des raccourcis clavier directs ou des outils de recherche floue pour naviguer.
  3. Ne pas changer pour la nouveauté : Adopter un nouvel outil uniquement s'il apporte un avantage fonctionnel clair, pas seulement parce qu'il est récent.
  4. Créer des outils pour améliorer l'expérience, pas pour économiser des frappes : Les personnalisations doivent résoudre de vrais problèmes de flux de travail, pas juste raccourcir des commandes déjà simples.

Gestionnaire de fenêtres et terminal

Le gestionnaire de fenêtres utilisé est Hyprland, offrant une expérience fluide sans déchirement d'écran. Les animations sont désactivées pour une réactivité maximale. L'auteur a choisi d'utiliser des "gaps" (espaces entre les fenêtres) et des coins arrondis, malgré des préférences antérieures, dans une démarche d'expérimentation.

  • Capture d'écran (région) :

    bind = $mainMod, S, exec, hyprshot -m region --clipboard-only
    
    • $mainMod est la touche Super (Windows).
    • hyprshot -m region --clipboard-only capture une région sélectionnée et la copie dans le presse-papiers.
  • Rechargement de l'environnement de développement :

    bind = $mainMod SHIFT, D, exec, DEV_ENV=~/home/theprimeagen/personal/dev/dev-env
    
    • $mainMod SHIFT, D recharge l'environnement de développement.
  • Redémarrage de la barre de statut (waybar) :

    bind = $mainMod, W, exec, pkill waybar && waybar &
    
    • $mainMod, W tue le processus waybar et le redémarre.

Le terminal est Ghostty combiné à tmux. tmux est préféré à Zellij pour sa consistance et sa familiarité, malgré sa nouveauté relative.

  • Création de session tmux détachée :
    tmux new-session -ds $selected_name -c $selected
    
    • $selected_name est le nom de la session.
    • $selected est le répertoire de démarrage.

Barre de statut (waybar)

La barre de statut affiche des informations essentielles sans fioritures :

  • Statut du serveur : Indique si OBS et le panneau d'administration sont connectés.
  • Espaces de travail : Visualisation des espaces de travail actifs sur le moniteur.
  • Date et heure : Affiche uniquement le jour du mois et l'heure (ex: 04 - 15:51), car le mois et l'année sont considérés comme des informations superflues.
  • Statut système : Volume, niveau de batterie, connexion réseau, utilisation CPU et mémoire.

Navigation et gestion des applications

L'objectif est d'accéder aux applications et aux fichiers avec un minimum de frappes, en utilisant principalement des raccourcis clavier et des outils de recherche floue.

  • Navigation rapide entre applications (ex: Zen Browser) :
    bind = $mainMod, 1, exec, zen
    bind = $mainMod, 2, exec, discord
    bind = $mainMod, 3, exec, twitter
    
    • $mainMod, 1 ouvre ou bascule vers le navigateur Zen.
    • $mainMod, 2 ouvre ou bascule vers Discord.
    • $mainMod, 3 ouvre ou bascule vers Twitter.

Éditeur de texte (Neovim)

Neovim est configuré pour une navigation rapide et une intégration Git efficace. L'auteur utilise Neovim (Nvim v0.11.2) et des plugins pour améliorer l'expérience.

  • Navigation LSP (Language Server Protocol) :

    • gd (jump to definition) : Permet de sauter à la définition d'une fonction ou variable.
    • Shift+K : Affiche la documentation contextuelle d'une fonction ou variable.
    • vrr (find references) : Liste toutes les références d'un symbole.
  • Harpoon : Un plugin Neovim pour marquer et naviguer rapidement entre les fichiers importants.

  • Telescope : Un outil de recherche floue pour les fichiers, les tampons, les commandes, etc.

  • UndoTree : Visualise l'historique des modifications comme un arbre, permettant de naviguer dans les branches d'annulation non linéaires.

  • Intégration Git : Utilisation de fugitive.vim pour gérer Git directement depuis Neovim, permettant de sélectionner des "chunks" de code à ajouter ou annuler.

Tableaux comparatifs

Caractéristique tmux Zellij
Nouveauté Plus ancien Plus récent
Commandes de session tmux new-session -ds $name -c $dir zellij --session $name --start-dir $dir detach
Simplicité Consistant, familier Peut être perçu comme plus moderne
Préférence de l'auteur Préféré pour sa consistance Non préféré (pas de raison fonctionnelle de changer)
Caractéristique Super (touche Windows) Alt
Conflits de raccourcis Moins de conflits avec d'autres applications Nombreux conflits avec les raccourcis des applications
Mémoire musculaire Nécessite un réapprentissage si habitué à Alt Huit ans de mémoire musculaire pour l'auteur
Préférence de l'auteur Adopté pour éviter les conflits Abandonné
Caractéristique fastfetch yazi
Utilité Affiche les informations système (OS, IP, batterie, etc.) Gestionnaire de fichiers en terminal
Complexité Légèrement confus Non compris par l'auteur
Préférence de l'auteur Supprimé (informations jugées superflues) Supprimé (utilité non perçue)

⚠️ Erreurs fréquentes et pièges

  1. S'éloigner des valeurs par défaut sans raison valable : Chaque ligne de configuration personnalisée ajoute de la dette technique et de la maintenance.
  2. Rechercher visuellement des éléments : Perte de temps et de concentration. La navigation clavier directe ou la recherche floue sont plus efficaces.
  3. Adopter de nouveaux outils uniquement pour leur nouveauté : Un outil doit résoudre un problème réel ou améliorer significativement le flux de travail.
  4. Créer des alias pour chaque commande Git : Les alias excessifs peuvent rendre le code moins lisible et créer des problèmes de maintenance si les commandes sous-jacentes changent.
  5. Utiliser des fonctionnalités d'interface graphique lentes (ex: "explode feature" de macOS) : Ces fonctionnalités brisent le "flow" et sont inefficaces pour les développeurs.

Glossaire

Hyprland : Un gestionnaire de fenêtres dynamique (tiling window manager) pour Wayland, axé sur la performance et la personnalisation.
tmux : Un multiplexeur de terminal qui permet de créer et de gérer plusieurs sessions de terminal, fenêtres et panneaux dans une seule fenêtre de terminal.
Neovim : Un éditeur de texte hautement configurable et extensible, basé sur Vim, populaire parmi les développeurs pour son efficacité et ses plugins.
LSP (Language Server Protocol) : Un protocole standardisé qui permet aux éditeurs de texte de communiquer avec des serveurs de langage pour fournir des fonctionnalités comme la complétion de code, la navigation de définition et la détection d'erreurs.
Telescope : Un plugin Neovim qui fournit une interface de recherche floue et interactive pour naviguer dans les fichiers, les tampons, l'historique Git et bien plus encore.

Points clés à retenir

  • La productivité en développement repose sur l'optimisation de la navigation et la réduction des distractions.
  • Privilégier les raccourcis clavier et les outils de recherche floue pour minimiser les cycles mentaux.
  • Éviter les configurations excessives et les outils qui n'apportent pas de valeur fonctionnelle claire.
  • Maîtriser la frappe au clavier est une compétence fondamentale pour tout développeur.
  • Chaque ligne de configuration personnalisée est une dette technique potentielle.
  • Concentrez-vous sur les "parties amusantes" du développement (la construction) en automatisant les tâches répétitives.

Ressources

  • Hyprland Wiki : [Note de l'éditeur : lien vers le wiki Hyprland à ajouter]
  • Neovim : [Note de l'éditeur : lien vers neovim.io à ajouter]
  • Blacksmith : [Note de l'éditeur : lien vers blacksmith.sh à ajouter]
  • Folke Lemaitre GitHub : [Note de l'éditeur : lien vers le profil GitHub de Folke Lemaitre à ajouter]