" " bovine3dom's dogfood

" " Every line in this file is commented out because in general they're all bad ideas.
" " If anything in here was a good idea, it would be default behaviour in Tridactyl.
" " It's just a collection of interesting ideas that happen to also be bovine3dom's
" " RC file

" " WARNING: This file defines and runs a command called fixamo_quiet. If you
" " also have a malicious addon that operates on `<all_urls>` installed this
" " will allow it to steal your firefox account credentials!
" "
" " With those credentials, an attacker can read anything in your sync account,
" " publish addons to the AMO, etc, etc.
" "
" " Without this command a malicious addon can steal credentials from any site
" " that you visit that is not in the restrictedDomains list.
" "
" " You should comment out the fixamo lines unless you are entirely sure that
" " they are what you want.
" "
" " The advantage of running the command is that you can use the tridactyl
" " interface on addons.mozilla.org and other restricted sites.

" " Provided only as an example.
" " Do not install/run without reading through as you may be surprised by some
" " of the settings.

" " May require the latest beta builds.

" " Uncomment the lines you want to keep then move this file to
" " $XDG_CONFIG_HOME/tridactyl/tridactylrc (that's
" " ~/.config/tridactyl/tridactylrc to mere mortals) or ~/.tridactylrc and
" " install the native messenger (:installnative in Tridactyl). Run :source to
" " get it in the browser, or just restart.

" " If you're bovine3dom run sed 's|^" ||' .tridactylrc > ~/.config/tridactyl/tridactylrc


" "
" " Binds
" "

" " Comment toggler for Reddit, Hacker News and Lobste.rs
" bind ;c hint -Jc [class*="expand"],[class*="togg"],[class="comment_folder"]

" " GitHub pull request checkout command to clipboard (only works if you're a collaborator or above)
" bind yp composite js document.getElementById("clone-help-step-1").textContent.replace("git checkout -b", "git checkout -B").replace("git pull ", "git fetch ") + "git reset --hard " + document.getElementById("clone-help-step-1").textContent.split(" ")[3].replace("-","/") | yank

" " Git{Hub,Lab} git clone via SSH yank
" bind yg composite js "git clone " + document.location.href.replace(/https?:\/\//,"git@").replace("/",":").replace(/$/,".git") | clipboard yank

" " As above but execute it and open terminal in folder
" bind ,g js let uri = document.location.href.replace(/https?:\/\//,"git@").replace("/",":").replace(/$/,".git"); tri.native.run("cd ~/projects; git clone " + uri + "; cd \"$(basename \"" + uri + "\" .git)\"; st")


" " make d take you to the left (I find it much less confusing)
" bind d composite tabprev; tabclose #
" bind D tabclose

" " make t open the selection with tabopen
" bind --mode=visual t composite js document.getSelection().toString() | fillcmdline tabopen

" " I like wikiwand but I don't like the way it changes URLs
" bindurl wikiwand.com yy composite js document.location.href.replace("wikiwand.com/en","wikipedia.org/wiki") | clipboard yank

" " Make gu take you back to subreddit from comments
" bindurl reddit.com gu urlparent 4

" Only hint search results on Google and DDG
bindurl www.google.com f hint -Jc #search a
bindurl www.google.com F hint -Jbc #search a


" " Broken as of 2023-07-18
" " bindurl ^https://duckduckgo.com f hint -Jc [data-testid="result-title-a"]
" " bindurl ^https://duckduckgo.com F hint -Jbc [data-testid="result-title-a"]

" Make `gi` on GitHub take you to the search box
" bindurl ^https://github.com gi hint -!Vc [aria-label^='search' i]

" " Allow Ctrl-a to select all in the commandline
" unbind --mode=ex <C-a>

" " Allow Ctrl-c to copy in the commandline
" unbind --mode=ex <C-c>

" " Handy multiwindow/multitasking binds
" bind gd tabdetach
" bind gD composite tabduplicate; tabdetach

" " Stupid workaround to let hint -; be used with composite which steals semi-colons
" command hint_focus hint -;

" " Open right click menu on links
" bind ;C composite hint_focus; !s xdotool key Menu

" Binds for new reader mode
bind gr reader
bind gR reader --tab

" " Suspend / "discard" all tabs - handy for stretching out battery life
" command discardall jsb browser.tabs.query({}).then(ts => browser.tabs.discard(ts.map(t=>t.id)))

" " Julia docs' built in search is bad
" set searchurls.julia https://www.google.com/search?q=site:http://docs.julialang.org/en/v1%20

" "
" " Misc settings
" "

" " set editorcmd to suckless terminal, or use the defaults on other platforms
" js tri.browserBg.runtime.getPlatformInfo().then(os=>{const editorcmd = os.os=="linux" ? "st vim" : "auto"; tri.config.set("editorcmd", editorcmd)})

