{
  lib,
  self,
  config,
  ...
}:
let
  inherit (self) namespace;
  inherit (self.lib) mkOpt;
  inherit (lib) mkEnableOption types mkIf;

  cfg = config.${namespace}.apps.firefox;
in
{
  options.${namespace}.apps.firefox = {
    enable = mkEnableOption "the Firefox browser.";
    extensions = mkOpt (types.listOf types.str) [
      "uBlock0@raymondhill.net"
    ] "List of extension slugs to install";
  };

  config = mkIf cfg.enable {
    programs.firefox = {
      enable = true;
      policies = {
        ExtensionSettings = builtins.foldl' (
          acc: id:
          acc
          // {
            ${id} = {
              install_url = "https://addons.mozilla.org/firefox/downloads/latest/${id}/latest.xpi";
              installation_mode = "force_installed";
            };
          }
        ) { } cfg.extensions;
      };

      profiles.default = {
        extensions.force = true;
      };
    };
  };
}
