Turn the desktop client into a system tray application

Started without a command, keeporg now shows a padlock in the system tray
with a menu like midi-webhook's: a status line, the mirror folder, each
database with its state, Sync Now, browser sign-in and sign-out, the web
interface, the configuration, the log, Start at Login, About and Quit. The
commands are unchanged.

config.json now carries every client setting (device_label,
request_timeout_seconds, ca_file, log_file, notifications), is written in
full on first start and is reloaded by the tray when saved.

A lock in the mirror directory admits one agent at a time, since the tray,
`keeporg run` and a service unit could otherwise race each other.

The tray uses fyne.io/systray: pure Go on Linux, BSD and Windows, cgo on
macOS only. The server keeps no third-party dependencies.

Desktop versions go to 0.5.0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Reactorcoremeltdown
2026-11-02 12:30:28 +01:00
co-authored by Claude Opus 5.5
parent d314188247
commit ead82dc777
37 changed files with 2301 additions and 108 deletions
+9 -2
View File
@@ -3,6 +3,8 @@ Version: @VERSION@
Section: utils
Priority: optional
Architecture: @ARCH@
Recommends: libnotify-bin
Suggests: keepassxc, zenity | kdialog
Maintainer: tiredsysadmin <rcmd@garage.rcmd.space>
Homepage: https://garage.rcmd.space/keeporg
Description: KeePass database synchronization client
@@ -13,5 +15,10 @@ Description: KeePass database synchronization client
Each save is pushed to the server and changes other people push are applied
locally. The client never opens a database and never sees a master password.
.
A systemd user unit is included: enable it with
`systemctl --user enable --now keeporg`.
KeepOrg starts as a system tray application from the applications menu; its
menu signs in, shows each database's state and opens the settings. The tray
needs a StatusNotifierItem host: KDE, XFCE, Cinnamon and most panels have
one, GNOME needs the AppIndicator extension.
.
Without a desktop, `keeporg run` is the same agent, and a systemd user unit
is included for it: `systemctl --user enable --now keeporg`.