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}