---
title: >
  Docker or Nix?
pubDate: 2023-07-02
permalink: >-
  daily/2023/07/02/docker-or-nix
tags:
  - docker
  - 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:

```nix
{
  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.