Last active
July 31, 2026 08:42
-
-
Save cyyynthia/d9ca3e2ea26dd6cf50ea46178abb5ec9 to your computer and use it in GitHub Desktop.
uBO custom rules I use to make my browsing experience more bearable on websites I commonly use.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| [uBlock Origin] | |
| ! Written by Cynthia :: https://cynthia.dev | |
| ! SPDX-License-Identifier: 0BSD | |
| ! I'm trying to keep the list not too opinionated such that it is viable to subscribe to the gist... | |
| ! Some *very* opinionated rules I personally use are included, but commented out. | |
| ! Copy the rules in your own custom filters if you want to use them. | |
| ! To find those rules, search for "[Opinionated]" in the file. | |
| ! >> I post about updates on Bluesky: @cynthia.dev | |
| !! GitHub ------------- | |
| !! GitHub Copilot | |
| ! Homepage bulk | |
| github.com##div[class^="CopilotHeaderBase-module__copilotLogo"] | |
| github.com##div[class^="CopilotChatInputPartial-module__inputSection"] | |
| github.com##div[class^="CopilotChatInputPartial-module__inputSection"] + h2 | |
| github.com##div[class^="CommandStarters-module__container"] | |
| github.com##div[class^="DashboardListView-module__contextBubbleMenu"] | |
| ! Misc references to Copilot | |
| github.com##.AppHeader-CopilotChat | |
| github.com##li:has(> a[href$="/copilot"]) | |
| github.com##li:has(> a[href="/github-copilot/signup"]) | |
| github.com##div[data-testid="issue-viewer-metadata-pane"] div[class*="CopilotAgentModeButton"] | |
| github.com##span:not([class]):has(> div[class^="prc-ButtonGroup-ButtonGroup"]:has(a[href$="/copilot"])) | |
| github.com##section[class*="PullRequestFilesToolbar"] div:has(> button > .octicon-copilot) | |
| github.com##li[data-component="ActionList.Item"]:has(span[class^=CopilotApp]) | |
| ! Restore changelog (removed by Fanboy's annoyances) | |
| github.com#@#.dashboard-changelog:has-text(Latest from our changelog) | |
| !! Twitter ------------- | |
| !! Twitter Sidebar slop | |
| ! Removes: | |
| ! - Twitter Blue (Premium) | |
| ! - Twitter Piss (Verified Org) | |
| ! - Twitter Piss 2 (Premium Business) | |
| ! - Twitter Slop (Grok) | |
| ! - Birdwatch (Community Notes) | |
| ! - Knock-off LinkedIn | |
| ! - Communities | |
| ! - "Connect" | |
| ! - Spaces | |
| ! - Creator Studio | |
| ! - Twitter Ads | |
| twitter.com,x.com##:is([data-testid="AppTabBar_Home_Link"] ~ a, div:has(> div > a[href="/settings"][data-testid="settings"]) a):is(a[href="/i/grok"], a[href="/i/premium_sign_up"], a[href="/i/verified-orgs-signup"], a[href="/i/premium-business"], a[href="/i/communitynotes"], a[href="/jobs"], a[href$="/communities"], a[href="/i/connect_people"], a[href="/i/spaces/start"], a[href="/i/jf/creators/studio"], a[href^="https://ads.x.com"]) | |
| !! Twitter Blue CTA | |
| twitter.com,x.com##div:has(> aside > a[href="/i/verified-choose"]) | |
| twitter.com,x.com##div[data-testid="sidebarColumn"] div:has(> div > aside[role="complementary"]:has(a[href="/i/premium_sign_up"])) | |
| twitter.com,x.com##div:has(> div > div[data-testid="super-upsell-UpsellCardRenderProperties"]) | |
| twitter.com,x.com##nav + div:has(div[aria-live="polite"] a[href="/i/premium_sign_up"]) | |
| !! Twitter "Promote" button on own tweets | |
| twitter.com,x.com##article[data-testid="tweet"] a[href*="/quick_promote_web/"] | |
| !! Twitter Grok Slop buttons | |
| twitter.com,x.com##[data-testid="ScrollSnap-List"] > div:has([data-testid="grokImgGen"]) | |
| twitter.com,x.com##[data-testid="tweet"] div:has(> button[aria-label*="Grok"]) | |
| twitter.com,x.com##[data-testid="HoverCard"] div:has(> button:has(svg):has(svg + span:has-text(Profile Summary))) | |
| twitter.com,x.com##button[aria-label="Profile Summary"]:has(svg) | |
| twitter.com,x.com###layers div[style]:has([data-testid="GrokDrawer"]) | |
| twitter.com,x.com##div:has(> div:not([data-testid="Dropdown"]) > a[href^="https://grok.com"]) | |
| twitter.com,x.com##[data-testid="Dropdown"] > a[href^="https://grok.com"] | |
| twitter.com,x.com##div:has(+ [data-testid="tweetText"]) svg | |
| !! [Opinionated] Hide Twitter Blue mark, but keep Corporate and Government marks | |
| ! twitter.com,x.com##[data-testid="icon-verified"]:not(:has([fill])) | |
| !! Twitter logo | |
| twitter.com,x.com##:is(header h1, #placeholder) svg path:style(d: path("M21.543 7.104c.015.211.015.423.015.636 0 6.507-4.954 14.01-14.01 14.01v-.003A13.94 13.94 0 0 1 0 19.539a9.88 9.88 0 0 0 7.287-2.041 4.93 4.93 0 0 1-4.6-3.42 4.916 4.916 0 0 0 2.223-.084A4.926 4.926 0 0 1 .96 9.167v-.062a4.887 4.887 0 0 0 2.235.616A4.928 4.928 0 0 1 1.67 3.148 13.98 13.98 0 0 0 11.82 8.292a4.929 4.929 0 0 1 8.39-4.49 9.868 9.868 0 0 0 3.128-1.196 4.941 4.941 0 0 1-2.165 2.724A9.828 9.828 0 0 0 24 4.555a10.019 10.019 0 0 1-2.457 2.549z") !important) | |
| ! Birdhouse | |
| twitter.com,x.com##[data-testid="AppTabBar_Home_Link"] svg path:style(d: path("M12 9c-2.209 0-4 1.791-4 4s1.791 4 4 4 4-1.791 4-4-1.791-4-4-4zm0 6c-1.105 0-2-.895-2-2s.895-2 2-2 2 .895 2 2-.895 2-2 2zm0-13.304L.622 8.807l1.06 1.696L3 9.679V19.5C3 20.881 4.119 22 5.5 22h13c1.381 0 2.5-1.119 2.5-2.5V9.679l1.318.824 1.06-1.696L12 1.696zM19 19.5c0 .276-.224.5-.5.5h-13c-.276 0-.5-.224-.5-.5V8.429l7-4.375 7 4.375V19.5z") !important) | |
| twitter.com,x.com##[data-testid="AppTabBar_Home_Link"]:has(span:matches-css(font-weight: 700)) svg path:style(d: path("M12 1.696L.622 8.807l1.06 1.696L3 9.679V19.5C3 20.881 4.119 22 5.5 22h13c1.381 0 2.5-1.119 2.5-2.5V9.679l1.318.824 1.06-1.696L12 1.696zM12 16.5c-1.933 0-3.5-1.567-3.5-3.5s1.567-3.5 3.5-3.5 3.5 1.567 3.5 3.5-1.567 3.5-3.5 3.5z") !important) | |
| !! Google's Try Gemini | |
| google.com##div:has(> span[data-is-tooltip-wrapper] button + div:has-text("Try Gemini")) | |
| !! Nuxt's docs | |
| nuxt.com##header button:has(svg) | |
| nuxt.com##[data-reka-collection-item][href^="https://chatgpt.com"] | |
| nuxt.com##[data-reka-collection-item][href^="https://claude.ai"] | |
| nuxt.com##div[role="group"]:has(> [href*="/mcp/deeplink"]) | |
| ! Ctrl+K | |
| nuxt.com##[data-dismissable-layer] [data-reka-collection-item]:has(.i-custom\:nuxi) | |
| nuxt.com##[data-dismissable-layer] div[data-slot="label"]:has-text("AI") | |
| ! Clanker bullshit | |
| !- Hiding the aside works just fine, but the TOC is hidden :/ | |
| !- Setting the local storage item works on page load, but not when it appears. FWIW, trusted-click-element didn't seem to be useful either..? | |
| !nuxt.com##aside[data-slot="root"]:has(a[href="https://vercel.com/ai-gateway"]) | |
| !nuxt.com##aside[data-slot="root"]:has(path.nuxi-body) | |
| nuxt.com##+js(set-local-storage-item, chat-open, false) | |
| ||*.nuxt.com/api/ai | |
| ||nuxt.com/eve/* | |
| !!!! [EXPERIMENTAL] | |
| !! Rules for Docus-based websites. | |
| !! Currently only enabled on *.nuxt.com, *.nuxtjs.org, *.comark.dev, *.nuxt.studio | |
| !! Aggressive "Ask clanker" bullshit | |
| nuxt.com,nuxtjs.org,comark.dev,nuxt.studio##.fixed:has(> form input[aria-label*="Ask AI"]) | |
| nuxt.com,nuxtjs.org,comark.dev,nuxt.studio##button:has-text("Ask AI") | |
| nuxt.com,nuxtjs.org,comark.dev,nuxt.studio##*:has(button:has-text("Ask AI"):only-child) | |
| !! Docus-based sites | |
| ! "Ask AI" button in the header | |
| nuxt.com,nuxtjs.org,comark.dev,nuxt.studio###__nuxt header button:has(> :where(.i-custom\:ai, .i-lucide\:bot-message-square)) | |
| ! "Explain with AI" in the right sidebar of the docs | |
| nuxt.com,nuxtjs.org,comark.dev,nuxt.studio###__nuxt nav[data-slot="root"] li:has(> button[data-slot] > [data-slot*="eadingIcon"]:where(.i-lucide\:brain, .i-lucide\:bot-message-square)) | |
| nuxt.com,nuxtjs.org,comark.dev,nuxt.studio###__nuxt nav[data-slot="root"] button[data-slot]:has( > [data-slot*="eadingIcon"]:where(.i-lucide\:brain, .i-lucide\:bot-message-square)) | |
| ! Remove entire container if it's the only item | |
| nuxt.com,nuxtjs.org,comark.dev,nuxt.studio###__nuxt nav[data-slot] nav[data-slot="root"]:has(li:only-child > button[data-slot] > [data-slot*="eadingIcon"]:where(.i-lucide\:brain, .i-lucide\:bot-message-square)) | |
| nuxt.com,nuxtjs.org,comark.dev,nuxt.studio###__nuxt nav[data-slot] div[role="separator"]:has(+ nav[data-slot="root"] li:only-child > button[data-slot] > [data-slot*="eadingIcon"]:where(.i-lucide\:brain, .i-lucide\:bot-message-square)) | |
| ! Variant that doesn't use <ul> | |
| nuxt.com,nuxtjs.org,comark.dev,nuxt.studio###__nuxt nav[data-slot="root"] div[role="separator"]:has(+ button[data-slot] > [data-slot*="eadingIcon"]:where(.i-lucide\:brain, .i-lucide\:bot-message-square)) | |
| ! "Ask AI" bottom text field | |
| nuxt.com,nuxtjs.org,comark.dev,nuxt.studio###__nuxt div.fixed.pointer-events-none[data-ap]:has(> form.pointer-events-none) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment