c317dcec0d
This change makes sure that each Nextcloud plugin installed provides a `meta` section with proper license information. Unfortunately, the metadata from the appstore is useless for this purpose since it doesn't differentiate between e.g. AGPL 3.x and AGPL 3.x or any later version. In fact, this isn't consistent between their software, e.g. `bookmarks` has `agpl3Plus` according to the files' headers[1] whereas `twofactor_nextcloud_notification` is AGPL 3 only[2]. I don't think there's any trivial and reasonable way to retrieve this information programatically, so I decided to change the format of `nextcloud-apps.json`[3] to also contain the license in the form of the license attribute we have in `lib/licenses.nix`, i.e. GNU AGPL 3 or later is `agpl3Plus`. I retrieved the information using the following approach: * go to the source code of $app at the revision we currently have packaged * check for a license identifier (does it specify the license only or the license "or any later version")? * first in `src/main.js` because most apps from Nextcloud itself used actual spdx identifiers in the frontend's source-code. * then in `lib/AppInfo/Application.php` which each Nextcloud app has. License changes should be updated accordingly when updating the apps. As with any other package in nixpkgs as well, this currently needs to be done manually (or as part of the review process)[4]. Also, I decided to change the `name` of the `applyPatches` derivation from `source-patched` to `nextcloud-app-${appName}-${appVersion}`. When deploying a lot of apps (and probably displaying the diff using `nix store diff-closures` on deploy), the current output isn't very helpful. This is purely optional because I didn't want to break the interface of `fetchNextcloudApp` again. [1] https://github.com/nextcloud/bookmarks/blob/v13.1.0/lib/AppInfo/Application.php#L6 [2] https://github.com/nextcloud/twofactor_nextcloud_notification/blob/v3.7.0/lib/AppInfo/Application.php [3] This isn't really well-defined since it's preprocessed with `jq(1)` before passing the apps to nc4nix. [4] Though notable license changes (e.g. agpl -> gpl) would also pop up in the diff of <nextcloudversion>.json, so this is pretty easy to catch. |
||
---|---|---|
.. | ||
25.json | ||
26.json | ||
27.json | ||
default.nix | ||
generate.sh | ||
nc-versions.nix | ||
nextcloud-apps.json | ||
README.md |
= Adding apps =
To extend the nextcloudPackages set, add a new line to the corresponding json file with the id of the app:
nextcloud-apps.json
for apps
The app must be available in the official
Nextcloud app store.
https://apps.nextcloud.com. The id corresponds to the last part in the app url,
for example breezedark
for the app with the url
https://apps.nextcloud.com/apps/breezedark
.
To regenerate the nixpkgs nextcloudPackages set, run:
./generate.sh
After that you can commit and submit the changes.
= Usage with the Nextcloud module =
The apps will be available in the namespace nextcloud25Packages.apps
.
Using it together with the Nextcloud module could look like this:
services.nextcloud = {
enable = true;
package = pkgs.nextcloud25;
hostName = "localhost";
config.adminpassFile = "${pkgs.writeText "adminpass" "hunter2"}";
extraApps = with pkgs.nextcloud25Packages.apps; [
mail
calendar
contacts
];
extraAppsEnable = true;
};
Adapt the version number in the Nextcloud package and nextcloudPackages set according to the Nextcloud version you wish to use. There are several supported stable Nextcloud versions available in the repository.