diff --git a/flake.nix b/flake.nix index ff53774..63cd862 100644 --- a/flake.nix +++ b/flake.nix @@ -136,18 +136,34 @@ }; serviceMountDeps = serviceName: dirs: pkgs: { - systemd.services."${serviceName}_mounts" = { - unitConfig.Wants = "zfs.target"; - serviceConfig = { - Type = "oneshot"; - RemainAfterExit = true; - ExecStart = - let - lib = nixpkgs.lib; - in - "${lib.getExe pkgs.bash} -c \"${lib.getExe pkgs.zfs} get mounted | ${lib.getExe pkgs.gnugrep} yes | ${lib.getExe pkgs.gawk} '{print $1}' | while read i; do ${lib.getExe pkgs.zfs} get mountpoint \$i | ${lib.getExe pkgs.gawk} 'FNR==2 {print \$3}'; done | ${lib.getExe pkgs.gnugrep} '${lib.strings.concatStringsSep "\|" dirs}' | ${pkgs.coreutils}/bin/wc -l | ${lib.getExe pkgs.gnugrep} -q ${toString (lib.length dirs)}\""; + systemd.services."${serviceName}_mounts" = + let + zfslistmounted = pkgs.writeShellApplication { + name = "zfslistmounted"; + runtimeInputs = with pkgs; [ + zfs + gnugrep + gawk + ]; + text = '' + #!/bin/sh + zfs get mounted | grep yes | awk '{print $1}' | while read -r i; do zfs get mountpoint "$i" | awk 'FNR==2 {print $3}'; done + ''; + }; + in + { + unitConfig.Wants = "zfs.target"; + serviceConfig = { + Type = "oneshot"; + RemainAfterExit = true; + ExecStart = + let + lib = nixpkgs.lib; + contains_cmd = "${lib.getExe pkgs.gnugrep} '${lib.strings.concatStringsSep "\|" dirs}' | ${pkgs.coreutils}/bin/wc -l | ${lib.getExe pkgs.gnugrep} -q ${toString (lib.length dirs)}"; + in + "${lib.getExe pkgs.bash} -c \"${lib.getExe zfslistmounted} | ${contains_cmd}\""; + }; }; - }; systemd.services.${serviceName} = { wants = [ "${serviceName}_mounts.service" ];