# Network UPS Tools (NUT) systemd integration
# Copyright (C) 2011-2026 by NUT contributors
# Distributed under the terms of GPLv2+
# See https://networkupstools.org/
# and https://github.com/networkupstools/nut/

[Unit]
# This unit starts early in system lifecycle to set up nut-driver instances.
# End-user may also restart this unit after editing ups.conf to automatically
# un-register or add new instances as appropriate.
Description=Network UPS Tools - enumeration of configure-file devices into systemd unit instances
Conflicts=nut-driver-enumerator-daemon.service nut-driver-enumerator-daemon-activator.path nut-driver-enumerator-daemon-activator.service
After=local-fs.target
Before=nut-driver.target
PartOf=nut.target

Documentation=man:nut-driver-enumerator(8)
Documentation=https://www.networkupstools.org/historic/v2.8.5/docs/man/nut-driver-enumerator.html
Documentation=man:ups.conf(5)
Documentation=https://www.networkupstools.org/historic/v2.8.5/docs/man/ups.conf.html
Documentation=man:upsdrvsvcctl(8)
Documentation=https://www.networkupstools.org/historic/v2.8.5/docs/man/upsdrvsvcctl.html
Documentation=man:nut.conf(5)
Documentation=https://www.networkupstools.org/historic/v2.8.5/docs/man/nut.conf.html

[Service]
### Script needs privileges to restart units
#User=nut
#Group=nut
User=root
SyslogIdentifier=%N
# it is expected that the process has to exit before systemd starts follow-up
# units; it should not be a problem for those
Type=oneshot
# Currently systemd does not support restarting of oneshot services, and does
# not seem to guarantee that other services would only start after the script
# completes, for a non-oneshot case. The script itself handles restarting of
# nut-server which is the primary concerned dependency at the moment, so we
# don't want it to fail the unit (when it can't restart).
EnvironmentFile=-/etc/nut/nut.conf
Environment=REPORT_RESTART_42=no
# DO NOT actually start if MODE is known and is "netclient" or "none";
# however do start (and maybe fail if not yet configured), for other
# MODE values or if nut.conf file is absent:
### Since systemd v243 ### ExecCondition=/bin/sh -c '[ x"${MODE}" != x"netclient" -a x"${MODE}" != x"none" ]'
# This should be executed by the system, but better safe than sorry
# (e.g. in custom rebuilds):
ExecStartPre=-/usr/bin/systemd-tmpfiles --create /usr/lib/tmpfiles.d/nut-common-tmpfiles.conf
ExecStart=/usr/lib/nut/nut-driver-enumerator.sh
ExecReload=/usr/lib/nut/nut-driver-enumerator.sh

[Install]
WantedBy=nut.target
