A Haskell wrapper for the XDG Desktop Portal DBUS API. Like libportal, but written in Haskell. Primarily intended to support applications packaged as Flatpaks (see monomer-flatpak-example).
- Unstable. Functionality and API may change considerably.
- Q. Why does this not use Template Haskell to generate interface code from the XML API definitions?
- A. The Portal API does not lend itself to code generation because inputs and outputs are mostly informally defined via vardicts rather than via simple positional parameters. Also the XML definitions are LGPL, which would make this library LGPL too.
See the generated docs on Hackage.
The monomer-flatpak-example app includes example code for many of the APIs.
- If you just want to add a wrapper for an API method that is not currently supported, open a PR.
- If you want something less straightforward, open an issue to discuss it.
- Module/function/field names should mimic the underlying portal API as much as possible.
- Functions should generally be tested (see existing tests for examples).
- API methods that take or return a variable set of values via a vardict should be translated into Haskell functions that take records called
...Options
and return records called...Results
. ...Options
records should have aDefault
instance where all fields have a reasonable empty value.- Record fields should not have unique prefixes.
- API methods that return URIs that are known to always be
file:
URIs should be wrapped with functions returningSystem.OsPath
. If they are not known to be file URIs, thenText.URI.URI
should be returned.
# Should use Ormolu 0.7.3.0
ormolu --mode inplace $(find . -name '*.hs')