Commit c0b1d6d

HPCesia <me@hpcesia.com>
2025-12-03 08:31:32
feat: replace firefox with floorp
1 parent b829b19
Changed files (4)
modules
desktop
apps
desktop-environment
discrete
modules/desktop/apps/browser/firefox.nix → modules/desktop/apps/browser/_firefox.nix
File renamed without changes
modules/desktop/apps/browser/floorp.nix
@@ -0,0 +1,220 @@
+{lib, ...}: {
+  flake.modules.homeManager.desktop = {
+    pkgs,
+    osConfig,
+    ...
+  }: {
+    stylix.targets.floorp = {
+      profileNames = ["default"];
+      colorTheme.enable = true;
+    };
+
+    programs.floorp = let
+      isPlasma =
+        pkgs.stdenv.hostPlatform.isLinux
+        && osConfig.services.desktopManager.plasma6.enable;
+    in {
+      enable = true;
+      package = pkgs.floorp-bin;
+      languagePacks = ["zh-CN" "en-US"];
+      nativeMessagingHosts = lib.mkIf isPlasma (with pkgs; [
+        kdePackages.plasma-browser-integration
+      ]);
+
+      policies = {
+        DisableAppUpdate = true;
+        DisablePocket = true;
+        DisableSetDesktopBackground = true;
+        DisableTelemetry = true;
+        DontCheckDefaultBrowser = true;
+        ExtensionUpdate = false;
+        NoDefaultBookmarks = true;
+        OfferToSaveLogins = false;
+        PasswordManagerEnabled = false;
+      };
+
+      profiles.default = {
+        id = 0;
+        isDefault = true;
+
+        search = {
+          force = true;
+          default = "bing";
+          privateDefault = "duckduckgo";
+          order = [
+            "bing"
+            "google"
+            "duckduckgo"
+          ];
+          engines = {
+            baidu.metaData.hidden = true;
+            startpage.metaData.hidden = true;
+            "you.com".metaData.hidden = true;
+          };
+        };
+
+        extensions.force = true;
+        extensions.packages =
+          (with pkgs.nur.repos.rycee.firefox-addons; [
+            ublock-origin
+            bitwarden
+            tampermonkey
+            aria2-integration
+          ])
+          ++ (lib.optional isPlasma pkgs.nur.repos.rycee.firefox-addons.plasma-integration);
+
+        settings = {
+          # == General ==
+          "browser.startup.page" = 3; # Open prev session pages
+          "browser.tabs.unloadOnLowMemory" = true;
+          "widget.use-xdg-desktop-portal.file-picker" = 1;
+          # No first run
+          "app.normandy.first_run" = false;
+          "doh-rollout.doneFirstRun" = true;
+          "toolkit.telemetry.reportingpolicy.firstRun" = false;
+          "trailhead.firstrun.didSeeAboutWelcome" = true;
+          "browser.toolbarbuttons.introduced.sidebar-button" = true;
+          "sidebar.old-sidebar.has-used" = true;
+          "sidebar.new-sidebar.has-used" = true;
+          "floorp.browser.welcome.page.shown" = true;
+          # Language
+          "general.useragent.locale" = "zh-CN";
+          "intl.locale.requested" = "zh-CN,en-US";
+          "browser.translations.mostRecentTargetLanguages" = "zh-Hans";
+          # No ads
+          "browser.urlbar.suggest.topsites" = false;
+          "browser.urlbar.suggest.trending" = false;
+          "browser.newtabpage.pinned" = [];
+          "browser.newtabpage.activity-stream.showSponsored" = false;
+          "browser.newtabpage.activity-stream.showSponsoredTopSites" = false;
+          # == Telemetry ==
+          "toolkit.telemetry.unified" = false;
+          "toolkit.telemetry.enabled" = false;
+          "toolkit.telemetry.server" = "data:,";
+          "toolkit.telemetry.archive.enabled" = false;
+          "toolkit.telemetry.newProfilePing.enabled" = false;
+          "toolkit.telemetry.shutdownPingSender.enabled" = false;
+          "toolkit.telemetry.updatePing.enabled" = false;
+          "toolkit.telemetry.bhrPing.enabled" = false;
+          "toolkit.telemetry.firstShutdownPing.enabled" = false;
+          "toolkit.telemetry.shutdownPingSender.enabledFirstsession" = false;
+          "browser.ping-centre.telemetry" = false;
+          "browser.newtabpage.activity-stream.feeds.telemetry" = false;
+          "browser.newtabpage.activity-stream.telemetry" = false;
+          # == Apperance ==
+          "browser.newtabpage.activity-stream.feeds.topsites" = false;
+          "browser.newtabpage.activity-stream.default.sites" = "";
+          "browser.toolbars.bookmarks.visibility" = "always";
+          "sidebar.verticalTabs" = true;
+          "sidebar.main.tools" = "syncedtabs";
+          "sidebar.visibility" = "expand-on-hover";
+          # Floorp's new tab page
+          "floorp.newtab.configs" = {
+            "components" = {
+              "topSites" = false;
+              "clock" = false;
+              "searchBar" = true;
+              "firefoxLayout" = true;
+            };
+            "background" = let
+              image = osConfig.stylix.image;
+              processed-image = pkgs.runCommand "dimmed-wallpaper" {} ''
+                ${lib.getExe' pkgs.imagemagick "convert"} "${image}" -blur 0x8 -modulate 80,60,100 -fill "gray(20%)" -colorize 20% $out
+              '';
+            in {
+              "type" = "custom";
+              "customImage" = "file://${processed-image}";
+              "fileName" = builtins.baseNameOf processed-image;
+            };
+            "searchBar" = {"searchEngine" = "default";};
+            "topSites" = {
+              "pinned" = [];
+              "blocked" = [];
+            };
+          };
+          # panelSideBar
+          "floorp.panelSidebar.enabled" = true;
+          "floorp.panelSidebar.config" = {
+            "autoUnload" = false;
+            "position_start" = true;
+            "globalWidth" = 400;
+            "displayed" = true;
+            "webExtensionRunningEnabled" = false;
+          };
+          "floorp.panelSidebar.data"."data" = [
+            {
+              "id" = "default-panel-bookmarks";
+              "url" = "floorp//bookmarks";
+              "width" = 0; # Needed
+              "type" = "static";
+            }
+            {
+              "id" = "default-panel-history";
+              "url" = "floorp//history";
+              "width" = 0;
+              "type" = "static";
+            }
+            {
+              "id" = "default-panel-downloads";
+              "url" = "floorp//downloads";
+              "width" = 0;
+              "type" = "static";
+            }
+            {
+              "id" = "default-panel-translate-google-com";
+              "url" = "https://translate.google.com";
+              "width" = 0;
+              "userContextId" = 0;
+              "zoomLevel" = null;
+              "type" = "web";
+            }
+          ];
+          # Workspace
+          "floorp.workspaces.enabled" = true;
+          "floorp.workspaces.v4.config" = {
+            "manageOnBms" = true;
+            "showWorkspaceNameOnToolbar" = true;
+          };
+          # Top toolbar
+          "browser.uiCustomization.state" = {
+            "placements" = {
+              "widget-overflow-fixed-list" = [];
+              "unified-extensions-area" =
+                [
+                  "firefox_tampermonkey_net-browser-action" # Tampermonkey
+                  "_e2488817-3d73-4013-850d-b66c5e42d505_-browser-action" # Aria2 Integration
+                  "ublock0_raymondhill_net-browser-action" # uBlock Origin
+                  "firefoxcolor_mozilla_com-browser-action" # Firefox Color
+                  "plasma-browser-integration_kde_org-browser-action" # Plasma Integration
+                ]
+                # Plasma Integration
+                ++ (lib.optional isPlasma "plasma-browser-integration_kde_org-browser-action");
+              "nav-bar" = [
+                "sidebar-button"
+                "back-button"
+                "forward-button"
+                "stop-reload-button"
+                "vertical-spacer"
+                "urlbar-container"
+                "_446900e4-71c2-419f-a6a7-df9c091e268b_-browser-action" # Bitwarden
+                "unified-extensions-button"
+                "fxa-toolbar-menu-button"
+              ];
+              "toolbar-menubar" = ["menubar-items"];
+              "TabsToolbar" = [];
+              "vertical-tabs" = ["tabbrowser-tabs"];
+              "PersonalToolbar" = ["personal-bookmarks"];
+              "nora-statusbar" = [
+                "screenshot-button"
+                "fullscreen-button"
+                "status-text"
+              ];
+            };
+            "seen" = ["developer-button"];
+            "dirtyAreaCache" = [];
+          };
+        };
+      };
+    };
+  };
+}
modules/desktop/apps/browser/xdg.nix
@@ -1,7 +1,7 @@
 {
   flake.modules.homeManager.desktop = _: {
     xdg.mimeApps.defaultApplications = let
-      browser = ["firefox.desktop"];
+      browser = ["floorp.desktop"];
     in {
       "application/json" = browser;
 
modules/desktop/desktop-environment/discrete/wm/niri/window-rules.nix
@@ -17,6 +17,7 @@
           {app-id = "dev.zed.Zed";}
 
           {app-id = "firefox";}
+          {app-id = "floorp";}
           # {app-id = "chromium-browser";} # Not maximizing Chromium because I usually use it for web apps
 
           {app-id = "thunderbird";}
@@ -50,6 +51,7 @@
         matches = [
           {app-id = "firefox";}
           {app-id = "chromium-browser";}
+          {app-id = "floorp";}
           {app-id = "metacubexd";}
         ];
         open-on-workspace = "2network";