127 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			127 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{
 | 
						|
  lib,
 | 
						|
  config,
 | 
						|
  self,
 | 
						|
  ...
 | 
						|
}: let
 | 
						|
  ookflixLib = import ./lib.nix {inherit lib config self;};
 | 
						|
 | 
						|
  inherit (ookflixLib) mkVolumeOption mkGroupOption mkServiceOptions mkBasicServiceOptions mkPortOption;
 | 
						|
  inherit (lib) mkOption mkEnableOption elem;
 | 
						|
  inherit (config.ooknet.server) services;
 | 
						|
  inherit (lib.types) enum;
 | 
						|
in {
 | 
						|
  options.ooknet.server.ookflix = {
 | 
						|
    enable =
 | 
						|
      mkEnableOption "Enable ookflix a container based media server module"
 | 
						|
      // {default = elem "ookflix" services;};
 | 
						|
    gpuAcceleration = {
 | 
						|
      enable =
 | 
						|
        mkEnableOption "Enable GPU acceleration for video streamers"
 | 
						|
        // {default = elem "ookflix" services;};
 | 
						|
      type = mkOption {
 | 
						|
        type = enum ["nvidia" "intel" "amd"];
 | 
						|
        default = config.ooknet.hardware.gpu.type;
 | 
						|
        description = ''
 | 
						|
          What GPU type to use for GPU acceleration.
 | 
						|
          Defaults to system GPU type (ooknet.hardware.gpu.type)
 | 
						|
        '';
 | 
						|
      };
 | 
						|
    };
 | 
						|
    volumes = {
 | 
						|
      state.root = mkVolumeOption "root" "/var/lib/ookflix";
 | 
						|
      data.root = mkVolumeOption "root" "/jellyfin";
 | 
						|
 | 
						|
      torrents = {
 | 
						|
        root = mkVolumeOption "data" "torrents";
 | 
						|
        tv = mkVolumeOption "torrents" "tv";
 | 
						|
        movies = mkVolumeOption "torrents" "movies";
 | 
						|
        books = mkVolumeOption "torrents" "books";
 | 
						|
      };
 | 
						|
 | 
						|
      usenet = {
 | 
						|
        root = mkVolumeOption "data" "usenet";
 | 
						|
        incomplete = mkVolumeOption "usenet" "incomplete";
 | 
						|
        complete = {
 | 
						|
          root = mkVolumeOption "usenet" "complete";
 | 
						|
          tv = mkVolumeOption "usenet/complete" "tv";
 | 
						|
          movies = mkVolumeOption "usenet/complete" "movies";
 | 
						|
          books = mkVolumeOption "usenet/complete" "books";
 | 
						|
        };
 | 
						|
      };
 | 
						|
      media = {
 | 
						|
        root = mkVolumeOption "data" "media";
 | 
						|
        movies = mkVolumeOption "media" "movies";
 | 
						|
        tv = mkVolumeOption "media" "tv";
 | 
						|
        books = mkVolumeOption "media" "books";
 | 
						|
      };
 | 
						|
    };
 | 
						|
    # Shared groups
 | 
						|
    groups = {
 | 
						|
      media = mkGroupOption "media" 992;
 | 
						|
      downloads = mkGroupOption "downloader" 981;
 | 
						|
    };
 | 
						|
 | 
						|
    services = {
 | 
						|
      jellyfin = mkServiceOptions "jellyfin" {
 | 
						|
        port = 8096;
 | 
						|
        uid = 994;
 | 
						|
        gid = 994;
 | 
						|
      };
 | 
						|
      plex = mkServiceOptions "plex" {
 | 
						|
        port = 32400;
 | 
						|
        uid = 195;
 | 
						|
        gid = 195;
 | 
						|
      };
 | 
						|
      sonarr = mkServiceOptions "sonarr" {
 | 
						|
        port = 8989;
 | 
						|
        uid = 274;
 | 
						|
        gid = 274;
 | 
						|
      };
 | 
						|
      radarr = mkServiceOptions "radarr" {
 | 
						|
        port = 7878;
 | 
						|
        uid = 275;
 | 
						|
        gid = 275;
 | 
						|
      };
 | 
						|
      prowlarr = mkServiceOptions "prowlarr" {
 | 
						|
        port = 9696;
 | 
						|
        uid = 982;
 | 
						|
        gid = 987;
 | 
						|
      };
 | 
						|
      qbittorrent =
 | 
						|
        mkServiceOptions "qbittorrent" {
 | 
						|
          port = 8080;
 | 
						|
          uid = 377;
 | 
						|
          gid = 377;
 | 
						|
        }
 | 
						|
        // {
 | 
						|
          torrentPort = mkPortOption 58080 "Torrenting Port for qbittorrent" 58080;
 | 
						|
          exposedPort = mkPortOption 8081 "Port exposed by qbittorrent" 8081;
 | 
						|
        };
 | 
						|
      jellyseerr = mkServiceOptions "jellyseerr" {
 | 
						|
        port = 5055;
 | 
						|
        uid = 345;
 | 
						|
        gid = 345;
 | 
						|
      };
 | 
						|
      tautulli = mkServiceOptions "tautulli" {
 | 
						|
        port = 8181;
 | 
						|
        uid = 355;
 | 
						|
        gid = 355;
 | 
						|
      };
 | 
						|
      traefik = mkServiceOptions "traefik" {
 | 
						|
        port = 8080;
 | 
						|
        uid = 389;
 | 
						|
        gid = 389;
 | 
						|
      };
 | 
						|
      homepage = mkServiceOptions "homepage" {
 | 
						|
        port = 3000;
 | 
						|
        uid = 400;
 | 
						|
        gid = 400;
 | 
						|
      };
 | 
						|
      gluetun = mkBasicServiceOptions "gluetun" {
 | 
						|
        uid = 356;
 | 
						|
        gid = 357;
 | 
						|
      };
 | 
						|
    };
 | 
						|
  };
 | 
						|
}
 |