Quản Lý Dotfiles Với Chezmoi: Đồng Bộ Từ Nhiều Máy

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.

Màn hình terminal đang chạy lệnh chezmoi status hiển thị danh sách dotfiles đã quản lý với trạng thá
Màn hình terminal đang chạy lệnh chezmoi status hiển thị danh sách dotfiles đã quản lý với trạng thái khác biệt

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/chezmoi source directory + default config
  • chezmoi add ~/.bashrc — thêm file cụ thể vào managed list
  • chezmoi add ~/.gitconfig ~/.tmux.conf — thêm nhiều file cùng lúc
  • chezmoi status — xem diff giữa source và target system
  • chezmoi diff — xem chi tiết nội dung thay đổi trước khi áp dụng
  • chezmoi apply — đồng bộ file từ source vào thư mục home
  • chezmoi cd && git init && git add . && git commit -m "init" — version control toàn bộ
Flow diagram: chezmoi init → add → apply → push Git remote → chezmoi init trên máy mới → apply lại,
Flow diagram: chezmoi init → add → apply → push Git remote → chezmoi init trên máy mới → apply lại, mô tả đồng bộ dotfiles giữa nhiều máy

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 .age trong 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/apt
  • run_onchange_after_* — script chạy sau sync: restart service, reload shell
  • run_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.conf trước, mở rộng dần khi đã quen workflow.
  • Secrets tách riêng: Không bao giờ chezmoi add ~/.env trực tiếp — luôn dùng --encrypt hoặ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 verify và 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 symlink trong 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.sh tạ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ằng chezmoi template --source dot_bashrc.tmpl trướ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

Tôi là một lập trình viên IOS. Code chính là IOS nhưng thỉnnh thoảng vẫn đá sang Android hoặc web. Mặc dù không quá thông thạo nhưng tôi sẽ chia sẻ những kiến thức mà mình đã tìm hiểu, áp dụng qua.

Bài viết liên quan

Tailscale VPN Mesh: Kết Nối Mạng An Toàn Từ Mọi Nơi

Tailscale là giải pháp VPN mesh dựa trên WireGuard cho phép kết nối tất cả thiết bị của bạn thành một mạng an toàn duy nhất. Với Tailscale, bạn không…

Xem thêm

Tmux: Quản Lý Nhiều Terminal Phiên Đồng Thời

Tmux: Quản Lý Nhiều Terminal Phiên Đồng Thời Developer làm việc trên nhiều tmux session tăng năng suất Tmux là terminal multiplexer cho phép bạn chạy nhiều phiên terminal trong…

Xem thêm

OBS Studio: Phần mềm quay màn hình miễn phí cho mọi nền tảng

OBS Studio: Phần mềm quay màn hình miễn phí cho mọi nền tảng OBS Studio (Open Broadcaster Software) là phần mềm mã nguồn mở miễn phí dùng để quay màn…

Xem thêm
0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất