Documentation de référence sur dev.nix

Cette page fournit des informations sur le schéma du fichier de configuration de votre environnement d'espace de travail, qui doit toujours se trouver dans .idx/dev.nix.

Pour en savoir plus sur le langage Nix, consultez le tutoriel officiel sur le langage Nix.

packages

Packages à installer dans l'environnement.

Vous pouvez utiliser l'argument pkgs pour sélectionner les packages à installer, par exemple pkgs.python3. Notez que le contenu de pkgs dépend de l'option de canal channel sélectionnée.

Exemple :

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

Vous pouvez rechercher les packages disponibles ici : stable ou unstable.

Type : liste de packages

Par défaut : [ ]

chaîne

Canal nixpkgs à utiliser.

Ce canal définit le contenu de l'argument pkgs.

Type : chaîne (par exemple, "stable-24.11", "stable-25.05", "unstable")

Par défaut : "stable-24.11"

env

Variables d'environnement définies dans l'environnement de développement.

Elles sont propagées à tous vos shells et au serveur de prévisualisation. Les variables d'environnement peuvent être particulièrement utiles si votre application nécessite un ensemble spécifique de variables.

La valeur de chaque variable peut être une chaîne ou une liste de chaînes. Cette dernière est concaténée, entrecoupée de caractères deux-points.

PATH doit être une liste, car elle est toujours étendue et jamais complètement remplacée.

Exemple :

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

Type : ensemble d'attributs de ((liste de chaînes) ou autre)

Par défaut : { }

idx.extensions

Extensions de code que vous souhaitez installer dans votre espace de travail IDX.

Il s'agit d'une liste d'ID d'extension complets, par exemple ${publisherId}.${extensionId}.

Vous pouvez trouver une liste des extensions disponibles dans le registre Open VSX et les saisir dans votre dev.nix fichier par ${publisherId}.${extensionId}.

Type : liste de (chaîne non vide ou chemin d'accès)

Par défaut : [ ]

idx.previews.enable

Définissez cette valeur sur true pour activer les aperçus IDX.

Cette fonctionnalité permet d'exécuter et de recharger automatiquement vos applications pendant leur développement.

Type : booléen

Par défaut : true

Exemple : true

idx.previews.previews

Configurations d'aperçu.

Définissez les commandes qu'IDX exécute dans votre environnement de développement.

Exemple :

{pkgs, ...}: {
  idx.previews = {
    enable = true;
    previews = {
      web = {
        command = ["yes"];
        cwd = "subfolder";
        manager = "web";
        env = {
          HELLO = "world";
        };
      };
    };
  };
}

Type : ensemble d'attributs de (sous-module)

Par défaut : { }

idx.previews.previews.<name>.activity

Activité de lancement Android

Type : chaîne

Par défaut : ""

idx.previews.previews.<name>.command

Commande à exécuter

Type : liste de chaînes

Par défaut : [ ]

idx.previews.previews.<name>.cwd

Répertoire de travail

Type : chaîne

Par défaut : ""

idx.previews.previews.<name>.env

Variables d'environnement à définir.

Type : ensemble d'attributs de chaîne

Par défaut : { }

idx.previews.previews.<name>.manager

Responsable

Type : l'un des éléments suivants : "web", "flutter", "android", "gradle"

idx.workspace.onCreate

Commandes à exécuter lorsque l'espace de travail est créé et ouvert pour la première fois.

Cela peut être utile pour configurer l'environnement de développement. Par exemple, nous spécifions ici npm install à exécuter :

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

Type : ensemble d'attributs de (chemin d'accès ou chaîne ou ({ openFiles = [ string ];}))

Par défaut : { }

idx.workspace.onStart

Commandes à exécuter chaque fois que l'espace de travail est ouvert.

Cela peut être utile pour démarrer les observateurs de compilation. Par exemple, nous spécifions ici deux commandes à exécuter :

{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" ];
  };
}

Type : ensemble d'attributs de (chemin d'accès ou chaîne ou ({ openFiles = [ string ];}))

Par défaut : { }

importations

Vous pouvez étendre votre fichier dev.nix avec un fichier importé.

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

Vous pouvez importer un fichier .nix personnalisé dans dev.nix pour plusieurs raisons :

  1. Votre fichier dev.nix est volumineux et vous souhaitez le modulariser pour améliorer la maintenabilité.

    { pkgs, ... }: {
      channel = "stable-24.11";
      # ...
      imports = [
        ./env-cfg.nix
        ./preview-config.nix
      ];
    }
    
  2. Vous souhaitez configurer des options spécifiques à votre environnement local et ajouter le fichier à votre liste .gitignore.

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

