2024-02-26 22:29:03 +00:00
|
|
|
# xdg-desktop-portal:
|
|
|
|
# - dbus user service which allows sandboxed applications to request specific things from their external environment.
|
|
|
|
# - frequently paired with portal implementations like `xdg-desktop-portal-gtk`, `xdg-desktop-portal-wlr`
|
|
|
|
# wherein `xdg-desktop-portal` is the only component which speaks to the outside world, and the implementations speak only to the xdg-desktop-portal.
|
|
|
|
# - org.freedesktop.portal.OpenURI:
|
|
|
|
# - <https://flatpak.github.io/xdg-desktop-portal/docs/doc-org.freedesktop.portal.OpenURI.html>
|
|
|
|
# - request that the OS open some URI for the user
|
|
|
|
# - optionally provide a list of recommended .desktop files to handle the URI
|
|
|
|
# - xdg-desktop-portal dispatches this request to the backend (xdg-desktop-portal-gtk) which will present an app chooser to the user by default
|
|
|
|
# - xdg-desktop-portal then executes the chosen .desktop file, passing it the URI.
|
|
|
|
# - example (glib): `gdbus call --session --timeout 10 --dest org.freedesktop.portal.Desktop --object-path /org/freedesktop/portal/desktop --method org.freedesktop.portal.OpenURI.OpenURI '' 'https://www.google.com' "{'ask': <false>}"`
|
|
|
|
# - force non-flatpak glib apps to use this portal with: GTK_USE_PORTAL=1 or GIO_USE_PORTALS=1 (and then making sure the app can't see mimeapps.list)
|
|
|
|
# - org.freedesktop.portal.DynamicLauncher
|
|
|
|
# - <https://flatpak.github.io/xdg-desktop-portal/docs/doc-org.freedesktop.portal.DynamicLauncher.html>
|
|
|
|
# - whereas OpenURI requires a URI argument, DynamicLauncher is just "launch an app by <app_id>.desktop"
|
|
|
|
# - example (glib): `gdbus call --session --timeout 10 --dest org.freedesktop.portal.Desktop --object-path /org/freedesktop/portal/desktop --method org.freedesktop.portal.DynamicLauncher.Launch 'audacity.desktop' "{}"`
|
|
|
|
# - .desktop files are searched for in ~/.local/share/xdg-desktop-portal/applications
|
2024-02-12 07:12:04 +00:00
|
|
|
{ config, lib, pkgs, ... }:
|
2024-02-12 01:16:17 +00:00
|
|
|
let
|
|
|
|
cfg = config.sane.programs.xdg-desktop-portal;
|
|
|
|
in
|
|
|
|
{
|
|
|
|
sane.programs.xdg-desktop-portal = {
|
2024-02-19 12:48:39 +00:00
|
|
|
# rmDbusServices: because we care about ordering with the rest of the desktop, and don't want something else to auto-start this.
|
|
|
|
packageUnwrapped = pkgs.rmDbusServices (
|
|
|
|
pkgs.xdg-desktop-portal.overrideAttrs (upstream: {
|
|
|
|
postPatch = (upstream.postPatch or "") + ''
|
|
|
|
# wherever we have a default mime association, don't prompt the user to choose an app.
|
|
|
|
# tracking issues about exposing this formally:
|
|
|
|
# - <https://github.com/flatpak/xdg-desktop-portal/issues/780>
|
|
|
|
# - <https://github.com/flatpak/xdg-desktop-portal/issues/471>
|
|
|
|
# - <https://github.com/flatpak/xdg-desktop-portal/issues/472>
|
|
|
|
#
|
|
|
|
# the alternative to patching is to instead manually populate ~/.local/share/flatpak/db
|
|
|
|
# according to this format (binary):
|
|
|
|
# - <https://github.com/flatpak/xdg-desktop-portal/wiki/The-Permission-Store/16760c9f2e0a7ea7333ad5b190bd651ddc700897#storage-data-format>
|
|
|
|
substituteInPlace --replace-fail src/open-uri.c \
|
|
|
|
'#define DEFAULT_THRESHOLD 3' '#define DEFAULT_THRESHOLD 0'
|
|
|
|
'';
|
|
|
|
})
|
|
|
|
);
|
2024-02-12 07:12:04 +00:00
|
|
|
|
2024-02-15 18:23:40 +00:00
|
|
|
# the portal is a launcher, needs to handle anything
|
|
|
|
sandbox.enable = false;
|
|
|
|
|
2024-02-26 22:31:48 +00:00
|
|
|
# portal can use the same .desktop files from the rest of my config.
|
|
|
|
fs.".local/share/xdg-desktop-portal/applications".symlink.target = "../applications";
|
|
|
|
|
2024-02-12 01:16:17 +00:00
|
|
|
services.xdg-desktop-portal = {
|
2024-02-19 12:48:39 +00:00
|
|
|
description = "xdg-desktop-portal freedesktop.org portal (URI opener, file chooser, etc)";
|
|
|
|
after = [ "graphical-session.target" ];
|
|
|
|
# partOf = [ "graphical-session.target" ];
|
2024-02-12 01:16:17 +00:00
|
|
|
wantedBy = [ "graphical-session.target" ];
|
|
|
|
|
|
|
|
serviceConfig = {
|
|
|
|
ExecStart="${cfg.package}/libexec/xdg-desktop-portal";
|
2024-02-19 12:48:39 +00:00
|
|
|
Type = "simple";
|
|
|
|
Restart = "always";
|
|
|
|
RestartSec = "10s";
|
|
|
|
# Type = "dbus";
|
|
|
|
# BusName = "org.freedesktop.portal.Desktop";
|
2024-02-12 01:16:17 +00:00
|
|
|
};
|
|
|
|
|
2024-02-12 07:12:04 +00:00
|
|
|
# tracking issue for having xdg-desktop-portal locate portals via more standard directories, obviating this var:
|
|
|
|
# - <https://github.com/flatpak/xdg-desktop-portal/issues/603>
|
2024-02-19 12:48:39 +00:00
|
|
|
# i can actually almost omit it today; problem is that if you don't set it it'll look for `sway-portals.conf` in ~/.config/xdg-desktop-portal
|
|
|
|
# but then will check its *own* output dir for {gtk,wlr}.portal.
|
|
|
|
# arguable if that's a packaging bug, or limitation...
|
|
|
|
environment.XDG_DESKTOP_PORTAL_DIR = "%E/xdg-desktop-portal";
|
2024-02-17 14:40:56 +00:00
|
|
|
|
|
|
|
environment.G_MESSAGES_DEBUG = "all";
|
2024-02-12 01:16:17 +00:00
|
|
|
};
|
|
|
|
};
|
|
|
|
|
2024-02-19 12:48:39 +00:00
|
|
|
# after #603 is resolved, i can probably stop linking `{gtk,wlr}.portal` into ~
|
|
|
|
# and link them system-wide instead.
|
|
|
|
# environment.pathsToLink = lib.mkIf cfg.enabled [
|
|
|
|
# "/share/xdg-desktop-portal/portals"
|
|
|
|
# ];
|
2024-02-12 01:16:17 +00:00
|
|
|
}
|