0

Biến Terminal & Neovim thành "vũ khí" lập trình đa nền tảng chỉ với 1 dòng lệnh bằng Rust CLI & Dotfiles

Mỗi lần đổi máy hoặc cài lại hệ điều hành, lập trình viên lại phải cài công cụ và cấu hình lại Terminal, Shell, Neovim, WezTerm, Font và Dotfiles từ đầu.

Làm việc cross-platform càng phức tạp khi Windows, Linux và macOS có cách quản lý package, đường dẫn và cấu hình khác nhau.

Trong bài viết này, mình sẽ giới thiệu Dotfiles & CLI Manager dot được viết bằng Rust, giúp tự động hóa việc setup và đồng bộ môi trường lập trình trên nhiều nền tảng.


🚀 Một lệnh để setup môi trường

Dù bạn sử dụng Windows, Ubuntu, Arch Linux, WSL hay macOS, quá trình cài đặt chỉ mất vài phút.

🪟 Windows — PowerShell

& ([scriptblock]::Create((irm https://raw.githubusercontent.com/kachitaro/dotfiles/main/install.ps1))) -Full

🐧 Linux / WSL / macOS

curl -fsSL https://raw.githubusercontent.com/kachitaro/dotfiles/main/install.sh | bash -s -- --full

Script sẽ tự động:

  • Nhận diện hệ điều hành.
  • Cài package manager phù hợp: Scoop / Homebrew / Apt / Pacman.
  • Tải binary dot được build sẵn từ GitHub Releases.
  • Cài đặt các CLI tools cần thiết.
  • Thiết lập Dotfiles.
  • Tạo và quản lý Symlink.

Mục tiêu là biến quá trình setup một máy mới từ hàng chục bước thủ công thành một lệnh duy nhất.


🏗️ Kiến trúc

Hệ thống sử dụng Dotfiles làm nguồn cấu hình trung tâm, kết hợp với Rust CLI để quản lý việc đồng bộ và triển khai configuration.

                         ┌─────────────────────┐
                         │  Dotfiles Repository│
                         │                     │
                         │ themes/theme.json   │
                         │ config/             │
                         │ scripts/            │
                         └──────────┬──────────┘
                                    │
                                    ▼
                            ┌───────────────┐
                            │   Rust CLI    │
                            │     `dot`     │
                            └───────┬───────┘
                                    │
              ┌─────────────────────┼─────────────────────┐
              ▼                     ▼                     ▼
        ┌──────────┐          ┌──────────┐          ┌──────────┐
        │ Windows  │          │  Linux   │          │  macOS   │
        │ PowerShell│         │ Bash/Zsh │          │  Zsh     │
        └──────────┘          └──────────┘          └──────────┘

🌟 Những điểm nổi bật

🦀 1. Rust CLI — dot

Thay vì phụ thuộc vào nhiều shell script khác nhau, dot được xây dựng bằng Rust để xử lý các tác vụ quản lý Dotfiles một cách nhanh chóng và nhất quán.

Các lệnh cơ bản:

dot --help
# Thêm configuration vào Dotfiles
dot add ~/.config/alacritty

# Đồng bộ configuration và tạo symlink
dot inject

# Gỡ symlink
dot eject

# Cập nhật CLI lên phiên bản mới nhất
dot update

Tại sao sử dụng Rust?

  • ⚡ Binary native, khởi động nhanh.
  • 📦 Không cần runtime như Node.js hoặc Python.
  • 🖥️ Hỗ trợ tốt cho Windows, Linux và macOS.
  • 🔗 Phù hợp với các tác vụ filesystem và symlink.
  • 📦 Có thể phát hành binary độc lập thông qua GitHub Releases.

🎨 2. Theme Engine — Đồng bộ màu sắc

Một vấn đề thường gặp khi sử dụng nhiều công cụ terminal là theme không đồng nhất.

Ví dụ:

  • Neovim sử dụng một palette.
  • WezTerm sử dụng palette khác.
  • PowerShell lại có màu khác.
  • Starship không cùng tone.
  • Shell history hiển thị màu không nhất quán.

Thay vì chỉnh màu HEX trong nhiều file, hệ thống sử dụng một file duy nhất:

themes/theme.json

Ví dụ:

{
  "name": "Catppuccin Mocha",
  "colors": {
    "background": "#1E1E2E",
    "foreground": "#CDD6F4",
    "blue": "#89B4FA",
    "green": "#A6E3A1",
    "red": "#F38BA8"
  }
}

Sau khi thay đổi theme, chỉ cần chạy:

dot theme reload

Theme Engine sẽ tạo configuration tương ứng:

theme.lua   → WezTerm / Neovim
theme.ps1   → PowerShell
theme.sh    → Bash / Zsh
theme.toml  → Atuin

Mô hình hoạt động:

                    ┌─────────────────────┐
                    │  themes/theme.json  │
                    │ Single Source Truth │
                    └──────────┬──────────┘
                               │
                      dot theme reload
                               │
              ┌────────────────┼────────────────┐
              ▼                ▼                ▼
        ┌──────────┐      ┌──────────┐      ┌──────────┐
        │  WezTerm │      │  Neovim  │      │  Shell   │
        │   Lua    │      │  NvChad  │      │ PS / Zsh │
        └──────────┘      └──────────┘      └──────────┘

Kết quả là toàn bộ môi trường terminal sử dụng cùng một color palette.


🧰 CLI Tools

Bộ Dotfiles tích hợp sẵn nhiều công cụ CLI hiện đại để cải thiện workflow lập trình.

Công cụ Phím tắt / Lệnh Tính năng
WezTerm Ctrl + Shift + ... GPU Terminal, tab và pane
Atuin Ctrl + R Tìm kiếm command history
Fzf / PSFzf Ctrl + F Fuzzy Finder
Carapace Tab Autocompletion đa shell
Zoxide z <folder> Di chuyển thư mục nhanh
Eza ls, ll Thay thế ls
Bat cat Syntax highlighting
Neovim nvim Editor với LSP, TreeSitter và NvChad

🖥️ Cross-platform

Một trong những mục tiêu chính của hệ thống là duy trì workflow tương đồng trên nhiều hệ điều hành.

Thành phần Windows Linux macOS
PowerShell
Bash / Zsh WSL
WezTerm
Neovim
Rust CLI
Dotfiles
Theme Engine

Điều này giúp bạn có thể chuyển từ:

Windows → WSL → Linux → macOS

mà không cần xây dựng lại workflow từ đầu.


⚙️ Sử dụng

Khởi tạo Dotfiles

Tạo một repository Dotfiles mới:

dot init ~/my-dotfiles

Thêm configuration

Ví dụ:

dot add ~/.config/alacritty

Inject configuration

Đồng bộ Dotfiles vào hệ thống:

dot inject

Eject configuration

Gỡ symlink:

dot eject

Cập nhật CLI

Kiểm tra và cập nhật phiên bản mới:

dot update

Reload theme

Sau khi thay đổi theme:

dot theme reload

📁 Cấu trúc Dotfiles

Một cấu trúc điển hình:

dotfiles/
├── config/
│   ├── nvim/
│   ├── wezterm/
│   ├── starship/
│   └── atuin/
│
├── themes/
│   └── theme.json
│
├── scripts/
│   ├── install.sh
│   └── install.ps1
│
└── README.md

Cấu trúc này giúp configuration, theme và script được quản lý tập trung trong cùng một repository.


🔄 Workflow

Quy trình sử dụng có thể đơn giản hóa thành:

┌──────────────┐
│   Git Repo   │
│   Dotfiles   │
└──────┬───────┘
       │
       ▼
┌──────────────┐
│  dot inject  │
└──────┬───────┘
       │
       ▼
┌──────────────────────────────────┐
│        Development Environment   │
│                                  │
│  Terminal                        │
│  Shell                           │
│  Neovim                          │
│  WezTerm                         │
│  Starship                        │
│  Atuin                           │
└──────────────────────────────────┘

Khi chuyển sang một máy mới:

1. Cài hệ điều hành
        ↓
2. Chạy install script
        ↓
3. dot inject
        ↓
4. dot theme reload
        ↓
5. Bắt đầu lập trình

🛠️ Tùy biến

Bạn có thể fork repository và thay đổi configuration theo workflow của riêng mình.

Một số thứ có thể tùy biến:

  • Shell configuration.
  • Neovim configuration.
  • WezTerm configuration.
  • Starship prompt.
  • Theme.
  • CLI tools.
  • Keybindings.
  • Font.
  • Package manager.
  • Install scripts.

Repository:

https://github.com/kachitaro/k-dot


💡 Tại sao nên dùng Dotfiles?

Dotfiles không chỉ đơn giản là lưu lại configuration.

Nó giúp bạn:

  • ♻️ Tái tạo môi trường nhanh chóng.
  • 🔄 Đồng bộ configuration giữa nhiều máy.
  • 🖥️ Duy trì workflow cross-platform.
  • 🎨 Đồng bộ theme.
  • 📦 Quản lý tool tập trung.
  • 🚀 Giảm đáng kể thời gian setup máy mới.
  • 📝 Lưu lại toàn bộ thay đổi bằng Git.

Thay vì:

Máy mới
   ↓
Cài từng tool
   ↓
Copy config
   ↓
Sửa đường dẫn
   ↓
Fix lỗi
   ↓
Chỉnh theme
   ↓
Fix font
   ↓
...

Bạn có thể:

Máy mới
   ↓
install
   ↓
dot inject
   ↓
Ready 🚀

💬 Lời kết

Rust CLI + Dotfiles giúp biến việc setup môi trường lập trình từ một quy trình thủ công, mất nhiều thời gian thành một workflow tự động và nhất quán.

Với Windows, Linux và macOS, bạn có thể giữ lại cùng một workflow, cùng configuration và cùng theme mà không phải thiết lập lại mọi thứ từ đầu.

Nếu dự án hữu ích với bạn, hãy ⭐ Star repository và đóng góp ý tưởng hoặc Pull Request.

Một lần setup tốt, dùng lại trên mọi máy. 🚀

GitHub: https://github.com/kachitaro/k-dot


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí