Mettre en place un environnement IA local avec Ollama et Claude Code sur NixOS

Ollama+Claude Code+Flake

Pourquoi construire un environnement IA local ?

Depuis quelques mois, les assistants IA ne sont plus réservés aux plateformes cloud.

Entre les modèles locaux pilotés par Ollama et les outils de développement augmentés comme Claude Code, il devient possible de construire un environnement de travail moderne, reproductible et parfaitement intégré à Nixos.

Le problème, c’est que l’empilement technique devient rapidement fragile :

  • une version de Node.js incompatible ;
  • un npm global qui casse après une mise Ă  jour ;
  • des dĂ©pendances qui divergent d’une machine Ă  l’autre ;
  • des outils IA installĂ©s Ă  moitiĂ© dans le système et Ă  moitiĂ© dans le home utilisateur.

C’est précisément là que NixOS change complètement l’expérience.

Avec un simple flake.nix, il devient possible de décrire un environnement de développement complet, reproductible et portable.

Dans cet article, nous allons mettre en place :

  • Client Ollama pour exĂ©cuter des modèles locaux ;
  • Claude Code comme assistant de dĂ©veloppement ;
  • un shell Nix moderne compatible NixOS 25.11.

Le principe : un environnement entièrement déclaratif et reproductif

La base

1
flake.nix

Ce fichier permettra :

  • d’installer automatiquement les bons paquets ;
  • d’obtenir les mĂŞmes versions sur toutes les machines ;
  • d’éviter les conflits entre projets ;
  • de reconstruire l’environnement en quelques secondes.

C’est l’un des grands avantages de NixOS : l’environnement devient du code.

La structure du flake

Voici une version compatible avec NixOS 25.11.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
{
description = "Environnement Ollama + Claude Code";

inputs = {
  nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";
  flake-utils.url = "github:numtide/flake-utils";
};

outputs = { self, nixpkgs, flake-utils }:
  flake-utils.lib.eachDefaultSystem (system:
    let
      pkgs = import nixpkgs {
      inherit system;
      config.allowUnfree = true;
    };
  in {
    devShells.default = pkgs.mkShell {
    packages = with pkgs; [
      ollama
      nodejs_24
      claude-code
    ];

    shellHook = ''
      echo "🚀 Environnement Ollama + Claude Code"
      export OLLAMA_HOST="http://localhost:11434"
    '';
    };
  }
 );
}

Pourquoi utiliser nodejs_24 ?

Avant NixOS 25.11, beaucoup de projets utilisaient encore :

1
pkgs.nodePackages.npm

Le problème est que tout le namespace nodePackages a été supprimé dans les versions récentes de nixpkgs.

La bonne pratique consiste désormais à utiliser directement une version explicite de Node.js :

1
nodejs_24

Cela fournit automatiquement :

  • node
  • npm
  • npx

sans dépendre des anciens wrappers nodePackages.

Pourquoi installer Claude Code via Nix ?

Beaucoup de tutoriels recommandent encore :

1
npm install -g @anthropic-ai/claude-code

Techniquement, cela fonctionne, mais dans une logique NixOS, cette approche casse plusieurs principes importants :

  • npm va essayer d'Ă©crire dans /nix/store
  • l’installation n’est plus dĂ©clarative ;
  • le binaire dĂ©pend du profil utilisateur ;
  • les versions deviennent difficiles Ă  reproduire ;
  • les mises Ă  jour peuvent casser silencieusement l’environnement.

L’approche ici consiste donc à utiliser directement le paquet :

1
claude-code

Le paquet étant marqué unfree, il faut activer explicitement :

1
config.allowUnfree = true;

Démarrer l’environnement

Une fois le fichier créé, il suffit d’exécuter :

1
nix develop

Le shell charge automatiquement :

  • Ollama ;
  • Node.js ;
  • Claude Code ;
  • les variables d’environnement.

Ollama étant déjà installé avec open-webui pour d'autres usages, il me reste simplement à lancer Claude Code :

1
claude

Pourquoi cette approche devient incontournable

L’écosystème IA évolue extrêmement vite.

Les dépendances changent constamment. Les versions de Node.js deviennent incompatibles. Les wrappers npm globaux cassent régulièrement.

Avec NixOS, on verrouille complètement l’environnement.

Aller plus loin

Une fois cette base fonctionnelle, plusieurs extensions deviennent intéressantes :

intégrer direnv pour charger automatiquement le shell

Ici il suffit d'ajouter un fichier flake.nix Ă  la racine du projet :

1
nix flake

Autoriser le chargement automatique du flake :

1
direnv allow

Vous pouvez ajouter :

ajouter CUDA pour l’accélération GPU (mais moi j'ai pas);

empaqueter des modèles Ollama spécifiques ;

construire des environnements totalement hermétiques par projet.

Alexandre

Généré avec Hugo
Thème Stack conçu par Jimmy