From 888fbc3649c961bbcc4723c98ecf039c4efa9688 Mon Sep 17 00:00:00 2001 From: Simon Gardling Date: Thu, 10 Jul 2025 01:31:52 -0700 Subject: [PATCH] proper mountpoint testing --- flake.nix | 17 +++++++++++++++-- services/gitea.nix | 3 ++- services/immich.nix | 4 ++-- services/jellyfin.nix | 2 +- services/minecraft.nix | 2 +- services/postgresql.nix | 2 +- services/qbittorrent.nix | 2 +- services/soulseek.nix | 2 +- 8 files changed, 24 insertions(+), 10 deletions(-) diff --git a/flake.nix b/flake.nix index da46113..ff53774 100644 --- a/flake.nix +++ b/flake.nix @@ -135,9 +135,22 @@ }; }; - serviceMountDeps = serviceName: dirs: { + 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} = { - unitConfig.RequiresMountsFor = dirs; + wants = [ "${serviceName}_mounts.service" ]; }; }; in diff --git a/services/gitea.nix b/services/gitea.nix index 335f919..7c22a7f 100644 --- a/services/gitea.nix +++ b/services/gitea.nix @@ -1,4 +1,5 @@ { + pkgs, config, service_configs, username, @@ -7,7 +8,7 @@ }: { imports = [ - (serviceMountDeps "gitea" [ config.services.gitea.stateDir ]) + (serviceMountDeps "gitea" [ config.services.gitea.stateDir ] pkgs) ]; services.gitea = { diff --git a/services/immich.nix b/services/immich.nix index 67b3117..327f3bb 100644 --- a/services/immich.nix +++ b/services/immich.nix @@ -8,8 +8,8 @@ }: { imports = [ - (serviceMountDeps "immich-server" [ config.services.immich.mediaLocation ]) - (serviceMountDeps "immich-machine-learning" [ config.services.immich.mediaLocation ]) + (serviceMountDeps "immich-server" [ config.services.immich.mediaLocation ] pkgs) + (serviceMountDeps "immich-machine-learning" [ config.services.immich.mediaLocation ] pkgs) ]; services.immich = { diff --git a/services/jellyfin.nix b/services/jellyfin.nix index 0798e24..91d71d3 100644 --- a/services/jellyfin.nix +++ b/services/jellyfin.nix @@ -12,7 +12,7 @@ (serviceMountDeps "jellyfin" [ config.services.jellyfin.dataDir config.services.jellyfin.cacheDir - ]) + ] pkgs) ]; services.jellyfin = { diff --git a/services/minecraft.nix b/services/minecraft.nix index 1c71d71..902390e 100644 --- a/services/minecraft.nix +++ b/services/minecraft.nix @@ -11,7 +11,7 @@ imports = [ (serviceMountDeps "minecraft-server-${service_configs.minecraft.server_name}" [ "${service_configs.minecraft.parent_dir}/${service_configs.minecraft.server_name}" - ]) + ] pkgs) ]; environment.systemPackages = [ diff --git a/services/postgresql.nix b/services/postgresql.nix index 30d80c5..f882925 100644 --- a/services/postgresql.nix +++ b/services/postgresql.nix @@ -8,7 +8,7 @@ }: { imports = [ - (serviceMountDeps "postgresql" [ config.services.postgresql.dataDir ]) + (serviceMountDeps "postgresql" [ config.services.postgresql.dataDir ] pkgs) ]; services.postgresql = { diff --git a/services/qbittorrent.nix b/services/qbittorrent.nix index c71f0fe..059836d 100644 --- a/services/qbittorrent.nix +++ b/services/qbittorrent.nix @@ -13,7 +13,7 @@ service_configs.torrents_path config.services.qbittorrent.serverConfig.Preferences.Downloads.TempPath "/var/lib/qBittorrent/qBittorrent" - ]) + ] pkgs) ]; # network namespace that is proxied through mullvad diff --git a/services/soulseek.nix b/services/soulseek.nix index 6fb6d85..a8998ee 100644 --- a/services/soulseek.nix +++ b/services/soulseek.nix @@ -16,7 +16,7 @@ in service_configs.slskd.base # service_configs.slskd.downloads # service_configs.slskd.incomplete - ]) + ] pkgs) ]; users.groups."music" = { };