From 49566fe4e40a18434320829c5cb6a6eff1b4ec78 Mon Sep 17 00:00:00 2001 From: "Anderson A. Giacomolli" Date: Sun, 8 Nov 2026 23:03:01 -0300 Subject: [PATCH] Shorten user service updates 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 | 15 ++++++++------- bin/check | 2 +- bin/service-update | 7 +++++++ 3 files changed, 16 insertions(+), 8 deletions(-) create mode 100755 bin/service-update diff --git a/README.rst b/README.rst index 5f4266a..09e048c 100644 --- a/README.rst +++ b/README.rst @@ -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: diff --git a/bin/check b/bin/check index 3bca026..4bd9b5c 100755 --- 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 index 0000000..04e4c4e --- /dev/null +++ b/bin/service-update @@ -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 -- 2.53.0