3 mai 2024
Environnement MacOS avec Yabai et SketchyBar
4 minutes de lecture
Après plusieurs années sur Linux, j'ai récemment décidé de repasser sur un environnement de travail MacOS. J'ai donc chercher à reconfigurer mon environnement de travail pour retrouver des méthodes similaires à l'environnement Regolith que j'apprécie particulièrement.
C'est un plaisir de retrouver la fiabilité et qualité du matériel Apple, mais la navigation très orientée sur la souris ou les "gestures" du pad ne me conviennent pas. Je souhaite retrouver :
- un gestionnaire de fenêtre type "tiling" pour maximiser l'espace de travail
- une navigation rapide et simple majoritairement au clavier
- un terminal performant et personnalisable
- des workspaces pour organiser les applications
À noter que je ne suis pas un puriste de la navigation au clavier, j'utilise la souris pour de nombreuses tâches, notamment le focus des fenêtres et les tirs de mitrailleuse sur les aliens.
Gestionnaire de fenêtre (~10 mins)
Heureusement il existe des alternatives déjà très avancées. J'ai choisi yabai qui semble le plus avancé et propose de la configuration via CLI. Amethyst est une alternative qui propose une interface graphique mais ne permet pas de contrôler les "Spaces" ou modifier les propriétés natives des fenêtres.
Pour installer Yabai il y a quelques étapes à suivre
- installation du binaire
- démarrage du service
- configuration du script d'injection
- désactivation de SIP (System Integrity Protection)
Tout est décrit en détail dans le wiki Github.
Au niveau de la configuration je suis resté très proche de celle par défaut :
#!/usr/bin/env sh
yabai -m signal --add event=dock_did_restart action="sudo yabai --load-sa"
sudo yabai --load-sa
# global settings
yabai -m config \
external_bar all:40:0 \
menubar_opacity 1.0 \
mouse_follows_focus off \
focus_follows_mouse off \
window_origin_display default \
window_placement second_child \
window_zoom_persist on \
window_shadow on \
window_animation_duration 0.0 \
window_opacity_duration 0.0 \
active_window_opacity 1.0 \
normal_window_opacity 0.90 \
window_opacity off \
insert_feedback_color 0xffd75f5f \
split_ratio 0.50 \
split_type auto \
auto_balance off \
top_padding 8 \
bottom_padding 8 \
left_padding 8 \
right_padding 8 \
window_gap 04 \
layout bsp \
mouse_modifier fn \
mouse_action1 move \
mouse_action2 resize \
mouse_drop_action swap
echo "yabai configuration loaded."
Navigation au clavier (~10 mins)
Pour la navigation au clavier j'utilise skhd qui est un simple gestionnaire de raccourci clavier, que l'on peut facilement associer à des commandes yabai
.
L'installation est très rapide et nécessite peu de configuration :
brew install koekeishiya/formulae/skhd
skhd --start-service
Et voici un exemple de fichier de configuration :
# fast focus spaces
lalt - 0x12 : yabai -m space --focus 1
lalt - 0x14 : yabai -m space --focus 3
lalt - 0x13 : yabai -m space --focus 2
lalt - 0x15 : yabai -m space --focus 4
# send window to desktop
shift + ctrl - 0x12 : yabai -m window --space 1;
shift + ctrl - 0x13 : yabai -m window --space 2;
shift + ctrl - 0x14 : yabai -m window --space 3;
shift + ctrl - 0x15 : yabai -m window --space 4;
shift + ctrl - 0x17 : yabai -m window --space 5;
shift + ctrl - 0x16 : yabai -m window --space 6;
# toggle window zoom
alt - f : yabai -m window --toggle zoom-fullscreen
J'ai rencontré quelques difficultés avec le clavier français et trouver les bons noms de touches, mais l'utilisation du logiciel Key Codes m'a bien aidé.
Il est possible d'aller beaucoup plus loin dans la configuration. Pour mon retour depuis Linux je suis resté sur des raccourcis simples pour le moment et qui ne rentrent pas en conflit avec les raccourcis natifs (mes premières accolades ont été un peu fastidieuses...).
Menu bar et workspaces (~10 mins to ♾️)
Dernière étape qui n'est pas vraiment nécessaire mais que j'ai trouvé assez cool : la barre de menu. Attention c'est ici que s'ouvre réellement la boîte de Pandore, comme en témoignent ces nombreux exemples de customisation.
SketchyBar s'installe aussi facilement avec brew :
brew tap FelixKratz/formulae
brew install sketchybar
Pour la configuration je me suis fortement inspiré de celle du développeur Felix Kratz avec :
- workspaces et applications actives
- indicateur de batterie
- volume
- date et heure
- notifications Slack
La seule configuration que j'ai ajouté est celle de Slack avec le script suivant :
#!/bin/bash
SLACK_INFO=$(lsappinfo info -only StatusLabel `lsappinfo find LSDisplayName=Slack`)
COUNT=${SLACK_INFO:25:1}
if [ $COUNT = "•" ]; then
DRAWING=off
else
DRAWING=on
fi
sketchybar --set slack drawing=$DRAWING label="Slack (${COUNT})"
et sa définition dans la configuration :
slack=(
update_freq=3
updates=on
icon.drawing=off
label.font="$FONT:Bold:14.0"
script="$PLUGIN_DIR/slack.sh"
)
sketchybar --add item slack right \
--set slack "${slack[@]}" \
Conclusion
Je suis très satisfait de mon environnement de travail actuel. Certaines applications MacOS peuvent se montrer récalcitrantes, comme "System settings" en termes de tiling, mais ce sont vraiment des cas à la marge. J'ai retrouvé une bonne méthodo de travail et une navigation rapide et efficace.
Au final les seuls points gênants sont les anciennes habitudes ou les changements d'environnement sur une même journée entre MacOS, Linux et Windows (ordi à la maison).
J'avais comme projet de faire une petite animation avec un chat 🐈⬛ qui court sur la barre de menu à chaque fois que je fais un git push
mais c'est clairement en bas de la liste des priorités.
J'espère que vous vous amuserez autant que moi à configurer votre environnement, n'hésitez pas à partager vos astuces et configurations !