To be clear, I don’t disagree that the flakes design needs some serious rethought.
I also believe the “dendritic” approach is silly and only makes sense in one incredibly niche scenario which honestly nobody realistically should have, and could be solved better other ways even if they did. Don’t use flake-parts for NixOS configuration, hell, don’t even use flakes for that.
But I disagree that if someone wants to maintain a nix package + module outside the nixpkgs monorepo they should incur an unpinned dependency on nixpkgs, in fact regardless of whether they use flakes or not.
That is one position to take, but I think it’s also totally valid to take the opposite position, and say that it is the maintainer’s responsibility to choose - or at least default to - a version of nixpkgs that can build and run their software.
You’re offering the very-married-to-nixpkgs solution, which is one option, but the tradeoff is that you’re going to run into breakage more often, and users will be exposed to that with unhelpful error messages. It also forces more boilerplate upon users to use your project. Yes, the flake design could have offered better solutions to this, but that doesn’t mean you’re forced to take this tradeoff.
Honestly if you’re going that route I think you should just upstream your project into nixpkgs directly.
@bitbloxhub suggests the alternative, which mostly comes at… Actually, honestly, what is the cost in this case? Just disk space and eval performance, right?
I understand the 1000-nixpkgs-instance problem, but at least you’re giving users the explicit choice to either instantiate another nixpkgs or risk breakage, with a reasonable default of not risking breakage for users who don’t understand what’s going on (and therefore are most likely a leaf project where the impact is small).