{ pkgs ? import {} }: with pkgs; # Where to find documentation: # http://kb.mozillazine.org/About:config_entries # https://www.privacy-handbuch.de/download/moderat/user.js # https://github.com/mozilla/policy-templates, about:policies#documentation let directory = callPackage nix/directory.nix {}; ffLib = callPackage nix/lib.nix {}; search = callPackage nix/search.nix {}; callProfile = p: lib.callPackageWith (pkgs // { inherit ffLib; }) p {}; in rec { profiles = directory.listDirectory callProfile ./profiles; disableErrorReporting.preferences = { breakpad.reportUrl = ""; }; activeProfiles = with profiles; [ defaults addons.disableExtensionSignatureChecking addons.privacybadger addons.noscriptFork addons.qwantjuniorSystem minimalConnections minimalHome noAccounts noClutter noMedia noNormandy noUpdates noStudies noPocket noTunnels noLocation safebrowsing.disableAll trackingprotection.disableAll replaceAllUrls # restrict # distrustUser ocsp.disabled forgetActivity { policies.RequestedLocales = [ "de-DE" "en-US" ]; } ]; config = ffLib.mergeProfiles activeProfiles; bundleConfig = { inherit (config) policies; preferences = ffLib.flattenAttrs config.preferences; # This is very hacky, but Firefox really resists setting the default search engine # by any other means. Only builtin search engines are allowed to make themselves default # without prompting for user consent. patchOmniJaCommand = let searchEnginesInfo = { default = { searchDefault = "qwantjunior"; searchOrder = [ "qwantjunior" "ddg" ]; visibleDefaultEngines = [ "qwantjunior" "ddg" ]; }; regionOverrides = {}; locales = {}; }; in '' pushd chrome/browser/search-extensions cp -r ${profiles/addons/qwantjunior} ./qwantjunior cp ${builtins.toFile "list.json" (builtins.toJSON searchEnginesInfo)} list.json popd ''; }; bundle = ffLib.bundle bundleConfig; launcher = ffLib.launcher bundle; export = ffLib.export { inherit (bundleConfig) policies preferences; selfPath = "/opt/firefox"; }; /* bundle = profiles.bundle { policies = { Preferences = profiles.flattenAttrs { dom.event.contextmenu.enabled = false; extensions = { blocklist.enabled = false; getAddons.showPane = false; htmlaboutaddons.recommendations.enabled = false; }; security.ssl.errorReporting.enabled = false; }; SearchBar = "separate"; }; }; */ }