Mon setup Arch Linux + Hyprland

Mon setup Arch Linux + Hyprland

Février 2026

L'objectif

Après avoir monté un cluster K3s sur Raspberry Pi, configuré ArgoCD en GitOps et déployé une stack média complète, il me manquait un poste de travail à la hauteur. C'est un problème chez moi, je préfère perdre du temps dans mes projet afin d'être à l'aise et satisfait dans le milieu où je travail. A ce moment là j'ai pas mal parlé avec des amis sur les nouveauté wayland et hyprland. Ayant travaillé sur un Arch Linux avec I3 que j'avais déjà configuré de A à Z mais supprimé entièrement depuis le temps. J'ai décidé de remonter mon Dell XPS 13 de zéro avec Arch Linux et un environnement Wayland entièrement personnalisé.

L'idée : un desktop minimal, rapide et beau, où chaque composant est choisi et configuré à la main.

Archlinux.jpeg

Le matériel

Composant Détail
Machine Dell XPS 13
CPU Intel Core i7-8550U @ 1.80GHz
GPU Intel UHD Graphics 620
RAM 16 Go
Stockage NVMe 468 Go
Écran 1920x1080 (AU Optronics)

Architecture du desktop

Voici la stack complète, du boot à l'écran :

┌─────────────────────────────────────────────────────┐
│                    GRUB                              │
│              Space Isolation theme                   │
├─────────────────────────────────────────────────────┤
│                    SDDM                              │
│         SilentSDDM (theme ken + Parachute)           │
├─────────────────────────────────────────────────────┤
│               Hyprland (Wayland)                     │
│  ┌──────────────────────────────────────────────┐   │
│  │              eww bar                          │   │
│  │  CPU | RAM | Temp  ·  App - Titre  ·  Vol | 🔋│   │
│  ├──────────────────────────────────────────────┤   │
│  │                                               │   │
│  │           swww (Gavarnie3.jpg)                 │   │
│  │                                               │   │
│  │    ┌─────────────┐    ┌─────────────┐        │   │
│  │    │   Ghostty    │    │    Brave     │        │   │
│  │    │  + fastfetch │    │             │        │   │
│  │    │  + p10k      │    │             │        │   │
│  │    └─────────────┘    └─────────────┘        │   │
│  └──────────────────────────────────────────────┘   │
├─────────────────────────────────────────────────────┤
│  hyprlock (écran de verrouillage)                    │
│  PipeWire + WirePlumber (audio)                      │
│  sunsetr (filtre lumière bleue)                      │
└─────────────────────────────────────────────────────┘

Installation de base : Arch Linux

Pourquoi Arch ?

  • Rolling release : toujours à jour, pas de mise à niveau majeure
  • Minimaliste : on installe uniquement ce qu'on veut
  • AUR : accès à pratiquement tous les logiciels Linux existants
  • Documentation : le wiki Arch est la meilleure doc Linux qui existe

Les paquets essentiels

# Système de base
pacman -S base linux linux-firmware intel-ucode

# Wayland + Hyprland
pacman -S hyprland hyprlock hyprpaper xdg-desktop-portal-hyprland

# Audio
pacman -S pipewire pipewire-pulse wireplumber

# Terminal et shell
pacman -S ghostty zsh

# Utilitaires
pacman -S grim slurp wl-clipboard nautilus eza zoxide fzf

Hyprland : le compositeur Wayland

Hyprland est un compositeur Wayland tiling avec des animations fluides et une configuration en texte. Version installée : 0.54.2.

Configuration

La config Hyprland est éclatée en plusieurs fichiers dans ~/.local/share/dotfiles/default/hypr/conf/ :

hypr/conf/
├── autostart.conf          # Programmes au démarrage
├── laptop-keybindings.conf # Raccourcis clavier
├── desktop-keybindings.conf
└── ...

Autostart

# ~/.local/share/dotfiles/default/hypr/conf/autostart.conf
exec-once = ~/.local/share/dotfiles/bin/check-uwsm
exec-once = eww open bar
exec-once = swww-daemon && swww img /home/nocob/Images/Gavarnie3.jpg
exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1

Raccourcis clés

