Commit fb4d9c2

HPCesia <me@hpcesia.com>
2025-10-01 14:57:58
refactor: migrate browsers
1 parent 78e5321
Changed files (9)
.forgejo/workflows/update-firefox-addons.yaml
@@ -1,29 +0,0 @@
-name: Update Firefox Addons
-
-on:
-  workflow_dispatch:
-
-  schedule:
-    - cron: "0 4 * * 1"
-
-jobs:
-  update-firefox-addons:
-    runs-on: nixos-latest
-    steps:
-      - uses: actions/checkout@v4
-      - name: Update addons
-        run: |
-          nix run github:nix-community/NUR#legacyPackages.x86_64-linux.repos.rycee.mozilla-addons-to-nix -- \
-          ./home/linux/gui/firefox/addons/addons.json \
-          ./home/linux/gui/firefox/addons/default.nix
-      - uses: peter-evans/create-pull-request@v6
-        with:
-          token: ${{ secrets.GITHUB_TOKEN }}
-          commit-author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
-          commit-message: "chore(firefox): update addons"
-          branch: "chore/update-firefox-addons-{random}"
-          title: "chore(firefox): Update Firefox Addons"
-          body: |
-            Automated update of Firefox addons.
-            This PR was generated by the `update-firefox-addons` GitHub Actions workflow.
-          labels: "automated, dependencies"
home/linux/gui/firefox/addons/addons.json
@@ -1,6 +0,0 @@
-[
-    {
-        "slug": "欧路翻译-网页划词翻译工具",
-        "pname": "lulu-translator"
-    }
-]
\ No newline at end of file
home/linux/gui/firefox/addons/default.nix
@@ -1,26 +0,0 @@
-{ buildFirefoxXpiAddon, fetchurl, lib, stdenv }:
-  {
-    "lulu-translator" = buildFirefoxXpiAddon {
-      pname = "lulu-translator";
-      version = "25.7.0";
-      addonId = "{20c4c749-556c-4659-8827-16dfaf0601f9}";
-      url = "https://addons.mozilla.org/firefox/downloads/file/4539524/2818091-25.7.0.xpi";
-      sha256 = "a87c7f30dde5125e48cc848d7af730dcabe38e455ffe254799591d79b514d211";
-      meta = with lib;
-      {
-        description = "LuLu Translate, the world-leading cross-platform translation software, supports translation by selecting words.";
-        mozPermissions = [
-          "<all_urls>"
-          "webRequest"
-          "storage"
-          "activeTab"
-          "contextMenus"
-          "scripting"
-          "cookies"
-          "file:///*"
-          "*://*/*"
-        ];
-        platforms = platforms.all;
-      };
-    };
-  }
\ No newline at end of file
home/linux/gui/firefox/default.nix
@@ -1,133 +0,0 @@
-{
-  pkgs,
-  pkgs-stable,
-  ...
-}: {
-  catppuccin.firefox.profiles.default.enable = false;
-
-  programs.firefox = {
-    enable = true;
-    package = pkgs-stable.firefox;
-    languagePacks = ["zh-CN" "en-US"];
-    nativeMessagingHosts = 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;
-        };
-      };
-      extensions.packages = let
-        my-addons = import ./addons (with pkgs; {
-          inherit lib fetchurl stdenv;
-          buildFirefoxXpiAddon = pkgs.nur.repos.rycee.firefox-addons.buildFirefoxXpiAddon;
-        });
-      in
-        with pkgs.nur.repos.rycee.firefox-addons; [
-          ublock-origin
-          bitwarden
-          tampermonkey
-          rsshub-radar
-          auto-tab-discard
-          aria2-integration
-          firefox-color
-          plasma-integration
-          aw-watcher-web
-          my-addons.lulu-translator
-        ];
-      settings = {
-        # 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;
-        # 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;
-        # General
-        "browser.startup.page" = 3; # Open prev session pages
-        "browser.tabs.unloadOnLowMemory" = true;
-        "widget.use-xdg-desktop-portal.file-picker" = 1;
-        # 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";
-        "browser.uiCustomization.state" = {
-          "placements" = {
-            "widget-overflow-fixed-list" = [];
-            "unified-extensions-area" = [];
-            "nav-bar" = [
-              "sidebar-button"
-              "back-button"
-              "forward-button"
-              "stop-reload-button"
-              "vertical-spacer"
-              "customizableui-special-spring7"
-              "urlbar-container"
-              "customizableui-special-spring2"
-              "unified-extensions-button"
-              "fxa-toolbar-menu-button"
-            ];
-            "toolbar-menubar" = ["menubar-items"];
-            "TabsToolbar" = [];
-            "vertical-tabs" = ["tabbrowser-tabs"];
-            "PersonalToolbar" = ["personal-bookmarks"];
-          };
-          "seen" = ["developer-button"];
-          "dirtyAreaCache" = [];
-        };
-        # Disable 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;
-      };
-    };
-  };
-}
home/linux/gui/misc.nix
@@ -14,7 +14,6 @@
 
   # Fix Chromium IME bug
   cherrystudio = pkgs-unstable.cherry-studio.override {commandLineArgs = chromiumCLA;};
