fluxer/fluxer_desktop/electron-builder.config.cjs
2026-02-17 12:22:36 +00:00

186 lines
4.0 KiB
JavaScript

/*
* Copyright (C) 2026 Fluxer Contributors
*
* This file is part of Fluxer.
*
* Fluxer is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Fluxer is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with Fluxer. If not, see <https://www.gnu.org/licenses/>.
*/
const isCanary = process.env.BUILD_CHANNEL === 'canary';
const productName = isCanary ? 'Fluxer Canary' : 'Fluxer';
const appId = isCanary ? 'app.fluxer.canary' : 'app.fluxer';
const iconDir = isCanary ? 'icons-canary' : 'icons-stable';
const packageName = isCanary ? 'fluxer_desktop_canary' : 'fluxer_desktop';
/** @type {import('electron-builder').Configuration} */
module.exports = {
appId,
productName,
// biome-ignore lint/suspicious/noTemplateCurlyInString: electron-builder placeholder syntax
artifactName: '${productName}-${version}-${os}-${arch}.${ext}',
directories: {
buildResources: 'build_resources',
output: 'dist-electron',
},
files: ['dist/**/*', 'package.json'],
extraMetadata: {
main: 'dist/main/index.js',
name: packageName,
},
extraResources: [
{
from: `build_resources/${iconDir}/badges/`,
to: 'badges',
filter: ['**/*'],
},
],
asar: true,
compression: 'maximum',
mac: {
category: 'public.app-category.social-networking',
icon: `build_resources/${iconDir}/_compiled/AppIcon.icns`,
darkModeSupport: true,
hardenedRuntime: true,
gatekeeperAssess: false,
entitlements: isCanary
? 'build_resources/entitlements.mac.canary.plist'
: 'build_resources/entitlements.mac.stable.plist',
entitlementsInherit: 'build_resources/entitlements.mac.inherit.plist',
target: [
{
target: 'dmg',
arch: ['x64', 'arm64'],
},
{
target: 'zip',
arch: ['x64', 'arm64'],
},
],
extendInfo: {
NSMicrophoneUsageDescription: 'Fluxer needs access to your microphone to enable voice chat features.',
NSCameraUsageDescription: 'Fluxer needs access to your camera to enable video chat features.',
NSAppleEventsUsageDescription: 'Fluxer needs access to Apple Events for automation features.',
},
},
dmg: {
contents: [
{
x: 130,
y: 220,
},
{
x: 410,
y: 220,
type: 'link',
path: '/Applications',
},
],
},
win: {
icon: `build_resources/${iconDir}/icon.ico`,
target: [
{
target: 'nsis',
arch: ['x64', 'arm64'],
},
{
target: 'squirrel',
arch: ['x64'],
},
],
},
nsis: {
oneClick: false,
perMachine: false,
allowToChangeInstallationDirectory: true,
deleteAppDataOnUninstall: false,
createDesktopShortcut: true,
createStartMenuShortcut: true,
},
squirrelWindows: {
iconUrl: `https://fluxerstatic.com/desktop/${iconDir}/icon.ico`,
name: packageName,
},
linux: {
icon: `build_resources/${iconDir}/icon.png`,
category: 'Network;InstantMessaging;',
target: [
{
target: 'AppImage',
arch: ['x64', 'arm64'],
},
{
target: 'deb',
arch: ['x64', 'arm64'],
},
{
target: 'rpm',
arch: ['x64', 'arm64'],
},
{
target: 'tar.gz',
arch: ['x64', 'arm64'],
},
],
desktop: {
Name: productName,
Comment: 'Instant messaging and VoIP application',
Categories: 'Network;InstantMessaging;',
StartupWMClass: isCanary ? 'fluxer-canary' : 'fluxer',
},
},
deb: {
depends: [
'libgtk-3-0',
'libnotify4',
'libnss3',
'libxss1',
'libxtst6',
'xdg-utils',
'libatspi2.0-0',
'libuuid1',
'libsecret-1-0',
],
},
rpm: {
depends: [
'gtk3',
'libnotify',
'nss',
'libXScrnSaver',
'libXtst',
'xdg-utils',
'at-spi2-core',
'libuuid',
'libsecret',
],
},
publish: null,
};