
Chezmoi là gì?
Chezmoi là công cụ quản lý dotfiles mã nguồn mở viết bằng Go, giúp version control, sync và deploy cấu hình cá nhân (dotfiles) trên nhiều máy một cách an toàn. Thay vì git clone repo dotfiles + symlink từng file, chezmoi quản lý toàn bộ workflow: templating, secret management, cấu hình khác biệt giữa nhiều máy.
Dotfiles là các file cấu hình bắt đầu bằng dấu chấm trong thư mục home: .bashrc, .zshrc, .vimrc, .gitconfig… Chúng quyết định trải nghiệm terminal, editor, và toàn bộ môi trường dev của bạn. Quản lý chúng tốt nghĩa là máy mới nào cũng “như nhà” sau 5 phút setup.

Tại sao cần quản lý dotfiles?
Developer trung bình có 20-50 config files: .bashrc, .vimrc, .tmux.conf, alacritty.toml, starship.toml, SSH config, git config. Khi setup máy mới hoặc đồng bộ giữa máy làm việc và máy cá nhân, symlink từng file thủ công tốn hàng giờ và dễ sót.
Chezmoi tự động hóa toàn bộ: phát hiện file khác biệt, áp dụng thay đổi, version control qua Git, và deploy cấu hình mới với một lệnh duy nhất. Đặc biệt quan trọng khi làm việc trên nhiều máy: laptop công ty, desktop cá nhân, server cloud.
So sánh với dotfiles managers khác
| Tool | Approach | Secrets built-in | Multi-machine |
|---|---|---|---|
| Chezmoi | Source directory sync | Có (age encryption) | Templates theo hostname |
| GNU Stow | Symlink tree | Không | Thủ công từng máy |
| Dotdrop | Config YAML + link | Không built-in | Variables chỉ định |
| Home Manager (Nix) | Nix expressions | Qua agenix | NixOS modules |
| Yadm | Git wrapper | Không | Alt files cho khác biệt |
Cài đặt và bắt đầu nhanh
Trên macOS: brew install chezmoi. Trên Linux: curl script hoặc package manager APT/DNF. Trên Windows: scoop hoặc choco. Khởi chạy lần đầu:
chezmoi init— tạo~/.local/share/chezmoisource directory + default configchezmoi add ~/.bashrc— thêm file cụ thể vào managed listchezmoi add ~/.gitconfig ~/.tmux.conf— thêm nhiều file cùng lúcchezmoi status— xem diff giữa source và target systemchezmoi diff— xem chi tiết nội dung thay đổi trước khi áp dụngchezmoi apply— đồng bộ file từ source vào thư mục homechezmoi cd && git init && git add . && git commit -m "init"— version control toàn bộ

