1# flatpak service.
2{
3 config,
4 lib,
5 pkgs,
6 ...
7}:
8
9let
10 cfg = config.services.flatpak;
11in
12
13{
14 meta = {
15 doc = ./flatpak.md;
16 maintainers = pkgs.flatpak.meta.maintainers;
17 };
18
19 ###### interface
20 options = {
21 services.flatpak = {
22 enable = lib.mkEnableOption "flatpak";
23
24 package = lib.mkPackageOption pkgs "flatpak" { };
25 };
26 };
27
28 ###### implementation
29 config = lib.mkIf cfg.enable {
30
31 assertions = [
32 {
33 assertion = (config.xdg.portal.enable == true);
34 message = "To use Flatpak you must enable XDG Desktop Portals with xdg.portal.enable.";
35 }
36 ];
37
38 environment.systemPackages = [
39 cfg.package
40 pkgs.fuse3
41 ];
42
43 security.polkit.enable = true;
44
45 fonts.fontDir.enable = true;
46
47 services.dbus.packages = [ cfg.package ];
48
49 systemd.packages = [ cfg.package ];
50 systemd.tmpfiles.packages = [ cfg.package ];
51
52 environment.profiles = [
53 "$HOME/.local/share/flatpak/exports"
54 "/var/lib/flatpak/exports"
55 ];
56
57 # It has been possible since https://github.com/flatpak/flatpak/releases/tag/1.3.2
58 # to build a SELinux policy module.
59
60 # TODO: use sysusers.d
61 users.users.flatpak = {
62 description = "Flatpak system helper";
63 group = "flatpak";
64 isSystemUser = true;
65 };
66
67 users.groups.flatpak = { };
68 };
69}