Setup the applications

Here are some guides to help you set up the applications. We assume you left the default ports; if you changed them, you will need to change the ports in the URLs. Same if you are using a domain name—change the URLs to match. We assume you are using the first example in your Nix configuration. Replace {URL} in this document with your server IP or domain.

In the below setup, we assume you also didn’t set the nixarr.mediaDir option, which by default is set to /data/media.

Jellyfin

Recommendations::

Transmission

Transmission should already be setup and running since it’s configured with JSON, and can therefore be configured with nix. The most basic settings are already set. See the following links for more info:

Radarr

Recommendations::

Declarative Download Clients

Instead of manually adding download clients, you can configure them declaratively:

  nixarr.radarr.settings-sync = {
    # Automatically add Transmission with the correct settings
    transmission.enable = true;

    # Or add custom download clients
    downloadClients = [
      {
        name = "NZBGet";
        implementation = "Nzbget";
        fields = {
          host = "localhost";
          port = 6789;
        };
      }
    ];
  };

To see available download client schemas, run:

  sudo nixarr show-radarr-schemas download_client | jq '.[].implementation'

Sonarr

Recommendations::

Declarative Download Clients

Instead of manually adding download clients, you can configure them declaratively:

  nixarr.sonarr.settings-sync = {
    # Automatically add Transmission with the correct settings
    transmission.enable = true;

    # Or add custom download clients
    downloadClients = [
      {
        name = "SABnzbd";
        implementation = "Sabnzbd";
        fields = {
          host = "localhost";
          port = 8080;
          apiKey.secret = "/data/.secret/sabnzbd-api-key";
        };
      }
    ];
  };

To see available download client schemas, run:

  sudo nixarr show-sonarr-schemas download_client | jq '.[].implementation'

Jellyseerr

Bazarr

Recommendations::

Declarative Configuration

Instead of manually configuring the Sonarr and Radarr connections, you can set them up declaratively:

  nixarr.bazarr.settings-sync = {
    # Automatically configure the Sonarr connection
    sonarr.enable = true;
    sonarr.config = {
      # Only sync subtitles for monitored content (optional)
      sync_only_monitored_series = true;
      sync_only_monitored_episodes = true;
    };

    # Automatically configure the Radarr connection
    radarr.enable = true;
    radarr.config = {
      sync_only_monitored_movies = true;
    };
  };

API keys and ports are filled in automatically from Nixarr’s configuration. You still need to manually configure languages and subtitle providers.

Prowlarr

Initial setup:

Declarative Configuration

Instead of manually configuring Prowlarr, you can use the nixarr.prowlarr.settings-sync options to declaratively manage your configuration.

Sync Applications: Automatically sync your enabled *Arr applications (Sonarr, Radarr, Lidarr, Readarr, Readarr-Audiobook, Whisparr) to Prowlarr:

  nixarr.prowlarr.settings-sync.enable-nixarr-apps = true;

You can also enable individual apps:

  nixarr.prowlarr.settings-sync = {
    sonarr.enable = true;
    radarr.enable = true;
    # lidarr, readarr, readarr-audiobook, whisparr also available
  };

Configure Indexers: Define your indexers directly in Nix. Use sort_name to reference the indexer definition, and pass secrets via file references:

  nixarr.prowlarr.settings-sync.indexers = [
    {
      sort_name = "nzbgeek";
      tags = [ "usenet" ];
      fields = {
        apiKey.secret = "/path/to/api/key";
      };
    }
  ];

To find available indexer schemas, run:

  sudo nixarr show-prowlarr-schemas indexer | jq '.[].sort_name'

Manage Tags: Define tags to be created in Prowlarr:

  nixarr.prowlarr.settings-sync.tags = [ "usenet" "torrent" "private" ];

Add Custom Applications: Add non-Nixarr-managed applications:

  nixarr.prowlarr.settings-sync.apps = [
    {
      name = "External Sonarr";
      implementation = "Sonarr";
      tags = [ "external" ];
      fields = {
        baseUrl = "http://192.168.1.100:8989";
        apiKey.secret = "/path/to/external-sonarr-api-key";
        prowlarrUrl = "http://localhost:9696";
      };
    }
  ];

qBittorrent

qBittorrent is an alternative to Transmission with a feature-rich WebUI. The qui WebUI is enabled by default as a modern proxy frontend.

First-time setup:

Configuration example:

  nixarr.qbittorrent = {
    enable = true;
    vpn.enable = true;
    peerPort = 50000;

    # Disable DHT/PeX for private trackers (optional)
    # privateTrackers.disableDhtPex = true;

    # Extra configuration merged into qBittorrent.conf
    extraConfig = {
      BitTorrent = {
        "Session\\MaxActiveDownloads" = 3;
      };
    };
  };

Download directories: qBittorrent downloads to /data/media/qbittorrent/ with per-*Arr subdirectories (radarr/, sonarr/, lidarr/, readarr/).

Monitoring

Nixarr can set up Prometheus exporters for all supported services. This requires a separate Prometheus server to scrape the metrics.

Enable all exporters:

  nixarr.exporters.enable = true;

This configures:

Exporters for VPN-confined services are automatically placed in the VPN namespace with nginx proxies so metrics remain accessible from the host.

Customize per-service exporters:

  # Disable a specific exporter
  nixarr.lidarr.exporter.enable = false;

  # Change port or listen address
  nixarr.sonarr.exporter.port = 9800;
  nixarr.radarr.exporter.listenAddr = "127.0.0.1";