diff --git a/hosts/12kingdoms-youko/homelab-services/disko-fs.nix b/hosts/12kingdoms-youko/homelab-services/disko-fs.nix index 488d989f..7c9caf77 100644 --- a/hosts/12kingdoms-youko/homelab-services/disko-fs.nix +++ b/hosts/12kingdoms-youko/homelab-services/disko-fs.nix @@ -33,6 +33,18 @@ in fileSystems."/data/fileshare/public".depends = [ "/data/fileshare" ]; + # The nofail data mounts finish after local-fs.target. systemd-tmpfiles-setup + # only orders itself after local-fs.target, so without an explicit dependency + # it can run while /data is still the read-only fallback tmpfs and fail to + # create the Transmission, Immich, RustFS and restic directories at boot. + systemd.services.systemd-tmpfiles-setup.unitConfig.RequiresMountsFor = [ + "/data/apps" + "/data/fileshare" + "/data/fileshare/public" + "/data/backups" + "/data/apps-snapshots" + ]; + # By adding this crypttab entry, the disk will be unlocked by systemd-cryptsetup@xxx.service at boot time. # This systemd service is running after agenix, so that the keyfile is already available. environment.etc = { diff --git a/outputs/x86_64-linux/tests/youko-tmpfiles/expected.nix b/outputs/x86_64-linux/tests/youko-tmpfiles/expected.nix new file mode 100644 index 00000000..fe7eb1fa --- /dev/null +++ b/outputs/x86_64-linux/tests/youko-tmpfiles/expected.nix @@ -0,0 +1,10 @@ +{ ... }: +{ + requiresMountsFor = [ + "/data/apps" + "/data/apps-snapshots" + "/data/backups" + "/data/fileshare" + "/data/fileshare/public" + ]; +} diff --git a/outputs/x86_64-linux/tests/youko-tmpfiles/expr.nix b/outputs/x86_64-linux/tests/youko-tmpfiles/expr.nix new file mode 100644 index 00000000..421d852e --- /dev/null +++ b/outputs/x86_64-linux/tests/youko-tmpfiles/expr.nix @@ -0,0 +1,11 @@ +{ + lib, + outputs, + ... +}: +let + unit = outputs.nixosConfigurations.youko.config.systemd.services.systemd-tmpfiles-setup; +in +{ + requiresMountsFor = builtins.sort builtins.lessThan unit.unitConfig.RequiresMountsFor; +}