{ config, lib, ... }: let cfg = config.homelab.apps.plex; in { options.homelab.apps.plex.enable = lib.mkEnableOption "Plex"; config = lib.mkIf cfg.enable { homelab = { users = { apps.enable = true; media.enable = true; }; virtualisation.containers.enable = true; }; users.users.plex = { uid = lib.mkForce 3009; isSystemUser = true; group = config.users.groups.apps.name; extraGroups = [ config.users.groups.media.name ]; home = "/var/empty"; shell = null; }; fileSystems."/srv/video" = { device = "192.168.0.11:/mnt/SMALL/MEDIA/VIDEO"; fsType = "nfs"; options = [ "ro" "nfsvers=4.2" "async" "soft" "timeo=100" "retry=50" "actimeo=1800" "lookupcache=all" "nosuid" "tcp" ]; }; virtualisation.oci-containers.containers = { plex = { hostname = "plex"; image = "plexinc/pms-docker:1.41.0.8992-8463ad060"; autoStart = true; ports = [ "32400:32400/tcp" # Plex Media Server "1900:1900/udp" # Plex DLNA Server "32469:32469/tcp" # Plex DLNA Server "32410:32410/udp" # GDM network discovery "32412:32412/udp" # GDM network discovery "32413:32413/udp" # GDM network discovery "32414:32414/udp" # GDM network discovery # "8324:8324/tcp" # Controlling Plex for Roku via Plex Companion ]; environment = { #ADVERTISE_AP = "..."; # TODO Configure ip ALLOWED_NETWORKS = "192.168.0.0/24,172.16.0.0/16"; CHANGE_CONFIG_DIR_OWNERSHIP = "false"; HOSTNAME = "PlexServer"; #PLEX_CLAIM = "..."; # TODO Add token PLEX_UID = toString config.users.users.plex.uid; PLEX_GID = toString config.users.groups.media.gid; TZ = config.time.timeZone; }; volumes = [ "plex-config:/var/lib/plexmediaserver" "plex-transcode:/transcode" "/srv/video:/data/video" ]; labels = { "traefik.enable" = "true"; "traefik.http.routers.plex.rule=" = "Host(`plex.depeuter.dev`)"; "traefik.http.services.plex.loadbalancer.server.port" = "32400"; }; }; }; }; }