From 8b5ea6d81e2e6955929a28322080c0d4f0af75fa Mon Sep 17 00:00:00 2001 From: kurogeek Date: Thu, 22 Oct 2026 04:53:24 +0000 Subject: [PATCH] nextcloud: create admin user via occ nixpkgs removed services.nextcloud.config.{adminuser,adminpassFile} and now installs with --disable-admin-user. Add a nextcloud-admin-user oneshot that creates the admin account from the vars secret after nextcloud-setup. --- modules/clan/nextcloud/default.nix | 21 +++++++++++++++++++-- modules/clan/nextcloud/tests/vm/default.nix | 4 ++-- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/modules/clan/nextcloud/default.nix b/modules/clan/nextcloud/default.nix index d8c744b4..d66331b1 100644 --- a/modules/clan/nextcloud/default.nix +++ b/modules/clan/nextcloud/default.nix @@ -42,10 +42,27 @@ dbhost = lib.mkDefault "/run/postgresql"; dbuser = lib.mkDefault "nextcloud"; dbname = lib.mkDefault "nextcloud"; - adminuser = lib.mkDefault "admin"; - adminpassFile = lib.mkDefault config.clan.core.vars.generators.nextcloud.files.adminpassFile.path; }; + }; + # nixpkgs installs Nextcloud with --disable-admin-user; create the + # admin account ourselves once the instance is installed. + systemd.services.nextcloud-admin-user = { + wantedBy = [ "multi-user.target" ]; + after = [ "nextcloud-setup.service" ]; + requires = [ "nextcloud-setup.service" ]; + before = [ "phpfpm-nextcloud.service" ]; + path = [ config.services.nextcloud.occ ]; + serviceConfig = { + Type = "oneshot"; + User = "nextcloud"; + }; + script = '' + if ! nextcloud-occ user:info admin >/dev/null 2>&1; then + NC_PASS="$(<${config.clan.core.vars.generators.nextcloud.files.adminpassFile.path})" \ + nextcloud-occ user:add admin --password-from-env --group admin + fi + ''; }; clan.core.state.nextcloud.folders = [ diff --git a/modules/clan/nextcloud/tests/vm/default.nix b/modules/clan/nextcloud/tests/vm/default.nix index 79387318..fec39eec 100644 --- a/modules/clan/nextcloud/tests/vm/default.nix +++ b/modules/clan/nextcloud/tests/vm/default.nix @@ -31,7 +31,7 @@ server.wait_for_unit("phpfpm-nextcloud.service") - # Check that garage is running - server.succeed("systemctl status phpfpm-nextcloud.service") + # Admin account exists and is in the admin group + server.succeed("nextcloud-occ user:info admin --output=json | grep -q '\"groups\":\\[\"admin\"\\]'") ''; }