···96969797# nixos/*: add trivial defaultText for options with simple defaults
989825124556397ba17bfd70297000270de1e6523b0a
9999+100100+# systemd: rewrite comments
101101+92dfeb7b3dab820ae307c56c216d175c69ee93cd
102102+103103+# systemd: break too long lines of Nix code
104104+67643f8ec84bef1482204709073e417c9f07eb87
+1-1
COPYING
···11-Copyright (c) 2003-2023 Eelco Dolstra and the Nixpkgs/NixOS contributors
11+Copyright (c) 2003-2024 Eelco Dolstra and the Nixpkgs/NixOS contributors
2233Permission is hereby granted, free of charge, to any person obtaining
44a copy of this software and associated documentation files (the
+5-4
lib/attrsets.nix
···3344let
55 inherit (builtins) head tail length;
66- inherit (lib.trivial) id mergeAttrs;
66+ inherit (lib.trivial) id mergeAttrs warn;
77 inherit (lib.strings) concatStringsSep concatMapStringsSep escapeNixIdentifier sanitizeDerivationName;
88 inherit (lib.lists) foldr foldl' concatMap concatLists elemAt all partition groupBy take foldl;
99in
···11971197 (x // y) // mask;
1198119811991199 # DEPRECATED
12001200- zipWithNames = zipAttrsWithNames;
12001200+ zipWithNames = warn
12011201+ "lib.zipWithNames is a deprecated alias of lib.zipAttrsWithNames." zipAttrsWithNames;
1201120212021203 # DEPRECATED
12031203- zip = builtins.trace
12041204- "lib.zip is deprecated, use lib.zipAttrsWith instead" zipAttrsWith;
12041204+ zip = warn
12051205+ "lib.zip is a deprecated alias of lib.zipAttrsWith." zipAttrsWith;
12051206}
···379379 if ! isString text then throw "literalExpression expects a string."
380380 else { _type = "literalExpression"; inherit text; };
381381382382- literalExample = lib.warn "literalExample is deprecated, use literalExpression instead, or use literalMD for a non-Nix description." literalExpression;
382382+ literalExample = lib.warn "lib.literalExample is deprecated, use lib.literalExpression instead, or use lib.literalMD for a non-Nix description." literalExpression;
383383384384 /* Transition marker for documentation that's already migrated to markdown
385385 syntax. This is a no-op and no longer needed.
+2-2
lib/strings.nix
···561561 [""" "'" "<" ">" "&"];
562562563563 # warning added 12-12-2022
564564- replaceChars = lib.warn "replaceChars is a deprecated alias of replaceStrings, replace usages of it with replaceStrings." builtins.replaceStrings;
564564+ replaceChars = lib.warn "lib.replaceChars is a deprecated alias of lib.replaceStrings." builtins.replaceStrings;
565565566566 # Case conversion utilities.
567567 lowerChars = stringToCharacters "abcdefghijklmnopqrstuvwxyz";
···11331133 "/prefix/nix-profiles-library-paths.patch"
11341134 "/prefix/compose-search-path.patch" ]
11351135 */
11361136- readPathsFromFile = lib.warn "lib.readPathsFromFile is deprecated, use a list instead"
11361136+ readPathsFromFile = lib.warn "lib.readPathsFromFile is deprecated, use a list instead."
11371137 (rootPath: file:
11381138 let
11391139 lines = lib.splitString "\n" (readFile file);
+1
lib/systems/inspect.nix
···4848 isRiscV64 = { cpu = { family = "riscv"; bits = 64; }; };
4949 isRx = { cpu = { family = "rx"; }; };
5050 isSparc = { cpu = { family = "sparc"; }; };
5151+ isSparc64 = { cpu = { family = "sparc"; bits = 64; }; };
5152 isWasm = { cpu = { family = "wasm"; }; };
5253 isMsp430 = { cpu = { family = "msp430"; }; };
5354 isVc4 = { cpu = { family = "vc4"; }; };
+1-1
lib/trivial.nix
···230230 else if lib.pathExists revisionFile then lib.fileContents revisionFile
231231 else default;
232232233233- nixpkgsVersion = builtins.trace "`lib.nixpkgsVersion` is deprecated, use `lib.version` instead!" version;
233233+ nixpkgsVersion = warn "lib.nixpkgsVersion is a deprecated alias of lib.version." version;
234234235235 /* Determine whether the function is being called from inside a Nix
236236 shell.
···11+# Overlayfs {#sec-overlayfs}
22+33+NixOS offers a convenient abstraction to create both read-only as well writable
44+overlays.
55+66+```nix
77+fileSystems = {
88+ "/writable-overlay" = {
99+ overlay = {
1010+ lowerdir = [ writableOverlayLowerdir ];
1111+ upperdir = "/.rw-writable-overlay/upper";
1212+ workdir = "/.rw-writable-overlay/work";
1313+ };
1414+ # Mount the writable overlay in the initrd.
1515+ neededForBoot = true;
1616+ };
1717+ "/readonly-overlay".overlay.lowerdir = [
1818+ writableOverlayLowerdir
1919+ writableOverlayLowerdir2
2020+ ];
2121+};
2222+```
2323+2424+If `upperdir` and `workdir` are not null, they will be created before the
2525+overlay is mounted.
2626+2727+To mount an overlay as read-only, you need to provide at least two `lowerdir`s.
+20
nixos/doc/manual/release-notes/rl-2405.section.md
···8899<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
10101111+- `cryptsetup` has been upgraded from 2.6.1 to 2.7.0. Cryptsetup is a critical component enabling LUKS-based (but not only) full disk encryption.
1212+ Take the time to review [the release notes](https://gitlab.com/cryptsetup/cryptsetup/-/raw/v2.7.0/docs/v2.7.0-ReleaseNotes).
1313+ One of the highlight is that it is now possible to use hardware OPAL-based encryption of your disk with `cryptsetup`, it has a lot of caveats, see the above notes for the full details.
1414+1115- `screen`'s module has been cleaned, and will now require you to set `programs.screen.enable` in order to populate `screenrc` and add the program to the environment.
12161317- `linuxPackages_testing_bcachefs` is now fully deprecated by `linuxPackages_latest`, and is therefore no longer available.
···246250- `services.postgresql.extraPlugins` changed its type from just a list of packages to also a function that returns such a list.
247251 For example a config line like ``services.postgresql.extraPlugins = with pkgs.postgresql_11.pkgs; [ postgis ];`` is recommended to be changed to ``services.postgresql.extraPlugins = ps: with ps; [ postgis ];``;
248252253253+- The Matrix homeserver [Synapse](https://element-hq.github.io/synapse/) module now supports configuring UNIX domain socket [listeners](#opt-services.matrix-synapse.settings.listeners) through the `path` option.
254254+ The default replication worker on the main instance has been migrated away from TCP sockets to UNIX domain sockets.
255255+249256- Programs written in [Nim](https://nim-lang.org/) are built with libraries selected by lockfiles.
250257 The `nimPackages` and `nim2Packages` sets have been removed.
251258 See https://nixos.org/manual/nixpkgs/unstable#nim for more information.
···254261 This version of Portunus supports strong password hashes, but the legacy hash SHA-256 is also still supported to ensure a smooth migration of existing user accounts.
255262 After upgrading, follow the instructions on the [upstream release notes](https://github.com/majewsky/portunus/releases/tag/v2.0.0) to upgrade all user accounts to strong password hashes.
256263 Support for weak password hashes will be removed in NixOS 24.11.
264264+265265+- A stdenv's default set of hardening flags can now be set via its `bintools-wrapper`'s `defaultHardeningFlags` argument. A convenient stdenv adapter, `withDefaultHardeningFlags`, can be used to override an existing stdenv's `defaultHardeningFlags`.
257266258267- `libass` now uses the native CoreText backend on Darwin, which may fix subtitle rendering issues with `mpv`, `ffmpeg`, etc.
259268···272281- The option [`services.nextcloud.config.dbport`] of the Nextcloud module was removed to match upstream.
273282 The port can be specified in [`services.nextcloud.config.dbhost`](#opt-services.nextcloud.config.dbhost).
274283284284+- A new abstraction to create both read-only as well as writable overlay file
285285+ systems was added. Available via
286286+ [fileSystems.overlay](#opt-fileSystems._name_.overlay.lowerdir). See also the
287287+ [NixOS docs](#sec-overlayfs).
288288+275289- `stdenv`: The `--replace` flag in `substitute`, `substituteInPlace`, `substituteAll`, `substituteAllStream`, and `substituteStream` is now deprecated if favor of the new `--replace-fail`, `--replace-warn` and `--replace-quiet`. The deprecated `--replace` equates to `--replace-warn`.
290290+291291+- A new hardening flag, `zerocallusedregs` was made available, corresponding to the gcc/clang option `-fzero-call-used-regs=used-gpr`.
276292277293- New options were added to the dnsdist module to enable and configure a DNSCrypt endpoint (see `services.dnsdist.dnscrypt.enable`, etc.).
278294 The module can generate the DNSCrypt provider key pair, certificates and also performs their rotation automatically with no downtime.
···290306 `globalRedirect` can now have redirect codes other than 301 through
291307 `redirectCode`.
292308309309+- `libjxl` 0.9.0 [dropped support for the butteraugli API](https://github.com/libjxl/libjxl/pull/2576). You will no longer be able to set `enableButteraugli` on `libaom`.
310310+293311- The source of the `mockgen` package has changed to the [go.uber.org/mock](https://github.com/uber-go/mock) fork because [the original repository is no longer maintained](https://github.com/golang/mock#gomock).
294312295313- `security.pam.enableSSHAgentAuth` was renamed to `security.pam.sshAgentAuth.enable` and an `authorizedKeysFiles`
···297315 **which is insecure**: see [#31611](https://github.com/NixOS/nixpkgs/issues/31611).
298316299317- [](#opt-boot.kernel.sysctl._net.core.wmem_max_) changed from a string to an integer because of the addition of a custom merge option (taking the highest value defined to avoid conflicts between 2 services trying to set that value), just as [](#opt-boot.kernel.sysctl._net.core.rmem_max_) since 22.11.
318318+319319+- A new top-level package set, `pkgsExtraHardening` is added. This is a set of packages built with stricter hardening flags - those that have not yet received enough testing to be applied universally, those that are more likely to cause build failures or those that have drawbacks to their use (e.g. performance or required hardware features).
300320301321- `services.zfs.zed.enableMail` now uses the global `sendmail` wrapper defined by an email module
302322 (such as msmtp or Postfix). It no longer requires using a special ZFS build with email support.
+7
nixos/maintainers/scripts/ec2/README.md
···11+# Amazon images
22+33+* The `create-amis.sh` script will be replaced by https://github.com/NixOS/amis which will regularly upload AMIs per NixOS channel bump.
44+55+* @arianvp is planning to drop zfs support
66+* @arianvp is planning to rewrite the image builder to use the repart-based image builder.
77+
+2
nixos/maintainers/scripts/ec2/amazon-image.nix
···157157 '';
158158 };
159159 in if config.ec2.zfs.enable then zfsBuilder else extBuilder;
160160+161161+ meta.maintainers = with maintainers; [ arianvp ];
160162}
···126126Otherwise, or you can generate a registration secret with
127127{command}`pwgen -s 64 1` and set it with
128128[](#opt-services.matrix-synapse.settings.registration_shared_secret).
129129-To create a new user or admin, run the following after you have set the secret
130130-and have rebuilt NixOS:
129129+To create a new user or admin from the terminal your client listener
130130+must be configured to use TCP sockets. Then you can run the following
131131+after you have set the secret and have rebuilt NixOS:
131132```ShellSession
132133$ nix-shell -p matrix-synapse
133134$ register_new_matrix_user -k your-registration-shared-secret http://localhost:8008
+146-20
nixos/modules/services/matrix/synapse.nix
···66 cfg = config.services.matrix-synapse;
77 format = pkgs.formats.yaml { };
8899+ filterRecursiveNull = o:
1010+ if isAttrs o then
1111+ mapAttrs (_: v: filterRecursiveNull v) (filterAttrs (_: v: v != null) o)
1212+ else if isList o then
1313+ map filterRecursiveNull (filter (v: v != null) o)
1414+ else
1515+ o;
1616+917 # remove null values from the final configuration
1010- finalSettings = lib.filterAttrsRecursive (_: v: v != null) cfg.settings;
1818+ finalSettings = filterRecursiveNull cfg.settings;
1119 configFile = format.generate "homeserver.yaml" finalSettings;
12201321 usePostgresql = cfg.settings.database.name == "psycopg2";
···105113 SYSLOG_IDENTIFIER = logName;
106114 };
107115 });
116116+117117+ toIntBase8 = str:
118118+ lib.pipe str [
119119+ lib.stringToCharacters
120120+ (map lib.toInt)
121121+ (lib.foldl (acc: digit: acc * 8 + digit) 0)
122122+ ];
123123+124124+ toDecimalFilePermission = value:
125125+ if value == null then
126126+ null
127127+ else
128128+ toIntBase8 value;
108129in {
109130110131 imports = [
···192213 ];
193214194215 options = let
195195- listenerType = workerContext: types.submodule {
216216+ listenerType = workerContext: types.submodule ({ config, ... }: {
196217 options = {
197218 port = mkOption {
198198- type = types.port;
219219+ type = types.nullOr types.port;
220220+ default = null;
199221 example = 8448;
200222 description = lib.mdDoc ''
201223 The port to listen for HTTP(S) requests on.
···203225 };
204226205227 bind_addresses = mkOption {
206206- type = types.listOf types.str;
207207- default = [
228228+ type = types.nullOr (types.listOf types.str);
229229+ default = if config.path != null then null else [
208230 "::1"
209231 "127.0.0.1"
210232 ];
233233+ defaultText = literalExpression ''
234234+ if path != null then
235235+ null
236236+ else
237237+ [
238238+ "::1"
239239+ "127.0.0.1"
240240+ ]
241241+ '';
211242 example = literalExpression ''
212243 [
213244 "::"
···219250 '';
220251 };
221252253253+ path = mkOption {
254254+ type = types.nullOr types.path;
255255+ default = null;
256256+ description = ''
257257+ Unix domain socket path to bind this listener to.
258258+259259+ ::: {.note}
260260+ This option is incompatible with {option}`bind_addresses`, {option}`port`, {option}`tls`
261261+ and also does not support the `metrics` and `manhole` listener {option}`type`.
262262+ :::
263263+ '';
264264+ };
265265+266266+ mode = mkOption {
267267+ type = types.nullOr (types.strMatching "^[0,2-7]{3,4}$");
268268+ default = if config.path != null then "660" else null;
269269+ defaultText = literalExpression ''
270270+ if path != null then
271271+ "660"
272272+ else
273273+ null
274274+ '';
275275+ example = "660";
276276+ description = ''
277277+ File permissions on the UNIX domain socket.
278278+ '';
279279+ apply = toDecimalFilePermission;
280280+ };
281281+222282 type = mkOption {
223283 type = types.enum [
224284 "http"
···234294 };
235295236296 tls = mkOption {
237237- type = types.bool;
238238- default = !workerContext;
297297+ type = types.nullOr types.bool;
298298+ default = if config.path != null then
299299+ null
300300+ else
301301+ !workerContext;
302302+ defaultText = ''
303303+ Enabled for the main instance listener, unless it is configured with a UNIX domain socket path.
304304+ '';
239305 example = false;
240306 description = lib.mdDoc ''
241307 Whether to enable TLS on the listener socket.
308308+309309+ ::: {.note}
310310+ This option will be ignored for UNIX domain sockets.
311311+ :::
242312 '';
243313 };
244314245315 x_forwarded = mkOption {
246316 type = types.bool;
247247- default = false;
317317+ default = config.path != null;
318318+ defaultText = ''
319319+ Enabled if the listener is configured with a UNIX domain socket path
320320+ '';
248321 example = true;
249322 description = lib.mdDoc ''
250323 Use the X-Forwarded-For (XFF) header as the client IP and not the
···291364 '';
292365 };
293366 };
294294- };
367367+ });
295368 in {
296369 services.matrix-synapse = {
297370 enable = mkEnableOption (lib.mdDoc "matrix.org synapse");
298371372372+ enableRegistrationScript = mkOption {
373373+ type = types.bool;
374374+ default = clientListener.bind_addresses != [];
375375+ example = false;
376376+ defaultText = ''
377377+ Enabled if the client listener uses TCP sockets
378378+ '';
379379+ description = ''
380380+ Whether to install the `register_new_matrix_user` script, that
381381+ allows account creation on the terminal.
382382+383383+ ::: {.note}
384384+ This script does not work when the client listener uses UNIX domain sockets
385385+ :::
386386+ '';
387387+ };
388388+299389 serviceUnit = lib.mkOption {
300390 type = lib.types.str;
301391 readOnly = true;
···616706 compress = false;
617707 }];
618708 }] ++ lib.optional hasWorkers {
619619- port = 9093;
620620- bind_addresses = [ "127.0.0.1" ];
709709+ path = "/run/matrix-synapse/main_replication.sock";
621710 type = "http";
622622- tls = false;
623623- x_forwarded = false;
624711 resources = [{
625712 names = [ "replication" ];
626713 compress = false;
···630717 List of ports that Synapse should listen on, their purpose and their configuration.
631718632719 By default, synapse will be configured for client and federation traffic on port 8008, and
633633- for worker replication traffic on port 9093. See [`services.matrix-synapse.workers`](#opt-services.matrix-synapse.workers)
720720+ use a UNIX domain socket for worker replication. See [`services.matrix-synapse.workers`](#opt-services.matrix-synapse.workers)
634721 for more details.
635722 '';
636723 };
···10061093 listener = lib.findFirst
10071094 (
10081095 listener:
10091009- listener.port == main.port
10961096+ (
10971097+ lib.hasAttr "port" main && listener.port or null == main.port
10981098+ || lib.hasAttr "path" main && listener.path or null == main.path
10991099+ )
10101100 && listenerSupportsResource "replication" listener
10111011- && (lib.any (bind: bind == main.host || bind == "0.0.0.0" || bind == "::") listener.bind_addresses)
11011101+ && (
11021102+ lib.hasAttr "host" main && lib.any (bind: bind == main.host || bind == "0.0.0.0" || bind == "::") listener.bind_addresses
11031103+ || lib.hasAttr "path" main
11041104+ )
10121105 )
10131106 null
10141107 cfg.settings.listeners;
···10221115 This is done by default unless you manually configure either of those settings.
10231116 '';
10241117 }
10251025- ];
11181118+ {
11191119+ assertion = cfg.enableRegistrationScript -> clientListener.path == null;
11201120+ message = ''
11211121+ The client listener on matrix-synapse is configured to use UNIX domain sockets.
11221122+ This configuration is incompatible with the `register_new_matrix_user` script.
11231123+11241124+ Disable `services.mastrix-synapse.enableRegistrationScript` to continue.
11251125+ '';
11261126+ }
11271127+ ]
11281128+ ++ (map (listener: {
11291129+ assertion = (listener.path == null) != (listener.bind_addresses == null);
11301130+ message = ''
11311131+ Listeners require either a UNIX domain socket `path` or `bind_addresses` for a TCP socket.
11321132+ '';
11331133+ }) cfg.settings.listeners)
11341134+ ++ (map (listener: {
11351135+ assertion = listener.path != null -> (listener.bind_addresses == null && listener.port == null && listener.tls == null);
11361136+ message = let
11371137+ formatKeyValue = key: value: lib.optionalString (value != null) " - ${key}=${toString value}\n";
11381138+ in ''
11391139+ Listener configured with UNIX domain socket (${toString listener.path}) ignores the following options:
11401140+ ${formatKeyValue "bind_addresses" listener.bind_addresses}${formatKeyValue "port" listener.port}${formatKeyValue "tls" listener.tls}
11411141+ '';
11421142+ }) cfg.settings.listeners)
11431143+ ++ (map (listener: {
11441144+ assertion = listener.path == null || listener.type == "http";
11451145+ message = ''
11461146+ Listener configured with UNIX domain socket (${toString listener.path}) only supports the "http" listener type.
11471147+ '';
11481148+ }) cfg.settings.listeners);
1026114910271150 services.matrix-synapse.settings.redis = lib.mkIf cfg.configureRedisLocally {
10281151 enabled = true;
10291152 path = config.services.redis.servers.matrix-synapse.unixSocket;
10301153 };
10311154 services.matrix-synapse.settings.instance_map.main = lib.mkIf hasWorkers (lib.mkDefault {
10321032- host = "127.0.0.1";
10331033- port = 9093;
11551155+ path = "/run/matrix-synapse/main_replication.sock";
10341156 });
1035115710361158 services.matrix-synapse.serviceUnit = if hasWorkers then "matrix-synapse.target" else "matrix-synapse.service";
···10861208 User = "matrix-synapse";
10871209 Group = "matrix-synapse";
10881210 WorkingDirectory = cfg.dataDir;
12111211+ RuntimeDirectory = "matrix-synapse";
12121212+ RuntimeDirectoryPreserve = true;
10891213 ExecReload = "${pkgs.util-linux}/bin/kill -HUP $MAINPID";
10901214 Restart = "on-failure";
10911215 UMask = "0077";
···11781302 user = "matrix-synapse";
11791303 };
1180130411811181- environment.systemPackages = [ registerNewMatrixUser ];
13051305+ environment.systemPackages = lib.optionals cfg.enableRegistrationScript [
13061306+ registerNewMatrixUser
13071307+ ];
11821308 };
1183130911841310 meta = {
+1-2
nixos/modules/services/misc/nix-gc.nix
···6464 example = "--max-freed $((64 * 1024**3))";
6565 type = lib.types.singleLineStr;
6666 description = lib.mdDoc ''
6767- Options given to {file}`nix-collect-garbage` when the
6868- garbage collector is run automatically.
6767+ Options given to [`nix-collect-garbage`](https://nixos.org/manual/nix/stable/command-ref/nix-collect-garbage) when the garbage collector is run automatically.
6968 '';
7069 };
7170
···701701 type = types.listOf types.str;
702702 default = [];
703703 example = [ "-vga std" ];
704704- description = lib.mdDoc "Options passed to QEMU.";
704704+ description = lib.mdDoc ''
705705+ Options passed to QEMU.
706706+ See [QEMU User Documentation](https://www.qemu.org/docs/master/system/qemu-manpage) for a complete list.
707707+ '';
705708 };
706709707710 consoles = mkOption {
···732735 description = lib.mdDoc ''
733736 Networking-related command-line options that should be passed to qemu.
734737 The default is to use userspace networking (SLiRP).
738738+ See the [QEMU Wiki on Networking](https://wiki.qemu.org/Documentation/Networking) for details.
735739736740 If you override this option, be advised to keep
737741 ''${QEMU_NET_OPTS:+,$QEMU_NET_OPTS} (as seen in the example)
···10661070 ''}
10671071 '';
1068107210691069- systemd.tmpfiles.rules = lib.mkIf config.boot.initrd.systemd.enable [
10701070- "f /etc/NIXOS 0644 root root -"
10711071- "d /boot 0644 root root -"
10721072- ];
10731073+ systemd.tmpfiles.settings."10-qemu-vm" = lib.mkIf config.boot.initrd.systemd.enable {
10741074+ "/etc/NIXOS".f = {
10751075+ mode = "0644";
10761076+ user = "root";
10771077+ group = "root";
10781078+ };
10791079+ "${config.boot.loader.efi.efiSysMountPoint}".d = {
10801080+ mode = "0644";
10811081+ user = "root";
10821082+ group = "root";
10831083+ };
10841084+ };
1073108510741086 # After booting, register the closure of the paths in
10751087 # `virtualisation.additionalPaths' in the Nix database in the VM. This
···3232fi
33333434if (( "${NIX_DEBUG:-0}" >= 1 )); then
3535- declare -a allHardeningFlags=(fortify fortify3 stackprotector pie pic strictoverflow format)
3535+ declare -a allHardeningFlags=(fortify fortify3 stackprotector pie pic strictoverflow format zerocallusedregs)
3636 declare -A hardeningDisableMap=()
37373838 # Determine which flags were effectively disabled so we can report below.
···109109 format)
110110 if (( "${NIX_DEBUG:-0}" >= 1 )); then echo HARDENING: enabling format >&2; fi
111111 hardeningCFlagsBefore+=('-Wformat' '-Wformat-security' '-Werror=format-security')
112112+ ;;
113113+ zerocallusedregs)
114114+ if (( "${NIX_DEBUG:-0}" >= 1 )); then echo HARDENING: enabling zerocallusedregs >&2; fi
115115+ hardeningCFlagsBefore+=('-fzero-call-used-regs=used-gpr')
112116 ;;
113117 *)
114118 # Ignore unsupported. Checked in Nix that at least *some*
+10-1
pkgs/build-support/cc-wrapper/default.nix
···223223224224 defaultHardeningFlags = bintools.defaultHardeningFlags or [];
225225226226+ # if cc.hardeningUnsupportedFlagsByTargetPlatform exists, this is
227227+ # called with the targetPlatform as an argument and
228228+ # cc.hardeningUnsupportedFlags is completely ignored - the function
229229+ # is responsible for including the constant hardeningUnsupportedFlags
230230+ # list however it sees fit.
231231+ ccHardeningUnsupportedFlags = if cc ? hardeningUnsupportedFlagsByTargetPlatform
232232+ then cc.hardeningUnsupportedFlagsByTargetPlatform targetPlatform
233233+ else (cc.hardeningUnsupportedFlags or []);
234234+226235 darwinPlatformForCC = optionalString stdenv.targetPlatform.isDarwin (
227236 if (targetPlatform.darwinPlatform == "macos" && isGNU) then "macosx"
228237 else targetPlatform.darwinPlatform
···584593 ## Hardening support
585594 ##
586595 + ''
587587- export hardening_unsupported_flags="${builtins.concatStringsSep " " (cc.hardeningUnsupportedFlags or [])}"
596596+ export hardening_unsupported_flags="${builtins.concatStringsSep " " ccHardeningUnsupportedFlags}"
588597 ''
589598590599 # Machine flags. These are necessary to support
···11+{
22+ lib,
33+ buildNimPackage,
44+ fetchFromGitHub,
55+}:
66+buildNimPackage (final: prev: {
77+ pname = "nimlangserver";
88+ version = "1.2.0";
99+1010+ # lock.json was generated by converting
1111+ # nimble.lock into requires "<gitUrl>#revSha" in a dummy.nimble
1212+ # for all packages and then running nim_lk on said dummy package
1313+ # default nim_lk output fails because it attempts
1414+ # to use branches that will not work instead of HEAD for packages
1515+ lockFile = ./lock.json;
1616+1717+ src = fetchFromGitHub {
1818+ owner = "nim-lang";
1919+ repo = "langserver";
2020+ rev = "71b59bfa77dabf6b8b381f6e18a1d963a1a658fc";
2121+ hash = "sha256-dznegEhRHvztrNhBcUhW83RYgJpduwdGLWj/tJ//K8c=";
2222+ };
2323+2424+ doCheck = false;
2525+2626+ meta = with lib;
2727+ final.src.meta
2828+ // {
2929+ description = "The Nim language server implementation (based on nimsuggest)";
3030+ license = licenses.mit;
3131+ mainProgram = "nimlangserver";
3232+ maintainers = with maintainers; [daylinmorgan];
3333+ };
3434+})
···11-REVERT https://github.com/python/cpython/commit/300d812fd1c4d9244e71de0d228cc72439d312a7
22---- b/Doc/library/asyncio-eventloop.rst
33-+++ a/Doc/library/asyncio-eventloop.rst
44-@@ -43,12 +43,10 @@
55-66- Get the current event loop.
77-88-+ If there is no current event loop set in the current OS thread,
99-+ the OS thread is main, and :func:`set_event_loop` has not yet
1010-+ been called, asyncio will create a new event loop and set it as the
1111-+ current one.
1212-- When called from a coroutine or a callback (e.g. scheduled with
1313-- call_soon or similar API), this function will always return the
1414-- running event loop.
1515--
1616-- If there is no running event loop set, the function will return
1717-- the result of ``get_event_loop_policy().get_event_loop()`` call.
1818-1919- Because this function has rather complex behavior (especially
2020- when custom event loop policies are in use), using the
2121-@@ -60,14 +58,10 @@
2222- event loop.
2323-2424- .. deprecated:: 3.10
2525-+ Emits a deprecation warning if there is no running event loop.
2626-+ In future Python releases, this function may become an alias of
2727-+ :func:`get_running_loop` and will accordingly raise a
2828-+ :exc:`RuntimeError` if there is no running event loop.
2929-- Deprecation warning is emitted if there is no current event loop.
3030-- In Python 3.12 it will be an error.
3131--
3232-- .. note::
3333-- In Python versions 3.10.0--3.10.8 this function
3434-- (and other functions which used it implicitly) emitted a
3535-- :exc:`DeprecationWarning` if there was no running event loop, even if
3636-- the current loop was set.
3737-3838- .. function:: set_event_loop(loop)
3939-4040-reverted:
4141---- b/Doc/library/asyncio-llapi-index.rst
4242-+++ a/Doc/library/asyncio-llapi-index.rst
4343-@@ -19,7 +19,7 @@
4444- - The **preferred** function to get the running event loop.
4545-4646- * - :func:`asyncio.get_event_loop`
4747-+ - Get an event loop instance (current or via the policy).
4848-- - Get an event loop instance (running or current via the current policy).
4949-5050- * - :func:`asyncio.set_event_loop`
5151- - Set the event loop as current via the current policy.
5252-reverted:
5353---- b/Doc/library/asyncio-policy.rst
5454-+++ a/Doc/library/asyncio-policy.rst
5555-@@ -112,11 +112,6 @@
5656-5757- On Windows, :class:`ProactorEventLoop` is now used by default.
5858-5959-- .. deprecated:: 3.10.9
6060-- :meth:`get_event_loop` now emits a :exc:`DeprecationWarning` if there
6161-- is no current event loop set and a new event loop has been implicitly
6262-- created. In Python 3.12 it will be an error.
6363--
6464-6565- .. class:: WindowsSelectorEventLoopPolicy
6666-6767-reverted:
6868---- b/Lib/asyncio/events.py
6969-+++ a/Lib/asyncio/events.py
7070-@@ -650,21 +650,6 @@
7171- if (self._local._loop is None and
7272- not self._local._set_called and
7373- threading.current_thread() is threading.main_thread()):
7474-- stacklevel = 2
7575-- try:
7676-- f = sys._getframe(1)
7777-- except AttributeError:
7878-- pass
7979-- else:
8080-- while f:
8181-- module = f.f_globals.get('__name__')
8282-- if not (module == 'asyncio' or module.startswith('asyncio.')):
8383-- break
8484-- f = f.f_back
8585-- stacklevel += 1
8686-- import warnings
8787-- warnings.warn('There is no current event loop',
8888-- DeprecationWarning, stacklevel=stacklevel)
8989- self.set_event_loop(self.new_event_loop())
9090-9191- if self._local._loop is None:
9292-@@ -778,13 +763,12 @@
9393-9494-9595- def _get_event_loop(stacklevel=3):
9696-- # This internal method is going away in Python 3.12, left here only for
9797-- # backwards compatibility with 3.10.0 - 3.10.8 and 3.11.0.
9898-- # Similarly, this method's C equivalent in _asyncio is going away as well.
9999-- # See GH-99949 for more details.
100100- current_loop = _get_running_loop()
101101- if current_loop is not None:
102102- return current_loop
103103-+ import warnings
104104-+ warnings.warn('There is no current event loop',
105105-+ DeprecationWarning, stacklevel=stacklevel)
106106- return get_event_loop_policy().get_event_loop()
107107-108108-109109-reverted:
110110---- b/Lib/test/test_asyncio/test_base_events.py
111111-+++ a/Lib/test/test_asyncio/test_base_events.py
112112-@@ -752,7 +752,7 @@
113113- def test_env_var_debug(self):
114114- code = '\n'.join((
115115- 'import asyncio',
116116-+ 'loop = asyncio.get_event_loop()',
117117-- 'loop = asyncio.new_event_loop()',
118118- 'print(loop.get_debug())'))
119119-120120- # Test with -E to not fail if the unit test was run with
121121-reverted:
122122---- b/Lib/test/test_asyncio/test_events.py
123123-+++ a/Lib/test/test_asyncio/test_events.py
124124-@@ -2561,9 +2561,8 @@
125125- def test_get_event_loop(self):
126126- policy = asyncio.DefaultEventLoopPolicy()
127127- self.assertIsNone(policy._local._loop)
128128-+
129129-+ loop = policy.get_event_loop()
130130-- with self.assertWarns(DeprecationWarning) as cm:
131131-- loop = policy.get_event_loop()
132132-- self.assertEqual(cm.filename, __file__)
133133- self.assertIsInstance(loop, asyncio.AbstractEventLoop)
134134-135135- self.assertIs(policy._local._loop, loop)
136136-@@ -2577,10 +2576,7 @@
137137- policy, "set_event_loop",
138138- wraps=policy.set_event_loop) as m_set_event_loop:
139139-140140-+ loop = policy.get_event_loop()
141141-- with self.assertWarns(DeprecationWarning) as cm:
142142-- loop = policy.get_event_loop()
143143-- self.addCleanup(loop.close)
144144-- self.assertEqual(cm.filename, __file__)
145145-146146- # policy._local._loop must be set through .set_event_loop()
147147- # (the unix DefaultEventLoopPolicy needs this call to attach
148148-@@ -2614,8 +2610,7 @@
149149-150150- def test_set_event_loop(self):
151151- policy = asyncio.DefaultEventLoopPolicy()
152152-+ old_loop = policy.get_event_loop()
153153-- old_loop = policy.new_event_loop()
154154-- policy.set_event_loop(old_loop)
155155-156156- self.assertRaises(AssertionError, policy.set_event_loop, object())
157157-158158-@@ -2728,11 +2723,15 @@
159159- asyncio.set_event_loop_policy(Policy())
160160- loop = asyncio.new_event_loop()
161161-162162-+ with self.assertWarns(DeprecationWarning) as cm:
163163-+ with self.assertRaises(TestError):
164164-+ asyncio.get_event_loop()
165165-+ self.assertEqual(cm.warnings[0].filename, __file__)
166166-- with self.assertRaises(TestError):
167167-- asyncio.get_event_loop()
168168- asyncio.set_event_loop(None)
169169-+ with self.assertWarns(DeprecationWarning) as cm:
170170-+ with self.assertRaises(TestError):
171171-+ asyncio.get_event_loop()
172172-+ self.assertEqual(cm.warnings[0].filename, __file__)
173173-- with self.assertRaises(TestError):
174174-- asyncio.get_event_loop()
175175-176176- with self.assertRaisesRegex(RuntimeError, 'no running'):
177177- asyncio.get_running_loop()
178178-@@ -2746,11 +2745,16 @@
179179- loop.run_until_complete(func())
180180-181181- asyncio.set_event_loop(loop)
182182-+ with self.assertWarns(DeprecationWarning) as cm:
183183-+ with self.assertRaises(TestError):
184184-+ asyncio.get_event_loop()
185185-+ self.assertEqual(cm.warnings[0].filename, __file__)
186186-+
187187-- with self.assertRaises(TestError):
188188-- asyncio.get_event_loop()
189189- asyncio.set_event_loop(None)
190190-+ with self.assertWarns(DeprecationWarning) as cm:
191191-+ with self.assertRaises(TestError):
192192-+ asyncio.get_event_loop()
193193-+ self.assertEqual(cm.warnings[0].filename, __file__)
194194-- with self.assertRaises(TestError):
195195-- asyncio.get_event_loop()
196196-197197- finally:
198198- asyncio.set_event_loop_policy(old_policy)
199199-@@ -2774,8 +2778,10 @@
200200- self.addCleanup(loop2.close)
201201- self.assertEqual(cm.warnings[0].filename, __file__)
202202- asyncio.set_event_loop(None)
203203-+ with self.assertWarns(DeprecationWarning) as cm:
204204-+ with self.assertRaisesRegex(RuntimeError, 'no current'):
205205-+ asyncio.get_event_loop()
206206-+ self.assertEqual(cm.warnings[0].filename, __file__)
207207-- with self.assertRaisesRegex(RuntimeError, 'no current'):
208208-- asyncio.get_event_loop()
209209-210210- with self.assertRaisesRegex(RuntimeError, 'no running'):
211211- asyncio.get_running_loop()
212212-@@ -2789,11 +2795,15 @@
213213- loop.run_until_complete(func())
214214-215215- asyncio.set_event_loop(loop)
216216-+ with self.assertWarns(DeprecationWarning) as cm:
217217-+ self.assertIs(asyncio.get_event_loop(), loop)
218218-+ self.assertEqual(cm.warnings[0].filename, __file__)
219219-- self.assertIs(asyncio.get_event_loop(), loop)
220220-221221- asyncio.set_event_loop(None)
222222-+ with self.assertWarns(DeprecationWarning) as cm:
223223-+ with self.assertRaisesRegex(RuntimeError, 'no current'):
224224-+ asyncio.get_event_loop()
225225-+ self.assertEqual(cm.warnings[0].filename, __file__)
226226-- with self.assertRaisesRegex(RuntimeError, 'no current'):
227227-- asyncio.get_event_loop()
228228-229229- finally:
230230- asyncio.set_event_loop_policy(old_policy)
231231-reverted:
232232---- b/Lib/test/test_asyncio/test_futures.py
233233-+++ a/Lib/test/test_asyncio/test_futures.py
234234-@@ -145,8 +145,10 @@
235235- self.assertTrue(f.cancelled())
236236-237237- def test_constructor_without_loop(self):
238238-+ with self.assertWarns(DeprecationWarning) as cm:
239239-+ with self.assertRaisesRegex(RuntimeError, 'There is no current event loop'):
240240-+ self._new_future()
241241-+ self.assertEqual(cm.warnings[0].filename, __file__)
242242-- with self.assertRaisesRegex(RuntimeError, 'no current event loop'):
243243-- self._new_future()
244244-245245- def test_constructor_use_running_loop(self):
246246- async def test():
247247-@@ -156,10 +158,12 @@
248248- self.assertIs(f.get_loop(), self.loop)
249249-250250- def test_constructor_use_global_loop(self):
251251-+ # Deprecated in 3.10
252252-- # Deprecated in 3.10, undeprecated in 3.11.1
253253- asyncio.set_event_loop(self.loop)
254254- self.addCleanup(asyncio.set_event_loop, None)
255255-+ with self.assertWarns(DeprecationWarning) as cm:
256256-+ f = self._new_future()
257257-+ self.assertEqual(cm.warnings[0].filename, __file__)
258258-- f = self._new_future()
259259- self.assertIs(f._loop, self.loop)
260260- self.assertIs(f.get_loop(), self.loop)
261261-262262-@@ -495,8 +499,10 @@
263263- return (arg, threading.get_ident())
264264- ex = concurrent.futures.ThreadPoolExecutor(1)
265265- f1 = ex.submit(run, 'oi')
266266-+ with self.assertWarns(DeprecationWarning) as cm:
267267-+ with self.assertRaises(RuntimeError):
268268-+ asyncio.wrap_future(f1)
269269-+ self.assertEqual(cm.warnings[0].filename, __file__)
270270-- with self.assertRaisesRegex(RuntimeError, 'no current event loop'):
271271-- asyncio.wrap_future(f1)
272272- ex.shutdown(wait=True)
273273-274274- def test_wrap_future_use_running_loop(self):
275275-@@ -511,14 +517,16 @@
276276- ex.shutdown(wait=True)
277277-278278- def test_wrap_future_use_global_loop(self):
279279-+ # Deprecated in 3.10
280280-- # Deprecated in 3.10, undeprecated in 3.11.1
281281- asyncio.set_event_loop(self.loop)
282282- self.addCleanup(asyncio.set_event_loop, None)
283283- def run(arg):
284284- return (arg, threading.get_ident())
285285- ex = concurrent.futures.ThreadPoolExecutor(1)
286286- f1 = ex.submit(run, 'oi')
287287-+ with self.assertWarns(DeprecationWarning) as cm:
288288-+ f2 = asyncio.wrap_future(f1)
289289-+ self.assertEqual(cm.warnings[0].filename, __file__)
290290-- f2 = asyncio.wrap_future(f1)
291291- self.assertIs(self.loop, f2._loop)
292292- ex.shutdown(wait=True)
293293-294294-reverted:
295295---- b/Lib/test/test_asyncio/test_streams.py
296296-+++ a/Lib/test/test_asyncio/test_streams.py
297297-@@ -747,8 +747,10 @@
298298- self.assertEqual(data, b'data')
299299-300300- def test_streamreader_constructor_without_loop(self):
301301-+ with self.assertWarns(DeprecationWarning) as cm:
302302-+ with self.assertRaisesRegex(RuntimeError, 'There is no current event loop'):
303303-+ asyncio.StreamReader()
304304-+ self.assertEqual(cm.warnings[0].filename, __file__)
305305-- with self.assertRaisesRegex(RuntimeError, 'no current event loop'):
306306-- asyncio.StreamReader()
307307-308308- def test_streamreader_constructor_use_running_loop(self):
309309- # asyncio issue #184: Ensure that StreamReaderProtocol constructor
310310-@@ -762,17 +764,21 @@
311311- def test_streamreader_constructor_use_global_loop(self):
312312- # asyncio issue #184: Ensure that StreamReaderProtocol constructor
313313- # retrieves the current loop if the loop parameter is not set
314314-+ # Deprecated in 3.10
315315-- # Deprecated in 3.10, undeprecated in 3.11.1
316316- self.addCleanup(asyncio.set_event_loop, None)
317317- asyncio.set_event_loop(self.loop)
318318-+ with self.assertWarns(DeprecationWarning) as cm:
319319-+ reader = asyncio.StreamReader()
320320-+ self.assertEqual(cm.warnings[0].filename, __file__)
321321-- reader = asyncio.StreamReader()
322322- self.assertIs(reader._loop, self.loop)
323323-324324-325325- def test_streamreaderprotocol_constructor_without_loop(self):
326326- reader = mock.Mock()
327327-+ with self.assertWarns(DeprecationWarning) as cm:
328328-+ with self.assertRaisesRegex(RuntimeError, 'There is no current event loop'):
329329-+ asyncio.StreamReaderProtocol(reader)
330330-+ self.assertEqual(cm.warnings[0].filename, __file__)
331331-- with self.assertRaisesRegex(RuntimeError, 'no current event loop'):
332332-- asyncio.StreamReaderProtocol(reader)
333333-334334- def test_streamreaderprotocol_constructor_use_running_loop(self):
335335- # asyncio issue #184: Ensure that StreamReaderProtocol constructor
336336-@@ -786,11 +792,13 @@
337337- def test_streamreaderprotocol_constructor_use_global_loop(self):
338338- # asyncio issue #184: Ensure that StreamReaderProtocol constructor
339339- # retrieves the current loop if the loop parameter is not set
340340-+ # Deprecated in 3.10
341341-- # Deprecated in 3.10, undeprecated in 3.11.1
342342- self.addCleanup(asyncio.set_event_loop, None)
343343- asyncio.set_event_loop(self.loop)
344344- reader = mock.Mock()
345345-+ with self.assertWarns(DeprecationWarning) as cm:
346346-+ protocol = asyncio.StreamReaderProtocol(reader)
347347-+ self.assertEqual(cm.warnings[0].filename, __file__)
348348-- protocol = asyncio.StreamReaderProtocol(reader)
349349- self.assertIs(protocol._loop, self.loop)
350350-351351- def test_multiple_drain(self):
352352-reverted:
353353---- b/Lib/test/test_asyncio/test_tasks.py
354354-+++ a/Lib/test/test_asyncio/test_tasks.py
355355-@@ -210,8 +210,10 @@
356356-357357- a = notmuch()
358358- self.addCleanup(a.close)
359359-+ with self.assertWarns(DeprecationWarning) as cm:
360360-+ with self.assertRaisesRegex(RuntimeError, 'There is no current event loop'):
361361-+ asyncio.ensure_future(a)
362362-+ self.assertEqual(cm.warnings[0].filename, __file__)
363363-- with self.assertRaisesRegex(RuntimeError, 'no current event loop'):
364364-- asyncio.ensure_future(a)
365365-366366- async def test():
367367- return asyncio.ensure_future(notmuch())
368368-@@ -221,10 +223,12 @@
369369- self.assertTrue(t.done())
370370- self.assertEqual(t.result(), 'ok')
371371-372372-+ # Deprecated in 3.10
373373-- # Deprecated in 3.10.0, undeprecated in 3.10.9
374374- asyncio.set_event_loop(self.loop)
375375- self.addCleanup(asyncio.set_event_loop, None)
376376-+ with self.assertWarns(DeprecationWarning) as cm:
377377-+ t = asyncio.ensure_future(notmuch())
378378-+ self.assertEqual(cm.warnings[0].filename, __file__)
379379-- t = asyncio.ensure_future(notmuch())
380380- self.assertIs(t._loop, self.loop)
381381- self.loop.run_until_complete(t)
382382- self.assertTrue(t.done())
383383-@@ -243,8 +247,10 @@
384384-385385- a = notmuch()
386386- self.addCleanup(a.close)
387387-+ with self.assertWarns(DeprecationWarning) as cm:
388388-+ with self.assertRaisesRegex(RuntimeError, 'There is no current event loop'):
389389-+ asyncio.ensure_future(a)
390390-+ self.assertEqual(cm.warnings[0].filename, __file__)
391391-- with self.assertRaisesRegex(RuntimeError, 'There is no current event loop'):
392392-- asyncio.ensure_future(a)
393393-394394- async def test():
395395- return asyncio.ensure_future(notmuch())
396396-@@ -254,10 +260,12 @@
397397- self.assertTrue(t.done())
398398- self.assertEqual(t.result(), 'ok')
399399-400400-+ # Deprecated in 3.10
401401-- # Deprecated in 3.10.0, undeprecated in 3.10.9
402402- asyncio.set_event_loop(self.loop)
403403- self.addCleanup(asyncio.set_event_loop, None)
404404-+ with self.assertWarns(DeprecationWarning) as cm:
405405-+ t = asyncio.ensure_future(notmuch())
406406-+ self.assertEqual(cm.warnings[0].filename, __file__)
407407-- t = asyncio.ensure_future(notmuch())
408408- self.assertIs(t._loop, self.loop)
409409- self.loop.run_until_complete(t)
410410- self.assertTrue(t.done())
411411-@@ -1480,8 +1488,10 @@
412412- self.addCleanup(a.close)
413413-414414- futs = asyncio.as_completed([a])
415415-+ with self.assertWarns(DeprecationWarning) as cm:
416416-+ with self.assertRaisesRegex(RuntimeError, 'There is no current event loop'):
417417-+ list(futs)
418418-+ self.assertEqual(cm.warnings[0].filename, __file__)
419419-- with self.assertRaisesRegex(RuntimeError, 'no current event loop'):
420420-- list(futs)
421421-422422- def test_as_completed_coroutine_use_running_loop(self):
423423- loop = self.new_test_loop()
424424-@@ -1497,14 +1507,17 @@
425425- loop.run_until_complete(test())
426426-427427- def test_as_completed_coroutine_use_global_loop(self):
428428-+ # Deprecated in 3.10
429429-- # Deprecated in 3.10.0, undeprecated in 3.10.9
430430- async def coro():
431431- return 42
432432-433433- loop = self.new_test_loop()
434434- asyncio.set_event_loop(loop)
435435- self.addCleanup(asyncio.set_event_loop, None)
436436-+ futs = asyncio.as_completed([coro()])
437437-+ with self.assertWarns(DeprecationWarning) as cm:
438438-+ futs = list(futs)
439439-+ self.assertEqual(cm.warnings[0].filename, __file__)
440440-- futs = list(asyncio.as_completed([coro()]))
441441- self.assertEqual(len(futs), 1)
442442- self.assertEqual(loop.run_until_complete(futs[0]), 42)
443443-444444-@@ -1974,8 +1987,10 @@
445445-446446- inner = coro()
447447- self.addCleanup(inner.close)
448448-+ with self.assertWarns(DeprecationWarning) as cm:
449449-+ with self.assertRaisesRegex(RuntimeError, 'There is no current event loop'):
450450-+ asyncio.shield(inner)
451451-+ self.assertEqual(cm.warnings[0].filename, __file__)
452452-- with self.assertRaisesRegex(RuntimeError, 'no current event loop'):
453453-- asyncio.shield(inner)
454454-455455- def test_shield_coroutine_use_running_loop(self):
456456- async def coro():
457457-@@ -1989,13 +2004,15 @@
458458- self.assertEqual(res, 42)
459459-460460- def test_shield_coroutine_use_global_loop(self):
461461-+ # Deprecated in 3.10
462462-- # Deprecated in 3.10.0, undeprecated in 3.10.9
463463- async def coro():
464464- return 42
465465-466466- asyncio.set_event_loop(self.loop)
467467- self.addCleanup(asyncio.set_event_loop, None)
468468-+ with self.assertWarns(DeprecationWarning) as cm:
469469-+ outer = asyncio.shield(coro())
470470-+ self.assertEqual(cm.warnings[0].filename, __file__)
471471-- outer = asyncio.shield(coro())
472472- self.assertEqual(outer._loop, self.loop)
473473- res = self.loop.run_until_complete(outer)
474474- self.assertEqual(res, 42)
475475-@@ -2933,7 +2950,7 @@
476476- self.assertIsNone(asyncio.current_task(loop=self.loop))
477477-478478- def test_current_task_no_running_loop_implicit(self):
479479-+ with self.assertRaises(RuntimeError):
480480-- with self.assertRaisesRegex(RuntimeError, 'no running event loop'):
481481- asyncio.current_task()
482482-483483- def test_current_task_with_implicit_loop(self):
484484-@@ -3097,8 +3114,10 @@
485485- return asyncio.gather(*args, **kwargs)
486486-487487- def test_constructor_empty_sequence_without_loop(self):
488488-+ with self.assertWarns(DeprecationWarning) as cm:
489489-+ with self.assertRaises(RuntimeError):
490490-+ asyncio.gather()
491491-+ self.assertEqual(cm.warnings[0].filename, __file__)
492492-- with self.assertRaisesRegex(RuntimeError, 'no current event loop'):
493493-- asyncio.gather()
494494-495495- def test_constructor_empty_sequence_use_running_loop(self):
496496- async def gather():
497497-@@ -3111,10 +3130,12 @@
498498- self.assertEqual(fut.result(), [])
499499-500500- def test_constructor_empty_sequence_use_global_loop(self):
501501-+ # Deprecated in 3.10
502502-- # Deprecated in 3.10.0, undeprecated in 3.10.9
503503- asyncio.set_event_loop(self.one_loop)
504504- self.addCleanup(asyncio.set_event_loop, None)
505505-+ with self.assertWarns(DeprecationWarning) as cm:
506506-+ fut = asyncio.gather()
507507-+ self.assertEqual(cm.warnings[0].filename, __file__)
508508-- fut = asyncio.gather()
509509- self.assertIsInstance(fut, asyncio.Future)
510510- self.assertIs(fut._loop, self.one_loop)
511511- self._run_loop(self.one_loop)
512512-@@ -3202,8 +3223,10 @@
513513- self.addCleanup(gen1.close)
514514- gen2 = coro()
515515- self.addCleanup(gen2.close)
516516-+ with self.assertWarns(DeprecationWarning) as cm:
517517-+ with self.assertRaises(RuntimeError):
518518-+ asyncio.gather(gen1, gen2)
519519-+ self.assertEqual(cm.warnings[0].filename, __file__)
520520-- with self.assertRaisesRegex(RuntimeError, 'no current event loop'):
521521-- asyncio.gather(gen1, gen2)
522522-523523- def test_constructor_use_running_loop(self):
524524- async def coro():
525525-@@ -3217,14 +3240,16 @@
526526- self.one_loop.run_until_complete(fut)
527527-528528- def test_constructor_use_global_loop(self):
529529-+ # Deprecated in 3.10
530530-- # Deprecated in 3.10.0, undeprecated in 3.10.9
531531- async def coro():
532532- return 'abc'
533533- asyncio.set_event_loop(self.other_loop)
534534- self.addCleanup(asyncio.set_event_loop, None)
535535- gen1 = coro()
536536- gen2 = coro()
537537-+ with self.assertWarns(DeprecationWarning) as cm:
538538-+ fut = asyncio.gather(gen1, gen2)
539539-+ self.assertEqual(cm.warnings[0].filename, __file__)
540540-- fut = asyncio.gather(gen1, gen2)
541541- self.assertIs(fut._loop, self.other_loop)
542542- self.other_loop.run_until_complete(fut)
543543-544544-reverted:
545545---- b/Lib/test/test_asyncio/test_unix_events.py
546546-+++ a/Lib/test/test_asyncio/test_unix_events.py
547547-@@ -1740,8 +1740,7 @@
548548-549549- def test_child_watcher_replace_mainloop_existing(self):
550550- policy = self.create_policy()
551551-+ loop = policy.get_event_loop()
552552-- loop = policy.new_event_loop()
553553-- policy.set_event_loop(loop)
554554-555555- # Explicitly setup SafeChildWatcher,
556556- # default ThreadedChildWatcher has no _loop property
557557-reverted:
558558---- b/Lib/test/test_coroutines.py
559559-+++ a/Lib/test/test_coroutines.py
560560-@@ -2319,8 +2319,7 @@
561561- def test_unawaited_warning_during_shutdown(self):
562562- code = ("import asyncio\n"
563563- "async def f(): pass\n"
564564-+ "asyncio.gather(f())\n")
565565-- "async def t(): asyncio.gather(f())\n"
566566-- "asyncio.run(t())\n")
567567- assert_python_ok("-c", code)
568568-569569- code = ("import sys\n"
570570-reverted:
571571---- b/Modules/_asynciomodule.c
572572-+++ a/Modules/_asynciomodule.c
573573-@@ -332,6 +332,13 @@
574574- return loop;
575575- }
576576-577577-+ if (PyErr_WarnEx(PyExc_DeprecationWarning,
578578-+ "There is no current event loop",
579579-+ stacklevel))
580580-+ {
581581-+ return NULL;
582582-+ }
583583-+
584584- policy = PyObject_CallNoArgs(asyncio_get_event_loop_policy);
585585- if (policy == NULL) {
586586- return NULL;
587587-@@ -3085,11 +3092,6 @@
588588- return get_event_loop(1);
589589- }
590590-591591--// This internal method is going away in Python 3.12, left here only for
592592--// backwards compatibility with 3.10.0 - 3.10.8 and 3.11.0.
593593--// Similarly, this method's Python equivalent in asyncio.events is going
594594--// away as well.
595595--// See GH-99949 for more details.
596596- /*[clinic input]
597597- _asyncio._get_event_loop
598598- stacklevel: int = 3
···2222 description = "Matplotlib utilities for the visualization, and visual analysis, of financial data";
2323 homepage = "https://github.com/matplotlib/mplfinance";
2424 license = [ licenses.bsd3 ];
2525- maintainers = [ maintainers.ehmry ];
2625 };
2726}
+1-1
pkgs/development/python-modules/numpy/default.nix
···114114115115 # we default openblas to build with 64 threads
116116 # if a machine has more than 64 threads, it will segfault
117117- # see https://github.com/xianyi/OpenBLAS/issues/2993
117117+ # see https://github.com/OpenMathLib/OpenBLAS/issues/2993
118118 preConfigure = ''
119119 sed -i 's/-faltivec//' numpy/distutils/system_info.py
120120 export OMP_NUM_THREADS=$((NIX_BUILD_CORES > 64 ? 64 : NIX_BUILD_CORES))
···1010, pytest-mock
1111}:
12121313-buildPythonPackage rec {
1313+let self = buildPythonPackage rec {
1414 pname = "pydantic-settings";
1515 version = "2.1.0";
1616 pyproject = true;
···5050 export HOME=$TMPDIR
5151 '';
52525353+ # ruff is a dependency of pytest-examples which is required to run the tests.
5454+ # We do not want all of the downstream packages that depend on pydantic-settings to also depend on ruff.
5555+ doCheck = false;
5656+ passthru.tests = {
5757+ pytest = self.overridePythonAttrs {
5858+ doCheck = true;
5959+ };
6060+ };
6161+5362 meta = with lib; {
5463 description = "Settings management using pydantic";
5564 homepage = "https://github.com/pydantic/pydantic-settings";
···5766 broken = lib.versionOlder pydantic.version "2.0.0";
5867 maintainers = with maintainers; [ ];
5968 };
6060-}
6969+}; in self
···17171818stdenv.mkDerivation rec {
1919 pname = "kbd";
2020- version = "2.6.3";
2020+ version = "2.6.4";
21212222 src = fetchurl {
2323 url = "mirror://kernel/linux/utils/kbd/${pname}-${version}.tar.xz";
2424- sha256 = "sha256-BJlsCNfRxGCWb7JEo9OIM1LCZ0t61SIAPZ9Oy4q0jes=";
2424+ sha256 = "sha256-UZ+NCHrsyn4KM80IS++SwGbrGXMWZmU9zHDJ1xqkCSY=";
2525 };
26262727 # vlock is moved into its own output, since it depends on pam. This
+2-2
pkgs/os-specific/linux/kernel-headers/default.nix
···111111in {
112112 inherit makeLinuxHeaders;
113113114114- linuxHeaders = let version = "6.6"; in
114114+ linuxHeaders = let version = "6.7"; in
115115 makeLinuxHeaders {
116116 inherit version;
117117 src = fetchurl {
118118 url = "mirror://kernel/linux/kernel/v${lib.versions.major version}.x/linux-${version}.tar.xz";
119119- hash = "sha256-2SagbGPdisffP4buH/ws4qO4Gi0WhITna1s4mrqOVtA=";
119119+ hash = "sha256-7zEUSiV20IDYwxaY6D7J9mv5fGd/oqrw1bu58zRbEGk=";
120120 };
121121 patches = [
122122 ./no-relocs.patch # for building x86 kernel headers on non-ELF platforms
+4-4
pkgs/os-specific/linux/kernel/xanmod-kernels.nix
···66 # NOTE: When updating these, please also take a look at the changes done to
77 # kernel config in the xanmod version commit
88 ltsVariant = {
99- version = "6.1.74";
1010- hash = "sha256-PqCojvh7JwTcavtQHB8l/WxCTg94ndOy9KGVXsmGO/Y=";
99+ version = "6.1.76";
1010+ hash = "sha256-0nBdUFRGMWM3IL/q8CYiDEUA/sIrYPMkzsBQen30o2E=";
1111 variant = "lts";
1212 };
13131414 mainVariant = {
1515- version = "6.6.13";
1616- hash = "sha256-RTfa9eIGYDqnffFnOFNaghKoGcHVy4rGYQkYumcw6Tk=";
1515+ version = "6.6.15";
1616+ hash = "sha256-KHn4Ntm1QStgJRWzwmPYXEbEcuZcF4pWJ964wc6J2Wk=";
1717 variant = "main";
1818 };
1919
···6868, libpwquality
6969, qrencode
70707171- # the (optional) BPF feature requires bpftool, libbpf, clang and llvm-strip to be available during build time.
7171+ # the (optional) BPF feature requires bpftool, libbpf, clang and llvm-strip to
7272+ # be available during build time.
7273 # Only libbpf should be a runtime dependency.
7374 # Note: llvmPackages is explicitly taken from buildPackages instead of relying
7475 # on splicing. Splicing will evaluate the adjacent (pkgsHostTarget) llvmPackages
7576 # which is sometimes problematic: llvmPackages.clang looks at targetPackages.stdenv.cc
7676- # which, in the unfortunate case of pkgsCross.ghcjs, `throw`s. If we explicitly
7777- # take buildPackages.llvmPackages, this is no problem because
7878- # `buildPackages.targetPackages.stdenv.cc == stdenv.cc` relative to us. Working
7979- # around this is important, because systemd is in the dependency closure of
8080- # GHC via emscripten and jdk.
7777+ # which, in the unfortunate case of pkgsCross.ghcjs, `throw`s. If we
7878+ # explicitly take buildPackages.llvmPackages, this is no problem because
7979+ # `buildPackages.targetPackages.stdenv.cc == stdenv.cc` relative to
8080+ # us. Working around this is important, because systemd is in the dependency
8181+ # closure of GHC via emscripten and jdk.
8182, bpftools
8283, libbpf
8384···9394 && !stdenv.hostPlatform.isMusl
9495 # "Unknown 64-bit data model"
9596 && !stdenv.hostPlatform.isRiscV32
9696-, withCompression ? true # adds bzip2, lz4, xz and zstd
9797+ # adds bzip2, lz4, xz and zstd
9898+, withCompression ? true
9799, withCoredump ? true
98100, withCryptsetup ? true
99101, withRepart ? true
100102, withDocumentation ? true
101103, withEfi ? stdenv.hostPlatform.isEfi
102104, withFido2 ? true
103103-, withFirstboot ? false # conflicts with the NixOS /etc management
105105+ # conflicts with the NixOS /etc management
106106+, withFirstboot ? false
104107, withHomed ? !stdenv.hostPlatform.isMusl
105108, withHostnamed ? true
106109, withHwdb ? true
···108111, withIptables ? true
109112, withKmod ? true
110113, withLibBPF ? lib.versionAtLeast buildPackages.llvmPackages.clang.version "10.0"
111111- && (stdenv.hostPlatform.isAarch -> lib.versionAtLeast stdenv.hostPlatform.parsed.cpu.version "6") # assumes hard floats
112112- && !stdenv.hostPlatform.isMips64 # see https://github.com/NixOS/nixpkgs/pull/194149#issuecomment-1266642211
114114+ # assumes hard floats
115115+ && (stdenv.hostPlatform.isAarch -> lib.versionAtLeast stdenv.hostPlatform.parsed.cpu.version "6")
116116+ # see https://github.com/NixOS/nixpkgs/pull/194149#issuecomment-1266642211
117117+ && !stdenv.hostPlatform.isMips64
113118 # can't find gnu/stubs-32.h
114119 && (stdenv.hostPlatform.isPower64 -> stdenv.hostPlatform.isBigEndian)
115120 # https://reviews.llvm.org/D43106#1019077
···139144, withTimedated ? true
140145, withTimesyncd ? true
141146, withTpm2Tss ? true
142142-, withUkify ? false # adds python to closure which is too much by default
147147+ # adds python to closure which is too much by default
148148+, withUkify ? false
143149, withUserDb ? true
144150, withUtmp ? !stdenv.hostPlatform.isMusl
145151, withVmspawn ? true
···148154 # build only libudev and libsystemd
149155, buildLibsOnly ? false
150156151151- # name argument
157157+ # yes, pname is an argument here
152158, pname ? "systemd"
153159154160, libxslt
···171177 wantGcrypt = withResolved || withImportd;
172178 version = "255.2";
173179174174- # Bump this variable on every (major) version change. See below (in the meson options list) for why.
180180+ # Use the command below to update `releaseTimestamp` on every (major) version
181181+ # change. More details in the commentary at mesonFlags.
175182 # command:
176183 # $ curl -s https://api.github.com/repos/systemd/systemd/releases/latest | \
177184 # jq '.created_at|strptime("%Y-%m-%dT%H:%M:%SZ")|mktime'
···189196 hash = "sha256-8SfJY/pcH4yrDeJi0GfIUpetTbpMwyswvSu+RSfgqfY=";
190197 };
191198192192- # On major changes, or when otherwise required, you *must* reformat the patches,
193193- # `git am path/to/00*.patch` them into a systemd worktree, rebase to the more recent
194194- # systemd version, and export the patches again via
195195- # `git -c format.signoff=false format-patch v${version} --no-numbered --zero-commit --no-signature`.
196196- # Use `find . -name "*.patch" | sort` to get an up-to-date listing of all patches
199199+ # On major changes, or when otherwise required, you *must* :
200200+ # 1. reformat the patches,
201201+ # 2. `git am path/to/00*.patch` them into a systemd worktree,
202202+ # 3. rebase to the more recent systemd version,
203203+ # 4. and export the patches again via
204204+ # `git -c format.signoff=false format-patch v${version} --no-numbered --zero-commit --no-signature`.
205205+ # Use `find . -name "*.patch" | sort` to get an up-to-date listing of all
206206+ # patches
197207 patches = [
198208 ./0001-Start-device-units-for-uninitialised-encrypted-devic.patch
199209 ./0002-Don-t-try-to-unmount-nix-or-nix-store.patch
···262272 "$out/lib/systemd/boot/efi"
263273 '' + (
264274 let
265265- # The following patches references to dynamic libraries to ensure that
266266- # all the features that are implemented via dlopen(3) are available (or
275275+ # The following patches references to dynamic libraries to ensure that all
276276+ # the features that are implemented via dlopen(3) are available (or
267277 # explicitly deactivated) by pointing dlopen to the absolute store path
268278 # instead of relying on the linkers runtime lookup code.
269279 #
···275285 # found` when using e.g. --grep with journalctl. Those errors should
276286 # become less unexpected now.
277287 #
278278- # There are generally two classes of dlopen(3) calls. Those that we want to
279279- # support and those that should be deactivated / unsupported. This change
280280- # enforces that we handle all dlopen calls explicitly. Meaning: There is
281281- # not a single dlopen call in the source code tree that we did not
282282- # explicitly handle.
288288+ # There are generally two classes of dlopen(3) calls. Those that we want
289289+ # to support and those that should be deactivated / unsupported. This
290290+ # change enforces that we handle all dlopen calls explicitly. Meaning:
291291+ # There is not a single dlopen call in the source code tree that we did
292292+ # not explicitly handle.
283293 #
284294 # In order to do this we introduced a list of attributes that maps from
285295 # shared object name to the package that contains them. The package can be
···288298 # path location).
289299 #
290300 # To get a list of dynamically loaded libraries issue something like
291291- # `grep -ri '"lib[a-zA-Z0-9-]*\.so[\.0-9a-zA-z]*"'' $src` and update the below list.
301301+ # `grep -ri '"lib[a-zA-Z0-9-]*\.so[\.0-9a-zA-z]*"'' $src`
302302+ # and update the list below.
292303 dlopenLibs =
293304 let
294305 opt = condition: pkg: if condition then pkg else null;
···374385 # patch all the dlopen calls to contain absolute paths to the libraries
375386 lib.concatMapStringsSep "\n" patchDlOpen dlopenLibs
376387 )
377377- # finally ensure that there are no left-over dlopen calls (or rather strings pointing to shared libraries) that we didn't handle
388388+ # finally ensure that there are no left-over dlopen calls (or rather strings
389389+ # pointing to shared libraries) that we didn't handle
378390 + ''
379391 if grep -qr '"lib[a-zA-Z0-9-]*\.so[\.0-9a-zA-z]*"' src; then
380392 echo "Found unhandled dynamic library calls: "
···461473 mesonFlags = [
462474 # Options
463475464464- # We bump this variable on every (major) version change to ensure
465465- # that we have known-good value for a timestamp that is in the (not so distant) past.
466466- # This serves as a lower bound for valid system timestamps during startup. Systemd will
467467- # reset the system timestamp if this date is +- 15 years from the system time.
476476+ # We bump this attribute on every (major) version change to ensure that we
477477+ # have known-good value for a timestamp that is in the (not so distant)
478478+ # past. This serves as a lower bound for valid system timestamps during
479479+ # startup. Systemd will reset the system timestamp if this date is +- 15
480480+ # years from the system time.
468481 # See the systemd v250 release notes for further details:
469469- # https://github.com/systemd/systemd/blob/60e930fc3e6eb8a36fbc184773119eb8d2f30364/NEWS#L258-L266
482482+ # https://github.com/systemd/systemd/blob/60e930fc3e6eb8a36fbc184773119eb8d2f30364/NEWS#L258-L266
470483 (lib.mesonOption "time-epoch" releaseTimestamp)
471484472485 (lib.mesonOption "version-tag" version)
···616629 ];
617630 preConfigure =
618631 let
619619- # A list of all the runtime binaries that the systemd executables, tests and libraries are referencing in their source code, scripts and unit files.
620620- # As soon as a dependency isn't required anymore we should remove it from the list. The `where` attribute for each of the replacement patterns must be exhaustive. If another (unhandled) case is found in the source code the build fails with an error message.
632632+ # A list of all the runtime binaries referenced by the source code (plus
633633+ # scripts and unit files) of systemd executables, tests and libraries.
634634+ # As soon as a dependency is lo longer required we should remove it from
635635+ # the list.
636636+ # The `where` attribute for each of the replacement patterns must be
637637+ # exhaustive. If another (unhandled) case is found in the source code the
638638+ # build fails with an error message.
621639 binaryReplacements = [
622622- { search = "/usr/bin/getent"; replacement = "${getent}/bin/getent"; where = [ "src/nspawn/nspawn-setuid.c" ]; }
623623-640640+ {
641641+ search = "/usr/bin/getent";
642642+ replacement = "${getent}/bin/getent";
643643+ where = [ "src/nspawn/nspawn-setuid.c" ];
644644+ }
624645 {
625646 search = "/sbin/mkswap";
626647 replacement = "${lib.getBin util-linux}/sbin/mkswap";
···628649 "man/systemd-makefs@.service.xml"
629650 ];
630651 }
631631- { search = "/sbin/swapon"; replacement = "${lib.getOutput "swap" util-linux}/sbin/swapon"; where = [ "src/core/swap.c" "src/basic/unit-def.h" ]; }
632632- { search = "/sbin/swapoff"; replacement = "${lib.getOutput "swap" util-linux}/sbin/swapoff"; where = [ "src/core/swap.c" ]; }
652652+ {
653653+ search = "/sbin/swapon";
654654+ replacement = "${lib.getOutput "swap" util-linux}/sbin/swapon";
655655+ where = [
656656+ "src/core/swap.c"
657657+ "src/basic/unit-def.h"
658658+ ];
659659+ }
660660+ {
661661+ search = "/sbin/swapoff";
662662+ replacement = "${lib.getOutput "swap" util-linux}/sbin/swapoff";
663663+ where = [ "src/core/swap.c" ];
664664+ }
633665 {
634666 search = "/bin/echo";
635667 replacement = "${coreutils}/bin/echo";
···646678 {
647679 search = "/bin/cat";
648680 replacement = "${coreutils}/bin/cat";
649649- where = [ "test/test-execute/exec-noexecpaths-simple.service" "src/journal/cat.c" ];
681681+ where = [
682682+ "test/test-execute/exec-noexecpaths-simple.service"
683683+ "src/journal/cat.c"
684684+ ];
650685 }
651686 {
652687 search = "/usr/lib/systemd/systemd-fsck";
653688 replacement = "$out/lib/systemd/systemd-fsck";
654654- where = [
655655- "man/systemd-fsck@.service.xml"
656656- ];
689689+ where = [ "man/systemd-fsck@.service.xml" ];
657690 }
658691 ] ++ lib.optionals withImportd [
659692 {
···682715 ];
683716 }
684717 ] ++ lib.optionals withKmod [
685685- { search = "/sbin/modprobe"; replacement = "${lib.getBin kmod}/sbin/modprobe"; where = [ "units/modprobe@.service" ]; }
718718+ {
719719+ search = "/sbin/modprobe";
720720+ replacement = "${lib.getBin kmod}/sbin/modprobe";
721721+ where = [ "units/modprobe@.service" ];
722722+ }
686723 ];
687724688688- # { replacement, search, where } -> List[str]
725725+ # { replacement, search, where, ignore } -> List[str]
689726 mkSubstitute = { replacement, search, where, ignore ? [ ] }:
690727 map (path: "substituteInPlace ${path} --replace '${search}' \"${replacement}\"") where;
691728 mkEnsureSubstituted = { replacement, search, where, ignore ? [ ] }:
···778815 mv $out/lib/sysusers.d $out/example
779816 '';
780817781781- # Avoid *.EFI binary stripping. At least on aarch64-linux strip
782782- # removes too much from PE32+ files:
818818+ # Avoid *.EFI binary stripping.
819819+ # At least on aarch64-linux strip removes too much from PE32+ files:
783820 # https://github.com/NixOS/nixpkgs/issues/169693
784784- # The hack is to move EFI file out of lib/ before doStrip
785785- # run and return it after doStrip run.
821821+ # The hack is to move EFI file out of lib/ before doStrip run and return it
822822+ # after doStrip run.
786823 preFixup = lib.optionalString withBootloader ''
787824 mv $out/lib/systemd/boot/efi $out/dont-strip-me
788825 '';
···807844 (builtins.map (p: p.__spliced.buildHost or p) finalAttrs.nativeBuildInputs);
808845809846 passthru = {
810810- # The interface version prevents NixOS from switching to an
811811- # incompatible systemd at runtime. (Switching across reboots is
812812- # fine, of course.) It should be increased whenever systemd changes
813813- # in a backwards-incompatible way. If the interface version of two
814814- # systemd builds is the same, then we can switch between them at
815815- # runtime; otherwise we can't and we need to reboot.
847847+ # The `interfaceVersion` attribute below points out the incompatibilities
848848+ # between systemd versions. When the new systemd build is
849849+ # backwards-compatible with the previous one, then they can be switched at
850850+ # runtime (the reboot being optional in this case); otherwise, a reboot is
851851+ # needed - and therefore `interfaceVersion` should be incremented.
816852 interfaceVersion = 2;
817853818818- inherit withCryptsetup withHostnamed withImportd withKmod withLocaled withMachined withPortabled withTimedated withUtmp util-linux kmod kbd;
854854+ inherit withCryptsetup withHostnamed withImportd withKmod withLocaled
855855+ withMachined withPortabled withTimedated withUtmp util-linux kmod kbd;
819856820857 tests = {
821858 inherit (nixosTests)
···823860 systemd-journal
824861 systemd-journal-gateway
825862 systemd-journal-upload;
826826- cross = pkgsCross.${if stdenv.buildPlatform.isAarch64 then "gnu64" else "aarch64-multiplatform"}.systemd;
863863+ cross =
864864+ let
865865+ systemString =
866866+ if stdenv.buildPlatform.isAarch64
867867+ then "gnu64"
868868+ else "aarch64-multiplatform";
869869+ in
870870+ pkgsCross.${systemString}.systemd;
827871 };
828872 };
829873830830- meta = with lib; {
874874+ meta = {
831875 homepage = "https://www.freedesktop.org/wiki/Software/systemd/";
832876 description = "A system and service manager for Linux";
833833- license = licenses.lgpl21Plus;
834834- platforms = platforms.linux;
877877+ longDescription = ''
878878+ systemd is a suite of basic building blocks for a Linux system. It
879879+ provides a system and service manager that runs as PID 1 and starts the
880880+ rest of the system. systemd provides aggressive parallelization
881881+ capabilities, uses socket and D-Bus activation for starting services,
882882+ offers on-demand starting of daemons, keeps track of processes using Linux
883883+ control groups, maintains mount and automount points, and implements an
884884+ elaborate transactional dependency-based service control logic. systemd
885885+ supports SysV and LSB init scripts and works as a replacement for
886886+ sysvinit. Other parts include a logging daemon, utilities to control basic
887887+ system configuration like the hostname, date, locale, maintain a list of
888888+ logged-in users and running containers and virtual machines, system
889889+ accounts, runtime directories and settings, and daemons to manage simple
890890+ network configuration, network time synchronization, log forwarding, and
891891+ name resolution.
892892+ '';
893893+ license = with lib.licenses; [
894894+ # Taken from https://raw.githubusercontent.com/systemd/systemd-stable/${finalAttrs.src.rev}/LICENSES/README.md
895895+ bsd2
896896+ bsd3
897897+ cc0
898898+ lgpl21Plus
899899+ lgpl2Plus
900900+ mit
901901+ mit0
902902+ ofl
903903+ publicDomain
904904+ ];
905905+ maintainers = with lib.maintainers; [ flokli kloenk ];
906906+ platforms = lib.platforms.linux;
907907+ priority = 10;
835908 badPlatforms = [ lib.systems.inspect.platformPatterns.isStatic ];
836909 # https://github.com/systemd/systemd/issues/20600#issuecomment-912338965
837910 broken = stdenv.hostPlatform.isStatic;
838838- priority = 10;
839839- maintainers = with maintainers; [ flokli kloenk ];
840911 };
841912})
+1-1
pkgs/servers/mpd/default.nix
···188188 description = "A flexible, powerful daemon for playing music";
189189 homepage = "https://www.musicpd.org/";
190190 license = licenses.gpl2Only;
191191- maintainers = with maintainers; [ astsmtl ehmry tobim ];
191191+ maintainers = with maintainers; [ astsmtl tobim ];
192192 platforms = platforms.unix;
193193 mainProgram = "mpd";
194194
···2222in
2323perlPackages.buildPerlPackage rec {
2424 pname = "slimserver";
2525- version = "8.3.1";
2525+ version = "8.4.0";
26262727 src = fetchFromGitHub {
2828 owner = "Logitech";
2929 repo = "slimserver";
3030 rev = version;
3131- hash = "sha256-yMFOwh/oPiJnUsKWBGvd/GZLjkWocMAUK0r+Hx/SUPo=";
3131+ hash = "sha256-92mKchgAWRIrNOeK/zXUYRqIAk6THdtz1zQe3fg2kE0=";
3232 };
33333434 nativeBuildInputs = [ makeWrapper ];
···150150151151 meta = with lib; {
152152 homepage = "https://github.com/Logitech/slimserver";
153153+ changelog = "https://github.com/Logitech/slimserver/blob/${version}/Changelog${lib.versions.major version}.html";
153154 description = "Server for Logitech Squeezebox players. This server is also called Logitech Media Server";
154154- # the firmware is not under a free license, but not included in the default package
155155+ # the firmware is not under a free license, so we do not include firmware in the default package
155156 # https://github.com/Logitech/slimserver/blob/public/8.3/License.txt
156157 license = if enableUnfreeFirmware then licenses.unfree else licenses.gpl2Only;
157158 mainProgram = "slimserver";
···11{ stdenv, lib, fetchFromGitHub, rustPlatform, AppKit, installShellFiles }:
2233rustPlatform.buildRustPackage rec {
44+ # Originally, this package was under the attribute `du-dust`, since `dust` was taken.
55+ # Since then, `dust` has been freed up, allowing this package to take that attribute.
66+ # However in order for tools like `nix-env` to detect package updates, keep `du-dust` for pname.
47 pname = "du-dust";
58 version = "0.9.0";
69···811 owner = "bootandy";
912 repo = "dust";
1013 rev = "v${version}";
1111- sha256 = "sha256-5X7gRMTUrG6ecZnwExBTadOJo/HByohTMDsgxFmp1HM=";
1414+ hash = "sha256-5X7gRMTUrG6ecZnwExBTadOJo/HByohTMDsgxFmp1HM=";
1215 # Remove unicode file names which leads to different checksums on HFS+
1316 # vs. other filesystems because of unicode normalisation.
1417 postFetch = ''
···141141 cadence = throw "cadence has been removed from nixpkgs, as it was archived upstream"; # Added 2023-10-28
142142 cask = emacs.pkgs.cask; # Added 2022-11-12
143143 cargo-embed = throw "cargo-embed is now part of the probe-rs package"; # Added 2023-07-03
144144+ cargo-espflash = espflash;
144145 cargo-flash = throw "cargo-flash is now part of the probe-rs package"; # Added 2023-07-03
145146 catfish = throw "'catfish' has been renamed to/replaced by 'xfce.catfish'"; # Converted to throw 2023-09-10
146147 cawbird = throw "cawbird has been abandoned upstream and is broken anyways due to Twitter closing its API";
···231232 drgeo = throw "'drgeo' has been removed as it is outdated and unmaintained"; # Added 2023-10-15
232233 dtv-scan-tables_linuxtv = dtv-scan-tables; # Added 2023-03-03
233234 dtv-scan-tables_tvheadend = dtv-scan-tables; # Added 2023-03-03
235235+ du-dust = dust; # Added 2024-01-19
234236 dylibbundler = macdylibbundler; # Added 2021-04-24
235237236238 ### E ###
···164164 flask_sqlalchemy = flask-sqlalchemy; # added 2022-07-20
165165 flask_testing = flask-testing; # added 2022-04-25
166166 flask_wtf = flask-wtf; # added 2022-05-24
167167+ flask-autoindex = throw "flask-autoindex was removed, as it is not compatible with flask 3.0 and unmaintained since 2020.";
168168+ flask-basicauth = throw "flask-basicauth was removed, as it is not compatible with flask 3.0 and unmaintained since 2016.";
169169+ flask-sessionstore = throw "flask-sessionstore was removed, as it is not compatible with flask 3.0 and unmaintained since 2017.";
167170 flowlogs_reader = flowlogs-reader; # added 2024-01-03
168171 FormEncode = formencode; # added 2023-02-19
169172 foundationdb51 = throw "foundationdb51 is no longer maintained, use foundationdb71 instead"; # added 2023-06-06
···5353 pkgsStatic = true;
5454 pkgsCross = true;
5555 pkgsi686Linux = true;
5656+ pkgsExtraHardening = true;
5657 };
57585859 # No release package attrname may have any of these at a component