" " set profile dir on Windows
" jsb browser.runtime.getPlatformInfo().then(os=>{const profiledir = os.os=="win" ? "C:\\Users\\olie\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\gwm76nmk.default" : "auto"; tri.config.set("profiledir", profiledir)})

" Sane hinting mode
set hintfiltermode vimperator-reflow
" set hintnames numeric

" Defaults to 300ms but I'm a 'move fast and close the wrong tabs' kinda chap
set hintdelay 100

" Add helper commands that Mozillians think make Firefox irredeemably
" insecure. For details, read the comment at the top of this file.
command fixamo_quiet jsb tri.excmds.setpref("privacy.resistFingerprinting.block_mozAddonManager", "true").then(tri.excmds.setpref("extensions.webextensions.restrictedDomains", '""'))
command fixamo js tri.excmds.setpref("privacy.resistFingerprinting.block_mozAddonManager", "true").then(tri.excmds.setpref("extensions.webextensions.restrictedDomains", '""').then(tri.excmds.fillcmdline_tmp(3000, "Permissions added to user.js. Please restart Firefox to make them take affect.")))

" Make Tridactyl work on more sites at the expense of some security.
" For details, read the comment at the top of this file.
fixamo_quiet

" " The following modification allows Tridactyl to function on more pages, e.g. raw GitHub pages.
" " You may not wish to run this. Mozilla strongly feels that you shouldn't.
" " Read https://wiki.mozilla.org/Security/CSP#Goals for more information.
" "
" " Equivalent to `set csp clobber` before it was removed.
" " This weakens your defences against cross-site-scripting attacks
" " and other types of code-injection by reducing the strictness
" " of Content Security Policy on all sites in a couple of ways.
" "
" " We remove the sandbox directive
" " https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/sandbox
" " which allows our iframe (and anyone else's) to run on any website.
" "
" " We weaken the style-src directive
" " https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/style-src
" " to allow us to theme our elements.
" " This exposes you to 'cross site styling' attacks
jsb browser.webRequest.onHeadersReceived.addListener(tri.request.clobberCSP,{urls:["<all_urls>"],types:["main_frame"]},["blocking","responseHeaders"])

quickmark yt https://youtube.com
quickmark r https://reddit.com
quickmark t https://web.telegram.org/
quickmark m https://app.fastmail.com/mail
quickmark c https://app.fastmail.com/calendar
quickmark gmail https://mail.google.com
quickmark gh https://github.com

" Search engines
set searchurls.DEFAULT https://www.google.com/search?hl=en&source=hp&ie=ISO-8859-l&q=
set searchurls.ddg https://duckduckgo.com/?q=
set searchurls.g https://www.google.com/search?hl=en&source=hp&ie=ISO-8859-l&q=
set searchurls.yt https://youtube.com/search?q=
set searchurls.r https://reddit.com/search/?q=
set searchurls.w https://en.wikipedia.org/w/index.php?search=
set searchurls.a https://wiki.archlinux.org/?search=
set searchurls.ap https://archlinux.org/packages/?sort=&q=&maintainer=&flagged=
set searchurls.aur https://aur.archlinux.org/packages/?K=
set searchurls.gh https://github.com/search?q=
set searchurls.pdb https://www.protondb.com/search?q=

" " Inject Google Translate
" " This (clearly) is remotely hosted code. Google will be sent the whole
" " contents of the page you are on if you run `:translate`
" " From https://github.com/jeremiahlee/page-translator
" command translate js let googleTranslateCallback = document.createElement('script'); googleTranslateCallback.innerHTML = "function googleTranslateElementInit(){ new google.translate.TranslateElement(); }"; document.body.insertBefore(googleTranslateCallback, document.body.firstChild); let googleTranslateScript = document.createElement('script'); googleTranslateScript.charset="UTF-8"; googleTranslateScript.src = "https://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit&tl=&sl=&hl="; document.body.insertBefore(googleTranslateScript, document.body.firstChild);

" Isolate Facebook in its own container
set auconcreatecontainer true
autocontain facebook\.com facebook

set smoothscroll true
set scrollduration 25

" the blacklist
blacklistadd monkeytype.com
blacklistadd play.typeracer.com
blacklistadd docs.google.com
blacklistadd sheets.google.com
blacklistadd slides.google.com
blacklistadd 10fastfingers.com
blacklistadd keybr.com
blacklistadd typingtutor.dev
blacklistadd speedtyper.dev
blacklistadd codepen.io
blacklistadd codesandbox.io
blacklistadd stackblitz.com
blacklistadd replit.com
blacklistadd github.dev
blacklistadd vscode.dev
blacklistadd overleaf.com
blacklistadd figma.com
blacklistadd excalidraw.com
blacklistadd miro.com
blacklistadd app.diagrams.net
blacklistadd canva.com
blacklistadd desmos.com
blacklistadd shell.cloud.google.com
