From 550d0e81c96103ba90c6ea477270c5e2c7e9b711 Mon Sep 17 00:00:00 2001 From: Robert Helgesson Date: Wed, 18 Jan 2017 09:25:19 +0100 Subject: [PATCH] systemd: handle missing service directories Before it suggested to restart a service `*.service`, which is quite silly. --- modules/systemd.nix | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/modules/systemd.nix b/modules/systemd.nix index de3492308..c703ccb08 100644 --- a/modules/systemd.nix +++ b/modules/systemd.nix @@ -71,16 +71,42 @@ in home.activation.reloadSystemD = '' function systemdPostReload() { - local servicesDiffFile="$(mktemp)" + local workDir + workDir="$(mktemp -d)" + local oldUserServicePath="$oldGenPath/home-files/.config/systemd/user" local newUserServicePath="$newGenPath/home-files/.config/systemd/user" + local oldServiceFiles="$workDir/old-files" + local newServiceFiles="$workDir/new-files" + local servicesDiffFile="$workDir/diff-files" + + if [[ ! -d "$oldUserServicePath" && ! -d "$newUserServicePath" ]]; then + return + fi + + if [[ ! -d "$oldUserServicePath" ]]; then + touch "$oldServiceFiles" + else + find "$oldUserServicePath" \ + -maxdepth 1 -name '*.service' -exec basename '{}' ';' \ + | sort \ + > "$oldServiceFiles" + fi + + if [[ ! -d "$newUserServicePath" ]]; then + touch "$newServiceFiles" + else + find "$newUserServicePath" \ + -maxdepth 1 -name '*.service' -exec basename '{}' ';' \ + | sort \ + > "$newServiceFiles" + fi diff \ --new-line-format='+%L' \ --old-line-format='-%L' \ --unchanged-line-format=' %L' \ - <(basename -a $(echo "$oldUserServicePath/"*.service) | sort) \ - <(basename -a $(echo "$newUserServicePath/"*.service) | sort) \ + "$oldServiceFiles" "$newServiceFiles" \ > $servicesDiffFile local -a maybeRestart=( $(grep '^ ' $servicesDiffFile | cut -c2-) ) @@ -98,7 +124,7 @@ in fi done - rm $servicesDiffFile + rm -r $workDir local sugg=""