haskell / cabal

Official upstream development repository for Cabal and cabal-install
https://haskell.org/cabal
Other
1.61k stars 691 forks source link

Remove the need to hardcode absolute paths for some entries in `.cabal/config`: support xdg home variables #1857

Open KholdStare opened 10 years ago

KholdStare commented 10 years ago

Hi!

I keep all my configuration files on github to have an easily reproducible environment on all my machines. I keep my .cabal/config file in there as well, and don't like the fact that some absolute paths have to be hardcoded (e.g. remote-repo-cache, world-file and build-summary). This is inconvenient if $HOME happens to be different on various machines (e.g. work vs home).

Some possible solutions (which could be wrong):

If one of the above suggestions is worthwhile, I'd be up for implementing it. Just let me know :smile:

Thank you!

mrak commented 9 years ago

I would like this, too. Just the ability to reference $HOME or $XDG_* variables would greatly improve the portability of my config

chris-martin commented 5 years ago

Would someone with a commit bit mind weighing in on whether a patch would be accepted for this?

hvr commented 5 years ago

I generally like the idea, but under the condition we do not open up support for arbitrary environment variables.

I'd concretely suggest to add support for a couple additional $-variables

which I believe should address most use-cases without bringing into scope an unknown set of new variable names, while allowing for reasonably platform independence (thanks to directory abstracting over platforms and having reasonable semantics on e.g. windows)

The downside of allowing env-variables to affect the paths in the cabal config is that file-change-monitoring gets slighlty more complicated, but by using an explicitly enumerated set of input variables (i.e. $home /$xdg_{data,config,cache}) this remains simple enough.

sboosali commented 5 years ago

yeah, I agree w.r.t. a fixed of environment variables. and the ~ sugar.

one issue is which environment variables are chosen for Windows (which is far as I know, isn't part of the XDG BaseDirs spex). For example, the standard implementations between Haskell and Racket differ (see below). I'd stick with whatever directory does (or if Cabal has its own XDG utilities, those), but I wanted to mention it.

Haskell (directory package):

Racket (basedir package):

https://docs.racket-lang.org/basedir/index.html http://hackage.haskell.org/package/directory-1.3.3.2/docs/System-Directory.html#t:XdgDirectory

23Skidoo commented 5 years ago

645 seems to be another duplicate of this ticket.

merijn commented 5 years ago

The downside of allowing env-variables to affect the paths in the cabal config is that file-change-monitoring gets slighlty more complicated, but by using an explicitly enumerated set of input variables (i.e. $home /$xdg_{data,config,cache}) this remains simple enough.

Do any of the filepath fields in ~/.cabal/config affect the hash of packages? Or just the file-change-monitoring?

Mistuke commented 5 years ago

https://github.com/haskell/cabal/issues/4597 is also a duplicate of this. There was a large discussion there about the migration issues. But I think with new-build we can avoid that as it's a new thing anyway.

But the short story is on Windows we shouldn't use %AppData% for anything other than cabal config file because this is a synced directory.

23Skidoo commented 5 years ago

What's a synced directory on Windows? Synced across all users or backed up in the cloud?

Mistuke commented 5 years ago

Synced across active directory. It's a roaming profile folder. So it's synced back to the Ad server on login and logout. The data cabal puts there are often not useful on another machine but the sheer size of this folder makes network user's login and logout very slow as it has to sync and eats away at your profile quota. This affects most corporate environments and universities.

In newer versions of Windows this has been made more explicit in the folder resolves to a "Roaming" path to point this out more.

23Skidoo commented 5 years ago

Thanks, it's clear now.

Mikolaj commented 3 years ago

This is related to #680 that is now being worked on.

athas commented 11 months ago

Would people be opposed to just supporting $home? I don't think such a simple feature should be conflated with the general problem of variables.