This removes the previously depricated NIXOS_EXTRA_MODULE_PATH
environment variable.
Tested with
$ nix-instantiate nixos/lib/eval-config.nix --arg modules '[{fileSystems."/".device="x";boot.loader.grub.enable=false;}]' -A config.system.build.toplevel
$ NIXOS_EXTRA_MODULE_PATH=$HOME/whatever.nix nix-instantiate nixos/lib/eval-config.nix --arg modules '[{fileSystems."/".device="x";boot.loader.grub.enable=false;}]' -A config.system.build.toplevel
26 KiB
Release 25.11 ("Xantusia", 2025.11/??)
Highlights
-
nixos-rebuild-ng, a full rewrite ofnixos-rebuildin Python, is enabled by default from this release. You can disable it by setting tofalsein your configuration if you need, but please report any issues. It is expected that the next major version of NixOS (26.05) will remove the {option}system.rebuild.enableNgoption. -
rEFInd, a graphical boot manager for UEFI systems, can now be used through . -
Secure boot support can now be enabled for the Limine bootloader through {option}
boot.loader.limine.secureBoot.enable. Bootloader install script signs the bootloader, then kernels are hashed during system rebuild and written to a config. This allows Limine to boot only the kernels installed through NixOS system. -
The default PostgreSQL version for new NixOS installations (i.e. with
system.stateVersion >= 25.11) is v17. -
The NetworkManager module does not ship with a default set of VPN plugins anymore. All required VPN plugins must now be explicitly configured in
networking.networkmanager.plugins. -
The Qt 5-based versions of KDE Gear, Plasma, Maui and Deepin have been removed. Users are advised to migrate to Plasma 6 and Gear 25.08, available under
kdePackages. -
Syncthing has been updated to version 2.0.0.
New Modules
-
byedpi, a DPI bypass service. Available as services.byedpi.
-
Overseerr, a request management and media discovery tool for the Plex ecosystem. Available as services.overseerr.
-
gtklock, a GTK-based lockscreen for Wayland. Available as programs.gtklock.
-
Chrysalis, a graphical configurator for Kaleidoscope-powered keyboards. Available as programs.chrysalis.
-
Pi-hole, a DNS sinkhole for advertisements based on Dnsmasq. Available as services.pihole-ftl, and services.pihole-web for the web GUI and API.
-
Fediwall, a web application for live displaying toots from mastodon, inspired by mastowall. Available as services.fediwall.
-
umami, a simple, fast, privacy-focused alternative to Google Analytics. Available with services.umami.
-
FileBrowser, a web application for managing and sharing files. Available as services.filebrowser.
-
Options under networking.getaddrinfo are now allowed to declaratively configure address selection and sorting behavior of
getaddrinfoin dual-stack networks. -
Homebridge, a lightweight Node.js server you can run on your home network that emulates the iOS HomeKit API. Available as services.homebridge.
-
LACT, a GPU monitoring and configuration tool, can now be enabled through services.lact.enable. Note that for LACT to work properly on AMD GPU systems, you need to enable hardware.amdgpu.overdrive.enable.
-
Auto-scrub support for Bcachefs filesystems can now be enabled through services.bcachefs.autoScrub.enable to periodically check for data corruption. If there's a correct copy available, it will automatically repair corrupted blocks.
-
LibreTranslate, a free and open source machine translation API. Available as services.libretranslate.
-
tlsrpt-reporter, an application suite to generate and deliver TLSRPT reports. Available as services.tlsrpt.
-
Chhoto URL, a simple, blazingly fast, selfhosted URL shortener with no unnecessary features, written in Rust. Available as services.chhoto-url.
-
go-httpbin, a reasonably complete and well-tested golang port of httpbin, with zero dependencies outside the go stdlib. Available as services.go-httpbin.
-
llama-swap, a light weight transparent proxy server that provides automatic model swapping to llama.cpp's server (or any server with an OpenAI compatible endpoint). Available as .
-
tuwunel, a federated chat server implementing the Matrix protocol, forked from Conduwuit. Available as services.matrix-tuwunel.
-
Broadcast Box, a WebRTC broadcast server. Available as services.broadcast-box.
-
boot.kernel.sysfs allows setting of sysfs attributes.
-
Docker now defaults to 28.x, because version 27.x stopped receiving security updates and bug fixes after May 2, 2025.
-
Corteza, a low-code platform. Available as services.corteza.
-
TuneD, a system tuning service for Linux. Available as services.tuned.
-
yubikey-manager, a tool for configuring YubiKey devices. Available as programs.yubikey-manager.
-
Draupnir, a Matrix moderation bot. Available as services.draupnir.
-
postfix-tlspol, MTA-STS and DANE resolver and TLS policy server for Postfix. Available as services.postfix-tlspol.
-
Newt, a fully user space WireGuard tunnel client and TCP/UDP proxy, designed to securely expose private resources controlled by Pangolin. Available as services.newt.
-
IfState, manage host interface settings in a declarative manner. Available as networking.ifstate and boot.initrd.network.ifstate.
-
qBittorrent, is a bittorrent client programmed in C++ / Qt that uses libtorrent by Arvid Norberg. Available as services.qbittorrent.
-
Speedify, a proprietary VPN which allows combining multiple internet connections (Wi-Fi, 4G, 5G, Ethernet, Starlink, Satellite, and more) to improve the stability, speed, and security of online experiences. Available as services.speedify.
-
Szurubooru, an image board engine inspired by services such as Danbooru, dedicated for small and medium communities. Available as services.szurubooru.
-
The Neat IP Address Planner (NIPAP) can now be enabled through services.nipap.enable.
-
nix-store-veritysetup, a systemd generator to unlock the Nix Store as a dm-verity protected block device. Available as boot.initrd.nix-store-veritysetup.
-
SuiteNumérique Docs, a collaborative note taking, wiki and documentation web platform and alternative to Notion or Outline. Available as services.lasuite-docs.
-
dwl, a compact, hackable compositor for Wayland based on wlroots. Available as programs.dwl.
-
angrr, a service that automatically cleans up old auto GC roots. Available as services.angrr.
-
Sharkey, a Sharkish microblogging platform. Available as services.sharkey.
-
fw-fanctrl, a simple systemd service to better control Framework Laptop's fan(s). Available as hardware.fw-fanctrl.
-
mautrix-discord, a Matrix-Discord puppeting/relay bridge. Available as services.mautrix-discord.
-
SuiteNumérique Meet is an open source alternative to Google Meet and Zoom powered by LiveKit: HD video calls, screen sharing, and chat features. Built with Django and React. Available as services.lasuite-meet.
-
lemurs, a customizable TUI display/login manager. Available at services.displayManager.lemurs.
-
paisa, a personal finance tracker and dashboard. Available as services.paisa.
-
conman, a serial console management program. Available as services.conman.
-
KMinion, feature-rich Prometheus exporter for Apache Kafka. Available as services.prometheus.exporters.kafka.
-
Spoolman, a inventory management system for Filament spools. Available as services.spoolman.
-
Temporal, a durable execution platform that enables developers to build scalable applications without sacrificing productivity or reliability. Available as services.temporal.
-
services.libvirtd.autoSnapshot, a backup service for libvirt managed vms.
Backward Incompatibilities
-
The Perl implementation of the
switch-to-configurationprogram is removed. All switchable systems now use the Rust rewrite. Any prior usage ofsystem.switch.enableNgmust now be removed. If you have any outstanding issues with the new implementation, please open an issue on GitHub. -
The
no-broken-symlinkbuild hook now also fails builds whose output derivation contains links to $TMPDIR (typically /build, which contains the build directory). -
The
services.polipomodule has been removed aspolipois unmaintained and archived upstream. -
The non-LTS Forgejo package (
forgejo) has been updated to 12.0.0. This release contains breaking changes, see the release blog post for all the details and how to ensure smooth upgrades. -
sing-boxhas been updated to 1.12.3, which includes a number of breaking changes, old configurations may need updating or they will cause the tool to fail to run. See the change log for details and migration for how to update old configurations. -
The Pocket ID module ([
services.pocket-id][#opt-services.pocket-id.enable]) and package (pocket-id) has been updated to 1.0.0. Some environment variables have been changed or removed, see the migration guide. -
services.seafilehas been removed, as it is unmaintained and outdated. See the manual for details and next steps. -
The
zigbee2mqttpackage was updated to version 2.x, which contains breaking changes. See the discussion for further information. -
[]{#sec-release-25.11-incompatibilities-sourcehut-removed} The
services.sourcehutmodule and correspondingsourcehutpackages were removed due to being broken and unmaintained. -
The zookeeper project changed their logging tool to logback, therefore
services.zookeeper.loggingoption has been updated to expect a logback compatible string. -
The
dovecotsystemd service was renamed fromdovecot2todovecot. The former is now just an alias. Update any overrides on the systemd unit to the new name. -
Prosodyhas been updated to major release 13 which removed some obsoleted modules and brought a couple of major and breaking changes:- The
http_filesmodule is now disabled by default because it now requireshttp_files_dirto be configured. - The
vcard_mucmodule has been removed and got replaced by the inbuiltmuc_vcardmodule. - The
http_uploadmodule has been removed and you must migrate to thehttp_file_sharemodule to stay XEP-0423 compliant. ThehttpFileShareoptions got expanded to better facility that. - The
admin_shellmodule is now always being loaded to makeprosodyctlfunctional. - The
mime_types_filesetting is now set to"${pkgs.mailcap}/etc/mime.types"to prevent errors. For a complete list of changes, please see their announcement.
- The
-
The
yeahwmpackage andservices.xserver.windowManager.yeahwmmodule were removed due to the package being broken and unmaintained upstream. -
The
services.postgresqlmodule now sets up a systemd unitpostgresql.target. Depending onpostgresql.targetguarantees that postgres is in read-write mode and initial/ensure scripts were executed. Depending onpostgresql.serviceonly guarantees a read-only connection. -
The
services.siproxdmodule has been removed assiproxdis unmaintained and broken with libosip 5.x. -
services.tor.torsocks.enableno longer defaults to true if Tor and Tor client functionality is enabled. -
netbox-managescript created by thenetboxmodule no longer usessudo -u netboxinternally. It can be run as root and will change it's user tonetboxusingrunuser -
services.gateonehas been removed as the package was removed such that it does not work. -
services.dwm-status.extraConfigwas replaced by RFC0042-compliant , which is used to generate the config file.services.dwm-status.orderis now moved to , as it's a part of the config file. -
gitversionwas updated to 6.3.0, which includes a number of breaking changes, old configurations may need updating or they will cause the tool to fail to run. See the 6.0.0 release notes for GitVersion for details on the breaking changes, the documentation on the configuration format for the new configuration specification, and the documentation on version variables for what is now supported. -
renovatewas updated to v41. See the upstream release notes for v40 and v41 for breaking changes. -
The "NIXOS_EXTRA_MODULE_PATH" variable from configuration evaluation has been deprecated. We recommend a workflow where you update the expression files instead, but if you wish to continue to use this variable, you may do so with a module like:
{ imports = [ (builtins.getEnv "NIXOS_EXTRA_MODULE_PATH") ]; }This has the benefit that your configuration hints at the non-standard workflow.
-
i18n.inputMethod.fcitx5.plasma6Supporthas been removed because qt6 is the only one used for fcitx5-configtool now. -
The
boot.readOnlyNixStorehas been removed. Control over bind mount options on/nix/storeis now offered by theboot.nixStoreMountOptsoption. -
The Postfix module has been updated and likely requires configuration changes:
- The
services.postfix.sslCertandsslKeyoptions were removed and you now need to configure- services.postfix.settings.main.smtpd_tls_chain_files for server certificates,
- services.postfix.settings.main.smtp_tls_chain_files for client certificates.
- The
-
vmalertnow supports multiple instances with the optionservices.vmalert.instances."".enable -
services.victorialogs.packagenow defaults tovictorialogs, asvictoriametricsno longer contains the VictoriaLogs binaries. -
The
services.traccar.settingsattribute has been reworked. Instead of the previous flat attribute set the new implementation uses nested attribute sets. You need to update you configuration manually. For instance,services.traccar.settings.loggerConsolebecomesservices.traccar.settings.logger.console. -
The
wstunnelmodule was converted to RFC42-style settings, you will need to update your NixOS config if you make use of this module. -
private-gpt service has been removed by lack of maintenance upstream.
-
NixOS display manager modules now strictly use tty1, where many of them previously used tty7. Options to configure display managers' VT have been dropped. A configuration with a display manager enabled will not start
getty@tty1.service, even if the system is forced to boot intomulti-user.targetinstead ofgraphical.target. -
river0.3.x has been renamed toriver-classicupstream, and the package renamed accordingly.programs.riverhas been renamed toprograms.river-classic. -
command-not-foundpackage is now disabled by default; it works only for nix-channels based systems, and requires setup for it to work. -
The systemd target
kbrequest.targetis now unset by default, instead of being forcibly symlinked torescue.target. In case you were relying on this behavior (Alt + ArrowUp on the tty causing the current target to be changed torescue.target), you can restore it by settingsystemd.targets.rescue.aliases = [ "kbrequest.target" ];in your configuration.
Other Notable Changes
-
services.clamsmtpis unmaintained and was removed from Nixpkgs. -
prosodygained a config check option namedservices.prosody.checkConfigwhich runsprosodyctl check configand is turned on by default. -
services.dependency-trackremoved its configuration of the JVM heap size. This lets the JVM choose its maximum heap size automatically, which should work much better in practice for most users. For deployments on systems with little RAM, it may now be necessary to manually configure a maximum heap size using {option}services.dependency-track.javaArgs. -
services.dnscrypt-proxy2gains apackageoption to specify dnscrypt-proxy package to use. -
services.nextcloud.configureRedisnow defaults totruein accordance with upstream recommendations to have caching for file locking. See the upstream doc for further details. -
mate-wayland-session 1.28.4 is now using the default wayfire decorator instead of firedecor, thus
services.xserver.desktopManager.mate.enableWaylandSessionis no longer shipping firedecor. If you are experiencing broken window decorations after upgrade, backup and remove~/.config/mate/wayfire.iniand re-login. -
services.giteasupports sending notifications with sendmail again. To do this, activate the parameterservices.gitea.mailerUseSendmailand configure SMTP server. -
Revamp of the ACME certificate acquisication and renewal process to help scale systems with lots (100+) of certificates.
Units and targets have been reshaped to better support more specific dependency propagation and avoid superfluously triggering unchanged units:
If a service requires a syntactically valid certificate to start it should now depend on the
acme-{certname}.serviceunit.We now always generate initial self-signed certificates as this drastically simplifies the dependency structure. As a result, the option
security.acme.preliminarySelfsignedhas been removed.Instead of the previous
acme-finished-{certname}.targets there are nowacme-order-renew-{certname}.services that will be activated in a delayed fashion to ensure that bootstrapping with servers like nginx that take part in the acquisition/renewal process works smoothly. Dependencies onacme-finishedunits should move toacme-order-renew.Note that system activation will complete before all certificates may have been renewed or acquired.
-
libvirtnow supports usingnftablesbackend.- The
virtualisation.libvirtd.firewallBackendoption can be used to configure the firewall backend used by libvirtd.
- The
-
systemd.extraConfigandboot.initrd.systemd.extraConfigwas converted to RFC42-stylesystemd.settings.Managerandboot.initrd.systemd.settings.Managerrespectively.systemd.watchdog.runtimeTimewas renamed tosystemd.settings.Manager.RuntimeWatchdogSecsystemd.watchdog.devicewas renamed tosystemd.settings.Manager.WatchdogDevicesystemd.watchdog.rebootTimewas renamed tosystemd.settings.Manager.RebootWatchdogSecsystemd.watchdog.kexecTimewas renamed tosystemd.settings.Manager.KExecWatchdogSecsystemd.enableCgroupAccountingwas removed. Cgroup accounting now needs to be disabled directly usingsystemd.settings.Manager.*Accounting.
-
services.logind.extraConfigwas converted to RFC42-styleservices.logind.settings.Login. -
services.ntpd-rsnow performs configuration validation. -
Immich now has support for VectorChord when using the PostgreSQL configuration provided by
services.immich.database.enable, which replacespgvecto-rs. VectorChord support can be toggled with the optionservices.immich.database.enableVectorChord. Additionally,pgvecto-rssupport is now disabled from NixOS 25.11 onwards using the optionservices.immich.database.enableVectors. This option will be removed fully in the future once Immich drops support forpgvecto-rsfully. See Immich migration instructions -
services.restic.backupsnow includes acommandoption for passing a command to the --stdin-from-command flag. -
services.postsrsdnow automatically integrates with the local Postfix instance, when enabled. This behavior can disabled using the services.postsrsd.configurePostfix option. -
services.pfix-srsdnow automatically integrates with the local Postfix instance, when enabled. This behavior can disabled using the services.pfix-srsd.configurePostfix option. -
services.moneronow includes theenvironmentFileoption for adding secrets to the Monero daemon config. -
services.netbird.servernow uses dedicated packages split out due to relicensing of server components to AGPLv3 with version0.53.0, -
services.pdshas been renamed toservices.bluesky-pds. -
The new option networking.ipips has been added to create IP within IP kind of tunnels (including 4in6, ip6ip6 and ipip). With the existing networking.sits option (6in4), it is now possible to create all combinations of IPv4 and IPv6 encapsulation.
-
It is now possible to configure the default source address using the new options networking.defaultGateway.source, networking.defaultGateway6.source.
-
Potential race conditions in the network setup when using
networking.interfaceshave been fixed by disabling duplicate address detection (DAD) for statically configured IPv6 addresses. -
amdgpukernel driver overdrive mode can now be enabled by setting hardware.amdgpu.overdrive.enable and customized through hardware.amdgpu.overdrive.ppfeaturemask. This allows for fine-grained control over the GPU's performance and maybe required by overclocking softwares like Corectrl and Lact. These new options replace old options such as {option}programs.corectrl.gpuOverclock.enableand {option}programs.tuxclocker.enableAMD. -
services.varnish.http_addresshas been superseeded byservices.varnish.listenwhich is now structured config for all of varnish's-avariations. -
does not ship with an SSH agent anymore, as this is now handled by the
gcr_4package instead ofgnome-keyring. A new module has been added to support this, under (its default value has been set to to ensure a smooth transition). See the relevant upstream PR for more details. -
The
nettoolspackage (ifconfig, arp, mii-tool, netstat, route) is not installed by default anymore. The suite is unmaintained and users should migrate toiproute2andethtoolinstead. -
sparklesharehas been removed as it no longer builds and has been abandoned upstream.