···30- [NixOS 25.11 Release Notes](https://github.com/NixOS/nixpkgs/blob/master/nixos/doc/manual/release-notes/rl-2511.section.md) (or backporting [24.11](https://github.com/NixOS/nixpkgs/blob/master/nixos/doc/manual/release-notes/rl-2411.section.md) and [25.05](https://github.com/NixOS/nixpkgs/blob/master/nixos/doc/manual/release-notes/rl-2505.section.md) NixOS Release notes)
31 - [ ] (Module updates) Added a release notes entry if the change is significant
32 - [ ] (Module addition) Added a release notes entry if adding a new NixOS module
33-- [ ] Fits [CONTRIBUTING.md](https://github.com/NixOS/nixpkgs/blob/master/CONTRIBUTING.md).
3435<!--
36To help with the large amounts of pull requests, we would appreciate your
···30- [NixOS 25.11 Release Notes](https://github.com/NixOS/nixpkgs/blob/master/nixos/doc/manual/release-notes/rl-2511.section.md) (or backporting [24.11](https://github.com/NixOS/nixpkgs/blob/master/nixos/doc/manual/release-notes/rl-2411.section.md) and [25.05](https://github.com/NixOS/nixpkgs/blob/master/nixos/doc/manual/release-notes/rl-2505.section.md) NixOS Release notes)
31 - [ ] (Module updates) Added a release notes entry if the change is significant
32 - [ ] (Module addition) Added a release notes entry if adding a new NixOS module
33+- [ ] Fits [CONTRIBUTING.md](https://github.com/NixOS/nixpkgs/blob/master/CONTRIBUTING.md), [pkgs/README.md](https://github.com/NixOS/nixpkgs/blob/master/pkgs/README.md), [maintainers/README.md](https://github.com/NixOS/nixpkgs/blob/master/maintainers/README.md) and other contributing documentation in corresponding paths.
3435<!--
36To help with the large amounts of pull requests, we would appreciate your
···69 environment.systemPackages = [ cfg.package ];
70 environment.etc."man_db.conf".text =
71 let
72+ # We unfortunately can’t use the customized `cfg.package` when
73+ # cross‐compiling. Instead we detect that situation and work
74+ # around it by using the vanilla one, like the OpenSSH module.
75+ buildPackage =
76+ if pkgs.stdenv.buildPlatform.canExecute pkgs.stdenv.hostPlatform then
77+ cfg.package
78+ else
79+ pkgs.buildPackages.man-db;
80+81 manualCache =
82 pkgs.runCommand "man-cache"
83 {
84+ nativeBuildInputs = [ buildPackage ];
85 }
86 ''
87 echo "MANDB_MAP ${cfg.manualPages}/share/man $out" > man.conf
···359 systemd.services.pipewire.bindsTo = [ "dbus.service" ];
360 systemd.user.services.pipewire.bindsTo = [ "dbus.service" ];
361362- # Enable either system or user units. Note that for pipewire-pulse there
363- # are only user units, which work in both cases.
364 systemd.sockets.pipewire.enable = cfg.systemWide;
365 systemd.services.pipewire.enable = cfg.systemWide;
366 systemd.user.sockets.pipewire.enable = !cfg.systemWide;
···359 systemd.services.pipewire.bindsTo = [ "dbus.service" ];
360 systemd.user.services.pipewire.bindsTo = [ "dbus.service" ];
361362+ # Enable either system or user units.
0363 systemd.sockets.pipewire.enable = cfg.systemWide;
364 systemd.services.pipewire.enable = cfg.systemWide;
365 systemd.user.sockets.pipewire.enable = !cfg.systemWide;
···1+#!/usr/bin/env nix-shell
2+#!nix-shell -I nixpkgs=./. -i python3 -p python3 curl common-updater-scripts nix coreutils
3+4+"""
5+Updater script for the roon-server package.
6+"""
7+8+import subprocess
9+import urllib.request
10+import re
11+import sys
12+import os
13+14+15+def get_current_version():
16+ """Get the current version of roon-server from the package.nix file."""
17+ result = subprocess.run(
18+ [
19+ "nix-instantiate",
20+ "--eval",
21+ "-E",
22+ "with import ./. {}; roon-server.version or (lib.getVersion roon-server)",
23+ ],
24+ capture_output=True,
25+ text=True,
26+ )
27+ result.check_returncode()
28+ return result.stdout.strip().strip('"')
29+30+31+def get_latest_version_info():
32+ """Get the latest version information from the Roon Labs API."""
33+ url = "https://updates.roonlabs.net/update/?v=2&platform=linux&version=&product=RoonServer&branding=roon&branch=production&curbranch=production"
34+ with urllib.request.urlopen(url) as response:
35+ content = response.read().decode("utf-8")
36+37+ # Parse the response
38+ info = {}
39+ for line in content.splitlines():
40+ if "=" in line:
41+ key, value = line.split("=", 1)
42+ info[key] = value
43+44+ return info
45+46+47+def parse_version(display_version):
48+ """Parse the display version string to get the version in the format used in the package.nix file."""
49+ # Example: "2.47 (build 1510) production" -> "2.47.1510"
50+ match = re.search(r"(\d+\.\d+)\s+\(build\s+(\d+)\)", display_version)
51+ if match:
52+ return f"{match.group(1)}.{match.group(2)}"
53+ return None
54+55+56+def get_hash(url):
57+ """Calculate the hash of the package."""
58+ result = subprocess.run(
59+ ["nix-prefetch-url", "--type", "sha256", url], capture_output=True, text=True
60+ )
61+ result.check_returncode()
62+ pkg_hash = result.stdout.strip()
63+64+ result = subprocess.run(
65+ ["nix", "hash", "to-sri", f"sha256:{pkg_hash}"], capture_output=True, text=True
66+ )
67+ result.check_returncode()
68+ return result.stdout.strip()
69+70+71+def update_package(new_version, hash_value):
72+ """Update the package.nix file with the new version and hash."""
73+ subprocess.run(
74+ [
75+ "update-source-version",
76+ "roon-server",
77+ new_version,
78+ hash_value,
79+ "--ignore-same-version",
80+ ],
81+ check=True,
82+ )
83+84+85+def main():
86+ current_version = get_current_version()
87+ print(f"Current roon-server version: {current_version}")
88+89+ try:
90+ latest_info = get_latest_version_info()
91+92+ display_version = latest_info.get("displayversion", "")
93+ download_url = latest_info.get("updateurl", "")
94+95+ if not display_version or not download_url:
96+ print("Error: Failed to get version information from Roon Labs API")
97+ sys.exit(1)
98+99+ print(f"Latest version from API: {display_version}")
100+ print(f"Download URL: {download_url}")
101+102+ new_version = parse_version(display_version)
103+ if not new_version:
104+ print(
105+ f"Error: Failed to parse version from display version: {display_version}"
106+ )
107+ sys.exit(1)
108+109+ print(f"Parsed version: {new_version}")
110+111+ if new_version == current_version:
112+ print("roon-server is already up to date!")
113+ return
114+115+ print(f"Calculating hash for new version {new_version}...")
116+ hash_value = get_hash(download_url)
117+118+ print(
119+ f"Updating package.nix with new version {new_version} and hash {hash_value}"
120+ )
121+ update_package(new_version, hash_value)
122+123+ print(f"Successfully updated roon-server to version {new_version}")
124+125+ except Exception as e:
126+ print(f"Error: {e}")
127+ sys.exit(1)
128+129+130+if __name__ == "__main__":
131+ main()
···992 ledger_agent = ledger-agent; # Added 2024-01-07
993 lfs = dysk; # Added 2023-07-03
994 libAfterImage = throw "'libAfterImage' has been removed from nixpkgs, as it's no longer in development for a long time"; # Added 2024-06-01
0995 libav = throw "libav has been removed as it was insecure and abandoned upstream for over half a decade; please use FFmpeg"; # Added 2024-08-25
996 libav_0_8 = libav; # Added 2024-08-25
997 libav_11 = libav; # Added 2024-08-25
···1166 lv_img_conv = throw "'lv_img_conv' has been removed from nixpkgs as it is broken"; # Added 2024-06-18
1167 lxd = lib.warnOnInstantiate "lxd has been renamed to lxd-lts" lxd-lts; # Added 2024-04-01
1168 lxd-unwrapped = lib.warnOnInstantiate "lxd-unwrapped has been renamed to lxd-unwrapped-lts" lxd-unwrapped-lts; # Added 2024-04-01
01169 lzma = throw "'lzma' has been renamed to/replaced by 'xz'"; # Converted to throw 2024-10-17
1170 lzwolf = throw "'lzwolf' has been removed because it's no longer maintained upstream. Consider using 'ecwolf'"; # Added 2025-03-02
1171
···992 ledger_agent = ledger-agent; # Added 2024-01-07
993 lfs = dysk; # Added 2023-07-03
994 libAfterImage = throw "'libAfterImage' has been removed from nixpkgs, as it's no longer in development for a long time"; # Added 2024-06-01
995+ libast = throw "'libast' has been removed due to lack of maintenance upstream."; # Added 2025-06-09
996 libav = throw "libav has been removed as it was insecure and abandoned upstream for over half a decade; please use FFmpeg"; # Added 2024-08-25
997 libav_0_8 = libav; # Added 2024-08-25
998 libav_11 = libav; # Added 2024-08-25
···1167 lv_img_conv = throw "'lv_img_conv' has been removed from nixpkgs as it is broken"; # Added 2024-06-18
1168 lxd = lib.warnOnInstantiate "lxd has been renamed to lxd-lts" lxd-lts; # Added 2024-04-01
1169 lxd-unwrapped = lib.warnOnInstantiate "lxd-unwrapped has been renamed to lxd-unwrapped-lts" lxd-unwrapped-lts; # Added 2024-04-01
1170+ lxdvdrip = throw "'lxdvdrip' has been removed due to lack of upstream maintenance."; # Added 2025-06-09
1171 lzma = throw "'lzma' has been renamed to/replaced by 'xz'"; # Converted to throw 2024-10-17
1172 lzwolf = throw "'lzwolf' has been removed because it's no longer maintained upstream. Consider using 'ecwolf'"; # Added 2025-03-02
1173
+1-1
pkgs/top-level/python-aliases.nix
···166 cryptacular = throw "cryptacular was removed, because it was disabled on all python version since 3.6 and last updated in 2021"; # Added 2024-05-13
167 cryptography_vectors = "cryptography_vectors is no longer exposed in python*Packages because it is used for testing cryptography only."; # Added 2022-03-23
168 cufflinks = throw "cufflinks has removed, since it is abandoned and broken"; # added 2025-02-16
169- curve25519-donna = throw "unused leaf package with dead upstream repository and no release in 10 years"; # added 2025-05-21
170 cx_Freeze = cx-freeze; # added 2023-08-02
171 cx_oracle = cx-oracle; # added 2024-01-03
172 d2to1 = throw "d2to1 is archived and no longer works with setuptools v68"; # added 2023-07-30
···166 cryptacular = throw "cryptacular was removed, because it was disabled on all python version since 3.6 and last updated in 2021"; # Added 2024-05-13
167 cryptography_vectors = "cryptography_vectors is no longer exposed in python*Packages because it is used for testing cryptography only."; # Added 2022-03-23
168 cufflinks = throw "cufflinks has removed, since it is abandoned and broken"; # added 2025-02-16
169+ curve25519-donna = throw "curve25519-donna was removed, since it is abandoned and unmaintained since 2015"; # added 2025-05-21
170 cx_Freeze = cx-freeze; # added 2023-08-02
171 cx_oracle = cx-oracle; # added 2024-01-03
172 d2to1 = throw "d2to1 is archived and no longer works with setuptools v68"; # added 2023-07-30