]> git.giacomolli.uk - onechat/commitdiff
Shorten user service updates
authorAnderson A. Giacomolli <agiacomolli@gmail.com>
Mon, 9 Nov 2026 02:03:01 +0000 (23:03 -0300)
committerAnderson A. Giacomolli <agiacomolli@gmail.com>
Mon, 9 Nov 2026 02:03:01 +0000 (23:03 -0300)
The user unit links through result-service, so each build replaces its
package without another unit link. The update command builds with that
out-link, reloads the user manager, and uses try-restart to restart only
an active service. A stopped service stays stopped.

The README gives the first link and the two update commands. The checks
include shell lint for the update script.

Issue: 99a5e07

README.rst
bin/check
bin/service-update [new file with mode: 0755]

index 5f4266a025b0a19f4805bbdd124a3c403c66b11a..09e048cd2f951d1b5f52379ec6f277190d8d5a72 100644 (file)
@@ -146,7 +146,7 @@ does not collect the package while the service uses it:
 .. code:: console
 
    nix build --out-link result-service
-   systemctl --user link --force "$(realpath result-service/share/systemd/user/onechat.service)"
+   systemctl --user link --force "$PWD/result-service/share/systemd/user/onechat.service"
    systemctl --user edit onechat.service
 
 In the editor, set the data directory with this drop-in. Replace
@@ -195,15 +195,16 @@ the service:
    ONECHAT_DIR=DATA_DIR ./result-service/bin/onechat chat
    journalctl --user -u onechat.service -f
 
-After ``git pull``, build with the same result link, link the unit
-again, reload the user manager, and restart the service:
+After a pull, update the package and unit with:
 
 .. code:: console
 
-   nix build --out-link result-service
-   systemctl --user link --force "$(realpath result-service/share/systemd/user/onechat.service)"
-   systemctl --user daemon-reload
-   systemctl --user restart onechat.service
+   git pull
+   bin/service-update
+
+The script builds with the same ``result-service`` link, reloads the
+user manager, and restarts the service only if it is active. The unit
+link follows ``result-service``, so no new link is needed.
 
 The service starts with the user manager at login, not at boot without a
 login. To stop it, or also remove its start at login:
index 3bca02623eb87d6b8720e944e01be5de2e0e4b9b..4bd9b5c6b14ef19f161ff5c524fd1eb4cce75602 100755 (executable)
--- a/bin/check
+++ b/bin/check
@@ -19,4 +19,4 @@ go test -race -short ./...
 files '*.nix' | xargs nixfmt --check
 files '*.rst' | xargs rstfmt --check
 files '*.md' | xargs mdformat --check
-shellcheck bin/check bin/format bin/reflow .githooks/commit-msg
+shellcheck bin/check bin/format bin/reflow bin/service-update .githooks/commit-msg
diff --git a/bin/service-update b/bin/service-update
new file mode 100755 (executable)
index 0000000..04e4c4e
--- /dev/null
@@ -0,0 +1,7 @@
+#!/usr/bin/env bash
+set -euo pipefail
+cd "$(dirname "$0")/.."
+
+nix build --out-link result-service
+systemctl --user daemon-reload
+systemctl --user try-restart onechat.service