From b3c2c70f3fdc2354f9912985767ad6a294a355b5 Mon Sep 17 00:00:00 2001 From: arferreira Date: Thu, 5 Mar 2026 14:42:10 -0500 Subject: [PATCH] Add Flatpak packaging for Linux app --- README.md | 39 ++++++++++++++++++++++-- linux/build-flatpak.sh | 18 +++++++++++ linux/data/dev.zaptech.fuso.desktop | 10 ++++++ linux/data/dev.zaptech.fuso.metainfo.xml | 29 ++++++++++++++++++ linux/dev.zaptech.fuso.yml | 32 +++++++++++++++++++ 5 files changed, 126 insertions(+), 2 deletions(-) create mode 100755 linux/build-flatpak.sh create mode 100644 linux/data/dev.zaptech.fuso.desktop create mode 100644 linux/data/dev.zaptech.fuso.metainfo.xml create mode 100644 linux/dev.zaptech.fuso.yml diff --git a/README.md b/README.md index 553de09..5c7bc3c 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Fuso -A lightweight macOS menu bar app for tracking your team's timezones. Native Swift, no Electron, no dependencies. +A lightweight app for tracking your team's timezones. Native on macOS (Swift menu bar app) and Linux (GTK4 desktop app). No Electron, no dependencies. Fuso sits in your menu bar and shows the current time for everyone you work with. Optionally, it can track availability based on rotating schedules — useful for teams with members who have factory shifts, hospital rotations, or any recurring time blocks. @@ -15,7 +15,7 @@ brew tap zaptech-dev/tap brew install --cask fuso ``` -### From source +### From source (macOS) ```bash git clone https://github.com/zaptech-dev/fuso.git @@ -24,6 +24,41 @@ cd fuso open /Applications/Fuso.app ``` +### Linux (Flatpak) + +```bash +git clone https://github.com/zaptech-dev/fuso.git +cd fuso +./linux/build-flatpak.sh +flatpak run dev.zaptech.fuso +``` + +Requires `flatpak`, `flatpak-builder`, and the GNOME SDK: + +```bash +flatpak install flathub org.gnome.Platform//46 org.gnome.Sdk//46 +flatpak install flathub org.freedesktop.Sdk.Extension.rust-stable//24.08 +``` + +### Linux (from source) + +```bash +# Ubuntu/Debian: sudo apt install libgtk-4-dev +# Fedora: sudo dnf install gtk4-devel +# Arch: sudo pacman -S gtk4 +git clone https://github.com/zaptech-dev/fuso.git +cd fuso/linux +cargo build --release +./target/release/fuso-linux +``` + +### CLI (all platforms) + +```bash +cargo install fuso +fuso +``` + Requires macOS 13+ and Swift 5.9+. ## Configuration diff --git a/linux/build-flatpak.sh b/linux/build-flatpak.sh new file mode 100755 index 0000000..5f42242 --- /dev/null +++ b/linux/build-flatpak.sh @@ -0,0 +1,18 @@ +#!/bin/bash +set -e + +cd "$(dirname "$0")/.." + +# Generate cargo sources for offline build +if ! command -v flatpak-cargo-generator &> /dev/null; then + echo "Installing flatpak-cargo-generator..." + pip install flatpak-cargo-generator 2>/dev/null || pip install --user flatpak-cargo-generator +fi + +echo "Generating cargo sources..." +flatpak-cargo-generator linux/Cargo.lock -o linux/cargo-sources.json + +echo "Building Flatpak..." +flatpak-builder --force-clean --user --install build-dir linux/dev.zaptech.fuso.yml + +echo "Done. Run with: flatpak run dev.zaptech.fuso" diff --git a/linux/data/dev.zaptech.fuso.desktop b/linux/data/dev.zaptech.fuso.desktop new file mode 100644 index 0000000..2df2288 --- /dev/null +++ b/linux/data/dev.zaptech.fuso.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Name=Fuso +Comment=Track your team's timezones +Exec=fuso-linux +Icon=dev.zaptech.fuso +Terminal=false +Type=Application +Categories=Utility;Clock; +Keywords=timezone;clock;team;world; +StartupNotify=true diff --git a/linux/data/dev.zaptech.fuso.metainfo.xml b/linux/data/dev.zaptech.fuso.metainfo.xml new file mode 100644 index 0000000..dbaae68 --- /dev/null +++ b/linux/data/dev.zaptech.fuso.metainfo.xml @@ -0,0 +1,29 @@ + + + dev.zaptech.fuso + Fuso + Track your team's timezones + MIT + MIT + +

+ Fuso is a lightweight desktop app for tracking your team's timezones. + It shows the current time for everyone you work with and can track + availability based on rotating schedules. +

+
+ https://github.com/zaptech-dev/fuso + https://github.com/zaptech-dev/fuso/issues + + Zap Tech + + dev.zaptech.fuso.desktop + + + + +

Initial release.

+
+
+
+
diff --git a/linux/dev.zaptech.fuso.yml b/linux/dev.zaptech.fuso.yml new file mode 100644 index 0000000..7f1628e --- /dev/null +++ b/linux/dev.zaptech.fuso.yml @@ -0,0 +1,32 @@ +app-id: dev.zaptech.fuso +runtime: org.gnome.Platform +runtime-version: '46' +sdk: org.gnome.Sdk +sdk-extensions: + - org.freedesktop.Sdk.Extension.rust-stable +command: fuso-linux + +finish-args: + - --share=ipc + - --socket=fallback-x11 + - --socket=wayland + - --filesystem=~/.config/fuso:create + +build-options: + append-path: /usr/lib/sdk/rust-stable/bin + env: + CARGO_HOME: /run/build/fuso/cargo + +modules: + - name: fuso + buildsystem: simple + build-commands: + - cargo --offline fetch --manifest-path linux/Cargo.toml + - cargo --offline build --release --manifest-path linux/Cargo.toml + - install -Dm755 linux/target/release/fuso-linux /app/bin/fuso-linux + - install -Dm644 linux/data/dev.zaptech.fuso.desktop /app/share/applications/dev.zaptech.fuso.desktop + - install -Dm644 linux/data/dev.zaptech.fuso.metainfo.xml /app/share/metainfo/dev.zaptech.fuso.metainfo.xml + sources: + - type: dir + path: . + - cargo-sources.json