{ config, pkgs, lib, self', self, ... }: let d = self.lib.data.services.nextcloud; i = self.lib.data.services.nextcloud-imaginary; in { imports = [ ./office.nix ./imaginary.nix ]; services.nextcloud = { enable = true; package = pkgs.nextcloud32; phpPackage = lib.mkForce pkgs.php82; appstoreEnable = true; caching.redis = true; # Enable Webfinger webfinger = true; # Any additional PHP Extensions we need phpExtraExtensions = all: [ all.pdlib all.bz2 ]; config = { adminpassFile = config.age.secrets.nextcloud-admin-pw.path; adminuser = "pyrox"; dbtype = "pgsql"; }; settings = { default_phone_region = "US"; overwriteprotocol = "https"; trusted_proxies = [ "100.64.0.0/10" ]; # Preview Settings "preview_imaginary_url" = "http://localhost:${builtins.toString i.port}"; "preview_format" = "webp"; "preview_ffmpeg_path" = "${pkgs.ffmpeg-headless}/bin/ffmpeg"; "enabledPreviewProviders" = [ "OC\\Preview\\Font" "OC\\Preview\\Krita" "OC\\Preview\\MP3" "OC\\Preview\\MarkDown" "OC\\Preview\\MSOfficeDoc" "OC\\Preview\\OpenDocument" "OC\\Preview\\TXT" "OC\\Preview\\Imaginary" ]; # Memories Configuration "memories.exiftool" = "${pkgs.exiftool}/bin/exiftool"; "memories.exiftool_no_local" = true; # # Index Everything "memories.index.mode" = "1"; # # GIS Data in Postgres "memories.gis_type" = 2; # # Transcoding "memories.vod.disable" = false; "memories.vod.vaapi" = true; "memories.vod.nvenc" = false; "memories.vod.use_gop_size" = false; # NVENV-only "memories.vod.ffmpeg" = "${pkgs.ffmpeg-headless}/bin/ffmpeg"; "memories.vod.ffprobe" = "${pkgs.ffmpeg-headless}/bin/ffprobe"; "memories.vod.path" = "/var/lib/nextcloud/store-apps/memories/bin-ext/go-vod-amd64"; "memories.vod.external" = false; # Recognize Options "node_binary" = "${pkgs.nodejs_20}/bin/node"; "tensorflow.cores" = 6; "tensorflow.gpu" = false; "musicnn.enabled" = false; "movinet.enabled" = false; "faces.enable" = true; "imagenet.enabled" = true; "landmarks.enabled" = true; }; phpOptions = { "opcache.interned_strings_buffer" = "32"; "opcache.jit" = "1255"; "opcache.jit_buffer_size" = "256M"; "opcache.save_comments" = "1"; "opcache.validate_timestamps" = "0"; }; poolSettings = { "pm" = "dynamic"; "pm.max_children" = 43; "pm.start_servers" = 10; "pm.min_spare_servers" = 10; "pm.max_spare_servers" = 32; "pm.max_requests" = 500; }; configureRedis = true; database.createLocally = true; hostName = d.extUrl; }; age.secrets.nextcloud-admin-pw = { file = ./nextcloud-admin-pw.age; owner = "nextcloud"; group = "nextcloud"; }; services.anubis.instances.nextcloud = { settings = { BIND = ":${toString d.anubis}"; POLICY_FNAME = "${self'.packages.anubis-files}/policies/nextcloud.yaml"; TARGET = "http://localhost:${toString d.port}"; }; }; }