1
0
Fork 0
mirror of https://github.com/nix-community/home-manager synced 2024-12-24 02:39:48 +01:00

systemd: honor RefuseManualStart and RefuseManualStop

Fixes https://github.com/rycee/home-manager/issues/140
This commit is contained in:
Robert Helgesson 2017-11-16 15:34:51 +01:00
parent 4fce730326
commit bc2f2ad546
No known key found for this signature in database
GPG key ID: C3DB11069E65DC86

View file

@ -119,6 +119,18 @@ in
);
home.activation.reloadSystemD = dagEntryAfter ["linkGeneration"] ''
function isStartable() {
local service="$1"
[[ $(systemctl --user show -p RefuseManualStart "$service") == *=no ]]
}
function isStoppable() {
if [[ -v oldGenPath ]] ; then
local service="$1"
[[ $(systemctl --user show -p RefuseManualStop "$service") == *=no ]]
fi
}
function systemdPostReload() {
local workDir
workDir="$(mktemp -d)"
@ -163,19 +175,35 @@ in
> $servicesDiffFile || true
local -a maybeRestart=( $(grep '^ ' $servicesDiffFile | cut -c2-) )
local -a toStop=( $(grep '^-' $servicesDiffFile | cut -c2-) )
local -a toStart=( $(grep '^+' $servicesDiffFile | cut -c2-) )
local -a maybeStop=( $(grep '^-' $servicesDiffFile | cut -c2-) )
local -a maybeStart=( $(grep '^+' $servicesDiffFile | cut -c2-) )
local -a toRestart=( )
local -a toStop=( )
local -a toStart=( )
for f in ''${maybeRestart[@]} ; do
if ${cfg.systemctlPath} --quiet --user is-active "$f" \
&& ! cmp --quiet \
"$oldUserServicePath/$f" \
"$newUserServicePath/$f" ; then
if isStoppable "$f" \
&& isStartable "$f" \
&& ${cfg.systemctlPath} --quiet --user is-active "$f" \
&& ! cmp --quiet \
"$oldUserServicePath/$f" \
"$newUserServicePath/$f" ; then
toRestart+=("$f")
fi
done
for f in ''${maybeStop[@]} ; do
if isStoppable "$f" ; then
toStop+=("$f")
fi
done
for f in ''${maybeStart[@]} ; do
if isStartable "$f" ; then
toStart+=("$f")
fi
done
rm -r $workDir
local sugg=""