about summary refs log tree commit diff stats
path: root/home-manager/config/firefox/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'home-manager/config/firefox/default.nix')
-rw-r--r--home-manager/config/firefox/default.nix232
1 files changed, 232 insertions, 0 deletions
diff --git a/home-manager/config/firefox/default.nix b/home-manager/config/firefox/default.nix
new file mode 100644
index 00000000..88fad227
--- /dev/null
+++ b/home-manager/config/firefox/default.nix
@@ -0,0 +1,232 @@
+# vim: ts=2
+{
+  config,
+  pkgs,
+  lib,
+  stdenv,
+  strip_js_comments,
+  generate_extensions,
+  user_js,
+  system,
+  ...
+}: let
+  userChrome = builtins.readFile ./chrome/userChrome.css;
+
+  user_js_override = pkgs.writeText "user.override.js" (builtins.readFile ./settings/override.js);
+  user_js_nix = pkgs.runCommand "user.js" {} ''
+        mkdir $out;
+        cat "${user_js}/user.js" > $out/user.js;
+        cat "${user_js_override}" >> $out/user.js;
+
+        "${strip_js_comments.app.${system}.default.program}" $out/user.js > $out/user_clean.js;
+    #    echo "{" > $out/user.nix.tmp
+    #    sed 's/user_pref(\(.*\)",\(.*\));/\1" = \2;/' $out/user_clean.js >> $out/user.nix.tmp;
+    #    echo "}" >> $out/user.nix.tmp
+    #    awk '!/"_user.js.parrot"/' $out/user.nix.tmp >> $out/user.nix; # delete duplicate keys
+  '';
+
+  extensions = builtins.map buildFirefoxXpiAddon (
+    lib.attrValues (
+      lib.importJSON ./settings/extensions.json
+    )
+  );
+
+  # source: https://gitlab.com/rycee/nur-expressions/-/blob/master/pkgs/firefox-addons/default.nix
+  buildFirefoxXpiAddon = {
+    pname,
+    version,
+    addonId,
+    url,
+    sha256,
+#meta,
+    ...
+  }:
+    pkgs.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 = {
+    # 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.home.homeDirectory}/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;
+  };
+in {
+  home.packages = [
+    pkgs.firefox-wayland
+  ];
+  home.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;
+    profiles."default" = {
+      inherit extensions;
+      isDefault = true;
+      id = 0;
+      name = "default";
+
+      inherit userChrome;
+
+      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;
+      extraConfig = builtins.readFile "${user_js_nix}/user.js";
+    };
+  };
+}