{ config, lib, pkgs, ... }: with lib; let jsonFormat = pkgs.formats.json { }; # The extensions path shared by all profiles; will not be supported # by future Firefox versions. extensionPath = "extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"; userPrefValue = pref: builtins.toJSON (if isBool pref || isInt pref || isString pref then pref else builtins.toJSON pref); mkConfig = prefs: concatStrings ( mapAttrsToList (name: value: '' user_pref("${name}", ${userPrefValue value}); '') prefs ); mkUserJs = prefs: extraPrefs: bookmarks: let prefs' = lib.optionalAttrs ([ ] != bookmarks) { "browser.bookmarks.file" = toString (firefoxBookmarksFile bookmarks); "browser.places.importBookmarksHTML" = true; } // prefs; in '' // Generated by Home Manager. ${mkConfig prefs'} ${extraPrefs} ''; firefoxBookmarksFile = bookmarks: let indent = level: lib.concatStringsSep "" (map (lib.const " ") (lib.range 1 level)); bookmarkToHTML = indentLevel: bookmark: ''${indent indentLevel}
${allItemsToHTML (indentLevel + 1) directory.bookmarks} ${indent indentLevel}
${bookmarkEntries}