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

firefox: Avoid unnecessarily overriding package

When `cfg.package` is already wrapped, and wrapped without the
`ExtensionSettings` key set, this would always add that key, even if its
value was blank. This would result in `cfg.finalPackage` being a
functionally-identical, but differently-input-addressed package. This is
generally undesirable as it may result in multiple derivations being
built, and also if the value of `cfg.package` is expected to be
unchanged by the user (e.g. because they want it to be consistent
between NixOS and HM configuration).

Add a test to ensure this does not regress in the default case. Only
test on newish stateVersion since the logic for `isWrapped` differs on
older versions.
This commit is contained in:
Andrew Marshall 2024-10-14 21:43:58 -04:00
parent e1aec543f5
commit a2eba21972
3 changed files with 33 additions and 6 deletions

View file

@ -799,12 +799,13 @@ in {
finalPackage = wrapPackage cfg.package;
policies = {
ExtensionSettings = listToAttrs (map (lang:
nameValuePair "langpack-${lang}@firefox.mozilla.org" {
installation_mode = "normal_installed";
install_url =
"https://releases.mozilla.org/pub/firefox/releases/${cfg.package.version}/linux-x86_64/xpi/${lang}.xpi";
}) cfg.languagePacks);
ExtensionSettings = lib.mkIf (cfg.languagePacks != [ ]) (listToAttrs (map
(lang:
nameValuePair "langpack-${lang}@firefox.mozilla.org" {
installation_mode = "normal_installed";
install_url =
"https://releases.mozilla.org/pub/firefox/releases/${cfg.package.version}/linux-x86_64/xpi/${lang}.xpi";
}) cfg.languagePacks));
};
});
}

View file

@ -1,6 +1,7 @@
name:
builtins.mapAttrs (test: module: import module [ "programs" name ]) {
"${name}-deprecated-native-messenger" = ./deprecated-native-messenger.nix;
"${name}-final-package" = ./final-package.nix;
"${name}-policies" = ./policies.nix;
"${name}-profiles-bookmarks" = ./profiles/bookmarks;
"${name}-profiles-containers" = ./profiles/containers;

View file

@ -0,0 +1,25 @@
modulePath:
{ config, lib, pkgs, ... }:
let
cfg = lib.getAttrFromPath modulePath config;
firefoxMockOverlay = import ./setup-firefox-mock-overlay.nix modulePath;
in {
imports = [ firefoxMockOverlay ];
config = lib.mkIf config.test.enableBig
(lib.setAttrByPath modulePath { enable = true; } // {
home.stateVersion = "19.09";
nmt.script = ''
package=${cfg.package}
finalPackage=${cfg.finalPackage}
if [[ $package != $finalPackage ]]; then
fail "Expected finalPackage ($finalPackage) to equal package ($package)"
fi
'';
});
}