Files
nix-config-ryan4yin/hosts/12kingdoms-youko/homelab-services/data-tmpfiles.nix
T
Ryan Yin dd2bd44bc2 fix(youko): apply /data tmpfiles in a pass of their own
89d7a9bd made systemd-tmpfiles-setup RequiresMountsFor the five nofail
USB-disk mounts. One failed mount then skipped every tmpfiles rule on the
host, and sysinit.target waited for the disks and the LUKS unlock even on
success.

Leave the boot-wide pass as upstream ships it and add data-tmpfiles:
`systemd-tmpfiles --prefix=/data` with WantsMountsFor on the /data mounts,
ordered before the services that use them.

Assisted-by: Claude Code (claude-opus-5-5)
2026-11-01 10:51:51 -06:00

31 lines
908 B
Nix

{ config, lib, ... }:
let
consumers = map (n: "${n}.service") [
"immich-server"
"jellyfin"
"nginx"
"restic-backups-homelab"
"restic-rest-server"
"restic-server-snapshot"
"rustfs"
"sftpgo"
"transmission"
];
in
{
# The nofail /data mounts can finish after systemd-tmpfiles-setup, so apply
# the /data rules again once they are mounted.
systemd.services.data-tmpfiles = {
description = "Create tmpfiles.d entries on the /data mounts";
wantedBy = [ "multi-user.target" ] ++ consumers;
before = consumers;
unitConfig.WantsMountsFor = lib.filter (lib.hasPrefix "/data/") (lib.attrNames config.fileSystems);
serviceConfig = {
Type = "oneshot";
RemainAfterExit = true;
ExecStart = "${config.systemd.package}/bin/systemd-tmpfiles --create --remove --boot --prefix=/data";
SuccessExitStatus = "DATAERR CANTCREAT";
};
};
}