A Nova Interface de Linha de Comando
Após habilitar os recursos nix-command
e flakes
, você pode começar a usar as ferramentas de linha de comando da nova geração do Nix fornecidas por New Nix Commands. Nesta seção, vamos focar em dois comandos: nix shell
e nix run
. Outros comandos importantes, como o nix build
, serão discutidos em detalhes em nix develop
e pkgs.mkShell
nix shell
O comando nix shell
permite que você entre em um ambiente com o pacote Nix especificado e abra um shell interativo dentro desse ambiente:
# hello não está disponível
› hello
hello: comando não encontrado
# Entre em um ambiente com os pacotes 'hello' e `cowsay`
› nix shell nixpkgs#hello nixpkgs#cowsay
# hello agora está disponível
› hello
Hello, world!
# cowsay também está disponível
› cowsay "Hello, world!"
_______
< hello >
-------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
nix run
Por outro lado, o nix run
cria um ambiente com o pacote Nix especificado e executa esse pacote diretamente dentro do ambiente (sem instalá-lo no ambiente do sistema):
# hello não está disponível
› hello
hello: comando não encontrado
# Crie um ambiente com o pacote 'hello' e o execute.
› nix run nixpkgs#hello
Hello, world!
Como o nix run
executa o pacote Nix diretamente, o pacote especificado como argumento deve gerar um programa executável.
De acordo com a documentação do nix run --help
, o nix run
executa o comando <out>/bin/<name>
, onde <out>
ié o diretório raiz da derivation e <name>
é selecionado na seguinte ordem:
- O atributo
meta.mainProgram
da derivation. - O atributo
pname
da derivation. - O conteúdo do atributo
name
da derivation com o número da versão removido.
Por exemplo, no caso do pacote 'hello' que testamos anteriormente, o nix run na verdade executa o programa $out/bin/hello
.
Aqui estão mais dois exemplos com explicações detalhadas dos parâmetros relevantes:
# Explicação do comando:
# `nixpkgs#ponysay` significa o pacote 'ponysay' no flake 'nixpkgs'.
# `nixpkgs` é um ID do registro de flakes, e o Nix encontrará o endereço do repositório correspondente no GitHub a partir de <https://github.com/NixOS/flake-registry/blob/master/flake-registry.json>.
# Portanto, este comando cria um novo ambiente, instala e executa o pacote 'ponysay' fornecido pelo flake 'nixpkgs'.
# Observação: Foi mencionado anteriormente que um pacote Nix é uma das saídas de um flake.
echo "Hello Nix" | nix run "nixpkgs#ponysay"
# Este comando tem o mesmo efeito que o anterior, mas usa a URI completa do flake em vez do ID do registro de flakes.
echo "Hello Nix" | nix run "github:NixOS/nixpkgs/nixos-unstable#ponysay"
Casos de Uso Comuns para nix run
e nix shell
Esses comandos são comumente usados para executar programas de forma temporária. Por exemplo, se eu quiser clonar meu repositório de configuração usando o Git em um novo host NixOS sem ter o Git instalado, posso usar o seguinte comando:
nix run nixpkgs#git clone git@github.com:ryan4yin/nix-config.git
Como alternativa, posso usar o nix shell
para entrar em um ambiente com o Git e, em seguida, executar o comando git clone
:
nix shell nixpkgs#git
git clone git@github.com:ryan4yin/nix-config.git