nixpkgs/doc/release-notes/rl-2505.section.md
Wolfgang Walther 88dfade94b
postgresql: replace pg_config with custom script
By replacing upstream's pg_config binary with a shell script, we:
- gain the ability to run pg_config easily when cross-compiling,
- can remove the fake pg_config in the default output,
- can remove the pg_config wrapper script dealing with special cases.

Some 20 years ago, pg_config *was* a shell script upstream, too. It was
changed to a binary, when it was made "relocatable", so it would return
paths depending on the location of the "postgres" binary. However, this
is exactly the thing that just hurts us in nixpkgs - we don't want those
paths to change, we want them to always point at the right outputs. By
writing the script ourselves, this becomes a lot less painful.

This approach means more lines of codes, but all of them are dead simple
and we have a lot less complexity overall.

Additionally, pg_config is now made a separate derivation, only exposed
as "postgresql.pg_config". This has the nice side-effect, that all users
of postgresql and libpq in nixpkgs must be very *explicit* about their
dependency on pg_config. This gives a lot more visibility into the state
of affairs regarding pkg-config support for libpq, which ultimately is
the much better solution.
2025-03-21 18:05:38 +01:00

6.6 KiB

Nixpkgs 25.05 (2025.05/??)

Backward Incompatibilities

  • services.rippled has been removed, as rippled was broken and had not been updated since 2022.

  • services.rippleDataApi has been removed, as ripple-data-api was broken and had not been updated since 2022.

  • squid has been updated to version 7, this release includes multiple breaking changes, like ESI removal. For more information, check the release notes.

  • postgresql and libpq don't provide pg_config by default anymore. Instead, pg_config is available via postgresql.pg_config or libpq.pg_config. This allowed implementing it as a shell script, which can be build for both the build and host systems when cross-compiling. If your build fails to find pg_config, add postgresql.pg_config or libpq.pg_config to nativeBuildInputs.

  • The no-broken-symlinks hook was added to catch builds containing dangling or reflexive symlinks, as these are indicative of problems with packaging. The hook can be disabled by providing dontCheckForBrokenSymlinks = true; as an argument to mkDerivation. For more information, check the docs or see this PR.

  • The hand written perlPackages.SearchXapian bindings have been dropped in favor of the (mostly compatible) perlPackages.Xapian.

  • testers.shellcheck now warns when name is not provided. The name argument will become mandatory in a future release.

  • The nixLog* family of functions made available through the standard environment have been rewritten to prefix messages with both the debug level and the function name of the caller. The nixLog function, which logs unconditionally, was also re-introduced and modified to prefix messages with the function name of the caller. For more information, see this PR.

  • The rustPlatform.fetchCargoTarball function is deprecated, because it relied on cargo vendor not changing its output format to keep fixed-output derivation hashes the same, which is a Nix invariant, and Cargo 1.84.0 changed cargo vendor's output format. It should generally be replaced with rustPlatform.fetchCargoVendor, but rustPlatform.importCargoLock may also be appropriate in some circumstances. rustPlatform.buildRustPackage users must set useFetchCargoVendor to true and regenerate the cargoHash.

  • NetBox was updated to >= 4.2.0. Have a look at the breaking changes of the 4.1 release and the 4.2 release, make the required changes to your database, if needed, then upgrade by setting services.netbox.package = pkgs.netbox_4_2; in your configuration.

  • NetBox version 4.0.X available as netbox_4_0 was removed. Please upgrade to 4.2.

  • i3status-rust-package no longer enables notmuch by default. It can be enabled via withNotmuch.

  • Default ICU version updated from 74 to 76

Titanium removed

  • titaniumenv, titanium, and titanium-alloy have been removed due to lack of maintenance in Nixpkgs.

NexusMods.App upgraded

  • nexusmods-app has been upgraded from version 0.6.3 to 0.8.2.

    • Before upgrading, you must reset all app state (mods, games, settings, etc). NexusMods.App will crash if any state from a version older than 0.7.0 is still present.

    • Typically, you can can reset to a clean state by running NexusMods.App uninstall-app. See Nexus Mod's how to uninstall the app documentation for more detail and alternative methods.

    • This should not be necessary going forward, because loading app state from 0.7.0 or newer is now supported. This is documented in the 0.7.1 changelog.

Nixpkgs Library

Breaking changes

  • Structure of the functor of some types has changed. functor is an implementation detail and should not be relied upon. If you did rely on it let us know in this PR.

    • lib.types.enum: Previously the functor.payload was the list of enum values directly. Now it is an attribute set containing the values in the values attribute.
    • lib.types.separatedString: Previously the functor.payload was the separator directly. Now it is an attribute set containing the separator in the sep attribute.
  • The tinycc package now has the dev, doc and lib outputs, thus, tinycc.out may now only provide the tcc and cross compilers binaries.

  • The virtualisation.hypervGuest.videoMode option has been removed. Standard tooling can now be used to configure display modes for Hyper-V VMs.

Deprecations

  • functor is an implementation detail and should not be relied upon, but since its status wasn't clear and it has had some use cases without alternatives, changes are being handled as gracefully as possible. Deprecations within functor:

    • functor.wrapped is now deprecated for some types and using it will give a warning with migration instructions. It is deprecated for these types:
      • lib.types.attrsWith
      • lib.types.listOf
      • lib.types.unique and lib.types.uniq
      • lib.types.nullOr
      • lib.types.functionTo
      • lib.types.coercedTo
      • lib.types.either
  • Plasma 5 and Qt 5 based versions of associated software are deprecated in NixOS 25.05, and will be removed in NixOS 25.11. Users are encouraged to upgrade to Plasma 6.

  • rustPlatform.buildRustPackage stops handling the deprecated argument cargoSha256. Out-of-tree packages that haven't migrated from cargoSha256 to cargoHash now receive errors.