Aller au contenu
Développement medium

Flox : Simplifiez vos environnements dev

15 min de lecture

logo flox

Quand on parle de gestion d’environnements de développement, des outils comme direnv et asdf reviennent souvent dans la discussion. Ce sont des solutions puissantes pour activer des configurations spécifiques à un dossier ou pour gérer différentes versions de langages. Cependant, à mon avis, asdf présente des limites importantes quand on s’attaque à des projets complexes.

Certes, asdf permet de gérer plusieurs versions d’un langage comme Python ou Node.js, mais il ne va pas au-delà de ça. Par exemple, il ne prend pas en charge les dépendances système ou les bibliothèques spécifiques nécessaires à un projet donné. Si votre application a besoin d’un outil système comme PostgreSQL ou d’une version spécifique d’un compilateur, asdf ne peut pas le gérer.

C’est là que Flox fait toute la différence. Non seulement il gère les versions des langages, mais il garantit également un environnement complet, incluant tous les outils et dépendances nécessaires. Associé à direnv, Flox automatise non seulement l’activation des environnements, mais assure aussi leur cohérence et reproductibilité, peu importe la machine. À mon avis, cette approche est bien plus adaptée aux défis actuels des développeurs.

Nix est reconnu pour sa capacité à créer des environnements reproductibles grâce à une gestion fonctionnelle des paquets. Cependant, sa complexité peut être un obstacle pour les nouveaux utilisateurs. Flox intervient en encapsulant les fonctionnalités de Nix, permettant aux développeurs de définir leurs environnements sans avoir à maîtriser le langage fonctionnel de Nix.

Avec Flox, la configuration d’un environnement se fait via un fichier manifeste au format TOML. Ce fichier liste les composants requis, les variables d’environnement à définir et les commandes à exécuter. L’utilisateur n’a pas besoin de spécifier les versions des paquets ou les architectures, car Flox gère ces détails automatiquement, assurant ainsi une configuration cohérente et reproductible sur différentes machines.

En complément de l’outil en ligne de commande, Flox propose FloxHub, une plateforme en ligne similaire à GitHub, dédiée au partage et à la gestion des environnements. Les développeurs peuvent y télécharger leurs définitions d’environnements, les gérer et les déployer sur diverses machines. Les commandes pour interagir avec FloxHub sont conçues pour être familières aux utilisateurs de Git, facilitant ainsi leur adoption.

L’utilisation de Flox présente plusieurs avantages :

  • Simplicité : En masquant la complexité de Nix, Flox permet aux développeurs de se concentrer sur leurs projets sans se soucier des détails techniques de la gestion des paquets.
  • Reproductibilité : Les environnements définis avec Flox sont cohérents et peuvent être reproduits fidèlement sur différentes machines, réduisant ainsi les problèmes liés aux configurations divergentes.
  • Flexibilité : Grâce à l’intégration avec Nixpkgs, Flox offre accès à un vaste référentiel de plus de 80 000 paquets, couvrant une large gamme de besoins.

En résumé, Flox facilite la création et la gestion d’environnements de développement en offrant une interface simplifiée tout en tirant parti de la robustesse de Nix, rendant ainsi les workflows des développeurs plus efficaces et fiables.

Flox est un outil puissant qui facilite la gestion des environnements de développement. Voici comment l’installer sur différents systèmes, y compris sous Windows via WSL2.

Avant de commencer, assurez-vous que votre système dispose d’au moins 4 Go de mémoire et de 8 Go d’espace de stockage pour une installation fluide de Flox.

  1. Téléchargement du package :

    • Pour les systèmes 64 bits Intel/AMD :

      Fenêtre de terminal
      wget https://downloads.flox.dev/by-env/stable/deb/flox_1.3.8_amd64.deb
    • Pour les systèmes 64 bits ARM :

      Fenêtre de terminal
      wget https://downloads.flox.dev/by-env/stable/deb/flox_1.3.8_arm64.deb
  2. Installation du package :

    Fenêtre de terminal
    sudo dpkg -i flox_1.3.8_*.deb
  3. Vérification de l’installation :

    Fenêtre de terminal
    flox --version

    Vous devriez voir une sortie indiquant la version de Flox installée, par exemple 1.3.8.

  1. Téléchargement du package :

    • Pour les systèmes 64 bits Intel/AMD :

      Fenêtre de terminal
      wget https://downloads.flox.dev/by-env/stable/rpm/flox-1.3.8-1.x86_64.rpm
    • Pour les systèmes 64 bits ARM :

      Fenêtre de terminal
      wget https://downloads.flox.dev/by-env/stable/rpm/flox-1.3.8-1.aarch64.rpm
  2. Importation de la clé GPG :

    Fenêtre de terminal
    sudo rpm --import https://downloads.flox.dev/by-env/stable/rpm/flox-archive-keyring.asc
  3. Installation du package :

    Fenêtre de terminal
    sudo rpm -ivh flox-1.3.8-1.*.rpm
  4. Vérification de l’installation :

    Fenêtre de terminal
    flox --version

    Vous devriez voir une sortie indiquant la version de Flox installée, par exemple 1.3.8.

  1. Téléchargement de l’installateur :
  2. Installation :
    • Double-cliquez sur le fichier téléchargé et suivez les instructions à l’écran.
  3. Vérification de l’installation :
    • Ouvrez un terminal et exécutez :

      Fenêtre de terminal
      flox --version

      Vous devriez voir une sortie indiquant la version de Flox installée, par exemple 1.3.8.

