# Profiles

Les profiles sont là pour isoler la configuration de chaque utilisateur·ice et permettre de revenir en arrière à tout moment. Chaque profile (et chaque *génération* de ce profile est un raccourcis vers `/nix/var/nix/profiles/`.

A chaque changement dans l'environement de l'utilisateur·ice (avec `nix-env` par exemple), une nouvelle génération est crée depuis la précédente. 

[![](https://books.snowcode.ovh/uploads/images/gallery/2023-07/scaled-1680-/image-1689011925965.png)](https://books.snowcode.ovh/uploads/images/gallery/2023-07/image-1689011925965.png)

Pour illustrer tout ceci, voici ce qu'il se passe lorsque Carol installe Svn :

1. La dérivation est installée dans le Nix store (soit en la compilant soit en la téléchargeant depuis le cache)
2. Une nouvelle dérivation est crée depuis la génération précédente de Carol, dans cette nouvelle dérivation `svn` est lié dans un dossier `bin` (pour imiter la structure des fichiers de Linux)
3. Cette nouvelle dérivation est liée dans le dossier `/nix/var/nix/profiles` comme une nouvelle dérivation de Carol (par exemple `carol-24-link`)
4. Cette nouvelle dérivation est liée dans le profile de carol (`carol`)
5. Enfin le profile de carol est liée dans son dossier `~/.nix-profile`
6. Enfin tous les fichiers dans `~/.nix-profile/bin` sont ajouté à son `$PATH` pour être accessible à Carol. Carol peut maintenant utiliser Svn.

Maintenant lorsque Carol veut rollback vers sa génération précédente, il suffit simplement de remplacer le lien de `carol` vers `carol-23-link` à la place de `carol-24-link`. 

Ainsi faire un rollback se fait en une seule opération. Par contre ce système à le désavantage de prendre beaucoup de place car rien n'est supprimé. Dans la page suivante, nous allons voir comment le "garbage collector" fonctionne pour pouvoir faire de la place.