Ian Pascoe's dotfiles for macOS, Linux (including WSL) and Windows, managed with chezmoi.
On a new machine, install chezmoi and apply these dotfiles in one step:
sh -c "$(curl -fsLS get.chezmoi.io)" -- init --apply ian-pascoeOn Windows (PowerShell):
iex "&{$(irm 'https://get.chezmoi.io/ps1')} -- init --apply ian-pascoe"If chezmoi is already installed:
chezmoi init --apply ian-pascoe- Git
- mise: installs the global CLIs and runtimes after apply. Install it first and resolve any config trust prompts yourself.
- A native package manager: Homebrew on macOS, APT on Linux, or Scoop on Windows.
chezmoi update # pull the latest changes and apply them
chezmoi diff # preview what apply would change
chezmoi apply # apply the source state to $HOMEupgrade-all upgrades the packages installed by every package manager.
| Area | Tools |
|---|---|
| Shells | Zsh, Bash, PowerShell, Starship prompt |
| Editor | Neovim (LazyVim) |
| Terminals | Ghostty, WezTerm, Windows Terminal, Tern, Rex, Herdr |
| Window management | AeroSpace, JankyBorders, Karabiner-Elements, Hammerspoon (macOS); GlazeWM, YASB, AutoHotkey (Windows) |
| CLI tools | bat, btop, fastfetch, k9s, lsd, yazi, spotify-player |
| Coding agents | Pi config, extensions and skills; Plannotator |
| Themes | 100+ coordinated themes with wallpapers, in light and dark variants |
chezmoi source names encode their target paths: dot_config/ deploys to
~/.config/, private_ sets restrictive permissions, executable_ sets the
executable bit, and .tmpl files are rendered as templates.
| Path | Purpose |
|---|---|
dot_config/ |
~/.config app configuration |
dot_local/bin/ |
Personal scripts: theme switching, package sync, maintenance |
dot_themes/ |
Theme variants deployed to ~/.themes |
dot_pi/, dot_agents/ |
Pi coding-agent config and installed agent skills |
.chezmoiscripts/ |
Post-apply hooks (see docs/chezmoi-hooks.md) |
.chezmoiexternal.toml.tmpl |
Externally fetched assets, such as theme wallpapers |
.chezmoiignore |
Repo-only files and per-OS exclusions |
Brewfile |
macOS Homebrew packages |
AppData/, Documents/ |
Windows-only configuration |
Library/ |
macOS-only configuration and LaunchAgents |
tern/ |
Shared Tern config, included by each OS's config stub |
docs/ |
Design notes, specs and research |
Shared CLI tools and runtimes are declared in
dot_config/mise/config.toml and installed by a
post-apply hook. OS packages live in the native package manager's manifest:
- macOS:
Brewfile - Linux:
dot_config/packages/private_apt.txt - Windows:
dot_config/scoop/scoopfile.json
See docs/package-ownership.md for which manager
owns what. install-package-manifests installs from the manifests, and
sync-package-manifests snapshots what each host has installed without
changing the manifests.
Every themed app reads its theme through ~/.config/theme, a link to the
active variant in ~/.themes/. Switch themes with:
list-themes # list available themes
set-theme tokyo-night # switch theme family, keeping the saved mode
set-theme gruvbox light # switch family and mode
set-mode toggle # switch light/dark for the current theme
random-theme # pick a random themeWindows has PowerShell equivalents (Set-Theme.ps1, List-Themes.ps1, ...).
To add a theme, see
dot_themes/docs/adding-a-variant.md.
Repo tooling (formatting, linting, tests for themes and scripts) is a pnpm workspace:
pnpm install # also installs the pre-commit hook
pnpm format # oxfmt
pnpm lint # oxlint
pnpm typecheck
pnpm test # vitest- chezmoi by Tom Payne
- Wallpaper sources and credits are listed in
.chezmoiexternal.toml.tmpl
My own work in this repo is licensed under the MIT License.
Third-party content keeps its original license and is not covered by it:
- Agent skills in
dot_agents/skills/from other authors; their sources are recorded indot_local/state/skills/dot_skill-lock.json. - Wallpapers, whether stored in
dot_themes/*/backgrounds/or fetched via.chezmoiexternal.toml.tmpl. - Color palettes ported from upstream themes, which belong to their authors.
- Bible passages, which are public domain or CC0; see docs/licenses/bible-translations.md.