{ pkgs, ... }:

{
  programs.browserpass.enable = true;
  programs.browserpass.browsers = [ "firefox" ];
  #env.XDG_DEXSTOP_DIR = "$HOME/";
  programs.firefox.profiles.anish.userChrome = (builtins.readFile ./userChrome.css);
  programs.firefox.profiles.anish.settings = {
    "devtools.theme" = "dark";
    # Enable userContent.css and userChrome.css for our theme modules
    "toolkit.legacyUserProfileCustomizations.stylesheets" = true;
    # Stop creating ~/Downloads!
    "browser.download.dir" = "/home/anish/downloads"; # TODO Don't hardcode this!
    # Don't use the built-in password manager; a nixos user is more likely
    # using an external one (you are using one, right?).
    #"signon.rememberSignons" = false;
    # Do not check if Firefox is the default browser
    "browser.shell.checkDefaultBrowser" = false;
    # Disable the "new tab page" feature and show a blank tab instead
    # https://wiki.mozilla.org/Privacy/Reviews/New_Tab
    # https://support.mozilla.org/en-US/kb/new-tab-page-show-hide-and-customize-top-sites#w_how-do-i-turn-the-new-tab-page-off
    "browser.newtabpage.enabled" = false;
    "browser.newtab.url" = "about:blank";
    # Disable Activity Stream
    # https://wiki.mozilla.org/Firefox/Activity_Stream
    "browser.newtabpage.activity-stream.enabled" = false;
    # Disable new tab tile ads & preload
    # http://www.thewindowsclub.com/disable-remove-ad-tiles-from-firefox
    # http://forums.mozillazine.org/viewtopic.php?p=13876331#p13876331
    # https://wiki.mozilla.org/Tiles/Technical_Documentation#Ping
    # https://gecko.readthedocs.org/en/latest/browser/browser/DirectoryLinksProvider.html#browser-newtabpage-directory-source
    # https://gecko.readthedocs.org/en/latest/browser/browser/DirectoryLinksProvider.html#browser-newtabpage-directory-ping
    "browser.newtabpage.enhanced" = false;
    "browser.newtab.preload" = false;
    "browser.newtabpage.directory.ping" = "";
    "browser.newtabpage.directory.source" = "data:text/plain,{}";
    # Disable some not so useful functionality.
    "media.videocontrols.picture-in-picture.video-toggle.enabled" = false;
    "extensions.htmlaboutaddons.recommendations.enabled" = false;
    "extensions.htmlaboutaddons.discover.enabled" = false;
    "extensions.pocket.enabled" = false;
    "app.normandy.enabled" = false;
    "app.normandy.api_url" = "";
    "extensions.shield-recipe-client.enabled" = false;
    "app.shield.optoutstudies.enabled" = false;
    # Disable battery API
    # https://developer.mozilla.org/en-US/docs/Web/API/BatteryManager
    # https://bugzilla.mozilla.org/show_bug.cgi?id=1313580
    "dom.battery.enabled" = false;
    # Disable "beacon" asynchronous HTTP transfers (used for analytics)
    # https://developer.mozilla.org/en-US/docs/Web/API/navigator.sendBeacon
    "beacon.enabled" = false;
    # Disable pinging URIs specified in HTML <a> ping= attributes
    # http://kb.mozillazine.org/Browser.send_pings
    "browser.send_pings" = false;
    # Disable gamepad API to prevent USB device enumeration
    # https://www.w3.org/TR/gamepad/
    # https://trac.torproject.org/projects/tor/ticket/13023
    "dom.gamepad.enabled" = false;
    # Don't try to guess domain names when entering an invalid domain name in URL bar
    # http://www-archive.mozilla.org/docs/end-user/domain-guessing.html
    "browser.fixup.alternate.enabled" = false;
    # Disable telemetry
    # https://wiki.mozilla.org/Platform/Features/Telemetry
    # https://wiki.mozilla.org/Privacy/Reviews/Telemetry
    # https://wiki.mozilla.org/Telemetry
    # https://www.mozilla.org/en-US/legal/privacy/firefox.html#telemetry
    # https://support.mozilla.org/t5/Firefox-crashes/Mozilla-Crash-Reporter/ta-p/1715
    # https://wiki.mozilla.org/Security/Reviews/Firefox6/ReviewNotes/telemetry
    # https://gecko.readthedocs.io/en/latest/browser/experiments/experiments/manifest.html
    # https://wiki.mozilla.org/Telemetry/Experiments
    # https://support.mozilla.org/en-US/questions/1197144
    # https://firefox-source-docs.mozilla.org/toolkit/components/telemetry/telemetry/internals/preferences.html#id1
    "toolkit.telemetry.enabled" = false;
    "toolkit.telemetry.unified" = false;
    "toolkit.telemetry.archive.enabled" = false;
    "experiments.supported" = false;
    "experiments.enabled" = false;
    "experiments.manifest.uri" = "";
    # Disable health reports (basically more telemetry)
    # https://support.mozilla.org/en-US/kb/firefox-health-report-understand-your-browser-perf
    # https://gecko.readthedocs.org/en/latest/toolkit/components/telemetry/telemetry/preferences.html
    "datareporting.healthreport.uploadEnabled" = false;
    "datareporting.healthreport.service.enabled" = false;
    "datareporting.policy.dataSubmissionEnabled" = false;
    # Pipewire optimizations
    # https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Performance-tuning#firefox
    "reader.parse-on-load.enabled" = false;
    "media.webspeech.synth.enabled" = false;
  };

  # Override?
  home.packages = with pkgs; [
    firefox-bin
    (makeDesktopItem {
      name = "firefox-private";
      desktopName = "Firefox (Private)";
      genericName = "Open a private Firefox window";
      icon = "firefox";
      exec = "${firefox-bin}/bin/firefox --private-window";
      categories = "Network";
    })
  ];

  home.file = let cfgPath = ".mozilla/firefox"; in
    {
      "${cfgPath}/profiles.ini".text = ''
        [Profile0]
        Name=default
        IsRelative=1
        Path=anish.default
        Default=1
        [General]
        StartWithLastProfile=1
        Version=2
      '';
      "${cfgPath}/anish.default/chrome/userChrome.css".source = ./userChrome.css;
    };
}
