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