1
0
Fork 0
mirror of https://github.com/nix-community/home-manager synced 2024-11-30 06:59:45 +01:00

firefox: backport extensions fix to release-19.09

This commit is contained in:
Andrei Shumailov 2020-04-08 16:17:24 +02:00 committed by Robert Helgesson
parent 57f3b72d3a
commit 7aa2bd5bf4
No known key found for this signature in database
GPG key ID: 36BDAA14C2797E89
2 changed files with 51 additions and 14 deletions

View file

@ -1222,6 +1222,32 @@ in
A new module is available: 'programs.readline'. A new module is available: 'programs.readline'.
''; '';
} }
{
time = "2020-03-15T16:55:28+00:00";
condition = config.programs.firefox.enable;
message = ''
In anticipation of Firefox dropping support for extension
sideloading[1], we now install extensions directly to
Firefox profiles managed through Home Manager's
'programs.firefox.profiles'
option.
Unfortunately this will most likely trigger an "Existing
file is in the way" error when activating your configuration
since Firefox keeps a copy of the add-on in the location
Home Manager wants to overwrite. If this is the case, remove
the listed '.xpi' files and try again.
This change also means that extensions installed through
Home Manager may disappear from unmanaged profiles in future
Firefox releases.
[1] https://blog.mozilla.org/addons/2019/10/31/firefox-to-discontinue-sideloaded-extensions/
'';
}
]; ];
}; };
} }

View file

@ -6,8 +6,21 @@ let
cfg = config.programs.firefox; cfg = config.programs.firefox;
mozillaConfigPath = ".mozilla";
firefoxConfigPath = "${mozillaConfigPath}/firefox";
profilesPath = firefoxConfigPath;
# The extensions path shared by all profiles; will not be supported
# by future Firefox versions.
extensionPath = "extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"; extensionPath = "extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}";
extensionsEnvPkg = pkgs.buildEnv {
name = "hm-firefox-extensions";
paths = cfg.extensions;
};
profiles = profiles =
flip mapAttrs' cfg.profiles (_: profile: flip mapAttrs' cfg.profiles (_: profile:
nameValuePair "Profile${toString profile.id}" { nameValuePair "Profile${toString profile.id}" {
@ -250,32 +263,30 @@ in
home.file = mkMerge ( home.file = mkMerge (
[{ [{
".mozilla/${extensionPath}" = mkIf (cfg.extensions != []) ( "${mozillaConfigPath}/${extensionPath}" = mkIf (cfg.extensions != []) {
let source = "${extensionsEnvPkg}/share/mozilla/${extensionPath}";
extensionsEnv = pkgs.buildEnv {
name = "hm-firefox-extensions";
paths = cfg.extensions;
};
in {
source = "${extensionsEnv}/share/mozilla/${extensionPath}";
recursive = true; recursive = true;
} };
);
".mozilla/firefox/profiles.ini" = mkIf (cfg.profiles != {}) { "${firefoxConfigPath}/profiles.ini" = mkIf (cfg.profiles != {}) {
text = profilesIni; text = profilesIni;
}; };
}] }]
++ flip mapAttrsToList cfg.profiles (_: profile: { ++ flip mapAttrsToList cfg.profiles (_: profile: {
".mozilla/firefox/${profile.path}/chrome/userChrome.css" = "${profilesPath}/${profile.path}/chrome/userChrome.css" =
mkIf (profile.userChrome != "") { mkIf (profile.userChrome != "") {
text = profile.userChrome; text = profile.userChrome;
}; };
".mozilla/firefox/${profile.path}/user.js" = "${profilesPath}/${profile.path}/user.js" =
mkIf (profile.settings != {} || profile.extraConfig != "") { mkIf (profile.settings != {} || profile.extraConfig != "") {
text = mkUserJs profile.settings profile.extraConfig; text = mkUserJs profile.settings profile.extraConfig;
}; };
"${profilesPath}/${profile.path}/extensions" = mkIf (cfg.extensions != []) {
source = "${extensionsEnvPkg}/share/mozilla/${extensionPath}";
recursive = true;
};
}) })
); );
}; };