20 Commits

Author SHA1 Message Date
oxmc
316f6685e0 Merge pull request #8 from PlOszukiwaczDEV/main
fixed an issue with the appimage
2024-12-20 04:11:58 -08:00
PlOszukiwacz
d26d82121c fixed an issue with the appimage 2024-12-20 13:09:05 +01:00
oxmc
31731d5f24 Merge pull request #7 from GizzyUwU/main
syntax error :nerd:
2024-12-20 03:32:36 -08:00
Gizzy
6fece01fa9 syntax error :nerd: 2024-12-20 11:31:21 +00:00
oxmc
afedc14db5 Merge pull request #6 from GizzyUwU/main
Changes how version tag is set in action
2024-12-20 03:24:57 -08:00
Gizzy
9d337fa315 Changes how version tag is set in action 2024-12-20 11:22:36 +00:00
oxmc
f04efda911 Merge pull request #5 from GizzyUwU/main
AUR fix
2024-12-20 03:07:31 -08:00
Gizzy
3a0941c67c AUR fix 2024-12-20 10:59:57 +00:00
oxmc
08fbe470ad Change path in checksum download 2024-12-20 02:57:11 -08:00
oxmc
a82d5d67e2 Add jq install and debug 2024-12-20 02:52:25 -08:00
oxmc
52883d335d Add new builds, and update ext 2024-12-20 02:29:02 -08:00
oxmc
93ab0b9731 Merge pull request #4 from GizzyUwU/main
AUR Action
2024-12-20 02:15:51 -08:00
Gizzy
3e86319bb8 Merge branch 'main' of github.com:GizzyUwU/bsky-desktop 2024-12-20 10:10:40 +00:00
Gizzy
baa6e33fcd Checksum Implementation 2024-12-20 10:08:12 +00:00
GizzyUwU
cdb9130a3d Merge branch 'oxmc:main' into main 2024-12-20 09:39:16 +00:00
Gizzy
d7ad3a8812 Github Action 2024-12-20 09:38:11 +00:00
oxmc
c28640217b Merge pull request #3 from GizzyUwU/main
AUR Stuff
2024-12-20 01:01:08 -08:00
Gizzy
9e2bef0037 AUR 2024-12-20 08:52:26 +00:00
33eb3a931f Forgot to update version 2024-12-19 22:15:08 -08:00
6753ed7e79 Start adding auto updates (does not function currently) 2024-12-19 22:14:10 -08:00
14 changed files with 504 additions and 82 deletions

View File

