Personal macOS dotfiles for a development setup built around AeroSpace, SketchyBar, Zsh, and Vim.
This repo is a working collection of personal tweaks, borrowed ideas, and refinements collected over time.
git/: global Git config and ignore ruleszsh/:oh-my-zshshell setup withpowerlevel10k, aliases, and language/toolchain bootstrappingvim/: a small.vimrcthat layers on top ofamix/vimrcaerospace/: AeroSpace tiling window manager config and keybindingssketchybar/: Lua-based SketchyBar setup with workspace, app, and system widgetsborders/: JankyBorders config for active window bordersghostty/: Ghostty terminal config (theme and fonts)
These dotfiles are intended for macOS and assume Apple Silicon-style Homebrew paths such as /opt/homebrew/....
Some configs also assume these tools are installed:
- Homebrew
- AeroSpace
- SketchyBar
- JankyBorders
oh-my-zshpowerlevel10kfor the Zsh prompt themenvmrbenv- Xcode Command Line Tools, because SketchyBar helper binaries are compiled with
make
Optional tools referenced by the configs:
Ghosttylogo-lsSwitchAudioSourcenowplaying-clifor media playback controlsVorssaintfor its menu-bar widget
Clone the repository:
git clone https://github.com/partlyjadedyouth/dotfiles.git ~/Dotfiles
cd ~/DotfilesCreate the symlinks:
mkdir -p ~/.config
ln -sfn "$PWD/git/.gitconfig" ~/.gitconfig
ln -sfn "$PWD/git/.gitignore_global" ~/.gitignore_global
ln -sfn "$PWD/zsh/.zshrc" ~/.zshrc
ln -sfn "$PWD/vim/.vimrc" ~/.vimrc
ln -sfn "$PWD/aerospace/.aerospace.toml" ~/.aerospace.toml
ln -sfn "$PWD/sketchybar" ~/.config/sketchybar
ln -sfn "$PWD/borders" ~/.config/borders
ln -sfn "$PWD/ghostty" ~/.config/ghosttyPowerlevel10k is the Zsh theme selected by zsh/.zshrc. It controls the terminal prompt's appearance and can display the current directory, Git branch and status, and command duration.
With the default Oh My Zsh setup, its theme files live in ~/.oh-my-zsh/custom/themes/powerlevel10k. Personal prompt settings are loaded from ~/.p10k.zsh when that file exists. Run p10k configure in an interactive Zsh terminal to customize the prompt.
This setup compiles helper binaries from sketchybar/helpers/ on startup, so make and the macOS command line toolchain need to be available.
The bar also expects:
- the SketchyBar Lua integration to be installed
- SF Pro / SF Mono fonts, or a compatible replacement
- AeroSpace to be installed, because workspace widgets are driven by
aerospaceevents and shell commands
The Vorssaint widget on the right opens the app's native menu-bar panel. If Vorssaint is not running, clicking the widget launches it first, then attempts to open the panel after a short delay. Its transparent logo is stored in sketchybar/assets/vorssaint.png.
Native menu clicks require macOS Accessibility access for SketchyBar or its menus helper. If access is blocked, the Vorssaint widget opens System Settings → Privacy & Security → Accessibility. Enable access there and click the widget again.
App icons for workspace labels combine the upstream mapping with personal overrides in sketchybar/helpers/app_icons_overrides.lua. Refresh the upstream mapping and app font with ./sketchybar/helpers/update_app_font.sh.
The workspace section in SketchyBar is driven by AeroSpace events and supports:
- dynamic workspace names
- dynamic workspace creation and removal
- per-monitor workspace visibility
- app icons per workspace
- workspace switching and moving windows by clicking the bar
Left-click a workspace to switch to it; right-click to move the focused window there and follow it. On the built-in display, empty, unfocused workspaces may be hidden to make room around the notch.
Relevant files:
aerospace/.aerospace.tomlsketchybar/items/spaces.luasketchybar/helpers/app_icons.luasketchybar/helpers/workspaces.lua: workspace parsing, sorting, item keys, and icon labels
Newly detected windows are assigned by app:
| Workspace | Apps | Shortcut key |
|---|---|---|
W̲eb |
Dia | w |
Note̲ |
Obsidian, Notion, Apple Notes | e |
C̲omm |
Slack, KakaoTalk, Calendar | c |
A̲I |
ChatGPT, Codex, Claude | a |
D̲ev |
VS Code, Ghostty | d |
R̲ead |
Preview, Zotero | r |
M̲usic |
Spotify | m |
Z1 |
Apps without an assignment | 1 |
Z2 |
Manual grouping | 2 |
The seven named workspaces are persistent. The underlined letters are part of their names, so copy the exact names when editing commands.
Window callbacks run in this order: notify SketchyBar, apply matching floating layouts, choose a workspace. Floating rules continue processing; a matching workspace assignment stops processing. The last rule uses if = 'true' to send unmatched apps to Z1.
To assign another app, extend the matching workspace rule or add a rule before the final Z1 fallback with check-further-callbacks = false. There is no separate exclusion list to maintain.
Assignments run when windows are detected. Moving an existing window manually does not cause it to be reassigned, and reloading the config does not reroute existing windows.
The AeroSpace config includes bindings for:
- directional focus and window swapping
- moving windows between monitors and workspaces
- previous/next workspace navigation
- summoning workspaces
- resizing, balancing, and layout changes
- toggling floating and fullscreen modes
- launching
Ghosttywithalt-enter
For each shortcut key in the workspace table:
alt-cmd-<key>switches to the workspacealt-shift-<key>moves the focused window there and follows italt-cmd-shift-<key>summons the workspace to the focused monitor
After editing the configs, validate and reload AeroSpace, then reload SketchyBar:
aerospace reload-config --dry-run --no-gui --warnings-as-errors
aerospace reload-config --no-gui
sketchybar --reloadctrl-alt-r also reloads the AeroSpace config.
.
|-- aerospace/
|-- borders/
|-- ghostty/
|-- git/
|-- sketchybar/
| |-- assets/
| |-- helpers/
| `-- items/
|-- vim/
`-- zsh/