-
-
Notifications
You must be signed in to change notification settings - Fork 165
Configuration ideas
Paul Henrion edited this page Feb 1, 2023
·
54 revisions
Feel free to add your own ideas for how to use Finicky.
rewrite: [{
match: ({url}) => url.protocol === "http",
url: {
protocol: "https"
}
}]
handlers: [{
// Open any link clicked in Mail & Outlook in Google Chrome
match: ({opener}) =>
["com.apple.mail", "com.microsoft.Outlook"].includes(opener.bundleId),
browser: "Google Chrome"
}]
or
handlers: [{
// Open any link clicked in Mail & Outlook in Google Chrome
match: ({opener}) =>
["Mail", "Microsoft Outlook"].includes(opener.name),
browser: "Google Chrome"
}]
handlers: [{
match: ({url}) =>
url.host.includes("example.com") && url.pathname.includes("Finicky"),
browser: "Firefox"
}]
rewrite: [{
match: "amazon.com/*",
url: {
host: "smile.amazon.com"
}
}]
rewrite: [{
match: () => true, // Execute rewrite on all incoming urls to make this example easier to understand
url: ({url}) => {
const removeKeysStartingWith = ["utm_", "uta_"]; // Remove all query parameters beginning with these strings
const removeKeys = ["fbclid", "gclid"]; // Remove all query parameters matching these keys
const search = url.search
.split("&")
.map((parameter) => parameter.split("="))
.filter(([key]) => !removeKeysStartingWith.some((startingWith) => key.startsWith(startingWith)))
.filter(([key]) => !removeKeys.some((removeKey) => key === removeKey));
return {
...url,
search: search.map((parameter) => parameter.join("=")).join("&"),
};
},
}]
rewrite: [{
match: finicky.matchDomains(["google.com"]),
url: "https://duckduckgo.com"
}]
handlers: [{
match: finicky.matchDomains(["trello.com"]),
url: ({url}) =>
({...url, protocol: "trello"}),
browser: "Trello"
}]
handlers: [{
match: finicky.matchDomains("open.spotify.com"),
browser: "Spotify"
}]
handlers: [{
match: /zoom\.us\/join/,
browser: "us.zoom.xos"
} ],
}],
rewrite: [{
match: ({
url
}) => url.host.includes("zoom.us") && url.pathname.includes("/j/"),
url({
url
}) {
try {
var pass = '&pwd=' + url.search.match(/pwd=(\w*)/)[1];
} catch {
var pass = ""
}
var conf = 'confno=' + url.pathname.match(/\/j\/(\d+)/)[1];
return {
search: conf + pass,
pathname: '/join',
protocol: "zoommtg"
}
}
}]
handlers: [{
// Open Apple Music links directly in Music.app
match: [
"music.apple.com*",
"geo.music.apple.com*",
],
url: {
protocol: "itmss"
},
browser: "Music",
}]
handlers: [{
match: finicky.matchHostnames(['teams.microsoft.com']),
browser: 'com.microsoft.teams',
url: ({url}) =>
({...url, protocol: 'msteams'}),
}]
handlers: [{
match: "https://www.figma.com/file/*",
browser: "Figma",
}]
rewrite: [{
match: /vk\.com\/away.php/,
url: ({url}) => {
const match = url.search.match(/to=(.+)/)
return !match ? url : decodeURIComponent(decodeURIComponent(match[1]));
}
}]
For example, you may want to only open matching URLs in a specific browser when opening those URLs from within a
particular application. In that case, you need to match on both the opener
and the url
:
handlers: [{
// Open Google Drive in Firefox if opened from Slack
match: ({opener, url}) =>
opener.bundleId === "com.tinyspeck.slackmacgap" && url.host.includes("drive.google.com"),
browser: "Firefox"
}]
Open Jitsi links in Jitsi desktop app for MacOS
handlers: [{
match: ({url}) => url.host.includes("jitsi.your-selfhosted-server.com") ||
url.host.includes("meet.jit.si"),
url: ({url}) => {
return {
...url,
protocol: "jitsi-meet",
host: url.host,
pathname: url.pathname
};
},
browser: "/Applications/Jitsi\ Meet.app"
}]
Save following AppleScript as Application with name edge-profile-1
on open location input
do shell script "/Applications/Microsoft\\ Edge.app/Contents/MacOS/Microsoft\\ Edge --profile-directory=\"Profile 1\" '" & input & "'"
end open location
Than use it as browser
{
match: ({opener}) => ["Telegram"].includes(opener.name),
browser: 'com.apple.ScriptEditor.id.edge-profile-1'
}
This example assumes you have installed Figma, Linear, and Slite desktop apps. But you can make it work with any other app.
- install the targeted apps you want to support,
- check their URL schemes with:
defaults read /Applications/THE_APP.app/Contents/Info.plist CFBundleURLTypes
handlers: [{
match: ({url}) => !url.protocol.match(/^https?$/),
browser: "Finder"
}],
rewrite: [{
match: ({url}) => url.host.split('.').some((c) => ['figma', 'linear', 'slite'].includes(c)),
url: ({url}) => {
const protocol = url.host.match(/([\w\.]*?)(\w+)\.\w\w\w?$/)[2];
return {...url, protocol };
}
}]