move custom nextcloud service option into separate file

This commit is contained in:
Jonas Heinrich 2024-03-28 16:29:06 +01:00
parent bc7778e46c
commit 66e4ecdfe6
6 changed files with 140 additions and 40 deletions

1
.vscode/launch.json vendored
View file

@ -16,6 +16,7 @@
"/var/lib/nextcloud/server/apps/dav": "${workspaceRoot}/server/apps/dav", "/var/lib/nextcloud/server/apps/dav": "${workspaceRoot}/server/apps/dav",
"/var/lib/nextcloud/dev-apps/circles": "${workspaceRoot}/circles", "/var/lib/nextcloud/dev-apps/circles": "${workspaceRoot}/circles",
"/var/lib/nextcloud/store-apps/calendar": "${workspaceRoot}/calendar", "/var/lib/nextcloud/store-apps/calendar": "${workspaceRoot}/calendar",
"/var/lib/nextcloud/store-apps/cleanup": "${workspaceRoot}/cleanup",
}, },
} }
] ]

12
flake.lock generated
View file

@ -5,11 +5,11 @@
"nixpkgs": "nixpkgs" "nixpkgs": "nixpkgs"
}, },
"locked": { "locked": {
"lastModified": 1698737528, "lastModified": 1711263551,
"narHash": "sha256-65qiCQPFGCpdjcfQrO1EZKe+LFD0tzmlecFOACNwMbY=", "narHash": "sha256-lDaSa0yT0uzFXq1rB0DbD5MNi2TmG9DaTrZqZoPP/I4=",
"owner": "Mic92", "owner": "Mic92",
"repo": "nixos-shell", "repo": "nixos-shell",
"rev": "8a835e240adc32e68d6fc7ca5aaf3f597de08d5f", "rev": "b7e8a0c75c99d81039d1ca7eaab227e4814de638",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -35,11 +35,11 @@
}, },
"nixpkgs_2": { "nixpkgs_2": {
"locked": { "locked": {
"lastModified": 1705916986, "lastModified": 1711460390,
"narHash": "sha256-iBpfltu6QvN4xMpen6jGGEb6jOqmmVQKUrXdOJ32u8w=", "narHash": "sha256-akSgjDZL6pVHEfSE6sz1DNSXuYX6hq+P/1Z5IoYWs7E=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "d7f206b723e42edb09d9d753020a84b3061a79d8", "rev": "44733514b72e732bd49f5511bd0203dea9b9a434",
"type": "github" "type": "github"
}, },
"original": { "original": {

View file

@ -31,6 +31,8 @@
phpunit phpunit
nodejs nodejs
nodePackages.rollup nodePackages.rollup
act
npm-check-updates
]; ];
}; };
}; };

View file

@ -0,0 +1,87 @@
{
config,
lib,
...
}: let
inherit
(lib)
optionalString
escapeShellArg
types
concatStringsSep
mapAttrsToList
mkIf
mkOption
;
cfg = config.services.nextcloud;
in {
options = {
services.nextcloud = {
ensureUsers = mkOption {
default = {};
description = lib.mdDoc ''
List of user accounts which get automatically created if they don't
exist yet. This option does not delete accounts which are not listed
anymore.
'';
example = {
user1 = {
passwordFile = /secrets/user1-localhost;
email = "user1@localhost";
};
user2 = {
passwordFile = /secrets/user2-localhost;
email = "user2@localhost";
};
};
type = types.attrsOf (types.submodule {
options = {
passwordFile = mkOption {
type = types.path;
example = "/path/to/file";
default = null;
description = lib.mdDoc ''
Specifies the path to a file containing the
clear text password for the user.
'';
};
email = mkOption {
type = types.str;
example = "user1@localhost";
default = null;
};
};
});
};
};
};
config = mkIf cfg.enable {
systemd.services.nextcloud-ensure-users = {
enable = true;
script = ''
${optionalString (cfg.ensureUsers != {}) ''
${concatStringsSep "\n" (mapAttrsToList (name: cfg: ''
if ${config.services.nextcloud.occ}/bin/nextcloud-occ user:info "${name}" | grep "user not found"; then
export OC_PASS="$(cat ${escapeShellArg cfg.passwordFile})"
${config.services.nextcloud.occ}/bin/nextcloud-occ user:add --password-from-env "${name}"
fi
if ! ${config.services.nextcloud.occ}/bin/nextcloud-occ user:info "${name}" | grep "user not found"; then
${optionalString (cfg.email != null) ''
${config.services.nextcloud.occ}/bin/nextcloud-occ user:setting "${name}" settings email "${cfg.email}"
''}
fi
'') cfg.ensureUsers)}
''}
'';
wantedBy = [ "multi-user.target" ];
after = ["nextcloud-setup.service"];
};
};
}

