{ stdenv , fetchurl , jq , strip-nondeterminism , unzip , writeScript , zip }: { name , url ? null , sha1 ? "" , sha256 ? "" , sha512 ? "" , fixedExtid ? null , hash ? "" , src ? "" }: let extid = if fixedExtid == null then "nixos@${name}" else fixedExtid; source = if url == null then src else fetchurl { url = url; inherit sha1 sha256 sha512 hash; }; in stdenv.mkDerivation { inherit name; passthru = { inherit extid; }; builder = writeScript "xpibuilder" '' source $stdenv/setup echo "firefox addon $name into $out" UUID="${extid}" mkdir -p "$out/$UUID" unzip -q ${source} -d "$out/$UUID" NEW_MANIFEST=$(jq '. + {"applications": { "gecko": { "id": "${extid}" }}, "browser_specific_settings":{"gecko":{"id": "${extid}"}}}' "$out/$UUID/manifest.json") echo "$NEW_MANIFEST" > "$out/$UUID/manifest.json" cd "$out/$UUID" zip -r -q -FS "$out/$UUID.xpi" * strip-nondeterminism "$out/$UUID.xpi" rm -r "$out/$UUID" ''; nativeBuildInputs = [ jq strip-nondeterminism unzip zip ]; }