{lib, config, pkgs, inputs, options, ...}: let cfg = config.firefoxApp; # Check if stylix home-manager module is loaded by checking for the firefox target option # Only check options (not config) to avoid infinite recursion during module evaluation hasStylixFirefox = (options ? stylix) && (options.stylix ? targets) && (options.stylix.targets ? firefox); in { # imports = [ # inputs.nur.hmModules.nur # ]; options.firefoxApp = { enable = lib.mkEnableOption "enable firefox browser"; }; config = lib.mkIf cfg.enable (lib.mkMerge ([ # Firefox configuration { programs.firefox = { # Add pipewire support # package = (pkgs.wrapFirefox (pkgs.firefox-unwrapped.override { pipewireSupport = true;}) {}); enable = true; profiles = { default = { id = 0; name = "default"; isDefault = true; extensions.packages = with pkgs; [ nur.repos.rycee.firefox-addons.darkreader nur.repos.rycee.firefox-addons.keepassxc-browser nur.repos.crazazy.firefox-addons.ublock-origin nur.repos.bandithedoge.firefoxAddons.stylus ]; search = { # Replace default firefox search engine config with this one force = true; default = "Kagi"; engines = { "Kagi" = { urls = [{ template = "https://kagi.com/search?q={searchTerms}"; }]; }; "Nix Packages" = { urls = [{ template = "https://search.nixos.org/packages"; params = [ { name = "type"; value = "packages"; } { name = "query"; value = "{searchTerms}"; } ]; }]; icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; definedAliases = [ "@np" ]; }; "NixOS Wiki" = { urls = [{ template = "https://wiki.nixos.org/w/index.php"; params = [ { name = "search"; value = "{searchTerms}"; } ]; }]; icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; definedAliases = [ "@nix" ]; }; "MySQL Docs" = { urls = [{ template = "https://dev.mysql.com/doc/search"; params = [ { name = "d"; value = "371"; } { name = "p"; value = "1"; } { name = "q"; value = "{searchTerms}"; } ]; }]; definedAliases = [ "@mysql" ]; }; "SQLite Docs" = { urls = [{ template = "https://www.sqlite.org/search?s=d&q=strict"; params = [ { name = "s"; value = "d"; } { name = "q"; value = "{searchTerms}"; } ]; }]; definedAliases = [ "@sqlite" ]; }; }; }; settings = { "browser.startup.blankWindow" = true; "browser.startup.homepage" = "https://www.startpage.com/do/mypage.pl?prfe=11898a1adf7b7dfb587580692f358773a11ca25e993b8e077476641cec033319e15f2449c345f5be919fd0a082015c3e4ed23143bd4337512466c04c2999831a54abca2eaeb42963c63ff064"; "browser.search.region" = "US"; "browser.search.isUS" = true; "distribution.searchplugins.defaultLocale" = "en-US"; "general.useragent.locale" = "en-US"; "extensions.activeThemeID" = "{831b8843-7251-4306-9521-e688f18b4aeb}"; "privacy.trackingprotection.enable" = true; "privacy.trackingprotection.emailtracking.enable" = true; "privacy.trackingprotection.socialtracking.enable" = true; "privacy.clearOnShutdown.cookies" = true; "browser.safebrowsing.passwords.enabled" = false; "browser.migrate.interactions.passwords" = false; "pref.privacy.disable_button.view_passwords" = false; "signon.rememberSignon" = false; "extensions.formautofill.creditCards.enabled" = false; "extensions.formautofill.addresses.enabled" = false; "browser.toolbars.bookmarks.visibility" = "always"; # For applying userContent.css - not being used # "toolkit.legacyUserProfileCustomizations.stylesheets" = true; # "browser.newtabpage.pinned" = [{ # title = "NixOS"; # url = "https://nixos.org"; # }]; }; }; }; }; } ] ++ lib.optional hasStylixFirefox { # Stylix integration (only if stylix module is loaded) # Uses mkIf to check autoEnable at runtime, avoiding infinite recursion stylix.targets.firefox.profileNames = lib.mkIf config.stylix.autoEnable [ "default" ]; })); }