refactor progress
19
fluxer_desktop/.gitignore
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
# Dependencies
|
||||
node_modules/
|
||||
|
||||
# Build outputs
|
||||
dist/
|
||||
dist-electron/
|
||||
|
||||
|
||||
# IDE
|
||||
.idea/
|
||||
*.swp
|
||||
*.swo
|
||||
|
||||
# OS
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
|
||||
# Logs
|
||||
*.log
|
||||
2
fluxer_desktop/.npmrc
Normal file
@@ -0,0 +1,2 @@
|
||||
link-workspace-packages=false
|
||||
shared-workspace-lockfile=false
|
||||
31
fluxer_desktop/README.md
Normal file
@@ -0,0 +1,31 @@
|
||||
# Fluxer Desktop
|
||||
|
||||
Electron desktop client for Fluxer. Wraps the web application with native platform integrations including notifications, global shortcuts, screen sharing, passkeys, and auto-updates.
|
||||
|
||||
## Configuration
|
||||
|
||||
The desktop client reads an optional `settings.json` file from the user data directory on startup. If the file does not exist, defaults are used.
|
||||
|
||||
### User data directory locations
|
||||
|
||||
| Platform | Stable | Canary |
|
||||
| -------- | ---------------------------------------------------- | ---------------------------------------------------------- |
|
||||
| Windows | `%APPDATA%\fluxer\settings.json` | `%APPDATA%\fluxercanary\settings.json` |
|
||||
| macOS | `~/Library/Application Support/fluxer/settings.json` | `~/Library/Application Support/fluxercanary/settings.json` |
|
||||
| Linux | `~/.config/fluxer/settings.json` | `~/.config/fluxercanary/settings.json` |
|
||||
|
||||
### Available options
|
||||
|
||||
| Key | Type | Default (Stable) | Default (Canary) | Description |
|
||||
| --------- | ------ | ------------------------ | ------------------------------- | ----------------------------------- |
|
||||
| `app_url` | string | `https://web.fluxer.app` | `https://web.canary.fluxer.app` | URL of the web application to load. |
|
||||
|
||||
### Example
|
||||
|
||||
```json
|
||||
{
|
||||
"app_url": "https://my-instance.example.com"
|
||||
}
|
||||
```
|
||||
|
||||
When `app_url` is set, the desktop client loads that URL instead of the default and treats its origin as trusted for permissions, navigation, and the local RPC server.
|
||||
38
fluxer_desktop/build_resources/entitlements.mac.canary.plist
Normal file
@@ -0,0 +1,38 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<!-- Required for Electron on arm64 -->
|
||||
<key>com.apple.security.cs.allow-jit</key>
|
||||
<true/>
|
||||
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
|
||||
<true/>
|
||||
<key>com.apple.security.cs.disable-library-validation</key>
|
||||
<true/>
|
||||
|
||||
<!-- Microphone: need BOTH audio-input (hardened runtime) AND microphone (sandbox) -->
|
||||
<key>com.apple.security.device.audio-input</key>
|
||||
<true/>
|
||||
<key>com.apple.security.device.microphone</key>
|
||||
<true/>
|
||||
|
||||
<!-- Camera -->
|
||||
<key>com.apple.security.device.camera</key>
|
||||
<true/>
|
||||
|
||||
<!-- Network -->
|
||||
<key>com.apple.security.network.client</key>
|
||||
<true/>
|
||||
<key>com.apple.security.network.server</key>
|
||||
<true/>
|
||||
|
||||
<!-- Passkeys: application identifier and associated domains (restricted entitlements) -->
|
||||
<key>com.apple.application-identifier</key>
|
||||
<string>3G5837T29K.app.fluxer.canary</string>
|
||||
|
||||
<key>com.apple.developer.associated-domains</key>
|
||||
<array>
|
||||
<string>webcredentials:web.canary.fluxer.app</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -0,0 +1,32 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<!-- Required for Electron on arm64 -->
|
||||
<key>com.apple.security.cs.allow-jit</key>
|
||||
<true/>
|
||||
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
|
||||
<true/>
|
||||
<key>com.apple.security.cs.disable-library-validation</key>
|
||||
<true/>
|
||||
|
||||
<!-- Microphone: need BOTH audio-input (hardened runtime) AND microphone (sandbox) -->
|
||||
<key>com.apple.security.device.audio-input</key>
|
||||
<true/>
|
||||
<key>com.apple.security.device.microphone</key>
|
||||
<true/>
|
||||
|
||||
<!-- Camera -->
|
||||
<key>com.apple.security.device.camera</key>
|
||||
<true/>
|
||||
|
||||
<!-- Network -->
|
||||
<key>com.apple.security.network.client</key>
|
||||
<true/>
|
||||
<key>com.apple.security.network.server</key>
|
||||
<true/>
|
||||
|
||||
<!-- NOTE: No restricted entitlements (associated-domains, application-identifier) here.
|
||||
This file is for helper apps/frameworks which don't need passkey capabilities. -->
|
||||
</dict>
|
||||
</plist>
|
||||
39
fluxer_desktop/build_resources/entitlements.mac.stable.plist
Normal file
@@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<!-- Required for Electron on arm64 -->
|
||||
<key>com.apple.security.cs.allow-jit</key>
|
||||
<true/>
|
||||
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
|
||||
<true/>
|
||||
<key>com.apple.security.cs.disable-library-validation</key>
|
||||
<true/>
|
||||
|
||||
<!-- Microphone: need BOTH audio-input (hardened runtime) AND microphone (sandbox) -->
|
||||
<key>com.apple.security.device.audio-input</key>
|
||||
<true/>
|
||||
<key>com.apple.security.device.microphone</key>
|
||||
<true/>
|
||||
|
||||
<!-- Camera -->
|
||||
<key>com.apple.security.device.camera</key>
|
||||
<true/>
|
||||
|
||||
<!-- Network -->
|
||||
<key>com.apple.security.network.client</key>
|
||||
<true/>
|
||||
<key>com.apple.security.network.server</key>
|
||||
<true/>
|
||||
|
||||
<!-- Passkeys: application identifier and associated domains (restricted entitlements) -->
|
||||
<key>com.apple.application-identifier</key>
|
||||
<string>3G5837T29K.app.fluxer</string>
|
||||
|
||||
<key>com.apple.developer.associated-domains</key>
|
||||
<array>
|
||||
<string>webcredentials:fluxer.app</string>
|
||||
<string>webcredentials:web.fluxer.app</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
BIN
fluxer_desktop/build_resources/icons-canary/1024x1024.png
Normal file
|
After Width: | Height: | Size: 45 KiB |
BIN
fluxer_desktop/build_resources/icons-canary/128x128.png
Normal file
|
After Width: | Height: | Size: 4.7 KiB |
BIN
fluxer_desktop/build_resources/icons-canary/128x128@2x.png
Normal file
|
After Width: | Height: | Size: 3.7 KiB |
BIN
fluxer_desktop/build_resources/icons-canary/16x16.png
Normal file
|
After Width: | Height: | Size: 557 B |
BIN
fluxer_desktop/build_resources/icons-canary/24x24.png
Normal file
|
After Width: | Height: | Size: 865 B |
BIN
fluxer_desktop/build_resources/icons-canary/256x256.png
Normal file
|
After Width: | Height: | Size: 9.8 KiB |
BIN
fluxer_desktop/build_resources/icons-canary/32x32.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
fluxer_desktop/build_resources/icons-canary/48x48.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
fluxer_desktop/build_resources/icons-canary/512x512.png
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
fluxer_desktop/build_resources/icons-canary/64x64.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
@@ -0,0 +1,3 @@
|
||||
<svg width="633" height="512" viewBox="0 0 633 512" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M46.3631 210.286C19.4771 210.286 -2.98429 188.554 0.324514 161.87C3.90111 133.034 11.3051 108.486 22.5371 88.228C39.9071 57.448 62.4611 35.048 90.1931 21.028C118.231 7.01002 147.793 0 178.879 0C209.965 0 238.155 7.01002 263.451 21.028C289.051 34.742 318.765 55.772 352.593 84.114C375.451 103.314 393.431 117.028 406.537 125.258C419.945 133.18 434.879 137.142 451.337 137.142C477.851 137.142 498.727 127.696 513.965 108.8C521.231 99.79 526.661 88.77 530.255 75.74C537.627 49.008 558.305 25.6 586.033 25.6C612.817 25.6 635.309 47.078 632.223 73.684C628.861 102.664 621.441 127.322 609.965 147.658C592.593 178.438 569.889 200.838 541.851 214.858C513.813 228.876 484.251 235.886 453.165 235.886C422.079 235.886 393.737 229.334 368.137 216.228C342.537 202.82 312.975 181.334 279.451 151.772C257.507 132.572 239.679 119.01 225.965 111.086C212.251 102.858 197.165 98.742 180.707 98.742C156.021 98.742 135.603 107.276 119.451 124.342C111.043 133.226 104.947 145.246 101.165 160.404C94.4911 187.138 73.9191 210.286 46.3631 210.286ZM46.3631 486.4C19.4771 486.4 -2.98429 464.668 0.324514 437.986C3.90111 409.148 11.3051 384.6 22.5371 364.342C39.9071 333.562 62.4611 311.162 90.1931 297.142C118.231 283.124 147.793 276.114 178.879 276.114C209.965 276.114 238.155 283.124 263.451 297.142C289.051 310.858 318.765 331.886 352.593 360.228C375.451 379.428 393.431 393.142 406.537 401.372C419.945 409.296 434.879 413.258 451.337 413.258C477.851 413.258 498.727 403.81 513.965 384.914C521.231 375.904 526.661 364.884 530.255 351.854C537.627 325.122 558.305 301.714 586.033 301.714C612.817 301.714 635.309 323.194 632.223 349.798C628.861 378.778 621.441 403.436 609.965 423.772C592.593 454.552 569.889 476.952 541.851 490.972C513.813 504.99 484.251 512 453.165 512C422.079 512 393.737 505.448 368.137 492.342C342.537 478.934 312.975 457.448 279.451 427.886C257.507 408.686 239.679 395.124 225.965 387.2C212.251 378.972 197.165 374.858 180.707 374.858C156.021 374.858 135.603 383.39 119.451 400.458C111.043 409.34 104.947 421.36 101.165 436.518C94.4911 463.252 73.9191 486.4 46.3631 486.4Z" fill="white"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.1 KiB |
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"fill": {
|
||||
"solid": "display-p3:0.95215,0.66553,0.23462,1.00000"
|
||||
},
|
||||
"groups": [
|
||||
{
|
||||
"layers": [
|
||||
{
|
||||
"image-name": "Vector.svg",
|
||||
"name": "Vector"
|
||||
}
|
||||
],
|
||||
"shadow": {
|
||||
"kind": "neutral",
|
||||
"opacity": 0.5
|
||||
},
|
||||
"translucency": {
|
||||
"enabled": true,
|
||||
"value": 0.5
|
||||
}
|
||||
}
|
||||
],
|
||||
"supported-platforms": {
|
||||
"circles": ["watchOS"],
|
||||
"squares": "shared"
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 2.2 KiB |
|
After Width: | Height: | Size: 4.1 KiB |
BIN
fluxer_desktop/build_resources/icons-canary/Square30x30Logo.png
Normal file
|
After Width: | Height: | Size: 521 B |
|
After Width: | Height: | Size: 4.5 KiB |
BIN
fluxer_desktop/build_resources/icons-canary/Square44x44Logo.png
Normal file
|
After Width: | Height: | Size: 701 B |
BIN
fluxer_desktop/build_resources/icons-canary/Square71x71Logo.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
fluxer_desktop/build_resources/icons-canary/Square89x89Logo.png
Normal file
|
After Width: | Height: | Size: 883 B |
BIN
fluxer_desktop/build_resources/icons-canary/StoreLogo.png
Normal file
|
After Width: | Height: | Size: 805 B |
BIN
fluxer_desktop/build_resources/icons-canary/_compiled/Assets.car
Normal file
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict/>
|
||||
</plist>
|
||||
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>AppIcon</string>
|
||||
<key>CFBundleIconName</key>
|
||||
<string>AppIcon</string>
|
||||
</dict>
|
||||
</plist>
|
||||
BIN
fluxer_desktop/build_resources/icons-canary/badges/badge-1.ico
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
fluxer_desktop/build_resources/icons-canary/badges/badge-10.ico
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
fluxer_desktop/build_resources/icons-canary/badges/badge-11.ico
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
fluxer_desktop/build_resources/icons-canary/badges/badge-2.ico
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
fluxer_desktop/build_resources/icons-canary/badges/badge-3.ico
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
fluxer_desktop/build_resources/icons-canary/badges/badge-4.ico
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
fluxer_desktop/build_resources/icons-canary/badges/badge-5.ico
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
fluxer_desktop/build_resources/icons-canary/badges/badge-6.ico
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
fluxer_desktop/build_resources/icons-canary/badges/badge-7.ico
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
fluxer_desktop/build_resources/icons-canary/badges/badge-8.ico
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
fluxer_desktop/build_resources/icons-canary/badges/badge-9.ico
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
fluxer_desktop/build_resources/icons-canary/icon.ico
Normal file
|
After Width: | Height: | Size: 110 KiB |
BIN
fluxer_desktop/build_resources/icons-canary/icon.png
Normal file
|
After Width: | Height: | Size: 7.6 KiB |
BIN
fluxer_desktop/build_resources/icons-stable/1024x1024.png
Normal file
|
After Width: | Height: | Size: 53 KiB |
BIN
fluxer_desktop/build_resources/icons-stable/128x128.png
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
BIN
fluxer_desktop/build_resources/icons-stable/128x128@2x.png
Normal file
|
After Width: | Height: | Size: 4.3 KiB |
BIN
fluxer_desktop/build_resources/icons-stable/16x16.png
Normal file
|
After Width: | Height: | Size: 676 B |
BIN
fluxer_desktop/build_resources/icons-stable/24x24.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
fluxer_desktop/build_resources/icons-stable/256x256.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
fluxer_desktop/build_resources/icons-stable/32x32.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
fluxer_desktop/build_resources/icons-stable/48x48.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
fluxer_desktop/build_resources/icons-stable/512x512.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
fluxer_desktop/build_resources/icons-stable/64x64.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
@@ -0,0 +1,3 @@
|
||||
<svg width="633" height="512" viewBox="0 0 633 512" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M46.3631 210.286C19.4771 210.286 -2.98429 188.554 0.324514 161.87C3.90111 133.034 11.3051 108.486 22.5371 88.228C39.9071 57.448 62.4611 35.048 90.1931 21.028C118.231 7.01002 147.793 0 178.879 0C209.965 0 238.155 7.01002 263.451 21.028C289.051 34.742 318.765 55.772 352.593 84.114C375.451 103.314 393.431 117.028 406.537 125.258C419.945 133.18 434.879 137.142 451.337 137.142C477.851 137.142 498.727 127.696 513.965 108.8C521.231 99.79 526.661 88.77 530.255 75.74C537.627 49.008 558.305 25.6 586.033 25.6C612.817 25.6 635.309 47.078 632.223 73.684C628.861 102.664 621.441 127.322 609.965 147.658C592.593 178.438 569.889 200.838 541.851 214.858C513.813 228.876 484.251 235.886 453.165 235.886C422.079 235.886 393.737 229.334 368.137 216.228C342.537 202.82 312.975 181.334 279.451 151.772C257.507 132.572 239.679 119.01 225.965 111.086C212.251 102.858 197.165 98.742 180.707 98.742C156.021 98.742 135.603 107.276 119.451 124.342C111.043 133.226 104.947 145.246 101.165 160.404C94.4911 187.138 73.9191 210.286 46.3631 210.286ZM46.3631 486.4C19.4771 486.4 -2.98429 464.668 0.324514 437.986C3.90111 409.148 11.3051 384.6 22.5371 364.342C39.9071 333.562 62.4611 311.162 90.1931 297.142C118.231 283.124 147.793 276.114 178.879 276.114C209.965 276.114 238.155 283.124 263.451 297.142C289.051 310.858 318.765 331.886 352.593 360.228C375.451 379.428 393.431 393.142 406.537 401.372C419.945 409.296 434.879 413.258 451.337 413.258C477.851 413.258 498.727 403.81 513.965 384.914C521.231 375.904 526.661 364.884 530.255 351.854C537.627 325.122 558.305 301.714 586.033 301.714C612.817 301.714 635.309 323.194 632.223 349.798C628.861 378.778 621.441 403.436 609.965 423.772C592.593 454.552 569.889 476.952 541.851 490.972C513.813 504.99 484.251 512 453.165 512C422.079 512 393.737 505.448 368.137 492.342C342.537 478.934 312.975 457.448 279.451 427.886C257.507 408.686 239.679 395.124 225.965 387.2C212.251 378.972 197.165 374.858 180.707 374.858C156.021 374.858 135.603 383.39 119.451 400.458C111.043 409.34 104.947 421.36 101.165 436.518C94.4911 463.252 73.9191 486.4 46.3631 486.4Z" fill="white"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.1 KiB |
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"fill": {
|
||||
"solid": "display-p3:0.27100,0.25562,0.81934,1.00000"
|
||||
},
|
||||
"groups": [
|
||||
{
|
||||
"layers": [
|
||||
{
|
||||
"fill": "automatic",
|
||||
"image-name": "Vector.svg",
|
||||
"name": "Vector"
|
||||
}
|
||||
],
|
||||
"shadow": {
|
||||
"kind": "neutral",
|
||||
"opacity": 0.5
|
||||
},
|
||||
"translucency": {
|
||||
"enabled": true,
|
||||
"value": 0.5
|
||||
}
|
||||
}
|
||||
],
|
||||
"supported-platforms": {
|
||||
"circles": ["watchOS"],
|
||||
"squares": "shared"
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 2.3 KiB |
|
After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 4.7 KiB |
BIN
fluxer_desktop/build_resources/icons-stable/Square30x30Logo.png
Normal file
|
After Width: | Height: | Size: 624 B |
|
After Width: | Height: | Size: 5.1 KiB |
BIN
fluxer_desktop/build_resources/icons-stable/Square44x44Logo.png
Normal file
|
After Width: | Height: | Size: 807 B |
BIN
fluxer_desktop/build_resources/icons-stable/Square71x71Logo.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
fluxer_desktop/build_resources/icons-stable/Square89x89Logo.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
fluxer_desktop/build_resources/icons-stable/StoreLogo.png
Normal file
|
After Width: | Height: | Size: 930 B |
BIN
fluxer_desktop/build_resources/icons-stable/_compiled/Assets.car
Normal file
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict/>
|
||||
</plist>
|
||||
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>AppIcon</string>
|
||||
<key>CFBundleIconName</key>
|
||||
<string>AppIcon</string>
|
||||
</dict>
|
||||
</plist>
|
||||
BIN
fluxer_desktop/build_resources/icons-stable/badges/badge-1.ico
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
fluxer_desktop/build_resources/icons-stable/badges/badge-10.ico
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
fluxer_desktop/build_resources/icons-stable/badges/badge-11.ico
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
fluxer_desktop/build_resources/icons-stable/badges/badge-2.ico
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
fluxer_desktop/build_resources/icons-stable/badges/badge-3.ico
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
fluxer_desktop/build_resources/icons-stable/badges/badge-4.ico
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
fluxer_desktop/build_resources/icons-stable/badges/badge-5.ico
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
fluxer_desktop/build_resources/icons-stable/badges/badge-6.ico
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
fluxer_desktop/build_resources/icons-stable/badges/badge-7.ico
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
fluxer_desktop/build_resources/icons-stable/badges/badge-8.ico
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
fluxer_desktop/build_resources/icons-stable/badges/badge-9.ico
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
fluxer_desktop/build_resources/icons-stable/icon.ico
Normal file
|
After Width: | Height: | Size: 112 KiB |
BIN
fluxer_desktop/build_resources/icons-stable/icon.png
Normal file
|
After Width: | Height: | Size: 8.6 KiB |
52
fluxer_desktop/build_resources/notarize.js
Normal file
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
* 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 {notarize} = require('@electron/notarize');
|
||||
|
||||
exports.default = async function notarizing(context) {
|
||||
const {electronPlatformName, appOutDir} = context;
|
||||
|
||||
if (electronPlatformName !== 'darwin') {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!process.env.APPLE_ID || !process.env.APPLE_APP_SPECIFIC_PASSWORD || !process.env.APPLE_TEAM_ID) {
|
||||
console.log('Skipping notarization: Apple credentials not set');
|
||||
return;
|
||||
}
|
||||
|
||||
const appName = context.packager.appInfo.productFilename;
|
||||
const appPath = `${appOutDir}/${appName}.app`;
|
||||
|
||||
console.log(`Notarizing ${appPath}...`);
|
||||
|
||||
try {
|
||||
await notarize({
|
||||
tool: 'notarytool',
|
||||
appPath,
|
||||
appleId: process.env.APPLE_ID,
|
||||
appleIdPassword: process.env.APPLE_APP_SPECIFIC_PASSWORD,
|
||||
teamId: process.env.APPLE_TEAM_ID,
|
||||
});
|
||||
console.log('Notarization complete');
|
||||
} catch (error) {
|
||||
console.error('Notarization failed:', error);
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
BIN
fluxer_desktop/build_resources/profiles/Fluxer.provisionprofile
Normal file
185
fluxer_desktop/electron-builder.config.cjs
Normal file
@@ -0,0 +1,185 @@
|
||||
/*
|
||||
* 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,
|
||||
};
|
||||
33
fluxer_desktop/package.json
Normal file
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"name": "fluxer_desktop",
|
||||
"version": "0.0.0",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"main": "dist/main/index.js",
|
||||
"scripts": {
|
||||
"build": "node scripts/build.mjs",
|
||||
"set-channel": "node scripts/set-build-channel.mjs",
|
||||
"typecheck": "tsgo --noEmit"
|
||||
},
|
||||
"dependencies": {
|
||||
"@electron-webauthn/native": "0.0.6",
|
||||
"@simplewebauthn/browser": "13.2.2",
|
||||
"electron-squirrel-startup": "1.0.1",
|
||||
"electron-webauthn-mac": "1.0.0",
|
||||
"node-mac-permissions": "2.5.0",
|
||||
"update-electron-app": "3.1.2",
|
||||
"ws": "8.19.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/ws": "8.18.1",
|
||||
"@typescript/native-preview": "7.0.0-dev.20260130.1",
|
||||
"electron": "40.0.0",
|
||||
"electron-builder": "26.4.0",
|
||||
"electron-builder-squirrel-windows": "26.4.0",
|
||||
"esbuild": "0.27.2"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"electron-log": "5.4.3",
|
||||
"uiohook-napi": "1.5.4"
|
||||
}
|
||||
}
|
||||
51
fluxer_desktop/packaging/aur/PKGBUILD
Normal file
@@ -0,0 +1,51 @@
|
||||
# Maintainer: Fluxer Contributors <developers@fluxer.app>
|
||||
pkgname=fluxer-bin
|
||||
pkgver=PLACEHOLDER_VERSION
|
||||
pkgrel=1
|
||||
pkgdesc='Instant messaging and VoIP application'
|
||||
arch=('x86_64' 'aarch64')
|
||||
url='https://fluxer.app'
|
||||
license=('AGPL-3.0-or-later')
|
||||
depends=('gtk3' 'libnotify' 'nss' 'libxss' 'libxtst' 'xdg-utils'
|
||||
'at-spi2-core' 'util-linux-libs' 'libsecret' 'libappindicator-gtk3')
|
||||
optdepends=('libpipewire: screen sharing via PipeWire')
|
||||
provides=('fluxer')
|
||||
conflicts=('fluxer')
|
||||
options=('!strip' '!debug')
|
||||
|
||||
_filename_x86_64="fluxer-stable-${pkgver}-x86_64.tar.gz"
|
||||
_filename_aarch64="fluxer-stable-${pkgver}-aarch64.tar.gz"
|
||||
|
||||
source_x86_64=("${_filename_x86_64}::https://api.fluxer.app/dl/desktop/stable/linux/x64/${pkgver}/tar_gz")
|
||||
source_aarch64=("${_filename_aarch64}::https://api.fluxer.app/dl/desktop/stable/linux/arm64/${pkgver}/tar_gz")
|
||||
sha256sums_x86_64=('PLACEHOLDER_SHA256_X64')
|
||||
sha256sums_aarch64=('PLACEHOLDER_SHA256_ARM64')
|
||||
|
||||
package() {
|
||||
install -d "${pkgdir}/opt/fluxer"
|
||||
cp -r "${srcdir}/"* "${pkgdir}/opt/fluxer/"
|
||||
chmod +x "${pkgdir}/opt/fluxer/fluxer"
|
||||
|
||||
install -d "${pkgdir}/usr/bin"
|
||||
ln -s /opt/fluxer/fluxer "${pkgdir}/usr/bin/fluxer"
|
||||
|
||||
install -Dm644 /dev/stdin "${pkgdir}/usr/share/applications/fluxer.desktop" <<EOF
|
||||
[Desktop Entry]
|
||||
Name=Fluxer
|
||||
Comment=Instant messaging and VoIP application
|
||||
Exec=/opt/fluxer/fluxer %U
|
||||
Icon=fluxer
|
||||
Type=Application
|
||||
Categories=Network;InstantMessaging;
|
||||
StartupWMClass=fluxer
|
||||
MimeType=x-scheme-handler/fluxer;
|
||||
Terminal=false
|
||||
EOF
|
||||
|
||||
for size in 16 32 48 64 128 256 512; do
|
||||
if [ -f "${srcdir}/resources/icons/${size}x${size}.png" ]; then
|
||||
install -Dm644 "${srcdir}/resources/icons/${size}x${size}.png" \
|
||||
"${pkgdir}/usr/share/icons/hicolor/${size}x${size}/apps/fluxer.png"
|
||||
fi
|
||||
done
|
||||
}
|
||||
24
fluxer_desktop/packaging/aur/README.md
Normal file
@@ -0,0 +1,24 @@
|
||||
# Fluxer AUR package
|
||||
|
||||
PKGBUILD for the `fluxer-bin` AUR binary package. This installs pre-built binaries rather than building from source, since Electron apps are impractical to compile within the AUR build system.
|
||||
|
||||
## Placeholders
|
||||
|
||||
The `pkgver` and `sha256sums` fields are set to placeholder values. Update them before publishing:
|
||||
|
||||
- Run `updpkgsums` to fetch and fill checksums automatically.
|
||||
- Alternatively, query the latest version from the API and update manually.
|
||||
|
||||
## Testing locally
|
||||
|
||||
```bash
|
||||
makepkg -si
|
||||
```
|
||||
|
||||
## Fetching the latest version
|
||||
|
||||
```bash
|
||||
curl -s https://api.fluxer.app/dl/desktop/stable/linux/x64/latest | jq
|
||||
```
|
||||
|
||||
This returns a JSON object containing `version`, `pub_date`, and `files` with download URLs and SHA256 checksums for each format.
|
||||
48
fluxer_desktop/packaging/flatpak/README.md
Normal file
@@ -0,0 +1,48 @@
|
||||
# Fluxer Flatpak packaging
|
||||
|
||||
These files are for submitting Fluxer to [Flathub](https://flathub.org), the centralised Flatpak application repository.
|
||||
|
||||
## Files
|
||||
|
||||
- **`app.fluxer.json`** -- Flatpak manifest defining the build, runtime, permissions, and sources.
|
||||
- **`app.fluxer.metainfo.xml`** -- AppStream metadata for the app store listing (description, categories, content rating, etc.).
|
||||
- **`app.fluxer.desktop`** -- XDG desktop entry so the app appears in desktop launchers.
|
||||
- **`icon-256.png`** -- Application icon (256x256). This file must be extracted from the build resources or provided separately; it is not checked in.
|
||||
|
||||
## Placeholder SHA256 hashes
|
||||
|
||||
The `sha256` values in `app.fluxer.json` are set to `PLACEHOLDER_SHA256_X64` and `PLACEHOLDER_SHA256_ARM64`. These are updated automatically by [flatpak-external-data-checker](https://github.com/nickvdp/flatpak-external-data-checker) via the `x-checker-data` configuration on each source. When preparing a manual build, replace them with the actual SHA256 checksums of the downloaded tar.gz archives.
|
||||
|
||||
## Icon
|
||||
|
||||
The `icon-256.png` file needs to be provided before building. You can extract it from the Electron build resources:
|
||||
|
||||
```sh
|
||||
cp ../../build_resources/icons/256x256.png icon-256.png
|
||||
```
|
||||
|
||||
Or generate it from the source SVG/PNG in the build resources directory.
|
||||
|
||||
## Testing locally
|
||||
|
||||
Install the required runtime and base app if you haven't already:
|
||||
|
||||
```sh
|
||||
flatpak install flathub org.freedesktop.Platform//24.08 org.freedesktop.Sdk//24.08 org.electronjs.Electron2.BaseApp//24.08
|
||||
```
|
||||
|
||||
Then build and install:
|
||||
|
||||
```sh
|
||||
flatpak-builder --user --install build-dir app.fluxer.json
|
||||
```
|
||||
|
||||
Run the app:
|
||||
|
||||
```sh
|
||||
flatpak run app.fluxer
|
||||
```
|
||||
|
||||
## Flathub submission
|
||||
|
||||
To submit to Flathub, fork the [flathub/flathub](https://github.com/flathub/flathub) repository and open a pull request adding `app.fluxer.json` along with the supporting files. Refer to the [Flathub submission guide](https://docs.flathub.org/docs/for-app-authors/submission/) for current requirements.
|
||||
10
fluxer_desktop/packaging/flatpak/app.fluxer.desktop
Normal file
@@ -0,0 +1,10 @@
|
||||
[Desktop Entry]
|
||||
Name=Fluxer
|
||||
Comment=Instant messaging and VoIP application
|
||||
Exec=fluxer %U
|
||||
Icon=app.fluxer
|
||||
Type=Application
|
||||
Categories=Network;InstantMessaging;
|
||||
StartupWMClass=fluxer
|
||||
MimeType=x-scheme-handler/fluxer;
|
||||
Terminal=false
|
||||
78
fluxer_desktop/packaging/flatpak/app.fluxer.json
Normal file
@@ -0,0 +1,78 @@
|
||||
{
|
||||
"id": "app.fluxer",
|
||||
"runtime": "org.freedesktop.Platform",
|
||||
"runtime-version": "24.08",
|
||||
"sdk": "org.freedesktop.Sdk",
|
||||
"base": "org.electronjs.Electron2.BaseApp",
|
||||
"base-version": "24.08",
|
||||
"command": "fluxer",
|
||||
"separate-locales": false,
|
||||
"finish-args": [
|
||||
"--share=ipc",
|
||||
"--share=network",
|
||||
"--socket=x11",
|
||||
"--socket=wayland",
|
||||
"--socket=pulseaudio",
|
||||
"--device=all",
|
||||
"--talk-name=org.freedesktop.Notifications",
|
||||
"--talk-name=org.kde.StatusNotifierWatcher",
|
||||
"--talk-name=org.freedesktop.secrets",
|
||||
"--filesystem=xdg-run/pipewire-0",
|
||||
"--env=XCURSOR_PATH=/run/host/user-share/icons:/run/host/share/icons"
|
||||
],
|
||||
"modules": [
|
||||
{
|
||||
"name": "fluxer",
|
||||
"buildsystem": "simple",
|
||||
"build-commands": [
|
||||
"install -d /app/lib/fluxer",
|
||||
"cp -r ./* /app/lib/fluxer/",
|
||||
"chmod +x /app/lib/fluxer/fluxer",
|
||||
"install -Dm644 /app/lib/fluxer/resources/app.asar.unpacked/node_modules/electron/dist/chrome-sandbox /app/lib/fluxer/chrome-sandbox || true",
|
||||
"install -d /app/bin",
|
||||
"ln -s /app/lib/fluxer/fluxer /app/bin/fluxer",
|
||||
"install -Dm644 app.fluxer.metainfo.xml /app/share/metainfo/app.fluxer.metainfo.xml",
|
||||
"install -Dm644 app.fluxer.desktop /app/share/applications/app.fluxer.desktop",
|
||||
"install -Dm644 icon-256.png /app/share/icons/hicolor/256x256/apps/app.fluxer.png"
|
||||
],
|
||||
"sources": [
|
||||
{
|
||||
"type": "archive",
|
||||
"only-arches": ["x86_64"],
|
||||
"url": "https://api.fluxer.app/dl/desktop/stable/linux/x64/latest/tar_gz",
|
||||
"sha256": "PLACEHOLDER_SHA256_X64",
|
||||
"x-checker-data": {
|
||||
"type": "json",
|
||||
"url": "https://api.fluxer.app/dl/desktop/stable/linux/x64/latest",
|
||||
"version-query": ".version",
|
||||
"url-query": ".files.tar_gz.url"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "archive",
|
||||
"only-arches": ["aarch64"],
|
||||
"url": "https://api.fluxer.app/dl/desktop/stable/linux/arm64/latest/tar_gz",
|
||||
"sha256": "PLACEHOLDER_SHA256_ARM64",
|
||||
"x-checker-data": {
|
||||
"type": "json",
|
||||
"url": "https://api.fluxer.app/dl/desktop/stable/linux/arm64/latest",
|
||||
"version-query": ".version",
|
||||
"url-query": ".files.tar_gz.url"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "file",
|
||||
"path": "app.fluxer.metainfo.xml"
|
||||
},
|
||||
{
|
||||
"type": "file",
|
||||
"path": "app.fluxer.desktop"
|
||||
},
|
||||
{
|
||||
"type": "file",
|
||||
"path": "icon-256.png"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
41
fluxer_desktop/packaging/flatpak/app.fluxer.metainfo.xml
Normal file
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<component type="desktop-application">
|
||||
<id>app.fluxer</id>
|
||||
<name>Fluxer</name>
|
||||
<summary>Instant messaging and VoIP application</summary>
|
||||
<metadata_license>CC0-1.0</metadata_license>
|
||||
<project_license>AGPL-3.0-or-later</project_license>
|
||||
<description>
|
||||
<p>Fluxer is a free and open-source instant messaging and voice-over-IP application. It provides text chat, voice calls, video calls, and screen sharing in a modern interface.</p>
|
||||
<p>Features include:</p>
|
||||
<ul>
|
||||
<li>Text messaging with rich formatting and media support</li>
|
||||
<li>Voice and video calls</li>
|
||||
<li>Screen sharing</li>
|
||||
<li>Communities with channels</li>
|
||||
<li>Direct messages and group chats</li>
|
||||
<li>Custom emoji and reactions</li>
|
||||
</ul>
|
||||
</description>
|
||||
<url type="homepage">https://fluxer.app</url>
|
||||
<url type="bugtracker">https://github.com/fluxerapp/fluxer/issues</url>
|
||||
<url type="help">https://fluxer.app/help</url>
|
||||
<launchable type="desktop-id">app.fluxer.desktop</launchable>
|
||||
<categories>
|
||||
<category>Network</category>
|
||||
<category>InstantMessaging</category>
|
||||
</categories>
|
||||
<provides>
|
||||
<binary>fluxer</binary>
|
||||
</provides>
|
||||
<content_rating type="oars-1.1">
|
||||
<content_attribute id="social-chat">intense</content_attribute>
|
||||
<content_attribute id="social-audio">intense</content_attribute>
|
||||
<content_attribute id="social-contacts">intense</content_attribute>
|
||||
<content_attribute id="social-info">moderate</content_attribute>
|
||||
</content_rating>
|
||||
<supports>
|
||||
<control>pointing</control>
|
||||
<control>keyboard</control>
|
||||
</supports>
|
||||
</component>
|
||||
25
fluxer_desktop/packaging/homebrew/README.md
Normal file
@@ -0,0 +1,25 @@
|
||||
# Fluxer Homebrew cask
|
||||
|
||||
Homebrew cask definition for installing Fluxer on macOS.
|
||||
|
||||
## Placeholders
|
||||
|
||||
The `version` and `sha256` fields are set to placeholder values. Update them before publishing or submitting to a tap.
|
||||
|
||||
## Livecheck
|
||||
|
||||
The cask includes a `livecheck` block that queries the Fluxer download API for the latest stable version. Homebrew's automated tooling uses this to detect new releases.
|
||||
|
||||
## Testing locally
|
||||
|
||||
```bash
|
||||
brew install --cask ./fluxer.rb
|
||||
```
|
||||
|
||||
## Fetching the latest version
|
||||
|
||||
```bash
|
||||
curl -s https://api.fluxer.app/dl/desktop/stable/darwin/arm64/latest | jq
|
||||
```
|
||||
|
||||
This returns a JSON object containing `version`, `pub_date`, and `files` with download URLs and SHA256 checksums for each format.
|
||||
37
fluxer_desktop/packaging/homebrew/fluxer.rb
Normal file
@@ -0,0 +1,37 @@
|
||||
cask "fluxer" do
|
||||
arch arm: "arm64", intel: "x64"
|
||||
|
||||
version "PLACEHOLDER_VERSION"
|
||||
|
||||
on_arm do
|
||||
sha256 "PLACEHOLDER_SHA256_ARM64"
|
||||
end
|
||||
on_intel do
|
||||
sha256 "PLACEHOLDER_SHA256_X64"
|
||||
end
|
||||
|
||||
url "https://api.fluxer.app/dl/desktop/stable/darwin/#{arch}/#{version}/dmg"
|
||||
name "Fluxer"
|
||||
desc "Instant messaging and VoIP application"
|
||||
homepage "https://fluxer.app"
|
||||
|
||||
livecheck do
|
||||
url "https://api.fluxer.app/dl/desktop/stable/darwin/arm64/latest"
|
||||
strategy :json do |json|
|
||||
json["version"]
|
||||
end
|
||||
end
|
||||
|
||||
auto_updates true
|
||||
depends_on macos: ">= :catalina"
|
||||
|
||||
app "Fluxer.app"
|
||||
|
||||
zap trash: [
|
||||
"~/Library/Application Support/Fluxer",
|
||||
"~/Library/Caches/app.fluxer",
|
||||
"~/Library/Caches/app.fluxer.ShipIt",
|
||||
"~/Library/Preferences/app.fluxer.plist",
|
||||
"~/Library/Saved Application State/app.fluxer.savedState",
|
||||
]
|
||||
end
|
||||
19
fluxer_desktop/packaging/winget/Fluxer.Fluxer.installer.yaml
Normal file
@@ -0,0 +1,19 @@
|
||||
PackageIdentifier: Fluxer.Fluxer
|
||||
PackageVersion: PLACEHOLDER_VERSION
|
||||
MinimumOSVersion: 10.0.17763.0
|
||||
InstallerType: nullsoft
|
||||
Scope: user
|
||||
InstallModes:
|
||||
- interactive
|
||||
- silent
|
||||
- silentWithProgress
|
||||
UpgradeBehavior: install
|
||||
Installers:
|
||||
- Architecture: x64
|
||||
InstallerUrl: https://api.fluxer.app/dl/desktop/stable/win32/x64/PLACEHOLDER_VERSION/setup
|
||||
InstallerSha256: PLACEHOLDER_SHA256_X64
|
||||
- Architecture: arm64
|
||||
InstallerUrl: https://api.fluxer.app/dl/desktop/stable/win32/arm64/PLACEHOLDER_VERSION/setup
|
||||
InstallerSha256: PLACEHOLDER_SHA256_ARM64
|
||||
ManifestType: installer
|
||||
ManifestVersion: 1.6.0
|
||||
@@ -0,0 +1,22 @@
|
||||
PackageIdentifier: Fluxer.Fluxer
|
||||
PackageVersion: PLACEHOLDER_VERSION
|
||||
PackageLocale: en-US
|
||||
Publisher: Fluxer Contributors
|
||||
PublisherUrl: https://fluxer.app
|
||||
PublisherSupportUrl: https://github.com/fluxerapp/fluxer/issues
|
||||
PackageName: Fluxer
|
||||
PackageUrl: https://fluxer.app
|
||||
License: AGPL-3.0-or-later
|
||||
LicenseUrl: https://github.com/fluxerapp/fluxer/blob/main/LICENCE
|
||||
ShortDescription: Instant messaging and VoIP application
|
||||
Description: Fluxer is a free and open-source instant messaging and voice-over-IP application. It provides text chat, voice calls, video calls, and screen sharing in a modern, privacy-respecting interface.
|
||||
Tags:
|
||||
- chat
|
||||
- messaging
|
||||
- voip
|
||||
- voice
|
||||
- video
|
||||
- communication
|
||||
- open-source
|
||||
ManifestType: defaultLocale
|
||||
ManifestVersion: 1.6.0
|
||||
5
fluxer_desktop/packaging/winget/Fluxer.Fluxer.yaml
Normal file
@@ -0,0 +1,5 @@
|
||||
PackageIdentifier: Fluxer.Fluxer
|
||||
PackageVersion: PLACEHOLDER_VERSION
|
||||
DefaultLocale: en-US
|
||||
ManifestType: version
|
||||
ManifestVersion: 1.6.0
|
||||