summaryrefslogtreecommitdiff
path: root/modules/nextcloud.nix
diff options
context:
space:
mode:
authorAzat Bahawi <azat@bahawi.net>2024-04-21 02:15:42 +0300
committerAzat Bahawi <azat@bahawi.net>2024-04-21 02:15:42 +0300
commite6ed60548397627bf10f561f9438201dbba0a36e (patch)
treef9a84c5957d2cc4fcd148065ee9365a0c851ae1c /modules/nextcloud.nix
parent9ac64328603d44bd272175942d3ea3eaadcabd04 (diff)
2024-04-21
Diffstat (limited to 'modules/nextcloud.nix')
-rw-r--r--modules/nextcloud.nix143
1 files changed, 143 insertions, 0 deletions
diff --git a/modules/nextcloud.nix b/modules/nextcloud.nix
new file mode 100644
index 0000000..4053c38
--- /dev/null
+++ b/modules/nextcloud.nix
@@ -0,0 +1,143 @@
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}:
+with lib;
+let
+ cfg = config.nixfiles.modules.nextcloud;
+in
+{
+ options.nixfiles.modules.nextcloud = {
+ enable = mkEnableOption "Nextcloud";
+
+ domain = mkOption {
+ description = "Domain name sans protocol scheme.";
+ type = with types; str;
+ default = "nextcloud.${config.networking.domain}";
+ };
+ };
+
+ config = mkIf cfg.enable {
+ nixfiles.modules = {
+ nginx = {
+ enable = true;
+ virtualHosts.${cfg.domain} = { };
+ };
+ postgresql.enable = true;
+ };
+
+ services =
+ let
+ db = "nextcloud";
+ in
+ {
+ nextcloud = mkMerge [
+ {
+ enable = true;
+ package = pkgs.nextcloud23;
+
+ hostName = cfg.domain;
+
+ appstoreEnable = false;
+
+ config = {
+ adminpassFile = null; # This needs to be set as secret.
+
+ dbtype = "pgsql";
+ dbhost = "/run/postgresql";
+ dbuser = db;
+ dbname = db;
+
+ defaultPhoneRegion = "RU";
+ };
+
+ extraApps =
+ let
+ mkNextcloudApp =
+ {
+ name,
+ version,
+ hash,
+ }:
+ pkgs.fetchNextcloudApp {
+ inherit name version hash;
+ url = "https://github.com/nextcloud/${name}/archive/refs/tags/v${version}.tar.gz";
+ };
+ in
+ {
+ contacts = mkNextcloudApp {
+ name = "contacts";
+ version = "4.0.1";
+ sha256 = "sha256-dXKsG8KmlUojeY5dUn/XsMD3KaSh4QcZFOGDdcqlSvE=";
+ };
+ calendar = mkNextcloudApp {
+ name = "calendar";
+ version = "3.0.5";
+ sha256 = "sha256-aKUKm7fWJQxOWwma56Tv+GGIo+p0n30Nhoyt4XoxsjI=";
+ };
+ files_rightclick = mkNextcloudApp {
+ name = "files_rightclick";
+ version = "23.0.1";
+ sha256 = "sha256-VYODzkvvGrtpyRoug/8UPKhAgfCx1ltP1JdGPiB/lts=";
+ };
+ unsplash = mkNextcloudApp {
+ name = "unsplash";
+ version = "1.2.4";
+ sha256 = "sha256-KGSkBOrNu0nK0YvAPYaxEL/kZNoJQD1oBV2aUBxh6cI=";
+ };
+ previewgenerator = mkNextcloudApp {
+ name = "previewgenerator";
+ version = "3.4.1";
+ sha256 = "sha256-IUdj0xWt5zHxQoiMv1bYyYTzekuOFrsRIe530QOwC/w=";
+ };
+ bruteforcesettings = mkNextcloudApp {
+ name = "bruteforcesettings";
+ version = "2.3.0";
+ sha256 = "sha256-J7ujmiPaw8GI7vDfVPXEum2XAMWvahciP8C6iXgckdE=";
+ };
+ };
+ }
+ (mkIf config.nixfiles.modules.acme.enable {
+ https = true;
+ config.overwriteProtocol = "https";
+ })
+ ];
+
+ postgresql = {
+ ensureDatabases = [ db ];
+ ensureUsers = [
+ {
+ name = db;
+ ensureDBOwnership = true;
+ }
+ ];
+ };
+ };
+
+ systemd = {
+ services = {
+ nextcloud-setup.after = [
+ "network-online.target"
+ "postgresql.service"
+ ];
+
+ nextcloud-preview-generate-cron.serviceConfig = {
+ Type = "oneshot";
+ User = "nextcloud";
+ ExecStart = "${config.services.nextcloud.occ}/bin/nextcloud-occ preview:pre-generate";
+ };
+ };
+
+ timers.nextcloud-preview-generate = {
+ wantedBy = [ "timers.target" ];
+ timerConfig = {
+ OnBootSec = "15m";
+ OnUnitActiveSec = "15m";
+ Unit = "nextcloud-preview-generate-cron.service";
+ };
+ };
+ };
+ };
+}