A primeira opção é usar o bundix . Ele usa um arquivo de substituição global para injetar dependências do sistema: link
As gemas mais importantes devem ser encontradas lá, incluindo o ffi gem, que você está tentando instalar.
Se você não quiser / pode usar o bundix, a alternativa é um nix-shell que fornece o ambiente de criação correto.
Para o ffi gem você também pode emprestar o código da gem-config do nixpkgs:
with import <nixpkgs> {};
stdenv.mkDerivation {
name = "env";
buildInputs = [
ffi pkgconfig
];
}
Em seguida, basta executar nix-shell
no projeto. Esta etapa também pode ser automatizada usando o suporte nix do direnv.
A instalação de ffi
via nix-env
não funciona porque ela não define a variável NIX_CFLAGS_COMPILE
e NIX_LDFLAGS
que é necessária para que a ffi gem encontre o cabeçalho / as bibliotecas corretas durante a compilação.