nixflix

kiriwalawrenMPL-2.0活跃维护

用 NixOS 和 flake 一键搭起整套家庭媒体服务器,把 Jellyfin 播放和 Sonarr、Radarr 等下载管理组件打包成可复现配置,省去手动拼装 homelab 的麻烦。

NixOS Media Server Configuration

v4.0.1发布于 2026-11-05 17:35 UTC611star45fork同步于 2026-11-11 05:53 UTC

怎么上手

由 README 提炼,执行前请确认
nix develop
硬件要求按 README 说明

README 未说明

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

NixOS 上的声明式媒体服务器配置模块,自动打通 Starr 与 Jellyfin 服务间的连接

用 NixOS 和 flake 一键搭起整套家庭媒体服务器,把 Jellyfin 播放和 Sonarr、Radarr 等下载管理组件打包成可复现配置,省去手动拼装 homelab 的麻烦。

核心能力

  • 用 NixOS 选项声明式配置各服务并通过 REST API 自动下发
  • 预置 Sonarr、Radarr、Lidarr、Prowlarr 与 Jellyfin 模块
  • 可选 PostgreSQL 作为 Arr 服务后端
  • 内置 WireGuard 支持含 kill switch 与自定义 DNS
  • 可配置 nginx 或 Caddy 反向代理并支持单服务退出

容易踩的坑

