1{
2 config,
3 pkgs,
4 lib,
5 self',
6 self,
7 ...
8}:
9let
10 d = self.lib.data.services.nextcloud;
11 i = self.lib.data.services.nextcloud-imaginary;
12in
13{
14 imports = [
15 ./office.nix
16 ./imaginary.nix
17 ];
18 services.nextcloud = {
19 enable = true;
20 package = pkgs.nextcloud32;
21 phpPackage = lib.mkForce pkgs.php82;
22 appstoreEnable = true;
23 caching.redis = true;
24 # Enable Webfinger
25 webfinger = true;
26 # Any additional PHP Extensions we need
27 phpExtraExtensions = all: [
28 all.pdlib
29 all.bz2
30 ];
31 config = {
32 adminpassFile = config.age.secrets.nextcloud-admin-pw.path;
33 adminuser = "pyrox";
34 dbtype = "pgsql";
35 };
36 settings = {
37 default_phone_region = "US";
38 overwriteprotocol = "https";
39 trusted_proxies = [ "100.64.0.0/10" ];
40 # Preview Settings
41 "preview_imaginary_url" = "http://localhost:${builtins.toString i.port}";
42 "preview_format" = "webp";
43 "preview_ffmpeg_path" = "${pkgs.ffmpeg-headless}/bin/ffmpeg";
44 "enabledPreviewProviders" = [
45 "OC\\Preview\\Font"
46 "OC\\Preview\\Krita"
47 "OC\\Preview\\MP3"
48 "OC\\Preview\\MarkDown"
49 "OC\\Preview\\MSOfficeDoc"
50 "OC\\Preview\\OpenDocument"
51 "OC\\Preview\\TXT"
52 "OC\\Preview\\Imaginary"
53 ];
54 # Memories Configuration
55 "memories.exiftool" = "${pkgs.exiftool}/bin/exiftool";
56 "memories.exiftool_no_local" = true;
57 # # Index Everything
58 "memories.index.mode" = "1";
59 # # GIS Data in Postgres
60 "memories.gis_type" = 2;
61 # # Transcoding
62 "memories.vod.disable" = false;
63 "memories.vod.vaapi" = true;
64 "memories.vod.nvenc" = false;
65 "memories.vod.use_gop_size" = false; # NVENV-only
66 "memories.vod.ffmpeg" = "${pkgs.ffmpeg-headless}/bin/ffmpeg";
67 "memories.vod.ffprobe" = "${pkgs.ffmpeg-headless}/bin/ffprobe";
68 "memories.vod.path" = "/var/lib/nextcloud/store-apps/memories/bin-ext/go-vod-amd64";
69 "memories.vod.external" = false;
70
71 # Recognize Options
72 "node_binary" = "${pkgs.nodejs_20}/bin/node";
73 "tensorflow.cores" = 6;
74 "tensorflow.gpu" = false;
75 "musicnn.enabled" = false;
76 "movinet.enabled" = false;
77 "faces.enable" = true;
78 "imagenet.enabled" = true;
79 "landmarks.enabled" = true;
80 };
81 phpOptions = {
82 "opcache.interned_strings_buffer" = "32";
83 "opcache.jit" = "1255";
84 "opcache.jit_buffer_size" = "256M";
85 "opcache.save_comments" = "1";
86 "opcache.validate_timestamps" = "0";
87 };
88 poolSettings = {
89 "pm" = "dynamic";
90 "pm.max_children" = 43;
91 "pm.start_servers" = 10;
92 "pm.min_spare_servers" = 10;
93 "pm.max_spare_servers" = 32;
94 "pm.max_requests" = 500;
95 };
96 configureRedis = true;
97 database.createLocally = true;
98 hostName = d.extUrl;
99 };
100 age.secrets.nextcloud-admin-pw = {
101 file = ./nextcloud-admin-pw.age;
102 owner = "nextcloud";
103 group = "nextcloud";
104 };
105 services.anubis.instances.nextcloud = {
106 settings = {
107 BIND = ":${toString d.anubis}";
108 POLICY_FNAME = "${self'.packages.anubis-files}/policies/nextcloud.yaml";
109 TARGET = "http://localhost:${toString d.port}";
110 };
111 };
112}