مرجع dev.nix

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

للتعرّف على لغة Nix، يمكنك الاطّلاع على البرنامج التعليمي الرسمي للغة Nix.

packages

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

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

مثال:

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

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

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

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

channel

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

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

النوع: سلسلة (مثلاً، "stable-24.11" أو "stable-25.05" أو "unstable")

القيمة التلقائية: "stable-24.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
    

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

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

services

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

على سبيل المثال، لتفعيل 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

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

القيمة التلقائية: 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