Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 37 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -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.

Expand All @@ -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
Expand All @@ -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
Expand Down
18 changes: 18 additions & 0 deletions linux/build-flatpak.sh
Original file line number Diff line number Diff line change
@@ -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"
10 changes: 10 additions & 0 deletions linux/data/dev.zaptech.fuso.desktop
Original file line number Diff line number Diff line change
@@ -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
29 changes: 29 additions & 0 deletions linux/data/dev.zaptech.fuso.metainfo.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<component type="desktop-application">
<id>dev.zaptech.fuso</id>
<name>Fuso</name>
<summary>Track your team's timezones</summary>
<metadata_license>MIT</metadata_license>
<project_license>MIT</project_license>
<description>
<p>
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.
</p>
</description>
<url type="homepage">https://github.com/zaptech-dev/fuso</url>
<url type="bugtracker">https://github.com/zaptech-dev/fuso/issues</url>
<developer id="dev.zaptech">
<name>Zap Tech</name>
</developer>
<launchable type="desktop-id">dev.zaptech.fuso.desktop</launchable>
<content_rating type="oars-1.1" />
<releases>
<release version="0.1.0" date="2026-03-05">
<description>
<p>Initial release.</p>
</description>
</release>
</releases>
</component>
32 changes: 32 additions & 0 deletions linux/dev.zaptech.fuso.yml
Original file line number Diff line number Diff line change
@@ -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