Currently cabal-install uses --prefix=$HOME/.cabal and does not specify --bindir so we use $HOME/.cabal/bin as the bindir. Obviously this is not on the $PATH by default.
It would be trivial to specify --bindir=$HOME/bin however the worry is that we would be stomping on programs that the user has already installed there. One solution is to continue to install into $HOME/.cabal/bin and then to make symlinks into $HOME/bin if the target name does not already exist. If the name does exist we could give a warning and let the user sort it out.
Of course we need to be able to overwrite our own symlinks. We know it's a symlink we're allowed to overwrite if it links into $HOME/.cabal/bin.
It would be nice to install into $HOME/.cabal/bin using versioned binary names (Cabal supports that now) and symlink the generic name into $HOME/bin.
We can discover the names of the binary we're installing by checking the executable names in the PackageDescription.
Of course this has to be an optional feature since not everyone wants it and there are no symlinks on windows. I'd imagine we'd have it in the ~/.cabal/config file something like:
prefix: $HOME/.cabal
-- bindir: $HOME/.cabal/bin
symlink-bindir: $HOME/bin