···11-{ config, lib, pkgs, ... }:
11+{
22+ config,
33+ lib,
44+ pkgs,
55+ ...
66+}:
27let
3849 cfg = config.services.mysql;
···813 # Oracle MySQL has supported "notify" service type since 8.0
914 hasNotify = isMariaDB || (isOracle && lib.versionAtLeast cfg.package.version "8.0");
10151111- mysqldOptions =
1212- "--user=${cfg.user} --datadir=${cfg.dataDir} --basedir=${cfg.package}";
1616+ mysqldOptions = "--user=${cfg.user} --datadir=${cfg.dataDir} --basedir=${cfg.package}";
13171418 format = pkgs.formats.ini { listsAsDuplicateKeys = true; };
1519 configFile = format.generate "my.cnf" cfg.settings;
···18221923{
2024 imports = [
2121- (lib.mkRemovedOptionModule [ "services" "mysql" "pidDir" ] "Don't wait for pidfiles, describe dependencies through systemd.")
2222- (lib.mkRemovedOptionModule [ "services" "mysql" "rootPassword" ] "Use socket authentication or set the password outside of the nix store.")
2323- (lib.mkRemovedOptionModule [ "services" "mysql" "extraOptions" ] "Use services.mysql.settings.mysqld instead.")
2424- (lib.mkRemovedOptionModule [ "services" "mysql" "bind" ] "Use services.mysql.settings.mysqld.bind-address instead.")
2525- (lib.mkRemovedOptionModule [ "services" "mysql" "port" ] "Use services.mysql.settings.mysqld.port instead.")
2525+ (lib.mkRemovedOptionModule [
2626+ "services"
2727+ "mysql"
2828+ "pidDir"
2929+ ] "Don't wait for pidfiles, describe dependencies through systemd.")
3030+ (lib.mkRemovedOptionModule [
3131+ "services"
3232+ "mysql"
3333+ "rootPassword"
3434+ ] "Use socket authentication or set the password outside of the nix store.")
3535+ (lib.mkRemovedOptionModule [
3636+ "services"
3737+ "mysql"
3838+ "extraOptions"
3939+ ] "Use services.mysql.settings.mysqld instead.")
4040+ (lib.mkRemovedOptionModule [
4141+ "services"
4242+ "mysql"
4343+ "bind"
4444+ ] "Use services.mysql.settings.mysqld.bind-address instead.")
4545+ (lib.mkRemovedOptionModule [
4646+ "services"
4747+ "mysql"
4848+ "port"
4949+ ] "Use services.mysql.settings.mysqld.port instead.")
2650 ];
27512852 ###### interface
···106130107131 settings = lib.mkOption {
108132 type = format.type;
109109- default = {};
133133+ default = { };
110134 description = ''
111135 MySQL configuration. Refer to
112136 <https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html>,
···137161 };
138162139163 initialDatabases = lib.mkOption {
140140- type = lib.types.listOf (lib.types.submodule {
141141- options = {
142142- name = lib.mkOption {
143143- type = lib.types.str;
144144- description = ''
145145- The name of the database to create.
146146- '';
164164+ type = lib.types.listOf (
165165+ lib.types.submodule {
166166+ options = {
167167+ name = lib.mkOption {
168168+ type = lib.types.str;
169169+ description = ''
170170+ The name of the database to create.
171171+ '';
172172+ };
173173+ schema = lib.mkOption {
174174+ type = lib.types.nullOr lib.types.path;
175175+ default = null;
176176+ description = ''
177177+ The initial schema of the database; if null (the default),
178178+ an empty database is created.
179179+ '';
180180+ };
147181 };
148148- schema = lib.mkOption {
149149- type = lib.types.nullOr lib.types.path;
150150- default = null;
151151- description = ''
152152- The initial schema of the database; if null (the default),
153153- an empty database is created.
154154- '';
155155- };
156156- };
157157- });
158158- default = [];
182182+ }
183183+ );
184184+ default = [ ];
159185 description = ''
160186 List of database names and their initial schemas that should be used to create databases on the first startup
161187 of MySQL. The schema attribute is optional: If not specified, an empty database is created.
···176202177203 ensureDatabases = lib.mkOption {
178204 type = lib.types.listOf lib.types.str;
179179- default = [];
205205+ default = [ ];
180206 description = ''
181207 Ensures that the specified databases exist.
182208 This option will never delete existing databases, especially not when the value of this
···190216 };
191217192218 ensureUsers = lib.mkOption {
193193- type = lib.types.listOf (lib.types.submodule {
194194- options = {
195195- name = lib.mkOption {
196196- type = lib.types.str;
197197- description = ''
198198- Name of the user to ensure.
199199- '';
200200- };
201201- ensurePermissions = lib.mkOption {
202202- type = lib.types.attrsOf lib.types.str;
203203- default = {};
204204- description = ''
205205- Permissions to ensure for the user, specified as attribute set.
206206- The attribute names specify the database and tables to grant the permissions for,
207207- separated by a dot. You may use wildcards here.
208208- The attribute values specfiy the permissions to grant.
209209- You may specify one or multiple comma-separated SQL privileges here.
219219+ type = lib.types.listOf (
220220+ lib.types.submodule {
221221+ options = {
222222+ name = lib.mkOption {
223223+ type = lib.types.str;
224224+ description = ''
225225+ Name of the user to ensure.
226226+ '';
227227+ };
228228+ ensurePermissions = lib.mkOption {
229229+ type = lib.types.attrsOf lib.types.str;
230230+ default = { };
231231+ description = ''
232232+ Permissions to ensure for the user, specified as attribute set.
233233+ The attribute names specify the database and tables to grant the permissions for,
234234+ separated by a dot. You may use wildcards here.
235235+ The attribute values specfiy the permissions to grant.
236236+ You may specify one or multiple comma-separated SQL privileges here.
210237211211- For more information on how to specify the target
212212- and on which privileges exist, see the
213213- [GRANT syntax](https://mariadb.com/kb/en/library/grant/).
214214- The attributes are used as `GRANT ''${attrName} ON ''${attrValue}`.
215215- '';
216216- example = lib.literalExpression ''
217217- {
218218- "database.*" = "ALL PRIVILEGES";
219219- "*.*" = "SELECT, LOCK TABLES";
220220- }
221221- '';
238238+ For more information on how to specify the target
239239+ and on which privileges exist, see the
240240+ [GRANT syntax](https://mariadb.com/kb/en/library/grant/).
241241+ The attributes are used as `GRANT ''${attrName} ON ''${attrValue}`.
242242+ '';
243243+ example = lib.literalExpression ''
244244+ {
245245+ "database.*" = "ALL PRIVILEGES";
246246+ "*.*" = "SELECT, LOCK TABLES";
247247+ }
248248+ '';
249249+ };
222250 };
223223- };
224224- });
225225- default = [];
251251+ }
252252+ );
253253+ default = [ ];
226254 description = ''
227255 Ensures that the specified users exist and have at least the ensured permissions.
228256 The MySQL users will be identified using Unix socket authentication. This authenticates the Unix user with the
···251279252280 replication = {
253281 role = lib.mkOption {
254254- type = lib.types.enum [ "master" "slave" "none" ];
282282+ type = lib.types.enum [
283283+ "master"
284284+ "slave"
285285+ "none"
286286+ ];
255287 default = "none";
256288 description = "Role of the MySQL server instance.";
257289 };
···291323 };
292324293325 };
294294-295326296327 ###### implementation
297328298329 config = lib.mkIf cfg.enable {
299330300300- services.mysql.dataDir =
301301- lib.mkDefault (if lib.versionAtLeast config.system.stateVersion "17.09" then "/var/lib/mysql"
302302- else "/var/mysql");
331331+ services.mysql.dataDir = lib.mkDefault (
332332+ if lib.versionAtLeast config.system.stateVersion "17.09" then "/var/lib/mysql" else "/var/mysql"
333333+ );
303334304335 services.mysql.settings.mysqld = lib.mkMerge [
305336 {
···311342 log-bin-index = "mysql-bin-${toString cfg.replication.serverId}.index";
312343 relay-log = "mysql-relay-bin";
313344 server-id = cfg.replication.serverId;
314314- binlog-ignore-db = [ "information_schema" "performance_schema" "mysql" ];
345345+ binlog-ignore-db = [
346346+ "information_schema"
347347+ "performance_schema"
348348+ "mysql"
349349+ ];
315350 })
316351 (lib.mkIf (!isMariaDB) {
317352 plugin-load-add = [ "auth_socket.so" ];
···355390 pkgs.nettools
356391 ];
357392358358- preStart = if isMariaDB then ''
359359- if ! test -e ${cfg.dataDir}/mysql; then
360360- ${cfg.package}/bin/mysql_install_db --defaults-file=/etc/my.cnf ${mysqldOptions}
361361- touch ${cfg.dataDir}/mysql_init
362362- fi
363363- '' else ''
364364- if ! test -e ${cfg.dataDir}/mysql; then
365365- ${cfg.package}/bin/mysqld --defaults-file=/etc/my.cnf ${mysqldOptions} --initialize-insecure
366366- touch ${cfg.dataDir}/mysql_init
367367- fi
368368- '';
393393+ preStart =
394394+ if isMariaDB then
395395+ ''
396396+ if ! test -e ${cfg.dataDir}/mysql; then
397397+ ${cfg.package}/bin/mysql_install_db --defaults-file=/etc/my.cnf ${mysqldOptions}
398398+ touch ${cfg.dataDir}/mysql_init
399399+ fi
400400+ ''
401401+ else
402402+ ''
403403+ if ! test -e ${cfg.dataDir}/mysql; then
404404+ ${cfg.package}/bin/mysqld --defaults-file=/etc/my.cnf ${mysqldOptions} --initialize-insecure
405405+ touch ${cfg.dataDir}/mysql_init
406406+ fi
407407+ '';
369408370409 script = ''
371410 # https://mariadb.com/kb/en/getting-started-with-mariadb-galera-cluster/#systemd-and-galera-recovery
···379418 exec ${cfg.package}/bin/mysqld --defaults-file=/etc/my.cnf ${mysqldOptions} $_WSREP_NEW_CLUSTER $_WSREP_START_POSITION
380419 '';
381420382382- postStart = let
383383- # The super user account to use on *first* run of MySQL server
384384- superUser = if isMariaDB then cfg.user else "root";
385385- in ''
386386- ${lib.optionalString (!hasNotify) ''
387387- # Wait until the MySQL server is available for use
388388- while [ ! -e /run/mysqld/mysqld.sock ]
389389- do
390390- echo "MySQL daemon not yet started. Waiting for 1 second..."
391391- sleep 1
392392- done
393393- ''}
421421+ postStart =
422422+ let
423423+ # The super user account to use on *first* run of MySQL server
424424+ superUser = if isMariaDB then cfg.user else "root";
425425+ in
426426+ ''
427427+ ${lib.optionalString (!hasNotify) ''
428428+ # Wait until the MySQL server is available for use
429429+ while [ ! -e /run/mysqld/mysqld.sock ]
430430+ do
431431+ echo "MySQL daemon not yet started. Waiting for 1 second..."
432432+ sleep 1
433433+ done
434434+ ''}
394435395395- if [ -f ${cfg.dataDir}/mysql_init ]
396396- then
397397- # While MariaDB comes with a 'mysql' super user account since 10.4.x, MySQL does not
398398- # Since we don't want to run this service as 'root' we need to ensure the account exists on first run
399399- ( echo "CREATE USER IF NOT EXISTS '${cfg.user}'@'localhost' IDENTIFIED WITH ${if isMariaDB then "unix_socket" else "auth_socket"};"
400400- echo "GRANT ALL PRIVILEGES ON *.* TO '${cfg.user}'@'localhost' WITH GRANT OPTION;"
401401- ) | ${cfg.package}/bin/mysql -u ${superUser} -N
436436+ if [ -f ${cfg.dataDir}/mysql_init ]
437437+ then
438438+ # While MariaDB comes with a 'mysql' super user account since 10.4.x, MySQL does not
439439+ # Since we don't want to run this service as 'root' we need to ensure the account exists on first run
440440+ ( echo "CREATE USER IF NOT EXISTS '${cfg.user}'@'localhost' IDENTIFIED WITH ${
441441+ if isMariaDB then "unix_socket" else "auth_socket"
442442+ };"
443443+ echo "GRANT ALL PRIVILEGES ON *.* TO '${cfg.user}'@'localhost' WITH GRANT OPTION;"
444444+ ) | ${cfg.package}/bin/mysql -u ${superUser} -N
402445403403- ${lib.concatMapStrings (database: ''
404404- # Create initial databases
405405- if ! test -e "${cfg.dataDir}/${database.name}"; then
406406- echo "Creating initial database: ${database.name}"
407407- ( echo 'create database `${database.name}`;'
446446+ ${lib.concatMapStrings (database: ''
447447+ # Create initial databases
448448+ if ! test -e "${cfg.dataDir}/${database.name}"; then
449449+ echo "Creating initial database: ${database.name}"
450450+ ( echo 'create database `${database.name}`;'
408451409409- ${lib.optionalString (database.schema != null) ''
410410- echo 'use `${database.name}`;'
452452+ ${lib.optionalString (database.schema != null) ''
453453+ echo 'use `${database.name}`;'
411454412412- # TODO: this silently falls through if database.schema does not exist,
413413- # we should catch this somehow and exit, but can't do it here because we're in a subshell.
414414- if [ -f "${database.schema}" ]
415415- then
416416- cat ${database.schema}
417417- elif [ -d "${database.schema}" ]
418418- then
419419- cat ${database.schema}/mysql-databases/*.sql
420420- fi
421421- ''}
422422- ) | ${cfg.package}/bin/mysql -u ${superUser} -N
423423- fi
424424- '') cfg.initialDatabases}
455455+ # TODO: this silently falls through if database.schema does not exist,
456456+ # we should catch this somehow and exit, but can't do it here because we're in a subshell.
457457+ if [ -f "${database.schema}" ]
458458+ then
459459+ cat ${database.schema}
460460+ elif [ -d "${database.schema}" ]
461461+ then
462462+ cat ${database.schema}/mysql-databases/*.sql
463463+ fi
464464+ ''}
465465+ ) | ${cfg.package}/bin/mysql -u ${superUser} -N
466466+ fi
467467+ '') cfg.initialDatabases}
425468426426- ${lib.optionalString (cfg.replication.role == "master")
427427- ''
469469+ ${lib.optionalString (cfg.replication.role == "master") ''
428470 # Set up the replication master
429471430472 ( echo "use mysql;"
···434476 ) | ${cfg.package}/bin/mysql -u ${superUser} -N
435477 ''}
436478437437- ${lib.optionalString (cfg.replication.role == "slave")
438438- ''
479479+ ${lib.optionalString (cfg.replication.role == "slave") ''
439480 # Set up the replication slave
440481441482 ( echo "stop slave;"
···444485 ) | ${cfg.package}/bin/mysql -u ${superUser} -N
445486 ''}
446487447447- ${lib.optionalString (cfg.initialScript != null)
448448- ''
488488+ ${lib.optionalString (cfg.initialScript != null) ''
449489 # Execute initial script
450490 # using toString to avoid copying the file to nix store if given as path instead of string,
451491 # as it might contain credentials
452492 cat ${toString cfg.initialScript} | ${cfg.package}/bin/mysql -u ${superUser} -N
453493 ''}
454494455455- rm ${cfg.dataDir}/mysql_init
456456- fi
495495+ rm ${cfg.dataDir}/mysql_init
496496+ fi
457497458458- ${lib.optionalString (cfg.ensureDatabases != []) ''
459459- (
460460- ${lib.concatMapStrings (database: ''
461461- echo "CREATE DATABASE IF NOT EXISTS \`${database}\`;"
462462- '') cfg.ensureDatabases}
463463- ) | ${cfg.package}/bin/mysql -N
464464- ''}
498498+ ${lib.optionalString (cfg.ensureDatabases != [ ]) ''
499499+ (
500500+ ${lib.concatMapStrings (database: ''
501501+ echo "CREATE DATABASE IF NOT EXISTS \`${database}\`;"
502502+ '') cfg.ensureDatabases}
503503+ ) | ${cfg.package}/bin/mysql -N
504504+ ''}
465505466466- ${lib.concatMapStrings (user:
467467- ''
468468- ( echo "CREATE USER IF NOT EXISTS '${user.name}'@'localhost' IDENTIFIED WITH ${if isMariaDB then "unix_socket" else "auth_socket"};"
469469- ${lib.concatStringsSep "\n" (lib.mapAttrsToList (database: permission: ''
470470- echo "GRANT ${permission} ON ${database} TO '${user.name}'@'localhost';"
471471- '') user.ensurePermissions)}
506506+ ${lib.concatMapStrings (user: ''
507507+ ( echo "CREATE USER IF NOT EXISTS '${user.name}'@'localhost' IDENTIFIED WITH ${
508508+ if isMariaDB then "unix_socket" else "auth_socket"
509509+ };"
510510+ ${lib.concatStringsSep "\n" (
511511+ lib.mapAttrsToList (database: permission: ''
512512+ echo "GRANT ${permission} ON ${database} TO '${user.name}'@'localhost';"
513513+ '') user.ensurePermissions
514514+ )}
472515 ) | ${cfg.package}/bin/mysql -N
473516 '') cfg.ensureUsers}
474474- '';
517517+ '';
475518476519 serviceConfig = lib.mkMerge [
477520 {
···500543 ProtectKernelTunables = true;
501544 ProtectKernelModules = true;
502545 ProtectControlGroups = true;
503503- RestrictAddressFamilies = [ "AF_UNIX" "AF_INET" "AF_INET6" ];
546546+ RestrictAddressFamilies = [
547547+ "AF_UNIX"
548548+ "AF_INET"
549549+ "AF_INET6"
550550+ ];
504551 LockPersonality = true;
505552 MemoryDenyWriteExecute = true;
506553 RestrictRealtime = true;
···516563 ];
517564 };
518565 };
566566+567567+ meta.maintainers = [ lib.maintainers._6543 ];
519568}
···245245246246## Known warnings {#module-services-nextcloud-known-warnings}
247247248248-### Failed to get an iterator for log entries: Logreader application only supports "file" log_type {#module-services-nextcloud-warning-logreader}
248248+### Logreader application only supports "file" log_type {#module-services-nextcloud-warning-logreader}
249249250250This is because
251251···253253* the Logreader application that allows reading logs in the admin panel is enabled
254254 by default and requires logs written to a file.
255255256256-The logreader application doesn't work, as it was the case before. The only change is that
257257-it complains loudly now. So nothing actionable here by default. Alternatively you can
258258-259259-* disable the logreader application to shut up the "error".
260260-261261- We can't really do that by default since whether apps are enabled/disabled is part
262262- of the application's state and tracked inside the database.
256256+If you want to view logs in the admin panel,
257257+set [](#opt-services.nextcloud.settings.log_type) to "file".
263258264264-* set [](#opt-services.nextcloud.settings.log_type) to "file" to be able to view logs
265265- from the admin panel.
259259+If you prefer logs in the journal, disable the logreader application to shut up the
260260+"info". We can't really do that by default since whether apps are enabled/disabled
261261+is part of the application's state and tracked inside the database.
266262267263## Maintainer information {#module-services-nextcloud-maintainer-info}
268264
+2-1
nixos/modules/system/boot/systemd/tmpfiles.nix
···2929 };
3030 };
3131 default = {};
3232- type = attrsWith' "config-name" (attrsWith' "tmpfiles-type" (attrsWith' "path" (types.submodule ({ name, config, ... }: {
3232+ type = attrsWith' "config-name" (attrsWith' "path" (attrsWith' "tmpfiles-type" (types.submodule ({ name, config, ... }: {
3333 options.type = mkOption {
3434 type = types.str;
3535 default = name;
3636+ defaultText = "‹tmpfiles-type›";
3637 example = "d";
3738 description = ''
3839 The type of operation to perform on the file.
+2-2
nixos/tests/matrix/mjolnir.nix
···3030 in
3131 {
3232 name = "mjolnir";
3333- meta = with pkgs.lib; {
3434- maintainers = teams.matrix.members;
3333+ meta = {
3434+ inherit (pkgs.mjolnir.meta) maintainers;
3535 };
36363737 nodes = {
+2-2
nixos/tests/matrix/synapse-workers.nix
···22 { pkgs, ... }:
33 {
44 name = "matrix-synapse-workers";
55- meta = with pkgs.lib; {
66- maintainers = teams.matrix.members;
55+ meta = {
66+ inherit (pkgs.matrix-synapse.meta) maintainers;
77 };
8899 nodes = {
+2-2
nixos/tests/matrix/synapse.nix
···5454 {
55555656 name = "matrix-synapse";
5757- meta = with pkgs.lib; {
5858- maintainers = teams.matrix.members;
5757+ meta = {
5858+ inherit (pkgs.matrix-synapse.meta) maintainers;
5959 };
60606161 nodes = {
···8989 ps: with ps; [
9090 mypy
9191 pytest
9292+ # this is to help development (e.g.: better diffs) inside devShell
9393+ # only, do not use its helpers like `mocker`
9494+ pytest-mock
9295 ruff
9396 ]
9497 );
···25252626 meta = with lib; {
2727 description = "New GNU Portable Threads Library";
2828- mainProgram = "npth-config";
2928 longDescription = ''
3029 This is a library to provide the GNU Pth API and thus a non-preemptive
3130 threads implementation.
···68686969 nativeBuildInputs = [ autoreconfHook ];
70707171- # For some reason libxml2 package headers are in subdirectory and thus aren’t
7272- # picked up by stdenv’s C compiler wrapper (see ccWrapper_addCVars). This
7373- # doesn’t really belong here and either should be part of libxml2 package or
7474- # libxml2 in Nixpkgs can just fix their header paths.
7575- env.NIX_CFLAGS_COMPILE = "-isystem ${libxml2.dev}/include/libxml2";
7171+ env.NIX_CFLAGS_COMPILE = toString (
7272+ [
7373+ # For some reason libxml2 package headers are in subdirectory and thus aren’t
7474+ # picked up by stdenv’s C compiler wrapper (see ccWrapper_addCVars). This
7575+ # doesn’t really belong here and either should be part of libxml2 package or
7676+ # libxml2 in Nixpkgs can just fix their header paths.
7777+ "-isystem ${libxml2.dev}/include/libxml2"
7878+ ]
7979+ ++ lib.optionals stdenv.cc.isGNU [
8080+ # fix build on GCC 14
8181+ "-Wno-error=implicit-function-declaration"
8282+ "-Wno-error=incompatible-pointer-types"
8383+ ]
8484+ );
76857786 buildInputs =
7887 [
···2929}:
30303131let
3232- defaultVersion = "2024.10";
3232+ defaultVersion = "2025.01";
3333 defaultSrc = fetchurl {
3434 url = "https://ftp.denx.de/pub/u-boot/u-boot-${defaultVersion}.tar.bz2";
3535- hash = "sha256-so2vSsF+QxVjYweL9RApdYQTf231D87ZsS3zT2GpL7A=";
3535+ hash = "sha256-ze99UHyT8bvZ8BXqm8IfoHQmhIFAVQGUWrxvhU1baG8=";
3636 };
37373838 # Dependencies for the tools need to be included as either native or cross,
···3030 ]
3131 },
3232 "collectives": {
3333- "hash": "sha256-IAnJZuaj6KW6kF4daIKxvCEDCViWu30gogm8q2/ooQs=",
3434- "url": "https://github.com/nextcloud/collectives/releases/download/v2.16.0/collectives-2.16.0.tar.gz",
3535- "version": "2.16.0",
3333+ "hash": "sha256-1BEK5T+6w8yLSXyj/Me8QMls/LSWaor5TpvC2HK3/4U=",
3434+ "url": "https://github.com/nextcloud/collectives/releases/download/v2.16.1/collectives-2.16.1.tar.gz",
3535+ "version": "2.16.1",
3636 "description": "Collectives is a Nextcloud App for activist and community projects to organize together.\nCome and gather in collectives to build shared knowledge.\n\n* 👥 **Collective and non-hierarchical workflow by heart**: Collectives are\n tied to a [Nextcloud Team](https://github.com/nextcloud/circles) and\n owned by the collective.\n* 📝 **Collaborative page editing** like known from Etherpad thanks to the\n [Text app](https://github.com/nextcloud/text).\n* 🔤 **Well-known [Markdown](https://en.wikipedia.org/wiki/Markdown) syntax**\n for page formatting.\n\n## Installation\n\nIn your Nextcloud instance, simply navigate to **»Apps«**, find the\n**»Teams«** and **»Collectives«** apps and enable them.",
3737 "homepage": "https://github.com/nextcloud/collectives",
3838 "licenses": [
···4040 ]
4141 },
4242 "contacts": {
4343- "hash": "sha256-hqCDr7qEqsi8tZ9Woz9hsUm1HENK16FNz4pcQCto8S4=",
4444- "url": "https://github.com/nextcloud-releases/contacts/releases/download/v6.0.2/contacts-v6.0.2.tar.gz",
4545- "version": "6.0.2",
4343+ "hash": "sha256-o7RoBhg0UFzZoxXj1Qovbheq1i7wBHnn4hSnEbc/D/c=",
4444+ "url": "https://github.com/nextcloud-releases/contacts/releases/download/v6.0.3/contacts-v6.0.3.tar.gz",
4545+ "version": "6.0.3",
4646 "description": "The Nextcloud contacts app is a user interface for Nextcloud's CardDAV server. Easily sync contacts from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Mail and Calendar – more to come.\n* 🎉 **Never forget a birthday!** You can sync birthdays and other recurring events with your Nextcloud Calendar.\n* 👥 **Sharing of Adressbooks!** You want to share your contacts with your friends or coworkers? No problem!\n* 🙈 **We’re not reinventing the wheel!** Based on the great and open SabreDAV library.",
4747 "homepage": "https://github.com/nextcloud/contacts#readme",
4848 "licenses": [
···140140 ]
141141 },
142142 "groupfolders": {
143143- "hash": "sha256-7g18TdAQKLNKrKPZO+TNiUoHtncy6aLBy4KHq7j7VHo=",
144144- "url": "https://github.com/nextcloud-releases/groupfolders/releases/download/v17.0.9/groupfolders-v17.0.9.tar.gz",
145145- "version": "17.0.9",
146146- "description": "Admin configured folders shared with everyone in a group.\n\nFolders can be configured from *Group folders* in the admin settings.\n\nAfter a folder is created, the admin can give access to the folder to one or more groups, control their write/sharing permissions and assign a quota for the folder.\n\nNote: Encrypting the contents of group folders is currently not supported.",
143143+ "hash": "sha256-yfTZjAsmv2wdMNNP1Tm0fmzSIlUwRfMraNPgFEHW238=",
144144+ "url": "https://github.com/nextcloud-releases/groupfolders/releases/download/v17.0.10/groupfolders-v17.0.10.tar.gz",
145145+ "version": "17.0.10",
146146+ "description": "Admin configured folders shared with everyone in a team.\n\nFolders can be configured from *Team folders* in the admin settings.\n\nAfter a folder is created, the admin can give access to the folder to one or more teams, control their write/sharing permissions and assign a quota for the folder.",
147147 "homepage": "https://github.com/nextcloud/groupfolders",
148148 "licenses": [
149149 "agpl"
···190190 ]
191191 },
192192 "mail": {
193193- "hash": "sha256-i2gBkqRPvHyZL8raWTIordGVhY1NWi4KN1JLbsQd/8k=",
194194- "url": "https://github.com/nextcloud-releases/mail/releases/download/v3.7.19/mail-v3.7.19.tar.gz",
195195- "version": "3.7.19",
193193+ "hash": "sha256-YGgJgWZYnJuhhHxabx/tUmcnmfDgjWiZUBnhGThihrU=",
194194+ "url": "https://github.com/nextcloud-releases/mail/releases/download/v3.7.20/mail-v3.7.20.tar.gz",
195195+ "version": "3.7.20",
196196 "description": "**💌 A mail app for Nextcloud**\n\n- **🚀 Integration with other Nextcloud apps!** Currently Contacts, Calendar & Files – more to come.\n- **📥 Multiple mail accounts!** Personal and company account? No problem, and a nice unified inbox. Connect any IMAP account.\n- **🔒 Send & receive encrypted mails!** Using the great [Mailvelope](https://mailvelope.com) browser extension.\n- **🙈 We’re not reinventing the wheel!** Based on the great [Horde](https://horde.org) libraries.\n- **📬 Want to host your own mail server?** We do not have to reimplement this as you could set up [Mail-in-a-Box](https://mailinabox.email)!\n\n## Ethical AI Rating\n\n### Priority Inbox\n\nPositive:\n* The software for training and inferencing of this model is open source.\n* The model is created and trained on-premises based on the user's own data.\n* The training data is accessible to the user, making it possible to check or correct for bias or optimise the performance and CO2 usage.\n\n### Thread Summaries (opt-in)\n\n**Rating:** 🟢/🟡/🟠/🔴\n\nThe rating depends on the installed text processing backend. See [the rating overview](https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html) for details.\n\nLearn more about the Nextcloud Ethical AI Rating [in our blog](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/).",
197197 "homepage": "https://github.com/nextcloud/mail#readme",
198198 "licenses": [
···250250 ]
251251 },
252252 "onlyoffice": {
253253- "hash": "sha256-YXj0tHU++S7YDMYj/Eg5KsSX3qBSYtyuPZfiOBQ8cjk=",
254254- "url": "https://github.com/ONLYOFFICE/onlyoffice-nextcloud/releases/download/v9.5.0/onlyoffice.tar.gz",
255255- "version": "9.5.0",
256256- "description": "ONLYOFFICE connector allows you to view, edit and collaborate on text documents, spreadsheets and presentations within Nextcloud using ONLYOFFICE Docs. This will create a new Edit in ONLYOFFICE action within the document library for Office documents. This allows multiple users to co-author documents in real time from the familiar web interface and save the changes back to your file storage.",
253253+ "hash": "sha256-zAhrnZ/rzzo6+ycozd8ihxIHVRHmQ+haudts2PcxnoM=",
254254+ "url": "https://github.com/ONLYOFFICE/onlyoffice-nextcloud/releases/download/v9.6.0/onlyoffice.tar.gz",
255255+ "version": "9.6.0",
256256+ "description": "ONLYOFFICE app allows you to view, edit and collaborate on text documents, spreadsheets and presentations within Nextcloud using ONLYOFFICE Docs. This will create a new Edit in ONLYOFFICE action within the document library for Office documents. This allows multiple users to co-author documents in real time from the familiar web interface and save the changes back to your file storage.",
257257 "homepage": "https://www.onlyoffice.com",
258258 "licenses": [
259259 "agpl"
···280280 ]
281281 },
282282 "previewgenerator": {
283283- "hash": "sha256-kTYmN/tAJwjj2KwnrKVIZa5DhyXHjuNWNskqJZxs4sY=",
284284- "url": "https://github.com/nextcloud-releases/previewgenerator/releases/download/v5.7.0/previewgenerator-v5.7.0.tar.gz",
285285- "version": "5.7.0",
283283+ "hash": "sha256-dPUvtVFtSqlG9M1RXZ8u7nL3wgK5yFU2/pL9pFLjisc=",
284284+ "url": "https://github.com/nextcloud-releases/previewgenerator/releases/download/v5.8.0/previewgenerator-v5.8.0.tar.gz",
285285+ "version": "5.8.0",
286286 "description": "The Preview Generator app allows admins to pre-generate previews. The app listens to edit events and stores this information. Once a cron job is triggered it will generate start preview generation. This means that you can better utilize your system by pre-generating previews when your system is normally idle and thus putting less load on your machine when the requests are actually served.\n\nThe app does not replace on demand preview generation so if a preview is requested before it is pre-generated it will still be shown.\nThe first time you install this app, before using a cron job, you properly want to generate all previews via:\n**./occ preview:generate-all -vvv**\n\n**Important**: To enable pre-generation of previews you must add **php /var/www/nextcloud/occ preview:pre-generate** to a system cron job that runs at times of your choosing.",
287287 "homepage": "https://github.com/nextcloud/previewgenerator",
288288 "licenses": [
···330330 ]
331331 },
332332 "sociallogin": {
333333- "hash": "sha256-P9OBXDW3+iOtC9/dQ/M89YxY3OQ0u5I8Z1XQLvYznEo=",
334334- "url": "https://github.com/zorn-v/nextcloud-social-login/releases/download/v5.8.4/release.tar.gz",
335335- "version": "5.8.4",
333333+ "hash": "sha256-XJbeVUYr3NZvynZyRlRtc0NNEJxcIHjwNst/J2+IBUM=",
334334+ "url": "https://github.com/zorn-v/nextcloud-social-login/releases/download/v5.9.1/release.tar.gz",
335335+ "version": "5.9.1",
336336 "description": "# Social login\n\nMake possible create users and login via Telegram, OAuth or OpenID\n\nFor OAuth you must create app for certain providers. Login button appear at login page if app id specified. Settings are in \"Social login\" section of settings page.\n\n## Installation\n\nLogin to your NextCloud installation as an administrator and under \"Apps\" click \"Download and enable\" next to the \"Social Login\" app.\n\nSee below for setup and configuration instructions.\n\n\n\n## Custom OAuth2/OIDC groups\n\nYou can use groups from your custom provider. For that you should specify \"Groups claim\" in custom OAuth2/OIDC provider settings. That claim should be returned from provider in `id_token` or at user info endpoint. Format should be `array` or comma separated string. Eg (with claim named `roles`)\n\n```json\n{\"roles\": [\"admin\", \"user\"]}\n```\nor\n```json\n{\"roles\": \"admin,user\"}\n```\n\nAlso nested claims is supported. For example `resource_access.client-id.roles` for\n\n```json\n\"resource_access\": {\n \"client-id\": {\n \"roles\": [\n \"client-role-1\",\n \"client-role-2\"\n ]\n }\n}\n```\n\nThere is also support for setting the displayName:\n```\n{\"roles\": [{gid: 1, displayName: \"admin\"}, {gid: 2, displayName: \"user\"}]}\n```\n\n\nYou can use provider groups in two ways:\n\n1. Map provider groups to existing nextcloud groups\n2. Create provider groups in nextcloud and associate it to user (if appropriate option specified)\n\nIf you want sync groups on every login do not forget to check \"Update user profile every login\" setting\n\n## Examples for groups\n\n* You can find example how to configure WSO2IS for return roles claim with OIDC [here](https://medium.com/@dewni.matheesha/claim-mapping-and-retrieving-end-user-information-in-wso2is-cffd5f3937ff)\n* [GitLab OIDC allowing specific GitLab groups](https://github.com/zorn-v/nextcloud-social-login/blob/master/docs/sso/gitlab.md)\n\n## Built-in OAuth providers\n\nYou can copy link of certain login button to get proper \"redirect url\" for OAuth app setting.\n\n* [Google](https://github.com/zorn-v/nextcloud-social-login/blob/master/docs/sso/google.md)\n* [Amazon](https://developer.amazon.com/loginwithamazon/console/site/lwa/overview.html)\n* [Facebook](https://github.com/zorn-v/nextcloud-social-login/blob/master/docs/sso/facebook.md)\n* [Twitter](https://github.com/zorn-v/nextcloud-social-login/blob/master/docs/sso/twitter.md)\n* [GitHub](https://github.com/settings/developers)\n* [Discord](#configure-discord)\n* [Telegram](https://github.com/zorn-v/nextcloud-social-login/blob/master/docs/sso/telegram.md)\n* PlexTv - you can use any title as app id\n* [Codeberg](https://github.com/zorn-v/nextcloud-social-login/blob/master/docs/sso/codeberg.md)\n\nDetails about \"Allow login only from specified domain\" google setting you can find here [#44](https://github.com/zorn-v/nextcloud-social-login/issues/44)\nYou can use comma separated list for multiple domains\n\n## Config\n\nYou can use `'social_login_auto_redirect' => true` setting in `config.php` for auto redirect unauthorized users to social login if only one provider is configured.\nIf you want to temporary disable this function (e.g. for login as local admin), you can add `noredir=1` query parameter in url for login page. Something like `https://cloud.domain.com/login?noredir=1`\n\nTo set options for http client, you can use\n```php\n 'social_login_http_client' => [\n 'timeout' => 45,\n 'proxy' => 'socks4://127.0.0.1:9050', // Check https://curl.se/libcurl/c/CURLOPT_PROXY.html for allowed variants\n ],\n```\nin `config.php`\n\n### Configurate a provider via CLI\n\nYou can configure everything from commandline by using the occ utility. To setup a oidc-provider replace the variables and URLs with values that match your deployment.\n```bash\nphp occ config:app:set sociallogin custom_providers --value='{\"custom_oidc\": [{\"name\": \"gitlab_oidc\", \"title\": \"Gitlab\", \"authorizeUrl\": \"https://gitlab.my-domain.org/oauth/authorize\", \"tokenUrl\": \"https://gitlab.my-domain.org/oauth/token\", \"userInfoUrl\": \"https://gitlab.my-domain.org/oauth/userinfo\", \"logoutUrl\": \"\", \"clientId\": \"$my_application_id\", \"clientSecret\": \"$my_super_secret_secret\", \"scope\": \"openid\", \"groupsClaim\": \"groups\", \"style\": \"gitlab\", \"defaultGroup\": \"\"}]}'\n```\nto do this with docker you just need to add `docker exec -t -uwww-data CONTAINER_NAME` in front of the command, or run it interactively from `docker exec -it -uwww-data CONTAINER_NAME sh`\n\nTo find out how to configure other providers, just configure them in the GUI and take a look at the database afterwards:\n```\nmysql -u nextcloud -p nextcloud\nPassword: <yourpassword>\n\n> SELECT * FROM oc_appconfig WHERE appid='sociallogin';\n```\n\nOr just run\n\n`docker exec -t -uwww-data CONTAINER_NAME php occ config:app:get sociallogin custom_providers`\n\n### Configure Discord\n\nTo properly configure discord you have to:\n\n1. Create new discord application on [DiscordApp developers](https://discordapp.com/developers/applications/me#top)\n2. Open tab `Settings -> OAuth2 -> General`. In `Redirects` add new redirection link looking like this: `https://nextcloud.mydomain.com/apps/sociallogin/oauth/discord`.\n3. Copy `CLIENT ID` and generate and copy `CLIENT SECRET`\n4. Open in Nextcloud `Settings -> Social Login` and paste `CLIENT ID` into field `App id` and `CLIENT SECRET` into `Secret`.\n5. Select default group for users created this way.\n6. For group mapping check [#395](https://github.com/zorn-v/nextcloud-social-login/pull/395)\n\n## Hint\n\n### About Callback(Reply) Url\nYou can copy link from specific login button on login page and paste it on provider's website as callback url. To make proper button visible, just fill certain provider settings with random data and change it later.\n\nSome users may get strange reply(Callback) url error from provider even if you pasted the right url, that's because your nextcloud server may generate http urls when you are actually using https.\nPlease set 'overwriteprotocol' => 'https', in your config.php file.",
337337 "homepage": "https://github.com/zorn-v/nextcloud-social-login",
338338 "licenses": [
···340340 ]
341341 },
342342 "spreed": {
343343- "hash": "sha256-8C2TopybeFczpaNQF3IWeVh3uPXmNjQ1mdcWTyYOsZw=",
344344- "url": "https://github.com/nextcloud-releases/spreed/releases/download/v19.0.12/spreed-v19.0.12.tar.gz",
345345- "version": "19.0.12",
343343+ "hash": "sha256-JJp0dzFKJttDBuPOavraF7odo/0tVoDAeMPHVkmB78s=",
344344+ "url": "https://github.com/nextcloud-releases/spreed/releases/download/v19.0.13/spreed-v19.0.13.tar.gz",
345345+ "version": "19.0.13",
346346 "description": "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa.",
347347 "homepage": "https://github.com/nextcloud/spreed",
348348 "licenses": [
+23-23
pkgs/servers/nextcloud/packages/30.json
···2020 ]
2121 },
2222 "calendar": {
2323- "hash": "sha256-nroc7URZtN5LhGg4wYgr3wD0k8k3vYj9k/V4H0JF2C0=",
2424- "url": "https://github.com/nextcloud-releases/calendar/releases/download/v5.0.9/calendar-v5.0.9.tar.gz",
2525- "version": "5.0.9",
2323+ "hash": "sha256-QWJJOj4Iy/BLXWzHihoQaAhFkU05plZ/AV55QrW0Pag=",
2424+ "url": "https://github.com/nextcloud-releases/calendar/releases/download/v5.0.10/calendar-v5.0.10.tar.gz",
2525+ "version": "5.0.10",
2626 "description": "The Calendar app is a user interface for Nextcloud's CalDAV server. Easily sync events from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Contacts - more to come.\n* 🌐 **WebCal Support!** Want to see your favorite team’s matchdays in your calendar? No problem!\n* 🙋 **Attendees!** Invite people to your events\n* ⌚️ **Free/Busy!** See when your attendees are available to meet\n* ⏰ **Reminders!** Get alarms for events inside your browser and via email\n* 🔍 Search! Find your events at ease\n* ☑️ Tasks! See tasks with a due date directly in the calendar\n* 🙈 **We’re not reinventing the wheel!** Based on the great [c-dav library](https://github.com/nextcloud/cdav-library), [ical.js](https://github.com/mozilla-comm/ical.js) and [fullcalendar](https://github.com/fullcalendar/fullcalendar) libraries.",
2727 "homepage": "https://github.com/nextcloud/calendar/",
2828 "licenses": [
···3030 ]
3131 },
3232 "collectives": {
3333- "hash": "sha256-IAnJZuaj6KW6kF4daIKxvCEDCViWu30gogm8q2/ooQs=",
3434- "url": "https://github.com/nextcloud/collectives/releases/download/v2.16.0/collectives-2.16.0.tar.gz",
3535- "version": "2.16.0",
3333+ "hash": "sha256-1BEK5T+6w8yLSXyj/Me8QMls/LSWaor5TpvC2HK3/4U=",
3434+ "url": "https://github.com/nextcloud/collectives/releases/download/v2.16.1/collectives-2.16.1.tar.gz",
3535+ "version": "2.16.1",
3636 "description": "Collectives is a Nextcloud App for activist and community projects to organize together.\nCome and gather in collectives to build shared knowledge.\n\n* 👥 **Collective and non-hierarchical workflow by heart**: Collectives are\n tied to a [Nextcloud Team](https://github.com/nextcloud/circles) and\n owned by the collective.\n* 📝 **Collaborative page editing** like known from Etherpad thanks to the\n [Text app](https://github.com/nextcloud/text).\n* 🔤 **Well-known [Markdown](https://en.wikipedia.org/wiki/Markdown) syntax**\n for page formatting.\n\n## Installation\n\nIn your Nextcloud instance, simply navigate to **»Apps«**, find the\n**»Teams«** and **»Collectives«** apps and enable them.",
3737 "homepage": "https://github.com/nextcloud/collectives",
3838 "licenses": [
···140140 ]
141141 },
142142 "groupfolders": {
143143- "hash": "sha256-MPNSmqVzYSwEXM9ZyV7xEvUrmH8WYdpKHPcVWWQpt8M=",
144144- "url": "https://github.com/nextcloud-releases/groupfolders/releases/download/v18.0.9/groupfolders-v18.0.9.tar.gz",
145145- "version": "18.0.9",
146146- "description": "Admin configured folders shared with everyone in a group.\n\nFolders can be configured from *Group folders* in the admin settings.\n\nAfter a folder is created, the admin can give access to the folder to one or more groups, control their write/sharing permissions and assign a quota for the folder.\n\nNote: Encrypting the contents of group folders is currently not supported.",
143143+ "hash": "sha256-LR+b5weiFGsk/uozT39rwCeo98PjLcJOMyn5B/OgkvU=",
144144+ "url": "https://github.com/nextcloud-releases/groupfolders/releases/download/v18.0.10/groupfolders-v18.0.10.tar.gz",
145145+ "version": "18.0.10",
146146+ "description": "Admin configured folders shared with everyone in a team.\n\nFolders can be configured from *Team folders* in the admin settings.\n\nAfter a folder is created, the admin can give access to the folder to one or more teams, control their write/sharing permissions and assign a quota for the folder.",
147147 "homepage": "https://github.com/nextcloud/groupfolders",
148148 "licenses": [
149149 "agpl"
···250250 ]
251251 },
252252 "onlyoffice": {
253253- "hash": "sha256-YXj0tHU++S7YDMYj/Eg5KsSX3qBSYtyuPZfiOBQ8cjk=",
254254- "url": "https://github.com/ONLYOFFICE/onlyoffice-nextcloud/releases/download/v9.5.0/onlyoffice.tar.gz",
255255- "version": "9.5.0",
256256- "description": "ONLYOFFICE connector allows you to view, edit and collaborate on text documents, spreadsheets and presentations within Nextcloud using ONLYOFFICE Docs. This will create a new Edit in ONLYOFFICE action within the document library for Office documents. This allows multiple users to co-author documents in real time from the familiar web interface and save the changes back to your file storage.",
253253+ "hash": "sha256-zAhrnZ/rzzo6+ycozd8ihxIHVRHmQ+haudts2PcxnoM=",
254254+ "url": "https://github.com/ONLYOFFICE/onlyoffice-nextcloud/releases/download/v9.6.0/onlyoffice.tar.gz",
255255+ "version": "9.6.0",
256256+ "description": "ONLYOFFICE app allows you to view, edit and collaborate on text documents, spreadsheets and presentations within Nextcloud using ONLYOFFICE Docs. This will create a new Edit in ONLYOFFICE action within the document library for Office documents. This allows multiple users to co-author documents in real time from the familiar web interface and save the changes back to your file storage.",
257257 "homepage": "https://www.onlyoffice.com",
258258 "licenses": [
259259 "agpl"
···280280 ]
281281 },
282282 "previewgenerator": {
283283- "hash": "sha256-kTYmN/tAJwjj2KwnrKVIZa5DhyXHjuNWNskqJZxs4sY=",
284284- "url": "https://github.com/nextcloud-releases/previewgenerator/releases/download/v5.7.0/previewgenerator-v5.7.0.tar.gz",
285285- "version": "5.7.0",
283283+ "hash": "sha256-dPUvtVFtSqlG9M1RXZ8u7nL3wgK5yFU2/pL9pFLjisc=",
284284+ "url": "https://github.com/nextcloud-releases/previewgenerator/releases/download/v5.8.0/previewgenerator-v5.8.0.tar.gz",
285285+ "version": "5.8.0",
286286 "description": "The Preview Generator app allows admins to pre-generate previews. The app listens to edit events and stores this information. Once a cron job is triggered it will generate start preview generation. This means that you can better utilize your system by pre-generating previews when your system is normally idle and thus putting less load on your machine when the requests are actually served.\n\nThe app does not replace on demand preview generation so if a preview is requested before it is pre-generated it will still be shown.\nThe first time you install this app, before using a cron job, you properly want to generate all previews via:\n**./occ preview:generate-all -vvv**\n\n**Important**: To enable pre-generation of previews you must add **php /var/www/nextcloud/occ preview:pre-generate** to a system cron job that runs at times of your choosing.",
287287 "homepage": "https://github.com/nextcloud/previewgenerator",
288288 "licenses": [
···330330 ]
331331 },
332332 "sociallogin": {
333333- "hash": "sha256-P9OBXDW3+iOtC9/dQ/M89YxY3OQ0u5I8Z1XQLvYznEo=",
334334- "url": "https://github.com/zorn-v/nextcloud-social-login/releases/download/v5.8.4/release.tar.gz",
335335- "version": "5.8.4",
333333+ "hash": "sha256-XJbeVUYr3NZvynZyRlRtc0NNEJxcIHjwNst/J2+IBUM=",
334334+ "url": "https://github.com/zorn-v/nextcloud-social-login/releases/download/v5.9.1/release.tar.gz",
335335+ "version": "5.9.1",
336336 "description": "# Social login\n\nMake possible create users and login via Telegram, OAuth or OpenID\n\nFor OAuth you must create app for certain providers. Login button appear at login page if app id specified. Settings are in \"Social login\" section of settings page.\n\n## Installation\n\nLogin to your NextCloud installation as an administrator and under \"Apps\" click \"Download and enable\" next to the \"Social Login\" app.\n\nSee below for setup and configuration instructions.\n\n\n\n## Custom OAuth2/OIDC groups\n\nYou can use groups from your custom provider. For that you should specify \"Groups claim\" in custom OAuth2/OIDC provider settings. That claim should be returned from provider in `id_token` or at user info endpoint. Format should be `array` or comma separated string. Eg (with claim named `roles`)\n\n```json\n{\"roles\": [\"admin\", \"user\"]}\n```\nor\n```json\n{\"roles\": \"admin,user\"}\n```\n\nAlso nested claims is supported. For example `resource_access.client-id.roles` for\n\n```json\n\"resource_access\": {\n \"client-id\": {\n \"roles\": [\n \"client-role-1\",\n \"client-role-2\"\n ]\n }\n}\n```\n\nThere is also support for setting the displayName:\n```\n{\"roles\": [{gid: 1, displayName: \"admin\"}, {gid: 2, displayName: \"user\"}]}\n```\n\n\nYou can use provider groups in two ways:\n\n1. Map provider groups to existing nextcloud groups\n2. Create provider groups in nextcloud and associate it to user (if appropriate option specified)\n\nIf you want sync groups on every login do not forget to check \"Update user profile every login\" setting\n\n## Examples for groups\n\n* You can find example how to configure WSO2IS for return roles claim with OIDC [here](https://medium.com/@dewni.matheesha/claim-mapping-and-retrieving-end-user-information-in-wso2is-cffd5f3937ff)\n* [GitLab OIDC allowing specific GitLab groups](https://github.com/zorn-v/nextcloud-social-login/blob/master/docs/sso/gitlab.md)\n\n## Built-in OAuth providers\n\nYou can copy link of certain login button to get proper \"redirect url\" for OAuth app setting.\n\n* [Google](https://github.com/zorn-v/nextcloud-social-login/blob/master/docs/sso/google.md)\n* [Amazon](https://developer.amazon.com/loginwithamazon/console/site/lwa/overview.html)\n* [Facebook](https://github.com/zorn-v/nextcloud-social-login/blob/master/docs/sso/facebook.md)\n* [Twitter](https://github.com/zorn-v/nextcloud-social-login/blob/master/docs/sso/twitter.md)\n* [GitHub](https://github.com/settings/developers)\n* [Discord](#configure-discord)\n* [Telegram](https://github.com/zorn-v/nextcloud-social-login/blob/master/docs/sso/telegram.md)\n* PlexTv - you can use any title as app id\n* [Codeberg](https://github.com/zorn-v/nextcloud-social-login/blob/master/docs/sso/codeberg.md)\n\nDetails about \"Allow login only from specified domain\" google setting you can find here [#44](https://github.com/zorn-v/nextcloud-social-login/issues/44)\nYou can use comma separated list for multiple domains\n\n## Config\n\nYou can use `'social_login_auto_redirect' => true` setting in `config.php` for auto redirect unauthorized users to social login if only one provider is configured.\nIf you want to temporary disable this function (e.g. for login as local admin), you can add `noredir=1` query parameter in url for login page. Something like `https://cloud.domain.com/login?noredir=1`\n\nTo set options for http client, you can use\n```php\n 'social_login_http_client' => [\n 'timeout' => 45,\n 'proxy' => 'socks4://127.0.0.1:9050', // Check https://curl.se/libcurl/c/CURLOPT_PROXY.html for allowed variants\n ],\n```\nin `config.php`\n\n### Configurate a provider via CLI\n\nYou can configure everything from commandline by using the occ utility. To setup a oidc-provider replace the variables and URLs with values that match your deployment.\n```bash\nphp occ config:app:set sociallogin custom_providers --value='{\"custom_oidc\": [{\"name\": \"gitlab_oidc\", \"title\": \"Gitlab\", \"authorizeUrl\": \"https://gitlab.my-domain.org/oauth/authorize\", \"tokenUrl\": \"https://gitlab.my-domain.org/oauth/token\", \"userInfoUrl\": \"https://gitlab.my-domain.org/oauth/userinfo\", \"logoutUrl\": \"\", \"clientId\": \"$my_application_id\", \"clientSecret\": \"$my_super_secret_secret\", \"scope\": \"openid\", \"groupsClaim\": \"groups\", \"style\": \"gitlab\", \"defaultGroup\": \"\"}]}'\n```\nto do this with docker you just need to add `docker exec -t -uwww-data CONTAINER_NAME` in front of the command, or run it interactively from `docker exec -it -uwww-data CONTAINER_NAME sh`\n\nTo find out how to configure other providers, just configure them in the GUI and take a look at the database afterwards:\n```\nmysql -u nextcloud -p nextcloud\nPassword: <yourpassword>\n\n> SELECT * FROM oc_appconfig WHERE appid='sociallogin';\n```\n\nOr just run\n\n`docker exec -t -uwww-data CONTAINER_NAME php occ config:app:get sociallogin custom_providers`\n\n### Configure Discord\n\nTo properly configure discord you have to:\n\n1. Create new discord application on [DiscordApp developers](https://discordapp.com/developers/applications/me#top)\n2. Open tab `Settings -> OAuth2 -> General`. In `Redirects` add new redirection link looking like this: `https://nextcloud.mydomain.com/apps/sociallogin/oauth/discord`.\n3. Copy `CLIENT ID` and generate and copy `CLIENT SECRET`\n4. Open in Nextcloud `Settings -> Social Login` and paste `CLIENT ID` into field `App id` and `CLIENT SECRET` into `Secret`.\n5. Select default group for users created this way.\n6. For group mapping check [#395](https://github.com/zorn-v/nextcloud-social-login/pull/395)\n\n## Hint\n\n### About Callback(Reply) Url\nYou can copy link from specific login button on login page and paste it on provider's website as callback url. To make proper button visible, just fill certain provider settings with random data and change it later.\n\nSome users may get strange reply(Callback) url error from provider even if you pasted the right url, that's because your nextcloud server may generate http urls when you are actually using https.\nPlease set 'overwriteprotocol' => 'https', in your config.php file.",
337337 "homepage": "https://github.com/zorn-v/nextcloud-social-login",
338338 "licenses": [
···340340 ]
341341 },
342342 "spreed": {
343343- "hash": "sha256-j2r0dJ5QYrGHFbCfuuyOmXR7oEN78Nagn5Qb8kzmknA=",
344344- "url": "https://github.com/nextcloud-releases/spreed/releases/download/v20.1.3/spreed-v20.1.3.tar.gz",
345345- "version": "20.1.3",
343343+ "hash": "sha256-+MYplCq6Kx1UiEz+Isbit7kQNhe4dncy6W+y7eMzuiA=",
344344+ "url": "https://github.com/nextcloud-releases/spreed/releases/download/v20.1.4/spreed-v20.1.4.tar.gz",
345345+ "version": "20.1.4",
346346 "description": "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa.",
347347 "homepage": "https://github.com/nextcloud/spreed",
348348 "licenses": [