Use XDG base directories and Known Folders on Windows (#1809)

This changes logic that previously read/wrote from `~/.pkl` to use
XDG base directories (all OSes), and Known Folders locations on Windows.

For example, Pkl will look for `settings.pkl` in:

1. `$XDG_CONFIG_HOME/pkl/settings.pkl`
2. `%APPDATA/pkl/settings.pkl`
3. `~/.pkl/settings.pkl`
4. Path pkl/settings/pkl within `$XDG_CONFIG_DIRS`
5. `/etc/xdg/pkl/settings.pkl`

---------

Co-authored-by: Florin Ungur <florin@florinungur.com>
This commit is contained in:
Daniel Chao
2026-08-20 21:50:24 +00:00
committed by GitHub
co-authored by Florin Ungur
parent 4dd37219c0
commit 6551a59f9e
24 changed files with 799 additions and 40 deletions
@@ -322,7 +322,10 @@ public class PklPlugin implements Plugin<Project> {
// Therefore, we don't set any initial value for the environmentVariables property.
// Not using `convention()` to allow the user to unset this property, disabling the cache.
spec.getModuleCacheDir().set(IoUtils.getDefaultModuleCacheDir().toFile());
var systemCacheDir = IoUtils.getSystemModuleCacheDir();
if (systemCacheDir != null) {
spec.getModuleCacheDir().set(systemCacheDir.toFile());
}
spec.getNoCache().convention(false);