Open Fediverse remote profiles on your local instance. Currently supports Misskey & Mastodon.
// ==UserScript==
// @name Fediverse@Home
// @namespace https://github.com/noccu
// @match *://*/*
// @run-at document-start
// @grant GM_registerMenuCommand
// @grant GM_setValue
// @grant GM_getValue
// @version 1.1.0
// @author noccu
// @description Open Fediverse remote profiles on your local instance. Currently supports Misskey & Mastodon.
// ==/UserScript==
// const SUPPORTED_PLAFORMS = ["misskey_app", "mastodon"]
var HOME
function check() {
// Are we on a fedi instance? (Slightly less dumb ver.)
switch (true) {
case document.querySelector("meta[name^=app]")?.content == "Misskey":
case document.getElementById("mastodon") !== undefined:
break
default:
return
}
// We are
HOME = GM_getValue("fediHome")
if (HOME && HOME == location.origin) {
return
}
GM_registerMenuCommand("Set as home instance", setHome)
GM_registerMenuCommand("Open on home instance", takeHome)
}
function setHome() {
if (HOME) {
var newHome = confirm(`Replace ${HOME} as home instance?`)
}
if (!newHome) { return }
GM_setValue("fediHome", location.origin)
console.log(`Home instance set to: ${location.origin}`)
}
function takeHome() {
if (!location.pathname.startsWith("/@")) return
if (!HOME) {
alert("No home instance set.")
return
}
let user = location.pathname.substring(1)
window.location = `${HOME}/${user}@${location.host}`
}
window.addEventListener("DOMContentLoaded", check)