skip to content
Thai Le

Dotfiles — setup máy mới trong 15 phút thay vì cả ngày

Backup cấu hình terminal, editor, tool vào dotfiles repo — clone một lệnh là máy mới giống hệt máy cũ. Setup một lần, dùng ở bất cứ đâu.

Ngày đăng
Độ dài
6 phút đọc
Dotfiles — minh hoạ quá trình clone config từ repo vào máy mới, terminal và editor tự động giống hệt máy cũ
Table of Contents

Hi friend! 👋

Lần đầu mua Mac mới, mình mừng rỡ mở hộp, setup Apple ID, đợi migration assistant chạy… rồi nhận ra: không có cách nào chuyển cấu hình terminal cả.

Mất cả buổi tối để nhớ lại: alias đó mình đặt tên gì, theme terminal nào, plugin nào đang dùng, font nào cài. Từng cái một. Như đánh mất trí nhớ digital vậy.

Lần thứ hai — mình đã có dotfiles repo. Clone, chạy script, 15 phút sau terminal, editor, tool giống hệt máy cũ. Không phải nhớ gì cả.

📖 Nói nhanh cho bạn chưa quen:

“Dotfiles” là mấy file cấu hình bắt đầu bằng dấu chấm trong thư mục home của bạn — .zshrc, .gitconfig, .vimrc, .config/… Chúng giống như DNA digital của máy: quy định terminal trông thế nào, alias nào có sẵn, editor highlight màu gì, Git dùng email nào.

Vấn đề là: mấy file này thường nằm rải rác, không backup, không sync. Máy hỏng = mất hết. Máy mới = setup lại từ đầu.

🔄 Hành trình của mình:

  • Lần 1: Setup thủ công mỗi lần đổi máy → mất cả ngày, hay quên thứ, không bao giờ giống hệt máy cũ
  • Lần 2: Copy paste file config qua USB/Drive → nhanh hơn nhưng vẫn phải symlink thủ công, thỉnh thoảng overwrite nhầm
  • Lần 3: Đẩy hết lên GitHub repo + install script → clone một lệnh, 15 phút xong. Máy nào cũng giống nhau. Giờ setup máy mới vui như mở quà.

🎯 Bài này hữu ích nếu bạn:

Bạn là…Áp dụng để…
DevKhông mất config khi đổi máy, sync giữa máy work và personal
FreelancerSetup nhanh máy client, không leak config cá nhân
Người mớiBắt đầu đúng — backup config từ ngày đầu dùng máy
Team leadShare config chuẩn cho cả team, onboarding nhanh hơn

💡 Đừng cố làm hết ngay. Đẩy 1 file .gitconfig lên repo, clone lại test xem chạy không. Ngon rồi mới thêm .zshrc, SSH config. Từng bước một.


🔧 Bắt đầu setup

Bước 1: Tìm dotfiles của bạn

Mấy file này nằm trong thư mục home (~), ẩn nên không hiện mặc định. Hiện chúng lên:

Terminal window
# Hiện file ẩn trong terminal
ls -la ~
# Hoặc dùng Finder: Cmd + Shift + . (chấm)

Các file quan trọng nhất để bắt đầu:

FileLàm gì
.gitconfigCấu hình Git — name, email, alias, includeIf
.zshrc hoặc .bashrcCấu hình shell — alias, prompt, PATH, plugin
.ssh/configSSH config — alias, key paths (xem bài trước)
.vimrc hoặc .config/nvim/Cấu hình editor Vim/Neovim
.config/Thư mục config của nhiều tool hiện đại

Bước 2: Tạo repo dotfiles

Terminal window
# Tạo thư mục dotfiles
mkdir ~/dotfiles
cd ~/dotfiles
# Init git repo
git init
# Tạo file install script (sẽ viết ở bước sau)
touch install.sh
chmod +x install.sh

Tạo repo trên GitHub (private nếu có config nhạy cảm), rồi push:

Terminal window
git remote add origin git@github.com:your-username/dotfiles.git
git add .
git commit -m "feat: init dotfiles repo"
git push -u origin main

Bước 3: Di chuyển file config vào repo

Đừng copy — dùng symlink (liên kết mềm). Symlink giống như shortcut: file thật nằm trong repo, nhưng hệ thống vẫn thấy ở vị trí cũ. Sửa file trong repo = sửa file ở vị trí cũ.

Terminal window
# Di chuyển file thật vào dotfiles
mv ~/.gitconfig ~/dotfiles/gitconfig
mv ~/.zshrc ~/dotfiles/zshrc
# Tạo symlink trỏ ngược lại
ln -s ~/dotfiles/gitconfig ~/.gitconfig
ln -s ~/dotfiles/zshrc ~/.zshrc

