Flake Outputs
En flake.nix, la sección outputs define las distintas salidas que un flake puede producir durante su proceso de compilación. Un flake puede tener varias salidas al mismo tiempo, entre las cuales se incluyen, pero no se limitan a, las siguientes:
- Paquetes de Nix: se llaman
apps.<system>.<name>,packages.<system>.<name>olegacyPackages.<system>.<name>. Puedes construir un paquete específico usando el comandonix build .#<name>. - Funciones auxiliares de Nix: se llaman
lib.<name>y sirven como bibliotecas para que otros flakes las usen. - Entornos de desarrollo de Nix: se llaman
devShellsy proporcionan entornos de desarrollo aislados. Se accede a ellos con el comandonix develop. - Configuraciones de NixOS: se llaman
nixosConfigurationy representan configuraciones específicas de sistemas NixOS. Puedes activar una configuración con el comandonixos-rebuild switch --flake .#<name>. - Plantillas de Nix: se llaman
templatesy pueden usarse como punto de partida para crear proyectos nuevos. Puedes generar un proyecto con el comandonix flake init --template <reference>. - Otras salidas definidas por el usuario: estas salidas pueden ser definidas por el usuario y usadas por otras herramientas relacionadas con Nix.
Consulta la documentación oficial para más detalles - Flakes Check - Nix Manual.
Aquí hay un fragmento de ejemplo de la Wiki de NixOS que demuestra la estructura de la sección outputs:
nix
{
inputs = {
# ......
};
outputs = { self, ... }@inputs: {
# Ejecutado por `nix flake check`
checks."<system>"."<name>" = derivation;
# Ejecutado por `nix build .#<name>`
packages."<system>"."<name>" = derivation;
# Ejecutado por `nix build .`
packages."<system>".default = derivation;
# Ejecutado por `nix run .#<name>`
apps."<system>"."<name>" = {
type = "app";
program = "<store-path>";
};
# Ejecutado por `nix run . -- <args?>`
apps."<system>".default = { type = "app"; program = "..."; };
# Formateador (alejandra, nixfmt o nixpkgs-fmt)
formatter."<system>" = derivation;
# Usado para paquetes de nixpkgs, también accessible vía `nix build .#<name>`
legacyPackages."<system>"."<name>" = derivation;
# Overlay, consumido por otros flakes
overlays."<name>" = final: prev: { };
# Overlay predeterminado
overlays.default = {};
# Módulo de NixOS, consumido por otros flakes
nixosModules."<name>" = { config }: { options = {}; config = {}; };
# Módulo predeterminado
nixosModules.default = {};
# Usado con `nixos-rebuild --flake .#<hostname>`
# nixosConfigurations."<hostname>".config.system.build.toplevel must be a derivation
nixosConfigurations."<hostname>" = {};
# Usado por `nix develop .#<name>`
devShells."<system>"."<name>" = derivation;
# Usado por `nix develop`
devShells."<system>".default = derivation;
# Trabajos de compilación de Hydra
hydraJobs."<attr>"."<system>" = derivation;
# Usado por `nix flake init -t <flake>#<name>`
templates."<name>" = {
path = "<store-path>";
description = "¿Aquí va la descripción de la plantilla?";
};
# Usado por `nix flake init -t <flake>`
templates.default = { path = "<store-path>"; description = ""; };
};
}