-  chromium = pkgs.chromium.override {commandLineArgs = chromiumCLA ++ ["-–disable-features=GlobalShortcutsPortal"];};
   qq = pkgs.qq.override {commandLineArgs = chromiumCLA;};
 in {
   home.packages = with pkgs; [
@@ -32,16 +31,6 @@ in {
     blender
   ];
 
-  programs.chromium = {
-    enable = true;
-    package = chromium;
-    nativeMessagingHosts = [pkgs.kdePackages.plasma-browser-integration];
-    extensions = [
-      {id = "cimiefiiaegbelhefglklhhakcgmhkai";} # Plasma Integration
-      # {id = "bpoadfkcbjbfhfodiogcnhhhpibjhbnh";} # Immersive Translate
-    ];
-  };
-
   # Fix pcsc conflict
   # https://github.com/LudovicRousseau/PCSC/issues/65
   programs.gpg.scdaemonSettings.disable-ccid = true;
home/linux/gui/xdg.nix
@@ -1,32 +1,11 @@
 {pkgs, ...}: {
   xdg = {
     mimeApps = {
-      defaultApplications = let
-        browser = ["firefox.desktop"];
-      in {
-        "application/json" = browser;
-
-        "text/html" = browser;
-        "text/xml" = browser;
-        "application/xml" = browser;
-        "application/xhtml+xml" = browser;
-        "application/xhtml_xml" = browser;
-        "application/rdf+xml" = browser;
-        "application/rss+xml" = browser;
-        "application/x-extension-htm" = browser;
-        "application/x-extension-html" = browser;
-        "application/x-extension-shtml" = browser;
-        "application/x-extension-xht" = browser;
-        "application/x-extension-xhtml" = browser;
-
-        "x-scheme-handler/about" = browser;
-        "x-scheme-handler/ftp" = browser;
-        "x-scheme-handler/http" = browser;
-        "x-scheme-handler/https" = browser;
+      defaultApplications = {
         "x-scheme-handler/tg" = ["org.telegram.desktop.desktop "];
         "x-scheme-handler/tonsite" = ["org.telegram.desktop.desktop "];
 
-        "application/pdf" = ["okularApplication_pdf.desktop"] ++ browser;
+        "application/pdf" = ["okularApplication_pdf.desktop"];
         "application/epub+zip" = ["okularApplication_epub.desktop"];
 
         "audio/*" = ["mpv.desktop" "deadbeef.desktop"];
modules/desktop/apps/browser/chromium.nix
@@ -0,0 +1,30 @@
+{lib, ...}: {
+  flake.modules.homeManager.desktop = {
+    pkgs,
+    osConfig,
+    ...
+  }: let
+    linuxChromiumCLA = [
+      "--ozone-platform-hint=auto"
+      "--enable-wayland-ime"
+      "--wayland-text-input-version=3"
+    ];
+    isLinux = pkgs.stdenv.hostPlatform.isLinux;
+    isPlasma = isLinux && osConfig.services.desktopManager.plasma6.enable;
+  in {
+    programs.chromium = {
+      enable = true;
+      package = lib.mkIf isLinux (pkgs.chromium.override {
+        commandLineArgs =
+          linuxChromiumCLA
+          ++ ["-–disable-features=GlobalShortcutsPortal"];
+      });
+      nativeMessagingHosts = lib.optionals isPlasma [
+        pkgs.kdePackages.plasma-browser-integration
+      ];
+      extensions = lib.optionals isPlasma [
+        {id = "cimiefiiaegbelhefglklhhakcgmhkai";} # Plasma Integration
+      ];
+    };
+  };
+}
modules/desktop/apps/browser/firefox.nix
@@ -0,0 +1,133 @@
+{lib, ...}: {
+  flake.modules.homeManager.desktop = {
+    pkgs,
+    osConfig,
+    ...
+  }: {
+    catppuccin.firefox.profiles.default.enable = false;
+
+    programs.firefox = let
+      isPlasma =
+        pkgs.stdenv.hostPlatform.isLinux
+        && osConfig.services.desktopManager.plasma6.enable;
+    in {
+      enable = true;
+      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;
+          };
+        };
+        extensions.packages =
+          (with pkgs.nur.repos.rycee.firefox-addons; [
+            ublock-origin
+            bitwarden
+            tampermonkey
+            rsshub-radar
+            auto-tab-discard
+            aria2-integration
+            firefox-color
+          ])
+          ++ lib.optionals isPlasma
+          (with pkgs.nur.repos.rycee.firefox-addons; [
+            plasma-integration
+          ]);
+        settings = {
+          # 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;
+          # 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;
+          # General
+          "browser.startup.page" = 3; # Open prev session pages
+          "browser.tabs.unloadOnLowMemory" = true;
+          "widget.use-xdg-desktop-portal.file-picker" = 1;
+          # 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";
+          "browser.uiCustomization.state" = {
+            "placements" = {
+              "widget-overflow-fixed-list" = [];
+              "unified-extensions-area" = [];
+              "nav-bar" = [
+                "sidebar-button"
+                "back-button"
+                "forward-button"
+                "stop-reload-button"
+                "vertical-spacer"
+                "customizableui-special-spring7"
+                "urlbar-container"
+                "customizableui-special-spring2"
+                "unified-extensions-button"
+                "fxa-toolbar-menu-button"
+              ];
+              "toolbar-menubar" = ["menubar-items"];
+              "TabsToolbar" = [];
+              "vertical-tabs" = ["tabbrowser-tabs"];
+              "PersonalToolbar" = ["personal-bookmarks"];
+            };
+            "seen" = ["developer-button"];
+            "dirtyAreaCache" = [];
+          };
+          # Disable 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;
+        };
+      };
+    };
+  };
+}
modules/desktop/apps/browser/xdg.nix
@@ -0,0 +1,27 @@
+{
+  flake.modules.homeManager.desktop = _: {
+    xdg.mimeApps.defaultApplications = let
+      browser = ["firefox.desktop"];
+    in {
+      "application/json" = browser;
+
+      "text/html" = browser;
+      "text/xml" = browser;
+      "application/xml" = browser;
+      "application/xhtml+xml" = browser;
+      "application/xhtml_xml" = browser;
+      "application/rdf+xml" = browser;
+      "application/rss+xml" = browser;
+      "application/x-extension-htm" = browser;
+      "application/x-extension-html" = browser;
+      "application/x-extension-shtml" = browser;
+      "application/x-extension-xht" = browser;
+      "application/x-extension-xhtml" = browser;
+
+      "x-scheme-handler/about" = browser;
+      "x-scheme-handler/ftp" = browser;
+      "x-scheme-handler/http" = browser;
+      "x-scheme-handler/https" = browser;
+    };
+  };
+}