diff --git a/.deepsource.toml b/.deepsource.toml index 8166514..c426d58 100644 --- a/.deepsource.toml +++ b/.deepsource.toml @@ -11,6 +11,3 @@ name = "javascript" "browser", "nodejs" ] - -[[transformers]] -name = "prettier" \ No newline at end of file diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..dc1e25a --- /dev/null +++ b/.editorconfig @@ -0,0 +1,22 @@ +# + +# top-most EditorConfig file +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +indent_size=4 + +[*.css] +indent_style = space +indent_size = 2 + +[*.js] +indent_style = tab +indent_size = 4 + +[{package.json,.travis.yml,*.{yaml,yml}}] +indent_style = space +indent_size = 4 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..98c1d40 --- /dev/null +++ b/.gitignore @@ -0,0 +1,339 @@ +# Created by https://www.toptal.com/developers/gitignore/api/visualstudiocode +# Edit at https://www.toptal.com/developers/gitignore?templates=visualstudiocode + +### VisualStudioCode ### +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +!.vscode/*.code-snippets + +# Local History for Visual Studio Code +.history/ + +# Built Visual Studio Code Extensions +*.vsix + +### VisualStudioCode Patch ### +# Ignore all local history of files +.history +.ionide + +# End of https://www.toptal.com/developers/gitignore/api/visualstudiocode + +# Created by https://www.toptal.com/developers/gitignore/api/linux +# Edit at https://www.toptal.com/developers/gitignore?templates=linux + +### Linux ### +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* + +# End of https://www.toptal.com/developers/gitignore/api/linux + + +# Created by https://www.toptal.com/developers/gitignore/api/git +# Edit at https://www.toptal.com/developers/gitignore?templates=git + +### Git ### +# Created by git for backups. To disable backups in Git: +# $ git config --global mergetool.keepBackup false +*.orig + +# Created by git when using merge tools for conflicts +*.BACKUP.* +*.BASE.* +*.LOCAL.* +*.REMOTE.* +*_BACKUP_*.txt +*_BASE_*.txt +*_LOCAL_*.txt +*_REMOTE_*.txt + +# End of https://www.toptal.com/developers/gitignore/api/git + + +# Created by https://www.toptal.com/developers/gitignore/api/emacs +# Edit at https://www.toptal.com/developers/gitignore?templates=emacs + +### Emacs ### +# -*- mode: gitignore; -*- +*~ +\#*\# +/.emacs.desktop +/.emacs.desktop.lock +*.elc +auto-save-list +tramp +.\#* + +# Org-mode +.org-id-locations +*_archive + +# flymake-mode +*_flymake.* + +# eshell files +/eshell/history +/eshell/lastdir + +# elpa packages +/elpa/ + +# reftex files +*.rel + +# AUCTeX auto folder +/auto/ + +# cask packages +.cask/ +dist/ + +# Flycheck +flycheck_*.el + +# server auth directory +/server/ + +# projectiles files +.projectile + +# directory configuration +.dir-locals.el + +# network security +/network-security.data + + +# End of https://www.toptal.com/developers/gitignore/api/emacs + + +# Created by https://www.toptal.com/developers/gitignore/api/vim +# Edit at https://www.toptal.com/developers/gitignore?templates=vim + +### Vim ### +# Swap +[._]*.s[a-v][a-z] +!*.svg # comment out if you don't need vector files +[._]*.sw[a-p] +[._]s[a-rt-v][a-z] +[._]ss[a-gi-z] +[._]sw[a-p] + +# Session +Session.vim +Sessionx.vim + +# Temporary +.netrwhist +*~ +# Auto-generated tag files +tags +# Persistent undo +[._]*.un~ + +# End of https://www.toptal.com/developers/gitignore/api/vim + + +# Created by https://www.toptal.com/developers/gitignore/api/macos +# Edit at https://www.toptal.com/developers/gitignore?templates=macos + +### macOS ### +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### macOS Patch ### +# iCloud generated files +*.icloud + +# End of https://www.toptal.com/developers/gitignore/api/macos + + +# Created by https://www.toptal.com/developers/gitignore/api/windows +# Edit at https://www.toptal.com/developers/gitignore?templates=windows + +### Windows ### +# Windows thumbnail cache files +Thumbs.db +Thumbs.db:encryptable +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# End of https://www.toptal.com/developers/gitignore/api/windows + + +# Created by https://www.toptal.com/developers/gitignore/api/intellij +# Edit at https://www.toptal.com/developers/gitignore?templates=intellij + +### Intellij ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# AWS User-specific +.idea/**/aws.xml + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# SonarLint plugin +.idea/sonarlint/ + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### Intellij Patch ### +# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 + +# *.iml +# modules.xml +# .idea/misc.xml +# *.ipr + +# Sonarlint plugin +# https://plugins.jetbrains.com/plugin/7973-sonarlint +.idea/**/sonarlint/ + +# SonarQube Plugin +# https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin +.idea/**/sonarIssues.xml + +# Markdown Navigator plugin +# https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced +.idea/**/markdown-navigator.xml +.idea/**/markdown-navigator-enh.xml +.idea/**/markdown-navigator/ + +# Cache file creation bug +# See https://youtrack.jetbrains.com/issue/JBR-2257 +.idea/$ + +# CodeStream plugin +# https://plugins.jetbrains.com/plugin/12206-codestream +.idea/codestream.xml + +# Azure Toolkit for IntelliJ plugin +# https://plugins.jetbrains.com/plugin/8053-azure-toolkit-for-intellij +.idea/**/azureSettings.xml + +# End of https://www.toptal.com/developers/gitignore/api/intellij + diff --git a/.gitpod.yml b/.gitpod.yml new file mode 100644 index 0000000..ce3d840 --- /dev/null +++ b/.gitpod.yml @@ -0,0 +1,63 @@ +image: gitpod/workspace-full-vnc + +# TODO: Install and configure sidebery +tasks: + - name: Setup Firefox configuration + init: | + sudo install -d -m 0755 /etc/apt/keyrings + wget -q https://packages.mozilla.org/apt/repo-signing-key.gpg -O- | sudo tee /etc/apt/keyrings/packages.mozilla.org.asc > /dev/null + # Verify the key fingerprint + gpg -n -q --import --import-options import-show /etc/apt/keyrings/packages.mozilla.org.asc | awk '/pub/{getline; gsub(/^ +| +$/,""); if($0 == "35BAA0B33E9EB396F59CA838C0BA5CE6DC6315A3") print "\nThe key fingerprint matches ("$0").\n"; else print "\nVerification failed: the fingerprint ("$0") does not match the expected one.\n"}' + echo "deb [signed-by=/etc/apt/keyrings/packages.mozilla.org.asc] https://packages.mozilla.org/apt mozilla main" | sudo tee /etc/apt/sources.list.d/mozilla.list > /dev/null + echo ' + Package: * + Pin: origin packages.mozilla.org + Pin-Priority: 1000 + ' | sudo tee /etc/apt/preferences.d/mozilla + sudo apt-get update && sudo apt-get install firefox -y + + # Launch Firefox once to create the profile directory + firefox & sleep 5 && pkill firefox + + PROFILE_DIR=$(find ~/.mozilla/firefox -maxdepth 1 -name "*.default*" | head -n 1) + + mkdir -p "$PROFILE_DIR/chrome" + command: | + # Use dynamically detected profile directory + PROFILE_DIR=$(find ~/.mozilla/firefox -maxdepth 1 -name "*.default*" | head -n 1) + + ln -sfn /workspace/firefox-config/user.js "$PROFILE_DIR/user.js" + + for item in /workspace/firefox-config/chrome/*; do + ln -sfn "$item" "$PROFILE_DIR/chrome" + done + +ports: + - name: VNC + description: Full GUI Virtual Desktop + port: 6080 + onOpen: open-browser +vscode: + extensions: + - ecmel.vscode-html-css + - Gydunhn.javascript-essentials + - castrogusttavo.min-theme + - castrogusttavo.symbols + - antfu.icons-carbon + - gruntfuggly.todo-tree + - mhutchie.git-graph + - donjayamanne.githistory + - timonwong.shellcheck + - foxundermoon.shell-format + - tyriar.sort-lines + - yzhang.markdown-all-in-one + - davidanson.vscode-markdownlint + - naumovs.color-highlight + - oderwat.indent-rainbow + - tamasfe.even-better-toml + - idleberg.icon-fonts + - anseki.vscode-color + - aaron-bond.better-comments + - ibm.output-colorizer + - chouzz.vscode-better-align + - esbenp.prettier-vscode diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 4aab943..cef5d58 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,15 +1,15 @@ repos: - - repo: https://github.com/sirwart/ripsecrets - rev: v0.1.8 - hooks: - - id: ripsecrets + - repo: https://github.com/sirwart/ripsecrets + rev: v0.1.8 + hooks: + - id: ripsecrets - - repo: https://github.com/trufflesecurity/trufflehog - rev: v3.81.5 - hooks: - - id: trufflehog + - repo: https://github.com/trufflesecurity/trufflehog + rev: v3.83.7 + hooks: + - id: trufflehog - - repo: https://github.com/gitleaks/gitleaks - rev: v8.18.4 - hooks: - - id: gitleaks + - repo: https://github.com/gitleaks/gitleaks + rev: v8.21.2 + hooks: + - id: gitleaks diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 5642282..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "workbench.colorCustomizations": {} -} \ No newline at end of file diff --git a/addons/sidebery/sidebery-settings-data.json b/addons/sidebery/sidebery-settings-data.json index f607229..1527b13 100644 --- a/addons/sidebery/sidebery-settings-data.json +++ b/addons/sidebery/sidebery-settings-data.json @@ -1,518 +1,638 @@ { - "containers": { - "firefox-container-7": { - "id": "firefox-container-7", - "cookieStoreId": "firefox-container-7", - "name": "Work", - "icon": "briefcase", - "color": "turquoise", - "colorCode": "#37adff", - "proxified": false, - "proxy": null, - "reopenRulesActive": false, - "reopenRules": [], - "userAgentActive": false, - "userAgent": "" + "containers": { + "firefox-container-7": { + "id": "firefox-container-7", + "cookieStoreId": "firefox-container-7", + "name": "Work", + "icon": "briefcase", + "color": "turquoise", + "colorCode": "#37adff", + "proxified": false, + "proxy": null, + "reopenRulesActive": false, + "reopenRules": [], + "userAgentActive": false, + "userAgent": "" + }, + "firefox-container-8": { + "id": "firefox-container-8", + "cookieStoreId": "firefox-container-8", + "name": "Entertainment", + "icon": "chill", + "color": "purple", + "colorCode": "#37adff", + "proxified": false, + "proxy": null, + "reopenRulesActive": false, + "reopenRules": [], + "userAgentActive": false, + "userAgent": "" + }, + "firefox-container-9": { + "id": "firefox-container-9", + "cookieStoreId": "firefox-container-9", + "name": "Study", + "icon": "vacation", + "color": "turquoise", + "colorCode": "#37adff", + "proxified": false, + "proxy": null, + "reopenRulesActive": false, + "reopenRules": [], + "userAgentActive": false, + "userAgent": "" + }, + "firefox-container-10": { + "id": "firefox-container-10", + "cookieStoreId": "firefox-container-10", + "name": "Development", + "icon": "briefcase", + "color": "blue", + "colorCode": "#37adff", + "proxified": false, + "proxy": null, + "reopenRulesActive": false, + "reopenRules": [], + "userAgentActive": false, + "userAgent": "" + }, + "firefox-container-11": { + "id": "firefox-container-11", + "cookieStoreId": "firefox-container-11", + "name": "NSFW", + "icon": "chill", + "color": "orange", + "colorCode": "#37adff", + "proxified": false, + "proxy": null, + "reopenRulesActive": false, + "reopenRules": [], + "userAgentActive": false, + "userAgent": "" + }, + "firefox-container-12": { + "id": "firefox-container-12", + "cookieStoreId": "firefox-container-12", + "name": "Facebook", + "icon": "fence", + "color": "toolbar", + "colorCode": "#37adff", + "proxified": false, + "proxy": null, + "reopenRulesActive": false, + "reopenRules": [], + "userAgentActive": false, + "userAgent": "" + }, + "firefox-container-14": { + "id": "firefox-container-14", + "cookieStoreId": "firefox-container-14", + "name": "Amazon", + "icon": "briefcase", + "color": "orange", + "colorCode": "#37adff", + "proxified": false, + "proxy": null, + "reopenRulesActive": false, + "reopenRules": [], + "userAgentActive": false, + "userAgent": "" + }, + "firefox-container-15": { + "id": "firefox-container-15", + "cookieStoreId": "firefox-container-15", + "name": "Twitter", + "icon": "chill", + "color": "blue", + "colorCode": "#37adff", + "proxified": false, + "proxy": null, + "reopenRulesActive": false, + "reopenRules": [], + "userAgentActive": false, + "userAgent": "" + }, + "firefox-container-16": { + "id": "firefox-container-16", + "cookieStoreId": "firefox-container-16", + "name": "TikTok", + "icon": "chill", + "color": "purple", + "colorCode": "#37adff", + "proxified": false, + "proxy": null, + "reopenRulesActive": false, + "reopenRules": [], + "userAgentActive": false, + "userAgent": "" + } }, - "firefox-container-8": { - "id": "firefox-container-8", - "cookieStoreId": "firefox-container-8", - "name": "Entertainment", - "icon": "chill", - "color": "purple", - "colorCode": "#37adff", - "proxified": false, - "proxy": null, - "reopenRulesActive": false, - "reopenRules": [], - "userAgentActive": false, - "userAgent": "" - } - }, - "settings": { - "nativeScrollbars": true, - "nativeScrollbarsThin": true, - "nativeScrollbarsLeft": true, - "selWinScreenshots": true, - "updateSidebarTitle": true, - "markWindow": false, - "markWindowPreface": "[Sidebery] ", - "ctxMenuNative": true, - "ctxMenuRenderInact": true, - "ctxMenuRenderIcons": true, - "ctxMenuIgnoreContainers": "", - "navBarLayout": "horizontal", - "navBarInline": true, - "navBarSide": "left", - "hideAddBtn": false, - "hideSettingsBtn": false, - "navBtnCount": true, - "hideEmptyPanels": false, - "hideDiscardedTabPanels": false, - "navActTabsPanelLeftClickAction": "none", - "navActBookmarksPanelLeftClickAction": "none", - "navTabsPanelMidClickAction": "discard", - "navBookmarksPanelMidClickAction": "none", - "navSwitchPanelsWheel": true, - "subPanelRecentlyClosedBar": true, - "subPanelBookmarks": true, - "subPanelHistory": true, - "groupLayout": "grid", - "containersSortByName": true, - "skipEmptyPanels": false, - "dndTabAct": true, - "dndTabActDelay": 850, - "dndTabActMod": "none", - "dndExp": "pointer", - "dndExpDelay": 250, - "dndExpMod": "none", - "dndOutside": "win", - "dndActTabFromLink": true, - "dndActSearchTab": true, - "dndMoveTabs": false, - "dndMoveBookmarks": false, - "searchBarMode": "dynamic", - "searchPanelSwitch": "any", - "searchBookmarksShortcut": "", - "searchHistoryShortcut": "", - "warnOnMultiTabClose": "collapsed", - "activateLastTabOnPanelSwitching": true, - "activateLastTabOnPanelSwitchingLoadedOnly": true, - "switchPanelAfterSwitchingTab": "always", - "tabRmBtn": "hover", - "activateAfterClosing": "prev", - "activateAfterClosingStayInPanel": false, - "activateAfterClosingGlobal": false, - "activateAfterClosingNoFolded": true, - "activateAfterClosingNoDiscarded": true, - "askNewBookmarkPlace": false, - "tabsRmUndoNote": true, - "tabsUnreadMark": true, - "tabsUpdateMark": "all", - "tabsUpdateMarkFirst": true, - "tabsReloadLimit": 5, - "tabsReloadLimitNotif": true, - "showNewTabBtns": true, - "newTabBarPosition": "after_tabs", - "tabsPanelSwitchActMove": true, - "tabsPanelSwitchActMoveAuto": true, - "tabsUrlInTooltip": "full", - "newTabCtxReopen": false, - "tabWarmupOnHover": true, - "tabSwitchDelay": 0, - "moveNewTabPin": "start", - "moveNewTabParent": "last_child", - "moveNewTabParentActPanel": false, - "moveNewTab": "end", - "moveNewTabActivePin": "start", - "pinnedTabsPosition": "panel", - "pinnedTabsList": true, - "pinnedAutoGroup": true, - "pinnedNoUnload": true, - "pinnedForcedDiscard": false, - "tabsTree": true, - "groupOnOpen": true, - "tabsTreeLimit": "none", - "autoFoldTabs": false, - "autoFoldTabsExcept": "none", - "autoExpandTabs": true, - "autoExpandTabsOnNew": false, - "rmChildTabs": "none", - "tabsLvlDots": false, - "discardFolded": false, - "discardFoldedDelay": 0, - "discardFoldedDelayUnit": "sec", - "tabsTreeBookmarks": true, - "treeRmOutdent": "branch", - "autoGroupOnClose": false, - "autoGroupOnClose0Lvl": false, - "autoGroupOnCloseMouseOnly": false, - "ignoreFoldedParent": true, - "showNewGroupConf": true, - "sortGroupsFirst": true, - "colorizeTabs": true, - "colorizeTabsSrc": "container", - "colorizeTabsBranches": false, - "colorizeTabsBranchesSrc": "url", - "inheritCustomColor": true, - "previewTabs": true, - "previewTabsMode": "p", - "previewTabsPageModeFallback": "n", - "previewTabsInlineHeight": 140, - "previewTabsPopupWidth": 400, - "previewTabsSide": "right", - "previewTabsDelay": 0, - "previewTabsFollowMouse": true, - "previewTabsWinOffsetY": 0, - "previewTabsWinOffsetX": 0, - "previewTabsInPageOffsetY": -145, - "previewTabsInPageOffsetX": 216, - "previewTabsCropRight": 0, - "hideInact": false, - "hideFoldedTabs": false, - "hideFoldedParent": "none", - "nativeHighlight": true, - "warnOnMultiBookmarkDelete": "any", - "autoCloseBookmarks": false, - "autoRemoveOther": false, - "highlightOpenBookmarks": false, - "activateOpenBookmarkTab": false, - "showBookmarkLen": true, - "bookmarksRmUndoNote": true, - "loadBookmarksOnDemand": true, - "pinOpenedBookmarksFolder": true, - "oldBookmarksAfterSave": "ask", - "loadHistoryOnDemand": true, - "fontSize": "l", - "animations": true, - "animationSpeed": "norm", - "theme": "proton", - "density": "default", - "colorScheme": "ff", - "sidebarCSS": true, - "groupCSS": true, - "snapNotify": true, - "snapExcludePrivate": false, - "snapInterval": 0, - "snapIntervalUnit": "min", - "snapLimit": 0, - "snapLimitUnit": "snap", - "snapAutoExport": false, - "snapAutoExportType": "json", - "snapAutoExportPath": "Sidebery/snapshot-%Y.%M.%D-%h.%m.%s", - "snapMdFullTree": true, - "hScrollAction": "switch_act_tabs", - "onePanelSwitchPerScroll": false, - "wheelAccumulationX": true, - "wheelAccumulationY": true, - "navSwitchPanelsDelay": 0, - "scrollThroughTabs": "global", - "scrollThroughVisibleTabs": true, - "scrollThroughTabsSkipDiscarded": true, - "scrollThroughTabsExceptOverflow": false, - "scrollThroughTabsCyclic": false, - "scrollThroughTabsScrollArea": 250, - "autoMenuMultiSel": true, - "multipleMiddleClose": true, - "longClickDelay": 500, - "wheelThreshold": true, - "wheelThresholdX": 10, - "wheelThresholdY": 60, - "tabDoubleClick": "none", - "tabsSecondClickActPrev": true, - "tabsSecondClickActPrevPanelOnly": true, - "shiftSelAct": true, - "activateOnMouseUp": true, - "tabLongLeftClick": "reload", - "tabLongRightClick": "dup_child", - "tabMiddleClick": "close", - "tabMiddleClickCtrl": "discard", - "tabMiddleClickShift": "duplicate", - "tabCloseMiddleClick": "discard", - "tabsPanelLeftClickAction": "expand", - "tabsPanelDoubleClickAction": "tab", - "tabsPanelRightClickAction": "menu", - "tabsPanelMiddleClickAction": "undo", - "newTabMiddleClickAction": "new_child", - "bookmarksLeftClickAction": "open_in_act", - "bookmarksLeftClickActivate": false, - "bookmarksLeftClickPos": "default", - "bookmarksMidClickAction": "open_in_new", - "bookmarksMidClickActivate": false, - "bookmarksMidClickRemove": false, - "bookmarksMidClickPos": "default", - "historyLeftClickAction": "open_in_act", - "historyLeftClickActivate": false, - "historyLeftClickPos": "default", - "historyMidClickAction": "open_in_new", - "historyMidClickActivate": false, - "historyMidClickPos": "default", - "syncName": "Tanvir", - "syncSaveSettings": true, - "syncSaveCtxMenu": true, - "syncSaveStyles": true, - "syncSaveKeybindings": true, - "selectActiveTabFirst": true - }, - "sidebar": { - "nav": [ - "bookmarks", - "firefox-default", - "ISNJcp1_j9yh", - "LQQCi8vSngKE", - "S9kHRAMvkzAz", - "8iwQBUw6CqM4", - "LpUzAUg5GNH4", - "gU-hbUni6Ovz", - "3oFlKqsxJt3x", - "40boooHrqaI4", - "ewI7V5gmchpA", - "settings", - "create_snapshot", - "remute_audio_tabs", - "collapse", - "add_tp", - "search" - ], - "panels": { - "bookmarks": { - "type": 1, - "id": "bookmarks", - "name": "Bookmarks", - "iconSVG": "icon_bookmarks", - "iconIMGSrc": "", - "iconIMG": "", - "color": "toolbar", - "lockedPanel": false, - "tempMode": false, - "skipOnSwitching": false, - "rootId": "root________", - "viewMode": "tree", - "autoConvert": false, - "srcPanelConfig": null - }, - "firefox-default": { - "type": 2, - "id": "firefox-default", - "name": "Search", - "color": "blue", - "iconSVG": "icon_search", - "iconIMGSrc": "", - "iconIMG": "", - "lockedPanel": false, - "skipOnSwitching": false, - "noEmpty": false, - "newTabCtx": "none", - "dropTabCtx": "none", - "moveRules": [], - "moveExcludedTo": -1, - "bookmarksFolderId": -1, - "newTabBtns": [], - "srcPanelConfig": null - }, - "ISNJcp1_j9yh": { - "type": 2, - "id": "ISNJcp1_j9yh", - "name": "AI", - "color": "purple", - "iconSVG": "tree", - "iconIMGSrc": "", - "iconIMG": "", - "lockedPanel": false, - "skipOnSwitching": false, - "noEmpty": false, - "newTabCtx": "none", - "dropTabCtx": "none", - "moveRules": [], - "moveExcludedTo": -1, - "bookmarksFolderId": -1, - "newTabBtns": [], - "srcPanelConfig": null - }, - "LQQCi8vSngKE": { - "type": 2, - "id": "LQQCi8vSngKE", - "name": "Development", - "color": "purple", - "iconSVG": "icon_code", - "iconIMGSrc": "", - "iconIMG": "", - "lockedPanel": false, - "skipOnSwitching": false, - "noEmpty": false, - "newTabCtx": "none", - "dropTabCtx": "none", - "moveRules": [], - "moveExcludedTo": -1, - "bookmarksFolderId": -1, - "newTabBtns": [], - "srcPanelConfig": null - }, - "S9kHRAMvkzAz": { - "type": 2, - "id": "S9kHRAMvkzAz", - "name": "Research", - "color": "pink", - "iconSVG": "chill", - "iconIMGSrc": "", - "iconIMG": "", - "lockedPanel": false, - "skipOnSwitching": false, - "noEmpty": false, - "newTabCtx": "none", - "dropTabCtx": "none", - "moveRules": [], - "moveExcludedTo": -1, - "bookmarksFolderId": -1, - "newTabBtns": [], - "srcPanelConfig": null - }, - "8iwQBUw6CqM4": { - "type": 2, - "id": "8iwQBUw6CqM4", - "name": "Education", - "color": "orange", - "iconSVG": "icon_book", - "iconIMGSrc": "", - "iconIMG": "", - "lockedPanel": false, - "skipOnSwitching": false, - "noEmpty": false, - "newTabCtx": "none", - "dropTabCtx": "none", - "moveRules": [], - "moveExcludedTo": -1, - "bookmarksFolderId": -1, - "newTabBtns": [], - "srcPanelConfig": null - }, - "LpUzAUg5GNH4": { - "type": 2, - "id": "LpUzAUg5GNH4", - "name": "Essentials", - "color": "blue", - "iconSVG": "icon_mail", - "iconIMGSrc": "", - "iconIMG": "", - "lockedPanel": false, - "skipOnSwitching": false, - "noEmpty": false, - "newTabCtx": "none", - "dropTabCtx": "none", - "moveRules": [], - "moveExcludedTo": -1, - "bookmarksFolderId": -1, - "newTabBtns": [], - "srcPanelConfig": null - }, - "gU-hbUni6Ovz": { - "type": 2, - "id": "gU-hbUni6Ovz", - "name": "Entertainment", - "color": "red", - "iconSVG": "icon_play", - "iconIMGSrc": "", - "iconIMG": "", - "lockedPanel": false, - "skipOnSwitching": false, - "noEmpty": false, - "newTabCtx": "none", - "dropTabCtx": "none", - "moveRules": [], - "moveExcludedTo": -1, - "bookmarksFolderId": -1, - "newTabBtns": [], - "srcPanelConfig": null - }, - "3oFlKqsxJt3x": { - "type": 2, - "id": "3oFlKqsxJt3x", - "name": "News", - "color": "blue", - "iconSVG": "vacation", - "iconIMGSrc": "", - "iconIMG": "", - "lockedPanel": false, - "skipOnSwitching": false, - "noEmpty": false, - "newTabCtx": "none", - "dropTabCtx": "none", - "moveRules": [], - "moveExcludedTo": -1, - "bookmarksFolderId": -1, - "newTabBtns": [], - "srcPanelConfig": null - }, - "40boooHrqaI4": { - "type": 2, - "id": "40boooHrqaI4", - "name": "Socials", - "color": "turquoise", - "iconSVG": "icon_man", - "iconIMGSrc": "", - "iconIMG": "", - "lockedPanel": false, - "skipOnSwitching": false, - "noEmpty": false, - "newTabCtx": "none", - "dropTabCtx": "none", - "moveRules": [], - "moveExcludedTo": -1, - "bookmarksFolderId": -1, - "newTabBtns": [], - "srcPanelConfig": null - }, - "ewI7V5gmchpA": { - "type": 2, - "id": "ewI7V5gmchpA", - "name": "Default", - "color": "toolbar", - "iconSVG": "icon_circle", - "iconIMGSrc": "", - "iconIMG": "", - "lockedPanel": false, - "skipOnSwitching": false, - "noEmpty": false, - "newTabCtx": "none", - "dropTabCtx": "none", - "moveRules": [], - "moveExcludedTo": -1, - "bookmarksFolderId": -1, - "newTabBtns": [], - "srcPanelConfig": null - }, - "xiO7wvvnwqSK": { - "type": 2, - "id": "xiO7wvvnwqSK", - "name": "School: Mathematics", - "color": "blue", - "iconSVG": "icon_edu", - "iconIMGSrc": "", - "iconIMG": "", - "lockedPanel": false, - "skipOnSwitching": false, - "noEmpty": false, - "newTabCtx": "none", - "dropTabCtx": "none", - "moveRules": [], - "moveExcludedTo": -1, - "bookmarksFolderId": -1, - "newTabBtns": [], - "srcPanelConfig": null - }, - "wl3oNtUwxKQK": { - "type": 2, - "id": "wl3oNtUwxKQK", - "name": "School: Physics", - "color": "yellow", - "iconSVG": "icon_edu", - "iconIMGSrc": "", - "iconIMG": "", - "lockedPanel": false, - "skipOnSwitching": false, - "noEmpty": false, - "newTabCtx": "none", - "dropTabCtx": "none", - "moveRules": [], - "moveExcludedTo": -1, - "bookmarksFolderId": -1, - "newTabBtns": [], - "srcPanelConfig": null - } + "settings": { + "nativeScrollbars": true, + "nativeScrollbarsThin": true, + "nativeScrollbarsLeft": true, + "selWinScreenshots": true, + "updateSidebarTitle": true, + "markWindow": false, + "markWindowPreface": "[Sidebery] ", + "ctxMenuNative": true, + "ctxMenuRenderInact": true, + "ctxMenuRenderIcons": true, + "ctxMenuIgnoreContainers": "", + "navBarLayout": "horizontal", + "navBarInline": true, + "navBarSide": "left", + "hideAddBtn": false, + "hideSettingsBtn": false, + "navBtnCount": true, + "hideEmptyPanels": false, + "hideDiscardedTabPanels": false, + "navActTabsPanelLeftClickAction": "none", + "navActBookmarksPanelLeftClickAction": "none", + "navTabsPanelMidClickAction": "discard", + "navBookmarksPanelMidClickAction": "none", + "navSwitchPanelsWheel": true, + "subPanelRecentlyClosedBar": true, + "subPanelBookmarks": true, + "subPanelHistory": true, + "groupLayout": "grid", + "containersSortByName": true, + "skipEmptyPanels": false, + "dndTabAct": true, + "dndTabActDelay": 850, + "dndTabActMod": "none", + "dndExp": "pointer", + "dndExpDelay": 250, + "dndExpMod": "none", + "dndOutside": "win", + "dndActTabFromLink": true, + "dndActSearchTab": true, + "dndMoveTabs": false, + "dndMoveBookmarks": false, + "searchBarMode": "dynamic", + "searchPanelSwitch": "any", + "searchBookmarksShortcut": "", + "searchHistoryShortcut": "", + "warnOnMultiTabClose": "collapsed", + "activateLastTabOnPanelSwitching": true, + "activateLastTabOnPanelSwitchingLoadedOnly": true, + "switchPanelAfterSwitchingTab": "always", + "tabRmBtn": "hover", + "activateAfterClosing": "prev", + "activateAfterClosingStayInPanel": false, + "activateAfterClosingGlobal": false, + "activateAfterClosingNoFolded": true, + "activateAfterClosingNoDiscarded": true, + "askNewBookmarkPlace": false, + "tabsRmUndoNote": true, + "tabsUnreadMark": true, + "tabsUpdateMark": "all", + "tabsUpdateMarkFirst": true, + "tabsReloadLimit": 5, + "tabsReloadLimitNotif": true, + "showNewTabBtns": true, + "newTabBarPosition": "after_tabs", + "tabsPanelSwitchActMove": true, + "tabsPanelSwitchActMoveAuto": true, + "tabsUrlInTooltip": "full", + "newTabCtxReopen": false, + "tabWarmupOnHover": true, + "tabSwitchDelay": 0, + "moveNewTabPin": "start", + "moveNewTabParent": "last_child", + "moveNewTabParentActPanel": false, + "moveNewTab": "end", + "moveNewTabActivePin": "start", + "pinnedTabsPosition": "panel", + "pinnedTabsList": true, + "pinnedAutoGroup": true, + "pinnedNoUnload": true, + "pinnedForcedDiscard": false, + "tabsTree": true, + "groupOnOpen": true, + "tabsTreeLimit": "none", + "autoFoldTabs": false, + "autoFoldTabsExcept": "none", + "autoExpandTabs": true, + "autoExpandTabsOnNew": false, + "rmChildTabs": "none", + "tabsLvlDots": false, + "discardFolded": false, + "discardFoldedDelay": 0, + "discardFoldedDelayUnit": "sec", + "tabsTreeBookmarks": true, + "treeRmOutdent": "branch", + "autoGroupOnClose": false, + "autoGroupOnClose0Lvl": false, + "autoGroupOnCloseMouseOnly": false, + "ignoreFoldedParent": true, + "showNewGroupConf": true, + "sortGroupsFirst": true, + "colorizeTabs": true, + "colorizeTabsSrc": "container", + "colorizeTabsBranches": false, + "colorizeTabsBranchesSrc": "url", + "inheritCustomColor": true, + "previewTabs": true, + "previewTabsMode": "p", + "previewTabsPageModeFallback": "n", + "previewTabsInlineHeight": 140, + "previewTabsPopupWidth": 400, + "previewTabsSide": "right", + "previewTabsDelay": 0, + "previewTabsFollowMouse": true, + "previewTabsWinOffsetY": 0, + "previewTabsWinOffsetX": 0, + "previewTabsInPageOffsetY": -145, + "previewTabsInPageOffsetX": 260, + "previewTabsCropRight": 0, + "hideInact": false, + "hideFoldedTabs": false, + "hideFoldedParent": "none", + "nativeHighlight": true, + "warnOnMultiBookmarkDelete": "any", + "autoCloseBookmarks": false, + "autoRemoveOther": false, + "highlightOpenBookmarks": false, + "activateOpenBookmarkTab": false, + "showBookmarkLen": true, + "bookmarksRmUndoNote": true, + "loadBookmarksOnDemand": true, + "pinOpenedBookmarksFolder": true, + "oldBookmarksAfterSave": "ask", + "loadHistoryOnDemand": true, + "fontSize": "l", + "animations": true, + "animationSpeed": "norm", + "theme": "proton", + "density": "default", + "colorScheme": "ff", + "sidebarCSS": true, + "groupCSS": false, + "snapNotify": true, + "snapExcludePrivate": false, + "snapInterval": 0, + "snapIntervalUnit": "min", + "snapLimit": 0, + "snapLimitUnit": "snap", + "snapAutoExport": false, + "snapAutoExportType": "json", + "snapAutoExportPath": "Sidebery/snapshot-%Y.%M.%D-%h.%m.%s", + "snapMdFullTree": true, + "hScrollAction": "switch_act_tabs", + "onePanelSwitchPerScroll": false, + "wheelAccumulationX": true, + "wheelAccumulationY": true, + "navSwitchPanelsDelay": 0, + "scrollThroughTabs": "global", + "scrollThroughVisibleTabs": true, + "scrollThroughTabsSkipDiscarded": true, + "scrollThroughTabsExceptOverflow": false, + "scrollThroughTabsCyclic": false, + "scrollThroughTabsScrollArea": 250, + "autoMenuMultiSel": true, + "multipleMiddleClose": true, + "longClickDelay": 500, + "wheelThreshold": true, + "wheelThresholdX": 10, + "wheelThresholdY": 60, + "tabDoubleClick": "none", + "tabsSecondClickActPrev": true, + "tabsSecondClickActPrevPanelOnly": true, + "shiftSelAct": true, + "activateOnMouseUp": true, + "tabLongLeftClick": "reload", + "tabLongRightClick": "dup_child", + "tabMiddleClick": "close", + "tabMiddleClickCtrl": "discard", + "tabMiddleClickShift": "duplicate", + "tabCloseMiddleClick": "discard", + "tabsPanelLeftClickAction": "expand", + "tabsPanelDoubleClickAction": "tab", + "tabsPanelRightClickAction": "menu", + "tabsPanelMiddleClickAction": "undo", + "newTabMiddleClickAction": "new_child", + "bookmarksLeftClickAction": "open_in_act", + "bookmarksLeftClickActivate": false, + "bookmarksLeftClickPos": "default", + "bookmarksMidClickAction": "open_in_new", + "bookmarksMidClickActivate": false, + "bookmarksMidClickRemove": false, + "bookmarksMidClickPos": "default", + "historyLeftClickAction": "open_in_act", + "historyLeftClickActivate": false, + "historyLeftClickPos": "default", + "historyMidClickAction": "open_in_new", + "historyMidClickActivate": false, + "historyMidClickPos": "default", + "syncName": "Tanvir", + "syncSaveSettings": true, + "syncSaveCtxMenu": true, + "syncSaveStyles": true, + "syncSaveKeybindings": true, + "selectActiveTabFirst": true + }, + "sidebar": { + "panels": { + "bookmarks": { + "type": 1, + "id": "bookmarks", + "name": "Bookmarks", + "iconSVG": "icon_bookmarks", + "iconIMGSrc": "", + "iconIMG": "", + "color": "toolbar", + "lockedPanel": false, + "tempMode": false, + "skipOnSwitching": false, + "rootId": "root________", + "viewMode": "tree", + "autoConvert": false, + "srcPanelConfig": null + }, + "firefox-default": { + "type": 2, + "id": "firefox-default", + "name": "Search", + "color": "blue", + "iconSVG": "icon_search", + "iconIMGSrc": "", + "iconIMG": "", + "lockedPanel": false, + "skipOnSwitching": false, + "noEmpty": false, + "newTabCtx": "none", + "dropTabCtx": "none", + "moveRules": [], + "moveExcludedTo": -1, + "bookmarksFolderId": -1, + "newTabBtns": [], + "srcPanelConfig": null + }, + "ISNJcp1_j9yh": { + "type": 2, + "id": "ISNJcp1_j9yh", + "name": "AI", + "color": "green", + "iconSVG": "tree", + "iconIMGSrc": "", + "iconIMG": "", + "lockedPanel": false, + "skipOnSwitching": false, + "noEmpty": false, + "newTabCtx": "none", + "dropTabCtx": "none", + "moveRules": [], + "moveExcludedTo": -1, + "bookmarksFolderId": -1, + "newTabBtns": [], + "srcPanelConfig": null + }, + "8iwQBUw6CqM4": { + "type": 2, + "id": "8iwQBUw6CqM4", + "name": "Education", + "color": "orange", + "iconSVG": "icon_book", + "iconIMGSrc": "", + "iconIMG": "", + "lockedPanel": false, + "skipOnSwitching": false, + "noEmpty": false, + "newTabCtx": "none", + "dropTabCtx": "none", + "moveRules": [], + "moveExcludedTo": -1, + "bookmarksFolderId": -1, + "newTabBtns": [], + "srcPanelConfig": null + }, + "jOsWkUHhds6R": { + "type": 2, + "id": "jOsWkUHhds6R", + "name": "Nix/NixOS", + "color": "blue", + "iconSVG": "icon_coffee", + "iconIMGSrc": "", + "iconIMG": "", + "lockedPanel": false, + "skipOnSwitching": false, + "noEmpty": false, + "newTabCtx": "none", + "dropTabCtx": "none", + "moveRules": [], + "moveExcludedTo": -1, + "bookmarksFolderId": -1, + "newTabBtns": [], + "srcPanelConfig": null + }, + "gU-hbUni6Ovz": { + "type": 2, + "id": "gU-hbUni6Ovz", + "name": "Entertainment", + "color": "red", + "iconSVG": "icon_play", + "iconIMGSrc": "", + "iconIMG": "", + "lockedPanel": false, + "skipOnSwitching": false, + "noEmpty": false, + "newTabCtx": "none", + "dropTabCtx": "none", + "moveRules": [], + "moveExcludedTo": -1, + "bookmarksFolderId": -1, + "newTabBtns": [], + "srcPanelConfig": null + }, + "3oFlKqsxJt3x": { + "type": 2, + "id": "3oFlKqsxJt3x", + "name": "News", + "color": "blue", + "iconSVG": "vacation", + "iconIMGSrc": "", + "iconIMG": "", + "lockedPanel": false, + "skipOnSwitching": false, + "noEmpty": false, + "newTabCtx": "none", + "dropTabCtx": "none", + "moveRules": [], + "moveExcludedTo": -1, + "bookmarksFolderId": -1, + "newTabBtns": [], + "srcPanelConfig": null + }, + "RIwqwFnpXo1R": { + "type": 2, + "id": "RIwqwFnpXo1R", + "name": "Essentials", + "color": "turquoise", + "iconSVG": "briefcase", + "iconIMGSrc": "", + "iconIMG": "", + "lockedPanel": false, + "skipOnSwitching": false, + "noEmpty": false, + "newTabCtx": "none", + "dropTabCtx": "none", + "moveRules": [], + "moveExcludedTo": -1, + "bookmarksFolderId": -1, + "newTabBtns": [], + "srcPanelConfig": null + }, + "S9kHRAMvkzAz": { + "type": 2, + "id": "S9kHRAMvkzAz", + "name": "Research", + "color": "green", + "iconSVG": "icon_flask", + "iconIMGSrc": "", + "iconIMG": "", + "lockedPanel": false, + "skipOnSwitching": false, + "noEmpty": false, + "newTabCtx": "none", + "dropTabCtx": "none", + "moveRules": [], + "moveExcludedTo": -1, + "bookmarksFolderId": -1, + "newTabBtns": [], + "srcPanelConfig": null + }, + "LQQCi8vSngKE": { + "type": 2, + "id": "LQQCi8vSngKE", + "name": "Development", + "color": "purple", + "iconSVG": "icon_code", + "iconIMGSrc": "", + "iconIMG": "", + "lockedPanel": false, + "skipOnSwitching": false, + "noEmpty": false, + "newTabCtx": "none", + "dropTabCtx": "none", + "moveRules": [], + "moveExcludedTo": -1, + "bookmarksFolderId": -1, + "newTabBtns": [], + "srcPanelConfig": null + }, + "LpUzAUg5GNH4": { + "type": 2, + "id": "LpUzAUg5GNH4", + "name": "Emails", + "color": "blue", + "iconSVG": "icon_mail", + "iconIMGSrc": "", + "iconIMG": "", + "lockedPanel": false, + "skipOnSwitching": false, + "noEmpty": false, + "newTabCtx": "none", + "dropTabCtx": "none", + "moveRules": [], + "moveExcludedTo": -1, + "bookmarksFolderId": -1, + "newTabBtns": [], + "srcPanelConfig": null + }, + "40boooHrqaI4": { + "type": 2, + "id": "40boooHrqaI4", + "name": "Socials", + "color": "orange", + "iconSVG": "icon_man", + "iconIMGSrc": "", + "iconIMG": "", + "lockedPanel": false, + "skipOnSwitching": false, + "noEmpty": false, + "newTabCtx": "none", + "dropTabCtx": "none", + "moveRules": [], + "moveExcludedTo": -1, + "bookmarksFolderId": -1, + "newTabBtns": [], + "srcPanelConfig": null + }, + "_DAFOYjH_l0R": { + "type": 2, + "id": "_DAFOYjH_l0R", + "name": "Selfhost", + "color": "green", + "iconSVG": "fruit", + "iconIMGSrc": "", + "iconIMG": "", + "lockedPanel": false, + "skipOnSwitching": false, + "noEmpty": false, + "newTabCtx": "none", + "dropTabCtx": "none", + "moveRules": [], + "moveExcludedTo": -1, + "bookmarksFolderId": -1, + "newTabBtns": [], + "srcPanelConfig": null + }, + "ewI7V5gmchpA": { + "type": 2, + "id": "ewI7V5gmchpA", + "name": "Default", + "color": "toolbar", + "iconSVG": "icon_circle", + "iconIMGSrc": "", + "iconIMG": "", + "lockedPanel": false, + "skipOnSwitching": false, + "noEmpty": false, + "newTabCtx": "none", + "dropTabCtx": "none", + "moveRules": [], + "moveExcludedTo": -1, + "bookmarksFolderId": -1, + "newTabBtns": [], + "srcPanelConfig": null + } + }, + "nav": [ + "bookmarks", + "firefox-default", + "ISNJcp1_j9yh", + "8iwQBUw6CqM4", + "jOsWkUHhds6R", + "gU-hbUni6Ovz", + "3oFlKqsxJt3x", + "RIwqwFnpXo1R", + "S9kHRAMvkzAz", + "LQQCi8vSngKE", + "LpUzAUg5GNH4", + "40boooHrqaI4", + "_DAFOYjH_l0R", + "ewI7V5gmchpA", + "settings", + "create_snapshot", + "remute_audio_tabs", + "collapse", + "add_tp", + "search" + ] + }, + "sidebarCSS": "#root.root {\n --tabs-border-radius: 10px;\n}\n#root.root {\n --tabs-close-btn-margin: 10px;\n}\n#root.root {\n --nav-btn-active-shadow: inset 0 0 0 1px rgb(195, 143, 143),\n 0 1px 3px 0 rgba(0, 0, 0, 0.212);\n}\n#root.root {\n --nav-btn-fg: rgb(255, 255, 255);\n}\n#root.root {\n --nav-btn-accent: rgb(195, 143, 143);\n}\n#root.root {\n --tabs-inner-gap: 6.5px;\n}\n#root.root {\n --general-border-radius: 5px;\n}\n#root.root {\n --accent: #c38f8f;\n}\n#root.root {\n --nav-btn-fg: #faf8f7;\n}\n#root.root {\n --toolbar-fg: #faf8f7;\n}\n#root.root {\n --toolbar-el-overlay-active-bg: rgba(255, 255, 255, 0.141);\n}\n#root.root {\n --general-margin: 2px;\n}\n#root.root {\n --border: #202020;\n}\n#root.root {\n --status-ok: #64df64;\n}\n#root.root {\n --status-err: #df6464;\n}\n#root.root {\n --status-active: #47cfff;\n}\n#root.root {\n --status-notice: #00e9fb;\n}\n#root.root {\n --scroll-progress-bg: #c38f8f;\n}\n#root.root {\n --notification-fg: #faf8f7;\n}\n#root.root {\n --notification-bg: #202020;\n}\n#root.root {\n --nav-btn-active-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.071),\n 0 1px 3px 0 rgba(0, 0, 0, 0.212);\n}\n#root.root {\n --nav-btn-accent: #c38f8f;\n}\n#root.root {\n --frame-el-overlay-selected-border: #c38f8f;\n}\n#root.root {\n --frame-scrollbar-color: #8db8cd;\n}\n#root.root {\n --toolbar-scrollbar-color: #8db8cd;\n}\n\n#root.root {\n --frame-fg: #faf8f7;\n}\n#root.root {\n --frame-bg: #202020;\n}\n#root.root {\n --toolbar-bg: #202020;\n}\n\n/* Add animation to icon shown when playing audio in a tab */\n.Tab .-loud {\n animation: audio-animation 1.2s infinite ease-in-out;\n}\n\n@keyframes audio-animation {\n 0% {\n transform: scale(0.9);\n }\n 25% {\n transform: scale(1.1);\n }\n 50% {\n transform: scale(1.2);\n }\n 75% {\n transform: scale(1.1);\n }\n 100% {\n transform: scale(0.9);\n }\n}\n\n/* Based on: */\n#root {\n --tabs-height: 34px;\n --tabs-pinned-height: var(--tabs-height);\n /* Dark Theme base settings */\n --bg: #1c1b22 !important;\n --tabs-fg: #d4d4d4 !important;\n --tabs-bg-hover: #3b3948 !important;\n --tabs-activated-bg: #5b5b66 !important;\n --nav-btn-activated-bg: #1f222f !important;\n}\n\n#root .Tab {\n --tabs-indent: 10px;\n}\n\n/* TABS */\n.Tab .lvl-wrapper:after {\n display: none;\n}\n\n.Tab {\n margin: auto;\n width: 95%;\n border-radius: 5px;\n}\n\n.Tab .close > svg:hover {\n /* Tab close button */\n border-radius: 5px;\n background: #df6464 !important;\n opacity: 100%;\n}\n\n.Tab .title {\n overflow: hidden !important;\n}\n\n/* PINNED TABS */\n.PinnedDock {\n background-color: var(--bg) !important;\n}\n\n.PinnedTab {\n margin: 5px 0px 4px 6px;\n border-radius: 5px;\n}\n\n/* NAV BAR */\n.NavigationBar {\n height: 40px !important;\n padding: 4.5px 0px 0px 4.5px !important;\n background-color: #2b2a33 !important;\n margin-bottom: 5px;\n}\n\n.NavigationBar .panel-btn:hover {\n border-radius: 5px !important;\n background-color: var(--tabs-bg-hover) !important;\n}\n\n.NavigationBar .panel-btn[data-active=\"true\"] {\n border-radius: 5px !important;\n background-color: var(--bg) !important;\n}\n\n.NavigationBar .panel-btn[data-active=\"true\"]:hover {\n border-radius: 5px !important;\n background-color: var(--tabs-bg-hover) !important;\n}\n\n.NavigationBar .panel-btn > svg,\n.NavigationBar .panel-btn > img {\n fill: #f2f2f2 !important;\n}\n\n/* SIDEBAR HACK PATCHES */\n@media (max-width: 50px) {\n /* Fix to tab tree identation when minimised */\n #root:not(:hover) .Tab {\n --tabs-indent: 0px;\n }\n\n .Tab[data-lvl] > div.lvl-wrapper {\n right: -2px;\n }\n\n .Tab {\n max-width: 34px;\n }\n\n .Tab .fav {\n z-index: 1;\n }\n\n .Tab .audio {\n margin-left: -2px;\n top: -1px !important;\n left: 22px !important;\n }\n\n .Tab .title {\n display: none;\n }\n\n .PinnedTab {\n margin-left: 5px;\n }\n\n .NavigationBar .settings-btn {\n display: none;\n }\n}\n\n/* Disable these two snippets below to make pinned tabs wrap when minimised */\n.PinnedDock {\n flex-wrap: nowrap !important;\n}\n\n.PinnedTab {\n overflow: hidden !important;\n min-width: var(--tabs-pinned-width) !important;\n}\n\n/* Better tab notifications on pinned tabs */\n.PinnedTab[data-audible] .fav > img,\n.PinnedTab[data-muted] .fav > img,\n.PinnedTab[data-loading] .fav > img {\n mask: none;\n}\n\n.PinnedTab .fav > img {\n mask: none;\n}\n\n.PinnedTab[data-updated=\"true\"] .fav > img {\n mask: radial-gradient(\n circle at calc(100% - 2px) calc(100% - 2px),\n rgba(0, 0, 0, 0.141),\n rgba(0, 0, 0, 0.141) 4px,\n #000 5px,\n #000\n );\n}\n\n.PinnedTab .audio-badge {\n top: 5px;\n}\n\n.PinnedTab .update-badge {\n opacity: 0;\n}\n\n.PinnedTab[data-updated=\"true\"] .update-badge {\n opacity: 100;\n}\n\n/* Scrolling Tab text title animation */\n.Tab .title {\n display: inline-block;\n transition: transform 5s ease;\n}\n\n.Tab:hover .title {\n transform: translateX(calc(-100% + 10rem));\n}\n\n/* Multiline Tab Titles */\n/* TODO: Fine-tune */\n/* TODO: Multiline Tab Titles in Hovercard Title */\n/*\n#root {\n --tabs-height: 36px !important;\n --tabs-title-padding: 6px;\n --tabs-font-size: 0.9rem;\n --tabs-title-lines: 2;\n}\n\n.Tab .t-box {\n align-items: center;\n max-height: calc(var(--tabs-height) - var(--tabs-title-padding));\n overflow: hidden;\n}\n\n.Tab .title {\n font-size: var(--tabs-font-size);\n white-space: pre-wrap;\n line-height: calc(\n (var(--tabs-height) - var(--tabs-title-padding)) / var(--tabs-title-lines)\n );\n}\n*/\n", + "groupCSS": "", + "ver": "5.2.0", + "keybindings": { + "new_tab_on_panel": "Ctrl+Space", + "new_tab_in_group": "Ctrl+Shift+Space", + "up": "Alt+Up", + "down": "Alt+Down", + "up_shift": "Alt+Shift+Up", + "down_shift": "Alt+Shift+Down", + "activate": "Alt+Space", + "reset_selection": "Alt+R", + "search": "Ctrl+E" } - }, - "sidebarCSS": "#root.root {\n --general-border-radius: 5px;\n}\n#root.root {\n --accent: #c38f8f;\n}\n#root.root {\n --nav-btn-fg: #faf8f7;\n}\n#root.root {\n --toolbar-fg: #faf8f7;\n}\n#root.root {\n --toolbar-el-overlay-active-bg: rgba(255, 255, 255, 0.141);\n}\n#root.root {\n --general-margin: 2px;\n}\n#root.root {\n --border: #202020;\n}\n#root.root {\n --status-ok: #64df64;\n}\n#root.root {\n --status-err: #df6464;\n}\n#root.root {\n --status-active: #47cfff;\n}\n#root.root {\n --status-notice: #00e9fb;\n}\n#root.root {\n --scroll-progress-bg: #c38f8f;\n}\n#root.root {\n --notification-fg: #faf8f7;\n}\n#root.root {\n --notification-bg: #202020;\n}\n#root.root {\n --nav-btn-active-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.071),\n 0 1px 3px 0 rgba(0, 0, 0, 0.212);\n}\n#root.root {\n --nav-btn-accent: #c38f8f;\n}\n#root.root {\n --frame-el-overlay-selected-border: #c38f8f;\n}\n#root.root {\n --frame-scrollbar-color: #8db8cd;\n}\n#root.root {\n --toolbar-scrollbar-color: #8db8cd;\n}\n\n#root.root {\n --frame-fg: #faf8f7;\n}\n#root.root {\n --frame-bg: #202020;\n}\n#root.root {\n --toolbar-bg: #202020;\n}\n\n/* Add animation to icon shown when playing audio in a tab */\n.Tab .-loud {\n animation: audio-animation 1.2s infinite ease-in-out;\n}\n\n@keyframes audio-animation {\n 0% {\n transform: scale(0.9);\n }\n 25% {\n transform: scale(1.1);\n }\n 50% {\n transform: scale(1.2);\n }\n 75% {\n transform: scale(1.1);\n }\n 100% {\n transform: scale(0.9);\n }\n}\n\n/* Based on: */\n#root {\n --tabs-height: 34px;\n --tabs-pinned-height: var(--tabs-height);\n /* Dark Theme base settings */\n --bg: #1c1b22 !important;\n --tabs-fg: #d4d4d4 !important;\n --tabs-bg-hover: #3b3948 !important;\n --tabs-activated-bg: #5b5b66 !important;\n --nav-btn-activated-bg: #1f222f !important;\n}\n\n#root .Tab {\n --tabs-indent: 10px;\n}\n\n/* TABS */\n.Tab .lvl-wrapper:after {\n display: none;\n}\n\n.Tab {\n margin: auto;\n width: 95%;\n border-radius: 5px;\n}\n\n.Tab .close > svg:hover {\n /* Tab close button */\n border-radius: 5px;\n background: #df6464 !important;\n opacity: 100%;\n}\n\n.Tab .title {\n overflow: hidden !important;\n}\n\n/* PINNED TABS */\n.PinnedDock {\n background-color: var(--bg) !important;\n}\n\n.PinnedTab {\n margin: 5px 0px 4px 6px;\n border-radius: 5px;\n}\n\n/* NAV BAR */\n.NavigationBar {\n height: 40px !important;\n padding: 4.5px 0px 0px 4.5px !important;\n background-color: #2b2a33 !important;\n margin-bottom: 5px;\n}\n\n.NavigationBar .panel-btn:hover {\n border-radius: 5px !important;\n background-color: var(--tabs-bg-hover) !important;\n}\n\n.NavigationBar .panel-btn[data-active=\"true\"] {\n border-radius: 5px !important;\n background-color: var(--bg) !important;\n}\n\n.NavigationBar .panel-btn[data-active=\"true\"]:hover {\n border-radius: 5px !important;\n background-color: var(--tabs-bg-hover) !important;\n}\n\n.NavigationBar .panel-btn > svg,\n.NavigationBar .panel-btn > img {\n fill: #f2f2f2 !important;\n}\n\n/* SIDEBAR HACK PATCHES */\n@media (max-width: 50px) {\n /* Fix to tab tree identation when minimised */\n #root:not(:hover) .Tab {\n --tabs-indent: 0px;\n }\n\n .Tab[data-lvl] > div.lvl-wrapper {\n right: -2px;\n }\n\n .Tab {\n max-width: 34px;\n }\n\n .Tab .fav {\n z-index: 1;\n }\n\n .Tab .audio {\n margin-left: -2px;\n top: -1px !important;\n left: 22px !important;\n }\n\n .Tab .title {\n display: none;\n }\n\n .PinnedTab {\n margin-left: 5px;\n }\n\n .NavigationBar .settings-btn {\n display: none;\n }\n}\n\n/* Disable these two snippets below to make pinned tabs wrap when minimised */\n.PinnedDock {\n flex-wrap: nowrap !important;\n}\n\n.PinnedTab {\n overflow: hidden !important;\n min-width: var(--tabs-pinned-width) !important;\n}\n\n/* Better tab notifications on pinned tabs */\n.PinnedTab[data-audible] .fav > img,\n.PinnedTab[data-muted] .fav > img,\n.PinnedTab[data-loading] .fav > img {\n mask: none;\n}\n\n.PinnedTab .fav > img {\n mask: none;\n}\n\n.PinnedTab[data-updated=\"true\"] .fav > img {\n mask: radial-gradient(\n circle at calc(100% - 2px) calc(100% - 2px),\n rgba(0, 0, 0, 0.141),\n rgba(0, 0, 0, 0.141) 4px,\n #000 5px,\n #000\n );\n}\n\n.PinnedTab .audio-badge {\n top: 5px;\n}\n\n.PinnedTab .update-badge {\n opacity: 0;\n}\n\n.PinnedTab[data-updated=\"true\"] .update-badge {\n opacity: 100;\n}\n\n/* Multiline Tab Titles */\n/* TODO: Fine-tune */\n/* TODO: Multiline Tab Titles in Hovercard Title */\n/*\n#root {\n --tabs-height: 36px !important;\n --tabs-title-padding: 6px;\n --tabs-font-size: 0.9rem;\n --tabs-title-lines: 2;\n}\n\n.Tab .t-box {\n align-items: center;\n max-height: calc(var(--tabs-height) - var(--tabs-title-padding));\n overflow: hidden;\n}\n\n.Tab .title {\n font-size: var(--tabs-font-size);\n white-space: pre-wrap;\n line-height: calc(\n (var(--tabs-height) - var(--tabs-title-padding)) / var(--tabs-title-lines)\n );\n}\n*/\n\n/* Scrolling Tab text title animation */\n/*\n.Tab .title {\n display: inline-block;\n transition: transform 5s ease;\n}\n\n.Tab:hover .title {\n animation: moveTitle 5s infinite;\n}\n\n@keyframes moveTitle {\n 0% { transform: translateX(0); }\n 50% { transform: translateX(-10rem); }\n 100% { transform: translateX(0); }\n}\n*/\n", - "groupCSS": "#root.root {--accent: #C38F8F;}\n#root.root {--border: #202020;}\n#root.root {--status-ok: #64df64;}\n#root.root {--status-err: #df6464;}\n#root.root {--status-active: #47cfff;}\n#root.root {--status-notice: #00e9fb;}\n#root.root {--popup-fg: #faf8f7;}\n#root.root {--popup-bg: #202020;}\n#root.root {--frame-bg: #202020;}\n#root.root {--frame-fg: #faf8f7;}\n", - "ver": "5.2.0", - "keybindings": { - "new_tab_on_panel": "Ctrl+Space", - "new_tab_in_group": "Ctrl+Shift+Space", - "up": "Alt+Up", - "down": "Alt+Down", - "up_shift": "Alt+Shift+Up", - "down_shift": "Alt+Shift+Down", - "activate": "Alt+Space", - "reset_selection": "Alt+R", - "search": "Ctrl+E" - } } diff --git a/addons/sidebery/sidebery-styles.css b/addons/sidebery/sidebery-styles.css index ab4bb95..304f693 100644 --- a/addons/sidebery/sidebery-styles.css +++ b/addons/sidebery/sidebery-styles.css @@ -1,3 +1,22 @@ +#root.root { + --tabs-border-radius: 10px; +} +#root.root { + --tabs-close-btn-margin: 10px; +} +#root.root { + --nav-btn-active-shadow: inset 0 0 0 1px rgb(195, 143, 143), + 0 1px 3px 0 rgba(0, 0, 0, 0.212); +} +#root.root { + --nav-btn-fg: rgb(255, 255, 255); +} +#root.root { + --nav-btn-accent: rgb(195, 143, 143); +} +#root.root { + --tabs-inner-gap: 6.5px; +} #root.root { --general-border-radius: 5px; } @@ -247,6 +266,16 @@ opacity: 100; } +/* Scrolling Tab text title animation */ +.Tab .title { + display: inline-block; + transition: transform 5s ease; +} + +.Tab:hover .title { + transform: translateX(calc(-100% + 10rem)); +} + /* Multiline Tab Titles */ /* TODO: Fine-tune */ /* TODO: Multiline Tab Titles in Hovercard Title */ @@ -272,21 +301,3 @@ ); } */ - -/* Scrolling Tab text title animation */ -/* -.Tab .title { - display: inline-block; - transition: transform 5s ease; -} - -.Tab:hover .title { - animation: moveTitle 5s infinite; -} - -@keyframes moveTitle { - 0% { transform: translateX(0); } - 50% { transform: translateX(-10rem); } - 100% { transform: translateX(0); } -} -*/ diff --git a/chrome/bar/buttons.css b/chrome/bar/buttons.css index c0efd2e..5c74a59 100644 --- a/chrome/bar/buttons.css +++ b/chrome/bar/buttons.css @@ -1,3 +1,5 @@ +@import "../styling/animations.css"; + /* Based on: */ /* Replace the button background-colors with a glow effect */ :root { @@ -28,7 +30,7 @@ toolbarbutton#scrollbutton-down { border-color: transparent !important; } -/* Glow effects on hover */ +/* Glow and wobble-skew effects on hover */ .close-icon:hover, .urlbar-history-dropmarker:hover, #page-action-buttons > .urlbar-icon:hover, @@ -45,6 +47,7 @@ toolbarbutton#scrollbutton-up:not([disabled]):hover, toolbarbutton#scrollbutton-down:not([disabled]):hover { filter: drop-shadow(0 0 2px var(--uc-icon-glow-secondary)) drop-shadow(0 0 1px var(--uc-icon-glow-primary)); + animation: wobbleSkew 0.5s ease-in-out infinite; } /* Active states and close window button hover state */ diff --git a/chrome/bar/findbar.css b/chrome/bar/findbar.css index 14495f3..ba071a1 100644 --- a/chrome/bar/findbar.css +++ b/chrome/bar/findbar.css @@ -1,7 +1,7 @@ /* Based on: */ -/* findbar as floating box at the top with auto-hide +/* findbar as floating box at the top center * N.B: privacy.resistFingerprinting.letterboxing prevents this from working properly - */ +*/ findbar { order: -1; @@ -9,9 +9,7 @@ findbar { position: relative; border-top: none !important; padding: 0 !important; - transition: - transform 200ms ease-in-out, - opacity 200ms ease-in-out !important; + transition: transform 200ms ease-in-out, opacity 200ms ease-in-out !important; background: none !important; pointer-events: none; z-index: 1; @@ -19,6 +17,7 @@ findbar { } /* Auto-hide findbar after Ns when unfocused */ +/* Buggy: Causes issues as seen on webpages */ /* findbar:not(:focus-within) { opacity: 0 !important; @@ -73,13 +72,16 @@ findbar > .findbar-container { width: initial !important; order: -1; } + .findbar-closebutton > image { padding: 3px; } + .findbar-closebutton:hover > image { background: var(--toolbarbutton-hover-background) !important; border-radius: 4px; } + findbar > .findbar-container > hbox { margin: 0 5px; } @@ -93,13 +95,65 @@ findbar::after { findbar { flex-direction: row-reverse; } + findbar > .findbar-container { flex-direction: row-reverse; border-inline-width: 1px 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 4px; } + findbar { - margin-right: 650px; + margin-right: 300px; border-right: 1px solid var(--chrome-content-separator-color); } + +/* Move the findbar word count (x of y matches) to the center (from the far right to next to the previous & next occurrence arrows) */ +hbox[anonid="findbar-textbox-wrapper"] { + order: 1 !important; +} +.findbar-label.found-matches { + order: 2 !important; +} +.findbar-label.findbar-find-status { + order: 3 !important; +} +.findbar-highlight { + order: 4 !important; +} +.findbar-case-sensitive { + order: 5 !important; +} +.findbar-match-diacritics { + order: 6 !important; +} +.findbar-entire-word { + order: 7 !important; +} + +label[anonid="match-case-status"] { + order: 8 !important; +} +label[anonid="match-diacritics-status"] { + order: 9 !important; +} +label[anonid="entire-word-status"] { + order: 10 !important; +} + +/* Add words to the findbar next and previous buttons */ +/* +.findbar-find-next:before { + content: "Next" !important; +} + +.findbar-find-previous:before { + content: "Previous" !important; +} +*/ + +/* Don't animate the findbar close button */ +toolbarbutton[anonid="find-closebutton"]:hover { + filter: none !important; + animation: none !important; +} diff --git a/chrome/bar/sidebar/sidebery.css b/chrome/bar/sidebar/sidebery.css index a1e600b..f27ee6f 100644 --- a/chrome/bar/sidebar/sidebery.css +++ b/chrome/bar/sidebar/sidebery.css @@ -23,8 +23,8 @@ } #sidebar-box { - --uc-sidebar-width: 44px; - --uc-sidebar-hover-width: 260px; + --uc-sidebar-width: 42px; + --uc-sidebar-hover-width: 300px; --uc-autohide-sidebar-delay: 400ms; position: relative; min-width: var(--uc-sidebar-width) !important; diff --git a/chrome/bar/toolbar.css b/chrome/bar/toolbar.css index a506244..158fa08 100644 --- a/chrome/bar/toolbar.css +++ b/chrome/bar/toolbar.css @@ -3,7 +3,7 @@ @-moz-document url(chrome://browser/content/browser.xhtml) { :root:not([inFullscreen]) { - --uc-bottom-toolbar-height: calc(40px + var(--toolbarbutton-outer-padding)); + --uc-bottom-toolbar-height: calc(34px + var(--toolbarbutton-outer-padding)); } :root[uidensity="compact"]:not([inFullscreen]) { @@ -76,14 +76,18 @@ #PersonalToolbar { opacity: 0; visibility: collapse; - transition: opacity 0.4s ease-in-out, visibility 0s linear 0.3s; + transition: + opacity 0.4s ease-in-out, + visibility 0s linear 0.3s; } /* Show bookmarks toolbar when toolbar is hovered */ #navigator-toolbox:hover > #PersonalToolbar { opacity: 1; visibility: visible; - transition: opacity 0.4s ease-in-out, visibility 0s linear 0.3s; + transition: + opacity 0.4s ease-in-out, + visibility 0s linear 0.3s; } /* Based on: */ diff --git a/chrome/bar/urlbar.css b/chrome/bar/urlbar.css index d2d7c63..d945dc7 100644 --- a/chrome/bar/urlbar.css +++ b/chrome/bar/urlbar.css @@ -1,10 +1,248 @@ @import "../styling/animations.css"; -/* Remove search engines from the search bar */ -#urlbar .search-one-offs:not([hidden]) { +/* Remove the zoom button from the URL bar */ +#urlbar-zoom-button { display: none !important; } +/* Remove the tracking protection icon from the URL bar */ +/* +#tracking-protection-icon-container, +.urlbar-input-container > #tracking-protection-icon-container { + display: none !important; +} +*/ +/* Show the tracking protection icon when the URL bar is hovered */ +/* Hide the tracking protection icon without taking up space */ +#tracking-protection-icon-container, +.urlbar-input-container > #tracking-protection-icon-container { + opacity: 0; + pointer-events: none; + transition: opacity 0.3s ease; +} + +/* Show the icon on hover */ +#urlbar:hover #tracking-protection-icon-container, +#tracking-protection-icon-container:hover { + opacity: 1; + pointer-events: auto; +} + +/* Remove the bookmark star button from the URL bar */ +/* +#star-button-box { + display: none !important; +} +*/ + +/* Show the bookmark star button when the URL bar is hovered */ +/* Hide the bookmark star button without taking up space */ +#star-button-box { + opacity: 0; + pointer-events: none; + transition: opacity 0.3s ease; +} + +/* Show the star button on hover */ +#urlbar:hover #star-button-box, +#star-button-box:hover { + opacity: 1; + pointer-events: auto; +} + +/* Remove the reader mode button from the URL bar */ +/* +#reader-mode-button { + display: none !important; +} +*/ +/* Show the reader mode button when the URL bar is hovered */ +/* Hide the reader mode button without taking up space */ +#reader-mode-button { + opacity: 0; + pointer-events: none; + transition: opacity 0.3s ease; +} + +/* Show the reader mode button on hover */ +#urlbar:hover #reader-mode-button, +#reader-mode-button:hover { + opacity: 1; + pointer-events: auto; +} + +/* Remove the picture-in-picture button from the URL bar */ +/* +#picture-in-picture-button { + display: none !important; +} +*/ +/* Show the picture-in-picture button when the URL bar is hovered */ +/* Hide the picture-in-picture button without taking up space */ +#picture-in-picture-button { + opacity: 0; + pointer-events: none; + transition: opacity 0.3s ease; +} + +/* Show the picture-in-picture button on hover */ +#urlbar:hover #picture-in-picture-button, +#picture-in-picture-button:hover { + opacity: 1; + pointer-events: auto; +} + +/* Remove the identity permission box from the URL bar */ +/* +#identity-permission-box { + display: none !important; +} +*/ +/* Show the identity permission box when the URL bar is hovered */ +/* Hide the identity permission box without taking up space */ +#identity-permission-box { + opacity: 0; + pointer-events: none; + transition: opacity 0.3s ease; +} + +/* Show the identity permission box on hover */ +#urlbar:hover #identity-permission-box, +#identity-permission-box:hover { + opacity: 1; + pointer-events: auto; +} + +/* Show the EME notification icon when the URL bar is hovered */ +/* Hide the EME notification icon without taking up space */ +#eme-notification-icon { + opacity: 0; + pointer-events: none; + transition: opacity 0.3s ease; +} + +/* Show the EME notification icon on hover */ +#urlbar:hover #eme-notification-icon, +#eme-notification-icon:hover { + opacity: 1; + pointer-events: auto; +} + +/* Remove the permissions granted icon from the URL bar */ +/* +#permissions-granted-icon { + display: none !important; +} +*/ + +/* Hide the identity box from the URL bar */ +/* +#identity-box { + display: none !important; +} +*/ + +/* Hide the identity icon by default */ +/* +#identity-icon { + display: none !important; +} +*/ +/* Show the identity icon when the URL bar is hovered */ +/* Hide the identity icon without taking up space */ +#identity-icon { + opacity: 0; + pointer-events: none; + transition: opacity 0.3s ease; +} + +/* Show the identity icon on hover */ +#urlbar:hover #identity-icon, +#identity-icon:hover { + opacity: 1; + pointer-events: auto; +} + +/* Show the identity icon when the site is insecure */ +#identity-box[pageproxystate="valid"].notSecure #identity-icon { + display: inline !important; +} + +/* Remove search engines from the search bar and the search button */ +#urlbar .search-one-offs:not([hidden]), +#urlbar .urlbar-search-button { + display: none !important; +} + +/* Remove the identity icon of extension pages from the URL bar */ +/* AKA: Remove "loaded from an extension" message/button from the URL bar */ +#urlbar #identity-box.extensionPage #identity-icon-label { + display: none !important; +} + +/* Remove the placeholder text from the URL bar */ +/* AKA: Remove "Search or enter address" message from the URL bar */ +#urlbar-input::placeholder, +.urlbar-input::placeholder { + opacity: 0 !important; +} + +/* Slide-up animation of the urls when the URL bar is focused */ +#urlbar[focused] #urlbar-results { + animation: slideUp 0.2s ease-out forwards; +} + +/* Darkens the background when url bar is focused with animation */ +#urlbar:is([breakout][breakout-extend], [breakout][usertyping][focused]):after { + content: ""; + position: fixed; + pointer-events: none; + + width: 100vw; + height: 100vh; + + top: 0px; + left: 0px; + + background-color: rgba(0, 0, 0, 0.6); + animation: darkenBackground 0.5s forwards; + + z-index: -1; +} + +/* Lightens the background when url bar loses focus with animation */ +#urlbar:not( + :is([breakout][breakout-extend], [breakout][usertyping][focused]) + ):after { + content: ""; + position: fixed; + pointer-events: none; + + width: 100vw; + height: 100vh; + + top: 0px; + left: 0px; + + background-color: rgba(0, 0, 0, 0); + animation: lightenBackground 0.5s forwards; + + z-index: -1; +} + +/* Center text and url suggestions in the URL bar */ +.urlbarView-row { + justify-content: center !important; +} + +.urlbarView-row-inner { + max-width: max-content !important; +} + +.urlbarView-no-wrap { + max-width: 100% !important; +} + /* Center text on urlbar */ /* Ensure text remains centered in the URL bar, even when focused */ #urlbar[focused] #urlbar-input, @@ -14,13 +252,21 @@ text-align: center !important; } -.urlbar-input-container { +.urlbar-input-container, +#urlbar .urlbar-input-container { display: flex; justify-content: center; align-items: center; text-align: center !important; } +/* Change text highlight color when clicking on the URL bar */ +#urlbar-input::selection, +.urlbar-input::selection { + background-color: #c38f8f !important; + color: #ffffff !important; +} + /* Change domain color in URL dropdown */ #urlbar-results .urlbarView-row .urlbarView-url { color: #c8d0d4 !important; @@ -43,7 +289,8 @@ /* Text color of the full URL besides title in the URL selection menu */ #urlbar-results :is(.urlbarView-tags, .urlbarView-action, .urlbarView-url) { - color: #c38f8f !important; + /* color: #161616 !important; */ + animation: colorCycle 20s linear infinite !important; } /* Text color of the URL selection menu */ @@ -51,30 +298,79 @@ color: #ffffff !important; } -/* Based on: Source file https://github.com/MrOtherGuy/firefox-csshacks/tree/master/chrome/urlbar_connection_type_background_colors.css */ -/* Add a colored overlay to urlbar based on the type of the connection */ -/* For normal pages */ -#identity-box[pageproxystate="valid"] ~ .urlbar-input-box { +/* Modify the urlbar text color based on connection type */ +/* Based on: */ +/* For normal pages (HTTPS with valid certificate) - Animated */ +.urlbar-input-container[pageproxystate="valid"]:not( + [securitylevel="broken"], + [securitylevel="none"] + ) + .urlbar-input-box { animation: colorCycle 20s linear infinite; } -/* Mixed content including neterror */ -#identity-box[pageproxystate="valid"].unknownIdentity ~ .urlbar-input-box { - color: orange; +/* Insecure connections (HTTP) */ +.urlbar-input-container[securitylevel="none"] .urlbar-input-box { + color: orangered; } -/* http: and potentially some other insecure connections like ftp: */ -#identity-box[pageproxystate="valid"].notSecure ~ .urlbar-input-box { - color: orangered; +/* Mixed content/errors */ +.urlbar-input-container[securitylevel="broken"] .urlbar-input-box { + color: orange; } /* Extension pages */ -#identity-box[pageproxystate="valid"].extensionPage ~ .urlbar-input-box { +#urlbar[actiontype="extension"] .urlbar-input-box { color: violet; } -/* Internal about: and chrome:// urls (includes reader-view) */ -#identity-box[pageproxystate="valid"].localResource ~ .urlbar-input-box, -#identity-box[pageproxystate="valid"].chromeUI ~ .urlbar-input-box { +/* Local resources (about:, chrome:) */ +.urlbar-input-container[pageproxystate="localResource"] .urlbar-input-box, /* pageproxystate on container */ +.urlbar-input-container[pageproxystate="chromeUI"] .urlbar-input-box { color: dodgerblue; } + +/* Adds a colored overlay to urlbar based on the type of the connection */ +/* Based on: */ +#identity-box::before { + position: absolute; + display: block; + content: ""; + width: 100%; + height: var(--urlbar-height); + left: 0; + top: 0; + pointer-events: none; +} +:root[customizing] #identity-box::before, +#urlbar[focused] #identity-box::before { + display: none; +} + +/* For normal pages (HTTPS with valid certificate) */ +/* +#identity-box.verifiedDomain::before { + background-color: rgba(50, 255, 50, 0.1); +} +*/ + +/* Insecure connections (HTTP) */ +#identity-box.certErrorPage::before, +#identity-box.notSecure::before { + background-color: rgba(226, 0, 12, 0.2); +} + +/* Mixed content/errors */ +#identity-box.unknownIdentity::before { + background-color: rgba(226, 120, 12, 0.2); +} + +/* Extension pages */ +#identity-box.extensionPage::before { + background-color: rgba(195, 143, 143, 0.2); +} + +/* Local resources (about:, chrome:) */ +#identity-box.chromeUI::before { + background-color: rgba(141, 184, 205, 0.2); +} diff --git a/chrome/browser/icons.css b/chrome/browser/icons.css index 0598fff..e0c0518 100644 --- a/chrome/browser/icons.css +++ b/chrome/browser/icons.css @@ -9,6 +9,14 @@ list-style-image: url("../icons/bookmarks.svg") !important; } +#star-button { + list-style-image: url("../icons/bookmarks.svg") !important; +} + +#star-button[starred="true"] { + list-style-image: url("../icons/bookmarks-fill.svg") !important; +} + #forward-button > .toolbarbutton-icon { list-style-image: url("../icons/forward.svg") !important; } @@ -180,7 +188,7 @@ #appMenu-bookmarks-button, #panelMenuBookmarkThisPage[starred], #appMenu-library-bookmarks-button { - list-style-image: url("chrome://browser/skin/bookmark.svg"); + list-style-image: url("../icons/bookmarks.svg"); } #appMenu-history-button, @@ -425,7 +433,9 @@ menuitem.sendtab-target[clientType="vr"] { #sidebar-switcher-bookmarks, #menu_bookmarkThisPage[data-l10n-id="menu-edit-bookmark"] { - background-image: url("chrome://browser/skin/bookmark.svg"); + /* Color doesn't seem to be applied */ + /* TODO: Investigate and Fix the color issue */ + background-image: url("../icons/bookmarks-fill.svg"); } #sidebar-switcher-history { diff --git a/chrome/icons/back.svg b/chrome/icons/back.svg index 143ac8b..2bda192 100644 --- a/chrome/icons/back.svg +++ b/chrome/icons/back.svg @@ -1 +1,5 @@ - \ No newline at end of file + + + diff --git a/chrome/icons/bookmarks-fill.svg b/chrome/icons/bookmarks-fill.svg index f835415..159816a 100644 --- a/chrome/icons/bookmarks-fill.svg +++ b/chrome/icons/bookmarks-fill.svg @@ -1 +1,10 @@ - \ No newline at end of file + + + + + + + diff --git a/chrome/icons/bookmarks.svg b/chrome/icons/bookmarks.svg index 62d8004..dde09f5 100644 --- a/chrome/icons/bookmarks.svg +++ b/chrome/icons/bookmarks.svg @@ -1 +1,10 @@ - \ No newline at end of file + + + + + + + diff --git a/chrome/icons/close.svg b/chrome/icons/close.svg index 5703aed..5db61ce 100644 --- a/chrome/icons/close.svg +++ b/chrome/icons/close.svg @@ -1 +1,12 @@ - \ No newline at end of file + + + + + + + + diff --git a/chrome/icons/firefox-light.svg b/chrome/icons/firefox-light.svg index aa36853..b1b4a4a 100644 --- a/chrome/icons/firefox-light.svg +++ b/chrome/icons/firefox-light.svg @@ -1 +1,6 @@ -newtab-firefox-gry \ No newline at end of file + + newtab-firefox-gry + + diff --git a/chrome/icons/firefox-private-light.svg b/chrome/icons/firefox-private-light.svg index ed64635..6710883 100644 --- a/chrome/icons/firefox-private-light.svg +++ b/chrome/icons/firefox-private-light.svg @@ -1 +1,6 @@ -newtab-firefox-gry \ No newline at end of file + + newtab-firefox-gry + + diff --git a/chrome/icons/firefox-private.svg b/chrome/icons/firefox-private.svg index 0fe4c1f..50a7515 100644 --- a/chrome/icons/firefox-private.svg +++ b/chrome/icons/firefox-private.svg @@ -1 +1,6 @@ -newtab-firefox-gry \ No newline at end of file + + newtab-firefox-gry + + diff --git a/chrome/icons/firefox.svg b/chrome/icons/firefox.svg index eaf7132..64217b9 100644 --- a/chrome/icons/firefox.svg +++ b/chrome/icons/firefox.svg @@ -1 +1,6 @@ -newtab-firefox-gry + + newtab-firefox-gry + + diff --git a/chrome/icons/forward.svg b/chrome/icons/forward.svg index 3510ba6..f16daaa 100644 --- a/chrome/icons/forward.svg +++ b/chrome/icons/forward.svg @@ -1 +1,5 @@ - \ No newline at end of file + + + diff --git a/chrome/icons/history.svg b/chrome/icons/history.svg index ea0cf5e..ce84b5d 100644 --- a/chrome/icons/history.svg +++ b/chrome/icons/history.svg @@ -1 +1,5 @@ - \ No newline at end of file + + + diff --git a/chrome/icons/menu.svg b/chrome/icons/menu.svg index 766db7a..c7bb24a 100644 --- a/chrome/icons/menu.svg +++ b/chrome/icons/menu.svg @@ -1 +1,5 @@ - \ No newline at end of file + + + diff --git a/chrome/icons/overflow.svg b/chrome/icons/overflow.svg index 71ec523..0a2470a 100644 --- a/chrome/icons/overflow.svg +++ b/chrome/icons/overflow.svg @@ -1 +1,5 @@ - \ No newline at end of file + + + diff --git a/chrome/icons/reload-contextmenu.svg b/chrome/icons/reload-contextmenu.svg index 3c654ea..9f90956 100644 --- a/chrome/icons/reload-contextmenu.svg +++ b/chrome/icons/reload-contextmenu.svg @@ -1 +1,12 @@ - \ No newline at end of file + + + + + + + + diff --git a/chrome/icons/reload-to-stop.svg b/chrome/icons/reload-to-stop.svg index 13b1bd9..e9c9798 100644 --- a/chrome/icons/reload-to-stop.svg +++ b/chrome/icons/reload-to-stop.svg @@ -1,28 +1,79 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/chrome/icons/reload.svg b/chrome/icons/reload.svg index e4863a3..5ce0a61 100644 --- a/chrome/icons/reload.svg +++ b/chrome/icons/reload.svg @@ -1 +1,5 @@ - \ No newline at end of file + + + diff --git a/chrome/icons/stop-to-reload.svg b/chrome/icons/stop-to-reload.svg index 0f9d2d1..44cfea6 100644 --- a/chrome/icons/stop-to-reload.svg +++ b/chrome/icons/stop-to-reload.svg @@ -1,35 +1,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/chrome/menu/developer-tools.css b/chrome/menu/developer-tools.css new file mode 100644 index 0000000..cea611b --- /dev/null +++ b/chrome/menu/developer-tools.css @@ -0,0 +1,4 @@ +/* Remove border radius from developer tools */ +browser[class*="devtools-toolbox"] { + border-radius: 0px; +} diff --git a/chrome/sites/chatgpt.css b/chrome/sites/chatgpt.css new file mode 100644 index 0000000..4fff01e --- /dev/null +++ b/chrome/sites/chatgpt.css @@ -0,0 +1,53 @@ +/* Remove annoying "Upgrade your plan" option from ChatGPT sidebar */ +@-moz-document domain("chatgpt.com") { + .px-2.rounded-lg.m-0.hover\:bg-token-sidebar-surface-secondary.items-center.radix-disabled\:opacity-50.radix-disabled\:pointer-events-none.focus\:ring-0.cursor-pointer.text-sm.p-2\.5.gap-2.flex.group { + display: none !important; + } +} + +/* Remove "ChatGPT Auto" menu from the top left side */ +@-moz-document domain("chatgpt.com") { + .overflow-hidden.gap-0.items-center.flex + > .whitespace-nowrap.overflow-hidden.text-token-text-secondary.radix-state-open\:bg-token-main-surface-secondary.hover\:bg-token-main-surface-secondary.font-semibold.text-lg.px-3.py-1\.5.rounded-lg.gap-1.items-center.cursor-pointer.flex.group { + display: none !important; + } +} + +/* Remove distracting "?" icon element from the bottom right corner side */ +@-moz-document domain("chatgpt.com") { + .text-token-text-secondary.text-xs.border-token-border-light.border.rounded-full.justify-center.items-center.w-6.h-6.flex { + display: none !important; + } +} + +@-moz-document domain("chatgpt.com") { + /* Hide specific elements */ + .text-token-text-secondary.text-xs.border-token-border-light.border.rounded-full.justify-center.items-center.w-6.h-6.flex { + display: none !important; + } + + /* Wrap code blocks to prevent horizontal scrolling and widen the output for better readability. */ + /* Based on: */ + + /* Wrap code blocks */ + pre .overflow-y-auto { + overflow: hidden; + } + + code.\!whitespace-pre { + white-space: pre-wrap !important; + } + + /* Widen output for larger screens */ + @media (min-width: 1024px) { + .lg\:max-w-\[40rem\] { + max-width: 48rem; + } + } + + @media (min-width: 1280px) { + .xl\:max-w-\[48rem\] { + max-width: 54rem; + } + } +} diff --git a/chrome/sites/gemini.css b/chrome/sites/gemini.css new file mode 100644 index 0000000..98481bf --- /dev/null +++ b/chrome/sites/gemini.css @@ -0,0 +1,16 @@ +/* Remove "Try Gemini Advanced" option from top right side */ +@-moz-document domain("gemini.google.com") { + .mat-mdc-button-base.mat-unthemed.ogb-upsell-button.mat-mdc-unelevated-button.mdc-button--unelevated.mdc-button.ng-tns-c874728986-8 + > .mat-mdc-button-touch-target, + .ng-star-inserted.adv-upsell.buttons-container { + display: none !important; + } +} + +/* Remove google products icon from top right corner */ +/* Remove google products icon from top right corner */ +@-moz-document domain("gemini.google.com") { + #gbwa > .gb_C > .gb_A { + display: none !important; + } +} diff --git a/chrome/sites/proton.css b/chrome/sites/proton.css new file mode 100644 index 0000000..25a4349 --- /dev/null +++ b/chrome/sites/proton.css @@ -0,0 +1,7 @@ +/* Remove Black Friday Deal button from https://mail.proton.me */ + +@-moz-document domain("mail.proton.me") { + .text-semibold.text-uppercase.button-promotion--bf-2024.items-center.flex.max-w-full.button-ghost-norm.button-medium.button { + display: none !important; + } +} diff --git a/chrome/sites/spotify.css b/chrome/sites/spotify.css new file mode 100644 index 0000000..d59d31f --- /dev/null +++ b/chrome/sites/spotify.css @@ -0,0 +1,13 @@ +/* Remove the "Install app" icon, text/button */ +@-moz-document domain("open.spotify.com") { + .encore-over-media-set.gDlqhe.ButtonInner-sc-14ud5tc-0 { + display: none !important; + } +} + +/* Remove "Explore Premium" text/button */ +@-moz-document domain("open.spotify.com") { + .Upqw01TOXETOmR5Td7Dj.encore-inverted-light-set.fcsOIN.ButtonInner-sc-14ud5tc-0 { + display: none !important; + } +} diff --git a/chrome/sites/youtube.css b/chrome/sites/youtube.css index f25f053..91d7fdc 100644 --- a/chrome/sites/youtube.css +++ b/chrome/sites/youtube.css @@ -45,11 +45,50 @@ } } -/* RGB Youtube Progress Bar */ +/* Custom Soft RGB (RosyBrownRGB) Youtube Progress Bar */ @-moz-document domain(youtube.com) { .ytp-play-progress, .ytp-swatch-background-color { - animation: bgcolorCycle 20s ease-in-out infinite; + animation: softbgcolorCycle 8s ease-in-out infinite; + } +} + +/* Based on: */ +@-moz-document url-prefix("https://www.youtube.com/watch") +{ + /* Full height player */ + ytd-watch-flexy[theater] #player-wide-container, + ytd-watch-flexy[theater] #player-theater-container, + ytd-watch-flexy[theater] #full-bleed-container { + max-height: 100vh !important; + min-height: 100vh !important; + } + /* Hide top bar */ + #masthead[theater] { + height: 0 !important; + opacity: 0 !important; + transition: opacity 0.1s ease-in-out !important; + } + + /* Show on hover */ + #masthead[theater]:hover { + opacity: 1 !important; + } + + /* Remove top margin */ + #masthead-container { + position: sticky !important; + } + + #page-manager { + margin-top: 0 !important; + } +} + +/* Remove "i" (info) icon on the video player from top right corner */ +@-moz-document domain("youtube.com") { + .ytp-cards-button-icon-default > .ytp-cards-button-icon { + display: none !important; } } diff --git a/chrome/styling/animations.css b/chrome/styling/animations.css index 1721c6b..8d2c5a4 100644 --- a/chrome/styling/animations.css +++ b/chrome/styling/animations.css @@ -8,6 +8,17 @@ } } +@keyframes slideUp { + from { + transform: translateY(100%); + opacity: 0; + } + to { + transform: translateY(0); + opacity: 1; + } +} + @keyframes wobble { 0%, 100% { @@ -113,6 +124,24 @@ } } +@keyframes darkenBackground { + from { + background-color: rgba(0, 0, 0, 0); + } + to { + background-color: rgba(0, 0, 0, 0.6); + } +} + +@keyframes lightenBackground { + from { + background-color: rgba(0, 0, 0, 0.6); + } + to { + background-color: rgba(0, 0, 0, 0); + } +} + @keyframes colorCycle { 0% { color: rgb(255, 0, 0); @@ -197,6 +226,30 @@ } } +@keyframes softbgcolorCycle { + 0% { + background-color: rgb(195, 143, 143); + } + 16.6% { + background-color: rgb(143, 195, 143); + } + 33.3% { + background-color: rgb(143, 143, 195); + } + 50% { + background-color: rgb(195, 143, 195); + } + 66.6% { + background-color: rgb(143, 195, 195); + } + 83.3% { + background-color: rgb(195, 195, 143); + } + 100% { + background-color: rgb(195, 143, 143); + } +} + @keyframes rgbshift { 0% { background-color: #ff0000; @@ -272,12 +325,24 @@ @keyframes neon { 0% { - text-shadow: 0 0 5px #fff, 0 0 10px #fff, 0 0 15px #fff, 0 0 20px #0ff, - 0 0 35px #0ff, 0 0 40px #0ff, 0 0 50px #0ff; + text-shadow: + 0 0 5px #fff, + 0 0 10px #fff, + 0 0 15px #fff, + 0 0 20px #0ff, + 0 0 35px #0ff, + 0 0 40px #0ff, + 0 0 50px #0ff; } 100% { - text-shadow: 0 0 10px #fff, 0 0 15px #fff, 0 0 20px #fff, 0 0 30px #0ff, - 0 0 40px #0ff, 0 0 50px #0ff, 0 0 60px #0ff; + text-shadow: + 0 0 10px #fff, + 0 0 15px #fff, + 0 0 20px #fff, + 0 0 30px #0ff, + 0 0 40px #0ff, + 0 0 50px #0ff, + 0 0 60px #0ff; } } @@ -649,18 +714,36 @@ } 10.1% { color: transparent; - text-shadow: 0 0 10px #fff, 0 0 20px #fff, 0 0 30px #e60073, - 0 0 40px #e60073, 0 0 50px #e60073, 0 0 60px #e60073, 0 0 70px #e60073; + text-shadow: + 0 0 10px #fff, + 0 0 20px #fff, + 0 0 30px #e60073, + 0 0 40px #e60073, + 0 0 50px #e60073, + 0 0 60px #e60073, + 0 0 70px #e60073; } 10.2% { color: #fff; - text-shadow: 0 0 10px #fff, 0 0 20px #fff, 0 0 30px #e60073, - 0 0 40px #e60073, 0 0 50px #e60073, 0 0 60px #e60073, 0 0 70px #e60073; + text-shadow: + 0 0 10px #fff, + 0 0 20px #fff, + 0 0 30px #e60073, + 0 0 40px #e60073, + 0 0 50px #e60073, + 0 0 60px #e60073, + 0 0 70px #e60073; } 20% { color: #fff; - text-shadow: 0 0 10px #fff, 0 0 20px #fff, 0 0 30px #e60073, - 0 0 40px #e60073, 0 0 50px #e60073, 0 0 60px #e60073, 0 0 70px #e60073; + text-shadow: + 0 0 10px #fff, + 0 0 20px #fff, + 0 0 30px #e60073, + 0 0 40px #e60073, + 0 0 50px #e60073, + 0 0 60px #e60073, + 0 0 70px #e60073; } 20.1% { color: transparent; @@ -687,11 +770,25 @@ @keyframes neon { 0%, 100% { - text-shadow: 0 0 5px #fff, 0 0 10px #fff, 0 0 20px #fff, 0 0 40px #0ff, - 0 0 80px #0ff, 0 0 90px #0ff, 0 0 100px #0ff, 0 0 150px #0ff; + text-shadow: + 0 0 5px #fff, + 0 0 10px #fff, + 0 0 20px #fff, + 0 0 40px #0ff, + 0 0 80px #0ff, + 0 0 90px #0ff, + 0 0 100px #0ff, + 0 0 150px #0ff; } 50% { - text-shadow: 0 0 5px #fff, 0 0 10px #fff, 0 0 20px #fff, 0 0 30px #0ff, - 0 0 40px #0ff, 0 0 50px #0ff, 0 0 60px #0ff, 0 0 70px #0ff; + text-shadow: + 0 0 5px #fff, + 0 0 10px #fff, + 0 0 20px #fff, + 0 0 30px #0ff, + 0 0 40px #0ff, + 0 0 50px #0ff, + 0 0 60px #0ff, + 0 0 70px #0ff; } } diff --git a/chrome/styling/fonts.css b/chrome/styling/fonts.css index ae483f5..5584fcd 100644 --- a/chrome/styling/fonts.css +++ b/chrome/styling/fonts.css @@ -1,8 +1,37 @@ /* Global font and font size, excluding common icon elements */ /* Note: Exclusions added to prevent overriding icon fonts */ -*:not([class*="icon"]):not([class*="glyph"]):not([class*="fa"]):not(i):not( - span - ) { +body, +p, +div, +code, +pre, +input, +textarea, +span:not([class*="icon"]):not([class*="glyph"]):not([class*="fa"]):not( + [class*="material-icons"] + ):not([class*="mdi"]):not([class*="iconify"]):not([class*="ion"]):not( + [class*="ti"] + ):not([class*="fi"]):not([class*="oi"]):not([class*="icofont"]):not( + [class*="material-symbols-outlined"] + ):not([class^="icon-"]):not([class*=" icon-"]):not([class*="msi-"]):not( + [class*="zsci-"] + ):not([class*="zmci-"]), +i:not([class*="icon"]):not([class*="glyph"]):not([class*="fa"]):not( + [class*="material-icons"] + ):not([class*="mdi"]):not([class*="iconify"]):not([class*="ion"]):not( + [class*="ti"] + ):not([class*="fi"]):not([class*="oi"]):not([class*="icofont"]):not( + [class*="material-symbols-outlined"] + ):not([class^="icon-"]):not([class*=" icon-"]):not([class*="msi-"]):not( + [class*="zsci-"] + ):not([class*="zmci-"]):not([class*="fui-Icon-font"]):not( + [class*="ms-Checkbox-checkmark"] + ):not([class*="flaticon"]), +[class^="icon-"]:not([class*="icon"]), +[class*=" icon-"]:not([class*="icon"]), +[class*="msi-"]:not([class*="icon"]), +[class*="zsci-"]:not([class*="icon"]), +[class*="zmsi-"]:not([class*="icon"]) { font-family: "Fira Code" !important; /* font-size: 10pt !important; */ } @@ -13,6 +42,7 @@ font-family: "Fira Code" !important; } } + /* App menu */ #appMenu-popup { font-family: "Fira Code" !important; diff --git a/chrome/userChrome.css b/chrome/userChrome.css index 7e43d09..a9772b9 100644 --- a/chrome/userChrome.css +++ b/chrome/userChrome.css @@ -7,6 +7,7 @@ @import "menu/appmenu.css"; @import "menu/contextmenu.css"; @import "menu/extensions-menu.css"; +@import "menu/developer-tools.css"; @import "browser/navigation.css"; @import "misc/round-items.css"; @import "panel/statuspanel.css"; @@ -14,3 +15,20 @@ @import "styling/fonts.css"; @import "browser/tweaks.css"; @import "styling/colors.css"; + +/* Autoscroll */ +.autoscroller { + --panel-border-color: transparent !important; + background-color: transparent !important; + opacity: 1 !important; +} + +/* Remove site/browser boundary line */ +#tabbrowser-tabbox { + outline: none !important; + box-shadow: none !important; +} +#tabbrowser-tabbox { + outline: none !important; + box-shadow: none !important; +} diff --git a/chrome/userContent.css b/chrome/userContent.css index 9b43241..e836264 100644 --- a/chrome/userContent.css +++ b/chrome/userContent.css @@ -8,12 +8,16 @@ @import "sites/mozilla.css"; @import "sites/youtube.css"; @import "sites/google.css"; +@import "sites/chatgpt.css"; +@import "sites/gemini.css"; +@import "sites/spotify.css"; +@import "sites/proton.css"; -/* Text Highlight color in webpages */ +/* Text Highlight color on webpages */ @-moz-document regexp("http(s)?:.*") { ::selection { - background-color: #c38f8f; - color: #ffffff; + background-color: transparent !important; + color: #c38f8f !important; } } diff --git a/misc/firefox-css-variables.md b/misc/firefox-css-variables.md new file mode 100644 index 0000000..dd59976 --- /dev/null +++ b/misc/firefox-css-variables.md @@ -0,0 +1,233 @@ +# FX CSS Variables + +[Source](https://gist.github.com/MrOtherGuy/a673848c95823225f7b198199f87a396) + +## Main Window + +- --arrowpanel-background +- --arrowpanel-border-color +- --arrowpanel-color +- --arrowpanel-dimmed +- --arrowpanel-dimmed-even-further +- --arrowpanel-dimmed-further +- --arrowpanel-padding +- --autocomplete-popup-background +- --autocomplete-popup-color +- --autocomplete-popup-highlight-background +- --autocomplete-popup-highlight-color +- --avatar-image-url +- --backbutton-active-background +- --backbutton-background +- --backbutton-border-color +- --backbutton-hover-background +- --cfr-active-color +- --cfr-animation-duration +- --cfr-button-addons-icon +- --cfr-button-features-icon +- --chrome-content-separator-color +- --default-arrowpanel-background +- --default-arrowpanel-border-color +- --default-arrowpanel-color +- --downloads-item-details-opacity +- --downloads-item-font-size-factor +- --downloads-item-height +- --drag-drop-transition-duration +- --in-content-button-background +- --in-content-button-background-active +- --in-content-button-background-hover +- --in-content-primary-button-background +- --in-content-primary-button-background-active +- --in-content-primary-button-background-hover + +## Navigator Toolbox + +- --tabs-border-color + +## Tabs Toolbar + +- --tabs-top-border-width +- --toolbarbutton-active-background +- --toolbarbutton-hover-background + +## Toolbar + +- --backbutton-background +- --backbutton-active-background +- --backbutton-hover-background +- --toolbarbutton-icon-fill-attention + +## Tabbrowser Tabs + +- --tab-line-color +- --tab-loading-fill +- --tab-loader-size +- --tabs-top-border-width +- --tab-min-width + +## Sidebar + +- --sidebar-background-color +- --sidebar-text-color +- --sidebar-border-color + +## Newtab Page + +- --newtab-search-icon +- --newtab-background-color +- --newtab-text-primary-color +- --lwt-sidebar-background-color +- --lwt-sidebar-text-color +- --newtab-background-color +- --newtab-border-primary-color +- --newtab-border-secondary-color +- --newtab-button-primary-color +- --newtab-button-secondary-color +- --newtab-element-active-color +- --newtab-element-hover-color +- --newtab-icon-primary-color +- --newtab-icon-secondary-color +- --newtab-icon-tertiary-color +- --newtab-inner-box-shadow-color +- --newtab-link-primary-color +- --newtab-link-secondary-color +- --newtab-text-conditional-color +- --newtab-text-primary-color +- --newtab-text-secondary-color +- --newtab-textbox-background-color +- --newtab-textbox-border +- --newtab-textbox-focus-color +- --newtab-textbox-focus-boxshadow +- --newtab-feed-button-background +- --newtab-feed-button-text +- --newtab-feed-button-background-faded +- --newtab-feed-button-text-faded +- --newtab-feed-button-spinner +- --newtab-contextmenu-background-color +- --newtab-contextmenu-button-color +- --newtab-modal-color +- --newtab-overlay-color +- --newtab-section-header-text-color +- --newtab-section-navigation-text-color +- --newtab-section-active-contextmenu-color +- --newtab-search-border-color +- --newtab-search-dropdown-color +- --newtab-search-dropdown-header-color +- --newtab-search-header-background-color +- --newtab-search-icon-color +- --newtab-search-wordmark-color +- --newtab-topsites-background-color +- --newtab-topsites-icon-shadow +- --newtab-topsites-label-color +- --newtab-card-active-outline-color +- --newtab-card-background-color +- --newtab-card-hairline-color +- --newtab-card-placeholder-color +- --newtab-card-shadow +- --newtab-snippets-background-color +- --newtab-snippets-hairline-color +- --trailhead-header-text-color +- --trailhead-cards-background-color +- --trailhead-card-button-background-color +- --trailhead-card-button-background-hover-color +- --trailhead-card-button-background-active-color + +## In-Content UI (Options, Addons Manager, etc.) + +- --animation-curve +- --arrowpanel-background +- --arrowpanel-border-color +- --arrowpanel-color +- --arrowpanel-padding +- --blue-40 +- --blue-40-a10 +- --blue-50 +- --blue-50-a30 +- --blue-60 +- --blue-70 +- --blue-80 +- --card-outline-color +- --card-padding +- --card-shadow +- --card-shadow-focus +- --card-shadow-hover +- --default-arrowpanel-background +- --default-arrowpanel-border-color +- --default-arrowpanel-color +- --green-50 +- --green-60 +- --green-70 +- --green-80 +- --green-90 +- --grey-20 +- --grey-30 +- --grey-40 +- --grey-60 +- --grey-90 +- --grey-90-a10 +- --grey-90-a20 +- --grey-90-a30 +- --grey-90-a50 +- --grey-90-a60 +- --in-content-border-active +- --in-content-border-active-shadow +- --in-content-border-color +- --in-content-border-focus +- --in-content-border-highlight +- --in-content-border-hover +- --in-content-border-invalid +- --in-content-border-invalid-shadow +- --in-content-box-background +- --in-content-box-background-active +- --in-content-box-background-hover +- --in-content-box-background-odd +- --in-content-box-border-color +- --in-content-box-info-background +- --in-content-button-background +- --in-content-button-background-active +- --in-content-button-background-hover +- --in-content-category-background-active +- --in-content-category-background-hover +- --in-content-category-background-selected-active +- --in-content-category-background-selected-hover +- --in-content-category-outline-focus +- --in-content-category-text-selected +- --in-content-category-text-selected-active +- --in-content-deemphasized-text +- --in-content-dialog-header-background +- --in-content-item-hover +- --in-content-item-selected +- --in-content-link-color +- --in-content-link-color-active +- --in-content-link-color-hover +- --in-content-link-color-visited +- --in-content-page-background +- --in-content-page-color +- --in-content-primary-button-background +- --in-content-primary-button-background-active +- --in-content-primary-button-background-hover +- --in-content-selected-text +- --in-content-tab-color +- --in-content-table-background +- --in-content-table-border-dark-color +- --in-content-table-header-background +- --in-content-text-color +- --in-content-warning-container +- --orange-50 +- --panel-border-radius +- --panel-disabled-color +- --purple-70 +- --red-50 +- --red-50-a30 +- --red-60 +- --red-70 +- --red-80 +- --red-90 +- --shadow-10 +- --shadow-30 +- --yellow-10 +- --yellow-50 +- --yellow-60 +- --yellow-60-a30 +- --yellow-70 +- --yellow-80 +- --yellow-90 diff --git a/scripts/download-firefox-addon.sh b/scripts/download-firefox-addon.sh new file mode 100755 index 0000000..f93e0a2 --- /dev/null +++ b/scripts/download-firefox-addon.sh @@ -0,0 +1,27 @@ +#!/bin/sh + +# Script to download the latest version of a Firefox addon + +show_usage() { + echo "Usage: $0 " + echo "Example: $0 ublock-origin" + exit 1 +} + +if [ -z "$1" ]; then + show_usage +fi + +PLUGIN_NAME="$1" +URL="https://addons.mozilla.org/firefox/downloads/latest/$PLUGIN_NAME/latest.xpi" +OUTPUT_FILE="${PLUGIN_NAME}.xpi" + +echo "Downloading the latest version of $PLUGIN_NAME..." +curl -L -o "$OUTPUT_FILE" "$URL" + +if [ $? -eq 0 ]; then + echo "Downloaded successfully: $OUTPUT_FILE" +else + echo "Failed to download the addon." + exit 1 +fi diff --git a/user.js b/user.js index 86307de..0ad8b34 100644 --- a/user.js +++ b/user.js @@ -6,6 +6,7 @@ user_pref("layout.css.has-selector.enabled", true); // UI user_pref("browser.compactmode.show", true); user_pref("layout.css.prefers-color-scheme.content-override", 0); // Force dark mode +user_pref("ui.key.menuAccessKey", 0); // Remove the underscores on Context Menu Items // Remove native context menus user_pref("widget.gtk.native-context-menus", false); @@ -33,6 +34,26 @@ user_pref("extensions.screenshots.disabled", true); user_pref("browser.dataFeatureRecommendations.enabled", false); user_pref("extensions.htmlaboutaddons.recommendations.enabled", false); // Remove 'Recommendations' tab in about:addons +// Devtools +user_pref("devtools.debugger.enabled", true); +user_pref("devtools.debugger.auto-pretty-print", true); +user_pref("devtools.debugger.remote-enabled", true); +// Remove the annoying "Incoming connection" confirmation dialog when opening the Browser Toolbox +user_pref("devtools.debugger.prompt-connection", false); + +// Media +user_pref("media.default_volume", "1.0"); +user_pref("media.volume_scale", "1.0"); +user_pref("media.mediasource.experimental.enabled", true); +user_pref("media.hardwaremediakeys.enabled", true); +user_pref("media.ffmpeg.enabled", true); +user_pref("media.ffmpeg.encoder.enabled", true); +user_pref("media.flac.enabled", true); +user_pref("media.gmp.encoder.enabled", true); +user_pref("media.gmp.encoder.multithreaded", true); +user_pref("media.hls.enabled", true); +user_pref("media.peerconnection.video.denoising", true); + // Warnings user_pref("browser.aboutConfig.showWarning", false); // disable about:config warning user_pref("browser.tabs.warnOnClose", true); // enable warning when closing multiple tabs (recommended) @@ -209,3 +230,25 @@ user_pref("mousewheel.acceleration.start", -1); user_pref("mousewheel.min_line_scroll_amount", 5); user_pref("toolkit.scrollbox.horizontalScrollDistance", 5); user_pref("toolkit.scrollbox.verticalScrollDistance", 3); + +/// Addons/Extensions +// Pocket +user_pref("extensions.pocket.enabled", true); +user_pref("extensions.pocket.refresh.emailButton.enabled", true); +user_pref("extensions.pocket.refresh.hideRecentSaves.enabled", true); +user_pref("extensions.pocket.showHome", true); +user_pref("extensions.pocket.bffRecentSaves", true); +user_pref("browser.urlbar.pocket.featureGate", true); +user_pref("browser.urlbar.suggest.pocket", true); +user_pref( + "browser.newtabpage.activity-stream.section.highlights.includePocket", + true +); +user_pref( + "browser.newtabpage.activity-stream.discoverystream.sendToPocket.enabled", + true +); +user_pref( + "browser.newtabpage.activity-stream.discoverystream.saveToPocketCard.enabled", + true +);