diff --git a/flake.lock b/flake.lock index dfd8cc18..ce5413c9 100644 --- a/flake.lock +++ b/flake.lock @@ -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, diff --git a/flake.nix b/flake.nix index 393afbf0..2698d1da 100644 --- a/flake.nix +++ b/flake.nix @@ -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 ]; diff --git a/users/profiles/firefox/default.nix b/users/profiles/firefox/default.nix index 6bc0d614..709dde8d 100644 --- a/users/profiles/firefox/default.nix +++ b/users/profiles/firefox/default.nix @@ -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 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 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; + }; }; + }; } diff --git a/users/profiles/firefox/treestyletab.css b/users/profiles/firefox/treestyletab.css new file mode 100644 index 00000000..d59ac6a6 --- /dev/null +++ b/users/profiles/firefox/treestyletab.css @@ -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; +} + +