Unverified Commit a52abd4c authored by K900's avatar K900 Committed by GitHub
Browse files

Merge pull request #262623 from K900/continued-firefox-cleanups

firefox: start killing all the per-extension options
parents 6d502084 e6f5980d
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -27,6 +27,6 @@ with lib;
      "opt/brave/native-messaging-hosts/${appId}".source = source "hosts/chromium";
      "opt/brave/policies/managed/${appId}".source = source "policies/chromium";
    };
    programs.firefox.wrapperConfig.enableBrowserpass = true;
    programs.firefox.nativeMessagingHosts.packages = [ pkgs.browserpass ];
  };
}
+65 −38
Original line number Diff line number Diff line
@@ -5,8 +5,6 @@ with lib;
let
  cfg = config.programs.firefox;

  nmh = cfg.nativeMessagingHosts;

  policyFormat = pkgs.formats.json { };

  organisationInfo = ''
@@ -17,6 +15,50 @@ let
    given control of your browser, unless of course they also control your
    NixOS configuration.
  '';

  # deprecated per-native-messaging-host options
  nmhOptions = {
    browserpass = {
      name = "Browserpass";
      package = pkgs.browserpass;
    };
    bukubrow = {
      name = "Bukubrow";
      package = pkgs.bukubrow;
    };
    euwebid = {
      name = "Web eID";
      package = pkgs.web-eid-app;
    };
    ff2mpv = {
      name = "ff2mpv";
      package = pkgs.ff2mpv;
    };
    fxCast = {
      name = "fx_cast";
      package = pkgs.fx-cast-bridge;
    };
    gsconnect = {
      name = "GSConnect";
      package = pkgs.gnomeExtensions.gsconnect;
    };
    jabref = {
      name = "JabRef";
      package = pkgs.jabref;
    };
    passff = {
      name = "PassFF";
      package = pkgs.passff-host;
    };
    tridactyl = {
      name = "Tridactyl";
      package = pkgs.tridactyl-native;
    };
    ugetIntegrator = {
      name = "Uget Integrator";
      package = pkgs.uget-integrator;
    };
  };
