_ _ ___ _ _
_| |___| |_| _|_| |___ ___
| . | . | _| _| | | -_|_ -|
|___|___|_| |_| |_|_|___|___|
Personal dotfiles configuration for macOS. Automates the setup of development environment, system preferences, and development tools.
Inspired by dotfiles.github.io
Before running the installation, complete these steps:
-
Shell: These scripts target Zsh (macOS default). Run
./install.shanddotfilesfrom Zsh. -
Sign in to Mac App Store
- Open App Store and sign in with your Apple ID
-
Update macOS
- Go to System Settings → Software Update
- Install the latest macOS version
-
Install Rosetta (Apple Silicon only)
softwareupdate --install-rosetta
-
Set up SSH keys
mkdir -p ~/.ssh && cd ~/.ssh
-
Option A: Copy SSH keys from another machine:
# Copy id_rsa and id_rsa.pub (or id_ed25519/id_ecdsa) chmod 600 ~/.ssh/id_rsa chmod 644 ~/.ssh/id_rsa.pub
-
Option B: Generate a new SSH key
- The installer will prompt you to create one if none are found
-
-
Create GitHub Personal Access Token
- Create a token with
reposcope - Save it securely (you'll need it for git operations)
- Create a token with
-
Install Command Line Tools
xcode-select --install
- Follow the prompts to install Xcode Command Line Tools
-
Clone the repository
git clone git@github.com:milon/dotfiles.git ~/.dotfiles -
Run the installer
cd ~/.dotfiles ./install.sh
The installer will guide you through the setup process with interactive prompts.
Optional (after install): Run dotfiles symlinks so config (including files/config/topgrade.toml) is mirrored under ~/.config/. dotfiles update uses ~/.config/topgrade.toml when present; otherwise it reads the copy inside the repo.
After installation, you'll have a dotfiles command available in your terminal.
dotfiles helpor simply:
dotfilesRun dotfiles help (or dotfiles) for the current list. In short:
- update — Topgrade with
files/config/topgrade.toml(brew, casks, Mac App Store, mise, editor extensions, Composer, etc.; steps can be disabled in that file). - clean —
brew cleanup,brew autoremove(unused dependency-only formulae), plus npm / Composer / mise cache cleanup where available. - symlinks — Link tracked files from
files/into~and~/.config/.
When you add a dotfiles subcommand, update both bin/dotfiles (COMMAND_SCRIPTS) and support/help.sh so help stays accurate.
- Editors: Vim, Neovim (Lazy.nvim)
- Version Manager: mise (node, python, ruby, java, go, rust)
- Languages: Node.js, Python, PHP, Ruby, Java, Rust
- Databases: SQLite, DBngin (MySQL, PostgreSQL, Redis)
- Other: Git, Composer, Laravel Valet, Mailpit, Meilisearch
- Development: Visual Studio Code, Bruno (API client), OrbStack (Docker)
- Productivity: 1Password, Raycast, Obsidian, Bartender
- System: Aldente, MonitorControl, Latest
- Media: IINA, YouTube Music
- Terminal: Ghostty
- Shell configuration (Zsh with Antigen)
- Git configuration with aliases and colors
- macOS system preferences
- Symlinks for dotfiles
- Custom aliases: Edit
~/.custom_aliases(created automatically) - Dotfiles: Add files to
files/directory and updatesupport/sym_links.sh - Homebrew packages: Add to
support/Brewfile
- Git repositories: Edit
support/git_clone.shto add your repositories - Git pull list: Edit
support/pull.shto manage repository updates
- SSH key errors: Ensure your SSH keys are properly configured and added to GitHub
- Homebrew errors: Make sure you have admin privileges and internet connection
- Permission errors: Some scripts may require
sudofor system-level changes
# Re-run a specific setup step
dotfiles brew
# Check what will be installed
cat support/Brewfile
# View installation logs
# Check the output from install.sh for specific errors- The installer will prompt you for confirmation at various steps
- Some steps require manual intervention (e.g., signing into apps)
- The
manual_steps.shscript will remind you of remaining manual tasks
This is a personal dotfiles repository, but suggestions and improvements are welcome!
- Twitter: @to_milon
- Email: contact[@]milon[.]im
See LICENSE file for details.