需在 NixOS unstable 上使用;配置通过各服务官方 REST API 下发,服务需先可访问;反向代理、VPN 等为可选模块需自行启用

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v4.0.1
  1. v4.0.1最新正式版2026-11-05 · 2026-11-05 17:35 UTC

    Fixed

    • [sonarr|radarr|lidarr]-notifications.service no longer fails with HTTP 400 when nixflix.jellyfin.network.localNetworkAddresses = [ "0.0.0.0" ] (or "::"). The Jellyfin notifications, and Seerr's and Maintainerr's Jellyfin connections, now use 127.0.0.1 in that case instead of the wildcard address (#402)
  2. v4.0.02026-11-03 · 2026-11-03 18:49 UTC
    查看更新说明

    Breaking

    • Web UIs now bind to 127.0.0.1 (loopback) by default, so services are no longer reachable from your network unless you expose them explicitly: set the service's bind option to 0.0.0.0 or your LAN IP (e.g. nixflix.[radarr|sonarr|lidarr|sonarr-anime|prowlarr].config.hostConfig.bindAddress, nixflix.jellyfin.network.localNetworkAddresses, nixflix.navidrome.settings.Address, nixflix.torrentClients.qbittorrent.serverConfig.Preferences.WebUI.Address, nixflix.usenetClients.sabnzbd.settings.misc.host, nixflix.slskd.settings.web.ip_address), or put the built-in reverse proxy in front (nixflix.nginx.enable / nixflix.caddy.enable). Services confined to the VPN namespace keep binding to the namespace address. (#364)

    Changed

    • Jellyfin plugins whose targetAbi is older than 12 are no longer excluded on Jellyfin 12+. targetAbi is now treated purely as the minimum supported Jellyfin version, matching Jellyfin's own check, which grows the plugins available under nixflix.jellyfin.plugins from 179 to 330
    • The bundled Jellyfin plugin list now keeps the newest 10 versions of each plugin, and for each version only the build with the highest targetAbi that the pinned Jellyfin supports
    • The Jellyfin plugin update script now hashes plugin versions in parallel (one job per CPU, override with PLUGIN_PREFETCH_CONCURRENCY), reports progress as it goes, and avoids repeated manifest parsing

    Added

    • nixflix.jellyfin.users.<name>.policy.enabledFolders to restrict a user to specific Jellyfin libraries by name instead of giving every user access to all of them. policy.enableAllFolders now defaults to false when enabledFolders is set. Note that a user with enableAllFolders = false and mutable = false now has their library selection overwritten from Nix on every rebuild
    • nixflix.jellyfin.liveTv to declare Live TV M3U tuners (IPTV playlists) and XMLTV guides (#391)
    • nixflix.usenetClients.sabnzbd.settings.rss to declare SABnzbd RSS feeds and their filters. Feed URLs can be _secret files. (#389)
    • Added Navidrome plugin support (#372)
    • nixflix.seerr now asserts that the Seerr package in use is 3.5.0 or newer, failing evaluation with an actionable message instead of a bare seerr-setup.service status=22 during activation. nixflix.seerr.package defaults to pkgs.seerr from your own nixpkgs rather than the nixpkgs nixflix pins, so this applies whether or not you set the option — update your nixpkgs, or set nixflix.seerr.package to a 3.5.0+ build. Seerr library calls also report their HTTP status on failure rather than exiting on a bare curl -f code
    • nixflix.<sonarr|sonarr-anime|radarr|lidarr>.config.metadata to configure metadata consumers (Settings → Metadata), e.g. Plex series match files and episode mappings (#373)

    Deprecated

    • relaxVersionCheck in nixflix.lib.jellyfinPlugins.fromRepo no longer has any effect and prints an evaluation warning when set. Remove it from your configuration

    Fixed

    • Radarr, Sonarr, Sonarr Anime, Lidarr, Prowlarr, Seerr and Maintainerr data directories are now 0700 instead of 0755. Their API keys (config.xml, Seerr's settings.json, Maintainerr's database) were readable by every local user: the *arr units run with UMask=0002, so config.xml was 0664. Existing installs are fixed on the next activation. (#392)
    • SABnzbd: a _secret inside a list value was written triple-quoted, which ConfigObj cannot parse in a list: two secrets were silently read as one garbled string, and a single one with a trailing comma failed to parse. List items now use a list-safe quote. ([#389](https://githu
  3. v3.2.02026-10-05 · 2026-10-05 14:18 UTC
    查看更新说明

    Changed

    • Made Nix module options more discoverable in docs (#345)
    • Updated nixflix.seerr.externalUrlScheme deprecation instructions
    • Radarr's default Recyclarr quality profile now sets min_format_score to 180 instead of 1000, to prefer media acquisition (#305)

    Added

    • Allow VPN namespace to be overriden per service (#336)
    • Soulseek downloader - slskd (#336)
    • Notif Service for configuring notification connectors in Starr apps (#324)
    • nixflix.prowlarr.config.indexers.*.schemaName to set a custom indexer display name and configure multiple indexers from the same schema (#353)
    • Automatically set default package for most Jellyfin plugins, also removing the Universal Plugin Repository from the system configuration. (#339). If you previously enabled a plugin just by setting a package, you'll now want to just set enable = true; instead.

    Fixed

    • Fix Recyclarr Custom Quality Profile causes Seerr to fail on first run (#367)
    • Fix Starr apps failing to hardlink downloads into media directories by removing leftover per-directory ReadWritePaths bind mounts and setting qBittorrent's UMask to 0002 (#347). Torrents downloaded before this fix keep mode 0644. To make them hardlinkable, run sudo chmod -R g+w /data/downloads/torrent once (adjust the path if you changed nixflix.torrentClients.qbittorrent.downloadsDir).
    • Fix radarr-config failing to apply host settings on Radarr 6.4.4 by sending allowedHosts in the host config payload (#355)
    • Fix redundant group configuration causing mediaUsers failure (#341)
    • Fix jellyfin auto ignore empty folders (#333)
    • Added missing websocket support to arrs nginx config (#354)
    • Resolve _secret references in additional Prowlarr indexer fields instead of sending them unresolved (#353)
  4. v3.1.02026-09-04 · 2026-09-04 14:42 UTC
    查看更新说明

    Changed

    • Default theme is set to "catppuccin-mocha".

    Added

    • Added Jellyfin Universal Plugin Repo manifest so users don't have to add plugin manifests manually anymore (#321)
    • Lidarr metadata profile overrides service that creates, updates, and deletes metadata profiles to match nixflix.lidarr.config.metadataProfiles (#293)
    • Lidarr quality profile overrides service that creates, updates, and deletes quality profiles to match nixflix.lidarr.config.qualityProfiles (#294)
    • Navidrome (#296)

    Fixed

    • fix forceJellyfinIgnore not correctly finding series' paths
    • fix(arr-common): silent failure of arr-config services not generating if username & password were both null (#311)
    • fix(seer/sonarr): requirement on radarr and require seerr-libraries like seer/radarr (#311)
    • fix navidrome dependency on serviceDependencies (#306)
    • fix seerr sonarr activeDirectory default resolving host config (#283)
    • fix *arr rootfolders oneshot racing app startup (#286)
    • fix *arr config.hostConfig auth/port/urlBase values being ignored in favor of hardcoded settings env vars (#289)
    • fix Jellyfin crash-looping on boot when a stale TranscodingTempPath in encoding.xml points at an inaccessible path after cacheDir/encoding.transcodingTempPath changes (#291)
    • fix _secret refs nested inside lists being silently dropped and POSTed as null, e.g. the Jellyfin Webhook plugin's GenericOptions (#302)
  5. v3.0.02026-07-12 · 2026-07-12 21:46 UTC
    查看更新说明

    Breaking

    • Jellyfin manifest is pulled from this repository instead of a separate one.
      • I accidentally deleted the old repository instead of archiving it, updates to 3.0.0 are required.

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    Nixflix is a declarative media server configuration manager for NixOS. The aim of the project is to automate all of the connective tissue required to get Starr and Jellyfin services (Sonarr, Radarr, Lidarr, Prowlarr, Jellyfin, Seerr) working together. I want users to be able to configure this module and it just works.

    Why Nixflix?

    Dreading the thought of configuring a media server from scratch. Again...

    Nixflix makes it so you never have to again!

    Managing media server configuration can be very painful:

    • No version control for settings
    • Tedious navigation through UI systems
    • And annoying interservice Configuration

    All of these services have APIs, surely we can use this to automate the whole thing.

    Nixflix is:

    • ✅ Opinionated — Don't you hate having to think for yourself?
    • ✅ API-based — Nixflix uses official REST APIs of each service (with a couple minor exceptions)
    • ✅ Idempotent — All services safely execute repeatedly
    • ✅ Commanding — Your code is the source of truth, no need to fear drift

    Features

    • Media Server Stack: Pre-configured modules for Sonarr, Radarr, Lidarr, and Prowlarr
    • Declarative API Configuration: Configure services declaratively via NixOS options, automatically applied through their REST APIs
    • PostgreSQL Integration: Optional PostgreSQL backend for all Arr services
    • WireGuard VPN Integration: Built-in support for Wireguard VPN with kill switch and custom DNS
    • Flexible Directory Management: Configurable media and state directories with automatic setup
    • Service Dependencies: Configure custom systemd service dependencies
    • Reverse Proxy Support: Configurable nginx or Caddy integration for all services, with per-service opt-out
    • Unified Theming: All supported services can be themed to look the same, powered by theme.park
    • TRaSH Guides: Default configuration follows TRaSH guidelines

    Upcoming Features

    • Better music tooling

    Documentation

    Check out the documentation to get started.

    Services

    Starr Stack

    All Arr services (Sonarr, Radarr, Lidarr, Prowlarr) support:

    • API-based configuration
    • PostgreSQL integration
    • Reverse proxy (nginx or Caddy)
    • Automatic directory creation
    • Root folder management
    • Custom media directories

    Jellyfin

    • Basic server management
    • Libraries are automatically configured based on selected media managers
    • Plugin management
    • Subtitle downloader management

    Seerr

    • Media request management
    • Automatic integration with Starr services
    • Automatic integration with Jellyfin libraries

    Navidrome

    • Music Server
    • Supports OpenSubsonic API

    SABnzbd

    • Automatic integration with Starr services

    qBittorrent

    • Automatic integration with Starr services

    Soulseek (slskd)

    • Automatic integration with Aurral (comming soon)

    WireGuard VPN

    • Generic WireGuard support
    • Kill switch

    Maintainerr

    • Automatic cleanup of old media

    Development

    Enter development shell:

    nix develop
    

    Format code:

    nix fmt
    

    Check formatting and linting:

    nix flake check
    

    License

    MPL 2.0