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}