1# flatpak service.
2{ config, lib, pkgs, ... }:
3
4with lib;
5
6let
7 cfg = config.services.flatpak;
8in {
9 meta = {
10 doc = ./flatpak.xml;
11 maintainers = pkgs.flatpak.meta.maintainers;
12 };
13
14 ###### interface
15 options = {
16 services.flatpak = {
17 enable = mkEnableOption "flatpak";
18
19 extraPortals = mkOption {
20 type = types.listOf types.package;
21 default = [];
22 description = ''
23 List of additional portals to add to path. Portals allow interaction
24 with system, like choosing files or taking screenshots. At minimum,
25 a desktop portal implementation should be listed. GNOME already
26 adds <package>xdg-desktop-portal-gtk</package>; for KDE, there
27 is <package>xdg-desktop-portal-kde</package>. Other desktop
28 environments will probably want to do the same.
29 '';
30 };
31 };
32 };
33
34
35 ###### implementation
36 config = mkIf cfg.enable {
37 environment.systemPackages = [ pkgs.flatpak ];
38
39 services.dbus.packages = [ pkgs.flatpak pkgs.xdg-desktop-portal ] ++ cfg.extraPortals;
40
41 systemd.packages = [ pkgs.flatpak pkgs.xdg-desktop-portal ] ++ cfg.extraPortals;
42
43 environment.profiles = [
44 "$HOME/.local/share/flatpak/exports"
45 "/var/lib/flatpak/exports"
46 ];
47
48 environment.variables = {
49 XDG_DESKTOP_PORTAL_PATH = map (p: "${p}/share/xdg-desktop-portal/portals") cfg.extraPortals;
50 };
51 };
52}