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.
80 lines
2.4 KiB
Nix
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
|
|
[ ]
|
|
);
|
|
};
|
|
};
|
|
}
|