Type : liste de chemins d'accès

Par défaut : [ ]

services

Services courants à activer lorsque l'espace de travail s'ouvre.

Par exemple, pour activer Postgres et utiliser l'extension pgvector, ajoutez les éléments suivants à dev.nix :

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

Les sections suivantes listent tous les services compatibles et leurs options configurables.

services.docker.enable

Indique si Docker sans racine doit être activé.

Type : booléen

Par défaut : false

Exemple : true

services.mongodb.enable

Indique si le serveur MongoDB doit être activé.

Type : booléen

Par défaut : false

Exemple : true

services.mongodb.package

Package MongoDB à utiliser.

Type : package

Par défaut : <derivation mongodb-6.0.11>

services.mongodb.port

Configure le port sur lequel Mongod écoutera.

Par défaut, le protocole TCP est désactivé et Mongod n'écoute que sur /tmp/mongodb/mongodb.sock.

Pour vous connecter, utilisez la chaîne de connexion mongodb://%2Ftmp%2Fmongodb%2Fmongodb.sock.

Type : entier non signé de 16 bits ; compris entre 0 et 65 535 (inclus)

Par défaut : 0

services.mysql.enable

Indique si le serveur MySQL doit être activé.

Le serveur est initialisé avec un utilisateur racine sans mot de passe. Pour créer des utilisateurs supplémentaires et des bases de données, utilisez mysql -u root.

Type : booléen

Par défaut : false

Exemple : true

services.mysql.package

Package MySQL à utiliser.

Type : package

Par défaut : pkgs.mysql

Exemple : pkgs.mysql80

services.postgres.enable

Indique si le serveur PostgreSQL doit être activé.

Type : booléen

Par défaut : false

Exemple : true

services.postgres.enableTcp

Indique si Postgres doit écouter sur le protocole TCP.

Type : booléen

Par défaut : true

Exemple : true

services.postgres.package

Package PostgreSQL à utiliser.

Type : package

Par défaut : pkgs.postgresql

Exemple : pkgs.postgresql_15

services.postgres.extensions

Extensions Postgres à installer.

Type : liste de (l'un des éléments suivants : "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")

Par défaut : [ ]

Exemple : [ "pgvector" "postgis" ];

services.pubsub.enable

Indique si l'émulateur Google Pub/Sub doit être activé.

Pour en savoir plus sur l'utilisation de l'émulateur, consultez la page https://cloud.google.com/pubsub/docs/emulator#using_the_emulator .

Type : booléen

Par défaut : false

Exemple : true

services.pubsub.port

Configure le port sur lequel Pub/Sub écoutera.

Type : entier non signé de 16 bits ; compris entre 0 et 65 535 (inclus)

Par défaut : 8085

services.pubsub.project-id

ID du projet à utiliser pour exécuter l'émulateur Pub/Sub. Ce projet est destiné aux tests uniquement. Il n'a pas besoin d'exister et n'est utilisé que localement.

Type : chaîne correspondant au modèle [a-z][a-z0-9-]{5,29}

Par défaut : "idx-pubsub-emulator"

services.redis.enable

Indique si le serveur Redis doit être activé.

Type : booléen

Par défaut : false

Exemple : true

services.redis.port

Configure le port sur lequel Redis écoutera.

Par défaut, le protocole TCP est désactivé et Redis n'écoute que sur /tmp/redis/redis.sock.

Type : entier non signé de 16 bits ; compris entre 0 et 65 535 (inclus)

Par défaut : 0

services.spanner.enable

Indique si l'émulateur Google Cloud Spanner doit être activé.

Type : booléen

Par défaut : false

Exemple : true

services.spanner.fault-injection

Indique si l'injection de défaillances aléatoires dans les transactions doit être activée.

Type : booléen

Par défaut : false

Exemple : true

services.spanner.grpc-port

Port TCP auquel l'émulateur doit être lié.

Type : entier non signé de 16 bits ; compris entre 0 et 65 535 (inclus)

Par défaut : 9010

services.spanner.rest-port

Port sur lequel les requêtes REST sont diffusées.

Type : entier non signé de 16 bits ; compris entre 0 et 65 535 (inclus)

Par défaut : 9020