{
  lib,
  pkgs,
  config,
  ...
}: let
  inherit (config.local.systemVars) username;
  toINI = lib.generators.toINI {};

  betterfox = pkgs.fetchFromGitHub {
    owner = "yokoffing";
    repo = "betterfox";
    rev = "e026ed7d3a763c5d3f96c2680d7bc3340831af4f";
    hash = "sha256-hpkEO5BhMVtINQG8HN4xqfas/R6q5pYPZiFK8bilIDs=";
  };

  firefox = pkgs.wrapFirefox pkgs.firefox-esr-128-unwrapped {
    extraPolicies = {
      SearchEngines.Default = "SearxNG";
      SearchEngines.Add = [
        {
          Name = "SearxNG";
          URLTemplate = "https://search.nezia.dev/search?q={searchTerms}";
          Method = "GET";
          SuggestURLTemplate = "https://search.nezia.dev/autocompleter?q={searchTerms}";
        }
        {
          Name = "Nix Packages";
          Alias = "@np";
          URLTemplate = "https://search.nixos.org/packages?channel=unstable&query={searchTerms}";
          Method = "GET";
        }
        {
          Name = "Nix Options";
          Alias = "@no";
          URLTemplate = "https://search.nixos.org/options?channel=unstable&query={searchTerms}";
          Method = "GET";
        }
        {
          Name = "NixOS Wiki";
          Alias = "@nw";
          URLTemplate = "https://wiki.nixos.org/w/index.php?search={searchTerms}";
          Method = "GET";
        }
        {
          Name = "Home Manager Options";
          Alias = "@hmo";
          URLTemplate = "https://home-manager-options.extranix.com/?query={searchTerms}&release=master";
          Method = "GET";
        }
        {
          Name = "ProtonDB";
          Alias = "@pdb";
          URLTemplate = "https://www.protondb.com/search?q={searchTerms}";
          Method = "GET";
        }
        {
          Name = "Noogle";
          Alias = "@ng";
          URLTemplate = "https://noogle.dev/q?term={searchTerms}";
        }
        {
          Name = "GitHub Nix";
          Alias = "@ghn";
          URLTemplate = "https://github.com/search?q=language:nix NOT is:fork {searchTerms}&type=code";
        }
      ];
      DisableTelemetry = true;
      DisablePocket = true;
      DisableFeedbackCommands = true;
      DisableFirefoxStudies = true;
      OfferToSaveLogins = false;
      OffertosaveloginsDefault = false;
      PasswordManagerEnabled = false;
      SearchSuggestEnabled = true;

      # https://github.com/Sly-Harvey/NixOS/blob/f9da2691ea46565256ad757959cfc26ec6cee10d/modules/programs/browser/firefox/default.nix#L58-L163
      "3rdparty".Extensions = {
        "addon@darkreader.org" = {
          permissions = ["internal:privateBrowsingAllowed"];
          enabled = true;
          automation = {
            enabled = true;
            behavior = "OnOff";
            mode = "system";
          };
          detectDarkTheme = true;
          enabledByDefault = true;
          changeBrowserTheme = false;
          enableForProtectedPages = true;
          fetchNews = false;
          previewNewDesign = true;
        };
        "uBlock0@raymondhill.net" = {
          permissions = ["internal:privateBrowsingAllowed"];
          advancedSettings = [
            [
              "userResourcesLocation"
              "https://raw.githubusercontent.com/pixeltris/TwitchAdSolutions/master/video-swap-new/video-swap-new-ublock-origin.js"
            ]
          ];
          adminSettings = {
            userSettings = {
              uiTheme = "dark";
              advancedUserEnabled = true;
              userFiltersTrusted = true;
              importedLists = [
                "https://raw.githubusercontent.com/laylavish/uBlockOrigin-HUGE-AI-Blocklist/main/list.txt"
              ];
              selectedFilterLists = [
                "FRA-0"
                "adguard-cookies"
                "adguard-mobile-app-banners"
                "adguard-other-annoyances"
                "adguard-popup-overlays"
                "adguard-social"
                "adguard-spyware-url"
                "adguard-widgets"
                "easylist"
                "easylist-annoyances"
                "easylist-chat"
                "easylist-newsletters"
                "easylist-notifications"
                "easyprivacy"
                "fanboy-cookiemonster"
                "https://filters.adtidy.org/extension/ublock/filters/3.txt"
                "https://github.com/DandelionSprout/adfilt/raw/master/LegitimateURLShortener.txt"
                "plowe-0"
                "ublock-annoyances"
                "ublock-badware"
                "ublock-cookies-adguard"
                "ublock-cookies-easylist"
                "ublock-filters"
                "ublock-privacy"
                "ublock-quick-fixes"
                "ublock-unbreak"
                "urlhaus-1"
                "https://raw.githubusercontent.com/laylavish/uBlockOrigin-HUGE-AI-Blocklist/main/list.txt"
              ];
            };
          };
        };
      };
    };
  };
in {
  config = lib.mkIf config.local.profiles.desktop.enable {
    hjem.users.${username} = {
      packages = [firefox];
      files = {
        ".mozilla/firefox/profiles.ini".text = toINI {
          Profile0 = {
            # creates lunarnova profile and sets it as default
            Name = "${username}";
            IsRelative = 1;
            Path = "${username}";
            Default = 1;
          };
        };
        ".mozilla/firefox/${username}/user.js".text = builtins.concatStringsSep "\n" [
          (builtins.readFile "${betterfox}/user.js")
          (builtins.readFile "${betterfox}/Securefox.js")
          (builtins.readFile "${betterfox}/Fastfox.js")
          (builtins.readFile "${betterfox}/Peskyfox.js")
          (builtins.readFile "${betterfox}/Smoothfox.js")
        ];
      };
    };
  };
}