מסמך עזר של dev.nix

בדף הזה מפורטת הסכימה של קובץ התצורה של סביבת העבודה, שתמיד צריך להיות ממוקם בנתיב .idx/dev.nix.

מידע על שפת Nix מפורט במדריך הרשמי לשפת Nix.

חבילות

חבילות להתקנה בסביבה.

אפשר להשתמש בארגומנט pkgs כדי לבחור חבילות להתקנה, לדוגמה pkgs.python3. הערה: התוכן של pkgs תלוי באפשרות הערוץ שנבחרה channel.

דוגמה:

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

אפשר לחפש חבילות זמינות כאן: stable-23.11 או unstable.

Type: list of package

ברירת מחדל: [ ]

ערוץ

ערוץ nixpkgs לשימוש.

הערוץ הזה מגדיר את התוכן של הארגומנט pkgs.

Type: אחת מהאפשרויות 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";
        };
      };
    };
  };
}

Type: (סוג): קבוצת מאפיינים של (מודול משנה)

ברירת מחדל: { }

idx.previews.previews.<name>.activity

Android Launch Activity

סוג: מחרוזת

ברירת מחדל: ""

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

פקודות לביצוע בכל פעם שסביבת העבודה נפתחת.

האפשרות הזו יכולה להיות שימושית כדי להפעיל את כלי המעקב אחר בנייה. לדוגמה, כאן אנחנו מציינים 2 פקודות להרצה:

{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
    

סוג: רשימת נתיבים

ברירת מחדל: [ ]

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.

השרת מאותחל עם משתמש root ללא סיסמה. לכן, כדי ליצור משתמשים נוספים וליצור מסדי נתונים, צריך להשתמש ב-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