Thanks for the example of static building!
I tend to use overlays to bring in the components. This allows greater control over variations and a coherent nixpkgs. I need to clean it up a bit more, but talked about it here:
https://www.reddit.com/r/NixOS/comments/8tkllx/standard_project_structure/
I like having the ability to call “nix build” and “nix-shell” directly in the respective sub-projects, but I do lose the niceness of having the same default.nix that nixpkgs expects, instead it is derivation.nix. And it is used by overlay.nix, release.nix, and default.nix for their various responsibilities.
I’ve been considering putting some proper thought into presenting a “best practice” project structure. Would you want to iterate on an approach and try to get it included in the nixpkgs manual?