This specific change was already done before the branch-off in https://github.com/NixOS/nixpkgs/pull/346059, but https://github.com/NixOS/nixpkgs/pull/335832 reverted it accidentally on master after the branch-off.
75 KiB
Release 24.11 (“Vicuña”, 2024.11/??)
Highlights
-
Nix was updated to 2.24, which brings a lot of improvements and fixes. See the release notes for 2.19, 2.20, 2.21, 2.22, 2.23, 2.24. Notable changes include improvements to Git fetching, documentation comment support in
nix-repl> :doc, as well as many quality of life additions. -
There have been significant changes to macOS support.
-
The build environment has been redesigned to be closer to a native Xcode toolchain, enabling us to provide all SDKs from macOS Sierra 10.12 to macOS Sequoia 15, simplify build definitions, and build more software without hacks or patching. Although compatibility shims for the old SDK scheme are provided, some builds may break, and the old mechanisms will be removed by 25.11 at the latest. See the Darwin section of the Nixpkgs manual for details of the new scheme and how to use it, and the announcement on Discourse for more information on the changes and benefits.
-
This will be the last release of Nixpkgs to support macOS Sierra 10.12 to macOS Catalina 10.15. Starting with release 25.05, the minimum supported version will be macOS Big Sur 11, and we cannot guarantee that packages will continue to work on older versions of macOS. Users on old macOS versions should consider upgrading to a supported version (potentially using OpenCore Legacy Patcher for old hardware) or installing NixOS. If neither of those options are viable and you require new versions of software, MacPorts supports versions back to Mac OS X Snow Leopard 10.6.
-
-
This will be the last release of Nixpkgs to support versions of CUDA prior to CUDA 12.0. These versions only work with old compiler versions that will be unsupported by the time of the Nixpkgs 25.05 release. In the future, users should expect CUDA versions to be dropped as the compiler versions they require leave upstream support windows.
-
Convenience options for
amdgpu, the open source driver for Radeon cards, are now available underhardware.amdgpu. -
AMDVLK, AMD's open source Vulkan driver, is now available to be configured under the
hardware.amdgpu.amdvlkoption. This also allows configuring runtime settings for AMDVLK, including enabling experimental features. -
The
moonlight-qtpackage (for Moonlight game streaming) now has HDR support on Linux systems. -
Sched-ext, a Linux kernel feature to run schedulers in userspace, is now available
services.scx. Requires Linux kernel version 6.12 or later. -
PostgreSQL now defaults to major version 16.
-
GNOME has been updated to version 47. Refer to the release notes for more details.
-
autheliahas been upgraded to version 4.38. This version brings several features and improvements which are detailed in the release blog post. This release also deprecates some configuration keys which are likely to be removed in version 5.0.0. -
netbirdhas been updated to 0.31.1. This adds a built-in relay server which is not yet supported by the NixOS module, as well as a metrics endpoint for both the management and signal services. The default metrics port for thesignalservice has been changed from9090to9091to prevent a port conflict with the management server. This can be changed with their respectivemetricsPortas needed. Refer to the release notes and this pull request for more information. -
compressDrvcan compress selected files in a derivation.compressDrvWebcompresses files for common web server usage (.gzwithzopfli,.brwithbrotli). -
hardware.displayis a new module implementing workarounds for misbehaving monitors by setting up custom EDID files and forcing kernel/framebuffer modes. -
services.displayManager.lyis a new module for configuring the display manager ly, a TUI-based replacement for SDDM and LightDM meant for window manager users. -
srcOnlywas rewritten to be more readable, have additional warnings in the event that something is probably wrong, use thestdenvprovided by the derivation, and Noogle-compatible documentation was added. -
The default sound server for most graphical sessions has been switched from PulseAudio to PipeWire. Users that want to keep using PulseAudio will want to set
services.pipewire.enable = false;andhardware.pulseaudio.enable = true;. There is currently no plan to fully deprecate and remove PulseAudio, however, PipeWire should generally be preferred for new installs. -
The Rust rewrite of the
switch-to-configurationprogram is now used for system activation by default. If you experience any issues, please report them. The original Perl script is deprecated and is planned for removal in the 25.05 release. It will remain accessible until then by settingsystem.switch.enableNgtofalse. -
Support for mounting filesystems from block devices protected with dm-verity was added through the
boot.initrd.systemd.dmVerityoption. -
The Xen Project Hypervisor is once again available as a virtualisation option under
virtualisation.xen.- This release includes Xen 4.19.0 and support for booting the hypervisor on EFI systems. ::: {.warning} Booting into the Xen Project Hypervisor through a legacy BIOS bootloader or with the legacy script-based Stage 1 initrd have been deprecated. Only EFI booting and the new systemd-based Stage 1 initrd are supported. :::
- The
qemu-xen-traditionalcomponent has been deprecated by the upstream Xen Project, and is no longer included in the Xen build. - The OCaml-based Xen Store can now be configured using
virtualisation.xen.store.settings. - The
virtualisation.xen.bridgeoptions have been deprecated in this release cycle. Users who need network bridges are encouraged to set up their own networking configurations.
-
A new option
systemd.enableStrictShellCheckshas been added. When enabled, all systemd scripts generated by NixOS will be checked with shellcheck and any errors or warnings will cause the build to fail. This affects all scripts that have been created through thescript,reload,preStart,postStart,preStopandpostStopoptions for systemd services. This does not affect commandlines passed directly toExecStart,ExecReload,ExecStartPre,ExecStartPost,ExecStoporExecStopPost. It therefore also does not affect systemd units that are coming from packages and that are not defined through the NixOS config. This option is disabled by default, and although some services have already been fixed, it is still likely that you will encounter build failures when enabling this. We encourage people to enable this option when they are willing and able to submit fixes for potential build failures to nixpkgs. The option can also be enabled or disabled for individual services using theenableStrictShellChecksoption on the service itself, which will take precedence over the global setting.
New Modules
-
Coral, hardware support for Coral.ai Edge TPU devices. Available as hardware.coral.usb.enable and hardware.coral.pcie.enable.
-
Cyrus IMAP, an email, contacts and calendar server. Available as services.cyrus-imap service.
-
TaskChampion Sync-Server, a Taskwarrior 3 sync server. Available as services.taskchampion-sync-server.
-
FlareSolverr, a proxy server to bypass Cloudflare protection. Available as services.flaresolverr.
-
Gancio, a shared agenda for local communities. Available as services.gancio.
-
Goatcounter, an easy web analytics platform with no tracking of personal data. Available as services.goatcounter.
-
Privatebin, a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Available as services.privatebin.
-
UWSM, a wayland session manager to wrap Wayland compositors into useful systemd units such as
graphical-session.target. Available as programs.uwsm. -
Open-WebUI, a user-friendly WebUI for LLMs. Available as services.open-webui.
-
Quickwit, a sub-second search & analytics engine on cloud storage. Available as services.quickwit.
-
Userborn, a service for declarative user management. This can be used instead of the
update-users-groups.plPerl script and/or systemd-sysusers. This is now recommended over systemd-sysusers to achieve a system without Perl, as it can create normal users and change passwords. Available as services.userborn. -
g810-led, a LED controller for Logitech G keyboards. Available as services.g810-led.
-
Hatsu, a self-hosted bridge that interacts with Fediverse on behalf of your static site. Available as services.hatsu.
-
Soteria, a polkit authentication agent to handle elevated prompts for any desktop environment. Normally this should only be used on DEs or WMs that do not provide a graphical polkit frontend on their own. Available as
security.soteria. -
Flood, a beautiful WebUI for various torrent clients. Available as services.flood.
-
Niri, a scrollable-tiling Wayland compositor. Available as programs.niri.
-
Firefly-iii Data Importer, a data importer for Firefly-III. Available as services.firefly-iii-data-importer.
-
Dashy, an open source, highly customizable, easy to use, privacy-respecting dashboard app. Available as services.dashy.
-
[QGroundControl], a ground station support and configuration manager for the PX4 and APM Flight Stacks. Available as programs.qgroundcontrol.
-
Eintopf, a community event and calendar web application. Available as services.eintopf.
-
pay-respects, a terminal command correction program, alternative tothefuck, written in Rust. Available as programs.pay-respects. -
Radicle, an open source, peer-to-peer code collaboration stack built on Git. Available as services.radicle.
-
Ordinal, A library for ordinal numbers in the Coq proof assistant.
-
ddns-updater, a service with a WebUI to update DNS records periodically for many providers. Available as services.ddns-updater.
-
Immersed, a closed-source coworking platform. Available as programs.immersed.
-
HomeBox, an inventory and organization system built for the home user. Available as services.homebox.
-
evremap, a keyboard input remapper for Linux/Wayland systems. Available as services.evremap.
-
matrix-hookshot, a Matrix bot for connecting to external services. Available as services.matrix-hookshot.
-
Renovate, a dependency updating tool for various Git forges and language ecosystems. Available as services.renovate.
-
Music Assistant, a music library manager for your offline and online music sources that can stream to a wide range of supported players. Available as services.music-assistant.
-
zeronsd, a DNS server for ZeroTier users. Available with services.zeronsd.servedNetworks.
-
Collabora Online, a collaborative online office suite based on LibreOffice technology. Available as services.collabora-online.
-
wg-access-server, an all-in-one WireGuard VPN solution with a WebUI for connecting devices. Available as services.wg-access-server.
-
Pingvin Share, a self-hosted file sharing platform and an alternative for WeTransfer. Available as services.pingvin-share.
-
Envision, a UI for building, configuring and running Monado, the open source OpenXR runtime. Available as programs.envision.
-
Localsend, an open source cross-platform alternative to AirDrop. Available as programs.localsend.
-
Gatus, an automated developer-oriented status page. Available as services.gatus.
-
cryptpad, a privacy-oriented collaborative office suite, has been added back. Available as services.cryptpad.
-
realm, a simple, high performance relay server written in Rust. Available as services.realm.
-
Gotenberg, an API server for converting files to PDFs that can be used alongside Paperless-ngx. Available as services.gotenberg.
-
Suricata, a free and open source, mature, fast and robust network threat detection engine. Available as services.suricata.
-
Playerctld, a daemon to track media player activity. Available as services.playerctld.
-
Glance, a self-hosted dashboard that puts all your feeds in one place. Available as services.glance.
-
Apache Tika, a toolkit that detects and extracts metadata and text from over a thousand different file types. Available as services.tika.
-
Misskey, an interplanetary microblogging platform. Available as services.misskey.
-
Improved File Manager (IFM), a single-file web-based file manager. Available as services.ifm.
-
OpenGFW, an implementation of the Great Firewall on Linux. Available as services.opengfw.
-
Rathole, a lightweight and high-performance reverse proxy for NAT traversal. Available as services.rathole.
-
Proton Mail bridge, a desktop application that runs in the background, encrypting and decrypting messages as they enter and leave your computer. Available as services.protonmail-bridge.
-
chromadb, an open-source AI application database with batteries included. Available as services.chromadb.
-
bitmagnet, a self-hosted BitTorrent indexer, DHT crawler, content classifier and torrent search engine with WebUI, GraphQL API and Servarr stack integration. Available as services.bitmagnet.
-
Wakapi, a time tracking software for programmers. Available as services.wakapi.
-
foot, a fast, lightweight and minimalistic Wayland terminal emulator. Available as programs.foot.
-
ToDesk, a remote desktop application. Available as services.todesk.
-
Dependency Track, an intelligent Component Analysis platform that allows organizations to identify and reduce risk in the software supply chain. Available as services.dependency-track.
-
Immich, a self-hosted photo and video backup solution. Available as services.immich.
-
saunafs, a distributed POSIX file system. Available as services.saunafs.
-
obs-studio, a free and open source software for video recording and live streaming. Available as programs.obs-studio.
-
Veilid, a privacy-focused, headless server for data sharing and messaging on a peer-to-peer network. Available as services.veilid.
-
Fedimint, a module based system for building federated applications (Federated E-Cash Mint). Available as services.fedimintd.
-
tiny-dfr, a dynamic function row daemon for the Touch Bar found on some Apple laptops. Available as hardware.apple.touchBar.enable.
-
Swapspace, a dynamic swap space manager that turns your unused free space into swap automatically. Available as services.swapspace.
-
Zapret, a DPI bypass tool. Available as services.zapret.
-
Glances, an open-source system cross-platform monitoring tool. Available as services.glances.
Backward Incompatibilities
-
Nixpkgs now requires Nix 2.3.17 or newer to allow for zstd compressed binary artifacts.
-
The
soundoptions have been removed or renamed, as they had a lot of unintended side effects. See below for details. -
The NVIDIA driver no longer defaults to the proprietary kernel module with versions >= 560. You will need to manually set
hardware.nvidia.opento select the proprietary or open modules. -
The
(buildPythonPackage { ... }).overrideand(buildPythonPackage { ... }).overrideDerivationattributes is now deprecated and removed in favour ofoverridePythonAttrsandlib.overrideDerivation. This change does not affect the override interface of most Python packages, as<pkg>.overrideprovided bycallPackageshadows such a locally-definedoverrideattribute. The<pkg>.overrideDerivationattribute of Python packages called withcallPackagewill also remain available after this change. -
All Cinnamon and XApp packages have been moved to top-level (i.e.,
cinnamon.nemois nownemo). -
All GNOME packages have been moved to top-level (i.e.,
gnome.nautilusis nownautilus). -
transmissionhas been aliased with atracewarning totransmission_3, since Transmission 4 has been released last year and Transmission 3 will eventually go away -- this is meant to make people aware of the new version.services.transmission.packagenow also defaults totransmission_3, as the upgrade can cause data loss in some cases (examples: #5153, #6796). Please make sure to back up to your data directory if you may be affected:transmission-gtk:~/.config/transmissiontransmission-daemonusing NixOS module:${config.services.transmission.home}/.config/transmission-daemon(defaults to/var/lib/transmission/.config/transmission-daemon)
-
The default
mongodbversion has been updated from 5.0 to 7.0. For more information, see the compatibility changes for MongoDB 6.0 and 7.0. -
unifihas been updated to UniFi 8.unifi7was removed as it is vulnerable to CVE-2024-42025 and required a version of MongoDB that has reached end of life. -
androidenv.androidPkgs_9_0has been removed. It is replaced withandroidenv.androidPkgsfor a more complete Android SDK, including support for Android 9 and later. -
The VirtualBox demo installer appliance has been removed. Please use the standard installer ISOs instead.
-
grafanahas been updated to version 11.3. This version doesn't support settinghttp_addrto a hostname anymore, an IP address is expected. -
denohas been updated to Deno 2, which has breaking changes. See the migration guide for details. -
gogshas been removed. Upstream development has stalled and it has several critical vulnerabilities that weren't addressed within a year. Consider migrating toforgejoorgitea. -
knot-dnshas been updated to version 3.4.x. Check the migration guide for breaking changes. -
mutmuthas been updated to version 3.0.5. -
services.kubernetes.kubelet.clusterDnsnow accepts a list of DNS resolvers rather than a single string, bringing the module more in line with the upstream Kubelet configuration schema. -
bluemaphas changed the format used to store map tiles, and the database layout has been heavily modified. Upstream recommends a clean reinstallation: https://github.com/BlueMap-Minecraft/BlueMap/releases/tag/v5.2. Unless you are using an SQL storage backend, this should only entail deleting the contents ofconfig.services.bluemap.coreSettings.data(defaults to/var/lib/bluemap) andconfig.services.bluemap.webRoot(defaults to/var/lib/bluemap/web). -
wstunnelhas had a major version upgrade that entailed rewriting the program in Rust. The module was updated to accommodate for breaking changes and breaking changes to the module options were minimised as much as possible. Nonetheless, some were inevitable due to changes in the upstream CLI. Certain options were moved from separate CLI arguments into the forward specifications, and those options were also removed from the module's options. Please consult the wstunnel man page for more details. Also be aware that if you have set additional options inservices.wstunnel.{clients,servers}.<name>.extraArgs, they may have been modified or removed upstream. -
gnatandgnatPackagesnow use GNAT 13 instead of GNAT 12. This matches the defaultgccversion. -
percona-server_8_4andmysql84now have password authentication via the deprecatedmysql_native_passworddisabled by default. This authentication plugin can be enabled via a CLI argument again, for detailed instructions and alternative authentication methods see upstream documentation. The config file directivedefault_authentication_pluginhas been removed. -
Percona has decided not to follow the LTS/ Innovation release scheme of upstream MySQL and thus will only create releases for MySQL LTS versions. Hence, the package names
percona-server_lts,percona-server_innovation,percona-xtrabackup_ltsandpercona-xtrabackup_innovationare deprecated.percona-serverandpercona-server_ltsnow point towards the new LTS releasepercona-server_8_4. The previous LTS continues to be supported and is available aspercona-server_8_0. The same is true for the supportingpercona-xtrabackuptooling.
-
clang-tools_<version>packages have been moved intollvmPackages_<version>(i.e.clang-tools_18is nowllvmPackages_18.clang-tools).- For convenience, the top-level
clang-toolsattribute remains and is now bound tollvmPackages.clang-tools. - Top-level
clang_tools_<version>attributes are now aliases; these will be removed in a future release.
- For convenience, the top-level
-
buildbotwas updated to 4.0 and the AngularJS frontend replaced by a React frontend. See the upstream release notes. -
headscalehas been updated to version 0.23.0 which reworked large parts of the configuration, including DNS, Magic DNS prefixes and ACL policy files. See the upstream changelog for details. -
nginxpackage no longer includes thegdandgeoipdependencies. To re-enable them, overridenginxwith the optionswithImageFilter = true;andwithGeoIP = true;. -
systemd.enableUnifiedCgroupHierarchyhas been removed. In systemd 256, support for cgroup v1 ('legacy' and 'hybrid' hierarchies) is now considered obsolete and systemd will refuse to boot under it by default. To forcibly re-enable cgroup v1 support, you can setboot.kernelParams = [ "systemd.unified_cgroup_hierarchy=0" "SYSTEMD_CGROUP_ENABLE_LEGACY_FORCE=1" ]. This is not an officially supported configuration and might cause your system to become unbootable in future versions. You are on your own. -
nrfutil-- which previously pointed to the now-deprecatedpc-nrfutilPython package -- has been repackaged under the same name with the new nrfutil tool. -
opensshandopenssh_hpnare now compiled without Kerberos 5 / GSSAPI support in an effort to reduce the attack surface of the components. Users needing this support can use the newopensshWithKerberosandopenssh_hpnWithKerberospackage flavors (e.g.programs.ssh.package = pkgs.openssh_gssapi). -
security.ipa.ipaHostnamenow defaults to the value ofnetworking.fqdnif it is set, instead of the previous hardcoded default of${networking.hostName}.${security.ipa.domain}. -
The
MSMTP_QUEUEandMSMTP_LOGenvironment variables accepted bymsmtpqhave been renamed toMSMTPQ_QandMSMTPQ_LOGrespectively. -
The logrotate service has been hardened and now requires enabling
allowNetworkingif network access is required. -
mautrix-whatsapphas been updated to version 0.11.0, which is a major rewrite of the bridge. Config file changes are required. -
qBittorrent has been updated to major version 5, which drops support for Qt 5. The
qbittorrent-qt5package has been removed. -
The fcgiwrap module now allows multiple instances running as distinct users. The option
services.fgciwrapnow takes an attribute set of the configuration of each individual instance. This requires migrating any previous configuration keys fromservices.fcgiwrap.*toservices.fcgiwrap.instances.some-instance.*. The ownership and mode of the UNIX sockets created by this service are now configurable and private by default. Processes also now run as a dynamically allocated user by default instead of root. -
The
mautrix-signalmodule was adapted to incorporate the configuration changes that resulted from the update to the mautrix bridgev2 architecture. Pre-0.7.0 configurations should continue to work. In case you want to update your configuration, make sure to check the NixOS manual. -
cargo-taurihas been updated to major version 2. Please review the migration guide. v1 ofcargo-tauriis still available ascargo-tauri_1, but will be removed in future releases. -
The nvidia driver no longer defaults to the proprietary driver starting with version 560. You will need to manually set
hardware.nvidia.opento select the proprietary or open driver. -
postgresql_12has been removed since it reached its end of life. -
postgresqlno longer accepts theenableSystemdoverride. UsesystemdSupportinstead. -
postgresqlwas split into default and -dev outputs. To make this work without circular dependencies, the output of thepg_configsystem view has been removed. Thepg_configbinary is provided in the -dev output and still works as expected. -
postgresqlis now hardened by default using the commonsystemdsettings for that. -
The dhcpcd service (
networking.useDHCP) has been hardened and now runs exclusively as the "dhcpcd" user. Users that were relying on the root privileges innetworking.dhcpcd.runHookwill have to write specific sudo or polkit rules to allow dhcpcd to perform privileged actions.As part of these changes, the DHCP lease files directory has also been moved from
/var/db/dhcpcdto/var/lib/dhcpcd. This migration is performed automatically, but users may have to update their backup configuration. -
singularity-toolshave thestoreDirargument removed from its override interface and usebuiltins.storeDirinstead. -
The
mkLayerandshellScriptbuild helpers insingularity-toolsare deprecated, as they are no longer involved in image-building. Maintainers will remove them in future releases. -
The
rust.toTargetArch,rust.toTargetOs,rust.toTargetFamily,rust.toTargetVendor,rust.toRustTarget,rust.toRustTargetSpec,rust.toRustTargetSpecShort, andrust.IsNoStdTargetfunctions are deprecated in favour of therust.platform.arch,rust.platform.os,rust.platform.target-family,rust.platform.vendor,rust.rustcTarget,rust.rustcTargetSpec,rust.cargoShortTarget,rust.cargoEnvVarTarget, andrust.isNoStdTargetplatform attributes respectively. -
All Budgie and
budgiePluginspackages have been moved to top-level (i.e.,budgie.budgie-desktopis nowbudgie-desktopandbudgiePlugins.budgie-media-player-appletis nowbudgie-media-player-applet). -
The method of safely handling secrets in the
networking.wirelessmodule has been changed to benefit from a new feature ofwpa_supplicant. The syntax to refer to secrets has changed slightly and the optionnetworking.wireless.environmentFilehas been replaced bynetworking.wireless.secretsFile; see the description of the latter for how to upgrade. -
NetBox was updated to
>= 4.1.0. Have a look at the breaking changes of the 4.0 release and the 4.1 release, make the required changes to your database, if needed, then upgrade by settingservices.netbox.package = pkgs.netbox_4_1;in your configuration. -
services.cgitnow runs as the cgit user by default instead of root. This change requires granting access to the repositories to this user or setting the appropriate one throughservices.cgit.some-instance.user. -
All Oracle JDKs and JREs (
oraclejdk,oraclejdk8,oraclejre,oraclejre8,jrePlugin,jre8Plugin,jdkdistro,oraclejdk8distro, andoraclejdk11) were dropped due to being unmaintained and heavily insecure. OpenJDK provides compatible replacements for JDKs and JREs. -
gradle_6was removed due to being unsupported upstream as of 10 Feb 2023. Additionally, it had numerous security vulnerabilities that were only patched in later versions, such as CVE-2021-29429, CVE-2021-29427, CVE-2021-29428, and CVE-2021-32751. -
nvimpagerwas updated to version 0.13.0, which changes the order of user and nvimpager settings: user commands in-cand--cmdnow override the respective default settings because they are executed later. -
javacard-devkitwas dropped due to having a dependency on the Oracle JDK, as well as being several years out-of-date. -
Kubernetes
featureGateshave changed from alistOf strtoattrsOf bool. This refactor makes it possible to also disable feature gates, without having to useextraOptsflags.A previous configuration may have looked like this:
{ featureGates = [ "EphemeralContainers" ]; extraOpts = pkgs.lib.concatStringsSep " " ( [ ''--feature-gates="CSIMigration=false"'' ] ); }Using an attribute set instead, the new configuration would be:
{ featureGates = { EphemeralContainers = true; CSIMigration=false; }; } -
pkgs.nextcloud27has been removed as it has reached EOL. -
The
environment.noXlibsoption has been removed. It was a common source of unexpected rebuilds and breakage that was often hard to diagnose. If you need to disable certain libraries, you're encouraged to add your own overlay to your configuration that targets the packages you care about. -
frigatewas updated past 0.14.0. This release includes various breaking changes, so please review the release notes. Most prominently, access to the web interface and API are now protected by authentication. Retrieve the auto-created admin account from thefrigate.servicejournal after upgrading. -
nodePackages.coc-pythonwas dropped, as its upstream is unmaintained. The associatedvimPlugins.coc-pythonwas also dropped. The upstream project recommends usingcoc-pyrightorcoc-jedias replacements. -
forgejohas been upgraded from version 7.0 to version 9.0, see the release notes for 8.0 and 9.0. -
services.forgejo.mailerPasswordFilehas been deprecated by the drop-in replacementservices.forgejo.secrets.mailer.PASSWD, which is part of the new free-formservices.forgejo.secretsoption.services.forgejo.secretsis a small wrapper over systemd'sLoadCredential=. It has the same structure (sections/keys) asservices.forgejo.settingsbut takes file paths that will be read before service startup instead of some plaintext value.services.forgejo.packagenow defaults toforgejo-lts, the Long Term Support version of Forgejo. -
forgejoandforgejo-ltsno longer support the opt-in feature PAM (Pluggable Authentication Module). -
giteano longer supports the opt-in feature PAM (Pluggable Authentication Module). -
vuzewas removed because it is unmaintained upstream and insecure (CVE-2018-13417). BiglyBT is a maintained fork. -
services.ddclient.usehas been deprecated:ddclientnow supports separate IPv4 and IPv6 configuration. Useservices.ddclient.usev4andservices.ddclient.usev6instead. -
services.pgbouncersystemd service is now configured withType=notify-reloadand allows reloading configuration without process restart. PgBouncer configuration options were moved to the freeform type option underservices.pgbouncer.settings. -
Docear was removed because it was unmaintained upstream. JabRef, Zotero, or Mendeley are potential replacements.
-
nodePackages.coc-metalswas removed due to being deprecated upstream.vimPlugins.nvim-metalsis its official replacement. -
matrix-sliding-syncwas removed because it has been replaced by the simplified sliding sync functionality introduced in matrix-synapse 114.0. -
nodePackages.coc-tslint,vimPlugins.coc-tslint,nodePackages.coc-tslint-plugin, andvimPlugins.coc-tslint-pluginwere removed due to being deprecated upstream. ThenodePackages.coc-eslintandvimPlugins.coc-eslintpackages offer comparable features foreslint, which replacedtslint. -
Tcl packages have been moved into the
tclPackagesscope. -
teleporthas been upgraded from major version 15 to major version 16. Refer to upstream upgrade instructions and release notes for v16. -
tests.overriding'spassthru.testshas been restructured as an attribute set instead of a list, making individual tests accessible by their names. -
skk-dictwas split into multiple packages underskkDictionaries. If in doubt of what to use, tryskkDictionaries.l. As part of this change, the dictionaries were moved from$out/shareto$out/share/skk. The dictionaries also won't be converted to UTF-8 unless theuseUtf8package option is enabled; UTF-8 converted dictionaries will have the .utf8 suffix appended to its filename. -
vaultwardenlost the capability to bind to privileged ports. If you rely on this behavior, override the systemd unit to allowCAP_NET_BIND_SERVICEin your configuration. -
services.invoiceplane.sites.<name>.extraConfigwas removed. Configuration must now be done through the structuredservices.invoiceplane.sites.<name>.settingsoption. -
services.ollama.sandboxhas been replaced with options to configure a staticuserandgroup. ThewritablePathsoption has also been removed and the models directory is now always exempt from sandboxing. -
The
gns3-serverservice now runs under thegns3system user instead of a dynamically created one viaDynamicUser. The use of SUID wrappers is incompatible with SystemD'sDynamicUsersetting, and GNS3 requires calling ubridge through its SUID wrapper to function properly. This change requires to manually move the following directories:- from
/var/lib/private/gns3to/var/lib/gns3 - from
/var/log/private/gns3to/var/log/gns3and to change the ownership of these directories and their contents togns3(including/etc/gns3).
- from
-
Legacy package
stalwart-mail_0_6was dropped, please note the manual upgrade process before changing the package topkgs.stalwart-mailinservices.stalwart-mail.package. -
nomad_1_5andnomad_1_6were dropped, as they have reached end-of-life upstream. Evaluating them will throw an error. -
The default
nomadpackage has been updated to 1.8.x. For more information, see breaking changes for Nomad 1.8 -
androidndkPkgshas been updated toandroidndkPkgs_26. -
Android NDK version 26 and SDK version 33 are now the default versions used for cross compilation to android.
-
ankisyncdpackage and itsservices.ankisyncdhave been removed. Useservices.anki-sync-serverinstead. -
nodePackages.vscode-css-languageserver-bin,nodePackages.vscode-html-languageserver-bin, andnodePackages.vscode-json-languageserver-binwere dropped due to an unmaintained upstream. Thevscode-langservers-extractedpackage is a maintained drop-in replacement. -
nodePackages.prismahas been replaced byprisma. -
fetchNextcloudApphas been rewritten to usefetchurlrather thanfetchzip. This invalidates all existing hashes, but you can restore the old behavior by passing itunpack = true. -
haskell.lib.compose.justStaticExecutablesnow disallows references to GHC in its output by default to alert users to closure size issues caused by #164630. See "Packaging Helpers" in the Haskell section of the Nixpkgs manual for information on working aroundoutput '...' is not allowed to refer to the following pathserrors caused by this change. -
services.stalwart-mailnow runs under thestalwart-mailsystem user instead of a dynamic one viaDynamicUserin order to avoid automatic ownership changes on its large file store on service restart. This change requires to manually move the state directory from/var/lib/private/stalwart-mailto/var/lib/stalwart-mail, and to change the ownership of the directory and its content tostalwart-mail. -
services.stalwart-mailnow uses RocksDB as the default storage backend forstateVersion≥ 24.11. It was previously using SQLite for structured data and the filesystem for blobs. -
services.stargazerhas been hardened to improve security, but these changes make break certain setups, particularly around traditional CGI.services.stargazer.allowCgiUserhas been added, enabling Stargazer'scgi-useroption to work, which was previously broken.
-
services.shiorinow requires the HTTP secret valueSHIORI_HTTP_SECRET_KEYto be provided as an environment variable.services.shiori.environmentFilehas been introduced to handle this:# This is how a environment file can be generated: # $ printf "SHIORI_HTTP_SECRET_KEY=%s\n" "$(openssl rand -hex 16)" > /path/to/env-file services.shiori.environmentFile = "/path/to/env-file"; -
/share/nanois now only linked whenprograms.nano.enableis enabled. -
PPD files for Utax printers were renamed (spaces replaced by underscores) in the newest
foomatic-dbpackage. Users of Utax printers might need to adapt theirhardware.printers.ensurePrinters.*.modelvalue to account for this. -
sqldeveloperwas dropped due to being severely out-of-date and having a dependency on JavaFX for Java 8, which we do not support. -
The
kvdokernel module package was removed as it was upstreamed in kernel version 6.9, where it is now calleddm-vdo. -
libe57formathas been updated to>= 3.0.0, which contains some backward-incompatible API changes. See the release note for more details. -
gitlabdeprecated support for runner registration tokens in GitLab 16.0, disabled their support in GitLab 17.0 and will ultimately remove it in GitLab 18.0 (as outlined in the documentation). After upgrading to GitLab >= 17.0, it is possible to re-enable support for registration tokens in the UI until GitLab 18.0. Refer to the manual on using registration tokens after GitLab 17.0. GitLab administrators should migrate to the new runner registration workflow with runner authentication tokens until the release of GitLab 18.0. -
gitlabhas been updated from 16.x to 17.x and requirespostgresql>= 14.9, as stated in the documentation. Check the upgrade guide in the NixOS manual on how to upgrade your PostgreSQL installation. -
gitaly(part ofgitlab) is now using the bundledgitpackage instead ofpkgs.git, to maintain compatibility with GitLab. -
nixos/gitlabno longer addspkgs.gittoenvironment.systemPackagesby default. -
The
replay-sorcerypackage and module was removed as it unmaintained upstream. Consider usinggpu-screen-recorderorobs-studioinstead. -
A few options of
services.sambahave been moved fromextraConfigandconfigTextto the new freeform optionsettingsand renamed, e.g.:services.samba.invalidUserstoservices.samba.settings.global."invalid users"services.samba.securityTypetoservices.samba.settings.global."security type"services.samba.sharestoservices.samba.settingsservices.samba.enableWinbinddtoservices.samba.winbindd.enableservices.samba.enableNmbdtoservices.samba.nmbd.enable
-
zxwas updated to v8, which introduces several breaking changes. See the v8 changelog for more information. -
feishinremoved support for Navidrome< v0.53.2due to an API change. See the v0.10.0 release notes for more information. -
services.dnscrypt-wrapperwas removed, as the project has been effectively unmaintained since 2018. Moreover, the NixOS module had to rely on an abandoned version ofdnscrypt-proxyv1 for the rotation of keys. To wrap a resolver with DNSCrypt, you can instead usednsdist. Seeservices.dnsdist.dnscrypt -
The
portunuspackage and service do not support weak password hashes anymore. If you installed Portunus on NixOS 23.11 or earlier, upgrade to NixOS 24.05 first to get support for strong password hashing. Then, follow the instructions on the upstream release notes to upgrade all existing user accounts to strong password hashes. If you need to upgrade to 24.11 without having completed the migration, consider the security implications of weak password hashes on your user accounts, and add the following to your configuration:services.portunus.package = pkgs.portunus.override { libxcrypt = pkgs.libxcrypt-legacy; }; services.portunus.ldap.package = pkgs.openldap.override { libxcrypt = pkgs.libxcrypt-legacy; }; -
The default value of
services.kubernetes.kubelet.hostnameis now lowercased. Explicitly setkubelet.hostnametonetworking.fqdnOrHostNameto get back the old default behavior. -
Docker now defaults to 27.x, as version 24.x stopped receiving security updates and bug fixes after February 1, 2024.
-
keycloakwas updated to version 25, which introduces new hostname related options. See Upgrading Guide for instructions. -
programs.vim.defaultEditornow only works ifprograms.vim.enableis enabled. -
services.mautrix-metawas updated to 0.4. This release makes significant changes to the settings format. If you have custom settings you should migrate them to the new format. Unfortunately upstream provides little guidance for how to do this, but the auto-migration code may serve as a useful reference. The NixOS module should warn you if you still have any old settings configured. -
The
nodePackages.shoutpackage has been removed because it was deprecated upstream in favor ofthelounge. Theshouttop-level attribute was an alias to this package. The associatedservices.shoutmodule has also been removed. -
prometheus-openldap-exporterwas removed, as it was unmaintained both upstream and in nixpkgs. -
The
indi-fullpackage no longer contains non-free drivers. To get the old collection of drivers useindi-full-nonfreeor create your own collection of drivers by overriding indi-with-drivers. E.g.:pkgs.indi-with-drivers.override {extraDrivers = with pkgs.indi-3rdparty; [indi-gphoto];} -
/share/vim-pluginsnow only gets linked ifprograms.vim.enableis enabled -
The
services.guixmodule now manages trusted substitute servers declaratively. Instead ofguix archive --authorize, list keys withservices.guix.substituters.authorizedKeys. Default substitute servers can be set viaservices.guix.substituters.urls. -
The
tracypackage no longer works on X11, since it's moved to Wayland support, which is the intended default behavior by Tracy maintainers. X11 users have to switch to the new packagetracy-x11. -
gollumhas been upgraded to major version 6. Please review their migration notes. -
services.prometheus.exporters.miniooption has been removed, as it's upstream implementation was broken and unmaintained. Minio now has built-in Prometheus metrics exposure, which can be used instead. -
The
services.prometheus.exporters.toroption has been removed, as its upstream implementation was broken and unmaintained. -
services.patroni.rafthas been removed, as Raft has been deprecated by upstream since 3.0.0. -
The
jd-clipackage was removed due to an inactive upstream and a dependency on the shut down JCenter JAR repository. Java decompilers already packaged in Nixpkgs includebytecode-viewer(GUI),cfr(CLI), andprocyon(CLI). -
The
jd-guipackage was removed due to an inactive upstream and a dependency on the end-of-life Gradle 6. Java decompilers already packaged in Nixpkgs includebytecode-viewer(GUI),cfr(CLI), andprocyon(CLI). -
services.roundcube.maxAttachmentSizewill multiply the value set with1.37to offset overhead introduced by the base64 encoding applied to attachments. -
services.mxisdhas been removed as both mxisd and ma1sd are no longer maintained. Consequently, the packagema1sdhas also been removed. -
The
rss-bridgeservice drops the support to load a configuration file from${config.services.rss-bridge.dataDir}/config.ini.php. Consider using theservices.rss-bridge.configoption instead. -
mikutterhas been removed, as the package was broken and had no maintainers in nixpkgs. -
xdg.portal.gtkUsePortalhas been removed, as it had been deprecated for over 2 years. Using theGTK_USE_PORTALenvironment variable in this manner is not intended nor encouraged by the GTK developers, but can still be done manually viaenvironment.sessionVariables. -
Support for the legacy CUPS browsing and LDAP have been removed from
services.printing. Ifcupsorldapare in theBrowseRemoteProtocolssetting inservices.printing.browsedConf, it needs to be removed. -
services.trust-dnshas been renamed toservices.hickory-dns. -
services.prometheus.exporters.pgbouncer.connectionStringFilehas been removed since it leaked the connection string (and thus potentially the DB password) into the cmdline of process making it effectively world-readable.Use
services.prometheus.exporters.pgbouncer.connectionEnvFileinstead. -
lshandservices.lshdhave been removed as they had no maintainer in Nixpkgs and no upstream release in over a decade. It is recommended to migrate toopensshandservices.openssh. -
cephhas been upgraded to v19. See the Ceph "squid" release notes for details and recommended upgrade procedure. -
services.frrhas been refactored to use upstream service scripts. The per-daemon configurations have been removed in favour of anintegrated-vtysh-configstyle config. The daemon submodules now use the daemon name (e.g.ospfd) instead of the protocol name (ospf). The daemonszebra,mgmtdandstaticdare always enabled if a config is present. ThevtyListenAddressandvtyListenPortoptions have been removed; useoptionsorextraOptionsinstead, respectively. -
opencv2andopencv3have been removed, as they are obsolete and were not used by any other package. External users are encouraged to migrate to OpenCV 4. -
tvheadendpackage and theservices.tvheadendmodule have been removed due to lack of maintenance in Nixpkgs and being stuck on an unmaintained version that required FFmpeg 4. Please see the related pull request #332259 if you are interested in maintaining a newer version. -
antennasandservices.antennashave been removed as they only work withtvheadend(see above). -
system.build.brightboxImagehas been removed as it no longer built and has not seen any maintenance in over 7 years (excluding tree-wide changes). -
services.syncplaynow exposes all currently available command-line arguments forsyncplay-serveras options, as well as auseACMEHostoption for easy TLS setup. The systemd service now usesDynamicUser/StateDirectoryand theuserandgroupoptions have been deprecated. -
openlenswas removed. It is recommended to uselens-desktopinstead. -
services.dnsmasq.extraConfighas been removed, as it had been deprecated for over 2 years. This option has been replaced byservices.dnsmasq.settings. -
The NixOS installation media no longer support the ReiserFS or JFS file systems by default.
-
Minimal installer ISOs are no longer built on the small channel. Please obtain installer images from the full release channels.
-
The default FFmpeg version is now 7.1, and FFmpeg 5 has been removed. Please prefer using the package variants without a version suffix, or pin FFmpeg 6 or 4 if necessary for compatibility. Note that we keep old versions around only as required to support packages in the tree, and FFmpeg 4 especially should be avoided in favour of newer versions as it may be removed soon.
-
opensslnow defaults to the latest version line3.3.x, instead of3.0.xbefore. While there should be no major code incompatibilities, newer OpenSSL versions typically strengthen the default security level. This means that you may have to explicitly allow weak ciphers, hashes and key lengths if necessary. See: OpenSSL security level documentation. -
isynchas been updated to version1.5.0, which introduces some breaking changes. See the compatibility concerns for more details. -
Two new packages --
gpauthandgpclientfrom the 2.x version of the GlobalProtect-openconnect project -- are added in parallel toglobalprotect-openconnect. The GUI components related to the project are non-free and not packaged. -
Compatible string matching for
hardware.deviceTree.overlayshas been changed to a more correct behavior. See below for details. -
rusticwas upgraded to0.9.0, which contains breaking changes to the config file format. -
pkgs.formats.iniandpkgs.formats.iniWithGlobalSectionwithlistsAsDuplicateKeysorlistToValueno longer merge non-list values into lists by default. Backwards-compatible behavior can be enabled withatomsCoercedToLists. -
Atlassian Server products have been removed, as support for the Atlassian Server products ended in February 2024 and there was insufficient interest in maintaining the Atlassian Data Center replacements:
- The
atlassian-bamboopackage - The
atlassian-confluencepackage and itsservices.confluenceNixOS module - The
atlassian-crowdpackage and itsservices.crowdNixOS module - The
atlassian-jirapackage and itsservices.jiraNixOS module
- The
-
python3Packages.nosehas been removed, as it has been deprecated and unmaintained for almost a decade and does not work on Python 3.12. Please switch topytestor another test runner/framework. -
dotnet-sdk,dotnet-runtime, and all other dotnet packages now use a wrapper package containingbin/dotnet, build hooks, etc. If you need to reference the underlying dotnet distribution (DOTNET_ROOT) you should use e.g.dotnet-runtime.unwrapped. -
The root of dotnet distribution packages (DOTNET_ROOT) is now under e.g.
${dotnet-sdk.unwrapped}/share/dotnetinstead of directly in the package root. This is consistent with packaging guidelines and more friendly for FHS environments. -
dotnet-sdk,dotnet-runtime, anddotnet-aspnetcorenow point to dotnet 8 rather than dotnet 6. For packages that still need dotnet 6, usedotnet-sdk_6, etc. -
torq has been removed because upstreamed went closed source.
Other Notable Changes
-
The
zerocallusedregshardening flag is enabled by default on compilers that support it. -
The
stackclashprotectionhardening flag has been added, though disabled by default. -
The
pacrethardening flag has been added, though disabled by default. -
cargoSha256inrustPlatform.buildRustPackagehas been deprecated in favor ofcargoHashwhich supports SRI hashes. See buildRustPackage: Compiling Rust applications with Cargo for more information. -
The
vendorHashof Go packages built withbuildGoModulecan now be overridden withoverrideAttrs.goModules,modRoot,vendorHash,deleteVendor, andproxyVendorare now passed as derivation attributes.goModulesandvendorHashare no longer placed underpassthru. -
buildFlags/buildFlagsArrayonbuildGoModulehave been deprecated. 24.11 is the last release wherebuildGoModuleaccepts these flags (while throwing a warning). Use theldflagsand/ortagsattributes or the environment instead. -
buildGoPackagehas been deprecated. 24.11 is the last release withbuildGoPackageavailable. -
hareHookhas been added as the language framework for Hare. From now on, it, not theharepackage, should be added tonativeBuildInputswhen building Hare programs. -
lib.options.mkPackageOptionMDis now obsolete; use the identicallib.options.mkPackageOptioninstead. -
lib.misc.mapAttrsFlattenis now formally deprecated and will be removed in future releases; use the identicallib.attrsets.mapAttrsToListinstead. -
virtualisation.docker.liveRestorehas been renamed tovirtualisation.docker.daemon.settings."live-restore"and turned off by default for state versions of at least 24.11. -
Tailscale's
authKeyFilecan now have its corresponding parameters set throughconfig.services.tailscale.authKeyParameters, allowing for non-ephemeral unsupervised deployment and more. See Registering new nodes using OAuth credentials for the supported options. -
nixosTestsnow provide a working IPv6 setup for VLAN 1 by default. -
Kanidm can now be provisioned using the new [
services.kanidm.provision] option, but requires using a patched version available viapkgs.kanidm.withSecretProvisioning. -
Kanidm previously had an incorrect systemd service type, causing dependent units with an
afterandrequiresdirective to start beforekanidm*finished startup. The module has now been updated in line with upstream recommendations. -
The kubelet configuration file can now be amended with arbitrary additional content using the
services.kubernetes.kubelet.extraConfigoption. -
The
services.seafilemodule was updated to major version 11.- As part of this upgrade, the database backend will be migrated to MySQL. This process should be automatic, but in case of a botched migration, old sqlite files are not removed and can be used to manually migrate the database.
- Additionally, the updated CSRF protection may prevent some users from logging in.
Specific origin addresses can be whitelisted using the
services.seafile.seahubExtraConfoption (e.g.services.seafile.seahubExtraConf = ''CSRF_TRUSTED_ORIGINS = ["https://example.com"]'';). Note that first solution of the official FAQ answer is not allowed by theservices.nginxmodule's config-checker.
-
The new option
boot.binfmt.addEmulatedSystemsToNixSandboxallows you to skip adding the emulated systems tonix.settings.extra-platforms. Now you can emulate foreign binaries locally while only building them on native remote builders. -
The latest available version of Nextcloud is v30 (available as
pkgs.nextcloud30). The installation logic is as follows:- If
services.nextcloud.packageis specified explicitly, this package will be installed (recommended) - If
system.stateVersionis >=24.05,pkgs.nextcloud29will be installed by default. - If
system.stateVersionis >=24.11,pkgs.nextcloud30will be installed by default. - Please note that an upgrade from v28 (or older) to v30 directly is not possible. Please upgrade to
nextcloud29(or earlier) first. Nextcloud prohibits skipping major versions while upgrading. You can upgrade by declaringservices.nextcloud.package = pkgs.nextcloud29;.
- If
-
To facilitate dependency injection, the
imguipackage now builds a static archive using vcpkg' CMake rules. The derivation now installs "impl" headers selectively instead of by a wildcard. Useimgui.srcif you just want to access the unpacked sources. -
The new
boot.loader.systemd-boot.windowsoption makes setting up dual-booting with Windows on a different drive easier. -
The
boot.loader.raspberryPioptions were marked as deprecated in 23.11 and have now been removed. -
Linux 4.19 has been removed because it will reach its end of life within the lifespan of 24.11.
-
Unprivileged access to the kernel syslog via
dmesgis now restricted by default. Users wanting to keep an unrestricted access to it can setboot.kernel.sysctl."kernel.dmesg_restrict" = false. -
The
i18n.inputMethodmodule introduces two new properties:enableandtype, for declaring whether to enable an alternative input method and defining which input method respectfully. The options available intypeare the same as the existingenabledoption.enabledis now deprecated, and will be removed in a future release. -
security.pam.u2fnow uses freeform options; all module options are now configurable throughsecurity.pam.u2f.settings. -
mikutterwas removed as the package was broken and had no maintainers. -
services.getty.autologinOncewas added to limit the automatic login to once per boot and on the first tty only. When using full disk encryption, this option allows to unlock the system without retyping the passphrase while keeping the other ttys protected. -
Gollum was upgraded to major version 6. Read their migration notes.
-
The hooks
yarnConfigHookandyarnBuildHookwere added. These should replaceyarn2nix.mkYarnPackageand otheryarn2nixrelated tools. The motivation to get rid ofyarn2nixtools is the fact that they are too complex and hard to maintain, and they rely upon too much Nix evaluation which is problematic if import-from-derivation is not allowed (see more details at #296856. The transition frommkYarnPackagetoyarn{Config,Build}Hookis tracked at #324246. -
services.timesyncd.serversnow defaults tonull, allowing systemd-timesyncd to use NTP servers advertised by DHCP. -
services.timesyncd.fallbackServerswas added and defaults tonetworking.timeServers. -
Cinnamon has been updated to 6.2. Please check upstream announcement for more details. Following Mint 22 defaults, the Cinnamon module no longer ships
gearyandhexchatby default. -
zfs.latestCompatibleLinuxPackagesis deprecated and is now pointing at the default kernel. If using the stable LTS kernel (defaultlinuxPackagesis not possible then you must explicitly pin a specific kernel release. For example,boot.kernelPackages = pkgs.linuxPackages_6_6. Please be aware that non-LTS kernels are likely to go EOL before ZFS supports the latest supported non-LTS release, requiring manual intervention. -
The
shadowstackhardening flag has been added, though disabled by default. -
writeReferencesToFilehas been removed after its deprecation in 24.05. Use the trivial build helperwriteClosureinstead. -
xxdis now provided by thetinyxxdpackage rather thanvim.xxdto reduce closure size and vulnerability impact. Since it has the same options and semantics as Vim'sxxdutility, there is no user impact. Vim'sxxdremains available as thevim.xxdpackage. -
resticmodule now has an option for inhibiting system sleep while backups are running, defaulting to off (not inhibiting sleep). Available asservices.restic.backups.<name>.inhibitsSleep. -
Mattermost has been updated from 9.5 to 9.11 ESR. See the changelog for more details.
-
cargo-tauri.hookwas introduced to help users build Tauri projects. It is meant to be used alongsiderustPlatform.buildRustPackageand Node hooks such asnpmConfigHook,pnpm.configHook, and the newyarnConfig -
power.upsnow powers off UPSs during a power outage event. This saves UPS battery and ensures that host(s) get back up again when power comes back, even in the scenario when the UPS would have had enough capacity to keep power on during the whole power outage. If you like the old behaviour of keeping the UPSs on (and emptying the battery) after the host(s) have shut down, and risk not getting a power cycle event to get the host(s) back up, setpower.ups.upsmon.settings.POWERDOWNFLAG = null;. -
nixos-firewall-toolnow supports nftables in addition to iptables and is installed by default when NixOS firewall is enabled. -
Support for runner registration tokens has been deprecated in
gitlab-runner15.6 and is expected to be removed ingitlab-runner18.0. Configuration of existing runners should be changed to using runner authentication tokens by configuring {option}services.gitlab-runner.services.<name>.authenticationTokenConfigFileinstead of the former {option}services.gitlab-runner.services.<name>.registrationConfigFileoption. -
iproute2now has libbpf support.If you use extensions that are not packaged in nixpkgs, please review whether it still works with the current settings and adjust accordingly if needed.
-
nix.channel.enable = falseno longer impliesnix.settings.nix-path = []. Since Nix 2.13, anix-pathset innix.confcannot be overridden by theNIX_PATHconfiguration variable. -
ZFS now imports its pools in
postResumeCommandsrather thanpostDeviceCommands. If you hadpostDeviceCommandsscripts that depended on ZFS pools being imported, those now need to be inpostResumeCommands. -
services.automatic-timezoned.enable = truewill now settime.timeZone = null. This is to avoid silently shadowing a user's explicitly defined timezone without recognition on the user's part. -
services.localtimed.enable = truewill now settime.timeZone = null. This is to avoid silently shadowing a user's explicitly defined timezone without recognition on the user's part. -
qgisandqgis-ltrare now built withoutgrassby default.grasssupport can be enabled withqgis.override { withGrass = true; }. -
virtualisation.incusmodule gained newincus-user.serviceandincus-user.socketsystemd units. It is now possible to add a user toincusgroup instead ofincus-adminfor increased security. -
freecadnow supports addons and custom configuration in nix-way, which can be used by callingfreecad.customize.
Detailed Migration Information
sound options removal
The sound options have been largely removed, as they are unnecessary for most modern setups, and cause issues when enabled.
If you set sound.enable in your configuration:
- If you are using Pulseaudio or PipeWire, simply remove that option
- If you are not using an external sound server, and want volumes to be persisted across shutdowns, set
hardware.alsa.enablePersistence = trueinstead
If you set sound.enableOSSEmulation in your configuration:
- Make sure it is still necessary, as very few applications actually use OSS
- If necessary, set
boot.kernelModules = [ "snd_pcm_oss" ]
If you set sound.extraConfig in your configuration:
- If you are using another sound server, like Pulseaudio, JACK or PipeWire, migrate your configuration to that
- If you are not using an external sound server, set
environment.etc."asound.conf".text = yourExtraConfiginstead
If you set sound.mediaKeys in your configuration:
- Preferably switch to handling media keys in your desktop environment/compositor
- If you want to maintain the exact behavior of the option, use the following snippet
services.actkbd = let
volumeStep = "1%";
in {
enable = true;
bindings = [
# "Mute" media key
{ keys = [ 113 ]; events = [ "key" ]; command = "${alsa-utils}/bin/amixer -q set Master toggle"; }
# "Lower Volume" media key
{ keys = [ 114 ]; events = [ "key" "rep" ]; command = "${alsa-utils}/bin/amixer -q set Master ${volumeStep}- unmute"; }
# "Raise Volume" media key
{ keys = [ 115 ]; events = [ "key" "rep" ]; command = "${alsa-utils}/bin/amixer -q set Master ${volumeStep}+ unmute"; }
# "Mic Mute" media key
{ keys = [ 190 ]; events = [ "key" ]; command = "${alsa-utils}/bin/amixer -q set Capture toggle"; }
];
};
hardware.deviceTree.overlays compatible string matching
The original compatible string implementation in older NixOS versions relied on substring matching, which is incorrect for overlays with multiple compatible strings and other cases.
The new behavior is consistent with what other tools already do - the overlay is considered applicable if, and only if, any of the compatible strings in the overlay match any of the compatible strings in the DT.
To provide some examples:
Overlay compatible |
DT compatible |
Pre-24.11 behavior | Correct behavior | Notes |
|---|---|---|---|---|
"foo" |
"foo", "bar" |
match | match | Most common use case does not change |
"foo" |
"foobar" |
match | no match | Substrings should not be matched |
"foo bar" |
"foo", "bar" |
match | no match | Separators should not be matched to spaces |
"foo", "bar" |
"baz", "bar" |
no match | match | One compatible string matching is enough |
Note that this also allows writing overlays that explicitly apply to multiple boards.
NixOS Wiki
The official NixOS Wiki at wiki.nixos.org was launched in April 2024, featuring content initially copied from the community wiki. The wiki enhances the official documentation, linking to existing resources and providing a categorization system for easy navigation, and is guided by a new "Manual of Style" — a contribution guide and enhanced templates. It offers a wealth of new information, including articles on applications, desktop environments, and a growing number of translations in multiple languages.