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