مرجع dev.nix

تتضمّن هذه الصفحة تفاصيل عن مخطّط ملف إعدادات بيئة عملك، والذي من المفترض أن يكون متوفّرًا دائمًا على العنوان .idx/dev.nix.

للتعرّف على لغة Nix، اطّلِع على الدليل الإرشادي الرسمي للغة Nix.

طرود

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

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

مثال:

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

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

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

القيمة التلقائية: [ ]

قناة

قناة nixpkgs التي تريد استخدامها

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

النوع: أحد الأنواع التالية: "stable-23.05" أو "stable-23.11" أو "stable-24.05" أو "stable-24.11" أو "unstable"

القيمة التلقائية: "stable-23.11"

env

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

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

يمكن أن تكون قيمة كل متغيّر سلسلة أو قائمة سلاسل. ويتم تسلسل الأخير مع إدراج أحرف نقطتَين رأسيتَين بين كل حرفَين.

يجب أن تكون PATH قائمة، لأنّها تتم إضافتها دائمًا ولا يتم استبدالها بالكامل أبدًا.

مثال:

{pkgs, ...}: {
  env = {
    HELLO = "world";
    # append an entry to PATH
    PATH = ["/some/path/bin"];
  };
}

النوع: مجموعة سمات من ((قائمة سلاسل) أو أي شيء)

القيمة التلقائية: { }

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.<name>.activity

نشاط بدء تشغيل Android

النوع: سلسلة

القيمة التلقائية: ""

idx.previews.previews.<name>.command

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

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

القيمة التلقائية: [ ]

idx.previews.previews.<name>.cwd

دليل العمل

النوع: سلسلة

القيمة التلقائية: ""

idx.previews.previews.<name>.env

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

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

القيمة التلقائية: { }

idx.previews.previews.<name>.manager

مدير

النوع: أحد القيم التالية: "web" أو "flutter" أو "android" أو "gradle"

idx.workspace.onCreate

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

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

{pkgs, ...}: {
  idx.workspace.onCreate = {
    npm-install = "npm install";
    # files to open when the workspace is first opened.
    default.openFiles = [ "src/index.ts" ];
  };
}

النوع: مجموعة سمات من (مسار أو سلسلة أو ({ openFiles = [ string ];}))

القيمة التلقائية: { }

idx.workspace.onStart

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

ويمكن أن يكون ذلك مفيدًا لبدء جذب المشاهدين. على سبيل المثال، سنحدّد هنا طلبَين لتنفيذهما:

{pkgs, ...}: {
  idx.workspace.onStart = {
    npm-watch-fe = "npm run watch:frontend";
    npm-watch-be = "npm run watch:backend";
    # files to open when the workspace is (re)opened.
    default.openFiles = [ "src/index.ts" ];
  };
}

النوع: مجموعة سمات من (مسار أو سلسلة أو ({ openFiles = [ string ];}))

القيمة التلقائية: { }

imports

يمكنك توسيع ملف dev.nix باستخدام ملف مستورَد.

# dev.nix
{ pkgs, ... }: {
  imports = [
    ./some-file.nix
  ];
  # ...
}
# some-file.nix
{ pkgs, ... }: {
  packages = [
    pkgs.python3
  ];
  # ...
}

هناك عدة أسباب قد تدفعك إلى استيراد ملف .nix مخصّص في dev.nix:

  1. إذا كان ملف dev.nix كبيرًا وأردت تقسيمه إلى وحدات لتحسين قابلية الصيانة

    { pkgs, ... }: {
      channel = "stable-24.11";
      # ...
      imports = [
        ./env-cfg.nix
        ./preview-config.nix
      ];
    }
    
  2. إذا كنت تريد ضبط خيارات خاصة ببيئة العمل المحلية وإضافةملف إلى قائمة .gitignore

    # dev.nix
    { pkgs, lib, ... }: {
      # ...
    
      imports = lib.optionals (builtins.pathExists ./dev.local.nix ) [ ./dev.local.nix ];
    }
    
    #.gitignore
    .idx/dev.local.nix
    

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

القيمة التلقائية: [ ]

خدمات

الخدمات الشائعة التي يجب تفعيلها عند فتح مساحة العمل

على سبيل المثال، لتفعيل Postgres واستخدام إضافة pgvector، أضِف ما يلي إلى dev.nix:

    services.postgres = {
      extensions = ["pgvector"];
      enable = true;
    };

تسرد الأقسام التالية جميع الخدمات المتوافقة وخيارات الإعداد المتاحة لها.

services.docker.enable

ما إذا كان سيتم تفعيل Rootless docker.

النوع: قيمة منطقية

القيمة التلقائية: false

مثال: true

services.mongodb.enable

ما إذا كان سيتم تفعيل خادم MongoDB.

النوع: قيمة منطقية

القيمة التلقائية: false

مثال: true

services.mongodb.package

حزمة MongoDB المراد استخدامها

النوع: حزمة

القيمة التلقائية: <derivation mongodb-6.0.11>

services.mongodb.port

لضبط المنفذ الذي سيستجيب له Mongod.

يكون بروتوكول tcp غير مفعّل تلقائيًا ولا يستمع Mongod إلا إلى /tmp/mongodb/mongodb.sock.