Tính năng nâng cao của Chezmoi
Templating — một file, nhiều máy
Cùng file .bashrc nhưng nội dung khác nhau giữa macOS và Linux bằng Go templates:
# dot_bashrc.tmpl
{{- if eq .chezmoi.os "darwin" }}
export PATH="$HOME/.local/bin:$PATH"
alias ll="ls -laG"
{{- else if eq .chezmoi.os "linux" }}
export PATH="$HOME/.local/bin:$PATH"
alias ll="ls -la --color=auto"
{{- end }}
Biến có sẵn: .chezmoi.os, .chezmoi.arch, .chezmoi.hostname, .chezmoi.username… Thêm biến tùy chỉnh trong file .chezmoi.toml của source directory.
Secret Management — không commit mật khẩu lên GitHub
Chezmoi tích hợp age encryption: file mã hóa ở máy chính, giải mã khi apply trên máy đích. Cách dùng:
chezmoi add --encrypt ~/.ssh/id_ed25519— mã hóa tự động- File được lưu dạng
.agetrong source directory - Khi apply, chezmoi hỏi passphrase (hoặc dùng key agent) để decrypt
- Commit file .age lên Git public repo an toàn — không lộ secret
Run Scripts & Lifecycle hooks
run_onchange_before_*— script chạy trước khi sync: cài dependencies qua brew/aptrun_onchange_after_*— script chạy sau sync: restart service, reload shellrun_once_*— script chạy đúng 1 lần duy nhất trên máy mới: init database, tạo SSH keys
Scripts thông minh: chỉ chạy khi nội dung thay đổi, không cần chạy lại mỗi lần sync.
Nhánh cấu hình theo hostname/machine
Bạn có thể có file riêng cho từng máy: dot_gitconfig cho tất cả, dot_gitconfig_personal.tmpl cho laptop cá nhân. Chezmoi merge theo thứ tự ưu tiên khi apply.
Workflow thực tế
Setup máy mới trong 1 lệnh
chezmoi init --apply https://github.com/user/dotfiles
Chezmoi clone repo → decrypt secrets → sync toàn bộ file → chạy lifecycle scripts → môi trường dev hoàn chỉnh.
Cập nhật config hằng ngày
chezmoi add ~/.tmux.conf # bắt thay đổi mới
chezmoi status # xác nhận diff
chezmoi diff # xem chi tiết
chezmoi apply # áp dụng ngay
chezmoi cd # vào source directory
git commit -am "tmux: enable vi mode"
git push
Đồng bộ từ remote
chezmoi update # git pull + apply tự động
Tương tự git pull && chezmoi apply nhưng an toàn hơn: pre/post scripts chạy đúng thời điểm, không ghi đè file local đang dùng mà không hỏi.
Best Practices
- Bắt đầu nhỏ: Chỉ thêm
~/.bashrc ~/.gitconfig ~/.tmux.conftrước, mở rộng dần khi đã quen workflow. - Secrets tách riêng: Không bao giờ
chezmoi add ~/.envtrực tiếp — luôn dùng--encrypthoặc age file. - Template theo hostname: Machine A và B khác SSH config, dùng template thay vì duplicate file.
- Commit hygiene: Trước khi push lên GitHub public, chạy
chezmoi verifyvà check không có secret trong source directory. - Use chezmoi scripting: Ghi mọi bước install manual vào
run_onchange_after_*.sh— sau này chỉ cần 1 lệnh.
Traps thường gặp và cách tránh
- Symlink vs file: Chezmoi mặc định đồng bộ file thực (copy), không phải symlink — đúng cho hầu hết trường hợp. Nếu thực sự cần symlink (ví dụ file do app quản lý), dùng attribute
symlinktrong config. - Template lỗi khi directory chưa tồn tại: File template nằm trong directory chưa có → áp dụng lỗi. Giải pháp: dùng
run_once_mkdir.shtạo directory trước. - Commit nhầm secret: Nếu lỡ commit file chưa mã hóa, xóa ngay khỏi lịch sử Git (filter-repo), thêm
.chezmoiignore, và rotate secret ngay lập tức — never trust một secret đã public. - Template syntax sai: Go template lỗi như thiếu
{{- end }}→ chezmoi báo lỗi lúc apply, không phải lúc add — kiểm tra bằngchezmoi template --source dot_bashrc.tmpltrước. - Conflicting merge: File vừa thay đổi local vừa thay đổi remote — chezmoi báo conflict, không tự merge mù. Giải quyết thủ công theo hướng dẫn.
Kết luận
Chezmoi là dotfiles manager tốt nhất hiện tại: native encryption, templating theo hostname, multi-machine sync, lifecycle scripts, và binary Go single-file không dependency. Dành cho developer có hơn 10 config files hoặc làm việc trên nhiều máy. Bắt đầu với chezmoi init && chezmoi add ~/.bashrc — 2 phút setup, tiết kiệm hàng giờ setup máy mới mỗi lần. Cộng đồng sử dụng rộng rãi, tài liệu đầy đủ tại chezmoi.io và repo GitHub hơn 13k stars.
Nguồn: Chezmoi Docs, GitHub Chezmoi, age encryption, HOWTO Guide