Flox peut être utilisé sous Windows en configurant le Windows Subsystem for Linux 2 (WSL2).

  1. Configuration de WSL2 :

    • Suivez les instructions de Microsoft pour installer WSL2 et choisissez une distribution Linux, comme Ubuntu.
  2. Installation de Flox dans WSL2 :

    • Ouvrez votre terminal WSL et suivez les étapes d’installation pour Debian/Ubuntu ou RedHat/CentOS, selon votre distribution.
  3. Configuration du démarrage automatique du service Nix :

    Fenêtre de terminal
    sudo systemctl enable nix-daemon --now
    • Redémarrez votre terminal WSL pour appliquer les modifications.
  4. Vérification de l’installation :

    Fenêtre de terminal
    flox --version

    Vous devriez voir une sortie indiquant la version de Flox installée, par exemple 1.3.9.

Pour mettre à jour Flox vers la dernière version, exécutez les commandes suivantes en fonction de votre système :

  • Debian/Ubuntu :

    Fenêtre de terminal
    sudo apt update
    sudo apt --only-upgrade install flox

    Si vous ne maitrisez pas le gestionnaire de paquets apt, je vous recommande de lire mon guide sur apt pour mieux comprendre son fonctionnement.

  • RedHat/CentOS :

    Fenêtre de terminal
    sudo yum update flox
  • macOS (Homebrew) :

    Fenêtre de terminal
    brew upgrade flox

Flox facilite la configuration d’environnements de développement reproductibles et portables. Voici comment créer et gérer un environnement pour votre projet.

Commencez par naviguer vers le répertoire de votre projet ou créez-en un nouveau :

Fenêtre de terminal
mkdir mon-projet && cd mon-projet

Initialisez ensuite l’environnement Flox :

Fenêtre de terminal
flox init
Environnement 'mon-projet' créé

Cette commande génère un répertoire .flox contenant la configuration déclarative de l’environnement, idéale pour le contrôle de version.

Pour ajouter des dépendances, utilisez flox search pour trouver le paquet souhaité, puis flox install pour l’installer. Par exemple, pour installer Node.js :

Fenêtre de terminal
flox search python3
python3 High-level dynamically-typed programming language

Pour voir des versions spécifiques, utilisez la commande suivante :

Fenêtre de terminal
flox show python3
python3@3.12.8
python3@3.12.7
python3@3.12.6
python3@3.12.5
python3@3.12.4
python3@3.11.9
python3@3.11.8
python3@3.11.7
python3@3.11.6
python3@3.11.5
python3@3.10.12
python3@3.10.11
python3@3.10.10
python3@3.10.9
python3@3.10.8
python3@3.10.7
python3@3.10.6
python3@3.10.5
python3@3.9.13
python3@3.9.12
python3@3.9.11
python3@3.9.10
python3@3.9.9
python3@3.9.6
python3@3.9.5
python3@3.8.9
python3@3.8.8 (aarch64-linux, x86_64-darwin, x86_64-linux only)
python3@3.8.7 (aarch64-linux, x86_64-darwin, x86_64-linux only)
python3@3.8.6 (aarch64-linux, x86_64-darwin, x86_64-linux only)

Vous pouvez ensuite installer la version souhaitée :

Fenêtre de terminal
flox install python3@3.12.8
'python3' installed to environment 'mon-projet'

Flox propose plus de 80 000 paquets open source et sous licence.

Pour activer l’environnement et accéder aux paquets installés :

Fenêtre de terminal
flox activate
flox [mon-projet] $

Votre invite de commande indiquera que vous êtes dans l’environnement Flox.

Vous pouvez personnaliser l’environnement en modifiant le fichier manifest.toml avec flox edit. Par exemple, pour ajouter une variable d’environnement ou un script d’activation :

Fenêtre de terminal
flox edit

Ajoutez dans le fichier :

[vars]
MESSAGE = "Bienvenue dans mon-projet"
[hook]
on-activate = '''
echo $MESSAGE
'''

Désormais, à chaque activation, le message s’affichera.

Pour quitter l’environnement actif :

Fenêtre de terminal
exit

Vous reviendrez à votre shell initial.

En suivant ces étapes, vous pouvez créer des environnements Flox adaptés à vos projets, garantissant une configuration cohérente et reproductible sur différentes machines.

L’intégration de direnv avec Flox est un excellent moyen d’automatiser l’activation et la désactivation des environnements de développement. Cela vous permet de simplifier vos workflows et de vous concentrer sur le développement sans avoir à configurer manuellement vos environnements chaque fois que vous changez de dossier. Voici comment configurer direnv pour fonctionner avec Flox.

