{pkgs, serverIP, ...}: let sharePath = "/home/server"; mountPath = "/home/server"; common_options = [ "noauto" "_netdev" "x-systemd.automount" "x-systemd.idle-timeout=600" "x-systemd.device-timeout=2s" "x-systemd.mount-timeout=2s" "timeo=5" "x-gvfs-hide" "x-systemd.after=network-online.target" "x-systemd.requires=network-online.target" ]; bind_options = [ "bind" "x-systemd.after=${builtins.replaceStrings ["/"] ["-"] mountPath}.mount" ] ++ common_options; in { services.rpcbind.enable = true; boot.supportedFilesystems = [ "nfs" ]; fileSystems.${mountPath} = { device = "${serverIP}:${sharePath}"; fsType = "nfs"; options = [ "x-systemd.after=wg-quick-Tunnel.service" "x-systemd.after=wg-quick-OPNsense.service" ] ++ common_options; }; systemd.services."${builtins.replaceStrings ["/"] ["-"] mountPath}-unmount" = { description = "Unmount NFS share before shutdown"; wantedBy = [ "shutdown.target" ]; serviceConfig = { Type = "oneshot"; RemainAfterExit = true; ExecStart = "/bin/true"; ExecStop = "${pkgs.util-linux}/bin/umount -f -l ${mountPath}"; TimeoutStopSec = "10s"; }; }; fileSystems."/home/user/Workspace" = { device = "/home/server/Workspace"; options = bind_options; }; fileSystems."/home/user/Documents" = { device = "/home/server/Storage/Thomas/Documents"; options = bind_options; }; fileSystems."/home/user/Pictures" = { device = "/home/server/Storage/Thomas/Pictures"; options = bind_options; }; fileSystems."/home/user/Videos" = { device = "/home/server/Storage/Thomas/Videos"; options = bind_options; }; }