summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuis Hebendanz <luis.nixos@gmail.com>2020-12-15 22:02:34 +0100
committerLuis Hebendanz <luis.nixos@gmail.com>2020-12-15 22:02:34 +0100
commit1c8c134972b64aa31ceddc2b5054ff664e396910 (patch)
treed91594d575c8e8808d01de49dd201939eb03e8df
parent4d902a7013872c790d52e522e1d027fd3e13b9bf (diff)
firefox: wrapper updating an addon perserves addon settings
-rw-r--r--doc/builders/packages/firefox.section.md4
-rw-r--r--pkgs/applications/networking/browsers/firefox/wrapper.nix35
-rw-r--r--pkgs/build-support/fetchfirefoxaddon/default.nix9
3 files changed, 29 insertions, 19 deletions
diff --git a/doc/builders/packages/firefox.section.md b/doc/builders/packages/firefox.section.md
index 28fa3f0dbd7c..acf31e188c3e 100644
--- a/doc/builders/packages/firefox.section.md
+++ b/doc/builders/packages/firefox.section.md
@@ -9,7 +9,7 @@ The `wrapFirefox` function allows to pass policies, preferences and extension th
myFirefox = wrapFirefox firefox-unwrapped {
nixExtensions = [
(fetchFirefoxAddon {
- name = "ublock";
+ name = "ublock"; # Has to be unique!
url = "https://addons.mozilla.org/firefox/downloads/file/3679754/ublock_origin-1.31.0-an+fx.xpi";
sha256 = "1h768ljlh3pi23l27qp961v1hd0nbj2vasgy11bmcrlqp40zgvnr";
})
@@ -42,7 +42,7 @@ The `wrapFirefox` function allows to pass policies, preferences and extension th
If `nixExtensions != null` then all manually installed addons will be uninstalled from your browser profile.
To view available enterprise policies visit [enterprise policies](https://github.com/mozilla/policy-templates#enterprisepoliciesenabled)
or type into the Firefox url bar: `about:policies#documentation`.
-Nix installed addons do not have a valid signature, which is why signature verification is disabled. This does not compromise security because downloaded addons are checksumed and manual addons can't be installed.
+Nix installed addons do not have a valid signature, which is why signature verification is disabled. This does not compromise security because downloaded addons are checksumed and manual addons can't be installed. Also make sure that the `name` field of fetchFirefoxAddon is unique. If you remove an addon from the nixExtensions array, rebuild and start Firefox the removed addon will be completly removed with all of its settings.
## Troubleshooting {#sec-firefox-troubleshooting}
If addons do not appear installed although they have been defined in your nix configuration file reset the local addon state of your Firefox profile by clicking `help -> restart with addons disabled -> restart -> refresh firefox`. This can happen if you switch from manual addon mode to nix addon mode and then back to manual mode and then again to nix addon mode.
diff --git a/pkgs/applications/networking/browsers/firefox/wrapper.nix b/pkgs/applications/networking/browsers/firefox/wrapper.nix
index a9888c3c47be..88fb6af4b016 100644
--- a/pkgs/applications/networking/browsers/firefox/wrapper.nix
+++ b/pkgs/applications/networking/browsers/firefox/wrapper.nix
@@ -1,5 +1,5 @@
{ stdenv, lib, makeDesktopItem, makeWrapper, lndir, config
-, replace, fetchurl, zip, unzip, jq, xdg_utils
+, replace, fetchurl, zip, unzip, jq, xdg_utils, writeText
## various stuff that can be plugged in
, flashplayer, hal-flash
@@ -97,12 +97,17 @@ let
# EXTRA PREF CHANGES #
# #
#########################
- policiesJson = builtins.toFile "policies.json"
- (builtins.toJSON enterprisePolicies);
+ policiesJson = writeText "policies.json" (builtins.toJSON enterprisePolicies);
usesNixExtensions = nixExtensions != null;
- extensions = builtins.map (a:
+ nameArray = builtins.map(a: a.name) (if usesNixExtensions then nixExtensions else []);
+
+ # Check that every extension has a unqiue .name attribute
+ # and an extid attribute
+ extensions = if nameArray != (lib.unique nameArray) then
+ throw "Firefox addon name needs to be unique"
+ else builtins.map (a:
if ! (builtins.hasAttr "extid" a) then
throw "nixExtensions has an invalid entry. Missing extid attribute. Please use fetchfirefoxaddon"
else
@@ -128,12 +133,19 @@ let
};
}
) {} extensions;
- }
+ } //
+ {
+ Extensions = {
+ Install = lib.foldr (e: ret:
+ ret ++ [ "${e.outPath}/${e.extid}.xpi" ]
+ ) [] extensions;
+ };
+ }
// extraPolicies;
};
- mozillaCfg = builtins.toFile "mozilla.cfg" ''
-// First line must be a comment
+ mozillaCfg = writeText "mozilla.cfg" ''
+ // First line must be a comment
// Disables addon signature checking
// to be able to install addons that do not have an extid
@@ -320,18 +332,13 @@ let
# preparing for autoconfig
mkdir -p "$out/lib/${firefoxLibName}/defaults/pref"
- cat > "$out/lib/${firefoxLibName}/defaults/pref/autoconfig.js" <<EOF
- pref("general.config.filename", "mozilla.cfg");
- pref("general.config.obscure_value", 0);
- EOF
+ echo 'pref("general.config.filename", "mozilla.cfg");' > "$out/lib/${firefoxLibName}/defaults/pref/autoconfig.js"
+ echo 'pref("general.config.obscure_value", 0);' >> "$out/lib/${firefoxLibName}/defaults/pref/autoconfig.js"
cat > "$out/lib/${firefoxLibName}/mozilla.cfg" < ${mozillaCfg}
mkdir -p $out/lib/${firefoxLibName}/distribution/extensions
- for i in ${toString extensions}; do
- ln -s -t $out/lib/${firefoxLibName}/distribution/extensions $i/*
- done
#############################
# #
# END EXTRA PREF CHANGES #
diff --git a/pkgs/build-support/fetchfirefoxaddon/default.nix b/pkgs/build-support/fetchfirefoxaddon/default.nix
index 4b7c68484d2e..9efe9197d687 100644
--- a/pkgs/build-support/fetchfirefoxaddon/default.nix
+++ b/pkgs/build-support/fetchfirefoxaddon/default.nix
@@ -1,16 +1,20 @@
{stdenv, lib, coreutils, unzip, jq, zip, fetchurl,writeScript, ...}:
-{ name
+
+{
+ name
, url
, md5 ? ""
, sha1 ? ""
, sha256 ? ""
, sha512 ? ""
+, fixedExtid ? null
, hash ? ""
}:
+
stdenv.mkDerivation rec {
inherit name;
- extid = "${src.outputHash}@${name}";
+ extid = if fixedExtid == null then "nixos@${name}" else fixedExtid;
passthru = {
exitd=extid;
};
@@ -35,4 +39,3 @@ stdenv.mkDerivation rec {
};
nativeBuildInputs = [ coreutils unzip zip jq ];
}
-