# XDG Basedir implementation
This is a compliant implementation of the [XDG Base Directory Specification](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html).
## Compliance
- [X] `$XDG_DATA_HOME`
- [X] get path
- [X] read file
- [X] write file
- [X] `$XDG_CONFIG_HOME`
- [X] get path
- [X] read file
- [X] write file
- [X] `$XDG_STATE_HOME`
- [X] get path
- [X] read file
- [X] write file
- [X] `$XDG_DATA_DIRS`
- [X] get path list
- [X] read best file
- [X] merge files
- [X] `$XDG_CONFIG_DIRS`
- [X] get path list
- [X] read best file
- [X] merge files
- [X] `$XDG_CACHE_HOME`
- [X] get path
- [X] read file
- [X] write file
- [X] `$XDG_RUNTIME_DIR`
- [X] get path
- [X] read file
- [X] write file
- [X] treat relative paths as invalid
As this library deals purely with accessing files, I eventually chose not to implement the notion of warning the user when `$XDG_RUNTIME_DIR` isn't set and of providing a replacement directory. Any application where that behaviour would be relevant can use the exception raised by `getRuntimeDir` to detect this problem, should deal with warning the user in its own context, and can set `$XDG_RUNTIME_DIR` with a path that makes sense for that application.
# Build
You can build the project with:
```
hpack
cabal build
```
If you have Nix installed, `shell.nix` provides an environment with all the needed dependencies. It is suitable for `nix-direnv`.