{ config, lib, pkgs, ... }: { ### --> MergerFS setup fileSystems."/mnt/data" = { device = "/mnt/content-*"; fsType = "fuse.mergerfs"; options = [ "category.create=ff" "cache.files=partial" "dropcacheonclose=true" "defaults" "noauto" "nofail" "allow_other" "moveonenospc=1" "minfreespace=50G" "func.getattr=newest" "fsname=mergerfs_data" "x-mount.mkdir" "x-systemd.automount" "x-systemd.requires=mount-dependencies.service" ]; }; ### MergerFS setup <-- systemd.services.mount-dependencies = { description = "This service will mount the encrypted disks for mergerFS"; after = [ "network.target" ]; wantedBy = [ "multi-user.target" ]; serviceConfig = { Type = "oneshot"; RemainAfterExit = true; # Bring the service up ExecStart = pkgs.writeShellScript "mount-disks" '' $MOUNT_DEPENDENCIES_START ''; # Take it down gracefully ExecStop = pkgs.writeShellScript "unmount-disks" '' $MOUNT_DEPENDENCIES_STOP ''; Restart = "on-failure"; }; }; ### --> SnapRAID setup services.snapraid = { enable = true; contentFiles = [ $SNAPRAID_CONTENT_FILES ]; parityFiles = [ $SNAPRAID_PARITY_FILES ]; dataDisks = { $SNAPRAID_DATA_DISKS }; }; ### SnapRAID setup <-- }