1{
2 stdenv,
3 fetchurl,
4 jq,
5 strip-nondeterminism,
6 unzip,
7 writeScript,
8 zip,
9}:
10
11{
12 name,
13 url ? null,
14 sha1 ? "",
15 sha256 ? "",
16 sha512 ? "",
17 fixedExtid ? null,
18 hash ? "",
19 src ? "",
20}:
21
22let
23 extid = if fixedExtid == null then "nixos@${name}" else fixedExtid;
24 source =
25 if url == null then
26 src
27 else
28 fetchurl {
29 url = url;
30 inherit
31 sha1
32 sha256
33 sha512
34 hash
35 ;
36 };
37in
38stdenv.mkDerivation {
39 inherit name;
40
41 passthru = {
42 inherit extid;
43 };
44
45 builder = writeScript "xpibuilder" ''
46 echo "firefox addon $name into $out"
47
48 UUID="${extid}"
49 mkdir -p "$out/$UUID"
50 unzip -q ${source} -d "$out/$UUID"
51 NEW_MANIFEST=$(jq '. + {"applications": { "gecko": { "id": "${extid}" }}, "browser_specific_settings":{"gecko":{"id": "${extid}"}}}' "$out/$UUID/manifest.json")
52 echo "$NEW_MANIFEST" > "$out/$UUID/manifest.json"
53 cd "$out/$UUID"
54 zip -r -q -FS "$out/$UUID.xpi" *
55 strip-nondeterminism "$out/$UUID.xpi"
56 rm -r "$out/$UUID"
57 '';
58
59 nativeBuildInputs = [
60 jq
61 strip-nondeterminism
62 unzip
63 zip
64 ];
65}