proper mountpoint testing

This commit is contained in:
Simon Gardling 2025-07-10 01:31:52 -07:00
parent 265d5ff5fb
commit 888fbc3649
Signed by: titaniumtown
GPG Key ID: 9AB28AC10ECE533D
8 changed files with 24 additions and 10 deletions

View File

@ -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} = { systemd.services.${serviceName} = {
unitConfig.RequiresMountsFor = dirs; wants = [ "${serviceName}_mounts.service" ];
}; };
}; };
in in

View File

@ -1,4 +1,5 @@
{ {
pkgs,
config, config,
service_configs, service_configs,
username, username,
@ -7,7 +8,7 @@
}: }:
{ {
imports = [ imports = [
(serviceMountDeps "gitea" [ config.services.gitea.stateDir ]) (serviceMountDeps "gitea" [ config.services.gitea.stateDir ] pkgs)
]; ];
services.gitea = { services.gitea = {

View File

@ -8,8 +8,8 @@
}: }:
{ {
imports = [ imports = [
(serviceMountDeps "immich-server" [ config.services.immich.mediaLocation ]) (serviceMountDeps "immich-server" [ config.services.immich.mediaLocation ] pkgs)
(serviceMountDeps "immich-machine-learning" [ config.services.immich.mediaLocation ]) (serviceMountDeps "immich-machine-learning" [ config.services.immich.mediaLocation ] pkgs)
]; ];
services.immich = { services.immich = {

View File

@ -12,7 +12,7 @@
(serviceMountDeps "jellyfin" [ (serviceMountDeps "jellyfin" [
config.services.jellyfin.dataDir config.services.jellyfin.dataDir
config.services.jellyfin.cacheDir config.services.jellyfin.cacheDir
]) ] pkgs)
]; ];
services.jellyfin = { services.jellyfin = {

View File

@ -11,7 +11,7 @@
imports = [ imports = [
(serviceMountDeps "minecraft-server-${service_configs.minecraft.server_name}" [ (serviceMountDeps "minecraft-server-${service_configs.minecraft.server_name}" [
"${service_configs.minecraft.parent_dir}/${service_configs.minecraft.server_name}" "${service_configs.minecraft.parent_dir}/${service_configs.minecraft.server_name}"
]) ] pkgs)
]; ];
environment.systemPackages = [ environment.systemPackages = [

View File

@ -8,7 +8,7 @@
}: }:
{ {
imports = [ imports = [
(serviceMountDeps "postgresql" [ config.services.postgresql.dataDir ]) (serviceMountDeps "postgresql" [ config.services.postgresql.dataDir ] pkgs)
]; ];
services.postgresql = { services.postgresql = {

View File

@ -13,7 +13,7 @@
service_configs.torrents_path service_configs.torrents_path
config.services.qbittorrent.serverConfig.Preferences.Downloads.TempPath config.services.qbittorrent.serverConfig.Preferences.Downloads.TempPath
"/var/lib/qBittorrent/qBittorrent" "/var/lib/qBittorrent/qBittorrent"
]) ] pkgs)
]; ];
# network namespace that is proxied through mullvad # network namespace that is proxied through mullvad

View File

@ -16,7 +16,7 @@ in
service_configs.slskd.base service_configs.slskd.base
# service_configs.slskd.downloads # service_configs.slskd.downloads
# service_configs.slskd.incomplete # service_configs.slskd.incomplete
]) ] pkgs)
]; ];
users.groups."music" = { }; users.groups."music" = { };