···5455- Default ICU version updated from 74 to 76
560000057<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
5859### Titanium removed {#sec-nixpkgs-release-25.05-incompatibilities-titanium-removed}
···5455- Default ICU version updated from 74 to 76
5657+- Apache Kafka was updated to `>= 4.0.0`. Please note that this is the first release which operates
58+ entirely without Apache ZooKeeper support, and all clusters need to be migrated to KRaft mode. See
59+ the [release announcement](https://kafka.apache.org/blog#apache_kafka_400_release_announcement)
60+ for more details.
61+62<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
6364### Titanium removed {#sec-nixpkgs-release-25.05-incompatibilities-titanium-removed}
···27 default = [ ];
28 example = lib.literalExpression ''
29 [
30- pkgs.libsForQt5.qtstyleplugin-kvantum
31- pkgs.breeze-qt5
32- pkgs.qtcurve
33- ];
34 '';
35 description = ''
36 Extra Qt styles that will be available to the
···27 default = [ ];
28 example = lib.literalExpression ''
29 [
30+ pkgs.libsForQt5.qtstyleplugin-kvantum
31+ pkgs.breeze-qt5
32+ pkgs.qtcurve
33+ ];
34 '';
35 description = ''
36 Extra Qt styles that will be available to the
···1{ lib }:
23-let
4- inherit (lib)
5- all
6- concatStringsSep
7- findFirst
8- flip
9- getAttr
10- head
11- isFunction
12- length
13- recursiveUpdate
14- splitVersion
15- tail
16- take
17- versionAtLeast
18- versionOlder
19- zipListsWith
20- ;
21-in
22-recursiveUpdate lib (rec {
23-24- versions =
25- let
26- truncate = n: v: concatStringsSep "." (take n (splitVersion v));
27- opTruncate =
28- op: v0: v:
29- let
30- n = length (splitVersion v0);
31- in
32- op (truncate n v) (truncate n v0);
33- in
34- rec {
35-36- /*
37- Get string of the first n parts of a version string.
38-39- Example:
40- - truncate 2 "1.2.3-stuff"
41- => "1.2"
42-43- - truncate 4 "1.2.3-stuff"
44- => "1.2.3.stuff"
45- */
46-47- inherit truncate;
48-49- /*
50- Get string of the first three parts (major, minor and patch)
51- of a version string.
52-53- Example:
54- majorMinorPatch "1.2.3-stuff"
55- => "1.2.3"
56- */
57- majorMinorPatch = truncate 3;
58-59- /*
60- Version comparison predicates,
61- - isGe v0 v <-> v is greater or equal than v0 [*]
62- - isLe v0 v <-> v is lesser or equal than v0 [*]
63- - isGt v0 v <-> v is strictly greater than v0 [*]
64- - isLt v0 v <-> v is strictly lesser than v0 [*]
65- - isEq v0 v <-> v is equal to v0 [*]
66- - range low high v <-> v is between low and high [**]
67-68- [*] truncating v to the same number of digits as v0
69- [**] truncating v to low for the lower bound and high for the upper bound
70-71- Examples:
72- - isGe "8.10" "8.10.1"
73- => true
74- - isLe "8.10" "8.10.1"
75- => true
76- - isGt "8.10" "8.10.1"
77- => false
78- - isGt "8.10.0" "8.10.1"
79- => true
80- - isEq "8.10" "8.10.1"
81- => true
82- - range "8.10" "8.11" "8.11.1"
83- => true
84- - range "8.10" "8.11+" "8.11.0"
85- => false
86- - range "8.10" "8.11+" "8.11+beta1"
87- => false
88- */
89- isGe = opTruncate versionAtLeast;
90- isGt = opTruncate (flip versionOlder);
91- isLe = opTruncate (flip versionAtLeast);
92- isLt = opTruncate versionOlder;
93- isEq = opTruncate pred.equal;
94- range = low: high: pred.inter (versions.isGe low) (versions.isLe high);
95- };
96-97- /*
98- Returns a list of list, splitting it using a predicate.
99- This is analogous to builtins.split sep list,
100- with a predicate as a separator and a list instead of a string.
101-102- Type: splitList :: (a -> bool) -> [a] -> [[a]]
103-104- Example:
105- splitList (x: x == "x") [ "y" "x" "z" "t" ]
106- => [ [ "y" ] "x" [ "z" "t" ] ]
107- */
108- splitList =
109- pred: l: # put in file lists
110- let
111- loop = (
112- vv: v: l:
113- if l == [ ] then
114- vv ++ [ v ]
115- else
116- let
117- hd = head l;
118- tl = tail l;
119- in
120- if pred hd then
121- loop (
122- vv
123- ++ [
124- v
125- hd
126- ]
127- ) [ ] tl
128- else
129- loop vv (v ++ [ hd ]) tl
130- );
131- in
132- loop [ ] [ ] l;
133-134- pred = {
135- # Predicate intersection, union, and complement
136- inter =
137- p: q: x:
138- p x && q x;
139- union =
140- p: q: x:
141- p x || q x;
142- compl = p: x: !p x;
143- true = p: true;
144- false = p: false;
145-146- # predicate "being equal to y"
147- equal = y: x: x == y;
148- };
149-150- /*
151- Emulate a "switch - case" construct,
152- instead of relying on `if then else if ...`
153- */
154- /*
155- Usage:
156- ```nix
157- switch-if [
158- if-clause-1
159- ..
160- if-clause-k
161- ] default-out
162- ```
163- where a if-clause has the form `{ cond = b; out = r; }`
164- the first branch such as `b` is true
165- */
166-167- switch-if = c: d: (findFirst (getAttr "cond") { } c).out or d;
168-169- /*
170- Usage:
171- ```nix
172- switch x [
173- simple-clause-1
174- ..
175- simple-clause-k
176- ] default-out
177- ```
178- where a simple-clause has the form `{ case = p; out = r; }`
179- the first branch such as `p x` is true
180- or
181- ```nix
182- switch [ x1 .. xn ] [
183- complex-clause-1
184- ..
185- complex-clause-k
186- ] default-out
187- ```
188- where a complex-clause is either a simple-clause
189- or has the form { cases = [ p1 .. pn ]; out = r; }
190- in which case the first branch such as all `pi x` are true
191-192- if the variables p are not functions,
193- they are converted to a equal p
194- if out is missing the default-out is taken
195- */
196-197- switch =
198- var: clauses: default:
199- with pred;
200- let
201- compare = f: if isFunction f then f else equal f;
202- combine =
203- cl: var:
204- if cl ? case then compare cl.case var else all (equal true) (zipListsWith compare cl.cases var);
205- in
206- switch-if (map (cl: {
207- cond = combine cl var;
208- inherit (cl) out;
209- }) clauses) default;
210211 /*
212 Override arguments to mkCoqDerivation for a Coq library.
···1{ lib }:
23+lib.recursiveUpdate lib (
4+ import ../rocq/extra-lib-common.nix { inherit lib; } // {
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000056 /*
7 Override arguments to mkCoqDerivation for a Coq library.
···1+{ lib }:
2+3+let
4+ inherit (lib)
5+ all
6+ concatStringsSep
7+ findFirst
8+ flip
9+ getAttr
10+ head
11+ isFunction
12+ length
13+ recursiveUpdate
14+ splitVersion
15+ tail
16+ take
17+ versionAtLeast
18+ versionOlder
19+ zipListsWith
20+ ;
21+in
22+rec {
23+24+ versions =
25+ let
26+ truncate = n: v: concatStringsSep "." (take n (splitVersion v));
27+ opTruncate =
28+ op: v0: v:
29+ let
30+ n = length (splitVersion v0);
31+ in
32+ op (truncate n v) (truncate n v0);
33+ in
34+ rec {
35+36+ /*
37+ Get string of the first n parts of a version string.
38+39+ Example:
40+ - truncate 2 "1.2.3-stuff"
41+ => "1.2"
42+43+ - truncate 4 "1.2.3-stuff"
44+ => "1.2.3.stuff"
45+ */
46+47+ inherit truncate;
48+49+ /*
50+ Get string of the first three parts (major, minor and patch)
51+ of a version string.
52+53+ Example:
54+ majorMinorPatch "1.2.3-stuff"
55+ => "1.2.3"
56+ */
57+ majorMinorPatch = truncate 3;
58+59+ /*
60+ Version comparison predicates,
61+ - isGe v0 v <-> v is greater or equal than v0 [*]
62+ - isLe v0 v <-> v is lesser or equal than v0 [*]
63+ - isGt v0 v <-> v is strictly greater than v0 [*]
64+ - isLt v0 v <-> v is strictly lesser than v0 [*]
65+ - isEq v0 v <-> v is equal to v0 [*]
66+ - range low high v <-> v is between low and high [**]
67+68+ [*] truncating v to the same number of digits as v0
69+ [**] truncating v to low for the lower bound and high for the upper bound
70+71+ Examples:
72+ - isGe "8.10" "8.10.1"
73+ => true
74+ - isLe "8.10" "8.10.1"
75+ => true
76+ - isGt "8.10" "8.10.1"
77+ => false
78+ - isGt "8.10.0" "8.10.1"
79+ => true
80+ - isEq "8.10" "8.10.1"
81+ => true
82+ - range "8.10" "8.11" "8.11.1"
83+ => true
84+ - range "8.10" "8.11+" "8.11.0"
85+ => false
86+ - range "8.10" "8.11+" "8.11+beta1"
87+ => false
88+ */
89+ isGe = opTruncate versionAtLeast;
90+ isGt = opTruncate (flip versionOlder);
91+ isLe = opTruncate (flip versionAtLeast);
92+ isLt = opTruncate versionOlder;
93+ isEq = opTruncate pred.equal;
94+ range = low: high: pred.inter (versions.isGe low) (versions.isLe high);
95+ };
96+97+ /*
98+ Returns a list of list, splitting it using a predicate.
99+ This is analogous to builtins.split sep list,
100+ with a predicate as a separator and a list instead of a string.
101+102+ Type: splitList :: (a -> bool) -> [a] -> [[a]]
103+104+ Example:
105+ splitList (x: x == "x") [ "y" "x" "z" "t" ]
106+ => [ [ "y" ] "x" [ "z" "t" ] ]
107+ */
108+ splitList =
109+ pred: l: # put in file lists
110+ let
111+ loop = (
112+ vv: v: l:
113+ if l == [ ] then
114+ vv ++ [ v ]
115+ else
116+ let
117+ hd = head l;
118+ tl = tail l;
119+ in
120+ if pred hd then
121+ loop (
122+ vv
123+ ++ [
124+ v
125+ hd
126+ ]
127+ ) [ ] tl
128+ else
129+ loop vv (v ++ [ hd ]) tl
130+ );
131+ in
132+ loop [ ] [ ] l;
133+134+ pred = {
135+ # Predicate intersection, union, and complement
136+ inter =
137+ p: q: x:
138+ p x && q x;
139+ union =
140+ p: q: x:
141+ p x || q x;
142+ compl = p: x: !p x;
143+ true = p: true;
144+ false = p: false;
145+146+ # predicate "being equal to y"
147+ equal = y: x: x == y;
148+ };
149+150+ /*
151+ Emulate a "switch - case" construct,
152+ instead of relying on `if then else if ...`
153+ */
154+ /*
155+ Usage:
156+ ```nix
157+ switch-if [
158+ if-clause-1
159+ ..
160+ if-clause-k
161+ ] default-out
162+ ```
163+ where a if-clause has the form `{ cond = b; out = r; }`
164+ the first branch such as `b` is true
165+ */
166+167+ switch-if = c: d: (findFirst (getAttr "cond") { } c).out or d;
168+169+ /*
170+ Usage:
171+ ```nix
172+ switch x [
173+ simple-clause-1
174+ ..
175+ simple-clause-k
176+ ] default-out
177+ ```
178+ where a simple-clause has the form `{ case = p; out = r; }`
179+ the first branch such as `p x` is true
180+ or
181+ ```nix
182+ switch [ x1 .. xn ] [
183+ complex-clause-1
184+ ..
185+ complex-clause-k
186+ ] default-out
187+ ```
188+ where a complex-clause is either a simple-clause
189+ or has the form { cases = [ p1 .. pn ]; out = r; }
190+ in which case the first branch such as all `pi x` are true
191+192+ if the variables p are not functions,
193+ they are converted to a equal p
194+ if out is missing the default-out is taken
195+ */
196+197+ switch =
198+ var: clauses: default:
199+ with pred;
200+ let
201+ compare = f: if isFunction f then f else equal f;
202+ combine =
203+ cl: var:
204+ if cl ? case then compare cl.case var else all (equal true) (zipListsWith compare cl.cases var);
205+ in
206+ switch-if (map (cl: {
207+ cond = combine cl var;
208+ inherit (cl) out;
209+ }) clauses) default;
210+}
···1+{ lib }:
2+3+lib.recursiveUpdate lib (
4+ import ./extra-lib-common.nix { inherit lib; } // {
5+6+ /*
7+ Override arguments to mkRocqDerivation for a Rocq library.
8+9+ This function allows you to easily override arguments to mkRocqDerivation,
10+ even when they are not exposed by the Rocq library directly.
11+12+ Type: overrideRocqDerivation :: AttrSet -> RocqLibraryDerivation -> RocqLibraryDerivation
13+14+ Example:
15+16+ ```nix
17+ rocqPackages.lib.overrideRocqDerivation
18+ {
19+ defaultVersion = "9999";
20+ release."9999".hash = "sha256-fDoP11rtrIM7+OLdMisv2EF7n/IbGuwFxHiPtg3qCNM=";
21+ }
22+ rocqPackages.QuickChick;
23+ ```
24+25+ This example overrides the `defaultVersion` and `release` arguments that
26+ are passed to `mkRocqDerivation` in the QuickChick derivation.
27+28+ Note that there is a difference between using `.override` on a Rocq
29+ library vs this `overrideRocqDerivation` function. `.override` allows you
30+ to modify arguments to the derivation itself, for instance by passing
31+ different versions of dependencies:
32+33+ ```nix
34+ rocqPackages.QuickChick.override { ssreflect = my-cool-ssreflect; }
35+ ```
36+37+ whereas `overrideRocqDerivation` allows you to override arguments to the
38+ call to `mkRocqDerivation` in the Rocq library.
39+40+ Note that all Rocq libraries in Nixpkgs have a `version` argument for
41+ easily using a different version. So if all you want to do is use a
42+ different version, and the derivation for the Rocq library already has
43+ support for the version you want, you likely only need to update the
44+ `version` argument on the library derivation. This is done with
45+ `.override`:
46+47+ ```nix
48+ rocqPackages.QuickChick.override { version = "1.4.0"; }
49+ ```
50+ */
51+ overrideRocqDerivation =
52+ f: drv:
53+ (drv.override (args: {
54+ mkRocqDerivation = drv_: (args.mkRocqDerivation drv_).override f;
55+ }));
56+})
···5}:
6let
7 pname = "nuclear";
8- version = "0.6.42";
910 src = fetchurl {
11 # Nuclear currently only publishes AppImage releases for x86_64, which is hardcoded in
···13 # provide more arches, we should use stdenv.hostPlatform to determine the arch and choose
14 # source URL accordingly.
15 url = "https://github.com/nukeop/nuclear/releases/download/v${version}/${pname}-v${version}-x86_64.AppImage";
16- hash = "sha256-95Q8TEn2gvJu75vgDdzSYH/1ci3BlidQ5nKA53fas6U=";
17 };
1819 appimageContents = appimageTools.extract { inherit pname version src; };
···5}:
6let
7 pname = "nuclear";
8+ version = "0.6.43";
910 src = fetchurl {
11 # Nuclear currently only publishes AppImage releases for x86_64, which is hardcoded in
···13 # provide more arches, we should use stdenv.hostPlatform to determine the arch and choose
14 # source URL accordingly.
15 url = "https://github.com/nukeop/nuclear/releases/download/v${version}/${pname}-v${version}-x86_64.AppImage";
16+ hash = "sha256-kruQ9h/0dYWIsjX8P2Em7v5weGd4B5hZbu/VldeAGRU=";
17 };
1819 appimageContents = appimageTools.extract { inherit pname version src; };
+3-3
pkgs/by-name/nu/nuclei/package.nix
···78buildGoModule rec {
9 pname = "nuclei";
10- version = "3.3.10";
1112 src = fetchFromGitHub {
13 owner = "projectdiscovery";
14 repo = "nuclei";
15 tag = "v${version}";
16- hash = "sha256-5+alARFuxwJlPYki5TU+4GdaJhBEYXbXH0BrCj2/aic=";
17 };
1819- vendorHash = "sha256-l3733hg11+Qg4h68DnXoD8LyYiB+iFyZyKggpCAsx7Q=";
2021 proxyVendor = true; # hash mismatch between Linux and Darwin
22
···78buildGoModule rec {
9 pname = "nuclei";
10+ version = "3.4.0";
1112 src = fetchFromGitHub {
13 owner = "projectdiscovery";
14 repo = "nuclei";
15 tag = "v${version}";
16+ hash = "sha256-FseLPykYJrfjCyuS0+yLNcEhzFAaguJjMSdGHIacexo=";
17 };
1819+ vendorHash = "sha256-tTFEDTUM3ldH3/NtqYx4LyEazp7o5qZ6ionu01Vxwrw=";
2021 proxyVendor = true; # hash mismatch between Linux and Darwin
22
···1-addSDLPath () {
2- if [ -e "$1/include/SDL" ]; then
3- export SDL_PATH="${SDL_PATH-}${SDL_PATH:+ }$1/include/SDL"
4- # NB this doesn’t work with split dev packages because different packages
5- # will contain "include/SDL/" and "lib/" directories.
6- #
7- # However the SDL_LIB_PATH is consumed by SDL itself and serves to locate
8- # libraries like SDL_mixer, SDL_image, etc which are not split-package
9- # so the check above will only trigger on them.
10- if [ -e "$1/lib" ]; then
11- export SDL_LIB_PATH="${SDL_LIB_PATH-}${SDL_LIB_PATH:+ }-L$1/lib"
12- fi
13- fi
14-}
15-16-addEnvHooks "$hostOffset" addSDLPath
···1{
2+ lib,
3 mkKdeDerivation,
4 pkg-config,
5 shared-mime-info,
···10}:
11mkKdeDerivation {
12 pname = "krdc";
13+14+ # freerdp3 is not yet supported by 24.12 version of krdc
15+ # can be dropped with 25.04 kdePackages release, as that will default to freerdp3
16+ # backporting freerdp3 support is non-trivial
17+ cmakeFlags = [
18+ (lib.cmakeBool "WITH_RDP" false)
19+ ];
2021 extraNativeBuildInputs = [
22 pkg-config
···260 # depend on the components they need in `nixComponents_2_26`.
261 nix_2_26 = addTests "nix_2_26" self.nixComponents_2_26.nix-everything;
262263- git = common rec {
264- version = "2.25.0";
265- suffix = "pre20241101_${lib.substring 0 8 src.rev}";
266- src = fetchFromGitHub {
267- owner = "NixOS";
268- repo = "nix";
269- rev = "2e5759e3778c460efc5f7cfc4cb0b84827b5ffbe";
270- hash = "sha256-E1Sp0JHtbD1CaGO3UbBH6QajCtOGqcrVfPSKL0n63yo=";
271- };
272- self_attribute_name = "git";
273- };
274-275 latest = self.nix_2_26;
276277 # The minimum Nix version supported by Nixpkgs
···305 ) (lib.range 4 23)
306 )
307 // {
308- unstable = throw "nixVersions.unstable has been removed. For bleeding edge (Nix master, roughly weekly updated) use nixVersions.git, otherwise use nixVersions.latest.";
0309 }
310 )
311 )
···260 # depend on the components they need in `nixComponents_2_26`.
261 nix_2_26 = addTests "nix_2_26" self.nixComponents_2_26.nix-everything;
262000000000000263 latest = self.nix_2_26;
264265 # The minimum Nix version supported by Nixpkgs
···293 ) (lib.range 4 23)
294 )
295 // {
296+ unstable = throw "nixVersions.unstable has been removed. use nixVersions.latest or the nix flake.";
297+ git = throw "nixVersions.git has been removed. use nixVersions.latest or the nix flake.";
298 }
299 )
300 )
···508 fractal-next = fractal; # added 2023-11-25
509 framework-system-tools = framework-tool; # added 2023-12-09
510 francis = kdePackages.francis; # added 2024-07-13
00511 frostwire = throw "frostwire was removed, as it was broken due to reproducibility issues, use `frostwire-bin` package instead."; # added 2024-05-17
512 ftjam = throw "ftjam was removed, as it hasn't been updated since 2007 and fails to build"; # added 2025-01-02
513 fuse2fs = if stdenv.hostPlatform.isLinux then e2fsprogs.fuse2fs else null; # Added 2022-03-27 preserve, reason: convenience, arch has a package named fuse2fs too.
···644 graylog-4_0 = throw "graylog 4.x is EOL. Please consider downgrading nixpkgs if you need an upgrade from 4.x to latest series."; # Added 2023-10-09
645 graylog-4_3 = throw "graylog 4.x is EOL. Please consider downgrading nixpkgs if you need an upgrade from 4.x to latest series."; # Added 2023-10-09
646 graylog-5_0 = throw "graylog 5.0.x is EOL. Please consider downgrading nixpkgs if you need an upgrade from 5.0.x to latest series."; # Added 2024-02-15
00647 green-pdfviewer = throw "'green-pdfviewer' has been removed due to lack of maintenance upstream."; # Added 2024-12-04
648- graylog-5_1 = throw "graylog 5.1.x is EOL. Please consider downgrading nixpkgs if you need an upgrade from 5.1.x to latest series."; # Added 2024-10-16
649 gringo = clingo; # added 2022-11-27
650 grub2_full = grub2; # Added 2022-11-18
651 gtetrinet = throw "'gtetrinet' has been removed because it depends on GNOME 2 libraries"; # Added 2024-06-27
···1393 ### S ###
13941395 SDL_classic = SDL1; # Added 2024-09-03
01396 SDL_gpu = throw "'SDL_gpu' has been removed due to lack of upstream maintenance and known users"; # Added 2025-03-15
1397 s2n = throw "'s2n' has been renamed to/replaced by 's2n-tls'"; # Converted to throw 2024-10-17
1398 sandboxfs = throw "'sandboxfs' has been removed due to being unmaintained, consider using linux namespaces for sandboxing instead"; # Added 2024-06-06
···508 fractal-next = fractal; # added 2023-11-25
509 framework-system-tools = framework-tool; # added 2023-12-09
510 francis = kdePackages.francis; # added 2024-07-13
511+ freerdp3 = freerdp; # added 2025-03-25
512+ freerdpUnstable = freerdp; # added 2025-03-25
513 frostwire = throw "frostwire was removed, as it was broken due to reproducibility issues, use `frostwire-bin` package instead."; # added 2024-05-17
514 ftjam = throw "ftjam was removed, as it hasn't been updated since 2007 and fails to build"; # added 2025-01-02
515 fuse2fs = if stdenv.hostPlatform.isLinux then e2fsprogs.fuse2fs else null; # Added 2022-03-27 preserve, reason: convenience, arch has a package named fuse2fs too.
···646 graylog-4_0 = throw "graylog 4.x is EOL. Please consider downgrading nixpkgs if you need an upgrade from 4.x to latest series."; # Added 2023-10-09
647 graylog-4_3 = throw "graylog 4.x is EOL. Please consider downgrading nixpkgs if you need an upgrade from 4.x to latest series."; # Added 2023-10-09
648 graylog-5_0 = throw "graylog 5.0.x is EOL. Please consider downgrading nixpkgs if you need an upgrade from 5.0.x to latest series."; # Added 2024-02-15
649+ graylog-5_1 = throw "graylog 5.1.x is EOL. Please consider downgrading nixpkgs if you need an upgrade from 5.1.x to latest series."; # Added 2024-10-16
650+ graylog-5_2 = throw "graylog 5.2 is EOL. Please consider downgrading nixpkgs if you need an upgrade from 5.2 to latest series."; # Added 2025-03-21
651 green-pdfviewer = throw "'green-pdfviewer' has been removed due to lack of maintenance upstream."; # Added 2024-12-04
0652 gringo = clingo; # added 2022-11-27
653 grub2_full = grub2; # Added 2022-11-18
654 gtetrinet = throw "'gtetrinet' has been removed because it depends on GNOME 2 libraries"; # Added 2024-06-27
···1396 ### S ###
13971398 SDL_classic = SDL1; # Added 2024-09-03
1399+ SDL1 = throw "'SDL1' has been removed as development ended long ago with SDL 2.0 replacing it, use SDL_compat instead"; # Added 2025-03-27
1400 SDL_gpu = throw "'SDL_gpu' has been removed due to lack of upstream maintenance and known users"; # Added 2025-03-15
1401 s2n = throw "'s2n' has been renamed to/replaced by 's2n-tls'"; # Converted to throw 2024-10-17
1402 sandboxfs = throw "'sandboxfs' has been removed due to being unmaintained, consider using linux namespaces for sandboxing instead"; # Added 2024-06-06