{ container, lib, config, ... }: with lib; let cfg = config.container.module.watch; in { options = { container.module.watch = { enable = mkEnableOption "Media server."; address = mkOption { default = "10.1.0.11"; type = types.str; }; port = mkOption { default = 8096; type = types.int; }; domain = mkOption { default = "watch.${config.container.domain}"; type = types.str; }; storage = mkOption { default = "${config.container.storage}/watch"; type = types.str; }; memLimit = mkOption { default = "8G"; type = types.str; }; }; }; config = mkIf cfg.enable { systemd.tmpfiles.rules = container.mkContainerDir cfg [ "data" "cache" ]; containers.watch = container.mkContainer cfg { bindMounts = { "/var/lib/jellyfin" = { hostPath = "${cfg.storage}/data"; isReadOnly = false; }; "/var/cache/jellyfin" = { hostPath = "${cfg.storage}/cache"; isReadOnly = false; }; "/dev/dri" = { hostPath = "/dev/dri"; isReadOnly = false; }; } // container.attachMedia "anime" true // container.attachMedia "download" true // container.attachMedia "movie" true // container.attachMedia "music" true // container.attachMedia "photo" true // container.attachMedia "porn" true // container.attachMedia "show" true // container.attachMedia "study" true // container.attachMedia "work" true // container.attachMedia "youtube" true; allowedDevices = [ { modifier = "rwm"; node = "/dev/dri/renderD128"; } ]; config = { ... }: container.mkContainerConfig cfg { # users.users.jellyfin.extraGroups = [ # "video" # "render" # ]; services.jellyfin = { enable = true; cacheDir = "/var/cache/jellyfin"; dataDir = "/var/lib/jellyfin"; }; systemd.services.jellyfin.serviceConfig.MemoryLimit = cfg.memLimit; }; }; }; }