Ambivalence: this seems a lot like it's getting up into "layer 3" stuff (meaning: it's something you might want to solve with the expressiveness level of a programming language, rather than stacking further and further amounts of declarative special not-quite-code). But it's also potentially quite useful; if we do punt to programming tools, we lose any ability to statically analyze what's going on up there; and if we do punt to programming tools, we fragment any of our possibility for community growth up there.
Most other systems operating in this space have something like this. E.g. Guix and Nix most certainly do. That said: they also did go full in on programming language for it.
stow
and its symlink farming, which needs only very simple detection patterns that are easily provoked).)
If we do go for this, and try to keep it at all declarative, it suggests a lot of fairly immediate and large implications:
InputKey
type is no longer going to be remotely able to be responsible for uniqueness and non-collision.Input
value something that serializes in a more easily extensible way than the current drafts, which try to cram it all into representations of stringprefix union and/or stringjoin struct.
Input
is just a reference to a whole block of more info elsewhere,