about summary refs log tree commit diff stats
path: root/home-manger/firefox/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'home-manger/firefox/default.nix')
-rw-r--r--home-manger/firefox/default.nix220
1 files changed, 220 insertions, 0 deletions
diff --git a/home-manger/firefox/default.nix b/home-manger/firefox/default.nix
new file mode 100644
index 00000000..5e9b9632
--- /dev/null
+++ b/home-manger/firefox/default.nix
@@ -0,0 +1,220 @@
+# vim: ts=2
+{
+  config,
+  pkgs,
+  lib,
+  stdenv,
+  ...
+}: let
+  user_js_override = "./settings/override.js";
+  user_js = lib.runCommand "user.js" {} ''
+    mkdir $out;
+    ${config.inputs.strip_js_comments}/bin ${config.inputs.user_js} > $out/user.js;
+    cat ${user_js_override} >> $out/user.js;
+    sed 's/user_pref(\(.*\)",\(.*\));/\1" = \2;/' $out/user.js > $out/user.nix;
+  '';
+
+  # source: https://gitlab.com/rycee/nur-expressions/-/blob/master/pkgs/firefox-addons/default.nix
+  buildFirefoxXpiAddon = {
+    pname,
+    version,
+    addonId,
+    url,
+    sha256,
+    meta,
+    ...
+  }:
+    builtins.stdenv.mkDerivation {
+      name = "${pname}-${version}";
+
+      inherit meta;
+
+      src = builtins.fetchurl {inherit url sha256;};
+
+      preferLocalBuild = true;
+      allowSubstitutes = true;
+
+      buildCommand = ''
+        dst="$out/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"
+        mkdir -p "$dst"
+        install -v -m644 "$src" "$dst/${addonId}.xpi"
+      '';
+    };
+
+  settings =
+    pkgs.lib.recursiveUpdate
+    {
+      # Allow my custom css
+      "toolkit.legacyUserProfileCustomizations.stylesheets" = true;
+
+      # might improve performance TODO
+      "gfx.webrender.all" = true;
+
+      # disable updates (pretty pointless with nix)
+      "extensions.update.autoUpdateDefault" = false;
+      "extensions.update.enabled" = false;
+      "app.update.channel" = "default";
+
+      "browser.ctrlTab.recentlyUsedOrder" = false;
+
+      "browser.download.useDownloadDir" = true;
+      "browser.download.dir" = "${config.user.soisha.home}/media/downloads";
+      "browser.download.folderList" = 2; # TODO
+      "browser.download.viewableInternally.typeWasRegistered.svg" = true;
+      "browser.download.viewableInternally.typeWasRegistered.webp" = true;
+      "browser.download.viewableInternally.typeWasRegistered.xml" = true;
+
+      # TODO what does this do?
+      "browser.search.widget.inNavBar" = true;
+
+      "browser.shell.checkDefaultBrowser" = false;
+      "browser.tabs.loadInBackground" = true;
+      "browser.urlbar.placeholderName" = "Brave";
+
+      "general.autoScroll" = true;
+
+      # Set the tabs and bookmarks
+      "browser.tabs.inTitlebar" = 1;
+      "browser.toolbars.bookmarks.visibility" = "always";
+
+      # Theme
+      "extensions.activeThemeID" = "firefox-alpenglow@mozilla.org";
+      "extensions.extensions.activeThemeID" = "firefox-alpenglow@mozilla.org";
+
+      # highlight all entries when searching
+      "findbar.highlightAll" = true;
+
+      # TODO
+      #"extensions.webcompat.enable_picture_in_picture_overrides" = true;
+      #"extensions.webcompat.enable_shims" = true;
+      #"extensions.webcompat.perform_injections" = true;
+      #"extensions.webcompat.perform_ua_overrides" = true;
+
+      # onlykey / copied from a yubikey config
+      #"security.webauth.u2f" = true;
+      #"security.webauth.webauthn" = true;
+      #"security.webauth.webauthn_enable_softtoken" = true;
+      #"security.webauth.webauthn_enable_usbtoken" = true;
+    }
+    builtins.readFile
+    "${user_js}/user.nix";
+in {
+  home-manager.users.${config.soisha.user.username} = {
+    packages = [
+      pkgs.firefox-wayland
+    ];
+    sessionVariables = {
+      # improve touch input & make scrolling smother
+      MOZ_USE_XINPUT2 = "1";
+      # improve wayland support
+      MOZ_ENABLE_WAYLAND = 1;
+      XDG_CURRENT_DESKTOP = "river";
+    };
+    xdg.mimeApps = {
+      enable = true;
+      defaultApplications = {
+        "text/html" = ["firefox.desktop"];
+        "x-scheme-handler/http" = ["firefox.desktop"];
+        "x-scheme-handler/https" = ["firefox.desktop"];
+        "x-scheme-handler/about" = ["firefox.desktop"];
+        "x-scheme-handler/unknown" = ["firefox.desktop"];
+      };
+    };
+    programs.firefox = {
+      enable = true;
+      package = pkgs.firefox;
+      extensions = builtins.map buildFirefoxXpiAddon (lib.attrValues (lib.importJSON ./extensions.json));
+      profile."default" = {
+        isDefault = true;
+        id = 0;
+        name = "default";
+
+        userChrome = builtins.readFile "./chrome/userChrome.css";
+
+        search = {
+          default = "Brave Search";
+          force = true;
+
+          engines = {
+            "Brave Search" = {
+              urls = [{template = "https://search.brave.com/search?q={searchTerms}";}];
+              iconUpdateURL = "https://cdn.search.brave.com/serp/v1/static/brand/8eabe183f0d1f2cb3e2916b7b20c310efd196d740c8cecd341732fcd396fb665-apple-touch-icon.png";
+              updateInterval = 24 * 60 * 60 * 1000; # every day
+              definedAliases = ["@bs"];
+            };
+
+            "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://nixos.wiki/index.php?search={searchTerms}";}];
+              iconUpdateURL = "https://nixos.wiki/favicon.png";
+              updateInterval = 24 * 60 * 60 * 1000; # every day
+              definedAliases = ["@nw"];
+            };
+            "Bing".metaData.hidden = true;
+            "Google".metaData.hidden = true;
+            "Amazon.de".metaData.hidden = true;
+          };
+        };
+
+        bookmarks = [
+          {
+            name = "Rust::std";
+            # TODO
+            url = "file:///home/dt/.local/share/rustup/toolchains/stable-x86_64-unknown-linux-gnu/share/doc/rust/html/std/all.html";
+          }
+
+          {
+            name = "Feed - Piped";
+            url = "https://piped.kavin.rocks/feed";
+          }
+
+          {
+            name = "DeepL Translate";
+            url = "https://www.deepl.com/translator#en/de/test";
+          }
+
+          {
+            name = "Google Scholar";
+            url = "https://scholar.google.com/";
+          }
+
+          {
+            name = "ArchWiki";
+            url = "https://wiki.archlinux.org/";
+          }
+
+          {
+            name = "Arch Package ";
+            url = "https://archlinux.org/packages/";
+          }
+
+          {
+            name = "layout.css.devPixelsPerPx";
+            url = "about:config";
+          }
+        ];
+        inherit settings;
+      };
+    };
+  };
+}