main
 1{
 2  inputs,
 3  lib,
 4  ...
 5}: {
 6  flake-file.inputs.nix-flatpak = {
 7    url = "github:gmodena/nix-flatpak";
 8  };
 9
10  den.aspects.desktop.flatpak = {
11    settings = let
12      flatpakOption = {
13        packages = lib.mkOption {
14          type = lib.types.listOf (lib.types.either lib.types.str lib.types.attr);
15          default = [];
16        };
17        overrides = lib.mkOption {
18          type = lib.types.attrsOf (lib.types.attrsOf lib.types.anything);
19          default = {};
20        };
21      };
22    in {
23      host = flatpakOption;
24      user = flatpakOption;
25    };
26
27    cache = {
28      directories = [
29        "/var/lib/flatpak"
30      ];
31    };
32
33    persistHome = {
34      directories = [
35        ".var" # Flatpak app data
36      ];
37    };
38
39    cacheHome = {config, ...}: {
40      directories = [
41        "${config.xdg.data.directory}/flatpak"
42      ];
43    };
44
45    nixos = {host, ...}: {
46      imports = [inputs.nix-flatpak.nixosModules.nix-flatpak];
47
48      services.flatpak = {
49        enable = true;
50
51        inherit (host.settings.desktop.flatpak) packages;
52      };
53    };
54
55    hjem = {
56      user,
57      osConfig,
58      ...
59    }: {
60      imports = [inputs.nix-flatpak.hjemModules.nix-flatpak];
61
62      services.flatpak = {
63        enable = true;
64
65        packages = user.system.settings.desktop.flatpak.packages;
66
67        overrides.settings = lib.mergeAttrsList [
68          {
69            global = {
70              Context.filesystems = [
71                "/nix/store:ro"
72
73                # Aesthetics
74                "/run/current-system/sw/share/X11/fonts:ro"
75                "xdg-data/fonts:ro"
76                "home/.icons:ro"
77                "xdg-config/gtk-3.0/gtk.css:ro"
78                "xdg-config/gtk-4.0/gtk.css:ro"
79              ];
80              Environment = {
81                TZ = osConfig.time.timeZone;
82              };
83            };
84          }
85          (user.system.settings.desktop.flatpak.overrides)
86        ];
87      };
88    };
89  };
90}