appId: superProductivity productName: Super Productivity artifactName: ${name}-${arch}.${ext} files: - electron/**/* - '!electron/**/*.ts' - '!electron/**/*.js.map' - .tmp/angular-dist/**/* - 'embedded.provisionprofile' # Exclude Nx binaries - they're build tools, not runtime dependencies - '!**/@nx/nx-darwin-*/**' - '!**/@nx/nx-linux-*/**' - '!**/@nx/nx-win32-*/**' # Capacitor (mobile shim) - never required from electron/ at runtime - '!**/@capacitor/**' - '!**/@capawesome/**' - '!**/capacitor-plugin-safe-area/**' # sharp + libvips native binaries - only used by tools/generate-*-icon.js # during local dev; ~33 MB of unused weight in the asar otherwise - '!**/sharp/**' - '!**/@img/**' # Nx LMDB cache and Rollup pulled in transitively by build tooling - '!**/@lmdb/**' - '!**/@rollup/**' # Compiled into the Angular CSS bundle; the node_modules copy is unused - '!**/@material-symbols/**' # @noble/ciphers and hash-wasm are imported by the Angular bundle and # inlined by the bundler (WASM is base64-embedded). The node_modules # copies are dead weight at runtime. - '!**/@noble/**' - '!**/hash-wasm/**' # uuidv7 is imported by src/ (Angular bundle inlines it); not used by electron/ - '!**/uuidv7/**' #afterSign: ./tools/notarizeMacApp.js directories: output: './.tmp/app-builds' # Post-pack hook that installs a shell wrapper for Linux builds to force # --ozone-platform=x11 in Snap+Wayland sessions. # See tools/afterPack.js + build/linux/snap-wrapper.sh and # docs/research/snap-wayland-gpu-fix-research.md §18. afterPack: ./tools/afterPack.js win: target: - target: nsis arch: - arm64 - x64 - target: portable arch: - arm64 - x64 publish: - github nsis: # Hardcoded to avoid spaces (SignPath converts spaces to dots). Also referenced in build.yml. artifactName: Super-Productivity-Setup-${arch}.${ext} # allow to install to custom location oneClick: false allowToChangeInstallationDirectory: true # We ship no in-app auto-updater: electron-updater is not a dependency and the # autoUpdater block in electron/start-app.ts is commented out. elevate.exe is # only ever invoked by electron-updater to apply privileged (per-machine) # updates, so electron-builder bundles it here as dead weight that AV engines # frequently false-positive on. Drop it. Safe because perMachine is not true # (with perMachine: true, packElevateHelper: false is ignored). See #8135. packElevateHelper: false portable: artifactName: ${name}-${arch}.${ext} appx: applicationId: SuperProductivity displayName: Super Productivity publisherDisplayName: johannesjo publisher: CN=___-___ identityName: ___johannesjo.SuperProductivity linux: # Fix for issue #5259: Set executable name without spaces for snap compatibility executableName: superproductivity category: Office;ProjectManagement mimeTypes: - x-scheme-handler/superproductivity desktop: entry: StartupWMClass: superproductivity target: - AppImage - deb - snap - rpm publish: - github rpm: # Fix for issue #5368: Prevent /usr/lib/.build-id/ collisions with other Electron apps fpm: ['--rpm-rpmbuild-define=_build_id_links none'] # leads to Error: Please specify executable name as linux.executableName instead of linux.desktop.Exec # desktop: # Name: Super Productivity # Comment: A todo list and time tracking app # Exec: superProductivity # Terminal: false # Type: Application # Icon: build/icon.png # GenericName: ToDo List and Time Tracker snap: # We upload the .snap to the Snap Store ourselves via Canonical's snapcraft # container in CI (build.yml). electron-builder's snap target has a # hard-coded fallback to `snapStore` in `findSnapPublishConfig` (snap.js): # if `snap.publish` is unset, it falls through `linux.publish`/`config.publish` # to `{ provider: "snapStore" }`, then invokes `snapcraft` on the runner # during upload — and we no longer install snapcraft there (it was an # unreliable `sudo snap install`). Setting `snap.publish: github` overrides # that fallback. The .snap also lands on the GitHub release as a side effect, # which is harmless (and a useful manual-download fallback). publish: github grade: stable allowNativeWayland: true autoStart: true base: core22 confinement: strict environment: # Fix for issue #4920: Isolate fontconfig cache to prevent GTK dialog rendering issues # https://github.com/super-productivity/super-productivity/issues/4920 FC_CACHEDIR: $SNAP_USER_DATA/.cache/fontconfig # Fix for issue #7298: tray icon renders as three dots on Ubuntu 24.04+ snap. # Chromium's StatusIconLinuxDbus writes the tray PNG to TMPDIR and sends # its path to gnome-shell via the SNI IconThemePath property. The default # /tmp inside a strict snap is bind-mounted to # /tmp/snap-private-tmp/snap./tmp with mode 0700 on the parent, so # gnome-shell (outside the mount namespace) cannot stat the file and # falls back to 'image-loading-symbolic' (three dots). $XDG_RUNTIME_DIR # (= /run/user/$UID) is visible to both sides, so redirecting Chromium's # temp writes there restores icon rendering. Matches Signal Desktop's # snap and the official Electron snapcraft guide. electron-builder's # SnapOptions docstring claims this as a default but snap.js no longer # injects it (see node_modules/app-builder-lib/out/targets/snap.js). TMPDIR: $XDG_RUNTIME_DIR plugs: - default # Includes: home, desktop, desktop-legacy, x11, wayland, etc. - password-manager-service - system-observe - login-session-observe # Fix for issue #6031: Add filesystem access for local file sync # https://github.com/super-productivity/super-productivity/issues/6031 - removable-media # Allows sync to external drives/USB storage # Override electron-builder's hardcoded gnome-3-28-1804 content snap (core20 era) # with gnome-42-2204 (core22 era) for up-to-date Mesa drivers and GSettings schemas. # The plug name must match the template key to replace it rather than duplicate it. # The explicit `content` attribute tells snapd to match the gnome-42-2204 slot. # Pattern from Tidal HiFi: https://github.com/Mastermindzh/tidal-hifi # gnome-42-2204 has global auto-connect (granted June 2022). # Ref: electron-builder#9452, electron-builder#8548 (closed, not planned) - gnome-3-28-1804: interface: content content: gnome-42-2204 target: $SNAP/gnome-platform default-provider: gnome-42-2204 flatpak: runtimeVersion: '25.08' finishArgs: - --share=network - --share=ipc - --socket=x11 - --socket=wayland - --socket=fallback-x11 - --socket=pulseaudio - --device=dri - --filesystem=home - --talk-name=org.freedesktop.Notifications - --talk-name=org.kde.StatusNotifierWatcher - --talk-name=org.gnome.Mutter.IdleMonitor - --talk-name=org.freedesktop.secrets - --system-talk-name=org.freedesktop.login1 - --env=XCURSOR_PATH=/run/host/user-share/icons:/run/host/share/icons - --env=ELECTRON_TRASH=gio mac: appId: com.super-productivity.app type: distribution category: public.app-category.productivity entitlements: build/entitlements.mac.plist entitlementsInherit: build/entitlements.mac.plist hardenedRuntime: true gatekeeperAssess: false provisioningProfile: embedded.provisionprofile darkModeSupport: true notarize: true extendInfo: ITSAppUsesNonExemptEncryption: false publish: - github target: # - zip - target: dmg arch: - arm64 - x64 - universal dmg: sign: true publish: - github pkg: publish: never # HERE: electron-builder.mas.yaml #mas: # type: distribution # category: public.app-category.productivity # entitlements: build/entitlements.mas.plist # entitlementsInherit: build/entitlements.mas.inherit.plist # provisioningProfile: prod.provisionprofile # icon: build/icon.icns # hardenedRuntime: true # publish: never