fix up firefox to be more declarative

This commit is contained in:
Anish Lakhwara 2022-09-21 01:32:23 +10:00
parent ada5e5ad6a
commit 96c329918d
4 changed files with 435 additions and 137 deletions

View file

@ -31,11 +31,11 @@
]
},
"locked": {
"lastModified": 1657514455,
"narHash": "sha256-rYrofeCRgZyiZMuuwbwbM7ZLNTj04S0l4G/1ZeH0gqI=",
"lastModified": 1663665682,
"narHash": "sha256-YB+vmQB3N9RyeshHAO4GjIFebA7NPY2jlkdvGGZtM64=",
"ref": "main",
"rev": "50f7ee786d9704ecfd67a9fe2eb8f338fc983dc1",
"revCount": 64,
"rev": "36bda6965ab2e1a206f8c2b7a74f3b022c873662",
"revCount": 65,
"type": "git",
"url": "ssh://gitea@git.sealight.xyz/aynish/basant"
},
@ -663,33 +663,19 @@
"type": "github"
}
},
"nixpkgs_5": {
"locked": {
"lastModified": 1663489134,
"narHash": "sha256-YqM45LLzvgBNbvIK0QQa8cY8omKS0+bRUg4JWzEj14w=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "830e228898ac7a66eeafb169dd3df0dc427674d4",
"type": "github"
},
"original": {
"owner": "nixos",
"repo": "nixpkgs",
"type": "github"
}
},
"nur": {
"locked": {
"lastModified": 1663393873,
"narHash": "sha256-DtumXhmyA9gpu0+qa5fwvU93qKqtx0AtUFvfazPzz1Y=",
"lastModified": 1663680695,
"narHash": "sha256-sVdmg21MzIS0e+mCyIEInivIodJNYKVicZ3WJr907XI=",
"owner": "nix-community",
"repo": "NUR",
"rev": "ecf7442437f53f0f689df6897c10a7f9a4f6b9ae",
"rev": "a22f443201174496ce6edb237a2e9596591cd542",
"type": "github"
},
"original": {
"id": "nur",
"type": "indirect"
"owner": "nix-community",
"repo": "NUR",
"type": "github"
}
},
"nvfetcher": {
@ -885,7 +871,10 @@
},
"vimwiki-cli": {
"inputs": {
"nixpkgs": "nixpkgs_5"
"nixpkgs": [
"poonam",
"nixpkgs"
]
},
"locked": {
"lastModified": 1662448409,

View file

@ -20,6 +20,7 @@
nvfetcher.inputs.nixpkgs.follows = "nixos";
naersk.url = "github:nmattia/naersk";
naersk.inputs.nixpkgs.follows = "nixos";
nur.url = "github:nix-community/NUR";
# Tools
agenix.url = "github:ryantm/agenix";
agenix.inputs.nixpkgs.follows = "nixos";
@ -147,7 +148,7 @@
};
suites = with profiles; rec {
base = [ core users.root users.anish ];
sealight = [ base server metrics gitea sealight-website backup rss-bridge mount-mossnet matrix ]; #
sealight = [ base server metrics gitea sealight-website backup rss-bridge mount-mossnet ]; # matrix
mossnet = [ base server taskd shaarli dns monitoring nfs rss-bridge gonic headphones radicale seafile syncthing dhyan calibre wallabag ]; # hpi sync.music
cube = [ base site server ];
graphical = [ base bluetooth music sync.kitaab sync.website sync.cal wifi desktop mimetypes ];

View file

@ -1,120 +1,150 @@
{ pkgs, ... }:
{
# Imperative steps:
# - Enable & configure plugins
# - Run :colourscheme --url https://raw.githubusercontent.com/lonepie/dracula-tridactyl/main/dracula.css dracula for tridactyl theme
# - Import css for tree style tabs from treestyletabs.css
programs.browserpass.enable = true;
programs.browserpass.browsers = [ "firefox" ];
#env.XDG_DEXSTOP_DIR = "$HOME/";
programs.firefox.profiles.anish.userChrome = (builtins.readFile ./userChrome.css);
programs.firefox.profiles.anish.settings = {
"devtools.theme" = "dark";
# Enable userContent.css and userChrome.css for our theme modules
"toolkit.legacyUserProfileCustomizations.stylesheets" = true;
# Stop creating ~/Downloads!
"browser.download.dir" = "/home/anish/downloads"; # TODO Don't hardcode this!
# Don't use the built-in password manager; a nixos user is more likely
# using an external one (you are using one, right?).
#"signon.rememberSignons" = false;
# Do not check if Firefox is the default browser
"browser.shell.checkDefaultBrowser" = false;
# Disable the "new tab page" feature and show a blank tab instead
# https://wiki.mozilla.org/Privacy/Reviews/New_Tab
# https://support.mozilla.org/en-US/kb/new-tab-page-show-hide-and-customize-top-sites#w_how-do-i-turn-the-new-tab-page-off
"browser.newtabpage.enabled" = false;
"browser.newtab.url" = "about:blank";
# Disable Activity Stream
# https://wiki.mozilla.org/Firefox/Activity_Stream
"browser.newtabpage.activity-stream.enabled" = false;
# Disable new tab tile ads & preload
# http://www.thewindowsclub.com/disable-remove-ad-tiles-from-firefox
# http://forums.mozillazine.org/viewtopic.php?p=13876331#p13876331
# https://wiki.mozilla.org/Tiles/Technical_Documentation#Ping
# https://gecko.readthedocs.org/en/latest/browser/browser/DirectoryLinksProvider.html#browser-newtabpage-directory-source
# https://gecko.readthedocs.org/en/latest/browser/browser/DirectoryLinksProvider.html#browser-newtabpage-directory-ping
"browser.newtabpage.enhanced" = false;
"browser.newtab.preload" = false;
"browser.newtabpage.directory.ping" = "";
"browser.newtabpage.directory.source" = "data:text/plain,{}";
# Disable some not so useful functionality.
"media.videocontrols.picture-in-picture.video-toggle.enabled" = false;
"extensions.htmlaboutaddons.recommendations.enabled" = false;
"extensions.htmlaboutaddons.discover.enabled" = false;
"extensions.pocket.enabled" = false;
"app.normandy.enabled" = false;
"app.normandy.api_url" = "";
"extensions.shield-recipe-client.enabled" = false;
"app.shield.optoutstudies.enabled" = false;
# Disable battery API
# https://developer.mozilla.org/en-US/docs/Web/API/BatteryManager
# https://bugzilla.mozilla.org/show_bug.cgi?id=1313580
"dom.battery.enabled" = false;
# Disable "beacon" asynchronous HTTP transfers (used for analytics)
# https://developer.mozilla.org/en-US/docs/Web/API/navigator.sendBeacon
"beacon.enabled" = false;
# Disable pinging URIs specified in HTML <a> ping= attributes
# http://kb.mozillazine.org/Browser.send_pings
"browser.send_pings" = false;
# Disable gamepad API to prevent USB device enumeration
# https://www.w3.org/TR/gamepad/
# https://trac.torproject.org/projects/tor/ticket/13023
"dom.gamepad.enabled" = false;
# Don't try to guess domain names when entering an invalid domain name in URL bar
# http://www-archive.mozilla.org/docs/end-user/domain-guessing.html
"browser.fixup.alternate.enabled" = false;
# Disable telemetry
# https://wiki.mozilla.org/Platform/Features/Telemetry
# https://wiki.mozilla.org/Privacy/Reviews/Telemetry
# https://wiki.mozilla.org/Telemetry
# https://www.mozilla.org/en-US/legal/privacy/firefox.html#telemetry
# https://support.mozilla.org/t5/Firefox-crashes/Mozilla-Crash-Reporter/ta-p/1715
# https://wiki.mozilla.org/Security/Reviews/Firefox6/ReviewNotes/telemetry
# https://gecko.readthedocs.io/en/latest/browser/experiments/experiments/manifest.html
# https://wiki.mozilla.org/Telemetry/Experiments
# https://support.mozilla.org/en-US/questions/1197144
# https://firefox-source-docs.mozilla.org/toolkit/components/telemetry/telemetry/internals/preferences.html#id1
"toolkit.telemetry.enabled" = false;
"toolkit.telemetry.unified" = false;
"toolkit.telemetry.archive.enabled" = false;
"experiments.supported" = false;
"experiments.enabled" = false;
"experiments.manifest.uri" = "";
# Disable health reports (basically more telemetry)
# https://support.mozilla.org/en-US/kb/firefox-health-report-understand-your-browser-perf
# https://gecko.readthedocs.org/en/latest/toolkit/components/telemetry/telemetry/preferences.html
"datareporting.healthreport.uploadEnabled" = false;
"datareporting.healthreport.service.enabled" = false;
"datareporting.policy.dataSubmissionEnabled" = false;
# Pipewire optimizations
# https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Performance-tuning#firefox
"reader.parse-on-load.enabled" = false;
"media.webspeech.synth.enabled" = false;
};
programs.firefox = {
enable = true;
extensions = with pkgs.nur.repos.rycee.firefox-addons; [
ublock-origin
wallabagger
tree-style-tab
tridactyl
promnesia
(buildFirefoxXpiAddon {
pname = "shaarli";
version = "2.0.0";
addonId = "{f59a7028-b71f-490d-844e-f781a11ffbc7}";
url = "https://addons.mozilla.org/firefox/downloads/file/815126/shaarli-2.0.0.xpi";
sha256 = "W/OpvOfMclibP6LeG573/DlMs0p8fF0efyd+i8Sudgg=";
meta = { };
})
(buildFirefoxXpiAddon {
pname = "grasp";
version = "0.6.6";
addonId = "{37e42980-a7c9-473c-96d5-13f18e0efc74}";
url = "https://addons.mozilla.org/firefox/downloads/file/3502186/grasp-0.6.6.xpi";
sha256 = "L4JhT29MeA34nHIlB8FtCU7hrpbWljZZBusx12uxblE=";
meta = { };
})
];
profiles.anish = {
id = 0;
isDefault = true;
name = "anish";
userChrome = (builtins.readFile ./userChrome.css);
settings = {
"devtools.theme" = "dark";
# Enable userContent.css and userChrome.css for our theme modules
"toolkit.legacyUserProfileCustomizations.stylesheets" = true;
# Stop creating ~/Downloads!
"browser.download.dir" = "/home/anish/downloads"; # TODO Don't hardcode this!
# Don't use the built-in password manager; a nixos user is more likely
# using an external one (you are using one, right?).
#"signon.rememberSignons" = false;
# Do not check if Firefox is the default browser
"browser.shell.checkDefaultBrowser" = false;
# Disable the "new tab page" feature and show a blank tab instead
# https://wiki.mozilla.org/Privacy/Reviews/New_Tab
# https://support.mozilla.org/en-US/kb/new-tab-page-show-hide-and-customize-top-sites#w_how-do-i-turn-the-new-tab-page-off
"browser.newtabpage.enabled" = false;
"browser.newtab.url" = "about:blank";
# Disable Activity Stream
# https://wiki.mozilla.org/Firefox/Activity_Stream
"browser.newtabpage.activity-stream.enabled" = false;
# Disable new tab tile ads & preload
# http://www.thewindowsclub.com/disable-remove-ad-tiles-from-firefox
# http://forums.mozillazine.org/viewtopic.php?p=13876331#p13876331
# https://wiki.mozilla.org/Tiles/Technical_Documentation#Ping
# https://gecko.readthedocs.org/en/latest/browser/browser/DirectoryLinksProvider.html#browser-newtabpage-directory-source
# https://gecko.readthedocs.org/en/latest/browser/browser/DirectoryLinksProvider.html#browser-newtabpage-directory-ping
"browser.newtabpage.enhanced" = false;
"browser.newtab.preload" = false;
"browser.newtabpage.directory.ping" = "";
"browser.newtabpage.directory.source" = "data:text/plain,{}";
# Disable some not so useful functionality.
"media.videocontrols.picture-in-picture.video-toggle.enabled" = false;
"extensions.htmlaboutaddons.recommendations.enabled" = false;
"extensions.htmlaboutaddons.discover.enabled" = false;
"extensions.pocket.enabled" = false;
"browser.newtabpage.activity-stream.section.highlights.includePocket" = false;
"extensions.pocket.api" = "";
"extensions.pocket.oAuthConsumerKey" = "";
"extensions.pocket.showHome" = false;
"extensions.pocket.site" = "";
"app.normandy.enabled" = false;
"app.normandy.api_url" = "";
"extensions.shield-recipe-client.enabled" = false;
"app.shield.optoutstudies.enabled" = false;
# Disable battery API
# https://developer.mozilla.org/en-US/docs/Web/API/BatteryManager
# https://bugzilla.mozilla.org/show_bug.cgi?id=1313580
"dom.battery.enabled" = false;
# Disable "beacon" asynchronous HTTP transfers (used for analytics)
# https://developer.mozilla.org/en-US/docs/Web/API/navigator.sendBeacon
"beacon.enabled" = false;
# Disable pinging URIs specified in HTML <a> ping= attributes
# http://kb.mozillazine.org/Browser.send_pings
"browser.send_pings" = false;
# Disable gamepad API to prevent USB device enumeration
# https://www.w3.org/TR/gamepad/
# https://trac.torproject.org/projects/tor/ticket/13023
"dom.gamepad.enabled" = false;
# Don't try to guess domain names when entering an invalid domain name in URL bar
# http://www-archive.mozilla.org/docs/end-user/domain-guessing.html
"browser.fixup.alternate.enabled" = false;
# Disable telemetry
# https://wiki.mozilla.org/Platform/Features/Telemetry
# https://wiki.mozilla.org/Privacy/Reviews/Telemetry
# https://wiki.mozilla.org/Telemetry
# https://www.mozilla.org/en-US/legal/privacy/firefox.html#telemetry
# https://support.mozilla.org/t5/Firefox-crashes/Mozilla-Crash-Reporter/ta-p/1715
# https://wiki.mozilla.org/Security/Reviews/Firefox6/ReviewNotes/telemetry
# https://gecko.readthedocs.io/en/latest/browser/experiments/experiments/manifest.html
# https://wiki.mozilla.org/Telemetry/Experiments
# https://support.mozilla.org/en-US/questions/1197144
# https://firefox-source-docs.mozilla.org/toolkit/components/telemetry/telemetry/internals/preferences.html#id1
"toolkit.telemetry.enabled" = false;
"toolkit.telemetry.unified" = false;
"toolkit.telemetry.archive.enabled" = false;
"experiments.supported" = false;
"experiments.enabled" = false;
"experiments.manifest.uri" = "";
"privacy.donottrackheader.enabled" = true;
"privacy.trackingprotection.enabled" = true;
"privacy.trackingprotection.socialtracking.enabled" = true;
"privacy.partition.network_state.ocsp_cache" = true;
# Disable health reports (basically more telemetry)
# https://support.mozilla.org/en-US/kb/firefox-health-report-understand-your-browser-perf
# https://gecko.readthedocs.org/en/latest/toolkit/components/telemetry/telemetry/preferences.html
"browser.newtabpage.activity-stream.feeds.telemetry" = false;
"browser.newtabpage.activity-stream.telemetry" = false;
"browser.ping-centre.telemetry" = false;
"toolkit.telemetry.bhrPing.enabled" = false;
"toolkit.telemetry.firstShutdownPing.enabled" = false;
"toolkit.telemetry.hybridContent.enabled" = false;
"toolkit.telemetry.newProfilePing.enabled" = false;
"toolkit.telemetry.reportingpolicy.firstRun" = false;
"toolkit.telemetry.shutdownPingSender.enabled" = false;
"toolkit.telemetry.updatePing.enabled" = false;
# Override?
home.packages = with pkgs; [
firefox-bin
# TODO something changed in 22.05, needs to be a list?
# (makeDesktopItem {
# name = "firefox-private";
# desktopName = "Firefox (Private)";
# genericName = "Open a private Firefox window";
# icon = "firefox";
# exec = "${firefox-bin}/bin/firefox --private-window";
# categories = "Network";
# })
];
home.file = let cfgPath = ".mozilla/firefox"; in
{
"${cfgPath}/profiles.ini".text = ''
[Profile0]
Name=default
IsRelative=1
Path=anish.default
Default=1
[General]
StartWithLastProfile=1
Version=2
'';
"${cfgPath}/anish.default/chrome/userChrome.css".source = ./userChrome.css;
# As well as Firefox 'experiments'
"experiments.activeExperiment" = false;
"network.allow-experiments" = false;
"datareporting.healthreport.uploadEnabled" = false;
"datareporting.healthreport.service.enabled" = false;
"datareporting.policy.dataSubmissionEnabled" = false;
# Pipewire optimizations
# https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Performance-tuning#firefox
"reader.parse-on-load.enabled" = false;
"media.webspeech.synth.enabled" = false;
};
};
};
}

View file

@ -0,0 +1,278 @@
:root{
--dark-0: #1A1E28;
--dark-base: #1F2430;
--dark-1: #2A3141;
--dark-2: #323A4E;
--dark-3: #424D67;
--dark-4: #4A5673;
--light-0: #E8E7E3;
--light-base: #CCCAC2;
--light-1: #C3C0B7;
--light-2: #B9B7AC;
--light-3: #B0ADA0;
--light-4: #A7A395;
--accent: #FFCC66;
--yellow: #695380;
--green: #D5FF80;
--red: #f28779;
--extension-icon-mask: grayscale(85%) invert(30%) sepia(13%) saturate(1019%) hue-rotate(184deg) brightness(95%) contrast(96%);
}
:root.incognito{
--dark-0: #1C0E34;
--dark-base: #20103c;
--dark-1: #2F1D4E;
--dark-2: #38225D;
--dark-3: #4A2D7B;
--dark-4: #53338A;
--light-0: #CC6B9C;
--light-base: #B9407C;
--light-1: #AB3B73;
--light-2: #9C3569;
--light-3: #8D305E;
--light-4: #7D2B54;
--accent: #e9207e;
--yellow: #C9B336;
--green: #36C987;
--red: #C9365D;
--extension-icon-mask: grayscale(85%) invert(17%) sepia(33%) saturate(3632%) hue-rotate(245deg) brightness(92%) contrast(90%);
}
:root{
--tab-border-radius: 7px; /* border radius of tabs */
--animation-duration: 200ms; /* duration of different animations [0s: turn all animations off] */
--spacing: 14px; /* spacing between tabs. [<15px: compact tabs] */
--distance-from-edge: 10px; /* distance between tabs, and left-right edges of sidebar*/
--hover-text-spacing: 0.1; /* should be left alone. with hover sidebar, if text is visible in collapsed status, increase this */
--ease-in: cubic-bezier(0.32, 0, 0.67, 0);
--ease-out: cubic-bezier(0.22, 1, 0.36, 1);
--ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);
--collapsed-width: 60px;
}
/************UNCUSTOMIZED CSS************/
#tabbar-container #tabbar{
margin-bottom: 15px !important;
}
:root, #background{
background: var(--dark-base) !important;
}
#all-tabs{
margin: 10px var(--distance-from-edge);
}
tab-item:not(.collapsed) {
margin-top: var(--spacing);
border-radius: var(--tab-border-radius);
border: none !important;
padding-top: 9px;
padding-bottom: 10px;
}
tab-item.collapsed{
height: 0;
margin: 0 !important;
padding: 0 !important;
}
tab-item:not([data-level="0"]):not(.pinned){
border-left: dashed 2px var(--light-4) !important;
border-top-left-radius: 0;
border-bottom-left-radius: 0;
margin-top: calc(var(--spacing)/2);
}
tab-item tab-favicon{
left: 0;
filter: var(--extension-icon-mask);
transition: left calc(var(--animation-duration)*2) var(--ease-out);
}
.highlighter {
display: none !important;
}
tab-item .label {
color: var(--light-2) !important;
padding-bottom: 2px;
}
tab-item .twisty:before{
background: var(--light-3) !important;
}
tab-item.active .label {
color: var(--light-0) !important;
}
tab-item.active {
background: var(--dark-3) !important;
}
tab-item:not(.active).highlighted{
background: var(--dark-1) !important;
}
tab-item:not(active):hover {
background: var(--dark-1);
}
tab-item:hover tab-closebox {
right: 10px;
opacity: 1;
}
tab-item:not(pinned) tab-closebox {
position: absolute;
margin-top: 2px;
height: 20px;
width: 20px;
right: -30px;
border-radius: 50%;
padding-top: 2px;
padding-left: 2px;
background: var(--light-4);
transition : all var(--animation-duration) var(--ease-out);
}
.sound-button:after {
background: var(--light-3) !important;
margin-top: 2px;
}
.counter{
color: var(--light-4) !important;
background: var(--dark-2) !important;
border-radius: 7px;
margin: 2px 2px 0px 0px;
padding: 0 4px;
padding-bottom: 2px;
order: -2 !important;
}
.counter:before, .counter:after{ content: ""}
/********LEFT CONTENT TAB(static)*************/
:root.left tab-item{
padding-left: 0;
}
:root.left tab-item tab-favicon {
transform: scale(120%);
margin-right: 5px;
left: 80%;
}
:root.left tab-item .label {
transform: translateX(10px);
right: 28%;
}
:root.left tab-item[data-child-ids] .twisty{
margin-right: 5px;
}
/********RIGHT CONTENT TAB(hover)*************/
:root.right tab-item .label {
margin-left: 10px;
margin-right: calc(var(--collapsed-width)*0.3) !important;
}
:root.right tab-item:not(pinned):hover tab-closebox{
right: calc(var(--collapsed-width)*0.3);
}
:root.right tab-item:not([data-level="0"]):not(.pinned){
border: none !important;
border-right: dashed 2px var(--light-4) !important;
border-radius: var(--tab-border-radius);
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
:root.right tab-item.active:not([data-level="0"]):not(.pinned){
margin-right: 5px !important;
}
:root.right .sound-button{
order: -1 !important;
}
:root.right tab-item.active.pinned {
position: relative;
left: 190px !important;
}
:root.right tab-item.active.pinned tab-favicon {
transform: scale(130%) !important;
margin-left: 7px;
}
/***********************************/
.tab
.favicon
.favicon-default::before {
filter: var(--extension-icon-mask); // change for light theme
}
.tab[data-current-favicon-uri="undefined"]
.favicon
.favicon-default::before{
background: url("chrome://branding/content/identity-icons-brand.svg") no-repeat center !important;
mask: none !important;
}
/***********NEW TAB BUTTON**********/
.newtab-button-box {
border: none !important;
margin: 0 50px;
}
.newtab-button {
border: none !important;
border-radius: 8px;
padding: 8px 0 !important;
margin: 0 5px;
}
.newtab-button::before{
background: var(--light-3) !important;
}
.newtab-action-selector-anchor {
border: none !important;
margin-right: 10px;
margin-top: 3px;
}
.newtab-button:hover {
background: var(--dark-1);
}
/**********PINNED TAB***************/
tab-item.pinned {
margin: 5px !important;
padding: 5px !important;
transition : all 0.1s var(--ease-out);
}
/***********************************/
#all-tabs {
border: none !important;
}