let profile = "default"; prf = ".mozilla/firefox/${profile}"; extstorage = "${prf}/browser-extension-data"; in { config, inputs, pkgs, lib, ... }: { home-manager.users.tzlil = let firefox-addons = pkgs.callPackage (pkgs.applyPatches { src = inputs.firefox-addons; patches = [./addons-passthru.patch]; name = "firefox-addons-patched"; }) {}; mozlz4 = n: x: pkgs.runCommand "${n}.lz4" {buildInputs = [pkgs.mozlz4a];} '' mozlz4a ${pkgs.writeTextFile {name=n; text=builtins.toJSON x;}} $out ''; cfg = config.home-manager.users.tzlil.programs; addons = cfg.firefox.profiles.${profile}.extensions; extensionPath = "extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"; addonStartupData = builtins.fromJSON (builtins.readFile (pkgs.runCommand "addonStartup.json" {buildInputs = [ pkgs.xvfb-run pkgs.mozlz4a pkgs.jq (pkgs.firefox.override { extraPolicies.Extensions.Install = map (x: x.src.outPath) addons; })];} '' HOME=$(mktemp -d) export FONTCONFIG_FILE=${pkgs.makeFontsConf { fontDirectories = [ pkgs.roboto ]; }} mkdir -p $HOME/.mozilla/firefox/default cat >> $HOME/.mozilla/firefox/profiles.ini<< EOF [Profile0] Default=1 IsRelative=1 Name=default Path=default EOF echo user_pref\(\"browser.region.network.url\", \"\"\) > $HOME/.mozilla/firefox/default/user.js xvfb-run firefox --screenshot about:blank mozlz4a -d $HOME/.mozilla/firefox/default/addonStartup.json.lz4 /dev/stdout | jq .\"app-profile\".addons > $out '')); in { # these come from the HM module home.file."${prf}/extension-preferences.json".source = pkgs.emptyFile; home.file."${prf}/extension-preferences.json.tmp".source = pkgs.emptyFile; home.file."${prf}/extension-settings.json".source = pkgs.emptyFile; home.file."${prf}/extension-settings.json.tmp".source = pkgs.emptyFile; home.file."${prf}/search.json.mozlz4".source = pkgs.emptyFile; home.file."${prf}/search.json.mozlz4.tmp".source = pkgs.emptyFile; home.file."${prf}/extensions".source = lib.mkForce ("${pkgs.symlinkJoin { name = "extensions"; paths = addons; }}/share/mozilla/${extensionPath}"); home.file."${prf}/storage".source = pkgs.emptyDirectory; home.file."${prf}/crashes".source = pkgs.emptyDirectory; home.file."${prf}/datareporting".source = pkgs.emptyDirectory; home.file."${prf}/saved-telemetry-pings".source = pkgs.emptyDirectory; home.file."${prf}/addonStartup.json.lz4".source = mozlz4 "addonStartup.json" {"app-profile".addons = addonStartupData;}; home.file."${prf}/addonStartup.json.lz4.tmp".source = pkgs.emptyFile; home.file."${prf}/addons.json".source = pkgs.emptyFile; home.file."${prf}/addons.json.tmp".source = pkgs.emptyFile; home.file."${prf}/extensions.json".source = pkgs.emptyFile; home.file."${prf}/extensions.json.tmp".source = pkgs.emptyFile; # tries to access W_OK it forever # home.file."${prf}/prefs.js".source = pkgs.emptyFile; # home.file."${prf}/prefs-1.js".source = pkgs.emptyFile; programs.firefox = { enable = true; profiles.${profile} = { extensions = with firefox-addons; [ kristofferhagen-nord-theme ]; settings = { "extensions.activeThemeID" = "{e410fec2-1cbd-4098-9944-e21e708418af}"; "browser.search.hiddenOneOffs" = "Google,Bing,Amazon.com,eBay,Twitter,Wikipedia (en)"; }; }; }; }; }