מסמך עזר של 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

כדי להפעיל תצוגות מקדימות של IDX, מגדירים את הערך הזה כ-true.

התכונה הזו מאפשרת להריץ את האפליקציות ולטעון אותן מחדש באופן אוטומטי בזמן הפיתוח.

סוג: boolean (בוליאני)

ברירת מחדל: 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

סוג: string (מחרוזת)

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

idx.previews.previews.<name>.command

הפקודה לביצוע

סוג: רשימה של מחרוזת

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

idx.previews.previews.‎<name>.cwd

ספריית העבודה

סוג: string (מחרוזת)

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

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

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

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

סוג: boolean (בוליאני)

ברירת מחדל: false

דוגמה: true

services.mongodb.enable

האם להפעיל את שרת MongoDB.

סוג: boolean (בוליאני)

ברירת מחדל: false

דוגמה: true

services.mongodb.package

חבילת MongoDB לשימוש.

סוג: package

ברירת מחדל: <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.

סוג: boolean (בוליאני)

ברירת מחדל: false

דוגמה: true

services.mysql.package

חבילת MySQL לשימוש.

סוג: package

ברירת מחדל: pkgs.mysql

דוגמה: pkgs.mysql80

services.postgres.enable

האם להפעיל את שרת PostgreSQL.

סוג: boolean (בוליאני)

ברירת מחדל: false

דוגמה: true

services.postgres.enableTcp

האם להפעיל את Postgres להאזנה ב-TCP.

סוג: boolean (בוליאני)

ברירת מחדל: true

דוגמה: true

services.postgres.package

חבילת PostgreSQL שבה רוצים להשתמש.

סוג: package

ברירת מחדל: 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 .

סוג: boolean (בוליאני)

ברירת מחדל: 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.

סוג: boolean (בוליאני)

ברירת מחדל: false

דוגמה: true

services.redis.port

הגדרת היציאה שבה Redis יקשיב.

כברירת מחדל, TCP מושבת ו-Redis מקשיב רק ב-/tmp/redis/redis.sock.

סוג: מספר שלם ללא סימן באורך 16 ביט, בין 0 ל-65535 (כולל)

ברירת מחדל: 0

services.spanner.enable

האם להפעיל את Google Cloud Spanner Emulator.

סוג: boolean (בוליאני)

ברירת מחדל: false

דוגמה: true

services.spanner.fault-injection

האם להפעיל הזרקת שגיאות אקראיות לעסקאות.

סוג: boolean (בוליאני)

ברירת מחדל: false

דוגמה: true

services.spanner.grpc-port

יציאת ה-TCP שאליה צריך לקשר את האמולטור.

סוג: מספר שלם ללא סימן באורך 16 ביט, בין 0 ל-65535 (כולל)

ברירת מחדל: 9010

services.spanner.rest-port

היציאה שבה מתקבלות בקשות ה-REST

סוג: מספר שלם ללא סימן באורך 16 ביט, בין 0 ל-65535 (כולל)

ברירת מחדל: 9020