{ lib, config, ... } : let cfg = config._archetypes.tjkeller.nas; mkNetworkFileSystem = device: automount: { device = "${device}"; fsType = "nfs"; options = [ "defaults" ] ++ lib.optionals (!automount) [ "noauto" ]; }; in { options._archetypes.tjkeller.nas = { enable = lib.mkEnableOption "enable network shares"; home = { enable = lib.mkEnableOption "enable home network shares"; automount = lib.mkEnableOption "automount home network shares"; }; office = { enable = lib.mkEnableOption "enable office network shares"; automount = lib.mkEnableOption "automount home network shares"; }; }; config = lib.mkIf cfg.enable { fileSystems = lib.optionalAttrs cfg.home.enable { "/media/Storage/Media" = mkNetworkFileSystem "truenas-home:/mnt/Storage/Media" cfg.home.automount; "/media/Storage/Backups" = mkNetworkFileSystem "truenas-home:/mnt/Storage/Backups" cfg.home.automount; "/media/Storage/Tapes" = mkNetworkFileSystem "truenas-home:/mnt/Storage/Backups/Tapes" cfg.home.automount; "/media/Family Photos" = mkNetworkFileSystem "truenas-home:/mnt/Media/Photos" cfg.home.automount; } // lib.optionalAttrs cfg.office.enable { "/media/chexx/chexx" = mkNetworkFileSystem "truenas-office:/mnt/Storage/chexx" cfg.office.automount; "/media/chexx/tkdocs" = mkNetworkFileSystem "truenas-office:/mnt/Storage/Users/Tim-Keller" cfg.office.automount; "/media/chexx/scans" = mkNetworkFileSystem "truenas-office:/mnt/Storage/Scans" cfg.office.automount; }; # TODO auto mkdirz }; }