2
server

@ -1 +1 @@
Subproject commit 28e0ccfed906525183306ff3d38b67075d688773 Subproject commit 7d1ca956a7a09cb3777114d3c8849415382066fd

View file

@ -5,13 +5,8 @@
cores = 4; cores = 4;
}; };
# FIXME
# is it possible to extend existing module with additional options using flake?
disabledModules = [
"services/web-apps/nextcloud.nix"
];
imports = [ imports = [
"${fetchTarball "https://github.com/onny/nixpkgs/archive/nextcloud-ensureusers.tar.gz"}/nixos/modules/services/web-apps/nextcloud.nix" ./nextcloud-ensure-users.nix
]; ];
nixpkgs = { nixpkgs = {
@ -20,8 +15,6 @@
# Remove first run wizard and password policy check from Nextcloud # Remove first run wizard and password policy check from Nextcloud
# package # package
nextcloud28 = super.nextcloud28.overrideAttrs (oldAttrs: rec { nextcloud28 = super.nextcloud28.overrideAttrs (oldAttrs: rec {
#patches = [];
#src = ./server;
installPhase = oldAttrs.installPhase + '' installPhase = oldAttrs.installPhase + ''
mkdir -p $out/ mkdir -p $out/
cp -R . $out/ cp -R . $out/
@ -89,22 +82,36 @@
}; };
appstoreEnable = true; appstoreEnable = true;
configureRedis = true; configureRedis = true;
# FIXME rename to settings with 24.05
extraOptions = { extraOptions = {
mail_smtpmode = "sendmail"; mail_smtpmode = "sendmail";
mail_sendmailmode = "pipe"; mail_sendmailmode = "pipe";
trusted_domains = [ "10.100.100.1" ]; trusted_domains = [ "10.100.100.1" ];
"integrity.check.disabled" = true; "integrity.check.disabled" = true;
debug = true; debug = true;
#apps_paths = [
# {
# path = "/var/lib/nextcloud/server/apps";
# url = "/apps";
# writable = false;
# }
#];
}; };
}; };
nixos-shell.mounts.extraMounts = { nixos-shell.mounts.extraMounts = {
"/var/lib/nextcloud/store-apps/cleanup" = { #"/var/lib/nextcloud/store-apps/cleanup" = {
target = /home/onny/projects/nixos-nextcloud-testumgebung/cleanup; # target = /home/onny/projects/nixos-nextcloud-testumgebung/cleanup;
cache = "none"; # cache = "none";
}; #};
#"/var/lib/nextcloud/server" = {
# target = /home/onny/projects/nixos-nextcloud-testumgebung/server;
# cache = "none";
#};
}; };
#services.nginx.virtualHosts."localhost".root = lib.mkForce "/var/lib/nextcloud/server";
# Setup mail server # Setup mail server
services.maddy = { services.maddy = {
enable = true; enable = true;
@ -146,10 +153,13 @@
}; };
}; };
#system.fsPackages = [ pkgs.bindfs ];
system.stateVersion = "23.11"; system.stateVersion = "23.11";
environment.systemPackages = with pkgs; [
sqlite sqldiff
unzip wget
];
documentation = { documentation = {
info.enable = false; info.enable = false;
man.enable = false; man.enable = false;