{
  pkgs,
  lib,
  config,
  ...
}:
{
  systemd.services."nextcloud-setup".requires = [ "postgresql.service" ];
  systemd.services."nextcloud-setup".after = [ "postgresql.service" ];
  environment.systemPackages = with pkgs; [ ffmpeg ];

  environment.etc."nextcloud-admin-pass".text = "test123";

  services.nextcloud = {
    enable = true;
    package = pkgs.nextcloud30;
    extraApps = {
      inherit (config.services.nextcloud.package.packages.apps)
        calendar
        contacts
        mail
        notes
        spreed
        tasks
        ;
    };
    hostName = "nc.hoyer.xyz";
    https = true;
    configureRedis = true;
    settings = {
      maintenance_window_start = "1";
      log_type = "file";
      mail_smtpmode = "sendmail";
      mail_sendmailmode = "pipe";
      default_phone_region = "DE";
      enabledPreviewProviders = [
        "OC\\Preview\\BMP"
        "OC\\Preview\\GIF"
        "OC\\Preview\\HEIC"
        "OC\\Preview\\JPEG"
        "OC\\Preview\\JXL"
        "OC\\Preview\\Krita"
        "OC\\Preview\\MP3"
        "OC\\Preview\\MP4"
        "OC\\Preview\\MarkDown"
        "OC\\Preview\\Movie"
        "OC\\Preview\\OpenDocument"
        "OC\\Preview\\PDF"
        "OC\\Preview\\PNG"
        "OC\\Preview\\TXT"
        "OC\\Preview\\WEBP"
        "OC\\Preview\\XBitmap"
      ];
    };
    phpOptions = {
      upload_max_filesize = lib.mkForce "1G";
      post_max_size = lib.mkForce "1G";
      "opcache.interned_strings_buffer" = "16";
    };
    config.adminpassFile = "/etc/nextcloud-admin-pass";
    config.dbtype = "pgsql";
    config.dbname = "nextcloud";
    config.dbhost = "/run/postgresql";
    config.dbuser = "nextcloud";
  };

  services.postgresql = {
    ensureDatabases = [ "nextcloud" ];
    ensureUsers = [
      {
        name = "nextcloud";
        ensureDBOwnership = true;
      }
    ];
  };
}