https://github.com/cearley/dotfiles
My personal dotfiles and configuration for various tools and applications.
https://github.com/cearley/dotfiles
brewfile chezmoi dotfiles-macos homebrew powerlevel10k
Last synced: about 1 month ago
JSON representation
My personal dotfiles and configuration for various tools and applications.
- Host: GitHub
- URL: https://github.com/cearley/dotfiles
- Owner: cearley
- License: mit
- Created: 2025-08-28T15:37:07.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2026-05-08T15:05:34.000Z (about 1 month ago)
- Last Synced: 2026-05-08T16:38:23.829Z (about 1 month ago)
- Topics: brewfile, chezmoi, dotfiles-macos, homebrew, powerlevel10k
- Language: Shell
- Homepage:
- Size: 1.09 MB
- Stars: 2
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Agents: AGENTS.md
Awesome Lists containing this project
README
# Dotfiles
[](https://github.com/cearley/dotfiles/actions)
[](https://www.apple.com/macos/)
[](https://www.chezmoi.io/)
[](https://brew.sh/)
[](https://github.com/cearley/dotfiles/commits)
Automated macOS development environment setup - dotfiles, packages, toolchains, and system configuration, managed with [chezmoi](https://chezmoi.io).
## Table of Contents
- [Quick Start](#quick-start)
- [Key Features](#key-features)
- [Using This Repository](#using-this-repository)
- [Before Forking](#before-forking)
## Quick Start
Bootstrap a new macOS machine with a single command (replace `YOUR_GITHUB_USERNAME`):
```sh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/cearley/dotfiles/main/remote_install.sh)" -- init --apply YOUR_GITHUB_USERNAME
```
You can also pass arguments to chezmoi by appending them:
```sh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/cearley/dotfiles/main/remote_install.sh)" -- init --apply YOUR_GITHUB_USERNAME --keep-going --verbose
```
This automatically installs all dependencies (chezmoi, Git, Homebrew, KeePassXC, etc.) and applies your dotfiles.
**Requirements:**
- A KeePassXC database file is needed for password management
**Optional:**
- Machine-specific brewfiles for additional package management (will be symlinked to `$HOME/Brewfile` if present)
## Key Features
### Machine Configuration System
- **Pattern-based detection** - Automatically detects machine type via `config.yaml`
- **Reusable templates** - Cross-platform `machine-name` and `machine-config` templates
- **Dot-notation support** - Access nested settings (e.g., `keepassxc_entries.ssh`)
- **Extensible design** - Add new machine-specific properties without template changes
### Script Execution Framework
Scripts in `home/.chezmoiscripts/` use structured naming: `{frequency}_{timing}_{os}-{order}-{description}.sh.tmpl`
**Execution order** (10-point range grouping for logical categorization):
- **00-09**: System Foundation (Rosetta 2)
- **10-19**: Development Toolchains (Rust)
- **20-29**: Package Management (SDKMAN, Homebrew packages, SDKs, UV tools, Bun packages, Cargo crates, machine-specific Brewfiles)
- **30-39**: Environment Managers & AI Tooling (nvm, Claude Code, Claude Code skills)
- **40-49**: Environment Setup (GitHub auth, shell plugins)
- **80-99**: System Configuration (security, VPN, sync services, defaults, validation)
### Shared Utilities
- **Location**: `home/scripts/shared-utils.sh`
- **Functions**: `print_message()`, `command_exists()`, `require_tools()`, `download_file()`, `wait_for_app_installation()`, `prompt_ready()`, `is_icloud_signed_in()`, etc.
- **Consistent patterns**: All installation scripts use identical messaging and error handling
### Development Environment
**Unified package management** (all in `packages.yaml`):
1. **Homebrew packages** - System packages, apps, CLI tools (`taps`, `brews`, `casks`, `mas`)
2. **UV tools** - Python CLI tools and utilities (`uv` key within tags)
3. **Bun packages** - JavaScript/TypeScript global tools (`bun` key within tags)
4. **SDKMAN SDKs** - JVM ecosystem (Java, Gradle, Maven) (`sdkman` key in `dev` tag)
5. **Cargo crates** - Rust CLI tools (`cargo` key within tags; requires `dev` tag)
6. **Claude Code skills** - AI assistant skills via `npx skills add` (`skills` key within tags; requires `ai` tag)
7. **Machine-specific Brewfiles** - Additional packages requiring confirmation
**Environment managers:**
- **SDKMAN**: Java/JVM toolchain management (requires `dev` tag)
- **uv**: Python package and tool management
- **nvm**: Node.js version management
- **conda**: Python environment management (Miniforge)
## Using This Repository
**Common operations:**
```sh
# Edit and apply dotfiles
chezmoi edit --apply ~/.bashrc
# Preview changes before applying
chezmoi diff
# Pull latest changes and apply
chezmoi update
# Add new dotfile
chezmoi add ~/.config/newfile
```
See the [chezmoi documentation](https://www.chezmoi.io/user-guide/daily-operations/) for more details.
## Before Forking
This is a personal configuration reflecting specific workflows and preferences. Consider it a **reference implementation** rather than something to use directly.
**What you'll need to customize:**
- **KeePassXC database** - Set up your own with required entries
- **Machine configurations** - Update `home/.chezmoidata/config.yaml` for your machines
- **Package selections** - Review `home/.chezmoidata/packages.yaml` and machine-specific Brewfiles
- **Personal tools** - Remove custom hosts management, etc.
- **SSH/Git settings** - Update for your accounts and preferences
**Initial setup prompts:**
- Full name, GitHub username, GitHub emails
- KeePassXC database path
- Microsoft email (optional, for subscription app installs)
- Machine tags (core, dev, ai, work, personal, data-science, mobile) - controls which tools get installed
**Development focus:** Programming, Cloud (AWS, Azure), AI/ML, macOS-specific tools