userChromeJS / autoconfig.js and extensions
Video running installation steps below: https://youtu.be/_4fdUdp3G4o
Download this zip file and extract its content to Firefox installation folder (usually C:\Program Files\Mozilla Firefox). For Linux paths, read this. And this for macOS paths.
Click Firefox menu button (☰) -> Help -> More troubleshooting information or simply open about:support. Find "Profile Folder", then click "Open folder". In there, create a new folder called chrome.
Download one of the files below and extract its content in chrome folder.
Now, if you're only interested in extensions, you can skip to step 6.
Save the desired userChromeJS scripts into chrome. Read below the description of some of them.
If you want a button to manage your scripts, including the ability to disable/enable scripts without needing to restart¹ Firefox or Thunderbird, save rebuild_userChrome.uc.js into chrome.
Open about:support and click "Clear startup cache…" to force Firefox to load userChromeJS on the next startup.
Restart Firefox.
¹: Not all scripts are restartless. These have @shutdown at the beginning of the code. Almost all scripts on this page were written by me to be restartless, but almost all scripts you get from other sources are not.
ᵀᴮ: also compatible with Thunderbird
(click to expand)
BeQuiet The main purpose of this script is to control media without having to select the tab playing it. So I can play/pause a YouTube video or skip to the next song in Deezer while browsing Reddit, for example. Three hotkeys are defined by this script: Ctrl+Alt+S to play/pause, Ctrl+Alt+D to next song and Ctrl+Alt+A to previous song.Besides that, no more than one tab should play audio at the same time. Each tab paused by another tab that starts playing is added to a stack. So if I open a new YouTube video while there's already one playing, the new tab starts playing and the other is paused. When the video ends or when I pause it, the first YouTube tab resumes playing.
As for now, I only added support for a few sites, like Deezer, Spotify and YouTube. I chose not to support next/previous in YouTube, only play/pause.
Enter Selects Have you ever been frustrated because you wanted Firefox to autofill https://www.youtube.com/feed/subscriptions when you type "youtube" in location bar? That's because Firefox only autofills domains, so it doesn't go beyond https://www.youtube.com/. Also because of this, Firefox will never autofill https://www.reddit.com/r/firefox/ when you type firefox, no matter how many times you've visited that page. A common case is new Firefox users complaining that browser isn't autocompleting gmail.com after typing gm.
I don't like this. Firefox should be smart to always prioritize the page with higher visit score in browser history. That's what this script fixes. It preselects the first suggestion from address bar. For instance, if this page is the first suggestion when you type xiaoxiaoflood, you don't need to press down arrow key before Enter.
Pages you often visit always rise to the first position, so accessing any frequent page will be as easy as typing no more than three chars + Enter, like just you + Enter to load YouTube Feed directly instead of YouTube homepage. It's even possible to teach Firefox to load YouTube Feed with y and YouTube Homepage with yo, it's just a matter of practice.
This script replaces urlbar autocomplete, so browser.urlbar.autoFill is disabled on install. If at any time you miss domain autofill, you still sort of can achieve that by pressing Tab IF the domain of first suggestion matches what you've typed so far. Example: you typed git and the first suggestion is from github.com. Pressing Tab key will autocomplete the domain even if the first suggestion is not just github.com - it may be github.com/whatever. But if the typed input doesn't match the domain of the first suggestion, then Tab key will have default behavior of selecting next suggestion just like down arrow key.
By default, first entry is only selected if typed input is a single word. That's because when I type multiple words I'm probably wanting to make a search with my default search engine, not to load a URL from history. You can change that if you want: find AUTOSELECT_WITH_SPACE at the beginning of the code of this script, replace false by true, save then reload.
Screenshot:
Extensions Update Checker Firefox checks for available addon updates every 24 hours. You can disable autoinstall updates, but then you'll only know there are available updates if you manually open Add-ons Manager. This script:ignoreList if you are deliberately using an outdated version of an extension and don't want to be notified that an update is available.You need to set a master password in Firefox Options > Privacy & Security > [×] Use a Primary Password.
Locked:
Unlocked:
MinMaxClose Button Toolbar button to replace native window buttons (minimize, maximize and close). I use Sidebery (vertical tabbar) with hidden titlebar, so I need this.Left-click to minimize (so I can't close it accidentally).
Right-click to close.
Middleclick restores to fixed position/size (edit script code with your preferred values). If you want to restore to previous position/size, use Shift + Middleclick.
GESTURES:). Some of them:Gestures are cumulative if possible, so holding right-click + turning mouse wheel will activate a different tab for each "tick" in the wheel.
Advantages over existing extensions:
Download link - extract it in chrome folder.
multifoxContainerWhen Firefox introduced containers, I created this script to get some features that I missed from Multifox, the legacy addon that implemented "containers" years before Firefox having this feature by default. Since then, Firefox has added some things this script had, so I removed them. But I still use it for two things:
New tabs (Ctrl+T or New Tab button) inherit the container of current tab (except for Private Tabs).
The label in urlbar serves as menubutton to reopen current tab in other container. With left click, current tab is replaced. With middleclick, a new tab opens without closing the other one.
[Downloa
No open issues yet, or sync has not completed.