любой nix, из shell.nix берется выражение для nix-shell если не указано другое, если нет shell.nix то смотрит в default.nix. nix-build смотрит на default.nix сразу
в общем тянешь сорцы, fetchgit, fetchFromGitHub или еще как. и вызываешь pkgs.haskellPackages.callCabal2nix. оно сделает derivation из кабала в сорцах и callPackage на него натравит
[qnikst@nixos:~/workspace/myself/ih]$ nix-shell error: attempt to call something which is not a function but a set, at /home/qnikst/workspace/myself/ih/shell.nix:9:1