{ pkgs
, ...}: let
  host = "cloud.514fpv.io";
in {
  services.nextcloud = {
    enable = true;
    package = pkgs.nextcloud29;
    extraApps = {
      inherit (pkgs.nextcloud29Packages.apps)
      notify_push impersonate spreed
      contacts bookmarks deck polls notes forms
      twofactor_webauthn;
    };
    home = "/nix/persist/service/nextcloud";
    configureRedis = true;
    webfinger = true;
    maxUploadSize = "128G";
    hostName = host;
    phpExtraExtensions = all: with all; [ bz2 ];
    database.createLocally = true;
    config.dbtype = "pgsql";
    config.adminuser = "koishi";
    config.adminpassFile = builtins.toString (pkgs.writeText "password" "initial_password");
    settings.overwriteprotocol = "https";
    settings.default_phone_region = "US";
    settings.maintenance_window_start = 17;
    caching.redis = true;
    phpOptions.upload_max_filesize = "128G";
    phpOptions.post_max_size = "128G";
    phpOptions.output_buffering = "0";
    phpOptions."opcache.interned_strings_buffer" = "32";
    https = true;
  };

  users.users.nextcloud.uid = 1022;
  users.groups.nextcloud.gid = 1022;

  services.nginx.virtualHosts.${host} = {
    useACMEHost = ".514fpv.io";
    addSSL = true;
  };

  global.fs.zfs.mountpoints."/nix/persist/service/nextcloud" = "service/nextcloud";
}
