Files
kurogeek e1e4687168 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.
2026-10-22 17:32:15 +07:00

80 lines
2.4 KiB
Nix

{ ... }:
{
_class = "clan.service";
manifest.name = "nextcloud";
manifest.description = "Nextcloud server, a safe home for all your data";
manifest.readme = "Nextcloud server, a safe home for all your data";
manifest.categories = [ "System" ];
roles.default = {
description = "a default server role";
perInstance.nixosModule =
{
config,
pkgs,
lib,
...
}:
{
clan.core.vars.generators.nextcloud = {
files = {
adminpassFile = {
owner = "nextcloud";
group = "nextcloud";
secret = true;
};
};
script = ''
xkcdpass --numwords 4 --delimiter - --count 1 | tr -d "\n" > "$out"/adminpassFile
'';
runtimeInputs = [
pkgs.xkcdpass
];
};
services.nextcloud = {
enable = lib.mkDefault true;
hostName = lib.mkDefault "localhost";
database.createLocally = lib.mkDefault true;
config = {
dbtype = lib.mkDefault "pgsql";
dbhost = lib.mkDefault "/run/postgresql";
dbuser = lib.mkDefault "nextcloud";
dbname = lib.mkDefault "nextcloud";
};
};
# 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 = [
config.services.nextcloud.home
]
++ (
if config.services.nextcloud.home != config.services.nextcloud.datadir then
[ config.services.nextcloud.datadir ]
else
[ ]
);
};
};
}