I just switched one of my systems over to NixOS from Arch and so far it seems interesting. One question I had is regarding the nix-shell. So I get the basic concept of it and that it allows creating a shell that has packages installed with that shell making ideal for dev environments. I’ve even seen talks where the suggest nix-shells over docker/podman, my question is how is persistent data (like databases) handled?
In general Nix doesn’t manage persistent data. It will be stored in whatever location the tool writes it to.
nix-shell
is a very simple program. Basically it downloads/builds the package you have configured, then sets up environment variables likePATH
to include that package. It would be similar to downloading a pre-built tarball run running./foo
inside of that.For most built-in modules this will be
/var/lib/foo
for a servicefoo
. If you runnix-shell
the service will write data wherever it would normally write data on any other distribution.Okay, that’s good to know. I just wanted to make sure that if I had something like MariaDB or Postgres get installed with
nix-shell
that I wouldn’t lose everything thus having to set everything back up next time I start the shell again.No, you won’t lose anything. However do be aware that unless you specifically configure different data directories using the same DBMS in multiple projects will use the same underlying data files.
Typically this won’t be a problem, and you can just create different logical databases if necessary.