A lightweight menu bar client for sharing links between your devices using Pushover. Send a URL from your iPhone's share sheet and it instantly opens on your Linux desktop or Mac — no browser tab required, no always-on server to maintain.
Runs as a native tray/menu bar icon on GNOME Linux and macOS, with an iOS Shortcut as the sending side.
- Real-time delivery via Pushover's WebSocket API — no polling
- Auto-opens incoming links in your default browser
- Menu bar icon showing your last 10 received links, clickable to reopen
- Desktop notifications on arrival
- iOS share sheet integration via a one-tap Shortcut
- Tiny footprint — two pip dependencies, no Electron, no browser
iPhone share sheet
│
▼
iOS Shortcut ──► Pushover API ──► Linkover (WebSocket listener)
│
notify-send / rumps notification
│
xdg-open / open (browser)
Linkover registers itself with Pushover as an Open Client, maintaining a persistent WebSocket connection. When a message arrives it shows a notification, opens the URL, and adds it to the menu.
- Create a free account at pushover.net
- Note your User Key from the dashboard
- Create an App Token at pushover.net/apps/build — name it anything (e.g. "Linkover iOS")
- Bazzite, Fedora Atomic, or any GNOME distro
- AppIndicator and KStatusNotifierItem Support GNOME extension — provides the menu bar slot
pipx(installed automatically if missing)- System
python3-gobject/ GTK — already present on any GNOME system
- macOS 11 or later
pipx— install viabrew install pipx
git clone https://github.com/jdmills-edu/linkover.git
cd linkover
bash install.shThen run linkover once to complete first-time setup (Pushover login). After that it starts automatically on login via the XDG autostart entry at ~/.config/autostart/linkover.desktop.
git clone https://github.com/jdmills-edu/linkover.git
cd linkover
pipx install .
linkoverFor autostart, add linkover to System Settings → General → Login Items.
Note: The first notification will trigger a macOS permission prompt — allow it, or notifications will be silently suppressed.
This is the sending side. Create it once and it lives in your share sheet forever.
-
Open the Shortcuts app → tap +
-
Add Action → search "Receive" → Receive input from Share Sheet
- Input types: URLs, Safari web pages, Text
-
Add Action → Get URLs from Input
-
Add Action → Get Contents of URL, configured as:
-
URL:
https://api.pushover.net/1/messages.json -
Method: POST
-
Request Body: Form with fields:
Key Value tokenyour App Token useryour User Key messageURLs variable (from step 3)
-
-
Name the shortcut (e.g. "Send to Desktop")
Now tap Share → Send to Desktop from any app to send the current URL to all your running Linkover instances.
Credentials are stored in ~/.config/linkover/config.json after first-time setup. To re-run setup (e.g. to register a new device), delete that file and run linkover again.
To register Linkover on an additional machine, just install and run linkover — it will register a new device under the same Pushover account and both machines will receive every link you send.
linkover/
├── linkover/
│ ├── api.py # Pushover REST calls (login, fetch, delete messages)
│ ├── client.py # WebSocket thread with auto-reconnect
│ ├── tray_linux.py # GNOME tray via AyatanaAppIndicator3 + GTK
│ ├── tray_mac.py # macOS menu bar via rumps (NSStatusItem)
│ ├── config.py # ~/.config/linkover/config.json
│ └── __main__.py # Entry point, platform detection
├── linkover/icons/
│ └── linkover.svg # Source icon (installed to hicolor theme on Linux)
├── install.sh # Linux installer (pipx + icon + autostart)
└── linkover.desktop # XDG autostart template
The three core modules (api.py, client.py, config.py) are fully cross-platform. Only the tray layer differs per OS.
cd linkover
git pull
bash install.sh # Linux
pipx install --force . # macOS