{ config, container, lib, ... }: let cfg = config.container.module.watch; in { options.container.module.watch = { enable = lib.mkEnableOption "the media server."; address = lib.mkOption { default = "10.1.0.11"; type = lib.types.str; }; port = lib.mkOption { default = 8096; type = lib.types.int; }; domain = lib.mkOption { default = "watch.${config.container.domain}"; type = lib.types.str; }; storage = lib.mkOption { default = "${config.container.storage}/watch"; type = lib.types.str; }; memLimit = lib.mkOption { default = "8G"; type = lib.types.str; }; }; config = lib.mkIf cfg.enable { systemd.tmpfiles.rules = container.mkContainerDir cfg [ "cache" "data" ]; 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 { systemd.services.jellyfin.serviceConfig.MemoryLimit = cfg.memLimit; services.jellyfin = { enable = true; cacheDir = "/var/cache/jellyfin"; dataDir = "/var/lib/jellyfin"; }; # users.users.jellyfin.extraGroups = [ # "video" # "render" # ]; }; }; }; }