2025-04-01 00:39:43 +03:00
|
|
|
{
|
|
|
|
config,
|
|
|
|
pkgs,
|
|
|
|
lib,
|
|
|
|
...
|
|
|
|
}:
|
2024-05-23 13:39:48 +03:00
|
|
|
{
|
2025-06-05 00:21:11 +03:00
|
|
|
imports = [
|
|
|
|
./utils/nginx-https-server.nix
|
|
|
|
./utils/cert-store-client.nix
|
|
|
|
];
|
2025-01-08 13:10:43 +02:00
|
|
|
|
2025-04-20 23:15:51 +03:00
|
|
|
options.custom = {
|
|
|
|
nextcloud_domain = lib.mkOption {
|
|
|
|
type = lib.types.str;
|
|
|
|
description = "Domain used by Nextcloud";
|
|
|
|
};
|
|
|
|
|
|
|
|
collabora_domain = lib.mkOption {
|
|
|
|
type = with lib.types; nullOr str;
|
|
|
|
default = null;
|
|
|
|
description = "Domain used by Collabora Online";
|
|
|
|
};
|
2025-04-01 00:39:43 +03:00
|
|
|
};
|
2024-05-23 13:39:48 +03:00
|
|
|
|
2025-04-20 23:15:51 +03:00
|
|
|
config = lib.mkMerge [
|
|
|
|
{
|
|
|
|
services = {
|
|
|
|
nextcloud = {
|
|
|
|
package = pkgs.nextcloud31;
|
|
|
|
enable = true;
|
|
|
|
hostName = config.custom.nextcloud_domain;
|
|
|
|
autoUpdateApps.enable = true;
|
|
|
|
https = true;
|
|
|
|
maxUploadSize = "512M"; # Default
|
|
|
|
config = {
|
2025-05-27 19:57:01 +03:00
|
|
|
dbtype = "sqlite";
|
2025-04-20 23:15:51 +03:00
|
|
|
adminpassFile = "/var/lib/nextcloud/adminpass";
|
|
|
|
};
|
|
|
|
settings = {
|
|
|
|
overwriteprotocol = "https";
|
|
|
|
default_phone_region = "FI";
|
|
|
|
maintenance_window_start = 1;
|
|
|
|
};
|
|
|
|
phpOptions = {
|
|
|
|
"opcache.interned_strings_buffer" = 32;
|
|
|
|
};
|
2025-04-01 00:39:43 +03:00
|
|
|
};
|
2025-04-20 23:15:51 +03:00
|
|
|
|
2025-05-29 02:12:20 +03:00
|
|
|
nginx.virtualHosts.${config.services.nextcloud.hostName} = { };
|
2024-12-03 23:46:24 +02:00
|
|
|
};
|
2025-04-20 23:15:51 +03:00
|
|
|
}
|
|
|
|
(
|
|
|
|
# Optional Collabora Client
|
|
|
|
lib.mkIf (config.custom.collabora_domain != null) {
|
|
|
|
services = {
|
|
|
|
collabora-online = {
|
|
|
|
enable = true;
|
|
|
|
port = 9980; # default
|
|
|
|
settings = {
|
|
|
|
ssl = {
|
|
|
|
enable = false;
|
|
|
|
termination = true;
|
|
|
|
};
|
2024-05-23 13:39:48 +03:00
|
|
|
|
2025-04-20 23:15:51 +03:00
|
|
|
net = {
|
|
|
|
listen = "loopback";
|
|
|
|
post_allow.host = [ "::1" ];
|
|
|
|
};
|
|
|
|
|
|
|
|
storage.wopi = {
|
|
|
|
"@allow" = true;
|
|
|
|
host = [ config.services.nextcloud.hostName ] ++ config.services.nextcloud.settings.trusted_domains;
|
|
|
|
};
|
|
|
|
|
|
|
|
server_name = config.custom.collabora_domain;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
nginx.virtualHosts.${config.services.collabora-online.settings.server_name} = {
|
|
|
|
locations."/" = {
|
|
|
|
proxyPass = "http://[::1]:${toString config.services.collabora-online.port}";
|
|
|
|
proxyWebsockets = true; # collabora uses websockets
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
nextcloud = {
|
|
|
|
appstoreEnable = true;
|
|
|
|
extraAppsEnable = true;
|
|
|
|
extraApps = with config.services.nextcloud.package.packages.apps; {
|
|
|
|
inherit
|
|
|
|
richdocuments
|
|
|
|
;
|
|
|
|
};
|
|
|
|
};
|
2025-04-01 00:39:43 +03:00
|
|
|
};
|
2025-04-20 23:15:51 +03:00
|
|
|
}
|
|
|
|
)
|
|
|
|
];
|
2024-06-02 16:18:19 +03:00
|
|
|
}
|