Raccourci Action
Super + Q Ouvrir le terminal (Ghostty)
Super + B Ouvrir le navigateur (Brave)
Super + W Fermer la fenêtre
Super + L Verrouiller l'écran
Super + R Lanceur d'applications (Walker)
Super + 1-9 Changer de workspace
Super + Shift + S Screenshot (sélection de zone)
Print Screen Screenshot plein écran
Super + Ctrl + N Toggle filtre lumière bleue
Super + Ctrl + W Changer de fond d'écran
Fn Volume Volume jusqu'à 200%

La barre : eww (Elkowar's Wacky Widgets)

J'ai remplacé Waybar par eww pour avoir un contrôle total sur le design. eww utilise un langage de config maison (Yuck) et du SCSS pour le style.

Design

Le concept : des pilules flottantes transparentes sur un fond transparent, sans barre visible.

| Pakage | CPU | RAM | Temp    ·    App — Titre fenêtre    ·    WiFi | Vol 110% | 🔋 17% | 18:30 | power |

Archlinux_eww.jpeg

Les pilules

Chaque widget est encapsulé dans une pilule avec :

  • Fond semi-transparent (rgba(60, 70, 80, 0.8))
  • Bords arrondis (border-radius: 14px)
  • Icônes Nerd Font colorées par catégorie
Widget Icône Couleur Click
CPU 󰍛 Bleu Ouvre btop
RAM Vert Ouvre btop
Température 󰔏 Jaune -
Fenêtre active - Blanc -
Réseau 󰤨 Vert nmtui-connect
Volume 󰕾 Accent Toggle mute
Batterie 󰂄/󰁹 Vert/Rouge -
Horloge 󰅐 Accent -
Power 󰣇 Rouge Menu power

Scripts

Chaque widget est alimenté par un script shell dans ~/.config/eww/scripts/ :

  • volume : écoute PipeWire via pactl subscribe, émet du JSON en temps réel
  • network : écoute nmcli monitor pour les changements réseau
  • activewindow : récupère le titre via hyprctl activewindow -j avec fallback polling
  • workspaces : écoute le socket IPC Hyprland via socat

Batterie intelligente

L'icône de batterie change dynamiquement :

  • En charge : icône 󰂄 (batterie avec éclair)
  • Sur batterie : icône de niveau (󰂎 à 󰁹, 11 niveaux)
  • Batterie faible (<20%) : animation clignotante rouge
  • Mise à jour toutes les 5 secondes

Fond d'écran : swww

J'ai initialement utilisé hyprpaper mais il avait un bug où l'image ne s'affichait pas au démarrage (le process tournait mais rien à l'écran). Après de nombreux essais (chemins absolus, symlinks, relances), j'ai basculé sur swww qui fonctionne parfaitement.

# Changer le fond d'écran avec une transition
swww img ~/Images/Gavarnie3.jpg --transition-type fade --transition-duration 1

Le fond est configuré dans l'autostart Hyprland et persiste au reboot.

Écran de verrouillage : hyprlock

A la base je voulais le même qu'au démarrage (sddm) mais apparement pas compatible pour lock le pc. Donc j'ai basculé pour un écran de verrouillage qui utilise un style inspiré de MrVivekRajan/Hyprlock-Styles (Style-1), adapté avec :

  • Image de fond : photo personnelle
  • Panneau sombre semi-transparent à droite (rgba(0,0,0,0.55), 450px)
  • Avatar circulaire avec bordure blanche
  • Horloge grande (40px) en Red Hat Display
  • Date sous l'horloge
  • Champ de saisie avec placeholder et icône cadenas
  • Message d'accueil "Welcome!" en haut

Tout est aligné à droite pour créer un contraste avec l'image de fond.

Je suis incapable de faire une capture d'écrans quand il est vérouillé désolé.

# ~/.config/hypr/hyprlock.conf
background {
    path = ~/.config/hypr/background.jpg
    blur_passes = 0
    contrast = 0.8916
    brightness = 0.8172
}

shape {
    size = 450, 1080
    color = rgba(0, 0, 0, 0.55)
    halign = right
}

Écran de connexion : SDDM + SilentSDDM

Pour l'écran de login, j'utilise SDDM avec le thème SilentSDDM en variante "ken" (rouge et blanc).

Installation

# Le thème est installé dans /usr/share/sddm/themes/silent/
# La config pointe vers le bon thème :
# /usr/share/sddm/themes/silent/metadata.desktop → ConfigFile=configs/ken.conf

Point important : GreeterEnvironment