📖 Symlink là gì? Tưởng tượng bạn có một cuốn sổ tay. Thay vì photocopy ra 3 bản để ở 3 nơi (sửa một nơi, 2 nơi kia cũ), bạn tạo 3 cái “biển chỉ đường” trỏ về cuốn sổ gốc. Sửa sổ gốc = cả 3 nơi đều thấy bản mới. Đó là symlink.

Kiểm tra symlink hoạt động:

Terminal window
# Phải hiện đường dẫn trỏ đến file trong dotfiles
ls -la ~/.gitconfig
# Kết quả: ~/.gitconfig -> ~/dotfiles/gitconfig

Bước 4: Viết install script

Script này tự động hoá việc symlink — để máy mới chỉ cần chạy 1 lệnh.

~/dotfiles/install.sh
#!/bin/bash
# Script tự động symlink dotfiles vào thư mục home
DOTFILES_DIR="$HOME/dotfiles"
echo "🔧 Installing dotfiles..."
# Hàm tạo symlink
link_file() {
local src="$DOTFILES_DIR/$1"
local dest="$HOME/$2"
if [ -L "$dest" ]; then
# Đã là symlink → cập nhật
echo " ✅ Updating: $2"
ln -sf "$src" "$dest"
elif [ -e "$dest" ]; then
# File tồn tại (không phải symlink) → backup rồi link
echo " 📦 Backing up: $2"
mv "$dest" "$dest.backup"
ln -s "$src" "$dest"
else
# Chưa có gì → tạo symlink mới
echo " 🔗 Creating: $2"
ln -s "$src" "$dest"
fi
}
# Link từng file
link_file "gitconfig" ".gitconfig"
link_file "zshrc" ".zshrc"
link_file "ssh/config" ".ssh/config"
echo "✅ Dotfiles installed!"
echo "💡 Run 'source ~/.zshrc' to reload shell config"

📖 Script làm gì?

  • Kiểm tra mỗi file: chưa có → tạo symlink; đã có → backup rồi tạo symlink; đã là symlink → cập nhật
  • Không overwrite file cũ — luôn backup trước

Bước 5: Test trên máy thật

Terminal window
# Chạy install script
~/dotfiles/install.sh
# Kiểm tra
cat ~/.gitconfig # Phải hiện nội dung từ ~/dotfiles/gitconfig
git config user.name # Phải hiện name của bạn

Bước 6: Setup máy mới — phần thưởng

Giờ tưởng tượng bạn mở máy mới. Chỉ cần:

Terminal window
# 1. Clone dotfiles repo
git clone git@github.com:your-username/dotfiles.git ~/dotfiles
# 2. Chạy install script
~/dotfiles/install.sh
# 3. Reload shell
source ~/.zshrc
# Xong! Terminal, Git, SSH giống hệt máy cũ

15 phút thay vì cả ngày. Và quan trọng hơn: không phải nhớ gì cả.

Bonus: Cấu trúc repo gợi ý

Khi dotfiles lớn lên, organise cho dễ quản lý:

dotfiles/
├── gitconfig # Git config
├── zshrc # Shell config
├── ssh/
│ └── config # SSH config
├── config/
│ ├── nvim/ # Neovim config
│ └── karabiner/ # Keyboard remap (macOS)
├── install.sh # Install script
├── README.md # Hướng dẫn setup
└── .gitignore # Ignore file nhạy cảm
# .gitignore — KHÔNG đẩy file nhạy cảm lên repo
*.pem
*.key
.env
.ssh/id_*
.ssh/*.pub

Iteration tiếp theo — khi bạn sẵn sàng

Dotfiles không dừng ở symlink. Khi quen rồi, bạn có thể thêm:

  • Homebrew Bundle — backup danh sách app đã cài, máy mới brew bundle install là xong
  • VS Code Settings Sync — hoặc push settings.json vào dotfiles
  • Machine-specific config — dùng if trong script để load config khác nhau cho máy work vs personal
  • CI test — test install script trên GitHub Actions trước khi chạy thật

Nhưng đừng làm hết ngay. Bắt đầu từ 1-2 file, test, thấy ngon thì thêm. Iteration mà!


Checklist áp dụng ngay:

  • Tạo repo dotfiles trên GitHub (5 phút)
  • Di chuyển .gitconfig vào repo, tạo symlink
  • Viết install script cơ bản (copy template trên)
  • Test: xoá symlink, chạy lại script, kiểm tra hoạt động
  • Khi sẵn sàng: thêm .zshrc, SSH config, editor config

💡 Đúc kết:

Setup máy mới không nên là cực hình. Backup config từ ngày đầu — tương lai bạn sẽ cảm ơn hiện tại.


Hi friend! Bạn có dotfiles repo chưa? Hay vẫn setup thủ công mỗi lần đổi máy? Chia sẻ kinh nghiệm với mình nhé — biết đâu tip của bạn lại giúp người khác tiết kiệm cả ngày setup thì sao.

Hẹn gặp lại ở bài sau! 👋