AeroSpace is an i3-like tiling window manager for macOS
+Project homepage: https://github.com/nikitabobko/AeroSpace
++
-
+
- + + +
- + + +
- + + +
Do you have a cool automatization, AeroSpace integration, or workflow?
+Feel free to open an issue or pull request to add it to this list!
+The source code of the page can be found in the ./docs
directory.
1. Move windows by dragging any part of the window
+defaults write -g NSWindowShouldDragOnGesture -bool true
+Now, you can move windows by holding ctrl + cmd
and dragging any part of the window (not necessarily the window title)
2. Highlight focused windows with colored borders
+To highlight the focused window with colored border you can use JankyBorders.
+You can also use after-startup-command
to start JankyBorders together with AeroSpace
after-startup-command = [
+ # JankyBorders has a built-in detection of already running process,
+ # so it won't be run twice on AeroSpace restart
+ 'exec-and-forget borders active_color=0xffe1e3e4 inactive_color=0xff494d64 width=5.0'
+]
+3. AeroSpace Raycast extension
+There is a third party Raycast extension for AeroSpace. https://www.raycast.com/limonkufu/aerospace
+If you struggle remembering shortcuts, it’s useful to search for commands until they become muscle memory.
+4. Disable windows opening animations
+Observable in Google Chrome
+defaults write -g NSAutomaticWindowAnimationsEnabled -bool false
+5. Use trackpad gestures to switch workspaces
+You can use BetterTouchTool to assign trackpad gestures to switch workspaces
+The following commands focus next or previous workspaces on monitors where the mouse is located
+aerospace workspace "$(aerospace list-workspaces --monitor mouse --visible)" && aerospace workspace next
+
+aerospace workspace "$(aerospace list-workspaces --monitor mouse --visible)" && aerospace workspace prev
+Beware that you might need to specify full path to aerospace executable https://community.folivora.ai/t/how-to-execute-terminal-command-to-switch-workspaces-with-aerospace/35914
+6. Show AeroSpace workspaces in Sketchybar
+You can integrate AeroSpace workspace indicators with Sketchybar. +Use these snippets as a starting point.
+# Run Sketchybar together with AeroSpace
+# sketchbar has a built-in detection of already running process,
+# so it won't be run twice on AeroSpace restart
+after-startup-command = ['exec-and-forget sketchybar']
+
+# Notify Sketchybar about workspace change
+exec-on-workspace-change = ['/bin/bash', '-c',
+ 'sketchybar --trigger aerospace_workspace_change FOCUSED_WORKSPACE=$AEROSPACE_FOCUSED_WORKSPACE'
+]
+sketchybar --add event aerospace_workspace_change
+
+for sid in $(aerospace list-workspaces --all); do
+ sketchybar --add item space.$sid left \
+ --subscribe space.$sid aerospace_workspace_change \
+ --set space.$sid \
+ background.color=0x44ffffff \
+ background.corner_radius=5 \
+ background.height=20 \
+ background.drawing=off \
+ label="$sid" \
+ click_script="aerospace workspace $sid" \
+ script="$CONFIG_DIR/plugins/aerospace.sh $sid"
+done
+#!/usr/bin/env bash
+
+# make sure it's executable with:
+# chmod +x ~/.config/sketchybar/plugins/aerospace.sh
+
+if [ "$1" = "$FOCUSED_WORKSPACE" ]; then
+ sketchybar --set $NAME background.drawing=on
+else
+ sketchybar --set $NAME background.drawing=off
+fi
+7. Open a new window with AppleScript
+Invoking Safari/Terminal with a command the obvious way (exec-and-forget open -a Safari
) results in an outcome that is probably not the intended one.
+Namely, that any workspace already containing an instance of Safari/Terminal is brought in focus.
Opening a new window of a program that can supports multiple windows (such as Safari or Terminal.app) can be accomplished with an AppleScript inlined in aerospace.toml
as follows:
-
+
-
+
Safari
+++++
+ctrl-g = '''exec-and-forget osascript -e ' +tell application "Safari" + make new document at end of documents + activate +end tell' +'''
+ -
+
Terminal
+++++
+ctrl-g = '''exec-and-forget osascript -e ' +tell application "Terminal" + do script + activate +end tell' +'''
+
8. Disable annoying and useless "hide application" shortcut
+If automatically-unhide-macos-hidden-apps
isn’t enough, you can disable cmd-h
altogether (which will make this hotkey unavailable for apps that might use it for other purposes)
[mode.main.binding]
+cmd-h = [] # Disable "hide application"
+cmd-alt-h = [] # Disable "hide others"
+9. Colemak keys remap
+[key-mapping.key-notation-to-key-code]
+q = 'q'
+w = 'w'
+f = 'e'
+p = 'r'
+g = 't'
+j = 'y'
+l = 'u'
+u = 'i'
+y = 'o'
+semicolon = 'p'
+leftSquareBracket = 'leftSquareBracket'
+rightSquareBracket = 'rightSquareBracket'
+backslash = 'backslash'
+
+a = 'a'
+r = 's'
+s = 'd'
+t = 'f'
+d = 'g'
+h = 'h'
+n = 'j'
+e = 'k'
+i = 'l'
+o = 'semicolon'
+quote = 'quote'
+
+z = 'z'
+x = 'x'
+c = 'c'
+v = 'v'
+b = 'b'
+k = 'n'
+m = 'm'
+comma = 'comma'
+period = 'period'
+slash = 'slash'
+10. i3 like config
+# Reference: https://github.com/i3/i3/blob/next/etc/config
+
+# i3 doesn't have "normalizations" feature that why we disable them here.
+# But the feature is very helpful.
+# Normalizations eliminate all sorts of weird tree configurations that don't make sense.
+# Give normalizations a chance and enable them back.
+enable-normalization-flatten-containers = false
+enable-normalization-opposite-orientation-for-nested-containers = false
+
+# Mouse follows focus when focused monitor changes
+on-focused-monitor-changed = ['move-mouse monitor-lazy-center']
+
+[mode.main.binding]
+# See: https://nikitabobko.github.io/AeroSpace/goodies#open-a-new-window-with-applescript
+alt-enter = '''exec-and-forget osascript -e '
+tell application "Terminal"
+ do script
+ activate
+end tell'
+'''
+
+# i3 wraps focus by default
+alt-j = 'focus --boundaries-action wrap-around-the-workspace left'
+alt-k = 'focus --boundaries-action wrap-around-the-workspace down'
+alt-l = 'focus --boundaries-action wrap-around-the-workspace up'
+alt-semicolon = 'focus --boundaries-action wrap-around-the-workspace right'
+
+alt-shift-j = 'move left'
+alt-shift-k = 'move down'
+alt-shift-l = 'move up'
+alt-shift-semicolon = 'move right'
+
+# Consider using 'join-with' command as a 'split' replacement if you want to enable normalizations
+alt-h = 'split horizontal'
+alt-v = 'split vertical'
+
+alt-f = 'fullscreen'
+
+alt-s = 'layout v_accordion' # 'layout stacking' in i3
+alt-w = 'layout h_accordion' # 'layout tabbed' in i3
+alt-e = 'layout tiles horizontal vertical' # 'layout toggle split' in i3
+
+alt-shift-space = 'layout floating tiling' # 'floating toggle' in i3
+
+# Not supported, because this command is redundant in AeroSpace mental model.
+# See: https://nikitabobko.github.io/AeroSpace/guide#floating-windows
+#alt-space = 'focus toggle_tiling_floating'
+
+# `focus parent`/`focus child` are not yet supported, and it's not clear whether they
+# should be supported at all https://github.com/nikitabobko/AeroSpace/issues/5
+# alt-a = 'focus parent'
+
+alt-1 = 'workspace 1'
+alt-2 = 'workspace 2'
+alt-3 = 'workspace 3'
+alt-4 = 'workspace 4'
+alt-5 = 'workspace 5'
+alt-6 = 'workspace 6'
+alt-7 = 'workspace 7'
+alt-8 = 'workspace 8'
+alt-9 = 'workspace 9'
+alt-0 = 'workspace 10'
+
+alt-shift-1 = 'move-node-to-workspace 1'
+alt-shift-2 = 'move-node-to-workspace 2'
+alt-shift-3 = 'move-node-to-workspace 3'
+alt-shift-4 = 'move-node-to-workspace 4'
+alt-shift-5 = 'move-node-to-workspace 5'
+alt-shift-6 = 'move-node-to-workspace 6'
+alt-shift-7 = 'move-node-to-workspace 7'
+alt-shift-8 = 'move-node-to-workspace 8'
+alt-shift-9 = 'move-node-to-workspace 9'
+alt-shift-0 = 'move-node-to-workspace 10'
+
+alt-shift-c = 'reload-config'
+
+alt-r = 'mode resize'
+
+[mode.resize.binding]
+h = 'resize width -50'
+j = 'resize height +50'
+k = 'resize height -50'
+l = 'resize width +50'
+enter = 'mode main'
+esc = 'mode main'
+11. List of popular and built-in applications IDs
+The list is useful to compose custom on-window-detected callback.
+Application name | +Application ID | +
---|---|
1Password |
+
|
+
Activity Monitor |
+
|
+
AirPort Utility |
+
|
+
Alacritty |
+
|
+
Android Studio |
+
|
+
App Store |
+
|
+
AppCode |
+
|
+
Arc Browser |
+
|
+
Audio MIDI Setup |
+
|
+
Automator |
+
|
+
Battle.net |
+
|
+
Books |
+
|
+
Brave |
+
|
+
CLion |
+
|
+
Calculator |
+
|
+
Calendar |
+
|
+
Chess |
+
|
+
Clock |
+
|
+
ColorSync Utility |
+
|
+
Console |
+
|
+
Contacts |
+
|
+
Dictionary |
+
|
+
Disk Utility |
+
|
+
Docker |
+
|
+
FaceTime |
+
|
+
Figma |
+
|
+
Find My |
+
|
+
Finder |
+
|
+
Firefox |
+
|
+
Freeform |
+
|
+
GIMP |
+
|
+
Google Chrome |
+
|
+
Grapher |
+
|
+
Home |
+
|
+
Inkscape |
+
|
+
IntelliJ IDEA Community |
+
|
+
IntelliJ IDEA Ultimate |
+
|
+
Karabiner-Elements |
+
|
+
Keychain Access |
+
|
+
Keynote |
+
|
+
Kitty |
+
|
+
|
+|
Maps |
+
|
+
Marta |
+
|
+
Messages |
+
|
+
Music |
+
|
+
Notes |
+
|
+
Obsidian |
+
|
+
Pages |
+
|
+
Photo Booth |
+
|
+
Photos |
+
|
+
Podcasts |
+
|
+
Preview |
+
|
+
PyCharm Community |
+
|
+
PyCharm Professional |
+
|
+
QuickTime Player |
+
|
+
Reminders |
+
|
+
Safari |
+
|
+
Shortcuts |
+
|
+
Slack |
+
|
+
Spotify |
+
|
+
Steam |
+
|
+
Stocks |
+
|
+
Sublime Merge |
+
|
+
Sublime Text |
+
|
+
System Settings |
+
|
+
TV |
+
|
+
Telegram |
+
|
+
Terminal |
+
|
+
TextEdit |
+
|
+
Thunderbird |
+
|
+
Time Machine |
+
|
+
Todoist |
+
|
+
Tor Browser |
+
|
+
Transmission |
+
|
+
VLC |
+
|
+
Visual Studio Code |
+
|
+
VoiceMemos |
+
|
+
VoiceOver Utility |
+
|
+
Weather |
+
|
+
WezTerm |
+
|
+
Xcode |
+
|
+
iMovie |
+
|
+
iTerm2 |
+
|
+
kdenlive |
+
|
+