My personal macOS development environment setup with window management, dotfiles, and automation scripts.
git clone https://github.com/jaysayshello/dotfiles.git ~/Github/jaysayshello/dotfiles
cd ~/Github/jaysayshello/dotfiles
./install.shThe install script will:
- Configure macOS defaults (
scripts/macos-defaults.sh) - Install Homebrew, dev tools, and applications
- Symlink Yabai, SKHD, Ghostty, Neovim, Opencode, llama-swap, tmux, and zsh configs into
~ - Start Yabai and SKHD as services
- Install Oh My Zsh
Safe to re-run; it skips anything already installed.
dotfiles/
├── dotfiles/ # Configuration files (organized by tool)
│ ├── cheatsheets/ # Personal reference notes (git, kubectl)
│ ├── ghostty/config
│ ├── llama-swap/config.yaml.example # Template; real config.yaml is gitignored
│ ├── nvim/ # LazyVim-based Neovim config
│ ├── opencode/ # Opencode TUI config + tokyonight-transparent theme
│ ├── skhd/ # .skhdrc + .desktop_skhdrc + .laptop_skhdrc
│ ├── tmux/ # .tmux.conf + sessions.sh (status-line renderer)
│ ├── yabai/ # .yabairc + per-mode configs and centering scripts
│ └── zsh/.zshrc
├── scripts/
│ ├── desktop.sh # Switch Yabai/SKHD to desktop mode (alias: `desktop`)
│ ├── laptop.sh # Switch Yabai/SKHD to laptop mode (alias: `laptop`)
│ ├── work.sh # Open work apps (Slack, Reminders, Okta, Calendar)
│ ├── sync-dotfiles.sh # Commit, pull --rebase, push
│ ├── macos-defaults.sh # macOS system preferences
│ ├── local-llm-stack.sh # Install/manage local LLM stack
│ └── start-llm-stack.sh # Start the local LLM stack
└── install.sh # Main installation script
This setup supports separate Yabai/SKHD configurations for laptop and desktop.
- Desktop Mode:
desktop— copies.desktop_yabaiand.desktop_skhdrc, restarts services - Laptop Mode:
laptop— copies.laptop_yabaiand.laptop_skhdrc, restarts services
Different window sizes for each mode:
- Laptop: 1400x1000 (smaller for built-in displays)
- Desktop: 2000x1500 (larger for external monitors)
Trigger with Shift+Cmd+E to float/unfloat and center windows.
- Open System Settings → Privacy & Security → Accessibility
- Add
yabaiandskhdfrom/opt/homebrew/bin- They won't appear in the list, but they should still work after being added
# For laptop setup
~/.laptop_yabai
# For desktop setup
~/.desktop_yabaiOr run desktop / laptop from the terminal to switch modes on the fly.
- Focus:
Alt + h/j/k/l - Swap:
Shift + Alt + h/j/k/l - Float/Center:
Shift + Cmd + E - Fullscreen:
Alt + F - Balance windows:
Shift + Cmd + 2 - Rotate layout:
Alt + R - Create space:
Cmd + Alt + N - Move to space:
Shift + Cmd + X/Z/C
- Prefix:
Ctrl + Space - Navigate panes:
Ctrl + a/s/w/d(left/down/up/right) - Move/swap panes:
Ctrl + h/j/k/l(left/down/up/right; forwarded to vim/nvim if focused) - Split horizontal:
Ctrl + e - Split vertical:
Ctrl + q - Kill pane:
Option + W - Switch session:
Option + 1/2/3
- Terminal: Ghostty
- Development: VSCode, Docker, Postman, DevUtils, Burp Suite
- Fonts: Fira Code, Fira Code Nerd Font
- Security: GPG Suite
- Other: Discord, KeepingYouAwake
(Chrome, Spotify, and Notion are commented out in install.sh — uncomment to install.)
All configuration files live under dotfiles/ and can be edited in place; the install script symlinks them into ~, so changes take effect immediately.
After making structural changes (new files, new tool configs), re-run ./install.sh to wire up any new symlinks.
- Install script uses guarded installs, so it's safe to re-run
- GCP SDK paths are configured for
~/Desktop/google-cloud-sdk/ sync-dotfiles.shis wired to a launchd job that periodically commits and pushes changes (logs toscripts/sync-dotfiles.log, gitignored)