From 434a2783b80a799c5abddb71d9ea8945c9750f5e Mon Sep 17 00:00:00 2001 From: Aaron Andersen Date: Sat, 9 Jan 2021 11:53:30 -0500 Subject: [PATCH 1/4] nixos/nextcloud: add phpExtraExtensions option --- nixos/modules/services/web-apps/nextcloud.nix | 33 ++++++++++++------- nixos/tests/nextcloud/basic.nix | 1 + 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/nixos/modules/services/web-apps/nextcloud.nix b/nixos/modules/services/web-apps/nextcloud.nix index da019aa2507..448522ad5e8 100644 --- a/nixos/modules/services/web-apps/nextcloud.nix +++ b/nixos/modules/services/web-apps/nextcloud.nix @@ -6,17 +6,13 @@ let cfg = config.services.nextcloud; fpm = config.services.phpfpm.pools.nextcloud; - phpPackage = - let - base = pkgs.php74; - in - base.buildEnv { - extensions = { enabled, all }: with all; - enabled ++ [ - apcu redis memcached imagick - ]; - extraConfig = phpOptionsStr; - }; + phpPackage = pkgs.php74.buildEnv { + extensions = { enabled, all }: + enabled + ++ (with all; [ apcu redis memcached imagick ]) # Necessary for vanilla nextcloud + ++ cfg.phpExtraExtensions all; # Enabled by user + extraConfig = phpOptionsStr; + }; toKeyValue = generators.toKeyValue { mkKeyValue = generators.mkKeyValueDefault {} " = "; @@ -116,6 +112,21 @@ in { ''; }; + phpExtraExtensions = mkOption { + type = with types; functionTo (listOf package); + default = all: []; + defaultText = "all: []"; + description = '' + Additional PHP extensions to use for nextcloud. + By default, only extensions necessary for a vanilla nextcloud installation are enabled, + but you may choose from the list of available extensions and add further ones. + This is sometimes necessary to be able to install a certain nextcloud app that has additional requirements. + ''; + example = literalExample '' + all: [ all.pdlib all.bz2 ] + ''; + }; + phpOptions = mkOption { type = types.attrsOf types.str; default = { diff --git a/nixos/tests/nextcloud/basic.nix b/nixos/tests/nextcloud/basic.nix index 78142d37966..90050447042 100644 --- a/nixos/tests/nextcloud/basic.nix +++ b/nixos/tests/nextcloud/basic.nix @@ -42,6 +42,7 @@ in { enable = true; startAt = "20:00"; }; + phpExtraExtensions = all: [ all.bz2 ]; }; environment.systemPackages = [ cfg.services.nextcloud.occ ]; From f72c123b6e94a7af1f2ed7e3391b8f786773582d Mon Sep 17 00:00:00 2001 From: Aaron Andersen Date: Sat, 9 Jan 2021 11:57:09 -0500 Subject: [PATCH 2/4] nixos/nextcloud: remove duplicate php.ini entries --- nixos/modules/services/web-apps/nextcloud.nix | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/nixos/modules/services/web-apps/nextcloud.nix b/nixos/modules/services/web-apps/nextcloud.nix index 448522ad5e8..a2d6d48fd40 100644 --- a/nixos/modules/services/web-apps/nextcloud.nix +++ b/nixos/modules/services/web-apps/nextcloud.nix @@ -11,7 +11,7 @@ let enabled ++ (with all; [ apcu redis memcached imagick ]) # Necessary for vanilla nextcloud ++ cfg.phpExtraExtensions all; # Enabled by user - extraConfig = phpOptionsStr; + extraConfig = toKeyValue phpOptions; }; toKeyValue = generators.toKeyValue { @@ -23,7 +23,6 @@ let post_max_size = cfg.maxUploadSize; memory_limit = cfg.maxUploadSize; } // cfg.phpOptions; - phpOptionsStr = toKeyValue phpOptions; occ = pkgs.writeScriptBin "nextcloud-occ" '' #! ${pkgs.runtimeShell} @@ -522,7 +521,6 @@ in { pools.nextcloud = { user = "nextcloud"; group = "nextcloud"; - phpOptions = phpOptionsStr; phpPackage = phpPackage; phpEnv = { NEXTCLOUD_CONFIG_DIR = "${cfg.home}/config"; From 6cf2b5466dd9f06b5b3982ee07d4065e1256de93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20B=C3=A4renz?= Date: Mon, 11 Jan 2021 18:24:53 +0100 Subject: [PATCH 3/4] nixos/nextcloud: add documentation for phpExtraExtensions option --- nixos/modules/services/web-apps/nextcloud.xml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/nixos/modules/services/web-apps/nextcloud.xml b/nixos/modules/services/web-apps/nextcloud.xml index f71c8df6c6d..6cbfda118c4 100644 --- a/nixos/modules/services/web-apps/nextcloud.xml +++ b/nixos/modules/services/web-apps/nextcloud.xml @@ -182,6 +182,17 @@ +
+ Installing Apps and PHP extensions + + + Nextcloud apps are installed statefully through the web interface. + + Some apps may require extra PHP extensions to be installed. + This can be configured with the setting. + +
+
Maintainer information From 0ff63a3fa6f5a3da5bc7d85f6fe0cc5f87df94b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20B=C3=A4renz?= Date: Mon, 11 Jan 2021 22:15:22 +0100 Subject: [PATCH 4/4] nixos/nextcloud: Conditionally enable caching PHP extensions --- nixos/modules/services/web-apps/nextcloud.nix | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/nixos/modules/services/web-apps/nextcloud.nix b/nixos/modules/services/web-apps/nextcloud.nix index a2d6d48fd40..1b643bd3260 100644 --- a/nixos/modules/services/web-apps/nextcloud.nix +++ b/nixos/modules/services/web-apps/nextcloud.nix @@ -8,8 +8,14 @@ let phpPackage = pkgs.php74.buildEnv { extensions = { enabled, all }: - enabled - ++ (with all; [ apcu redis memcached imagick ]) # Necessary for vanilla nextcloud + (with all; + enabled + ++ [ imagick ] # Always enabled + # Optionally enabled depending on caching settings + ++ optional cfg.caching.apcu apcu + ++ optional cfg.caching.redis redis + ++ optional cfg.caching.memcached memcached + ) ++ cfg.phpExtraExtensions all; # Enabled by user extraConfig = toKeyValue phpOptions; };