What problem does it solve? Designing a Nix flake structure without clear principles leads to tangled flake.nix files, duplicated registries, impure evaluation, and slow evaluators. This Skill codifies the design philosophy for structuring flakes so outputs, packages, and workflows stay consistent and maintainable. ## Core Features & Use Cases - Flake Structure Guidance: Treats flake.nix as a manifest that delegates outputs to lib/, discovery, and package-specific files, using standard outputs like packages, checks, devShells, overlays, and nixosModules. - Data-Before-Commands Principle: Exposes aggregate knowledge as lib.<name> values inspectable via nix eval --json before wrapping them in CLI commands. - Purity and IFD Boundaries: Enforces pure evaluation, explicit Import From Derivation boundaries, batched discovery derivations, and checked command generation via lib.getExe. - Use Case: When adding a new workflow command to a Nix monorepo, use this Skill to decide whether it belongs as a package with meta.mainProgram, where versions and hashes should live, and how to validate it through checkPhase and passthru.tests. ## Quick Start Review my flake.nix and tell me how to restructure its outputs according to Nix design philosophy.