mirror of
https://github.com/ryan4yin/nix-config.git
synced 2026-11-13 12:13:36 +01:00
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)
31 lines
908 B
Nix
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";
|
|
};
|
|
};
|
|
}
|