Both are official packages already on both workstations, started once by dex from an XDG autostart entry (the client's own, the package's). The modules declare the package, add no second start, own none of the apps' files, and give the mesh status, log, restart and check.
6.9 KiB
nextcloud-client
The Nextcloud desktop sync client on the workstations, as a module (novox/hq ADR 0208). It requires
x11-display, so it is assigned only where a display server is held on the same machine.
Owns
| what | where |
|---|---|
| the client | package nextcloud-client, from the official repositories |
Nothing else. It holds no seat, makes no contribution and writes no file.
- No AUR, no vendored copy. Both workstations run the official package (
extra), installed explicitly. ADR 0205 does not apply. - The account configuration stays the operator's.
~/.config/Nextcloud/nextcloud.cfgis the client's own file, and the client rewrites it. That makes it found in ADR 0182's terms: the module never declares, reads into or writes it. The tools only read it. The accounts, the sync folders, the server and the credentials are set in the client.
How it starts: the client's own autostart entry, and nothing else
One process has one starter (the rule picom states for the desktop modules). The client's starter is
its own XDG autostart entry, ~/.config/autostart/Nextcloud.desktop (nextcloud --background).
- The client writes that entry itself while its setting Launch on system startup is ticked, and removes it when the setting is unticked.
- The session runs every XDG autostart entry once at login: the
i3module'sdex --autostart --environment i3. - The package ships no
/etc/xdg/autostartentry.
Why not a contribution to node-display-session or the xinitrc slot: the client would still
write its own entry whenever the setting is ticked, and the session would start it twice. The module
cannot own the entry either, because the client rewrites it on every start. Declaring that file would
make two writers of one file. So the module adds no start, and nextcloud_check holds the rule
instead: it names any second start it finds.
- Excluded: the window manager's
exec … nextcloud(thei3module's configuration dropped it), and the package's user unitcom.nextcloud.desktopclient.nextcloud.service, which stays disabled. User-scoped units are not declarable yet (mesh-host #72). - One caveat:
dexignores the entry'sX-GNOME-Autostart-Delay=10, so the client starts with the session. It retries its connection by itself, so that is harmless.
Tools
They are served by the node's runtime as the operator account (ADR 0175), and are read-only except
restart. No answer carries the server's address, the account's user ids or a credential.
nextcloud.cfgis read only to learn what to hide.- The log tools replace the server's host with
<server>and the user ids with<account>. - Anything shaped like a credential (
Authorization:,token=,password=, a cookie) becomes<hidden>.
| tool | does |
|---|---|
nextcloud_status (r) |
|
nextcloud_log (r) |
the last lines (default 100, at most 2000) of the client's log (source: client). The log rotates every two hours, and older gzipped files are read until the count is reached. problems: true keeps warnings and worse. source: sync gives the sync runs' log. Answers are capped at 256 KiB |
nextcloud_restart (a) |
asks the client to end (SIGTERM), forces it after 6 s, and starts nextcloud --background in the operator's session. The start is a transient user unit mesh-nextcloud-client, so it outlives the tools runtime. Answers the pids. Refused plainly when nobody is logged in to the desktop |
nextcloud_check (r) |
|
Where the tools read:
- The client's settings are read from
~/.config/Nextcloud/nextcloud.cfg. - Its log is read from
~/.config/Nextcloud/logs/*_nextcloud.log*. - Each folder's sync runs are read from the
*_sync.logwhose first line is that folder's path. That file is in~/.local/share/Nextcloud/, or in~/.config/Nextcloud/for older clients, and the newest one wins.
The tools find the session's DISPLAY and XAUTHORITY from the window manager's own environment,
as clipmenu and screen-lock do. Every command has a timeout and capped output. Everything runs
through an injected runner and a fake root in the tests.
What changes when it is assigned
| g14 | shanks | |
|---|---|---|
| package | none: nextcloud-client 34.0.4 is installed, explicitly, from extra |
the same |
| start | none: dex starts it from the client's own entry (--background, in the login session's scope) |
none on disk. The client running now came from the predecessor's window-manager line (nextcloud, a child of i3, since the session of 2026-10-04 16:00). That session began before the i3 module dropped the line and installed dex, so the next login is the first that starts it from its entry |
| settings | one account, one folder (~/Nextcloud/, whole server), not paused, no virtual files; Launch on system startup on |
the same |
The workstations are already in the state this module describes.
Migration (ADR 0182)
Nothing is required on either machine.
- shanks: log out and in once, or run
nextcloud_restart, and the client runs from its one start.nextcloud_checkthen answersok. - Optional, both: the client has kept a
nextcloud.cfg.backup_<date>_<version>from every upgrade since 2023 (about twenty on each machine). It also keeps a sync log that it no longer writes, at~/.config/Nextcloud/Nextcloud_sync.log, from 2024 on g14 and 2023 on shanks. They are the operator's to delete. The module leaves them.
Leaves as found
~/.config/Nextcloud/: the settings, their backups,cookies0.db,sync-exclude.lst, the logs.~/.local/share/Nextcloud/: the sync runs' log.~/.config/autostart/Nextcloud.desktop, the client's.- Every sync folder and its
.sync_*.dbjournal.
Relies on
i3'sdexline for the start. Nothing in the mesh says so yet: XDG autostart has no seat, and a module without a seat or contribution has no way to depend on another module. Assigned withouti3, the client is installed and does not start.nextcloud_checksays so.- A display server on the same machine (
x11-display, ADR 0208 §3). Under sway the client runs on Wayland as well. A Wayland twin then requireswayland-display.