All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog.
- fix seerr sonarr activeDirectory default resolving host config (#283)
- fix *arr rootfolders oneshot racing app startup (#286)
- fix *arr
config.hostConfigauth/port/urlBase values being ignored in favor of hardcodedsettingsenv vars (#289) - fix Jellyfin crash-looping on boot when a stale
TranscodingTempPathinencoding.xmlpoints at an inaccessible path aftercacheDir/encoding.transcodingTempPathchanges (#291)
- 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.
- Jellyfin Metadata Settings (UseFileCreationTimeForDateAdded)
- Maintainerr support (#242).
- Make Seerr library sync non-fatal to circumvent Seerr bug
- Sonarr and Radarr renaming for better Jellyfin matches
prowlarr-indexer-proxiesrestart-looping (and blocking boot) when the proxy's test endpoint is unreachable, by adding?forceSave=trueto its create/update requests (mirrors #247 for indexers)._secretpattern not trimming all terminating newlines in decrypted files.- qBittorrent potentially starting before
nixflix.serviceDependenciesand thus losing track of downloaded files, lest a recheck was manually forced.
- Starr app Media Management API configuration (#221).
- Breaking (#230):
nixflix.postgres.dataDir. PostgreSQLdataDirno longer overridden globally, fixing data loss for co-located services (e.g. Forgejo) that share the system PostgreSQL instance (#230).-
Remove
nixflix.postgres.dataDirfrom your configuraiton. -
If you set
nixflix.stateDirto a non-default value (i.e. anything other than/var/lib), then your PostgreSQL data was previously stored at${nixflix.stateDir}/postgresand must be moved to the standard NixOS location before rebuilding. Stop all services that depend on PostgreSQL first, then perform the following steps:-
sudo -su postgres
-
cd /var/lib/postgresql/ -
stateDir=/your/custom/stateDir # replace with your nixflix.stateDir value version=$(cat $stateDir/postgres/PG_VERSION)
-
# Move and fix ownership mv $stateDir/postgres /var/lib/postgresql/$version chown -R postgres:postgres /var/lib/postgresql/$version
-
exit
-
-
nixflix.<starr>.config.hostConfig.usernameandnixflix.<starr>.config.hostConfig.passwordmust both be set ornull(#223).
- Print response error when prowlarr indexer add/update fails.
- Add support for
apikeyandpasskeyindexer fields (#220).
- Fix inet_exposure for SABnzbd when reverse proxy is enabled
- Change license to MPL 2.0 (#217).
nixflix.lib.jellyfinPlugins.fromRepo'shashparameter now supports nix32 format as well (#202).- It also throws if the user's system does not have
builtins.convertHashimplemented.
- It also throws if the user's system does not have
- Prowlarr indexers missing baseUrl when list of choices is available.
connectionAddresses ignoring bind addresses of associated services (#213).- Fix prowlarr indexer API key inconsistency bug (#219).
- Prowlarr indexer
apiKeyinconsistency (#210). - Inability to unset predefined libraries (#207).
- Missing Recyclarr options (#204).
- Updated Recyclarr options documentation (#204).
- Incorrect Recyclarr
delete_old_custom_formatsdefault (#204).
- Subtitle downloads using Jellyfin plugins (#199).
- Caddy as alternative reverse proxy to nginx via
nixflix.caddy(#163). - Per-service reverse proxy opt-out via
reverseProxy.expose(#163). - Generic WireGuard VPN support via
nixflix.vpn(#164). - Jellyfin Plugin management (#156).
- Mullvad first-class Tailscale coexistence option (
nixflix.mullvad.tailscale) (#141). - Mullvad
persistDeviceoption to keep login across reboots (#133). - Prowlarr indexer proxy support (#139).
- Automatic known-proxy configuration (#123).
- Support for remote Jellyfin instances in Jellyseerr authentication (#125).
- Jellyfin VM tests (#64).
- Jellyseerr module with Radarr/Sonarr integration and VM tests (#43, #73, #74).
- Sonarr anime instance support (#40).
- Initial Jellyfin configuration with library, branding, and encoding services (#24).
- Delay profiles for Starr apps (#20).
- TRaSH guide defaults for SABnzbd (#19).
- Recyclarr with sane defaults, managed quality profiles, and automatic cleanup of unmanaged profiles (#13).
- Download clients configuration service (#8).
- SABnzbd configuration module (#6).
- Prowlarr applications configuration (#5).
-
Breaking:
nixflix.stateDirdefault has been changed to/var/libto match FHS convention- You will need to move everything from
/data/.stateto/var/lib. /data/.state/postgreswill need to be moved to/var/lib/postgresql/<version>.- You can find
versionby runningsudo cat /data/.state/postgres/PG_VERSION. - I also had to delete my
/var/lib/jellyfinand/var/lib/seerrfolders entirely after running the following (you may not have to, though):sudo systemctl stop jellyfin-api-key jellyfin-branding-config jellyfin-libraries jellyfin-plugins jellyfin-setup-wizard jellyfin-system-config jellyfin-users-config jellyfin seerr-jellyfin seerr-env seerr-setup seerr-user-settings seerr-wait-for-db seerr
- You can find
- You will need to move everything from
-
Breaking: unpin PostgreSQL version.
-
If you're
stateVersionis25.11, you will need to update your database version to 17 manually usingpg_upgradefrompkgs.postgresql_17. You should probably stop the services that depend on PostgreSQL first. Perform the following steps:-
sudo -su postgres
-
cd /var/lib/postgresql/ -
old=16 new=17
-
pg_old=$(nix-build --no-out-link -E "with import <nixpkgs> {}; \ postgresql_${old:?}.withPackages (p: [ p.pgvector p.vectorchord ])") pg_new=$(nix-build --no-out-link -E "with import <nixpkgs> {}; \ postgresql_${new:?}.withPackages (p: [ p.pgvector p.vectorchord ])")
-
# Init the new database $pg_new/bin/initdb -D /var/lib/postgresql/$new || exit 1
-
# Check the upgrade $pg_new/bin/pg_upgrade \ --socketdir=/var/run/postgresql \ --old-bindir=$pg_old/bin \ --new-bindir=$pg_new/bin \ --old-datadir=/var/lib/postgresql/${old:?} \ --new-datadir=/var/lib/postgresql/${new:?} \ --old-options "-c shared_preload_libraries='vchord.so'" \ --new-options "-c shared_preload_libraries='vchord.so'" \ --check # remove when ready to migrate
-
# Perform the upgrade $pg_new/bin/pg_upgrade \ --socketdir=/var/run/postgresql \ --old-bindir=$pg_old/bin \ --new-bindir=$pg_new/bin \ --old-datadir=/var/lib/postgresql/${old:?} \ --new-datadir=/var/lib/postgresql/${new:?} \ --old-options "-c shared_preload_libraries='vchord.so'" \ --new-options "-c shared_preload_libraries='vchord.so'"
-
-
-
Breaking:
nixflix.mullvad.*options have been replaced bynixflix.vpn.*. Update your configuration accordingly. -
nixflix.radarr.vpn,nixflix.sonarr.vpn, etc. per-service VPN options now reference the genericnixflix.vpnnamespace rather than Mullvad. -
Breaking (#162):
nixflix.mullvad.*options have been replaced bynixflix.vpn.*. Update your configuration accordingly.- If you had
nixflix.mullvad.killSwitch.enable = true, you need to disable it before updating. This can be done without rebuilding by runningmullvad lockdown-mode set off, then runmullvad disconnect.nixflix.vpn.*. Update your configuration accordingly.
- If you had
-
nixflix.radarr.vpn,nixflix.sonarr.vpn, etc. per-service VPN options now reference the genericnixflix.vpnnamespace rather than Mullvad. -
Breaking (#162): Recyclarr options schema updated to v8.
- Remove
replace_existing_custom_formatsfrom your recyclarr config (dropped in recyclarr v8). - New fields available:
trash_id/score_set/min_upgrade_format_scoreon quality profiles,custom_format_groups,media_management,sqp-streaming/sqp-uhdquality definition types. - If you use
nixflix.inputs.nixpkgs.follows = "nixpkgs", runnix flake update nixpkgsto get recyclarr 8.5.1.
- Remove
-
Recyclarr timer no longer attempts to start sonarr-anime services when sonarr-anime is disabled (#158).
-
Services now wait for the Jellyfin API to be ready before running configuration services (#157).
-
ACME certificate configuration added (#154).
-
nixflix.serviceDependenciesnow correctly applied to Arr and Jellyfin services (#153). -
Breaking (#147):
nixflix.jellyseerrrenamed tonixflix.seerr.- Update all
nixflix.jellyseerr.*references tonixflix.seerr.*in your configuration. - If using
nixflix.inputs.nixpkgs.follows, update yourflake.lock. - Without PostgreSQL: rename
/data/.state/jellyseerrto/data/.state/seerrand update ownership toseerr:seerr, or setnixflix.seerr.dataDir = "/data/.state/jellyseerr"and change ownership toseerr:seerr. - With PostgreSQL: data is preserved. To keep existing data, set
nixflix.seerr.user = "jellyseerr"andnixflix.seerr.group = "jellyseerr". If you see collation version warnings, refresh them:sudo -u postgres psql -c "ALTER DATABASE jellyseerr REFRESH COLLATION VERSION;" # repeat for each database (radarr, sonarr, prowlarr, lidarr, etc.)
- Update all
-
Breaking (#146):
nixflix.jellyfin.apiKeyis now required. Add the option to your configuration before deploying. -
Jellyseerr/Arr PostgreSQL usage scoped to
nixflix.postgres.enableto avoid conflicting with unrelated PostgreSQL instances (#127). -
Breaking (#115): Recyclarr configuration options were refactored. Review the recyclarr module options for the updated structure.
-
Arr services now wait for
network-online.targetto fix DNS resolution errors after reboot (#91). -
Recyclarr disabled by default (#80).
-
Individual Starr settings overrides added (#87).
-
Jellyseerr Radarr/Sonarr config converted from list to attrset (
nixflix.jellyseerr.radarr.<name> = {}) (#73). -
Breaking (#107): Reverse proxy routing switched from path-based to subdomain-based. Services are now served at
<service>.<domain>instead of<domain>/<service>. Update any bookmarks, reverse proxy configuration, or hardcoded URLs accordingly. -
Breaking (#101): qBittorrent module rewritten. Review the updated
nixflix.qbittorrent.*options and update your configuration. -
Breaking (#90): Starr service log databases are now separate from the primary databases. Existing logs will not be migrated — a fresh log database will be created on first start. Primary application data is unaffected.
-
_secretspattern adopted for all secret paths (#56). -
SABnzbd refactored with updated options (#46).
modules/mullvad.nixand allnixflix.mullvad.*options.- Tailscale coexistence. It is not necessary because of the VPN namespace.
- Hardcoded service connection addresses broke integrations (#201).
- Starr services UMask was
0022, needs to be0002to allow group writes (#178). - Default matadata providers, anime providers were used for TV Shows and Movies (#177).
- Services failing when changing
nixflix.mediaDirornixflix.stateDirto nested structures (#170). - qBittorrent category save path now correctly used (#148).
- Download client timing issue causing connection-refused errors at boot (#134).
- Arr services now wait for download client API readiness before proceeding (#128).
- qBittorrent
DefaultSavePathset todownloadsDir/defaultto prevent permission errors on uncategorized torrent imports (#122). - Download clients integration fixed (target address was incorrectly set to
0.0.0.0) (#117). - Missing folders on NixOS rebuild without reboot (tmpfiles rules and permissions) (#113).
- Secret values with special characters (commas, quotes) no longer mangled by ConfigObj in SABnzbd (#111).
- Jellyseerr authentication after secure curl refactor (#96).
- Prowlarr indexer documentation corrected (#79).
- Username/password download clients for Starr apps (#86).
- Timing issues with Starr services at boot (#84).
- Systemd tmpfiles rules syntax corrected (wrong
root:mediaowner format) (#83). - SABnzbd categories service: API key now passed to curl, redundant URL base slash removed (#68).
- Indexer freeform type fixed; username/password credential option added for Prowlarr (#71).
- Websocket and direct port access for Jellyfin (#37).