NixOS com Flakes Habilitados
Comparado ao método de configuração padrão atualmente usado no NixOS, os Flakes oferecem melhor reprodutibilidade. Sua clara definição de estrutura de pacotes suporta inerentemente dependências de outros repositórios Git, facilitando o compartilhamento de código. Portanto, este livro sugere o uso de Flakes para gerenciar as configurações do sistema.
Esta seção descreve como usar Flakes para gerenciar a configuração do sistema NixOS, e você não precisa saber nada sobre Flakes com antecedência.
Habilitando o Suporte a Flakes para NixOS
Atualmente, Flakes ainda é uma funcionalidade experimental e não está habilitada por padrão. Precisamos modificar manualmente o arquivo /etc/nixos/configuration.nix
para habilitar a funcionalidade Flakes e a nova ferramenta de linha de comando Nix que a acompanha:
{ config, pkgs, ... }:
{
imports = [
# Incluir os resultados da análise de hardware.
./hardware-configuration.nix
];
# ......
# Habilitar a funcionalidade Flakes e a nova ferramenta de linha de comando Nix
nix.settings.experimental-features = [ "nix-command" "flakes" ];
environment.systemPackages = with pkgs; [
# Flakes clona suas dependências através do comando git,
# então o git deve ser instalado primeiro
git
vim
wget
];
# Definir o editor padrão como vim
environment.variables.EDITOR = "vim";
# ......
}
Após fazer essas alterações, execute sudo nixos-rebuild switch
para aplicar as modificações. Em seguida, você pode usar a funcionalidade Flakes para gerenciar a configuração do seu sistema.
A nova ferramenta de linha de comando Nix também oferece algumas funcionalidades convenientes. Por exemplo, agora você pode usar o comando nix repl
para abrir um ambiente interativo Nix. Se estiver interessado, você pode usá-lo para revisar e testar toda a sintaxe Nix que aprendeu anteriormente.
Alternando a Configuração do Sistema para flake.nix
Após habilitar a funcionalidade Flakes, o comando sudo nixos-rebuild switch
dará prioridade à leitura do arquivo /etc/nixos/flake.nix
, e, se não o encontrar, tentará usar o /etc/nixos/configuration.nix
.
Você pode começar usando os modelos oficiais para aprender a escrever um flake. Primeiro, verifique quais modelos estão disponíveis:
nix flake show templates
Entre eles, o modelo templates#full
demonstra todos os usos possíveis. Dê uma olhada em seu conteúdo:
nix flake init -t templates#full
cat flake.nix
Com base neste modelo, crie o arquivo /etc/nixos/flake.nix
e escreva o conteúdo da configuração. Todas as modificações subsequentes do sistema serão gerenciadas pelos Nix Flakes. Aqui está um exemplo do conteúdo:
{
description = "Um flake simples para NixOS";
inputs = {
# Fonte oficial de pacotes NixOS, usando o ramo nixos-25.05 aqui
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.05";
};
outputs = { self, nixpkgs, ... }@inputs: {
# Por favor, substitua my-nixos pelo seu nome de host
nixosConfigurations.my-nixos = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
# Importar o configuration.nix anterior que usamos,
# para que o antigo arquivo de configuração ainda tenha efeito
./configuration.nix
];
};
};
}
Aqui definimos um sistema chamado my-nixos
, com seu arquivo de configuração localizado em /etc/nixos/
como ./configuration.nix
. Isso significa que ainda estamos usando a configuração antiga.
Agora, quando você executa sudo nixos-rebuild switch
para aplicar a configuração, o sistema não deve mudar em nada, pois simplesmente mudamos para usar os Nix Flakes, e o conteúdo da configuração permanece consistente com o anterior.
Se o nome do seu host não for
my-nixos
, você precisa modificar o nome denixosConfigurations
emflake.nix
, ou usar--flake /etc/nixos#my-nixos
para especificar o nome da configuração.
Após a mudança, podemos gerenciar o sistema através da funcionalidade Flakes.
Atualmente, nosso flake inclui estes arquivos:
/etc/nixos/flake.nix
: O ponto de entrada para o flake, que é reconhecido e implantado quandosudo nixos-rebuild switch
é executado./etc/nixos/flake.lock
: O arquivo de bloqueio de versão gerado automaticamente, que registra as fontes de dados, os valores de hash e os números de versão de todas as entradas em todo o flake, garantindo a reprodutibilidade do sistema./etc/nixos/configuration.nix
: Este é o nosso arquivo de configuração anterior, que é importado como um módulo emflake.nix
. Atualmente, todas as configurações do sistema são escritas neste arquivo./etc/nixos/hardware-configuration.nix
: Este é o arquivo de configuração de hardware do sistema, gerado pelo NixOS, que descreve as informações de hardware do sistema.
Conclusão
Até este ponto, nós apenas adicionamos um arquivo de configuração muito simples, /etc/nixos/flake.nix
, que tem sido apenas um invólucro fino em torno de /etc/nixos/configuration.nix
, não oferecendo nenhuma nova funcionalidade e não introduzindo nenhuma mudança disruptiva.
No conteúdo que se segue no livro, aprenderemos sobre a estrutura e funcionalidade de flake.nix
e gradualmente veremos os benefícios que tal invólucro pode trazer.
Observação: O método de gerenciamento de configuração descrito neste livro NÃO é "Tudo em um único arquivo". É recomendado categorizar o conteúdo da configuração em diferentes arquivos Nix, e então introduzir esses arquivos de configuração na lista
modules
doflake.nix
, e gerenciá-los com o Git.Os benefícios desta abordagem são uma melhor organização dos arquivos de configuração e uma melhor manutenibilidade da configuração. A seção Modularizando a Configuração do NixOS irá explicar em detalhes como modularizar sua configuração do NixOS, e Outras Dicas Úteis - Gerenciando a Configuração do NixOS com Git irá introduzir várias melhores práticas para gerenciar a configuração do NixOS com o Git.