3 điểm bởi GN⁺ 2024-03-14 | 1 bình luận | Chia sẻ qua WhatsApp
  • Flox là một nền tảng môi trường phần mềm dành cho các đội ngũ kỹ thuật, quản lý các môi trường có thể tái tạo giống nhau từ laptop của lập trình viên đến CI và production bằng một manifest duy nhất
  • Nền tảng dựa trên Nix, nhưng kiến thức về Nix là tùy chọn; kiến trúc này giảm drift môi trường bằng manifest khai báo và đầu vào hash nội dung được cố định bằng mật mã
  • Hoạt động trên macOS, Linux và Windows WSL2; có thể tìm kiếm/cài đặt hơn 120.000 gói từ Nixpkgs, đồng thời build và publish phần mềm riêng dưới dạng các gói có thể tái tạo
  • Tạo môi trường cô lập theo từng dự án qua luồng flox init, flox install, flox activate; khi kích hoạt thì công cụ xuất hiện, khi thoát thì biến mất, giúp giữ hệ thống sạch sẽ
  • Tập trung vào quản lý vòng đời môi trường ở cấp tổ chức, bao gồm chia sẻ qua FloxHub, tạo OCI image, chạy dịch vụ, SBOM, vá CVE, SCA và môi trường thực thi xác định cho AI coding agent

Vấn đề Flox muốn giải quyết

  • Flox là nền tảng định nghĩa môi trường phát triển trong một tệp và cho phép chạy cùng môi trường đó trên laptop của lập trình viên, CI và production
  • Nếu các trình quản lý gói truyền thống tập trung vào việc cài đặt gói trên một máy đơn lẻ, Flox quản lý vòng đời gói và môi trường trên toàn tổ chức
  • Có ba thuộc tính cốt lõi
    • Khai báo: mô tả các công cụ, biến môi trường và dịch vụ cần cho dự án trong một tệp
    • Có thể tái tạo: cùng một định nghĩa tạo ra cùng một môi trường ở bất kỳ hệ thống được hỗ trợ nào
    • Có thể kết hợp: có thể phân lớp môi trường theo dự án, đội ngũ và pipeline

Người dùng mục tiêu và môi trường sử dụng

  • Đội Platform/DevX có thể chuẩn hóa toolchain trên toàn tổ chức và mở rộng môi trường chuẩn mà không buộc mọi người phải học Nix
  • Đội Security/AppSec có thể xử lý SBOM, phản ứng nhanh với CVE, nguồn gốc dependency và build có thể tái tạo
  • Lập trình viên có thể dùng môi trường có thể tái tạo theo từng dự án trên macOS, Linux và Windows WSL2; cách hoạt động gần với môi trường ảo hơn là container hay VM
  • AI coding agent có được môi trường xác định để build và chạy mã sinh ra theo cùng một cách mỗi lần
    • Ví dụ đối tượng là Claude Code, Cursor, Copilot và Codex

Khả năng tái tạo và bảo mật chuỗi cung ứng

  • Môi trường Flox được định nghĩa bằng manifest khai báo và được khóa vào đầu vào hash nội dung cố định bằng mật mã
  • Cùng một lockfile được diễn giải thành cùng các gói trên từng hệ thống được hỗ trợ, nên môi trường giữa các máy được duy trì giống nhau
  • Có thể dùng một định nghĩa môi trường duy nhất trên laptop của lập trình viên, sandbox của AI agent, CI và production
  • Có thể sử dụng hơn 120.000 gói từ Nixpkgs
  • Có thể build phần mềm riêng từ source thành các gói có thể tái tạo và publish để cả đội sử dụng
  • Dựa trên khả năng tái tạo, Flox giúp dễ xử lý việc tạo SBOM, phân tích thành phần phần mềm (SCA), tự động vá lỗ hổng/CVE, xác minh nguồn gốc dependency và các bản build có thể audit

