Your dotfiles are how you personalize your system. These are mine.
This repository contains configuration files and automation scripts for setting up a development environment on macOS with modern command-line tools, applications, and personalized settings.
Just run the following commands in your system:
git clone https://github.com/igalarzab/dotfiles ~/.config/dotfiles
cd ~/.config/dotfiles
./installDay to day, ./install links is enough — symlinks only, offline, about a
second. The bare ./install also does packages, runtimes and system defaults,
which is what a new machine or a changed Brewfile needs. Add --dry-run to
either, or see ./install --help.
- Shell:
xonshas the primary interactive shell, with parallel Bash/zsh configuration - Editor: Neovim with optimized settings
- Terminal: iTerm2 configurations
- Version Control: Git with helpful aliases and configurations
- Package Management: Homebrew bundle with essential tools
- Modern replacements:
bat,fd,fzf,ripgrep,delta,zoxide - Development tools:
gh,jq,mise,uv,llm - System utilities:
coreutils,gnu-sed,watch,tree,pstree
Automatically installs productivity and development applications via Homebrew Cask including:
- Browsers: Arc
- Development: Visual Studio Code, ChatGPT, Claude
- Productivity: Raycast, Rectangle Pro, Fantastical, Notion
- Utilities: 1Password, AppCleaner, The Unarchiver, Cryptomator
Setup is managed by dotbot, pinned as
a submodule. Everything setup-related lives in dotbot/:
dotbot/dotbot/— the vendored tool, pinned to a tagged release.dotbot/links.conf.yaml— symlinks only. Fast and offline.dotbot/bootstrap.conf.yaml— Homebrew,mise, macOS defaults, agent skills.dotbot/hosts/<hostname>.conf.yaml— optional, picked up automatically on that machine.
The regexlink plugin in dotbot/plugins/regexlink.py creates symlinks by
pattern rather than listing them one by one:
*.symlink→~/.*(hidden files in home directory)*.configsymlink→~/.config/*(XDG config directory)*.codexsymlink→~/.codex/**.launchagent→~/Library/LaunchAgents/*.plist
Adding a config means giving the file or directory one of those suffixes. No
config edit needed. ./install links also bootstraps the launch agents managed
by this repository into the current user's GUI session.
Note that dotbot only reports changes and problems, so a run with nothing to do
is quiet by design. Pass -v to see every link it checked.
Each topic area has its own directory with relevant configurations:
- aws/: AWS CLI configurations
- bin/: Custom scripts added to
$PATH - git/: Git configuration and aliases
- gnupg/: GPG settings for commit signing
- kubernetes/: kubectl and k8s tool configurations
- macos/: macOS-specific settings
- mise/: Runtime version management
- vim/: Neovim configuration
- xonsh/: Shell configuration and custom functions
- zsh/: zsh startup used by interactive shells and Codex
App-specific shell configuration stays with the app and is loaded by extension:
env.shandinit.sh: shared by xonsh, zsh, and Bash*.xsh: xonsh-specific setup*.zsh: zsh-specific setup*.bash: Bash-specific setup
Xonsh and zsh load this configuration automatically. The shared files are ready for Bash too, but Bash does not have its own startup loader yet.
Create local configuration files that won't be tracked by git:
Git Configuration (~/.config/git/config-local):
[user]
name = Your Name
email = your.email@example.com
signingkey = your-gpg-key-id
[github]
user = your-github-usernameSSH Configuration (~/.ssh/config-local):
# Add your custom SSH configurations here
- Add new topic directories: Create a new directory (e.g.,
python/) and add configuration files - Install additional packages: Edit
packages/Brewfileto add more Homebrew formulas or casks - Modify automation: Add steps to
dotbot/bootstrap.conf.yaml, or todotbot/hosts/<hostname>.conf.yamlfor one machine only
- 🍎 macOS (tested on recent versions)
- 🌐 Internet connection for downloading packages
- 🔑 Administrative privileges for some installations
- Run
./installagain to retry failed installations, or./install --dry-runto inspect the plan without changing anything - Check
packages/Brewfileif specific packages fail to install - Verify symlinks with
ls -la ~/.*andls -la ~/.config/
Note: Fork this repository and customize it for your own needs. These configurations are tailored to my personal workflow and preferences.