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