مرجع 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 ];}))

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

عمليات الاستيراد

يمكنك توسيع ملف 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