SilentSDDM nécessite que le GreeterEnvironment soit configuré dans /etc/sddm.conf.d/kde_settings.conf :

[General]
GreeterEnvironment=QML2_IMPORT_PATH=/usr/share/sddm/themes/silent/components/

Sans ça, le thème ne charge pas correctement et on se retrouve avec l'image par défaut.

Fond d'écran personnalisé

Le fond d'écran SDDM est indépendant du fond d'écran du bureau. Pour le changer :

sudo cp ~/Images/Parachute.jpg /usr/share/sddm/themes/silent/backgrounds/
sudo sed -i 's|background = ".*"|background = "Parachute.jpg"|g' \
  /usr/share/sddm/themes/silent/configs/ken.conf

GRUB : Space Isolation

Le bootloader utilise le thème Space Isolation, inspiré du jeu Alien: Isolation. C'est un thème de l'espace, j'aime beaucoup l'espace.

# Installation
git clone https://github.com/callmenoodles/space-isolation.git /tmp/space-isolation
sudo cp -r /tmp/space-isolation/1920x1080 /boot/grub/themes/space-isolation

# Configuration
GRUB_THEME="/boot/grub/themes/space-isolation/theme.txt"
GRUB_GFXMODE=1920x1080

sudo grub-mkconfig -o /boot/grub/grub.cfg

Le catalogue complet des thèmes GRUB est disponible sur Gorgeous-GRUB.

Terminal : Ghostty + Zsh + Powerlevel10k

Ghostty

Ghostty est un terminal GPU-accéléré, léger et rapide. Configuration dans ~/.config/ghostty/config :

font-family = "CaskaydiaMono Nerd Font"
font-size = 12
background-opacity = 0.8
cursor-style = "block"
copy-on-select = clipboard       # Selection = copie auto
keybind = ctrl+shift+c=copy_to_clipboard
keybind = ctrl+v=paste_from_clipboard
keybind = ctrl+c=unbind           # Ctrl+C = signal d'interruption

Zsh + Powerlevel10k

Le shell utilise Zsh avec :

  • Powerlevel10k : prompt rapide et informatif
  • oh-my-zsh : framework de plugins
  • Plugins : git, sudo, archlinux, zsh-autosuggestions, fast-syntax-highlighting
  • zoxide : navigation rapide dans les dossiers (z au lieu de cd)
  • fzf : recherche floue

Fastfetch au démarrage

À chaque ouverture de terminal, fastfetch affiche le logo Arch Linux avec les infos système :

Archlinux_fastfetch.jpeg

# ~/.zshrc (avant p10k instant prompt)
if [[ $(tty) == *"pts"* ]]; then
  fastfetch
fi

La config fastfetch utilise un layout custom avec des icones Nerd Font et un cadre en box-drawing :

╭───────────╮
│  distro  │ Arch Linux
│  kernel  │ 6.19.6-arch1-1
│  wm      │ Hyprland
│  term    │ ghostty
│  shell   │ zsh 5.9
│ 󰍛 cpu     │ Intel i7-8550U
│ 󰉉 disk    │ 16G / 468G (4%)
│  memory  │ 4.0G / 15.5G
│ 󰅐 uptime  │ 2h 30m
├───────────┤
│  colors  │ ● ● ● ● ● ● ● ●
╰───────────╯

Aliases utiles

alias ls='eza -lh --group-directories-first'
alias ll='eza -al --group-directories-first'
alias lt='eza -a --tree --level=2'
alias pf='fastfetch'

Audio : PipeWire

L'audio est géré par PipeWire + pipewire-pulse (compatibilité PulseAudio) + WirePlumber (gestionnaire de sessions).

Point important

Sur Arch avec Hyprland, pipewire-pulse n'est pas toujours installé par défaut. Sans lui, les touches de volume ne fonctionnent pas (swayosd-client échoue à se connecter à PulseAudio).

pacman -S pipewire-pulse
systemctl --user enable --now pipewire-pulse.service pipewire-pulse.socket

Volume à 200%

Les touches Fn sont configurées pour monter jusqu'à 200% :

binde = , XF86AudioRaiseVolume, exec, swayosd-client --output-volume +5 --max-volume 200
binde = , XF86AudioLowerVolume, exec, swayosd-client --output-volume -5 --max-volume 200

Filtre lumière bleue : sunsetr

