
Since DEs like KDE Plasma 6, GNOME and COSMIC are not designed to be X11-exclusive, putting them under `services.xserver` is misleading. In particular, GNOME defaults to Wayland these days and X11 support is going to be dropped in near future. Let’s follow Plasma and move GNOME NixOS options out of `xserver` attribute. This patch does not include any changes to X11 support itself. Signed-off-by: John Titor <50095635+JohnRTitor@users.noreply.github.com>
53 KiB
Release 25.05 (“Warbler”, 2025.05/23)
Highlights
Alongside many enhancements to NixOS modules and general system improvements, this release features the following highlights:
-
NixOS now has initial support for the COSMIC DE which is currently at Alpha 7. COSMIC is a Rust-based Desktop Environment by System76, makers of Pop!_OS. You can use COSMIC by enabling the greeter (login manager) with , and the DE itself by enabling . The support in NixOS/Nixpkgs is stable but still considered experimental because of the recent the addition. The COSMIC maintainers will be waiting for one more release of NixOS to determine if the experimental tag should be removed or not. Until then, please report any issues to the COSMIC DE tracker in Nixpkgs instead of upstream.
-
nixos-rebuild-ng
, a full rewrite ofnixos-rebuild
in Python, is available for testing. You can enable it by setting in your configuration (this will replace the oldnixos-rebuild
), or by addingnixos-rebuild-ng
to yourenvironment.systemPackages
(in this case, it will live side-by-side withnixos-rebuild
asnixos-rebuild-ng
). It is expected that the next major version of NixOS (25.11) will enablesystem.rebuild.enableNg
by default. -
A
nixos-rebuild build-image
sub-command has been added. It allows users to build platform-specific (disk) images from their NixOS configurations.nixos-rebuild build-image
works similar to the popular nix-community/nixos-generators project. See new section on image building in the NixOS manual. It is also available fornixos-rebuild-ng
. -
nixos-option
has been rewritten to a Nix expression called by a simple bash script. This lowers our maintenance threshold, makes eval errors less verbose, adds support for flake-based configurations, descending intoattrsOf
andlistOf
submodule options, and--show-trace
. -
The global Mesa version can now be managed without a mass rebuild by setting .
-
GNOME has been updated to version 48.
decibels
music player is now installed by default. You can disable it using .gnome-shell-extensions
extension collection (which included GNOME Classic extensions, Apps Menu, and User Themes, among others) are no longer installed by default. You can install them again with {option}services.xserver.desktopManager.gnome.sessionPath
.- Option now also installs
sysprof
andd-spy
. - Option
services.gnome.core-utilities.enable
has been renamed to . cantarell-fonts
,source-code-pro
andsource-sans
fonts are no longer installed by default. They have been replaced byadwaita-fonts
.
Refer to the GNOME release notes for more details.
-
channels.nixos.org now supports the Lockable HTTP Tarball Protocol. This allows using the channel
nixexprs.tar
as Nix Flake input, e.g.:inputs.nixpkgs.url = "https://channels.nixos.org/nixos-25.05/nixexprs.tar.xz";
New Modules
-
AmneziaVPN, a self-hostable open-source VPN client, is available in two variants:
- programs.amnezia-vpn: a GUI client which can also deploy a VPN endpoint to a remote server
- {option}
networking.wireguard
adds support for the AmneziaWG variant of the protocol, featuring better masking against Deep Packet Inspection. The variant to be used is set per interface asnetworking.wireguard.interfaces.<name>.type
, defaulting to wireguard.
-
Bazecor, the graphical configurator for Dygma Products. Available as programs.bazecor.
-
Bonsai, a general-purpose event mapper/state machine primarily used to create complex key shortcuts, and as part of the SXMO desktop environment. Available as services.bonsaid.
-
scanservjs, a web UI for SANE scanners. Available at services.scanservjs.
-
Kimai, a web-based multi-user time-tracking application. Available as services.kimai.
-
Kismet, a Wi-Fi, Bluetooth, and RF monitoring application supporting a wide range of hardware. Available as services.kismet.
-
vwifi, a Wi-Fi simulator daemon leveraging the
mac80211_hwsim
andvhost_vsock
kernel modules for efficient simulation of multi-node Wi-Fi networks. Available as services.vwifi. -
Oncall, a web-based calendar tool designed for scheduling and managing on-call shifts. Available as services.oncall.
-
Homer, a very simple static homepage for your server. Available as services.homer.
-
Ghidra, a software reverse engineering (SRE) suite of tools. Available as programs.ghidra.
-
Omnom, a webpage bookmarking and snapshotting service. Available as services.omnom.
-
Yggdrasil-Jumper, an independent project that aims to transparently reduce latency of a connection over Yggdrasil network, utilizing NAT traversal to automatically bypass intermediary nodes. Available as services.yggdrasil-jumper.
-
xpad-noone is the original upstream xpad driver from the Linux kernel with support for Xbox One controllers removed — especially useful for people who want to use an XBox One controller under the
xone
driver and an Xbox 360 controller under thexpad
driver at the same time. Available as hardware.xpad-noone. -
uMurmur, minimalistic Mumble server primarily targeted to run on embedded computers. Available as services.umurmur.
-
Zenoh, a pub/sub/query protocol with low overhead. The Zenoh router daemon is available as services.zenohd.
-
ytdl-sub, a tool that downloads media via yt-dlp and prepares it for your favorite media player, including Kodi, Jellyfin, Plex, Emby, and modern music players. Available as services.ytdl-sub.
-
MaryTTS, an open-source, multilingual text-to-speech synthesis system written in pure Java. Available as services.marytts.
-
Continuwuity, a federated chat server implementing the Matrix protocol, forked from Conduwuit. Available as services.matrix-continuwuity.
-
Reposilite, a lightweight and easy-to-use repository manager for Maven-based artifacts in the JVM ecosystem. Available as services.reposilite.
-
networking.modemmanager has been split out of networking.networkmanager. NetworkManager still enables ModemManager by default, but options exist now to run NetworkManager without ModemManager.
-
Routinator 3000, a full-featured RPKI Relying Party software package that runs as a service which periodically downloads and verifies RPKI data. Available as services.routinator.
-
doh-server, a high performance DNS over HTTPS server. Available as services.doh-server.
-
ncps, a Nix binary cache proxy service implemented in Go using go-nix. Available as services.ncps.
-
Readeck, a read-it later web-application. Available as services.readeck.
-
Traccar, a modern GPS Tracking Platform. Available as services.traccar.
-
Schroot, a lightweight virtualisation tool. Securely enter a chroot and run a command or login shell. Available as programs.schroot.
-
Firezone, an enterprise-ready zero-trust access platform built on WireGuard. This includes the server stack as services.firezone.server.enable, a TURN/STUN relay service as services.firezone.relay.enable, a gateway service as services.firezone.gateway.enable, a headless client as services.firezone.headless-client.enable and a GUI client as services.firezone.gui-client.enable.
-
crab-hole, a cross platform Pi-hole clone written in Rust using hickory-dns/trust-dns. Available as services.crab-hole.
-
agnos, a program that obtains TLS certificates from an ACME provider via the DNS-01 challenge without using third-party DNS provider APIs. Available as security.agnos.
-
zwave-js-ui, a full featured Z-Wave Control Panel and MQTT Gateway. Available as services.zwave-js-ui.
-
Pinchflat, a selfhosted YouTube media manager used to track channels and download videos on release. Available as services.pinchflat.
-
Amazon CloudWatch Agent, the official telemetry collector for AWS CloudWatch and AWS X-Ray. Available as services.amazon-cloudwatch-agent.
-
Fluent Bit, a fast Log, Metrics and Traces Processor and Forwarder. Available as services.fluent-bit.
-
Bat, a {manpage}
cat(1)
clone with wings. Available as programs.bat. -
Autotier, a passthrough FUSE filesystem. Available as services.autotierfs.
-
PostgREST, a standalone web server that turns your PostgreSQL database directly into a RESTful API. Available as services.postgrest.
-
postgres-websockets, a middleware that adds websockets capabilities on top of PostgreSQL's asynchronous notifications using LISTEN and NOTIFY commands. Available as services.postgres-websockets.
-
µStreamer, a lightweight MJPEG-HTTP streamer. Available as services.ustreamer.
-
Whoogle Search, a self-hosted, ad-free, privacy-respecting metasearch engine. Available as services.whoogle-search.
-
autobrr, a modern download automation tool for torrents and usenets. Available as services.autobrr.
-
cross-seed, a tool to set-up fully automatic cross-seeding of torrents. Available as services.cross-seed.
-
Froide-Govplan, a web application government planer. Available as services.froide-govplan.
-
agorakit, an organization tool for citizens' collectives. Available with services.agorakit.
-
vivid, a generator for
LS_COLOR
. Available as programs.vivid. -
matrix-alertmanager, a bot to receive Alertmanager webhook events and forward them to chosen Matrix rooms. Available as services.matrix-alertmanager.
-
waagent, the Microsoft Azure Linux Agent (waagent) manages Linux provisioning and VM interaction with the Azure Fabric Controller. Available with services.waagent.
-
nfc-nci, an alternative NFC stack and PC/SC driver for the NXP PN54x chipset, commonly found in Lenovo systems as NXP1001 (NPC300). Available as hardware.nfc-nci.
-
grav, a modern flat-file CMS. Available with services.grav.
-
duckdns, free dynamic DNS. Available with services.duckdns.
-
Zoxide, a smarter cd command, inspired by z and autojump. Available as programs.zoxide.
-
victorialogs, log database from VictoriaMetrics. Available as services.victorialogs.
-
gokapi, Lightweight selfhosted Firefox Send alternative without public upload. AWS S3 supported. Available with services.gokapi.
-
nostr-rs-relay, This is a nostr relay, written in Rust. Available as services.nostr-rs-relay.
-
haven, is a high availability vault for events on nostr. Available as services.haven.
-
strfry, a relay for the nostr protocol. Available as services.strfry.
-
Prometheus Node Cert Exporter, a prometheus exporter to check for SSL cert expiry. Available as services.prometheus.exporters.node-cert.
-
Actual Budget, a local-first personal finance app. Available as services.actual.
-
immich-public-proxy, a proxy for sharing Immich albums without exposing the Immich API. Available as services.immich-public-proxy.
-
Zipline, a ShareX/file upload server that is easy to use, packed with features, and with an easy setup. Available as services.zipline.
-
GlitchTip, an open source Sentry API compatible error tracking platform. Available as services.glitchtip.
-
yarr
, a small, web-based feed aggregator and RSS reader. Available as services.yarr. -
OliveTin, gives safe and simple access to predefined shell commands from a web interface. Available as services.olivetin.
-
alertmanager-ntfy, forwards Prometheus Alertmanager notifications to ntfy.sh. Available as services.prometheus.alertmanager-ntfy.
-
Stash, an organizer for your adult videos/images, written in Go. Available as services.stash.
-
vsmartcard-vpcd, a virtual smart card driver. Available as services.vsmartcard-vpcd.
-
Fider, an open platform to collect and prioritize feedback. Available as services.fider.
-
PDS, Personal Data Server for bsky. Available as services.pds.
-
Anubis, a scraper defense software. Available as services.anubis.
-
synapse-auto-compressor, a rust-based matrix-synapse state compressor for postgresql. Available as services.synapse-auto-compressor.
-
mqtt-exporter, a Prometheus exporter for exposing messages from MQTT. Available as services.prometheus.exporters.mqtt.
-
pocket-id, an OIDC provider with passkeys support. Available as services.pocket-id.
-
nvidia-gpu, a Prometheus exporter that scrapes
nvidia-smi
for GPU metrics. Available as services.prometheus.exporters.nvidia-gpu. -
Lavalink, a standalone audio sending node based on Lavaplayer and Koe. Available as services.lavalink.
-
OpenGamepadUI, an open source gamepad-native game launcher and overlay for Linux. Available as programs.opengamepadui.
-
InputPlumber, an open source input router and remapper daemon for Linux. Available as services.inputplumber.
-
dump1090-fa
, a simple Mode S decoder for RTLSDR devices with a web interface. Available as services.dump1090-fa. -
PowerStation, an open source TDP control and performance daemon with DBus interface for Linux. Available as services.powerstation.
-
g3proxy
, an open source enterprise forward proxy from ByteDance, similar to Squid or tinyproxy. Available as services.g3proxy. -
OpenCloud, an open-source, modern file-sync and sharing platform. It is a fork of oCIS, a ground-up rewrite of the well-known PHP-based NextCloud server. Available as services.opencloud.
-
echoip, a simple service for looking up your IP address. Available as services.echoip.
-
whoami, a tiny Go server that prints OS information and HTTP request to output. Available as services.whoami.
-
LiteLLM, a LLM Gateway to provide model access, fallbacks and spend tracking across 100+ LLMs. All in the OpenAI format. Available as services.litellm.
-
Buffyboard, a framebuffer on-screen keyboard. Available as services.buffyboard.
-
KanBoard, a project management tool that focuses on the Kanban methodology. Available as services.kanboard.
-
git-worktree-switcher, switch between git worktrees with speed. Available as programs.git-worktree-switcher.
-
GLPI-Agent, GLPI Agent. Available as services.glpiAgent.
-
pgBackRest, a reliable backup and restore solution for PostgreSQL. Available as services.pgbackrest.
-
Recyclarr a TRaSH Guides synchronizer for Sonarr and Radarr. Available as services.recyclarr.
-
Rebuilderd an independent verification of binary packages - Reproducible Builds. Available as services.rebuilderd.
-
Limine a modern, advanced, portable, multiprotocol bootloader and boot manager. Available as boot.loader.limine.
-
Orthanc a lightweight, RESTful DICOM server for healthcare and medical research. Available as services.orthanc.
-
Docling Serve running Docling as an API service. Available as services.docling-serve.
-
Pareto Security is an alternative to corporate compliance solutions for companies that care about security but know it doesn't have to be invasive. Available as services.paretosecurity.
-
GNU Rush is a Restricted User Shell, designed for systems providing limited remote access to their resources. Available as programs.rush.
-
ipfs-cluster, Pinset orchestration for IPFS. Available as services.ipfs-cluster.
-
bitbox-bridge, a bridge software that connects BitBox hardware wallets to computers & web wallets like Rabby. Allows one to interact & transact with smart contracts, Web3 websites & financial services without storing private keys anywhere other than the hardware wallet. Available as services.bitbox-bridge.
-
GoDNS, a dynamic DNS client written in Go, which supports multiple DNS providers. Available as services.godns.
-
CookCLI Server, a web UI for cooklang recipes. Available as services.cook-cli.
-
Prometheus eBPF Exporter, Prometheus exporter for custom eBPF metrics. Available as services.prometheus.exporters.ebpf.
Backward Incompatibilities
-
services.rippled
has been removed, asrippled
was broken and had not been updated since 2022. -
services.rippleDataApi
has been removed, asripple-data-api
was broken and had not been updated since 2022. -
The
nixos/modules/virtualisation/amazon-ec2-amis.nix
file is not supported anymore since 24.05. It will throw and error starting 25.05 with instructions the following instructions: The canonical source for NixOS AMIs is the AWS API. Please see https://nixos.org/download/#nixos-amazon or https://nixos.github.io/amis/ for instructions. -
The latest available version of Nextcloud is v31 (available as
pkgs.nextcloud31
). The installation logic is as follows:- If
services.nextcloud.package
is specified explicitly, this package will be installed (recommended) - If
system.stateVersion
is >=24.11,pkgs.nextcloud30
will be installed by default. - If
system.stateVersion
is >=24.05,pkgs.nextcloud31
will be installed by default. - Please note that an upgrade from v29 (or older) to v31 directly is not possible. Please upgrade to
nextcloud30
(or earlier) first. Nextcloud prohibits skipping major versions while upgrading. You can upgrade by declaringservices.nextcloud.package = pkgs.nextcloud30;
.
- If
-
services.cloudflare-dyndns.apiTokenFile
now must be just your Cloudflare api token. Previously it was supposed to be a file of the formCLOUDFLARE_API_TOKEN=...
. -
is unset by default, the previous default was
sqlite
. This was done becausesqlite
is not a reasonable default since it's not recommended by upstream and thus doesn't qualify as default. -
PowerDNS Recursor has been updated to version 5.1.2, which comes with a new YAML configuration format (
recursor.yml
) and deprecates the previous format (recursor.conf
). Accordingly, the NixOS optionservices.pdns-recursor.settings
has been renamed to old-settings and will be provided for backward compatibility until the next NixOS release. Users are asked to migrate their settings to the new yaml-settings option following this guide. Note that options other thanservices.pdns-recursor.settings
are unaffacted by this change. -
The
virtualisation.hypervGuest.videoMode
option has been removed. Standard tooling can now be used to configure display modes for Hyper-V VMs. -
Nextcloud's default FPM pool settings have been increased according to upstream recommentations. It's advised to review the new defaults and description of .
-
In
users.users
subuid allocation on systems with multiple users it could happen that some users' allocated subuid ranges collided with others. Now these users get new subuid ranges assigned. When this happens, a warning is issued on the first activation. If the subuids were used (e.g. with rootless container managers like podman), please change the ownership of affected files accordingly. -
The
services.locate
module does no longer support findutil'slocate
due to its inferior performance compared tomlocate
andplocate
. The new default isplocate
. As theservice.locate.localuser
option only applied when using findutil'slocate
, it has also been removed. -
services.paperless
now installspaperless-manage
as a normal system package instead of creating a symlink in/var/lib/paperless
.paperless-manage
now also changes to the appropriate user when being executed. -
asusd
has been upgraded to version 6 which supports multiple aura devices. To account for this, the singleauraConfig
configuration option has been replaced withauraConfigs
which is an attribute set of config options per each device. The config files may also be now specified as either source files or text strings; to account for this you will need to specify thattext
is used for your existing configs, e.g.:-services.asusd.asusdConfig = '''file contents''' +services.asusd.asusdConfig.text = '''file contents'''
-
linuxPackages.nvidiaPackages.stable
now defaults to theproduction
variant instead oflatest
. -
services.paperless.address
no longer accepts a domain name or Unix domain socket. -
networking.wireguard.enable = true
does not always addwireguard-tools
to system packages anymore. Only when wireguard interfaces are configured, the backing implementation packages are added to system PATH. -
virtualisation/azure-common.nix
's filesystem and grub configurations have been moved tovirtualisation/azure-image.nix
. This makesazure-common.nix
more generic so it could be used for users who generate Azure image using other methods (e.g. nixos-generators and disko). For existing users depending on these configurations, please also importazure-image.nix
. -
services.signald
has been removed assignald
is unmaintained upstream and has been incompatible to official Signal servers for a long while. -
The
earlyoom
service is now using upstream systemd service, which enables hardening and filesystem isolation by default. If you need filesystem write access or want to access home directory viakillHook
, hardening setting can be changed via, e.g.systemd.services.earlyoom.serviceConfig.ProtectSystem
.services.earlyoom.extraArgs
is now shell-escaped for each element without word-breaking. So you want to writeextraArgs = [ "--prefer" "spaced pat" ]
rather than previousextraArgs = [ "--prefer 'spaced pat'" ]
. -
programs.less.lessopen
is now null by default. To restore the previous behaviour, set it to''|${lib.getExe' pkgs.lesspipe "lesspipe.sh"} %s''
. -
hardware.pulseaudio
has been renamed toservices.pulseaudio
. The deprecated option names will continue to work, but causes a warning. -
services.nextcloud
now uses systemd's credential mechanism to read in secret files. Thenextcloud-occ
wrapper script implements this usingsystemd-run
, as such it now also requires root privileges or$CREDENTIALS_DIRECTORY
set where running it as usernextcloud
was enough previously. -
services.mongodb.initialRootPassword
has been replaced with the more secure optionservices.mongodb.initialRootPasswordFile
-
services.bird2
has been renamed toservices.bird
and the default bird package has been switched tobird3
.bird2
can still be chosen via theservices.bird.package
option. -
The behavior of the
networking.nat.externalIP
andnetworking.nat.externalIPv6
options has been changed.networking.nat.forwardPorts
now only forwards packets destined for the specified IP addresses. -
gitlab
has been updated from 17.x to 18.x and requirespostgresql
>= 16, as stated in the documentation. Check the upgrade guide in the NixOS manual on how to upgrade your PostgreSQL installation. -
services.gitlab
now requires the setting ofactiveRecordPrimaryKeyFile
,activeRecordDeterministicKeyFile
,activeRecordSaltFile
as GitLab introduced Rails ActiveRecord encryption. -
The Mattermost module (
services.mattermost
) and packages (mattermost
andmmctl
) have been substantially updated:services.mattermost.listenAddress
has been split into and . If yourlistenAddress
contained a port, you will need to edit your configuration. This will be the only truly breaking change in this release for most configurations.- now defaults to true if you advance to 25.05. This means that if you have set, NixOS will override settings set in the Admin Console to those that you define in the module configuration. It is recommended to leave this at the default, even if you used a fully mutable configuration before, because it will ensure that your Mattermost data directories are correct. If you moved your data directories, you may want to review the module changes before upgrading.
- Mattermost now supports peer authentication on both MySQL and Postgres database backends. Updating to 25.05 or later will result in peer authentication being used by default if the Mattermost server would otherwise be connecting to localhost. This is the recommended configuration.
- Note that the Mattermost module will create an account without a well-known UID if the username differs from the default (
mattermost
). If you used Mattermost with a nonstandard username, you may want to review the module changes before upgrading.
-
DokuWiki with the Caddy webserver (
services.dokuwiki.webserver = "caddy"
) now sets up sites with Caddy's automatic HTTPS instead of HTTP-only. To keep the old behavior for a siteexample.com
, setservices.caddy.virtualHosts."example.com".hostName = "http://example.com"
. If you set custom Caddy options for a DokuWiki site, migrate these options by removinghttp://
fromservices.caddy.virtualHosts."http://example.com"
. -
Wordpress with the Caddy webserver (
services.wordpress.webserver = "caddy"
) now sets up sites with Caddy's automatic HTTPS instead of HTTP-only. Given a site example.com, http://example.com now 301 redirects to https://example.com. To keep the old behavior for a siteexample.com
, setservices.caddy.virtualHosts."example.com".hostName = "http://example.com"
. -
The behavior of
services.hostapd.radios.<name>.networks.<name>.authentication.enableRecommendedPairwiseCiphers
was changed to not includeCCMP-256
anymore. Since all configured pairwise ciphers have to be supported by the radio, this caused startup failures on many devices which is hard to debug in hostapd. -
The
hardware.gkraken
module has been removed. The recommended alternative isprograms.coolercontrol
. -
To avoid delaying user logins unnecessarily the
multi-user.target
is no longer ordered afternetwork-online.target
. System services requiring a connection to start correctly must explicitly state so, i.e.systemd.services.<name> = { wants = [ "network-online.target" ]; after = [ "network-online.target" ]; };
This changed follows a deprecation period of one year started in NixOS 24.05 (see PR #283818).
-
The values of
services.borgbackup.jobs.*.extraArgs
and otherextra*Args
options are now represented as Bash arrays. If these arguments were modified usingservices.borgbackup.jobs.*.preHook
, they will need to be adjusted to append to these arrays, i.e.-extraCreateArgs="$extraCreateArgs --exclude /some/path" +extraCreateArgs+=("--exclude" "/some/path")
-
programs.xonsh.package
now gets overridden internally withextraPackages
to supportprograms.xonsh.extraPackages
. Seeprograms.xonsh.extraPackages
for more details. -
services.nitter.guestAccounts
has been renamed toservices.nitter.sessionsFile
, for consistency with upstream. The file format is unchanged. -
virtualisation.azure.agent
option provided byazure-agent.nix
is replaced byservices.waagent
, and will be removed in a future release. -
The ZFS import service now respects
fileSystems.*.options = [ "noauto" ];
and does not add that pool's import service tozfs-import.target
, meaning it will not be automatically imported at boot. -
Default file names of images generated by several builders in
system.build
have been changed as outlined in the table below.Names are now known at evaluation time and customizable via the new options
image.baseName
,image.extension
,image.fileName
andimage.filePath
with the latter returning a path relative to the derivations out path (e.g.iso/${image.fileName
for iso images).system.build
OptionOld Filename New Filename amazonImage nixos-amazon-image-25.05pre-git-x86_64-linux.vhd nixos-image-amazon-25.05pre-git-x86_64-linux.vhd azureImage disk.vhd nixos-image-azure-25.05pre-git-x86_64-linux.vhd digitalOceanImage nixos.qcow2.gz nixos-image-digital-ocean-25.05pre-git-x86_64-linux.qcow2.gz googleComputeImage nixos-image-25.05pre-git-x86_64-linux.raw.tar.gz nixos-image-google-compute-25.05pre-git-x86_64-linux.raw.tar.gz hypervImage nixos-25.05pre-git-x86_64-linux.vhdx nixos-image-hyperv-25.05pre-git-x86_64-linux.vhdx isoImage (installer) nixos-25.05pre-git-x86_64-linux.iso nixos-image-25.05pre-git-x86_64-linux.iso isoImage nixos.iso nixos-image-25.05pre-git-x86_64-linux.iso kubevirtImage nixos.qcow2 nixos-image-kubevirt-25.05pre-git-x86_64-linux.qcow2 linodeImage nixos-image-25.05pre-git-x86_64-linux.img.gz nixos-image-linode-25.05pre-git-x86_64-linux.img.gz metadata (lxc-container) nixos-system-x86_64-linux.tar.xz nixos-image-lxc-metadata-25.05pre-git-x86_64-linux.tar.xz OCIImage nixos.qcow2 nixos-image-oci-25.05pre-git-x86_64-linux.qcow2 openstackImage (zfs) nixos-openstack-image-25.05pre-git-x86_64-linux.root.qcow2 nixos-image-openstack-zfs-25.05pre-git-x86_64-linux.root.qcow2 openstackImage nixos.qcow2 nixos-image-openstack-25.05pre-git-x86_64-linux.qcow2 sdImage nixos-sd-image-25.05pre-git-x86_64-linux.img.zst nixos-image-sd-card-25.05pre-git-x86_64-linux.img.zst tarball (lxc-container) nixos-system-x86_64-linux.tar.xz nixos-image-lxc-25.05pre-git-x86_64-linux.tar.xz tarball (proxmox-lxc) nixos-system-x86_64-linux.tar.xz nixos-image-lxc-proxmox-25.05pre-git-x86_64-linux.tar.xz vagrantVirtualbox nixos-25.05pre-git-x86_64-linux.ova nixos-image-virtualbox-25.05pre-git-x86_64-linux.ova virtualBoxOVA virtualbox-vagrant.box nixos-image-vagrant-virtualbox-25.05pre-git-x86_64-linux.ova vmwareImage nixos-25.05pre-git-x86_64-linux.vmdk nixos-image-vmware-25.05pre-git-x86_64-linux.vmdk -
security.apparmor.policies.<name>.enforce
andsecurity.apparmor.policies.<name>.enable
were removed. Configuring the state of apparmor policies must now be done usingsecurity.apparmor.policies.<name>.state
tristate option. -
services.graylog.package
now defaults tograylog-6_0
as previous defaultgraylog-5_1
is EOL and therefore removed. Check the migration guides on 5.1→5.2 and 5.2→6.0 for breaking changes. -
programs.clash-verge.tunMode
was deprecated and removed because now service mode is necessary to start program. Withoutprograms.clash-verge.enable
, clash-verge-rev will refuse to start. -
services.discourse
now requires PostgreSQL 15 per default. Please update before upgrading. -
services.homepage-dashboard
now requires theallowedHosts
option to be set in accordance with the documentation. -
luakit
has been updated to 2.4.0. If you use any website which uses IndexedDB or local storage and wish to retain the saved information, some manual intervention may be required -
services.netbird.tunnels
was renamed toservices.netbird.clients
, hardened (using dedicated less-privileged users) and significantly extended. -
services.rsyncd.settings
now supports only two attributessections
andglobalSection
. As a result, all sections previously defined underservices.rsyncd.settings
must now be put inservices.rsyncd.settings.sections
. Global settings must now be placed inservices.rsyncd.settings.globalSection
instead ofservices.rsyncd.settings.global
.
Other Notable Changes
-
virtualisation.containers
with backend "podman" now supports rootless containers andsd_notify(3)
-integration based on container healthchecks. -
Cinnamon has been updated to 6.4, please check the upstream announcement for more details.
- Following changes in Mint 22 we are no longer overriding Qt application styles. You can still restore the previous default with
qt.style = "gtk2"
andqt.platformTheme = "gtk2"
. - Following changes in Mint 20 we are replacing xplayer with celluloid since xplayer is no longer maintained.
- Following changes in Mint 22 we are no longer overriding Qt application styles. You can still restore the previous default with
-
Pantheon has been updated to 8, please check the upstream announcement for more details.
- Same as elementary OS, the X11 session is named "Classic Session" and the Wayland session is named "Secure Session".
- The dock has been rewritten, you need to manually migrate the dock items on update. You can check
~/.config/plank/dock1/launchers/
for your previous settings.
-
Xfce has been updated to 4.20, please check the upstream feature tour for more details.
- Wayland session is still experimental and requires opt-in using
enableWaylandSession
option. - Overriding Wayland compositor is possible using
waylandSessionCompositor
option, but you might need to take carexfce4-session
,dbus-update-activation-environment
andsystemctl --user import-environment
on startup. - For new Xfce installations, default panel layout has changed to not include external panel plugins by default. You can still add them yourself using the "Panel Preferences" dialog.
- Wayland session is still experimental and requires opt-in using
-
PAM services for
i3lock
/i3lock-color
,vlock
,xlock
, andxscreensaver
now default to disabled unless other corresponding NixOS options are set (programs.i3lock.enable
,console.enable
,services.xserver.enable
, andservices.xscreensaver.enable
, respectively). If for some reason you want one of them back without setting the corresponding option, set, e.g.,security.pam.services.xlock.enable = true
. -
The
nixos-generate-config
command now supports a optional--flake
option, which will generate a flake.nix file alongside theconfiguration.nix
andhardware-configuration.nix
, providing an easy introduction into flake-based system configurations. -
system.stateVersion
is now validated and must be in the"YY.MM"
format, ideally corresponding to a prior NixOS release. -
hardware.xone
will also enablehardware.xpad-noone
to provide Xbox 360 driver by default. -
services.mysql
now supports easy cluster setup viaservices.mysql.galeraCluster
option.Example:
services.mysql = { enable = true; galeraCluster = { enable = true; localName = "Node 1"; localAddress = "galera_01"; nodeAddresses = [ "galera_01" "galera_02" "galera_03"]; }; };
-
systemd's {manpage}
systemd-ssh-generator(8)
now works out of the box on NixOS.- You can ssh into VMs without any networking configuration if your hypervisor configures the vm to support AF_VSOCK. It still requires the usual ssh authentication methods.
- An SSH key for the root user can be provisioned using the
ssh.authorized_keys.root
systemd credential. This can be useful for booting an installation image and providing the SSH key with an smbios string. - SSH can be used for suid-less privilege escalation on the local system without having to rely on networking:
ssh root@.host
- systemd's {manpage}
systemd-ssh-proxy(1)
is enabled by default. It can be disabled usingprograms.ssh.systemd-ssh-proxy.enable
.
-
SSH host key generation has been separated into the dedicated systemd service sshd-keygen.service.
-
services.dex
now restarts upon changes to the.environmentFile
option orpath
type entries in.settings.staticClients[].secretFile
. -
services.geoclue2
now has anenableStatic
option, which allows the NixOS configuration to specify a fixed location for GeoClue to use. -
services.mongodb
is now compatible with themongodb-ce
binary package. To make use of it, setservices.mongodb.package
topkgs.mongodb-ce
. -
services.jupyter
is now compatible withJupyter Notebook 7
. See the migration guide for details. -
networking.wireguard
now has an optional networkd backend. It is enabled by default whennetworking.useNetworkd
is enabled, and it can be enabled alongside scripted networking withnetworking.wireguard.useNetworkd
. Somenetworking.wireguard
options have slightly different behavior with the networkd and script-based backends, documented in each option. -
services.rss-bridge
now has apackage
option as well as support forcaddy
as reverse proxy. -
services.avahi.ipv6
now defaults to true. -
In the
services.xserver.displayManager.startx
module, two new options generateScript and extraCommands have been added to to declaratively configure the .xinitrc script. -
All services that require a root certificate bundle now use the value of a new read-only option,
security.pki.caBundle
. -
services.hddfancontrol
has been modified to use an attribute set for settings, enabling configurations with multiple instances of the daemon running at once (e.g., for two separate drive bays). -
services.cloudflared
now uses a dynamic user, and itsuser
andgroup
options have been removed. If the user or group is still necessary, they can be created manually. -
The Home Assistant module has new options {option}
services.home-assistant.blueprints.automation
,services.home-assistant.blueprints.script
, and {option}services.home-assistant.blueprints.template
that allow for the declarative installation of blueprints into the appropriate configuration directories. -
services.dovecot2.modules
have been removed, now need to useenvironment.systemPackages
to load additional Dovecot modules. -
services.kmonad
now creates a determinate symlink (in/dev/input/by-id/
) to each of KMonad virtual devices. -
services.searx
now supports configuration of the favicons cache and other options available in SearXNG'sfavicons.toml
file -
services.gitea
now supports CAPTCHA usage through theservices.gitea.captcha
variable. -
services.soft-serve
now restarts upon config change. -
services.keycloak
now provides arealmFiles
option that allows to import realms during startup. See https://www.keycloak.org/server/importExport -
bind.cacheNetworks
now only controls access for recursive queries, where it previously controlled access for all queries. -
The Starship module now automatically loads the starship prompt when using
xonsh
. -
services.mongodb.enableAuth
now uses the newer mongosh shell instead of the legacy shell to configure the initial superuser. You can configure the mongosh package to use through theservices.mongodb.mongoshPackage
option. -
There is a new set of NixOS test tools for testing virtual Wi-Fi networks in many different topologies. See the {option}
services.vwifi
module, {option}services.kismet
NixOS test, and manual for documentation and examples. -
The paperless module now has an option for regular automatic export of documents data using the integrated document exporter.
-
Exposed the
paperless-manage
script package via theservices.paperless.manage
read-only option. -
New options for the declarative configuration of the user space part of ALSA have been introduced under hardware.alsa, including setting the default capture and playback device, defining sound card aliases and volume controls. Note: these are intended for users not running a sound server like PulseAudio or PipeWire, but having ALSA as their only sound system.
-
services.k3s
now provides theautoDeployCharts
option that allows to automatically deploy Helm charts via the k3s Helm controller. -
Mattermost, a self-hosted chat collaboration platform supporting calls, playbooks, and boards, has been updated. It now has multiple versions, disabled telemetry, and a native frontend build in nixpkgs, removing all upstream prebuilt blobs.
- Mattermost telemetry reporting is now disabled by default, though security update notifications are enabled. Look at
services.mattermost.telemetry
for options to control this behavior. - The Mattermost module will produce eval warnings if a database password would end up in the Nix store, and recommend alternatives such as peer authentication or using the environment file.
- We now support
mmctl
for Mattermost administration if both and are set, which export the Mattermost control socket path into the system environment.
- Mattermost telemetry reporting is now disabled by default, though security update notifications are enabled. Look at
-
services.geoclue2
now uses beaconDB as a default geolocation service, replacing Mozilla Location Services which was retired in June 2024. -
security.acme
now supports renewal using CSRs (Certificate Signing Request) through the optionssecurity.acme.*.csr
andsecurity.acme.*.csrKey
. -
programs.fzf.keybindings
now supports the fish shell. -
A toggle has been added under
users.users.<name>.enable
to allow toggling individual users conditionally. If set to false, the user account will not be created. -
New hooks were added:
writableTmpDirAsHomeHook
: This setup hook ensures that the directory specified by theHOME
environment variable is writable.addBinToPathHook
: This setup hook checks if thebin/
directory exists in the$out
output path and, if so, adds it to thePATH
environment variable.gitSetupHook
: This setup hook sets up a valid Git configuration, including theuser.name
anduser.email
fields.
NixOS Wiki
The official NixOS Wiki at wiki.nixos.org has new and improved articles, new contributors and some improvements in its dark theme and mobile readability.
../release-notes-nixpkgs/rl-2505.section.md