تخصيص مساحة عمل IDX

الهدف من مشروع IDX هو أن يكون مفيدًا للمطوّرين قدر الإمكان. إحدى الطرق التي ينجز بها IDX

Nix + IDX

يستخدم IDX Nix لتحديد إعدادات البيئة لكل مساحة عمل. Nix هو مدير حزم وظيفي تمامًا ويعيّن معرّفات فريدة لكل تبعية، ما يعني في النهاية أنّ بيئتك يمكن أن تحتوي على إصدارات متعددة من نفس التبعية بسلاسة. كما أنها قابلة للتكرار والتوضيح. في سياق IDX، يعني ذلك أنه يمكنك مشاركة ملف إعداد Nix عبر مساحات العمل لتحميل إعداد البيئة نفسه.

يحدّد IDX بيئة المعاينة وإعدادات حزمة Workspace مباشرةً من مستودع الرموز باستخدام ملف .idx/dev.nix. تتّبع السمات ومكتبات الحزم التي يمكنك تحديدها في هذا الملف بنية مجموعة سمات Nix.

يوضح المثال التالي تهيئة بيئة أساسية لتمكين المعاينات:

{ pkgs, ... }: {

  # Which nixpkgs channel to use.
  channel = "stable-23.11"; # or "unstable"

  # Use https://search.nixos.org/packages to find packages
  packages = [
    pkgs.nodejs_18
  ];

  # Sets environment variables in the workspace
  env = {
    SOME_ENV_VAR = "hello";
  };

  # Search for the extensions you want on https://open-vsx.org/ and use "publisher.id"
  idx.extensions = [
    "angular.ng-template"
  ];

  # Enable previews and customize configuration
  idx.previews = {
    enable = true;
    previews = {
      web = {
        command = [
          "npm"
          "run"
          "start"
          "--"
          "--port"
          "$PORT"
          "--host"
          "0.0.0.0"
          "--disable-host-check"
        ];
        manager = "web";
      };
    };
  };
}

سمات Nix ومكتبات الحزم

طرود

حِزم يتم تثبيتها في البيئة

يمكنك استخدام الوسيطة pkgs لاختيار الحزم المراد تثبيتها، أي pkgs.python3. يعتمد محتوى قناة "pkgs" على خيار قناة "channel" الذي تم اختياره.

مثال:

{pkgs, ...}: {
  channel = "stable-23.11";
  packages = [pkgs.vim];
}

يمكنك البحث عن الحِزم المتوفّرة هنا: stable-23.11 أو غير ثابتة.

النوع: قائمة الحزمة

الخيار التلقائي: [ ]

العضويات

nixpkgs لاستخدامها.

تُحدِّد هذه القناة محتوى الوسيطة pkgs.

النوع: واحد من "stable-23.05" أو "stable-23.11" أو "غير ثابت"

الخيار التلقائي: "stable-23.11"

env

متغيرات البيئة التي يتم ضبطها داخل بيئة المطوّرين.

يتم نشر هذه الواجهات إلى كل وحدات العرض وخادم المعاينة. يمكن أن تكون متغيرات البيئة مفيدة بشكل خاص إذا كان التطبيق يتطلب مجموعة محددة من المتغيرات.

مثال:

{pkgs, ...}: {
  env = {
    HELLO = "world";
  };
}

النوع: مجموعة سمات أي عنصر

الخيار التلقائي: { }

idx.extensions

إضافات الرموز التي تريد تثبيتها في مساحة عمل IDX

هذه قائمة بأرقام تعريف الإضافات المؤهّلة بالكامل، أي ${publisherId}.${extensionId}.

يمكنك العثور على قائمة بالامتدادات المتاحة على Open VSX Registry وإدخالها في ملف dev.nix بحلول ${publisherId}.${extensionId}.

النوع: قائمة بـ (سلسلة أو مسار غير فارغ)

الخيار التلقائي: [ ]

idx.previews.enable

يجب ضبط هذا الحقل على true لتفعيل معاينات IDX.

توفّر هذه الميزة طريقة لتشغيل تطبيقاتك وإعادة تحميلها تلقائيًا أثناء تطويرها.

النوع: منطقي

الخيار التلقائي: true

مثال: true

idx.previews.previews

معاينة الإعدادات.

حدِّد الأوامر التي ينفّذها IDX في بيئة المطوِّر.

مثال:

{pkgs, ...}: {
  idx.previews = {
    enable = true;
    previews = {
      web = {
        command = ["yes"];
        cwd = "subfolder";
        manager = "web";
        env = {
          HELLO = "world";
        };
      };
    };
  };
}

النوع: مجموعة سمات (وحدة فرعية)

الخيار التلقائي: { }

idx.previews.previews.*.command

الأمر المطلوب تنفيذه

النوع: قائمة من السلسلة

الخيار التلقائي: [ ]

idx.previews.previews.*.cwd

دليل العمل

Type: string

الخيار التلقائي: ""

idx.previews.previews.*.env

متغيرات البيئة المطلوب ضبطها.

Type: مجموعة السمات من السلسلة

الخيار التلقائي: { }

idx.previews.previews.*.manager

مدير

النوع: واحد من web، flutter

idx.workspace.onCreate

هي الأوامر التي يتم تنفيذها عند إنشاء مساحة العمل وفتحها للمرة الأولى.

يمكن أن يكون ذلك مفيدًا لإعداد بيئة التطوير. على سبيل المثال، نحدد في ما يلي npm install لتشغيله:

{pkgs, ...}: {
  idx.workspace.onCreate = {
    npm-install = "npm install";
  };
}

النوع: مجموعة سمات (مسار أو سلسلة)

الخيار التلقائي: { }

idx.workspace.onStart

الأوامر التي يتم تنفيذها كلما تم فتح مساحة العمل.

قد تكون هذه الطريقة مفيدة في جذب مشاهدين جدد. على سبيل المثال، نحدد هنا أمرين لتشغيلهما:

{pkgs, ...}: {
  idx.workspace.onStart = {
    npm-watch-fe = "npm run watch:frontend";
    npm-watch-be = "npm run watch:backend";
  };
}

النوع: مجموعة سمات (مسار أو سلسلة)

الخيار التلقائي: { }

services.docker.enable

يحدِّد ذلك ما إذا كان سيتم تفعيل Dock بدون Rootless.

النوع: منطقي

الخيار التلقائي: false

مثال: true