O que eu posso fazer?

  • Configurar ambientes de desenvolvimento e produção de forma automatizada e totalmente customizável sem ter que fazer gambiarras que não seriam automaticamente replicáveis quando for utilizar em uma outra máquina. (nix-shell, nix develop)

  • Executar programas sem ter que instala-los globalmente primeiro. (nix-shell, nix run, nix develop)

  • Executar o mesmo programa em versões diferentes sem que haja um conflito em relação ao local de instalação dos mesmos.

  • Definir diretamente nos scripts as dependências destes que serão baixadas logo antes de executar os scripts. (shebang do nix-shell)

  • Virtualização de programas apenas se o usuário desejar. Containers e VMs são virtualizados por via de regra, mesmo que containers não virtualizem o hardware. (tudo pode ser executado diretamente)

  • Aproveitar dependências comuns entre programas sem gerar duplicidade de exatamente a mesma coisa. (derivações podem ter dependências em comum)

  • Deduplicação a nível de arquivo dos arquivos gerados e baixados pelo Nix. (nix-store --optimize)

  • Replicação de coisas repetitivas em configurações se baseando em alguma outra coisa (exemplo do módulo do espanso)

  • Distribuição Linux que pode ser totalmente declarativa, sem precisar refazer os passos da configuração em uma nova máquina. (NixOS)

  • Wrappers customizados de programas já trazendo plugins e configuração. (nix-vscode, Neovim lucasew)

  • Compilar o Android do seu celular. (robotnix)

  • Transformar basicamente qualquer tipo de arquivo em qualquer outro tipo contanto que obedeça a lei da derivação