Support is planned until the end of December 2024, handing over to 24.11.
In addition to numerous new and upgraded packages, this release has the following highlights:
-
screen
's module has been cleaned, and will now require you to setprograms.screen.enable
in order to populatescreenrc
and add the program to the environment. -
linuxPackages_testing_bcachefs
is now fully deprecated bylinuxPackages_testing
, and is therefore no longer available. -
NixOS now installs a stub ELF loader that prints an informative error message when users attempt to run binaries not made for NixOS.
- This can be disabled through the
environment.stub-ld.enable
option. - If you use
programs.nix-ld.enable
, no changes are needed. The stub will be disabled automatically.
- This can be disabled through the
-
Julia environments can now be built with arbitrary packages from the ecosystem using the
.withPackages
function. For example:julia.withPackages ["Plots"]
.
-
Guix, a functional package manager inspired by Nix. Available as services.guix.
-
maubot, a plugin-based Matrix bot framework. Available as services.maubot.
-
systemd's gateway, upload, and remote services, which provides ways of sending journals across the network. Enable using services.journald.gateway, services.journald.upload, and services.journald.remote.
-
GNS3, a network software emulator. Available as services.gns3-server.
-
rspamd-trainer, script triggered by a helper which reads mails from a specific mail inbox and feeds them into rspamd for spam/ham training.
-
ollama, server for running large language models locally.
-
Anki Sync Server, the official sync server built into recent versions of Anki. Available as services.anki-sync-server. The pre-existing services.ankisyncd has been marked deprecated and will be dropped after 24.05 due to lack of maintenance of the anki-sync-server softwares.
-
Suwayomi Server, a free and open source manga reader server that runs extensions built for Tachiyomi. Available as services.suwayomi-server.
-
ping_exporter, a Prometheus exporter for ICMP echo requests. Available as services.prometheus.exporters.ping.
-
Clevis, a pluggable framework for automated decryption, used to unlock encrypted devices in initrd. Available as boot.initrd.clevis.enable.
-
TuxClocker, a hardware control and monitoring program. Available as programs.tuxclocker.
-
himalaya
was updated to v1.0.0-beta, which introduces breaking changes. Check out the release note for details. -
The
power.ups
module now generatesupsd.conf
,upsd.users
andupsmon.conf
automatically from a set of new configuration options. This breaks compatibility with existingpower.ups
setups where these files were created manually. Back up these files before upgrading NixOS. -
k9s
was updated to v0.31. There have been various breaking changes in the config file format, check out the changelog of v0.29, v0.30 and v0.31 for details. It is recommended to back up your current configuration and let k9s recreate the new base configuration. -
idris2
was updated to v0.7.0. This version introduces breaking changes. Check out the changelog for details. -
nitter
requires aguest_accounts.jsonl
to be provided as a path or loaded into the default location at/var/lib/nitter/guest_accounts.jsonl
. See Guest Account Branch Deployment for details. -
Invidious has changed its default database username from
kemal
toinvidious
. Setups involving an externally provisioned database (i.e.services.invidious.database.createLocally == false
) should adjust their configuration accordingly. The oldkemal
user will not be removed automatically even when the database is provisioned automatically.(NixOS#265857) -
paperless
'services.paperless.extraConfig
setting has been removed and converted to the freeform type and option namedservices.paperless.settings
. -
The legacy and long deprecated systemd target
network-interfaces.target
has been removed. Usenetwork.target
instead. -
services.frp.settings
now generates the frp configuration file in TOML format as recommended by upstream, instead of the legacy INI format. This has also introduced other changes in the configuration file structure and options.- The
settings.common
section in the configuration is no longer valid and all the options form inside it now goes directly undersettings
. - The
_
separating words in the configuration options is removed so the options are now in camel case. For example:server_addr
becomesserverAddr
,server_port
becomesserverPort
etc. - Proxies are now defined with a new option
settings.proxies
which takes a list of proxies. - Consult the upstream documentation for more details on the changes.
- The
-
mkosi
was updated to v20. Parts of the user interface have changed. Consult the release notes of v19 and v20 for a list of changes. -
services.nginx
will no longer advertise HTTP/3 availability automatically. This must now be manually added, preferably to each location block. Example:locations."/".extraConfig = '' add_header Alt-Svc 'h3=":$server_port"; ma=86400'; ''; locations."^~ /assets/".extraConfig = '' add_header Alt-Svc 'h3=":$server_port"; ma=86400'; '';
-
The
kanata
package has been updated to v1.5.0, which includes breaking changes. -
The
craftos-pc
package has been updated to v2.8, which includes breaking changes.- Files are now handled in binary mode; this could break programs with embedded UTF-8 characters.
- The ROM was updated to match ComputerCraft version v1.109.2.
- The bundled Lua was updated to Lua v5.2, which includes breaking changes. See the Lua manual for more information.
- The WebSocket API was rewritten, which introduced breaking changes.
-
The latest available version of Nextcloud is v28 (available as
pkgs.nextcloud28
). The installation logic is as follows:- If
services.nextcloud.package
is specified explicitly, this package will be installed (recommended) - If
system.stateVersion
is >=24.05,pkgs.nextcloud28
will be installed by default. - If
system.stateVersion
is >=23.11,pkgs.nextcloud27
will be installed by default. - Please note that an upgrade from v26 (or older) to v28 directly is not possible. Please upgrade to
nextcloud27
(or earlier) first. Nextcloud prohibits skipping major versions while upgrading. You can upgrade by declaringservices.nextcloud.package = pkgs.nextcloud27;
.
- If
-
The vendored third party libraries have been mostly removed from
cudaPackages.nsight_systems
, which we now only ship forcudaPackages_11_8
and later due to outdated dependencies. Users comfortable with the vendored dependencies may useoverrideAttrs
to amend thepostPatch
phase and themeta.broken
correspondingly. Alternatively, one could package the deprecatedboost170
locally, as required forcudaPackages_11_4.nsight_systems
. -
The
cudaPackages
package scope has been updated tocudaPackages_12
. -
services.resolved.fallbackDns
can now be used to disable the upstream fallback servers entirely by setting it to an empty list. To get the previous behaviour of the upstream defaults set it to null, the new default, instead. -
services.avahi.nssmdns
got split intoservices.avahi.nssmdns4
andservices.avahi.nssmdns6
which enable the mDNS NSS switch for IPv4 and IPv6 respectively. Since most mDNS responders only register IPv4 addresses, most users want to keep the IPv6 support disabled to avoid long timeouts. -
multi-user.target
no longer depends onnetwork-online.target
. This will potentially break services that assumed this was the case in the past. This was changed for consistency with other distributions as well as improved boot times.We have added a warning for services that are
after = [ "network-online.target" ]
but do not depend on it (e.g. usingwants
). -
networking.iproute2.enable
now does not setenvironment.etc."iproute2/rt_tables".text
.Setting
environment.etc."iproute2/{CONFIG_FILE_NAME}".text
will override the whole configuration file instead of appending it to the upstream configuration file.CONFIG_FILE_NAME
includesbpf_pinning
,ematch_map
,group
,nl_protos
,rt_dsfield
,rt_protos
,rt_realms
,rt_scopes
, andrt_tables
. -
The executable file names for
firefox-devedition
,firefox-beta
,firefox-esr
now matches their package names, which is consistent with thefirefox-*-bin
packages. The desktop entries are also updated so that you can have multiple editions of firefox in your app launcher. -
switch-to-configuration does not directly call systemd-tmpfiles anymore. Instead, the new artificial sysinit-reactivation.target is introduced which allows to restart multiple services that are ordered before sysinit.target and respect the ordering between the services.
-
The
systemd.oomd
module behavior is changed as:-
Raise ManagedOOMMemoryPressureLimit from 50% to 80%. This should make systemd-oomd kill things less often, and fix issues like this. Reference: commit
-
Remove swap policy. This helps prevent killing processes when user's swap is small.
-
Expand the memory pressure policy to system.slice, user-.slice, and all user owned slices. Reference: commit
-
systemd.oomd.enableUserServices
is renamed tosystemd.oomd.enableUserSlices
.
-
-
security.pam.enableSSHAgentAuth
now requiresservices.openssh.authorizedKeysFiles
to be non-empty, which is the case whenservices.openssh.enable
is true. Previously,pam_ssh_agent_auth
silently failed to work. -
The configuration format for
services.prometheus.exporters.snmp
changed with release 0.23.0. The module now includes an optional config check, that is enabled by default, to make the change obvious before any deployment. More information about the configuration syntax change is available in the upstream repository. -
watchdogd, a system and process supervisor using watchdog timers. Available as services.watchdogd.
-
addDriverRunpath
has been added to facilitate the deprecation of the oldaddOpenGLRunpath
setuphook. This change is motivated by the evolution of the setuphook to include all hardware acceleration. -
Cinnamon has been updated to 6.0. Please beware that the Wayland session is still experimental in this release.
-
services.postgresql.extraPlugins
changed its type from just a list of packages to also a function that returns such a list. For example a config line likeservices.postgresql.extraPlugins = with pkgs.postgresql_11.pkgs; [ postgis ];
is recommended to be changed toservices.postgresql.extraPlugins = ps: with ps; [ postgis ];
; -
Programs written in Nim are built with libraries selected by lockfiles. The
nimPackages
andnim2Packages
sets have been removed. See https://nixos.org/manual/nixpkgs/unstable#nim for more information. -
Portunus has been updated to major version 2. 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. After upgrading, follow the instructions on the upstream release notes to upgrade all user accounts to strong password hashes. Support for weak password hashes will be removed in NixOS 24.11.
-
libass
now uses the native CoreText backend on Darwin, which may fix subtitle rendering issues withmpv
,ffmpeg
, etc. -
The following options of the Nextcloud module were moved into
services.nextcloud.extraOptions
and renamed to match the name from Nextcloud'sconfig.php
:logLevel
->loglevel
,logType
->log_type
,defaultPhoneRegion
->default_phone_region
,overwriteProtocol
->overwriteprotocol
,skeletonDirectory
->skeletondirectory
,globalProfiles
->profile.enabled
,extraTrustedDomains
->trusted_domains
andtrustedProxies
->trusted_proxies
.
-
The option [
services.nextcloud.config.dbport
] of the Nextcloud module was removed to match upstream. The port can be specified inservices.nextcloud.config.dbhost
. -
The Yama LSM is now enabled by default in the kernel, which prevents ptracing non-child processes. This means you will not be able to attach gdb to an existing process, but will need to start that process from gdb (so it is a child). Or you can set
boot.kernel.sysctl."kernel.yama.ptrace_scope"
to 0. -
Nginx virtual hosts using
forceSSL
orglobalRedirect
can now have redirect codes other than 301 throughredirectCode
. -
The source of the
mockgen
package has changed to the go.uber.org/mock fork because the original repository is no longer maintained. -
security.pam.enableSSHAgentAuth
was renamed tosecurity.pam.sshAgentAuth.enable
and anauthorizedKeysFiles
option was added, to control whichauthorized_keys
files are trusted. It defaults to the previous behaviour, which is insecure: see #31611. -
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 since 22.11.
-
services.zfs.zed.enableMail
now uses the globalsendmail
wrapper defined by an email module (such as msmtp or Postfix). It no longer requires using a special ZFS build with email support. -
nextcloud-setup.service
no longer changes the group of each file & directory inside/var/lib/nextcloud/{config,data,store-apps}
if one of these directories has the wrong owner group. This was part of transitioning the group used for/var/lib/nextcloud
, but isn't necessary anymore. -
The
krb5
module has been rewritten and moved tosecurity.krb5
, moving all options butsecurity.krb5.enable
andsecurity.krb5.package
intosecurity.krb5.settings
. -
Gitea 1.21 upgrade has several breaking changes, including:
- Custom themes and other assets that were previously stored in
custom/public/*
now belong incustom/public/assets/*
- New instances of Gitea using MySQL now ignore the
[database].CHARSET
config option and always use theutf8mb4
charset, existing instances should migrate via thegitea doctor convert
CLI command.
- Custom themes and other assets that were previously stored in
-
The
hardware.pulseaudio
module now sets permission of pulse user home directory to 755 when running in "systemWide" mode. It fixes issue 114399. -
The
btrbk
module now automatically selects and provides required compression program depending on the configuredstream_compress
option. Since this replaces the need for theextraPackages
option, this option will be deprecated in future releases. -
The
mpich
package expression now requireswithPm
to be a list, e.g."hydra:gforker"
becomes[ "hydra" "gforker" ]
. -
QtMultimedia has changed its default backend to
QT_MEDIA_BACKEND=ffmpeg
(previouslygstreamer
on Linux ordarwin
on MacOS). The previous native backends remain available but are now minimally maintained. Refer to upstream documentation for further details about each platform.