firefox-extensions: make the patching logic even more pluggable

This commit is contained in:
2023-07-17 20:47:55 +00:00
parent 0175adbf27
commit 2b9de91540

View File

@@ -9,34 +9,41 @@
}:
let
# given an addon, repackage it without some `perm`ission
removePermission = perm: addon:
removePermission = perm: addon: mkPatchedAddon addon {
patchPhase = ''
NEW_MANIFEST=$(jq 'del(.permissions[] | select(. == "${perm}"))' "$out/$UUID/manifest.json")
echo "$NEW_MANIFEST" > "$out/$UUID/manifest.json"
'';
nativeBuildInputs = [ jq ];
};
mkPatchedAddon = addon: args:
let
extid = addon.passthru.extid;
in stdenv.mkDerivation {
# merge our requirements into the derivation args
args' = args // {
passthru = {
inherit extid;
original = addon;
} // (args.passthru or {});
nativeBuildInputs = [
strip-nondeterminism
unzip
zip
] ++ (args.nativeBuildInputs or []);
};
in stdenv.mkDerivation ({
# heavily borrows from <repo:nixos/nixpkgs:pkgs/build-support/fetchfirefoxaddon/default.nix>
inherit (addon) name;
passthru = {
inherit extid;
original = addon;
};
unpackPhase = ''
UUID="${extid}"
echo "firefox addon $name into $out/$UUID.xpi, remove ${perm}"
echo "patching firefox addon $name into $out/$UUID.xpi"
# extract the XPI
mkdir -p "$out/$UUID"
unzip -q "${addon}/$UUID.xpi" -d "$out/$UUID"
'';
patchPhase = ''
runHook prePatch
NEW_MANIFEST=$(jq 'del(.permissions[] | select(. == "${perm}"))' "$out/$UUID/manifest.json")
echo "$NEW_MANIFEST" > "$out/$UUID/manifest.json"
runHook postPatch
'';
installPhase = ''
runHook preInstall
@@ -48,14 +55,7 @@ let
runHook postInstall
'';
nativeBuildInputs = [
jq
strip-nondeterminism
unzip
zip
];
};
} // args');
# given an addon, add a `passthru.withoutPermission` method for further configuration
mkConfigurable = pkg: pkg.overrideAttrs (final: upstream: {
passthru = (upstream.passthru or {}) // {