Personnaliser votre espace de travail IDX

L'objectif de Project IDX est d'être aussi utile que possible pour les développeurs. IDX permet par exemple d'offrir aux développeurs la liberté et la flexibilité d'installer les bons outils pour n'importe quel projet dans leur espace de travail et de personnaliser les paramètres afin que leurs espaces de travail leur conviennent.

Nix + IDX

IDX définit la configuration de l'environnement de chaque espace de travail à l'aide de Nix. Nix est un gestionnaire de paquets purement fonctionnel et attribue des identifiants uniques à chaque dépendance, ce qui signifie au final que votre environnement peut contenir plusieurs versions de la même dépendance, de manière fluide. Elle est également reproductible et déclarative. Dans le contexte d'IDX, cela signifie que vous pouvez partager votre fichier de configuration Nix entre plusieurs espaces de travail afin de charger la même configuration d'environnement.

IDX définit les configurations de l'environnement d'aperçu et du package de l'espace de travail directement à partir du dépôt de code à l'aide du fichier .idx/dev.nix. Les attributs et les bibliothèques de packages que vous pouvez définir dans ce fichier respectent la syntaxe des ensembles d'attributs Nix.

L'exemple suivant présente une configuration d'environnement de base permettant d'activer les aperçus:

{ pkgs, ... }: {

  # Which nixpkgs channel to use.
  channel = "stable-23.11"; # or "unstable"

  # Use https://search.nixos.org/packages to find packages
  packages = [
    pkgs.nodejs_18
  ];

  # Sets environment variables in the workspace
  env = {
    SOME_ENV_VAR = "hello";
  };

  # Search for the extensions you want on https://open-vsx.org/ and use "publisher.id"
  idx.extensions = [
    "angular.ng-template"
  ];

  # Enable previews and customize configuration
  idx.previews = {
    enable = true;
    previews = {
      web = {
        command = [
          "npm"
          "run"
          "start"
          "--"
          "--port"
          "$PORT"
          "--host"
          "0.0.0.0"
          "--disable-host-check"
        ];
        manager = "web";
      };
    };
  };
}

Attributs Nix et bibliothèques de packages

colis

Packages à installer dans l'environnement.

Vous pouvez utiliser l'argument pkgs pour sélectionner des 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-23.11";
  packages = [pkgs.vim];
}

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

Type:liste des packages

Par défaut:[ ]

chaîne

nixpkgs.

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

Type : "stable-23.05", "stable-23.11", "unstable"

Par défaut:"stable-23.11"

env

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

Celles-ci sont propagées à tous vos shells et au serveur d'aperçu. Les variables d'environnement peuvent être particulièrement utiles si votre application nécessite un ensemble spécifique de variables.

Exemple :

{pkgs, ...}: {
  env = {
    HELLO = "world";
  };
}

Type:ensemble d'attributs de n'importe quel élément

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 trouverez une liste des extensions disponibles dans le répertoire Open VSX Registry (Ouvrir le registre VSX) et saisissez-les dans votre fichier dev.nix via ${publisherId}.${extensionId}.

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

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 d'actualiser automatiquement vos applications au fur et à mesure que vous les développez.

Type:booléen

Par défaut:true

Exemple : true

idx.previews.previews

Prévisualiser les configurations

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>.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

Chef

Type : "web" ou "flutter"

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, ici, nous spécifions npm install à exécuter:

{pkgs, ...}: {
  idx.workspace.
    npm-install = "npm install";
  };
}

Type:ensemble d'attributs de (chemin ou chaîne)

Par défaut:{ }

idx.workspace.onStart

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

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

{pkgs, ...}: {
  idx.workspace.
    npm-watch-fe = "npm run watch:frontend";
    npm-watch-be = "npm run watch:backend";
  };
}

Type:ensemble d'attributs de (chemin ou chaîne)

Par défaut:{ }

services.docker.enable

Activer ou non le mode Docker sans racine.

Type:booléen

Par défaut:false

Exemple : true

services.mysql.enable

Activer ou non le serveur MySQL.

Le serveur est initialisé avec une racine utilisateur sans mot de passe. Ainsi, pour créer des utilisateurs supplémentaires et créer 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

Permet d'activer ou non le serveur PostgreSQL.

Type:booléen

Par défaut:false

Exemple : true

services.postgres.package

le package PostgreSQL à utiliser.

Type:package

Par défaut:pkgs.postgresql

Exemple : pkgs.postgresql_15

services.postgres.extensions

Extensions Postgres à installer.

Type:

Par défaut:[ ]

Exemple : [ "pgvector" "postgis" ];

services.pubsub.enable

Permet d'activer ou non l'émulateur Google Pub/Sub.

Pour en savoir plus sur l'utilisation de l'émulateur, consultez cette 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é à des fins de test 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

Activer ou non le serveur Redis.

Type:booléen

Par défaut:false

Exemple : true

services.redis.port

Configure le port sur lequel Redis écoutera.

Par défaut, tcp est désactivé et Redis n'écoute que /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

Activer ou non l'émulateur Google Cloud Spanner.

Type:booléen

Par défaut:false

Exemple : true

services.spanner.fault-injection

Activer ou non l'injection aléatoire de pannes dans les transactions.

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