in
{
  options.programs.firefox = {
@@ -204,46 +246,31 @@ in
      '';
    };

    nativeMessagingHosts = mapAttrs (_: v: mkEnableOption (mdDoc v)) {
      browserpass = "Browserpass support";
      bukubrow = "Bukubrow support";
      euwebid = "Web eID support";
      ff2mpv = "ff2mpv support";
      fxCast = "fx_cast support";
      gsconnect = "GSConnect support";
      jabref = "JabRef support";
      passff = "PassFF support";
      tridactyl = "Tridactyl support";
      ugetIntegrator = "Uget Integrator support";
    nativeMessagingHosts = ({
      packages = mkOption {
        type = types.listOf types.package;
        default = [];
        description = mdDoc ''
          Additional packages containing native messaging hosts that should be made available to Firefox extensions.
        '';
      };
    }) // (mapAttrs (k: v: mkEnableOption (mdDoc "${v.name} support")) nmhOptions);
  };

  config = mkIf cfg.enable {
  config = let
    forEachEnabledNmh = fn: flatten (mapAttrsToList (k: v: lib.optional cfg.nativeMessagingHosts.${k} (fn k v)) nmhOptions);
  in mkIf cfg.enable {
    warnings = forEachEnabledNmh (k: v:
      "The `programs.firefox.nativeMessagingHosts.${k}` option is deprecated, " +
      "please add `${v.package.pname}` to `programs.firefox.nativeMessagingHosts.packages` instead."
    );
    programs.firefox.nativeMessagingHosts.packages = forEachEnabledNmh (_: v: v.package);

    environment.systemPackages = [
      (cfg.package.override (old: {
        extraPrefs = cfg.autoConfig;
        extraNativeMessagingHosts =
          old.extraNativeMessagingHosts or []
          ++ optional nmh.ff2mpv pkgs.ff2mpv
          ++ optional nmh.euwebid pkgs.web-eid-app
          ++ optional nmh.gsconnect pkgs.gnomeExtensions.gsconnect
          ++ optional nmh.jabref pkgs.jabref
          ++ optional nmh.passff pkgs.passff-host;
        cfg = let
          # copy-pasted from the wrapper; TODO: figure out fix
          applicationName = cfg.package.binaryName or (lib.getName cfg.package);

          oldCfg = old.cfg or {};
          nixpkgsConfig = pkgs.config.${applicationName} or {};
          optionConfig = cfg.wrapperConfig;
          nmhConfig = {
            enableBrowserpass = nmh.browserpass;
            enableBukubrow = nmh.bukubrow;
            enableTridactylNative = nmh.tridactyl;
            enableUgetIntegrator = nmh.ugetIntegrator;
            enableFXCastBridge = nmh.fxCast;
          };
        in oldCfg // nixpkgsConfig // optionConfig // nmhConfig;
        extraPrefsFiles = old.extraPrefsFiles or [] ++ [(pkgs.writeText "firefox-autoconfig.js" cfg.autoConfig)];
        nativeMessagingHosts = old.nativeMessagingHosts or [] ++ cfg.nativeMessagingHosts.packages;
        cfg = (old.cfg or {}) // cfg.wrapperConfig;
      }))
    ];

+1 −1
Original line number Diff line number Diff line
@@ -42,6 +42,6 @@ in

    services.dbus.packages = [ pkgs.gnome-browser-connector ];

    programs.firefox.wrapperConfig.enableGnomeExtensions = true;
    programs.firefox.nativeMessagingHosts.packages = [ pkgs.gnome-browser-connector ];
  };
}
+1 −1
Original line number Diff line number Diff line
@@ -379,7 +379,7 @@ in
      # Update the start menu for each user that is currently logged in
      system.userActivationScripts.plasmaSetup = activationScript;

      programs.firefox.wrapperConfig.enablePlasmaBrowserIntegration = true;
      programs.firefox.nativeMessagingHosts.packages = [ pkgs.plasma5Packages.plasma-browser-integration ];
    })

    (mkIf (cfg.kwinrc != {}) {
+14 −16
Original line number Diff line number Diff line
import ./make-test-python.nix ({ pkgs, firefoxPackage, ... }:
let firefoxPackage' = firefoxPackage.override (args: {
      extraPrefsFiles = (args.extraPrefsFiles or []) ++ [
        # make sure that autoplay is enabled by default for the audio test
        (builtins.toString (builtins.toFile "autoplay-pref.js" ''defaultPref("media.autoplay.default",0);''))
      ];
  });

in
{
  name = firefoxPackage'.unwrapped.pname;
  name = firefoxPackage.pname;

  meta = with pkgs.lib.maintainers; {
    maintainers = [ eelco shlevy ];
  };
@@ -17,10 +10,13 @@ in
    { pkgs, ... }:

    { imports = [ ./common/x11.nix ];
      environment.systemPackages = [
        firefoxPackage'
        pkgs.xdotool
      ];
      environment.systemPackages = [ pkgs.xdotool ];

      programs.firefox = {
        enable = true;
        preferences."media.autoplay.default" = 0;
        package = firefoxPackage;
      };

      # Create a virtual sound device, with mixing
      # and all, for recording audio.
@@ -58,7 +54,9 @@ in

    };

  testScript = ''
  testScript = let
    exe = firefoxPackage.unwrapped.binaryName;
  in ''
      from contextlib import contextmanager


@@ -97,7 +95,7 @@ in

      with subtest("Wait until Firefox has finished loading the Valgrind docs page"):
          machine.execute(
              "xterm -e '${firefoxPackage'.unwrapped.binaryName} file://${pkgs.valgrind.doc}/share/doc/valgrind/html/index.html' >&2 &"
              "xterm -e '${exe} file://${pkgs.valgrind.doc}/share/doc/valgrind/html/index.html' >&2 &"
          )
          machine.wait_for_window("Valgrind")
          machine.sleep(40)
@@ -105,7 +103,7 @@ in
      with subtest("Check whether Firefox can play sound"):
          with record_audio(machine):
              machine.succeed(
                  "${firefoxPackage'.unwrapped.binaryName} file://${pkgs.sound-theme-freedesktop}/share/sounds/freedesktop/stereo/phone-incoming-call.oga >&2 &"
                  "${exe} file://${pkgs.sound-theme-freedesktop}/share/sounds/freedesktop/stereo/phone-incoming-call.oga >&2 &"
              )
              wait_for_sound(machine)
          machine.copy_from_vm("/tmp/record.wav")
Loading