···88 # Using pull_request_target instead of pull_request avoids having to approve first time contributors
99 pull_request_target
10101111-# The tool doesn't need any permissions, it only outputs success or not based on the checkout
1212-permissions: {}
1111+permissions:
1212+ # We need this permission to cancel the workflow run if there's a merge conflict
1313+ actions: write
13141415jobs:
1516 check:
···6263 if [[ "$mergeable" == "true" ]]; then
6364 echo "The PR can be merged, checking the merge commit $mergedSha"
6465 else
6565- echo "The PR cannot be merged, it has a merge conflict"
6666+ echo "The PR cannot be merged, it has a merge conflict, cancelling the workflow.."
6767+ gh api \
6868+ --method POST \
6969+ -H "Accept: application/vnd.github+json" \
7070+ -H "X-GitHub-Api-Version: 2022-11-28" \
7171+ /repos/"$GITHUB_REPOSITORY"/actions/runs/"$GITHUB_RUN_ID"/cancel
7272+ sleep 60
7373+ # If it's still not canceled after a minute, something probably went wrong, just exit
6674 exit 1
6775 fi
6876 echo "mergedSha=$mergedSha" >> "$GITHUB_ENV"
+2
lib/generators.nix
···525525 "(${v.expr})"
526526 else if v == { } then
527527 "{}"
528528+ else if libAttr.isDerivation v then
529529+ ''"${toString v}"''
528530 else
529531 "{${introSpace}${concatItems (
530532 lib.attrsets.mapAttrsToList (key: value: "[${builtins.toJSON key}] = ${toLua innerArgs value}") v
+13-1
lib/tests/release.nix
···6767in
6868 pkgs.symlinkJoin {
6969 name = "nixpkgs-lib-tests";
7070- paths = map testWithNix nixVersions;
7070+ paths = map testWithNix nixVersions ++
7171+7272+ #
7373+ # TEMPORARY MIGRATION MECHANISM
7474+ #
7575+ # This comment and the expression which follows it should be
7676+ # removed as part of resolving this issue:
7777+ #
7878+ # https://github.com/NixOS/nixpkgs/issues/272591
7979+ #
8080+ [(import ../../pkgs/test/release {})]
8181+ ;
8282+7183 }
···3636- `mkosi` was updated to v19. Parts of the user interface have changed. Consult the
3737 [release notes](https://github.com/systemd/mkosi/releases/tag/v19) for a list of changes.
38383939+- The latest available version of Nextcloud is v28 (available as `pkgs.nextcloud28`). The installation logic is as follows:
4040+ - If [`services.nextcloud.package`](#opt-services.nextcloud.package) is specified explicitly, this package will be installed (**recommended**)
4141+ - If [`system.stateVersion`](#opt-system.stateVersion) is >=24.05, `pkgs.nextcloud28` will be installed by default.
4242+ - If [`system.stateVersion`](#opt-system.stateVersion) is >=23.11, `pkgs.nextcloud27` will be installed by default.
4343+ - Please note that an upgrade from v26 (or older) to v28 directly is not possible. Please upgrade to `nextcloud27` (or earlier) first. Nextcloud prohibits skipping major versions while upgrading. You can upgrade by declaring [`services.nextcloud.package = pkgs.nextcloud27;`](options.html#opt-services.nextcloud.package).
4444+3945- `services.avahi.nssmdns` got split into `services.avahi.nssmdns4` and `services.avahi.nssmdns6` which enable the mDNS NSS switch for IPv4 and IPv6 respectively.
4046 Since most mDNS responders only register IPv4 addresses, most users want to keep the IPv6 support disabled to avoid long timeouts.
4147···7076- [Nginx virtual hosts](#opt-services.nginx.virtualHosts) using `forceSSL` or
7177 `globalRedirect` can now have redirect codes other than 301 through
7278 `redirectCode`.
7979+8080+- [](#opt-boot.kernel.sysctl._net.core.wmem_max_) changed from a string to an integer because of the addition of a custom merge option (taking the highest value defined to avoid conflicts between 2 services trying to set that value), just as [](#opt-boot.kernel.sysctl._net.core.rmem_max_) since 22.11.
73817482- Gitea 1.21 upgrade has several breaking changes, including:
7583 - Custom themes and other assets that were previously stored in `custom/public/*` now belong in `custom/public/assets/*`
···112112 echo "OK"
113113114114 filesToFixup="$(for i in "$out"/*; do
115115- grep -l '\B\(/usr\)\?/s\?bin' "$i" || :
115115+ # list all files referring to (/usr)/bin paths, but allow references to /bin/sh.
116116+ grep -P -l '\B(?!\/bin\/sh\b)(\/usr)?\/bin(?:\/.*)?' "$i" || :
116117 done)"
117118118119 if [ -n "$filesToFixup" ]; then
···361361 Group = cfg.group;
362362 StateDirectory = "";
363363 ReadWritePaths = optionals (!cfg.autoMount) [ "" cfg.dataDir ];
364364+ # Make sure the socket units are started before ipfs.service
365365+ Sockets = [ "ipfs-gateway.socket" "ipfs-api.socket" ];
364366 } // optionalAttrs (cfg.serviceFdlimit != null) { LimitNOFILE = cfg.serviceFdlimit; };
365367 } // optionalAttrs (!cfg.startWhenNeeded) {
366368 wantedBy = [ "default.target" ];
+102-44
nixos/modules/services/networking/quicktun.nix
···11-{ config, pkgs, lib, ... }:
11+{ options, config, pkgs, lib, ... }:
2233let
44+ inherit (lib) mkOption mdDoc types mkIf;
4566+ opt = options.services.quicktun;
57 cfg = config.services.quicktun;
66-78in
88-99-with lib;
1010-119{
1210 options = {
1313-1411 services.quicktun = mkOption {
1512 default = { };
1616- description = lib.mdDoc "QuickTun tunnels";
1717- type = types.attrsOf (types.submodule {
1313+ description = mdDoc ''
1414+ QuickTun tunnels.
1515+1616+ See <http://wiki.ucis.nl/QuickTun> for more information about available options.
1717+ '';
1818+ type = types.attrsOf (types.submodule ({ name, ... }: let
1919+ qtcfg = cfg.${name};
2020+ in {
1821 options = {
1922 tunMode = mkOption {
2020- type = types.int;
2121- default = 0;
2222- example = 1;
2323- description = lib.mdDoc "";
2323+ type = with types; coercedTo bool (b: if b then 1 else 0) (ints.between 0 1);
2424+ default = false;
2525+ example = true;
2626+ description = mdDoc "Whether to operate in tun (IP) or tap (Ethernet) mode.";
2427 };
25282629 remoteAddress = mkOption {
2730 type = types.str;
3131+ default = "0.0.0.0";
2832 example = "tunnel.example.com";
2929- description = lib.mdDoc "";
3333+ description = mdDoc ''
3434+ IP address or hostname of the remote end (use `0.0.0.0` for a floating/dynamic remote endpoint).
3535+ '';
3036 };
31373238 localAddress = mkOption {
3333- type = types.str;
3939+ type = with types; nullOr str;
4040+ default = null;
3441 example = "0.0.0.0";
3535- description = lib.mdDoc "";
4242+ description = mdDoc "IP address or hostname of the local end.";
3643 };
37443845 localPort = mkOption {
3939- type = types.int;
4646+ type = types.port;
4047 default = 2998;
4141- description = lib.mdDoc "";
4848+ description = mdDoc "Local UDP port.";
4249 };
43504451 remotePort = mkOption {
4545- type = types.int;
4646- default = 2998;
4747- description = lib.mdDoc "";
5252+ type = types.port;
5353+ default = qtcfg.localPort;
5454+ defaultText = lib.literalExpression "config.services.quicktun.<name>.localPort";
5555+ description = mdDoc " remote UDP port";
4856 };
49575058 remoteFloat = mkOption {
5151- type = types.int;
5252- default = 0;
5353- description = lib.mdDoc "";
5959+ type = with types; coercedTo bool (b: if b then 1 else 0) (ints.between 0 1);
6060+ default = false;
6161+ example = true;
6262+ description = mdDoc ''
6363+ Whether to allow the remote address and port to change when properly encrypted packets are received.
6464+ '';
5465 };
55665667 protocol = mkOption {
5757- type = types.str;
6868+ type = types.enum [ "raw" "nacl0" "nacltai" "salty" ];
5869 default = "nacltai";
5959- description = lib.mdDoc "";
7070+ description = mdDoc "Which protocol to use.";
6071 };
61726273 privateKey = mkOption {
6363- type = types.str;
6464- description = lib.mdDoc "";
7474+ type = with types; nullOr str;
7575+ default = null;
7676+ description = mdDoc ''
7777+ Local secret key in hexadecimal form.
7878+7979+ ::: {.warning}
8080+ This option is deprecated. Please use {var}`services.quicktun.<name>.privateKeyFile` instead.
8181+ :::
8282+8383+ ::: {.note}
8484+ Not needed when {var}`services.quicktun.<name>.protocol` is set to `raw`.
8585+ :::
8686+ '';
8787+ };
8888+8989+ privateKeyFile = mkOption {
9090+ type = with types; nullOr path;
9191+ # This is a hack to deprecate `privateKey` without using `mkChangedModuleOption`
9292+ default = if qtcfg.privateKey == null then null else pkgs.writeText "quickttun-key-${name}" qtcfg.privateKey;
9393+ defaultText = "null";
9494+ description = mdDoc ''
9595+ Path to file containing local secret key in binary or hexadecimal form.
9696+9797+ ::: {.note}
9898+ Not needed when {var}`services.quicktun.<name>.protocol` is set to `raw`.
9999+ :::
100100+ '';
65101 };
6610267103 publicKey = mkOption {
6868- type = types.str;
6969- description = lib.mdDoc "";
104104+ type = with types; nullOr str;
105105+ default = null;
106106+ description = mdDoc ''
107107+ Remote public key in hexadecimal form.
108108+109109+ ::: {.note}
110110+ Not needed when {var}`services.quicktun.<name>.protocol` is set to `raw`.
111111+ :::
112112+ '';
70113 };
7111472115 timeWindow = mkOption {
7373- type = types.int;
116116+ type = types.ints.unsigned;
74117 default = 5;
7575- description = lib.mdDoc "";
118118+ description = mdDoc ''
119119+ Allowed time window for first received packet in seconds (positive number allows packets from history)
120120+ '';
76121 };
7712278123 upScript = mkOption {
7979- type = types.lines;
8080- default = "";
8181- description = lib.mdDoc "";
124124+ type = with types; nullOr lines;
125125+ default = null;
126126+ description = mdDoc ''
127127+ Run specified command or script after the tunnel device has been opened.
128128+ '';
82129 };
83130 };
8484- });
131131+ }));
85132 };
8686-87133 };
881348989- config = mkIf (cfg != []) {
9090- systemd.services = foldr (a: b: a // b) {} (
9191- mapAttrsToList (name: qtcfg: {
135135+ config = {
136136+ warnings = lib.pipe cfg [
137137+ (lib.mapAttrsToList (name: value: if value.privateKey != null then name else null))
138138+ (builtins.filter (n: n != null))
139139+ (map (n: " - services.quicktun.${n}.privateKey"))
140140+ (services: lib.optional (services != [ ]) ''
141141+ `services.quicktun.<name>.privateKey` is deprecated.
142142+ Please use `services.quicktun.<name>.privateKeyFile` instead.
143143+144144+ Offending options:
145145+ ${lib.concatStringsSep "\n" services}
146146+ '')
147147+ ];
148148+149149+ systemd.services = lib.mkMerge (
150150+ lib.mapAttrsToList (name: qtcfg: {
92151 "quicktun-${name}" = {
93152 wantedBy = [ "multi-user.target" ];
94153 after = [ "network.target" ];
···96155 INTERFACE = name;
97156 TUN_MODE = toString qtcfg.tunMode;
98157 REMOTE_ADDRESS = qtcfg.remoteAddress;
9999- LOCAL_ADDRESS = qtcfg.localAddress;
158158+ LOCAL_ADDRESS = mkIf (qtcfg.localAddress != null) (qtcfg.localAddress);
100159 LOCAL_PORT = toString qtcfg.localPort;
101160 REMOTE_PORT = toString qtcfg.remotePort;
102161 REMOTE_FLOAT = toString qtcfg.remoteFloat;
103103- PRIVATE_KEY = qtcfg.privateKey;
104104- PUBLIC_KEY = qtcfg.publicKey;
162162+ PRIVATE_KEY_FILE = mkIf (qtcfg.privateKeyFile != null) qtcfg.privateKeyFile;
163163+ PUBLIC_KEY = mkIf (qtcfg.publicKey != null) qtcfg.publicKey;
105164 TIME_WINDOW = toString qtcfg.timeWindow;
106106- TUN_UP_SCRIPT = pkgs.writeScript "quicktun-${name}-up.sh" qtcfg.upScript;
165165+ TUN_UP_SCRIPT = mkIf (qtcfg.upScript != null) (pkgs.writeScript "quicktun-${name}-up.sh" qtcfg.upScript);
107166 SUID = "nobody";
108167 };
109168 serviceConfig = {
···114173 }) cfg
115174 );
116175 };
117117-118176}
+1-1
nixos/modules/services/torrent/transmission.nix
···434434 # at least up to the values hardcoded here:
435435 (mkIf cfg.settings.utp-enabled {
436436 "net.core.rmem_max" = mkDefault 4194304; # 4MB
437437- "net.core.wmem_max" = mkDefault "1048576"; # 1MB
437437+ "net.core.wmem_max" = mkDefault 1048576; # 1MB
438438 })
439439 (mkIf cfg.performanceNetParameters {
440440 # Increase the number of available source (local) TCP and UDP ports to 49151.
+1-1
nixos/modules/services/web-apps/nextcloud.md
···55[services.nextcloud](#opt-services.nextcloud.enable). A
66desktop client is packaged at `pkgs.nextcloud-client`.
7788-The current default by NixOS is `nextcloud27` which is also the latest
88+The current default by NixOS is `nextcloud28` which is also the latest
99major version available.
10101111## Basic usage {#module-services-nextcloud-basic-usage}
+8-8
nixos/modules/services/web-apps/nextcloud.nix
···2828 phpPackage = cfg.phpPackage.buildEnv {
2929 extensions = { enabled, all }:
3030 (with all; enabled
3131+ ++ [ bz2 intl sodium ] # recommended
3132 ++ optional cfg.enableImagemagick imagick
3233 # Optionally enabled depending on caching settings
3334 ++ optional cfg.caching.apcu apcu
···190191 package = mkOption {
191192 type = types.package;
192193 description = lib.mdDoc "Which package to use for the Nextcloud instance.";
193193- relatedPackages = [ "nextcloud26" "nextcloud27" ];
194194+ relatedPackages = [ "nextcloud26" "nextcloud27" "nextcloud28" ];
194195 };
195196 phpPackage = mkPackageOption pkgs "php" {
196197 example = "php82";
···679680680681 config = mkIf cfg.enable (mkMerge [
681682 { warnings = let
682682- latest = 27;
683683+ latest = 28;
683684 upgradeWarning = major: nixos:
684685 ''
685686 A legacy Nextcloud install (from before NixOS ${nixos}) may be installed.
···700701 '')
701702 ++ (optional (versionOlder cfg.package.version "25") (upgradeWarning 24 "22.11"))
702703 ++ (optional (versionOlder cfg.package.version "26") (upgradeWarning 25 "23.05"))
703703- ++ (optional (versionOlder cfg.package.version "27") (upgradeWarning 26 "23.11"));
704704+ ++ (optional (versionOlder cfg.package.version "27") (upgradeWarning 26 "23.11"))
705705+ ++ (optional (versionOlder cfg.package.version "28") (upgradeWarning 27 "24.05"));
704706705707 services.nextcloud.package = with pkgs;
706708 mkDefault (
···710712 nextcloud defined in an overlay, please set `services.nextcloud.package` to
711713 `pkgs.nextcloud`.
712714 ''
713713- else if versionOlder stateVersion "22.11" then nextcloud24
714715 else if versionOlder stateVersion "23.05" then nextcloud25
715716 else if versionOlder stateVersion "23.11" then nextcloud26
716716- else nextcloud27
717717+ else if versionOlder stateVersion "24.05" then nextcloud27
718718+ else nextcloud28
717719 );
718720719719- services.nextcloud.phpPackage =
720720- if versionOlder cfg.package.version "26" then pkgs.php81
721721- else pkgs.php82;
721721+ services.nextcloud.phpPackage = pkgs.php82;
722722723723 services.nextcloud.phpOptions = mkMerge [
724724 (mapAttrs (const mkOptionDefault) defaultPHPSettings)
···1313 nix.settings.sandbox = false;
1414 nix.settings.substituters = []; # don't try to access cache.nixos.org
15151616+ virtualisation.memorySize = 2048;
1617 virtualisation.writableStore = true;
1718 # Make sure we always have all the required dependencies for creating a
1819 # container available within the VM, because we don't have network access.
···7788buildGoModule rec {
99 pname = "kubo";
1010- version = "0.24.0"; # When updating, also check if the repo version changed and adjust repoVersion below
1010+ version = "0.25.0"; # When updating, also check if the repo version changed and adjust repoVersion below
1111 rev = "v${version}";
12121313 passthru.repoVersion = "15"; # Also update kubo-migrator when changing the repo version
···1515 # Kubo makes changes to its source tarball that don't match the git source.
1616 src = fetchurl {
1717 url = "https://github.com/ipfs/kubo/releases/download/${rev}/kubo-source.tar.gz";
1818- hash = "sha256-stSjLvg8G1EiXon3Qby4wLgbhX7Aaj9pnxcvE32/42k=";
1818+ hash = "sha256-+Mk3rDdtjhETmdaOOSXEFdLTJ0nX9G3qUxctsu5vrSc=";
1919 };
20202121 # tarball contains multiple files/directories
···66}:
7788let
99- nuget-source = stdenvNoCC.mkDerivation rec {
99+ nuget-source = stdenvNoCC.mkDerivation {
1010 inherit name;
11111212- meta.description = description;
1312 nativeBuildInputs = [ python3 ];
14131514 buildCommand = ''
···1817 # use -L to follow symbolic links. When `projectReferences` is used in
1918 # buildDotnetModule, one of the deps will be a symlink farm.
2019 find -L ${lib.concatStringsSep " " deps} -type f -name '*.nupkg' -exec \
2121- cp --no-clobber '{}' $out/lib ';'
2020+ ln -s '{}' -t $out/lib ';'
22212322 # Generates a list of all licenses' spdx ids, if available.
2423 # Note that this currently ignores any license provided in plain text (e.g. "LICENSE.txt")
2524 python ${./extract-licenses-from-nupkgs.py} $out/lib > $out/share/licenses
2625 '';
2626+2727+ meta.description = description;
2728 } // { # We need data from `$out` for `meta`, so we have to use overrides as to not hit infinite recursion.
2828- meta.licence = let
2929- depLicenses = lib.splitString "\n" (builtins.readFile "${nuget-source}/share/licenses");
3030- in (lib.flatten (lib.forEach depLicenses (spdx:
3131- lib.optionals (spdx != "") (lib.getLicenseFromSpdxId spdx)
3232- )));
2929+ meta = nuget-source.meta // {
3030+ licenses = let
3131+ # TODO: avoid IFD
3232+ depLicenses = lib.splitString "\n" (builtins.readFile "${nuget-source}/share/licenses");
3333+ in lib.flatten (lib.forEach depLicenses (spdx:
3434+ lib.optionals (spdx != "") (lib.getLicenseFromSpdxId spdx)
3535+ ));
3636+ };
3337 };
3438in nuget-source
···3535 lib.trivial.pipe extensions [
3636 (map (extension: lib.nameValuePair extension.extensionUuid extension))
3737 builtins.listToAttrs
3838+ (attrs: attrs // { __attrsFailEvaluation = true; })
3839 ];
39404041 # Map the list of extensions to an attrset based on the pname as key, which is more human readable than the UUID
···66676768 # Keep the last three versions in here
6869 gnomeExtensions = lib.trivial.pipe (gnome43Extensions // gnome44Extensions // gnome45Extensions) [
7070+ (v: builtins.removeAttrs v [ "__attrsFailEvaluation" ])
6971 # Apply some custom patches for automatically packaged extensions
7072 (callPackage ./extensionOverrides.nix {})
7173 # Add all manually packaged extensions
···8890 # Make the set "public"
8991 lib.recurseIntoAttrs
9092 ];
9393+9194}
···1212 # Install the desktop file:
1313 env.Install("$DESTDIR$PREFIX/share/applications", "endless-sky.desktop")
1414diff --git a/source/Files.cpp b/source/Files.cpp
1515-index c8c8957..d196459 100644
1515+index de27023e..4225051f 100644
1616--- a/source/Files.cpp
1717+++ b/source/Files.cpp
1818-@@ -114,15 +114,9 @@ void Files::Init(const char * const *argv)
1919- if(resources.back() != '/')
2020- resources += '/';
2121- #if defined __linux__ || defined __FreeBSD__ || defined __DragonFly__
1818+@@ -108,32 +108,9 @@ void Files::Init(const char * const *argv)
1919+ resources = str;
2020+ SDL_free(str);
2121+ }
2222+-#if defined _WIN32
2323+- FixWindowsSlashes(resources);
2424+-#endif
2525+- if(resources.back() != '/')
2626+- resources += '/';
2727+-#if defined __linux__ || defined __FreeBSD__ || defined __DragonFly__
2228- // Special case, for Linux: the resource files are not in the same place as
2329- // the executable, but are under the same prefix (/usr or /usr/local).
2430- static const string LOCAL_PATH = "/usr/local/";
···2834- resources = LOCAL_PATH + RESOURCE_PATH;
2935- else if(!resources.compare(0, STANDARD_PATH.length(), STANDARD_PATH))
3036- resources = STANDARD_PATH + RESOURCE_PATH;
3131-+ // Workaround for NixOS. Not sure how to proceed with other OSes, feedback
3232-+ // is welcome.
3333-+ resources += "../share/games/endless-sky/";
3434- #elif defined __APPLE__
3535- // Special case for Mac OS X: the resources are in ../Resources relative to
3636- // the folder the binary is in.
3737+-#endif
3838+- // If the resources are not here, search in the directories containing this
3939+- // one. This allows, for example, a Mac app that does not actually have the
4040+- // resources embedded within it.
4141+- while(!Exists(resources + "credits.txt"))
4242+- {
4343+- size_t pos = resources.rfind('/', resources.length() - 2);
4444+- if(pos == string::npos || pos == 0)
4545+- throw runtime_error("Unable to find the resource directories!");
4646+- resources.erase(pos + 1);
4747+- }
4848++
4949++ resources = "%NIXPKGS_RESOURCES_PATH%";
5050++
5151+ dataPath = resources + "data/";
5252+ imagePath = resources + "images/";
5353+ soundPath = resources + "sounds/";
···11{
22 "bookmarks": {
33- "sha256": "14dkyqm04d4ix114jbcgbx10zvkv4qlx4n56chpqz0w1y7x8idpd",
44- "url": "https://github.com/nextcloud/bookmarks/releases/download/v13.1.1/bookmarks-13.1.1.tar.gz",
55- "version": "13.1.1",
33+ "sha256": "04yngkmsjq6zj5qih86ybfr2cybqsz3gb5dasm6yhmkvd1ar5s39",
44+ "url": "https://github.com/nextcloud/bookmarks/releases/download/v13.1.2/bookmarks-13.1.2.tar.gz",
55+ "version": "13.1.2",
66 "description": "- 📂 Sort bookmarks into folders\n- 🏷 Add tags and personal notes\n- 🔍 Full-text search\n- 📲 Synchronize with all your browsers and devices\n- 👪 Share bookmarks with other users and publicly\n- ☠ Find broken links\n- ⚛ Generate RSS feeds of your collections\n- 📔 Read archived versions of your links in case they are depublished\n- 💬 Create new bookmarks directly from within Nextcloud Talk\n- 💼 Built-in Dashboard widgets for frequent and recent links\n\nRequirements:\n - PHP extensions:\n - intl: *\n - mbstring: *\n - when using MySQL, use at least v8.0",
77 "homepage": "https://github.com/nextcloud/bookmarks",
88 "licenses": [
···1010 ]
1111 },
1212 "calendar": {
1313- "sha256": "1iq8np72pjw2bn4zmbp2rmrh12n4z62rwrz2bb94xjza1fws7b2v",
1414- "url": "https://github.com/nextcloud-releases/calendar/releases/download/v4.5.3/calendar-v4.5.3.tar.gz",
1515- "version": "4.5.3",
1313+ "sha256": "0d6mfqwq44z9kn8nh3zmfzr05zi2rwnw3nhd9wc12dy6npynkcpm",
1414+ "url": "https://github.com/nextcloud-releases/calendar/releases/download/v4.6.0/calendar-v4.6.0.tar.gz",
1515+ "version": "4.6.0",
1616 "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.",
1717 "homepage": "https://github.com/nextcloud/calendar/",
1818 "licenses": [
···2020 ]
2121 },
2222 "contacts": {
2323- "sha256": "1pz2px5amk3byn4pq86cyyjv4hrqhsjz61xfm7cl7z8qfckqfhi2",
2424- "url": "https://github.com/nextcloud-releases/contacts/releases/download/v5.4.2/contacts-v5.4.2.tar.gz",
2525- "version": "5.4.2",
2323+ "sha256": "0pbl4fmpg1jxwjj141gqnmwzgm3ji1z686kr11rmldfkjvhjss2x",
2424+ "url": "https://github.com/nextcloud-releases/contacts/releases/download/v5.5.0/contacts-v5.5.0.tar.gz",
2525+ "version": "5.5.0",
2626 "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.",
2727 "homepage": "https://github.com/nextcloud/contacts#readme",
2828 "licenses": [
···3030 ]
3131 },
3232 "cookbook": {
3333- "sha256": "18rzvdqd99nlkk3p0y9y8b17ihw5c4c9wsx8psq6xadspm97002y",
3434- "url": "https://github.com/nextcloud/cookbook/releases/download/v0.10.2/Cookbook-0.10.2.tar.gz",
3535- "version": "0.10.2",
3333+ "sha256": "06d1rhvcwxzi8hl99nz3hg32fznv0q5m06cwjy3gc81j53qz0ksc",
3434+ "url": "https://github.com/christianlupus-nextcloud/cookbook-releases/releases/download/v0.10.5/cookbook-0.10.5.tar.gz",
3535+ "version": "0.10.5",
3636 "description": "A library for all your recipes. It uses JSON files following the schema.org recipe format. To add a recipe to the collection, you can paste in the URL of the recipe, and the provided web page will be parsed and downloaded to whichever folder you specify in the app settings.",
3737- "homepage": "",
3737+ "homepage": "https://github.com/nextcloud/cookbook/",
3838 "licenses": [
3939 "agpl"
4040 ]
4141 },
4242 "cospend": {
4343- "sha256": "1rg9k33yapbl8chpxx3bjyzc9h4krjavksbxsvw14kpm01rss3j9",
4444- "url": "https://github.com/julien-nc/cospend-nc/releases/download/v1.5.10/cospend-1.5.10.tar.gz",
4545- "version": "1.5.10",
4343+ "sha256": "0v61wdrf4wxjx2xv81599k9k855iyhazxnh4shqvglfb01fi8qhn",
4444+ "url": "https://github.com/julien-nc/cospend-nc/releases/download/v1.5.12/cospend-1.5.12.tar.gz",
4545+ "version": "1.5.12",
4646 "description": "# Nextcloud Cospend 💰\n\nNextcloud Cospend is a group/shared budget manager. It was inspired by the great [IHateMoney](https://github.com/spiral-project/ihatemoney/).\n\nYou can use it when you share a house, when you go on vacation with friends, whenever you share money with others.\n\nIt lets you create projects with members and bills. Each member has a balance computed from the project bills. This way you can see who owes the group and who the group owes. Ultimately you can ask for a settlement plan telling you which payments to make to reset members balances.\n\nProject members are independent from Nextcloud users. Projects can be accessed and modified by people without a Nextcloud account. Each project has an ID and a password for guest access.\n\n[MoneyBuster](https://gitlab.com/eneiluj/moneybuster) Android client is [available in F-Droid](https://f-droid.org/packages/net.eneiluj.moneybuster/) and on the [Play store](https://play.google.com/store/apps/details?id=net.eneiluj.moneybuster).\n\n[PayForMe](https://github.com/mayflower/PayForMe) iOS client is currently being developped!\n\n## Features\n\n* ✎ create/edit/delete projects, members, bills, bill categories, currencies\n* ⚖ check member balances\n* 🗠 display project statistics\n* ♻ display settlement plan\n* 🎇 automatically create reimbursement bills from settlement plan\n* 🗓 create recurring bills (daily/weekly/monthly/yearly)\n* 📊 optionally provide custom amount for each member in new bills\n* 🔗 link bills with personal files (picture of physical bill for example)\n* 👩 guest access for people outside Nextcloud\n* 👫 share projects with Nextcloud users/groups/circles\n* 🖫 import/export projects as csv (compatible with csv files from IHateMoney)\n* 🔗 generate link/QRCode to easily import projects in MoneyBuster\n* 🗲 implement Nextcloud notifications and activity stream\n\nThis app is tested on Nextcloud 20+ with Firefox 57+ and Chromium.\n\nThis app is under development.\n\n🌍 Help us to translate this app on [Nextcloud-Cospend/MoneyBuster Crowdin project](https://crowdin.com/project/moneybuster).\n\n⚒ Check out other ways to help in the [contribution guidelines](https://gitlab.com/eneiluj/cospend-nc/blob/master/CONTRIBUTING.md).\n\n## Documentation\n\n* [User documentation](https://github.com/eneiluj/cospend-nc/blob/master/docs/user.md)\n* [Admin documentation](https://github.com/eneiluj/cospend-nc/blob/master/docs/admin.md)\n* [Developer documentation](https://github.com/eneiluj/cospend-nc/blob/master/docs/dev.md)\n* [CHANGELOG](https://github.com/eneiluj/cospend-nc/blob/master/CHANGELOG.md#change-log)\n* [AUTHORS](https://github.com/eneiluj/cospend-nc/blob/master/AUTHORS.md#authors)\n\n## Known issues\n\n* it does not make you rich\n\nAny feedback will be appreciated.\n\n\n\n## Donation\n\nI develop this app during my free time.\n\n* [Donate with Paypal](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66PALMY8SF5JE) (you don't need a paypal account)\n* [Donate with Liberapay : ](https://liberapay.com/eneiluj/donate)",
4747 "homepage": "https://github.com/julien-nc/cospend-nc",
4848 "licenses": [
···5050 ]
5151 },
5252 "deck": {
5353- "sha256": "15hir3fssvzyysazbaad8qiz0bv00x73c2wfdj5aviz9h0gp4x4v",
5454- "url": "https://github.com/nextcloud-releases/deck/releases/download/v1.9.4/deck-v1.9.4.tar.gz",
5555- "version": "1.9.4",
5353+ "sha256": "1dkvvk7n120hgk3pf03g2ixlylp7nxmi3wh9qsp8b0fimclpd5hz",
5454+ "url": "https://github.com/nextcloud-releases/deck/releases/download/v1.9.5/deck-v1.9.5.tar.gz",
5555+ "version": "1.9.5",
5656 "description": "Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized",
5757 "homepage": "https://github.com/nextcloud/deck",
5858 "licenses": [
···8080 ]
8181 },
8282 "forms": {
8383- "sha256": "155z87wyv2p06c3kpy9zaw6qf5s7s0ah4wfw022s4cc21i3rcwxv",
8484- "url": "https://github.com/nextcloud-releases/forms/releases/download/v3.3.1/forms-v3.3.1.tar.gz",
8585- "version": "3.3.1",
8383+ "sha256": "1mipdri1flhkdwknsp72k87y7xfis72bzsnw1alzr1cbp8d6ardm",
8484+ "url": "https://github.com/nextcloud-releases/forms/releases/download/v3.4.3/forms-v3.4.3.tar.gz",
8585+ "version": "3.4.3",
8686 "description": "**Simple surveys and questionnaires, self-hosted!**\n\n- **📝 Simple design:** No mass of options, only the essentials. Works well on mobile of course.\n- **📊 View & export results:** Results are visualized and can also be exported as CSV in the same format used by Google Forms.\n- **🔒 Data under your control!** Unlike in Google Forms, Typeform, Doodle and others, the survey info and responses are kept private on your instance.\n- **🧑💻 Connect to your software:** Easily integrate Forms into your service with our full-fledged [REST-API](https://github.com/nextcloud/forms/blob/main/docs/API.md).\n- **🙋 Get involved!** We have lots of stuff planned like more question types, collaboration on forms, [and much more](https://github.com/nextcloud/forms/milestones)!",
8787 "homepage": "https://github.com/nextcloud/forms",
8888 "licenses": [
···120120 ]
121121 },
122122 "mail": {
123123- "sha256": "0ascail3vfkv3mm5s4s3ma74d6qxai76kdqxknmljnw56xb19qfv",
124124- "url": "https://github.com/nextcloud-releases/mail/releases/download/v3.4.4/mail-v3.4.4.tar.gz",
125125- "version": "3.4.4",
123123+ "sha256": "0ycyj5ydnvnf5cjnxkpxd489rymlag8df67n5lawp43cvgg2jn2d",
124124+ "url": "https://github.com/nextcloud-releases/mail/releases/download/v3.5.0/mail-v3.5.0.tar.gz",
125125+ "version": "3.5.0",
126126 "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/).",
127127 "homepage": "https://github.com/nextcloud/mail#readme",
128128 "licenses": [
···140140 ]
141141 },
142142 "memories": {
143143- "sha256": "1yn1wkv4jxpc8faf4rl46yfddyplnryrkws3jz0x1wcr9zlxdkng",
144144- "url": "https://github.com/pulsejet/memories/releases/download/v6.1.0/memories.tar.gz",
145145- "version": "6.1.0",
143143+ "sha256": "1rz0pkis0vz6hjyj53jbz7dcmd9yxbh1h9p4nhg4a2p7yyd5092m",
144144+ "url": "https://github.com/pulsejet/memories/releases/download/v6.1.5/memories.tar.gz",
145145+ "version": "6.1.5",
146146 "description": "# Memories: Photo Management for Nextcloud\n\nMemories is a *batteries-included* photo management solution for Nextcloud with advanced features including:\n\n- **📸 Timeline**: Sort photos and videos by date taken, parsed from Exif data.\n- **⏪ Rewind**: Jump to any time in the past instantly and relive your memories.\n- **🤖 AI Tagging**: Group photos by people and objects, powered by [recognize](https://github.com/nextcloud/recognize) and [facerecognition](https://github.com/matiasdelellis/facerecognition).\n- **🖼️ Albums**: Create albums to group photos and videos together. Then share these albums with others.\n- **🫱🏻🫲🏻 External Sharing**: Share photos and videos with people outside of your Nextcloud instance.\n- **📱 Mobile Support**: Work from any device, of any shape and size through the web app.\n- **✏️ Edit Metadata**: Edit dates and other metadata on photos quickly and in bulk.\n- **📦 Archive**: Store photos you don't want to see in your timeline in a separate folder.\n- **📹 Video Transcoding**: Transcode videos and use HLS for maximal performance.\n- **🗺️ Map**: View your photos on a map, tagged with accurate reverse geocoding.\n- **📦 Migration**: Migrate easily from Nextcloud Photos and Google Takeout.\n- **⚡️ Performance**: Do all this very fast.\n\n## 🚀 Installation\n\n1. Install the app from the Nextcloud app store (try a demo [here](https://demo.memories.gallery/apps/memories/)).\n1. Perform the recommended [configuration steps](https://memories.gallery/config/).\n1. Run `php occ memories:index` to generate metadata indices for existing photos.\n1. Open the 📷 Memories app in Nextcloud and set the directory containing your photos.",
147147 "homepage": "https://memories.gallery",
148148 "licenses": [
···170170 ]
171171 },
172172 "notes": {
173173- "sha256": "1g4ibrymsfd2bcvmyfyrl23z2kh4bgkwrgyacvdx1glk44di6sgc",
174174- "url": "https://github.com/nextcloud-releases/notes/releases/download/v4.8.1/notes.tar.gz",
175175- "version": "4.8.1",
173173+ "sha256": "19p5qg94ch72y4lym6s8f6x3dly5v3mm97dx29swnkqplflas3zz",
174174+ "url": "https://github.com/nextcloud-releases/notes/releases/download/v4.9.0/notes-v4.9.0.tar.gz",
175175+ "version": "4.9.0",
176176 "description": "The Notes app is a distraction free notes taking app for [Nextcloud](https://www.nextcloud.com/). It provides categories for better organization and supports formatting using [Markdown](https://en.wikipedia.org/wiki/Markdown) syntax. Notes are saved as files in your Nextcloud, so you can view and edit them with every Nextcloud client. Furthermore, a separate [REST API](https://github.com/nextcloud/notes/blob/master/docs/api/README.md) allows for an easy integration into third-party apps (currently, there are notes apps for [Android](https://github.com/nextcloud/notes-android), [iOS](https://github.com/nextcloud/notes-ios) and the [console](https://git.danielmoch.com/nncli/about) which allow convenient access to your Nextcloud notes). Further features include marking notes as favorites.",
177177 "homepage": "https://github.com/nextcloud/notes",
178178 "licenses": [
···180180 ]
181181 },
182182 "notify_push": {
183183- "sha256": "0lwyy1pnyfw464vab1v5k8q0rgarrj5w12cf1nsywjaafb8y1ym0",
184184- "url": "https://github.com/nextcloud-releases/notify_push/releases/download/v0.6.5/notify_push-v0.6.5.tar.gz",
185185- "version": "0.6.5",
183183+ "sha256": "1by9qw9bsf48cyczhfxpz9ifrg2dayvcn26m309dicqgjqkz91hd",
184184+ "url": "https://github.com/nextcloud-releases/notify_push/releases/download/v0.6.6/notify_push-v0.6.6.tar.gz",
185185+ "version": "0.6.6",
186186 "description": "Push update support for desktop app.\n\nOnce the app is installed, the push binary needs to be setup. You can either use the setup wizard with `occ notify_push:setup` or see the [README](http://github.com/nextcloud/notify_push) for detailed setup instructions",
187187 "homepage": "",
188188 "licenses": [
···199199 "apache"
200200 ]
201201 },
202202+ "phonetrack": {
203203+ "sha256": "1p15vw7c5c1h08czyxi1r6svjd5hjmnc0i6is4vl3xq2kfjmcyyx",
204204+ "url": "https://github.com/julien-nc/phonetrack/releases/download/v0.7.6/phonetrack-0.7.6.tar.gz",
205205+ "version": "0.7.6",
206206+ "description": "# PhoneTrack Nextcloud application\n\n📱 PhoneTrack is a Nextcloud application to track and store mobile device's locations.\n\n🗺 It receives information from mobile phone's logging apps and displays it dynamically on a map.\n\n🌍 Help us to translate this app on [PhoneTrack Crowdin project](https://crowdin.com/project/phonetrack).\n\n⚒ Check out other ways to help in the [contribution guidelines](https://gitlab.com/eneiluj/phonetrack-oc/blob/master/CONTRIBUTING.md).\n\nHow to use PhoneTrack :\n\n* Create a tracking session.\n* Give the logging link\\* to the mobile devices. Choose the [logging method](https://gitlab.com/eneiluj/phonetrack-oc/wikis/userdoc#logging-methods) you prefer.\n* Watch the session's devices location in real time (or not) in PhoneTrack or share it with public pages.\n\n(\\*) Don't forget to set the device name in the link (rather than in the logging app settings). Replace \"yourname\" with the desired device name. Setting the device name in logging app settings only works with Owntracks, Traccar and OpenGTS.\n\nOn PhoneTrack main page, while watching a session, you can :\n\n* 📍 Display location history\n* ⛛ Filter points\n* ✎ Manually edit/add/delete points\n* ✎ Edit devices (rename, change colour/shape, move to another session)\n* ⛶ Define geofencing zones for devices\n* ⚇ Define proximity alerts for device pairs\n* 🖧 Share a session to other Nextcloud users or with a public link (read-only)\n* 🔗 Generate public share links with optional restrictions (filters, device name, last positions only, geofencing simplification)\n* 🖫 Import/export a session in GPX format (one file with one track per device or one file per device)\n* 🗠 Display sessions statistics\n* 🔒 [Reserve a device name](https://gitlab.com/eneiluj/phonetrack-oc/wikis/userdoc#device-name-reservation) to make sure only authorised user can log with this name\n* 🗓 Toggle session auto export and auto purge (daily/weekly/monthly)\n* ◔ Choose what to do when point number quota is reached (block logging or delete oldest point)\n\nPublic page and public filtered page work like main page except there is only one session displayed, everything is read-only and there is no need to be logged in.\n\nThis app is tested on Nextcloud 17 with Firefox 57+ and Chromium.\n\nThis app is compatible with theming colours and accessibility themes !\n\nThis app is under development.\n\n## Install\n\nSee the [AdminDoc](https://gitlab.com/eneiluj/phonetrack-oc/wikis/admindoc) for installation details.\n\nCheck [CHANGELOG](https://gitlab.com/eneiluj/phonetrack-oc/blob/master/CHANGELOG.md#change-log) file to see what's new and what's coming in next release.\n\nCheck [AUTHORS](https://gitlab.com/eneiluj/phonetrack-oc/blob/master/AUTHORS.md#authors) file to see complete list of authors.\n\n## Known issues\n\n* PhoneTrack **now works** with Nextcloud group restriction activated. See [admindoc](https://gitlab.com/eneiluj/phonetrack-oc/wikis/admindoc#issue-with-phonetrack-restricted-to-some-groups-in-nextcloud).\n\nAny feedback will be appreciated.\n\n## Donation\n\nI develop this app during my free time.\n\n* [Donate with Paypal](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66PALMY8SF5JE) (you don't need a paypal account)\n* [Donate with Liberapay : ](https://liberapay.com/eneiluj/donate)",
207207+ "homepage": "https://github.com/julien-nc/phonetrack-oc",
208208+ "licenses": [
209209+ "agpl"
210210+ ]
211211+ },
202212 "polls": {
203213 "sha256": "1dmws4ybv3pzxz5g9c7ghblx0nfal2ssmsg7hjcs1n4xcjc6585p",
204214 "url": "https://github.com/nextcloud/polls/releases/download/v5.4.2/polls.tar.gz",
···210220 ]
211221 },
212222 "previewgenerator": {
213213- "sha256": "0ziyl7kqgivk9xvkd12byps6bb3fvcvdgprfa9ffy1zrgpl9syhk",
214214- "url": "https://github.com/nextcloud-releases/previewgenerator/releases/download/v5.3.0/previewgenerator-v5.3.0.tar.gz",
215215- "version": "5.3.0",
223223+ "sha256": "08f0ivxqa2b54w2q4lycb3p5ngqyk92n2qll54pmpj54pfn1sj3m",
224224+ "url": "https://github.com/nextcloud-releases/previewgenerator/releases/download/v5.4.0/previewgenerator-v5.4.0.tar.gz",
225225+ "version": "5.4.0",
216226 "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.",
217227 "homepage": "https://github.com/nextcloud/previewgenerator",
218228 "licenses": [
···220230 ]
221231 },
222232 "qownnotesapi": {
223223- "sha256": "1hkcqcc6y7x0zrc88qqmsf7mz0dl1kk06gsl6la3kr33fxr0cp0k",
224224- "url": "https://github.com/pbek/qownnotesapi/releases/download/v23.6.0/qownnotesapi-nc.tar.gz",
225225- "version": "23.6.0",
233233+ "sha256": "1pyr4b3w6gsy83ci6cy0wfv870qm2v957nl4w6xk989iyknk4ana",
234234+ "url": "https://github.com/pbek/qownnotesapi/releases/download/v23.12.0/qownnotesapi-nc.tar.gz",
235235+ "version": "23.12.0",
226236 "description": "QOwnNotesAPI is the Nextcloud/ownCloud API for [QOwnNotes](http://www.qownnotes.org), the open source notepad for Linux, macOS and Windows, that works together with the notes application of Nextcloud/ownCloud.\n\nThe only purpose of this App is to provide API access to your Nextcloud/ownCloud server for your QOwnNotes desktop installation, you cannot use this App for anything else, if you don't have QOwnNotes installed on your desktop computer!",
227237 "homepage": "https://github.com/pbek/qownnotesapi",
228238 "licenses": [
···270280 ]
271281 },
272282 "twofactor_webauthn": {
273273- "sha256": "0z6m2chq5kxc8f10g6n1lh51yi10svy2qp5gp0v8xs71apqcc2wx",
274274- "url": "https://github.com/nextcloud-releases/twofactor_webauthn/releases/download/v1.3.0/twofactor_webauthn-v1.3.0.tar.gz",
275275- "version": "1.3.0",
283283+ "sha256": "1p4ng7nprlcgw7sdfd7wqx5az86a856f1v470lahg2nfbx3fg296",
284284+ "url": "https://github.com/nextcloud-releases/twofactor_webauthn/releases/download/v1.3.2/twofactor_webauthn-v1.3.2.tar.gz",
285285+ "version": "1.3.2",
276286 "description": "A two-factor provider for WebAuthn devices",
277287 "homepage": "https://github.com/nextcloud/twofactor_webauthn#readme",
278288 "licenses": [
···290300 ]
291301 },
292302 "user_saml": {
293293- "sha256": "04ivgqdls72p6x5yrh5p5ycbbfmxhzd0dqin1grblm6cbl7b4s2k",
294294- "url": "https://github.com/nextcloud-releases/user_saml/releases/download/v5.2.4/user_saml-v5.2.4.tar.gz",
295295- "version": "5.2.4",
303303+ "sha256": "0q189wkh0nh5y4z9j4bpgn4xnwwn8y8m8y34bp5nbzfz05xpgr9f",
304304+ "url": "https://github.com/nextcloud-releases/user_saml/releases/download/v5.2.5/user_saml-v5.2.5.tar.gz",
305305+ "version": "5.2.5",
296306 "description": "Using the SSO & SAML app of your Nextcloud you can make it easily possible to integrate your existing Single-Sign-On solution with Nextcloud. In addition, you can use the Nextcloud LDAP user provider to keep the convenience for users. (e.g. when sharing)\nThe following providers are supported and tested at the moment:\n\n* **SAML 2.0**\n\t* OneLogin\n\t* Shibboleth\n\t* Active Directory Federation Services (ADFS)\n\n* **Authentication via Environment Variable**\n\t* Kerberos (mod_auth_kerb)\n\t* Any other provider that authenticates using the environment variable\n\nWhile theoretically any other authentication provider implementing either one of those standards is compatible, we like to note that they are not part of any internal test matrix.",
297307 "homepage": "https://github.com/nextcloud/user_saml",
298308 "licenses": [
+56-46
pkgs/servers/nextcloud/packages/27.json
···11{
22 "bookmarks": {
33- "sha256": "14dkyqm04d4ix114jbcgbx10zvkv4qlx4n56chpqz0w1y7x8idpd",
44- "url": "https://github.com/nextcloud/bookmarks/releases/download/v13.1.1/bookmarks-13.1.1.tar.gz",
55- "version": "13.1.1",
33+ "sha256": "04yngkmsjq6zj5qih86ybfr2cybqsz3gb5dasm6yhmkvd1ar5s39",
44+ "url": "https://github.com/nextcloud/bookmarks/releases/download/v13.1.2/bookmarks-13.1.2.tar.gz",
55+ "version": "13.1.2",
66 "description": "- 📂 Sort bookmarks into folders\n- 🏷 Add tags and personal notes\n- 🔍 Full-text search\n- 📲 Synchronize with all your browsers and devices\n- 👪 Share bookmarks with other users and publicly\n- ☠ Find broken links\n- ⚛ Generate RSS feeds of your collections\n- 📔 Read archived versions of your links in case they are depublished\n- 💬 Create new bookmarks directly from within Nextcloud Talk\n- 💼 Built-in Dashboard widgets for frequent and recent links\n\nRequirements:\n - PHP extensions:\n - intl: *\n - mbstring: *\n - when using MySQL, use at least v8.0",
77 "homepage": "https://github.com/nextcloud/bookmarks",
88 "licenses": [
···1010 ]
1111 },
1212 "calendar": {
1313- "sha256": "1iq8np72pjw2bn4zmbp2rmrh12n4z62rwrz2bb94xjza1fws7b2v",
1414- "url": "https://github.com/nextcloud-releases/calendar/releases/download/v4.5.3/calendar-v4.5.3.tar.gz",
1515- "version": "4.5.3",
1313+ "sha256": "0d6mfqwq44z9kn8nh3zmfzr05zi2rwnw3nhd9wc12dy6npynkcpm",
1414+ "url": "https://github.com/nextcloud-releases/calendar/releases/download/v4.6.0/calendar-v4.6.0.tar.gz",
1515+ "version": "4.6.0",
1616 "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.",
1717 "homepage": "https://github.com/nextcloud/calendar/",
1818 "licenses": [
···2020 ]
2121 },
2222 "contacts": {
2323- "sha256": "1pz2px5amk3byn4pq86cyyjv4hrqhsjz61xfm7cl7z8qfckqfhi2",
2424- "url": "https://github.com/nextcloud-releases/contacts/releases/download/v5.4.2/contacts-v5.4.2.tar.gz",
2525- "version": "5.4.2",
2323+ "sha256": "0pbl4fmpg1jxwjj141gqnmwzgm3ji1z686kr11rmldfkjvhjss2x",
2424+ "url": "https://github.com/nextcloud-releases/contacts/releases/download/v5.5.0/contacts-v5.5.0.tar.gz",
2525+ "version": "5.5.0",
2626 "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.",
2727 "homepage": "https://github.com/nextcloud/contacts#readme",
2828 "licenses": [
···3030 ]
3131 },
3232 "cookbook": {
3333- "sha256": "18rzvdqd99nlkk3p0y9y8b17ihw5c4c9wsx8psq6xadspm97002y",
3434- "url": "https://github.com/nextcloud/cookbook/releases/download/v0.10.2/Cookbook-0.10.2.tar.gz",
3535- "version": "0.10.2",
3333+ "sha256": "06d1rhvcwxzi8hl99nz3hg32fznv0q5m06cwjy3gc81j53qz0ksc",
3434+ "url": "https://github.com/christianlupus-nextcloud/cookbook-releases/releases/download/v0.10.5/cookbook-0.10.5.tar.gz",
3535+ "version": "0.10.5",
3636 "description": "A library for all your recipes. It uses JSON files following the schema.org recipe format. To add a recipe to the collection, you can paste in the URL of the recipe, and the provided web page will be parsed and downloaded to whichever folder you specify in the app settings.",
3737- "homepage": "",
3737+ "homepage": "https://github.com/nextcloud/cookbook/",
3838 "licenses": [
3939 "agpl"
4040 ]
4141 },
4242 "cospend": {
4343- "sha256": "1rg9k33yapbl8chpxx3bjyzc9h4krjavksbxsvw14kpm01rss3j9",
4444- "url": "https://github.com/julien-nc/cospend-nc/releases/download/v1.5.10/cospend-1.5.10.tar.gz",
4545- "version": "1.5.10",
4343+ "sha256": "0v61wdrf4wxjx2xv81599k9k855iyhazxnh4shqvglfb01fi8qhn",
4444+ "url": "https://github.com/julien-nc/cospend-nc/releases/download/v1.5.12/cospend-1.5.12.tar.gz",
4545+ "version": "1.5.12",
4646 "description": "# Nextcloud Cospend 💰\n\nNextcloud Cospend is a group/shared budget manager. It was inspired by the great [IHateMoney](https://github.com/spiral-project/ihatemoney/).\n\nYou can use it when you share a house, when you go on vacation with friends, whenever you share money with others.\n\nIt lets you create projects with members and bills. Each member has a balance computed from the project bills. This way you can see who owes the group and who the group owes. Ultimately you can ask for a settlement plan telling you which payments to make to reset members balances.\n\nProject members are independent from Nextcloud users. Projects can be accessed and modified by people without a Nextcloud account. Each project has an ID and a password for guest access.\n\n[MoneyBuster](https://gitlab.com/eneiluj/moneybuster) Android client is [available in F-Droid](https://f-droid.org/packages/net.eneiluj.moneybuster/) and on the [Play store](https://play.google.com/store/apps/details?id=net.eneiluj.moneybuster).\n\n[PayForMe](https://github.com/mayflower/PayForMe) iOS client is currently being developped!\n\n## Features\n\n* ✎ create/edit/delete projects, members, bills, bill categories, currencies\n* ⚖ check member balances\n* 🗠 display project statistics\n* ♻ display settlement plan\n* 🎇 automatically create reimbursement bills from settlement plan\n* 🗓 create recurring bills (daily/weekly/monthly/yearly)\n* 📊 optionally provide custom amount for each member in new bills\n* 🔗 link bills with personal files (picture of physical bill for example)\n* 👩 guest access for people outside Nextcloud\n* 👫 share projects with Nextcloud users/groups/circles\n* 🖫 import/export projects as csv (compatible with csv files from IHateMoney)\n* 🔗 generate link/QRCode to easily import projects in MoneyBuster\n* 🗲 implement Nextcloud notifications and activity stream\n\nThis app is tested on Nextcloud 20+ with Firefox 57+ and Chromium.\n\nThis app is under development.\n\n🌍 Help us to translate this app on [Nextcloud-Cospend/MoneyBuster Crowdin project](https://crowdin.com/project/moneybuster).\n\n⚒ Check out other ways to help in the [contribution guidelines](https://gitlab.com/eneiluj/cospend-nc/blob/master/CONTRIBUTING.md).\n\n## Documentation\n\n* [User documentation](https://github.com/eneiluj/cospend-nc/blob/master/docs/user.md)\n* [Admin documentation](https://github.com/eneiluj/cospend-nc/blob/master/docs/admin.md)\n* [Developer documentation](https://github.com/eneiluj/cospend-nc/blob/master/docs/dev.md)\n* [CHANGELOG](https://github.com/eneiluj/cospend-nc/blob/master/CHANGELOG.md#change-log)\n* [AUTHORS](https://github.com/eneiluj/cospend-nc/blob/master/AUTHORS.md#authors)\n\n## Known issues\n\n* it does not make you rich\n\nAny feedback will be appreciated.\n\n\n\n## Donation\n\nI develop this app during my free time.\n\n* [Donate with Paypal](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66PALMY8SF5JE) (you don't need a paypal account)\n* [Donate with Liberapay : ](https://liberapay.com/eneiluj/donate)",
4747 "homepage": "https://github.com/julien-nc/cospend-nc",
4848 "licenses": [
···5050 ]
5151 },
5252 "deck": {
5353- "sha256": "18gscc95zay7nrzdm1h5b52r4bpmpzc1h1xb00214qnb59mydiwr",
5454- "url": "https://github.com/nextcloud-releases/deck/releases/download/v1.11.1/deck-v1.11.1.tar.gz",
5555- "version": "1.11.1",
5353+ "sha256": "0ykxfw9v89k4a3g6lbl75d0hwri85kf6jqx1n5v2jxibfr5n4bcp",
5454+ "url": "https://github.com/nextcloud-releases/deck/releases/download/v1.11.2/deck-v1.11.2.tar.gz",
5555+ "version": "1.11.2",
5656 "description": "Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized",
5757 "homepage": "https://github.com/nextcloud/deck",
5858 "licenses": [
···8080 ]
8181 },
8282 "forms": {
8383- "sha256": "155z87wyv2p06c3kpy9zaw6qf5s7s0ah4wfw022s4cc21i3rcwxv",
8484- "url": "https://github.com/nextcloud-releases/forms/releases/download/v3.3.1/forms-v3.3.1.tar.gz",
8585- "version": "3.3.1",
8383+ "sha256": "1mipdri1flhkdwknsp72k87y7xfis72bzsnw1alzr1cbp8d6ardm",
8484+ "url": "https://github.com/nextcloud-releases/forms/releases/download/v3.4.3/forms-v3.4.3.tar.gz",
8585+ "version": "3.4.3",
8686 "description": "**Simple surveys and questionnaires, self-hosted!**\n\n- **📝 Simple design:** No mass of options, only the essentials. Works well on mobile of course.\n- **📊 View & export results:** Results are visualized and can also be exported as CSV in the same format used by Google Forms.\n- **🔒 Data under your control!** Unlike in Google Forms, Typeform, Doodle and others, the survey info and responses are kept private on your instance.\n- **🧑💻 Connect to your software:** Easily integrate Forms into your service with our full-fledged [REST-API](https://github.com/nextcloud/forms/blob/main/docs/API.md).\n- **🙋 Get involved!** We have lots of stuff planned like more question types, collaboration on forms, [and much more](https://github.com/nextcloud/forms/milestones)!",
8787 "homepage": "https://github.com/nextcloud/forms",
8888 "licenses": [
···120120 ]
121121 },
122122 "mail": {
123123- "sha256": "0ascail3vfkv3mm5s4s3ma74d6qxai76kdqxknmljnw56xb19qfv",
124124- "url": "https://github.com/nextcloud-releases/mail/releases/download/v3.4.4/mail-v3.4.4.tar.gz",
125125- "version": "3.4.4",
123123+ "sha256": "0ycyj5ydnvnf5cjnxkpxd489rymlag8df67n5lawp43cvgg2jn2d",
124124+ "url": "https://github.com/nextcloud-releases/mail/releases/download/v3.5.0/mail-v3.5.0.tar.gz",
125125+ "version": "3.5.0",
126126 "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/).",
127127 "homepage": "https://github.com/nextcloud/mail#readme",
128128 "licenses": [
···140140 ]
141141 },
142142 "memories": {
143143- "sha256": "1yn1wkv4jxpc8faf4rl46yfddyplnryrkws3jz0x1wcr9zlxdkng",
144144- "url": "https://github.com/pulsejet/memories/releases/download/v6.1.0/memories.tar.gz",
145145- "version": "6.1.0",
143143+ "sha256": "1rz0pkis0vz6hjyj53jbz7dcmd9yxbh1h9p4nhg4a2p7yyd5092m",
144144+ "url": "https://github.com/pulsejet/memories/releases/download/v6.1.5/memories.tar.gz",
145145+ "version": "6.1.5",
146146 "description": "# Memories: Photo Management for Nextcloud\n\nMemories is a *batteries-included* photo management solution for Nextcloud with advanced features including:\n\n- **📸 Timeline**: Sort photos and videos by date taken, parsed from Exif data.\n- **⏪ Rewind**: Jump to any time in the past instantly and relive your memories.\n- **🤖 AI Tagging**: Group photos by people and objects, powered by [recognize](https://github.com/nextcloud/recognize) and [facerecognition](https://github.com/matiasdelellis/facerecognition).\n- **🖼️ Albums**: Create albums to group photos and videos together. Then share these albums with others.\n- **🫱🏻🫲🏻 External Sharing**: Share photos and videos with people outside of your Nextcloud instance.\n- **📱 Mobile Support**: Work from any device, of any shape and size through the web app.\n- **✏️ Edit Metadata**: Edit dates and other metadata on photos quickly and in bulk.\n- **📦 Archive**: Store photos you don't want to see in your timeline in a separate folder.\n- **📹 Video Transcoding**: Transcode videos and use HLS for maximal performance.\n- **🗺️ Map**: View your photos on a map, tagged with accurate reverse geocoding.\n- **📦 Migration**: Migrate easily from Nextcloud Photos and Google Takeout.\n- **⚡️ Performance**: Do all this very fast.\n\n## 🚀 Installation\n\n1. Install the app from the Nextcloud app store (try a demo [here](https://demo.memories.gallery/apps/memories/)).\n1. Perform the recommended [configuration steps](https://memories.gallery/config/).\n1. Run `php occ memories:index` to generate metadata indices for existing photos.\n1. Open the 📷 Memories app in Nextcloud and set the directory containing your photos.",
147147 "homepage": "https://memories.gallery",
148148 "licenses": [
···170170 ]
171171 },
172172 "notes": {
173173- "sha256": "1g4ibrymsfd2bcvmyfyrl23z2kh4bgkwrgyacvdx1glk44di6sgc",
174174- "url": "https://github.com/nextcloud-releases/notes/releases/download/v4.8.1/notes.tar.gz",
175175- "version": "4.8.1",
173173+ "sha256": "19p5qg94ch72y4lym6s8f6x3dly5v3mm97dx29swnkqplflas3zz",
174174+ "url": "https://github.com/nextcloud-releases/notes/releases/download/v4.9.0/notes-v4.9.0.tar.gz",
175175+ "version": "4.9.0",
176176 "description": "The Notes app is a distraction free notes taking app for [Nextcloud](https://www.nextcloud.com/). It provides categories for better organization and supports formatting using [Markdown](https://en.wikipedia.org/wiki/Markdown) syntax. Notes are saved as files in your Nextcloud, so you can view and edit them with every Nextcloud client. Furthermore, a separate [REST API](https://github.com/nextcloud/notes/blob/master/docs/api/README.md) allows for an easy integration into third-party apps (currently, there are notes apps for [Android](https://github.com/nextcloud/notes-android), [iOS](https://github.com/nextcloud/notes-ios) and the [console](https://git.danielmoch.com/nncli/about) which allow convenient access to your Nextcloud notes). Further features include marking notes as favorites.",
177177 "homepage": "https://github.com/nextcloud/notes",
178178 "licenses": [
···180180 ]
181181 },
182182 "notify_push": {
183183- "sha256": "0lwyy1pnyfw464vab1v5k8q0rgarrj5w12cf1nsywjaafb8y1ym0",
184184- "url": "https://github.com/nextcloud-releases/notify_push/releases/download/v0.6.5/notify_push-v0.6.5.tar.gz",
185185- "version": "0.6.5",
183183+ "sha256": "1by9qw9bsf48cyczhfxpz9ifrg2dayvcn26m309dicqgjqkz91hd",
184184+ "url": "https://github.com/nextcloud-releases/notify_push/releases/download/v0.6.6/notify_push-v0.6.6.tar.gz",
185185+ "version": "0.6.6",
186186 "description": "Push update support for desktop app.\n\nOnce the app is installed, the push binary needs to be setup. You can either use the setup wizard with `occ notify_push:setup` or see the [README](http://github.com/nextcloud/notify_push) for detailed setup instructions",
187187 "homepage": "",
188188 "licenses": [
···199199 "apache"
200200 ]
201201 },
202202+ "phonetrack": {
203203+ "sha256": "1xvdmb2wlcldv8lk4jb8akhi80w26m2jpazfcz641frjm333kxch",
204204+ "url": "https://github.com/julien-nc/phonetrack/releases/download/v0.7.7/phonetrack-0.7.7.tar.gz",
205205+ "version": "0.7.7",
206206+ "description": "# PhoneTrack Nextcloud application\n\n📱 PhoneTrack is a Nextcloud application to track and store mobile device's locations.\n\n🗺 It receives information from mobile phone's logging apps and displays it dynamically on a map.\n\n🌍 Help us to translate this app on [PhoneTrack Crowdin project](https://crowdin.com/project/phonetrack).\n\n⚒ Check out other ways to help in the [contribution guidelines](https://gitlab.com/eneiluj/phonetrack-oc/blob/master/CONTRIBUTING.md).\n\nHow to use PhoneTrack :\n\n* Create a tracking session.\n* Give the logging link\\* to the mobile devices. Choose the [logging method](https://gitlab.com/eneiluj/phonetrack-oc/wikis/userdoc#logging-methods) you prefer.\n* Watch the session's devices location in real time (or not) in PhoneTrack or share it with public pages.\n\n(\\*) Don't forget to set the device name in the link (rather than in the logging app settings). Replace \"yourname\" with the desired device name. Setting the device name in logging app settings only works with Owntracks, Traccar and OpenGTS.\n\nOn PhoneTrack main page, while watching a session, you can :\n\n* 📍 Display location history\n* ⛛ Filter points\n* ✎ Manually edit/add/delete points\n* ✎ Edit devices (rename, change colour/shape, move to another session)\n* ⛶ Define geofencing zones for devices\n* ⚇ Define proximity alerts for device pairs\n* 🖧 Share a session to other Nextcloud users or with a public link (read-only)\n* 🔗 Generate public share links with optional restrictions (filters, device name, last positions only, geofencing simplification)\n* 🖫 Import/export a session in GPX format (one file with one track per device or one file per device)\n* 🗠 Display sessions statistics\n* 🔒 [Reserve a device name](https://gitlab.com/eneiluj/phonetrack-oc/wikis/userdoc#device-name-reservation) to make sure only authorised user can log with this name\n* 🗓 Toggle session auto export and auto purge (daily/weekly/monthly)\n* ◔ Choose what to do when point number quota is reached (block logging or delete oldest point)\n\nPublic page and public filtered page work like main page except there is only one session displayed, everything is read-only and there is no need to be logged in.\n\nThis app is tested on Nextcloud 17 with Firefox 57+ and Chromium.\n\nThis app is compatible with theming colours and accessibility themes !\n\nThis app is under development.\n\n## Install\n\nSee the [AdminDoc](https://gitlab.com/eneiluj/phonetrack-oc/wikis/admindoc) for installation details.\n\nCheck [CHANGELOG](https://gitlab.com/eneiluj/phonetrack-oc/blob/master/CHANGELOG.md#change-log) file to see what's new and what's coming in next release.\n\nCheck [AUTHORS](https://gitlab.com/eneiluj/phonetrack-oc/blob/master/AUTHORS.md#authors) file to see complete list of authors.\n\n## Known issues\n\n* PhoneTrack **now works** with Nextcloud group restriction activated. See [admindoc](https://gitlab.com/eneiluj/phonetrack-oc/wikis/admindoc#issue-with-phonetrack-restricted-to-some-groups-in-nextcloud).\n\nAny feedback will be appreciated.\n\n## Donation\n\nI develop this app during my free time.\n\n* [Donate with Paypal](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66PALMY8SF5JE) (you don't need a paypal account)\n* [Donate with Liberapay : ](https://liberapay.com/eneiluj/donate)",
207207+ "homepage": "https://github.com/julien-nc/phonetrack-oc",
208208+ "licenses": [
209209+ "agpl"
210210+ ]
211211+ },
202212 "polls": {
203213 "sha256": "1dmws4ybv3pzxz5g9c7ghblx0nfal2ssmsg7hjcs1n4xcjc6585p",
204214 "url": "https://github.com/nextcloud/polls/releases/download/v5.4.2/polls.tar.gz",
···210220 ]
211221 },
212222 "previewgenerator": {
213213- "sha256": "0ziyl7kqgivk9xvkd12byps6bb3fvcvdgprfa9ffy1zrgpl9syhk",
214214- "url": "https://github.com/nextcloud-releases/previewgenerator/releases/download/v5.3.0/previewgenerator-v5.3.0.tar.gz",
215215- "version": "5.3.0",
223223+ "sha256": "08f0ivxqa2b54w2q4lycb3p5ngqyk92n2qll54pmpj54pfn1sj3m",
224224+ "url": "https://github.com/nextcloud-releases/previewgenerator/releases/download/v5.4.0/previewgenerator-v5.4.0.tar.gz",
225225+ "version": "5.4.0",
216226 "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.",
217227 "homepage": "https://github.com/nextcloud/previewgenerator",
218228 "licenses": [
···220230 ]
221231 },
222232 "qownnotesapi": {
223223- "sha256": "1hkcqcc6y7x0zrc88qqmsf7mz0dl1kk06gsl6la3kr33fxr0cp0k",
224224- "url": "https://github.com/pbek/qownnotesapi/releases/download/v23.6.0/qownnotesapi-nc.tar.gz",
225225- "version": "23.6.0",
233233+ "sha256": "1pyr4b3w6gsy83ci6cy0wfv870qm2v957nl4w6xk989iyknk4ana",
234234+ "url": "https://github.com/pbek/qownnotesapi/releases/download/v23.12.0/qownnotesapi-nc.tar.gz",
235235+ "version": "23.12.0",
226236 "description": "QOwnNotesAPI is the Nextcloud/ownCloud API for [QOwnNotes](http://www.qownnotes.org), the open source notepad for Linux, macOS and Windows, that works together with the notes application of Nextcloud/ownCloud.\n\nThe only purpose of this App is to provide API access to your Nextcloud/ownCloud server for your QOwnNotes desktop installation, you cannot use this App for anything else, if you don't have QOwnNotes installed on your desktop computer!",
227237 "homepage": "https://github.com/pbek/qownnotesapi",
228238 "licenses": [
···270280 ]
271281 },
272282 "twofactor_webauthn": {
273273- "sha256": "0z6m2chq5kxc8f10g6n1lh51yi10svy2qp5gp0v8xs71apqcc2wx",
274274- "url": "https://github.com/nextcloud-releases/twofactor_webauthn/releases/download/v1.3.0/twofactor_webauthn-v1.3.0.tar.gz",
275275- "version": "1.3.0",
283283+ "sha256": "1p4ng7nprlcgw7sdfd7wqx5az86a856f1v470lahg2nfbx3fg296",
284284+ "url": "https://github.com/nextcloud-releases/twofactor_webauthn/releases/download/v1.3.2/twofactor_webauthn-v1.3.2.tar.gz",
285285+ "version": "1.3.2",
276286 "description": "A two-factor provider for WebAuthn devices",
277287 "homepage": "https://github.com/nextcloud/twofactor_webauthn#readme",
278288 "licenses": [
···290300 ]
291301 },
292302 "user_saml": {
293293- "sha256": "04ivgqdls72p6x5yrh5p5ycbbfmxhzd0dqin1grblm6cbl7b4s2k",
294294- "url": "https://github.com/nextcloud-releases/user_saml/releases/download/v5.2.4/user_saml-v5.2.4.tar.gz",
295295- "version": "5.2.4",
303303+ "sha256": "0q189wkh0nh5y4z9j4bpgn4xnwwn8y8m8y34bp5nbzfz05xpgr9f",
304304+ "url": "https://github.com/nextcloud-releases/user_saml/releases/download/v5.2.5/user_saml-v5.2.5.tar.gz",
305305+ "version": "5.2.5",
296306 "description": "Using the SSO & SAML app of your Nextcloud you can make it easily possible to integrate your existing Single-Sign-On solution with Nextcloud. In addition, you can use the Nextcloud LDAP user provider to keep the convenience for users. (e.g. when sharing)\nThe following providers are supported and tested at the moment:\n\n* **SAML 2.0**\n\t* OneLogin\n\t* Shibboleth\n\t* Active Directory Federation Services (ADFS)\n\n* **Authentication via Environment Variable**\n\t* Kerberos (mod_auth_kerb)\n\t* Any other provider that authenticates using the environment variable\n\nWhile theoretically any other authentication provider implementing either one of those standards is compatible, we like to note that they are not part of any internal test matrix.",
297307 "homepage": "https://github.com/nextcloud/user_saml",
298308 "licenses": [
+232
pkgs/servers/nextcloud/packages/28.json
···11+{
22+ "bookmarks": {
33+ "sha256": "04yngkmsjq6zj5qih86ybfr2cybqsz3gb5dasm6yhmkvd1ar5s39",
44+ "url": "https://github.com/nextcloud/bookmarks/releases/download/v13.1.2/bookmarks-13.1.2.tar.gz",
55+ "version": "13.1.2",
66+ "description": "- 📂 Sort bookmarks into folders\n- 🏷 Add tags and personal notes\n- 🔍 Full-text search\n- 📲 Synchronize with all your browsers and devices\n- 👪 Share bookmarks with other users and publicly\n- ☠ Find broken links\n- ⚛ Generate RSS feeds of your collections\n- 📔 Read archived versions of your links in case they are depublished\n- 💬 Create new bookmarks directly from within Nextcloud Talk\n- 💼 Built-in Dashboard widgets for frequent and recent links\n\nRequirements:\n - PHP extensions:\n - intl: *\n - mbstring: *\n - when using MySQL, use at least v8.0",
77+ "homepage": "https://github.com/nextcloud/bookmarks",
88+ "licenses": [
99+ "agpl"
1010+ ]
1111+ },
1212+ "calendar": {
1313+ "sha256": "0d6mfqwq44z9kn8nh3zmfzr05zi2rwnw3nhd9wc12dy6npynkcpm",
1414+ "url": "https://github.com/nextcloud-releases/calendar/releases/download/v4.6.0/calendar-v4.6.0.tar.gz",
1515+ "version": "4.6.0",
1616+ "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.",
1717+ "homepage": "https://github.com/nextcloud/calendar/",
1818+ "licenses": [
1919+ "agpl"
2020+ ]
2121+ },
2222+ "contacts": {
2323+ "sha256": "0pbl4fmpg1jxwjj141gqnmwzgm3ji1z686kr11rmldfkjvhjss2x",
2424+ "url": "https://github.com/nextcloud-releases/contacts/releases/download/v5.5.0/contacts-v5.5.0.tar.gz",
2525+ "version": "5.5.0",
2626+ "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.",
2727+ "homepage": "https://github.com/nextcloud/contacts#readme",
2828+ "licenses": [
2929+ "agpl"
3030+ ]
3131+ },
3232+ "cookbook": {
3333+ "sha256": "0wd4vwfp4i8hfrlqfzac517iqfhzxy1sv0ryb96489q9fvbcvlnp",
3434+ "url": "https://github.com/christianlupus-nextcloud/cookbook-releases/releases/download/v0.11.0/cookbook-0.11.0.tar.gz",
3535+ "version": "0.11.0",
3636+ "description": "A library for all your recipes. It uses JSON files following the schema.org recipe format. To add a recipe to the collection, you can paste in the URL of the recipe, and the provided web page will be parsed and downloaded to whichever folder you specify in the app settings.",
3737+ "homepage": "https://github.com/nextcloud/cookbook/",
3838+ "licenses": [
3939+ "agpl"
4040+ ]
4141+ },
4242+ "cospend": {
4343+ "sha256": "0v61wdrf4wxjx2xv81599k9k855iyhazxnh4shqvglfb01fi8qhn",
4444+ "url": "https://github.com/julien-nc/cospend-nc/releases/download/v1.5.12/cospend-1.5.12.tar.gz",
4545+ "version": "1.5.12",
4646+ "description": "# Nextcloud Cospend 💰\n\nNextcloud Cospend is a group/shared budget manager. It was inspired by the great [IHateMoney](https://github.com/spiral-project/ihatemoney/).\n\nYou can use it when you share a house, when you go on vacation with friends, whenever you share money with others.\n\nIt lets you create projects with members and bills. Each member has a balance computed from the project bills. This way you can see who owes the group and who the group owes. Ultimately you can ask for a settlement plan telling you which payments to make to reset members balances.\n\nProject members are independent from Nextcloud users. Projects can be accessed and modified by people without a Nextcloud account. Each project has an ID and a password for guest access.\n\n[MoneyBuster](https://gitlab.com/eneiluj/moneybuster) Android client is [available in F-Droid](https://f-droid.org/packages/net.eneiluj.moneybuster/) and on the [Play store](https://play.google.com/store/apps/details?id=net.eneiluj.moneybuster).\n\n[PayForMe](https://github.com/mayflower/PayForMe) iOS client is currently being developped!\n\n## Features\n\n* ✎ create/edit/delete projects, members, bills, bill categories, currencies\n* ⚖ check member balances\n* 🗠 display project statistics\n* ♻ display settlement plan\n* 🎇 automatically create reimbursement bills from settlement plan\n* 🗓 create recurring bills (daily/weekly/monthly/yearly)\n* 📊 optionally provide custom amount for each member in new bills\n* 🔗 link bills with personal files (picture of physical bill for example)\n* 👩 guest access for people outside Nextcloud\n* 👫 share projects with Nextcloud users/groups/circles\n* 🖫 import/export projects as csv (compatible with csv files from IHateMoney)\n* 🔗 generate link/QRCode to easily import projects in MoneyBuster\n* 🗲 implement Nextcloud notifications and activity stream\n\nThis app is tested on Nextcloud 20+ with Firefox 57+ and Chromium.\n\nThis app is under development.\n\n🌍 Help us to translate this app on [Nextcloud-Cospend/MoneyBuster Crowdin project](https://crowdin.com/project/moneybuster).\n\n⚒ Check out other ways to help in the [contribution guidelines](https://gitlab.com/eneiluj/cospend-nc/blob/master/CONTRIBUTING.md).\n\n## Documentation\n\n* [User documentation](https://github.com/eneiluj/cospend-nc/blob/master/docs/user.md)\n* [Admin documentation](https://github.com/eneiluj/cospend-nc/blob/master/docs/admin.md)\n* [Developer documentation](https://github.com/eneiluj/cospend-nc/blob/master/docs/dev.md)\n* [CHANGELOG](https://github.com/eneiluj/cospend-nc/blob/master/CHANGELOG.md#change-log)\n* [AUTHORS](https://github.com/eneiluj/cospend-nc/blob/master/AUTHORS.md#authors)\n\n## Known issues\n\n* it does not make you rich\n\nAny feedback will be appreciated.\n\n\n\n## Donation\n\nI develop this app during my free time.\n\n* [Donate with Paypal](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66PALMY8SF5JE) (you don't need a paypal account)\n* [Donate with Liberapay : ](https://liberapay.com/eneiluj/donate)",
4747+ "homepage": "https://github.com/julien-nc/cospend-nc",
4848+ "licenses": [
4949+ "agpl"
5050+ ]
5151+ },
5252+ "deck": {
5353+ "sha256": "0dkw59pv3yj21fs87sw2y4z1qplsgbfnr0nk9cjsb8vb3xjzd0rx",
5454+ "url": "https://github.com/nextcloud-releases/deck/releases/download/v1.12.0/deck-v1.12.0.tar.gz",
5555+ "version": "1.12.0",
5656+ "description": "Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized",
5757+ "homepage": "https://github.com/nextcloud/deck",
5858+ "licenses": [
5959+ "agpl"
6060+ ]
6161+ },
6262+ "forms": {
6363+ "sha256": "1ffga26v01d14rh4mjwyjqp7slh7h7d07vs3yldb8csi826ynji4",
6464+ "url": "https://github.com/nextcloud-releases/forms/releases/download/v4.0.0/forms-v4.0.0.tar.gz",
6565+ "version": "4.0.0",
6666+ "description": "**Simple surveys and questionnaires, self-hosted!**\n\n- **📝 Simple design:** No mass of options, only the essentials. Works well on mobile of course.\n- **📊 View & export results:** Results are visualized and can also be exported as CSV in the same format used by Google Forms.\n- **🔒 Data under your control!** Unlike in Google Forms, Typeform, Doodle and others, the survey info and responses are kept private on your instance.\n- **🧑💻 Connect to your software:** Easily integrate Forms into your service with our full-fledged [REST-API](https://github.com/nextcloud/forms/blob/main/docs/API.md).\n- **🙋 Get involved!** We have lots of stuff planned like more question types, collaboration on forms, [and much more](https://github.com/nextcloud/forms/milestones)!",
6767+ "homepage": "https://github.com/nextcloud/forms",
6868+ "licenses": [
6969+ "agpl"
7070+ ]
7171+ },
7272+ "groupfolders": {
7373+ "sha256": "024qll51hdsky6iad0acf3c00ny9k9mc303r2v4g4h53qx2gksys",
7474+ "url": "https://github.com/nextcloud-releases/groupfolders/releases/download/v16.0.1/groupfolders-v16.0.1.tar.gz",
7575+ "version": "16.0.1",
7676+ "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.",
7777+ "homepage": "https://github.com/nextcloud/groupfolders",
7878+ "licenses": [
7979+ "agpl"
8080+ ]
8181+ },
8282+ "impersonate": {
8383+ "sha256": "0l1wmsiycwnn5py1mdc87paqlciclndrk72yf0ff7k11vidgb7mp",
8484+ "url": "https://github.com/nextcloud-releases/impersonate/releases/download/v1.15.0/impersonate-v1.15.0.tar.gz",
8585+ "version": "1.15.0",
8686+ "description": "By installing the impersonate app of your Nextcloud you enable administrators to impersonate other users on the Nextcloud server. This is especially useful for debugging issues reported by users.\n\nTo impersonate a user an administrator has to simply follow the following four steps:\n\n1. Login as administrator to Nextcloud.\n2. Open users administration interface.\n3. Select the impersonate button on the affected user.\n4. Confirm the impersonation.\n\nThe administrator is then logged-in as the user, to switch back to the regular user account they simply have to press the logout button.\n\n**Note:**\n\n- This app is not compatible with instances that have encryption enabled.\n- While impersonate actions are logged note that actions performed impersonated will be logged as the impersonated user.\n- Impersonating a user is only possible after their first login.\n- You can limit which users/groups can use impersonation in Administration settings > Additional settings.",
8787+ "homepage": "https://github.com/nextcloud/impersonate",
8888+ "licenses": [
8989+ "agpl"
9090+ ]
9191+ },
9292+ "mail": {
9393+ "sha256": "0ycyj5ydnvnf5cjnxkpxd489rymlag8df67n5lawp43cvgg2jn2d",
9494+ "url": "https://github.com/nextcloud-releases/mail/releases/download/v3.5.0/mail-v3.5.0.tar.gz",
9595+ "version": "3.5.0",
9696+ "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/).",
9797+ "homepage": "https://github.com/nextcloud/mail#readme",
9898+ "licenses": [
9999+ "agpl"
100100+ ]
101101+ },
102102+ "maps": {
103103+ "sha256": "0rs5cqn2saip7fmj71ww879iqsmmigf0fi6fdbqmdxmrmvsnl9l6",
104104+ "url": "https://github.com/nextcloud/maps/releases/download/v1.3.1/maps-1.3.1.tar.gz",
105105+ "version": "1.3.1",
106106+ "description": "**The whole world fits inside your cloud!**\n\n- **🗺 Beautiful map:** Using [OpenStreetMap](https://www.openstreetmap.org) and [Leaflet](https://leafletjs.com), you can choose between standard map, satellite, topographical, dark mode or even watercolor! 🎨\n- **⭐ Favorites:** Save your favorite places, privately! Sync with [GNOME Maps](https://github.com/nextcloud/maps/issues/30) and mobile apps is planned.\n- **🧭 Routing:** Possible using either [OSRM](http://project-osrm.org), [GraphHopper](https://www.graphhopper.com) or [Mapbox](https://www.mapbox.com).\n- **🖼 Photos on the map:** No more boring slideshows, just show directly where you were!\n- **🙋 Contacts on the map:** See where your friends live and plan your next visit.\n- **📱 Devices:** Lost your phone? Check the map!\n- **〰 Tracks:** Load GPS tracks or past trips. Recording with [PhoneTrack](https://f-droid.org/en/packages/net.eneiluj.nextcloud.phonetrack/) or [OwnTracks](https://owntracks.org) is planned.",
107107+ "homepage": "https://github.com/nextcloud/maps",
108108+ "licenses": [
109109+ "agpl"
110110+ ]
111111+ },
112112+ "notes": {
113113+ "sha256": "19p5qg94ch72y4lym6s8f6x3dly5v3mm97dx29swnkqplflas3zz",
114114+ "url": "https://github.com/nextcloud-releases/notes/releases/download/v4.9.0/notes-v4.9.0.tar.gz",
115115+ "version": "4.9.0",
116116+ "description": "The Notes app is a distraction free notes taking app for [Nextcloud](https://www.nextcloud.com/). It provides categories for better organization and supports formatting using [Markdown](https://en.wikipedia.org/wiki/Markdown) syntax. Notes are saved as files in your Nextcloud, so you can view and edit them with every Nextcloud client. Furthermore, a separate [REST API](https://github.com/nextcloud/notes/blob/master/docs/api/README.md) allows for an easy integration into third-party apps (currently, there are notes apps for [Android](https://github.com/nextcloud/notes-android), [iOS](https://github.com/nextcloud/notes-ios) and the [console](https://git.danielmoch.com/nncli/about) which allow convenient access to your Nextcloud notes). Further features include marking notes as favorites.",
117117+ "homepage": "https://github.com/nextcloud/notes",
118118+ "licenses": [
119119+ "agpl"
120120+ ]
121121+ },
122122+ "notify_push": {
123123+ "sha256": "1by9qw9bsf48cyczhfxpz9ifrg2dayvcn26m309dicqgjqkz91hd",
124124+ "url": "https://github.com/nextcloud-releases/notify_push/releases/download/v0.6.6/notify_push-v0.6.6.tar.gz",
125125+ "version": "0.6.6",
126126+ "description": "Push update support for desktop app.\n\nOnce the app is installed, the push binary needs to be setup. You can either use the setup wizard with `occ notify_push:setup` or see the [README](http://github.com/nextcloud/notify_push) for detailed setup instructions",
127127+ "homepage": "",
128128+ "licenses": [
129129+ "agpl"
130130+ ]
131131+ },
132132+ "onlyoffice": {
133133+ "sha256": "14vqyr7yq95kiwkb2q25qa5kxfx0mri12bbyy2fpm94kk2y2km37",
134134+ "url": "https://github.com/ONLYOFFICE/onlyoffice-nextcloud/releases/download/v9.0.0/onlyoffice.tar.gz",
135135+ "version": "9.0.0",
136136+ "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.",
137137+ "homepage": "https://www.onlyoffice.com",
138138+ "licenses": [
139139+ "agpl"
140140+ ]
141141+ },
142142+ "phonetrack": {
143143+ "sha256": "1xvdmb2wlcldv8lk4jb8akhi80w26m2jpazfcz641frjm333kxch",
144144+ "url": "https://github.com/julien-nc/phonetrack/releases/download/v0.7.7/phonetrack-0.7.7.tar.gz",
145145+ "version": "0.7.7",
146146+ "description": "# PhoneTrack Nextcloud application\n\n📱 PhoneTrack is a Nextcloud application to track and store mobile device's locations.\n\n🗺 It receives information from mobile phone's logging apps and displays it dynamically on a map.\n\n🌍 Help us to translate this app on [PhoneTrack Crowdin project](https://crowdin.com/project/phonetrack).\n\n⚒ Check out other ways to help in the [contribution guidelines](https://gitlab.com/eneiluj/phonetrack-oc/blob/master/CONTRIBUTING.md).\n\nHow to use PhoneTrack :\n\n* Create a tracking session.\n* Give the logging link\\* to the mobile devices. Choose the [logging method](https://gitlab.com/eneiluj/phonetrack-oc/wikis/userdoc#logging-methods) you prefer.\n* Watch the session's devices location in real time (or not) in PhoneTrack or share it with public pages.\n\n(\\*) Don't forget to set the device name in the link (rather than in the logging app settings). Replace \"yourname\" with the desired device name. Setting the device name in logging app settings only works with Owntracks, Traccar and OpenGTS.\n\nOn PhoneTrack main page, while watching a session, you can :\n\n* 📍 Display location history\n* ⛛ Filter points\n* ✎ Manually edit/add/delete points\n* ✎ Edit devices (rename, change colour/shape, move to another session)\n* ⛶ Define geofencing zones for devices\n* ⚇ Define proximity alerts for device pairs\n* 🖧 Share a session to other Nextcloud users or with a public link (read-only)\n* 🔗 Generate public share links with optional restrictions (filters, device name, last positions only, geofencing simplification)\n* 🖫 Import/export a session in GPX format (one file with one track per device or one file per device)\n* 🗠 Display sessions statistics\n* 🔒 [Reserve a device name](https://gitlab.com/eneiluj/phonetrack-oc/wikis/userdoc#device-name-reservation) to make sure only authorised user can log with this name\n* 🗓 Toggle session auto export and auto purge (daily/weekly/monthly)\n* ◔ Choose what to do when point number quota is reached (block logging or delete oldest point)\n\nPublic page and public filtered page work like main page except there is only one session displayed, everything is read-only and there is no need to be logged in.\n\nThis app is tested on Nextcloud 17 with Firefox 57+ and Chromium.\n\nThis app is compatible with theming colours and accessibility themes !\n\nThis app is under development.\n\n## Install\n\nSee the [AdminDoc](https://gitlab.com/eneiluj/phonetrack-oc/wikis/admindoc) for installation details.\n\nCheck [CHANGELOG](https://gitlab.com/eneiluj/phonetrack-oc/blob/master/CHANGELOG.md#change-log) file to see what's new and what's coming in next release.\n\nCheck [AUTHORS](https://gitlab.com/eneiluj/phonetrack-oc/blob/master/AUTHORS.md#authors) file to see complete list of authors.\n\n## Known issues\n\n* PhoneTrack **now works** with Nextcloud group restriction activated. See [admindoc](https://gitlab.com/eneiluj/phonetrack-oc/wikis/admindoc#issue-with-phonetrack-restricted-to-some-groups-in-nextcloud).\n\nAny feedback will be appreciated.\n\n## Donation\n\nI develop this app during my free time.\n\n* [Donate with Paypal](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66PALMY8SF5JE) (you don't need a paypal account)\n* [Donate with Liberapay : ](https://liberapay.com/eneiluj/donate)",
147147+ "homepage": "https://github.com/julien-nc/phonetrack-oc",
148148+ "licenses": [
149149+ "agpl"
150150+ ]
151151+ },
152152+ "polls": {
153153+ "sha256": "1jsxgnn6vvbn1v0x8k2zf95pdqlrg6pxrvn32sms8sfzgq3lbn7m",
154154+ "url": "https://github.com/nextcloud/polls/releases/download/v6.0.1/polls.tar.gz",
155155+ "version": "6.0.1",
156156+ "description": "A polls app, similar to Doodle/Dudle with the possibility to restrict access (members, certain groups/users, hidden and public).",
157157+ "homepage": "https://github.com/nextcloud/polls",
158158+ "licenses": [
159159+ "agpl"
160160+ ]
161161+ },
162162+ "previewgenerator": {
163163+ "sha256": "08f0ivxqa2b54w2q4lycb3p5ngqyk92n2qll54pmpj54pfn1sj3m",
164164+ "url": "https://github.com/nextcloud-releases/previewgenerator/releases/download/v5.4.0/previewgenerator-v5.4.0.tar.gz",
165165+ "version": "5.4.0",
166166+ "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.",
167167+ "homepage": "https://github.com/nextcloud/previewgenerator",
168168+ "licenses": [
169169+ "agpl"
170170+ ]
171171+ },
172172+ "qownnotesapi": {
173173+ "sha256": "1pyr4b3w6gsy83ci6cy0wfv870qm2v957nl4w6xk989iyknk4ana",
174174+ "url": "https://github.com/pbek/qownnotesapi/releases/download/v23.12.0/qownnotesapi-nc.tar.gz",
175175+ "version": "23.12.0",
176176+ "description": "QOwnNotesAPI is the Nextcloud/ownCloud API for [QOwnNotes](http://www.qownnotes.org), the open source notepad for Linux, macOS and Windows, that works together with the notes application of Nextcloud/ownCloud.\n\nThe only purpose of this App is to provide API access to your Nextcloud/ownCloud server for your QOwnNotes desktop installation, you cannot use this App for anything else, if you don't have QOwnNotes installed on your desktop computer!",
177177+ "homepage": "https://github.com/pbek/qownnotesapi",
178178+ "licenses": [
179179+ "agpl"
180180+ ]
181181+ },
182182+ "spreed": {
183183+ "sha256": "1aa0pr9r3md04q8anih25kg6b77zfzdf6y8fz2miyfbwd8n6j21p",
184184+ "url": "https://github.com/nextcloud-releases/spreed/releases/download/v18.0.0/spreed-v18.0.0.tar.gz",
185185+ "version": "18.0.0",
186186+ "description": "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat integration!** Nextcloud Talk comes with a simple text chat. Allowing you to share files from your Nextcloud and mentioning other participants.\n* 👥 **Private, group, public and password protected calls!** Just invite somebody, a whole group or send a public link to invite to a call.\n* 💻 **Screen sharing!** Share your screen with participants of your call. You just need to use Firefox version 66 (or newer), latest Edge or Chrome 72 (or newer, also possible using Chrome 49 with this [Chrome extension](https://chrome.google.com/webstore/detail/screensharing-for-nextclo/kepnpjhambipllfmgmbapncekcmabkol)).\n* 🚀 **Integration with other Nextcloud apps** like Files, Contacts and Deck. More to come.\n\nAnd in the works for the [coming versions](https://github.com/nextcloud/spreed/milestones/):\n* ✋ [Federated calls](https://github.com/nextcloud/spreed/issues/21), to call people on other Nextclouds",
187187+ "homepage": "https://github.com/nextcloud/spreed",
188188+ "licenses": [
189189+ "agpl"
190190+ ]
191191+ },
192192+ "tasks": {
193193+ "sha256": "0a1wpb9f08iqxl9vjp0slxwzn0w67ilpk21dsi0nhpm28ns2mhyc",
194194+ "url": "https://github.com/nextcloud/tasks/releases/download/v0.15.0/tasks.tar.gz",
195195+ "version": "0.15.0",
196196+ "description": "Once enabled, a new Tasks menu will appear in your Nextcloud apps menu. From there you can add and delete tasks, edit their title, description, start and due dates and mark them as important. Tasks can be shared between users. Tasks can be synchronized using CalDav (each task list is linked to an Nextcloud calendar, to sync it to your local client: Thunderbird, Evolution, KDE Kontact, iCal … - just add the calendar as a remote calendar in your client). You can download your tasks as ICS files using the download button for each calendar.",
197197+ "homepage": "https://github.com/nextcloud/tasks/",
198198+ "licenses": [
199199+ "agpl"
200200+ ]
201201+ },
202202+ "twofactor_nextcloud_notification": {
203203+ "sha256": "0gaqgzbryim580dxarak7p4g3wd8wp3w6lw9jhl84jh46wrsbrj8",
204204+ "url": "https://github.com/nextcloud-releases/twofactor_nextcloud_notification/releases/download/v3.8.0/twofactor_nextcloud_notification-v3.8.0.tar.gz",
205205+ "version": "3.8.0",
206206+ "description": "Allows using any of your logged in devices as second factor",
207207+ "homepage": "https://github.com/nextcloud/twofactor_nextcloud_notification",
208208+ "licenses": [
209209+ "agpl"
210210+ ]
211211+ },
212212+ "twofactor_webauthn": {
213213+ "sha256": "1p4ng7nprlcgw7sdfd7wqx5az86a856f1v470lahg2nfbx3fg296",
214214+ "url": "https://github.com/nextcloud-releases/twofactor_webauthn/releases/download/v1.3.2/twofactor_webauthn-v1.3.2.tar.gz",
215215+ "version": "1.3.2",
216216+ "description": "A two-factor provider for WebAuthn devices",
217217+ "homepage": "https://github.com/nextcloud/twofactor_webauthn#readme",
218218+ "licenses": [
219219+ "agpl"
220220+ ]
221221+ },
222222+ "user_saml": {
223223+ "sha256": "0y5l66ig38202mg5zhy6yi72fz8fbsr7410q6qclxivna3gvyzrc",
224224+ "url": "https://github.com/nextcloud-releases/user_saml/releases/download/v6.0.1/user_saml-v6.0.1.tar.gz",
225225+ "version": "6.0.1",
226226+ "description": "Using the SSO & SAML app of your Nextcloud you can make it easily possible to integrate your existing Single-Sign-On solution with Nextcloud. In addition, you can use the Nextcloud LDAP user provider to keep the convenience for users. (e.g. when sharing)\nThe following providers are supported and tested at the moment:\n\n* **SAML 2.0**\n\t* OneLogin\n\t* Shibboleth\n\t* Active Directory Federation Services (ADFS)\n\n* **Authentication via Environment Variable**\n\t* Kerberos (mod_auth_kerb)\n\t* Any other provider that authenticates using the environment variable\n\nWhile theoretically any other authentication provider implementing either one of those standards is compatible, we like to note that they are not part of any internal test matrix.",
227227+ "homepage": "https://github.com/nextcloud/user_saml",
228228+ "licenses": [
229229+ "agpl"
230230+ ]
231231+ }
232232+}
···44It is being used by [this GitHub Actions workflow](../../../.github/workflows/check-by-name.yml).
55This is part of the implementation of [RFC 140](https://github.com/NixOS/rfcs/pull/140).
6677-## API
77+## Interface
8899-This API may be changed over time if the CI workflow making use of it is adjusted to deal with the change appropriately.
99+The interface of the tool is shown with `--help`:
1010+```
1111+cargo run -- --help
1212+```
10131111-- Command line: `nixpkgs-check-by-name <NIXPKGS>`
1212-- Arguments:
1313- - `<NIXPKGS>`: The path to the Nixpkgs to check
1414- - `--version <VERSION>`: The version of the checks to perform.
1515-1616- Possible values:
1717- - `v0` (default)
1818- - `v1`
1919-2020- See [validation](#validity-checks) for the differences.
2121-- Exit code:
2222- - `0`: If the [validation](#validity-checks) is successful
2323- - `1`: If the [validation](#validity-checks) is not successful
2424- - `2`: If an unexpected I/O error occurs
2525-- Standard error:
2626- - Informative messages
2727- - Detected problems if validation is not successful
1414+The interface may be changed over time only if the CI workflow making use of it is adjusted to deal with the change appropriately.
28152916## Validity checks
3017···32193320### File structure checks
3421- `pkgs/by-name` must only contain subdirectories of the form `${shard}/${name}`, called _package directories_.
3535-- The `name`'s of package directories must be unique when lowercased
2222+- The `name`'s of package directories must be unique when lowercased.
3623- `name` is a string only consisting of the ASCII characters `a-z`, `A-Z`, `0-9`, `-` or `_`.
3724- `shard` is the lowercased first two letters of `name`, expressed in Nix: `shard = toLower (substring 0 2 name)`.
3825- Each package directory must contain a `package.nix` file and may contain arbitrary other files.
···4128- Each package directory must not refer to files outside itself using symlinks or Nix path expressions.
42294330### Nix evaluation checks
4444-- `pkgs.${name}` is defined as `callPackage pkgs/by-name/${shard}/${name}/package.nix args` for some `args`.
4545- - **Only after --version v1**: If `pkgs.${name}` is not auto-called from `pkgs/by-name`, `args` must not be empty
4646-- `pkgs.lib.isDerivation pkgs.${name}` is `true`.
3131+- For each package directory, the `pkgs.${name}` attribute must be defined as `callPackage pkgs/by-name/${shard}/${name}/package.nix args` for some `args`.
3232+- For each package directory, `pkgs.lib.isDerivation pkgs.${name}` must be `true`.
3333+3434+### Ratchet checks
3535+3636+Furthermore, this tool implements certain [ratchet](https://qntm.org/ratchet) checks.
3737+This allows gradually phasing out deprecated patterns without breaking the base branch or having to migrate it all at once.
3838+It works by not allowing new instances of the pattern to be introduced, but allowing already existing instances.
3939+The existing instances are coming from `<BASE_NIXPKGS>`, which is then checked against `<NIXPKGS>` for new instances.
4040+Ratchets should be removed eventually once the pattern is not used anymore.
4141+4242+The current ratchets are:
4343+4444+- New manual definitions of `pkgs.${name}` (e.g. in `pkgs/top-level/all-packages.nix`) with `args = { }`
4545+ (see [nix evaluation checks](#nix-evaluation-checks)) must not be introduced.
47464847## Development
4948···8584 ```
8685 allowing the simulation of package overrides to the real [`pkgs/top-level/all-packages.nix`](../../top-level/all-packages.nix`).
8786 The default is an empty overlay.
8787+8888+- `base` (optional):
8989+ Contains another subdirectory imitating Nixpkgs with potentially any of the above structures.
9090+ This is used for [ratchet checks](#ratchet-checks).
88918992- `expected` (optional):
9093 A file containing the expected standard output.
+47-34
pkgs/test/nixpkgs-check-by-name/src/eval.rs
···11use crate::nixpkgs_problem::NixpkgsProblem;
22+use crate::ratchet;
23use crate::structure;
34use crate::validation::{self, Validation::Success};
44-use crate::Version;
55use std::path::Path;
6677use anyhow::Context;
···3939/// of the form `callPackage <package_file> { ... }`.
4040/// See the `eval.nix` file for how this is achieved on the Nix side
4141pub fn check_values(
4242- version: Version,
4342 nixpkgs_path: &Path,
4443 package_names: Vec<String>,
4545- eval_accessible_paths: Vec<&Path>,
4646-) -> validation::Result<()> {
4444+ eval_accessible_paths: &[&Path],
4545+) -> validation::Result<ratchet::Nixpkgs> {
4746 // Write the list of packages we need to check into a temporary JSON file.
4847 // This can then get read by the Nix evaluation.
4948 let attrs_file = NamedTempFile::new().context("Failed to create a temporary file")?;
···110109 String::from_utf8_lossy(&result.stdout)
111110 ))?;
112111113113- Ok(validation::sequence_(package_names.iter().map(
114114- |package_name| {
115115- let relative_package_file = structure::relative_file_for_package(package_name);
112112+ Ok(
113113+ validation::sequence(package_names.into_iter().map(|package_name| {
114114+ let relative_package_file = structure::relative_file_for_package(&package_name);
116115 let absolute_package_file = nixpkgs_path.join(&relative_package_file);
117116118118- if let Some(attribute_info) = actual_files.get(package_name) {
119119- let valid = match &attribute_info.variant {
120120- AttributeVariant::AutoCalled => true,
117117+ if let Some(attribute_info) = actual_files.get(&package_name) {
118118+ let check_result = if !attribute_info.is_derivation {
119119+ NixpkgsProblem::NonDerivation {
120120+ relative_package_file: relative_package_file.clone(),
121121+ package_name: package_name.clone(),
122122+ }
123123+ .into()
124124+ } else {
125125+ Success(())
126126+ };
127127+128128+ let check_result = check_result.and(match &attribute_info.variant {
129129+ AttributeVariant::AutoCalled => Success(ratchet::Package {
130130+ empty_non_auto_called: ratchet::EmptyNonAutoCalled::Valid,
131131+ }),
121132 AttributeVariant::CallPackage { path, empty_arg } => {
122133 let correct_file = if let Some(call_package_path) = path {
123134 absolute_package_file == *call_package_path
124135 } else {
125136 false
126137 };
127127- // Only check for the argument to be non-empty if the version is V1 or
128128- // higher
129129- let non_empty = if version >= Version::V1 {
130130- !empty_arg
138138+139139+ if correct_file {
140140+ Success(ratchet::Package {
141141+ // Empty arguments for non-auto-called packages are not allowed anymore.
142142+ empty_non_auto_called: if *empty_arg {
143143+ ratchet::EmptyNonAutoCalled::Invalid
144144+ } else {
145145+ ratchet::EmptyNonAutoCalled::Valid
146146+ },
147147+ })
131148 } else {
132132- true
133133- };
134134- correct_file && non_empty
135135- }
136136- AttributeVariant::Other => false,
137137- };
138138-139139- if !valid {
140140- NixpkgsProblem::WrongCallPackage {
141141- relative_package_file: relative_package_file.clone(),
142142- package_name: package_name.clone(),
149149+ NixpkgsProblem::WrongCallPackage {
150150+ relative_package_file: relative_package_file.clone(),
151151+ package_name: package_name.clone(),
152152+ }
153153+ .into()
154154+ }
143155 }
144144- .into()
145145- } else if !attribute_info.is_derivation {
146146- NixpkgsProblem::NonDerivation {
156156+ AttributeVariant::Other => NixpkgsProblem::WrongCallPackage {
147157 relative_package_file: relative_package_file.clone(),
148158 package_name: package_name.clone(),
149159 }
150150- .into()
151151- } else {
152152- Success(())
153153- }
160160+ .into(),
161161+ });
162162+163163+ check_result.map(|value| (package_name.clone(), value))
154164 } else {
155165 NixpkgsProblem::UndefinedAttr {
156166 relative_package_file: relative_package_file.clone(),
···158168 }
159169 .into()
160170 }
161161- },
162162- )))
171171+ }))
172172+ .map(|elems| ratchet::Nixpkgs {
173173+ packages: elems.into_iter().collect(),
174174+ }),
175175+ )
163176}
+89-47
pkgs/test/nixpkgs-check-by-name/src/main.rs
···11mod eval;
22mod nixpkgs_problem;
33+mod ratchet;
34mod references;
45mod structure;
56mod utils;
···910use crate::validation::Validation::Failure;
1011use crate::validation::Validation::Success;
1112use anyhow::Context;
1212-use clap::{Parser, ValueEnum};
1313+use clap::Parser;
1314use colored::Colorize;
1415use std::io;
1516use std::path::{Path, PathBuf};
1617use std::process::ExitCode;
17181819/// Program to check the validity of pkgs/by-name
2020+///
2121+/// This CLI interface may be changed over time if the CI workflow making use of
2222+/// it is adjusted to deal with the change appropriately.
2323+///
2424+/// Exit code:
2525+/// - `0`: If the validation is successful
2626+/// - `1`: If the validation is not successful
2727+/// - `2`: If an unexpected I/O error occurs
2828+///
2929+/// Standard error:
3030+/// - Informative messages
3131+/// - Detected problems if validation is not successful
1932#[derive(Parser, Debug)]
2020-#[command(about)]
3333+#[command(about, verbatim_doc_comment)]
2134pub struct Args {
2222- /// Path to nixpkgs
3535+ /// Path to the main Nixpkgs to check.
3636+ /// For PRs, this should be set to a checkout of the PR branch.
2337 nixpkgs: PathBuf,
2424- /// The version of the checks
2525- /// Increasing this may cause failures for a Nixpkgs that succeeded before
2626- /// TODO: Remove default once Nixpkgs CI passes this argument
2727- #[arg(long, value_enum, default_value_t = Version::V0)]
2828- version: Version,
2929-}
30383131-/// The version of the checks
3232-#[derive(Debug, Clone, PartialEq, PartialOrd, ValueEnum)]
3333-pub enum Version {
3434- /// Initial version
3535- V0,
3636- /// Empty argument check
3737- V1,
3939+ /// Path to the base Nixpkgs to run ratchet checks against.
4040+ /// For PRs, this should be set to a checkout of the PRs base branch.
4141+ /// If not specified, no ratchet checks will be performed.
4242+ /// However, this flag will become required once CI uses it.
4343+ #[arg(long)]
4444+ base: Option<PathBuf>,
3845}
39464047fn main() -> ExitCode {
4148 let args = Args::parse();
4242- match check_nixpkgs(&args.nixpkgs, args.version, vec![], &mut io::stderr()) {
4949+ match process(args.base.as_deref(), &args.nixpkgs, &[], &mut io::stderr()) {
4350 Ok(true) => {
4451 eprintln!("{}", "Validated successfully".green());
4552 ExitCode::SUCCESS
···5562 }
5663}
57645858-/// Checks whether the pkgs/by-name structure in Nixpkgs is valid.
6565+/// Does the actual work. This is the abstraction used both by `main` and the tests.
5966///
6067/// # Arguments
6161-/// - `nixpkgs_path`: The path to the Nixpkgs to check
6868+/// - `base_nixpkgs`: Path to the base Nixpkgs to run ratchet checks against.
6969+/// - `main_nixpkgs`: Path to the main Nixpkgs to check.
6270/// - `eval_accessible_paths`:
6371/// Extra paths that need to be accessible to evaluate Nixpkgs using `restrict-eval`.
6472/// This is used to allow the tests to access the mock-nixpkgs.nix file
···6876/// - `Err(e)` if an I/O-related error `e` occurred.
6977/// - `Ok(false)` if there are problems, all of which will be written to `error_writer`.
7078/// - `Ok(true)` if there are no problems
7171-pub fn check_nixpkgs<W: io::Write>(
7272- nixpkgs_path: &Path,
7373- version: Version,
7474- eval_accessible_paths: Vec<&Path>,
7979+pub fn process<W: io::Write>(
8080+ base_nixpkgs: Option<&Path>,
8181+ main_nixpkgs: &Path,
8282+ eval_accessible_paths: &[&Path],
7583 error_writer: &mut W,
7684) -> anyhow::Result<bool> {
7777- let nixpkgs_path = nixpkgs_path.canonicalize().context(format!(
7878- "Nixpkgs path {} could not be resolved",
7979- nixpkgs_path.display()
8080- ))?;
8181-8282- let check_result = if !nixpkgs_path.join(utils::BASE_SUBPATH).exists() {
8383- eprintln!(
8484- "Given Nixpkgs path does not contain a {} subdirectory, no check necessary.",
8585- utils::BASE_SUBPATH
8686- );
8787- Success(())
8888- } else {
8989- match check_structure(&nixpkgs_path)? {
9090- Failure(errors) => Failure(errors),
9191- Success(package_names) =>
9292- // Only if we could successfully parse the structure, we do the evaluation checks
9393- {
9494- eval::check_values(version, &nixpkgs_path, package_names, eval_accessible_paths)?
9595- }
8585+ // Check the main Nixpkgs first
8686+ let main_result = check_nixpkgs(main_nixpkgs, eval_accessible_paths, error_writer)?;
8787+ let check_result = main_result.result_map(|nixpkgs_version| {
8888+ // If the main Nixpkgs doesn't have any problems, run the ratchet checks against the base
8989+ // Nixpkgs
9090+ if let Some(base) = base_nixpkgs {
9191+ check_nixpkgs(base, eval_accessible_paths, error_writer)?.result_map(
9292+ |base_nixpkgs_version| {
9393+ Ok(ratchet::Nixpkgs::compare(
9494+ Some(base_nixpkgs_version),
9595+ nixpkgs_version,
9696+ ))
9797+ },
9898+ )
9999+ } else {
100100+ Ok(ratchet::Nixpkgs::compare(None, nixpkgs_version))
96101 }
9797- };
102102+ })?;
9810399104 match check_result {
100105 Failure(errors) => {
···103108 }
104109 Ok(false)
105110 }
106106- Success(_) => Ok(true),
111111+ Success(()) => Ok(true),
107112 }
108113}
109114115115+/// Checks whether the pkgs/by-name structure in Nixpkgs is valid.
116116+///
117117+/// This does not include ratchet checks, see ../README.md#ratchet-checks
118118+/// Instead a `ratchet::Nixpkgs` value is returned, whose `compare` method allows performing the
119119+/// ratchet check against another result.
120120+pub fn check_nixpkgs<W: io::Write>(
121121+ nixpkgs_path: &Path,
122122+ eval_accessible_paths: &[&Path],
123123+ error_writer: &mut W,
124124+) -> validation::Result<ratchet::Nixpkgs> {
125125+ Ok({
126126+ let nixpkgs_path = nixpkgs_path.canonicalize().context(format!(
127127+ "Nixpkgs path {} could not be resolved",
128128+ nixpkgs_path.display()
129129+ ))?;
130130+131131+ if !nixpkgs_path.join(utils::BASE_SUBPATH).exists() {
132132+ writeln!(
133133+ error_writer,
134134+ "Given Nixpkgs path does not contain a {} subdirectory, no check necessary.",
135135+ utils::BASE_SUBPATH
136136+ )?;
137137+ Success(ratchet::Nixpkgs::default())
138138+ } else {
139139+ check_structure(&nixpkgs_path)?.result_map(|package_names|
140140+ // Only if we could successfully parse the structure, we do the evaluation checks
141141+ eval::check_values(&nixpkgs_path, package_names, eval_accessible_paths))?
142142+ }
143143+ })
144144+}
145145+110146#[cfg(test)]
111147mod tests {
112112- use crate::check_nixpkgs;
148148+ use crate::process;
113149 use crate::utils;
114114- use crate::Version;
115150 use anyhow::Context;
116151 use std::fs;
117152 use std::path::Path;
···197232 fn test_nixpkgs(name: &str, path: &Path, expected_errors: &str) -> anyhow::Result<()> {
198233 let extra_nix_path = Path::new("tests/mock-nixpkgs.nix");
199234235235+ let base_path = path.join("base");
236236+ let base_nixpkgs = if base_path.exists() {
237237+ Some(base_path.as_path())
238238+ } else {
239239+ None
240240+ };
241241+200242 // We don't want coloring to mess up the tests
201243 let writer = temp_env::with_var("NO_COLOR", Some("1"), || -> anyhow::Result<_> {
202244 let mut writer = vec![];
203203- check_nixpkgs(&path, Version::V1, vec![&extra_nix_path], &mut writer)
245245+ process(base_nixpkgs, &path, &[&extra_nix_path], &mut writer)
204246 .context(format!("Failed test case {name}"))?;
205247 Ok(writer)
206248 })?;
+85
pkgs/test/nixpkgs-check-by-name/src/ratchet.rs
···11+//! This module implements the ratchet checks, see ../README.md#ratchet-checks
22+//!
33+//! Each type has a `compare` method that validates the ratchet checks for that item.
44+55+use crate::nixpkgs_problem::NixpkgsProblem;
66+use crate::structure;
77+use crate::validation::{self, Validation, Validation::Success};
88+use std::collections::HashMap;
99+1010+/// The ratchet value for the entirety of Nixpkgs.
1111+#[derive(Default)]
1212+pub struct Nixpkgs {
1313+ /// The ratchet values for each package in `pkgs/by-name`
1414+ pub packages: HashMap<String, Package>,
1515+}
1616+1717+impl Nixpkgs {
1818+ /// Validates the ratchet checks for Nixpkgs
1919+ pub fn compare(optional_from: Option<Self>, to: Self) -> Validation<()> {
2020+ validation::sequence_(
2121+ // We only loop over the current attributes,
2222+ // we don't need to check ones that were removed
2323+ to.packages.into_iter().map(|(name, attr_to)| {
2424+ let attr_from = if let Some(from) = &optional_from {
2525+ from.packages.get(&name)
2626+ } else {
2727+ // This pretends that if there's no base version to compare against, all
2828+ // attributes existed without conforming to the new strictness check for
2929+ // backwards compatibility.
3030+ // TODO: Remove this case. This is only needed because the `--base`
3131+ // argument is still optional, which doesn't need to be once CI is updated
3232+ // to pass it.
3333+ Some(&Package {
3434+ empty_non_auto_called: EmptyNonAutoCalled::Invalid,
3535+ })
3636+ };
3737+ Package::compare(&name, attr_from, &attr_to)
3838+ }),
3939+ )
4040+ }
4141+}
4242+4343+/// The ratchet value for a single package in `pkgs/by-name`
4444+pub struct Package {
4545+ /// The ratchet value for the check for non-auto-called empty arguments
4646+ pub empty_non_auto_called: EmptyNonAutoCalled,
4747+}
4848+4949+impl Package {
5050+ /// Validates the ratchet checks for a single package defined in `pkgs/by-name`
5151+ pub fn compare(name: &str, optional_from: Option<&Self>, to: &Self) -> Validation<()> {
5252+ EmptyNonAutoCalled::compare(
5353+ name,
5454+ optional_from.map(|x| &x.empty_non_auto_called),
5555+ &to.empty_non_auto_called,
5656+ )
5757+ }
5858+}
5959+6060+/// The ratchet value of a single package in `pkgs/by-name`
6161+/// for the non-auto-called empty argument check of a single.
6262+///
6363+/// This checks that packages defined in `pkgs/by-name` cannot be overridden
6464+/// with an empty second argument like `callPackage ... { }`.
6565+#[derive(PartialEq, PartialOrd)]
6666+pub enum EmptyNonAutoCalled {
6767+ Invalid,
6868+ Valid,
6969+}
7070+7171+impl EmptyNonAutoCalled {
7272+ /// Validates the non-auto-called empty argument ratchet check for a single package defined in `pkgs/by-name`
7373+ fn compare(name: &str, optional_from: Option<&Self>, to: &Self) -> Validation<()> {
7474+ let from = optional_from.unwrap_or(&Self::Valid);
7575+ if to >= from {
7676+ Success(())
7777+ } else {
7878+ NixpkgsProblem::WrongCallPackage {
7979+ relative_package_file: structure::relative_file_for_package(name),
8080+ package_name: name.to_owned(),
8181+ }
8282+ .into()
8383+ }
8484+ }
8585+}
+9
pkgs/test/nixpkgs-check-by-name/src/validation.rs
···5858 Success(value) => Success(f(value)),
5959 }
6060 }
6161+6262+ /// Map a `Validation<A>` to a `Result<B>` by applying a function `A -> Result<B>`
6363+ /// only if there is a `Success` value
6464+ pub fn result_map<B>(self, f: impl FnOnce(A) -> Result<B>) -> Result<B> {
6565+ match self {
6666+ Failure(err) => Ok(Failure(err)),
6767+ Success(value) => f(value),
6868+ }
6969+ }
6170}
62716372impl Validation<()> {
···11+# This expression will, as efficiently as possible, dump a
22+# *superset* of all attrpaths of derivations which might be
33+# part of a release on *any* platform.
44+#
55+# Both this expression and what ofborg uses (release-outpaths.nix)
66+# are essentially single-threaded (under the current cppnix
77+# implementation).
88+#
99+# This expression runs much, much, much faster and uses much, much
1010+# less memory than the ofborg script by skipping the
1111+# platform-relevance checks. The ofborg outpaths.nix script takes
1212+# half an hour on a 3ghz core and peaks at 60gbytes of memory; this
1313+# expression runs on the same machine in 44 seconds with peak memory
1414+# usage of 5gbytes.
1515+#
1616+# Once you have the list of attrnames you can split it up into
1717+# $NUM_CORES batches and run the platform checks separately for each
1818+# batch, in parallel.
1919+#
2020+# To dump the attrnames:
2121+#
2222+# nix-instantiate --eval --strict --json pkgs/top-level/release-attrpaths-superset.nix -A names
2323+#
2424+{ lib ? import (path + "/lib")
2525+, trace ? false
2626+, enableWarnings ? true
2727+, checkMeta ? true
2828+, path ? ./../..
2929+}:
3030+let
3131+3232+ # No release package attrpath may have any of these attrnames as
3333+ # its initial component.
3434+ #
3535+ # If you can find a way to remove any of these entries without
3636+ # causing CI to fail, please do so.
3737+ #
3838+ excluded-toplevel-attrs = {
3939+ # spliced packagesets
4040+ __splicedPackages = true;
4141+ pkgsBuildBuild = true;
4242+ pkgsBuildHost = true;
4343+ pkgsBuildTarget = true;
4444+ pkgsHostHost = true;
4545+ pkgsHostTarget = true;
4646+ pkgsTargetTarget = true;
4747+ buildPackages = true;
4848+ targetPackages = true;
4949+5050+ # cross packagesets
5151+ pkgsLLVM = true;
5252+ pkgsMusl = true;
5353+ pkgsStatic = true;
5454+ pkgsCross = true;
5555+ pkgsi686Linux = true;
5656+ };
5757+5858+ # No release package attrname may have any of these at a component
5959+ # anywhere in its attrpath. These are the names of gigantic
6060+ # top-level attrsets that have leaked into so many sub-packagesets
6161+ # that it's easier to simply exclude them entirely.
6262+ #
6363+ # If you can find a way to remove any of these entries without
6464+ # causing CI to fail, please do so.
6565+ #
6666+ excluded-attrnames-at-any-depth = {
6767+ lib = true;
6868+ override = true;
6969+ __functor = true;
7070+ __functionArgs = true;
7171+ newScope = true;
7272+ scope = true;
7373+ pkgs = true;
7474+7575+ buildHaskellPackages = true;
7676+ buildPackages = true;
7777+ generateOptparseApplicativeCompletions = true;
7878+7979+ callPackage = true;
8080+ mkDerivation = true;
8181+ overrideDerivation = true;
8282+ overrideScope = true;
8383+ overrideScope' = true;
8484+8585+ # Special case: lib/types.nix leaks into a lot of nixos-related
8686+ # derivations, and does not eval deeply.
8787+ type = true;
8888+ };
8989+9090+ # __attrsFailEvaluation is a temporary workaround to get top-level
9191+ # eval to succeed (under builtins.tryEval) for the entire
9292+ # packageset, without deep invasve changes into individual
9393+ # packages.
9494+ #
9595+ # Now that CI has been added, ensuring that top-level eval will
9696+ # not be broken by any new commits, you should not add any new
9797+ # occurrences of __attrsFailEvaluation, and should remove them
9898+ # wherever you are able to (doing so will likely require deep
9999+ # adjustments within packages). Once all of the uses of
100100+ # __attrsFailEvaluation are removed, it will be deleted from the
101101+ # routine below. In the meantime,
102102+ #
103103+ # The intended semantics are that an attrpath rooted at pkgs is
104104+ # part of the (unfiltered) release jobset iff all of the following
105105+ # are true:
106106+ #
107107+ # 1. The first component of the attrpath is not in
108108+ # `excluded-toplevel-attrs`
109109+ #
110110+ # 2. No attrname in the attrpath belongs to the list of forbidden
111111+ # attrnames `excluded-attrnames-at-any-depth`
112112+ #
113113+ # 3. The attrpath leads to a value for which lib.isDerivation is true
114114+ #
115115+ # 4. No proper prefix of the attrpath has __attrsFailEvaluation=true
116116+ #
117117+ # 5. Any proper prefix of the attrpath at which lib.isDerivation
118118+ # is true also has __recurseIntoDerivationForReleaseJobs=true.
119119+ #
120120+ # The last condition is unfortunately necessary because there are
121121+ # Hydra release jobnames which have proper prefixes which are
122122+ # attrnames of derivations (!). We should probably restructure
123123+ # the job tree so that this is not the case.
124124+ #
125125+ justAttrNames = path: value:
126126+ let
127127+ attempt =
128128+ if lib.isDerivation value &&
129129+ # in some places we have *derivations* with jobsets as subattributes, ugh
130130+ !(value.__recurseIntoDerivationForReleaseJobs or false) then
131131+ [ path ]
132132+133133+ # Even wackier case: we have meta.broken==true jobs with
134134+ # !meta.broken jobs as subattributes with license=unfree, and
135135+ # check-meta.nix won't throw an "unfree" failure because the
136136+ # enclosing derivation is marked broken. Yeah. Bonkers.
137137+ # We should just forbid jobsets enclosed by derivations.
138138+ else if lib.isDerivation value &&
139139+ !value.meta.available then []
140140+141141+ else if !(lib.isAttrs value) then []
142142+ else if (value.__attrsFailEvaluation or false) then []
143143+ else lib.pipe value [
144144+ (builtins.mapAttrs
145145+ (name: value:
146146+ if excluded-attrnames-at-any-depth.${name} or false then [] else
147147+ (justAttrNames (path ++ [name]) value)))
148148+ builtins.attrValues
149149+ builtins.concatLists
150150+ ];
151151+152152+ seq = builtins.deepSeq attempt attempt;
153153+ tried = builtins.tryEval seq;
154154+155155+ result =
156156+ if tried.success
157157+ then tried.value
158158+ else if enableWarnings && path != [ "AAAAAASomeThingsFailToEvaluate" ]
159159+ then lib.warn "tryEval failed at: ${lib.concatStringsSep "." path}" []
160160+ else [];
161161+ in
162162+ if !trace
163163+ then result
164164+ else lib.trace "** ${lib.concatStringsSep "." path}" result;
165165+166166+ unfiltered = import ./release-outpaths.nix {
167167+ inherit checkMeta;
168168+ attrNamesOnly = true;
169169+ inherit path;
170170+ };
171171+172172+ filtered = lib.pipe unfiltered [
173173+ (pkgs: builtins.removeAttrs pkgs (builtins.attrNames excluded-toplevel-attrs))
174174+ ];
175175+176176+ paths =
177177+ [
178178+ # I am not entirely sure why these three packages end up in
179179+ # the Hydra jobset. But they do, and they don't meet the
180180+ # criteria above, so at the moment they are special-cased.
181181+ [ "pkgsLLVM" "stdenv" ]
182182+ [ "pkgsStatic" "stdenv" ]
183183+ [ "pkgsMusl" "stdenv" ]
184184+ ] ++ justAttrNames [] filtered;
185185+186186+ names =
187187+ map (path: (lib.concatStringsSep "." path)) paths;
188188+189189+in
190190+{
191191+ inherit paths names;
192192+}
+87
pkgs/top-level/release-outpaths.nix
···11+#!/usr/bin/env nix-shell
22+# When using as a callable script, passing `--argstr path some/path` overrides $PWD.
33+#!nix-shell -p nix -i "nix-env -qaP --no-name --out-path --arg checkMeta true -f pkgs/top-level/release-outpaths.nix"
44+55+# Vendored from:
66+# https://raw.githubusercontent.com/NixOS/ofborg/74f38efa7ef6f0e8e71ec3bfc675ae4fb57d7491/ofborg/src/outpaths.nix
77+{ checkMeta
88+, includeBroken ? true # set this to false to exclude meta.broken packages from the output
99+, path ? ./../..
1010+1111+# used by pkgs/top-level/release-attrnames-superset.nix
1212+, attrNamesOnly ? false
1313+1414+# Set this to `null` to build for builtins.currentSystem only
1515+, systems ? [
1616+ "aarch64-linux"
1717+ "aarch64-darwin"
1818+ #"i686-linux" # !!!
1919+ "x86_64-linux"
2020+ "x86_64-darwin"
2121+ ]
2222+}:
2323+let
2424+ lib = import (path + "/lib");
2525+ hydraJobs = import (path + "/pkgs/top-level/release.nix")
2626+ # Compromise: accuracy vs. resources needed for evaluation.
2727+ {
2828+ inherit attrNamesOnly;
2929+ supportedSystems =
3030+ if systems == null
3131+ then [ builtins.currentSystem ]
3232+ else systems;
3333+ nixpkgsArgs = {
3434+ config = {
3535+ allowAliases = false;
3636+ allowBroken = includeBroken;
3737+ allowUnfree = false;
3838+ allowInsecurePredicate = x: true;
3939+ checkMeta = checkMeta;
4040+4141+ handleEvalIssue = reason: errormsg:
4242+ let
4343+ fatalErrors = [
4444+ "unknown-meta"
4545+ "broken-outputs"
4646+ ];
4747+ in
4848+ if builtins.elem reason fatalErrors
4949+ then abort errormsg
5050+ # hydra does not build unfree packages, so tons of them are broken yet not marked meta.broken.
5151+ else if !includeBroken && builtins.elem reason [ "broken" "unfree" ]
5252+ then throw "broken"
5353+ else if builtins.elem reason [ "unsupported" ]
5454+ then throw "unsupported"
5555+ else true;
5656+5757+ inHydra = true;
5858+ };
5959+ };
6060+ };
6161+ recurseIntoAttrs = attrs: attrs // { recurseForDerivations = true; };
6262+6363+ # hydraJobs leaves recurseForDerivations as empty attrmaps;
6464+ # that would break nix-env and we also need to recurse everywhere.
6565+ tweak = lib.mapAttrs
6666+ (name: val:
6767+ if name == "recurseForDerivations" then true
6868+ else if lib.isAttrs val && val.type or null != "derivation"
6969+ then recurseIntoAttrs (tweak val)
7070+ else val
7171+ );
7272+7373+ # Some of these contain explicit references to platform(s) we want to avoid;
7474+ # some even (transitively) depend on ~/.nixpkgs/config.nix (!)
7575+ blacklist = [
7676+ "tarball"
7777+ "metrics"
7878+ "manual"
7979+ "darwin-tested"
8080+ "unstable"
8181+ "stdenvBootstrapTools"
8282+ "moduleSystem"
8383+ "lib-tests" # these just confuse the output
8484+ ];
8585+8686+in
8787+tweak (builtins.removeAttrs hydraJobs blacklist)
+1-1
pkgs/top-level/release-python.nix
···2929 let res = builtins.tryEval (
3030 if isDerivation value then
3131 value.meta.isBuildPythonPackage or []
3232- else if value.recurseForDerivations or false || value.recurseForRelease or false then
3232+ else if value.recurseForDerivations or false || value.recurseForRelease or false || value.__recurseIntoDerivationForReleaseJobs or false then
3333 packagePython value
3434 else
3535 []);
+27-5
pkgs/top-level/release.nix
···3737 "openssl-1.1.1w"
3838 ];
3939 }; }
4040+4141+ # This flag, if set to true, will inhibit the use of `mapTestOn`
4242+ # and `release-lib.packagePlatforms`. Generally, it causes the
4343+ # resulting tree of attributes to *not* have a ".${system}"
4444+ # suffixed upon every job name like Hydra expects.
4545+ #
4646+ # This flag exists mainly for use by
4747+ # pkgs/top-level/release-attrnames-superset.nix; see that file for
4848+ # full details. The exact behavior of this flag may change; it
4949+ # should be considered an internal implementation detail of
5050+ # pkgs/top-level/.
5151+ #
5252+, attrNamesOnly ? false
4053}:
41544242-with import ./release-lib.nix { inherit supportedSystems scrubJobs nixpkgsArgs; };
5555+let release-lib = import ./release-lib.nix { inherit supportedSystems scrubJobs nixpkgsArgs; }; in
5656+with release-lib;
43574458let
4559···239253 # 'nonPackageAttrs' and jobs pulled in from 'pkgs'.
240254 # Conflicts usually cause silent job drops like in
241255 # https://github.com/NixOS/nixpkgs/pull/182058
242242- jobs = lib.attrsets.unionOfDisjoint
243243- nonPackageJobs
244244- (mapTestOn ((packagePlatforms pkgs) // {
256256+ jobs = let
257257+ packagePlatforms = if attrNamesOnly then lib.id else release-lib.packagePlatforms;
258258+ packageJobs = {
245259 haskell.compiler = packagePlatforms pkgs.haskell.compiler;
246260 haskellPackages = packagePlatforms pkgs.haskellPackages;
247261 # Build selected packages (HLS) for multiple Haskell compilers to rebuild
···275289 darwin = packagePlatforms pkgs.darwin // {
276290 xcode = {};
277291 };
278278- } ));
292292+ };
293293+ mapTestOn-packages =
294294+ if attrNamesOnly
295295+ then pkgs // packageJobs
296296+ else mapTestOn ((packagePlatforms pkgs) // packageJobs);
297297+ in
298298+ lib.attrsets.unionOfDisjoint
299299+ nonPackageJobs
300300+ mapTestOn-packages;
279301280302in jobs