للاتصال، استخدِم سلسلة الاتصال mongodb://%2Ftmp%2Fmongodb%2Fmongodb.sock.

النوع: عدد صحيح غير موقَّت بسعة 16 بت، يتراوح بين 0 و65535 (كلاهما شامل)

القيمة التلقائية: 0

services.mysql.enable

ما إذا كان سيتم تفعيل خادم MySQL

يتم إعداد الخادم باستخدام حساب مستخدم جذر بدون كلمة مرور. وبالتالي، لإنشاء مستخدمين إضافيين وإنشاء قواعد بيانات، استخدِم mysql -u root.

النوع: قيمة منطقية

القيمة التلقائية: false

مثال: true

services.mysql.package

حزمة MySQL المراد استخدامها

النوع: حزمة

القيمة التلقائية: pkgs.mysql

مثال: pkgs.mysql80

services.postgres.enable

يشير إلى ما إذا كان سيتم تفعيل خادم PostgreSQL.

النوع: قيمة منطقية

القيمة التلقائية: false

مثال: true

services.postgres.enableTcp

يشير إلى ما إذا كان سيتم تفعيل Postgres للاستماع إلى بروتوكول TCP.

النوع: قيمة منطقية

القيمة التلقائية: true

مثال: true

services.postgres.package

حزمة PostgreSQL المراد استخدامها

النوع: حزمة

القيمة التلقائية: pkgs.postgresql

مثال: pkgs.postgresql_15

services.postgres.extensions

إضافات Postgres المطلوب تثبيتها

النوع: قائمة (واحدة من "age" أو "apache_datasketches" أو "cstore_fdw" أو "hypopg" أو "jsonb_deep_sum" أو "periods" أو "pg_auto_failover" أو "pg_bigm" أو "pg_cron" أو "pg_ed25519" أو "pg_embedding" أو "pg_hint_plan" أو "pg_hll" أو "pg_ivm" أو "pg_net" أو "pg_partman" أو "pg_rational" أو "pg_relusage" أو "pg_repack" أو "pg_safeupdate" أو "pg_similarity" أو "pg_topn" أو "pg_uuidv7" أو "pgaudit" أو "pgjwt" أو "pgroonga" أو "pgrouting" أو "pgsql-http" أو "pgtap" أو "pgvector" أو "plpgsql_check" أو "plr" أو "plv8" أو "postgis" أو "promscale_extension" أو "repmgr" أو "rum" أو "smlar" أو "tds_fdw" أو "temporal_tables" أو "timescaledb" أو "timescaledb-apache" أو "timescaledb_toolkit" أو "tsearch_extras" أو "tsja" أو "wal2json")

القيمة التلقائية: [ ]

مثال: [ "pgvector" "postgis" ];

services.pubsub.enable

ما إذا كان سيتم تفعيل محاكي Google Pub/Sub

يمكنك الاطّلاع على مزيد من المستندات حول استخدام المحاكي على الرابط التالي: https://cloud.google.com/pubsub/docs/emulator#using_the_emulator .

النوع: قيمة منطقية

القيمة التلقائية: false

مثال: true

services.pubsub.port

لضبط المنفذ الذي سيستمع إليه Pub/Sub

النوع: عدد صحيح غير موقَّت بسعة 16 بت، يتراوح بين 0 و65535 (كلاهما شامل)

القيمة التلقائية: 8085

services.pubsub.project-id

رقم تعريف المشروع المراد استخدامه لتشغيل محاكي Pub/Sub هذا المشروع مخصّص للاختبار فقط، ولا يلزم أن يكون متوفّرًا، ويتم استخدامه على الجهاز فقط.

النوع: سلسلة تتطابق مع النمط [a-z][a-z0-9-]{5,29}

القيمة التلقائية: "idx-pubsub-emulator"

services.redis.enable

يشير إلى ما إذا كان سيتم تفعيل خادم Redis.

النوع: قيمة منطقية

القيمة التلقائية: false

مثال: true

services.redis.port

لضبط المنفذ الذي سيستجيب من خلاله Redis.

يكون بروتوكول tcp غير مفعّل تلقائيًا ولا يستمع redis إلا إلى /tmp/redis/redis.sock.

النوع: عدد صحيح غير موقَّت بسعة 16 بت، يتراوح بين 0 و65535 (كلاهما شامل)

القيمة التلقائية: 0

services.spanner.enable

ما إذا كان سيتم تفعيل Google Cloud Spanner Emulator

النوع: قيمة منطقية

القيمة التلقائية: false

مثال: true

services.spanner.fault-injection

يشير إلى ما إذا كان سيتم تفعيل إدخال أخطاء عشوائية في المعاملات.

النوع: قيمة منطقية

القيمة التلقائية: false

مثال: true

services.spanner.grpc-port

منفذ TCP الذي يجب ربط المحاكي به

النوع: عدد صحيح غير موقَّت بسعة 16 بت، يتراوح بين 0 و65535 (كلاهما شامل)

القيمة التلقائية: 9010

services.spanner.rest-port

المنفذ الذي يتم من خلاله تقديم طلبات REST

النوع: عدد صحيح غير موقَّت بسعة 16 بت، يتراوح بين 0 و65535 (كلاهما شامل)

القيمة التلقائية: 9020