diff --git a/flake.nix b/flake.nix index 2567f3b..c9c3b38 100644 --- a/flake.nix +++ b/flake.nix @@ -112,6 +112,12 @@ data_dir = services_dir + "/owntracks"; }; }; + + serviceMountDeps = serviceName: dirs: { + systemd.services.${serviceName} = { + unitConfig.RequiresMountsFor = dirs; + }; + }; in { formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.nixfmt-rfc-style; @@ -123,6 +129,7 @@ eth_interface service_configs inputs + serviceMountDeps ; }; modules = diff --git a/services/gitea.nix b/services/gitea.nix index ac337cc..335f919 100644 --- a/services/gitea.nix +++ b/services/gitea.nix @@ -2,9 +2,14 @@ config, service_configs, username, + serviceMountDeps, ... }: { + imports = [ + (serviceMountDeps "gitea" [ config.services.gitea.stateDir ]) + ]; + services.gitea = { enable = true; appName = "Simon Gardling's Gitea instance"; diff --git a/services/immich.nix b/services/immich.nix index d2b3026..1adafa0 100644 --- a/services/immich.nix +++ b/services/immich.nix @@ -3,9 +3,14 @@ pkgs, config, username, + serviceMountDeps, ... }: { + imports = [ + (serviceMountDeps "immich" [ config.services.immich.mediaLocation ]) + ]; + services.immich = { enable = true; mediaLocation = service_configs.immich.dir; diff --git a/services/jellyfin.nix b/services/jellyfin.nix index 911f4fd..1870547 100644 --- a/services/jellyfin.nix +++ b/services/jellyfin.nix @@ -3,9 +3,17 @@ config, service_configs, username, + serviceMountDeps, ... }: { + imports = [ + (serviceMountDeps "jellyfin" [ + config.services.jellyfin.dataDir + config.services.jellyfin.cacheDir + ]) + ]; + environment.systemPackages = with pkgs; [ jellyfin jellyfin-web @@ -37,6 +45,7 @@ "video" "render" service_configs.torrent_group + "media" ]; users.users.${username}.extraGroups = [ diff --git a/services/minecraft.nix b/services/minecraft.nix index 87983be..f268331 100644 --- a/services/minecraft.nix +++ b/services/minecraft.nix @@ -4,9 +4,16 @@ lib, username, config, + serviceMountDeps, ... }: { + imports = [ + (serviceMountDeps "minecraft-server-${service_configs.minecraft.server_name}" [ + "${service_configs.minecraft.parent_dir}/${service_configs.minecraft.server_name}" + ]) + ]; + environment.systemPackages = [ (pkgs.writeScriptBin "mc-console" '' #!/bin/sh diff --git a/services/postgresql.nix b/services/postgresql.nix index 9bf429b..30d80c5 100644 --- a/services/postgresql.nix +++ b/services/postgresql.nix @@ -3,9 +3,14 @@ config, username, service_configs, + serviceMountDeps, ... }: { + imports = [ + (serviceMountDeps "postgresql" [ config.services.postgresql.dataDir ]) + ]; + services.postgresql = { enable = true; package = pkgs.postgresql_16; diff --git a/services/qbittorrent.nix b/services/qbittorrent.nix index 28b4617..e84d513 100644 --- a/services/qbittorrent.nix +++ b/services/qbittorrent.nix @@ -4,9 +4,17 @@ service_configs, username, lib, + serviceMountDeps, ... }: { + imports = [ + (serviceMountDeps "qbittorrent" [ + service_configs.torrent.SavePath + service_configs.torrent.TempPath + ]) + ]; + # network namespace that is proxied through mullvad vpnNamespaces.wg = { portMappings = [