Loading nixos/modules/programs/browserpass.nix +1 −1 Original line number Diff line number Diff line Loading @@ -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 ]; }; } nixos/modules/programs/firefox.nix +65 −38 Original line number Diff line number Diff line Loading @@ -5,8 +5,6 @@ with lib; let cfg = config.programs.firefox; nmh = cfg.nativeMessagingHosts; policyFormat = pkgs.formats.json { }; organisationInfo = '' Loading @@ -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 = { Loading Loading @@ -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; })) ]; Loading nixos/modules/services/desktops/gnome/gnome-browser-connector.nix +1 −1 Original line number Diff line number Diff line Loading @@ -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 ]; }; } nixos/modules/services/x11/desktop-managers/plasma5.nix +1 −1 Original line number Diff line number Diff line Loading @@ -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 != {}) { Loading nixos/tests/firefox.nix +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 ]; }; Loading @@ -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. Loading Loading @@ -58,7 +54,9 @@ in }; testScript = '' testScript = let exe = firefoxPackage.unwrapped.binaryName; in '' from contextlib import contextmanager Loading Loading @@ -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) Loading @@ -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 Loading
nixos/modules/programs/browserpass.nix +1 −1 Original line number Diff line number Diff line Loading @@ -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 ]; }; }
nixos/modules/programs/firefox.nix +65 −38 Original line number Diff line number Diff line Loading @@ -5,8 +5,6 @@ with lib; let cfg = config.programs.firefox; nmh = cfg.nativeMessagingHosts; policyFormat = pkgs.formats.json { }; organisationInfo = '' Loading @@ -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 = { Loading Loading @@ -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; })) ]; Loading
nixos/modules/services/desktops/gnome/gnome-browser-connector.nix +1 −1 Original line number Diff line number Diff line Loading @@ -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 ]; }; }
nixos/modules/services/x11/desktop-managers/plasma5.nix +1 −1 Original line number Diff line number Diff line Loading @@ -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 != {}) { Loading
nixos/tests/firefox.nix +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 ]; }; Loading @@ -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. Loading Loading @@ -58,7 +54,9 @@ in }; testScript = '' testScript = let exe = firefoxPackage.unwrapped.binaryName; in '' from contextlib import contextmanager Loading Loading @@ -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) Loading @@ -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