Cài đặt và workflow cơ bản

  • Flox CLI được cài đặt theo cách native trên macOS, Linux và Windows WSL2
    • macOS: brew install flox hoặc tệp cài đặt .pkg
    • Linux: .deb cho Debian/Ubuntu, .rpm cho Fedora/RHEL
    • Windows: dùng gói Linux trong WSL2
  • Luồng sử dụng cơ bản là tạo môi trường trong dự án, cài các gói cần thiết rồi kích hoạt môi trường
    • flox init: tạo môi trường trong dự án
    • flox install python3 nodejs: cài gói vào môi trường
    • flox activate: vào môi trường
  • Ví dụ trong README cho thấy bên trong môi trường đã kích hoạt, python3 --version chạy ra Python 3.13.13, còn node --version chạy ra v24.15.0
  • Khi thoát khỏi môi trường, các công cụ đã cài sẽ biến mất, giúp tránh xung đột giữa các dự án và giữ hệ thống sạch sẽ

Tính năng chính

  • Create: có thể tạo môi trường khai báo cạnh mã nguồn bằng flox init và tự động kích hoạt
  • Search: có thể tìm hơn 120.000 gói của Nixpkgs bằng flox search
  • Share: với flox push / flox pull, các thành viên trong đội có thể lấy cùng một môi trường chuẩn duy nhất trên FloxHub
  • Containerize: với flox containerize, có thể biến môi trường Flox thành OCI image mà không cần Dockerfile
  • Build & publish: với flox build / flox publish, có thể build phần mềm riêng thành gói có thể tái tạo và publish cho đội
  • Services: với flox services start, có thể chạy database, queue và tiến trình nền như một phần của môi trường; chúng khởi động khi kích hoạt và dừng khi thoát
  • Configure: định nghĩa biến môi trường, shell hook và script kích hoạt theo cách khai báo trong manifest.toml
  • AI-ready: thông qua flox-agentic, hỗ trợ AI coding agent build/chạy với cùng dependency trong mỗi lần thực thi

Vị trí với người dùng Docker và Nix

  • Flox không phải là công nghệ container và không phải là phương án thay thế Docker
  • Trong Docker, packaging và cô lập container thường bị trộn lẫn, còn Flox cho rằng cần tách đóng gói phần mềm khỏi phương thức cô lập được chọn
  • Môi trường Flox hoạt động theo cùng một cách trên bare metal, VM và container
  • flox containerize tạo OCI image có chứa môi trường phần mềm, có thể dùng cùng Docker, Kubernetes và các container runtime khác
  • Với người dùng Nix, Flox là công cụ bổ sung chứ không phải công cụ thay thế
    • Cung cấp dịch vụ trung tâm FloxHub để chia sẻ gói và môi trường cộng tác
    • Gộp activation hook, dịch vụ và shell profile vào một tệp TOML khai báo duy nhất

Nguồn gốc và tài nguyên hỗ trợ

  • Flox bắt đầu từ triển khai Nix doanh nghiệp quy mô lớn của D.E. Shaw group và đã được dùng để giúp Nix trở nên dễ tiếp cận trong các tổ chức kỹ thuật quy mô lớn
  • Tài nguyên liên quan
    • Documentation: tutorial, tài liệu tham chiếu, hướng dẫn
    • FloxHub: khám phá và chia sẻ môi trường
    • Discourse: câu hỏi, thảo luận, thông báo
    • Blog: bài viết chuyên sâu và workflow
    • VS Code extension: quản lý môi trường Flox trong editor
  • Các vấn đề liên quan đến bảo mật được tiếp nhận qua security@flox.dev
  • Giấy phép của Flox CLI là GPLv2

