nixos/manual: Must disable secure boot on UEFI installs (#364406)
[NixPkgs.git] / pkgs / desktops / gnome / extensions / buildGnomeExtension.nix
blob6826e6116e615820004ecc938814c0c1390a4cdb
1 { pkgs, lib, stdenv, fetchzip, nixosTests }:
3 let
5   buildGnomeExtension = {
6     # Every gnome extension has a UUID. It's the name of the extension folder once unpacked
7     # and can always be found in the metadata.json of every extension.
8     uuid,
9     name,
10     pname,
11     description,
12     # extensions.gnome.org extension URL
13     link,
14     # Extension version numbers are integers
15     version,
16     sha256,
17     # Hex-encoded string of JSON bytes
18     metadata,
19   }:
21   stdenv.mkDerivation {
22     pname = "gnome-shell-extension-${pname}";
23     version = builtins.toString version;
24     src = fetchzip {
25       url = "https://extensions.gnome.org/extension-data/${
26           builtins.replaceStrings [ "@" ] [ "" ] uuid
27         }.v${builtins.toString version}.shell-extension.zip";
28       inherit sha256;
29       stripRoot = false;
30       # The download URL may change content over time. This is because the
31       # metadata.json is automatically generated, and parts of it can be changed
32       # without making a new release. We simply substitute the possibly changed fields
33       # with their content from when we last updated, and thus get a deterministic output
34       # hash.
35       postFetch = ''
36         echo "${metadata}" | base64 --decode > $out/metadata.json
37       '';
38     };
39     nativeBuildInputs = with pkgs; [ buildPackages.glib ];
40     buildPhase = ''
41       runHook preBuild
42       if [ -d schemas ]; then
43         glib-compile-schemas --strict schemas
44       fi
45       runHook postBuild
46     '';
47     installPhase = ''
48       runHook preInstall
49       mkdir -p $out/share/gnome-shell/extensions/
50       cp -r -T . $out/share/gnome-shell/extensions/${uuid}
51       runHook postInstall
52     '';
53     meta = {
54       description = builtins.head (lib.splitString "\n" description);
55       longDescription = description;
56       homepage = link;
57       license = lib.licenses.gpl2Plus; # https://gjs.guide/extensions/review-guidelines/review-guidelines.html#licensing
58       platforms = lib.platforms.linux;
59       maintainers = [ lib.maintainers.honnip ];
60     };
61     passthru = {
62       extensionPortalSlug = pname;
63       # Store the extension's UUID, because we might need it at some places
64       extensionUuid = uuid;
66       tests = {
67         gnome-extensions = nixosTests.gnome-extensions;
68       };
69     };
70   };
72   lib.makeOverridable buildGnomeExtension