sunsetr est un filtre de lumière bleue automatique pour Wayland. Il ajuste la température de couleur de l'écran en fonction de l'heure.

# Toggle avec Super+Ctrl+N
# Ou manuellement :
sunsetr-toggle

Le service systemd est activé pour démarrer automatiquement avec la session, l'aventage c'est qu'on ne le remarque pas.

Screenshots : grim + slurp

Les captures d'écran utilisent grim (capture) et slurp (sélection de zone) :

Raccourci Action
Print Screen Capture plein écran → presse-papier
Shift + Print Screen Sélection de zone → presse-papier
Super + Shift + S Sélection de zone → presse-papier

Les screenshots sont copiés directement dans le presse-papier via wl-copy.

Arborescence des fichiers de configuration

~/.config/
  hypr/
    hyprlock.conf              # Écran de verrouillage
    hyprpaper.conf             # (ancien, remplacé par swww)
    background.jpg             # Image de fond lockscreen
    avatar.jpg                 # Photo de profil lockscreen
  eww/
    eww.yuck                   # Config de la barre (widgets)
    eww.scss                   # Styles / couleurs
    scripts/                   # Scripts des widgets
      volume, network, bluetooth, music,
      activewindow, workspaces, powermenu
  ghostty/
    config                     # Config du terminal

~/.local/share/dotfiles/
  default/
    hypr/conf/
      autostart.conf           # Programmes au démarrage
      laptop-keybindings.conf  # Raccourcis clavier
    zshrc/
      aliases                  # Aliases shell
      init                     # Init shell (plugins, fastfetch)
  config/
    fastfetch/configs/
      config-default.jsonc     # Config fastfetch
  bin/
    sunsetr-toggle             # Toggle filtre lumière bleue
    sddm-theme                 # Script changement thème SDDM

/usr/share/sddm/themes/silent/
  metadata.desktop             # Config active du thème SDDM
  configs/                     # Variantes (ken, nord, rei...)
  backgrounds/                 # Images de fond

/etc/default/grub              # Config GRUB
/boot/grub/themes/space-isolation/  # Theme GRUB

Stack complète des outils

Catégorie Outil Rôle
Compositeur Hyprland 0.54.2 Window manager Wayland tiling
Barre eww 0.5.0 Barre de statut personnalisable
Terminal Ghostty 1.3.0 Émulateur de terminal GPU
Shell Zsh 5.9 + P10k Shell avec prompt informatif
Fond d'écran swww 0.11.2 Gestionnaire de wallpaper Wayland
Lock screen hyprlock 0.9.2 Écran de verrouillage
Login SDDM 0.21.0 Display manager
Bootloader GRUB Avec thème Space Isolation
Audio PipeWire 1.6.1 Serveur audio moderne
OSD SwayOSD 0.3.0 Overlay volume/luminosité
Nuit sunsetr 0.11.1 Filtre lumière bleue
Lanceur Walker 2.15.2 Lanceur d'applications
Navigateur Brave / Zen Navigation web
Fichiers Nautilus 49.4 Gestionnaire de fichiers
Screenshots grim + slurp Capture d'écran
Fetch fastfetch 2.60.0 Infos système au démarrage

Leçons apprises

hyprpaper vs swww

hyprpaper 0.8.3 avait un bug où le wallpaper ne s'affichait pas au démarrage malgré un process fonctionnel. Après de nombreux essais (symlinks, chemins absolus, service systemd vs exec-once, kill + relance), la solution a été de passer à swww qui a fonctionné du premier coup.

PipeWire et les touches de volume

Sur une installation fraîche, les touches de volume peuvent ne pas fonctionner. Il faut s'assurer que pipewire-pulse est installé et que le service tourne. Sans la couche de compatibilité PulseAudio, les outils comme swayosd-client et pactl ne peuvent pas contrôler le volume.

SDDM et GreeterEnvironment

Les thèmes SDDM complexes comme SilentSDDM nécessitent un GreeterEnvironment correct dans la config. Si le QML2_IMPORT_PATH n'est pas configuré, le thème se charge partiellement et affiche l'image par défaut au lieu du thème choisi.

Powerlevel10k et fastfetch

Le "instant prompt" de Powerlevel10k redirige stdout, ce qui empêche fastfetch de s'afficher. La solution : lancer fastfetch avant le bloc instant prompt dans ~/.zshrc.