GuideMarch 31, 20268 min read

Switching from chezmoi to ConfigSync: A Migration Guide

Everything you need to migrate your dotfiles, templates, and secrets from chezmoi to ConfigSync — with zero data loss and a smoother workflow on the other side.

Why Developers Are Switching

chezmoi is an excellent dotfile manager. Its Go template system is powerful, its secret manager integrations are extensive, and it has earned a loyal following for good reason. But as development workflows have evolved, many developers find themselves wanting more.

Cloud sync without git. chezmoi requires you to maintain a git repository, configure SSH keys, and deal with merge conflicts. ConfigSync provides built-in encrypted cloud sync with a single configsync push command. No repository to manage, no merge conflicts to resolve.

Package tracking. chezmoi tracks dotfiles but not installed packages. ConfigSync tracks packages across 10+ package managers (Homebrew, apt, npm, pip, cargo, and more) and can install missing packages automatically on a new machine.

Watch mode. With configsync watch, changes to your tracked files are synced automatically. No more forgetting to run chezmoi add after editing your .zshrc.

Simpler templates. If you are only using chezmoi templates for basic variable substitution and OS detection, ConfigSync’s template system covers those use cases with far less syntax overhead.

Team features. ConfigSync includes shared configurations, team onboarding profiles, and a web dashboard — features that simply do not exist in chezmoi.

What You Keep, What Changes

The good news: you keep all of your configuration files. Your .zshrc, your git config, your SSH config, your VS Code settings — every file chezmoi manages today will be managed by ConfigSync tomorrow. What changes is the tool that manages them.

chezmoi stores copies of your files in a source directory (~/.local/share/chezmoi) and applies them to your home directory. ConfigSync tracks files in their original locations and syncs encrypted snapshots to the cloud. There is no source directory to maintain.

Step-by-Step Migration

Step 1: Install ConfigSync. If you have Node.js installed, this takes about 30 seconds.

Install and initialize
npm install -g @configsync/cli configsync init

Step 2: Export your chezmoi file list. Run chezmoi managed to see every file chezmoi currently tracks. This is your migration checklist.

List chezmoi-managed files
chezmoi managed # Output: # .gitconfig # .ssh/config # .zshrc # .config/starship.toml # ...

Step 3: Add files to ConfigSync. For each file in the list, add it to ConfigSync. For common tools like SSH, Git, Zsh, and VS Code, use the module system instead of tracking individual files — modules know which files belong together.

Add modules and individual files
# Use modules for common tools (tracks all related files) configsync add module ssh configsync add module git configsync add module zsh configsync add module vscode # For files that don't belong to a module configsync add config ~/.config/starship.toml configsync add config ~/.config/alacritty/alacritty.toml

Step 4: Convert templates. If you use chezmoi templates, convert the Go template syntax to ConfigSync’s format. Simple variable substitutions and OS conditionals translate directly.

Template conversion example
# chezmoi (Go templates) {{ if eq .chezmoi.os "darwin" }} export HOMEBREW_PREFIX="/opt/homebrew" {{ end }} export EDITOR="{{ .editor }}" # ConfigSync {{#if platform == "darwin"}} export HOMEBREW_PREFIX="/opt/homebrew" {{/if}} export EDITOR="{{vars.editor}}"

Step 5: Migrate secrets. chezmoi secrets stored via chezmoi secret or external providers need to be added to ConfigSync’s secret store.

Migrate secrets
# For each secret in chezmoi configsync secret set GITHUB_TOKEN configsync secret set NPM_TOKEN configsync secret set AWS_ACCESS_KEY_ID

Step 6: Push to ConfigSync cloud. Once everything is added, push your entire environment to ConfigSync’s encrypted cloud storage.

Push your environment
configsync push -m "migrated from chezmoi"

Template Conversion Reference

Here is a quick reference for converting the most common chezmoi template patterns to ConfigSync equivalents.

chezmoi (Go Template)ConfigSync
{{ .chezmoi.os }}{{platform}}
{{ .chezmoi.hostname }}{{hostname}}
{{ .chezmoi.username }}{{username}}
{{ .chezmoi.homeDir }}{{home}}
{{ if eq .chezmoi.os "darwin" }}{{#if platform == "darwin"}}
{{ else if eq .chezmoi.os "linux" }}{{#elif platform == "linux"}}
{{ end }}{{/if}}
{{ .email }}{{vars.email}}
{{ .editor }}{{vars.editor}}
{{ include "file.txt" }}{{include "file.txt"}}

What You Gain After Migrating

Once you have migrated, you unlock several capabilities that chezmoi does not offer:

Cloud sync without git. Push and pull with a single command. No repository to maintain, no merge conflicts, no SSH keys to configure on each machine.

Package tracking. Run configsync scan to snapshot your installed packages. On a new machine, configsync pull --install installs everything automatically.

Watch mode. Run configsync watch and never think about syncing again. Changes are detected and pushed automatically.

Hooks and bootstrap scripts. Run commands before or after sync operations. Set up a bootstrap script at ~/.configsync/bootstrap.sh for first-time machine setup.

Web dashboard. View all your machines, their sync status, and configuration differences from a single browser tab.

Tip: You do not need to uninstall chezmoi right away. Run both tools in parallel for a week to make sure everything is working, then remove chezmoi when you are confident.

Ready to try ConfigSync?

Sync your entire dev environment across machines in minutes. Free forever for up to 3 devices.