1 bình luận

 
GN⁺ 2024-03-14
Ý kiến trên Hacker News
  • Ron, chúc mừng ra mắt. Điều tôi tò mò là mô hình doanh thu sẽ như thế nào
    Có CEO, công ty và nhân viên, mà nhìn trên Crunchbase thì có vẻ đã nhận 24 triệu USD vốn đầu tư, nhưng không tìm thấy thông tin giá cả trên landing page hay trong tài liệu
    Kể cả khi đăng nhập FloxHub bằng hồ sơ GitHub cũng không thấy tùy chọn thanh toán, nên tôi tò mò về kế hoạch này

    • Cảm ơn bạn đã chỉ ra. Hình thức miễn phí và mã nguồn mở mà chúng tôi công bố hôm nay là một lý do lớn khiến Flox được bắt đầu, và trong tương lai chúng tôi sẽ bổ sung thêm nhiều thứ nữa
      Ứng dụng khách mã nguồn mở và dịch vụ FloxHub để chia sẻ môi trường được công bố hôm nay sẽ miễn phí vĩnh viễn
      Sau này, chúng tôi muốn cung cấp một danh mục phần mềm riêng tư mạnh mẽ hơn, chạy bên trên Flox Catalog cơ bản
      Nếu bạn cần phân phối các build nội bộ của mình hoặc cần các phiên bản gói mã nguồn mở đã được chỉnh sửa trong Flox, chúng tôi dự định sẽ giúp bạn dễ dàng tạo danh mục riêng của mình để bổ sung cho Flox Catalog vốn luôn miễn phí
      Về lâu dài, chúng tôi muốn bán các giải pháp doanh nghiệp dưới dạng thuê bao và dịch vụ để giúp doanh nghiệp quản lý tốt hơn chuỗi cung ứng phần mềm rộng và phân mảnh, và chúng tôi cho rằng việc doanh nghiệp cùng chia sẻ chi phí phát triển các công cụ tùy chỉnh cho mình là hợp lý
    • Nghe nói đã nhận 24 triệu USD thì thật bất ngờ. Tôi chưa thấy rõ con đường từ đây đến một exit 2,4 tỷ USD, nhưng chúc may mắn
  • Mỗi khi thấy những câu kiểu trong README như “giúp Nix dễ hơn cho người dùng mới” hay diễn đạt tương tự là tôi lại thấy vướng
    Tôi nghĩ mình cũng khá có năng lực, nhưng chưa từng có lần nào dùng Nix mà cảm thấy “cái này dễ thật”
    Tôi rất thích các khái niệm của Nix, nhưng trải nghiệm người dùng thì quá tệ. Có thể công cụ này giải quyết được điều đó, nhưng để tới được mức ấy thì phải lần mò qua tài liệu gần như không có, những cách làm đã bị bỏ từ lâu, rồi chỉnh cấu hình mãi không dứt, nên rất dễ nản
    Dù sao thì cứ mỗi lần thấy thứ gì liên quan đến Nix là tôi lại nghĩ “mong đến ngày chuyện này trở nên dễ hơn”

    • Nếu bạn đang nói đến câu “Flox bắt đầu từ quá trình áp dụng Nix tại D. E. Shaw Group, và nhanh chóng chứng minh được giá trị bằng cách giúp Nix dễ hơn với người dùng mới”, thì tôi lại hiểu nó theo nghĩa ngược với cách diễn giải ban đầu của bạn
    • Câu đó không có nghĩa là Nix dễ với người dùng mới, mà là Flox làm cho Nix trở nên dễ hơn
    • Trải nghiệm hoàn toàn giống hệt. Tôi đã mày mò NixOS khá lâu nhưng vẫn không quen được với .nix hay flakes
      Các khái niệm cơ bản cứ liên tục trôi khỏi đầu, nên mỗi lần thiết lập thứ gì mới là tôi lại phải tra lại, rồi cuối cùng kiệt sức
      Việc debug sự cố cũng khó, và để biết điều gì sai thì phải lục tung những lệnh rất đặc thù cùng hệ thống tệp ác mộng
      Tôi thích ý tưởng, nhưng trong thực tế nó tạo cảm giác cản trở quá nhiều
    • Tôi thích Nix và cũng đã đóng góp khá nhiều gói vào kho nix, nhưng chắc chắn không thể gọi là dễ
      Có nền tảng Haskell nên tôi thấy quen hơn đôi chút, nhưng bản thân cú pháp cũng không trực quan với người dùng mới
    • Hoàn toàn đồng ý. Tôi nhìn thấy lợi ích, nhưng đường cong học ban đầu cực kỳ dốc
      Nó hơi giống lúc học Rust, nên cũng thú vị
  • Vấn đề cốt lõi của các sản phẩm kiểu “mang sức mạnh của Nix mà không cần đường cong học tập” là đằng sau vẫn có Nix và /nix/store, mà Nix thì cố ý không tự động dọn dẹp chuyện này
    Khi người dùng thử một công cụ che giấu Nix, đến lúc nào đó ổ đĩa rồi cũng đầy, nhưng vì không biết cách giải phóng dung lượng nên khó mà gọi là thân thiện với người dùng
    Nếu người dùng biết mình đang cài Nix và đi qua quá trình học, họ có thể xây dựng mô hình tư duy về /nix/store là gì và phải quản lý nó ra sao, nên tình huống sẽ khác
    Tôi tò mò không biết các bạn định xử lý độ phức tạp tầng dưới này như thế nào

    • Nếu hỗ trợ rollback và lịch sử thì ổ đĩa đầy gần như là điều không tránh khỏi. Trong Nix, thường sẽ có nhiều GC root trỏ tới profile và package, nên không thể dọn được
      Môi trường của Flox không chỉ là symlink đơn giản mà là định dạng khai báo, bên trong có flakes, nên có thể xóa đi và nếu cần thì tái tạo lại được
      Vì vậy việc garbage collection sẽ ít mang tính phá hủy hơn so với khi dùng nix-env/nix profile, và có thể dọn các thế hệ cũ quyết liệt hơn
      Chiến lược là luôn đảm bảo có cách khai báo và tái lập để khôi phục những gì đã dọn, rồi dùng các heuristic như dung lượng trống, tuổi, mức độ không được dùng gần đây, tần suất sử dụng thấp để tránh ổ đĩa bị đầy
    • Tôi tự hỏi so với Docker hay Bazel thì thế nào
      Ngược lại, tôi chưa từng gặp vấn đề này trong Nix. Nó chỉ rất rõ cách dọn rác, và cũng dễ điều tra xem thứ gì còn lại và vì sao nó còn ở đó
      Lý do nó không được bật mặc định là vì cũng như các garbage collector khác, nó có thể gây phiền, và không có một chính sách nào phù hợp cho tất cả mọi người
      Rốt cuộc nếu có quá nhiều GC root thì vẫn phải đưa ra quyết định
    • Nix có hỗ trợ garbage collection
      Mỗi khi dùng máy tính, phía sau có hàng nghìn thứ phức tạp đến mức vô lý đang diễn ra, nên tôi không hiểu vì sao việc trừu tượng hóa Nix lại bị xem là điều gì đó đặc biệt
    • Ở chỗ làm tôi cũng gặp đúng vấn đề này với Bazel. Sau vài tháng là máy phát triển lại thiếu dung lượng đĩa
    • Chỉ cần cấu hình để chạy Nix garbage collection mỗi 30 phút
  • Chúc mừng ra mắt. Tôi thật sự rất thích Nix, nhưng cũng phải thừa nhận rằng trải nghiệm onboarding của nó, nói nhẹ thì cũng tệ và tệ nhất thì thực sự khủng khiếp
    Vì vậy, mọi nỗ lực giúp nó dễ tiếp cận hơn đều đáng được hoan nghênh. Một CLI mang tính mệnh lệnh gần hơn rất nhiều với cách mà nhiều người mong đợi và cảm thấy thoải mái, nên tôi nghĩ đó là hướng đi tốt
    Tôi cũng rất đồng cảm với việc đơn giản hóa quá trình sử dụng môi trường của người khác
    Tuy vậy, điều có vẻ quan trọng mà tôi chưa thấy là tích hợp IDE. Việc khởi chạy IDE từ dòng lệnh bên trong môi trường không trực quan với nhiều đồng nghiệp của tôi, và tôi thực sự đã nhiều lần chẩn đoán đây là nguyên nhân gốc của các vấn đề
    Tôi cũng tò mò chuyện sẽ ra sao khi cần hạ xuống dùng “Nix thật”. Ví dụ, với những môi trường phức tạp hơn một chút như cấu hình toolchain cross-compile cho Rust, tôi lo là sẽ rơi xuống vực
    Lấy ví dụ phát triển Rust, tôi đã phải nhét một shellHook dài vào flake để Rust-Analyzer hoạt động đúng; tôi muốn biết trong Flox có thể làm kiểu cấu hình này như thế nào
    Không rõ đây là thứ mà Flox định trừu tượng hóa đi, hay nếu không thì người không biết Nix sẽ phải tự tìm ra bằng cách nào
    Tôi không định nói là hoàn toàn bất khả thi, tôi thật lòng mong nó thành công, chỉ là hiện giờ tôi vẫn chưa hình dung ra cách làm

    • Phần hạ xuống dùng “Nix thật” khi cần đã được bàn tới rồi, và nếu cần thêm sức mạnh thì kế hoạch là cho phép dùng chính Nix
      Hiện tại ý tưởng là cho phép tham chiếu flake trong một số trường cụ thể, hoặc có các điểm vào theo kiểu Nix
      Cái này vẫn chưa được công khai hay tài liệu hóa, nên mong bạn chờ thêm
      Tôi hoàn toàn đồng ý rằng có một ranh giới rất mong manh giữa việc che giấu độ phức tạp và phơi bày năng lực
  • Tôi muốn biết lợi ích của việc dùng Flox thay vì nix-shell hay nix develop thông thường là gì

    • Tôi là nhân viên Flox. Nói về mối quan hệ với các công cụ Nix trước, mục tiêu là trở nên thân thiện với người dùng hơn
      Chúng tôi muốn bạn có thể thành công mà không cần học ngôn ngữ biểu thức Nix hay hiểu cấu trúc nội bộ của Nix
      Chúng tôi cũng thêm một mức độ định hướng và trau chuốt nhất định. Ví dụ có giao diện lai giữa mệnh lệnh/khai báo, nên nếu chạy flox install && flox list thì các thay đổi sẽ được phản ánh vào TOML. Trong khi đó với nix develop thì bạn phải chỉnh sửa biểu thức Nix
      nix develop đưa bạn vào shell bash, còn flox activate có thể vào shell bash hoặc zsh, và chúng tôi cũng có kế hoạch thêm hỗ trợ fish
      Việc quản lý môi trường bằng Git được hỗ trợ như các công cụ Nix, đồng thời chúng tôi cũng bổ sung chia sẻ môi trường theo những cách mà các công cụ đó không làm được, như flox push/flox pull/flox activate -r
      Nếu tạo tài khoản, bạn có thể xem các package trong môi trường của tôi tại https://hub.flox.dev/mkenigs/default, và nếu có CLI thì có thể kiểm tra bằng flox list -r mkenigs/default, rồi dùng với flox activate -r mkenigs/default
      Tôi nghĩ điều đó dễ tiếp thu hơn rất nhiều đối với người không biết ngôn ngữ biểu thức Nix so với việc gửi cho họ một flake.nix
    • Nói cách khác, tôi nghĩ với từng kỹ sư riêng lẻ thì học công nghệ nền tảng cùng bộ công cụ đi kèm vẫn tốt hơn
      Hoàn toàn có khả năng những công cụ như Flox hay devenv sẽ end-of-life, hoặc không theo kịp nixpkgs đúng cách, hoặc gặp một trong nhiều kiểu mục ruỗng phần mềm khác
      Trong khi đó, nix develop sẽ còn tồn tại miễn là Nix Flakes còn tồn tại, và nó cũng có động lực cung cấp lộ trình di trú sang cách tiếp theo
      Quan trọng hơn, mọi tầng trừu tượng cuối cùng đều sẽ rò rỉ. CLI của Flox có thể trông gọn gàng hơn, nhưng để dùng hiệu quả thì rốt cuộc bạn vẫn sẽ phải học Nix
      Tôi không thấy lý do gì phải học gấp đôi số thứ cần thiết
    • Hoặc bạn cũng có thể dùng https://devenv.sh
  • Tôi muốn biết Flox so với dự án Devbox hiện có (https://www.jetpack.io/devbox) thì như thế nào
    Flox có giải pháp cloud tùy chọn không, có thể cài các phiên bản package Nix cụ thể không, và xử lý phụ thuộc theo hệ điều hành ra sao
    Tôi đã dùng các công cụ kiểu này suốt 5 năm nay, nên muốn biết Flox mang đến điều gì mới so với những gì đã có

  • Tôi thực sự không hiểu vì sao phải dùng cái này thay vì Nix thông thường, có thể giải thích không

    • Tôi chỉ muốn môi trường sạch và tái lập được cho từng dự án. Tôi đã vài lần cố nhập môn Nix, nhưng Nix làm quá nhiều thứ nên lần nào tôi cũng bị ngợp
      Cái này với tôi có vẻ đơn giản hơn gấp 100 lần
    • Tôi hiểu rằng Nix giải quyết được rất nhiều vấn đề, và thực tế tôi đã đặt cược vào năng lực đó. Vì vậy chúng tôi cũng đã đầu tư rất nhiều công sức vào chính Nix
      Nhưng Nix được xây dựng từ những nguyên lý đầu tiên để trở nên rất đa dụng, nên đường cong học tập khá dốc
      Flox là công cụ cố gắng đơn giản hóa bằng cách thu hẹp phạm vi vấn đề và cung cấp các tầng trừu tượng cùng giao diện chuyên biệt, để bạn có thể tận dụng năng lực của Nix mà không cần trở thành chuyên gia Nix ngay từ ngày đầu tiên
    • Thuyết phục đồng nghiệp dùng flox hoặc devenv dễ hơn nhiều so với thuyết phục họ dùng Nix
  • Tôi rất quan tâm đến môi trường phát triển có thể tái lập, và ở chỗ làm tôi cũng đã dùng dev container rất ổn trong vài năm nay
    Khoảng một năm trước tôi nghe về Nix, và ban đầu rất hào hứng vì lời hứa của nó quá hấp dẫn, nhưng quá trình onboarding thì thật khủng khiếp với tôi
    Tôi hình dung khá rõ môi trường phát triển mình muốn tạo ra, nhưng luôn có cảm giác mình đang bỏ sót điều gì đó ở cách tiếp cận
    Tôi rất vui khi thấy có công cụ mới cố cải thiện toàn bộ trải nghiệm này, và hy vọng nếu cứ tiếp tục thử thì một lúc nào đó tôi sẽ “ngộ” ra
    Tôi muốn hỏi là với bạn, vào khoảnh khắc nào thì Nix bắt đầu “khớp hẳn”

    • Cảm ơn câu hỏi. Đây là kiểu chủ đề mà nếu bạn đến Bay Area thì chúng ta có thể uống bia và nói sâu hơn
      Bạn đã xem video Microservices này chưa? https://www.youtube.com/watch?v=y8OnoxKotPQ
      Lúc đó tôi đang dẫn dắt đội ngũ sản phẩm cho lập trình viên ở Facebook, và chúng tôi bắt đầu một dự án đưa khả năng từ xa vào phát triển cục bộ
      Hàng nghìn lập trình viên khi ấy phải chờ 45 phút cho mỗi cold build
      Một trong những bước đầu tiên là vẽ ra toàn bộ vòng đời phát triển phần mềm để xác định phần nào của toolchain cần phải xây lại
      Nhìn vào bảng trắng ở cuối video có thể gợi lại cảm giác đó: ngay khoảnh khắc chúng tôi hình dung được mọi thứ mình đã làm phức tạp đến mức nào, tôi đã bị cuốn vào suy nghĩ “đây không thể là cách chúng ta làm việc được”
  • Lần cuối tôi dùng Nix thì vẫn còn khá nhiều bối rối quanh flakes
    Có chỗ hướng dẫn bảo nên dùng, chỗ khác lại nói vẫn còn đang phát triển, nên tôi muốn biết giờ tình hình đã khá hơn chưa

    • Tôi nghĩ là đã khá hơn rồi. Gần như mọi, hoặc có lẽ là tất cả, các giải pháp được liệt kê ở đây dường như đều dùng flakes ở bên trong: https://news.ycombinator.com/item?id=39696038
      Theo tôi, vấn đề với flakes đến từ hai điểm
      Một là nó bị gắn nhãn experimental gần 5 năm nay, khiến người dùng mới thấy khó hiểu, trong khi trên thực tế nó đã được dùng rất phổ biến ở gần như mọi nơi
      Hai là có vẻ tồn tại mâu thuẫn giữa https://determinate.systems/ và những người dùng/nhà phát triển Nix lâu năm. Có vẻ Determinate Systems bị chỉ trích là dùng Nix để phục vụ lợi ích riêng nhưng không đóng góp trở lại
      Theo hiểu biết của tôi thì Determinate Systems đã thúc đẩy flakes, nên có lẽ vì vậy mà một số người phản đối
      Kết luận là gần như tất cả mọi người đều đã chấp nhận flakes, và các hướng dẫn không dùng nó phần lớn có lẽ đã cũ
      Liên kết liên quan: https://discourse.nixos.org/t/introducing-flakehub/32044
    • Tôi không biết ai ngày nay còn khuyên không nên dùng flakes nữa
      Nhãn “experimental” mang ý nghĩa gần với độ ổn định của API hơn là mức độ hoàn thiện hay lỗi
      Trong một số tình huống có thể có vấn đề về hiệu năng, nhưng đã có cách обход và cũng đang có giải pháp lâu dài được phát triển
      Dù vậy, tôi vẫn dùng flakes rất nhiều ở nhà và ở chỗ làm
    • Tham khảo: kế hoạch để từng bước ổn định CLI mới và Flakes https://github.com/NixOS/rfcs/pull/136
  • Tối qua tôi thử dùng Flox trên macOS, và thấy nó cài Nix vào profile mặc định tách biệt với bản Nix mà Nix-Darwin quản lý ở /run/current-system/sw/bin, rồi tạo symbolic link bản sao đó vào /usr/local/bin
    Cũng không có hướng dẫn nào cho người dùng Nix hiện có, tức là người dùng NixOS hoặc người đã cài Nix trên các bản phân phối khác nhưng không có định dạng gói phân phối mà Flox hỗ trợ
    Tôi muốn biết liệu điều này là vì Flox là một trình quản lý profile bên thứ ba cho Nix nên phải phụ thuộc vào những thứ như định dạng manifest của Nix profile vốn không ổn định, hay thực ra nó có thể dùng với nhiều phiên bản Nix khác nhau nhưng chỉ là chưa được kiểm thử
    Tôi cũng muốn biết liệu hỗ trợ cài Flox dựa trên Nix có được xem là tính năng sẽ hỗ trợ sau này không
    Ngoài ra, có nói rằng hỗ trợ fish sắp tới, nhưng có thể chỉ cho tôi phần tích hợp shell của lệnh con activate thực sự nằm ở đâu trong mã nguồn hoặc cấu hình Flox không
    Tôi đã định tạm thời ghép bằng thứ như fenv trong lúc chờ hỗ trợ fish chính thức, nhưng dù đã lướt qua bản cài đặt và mã nguồn thì vẫn không thấy rõ chỗ nào để móc vào

    • Có lẽ bạn đã bỏ sót các tab Nix/Generic và Nix/NixOS trên https://flox.dev/docs/install-flox/ rồi. Tôi muốn biết liệu chúng có đáp ứng trường hợp dùng song song mà bạn nói tới không
      Hiện tại, cách tốt nhất để dùng với fish theo tôi là FLOX_SHELL=zsh flox activate -- fish. Nó không hỗ trợ alias, nhưng hầu hết mọi thứ có lẽ sẽ hoạt động
      Tôi cũng muốn biết liệu bạn đang thực sự muốn sửa mã nguồn, hay chỉ đang cố hiểu cấu trúc để làm một giải pháp tạm thời
      Với các shell không phải bash hay zsh thì nó báo lỗi quanh chỗ này: https://github.com/flox/flox/blob/9e18a3ceaa185006bae95a4827...
      Nếu bạn muốn tự sửa thì tôi sẵn sàng giải thích thêm về bối cảnh