Personal dotfiles for macOS development environment setup with automatic configuration switching.
git clone https://github.com/tmttn/.dotfiles.git ~/.dotfiles
cd ~/.dotfiles
./setup.shNote: The setup script automatically initializes and updates Git submodules, so you don't need to run git submodule update --init --recursive manually.
- 🍎 Automatic macOS Detection: Git configuration automatically switches to ACA work settings on MacBooks
- 📦 Comprehensive Package Management: 100+ packages via Homebrew including development tools and fonts
- 🚀 One-Command Setup: Complete development environment setup with a single script
- ⚙️ Modular Configuration: Organized by application/tool for easy maintenance
- 🔗 Symlink Management: Uses GNU Stow for clean dotfile management
- 📦 Git Submodules: Automatically pulls external configurations and plugins
- Neovim: kickstart.nvim - Complete Neovim configuration
- Zsh Plugins:
- zsh-autosuggestions - Command autosuggestions
- gradle-completion - Gradle autocomplete
- zsh-npm-scripts-autocomplete - NPM scripts completion
- zsh-mvn-contexts - Maven context switching
- zsh-ssh - SSH host completion
- Keyboard: keyboards - Custom keyboard layouts
- macOS: See macos/README.md - Automated laptop setup with Brewfile
- Linux: Coming soon
├── asdf/ # Version manager configuration
├── backgrounds/ # Desktop wallpapers
├── bash/ # Bash shell configuration
├── git/ # Personal Git configuration
├── git-aca/ # Work Git configuration (auto-used on macOS)
├── hypr/ # Hyprland window manager
├── i3/ # i3 window manager
├── keyboard/ # Keyboard layouts and configs
├── kitty/ # Kitty terminal (Linux)
├── kitty-macos/ # Kitty terminal (macOS)
├── macos/ # macOS-specific setup and Brewfile
├── nvim/ # Neovim configuration
├── tmux/ # Terminal multiplexer config
├── zsh/ # Zsh shell with oh-my-zsh
└── wezterm/ # WezTerm terminal configuration
This setup configures Git for ACA work environment:
- Work repositories: Uses
tom.metten@acagroup.bewith ACA GPG key by default - Personal repositories: Can be overridden locally as needed
- All commits: GPG signed for security
- macOS 12+ (Monterey or later)
- Internet connection
- Admin privileges
- Xcode Command Line Tools (installed automatically)
- GNU Stow
- Git
- Curl
- asdf (version manager)
- Docker & Colima
- Git, GitHub CLI
- Node.js, Python, Go
- VS Code with extensions
- 50+ Nerd Fonts for terminal icons
- Programming fonts (Fira Code, JetBrains Mono, etc.)
- Arc, Firefox browsers
- Raycast launcher
- Rectangle window manager
- And many more via Brewfile
- Sensible macOS defaults
- Dock configuration
- Finder settings
- Security preferences
- Sign in to Mac App Store (for App Store apps)
- Configure SSH keys for Git repositories
- Set up GPG keys for commit signing
- Launch Raycast and configure shortcuts
- Configure Arc browser sync
- Edit
macos/Brewfileto add/remove packages - Modify
zsh/.zshrcfor shell customization - Update
macos/macos.shfor system preferences - Add new configurations in dedicated folders
To add a new application configuration to this dotfiles repository:
-
Create the configuration directory:
mkdir ~/.dotfiles/myapp -
Add your configuration files:
# Create the expected directory structure mkdir -p ~/.dotfiles/myapp/.config/myapp # Copy your existing config cp ~/.config/myapp/config.yml ~/.dotfiles/myapp/.config/myapp/
-
Test the stow configuration:
cd ~/.dotfiles stow -n -v myapp # Dry run to see what would be linked stow myapp # Actually create the symlinks
-
Add to the setup script (if it should be installed automatically):
- For shared configs (both macOS/Linux): Add to the "shared configurations" section
- For macOS-only: Add to the macOS-specific section
- For Linux-only: Add to the Linux-specific section
# In setup.sh, add to appropriate section: stow -t ~ myapp
-
Update documentation:
- Add the new config to the Structure section in this README
- Document any special setup requirements
- Simple config file:
myapp/.myapprc - XDG config:
myapp/.config/myapp/config.yml - Multiple files:
myapp/.config/myapp/with subdirectories - Conditional configs: Create separate directories like
myapp-linux/andmyapp-macos/
- Conflicts: Use
stow -D myappto remove, fix conflicts, thenstow myapp - Adopt existing files: Use
stow --adopt myappto move existing files into the stow directory - Verbose output: Use
stow -v myappto see exactly what's being linked - Dry run: Use
stow -n myappto preview changes without making them
- Homebrew installation fails: Check internet connection and run
xcode-select --install - Permission denied: Ensure you're not running as root
- Git config not switching: Verify you're in
/Users/path on macOS - Missing plugins/configs: Run
git submodule update --init --recursivemanually if setup fails
Installation logs are saved to ~/dotfiles-install.log
- Fork the repository
- Create a feature branch
- Make your changes
- Test on a fresh macOS installation
- Submit a pull request
This is a personal configuration repository. Feel free to fork and adapt for your own use.
⭐ Pro Tip: Run ./setup.sh on a fresh macOS installation and grab a coffee ☕ - everything will be ready when you return!