@@ -2,9 +2,9 @@ name: Build and Release bsky-desktop
on:
push:
branches: [ $default-branch ]
branches: [$default-branch]
pull_request:
branches: [ $default-branch ]
branches: [$default-branch]
workflow_dispatch:
concurrency:
@@ -15,8 +15,6 @@ jobs:
build-linux:
name: Build bsky-desktop (Linux)
runs-on: ubuntu-latest
outputs:
artifact: ${{ steps.upload-artifact.outputs.artifact }}
env:
ext: "AppImage"
GITHUB_TOKEN: ${{ secrets.GHT }}
@@ -48,11 +46,19 @@ jobs:
dist/*.AppImage
dist/latest*.yml
- name: Generate checksum
run: |
sha256sum dist/*.AppImage > sha256sum.txt
- name: Upload checksums
uses: actions/upload-artifact@v4
with:
name: checksums
path: sha256sum.txt
build-windows:
name: Build bsky-desktop (Windows)
runs-on: windows-latest
outputs:
artifact: ${{ steps.upload-artifact.outputs.artifact }}
env:
ext: "exe"
GITHUB_TOKEN: ${{ secrets.GHT }}
@@ -87,8 +93,6 @@ jobs:
build-macos:
name: Build bsky-desktop (macOS)
runs-on: macos-latest
outputs:
artifact: ${{ steps.upload-artifact.outputs.artifact }}
env:
ext: "dmg"
GITHUB_TOKEN: ${{ secrets.GHT }}
@@ -124,17 +128,19 @@ jobs:
name: Create Release
runs-on: ubuntu-latest
needs: [build-linux, build-windows, build-macos]
outputs:
version_tag: ${{ steps.version.outputs.version }}
env:
GITHUB_TOKEN: ${{ secrets.GHT }}
steps:
- name: Checkout git repo
uses: actions/checkout@v2
uses: actions/checkout@v3
- name: Get app version
id: version
uses: pchynoweth/action-get-npm-version@1.1.1
- name: Download Linux Artifacts
uses: actions/download-artifact@v4
with:
@@ -152,10 +158,15 @@ jobs:
with:
name: macos-artifacts
path: dist/macos
- name: Display structure of downloaded files
run: ls -R dist
- name: Merge latest .ymls
uses: mikefarah/yq@v4.44.6
with:
cmd: yq eval-all '. as $item ireduce ({}; . * $item )' dist/*/*.yml > merged.yml
- name: Upload Release
id: create_release
uses: softprops/action-gh-release@v2.1.0
@@ -166,4 +177,49 @@ jobs:
files: |
dist/linux/*.AppImage
dist/windows/*.exe
dist/macos/*.dmg
dist/macos/*.dmg
merged.yml
aur:
name: Publish to AUR
runs-on: ubuntu-latest
needs: release
env:
AUR_TOKEN: ${{ secrets.AUR_TOKEN }}
steps:
- name: Checkout git repo
uses: actions/checkout@v3
- name: Install jq
run: sudo apt-get update && sudo apt-get install jq -y
- name: Download checksums
uses: actions/download-artifact@v4
with:
name: checksums
path: .
- name: List downloaded files
run: ls -R
- name: Show content of sha256sum.txt
run: cat sha256sum.txt
- name: Extract checksum from sha256sum.txt and change build version
run: |
echo releasever
new_checksum=$(awk 'NR==1 { print $1 }' ./sha256sum.txt)
sed -i "s|sha256sums=('SKIP' 'SKIP')|sha256sums=('$new_checksum' 'SKIP')|" ./build/PKGBUILD
sed -i "s/^pkgver=.*$/pkgver=${{ needs.release.outputs.version_tag }}/" ./build/PKGBUILD
- name: Publish AUR package
uses: KSXGitHub/github-actions-deploy-aur@v3.0.1
with:
pkgname: bskydesktop
pkgbuild: ./build/PKGBUILD
commit_username: ${{ secrets.AUR_USERNAME }}
commit_email: ${{ secrets.AUR_EMAIL }}
ssh_private_key: ${{ secrets.AUR_SSH_PRIVATE_KEY }}
commit_message: New Version
ssh_keyscan_types: rsa,ecdsa,ed25519

13
build/.SRCINFO Normal file
View File

@@ -0,0 +1,13 @@
pkgbase = bskydesktop
pkgdesc = Bluesky Desktop - A decentralized social networking client distributed as an AppImage
pkgver = 1.0.8
pkgrel = 1
url = https://github.com/oxmc/bsky-desktop
arch = x86_64
arch = aarch64
license = MIT
makedepends = curl
depends = fuse2
options = !strip
pkgname = bskydesktop

79
build/PKGBUILD Normal file
View File

@@ -0,0 +1,79 @@
# Maintainer: GizzyUwU me@gizzy.pro
# Maintainer: oxmc contact@oxmc.is-a.dev
pkgname=bskydesktop
pkgver=""
pkgrel=1
pkgdesc="Bluesky Desktop - A decentralized social networking client distributed as an AppImage"
arch=('x86_64' 'aarch64')
url="https://github.com/oxmc/bsky-desktop"
license=('AGPL-3.0-only')
depends=('fuse2')
makedepends=('curl')
options=('!strip')
icon_url="https://raw.githubusercontent.com/oxmc/bsky-desktop/refs/heads/main/src/ui/images/logo.png"
icon_name="bsky-desktop.png"
prepare() {
latest_tag=$(curl -s "https://api.github.com/repos/oxmc/bsky-desktop/releases/latest" | grep -Po '"tag_name": "\K.*?(?=")')
echo "Latest release tag: $latest_tag"
case "$CARCH" in
x86_64)
appimage_name="bskyDesktop-${latest_tag:1}-linux-x64.AppImage"
;;
aarch64)
appimage_name="bskyDesktop-${latest_tag:1}-linux-arm64.AppImage"
;;
*)
echo "Unsupported architecture: $CARCH"
exit 1
;;
esac
source=(
"https://github.com/oxmc/bsky-desktop/releases/download/$latest_tag/$appimage_name"
"$icon_url"
)
echo "AppImage source: ${source[0]}"
sha256sums=('SKIP' 'SKIP')
curl -L "${source[0]}" -o "$srcdir/bskyDesktop.appimage"
curl -L "${source[1]}" -o "$srcdir/$icon_name"
}
package() {
appimage_dest="$pkgdir/opt/appimages/bsky-desktop"
bin_dest="$pkgdir/usr/bin/bsky-desktop"
desktop_file="$pkgdir/usr/share/applications/bsky-desktop.desktop"
icon_dest="$pkgdir/usr/share/icons/hicolor/128x128/apps/$icon_name"
if [[ ! -f "$srcdir/bskyDesktop.appimage" ]]; then
echo "Error: AppImage file not found: $srcdir/bskyDesktop.appimage"
exit 1
fi
if [[ ! -f "$srcdir/$icon_name" ]]; then
echo "Error: Icon file not found: $srcdir/$icon_name"
exit 1
fi
install -d "$pkgdir/opt/appimages"
install -Dm755 "$srcdir/bskyDesktop.appimage" "$appimage_dest"
install -d "$(dirname "$bin_dest")"
ln -sf "/opt/appimages/bsky-desktop" "$bin_dest"
install -d "$(dirname "$icon_dest")"
install -Dm644 "$srcdir/$icon_name" "$icon_dest"
install -d "$(dirname "$desktop_file")"
install -Dm644 /dev/stdin "$desktop_file" <<EOF
[Desktop Entry]
Name=Bluesky Desktop
Comment=Bluesky Desktop Client
Exec=/usr/bin/bsky-desktop
Icon=bsky-desktop
Terminal=false
Type=Application
Categories=Network;Social;Application;
EOF
}

View File

@@ -1,6 +1,6 @@
{
"name": "bsky-desktop",
"version": "1.0.7",
"version": "1.0.8",
"description": "A desktop app of bsky.app",
"main": "src/app/main.js",
"scripts": {
@@ -38,6 +38,10 @@
],
"artifactName": "bsky-desktop.${ext}",
"mac": {
"target": [
"dmg",
"pkg"
],
"icon": "src/ui/images/logo.icns",
"category": "Network"
},
@@ -45,7 +49,7 @@
"target": [
"appimage"
],
"icon": "src/ui/images/logo.png",
"icon": "src/ui/images/icons",
"category": "Network"
},
"win": {

View File

@@ -1,4 +1,4 @@
const { app, BrowserWindow, BrowserView, globalShortcut, ipcMain, ipcRenderer, Tray, Menu, protocol, session } = require("electron");
const { app, BrowserWindow, BrowserView, globalShortcut, ipcMain, Tray, Menu, protocol, session } = require("electron");
const electronremote = require("@electron/remote/main");
//const asar = require('@electron/asar');
const windowStateKeeper = require("electron-window-state");
@@ -6,7 +6,7 @@ const { setupTitlebar, attachTitlebarToWindow } = require("./titlebar/main");
const openAboutWindow = require("./about-window/src/index").default;
const badge = require('./badge');
const contextMenu = require('./context-menu');
const asarUpdater = require('./utils/asarUpdater');
const autoUpdater = require('./utils/auto-update');
//const loadCRX = require('./utils/loadCRX');
const log4js = require("log4js");
const path = require("path");
@@ -44,11 +44,11 @@ global.urls = {
// Settings urls:
global.settings = {
general: `${global.urls.main}/settings`,
account: `${global.urls.main}/settings/account`,
appearance: `${global.urls.main}/settings/appearance`,
privacy: `${global.urls.main}/settings/privacy-and-security`,
general: `${global.urls.main}/settings`
};
global.settings.account = `${global.settings.general}/account`;
global.settings.appearance = `${global.settings.general}/appearance`;
global.settings.privacy = `${global.settings.general}/privacy-and-security`;
// Badge options:
const badgeOptions = {
@@ -483,64 +483,7 @@ app.whenReady().then(() => {
// Initialize the updater:
logger.log("Initializing Updater");
asarUpdater.init();
// updater events:
asarUpdater.on('available', (task) => {
//console.log('Update availible for', task)
logger.log("Update availible for", task.name);
global.PageView.webContents.send('ui:notif', JSON.stringify({ title: 'Update', message: 'An update is available' }));
if (global.splash) global.splash.webContents.send('ui:progtext', { title: 'Update Available', subtitle: 'An update is available! Downloading...' });
global.isUpdating = true;
});
asarUpdater.on('not-available', (task) => {
//console.log('not-available', task);
logger.log("No Updates Available for", task);
});
asarUpdater.on('progress', (task, p) => {
console.log(task.name, p);
if (global.splash) global.splash.webContents.send('ui:progtext', { title: 'Downloading Update', subtitle: 'Downloading update...' });
if (global.splash) global.splash.webContents.send('ui:progbar', { reason: 'update', prog: p });
});
asarUpdater.on('downloaded', (task) => {
//console.log('downloaded', task);
logger.log("Downloaded Update for,", task.name);
global.PageView.webContents.send('ui:notif', JSON.stringify({ title: 'Update Downloaded', message: 'Restarting to apply update...' }));
if (global.splash) global.splash.webContents.send('ui:progtext', { title: 'Update Downloaded', subtitle: 'Restarting to apply update...' });
});
asarUpdater.on('completed', (manifest, tasks) => {
console.log('completed', manifest, tasks);
if (tasks.length === 0) {
setTimeout(() => {
logger.log("Quitting and Installing Update");
asarUpdater.quitAndInstall();
}, 5000);
};
//app.quit()
});
asarUpdater.on('error', (err) => {
//console.error(err);
logger.error(err);
//app.quit()
});
// Set the feed URL (only works in packaged app):
if (app.isPackaged) {
logger.log("Setting Feed URL for app.asar");
asarUpdater.setFeedURL(path.join(global.paths.app_root), 'https://cdn.oxmc.me/internal/bsky-desktop/update/core');
};
//Check for updates:
logger.log("Checking for Updates");
if (app.isPackaged) {
const UPDATE_CHECK = 1000 * 60 * 60 * 4 // 4 hours
setInterval(() => {
//asarUpdater.checkForUpdates();
}, UPDATE_CHECK);
//asarUpdater.checkForUpdates();
} else {
logger.warn("Not checking for updates as app is not packaged");
};
autoUpdater();
// Handle ipc for render:
ipcMain.on('close-app', (event, arg) => {

View File

@@ -0,0 +1,156 @@
const path = require('path');
const os = require('os');
const fs = require('fs');
const childProcess = require('child_process');
const { app } = require('electron');
const log4js = require('log4js');
// import the asarUpdater module
const asarUpdater = require('./asarUpdater');
// Get system information
const SystemInfo = require('./sysInfo');
// Get the current system platform
const sys = new SystemInfo();
// Setup the logger
const logger = log4js.getLogger("bskydesktop");
function asarUpdate() {
asarUpdater.init();
// updater events:
asarUpdater.on('available', (task) => {
//console.log('Update availible for', task)
logger.log("Update availible for", task.name);
global.PageView.webContents.send('ui:notif', JSON.stringify({ title: 'Update', message: 'An update is available' }));
if (global.splash) global.splash.webContents.send('ui:progtext', { title: 'Update Available', subtitle: 'An update is available! Downloading...' });
global.isUpdating = true;
});
asarUpdater.on('not-available', (task) => {
//console.log('not-available', task);
logger.log("No Updates Available for", task);
});
asarUpdater.on('progress', (task, p) => {
console.log(task.name, p);
if (global.splash) global.splash.webContents.send('ui:progtext', { title: 'Downloading Update', subtitle: 'Downloading update...' });
if (global.splash) global.splash.webContents.send('ui:progbar', { reason: 'update', prog: p });
});
asarUpdater.on('downloaded', (task) => {
//console.log('downloaded', task);
logger.log("Downloaded Update for,", task.name);
global.PageView.webContents.send('ui:notif', JSON.stringify({ title: 'Update Downloaded', message: 'Restarting to apply update...' }));
if (global.splash) global.splash.webContents.send('ui:progtext', { title: 'Update Downloaded', subtitle: 'Restarting to apply update...' });
});
asarUpdater.on('completed', (manifest, tasks) => {
console.log('completed', manifest, tasks);
if (tasks.length === 0) {
setTimeout(() => {
logger.log("Quitting and Installing Update");
asarUpdater.quitAndInstall();
}, 5000);
};
//app.quit()
});
asarUpdater.on('error', (err) => {
//console.error(err);
logger.error(err);
//app.quit()
});
// Set the feed URL (only works in packaged app):
if (app.isPackaged) {
logger.log("Setting Feed URL for app.asar");
asarUpdater.setFeedURL(path.join(global.paths.app_root), 'https://cdn.oxmc.me/internal/bsky-desktop/update/core');
};
//Check for updates:
logger.log("Checking for Updates");
if (app.isPackaged) {
const UPDATE_CHECK = 1000 * 60 * 60 * 4 // 4 hours
setInterval(() => {
//asarUpdater.checkForUpdates();
}, UPDATE_CHECK);
//asarUpdater.checkForUpdates();
} else {
logger.warn("Not checking for updates as app is not packaged");
};
}
function checkForUpdates() {
// Current system information
logger.log('Current system information:', sys.platform, sys.getVersion());
// Check if the current system is Windows
if (sys.isWin()) {
// Check if the system is before Windows 10
if (sys.earlierThan('10.0.0')) {
// Windows 10 and above are supported, but windows 7 and 8 are not supported
logger.error('Windows 7 and 8 are not supported, please upgrade to Windows 10 or above, not updating...');
} else {
// Check for updates, and if there are updates, download and install them
logger.log('Checking for updates (win)...');
}
}
// Check if the current system is macOS
if (sys.isMac()) {
let macArch = '';
// Check the current version of macOS, and whether we can use the pkg installer
if (sys.laterThan('10.0.0')) {
// Check if system is after macOS 10 (11, 12, etc.)
if (sys.laterThan('11.0.0')) {
// macOS 11 and above support ARM64, check if system is ARM64
logger.log('Checkking system architecture...');
if (sys.isARM64()) {
// System is ARM64 (mac-arm64)
macArch = 'arm64';
} else {
// System is Intel (mac-x64)
macArch = 'intel';
}
} else {
// macOS 10 is mostly Intel, but some versions are ARM64
macArch = 'intel';
}
// Check for updates, and if there are updates, download and install them
logger.log('Checking for updates (mac)...');
// Run the .pkg installer
const pkgPath = path.join(global.paths.updateDir, 'bsky-desktop.pkg');
const command = `sudo installer -pkg ${pkgPath} -target /`;
// Spawn a new shell
const shellProcess = spawn('sh', ['-c', command], {
stdio: 'inherit', // Pipe input/output to/from the shell
});
shellProcess.on('error', (err) => {
console.error('Failed to spawn shell:', err);
});
shellProcess.on('close', (code) => {
if (code === 0) {
console.log('Update installed successfully.');
} else {
console.error(`Shell process exited with code ${code}.`);
}
});
} else {
// macOS versions before 10 are not supported
logger.error('macOS versions before 10 are not supported, not updating...');
}
}
// Check if the current system is Linux
if (sys.isLinux()) {
// Check for updates, and if there are updates, download and install them (no system version check)
// Linux versions use AppImage, so we instead need to check for a new asar file so that the app can
// load the new asar instead of the packaged one (or even just delete the old appimage and download a new one)
logger.log('Checking for updates (linux)...');
asarUpdate();
}
}
module.exports = checkForUpdates;

View File

@@ -5,6 +5,7 @@ class SystemInfo {
constructor() {
this.platform = os.platform(); // 'win32', 'darwin', 'linux'
this.release = os.release(); // OS version
this.arch = os.arch(); // 'arm', 'arm64', 'x64', 'x86'
this.versionInfo = this._getVersionInfo(); // Parsed version
}
@@ -23,6 +24,26 @@ class SystemInfo {
return this.platform === 'linux';
}
// Check if current system architecture is ARM
isARM() {
return this.arch === 'arm';
}
// Check if current system architecture is ARM64
isARM64() {
return this.arch === 'arm64';
}
// Check if current system architecture is x64
isX64() {
return this.arch === 'x64';
}
// Check if current system architecture is x86
isX86() {
return this.arch === 'x86';
}
// Compare if current version is later than the given version
laterThan(compareVersion) {
const current = this.versionInfo;
@@ -35,6 +56,11 @@ class SystemInfo {
return false;
}
// Compare if current version is earlier than the given version
earlierThan(compareVersion) {
return !this.laterThan(compareVersion);
}
// Private: Parse version strings (e.g., "10.0.19045" -> [10, 0, 19045])
_parseVersion(version) {
return version.split('.').map((num) => parseInt(num, 10) || 0);
@@ -57,13 +83,20 @@ class SystemInfo {
return [0, 0, 0]; // Unknown system
}
}
// Get current version as a string (e.g., "10.15.7")
getVersion() {
return this.versionInfo.join('.');
}
}
module.exports = SystemInfo;
// Usage Example
//const sys = new SystemInfo();
//console.log(`Is Windows: ${sys.isWin()}`);
//console.log(`Is macOS: ${sys.isMac()}`);
//console.log(`Is Linux: ${sys.isLinux()}`);
//console.log(`Current Version Info: ${sys.versionInfo.join('.')}`);
//console.log(`Current Version Info: ${sys.getVersion()}`);
//console.log(`Later than 10.0.19044: ${sys.laterThan('10.0.19044')}`);
//console.log(`Later than 5.15.0 (Linux Kernel): ${sys.laterThan('5.15.0')}`);

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 538 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 939 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@@ -374,6 +374,15 @@ const BskyExt = {
},
"regex": /discord\.com\/invite\/([a-zA-Z0-9_]+)/
},
"discord_profile": {
"name": "Discord",
"type": "social",
"icon": "fab fa-discord",
"brand": {
"color": "#7289DA",
},
"regex": /discord\.com\/users\/([a-zA-Z0-9_]+)/
},
"discord.gg": {
"name": "Discord",
"type": "messaging",
@@ -473,6 +482,33 @@ const BskyExt = {
},
"regex": /irc:\/\/([a-zA-Z0-9_]+)/
},
"itchio": {
"name": "Itch.io",
"type": "content",
"icon": "fab fa-itch-io",
"brand": {
"color": "#FA5C5C",
},
"regex": /([a-zA-Z0-9_]+)\.itch\.io/
},
"etsy_shop": {
"name": "Etsy",
"type": "content",
"icon": "fab fa-etsy",
"brand": {
"color": "#D5641C",
},
"regex": /etsy\.com\/shop\/([a-zA-Z0-9_]+)/
},
"etsy_user": {
"name": "Etsy",
"type": "content",
"icon": "fab fa-etsy",
"brand": {
"color": "#D5641C",
},
"regex": /([a-zA-Z0-9_]+)\.etsy\.com/
},
"email": {
"name": "Email",
"type": "messaging",
@@ -498,7 +534,43 @@ const BskyExt = {
"brand": {
"color": "#1DA1F2",
},
"regex": /twitter\.com\/([a-zA-Z0-9_]+)/
"regex": /(twitter\.com|x\.com)\/([a-zA-Z0-9_]+)\/?$/
},
"xbox": {
"name": "Xbox",
"type": "social",
"icon": "fab fa-xbox",
"brand": {
"color": "#107C10",
},
"regex": /xbox\.com\/([a-zA-Z0-9_]+)/
},
"playstation": {
"name": "PlayStation",
"type": "social",
"icon": "fab fa-playstation",
"brand": {
"color": "#003087",
},
"regex": /playstation\.com\/([a-zA-Z0-9_]+)/
},
"steam": {
"name": "Steam",
"type": "content",
"icon": "fab fa-steam",
"brand": {
"color": "#000000",
},
"regex": /steamcommunity\.com\/id\/([a-zA-Z0-9_]+)/
},
"tiktok": {
"name": "TikTok",
"type": "social",
"icon": "fab fa-tiktok",
"brand": {
"color": "#000000",
},
"regex": /tiktok\.com\/@([a-zA-Z0-9_]+)/
},
"instagram": {
"name": "Instagram",
@@ -729,6 +801,72 @@ const BskyExt = {
}
},
/**
* @constant {Object} linkStylesOverrides - Style overrides for specific link types
*/
linkStylesOverrides: {
"bluesky": {
"default": {
"color": "rgb(0, 133, 255)",
"background": "#0000",
"border": "#0000",
},
"hover": {
"color": "#fff",
"background": "#0000",
"border": "#0000"
}
},
"discord": {
"default": {
"color": "#FFFFFF",
"background": "#7289DA",
"border": "#7289DA",
},
"hover": {
"color": "#7289DA",
"background": "#FFFFFF",
"border": "#7289DA"
}
},
"linktree": {
"default": {
"color": "#FFFFFF",
"background": "#39e09b",
"border": "#39e09b",
},
"hover": {
"color": "#39e09b",
"background": "#FFFFFF",
"border": "#39e09b"
}
},
"carrd": {
"default": {
"color": "#FFFFFF",
"background": "#2C2F33",
"border": "#2C2F33",
},
"hover": {
"color": "#2C2F33",
"background": "#FFFFFF",
"border": "#2C2F33"
}
},
"dribbble": {
"default": {
"color": "#FFFFFF",
"background": "#EA4C89",
"border": "#EA4C89",
},
"hover": {
"color": "#EA4C89",
"background": "#FFFFFF",
"border": "#EA4C89"
}
},
},
/**
* @constant {Object} buttonStyles - The button styles for the supported messaging apps
*
@@ -1109,7 +1247,7 @@ const BskyExt = {
let header = bio.closest("[data-testid='profileView']");
// Get the profile header button group element
let buttonGroup = header.querySelector('[role="button"]').parentElement;
let buttonGroup = header.querySelector("div.css-175oi2r.r-2llsf > div:nth-child(1) > div > div:nth-child(2) > div.css-175oi2r.r-12vffkv");
// Check if the profile header button group element exists
if (!buttonGroup) {