Since I am not a developer, and can't really contribute as much as I would like to the UXP and Pale Moon related projects like Sealion, I thought I would create this post to hopefully help other users in customizing their Sealion browser and increasing functionality.
My goal with all these tweaks was to get it close to the luakit browser, qutebrowser or vimb, you can also get similar functionality with Pale Moon + Pentadactyl extension.
This guide has config examples of:
1) userChrome.css (some of them can be used by Pale Moon, and maybe Basilisk as well)
2) Code you can use with the Dorando Keyconfig extension.
NOTES:
1) The code I am about to share I got from spending multiple hours searching the internet. However, most code I got from the mozillazine forums https://forums.mozillazine.org/ ( what an amazing resource that is), the trick is to find code that targets sealion or the older Firefox codebase.
2) This targets Sealion on Linux with a light/gray theme, Nordic Polar GitHub - https://github.com/EliverLara/Nordic-Po ... 9063a3cbec.
3) You will need to install the following extensions:
-Dorando Keyconfig
-Hit-a-Hint
-Swarth
-Tab Clicking Options (middle click close etc)
- uBlock Origin & Cookies Exterminator
Without further ado, here we go:
1) userChrome.css
I focused here on getting the UI minimal, so this is mostly hiding elements and minizing spacing etc.
Code: Select all
/* Do not remove the @namespace line -- it's required for correct functioning */
@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); /* set default namespace to XUL */
/* *** HIDE SUPERFLUOUS ELEMENTS *** */
.autocomplete-history-dropmarker,
.search-go-button,
.tabs-closebutton,
.tabs-newbutton,
/* .toolbarbutton-menubutton-dropmarker, */
tooltip {display:none !important;}
/*HIDE Grippy Handles in navbar & bookmarks toolbars*/
toolbargrippy
{display: none !important;}
/* Hide "List All Tabs" button */
.tabs-alltabs-button { display: none !important; }
.tabs-container > stack { display: none !important; }
/* Hide Scrollbars */
#content browser {
margin-right: -12px !important;
margin-bottom: -12px !important;
overflow-y: scroll;
overflow-x: hidden;
}
/* ---- &&&& Hide Elements END &&&& ---- */
/* ***** Tabs BEGIN ***** */
/* Hide Favicons on Tab Bar */
.tabbrowser-tab .tab-icon
{display: none !important;}
tab {
/* font-family: monospace; */
font-weight: normal;
border: none !important;
text-align: center;
margin-top: 0px !important;
margin-left: -1px !important;
margin-right: -4px !important;
}
/* Tab Font Colors */
/* Active Tab Hover font Color */
tab:hover {
color: #658CB3 !important;
}
/* Change inactive tab hover font color */
tab:not([selected="true"]):hover {
color: #658CB3 !important;
}
/* Not selected Tab Font Color */
tab:not([selected="true"]) {
color: #97A6BF !important;
}
/* Safari style tab width */
.tabbrowser-tab{max-width: 100vw !important;}
.tabbrowser-tab{min-height: 23px !important;}
/* ---- &&&& Tabs END &&&& ---- */
/* ***** Toolbar Tweaks ***** */
/* Center URL Bar Font */
#urlbar {
text-align: center;
font-family: monospace;
font-size: 14px !important;
padding: 0px 0px 0px 0px !important;
margin-top: 0px !important;
margin-bottom: 0px !important;
margin-left: 0px !important;
margin-right: 0px !important;
}
/* Left Align type-ahead auto-complete drop down in URL bar */
#PopupAutoComplete, .autocomplete-tree {
text-align: left;
}
/* Remove Favicon placeholder in URL bar */
#page-proxy-deck {
display: none !important;
}
/* Hide Bookmark Button in URL bar */
/* #star-button {display: none !important;} */
/* Height of the Bookmarks Toolbar */
#PersonalToolbar {
padding: 0px 0px 0px 0px !important;
height: 30px !important;
margin-left: -2px !important;
margin-top: -2px !important;
margin-bottom: -3px !important;
}
/* Toolbar height, contains URL bar*/
toolbar {
max-height: 32px !important;
padding: 0px 0px 0px 0px !important;
margin-top: 0.4px !important;
margin-right: -1px !important;
margin-bottom: -2px !important;
margin-left: -2px !important;
}
/* Increase size of search toolbar, hiding the scrollbar offsets the size, this fixes it */
#FindToolbar {
height: 34px !important;
padding: 0px 0px 0px 0px !important;
margin-top: +11px !important;
}
/* ---- &&&& Toolbar Tweaks END &&&& ---- */
/* --- **** Menus **** --- */
/* Hide Right-Click Menu Items */
menupopup > menuitem[label="Properties"] {display: none !important;}
menupopup > menuitem[label="View Page Source"] {display: none !important;}
menupopup > menuitem[label="View Background Image"] {display: none !important;}
#context-savepage {display: none !important;}
/* Hide Menu Items */
#navigator-toolbox menu[label="Go"]
{ display: none !important; }
#navigator-toolbox menu[label="Window"]
{ display: none !important; }
/* ---- &&&& Menus END &&&& ---- */
Switch to Tab 1
Code: Select all
gBrowser.selectTabAtIndex(0, event);
Code: Select all
gBrowser.selectTabAtIndex(1, event);
Code: Select all
gBrowser.mTabContainer.advanceSelectedTab(1);
Code: Select all
gBrowser.mTabContainer.advanceSelectedTab(-1);
Code: Select all
gBrowser.mTabContainer.mAllTabsPopup.showPopup();
Code: Select all
BrowserOpenTab();
Code: Select all
gBrowser.removeAllTabsBut(gBrowser.mCurrentTab);
Code: Select all
gBrowser.undoCloseTab(0);
Code: Select all
gBrowser.moveTabBackward();
Code: Select all
gBrowser.moveTabForward();
Code: Select all
gBrowser.loadURI('https://www.yr.no');
Code: Select all
gBrowser.reloadAllTabs(gBrowser.mContextTab);
Code: Select all
BrowserReload();
Code: Select all
Application.restart();
Code: Select all
Services.cookies.removeAll()
Code: Select all
var browserHistory = Components.classes["@mozilla.org/browser/nav-history-service;1"].getService(Components.interfaces.nsIBrowserHistory);
PlacesUtils.history.clear()
Code: Select all
Components.classes["@mozilla.org/widget/clipboardhelper;1"]
.getService(Components.interfaces.nsIClipboardHelper)
.copyString(content.location);
Code: Select all
Components.classes["@mozilla.org/widget/clipboardhelper;1"]
.getService(Components.interfaces.nsIClipboardHelper)
.copyString(content.document.title + " - " + content.location);
Paste URL from clipboard
Code: Select all
var url = readFromClipboard(); if (url) content.location = url;
Code: Select all
ShowAndSelectContentsOfURLBar();
Code: Select all
openNewPrivateWith('about:privatebrowsing');
Code: Select all
goDoCommand('cmd_scrollLineDown');
Code: Select all
goDoCommand('cmd_scrollLineDown');
Toggle Bookmarks Toolbar aka Personal Toolbar
Code: Select all
var toolbar = document.getElementById("PersonalToolbar");
toolbar.collapsed = !toolbar.collapsed;
document.persist(toolbar.id, "collapsed");
Code: Select all
var toolbar = document.getElementById("nav-bar");
toolbar.collapsed = !toolbar.collapsed;
document.persist(toolbar.id, "collapsed");
Code: Select all
gBrowser.mStrip.collapsed = !gBrowser.mStrip.collapsed;
Code: Select all
Swarth.prefs.toggleEnabled();
Code: Select all
document.getElementById("PersonalToolbar").getElementsByAttribute("label","RSS")[0].open = true;
Code: Select all
/* See LICENSE file for copyright, license and warranty details. */
if(window.content && window.content.document && window.content.document.simplyread_original === undefined) window.content.document.simplyread_original = false;
function simplyread(nostyle, nolinks)
{
/* count the number of <p> tags that are direct children of parenttag */
function count_p(parenttag)
{
var n = 0;
var c = parenttag.childNodes;
for (var i = 0; i < c.length; i++) {
if (c[i].tagName == "p" || c[i].tagName == "P")
n++;
}
return n;
}
var doc;
doc = (document.body === undefined)
? window.content.document : document;
/* if simplyread_original is set, then the simplyread version is currently active,
* so switch to the simplyread_original html */
if (doc.simplyread_original) {
doc.body.innerHTML = doc.simplyread_original;
for (var i = 0; i < doc.styleSheets.length; i++)
doc.styleSheets[i].disabled = false;
doc.simplyread_original = false
return 0;
}
doc.simplyread_original = doc.body.innerHTML;
doc.body.innerHTML = doc.body.innerHTML.replace(/<br[^>]*>\s*<br[^>]*>/g, "<p>");
var biggest_num = 0;
var biggest_tag;
/* search for tag with most direct children <p> tags */
var t = doc.getElementsByTagName("*");
for (var i = 0; i < t.length; i++) {
var p_num = count_p(t[i]);
if (p_num > biggest_num) {
biggest_num = p_num;
biggest_tag = t[i];
}
}
if (biggest_num == 0) return 1;
/* save and sanitise content of chosen tag */
var fresh = doc.createElement("div");
fresh.innerHTML = biggest_tag.innerHTML;
fresh.innerHTML = fresh.innerHTML.replace(/<\/?font[^>]*>/g, "");
fresh.innerHTML = fresh.innerHTML.replace(/style="[^"]*"/g, "");
if(nolinks)
fresh.innerHTML = fresh.innerHTML.replace(/<\/?a[^>]*>/g, "");
fresh.innerHTML = fresh.innerHTML.replace(/<\/?span[^>]*>/g, "");
fresh.innerHTML = fresh.innerHTML.replace(/<style[^>]*>/g, "<style media=\"aural\">"); /* ensures contents of style tag are ignored */
for (var i = 0; i < doc.styleSheets.length; i++)
doc.styleSheets[i].disabled = true;
srstyle =
"p{margin:0ex auto;} h1,h2,h3,h4{font-weight:normal}" +
"p+p{text-indent:2em;} body{background:#7F8BA4 none}" +
"img{display:block; margin-left: auto; margin-right: auto;}" +
"h1{text-align:center;text-transform:uppercase}" +
"div#sr{width:50em;padding-top:2em;" +
" background-color:#7F8BA4; margin:auto; line-height:1.4;" +
" text-align:justified; font-family:'monospace'; font-size:20px; color:#FFFFFF; hyphens:auto;}";
/* text-rendering:optimizeLegibility; - someday this will work,
* but at present it just ruins justify, so is disabled */
doc.body.innerHTML =
"<style type=\"text/css\">" + (nostyle ? "" : srstyle) + "</style>" +
"<div id=\"sr\">" + "<h1>"+doc.title+"</h1>" + fresh.innerHTML + "</div>";
return 0;
}
simplyread();
Code: Select all
user_pref("extensions.dorandoKeyConfig.main.addBookmarkAsKb", "control][D][");
user_pref("extensions.dorandoKeyConfig.main.addBookmarkKb", "!][][");
user_pref("extensions.dorandoKeyConfig.main.hahMagicKey", "][H][");
user_pref("extensions.dorandoKeyConfig.main.hahStartKey", "][F][");
user_pref("extensions.dorandoKeyConfig.main.key_closeWindow", "!][][");
user_pref("extensions.dorandoKeyConfig.main.key_downloadManager", "!][][");
user_pref("extensions.dorandoKeyConfig.main.key_findReplace", "!][][");
user_pref("extensions.dorandoKeyConfig.main.key_findTypeText", "!][][");
user_pref("extensions.dorandoKeyConfig.main.key_inspectPage", "!][][");
user_pref("extensions.dorandoKeyConfig.main.key_newPrivateWindow", "control][P][");
user_pref("extensions.dorandoKeyConfig.main.key_print", "!][][");
user_pref("extensions.dorandoKeyConfig.main.key_reload", "!][][");
user_pref("extensions.dorandoKeyConfig.main.key_restoreTab", "][U][");
user_pref("extensions.dorandoKeyConfig.main.key_savePage", "!][][");
user_pref("extensions.dorandoKeyConfig.main.privateTab-key-openNewPrivateTab-1696079952194", "!][][");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_Back", "shift][H][][BrowserBack();H][chrome://navigator/content/navigator.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_Close All Tabs Except This One", "shift][D][][gBrowser.removeAllTabsBut(gBrowser.mCurrentTab);][chrome://navigator/content/navigator.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_Close Tab", "][D][][BrowserCloseTabOrWindow()][chrome://navigator/content/navigator.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_Cookies - Remove All", "control shift][C][][Services.cookies.removeAll()][chrome://navigator/content/navigator.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_Copy URL - YANK", "][Y][][Components.classes[\"@mozilla.org/widget/clipboardhelper;1\"]\n .getService(Components.interfaces.nsIClipboardHelper)\n .copyString(content.location);][chrome://navigator/content/navigator.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_Copy URL and Title - YANK", "shift][Y][][Components.classes[\"@mozilla.org/widget/clipboardhelper;1\"]\n.getService(Components.interfaces.nsIClipboardHelper)\n.copyString(content.document.title + \" - \" + content.location); ][chrome://navigator/content/navigator.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_Find Next", "!][][][BrowserFindAgain(false);][chrome://navigator/content/navigator.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_Find On Page", "][/][][BrowserFind();][chrome://navigator/content/navigator.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_Focus URL Bar", "][O][][ShowAndSelectContentsOfURLBar();][chrome://navigator/content/navigator.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_History - Clear All", "control shift][H][][var browserHistory = Components.classes[\"@mozilla.org/browser/nav-history-service;1\"].getService(Components.interfaces.nsIBrowserHistory);\nPlacesUtils.history.clear()][chrome://navigator/content/navigator.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_Move Tab Backward", "control shift][K][][gBrowser.moveTabBackward(); ][");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_Move Tab Forward", "control shift][J][][gBrowser.moveTabForward();][chrome://navigator/content/navigator.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_New Tab", "][T][][BrowserOpenTab();][chrome://navigator/content/navigator.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_Open Brutalist Report", "][5][][gBrowser.loadURI('https://brutalist.report/');][chrome://navigator/content/navigator.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_Open Folder RSS on Bookmarks Toolbar", "alt][R][][document.getElementById(\"PersonalToolbar\").getElementsByAttribute(\"label\",\"RSS\")[0].open = true;][chrome://navigator/content/navigator.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_Open Home", "][][VK_HOME][gBrowser.loadURI('https://lite.duckduckgo.com/html/');][chrome://navigator/content/navigator.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_Open Pale Moon Forum", "][2][][gBrowser.loadURI('https://forum.palemoon.org/');][chrome://navigator/content/navigator.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_Open Private Window", "!][][][OpenBrowserWindow({private: true})][chrome://navigator/content/navigator.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_Open Speedtest", "][3][][gBrowser.loadURI('https://openspeedtest.com/');][chrome://navigator/content/navigator.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_Paste URL", "][P][][var url = readFromClipboard(); if (url) content.location = url;][chrome://navigator/content/navigator.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_Reader Mode", "control][R][][/* See LICENSE file for copyright, license and warranty details. */\n\nif(window.content && window.content.document && window.content.document.simplyread_original === undefined) window.content.document.simplyread_original = false;\n\nfunction simplyread(nostyle, nolinks)\n{\n /* count the number of <p> tags that are direct children of parenttag */\n function count_p(parenttag)\n {\n var n = 0;\n var c = parenttag.childNodes;\n for (var i = 0; i < c.length; i++) {\n if (c[i].tagName == \"p\" || c[i].tagName == \"P\")\n n++;\n }\n return n;\n }\n \n var doc;\n doc = (document.body === undefined)\n ? window.content.document : document;\n \n /* if simplyread_original is set, then the simplyread version is currently active,\n * so switch to the simplyread_original html */\n if (doc.simplyread_original) {\n doc.body.innerHTML = doc.simplyread_original;\n for (var i = 0; i < doc.styleSheets.length; i++)\n doc.styleSheets[i].disabled = false;\n doc.simplyread_original = false\n return 0;\n }\n \n doc.simplyread_original = doc.body.innerHTML;\n doc.body.innerHTML = doc.body.innerHTML.replace(/<br[^>]*>\\s*<br[^>]*>/g, \"<p>\");\n \n var biggest_num = 0;\n var biggest_tag;\n \n /* search for tag with most direct children <p> tags */\n var t = doc.getElementsByTagName(\"*\");\n for (var i = 0; i < t.length; i++) {\n var p_num = count_p(t[i]);\n if (p_num > biggest_num) {\n biggest_num = p_num;\n biggest_tag = t[i];\n }\n }\n \n if (biggest_num == 0) return 1;\n \n /* save and sanitise content of chosen tag */\n var fresh = doc.createElement(\"div\");\n fresh.innerHTML = biggest_tag.innerHTML;\n fresh.innerHTML = fresh.innerHTML.replace(/<\\/?font[^>]*>/g, \"\");\n fresh.innerHTML = fresh.innerHTML.replace(/style=\"[^\"]*\"/g, \"\");\n if(nolinks)\n fresh.innerHTML = fresh.innerHTML.replace(/<\\/?a[^>]*>/g, \"\");\n fresh.innerHTML = fresh.innerHTML.replace(/<\\/?span[^>]*>/g, \"\");\n fresh.innerHTML = fresh.innerHTML.replace(/<style[^>]*>/g, \"<style media=\\\"aural\\\">\"); /* ensures contents of style tag are ignored */\n \n for (var i = 0; i < doc.styleSheets.length; i++)\n doc.styleSheets[i].disabled = true;\n \n srstyle =\n \"p{margin:0ex auto;} h1,h2,h3,h4{font-weight:normal}\" +\n \"p+p{text-indent:2em;} body{background:#7F8BA4 none}\" +\n \"img{display:block; margin-left: auto; margin-right: auto;}\" +\n \"h1{text-align:center;text-transform:uppercase}\" +\n \"div#sr{width:50em;padding-top:2em;\" +\n \" background-color:#7F8BA4; margin:auto; line-height:1.4;\" +\n \" text-align:justified; font-family:'monospace'; font-size:20px; color:#FFFFFF; hyphens:auto;}\";\n /* text-rendering:optimizeLegibility; - someday this will work,\n * but at present it just ruins justify, so is disabled */\n \n doc.body.innerHTML =\n \"<style type=\\\"text/css\\\">\" + (nostyle ? \"\" : srstyle) + \"</style>\" +\n \"<div id=\\\"sr\\\">\" + \"<h1>\"+doc.title+\"</h1>\" + fresh.innerHTML + \"</div>\";\n \n return 0;\n}\n\nsimplyread();\n\n][chrome://navigator/content/navigator.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_Reload All Tabs", "shift][R][][gBrowser.reloadAllTabs(gBrowser.mContextTab);][chrome://navigator/content/navigator.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_Reload Page", "][R][][BrowserReload();][chrome://navigator/content/navigator.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_Restart Sealion", "alt control][R][][Application.restart();][chrome://navigator/content/navigator.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_Scroll Down", "][J][][goDoCommand('cmd_scrollLineDown');][chrome://navigator/content/navigator.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_Scroll Up", "][K][][goDoCommand('cmd_scrollLineUp');][chrome://navigator/content/navigator.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_Show All Tabs List", "][B][][gBrowser.mTabContainer.mAllTabsPopup.showPopup();][chrome://navigator/content/navigator.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_Tab 1", "alt][1][][gBrowser.selectTabAtIndex(0, event);][chrome://navigator/content/navigator.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_Tab 2", "alt][2][][gBrowser.selectTabAtIndex(1, event);][chrome://navigator/content/navigator.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_Tab 3", "alt][3][][gBrowser.selectTabAtIndex(2, event);][chrome://navigator/content/navigator.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_Tab 4", "alt][4][][gBrowser.selectTabAtIndex(3, event);][chrome://navigator/content/navigator.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_Tab 5", "alt][5][][gBrowser.selectTabAtIndex(4, event);][chrome://navigator/content/navigator.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_Tab 6", "alt][6][][gBrowser.selectTabAtIndex(5, event);][chrome://navigator/content/navigator.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_Tab 7", "alt][7][][gBrowser.selectTabAtIndex(6, event);][chrome://navigator/content/navigator.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_Tab 8", "alt][8][][gBrowser.selectTabAtIndex(7, event);][chrome://navigator/content/navigator.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_Tab 9", "alt][9][][gBrowser.selectTabAtIndex(8, event);][chrome://navigator/content/navigator.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_Tab Next", "shift][J][][gBrowser.mTabContainer.advanceSelectedTab(1);][");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_Tab Previous", "shift][K][][gBrowser.mTabContainer.advanceSelectedTab(-1);][");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_Toggle Bookmarks Toolbar", "control shift][B][][var toolbar = document.getElementById(\"PersonalToolbar\");\ntoolbar.collapsed = !toolbar.collapsed;\ndocument.persist(toolbar.id, \"collapsed\");][chrome://navigator/content/navigator.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_Toggle Nav Bar", "control shift][N][][var toolbar = document.getElementById(\"nav-bar\");\ntoolbar.collapsed = !toolbar.collapsed;\ndocument.persist(toolbar.id, \"collapsed\");][chrome://navigator/content/navigator.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_Toggle Swarth", "control][S][][Swarth.prefs.toggleEnabled();][chrome://navigator/content/navigator.xul");
user_pref("extensions.dorandoKeyConfig.main.xxx_key1_Toggle Tab Bar", "control shift][T][][gBrowser.mStrip.collapsed = !gBrowser.mStrip.collapsed;][");
user_pref("extensions.dorandoKeyConfig.main.xxx_key24_BrowserReloadSkipCache();", "!][][");