Si vous souhaitez que direnv soit toujours disponible, ajoutez-le à un environnement Flox par défaut.

  1. Créer l’environnement par défaut :
Fenêtre de terminal
flox init -d $HOME

Cela crée un environnement nommé default. Activez-le ensuite :

Fenêtre de terminal
flox activate

Votre shell indiquera que vous utilisez maintenant l’environnement default.

  1. Modifier la configuration pour inclure direnv : Ouvrez le fichier de configuration de l’environnement default :

    Fenêtre de terminal
    flox edit -d $HOME

    Ajoutez-y les lignes suivantes dans les sections correspondantes pour inclure direnv :

    [install]
    direnv.pkg-path = "direnv"
    [profile]
    zsh = """
    eval "$(direnv hook zsh)"
    """
    bash = """
    eval "$(direnv hook bash)"
    """
    fish = """
    direnv hook fish | source
    """
    tcsh = """
    eval `direnv hook tcsh`
    """
  2. Activer automatiquement l’environnement au démarrage : Ajoutez cette ligne à votre fichier ~/.profile (ou ~/.zprofile pour Zsh) :

    Fenêtre de terminal
    eval "$(flox activate -d $HOME)"
  3. Télécharger l’extension Flox pour direnv : Installez le plugin flox-direnv pour intégrer Flox et direnv :

    Fenêtre de terminal
    mkdir -p "${HOME}/.config/direnv/lib/"
    curl -o "${HOME}/.config/direnv/lib/flox-direnv.sh" \
    "https://raw.githubusercontent.com/flox/flox-direnv/v1.1.0/direnv.rc"
  4. Supprimer l’affichage de l’environnement par défaut dans le prompt (facultatif) : Si vous préférez un prompt plus épuré, configurez Flox pour masquer l’indicateur d’environnement par défaut :

    Fenêtre de terminal
    flox config --set shell_prompt hide-default

    Redémarrez votre shell avec :

    Fenêtre de terminal
    source ~/.profile

Configurer un Environnement Flox avec Auto-Activation

Section intitulée « Configurer un Environnement Flox avec Auto-Activation »
  1. Créer un environnement Flox : Allez dans le répertoire de votre projet et initialisez un nouvel environnement :

    Fenêtre de terminal
    mkdir -p envirotron/env1 && cd envirotron/env1
    flox init
    flox install fortune-kind cowsay
  2. Configurer l’auto-activation avec direnv : Ajoutez la ligne suivante dans un fichier .envrc dans le répertoire :

    Fenêtre de terminal
    echo 'use flox' > .envrc
  3. Autoriser direnv à utiliser l’environnement : Par mesure de sécurité, direnv bloque automatiquement l’utilisation des fichiers .envrc jusqu’à ce qu’ils soient explicitement approuvés. Pour autoriser cet environnement :

    Fenêtre de terminal
    direnv allow

    Une fois fait, votre prompt affichera que l’environnement est activé :

    Fenêtre de terminal
    flox [env1 default] %
  4. Tester les outils dans l’environnement : Par exemple, exécutez :

    Fenêtre de terminal
    fortune-kind | cowsay
  5. Désactiver l’environnement : Dès que vous sortez du dossier (cd ..), l’environnement est automatiquement désactivé.

Pour un environnement Flox existant (par exemple, un projet Jupyter), ajoutez simplement un .envrc :

Fenêtre de terminal
echo 'use flox' > .envrc && direnv allow

L’intégration entre Flox et direnv supprime les frictions dans la gestion des environnements. Avec Flox, tout devient automatisé, reproductible et propre. Vous pouvez basculer entre différents environnements en toute transparence et garantir que chaque projet dispose exactement des outils et dépendances dont il a besoin.

Flox se positionne comme un outil incontournable pour simplifier et automatiser la gestion des environnements de développement. Sa capacité à créer des environnements reproductibles, à intégrer des outils comme direnv et à centraliser les configurations en fait un allié précieux pour les développeurs. Grâce à des commandes intuitives et à une approche déclarative, Flox réduit les frictions et optimise les workflows.

Cependant, tout n’est pas parfait. Flox, bien qu’impressionnant, présente encore des limites. Par exemple, certains utilisateurs ont signalé des problèmes avec l’installation de paquets spécifiques, tels que Terraform, qui est pourtant un outil important dans de nombreux environnements DevOps. Ces problèmes peuvent être liés à des dépendances manquantes ou à une compatibilité limitée avec certaines versions des paquets. J’ai fini par réussir à trouver une version qui s’installait correctement, mais cela a pris un certain temps.

Ces lacunes montrent que, bien que Flox soit une solution puissante, il n’est pas encore entièrement mature pour répondre à tous les besoins des développeurs. Cela peut obliger à recourir temporairement à des solutions alternatives pour certains outils critiques.

À mon avis, Flox reste un outil prometteur, mais il doit encore progresser pour couvrir pleinement l’ensemble des cas d’utilisation. Si vous êtes prêt à composer avec ces limitations, il vous offrira une expérience globalement fluide et agréable. Et, avec sa communauté active et des mises à jour régulières, il y a fort à parier que ces soucis seront corrigés à l’avenir.