nixos-config/home/modules/firefox/mkFirefoxModuleCompat.nix

67 lines
1.5 KiB
Nix

{ modulePath, ... }@moduleArgs:
{
inputs,
config,
lib,
...
}:
let
mkFirefoxModule = import "${inputs.home-manager.outPath}/modules/programs/firefox/mkFirefoxModule.nix";
cfg = lib.getAttrFromPath modulePath config;
# HINT home-manager's Firefox module uses a read-only `finalPackage` option
# that creates a wrapper around `package`. However, this wrapper is not
# compatible with all Firefox-based browser packages. Thus, we adjust the module
# to always set `finalPackage` to `package` & remove unsupported options.
fixFirefoxModuleCompat =
module:
{
config,
lib,
pkgs,
...
}:
let
optionsPath = [ "options" ] ++ modulePath;
configPath = [
"config"
"content" # due to mkIf
] ++ modulePath;
in
lib.updateManyAttrsByPath
[
{
path = optionsPath ++ [ "languagePacks" ];
update = old: { };
}
{
path = configPath ++ [ "finalPackage" ];
update = old: cfg.package;
}
{
path = configPath ++ [ "policies" ];
update = old: { };
}
]
(module {
inherit config lib pkgs;
});
in
{
imports = [
(fixFirefoxModuleCompat (mkFirefoxModule moduleArgs))
];
options = lib.setAttrByPath modulePath { };
config = lib.mkIf cfg.enable (
{ }
// lib.setAttrByPath modulePath {
# Tor & Mullvad Browser don't support profile version 2 yet
profileVersion = lib.mkDefault null;
}
);
}