{ pkgs, config, lib, ... }: let extensions = { "ublock-origin" = [ "alarms" "dns" "menus" "privacy" "storage" "tabs" "unlimitedStorage" "webNavigation" "webRequest" "webRequestBlocking" "" "http://*/*" "https://*/*" "file://*/*" "https://easylist.to/*" "https://*.fanboy.co.nz/*" "https://filterlists.com/*" "https://forums.lanik.us/*" "https://github.com/*" "https://*.github.io/*" "https://github.com/uBlockOrigin/*" "https://ublockorigin.github.io/*" "https://*.reddit.com/r/uBlockOrigin/*" ]; "sidebery" = [ "activeTab" "tabs" "contextualIdentities" "cookies" "storage" "unlimitedStorage" "sessions" "menus" "menus.overrideContext" "search" "theme" ]; "darkreader" = [ "alarms" "contextMenus" "storage" "tabs" "theme" "" ]; "plasma-integration" = [ "nativeMessaging" "notifications" "storage" "downloads" "tabs" "" "contextMenus" "*://*/*" ]; "keepassxc-browser" = [ "activeTab" "clipboardWrite" "contextMenus" "cookies" "nativeMessaging" "notifications" "storage" "tabs" "webNavigation" "webRequest" "webRequestBlocking" "https://*/*" "http://*/*" "https://api.github.com/" "" ]; "sponsorblock" = [ "storage" "scripting" "https://sponsor.ajay.app/*" "https://*.youtube.com/*" "https://www.youtube-nocookie.com/embed/*" ]; "dearrow" = [ "storage" "unlimitedStorage" "alarms" "https://sponsor.ajay.app/*" "https://dearrow-thumb.ajay.app/*" "https://*.googlevideo.com/*" "https://*.youtube.com/*" "https://www.youtube-nocookie.com/embed/*" "scripting" ]; }; in { programs.firefox = { enable = true; profiles.default = { containersForce = true; extensions = map (v: config.nur.repos.rycee.firefox-addons.${v}) (lib.attrNames extensions); settings = { "extensions.autoDisableScopes" = 0; "toolkit.legacyUserProfileCustomizations.stylesheets" = true; "browser.tabs.inTitlebar" = 0; }; userChrome = '' @namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); #TabsToolbar { visibility: collapse; } #titlebar { display: none; } #sidebar-header { display: none; } ''; }; }; assertions = lib.mapAttrsToList (k: v: let unaccepted = lib.subtractLists v config.nur.repos.rycee.firefox-addons.${k}.meta.mozPermissions; in { assertion = unaccepted == []; message = '' Extension ${k} has unaccepted permissions: ${builtins.toJSON unaccepted}''; }) extensions; home.persistence.default.directories = [ ".mozilla" ]; }