My personal macOS dotfiles and configuration setup.
βββ aerospace/ # AeroSpace window manager config
β βββ .aerospace.toml
βββ config/ # XDG config directory contents
β βββ sketchybar/ # SketchyBar status bar
β βββ nvim/ # Neovim configuration
β βββ fish/ # Fish shell config
β βββ wezterm/ # WezTerm terminal config
β βββ btop/ # Btop system monitor
βββ shell/ # Shell configuration files
β βββ .zshrc
β βββ .zprofile
β βββ .profile
βββ install.sh # Installation script
- πͺ AeroSpace: Tiling window manager with workspace management
- π SketchyBar: Highly customizable status bar with workspace indicators
- π Fish Shell: Modern shell with autocompletion and syntax highlighting
- π Neovim: Extensive editor configuration
- π» WezTerm: GPU-accelerated terminal emulator
- π Btop: Beautiful system monitor
Make sure you have the following installed:
- Homebrew - Package manager for macOS
- AeroSpace - Tiling window manager
- SketchyBar - Status bar
- Fish Shell - Modern shell
- Neovim - Text editor
- WezTerm - Terminal emulator
- pyenv - Python version management
- nvm - Node.js version management
- fzf - Fuzzy finder
- btop - System monitor
# Install Homebrew first
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Install main dependencies
brew install --cask aerospace sketchybar wezterm
brew install fish neovim fzf btop
# Install development tools
brew install pyenv nvm
# Install Oh My Zsh (for zsh configuration)
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
# Install zsh-autosuggestions plugin
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions-
Clone this repository:
git clone https://github.com/ismailrohaga/dotfiles.git ~/.dotfiles cd ~/.dotfiles
-
Run the install script:
./install.sh
If you prefer to install manually:
# Backup existing configs
cp ~/.aerospace.toml ~/.aerospace.toml.backup 2>/dev/null || true
cp ~/.zshrc ~/.zshrc.backup 2>/dev/null || true
# Create symlinks
ln -sf ~/.dotfiles/aerospace/.aerospace.toml ~/.aerospace.toml
ln -sf ~/.dotfiles/shell/.zshrc ~/.zshrc
ln -sf ~/.dotfiles/shell/.zprofile ~/.zprofile
ln -sf ~/.dotfiles/shell/.profile ~/.profile
# Config directory symlinks
mkdir -p ~/.config
ln -sf ~/.dotfiles/config/sketchybar ~/.config/sketchybar
ln -sf ~/.dotfiles/config/nvim ~/.config/nvim
ln -sf ~/.dotfiles/config/fish ~/.config/fish
ln -sf ~/.dotfiles/config/wezterm ~/.config/wezterm
ln -sf ~/.dotfiles/config/btop ~/.config/btopThis is the magic of dotfiles! Instead of copying files, we create symbolic links (symlinks) that point from your system's expected config locations to your dotfiles repository.
# Instead of copying files like this:
cp ~/.dotfiles/shell/.zshrc ~/.zshrc
# We create symlinks like this:
ln -sf ~/.dotfiles/shell/.zshrc ~/.zshrc- β
Single source of truth: All configs live in
~/.dotfiles/ - β
Automatic sync: Edit in
~/.dotfiles/, changes apply instantly - β Version control: Track all changes with git
- β Easy backup: Push to GitHub, pull on any machine
# Edit your shell config
nvim ~/.dotfiles/shell/.zshrc
# Changes are immediately active because ~/.zshrc β ~/.dotfiles/shell/.zshrc
source ~/.zshrc
# Commit your changes
cd ~/.dotfiles
git add shell/.zshrc
git commit -m "Update shell aliases"
git push~/.zshrc β ~/.dotfiles/shell/.zshrc
~/.aerospace.toml β ~/.dotfiles/aerospace/.aerospace.toml
~/.config/sketchybar/ β ~/.dotfiles/config/sketchybar/
~/.config/nvim/ β ~/.dotfiles/config/nvim/
~/.config/fish/ β ~/.dotfiles/config/fish/
~/.config/wezterm/ β ~/.dotfiles/config/wezterm/
~/.config/btop/ β ~/.dotfiles/config/btop/
Your API keys are now safely managed! Instead of hardcoding sensitive information in your dotfiles, we use a separate secrets file.
# Your .zshrc loads secrets from a separate file
[ -f ~/.config/env/secrets.sh ] && source ~/.config/env/secrets.sh~/.config/env/secrets.sh # Your private API keys (NOT in git)
# Edit your secrets file
nvim ~/.config/env/secrets.sh
# Example content:
#!/bin/bash
export ANTHROPIC_API_KEY="your-anthropic-key-here"
export OPENAI_API_KEY="your-openai-key-here"
export GITHUB_TOKEN="your-github-token-here"- β Secure permissions (600) - only you can read/write
- β
Not tracked by git - added to
.gitignore - β Automatic loading - sourced by shell configuration
- β Separate from dotfiles - no accidental commits
- Never commit secrets to version control
- Backup your secrets file separately and securely
- Use environment variables for all sensitive data
- Regenerate keys if accidentally exposed
The setup includes a seamless integration between AeroSpace and SketchyBar:
- Workspace indicators automatically highlight the active workspace
- Dynamic workspace creation based on AeroSpace configuration
- Smooth transitions and visual feedback
- Auto-highlighting: Current workspace is visually distinguished
- Click to switch: Click workspace numbers to switch
- Dynamic updates: Real-time updates when switching workspaces
To update your dotfiles:
cd ~/.dotfiles
git pull origin main# Edit AeroSpace configuration
nvim ~/.dotfiles/aerospace/.aerospace.toml
# Edit SketchyBar configuration
nvim ~/.dotfiles/config/sketchybar/sketchybarrc
# Edit Shell configuration
nvim ~/.dotfiles/shell/.zshrcAfter making changes, test them:
# Reload AeroSpace
aerospace reload-config
# Reload SketchyBar
sketchybar --reload
# Reload Shell
source ~/.zshrccd ~/.dotfiles
git add .
git commit -m "Update configuration"
git push origin mainFeel free to customize the configurations to your needs:
aerospace/.aerospace.toml- Window manager behaviorconfig/sketchybar/colors.sh- Color schemeconfig/sketchybar/sketchybarrc- Status bar layoutshell/.zshrc- Shell aliases and functions
# Install missing dependencies
brew install --cask aerospace sketchybar wezterm
brew install fish neovim fzf btop pyenv nvm# Run the install script to fix permissions
cd ~/.dotfiles && ./install.sh# Check if SketchyBar is running
brew services restart sketchybar
# Check permissions
chmod +x ~/.config/sketchybar/sketchybarrc
chmod +x ~/.config/sketchybar/plugins/*.sh# Restart AeroSpace
aerospace reload-config# Install fish and add to shells
brew install fish
echo $(which fish) | sudo tee -a /etc/shells
chsh -s $(which fish)# Check if secrets file exists and has proper permissions
ls -la ~/.config/env/secrets.sh
# Should show: -rw------- (600 permissions)
# If not, fix permissions:
chmod 600 ~/.config/env/secrets.sh- Check the AeroSpace documentation
- Check the SketchyBar documentation
- Open an issue in this repository
If you find bugs or have improvements, feel free to open an issue or PR!
MIT License - feel free to use and modify as needed.
Note: These dotfiles are tailored for macOS. Some configurations may not work on other operating systems.