Я Сделал Нормальную Смену Тем в Linux WM, Чтобы

Cette vidéo explique comment créer un script shell pour basculer automatiquement entre thème clair et thème sombre sur un environnement Linux utilisant un tiling window manager, en contournant l’absence de paramètre global présent dans les environnements de bureau comp...

Voir la source

SYNTHÈSE STRUCTURÉE

Pourquoi automatiser le changement de thème ?

L’intervenant explique que les tiling window managers (comme Hyprland, i3, ou Niri) n’offrent pas de bascule intégrée entre thèmes clair et sombre. « J’ai compris que limiter son système à une seule couleur, c’est pas très pratique », dit-il, en soulignant le problème concret : une thème sombre est illisible en extérieur, une thème clair éblouit le soir. Plutôt que d’abandonner son window manager pour GNOME, il a développé une solution scriptée.

Stocker l’état actuel de la thème

Pour savoir si le système est en mode clair ou sombre, l’intervenant recommande d’utiliser gsettings (qui nécessite la bibliothèque GLib) plutôt qu’un fichier texte maison. La commande clé est :

gsettings get org.gnome.desktop.interface color-scheme

Elle retourne 'default', 'prefer-light' ou 'prefer-dark'. Le script capture cette valeur dans une variable et utilise un bloc if/else pour basculer via :

gsettings set org.gnome.desktop.interface color-scheme prefer-dark

Il mentionne aussi une alternative sans dépendance GNOME : une commande « horrible » utilisant XDG Desktop Portal, mais il choisit gsettings pour sa simplicité.

Gérer les applications GTK avec GSettings

Les applications GTK (comme Nautilus, Gedit) respectent le paramètre color-scheme de gsettings. L’intervenant précise que ce réglage suffit pour elles : « Si dans une appli tu as mis “thème système”, alors l’appli changera automatiquement ». Cela inclut aussi les navigateurs web et les sites qui respectent la préférence système via prefers-color-scheme.

Adapter les applications configurées par fichiers texte

Les composants typiques des window managers (barre Waybar, terminal Alacritty, compositeur Niri) utilisent des fichiers de configuration textuels. L’intervenant déconseille d’utiliser sed pour modifier ces fichiers à la volée : « L’ergonomie laisse à désirer ». Sa solution élégante consiste à :

  1. Créer deux fichiers distincts : colors-light.conf et colors-dark.conf.
  2. Dans le fichier de configuration principal, utiliser une directive d’importation pointant vers un lien symbolique.
  3. Le script change ce lien symbolique pour pointer vers le fichier de couleurs souhaité.

Exemple pour Alacritty :

ln -sf ~/.config/alacritty/colors-dark.toml ~/.config/alacritty/colors-current.toml

Le fichier alacritty.toml contient alors import = ["~/.config/alacritty/colors-current.toml"].

Cas particuliers : duplication de configuration

Pour les applications qui ne supportent pas l’importation de fichiers (comme le lanceur Fuzzel), l’intervenant a créé deux fichiers de configuration complets (fuzzel-light.ini et fuzzel-dark.ini) où seules les couleurs diffèrent. Le script copie ou lie le fichier approprié.

Gérer les fonds d’écran et notifications

Le script inclut le changement d’image de fond via swaybg (ou az3w dans son cas) :

swaybg -i ~/wallpapers/light.jpg -m fill

Il ajoute aussi une notification utilisateur avec notify-send (nécessitant libnotify et un démon de notifications) pour confirmer la bascule.

Forcer le rechargement des configurations

Certaines applications ne relisent pas leur configuration automatiquement. L’intervenant donne deux astuces :

  • Pour Waybar : envoyer le signal SIGUSR2 avec killall -SIGUSR2 waybar.
  • Pour Alacritty : utiliser touch ~/.config/alacritty/alacritty.toml pour mettre à jour l’horodatage, ce qui déclenche un rechargement dans tous les terminaux ouverts.

Résultat : une chaîne cohérente

Le script final permet une bascule instantanée qui propage le changement à toutes les couches : thème système (via gsettings), applications GTK, composants du window manager, fond d’écran, et même les sites web via la préférence système du navigateur. L’intervenant conclut : « On a un super système auto-cohérent de changement de thème clair/sombre à la volée dans tous les programmes ».

CONCEPTS CLÉS

  • gsettings : outil en ligne de commande pour interroger et modifier les paramètres de l’environnement de bureau GNOME (via la bibliothèque GLib). Utilisé ici comme stockage central de l’état de la thème.
  • XDG Desktop Portal : interface standardisée pour que les applications sandboxées (Flatpak, etc.) accèdent aux ressources système, dont la préférence de thème.
  • Lien symbolique (ln -sf) : fichier spécial qui pointe vers un autre fichier. Permet de changer la cible sans modifier le fichier de configuration principal.
  • SIGUSR2 : signal utilisateur personnalisé (numéro 12) que certains programmes (comme Waybar) écoutent pour recharger leur configuration.
  • touch : commande qui met à jour l’horodatage d’un fichier, souvent utilisée pour forcer une application à détecter un changement.

CONCLUSION

Le message principal est qu’il est possible d’obtenir une bascule fluide entre thèmes clair et sombre sur un tiling window manager sans sacrifier la flexibilité. La clé réside dans l’utilisation de gsettings comme source de vérité, l’externalisation des couleurs dans des fichiers séparés liés symboliquement, et l’envoi de signaux appropriés pour forcer le rechargement. Cette approche démontre que la personnalisation poussée de Linux n’est pas incompatible avec le confort d’usage, même si l’intervenant admet en souriant : « Au lieu de ça, j’aurais pu juste installer GNOME ».

Du même canal

Tout voir