Release 26.11
This is the current unstable branch and the information in this section is therefore not final.
Highlights
This release has the following notable changes:
-
The programs.uv module can now install uv-managed Python versions and tools through the new
programs.uv.python.versions,programs.uv.python.default, andprograms.uv.tool.packagesoptions. Unpinned entries track the latest release on each activation while pinned ones stay put, andprograms.uv.python.prune/programs.uv.tool.prunemake the managed set fully declarative by removing versions and tools that are no longer listed. -
On Darwin, Home Manager launchd agents now support launchd.agents.name.domain to choose either the user’s GUI or background launchd domain. Agents use the GUI domain by default. Set the domain to
userfor agents that should run without an active graphical login session. -
The services.voxtype.enable daemon now starts as part of
graphical-session.targetinstead ofdefault.target. Starting after the compositor owns its GPU render node lets Vulkan-accelerated whisper builds detect their device. Previously, a daemon that started before the render node existed fell back to CPU and never recovered until it was restarted manually. -
XSuspender now uses services.xsuspender.settings for freeform INI configuration. Move
services.xsuspender.defaultstoservices.xsuspender.settings.Defaultandservices.xsuspender.rulestoservices.xsuspender.settings.<name>. Use snake_case keys such assuspend_delayinstead ofsuspendDelay.Deprecated aliases warn and preserve old defaults, including legacy function reads, in legacy sections and
Default. These defaults have option-default priority, so ordinary assignments override them. Settings-only sections inherit fromDefaultat runtime, then use native defaults. To preserve old behavior, setsuspend_delayto 5 andonly_on_batterytofalse, rather than 10 andtrue.Without legacy options, empty settings leave the configuration file unmanaged. If you configured both
services.xsuspender.defaultsandservices.xsuspender.rules.Default, consolidate them underservices.xsuspender.settings.Default. They now merge instead of the rule replacing the entire defaults section. -
TWMN now uses services.twmn.settings for freeform INI configuration. Legacy options emit migration warnings. Move native options and
extraConfigvalues intosettings, resolving duplicate definitions. Enabling the service without configuration no longer creates a config file. Settings-only configurations use TWMN’s native defaults; see the option documentation for compatibility limits and preserving previous defaults.
State Version Changes
The state version in this release includes the changes below. These
changes are only active if the home.stateVersion option is set to
“26.11” or later.
-
On Darwin, the default value of programs.firefox.configPath changes from
Library/Application Support/FirefoxtoLibrary/Application Support/org.nixos.firefoxwhenprograms.firefox.packageis notnull. ExplicitconfigPathvalues remain unchanged. Users with ahome.stateVersionearlier than"26.11"should setprograms.firefox.configPath = "Library/Application Support/org.nixos.firefox";explicitly. Before changingconfigPath, quit Firefox and move your data from~/Library/Application Support/Firefoxto~/Library/Application Support/org.nixos.firefox. -
The KDL options under
programs.zellijwill now correctly escape backslashes in string values. For example, the Nix string"\\"will now correctly generate the KDL string"\\". Previously, this would have generated"\", which is invalid KDL. The following options are affected:programs.zellij.settingsprograms.zellij.themesprograms.zellij.layouts
-
The KDL options under
programs.zellijwill now escape tabs in string values. For example, the Nix string"\t"(corresponding to a single tab) will now generate the KDL string"\t". Previously, this would have generated"<tab>"(where<tab>denotes a literal tab character). The following options are affected:programs.zellij.settingsprograms.zellij.themesprograms.zellij.layouts