HeadlinesBriefing favicon HeadlinesBriefing.com

واحد Nix Flake لحكمهم جميعًا - Omniflake

Hacker News •
×

الفلاكات بلا شك ستبقى، وقد أوضحت رأيي فيها بوضوح: إنها "meh". رغم وجودها الدائم، فإن إضافة إدخال فلاك تستمر في أن تكون إزعاجًا صغيرًا لا يزول. يُروج لها كميزة إيجابية أن الفلاكات موزعة لكن الحقيقة هي أنني أريد بساطة الفلاك المركزي. यही كان جمال وقوة nixpkgs. العملية هي: أنت تريد disko، لذا تضيف عنوان URL، ثم تضيف follows بحيث يتوقف عن سحب nixpkgs الخاص به، ثم تكرر ذلك للفلاة التالي. أصبح هذا ميمًا في مجتمع Nix حول كيفية سحب كل flake لـ flake-utils الخاص به. أرفض قبول تجربة المستخدم هذه.

فتساءلت: هل يمكن لفلاة واحدة أن تحمل كل الفلاة الأخرى، وتصل فقط إلى ما تحتاجه؟ تقديم Omniflake: تقريبًا كل فلاة Nix خلف إدخال فلاة واحد. `inputs.omniflake.url = "github:fzakaria/omniflake";` `inputs.omniflake.inputs.nixpkgs.follows = "nixpkgs";` بمجرد أن تحصل على omniflake، يمكنك استخدامه مثل أي إدخال آخر. حزمة، في قشرة أو على نظام: `environment.systemPackages = [omniflake.flakes.nh.packages.${system}.default];` تراكب: `nixpkgs.overlays = [ omniflake.flakes.rust-overlay.overlays.default ];` وحدة NixOS: `imports = [ omniflake.flakes.disko.nixosModules.disko ];` أو لا شيء في flate على الإطلاق، مباشرة من سطر الأوامر: `$ nix run 'github:fzakaria/omniflake#flakes.nh.packages.x86_64-linux.default' -- --version`

لديه موقع ويب يمكن الوصول إليه على https://omniflake.com/ حيث يمكنك رؤية قائمة الفلاة التي يحملها وبعض الوثائق المفيدة. بمجرد إضافته، لديك وصول إلى ما يقرب من اثني عشر ألف flake يمكنك الوصول إليها عند الحاجة بطريقة كسولة. أنت تدفع فقط مقابل ما تستخدمه. يبدو هذا absurdًا لكنه يعمل. فلاة بآلاف الإدخالات يجب أن تكون غير قابلة للاستخدام لكن بفضل كسول لغة Nix وآلية قفل الفلاة يعمل بشكل مثالي.

كيف من الممكن احتواء 거의 كل flake داخل هذا واحد؟ مقدمة مختصرة جدًا عن الفلاة: الفلاة هو دليل يحتوي على flake.nix يعلن عن شيئين: المدخلات (الفلاة الأخرى التي يعتمد عليها) والمخرجات (دالة لتلك المدخلات). ملف flake.lock بجانبه يحدد بالضبط أي commit تم حلّه، لذا فإن البناء قابل للتكرار. ملف القفل لا يثبت فقط إدخالاتك الخاصة. يثبت الرسم البياني الانتقالي الكامل لكل flake. وهذا يعني أنه إذا اعتمد فلاة فرعية اثنتان على nixpkgs، فسيكون لكل منهما نسخة خاصة من nixpkgs في ملف القفل، وقد تكونان commits مختلفين. هذا هو التكرار الذي يشتكي منه الجميع، وهو السبب في وجود follows: follows يعيد كتابة الاعتماد ليشير إلى عقدة لديك بالفعل، بدلاً من جلب نسخة أخرى.

الكيانات الرئيسية: الشركات: Hacker News | الأشخاص: Tim Cook

الأسئلة الشائعة: ما هو Omniflake وكيف يحل إدارة مدخلات flake في Nix؟

Omniflake هو flate Nix واحد يجمع ما يقرب من اثني عشر ألف flate Nix آخر خلف إدخال واحد. بدلاً من إضافة وتكوين كل flate يدويًا باستخدام تعليمات follows، يضيف المستخدمون فقط إدخال omniflake ويصلون إلى أي flate محتوى بشكل كسول حسب الحاجة. هذا يعمل بسبب التقييم الكسول لـ Nix وآلية قفل الفلاة، رغم العدد الكبير من المدخلات.

السؤال الشائع: ما هو Omniflake وكيف يحل إدارة مدخلات flake في Nix؟

الجواب الشائع: Omniflake هو flate Nix واحد يجمع ما يقرب من اثني عشر ألف flate Nix آخر خلف إدخال واحد. بدلاً من إضافة وتكوين كل flate يدويًا باستخدام تعليمات follows، يضيف المستخدمون فقط إدخال omniflake ويصلون إلى أي flate محتوى بشكل كسول حسب الحاجة. هذا يعمل بسبب التقييم الكسول لـ Nix وآلية قفل الفلاة، رغم العدد الكبير من المدخلات.