Customize Hyprland with Lua (2027 Edition)

Cette vidéo présente la transition d’Hyprland vers Lua comme langage de configuration natif, avec un tutoriel complet d’installation sur NixOS et une démonstration des avantages de Lua (LSP, boucles, lisibilité).

Voir la source

SYNTHÈSE STRUCTURÉE

Pourquoi Lua remplace le DSL propriétaire

L’auteur explique que Vaxry, créateur d’Hyprland, a choisi Lua car « il y a tellement de choses que nous essayons d’intégrer dans Hyprland que je ne pense pas qu’un langage de configuration ait encore du sens ». Lua est qualifié de « minuscule, vendable, embarqué et présent sur presque tous les systèmes ». L’avantage immédiat est la disponibilité native de la coloration syntaxique et des diagnostics LSP, comme le montre l’exemple d’OSWM où survoler une fonction affiche ses paramètres et son type de retour.

Installation d’Hyprland 0.55.0 sur NixOS

Le tutoriel commence par une installation fraîche de NixOS avec une partition GPT : 1 Go pour EFI, 4 Go pour swap, le reste pour root. Les commandes clés sont :

  • cfdisk pour partitionner
  • mkfs.ext4 -L nixos /dev/vda3 pour le système de fichiers
  • mkfs.fat -F 32 /dev/vda1 pour la partition boot
  • mkswap /dev/vda2 puis swapon /dev/vda2

Configuration du flake Nix pour Hyprland

Pour obtenir la version 0.55.0 (qui inclut le support Lua), l’auteur crée un flake.nix avec une entrée spécifique :

inputs = {
  nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
  hyprland.url = "github:hyprwm/Hyprland?tag=v0.55.0";
};

Dans configuration.nix, il active Hyprland avec :

programs.hyprland = {
  enable = true;
  xwayland.enable = true;
  package = inputs.hyprland.packages."x86_64-linux".hyprland;
};

Il ajoute aussi le portail XDG : inputs.hyprland.packages."x86_64-linux".xdg-desktop-portal-hyprland.

Génération du fichier d’aide pour le LSP Lua

L’auteur utilise un script Python fourni dans le dépôt Hyprland pour générer automatiquement le fichier hl-meta.lua. La commande est :

python ./meta/gen-hl-meta.py

Ce fichier contient tous les alias et types pour les événements et fonctions d’Hyprland, ce qui permet au LSP Lua de fournir des diagnostics précis. L’auteur note : « Pour OXWM, j’ai dû ajouter manuellement chaque champ… s’il existe une méthode correcte pour automatiser cela, c’est assez cool ».

Configuration du fichier .luarc.json pour le LSP

Pour que le LSP Lua fonctionne avec Hyprland, il faut créer un fichier .luarc.json dans ~/.config/hypr/ :

{
  "workspace": {
    "library": ["/home/tony/.config/hypr"]
  },
  "diagnostics": {
    "globals": ["hl"]
  }
}

Cela indique à l’analyseur Lua de reconnaître la table globale hl et de chercher les définitions dans le répertoire de configuration.

Personnalisation rapide des gaps et des coins arrondis

L’auteur modifie les paramètres esthétiques directement dans hyprland.lua :

  • gaps_in = 2 et gaps_out = 5 pour réduire les espaces
  • rounding = 0 pour désactiver les coins arrondis, avec le commentaire : « Je ne supporte pas les coins arrondis »
  • border_size = 1 pour des bordures minimales

Utilisation de Lua pour des boucles de keybinds

L’un des avantages majeurs de Lua est la possibilité d’utiliser des boucles pour éviter la répétition. L’auteur montre un exemple pour les workspaces :

for i = 1, 10 do
  hl.keybind("SUPER", tostring(i), "workspace", tostring(i))
  hl.keybind("SUPER_SHIFT", tostring(i), "movetoworkspace", tostring(i))
end

Cela remplace 20 lignes de configuration par 4 lignes de code Lua.

Configuration des règles d’applications

L’auteur crée une règle pour que Firefox s’ouvre toujours sur le workspace 3 :

hl.rule("firefox-on-ws3", {
  match = { class = "firefox" },
  workspace = 3,
  silent = true
})

Le mot-clé silent empêche le focus de suivre l’application, ce qui est utile pour ne pas être dérangé lors de l’ouverture d’applications en arrière-plan.

Passage du layout dwindle au layout master

L’auteur préfère le layout master et le configure simplement en changeant layout = "master" dans la section config. Il adapte ensuite les touches de déplacement : H, J, K, L pour les directions, avec SUPER comme modificateur principal.

Gestion du fond d’écran avec swaybg

Plutôt que d’utiliser l’écosystème Hyprland complet, l’auteur choisit swaybg pour sa simplicité :

swaybg -i ~/walls/dune-moors.png &

Il l’intègre dans la section autostart du fichier Lua :

hl.autostart("swaybg", "-i", "/home/tony/walls/dune-moors.png")

Suppression de la barre et philosophie « barless »

L’auteur prône un environnement sans barre d’état : « Je pense que barless est le futur ». Il justifie ce choix par le fait qu’il a une horloge murale et que la barre n’apporte que l’heure. Il conserve uniquement un terminal, Neovim et Firefox comme applications essentielles.

CONCEPTS CLÉS

  • Hyprland : Wayland compositor et window manager dynamique, désormais configurable en Lua depuis la version 0.55.0.
  • Aquamarine : Backend graphique propriétaire d’Hyprland, remplaçant wlroots, offrant une indépendance vis-à-vis des dépendances externes.
  • LSP (Language Server Protocol) : Protocole permettant aux éditeurs de code de fournir des diagnostics, de l’autocomplétion et des informations de type en temps réel.
  • Flake Nix : Format de configuration NixOS permettant de verrouiller les versions des paquets et de gérer les dépendances de manière reproductible.
  • Layout master : Mode de gestion des fenêtres où une fenêtre principale occupe la majeure partie de l’écran, les autres étant empilées sur le côté.

CONCLUSION

La transition d’Hyprland vers Lua marque une évolution majeure pour ce compositeur Wayland : elle offre aux administrateurs système une flexibilité de programmation (boucles, conditions, variables) tout en conservant la légèreté et la rapidité d’exécution. L’intégration native du LSP Lua permet un développement plus sûr et plus rapide de la configuration, réduisant les erreurs de syntaxe et améliorant la découvrabilité des options. Pour tout administrateur souhaitant un environnement de bureau minimaliste, performant et programmable, Hyprland avec Lua représente désormais une option de premier plan, surtout sur NixOS où la gestion des versions via flake garantit une installation propre et reproductible.

Du même canal

Tout voir