Nix

Konec dependenci-hell! Nix je balíčkovací systém, který umožňuje instalovat a spravovat software izolovaně od zbytku systému. To znamená, že můžete mít různé verze stejného programu nainstalované současně, aniž by se navzájem ovlivňovaly.

Stejně jako lze pro Python použít venv nebo conda, pro Node.js nvm, pro Ruby rvm a pro Go gvm, tak Nix umožňuje spravovat balíčky a jejich závislosti pro různé jazyky a nástroje.

Jeho výhoda o proti výše zmíněným nástrojům je, že Nix je univerzální a umožňuje spravovat balíčky pro různé jazyky a nástroje, což z něj činí velmi užitečný nástroj pro vývojáře, kteří pracují s různými technologiemi a zároveň nechtějí zaplevelit svůj systém různými verzemi balíčků a závislostí.

Jedno z jeho použití je nix-shell, který umožňuje spustit shell s izolovaným prostředím, kde jsou dostupné pouze balíčky a závislosti, které jste specifikovali. Stačí k tomu vytvořit soubor shell.nix s definicí balíčků, a je jedno zda jde o Python, Node.js, Ruby, Go, APT nebo cokoliv jiného. Nix se postará o to, aby byly všechny závislosti správně nainstalovány a dostupné v izolovaném prostředí.

Instalace Nixu

sudo apt install nix-bin
sudo usermod -aG nix-users $USER
newgrp nix-users
sudo systemctl start nix-daemon
nix-channel --add https://nixos.org/channels/nixpkgs-unstable nixpkgs
nix-channel --update

Snad poslední balíček, které pro vývoj instaluji růčo.

Demostrace použití Nixu pro instalaci yt-dlp a jeho závislostí

Github: Nix_yt-dlp

Soubor popisující závislosti a prostředí pro yt-dlp v Nixu může vypadat například takto:

# shell.nix
# Define isolated environment with required tools
{ pkgs ? import <nixpkgs> {} }:

pkgs.mkShell {
  # These packages will be available only inside the nix-shell
  buildInputs = [
    pkgs.yt-dlp
    pkgs.ffmpeg
    pkgs.nodejs_22
    pkgs.gnumake
    pkgs.gawk
  ];

  # Hook executed immediately after entering the shell
  shellHook = ''
    echo "========================================"
    echo "Environment is ready."
    echo "yt-dlp version: $(yt-dlp --version)"
    echo "Node.js version: $(node --version)"
    echo "========================================"
    echo "Run 'make' to start parallel downloads."
  '';
}

Nyní ve stejném adresáři stačí spustit:

nix-shell

Nix chvíli zachroustá, stáhne a nainstaluje všechny závislosti a spustí shell s izolovaným prostředím.

A bash vás pak pozdraví například s:

========================================
Environment is ready.
yt-dlp version: 2026.08.19
Node.js version: v22.23.3
========================================
Run 'make' to start parallel downloads.

Pro opuštění prostředí použijte příkaz exit.