grimm-nixos-laptop/common/firefox.nix
2025-02-22 18:09:06 +01:00

136 lines
4.7 KiB
Nix

{
pkgs,
config,
lib,
...
}:
let
inherit (config.grimmShared)
enable
firefox
locale
sway
;
inherit (lib)
mkIf
optionals
mapAttrs
optionalAttrs
;
in
{
config = mkIf (enable && firefox.enable) {
environment.systemPackages =
[ ]
++ optionals config.services.desktopManager.plasma6.enable [ pkgs.plasma-browser-integration ];
programs.firefox = {
package = pkgs.firefox.override {
extraPrefsFiles = [
"${pkgs.arkenfox-userjs}/user.cfg"
(pkgs.writeText "arkenfox-userjs-overrides.cfg" # javascript
''
/// arkenfox user.js overrides.
// We want session restore to work, for that we need to save history:
// https://github.com/arkenfox/user.js/issues/1080#issue-774750296
lockPref("privacy.clearOnShutdown.history", false);
lockPref("privacy.clearOnShutdown_v2.historyFormDataAndDownloads", false);
lockPref("privacy.clearOnShutdown.offlineApps", false); // Site Data
lockPref("privacy.clearOnShutdown_v2.cookiesAndStorage", false); // Cookies, Site Data, Active Logins [FF128+]
''
)
];
};
enable = true;
languagePacks = optionals locale [
"de"
"en-US"
];
policies = {
ExtensionSettings =
# (mkIf firefox.disableUserPlugins { "*".installation_mode = "blocked"; }) //
(
mapAttrs (guid: shortId: {
# explicit plugins by config
install_url = "https://addons.mozilla.org/en-US/firefox/downloads/latest/${shortId}/latest.xpi";
installation_mode = "force_installed";
}) config.grimmShared.firefox.plugins
);
DisableTelemetry = true;
DisableFirefoxStudies = true;
DisableScreenshots = true;
EnableTrackingProtection = {
Value = true;
Locked = true;
Cryptomining = true;
Fingerprinting = true;
};
DisablePocket = true;
DisableFirefoxAccounts = true;
DisableAccounts = true;
DisableFirefoxScreenshots = true;
OverrideFirstRunPage = "";
OverridePostUpdatePage = "";
DontCheckDefaultBrowser = true;
Preferences = {
"pdfjs.enableScripting" = false;
"signon.rememberSignons" = false;
"media.hardware-video-decoding.enabled" = true;
"media.ffmpeg.vaapi.enabled" = true;
"media.rdd-ffmpeg.enabled" = true;
"media.navigator.mediadatadecoder_vpx_enabled" = true;
"media.eme.enabled" = true;
# "media.peerconnection.enabled" = false;
"browser.startup.homepage" = "about:home";
"browser.startup.page" = 1;
"browser.newtabpage.enabled" = true;
"browser.toolbars.bookmarks.visibility" = "newtab";
"browser.download.useDownloadDir" = true;
# "general.useragent.override" = "";
# "permissions.memory_only" = true;
"privacy.resistFingerprinting" = true;
"privacy.resistFingerprinting.block_mozAddonManager" = true;
"network.http.referer.XOriginPolicy" = 1;
"network.http.referer.XOriginTrimmingPolicy" = 1;
"network.http.sendRefererHeader" = 0;
"network.proxy.socks" = builtins.head (builtins.split ":" config.services.tor.torsocks.server);
"network.proxy.socks_port" = lib.last (builtins.split ":" config.services.tor.torsocks.server);
"network.connectivity-service.DNSv4.domain" = "127.0.0.1";
"network.connectivity-service.DNSv6.domain" = "::1";
"network.dns.localDomains" = "::1";
"network.dns.forceResolve" = true;
"network.dns.disableIPv6" = true;
"extensions.formautofill.addresses.enabled" = false;
"extensions.formautofill.creditCards.enabled" = false;
"permissions.default.geo" = 2;
"permissions.default.xr" = 2;
"privacy.fingerprintingProtection" = true;
"privacy.globalprivacycontrol.enabled" = true;
"signon.firefoxRelay.feature" = "disabled";
"browser.display.use_document_fonts" = 0;
# "network.dns.DNS_HTTPS.domain" = "::1";
} // optionalAttrs sway.enable { "browser.tabs.inTitlebar" = 0; };
};
};
};
options.grimmShared.firefox = with lib; {
enable = mkEnableOption "grimm-firefox";
plugins = mkOption {
type = types.attrsOf types.str;
default = { };
description = "set of plugins to install. Format: guid = short-id";
};
disableUserPlugins = mkEnableOption "disables user controlled plugins";
};
}