AeroSpace, un gestionnaire de fenêtre pour MacOS

Posté le 16 juillet 2025 - Astuces pour développeurs - Par Grafikart - Proposer une correction

Aujourd'hui, je vais vous parler d'Aerospace, un outil qui m'a réconcilié avec mon Macbook. Si comme moi vous galérez avec la gestion des fenêtres sur macOS, cet outil devrait vous intéresser.

00:00 Intro
00:36 Mon problème
03:41 Aerospace
05:30 Configuration
07:40 Conclusion

Mon problème avec macOS

Ça fait maintenant plus de quinze ans que j'utilise des MacBook comme ordinateur secondaire pour travailler quand je suis en déplacement. Mais malgré toute ma bonne volonté, je n'arrive pas à me faire au gestionnaire de fenêtres de macOS.

Quand je travaille, j'ai souvent besoin d'osciller entre plusieurs applications (un éditeur, un terminal et un navigateur) et malgré plusieurs tentatives je n'arrive pas à trouver une manière efficace de le faire.

Mission control

J'ai d'abord essayé d'utiliser Mission Control qui permet de passer d'une fenêtre à l'autre avec un affichage en mosqaïque, mais cette approche pose plusieurs problèmes :

  • Positionnement incohérent : À chaque déclenchement, les fenêtres ne sont pas systématiquement au même endroit. Je dois scanner l'écran pour retrouver la fenêtre que je veux ouvrir.
  • Ressemblance visuelle : Certaines fenêtres se ressemblent beaucoup et il n'est pas évident de les distinguqer.
  • Il faut souvent faire un long chemin avec la souris pour arriver à la fenêtre que l'on souhaite ouvrir.

Les bureaux virtuels

Ma deuxième approche a été d'utiliser le système de bureaux virtuels pour reproduire mon organisation habituelle : un bureau pour l'éditeur, un pour le terminal et un pour le navigateur. Mais là encore, plusieurs problèmes se posent :

  • Il n'existe pas de raccourci permettant de déplacer une fenêtre vers un bureau spécifique. On est obligé de le faire manuellement et c'est loin d'être simple / rapide.
  • Le passage d'un bureau à l'autre s'accompagne d'une animation importante (translation horizontale) qu'il n'est malheureusement pas possible de désactiver sans désactvier toutes les animations du système (et même avec ce paramètre l'animation est remplacée un fondu inélégant et lent).
  • Quand on est dans une configuration avec plusieurs moniteurs, les raccourcis ne fonctionnent que sur le moniteur actif. Impossible de se déplacer vers un bureau d'un autre moniteur.

Vous l'aurez compris, même avec la meilleure volonté du monde, je n'arrive pas à m'organiser sur macOS, surtout sur avec l'espace limité du 13 pouces.

Aerospace à la rescousse

Avec le temps j'ai testé pas mal de solutions plus ou moins convaincantes. Mais en tombant sur une discussion reddit j'ai découvert AeroSpace, un gestionnaire de fenêtres en mosaïque pour macOS, similaire à i3.

Avantages

Le premier avantage, c'est qu'il s'installe facilement avec Homebrew sans avoir besoin de désactiver le système de vérification d'intégrité du système.

Le second est qu'il utilise un système de "workspace" qui ne se repose pas sur le système de bureaux virtuel de MacOS ce qui permet de ne pas être limité par les contraintes de l'OS.

Enfin, la configuration se fait au travers d'un fichier de configuration qui permet de piloter les workspaces mais aussi les racourcis clavier et des comportements spécifiques à appliquer pour certains types d'application. Vous pouvez d'ailleurs retrouver ma configuration d'Aerospace sur github

Comment je l'utilise

Pour comprendre comment AeroSpace impacte ma manière de travailler voici mon organisation. En général j'utilise une application par workspace :

  • Le workspace 1 est dédié aux éditeurs
  • Le workspace 2 pour le terminal
  • Le workspace 3 pour le navigateur
  • Le workspace 8 pour la musique

Je définis des règles pour que les applications soient automatiquement dans le bon workspace.

[[on-window-detected]]
    if.app-id = 'com.mitchellh.ghostty'
    run = ['move-node-to-workspace 2 --focus-follows-window']

[[on-window-detected]]
    if.app-id = 'com.jetbrains.PhpStorm'
    run = ['move-node-to-workspace 1 --focus-follows-window']

[[on-window-detected]]
    if.app-id = 'com.brave.Browser'
    run = ['move-node-to-workspace 3 --focus-follows-window']

[[on-window-detected]]
    if.app-id = 'com.brave.Browser'
    if.window-title-regex-substring = 'music'
    run = ['move-node-to-workspace 8']

Pour me déplacer de workspace en workspace j'utilise les touches numériques (attention les touches sont définit en QWERTY mais fonctionne sur un clavier AZERTY).

# See: https://nikitabobko.github.io/AeroSpace/commands#workspace
cmd-1 = 'workspace 1'
cmd-2 = 'workspace 2'
cmd-3 = 'workspace 3'
# ...

# See: https://nikitabobko.github.io/AeroSpace/commands#move-node-to-workspace
cmd-shift-1 = 'move-node-to-workspace 1 --focus-follows-window'
cmd-shift-2 = 'move-node-to-workspace 2 --focus-follows-window'
cmd-shift-3 = 'move-node-to-workspace 3 --focus-follows-window'
# ...

Je configure aussi la position des workspace dans le cas où j'utilise plusieurs moniteurs.

on-focused-monitor-changed = ['move-mouse monitor-lazy-center']
[workspace-to-monitor-force-assignment]
    1 = 'main'
    2 = 'main'
    3 = 'main'
    4 = 'secondary'
    5 = 'secondary'
    6 = 'secondary'
    7 = 'secondary'
    8 = 'main'
    9 = 'main'

Maintenant, quand je travaille je sais exactement où sont mes fenêtres et comment les atteindre. Quand je me branche à un moniteur externe, je peux rapidement naviguer d'un écran à l'autre via le numéro du Workspace.