From 5e07650ff3c05b8ac9773b444257b0fcc7ac0471 Mon Sep 17 00:00:00 2001
From: ibizaman <ibizapeanut@gmail.com>
Date: Wed, 10 Apr 2024 20:13:50 -0700
Subject: [PATCH 1/2] add memories nextcloud app

---
 modules/services/nextcloud-server.nix | 93 ++++++++++++++++++++++++++-
 1 file changed, 90 insertions(+), 3 deletions(-)

diff --git a/modules/services/nextcloud-server.nix b/modules/services/nextcloud-server.nix
index c08b38d..0ce8907 100644
--- a/modules/services/nextcloud-server.nix
+++ b/modules/services/nextcloud-server.nix
@@ -462,6 +462,37 @@ in
               };
             };
           };
+
+          memories = lib.mkOption {
+            description = ''
+              Memories App. [Nextcloud App Store](https://apps.nextcloud.com/apps/memories)
+
+              Enabling this app will set up the Memories app and configure all its dependencies.
+
+              To generate metadata for existing files, run:
+
+              ```nix
+              nextcloud-occ memories:index
+              ```
+            '';
+            default = {};
+            type = lib.types.submodule {
+              options = {
+                enable = lib.mkEnableOption "Memories app.";
+
+                vaapi = lib.mkOption {
+                  type = lib.types.bool;
+                  description = ''
+                    Enable VAAPI transcoding.
+
+                    Will make `nextcloud` user part of the `render` group to be able to access
+                    `/dev/dri/renderD128`.
+                  '';
+                  default = false;
+                };
+              };
+            };
+          };
         };
       };
     };
@@ -600,6 +631,7 @@ in
           "overwriteprotocol" = protocol; # Needed if behind a reverse_proxy
           "overwritecondaddr" = ""; # We need to set it to empty otherwise overwriteprotocol does not work.
           "debug" = cfg.debug;
+          "loglevel" = if !cfg.debug then 2 else 0;
           "filelocking.debug" = cfg.debug;
 
           # Use persistent SQL connections.
@@ -678,9 +710,6 @@ in
       systemd.services.phpfpm-nextcloud.requires = cfg.mountPointServices;
       systemd.services.phpfpm-nextcloud.after = cfg.mountPointServices;
 
-      systemd.services.nextcloud-cron.path = [
-        pkgs.perl
-      ];
       systemd.timers.nextcloud-cron.requires = cfg.mountPointServices;
       systemd.timers.nextcloud-cron.after = cfg.mountPointServices;
 
@@ -736,6 +765,22 @@ in
         inherit ((nextcloudApps cfg.version)) previewgenerator;
       };
 
+      services.nextcloud.settings = {
+        enabledPreviewProviders = [
+          "OC\\Preview\\BMP"
+          "OC\\Preview\\GIF"
+          "OC\\Preview\\JPEG"
+          "OC\\Preview\\Krita"
+          "OC\\Preview\\MarkDown"
+          "OC\\Preview\\MP3"
+          "OC\\Preview\\OpenDocument"
+          "OC\\Preview\\PNG"
+          "OC\\Preview\\TXT"
+          "OC\\Preview\\XBitmap"
+          "OC\\Preview\\HEIC"
+        ];
+      };
+
       # Values taken from
       # http://web.archive.org/web/20200513043150/https://ownyourbits.com/2019/06/29/understanding-and-improving-nextcloud-previews/
       systemd.services.nextcloud-setup.script = lib.mkIf cfg.apps.previewgenerator.recommendedSettings ''
@@ -965,5 +1010,47 @@ in
         }
       ];
     })
+
+    # Great source of inspiration:
+    # https://github.com/Shawn8901/nix-configuration/blob/538c18d9ecbf7c7e649b1540c0d40881bada6690/modules/nixos/private/nextcloud/memories.nix#L226
+    (lib.mkIf cfg.apps.memories.enable
+      (let
+        cfg' = cfg.apps.memories;
+        tf = x: if x then "true" else "false";
+      in
+        {
+
+          systemd.services.nextcloud-cron = {
+            # required for memories
+            # see https://github.com/pulsejet/memories/blob/master/docs/troubleshooting.md#issues-with-nixos
+            path = [ pkgs.perl ];
+          };
+
+
+          systemd.services.nextcloud-setup.script =
+            ''
+            ${occ} app:install memories || :
+            ${occ} app:enable  memories
+            '';
+
+          services.nextcloud = {
+            # See all options at https://memories.gallery/system-config/
+            settings = {
+              "memories.exiftool" = "${pkgs.exiftool}/bin/exiftool";
+              "memories.exiftool_no_local" = "false";
+              "memories.index.mode" = "3";
+              "memories.index.path" = "/Photos";
+              "memories.vod.disable" = "false";
+              "memories.vod.vaapi" = tf cfg'.vaapi;
+              "memories.readonly" = "true";
+              "preview_ffmpeg_path" = "${pkgs.ffmpeg-headless}/bin/ffmpeg";
+            };
+          };
+
+          systemd.services.phpfpm-nextcloud.serviceConfig = lib.mkIf cfg'.vaapi {
+            DeviceAllow = [ "/dev/dri/renderD128 rwm" ];
+            PrivateDevices = lib.mkForce false;
+          };
+        }))
   ];
 }

From 26d68722310bf45e48522fd04c87e7d6a64e1693 Mon Sep 17 00:00:00 2001
From: ibizaman <ibizapeanut@gmail.com>
Date: Wed, 10 Apr 2024 21:10:58 -0700
Subject: [PATCH 2/2] use extraApps

---
 modules/services/nextcloud-server.nix | 10 +++-------
 1 file changed, 3 insertions(+), 7 deletions(-)

diff --git a/modules/services/nextcloud-server.nix b/modules/services/nextcloud-server.nix
index 0ce8907..c16d3cf 100644
--- a/modules/services/nextcloud-server.nix
+++ b/modules/services/nextcloud-server.nix
@@ -1019,6 +1019,9 @@ in
         tf = x: if x then "true" else "false";
       in
         {
+          services.nextcloud.extraApps = {
+            inherit ((nextcloudApps cfg.version)) memories;
+          };
 
           systemd.services.nextcloud-cron = {
             # required for memories
@@ -1026,13 +1029,6 @@ in
             path = [ pkgs.perl ];
           };
 
-
-          systemd.services.nextcloud-setup.script =
-            ''
-            ${occ} app:install memories || :
-            ${occ} app:enable  memories
-            '';
-
           services.nextcloud = {
             # See all options at https://memories.gallery/system-config/
             settings = {