about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLuis Hebendanz <luis.nixos@gmail.com>2020-11-30 16:30:46 +0100
committerJörg Thalheim <joerg@thalheim.io>2020-12-02 09:40:53 +0100
commit397597f731de70130ee3949a22c99c6236c16c06 (patch)
tree280cd77df0501d0553679ea4f6457278e5cdb3f2
parenteedee46f2fff823147d1b9aaa767397737bdea11 (diff)
Added fetchfirefoxaddon
-rw-r--r--pkgs/applications/networking/browsers/firefox/wrapper.nix41
-rw-r--r--pkgs/build-support/fetchfirefoxaddon/default.nix38
-rw-r--r--pkgs/top-level/all-packages.nix2
3 files changed, 49 insertions, 32 deletions
diff --git a/pkgs/applications/networking/browsers/firefox/wrapper.nix b/pkgs/applications/networking/browsers/firefox/wrapper.nix
index 5f4ce80bd7ac0..a95e871b30692 100644
--- a/pkgs/applications/networking/browsers/firefox/wrapper.nix
+++ b/pkgs/applications/networking/browsers/firefox/wrapper.nix
@@ -35,9 +35,13 @@ let
     , cfg ? config.${browserName} or {}
 
     ## Following options are needed for extra prefs & policies
+    # For more information about anti tracking (german website)
+    # vist https://wiki.kairaven.de/open/app/firefo
     , extraPrefs ? ""
+    # For more information about policies visit
+    # https://github.com/mozilla/policy-templates#enterprisepoliciesenabled
     , extraPolicies ? {}
-    , firefoxLibName ? "firefox"
+    , firefoxLibName ? "firefox" # Important for tor package or the like
     , extraExtensions ? [ ]
     }:
 
@@ -98,37 +102,10 @@ let
         (builtins.toJSON enterprisePolicies);
 
       extensions = builtins.map (a:
-        if ! (builtins.hasAttr "name" a) || ! (builtins.isString a.name) then
-          throw "Firefox addon needs a name attribute"
-        else if ! (builtins.hasAttr "url" a) || ! (builtins.isString a.url) then
-          throw "Addon ${a.pname} needs an url"
-        else if ! (builtins.hasAttr "sha256" a) || ! (builtins.isString a.sha256) then
-          throw "Addon ${a.pname} needs an sha256 checksum"
-        else stdenv.mkDerivation rec {
-          pname = a.name;
-          version = "1.0";
-          src = fetchurl {
-            url = a.url;
-            sha256 = a.sha256;
-          };
-
-          phases = [ "buildPhase" ];
-
-          extid = "${a.sha256}@${a.name}";
-
-          buildInputs = [ zip unzip jq ];
-
-          buildPhase = ''
-            UUID="${extid}"
-            mkdir -p "$out/$UUID"
-            unzip -q ${src} -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" *
-            rm -r "$out/$UUID"
-            '';
-              }
+        if ! (builtins.hasAttr "extid" a) then
+        throw "extraExtensions has an invalid entry. Missing extid attribute. Please use fetchfirefoxaddon"
+        else
+        a
       ) extraExtensions;
 
       enterprisePolicies =
diff --git a/pkgs/build-support/fetchfirefoxaddon/default.nix b/pkgs/build-support/fetchfirefoxaddon/default.nix
new file mode 100644
index 0000000000000..b199a46e7934d
--- /dev/null
+++ b/pkgs/build-support/fetchfirefoxaddon/default.nix
@@ -0,0 +1,38 @@
+{stdenv, lib, coreutils, unzip, jq, zip, fetchurl,writeScript,  ...}:
+let
+
+in
+  { name,
+  url,
+  sha256,
+}:
+
+stdenv.mkDerivation rec {
+
+  inherit name;
+  extid = "${sha256}@${name}";
+  passthru = {
+    exitd=extid;
+  };
+
+  builder = writeScript "xpibuilder" ''
+    source $stdenv/setup
+
+    header "firefox addon $name into $out"
+
+    UUID="${extid}"
+    mkdir -p "$out/$UUID"
+    unzip -q ${src} -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" *
+    rm -r "$out/$UUID"
+  '';
+  src = fetchurl {
+    url = url;
+    sha256 = sha256;
+  };
+  nativeBuildInputs = [ coreutils unzip zip jq  ];
+}
+
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index ac6bd3343a561..d0c6cb7ecd600 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -365,6 +365,8 @@ in
 
   fetchhg = callPackage ../build-support/fetchhg { };
 
+  fetchfirefoxaddon = callPackage ../build-support/fetchfirefoxaddon {};
+
   # `fetchurl' downloads a file from the network.
   fetchurl = if stdenv.buildPlatform != stdenv.hostPlatform
    then buildPackages.fetchurl # No need to do special overrides twice,