nix/home/program/firefox/default.nix

419 lines
14 KiB
Nix

{
pkgs,
config,
__findFile,
...
}:
let
bookmarks = [
(mkBookmark "Dashboard" "https://home.voronind.com")
(mkBookmark "Watch" "https://watch.voronind.com")
(mkBookmark "Telegram" "https://web.telegram.org/a")
(mkBookmark "WorkChat" "https://fsmm.fsight.ru/fmp")
(mkBookmark "Mail" "https://mail.voronind.com")
(mkBookmark "WorkMail" "https://mail.fsight.ru")
(mkBookmark "Git" "https://git.voronind.com")
(mkBookmark "WorkGit" "https://git.fmp.fsight.world")
(mkBookmark "WorkBoard" "https://support.fsight.ru")
(mkBookmark "Hass" "https://iot.voronind.com")
(mkBookmark "Cloud" "https://cloud.voronind.com")
];
searchEngines = [
(mkSearchEngine "s" "SearX" "https://search.voronind.com/search?q={searchTerms}")
(mkSearchEngine "aw" "Arch Wiki" "https://wiki.archlinux.org/index.php?search={searchTerms}")
(mkSearchEngine "gh" "GitHub" "https://github.com/search?q={searchTerms}")
(mkSearchEngine "ghc" "GitHub Code" "https://github.com/search?q={searchTerms}&type=code")
(mkSearchEngine "hm" "Home Manager"
"https://home-manager-options.extranix.com/?query={searchTerms}"
)
(mkSearchEngine "no" "NixOS Options" "https://search.nixos.org/options?query={searchTerms}")
(mkSearchEngine "np" "NixOS Packages" "https://search.nixos.org/packages?query={searchTerms}")
(mkSearchEngine "re" "Reddit" "https://www.reddit.com/search/?q={searchTerms}")
(mkSearchEngine "rt" "RuTracker" "https://rutracker.org/forum/tracker.php?nm={searchTerms}")
(mkSearchEngine "so" "Stack Overflow" "https://stackoverflow.com/search?tab=votes&q={searchTerms}")
(mkSearchEngine "st" "Steam" "https://store.steampowered.com/search/?term={searchTerms}")
];
extensions = [
# TODO: Use this after https://github.com/darkreader/darkreader/pull/12920 gets merged.
# (mkExtension "addon@darkreader.org" "https://addons.mozilla.org/firefox/downloads/latest/darkreader/latest.xpi")
(mkExtension "addon@darkreader.org" "file://${
pkgs.callPackage <package/darkreader> { }
}/latest.xpi")
(mkExtension "cliget@zaidabdulla.com" "https://addons.mozilla.org/firefox/downloads/latest/cliget/latest.xpi")
(mkExtension "foxyproxy@eric.h.jung" "https://addons.mozilla.org/firefox/downloads/latest/foxyproxy-standard/latest.xpi")
(mkExtension "uBlock0@raymondhill.net" "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi")
(mkExtension "{446900e4-71c2-419f-a6a7-df9c091e268b}" "https://addons.mozilla.org/firefox/downloads/latest/bitwarden-password-manager/latest.xpi")
(mkExtension "{a6c4a591-f1b2-4f03-b3ff-767e5bedf4e7}" "https://addons.mozilla.org/firefox/downloads/latest/user-agent-string-switcher/latest.xpi")
(mkExtension "{d7742d87-e61d-4b78-b8a1-b469842139fa}" "https://addons.mozilla.org/firefox/downloads/latest/vimium-ff/latest.xpi")
(mkExtension "{e7625f06-e252-479d-ac7a-db68aeaff2cb}" "https://addons.mozilla.org/firefox/downloads/latest/togglefonts/latest.xpi")
# NOTE: This extension is helpful to find the required parameters for this config.
# Or find them yourself inside the `about:support`.
# (mkExtension "queryamoid@kaply.com" "https://github.com/mkaply/queryamoid/releases/download/v0.1/query_amo_addon_id-0.1-fx.xpi")
];
prefs = [
# WARN: Remove when Dark Reader policies gets merged.
(mkLockedPref "xpinstall.signatures.required" false)
# Bookmarks.
(mkLockedPref "browser.microsummary.enabled" true)
(mkLockedPref "browser.places.importBookmarksHTML" true)
(mkLockedPref "browser.toolbars.bookmarks.visibility" "never")
# Fonts.
(mkUserPref "browser.display.use_document_fonts" 0)
(mkLockedPref "font.minimum-size.x-cyrillic" (toString config.style.font.size.application))
(mkLockedPref "font.minimum-size.x-unicode" (toString config.style.font.size.application))
(mkLockedPref "font.minimum-size.x-western" (toString config.style.font.size.application))
(mkLockedPref "font.name.monospace.x-cyrillic" config.style.font.monospace.name)
(mkLockedPref "font.name.monospace.x-unicode" config.style.font.monospace.name)
(mkLockedPref "font.name.monospace.x-western" config.style.font.monospace.name)
(mkLockedPref "font.name.sans-serif.x-cyrillic" config.style.font.sansSerif.name)
(mkLockedPref "font.name.sans-serif.x-unicode" config.style.font.sansSerif.name)
(mkLockedPref "font.name.sans-serif.x-western" config.style.font.sansSerif.name)
(mkLockedPref "font.name.serif.x-cyrillic" config.style.font.serif.name)
(mkLockedPref "font.name.serif.x-unicode" config.style.font.serif.name)
(mkLockedPref "font.name.serif.x-western" config.style.font.serif.name)
# Animations.
(mkLockedPref "browser.fullscreen.animateUp" 0)
(mkLockedPref "browser.fullscreen.autohide" true)
# Homepage.
(mkLockedPref "browser.newtabpage.enabled" false)
(mkLockedPref "browser.startup.homepage" "https://home.voronind.com/")
(mkLockedPref "browser.startup.page" 3)
# Passwords.
(mkLockedPref "signon.prefillForms" false)
(mkLockedPref "signon.rememberSignons" false)
# Formats.
(mkLockedPref "image.jxl.enabled" true)
# User agent.
# (mkLockedPref "general.useragent.override" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36")
# Disable HTTP3.
(mkLockedPref "network.http.http3.enable" false)
# Disable built-in DoH.
(mkLockedPref "doh-rollout.disable-heuristics" true)
(mkLockedPref "network.trr.mode" 5)
# HTTPS only mode.
(mkLockedPref "dom.security.https_only_mode" true)
(mkLockedPref "dom.security.https_only_mode_ever_enabled" true)
# Style.
(mkLockedPref "toolkit.legacyUserProfileCustomizations.stylesheets" true)
# Disable auto gain for the mic.
# (mkLockedPref "media.getusermedia.audio.processing.aec" 0)
# (mkLockedPref "media.getusermedia.audio.processing.aec.enabled" false)
# (mkLockedPref "media.getusermedia.audio.processing.agc" 0)
# (mkLockedPref "media.getusermedia.audio.processing.agc.enabled" false)
# (mkLockedPref "media.getusermedia.audio.processing.agc2.forced" false
# (mkLockedPref "media.getusermedia.audio.processing.hpf.enabled" false)
# (mkLockedPref "media.getusermedia.audio.processing.noise" 0)
# (mkLockedPref "media.getusermedia.audio.processing.noise.enabled" false)
# (mkLockedPref "media.getusermedia.audio.processing.platform.enabled" false)
# (mkLockedPref "media.getusermedia.audio.processing.transient.enabled" false)
];
userChrome = ''
* {
font-family: "${config.style.font.serif.name}" !important;
font-size: ${toString config.style.font.size.application}pt !important;
}
'';
userContent = ''
@-moz-document url(about:home), url(about:newtab), url(about:privatebrowsing), url(about:blank) {
.click-target-container *, .top-sites-list * {
color: #fff !important ;
text-shadow: 2px 2px 2px #222 !important ;
}
body::before {
content: "" ;
z-index: -1 ;
position: fixed ;
top: 0 ;
left: 0 ;
background: #f9a no-repeat url("${config.module.wallpaper.path}?raw=true") center ;
background-color: #222;
background-size: cover ;
/* filter: blur(4px) ; */
width: 100vw ;
height: 100vh ;
}
/* .logo { background-image: url("{repo}/logo.png?raw=true") !important; } */
/* .logo { background-image: none !important; } */
}
'';
mkExtension = id: install_url: {
${id} = {
inherit install_url;
installation_mode = "force_installed";
};
};
mkBookmark = name: url: { inherit name url; };
mkSearchEngine = Alias: Description: URLTemplate: {
inherit Alias Description URLTemplate;
Method = "GET";
Name = Description;
};
mkPref = Name: Value: Status: {
${Name} = {
inherit Value Status;
};
};
mkLockedPref = Name: Value: mkPref Name Value "locked";
mkUserPref = Name: Value: mkPref Name Value "user";
in
{
enable = true;
package = pkgs.firefox-esr;
# languagePacks = [ "en-US" "ru" ];
profiles.default = {
inherit userChrome userContent;
};
# REF: https://mozilla.github.io/policy-templates/
policies = {
AppAutoUpdate = false;
BackgroundAppUpdate = false;
DisableBuiltinPDFViewer = true;
DisableFirefoxAccounts = true;
DisableFirefoxStudies = true;
DisableFormHistory = true;
DisableMasterPasswordCreation = true;
DisablePasswordReveal = true;
DisablePocket = true;
DisableProfileImport = true;
DisableSetDesktopBackground = true;
DisableTelemetry = true;
DontCheckDefaultBrowser = true;
ExtensionUpdate = true;
ManagedBookmarks = [ { toplevel_name = "Pin"; } ] ++ bookmarks;
NoDefaultBookmarks = true;
OfferToSaveLogins = false;
PasswordManagerEnabled = false;
Preferences = builtins.foldl' (acc: pref: acc // pref) { } prefs;
PromptForDownloadLocation = false;
SearchSuggestEnabled = false;
ShowHomeButton = false;
StartDownloadsInTempDirectory = false;
UseSystemPrintDialog = true;
EnableTrackingProtection = {
Value = true;
Locked = false;
Cryptomining = true;
Fingerprinting = true;
EmailTracking = true;
Exceptions = [ "https://example.com" ];
};
EncryptedMediaExtensions = {
Enabled = true;
Locked = true;
};
ExtensionSettings = {
# Block extension installation outside of this config.
"*" = {
install_sources = [ "*" ];
installation_mode = "blocked";
};
} // builtins.foldl' (acc: ext: acc // ext) { } extensions;
"3rdparty".Extensions = {
"uBlock0@raymondhill.net".adminSettings = {
userSettings = {
uiTheme = "dark";
cloudStorageEnabled = false;
};
# NOTE: Check in `Support` -> `Troubleshooting Information` tab.
selectedFilterLists = [
"user-filters"
"ublock-badware"
"ublock-privacy"
"ublock-quick-fixes"
"ublock-filters"
"easyprivacy"
"ublock-unbreak"
"urlhaus-1"
"easylist"
"plowe-0"
"adguard-cookies"
"fanboy-cookiemonster"
"ublock-cookies-easylist"
"adguard-other-annoyances"
"ublock-cookies-adguard"
"adguard-widgets"
"fanboy-social"
"ublock-annoyances"
"adguard-social"
"fanboy-thirdparty_social"
"easylist-chat"
"easylist-newsletters"
"easylist-notifications"
"easylist-annoyances"
"adguard-mobile-app-banners"
"adguard-popup-overlays"
"RUS-0"
];
};
"addon@darkreader.org" = {
enabled = true;
enabledByDefault = true;
changeBrowserTheme = false;
detectDarkTheme = true;
enableContextMenus = true;
enableForPDF = true;
enableForProtectedPages = false;
fetchNews = false;
previewNewDesign = true;
syncSettings = false;
syncSitesFixes = true;
disabledFor = [
"home.voronind.com"
];
theme = {
mode = 1;
brightness = 100;
contrast = 100;
grayscale = 0;
sepia = 0;
useFont = false;
fontFamily = config.style.font.sansSerif.name;
textStroke = 0;
engine = "dynamicTheme"; # dynamicTheme, cssFilter or svgFilter.
stylesheet = "";
darkSchemeBackgroundColor = "#${config.style.color.bg.dark}";
darkSchemeTextColor = "#${config.style.color.fg.light}";
lightSchemeBackgroundColor = "#${config.style.color.bg.light}";
lightSchemeTextColor = "#${config.style.color.fg.dark}";
scrollbarColor = "#${config.style.color.neutral}";
selectionColor = "#${config.style.color.selection}";
styleSystemControls = true;
lightColorScheme = "Default";
darkColorScheme = "Default";
immediateModify = true;
};
automation = {
enabled = false;
mode = "";
behavior = "OnOff";
};
time = {
activation = "18:00";
deactivation = "9:00";
};
location = {
latitude = null;
longitude = null;
};
};
};
# NOTE: `firefox-esr` edition is required to change search engines.
SearchEngines = {
Add = searchEngines;
Default = "SearX";
PreventInstalls = true;
Remove = [
"Bing"
"DuckDuckGo"
"Google"
"Wikipedia (en)"
];
};
FirefoxHome = {
Search = false;
TopSites = false;
SponsoredTopSites = false;
Highlights = false;
Pocket = false;
Snippets = false;
Locked = true;
};
FirefoxSuggest = {
WebSuggestions = false;
SponsoredSuggestions = false;
ImproveSuggest = false;
Locked = true;
};
PDFjs = {
Enabled = false;
EnablePermissions = false;
};
Handlers = {
mimeTypes."application/pdf".action = "saveToDisk";
};
extensions = {
pdf = {
action = "useHelperApp";
ask = true;
handlers = [
{
name = "GNOME Document Viewer";
path = "${pkgs.evince}/bin/evince";
}
];
};
};
Permissions = {
Camera = {
Allow = [ ];
Block = [ ];
BlockNewRequests = false;
Locked = false;
};
Microphome = {
Allow = [ ];
Block = [ ];
BlockNewRequests = false;
Locked = false;
};
Location = {
Allow = [ ];
Block = [ ];
BlockNewRequests = true;
Locked = true;
};
Autoplay = {
Allow = [ ];
Block = [ ];
Default = "block-audio-video"; # allow-audio-video | block-audio | block-audio-video
Locked = true;
};
};
PictureInPicture = {
Enabled = false;
Locked = false;
};
SanitizeOnShutdown = {
Cache = true;
Cookies = false;
Downloads = false;
FormData = true;
History = false;
Sessions = false;
SiteSettings = false;
OfflineApps = true;
Locked = true;
};
UserMessaging = {
ExtensionRecommendations = false;
FeatureRecommendations = false;
MoreFromMozilla = false;
SkipOnboarding = true;
UrlbarInterventions = false;
WhatsNew = false;
Locked = true;
};
};
}