Docker or Nix?

I've been a Nix user for about a year, starting with its package manager on my previously installed Linux distribution.

I started to use Home Manager for my user configuration and dotfiles and later switched to the NixOS operating system.

Using Nix for software development

I've also been using Nix Flakes for per-project configuration.

A Flake file is a simple file written in the Nix language that defines the project's dependencies and installs them from the Nix package manager.

Here is an example Flake for a PHP CLI application:

{
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";

outputs = inputs@{ flake-parts, ... }:
flake-parts.lib.mkFlake { inherit inputs; } {
systems = [ "x86_64-linux" ];

perSystem = { config, self', inputs', pkgs, system, ... }: {
devShells = {
default = pkgs.mkShell {
buildInputs = with pkgs; [ php82 php82Packages.composer ];
};
};
};
};
}

It declares that PHP 8.2 and Composer are available, even if I have different versions installed globally.

Will Nix replace Docker?

Nix and Flakes have replaced Docker for me on some projects.

If I have a simple setup and need a specific version of PHP or Node and some additional programs, I can get those from the Flake.

I don't know if it'll replace Docker for me completely and work on more complex projects, but it's working well for me where I'm using it.