···887887888888Use `--prefix` to explicitly set dependencies in `PATH`.
889889890890-:::{note}
890890+::: {.note}
891891`--prefix` essentially hard-codes dependencies into the wrapper.
892892They cannot be overridden without rebuilding the package.
893893:::
···13491349 the npm install step prunes dev dependencies.
13501350 </para>
13511351 </listitem>
13521352+ <listitem>
13531353+ <para>
13541354+ boot.kernel.sysctl is defined as a freeformType and adds a
13551355+ custom merge option for <quote>net.core.rmem_max</quote>
13561356+ (taking the highest value defined to avoid conflicts between 2
13571357+ services trying to set that value)
13581358+ </para>
13591359+ </listitem>
13521360 </itemizedlist>
13531361 </section>
13541362</section>
+2
nixos/doc/manual/release-notes/rl-2211.section.md
···403403404404- The `nodePackages` package set now defaults to the LTS release in the `nodejs` package again, instead of being pinned to `nodejs-14_x`. Several updates to node2nix have been made for compatibility with newer Node.js and npm versions and a new `postRebuild` hook has been added for packages to perform extra build steps before the npm install step prunes dev dependencies.
405405406406+- boot.kernel.sysctl is defined as a freeformType and adds a custom merge option for "net.core.rmem_max" (taking the highest value defined to avoid conflicts between 2 services trying to set that value)
407407+406408<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
+15-1
nixos/modules/config/sysctl.nix
···2121 options = {
22222323 boot.kernel.sysctl = mkOption {
2424+ type = types.submodule {
2525+ freeformType = types.attrsOf sysctlOption;
2626+ options."net.core.rmem_max" = mkOption {
2727+ type = types.nullOr types.ints.unsigned // {
2828+ merge = loc: defs:
2929+ foldl
3030+ (a: b: if b.value == null then null else lib.max a b.value)
3131+ 0
3232+ (filterOverrides defs);
3333+ };
3434+ default = null;
3535+ description = lib.mdDoc "The maximum socket receive buffer size. In case of conflicting values, the highest will be used.";
3636+ };
3737+ };
2438 default = {};
2539 example = literalExpression ''
2640 { "net.ipv4.tcp_syncookies" = false; "vm.swappiness" = 60; }
2741 '';
2828- type = types.attrsOf sysctlOption;
2942 description = lib.mdDoc ''
3043 Runtime parameters of the Linux kernel, as set by
3144 {manpage}`sysctl(8)`. Note that sysctl
···3548 parameter may be a string, integer, boolean, or null
3649 (signifying the option will not appear at all).
3750 '';
5151+3852 };
39534054 };
+1-1
nixos/modules/services/torrent/transmission.nix
···431431 # https://trac.transmissionbt.com/browser/trunk/libtransmission/tr-udp.c?rev=11956.
432432 # at least up to the values hardcoded here:
433433 (mkIf cfg.settings.utp-enabled {
434434- "net.core.rmem_max" = mkDefault "4194304"; # 4MB
434434+ "net.core.rmem_max" = mkDefault 4194304; # 4MB
435435 "net.core.wmem_max" = mkDefault "1048576"; # 1MB
436436 })
437437 (mkIf cfg.performanceNetParameters {
+54-3
nixos/modules/services/web-apps/invoiceplane.nix
···184184 '';
185185 };
186186187187+ cron = {
188188+189189+ enable = mkOption {
190190+ type = types.bool;
191191+ default = false;
192192+ description = lib.mdDoc ''
193193+ Enable cron service which periodically runs Invoiceplane tasks.
194194+ Requires key taken from the administration page. Refer to
195195+ <https://wiki.invoiceplane.com/en/1.0/modules/recurring-invoices>
196196+ on how to configure it.
197197+ '';
198198+ };
199199+200200+ key = mkOption {
201201+ type = types.str;
202202+ description = lib.mdDoc "Cron key taken from the administration page.";
203203+ };
204204+205205+ };
206206+187207 };
188208189209 };
···224244 }
225245 { assertion = cfg.database.createLocally -> cfg.database.passwordFile == null;
226246 message = ''services.invoiceplane.sites."${hostName}".database.passwordFile cannot be specified if services.invoiceplane.sites."${hostName}".database.createLocally is set to true.'';
227227- }]
228228- ) eachSite);
247247+ }
248248+ { assertion = cfg.cron.enable -> cfg.cron.key != null;
249249+ message = ''services.invoiceplane.sites."${hostName}".cron.key must be set in order to use cron service.'';
250250+ }
251251+ ]) eachSite);
229252230253 services.mysql = mkIf (any (v: v.database.createLocally) (attrValues eachSite)) {
231254 enable = true;
···255278 }
256279257280 {
281281+258282 systemd.tmpfiles.rules = flatten (mapAttrsToList (hostName: cfg: [
259283 "d ${cfg.stateDir} 0750 ${user} ${webserver.group} - -"
260284 "f ${cfg.stateDir}/ipconfig.php 0750 ${user} ${webserver.group} - -"
···284308 group = webserver.group;
285309 isSystemUser = true;
286310 };
311311+312312+ }
313313+ {
314314+315315+ # Cron service implementation
316316+317317+ systemd.timers = mapAttrs' (hostName: cfg: (
318318+ nameValuePair "invoiceplane-cron-${hostName}" (mkIf cfg.cron.enable {
319319+ wantedBy = [ "timers.target" ];
320320+ timerConfig = {
321321+ OnBootSec = "5m";
322322+ OnUnitActiveSec = "5m";
323323+ Unit = "invoiceplane-cron-${hostName}.service";
324324+ };
325325+ })
326326+ )) eachSite;
327327+328328+ systemd.services =
329329+ (mapAttrs' (hostName: cfg: (
330330+ nameValuePair "invoiceplane-cron-${hostName}" (mkIf cfg.cron.enable {
331331+ serviceConfig = {
332332+ Type = "oneshot";
333333+ User = user;
334334+ ExecStart = "${pkgs.curl}/bin/curl --header 'Host: ${hostName}' http://localhost/index.php/invoices/cron/recur/${cfg.cron.key}";
335335+ };
336336+ })
337337+ )) eachSite);
338338+287339 }
288340289341 (mkIf (cfg.webserver == "caddy") {
···301353 )) eachSite;
302354 };
303355 })
304304-305356306357 ]);
307358}
···11-diff --git a/toolchain/cc.in b/toolchain/cc.in
22-index 337562a..0ec9315 100644
33---- a/toolchain/cc.in
44-+++ b/toolchain/cc.in
55-@@ -30,9 +30,9 @@
66- # symbols.
77-88- prog="$(basename $0)"
99--I="$(dirname $0)/../include"
1010-+I="$(realpath $0 | xargs dirname)/../include"
1111- [ ! -d "${I}" ] && echo "$prog: Could not determine include path" 1>&2 && exit 1
1212--L="$(dirname $0)/../lib/@@CONFIG_TARGET_TRIPLE@@"
1313-+L="$(realpath $0 | xargs dirname)/../lib/@@CONFIG_TARGET_TRIPLE@@"
1414- [ ! -d "${L}" ] && echo "$prog: Could not determine library path" 1>&2 && exit 1
1515- # we can't really tell if 'cc' is called with no input, but work around the
1616- # most obvious cases and stop them from "succeeding" and producing an "a.out"
1717-diff --git a/toolchain/ld.in b/toolchain/ld.in
1818-index 01dffa8..13dca2c 100644
1919---- a/toolchain/ld.in
2020-+++ b/toolchain/ld.in
2121-@@ -28,7 +28,7 @@
2222- # linking a unikernel. No default for ABI is provided, as it is expected that a
2323- # caller directly using 'ld' knows what they are doing.
2424-2525--L="$(dirname $0)/../lib/@@CONFIG_TARGET_TRIPLE@@"
2626-+L="$(realpath $0 | xargs dirname)/../lib/@@CONFIG_TARGET_TRIPLE@@"
2727- [ ! -d "${L}" ] && echo "$0: Could not determine library path" 1>&2 && exit 1
2828- # ld accepts -z solo5-abi=ABI, but does not provide a default ABI
2929- # this is intentional
-22
pkgs/os-specific/solo5/test_sleep.patch
···11-diff --git a/tests/test_time/test_time.c b/tests/test_time/test_time.c
22-index 931500b..cde64ad 100644
33---- a/tests/test_time/test_time.c
44-+++ b/tests/test_time/test_time.c
55-@@ -110,7 +110,8 @@ int solo5_app_main(const struct solo5_start_info *si __attribute__((unused)))
66- /*
77- * Verify that we did not sleep less than requested (see above).
88- */
99-- if (delta < NSEC_PER_SEC) {
1010-+ const solo5_time_t slack = 100000000ULL;
1111-+ if (delta < NSEC_PER_SEC - slack) {
1212- printf("[%d] ERROR: slept too little (expected at least %llu ns)\n",
1313- iters, (unsigned long long)NSEC_PER_SEC);
1414- failed = true;
1515-@@ -120,7 +121,6 @@ int solo5_app_main(const struct solo5_start_info *si __attribute__((unused)))
1616- * Verify that we did not sleep more than requested, within reason
1717- * (scheduling delays, general inaccuracy of the current timing code).
1818- */
1919-- const solo5_time_t slack = 100000000ULL;
2020- if (delta > (NSEC_PER_SEC + slack)) {
2121- printf("[%d] ERROR: slept too much (expected at most %llu ns)\n",
2222- iters, (unsigned long long)slack);
···15631563 wormhole-rs = magic-wormhole-rs; # Added 2022-05-30. preserve, reason: Arch package name, main binary name
15641564 wmii_hg = wmii;
15651565 ws = throw "ws has been dropped due to the lack of maintenance from upstream since 2018"; # Added 2022-06-03
15661566+ wxGTK = throw "wxGTK28 has been removed from nixpkgs as it has reached end of life"; # Added 2022-11-04
15671567+ wxGTK28 = throw "wxGTK28 has been removed from nixpkgs as it has reached end of life"; # Added 2022-11-04
15681568+ wxGTK29 = throw "wxGTK29 has been removed from nixpkgs as it has reached end of life"; # Added 2022-11-04
15661569 wxGTK31-gtk2 = throw "'wxGTK31-gtk2' has been removed from nixpkgs as it depends on deprecated GTK2"; # Added 2022-10-27
15671570 wxGTK31-gtk3 = throw "'wxGTK31-gtk3' has been renamed to/replaced by 'wxGTK31'"; # Added 2022-10-27
15681571 wxmupen64plus = throw "wxmupen64plus was removed because the upstream disappeared"; # Added 2022-01-31