NixOS cho Dev: Cách tạo môi trường Linux Reproducible với Flakes

Màn hình desktop NixOS 21.11 với GNOME, terminal mở và Files app
Màn hình desktop NixOS với cấu hình nix flake

NixOS cho Dev: Cách tạo môi trường Linux Reproducible với Flakes

NixOS là bản phân phối Linux dựa trên Nix package manager – công cụ cho phép tạo môi trường phát triển reproducible, đảm bảo cùng code chạy giống nhau trên mọi máy. Bài viết hướng dẫn cách áp dụng Nix flakes cho workflow dev thực tế.

Tại sao NixOS phù hợp cho developer

Nix giải quyết vấn đề “works on my machine” bằng cách quản lý toàn bộ môi trường qua file declarative. Mỗi dependency được định nghĩa từ Nixpkgs, đảm bảo version nhất quán.

Khác với Docker chỉ isolate runtime, Nix isolate toàn bộ build process. Bạn có thể rebuild project 2 năm sau và được chính xác binary giống hệt hôm nay – mọi dependency từ glibc đến openssl đều pinned bằng hash SHA256.

Khái niệm “reproducibility” ở đây không chỉ là “build thành công” mà là “build ra output bit-for-bit identical”. Nix đạt reproducibility bằng cách loại bỏ mọi implicit state: thời gian biên dịch, thứ tự file system, timestamp từ package manager.

NixOS GNOME main menu hiển thị applications và search
Sơ đồ so sánh Nix vs Docker vs Conda

Cấu trúc Nix Flakes

Nix Flakes là cơ chế mới, đơn giản hóa cách tổ chức project:

# flake.nix
{
  description = "Dev environment for MyProject";

  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
    flake-utils.url = "github:numtide/flake-utils";
  };

  outputs = { self, nixpkgs, flake-utils }:
    flake-utils.lib.eachDefaultSystem (system:
      let
        pkgs = import nixpkgs { inherit system; };
      in {
        devShells.default = pkgs.mkShell {
          buildInputs = with pkgs; [
            nodejs_20
            python3
            postgresql_16
            rustc
            cargo
          ];
        };
      }
    );
}

Chạy nix develop trong thư mục project sẽ drop bạn vào shell có sẵn tất cả dependency. File flake.lock ghi lại chính xác revision của nixpkgs và mọi input khác.

Garbage collection

Nix không xóa package cũ khi upgrade. Mỗi phiên bản giữ trong store (/nix/store). Khi bạn không cần, GC tự động dọn dựa trên reachable path từ các gcroot. Điều này giúp rollback nhanh bằng cách đổi symlink.

Công cụ hữu ích cho dev

  • direnv: Tự động kích hoạt môi trường khi vào thư mục project (direnv allow)
  • devenv: Template preset cho phổ biến ngôn ngữ/framework (Python, Go, Node, Rust…)
  • devenv LSP: Hỗ trợ IDE integration (VS Code, Neovim) với auto-complete cho Nix
  • nix-direnv: Cache environment giữa các lần reload, nhanh hơn direnv thuần

Home Manager cho dotfiles

Ngoài project-level flakes, NixOS có Home Manager – module quản lý dotfiles và user packages qua file Nix. Bạn có thể declare:

home.packages = with pkgs; [
  neovim
  tmux
  lazygit
  bat
  fd
];
programs.git = {
  enable = true;
  userName = "hung";
  userEmail = "[email protected]";
};

Chạy home-manager switch để sync mọi config lên máy mới chỉ trong vài phút. Không cần manual copy .bashrc, .config/nvim, v.v.

Lưu ý khi triển khai

NixOS có learning curve, nhưng đầu tư ban đầu được đền đáp bằng cú pháp gần như duy nhất tái tạo môi trường. Cho team nhỏ hoặc solo dev, có thể dùng nix develop mà không cần cài đặt toàn bộ NixOS.

Mẹo nhỏ: dùng nix --offline khi offline để vẫn dùng cached store, không gọi remote. Tắt automatic garbage collection nếu muốn giữ nhiều generation.

Đối với team lớn, cân nhắc Atuin (shell history sync) kết hợp Nix để đồng bộ cả editor config và shell history.

NixOS vs Docker vs Traditional distro

NixOS khác với Docker ở mức độ isolate: Docker chỉ containerize runtime, còn NixOS isolate toàn bộ OS. Mỗi reboot, hệ thống được rebuild từ store.

Khác với Ubuntu/Debian: NixOS không có /etc được sửa tay, mọi config đều trong /etc/nixos/configuration.nix. Khi bạn cài nginx qua nixos-rebuild switch, file config tự động được tạo từ attribute set. Khi remove nginx, file được xóa sạch không để lại rác.

Hiệu suất: Docker và NixOS có performance tương đương vì không dùng VM. NixOS có thể nhanh hơn vì không có Docker daemon overhead.

Triển khai NixOS trong CI/CD

Bạn không cần chuyển cả server sang NixOS để tận dụng Nix. Chỉ cần cài nix trên Ubuntu/Debian, thêm nix-shell vào GitHub Actions workflow:

steps:
  - uses: actions/checkout@v4
  - uses: cachix/install-nix-action@v30
  - run: nix develop --command cargo test

Dịch vụ Cachix cache binary giữa các lần build, rút ngắn thời gian CI từ phút xuống giây. Binary được sign chống giả mạo.

Khi nào NixOS không phù hợp

NixOS không phù hợp nếu bạn cần proprietary software phổ biến (Adobe suite, some CAD tools) vì build từ source khó khăn. Linux gaming còn hạn chế so với SteamOS. Cũng cần quen với việc đọc manual NixOS để custom deeply – dấu phẩy, override, attribute set có syntax riêng.

FAQ thường gặp

NixOS có chạy được .NET và Unity không? Có, qua NixOS biology tools hoặc nix-shell. Unity hỗ trợ qua flatpak hoặc Linux desktop edition. Windows game qua Wine hoặc Proton-GE.

Rollback thế nào? NixOS bootloader hiển thị danh sách generation. Chọn generation cũ, reboot. Mọi thứ restore trạng thái trước đó. Hoặc dùng nix-env --rollback trên user-level.

Làm sao học Nix syntax nhanh? Dùng nix repl để interactive thử attribute set. Đọc nix.dev – có thể học trong 1 tuần nếu đã biết functional programming cơ bản.


Nguồn: Nix Flakes Manual, Zero to Nix 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

WireGuard VPN: Thiết lập mạng riêng ảo an toàn trên Ubuntu VPS

Bạn muốn tạo mạng riêng ảo (VPN) nhanh, đơn giản và hiệu năng cao mà không cần cấu hình phức tạp như OpenVPN? WireGuard là protocol VPN hiện đại với…

Xem thêm
Giao diện FancyZones với các vùng chia màn hình được tùy chỉnh trong Windows

PowerToys trên Windows: 6 công cụ tối ưu hóa workflow developer 2025

PowerToys là gì? PowerToys là bộ công cụ mã nguồn mở do Microsoft phát triển, cung cấp hàng loạt tính năng nâng cao giúp tối ưu hóa workflow trên Windows….

Xem thêm

8 tính năng ẩn trên iPhone: Back Tap, Khóa ứng dụng, SOS khẩn cấp không cần app

iOS 18 mang đến hàng loạt tính năng mới: Apple Intelligence, màn hình khóa tùy biến, RCS, Game Mode. Nhưng bên cạnh những thay đổi lớn, nhiều “mẹo ẩn” (hidden…

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