</div><divclass="appendix"><divclass="titlepage"><div><div><h1class="title"><spanid="ch-release-notes"></span>AppendixD.Release Notes </h1></div></div></div><divclass="toc"><p><strong>Table of Contents</strong></p><dlclass="toc"><dt><spanclass="chapter"><ahref="release-notes.xhtml#sec-release-24.05">Release 24.05</a></span></dt><dt><spanclass="chapter"><ahref="release-notes.xhtml#sec-release-23.11">Release 23.11</a></span></dt><dt><spanclass="chapter"><ahref="release-notes.xhtml#sec-release-23.05">Release 23.05</a></span></dt><dt><spanclass="chapter"><ahref="release-notes.xhtml#sec-release-22.11">Release 22.11</a></span></dt><dt><spanclass="chapter"><ahref="release-notes.xhtml#sec-release-22.05">Release 22.05</a></span></dt><dt><spanclass="chapter"><ahref="release-notes.xhtml#sec-release-21.11">Release 21.11</a></span></dt><dt><spanclass="chapter"><ahref="release-notes.xhtml#sec-release-21.05">Release 21.05</a></span></dt><dt><spanclass="chapter"><ahref="release-notes.xhtml#sec-release-20.09">Release 20.09</a></span></dt><dt><spanclass="chapter"><ahref="release-notes.xhtml#sec-release-20.03">Release 20.03</a></span></dt><dt><spanclass="chapter"><ahref="release-notes.xhtml#sec-release-19.09">Release 19.09</a></span></dt><dt><spanclass="chapter"><ahref="release-notes.xhtml#sec-release-19.03">Release 19.03</a></span></dt><dt><spanclass="chapter"><ahref="release-notes.xhtml#sec-release-18.09">Release 18.09</a></span></dt></dl></div><p>This section lists the release notes for stable versions of Home Manager
and the current unstable version.</p><divclass="chapter"><divclass="titlepage"><div><div><h2class="title"><spanid="sec-release-24.05"></span>Release 24.05 </h2></div></div></div><divclass="toc"><p><strong>Table of Contents</strong></p><dlclass="toc"><dt><spanclass="section"><ahref="release-notes.xhtml#sec-release-24.05-highlights">Highlights</a></span></dt><dt><spanclass="section"><ahref="release-notes.xhtml#sec-release-24.05-state-version-changes">State Version Changes</a></span></dt></dl></div><p>This is the current unstable branch and the information in this section
is therefore not final.</p><divclass="section"><divclass="titlepage"><div><div><h2class="title"style="clear: both"><spanid="sec-release-24.05-highlights"></span>Highlights </h2></div></div></div><p>This release has the following notable changes:</p><divclass="itemizedlist"><ulclass="itemizedlist "style="list-style-type: disc;"><liclass="listitem"><p>The <codeclass="literal">.release</code> file in the Home Manager project root has been
removed. Please use the <codeclass="literal">release.json</code> file instead.</p></li><liclass="listitem"><p>The <spanclass="command"><strong>home-manager uninstall</strong></span> command has been reworked to,
hopefully, be more robust. The new implementation makes use of a new
Boolean configuration option <aclass="link"href="options.xhtml#opt-uninstall">uninstall</a> that can
also be used in a pure Nix Flake setup.</p><p>Specifically, if you are using a Flake only installation, then you
can clean up a Home Manager installation by adding</p><pre><codeclass="programlisting nix">uninstall = true;
</code></pre><p>to your existing configuration and then build and activate. This
will override any other configuration and cause, for example, the
removal of all managed files.</p><p>Please be very careful when enabling this option since activating
the built configuration will not only remove the managed files but
<spanclass="emphasis"><em>all</em></span> Home Manager state from your user environment. This includes
removing all your historic Home Manager generations!</p></li><liclass="listitem"><p>The use of <codeclass="literal">$DRY_RUN_CMD</code> and <codeclass="literal">$DRY_RUN_NULL</code> in activation script
blocks is now deprecated. Instead use the new shell function
<spanclass="command"><strong>run</strong></span>. In most cases it is sufficient to replace
<codeclass="literal">$DRY_RUN_CMD</code> by <spanclass="command"><strong>run</strong></span>. For example, if your configuration
currently contains</p><pre><codeclass="programlisting nix">home.activation.reportChanges = config.lib.dag.entryAnywhere ''
if [[ -v oldGenPath ]]; then
$DRY_RUN_CMD nix store diff-closures $oldGenPath $newGenPath
fi
'';
</code></pre><p>then you are now encouraged to change to</p><pre><codeclass="programlisting nix">home.activation.reportChanges = config.lib.dag.entryAnywhere ''
if [[ -v oldGenPath ]]; then
run nix store diff-closures $oldGenPath $newGenPath
fi
'';
</code></pre><p>See the description of <aclass="link"href="options.xhtml#opt-home.activation">home.activation</a> for
more. The deprecated variables will continue to work for now but
their use may in the future trigger a warning message and eventually
they may be removed entirely.</p></li><liclass="listitem"><p>Similarly, the use of <codeclass="literal">$VERBOSE_ECHO</code> in activation script blocks is
deprecated. Instead use the new shell function
<spanclass="command"><strong>verboseEcho</strong></span>. That is,</p><pre><codeclass="programlisting nix">home.activation.doThing = config.lib.dag.entryAnywhere ''
$VERBOSE_ECHO "Doing the thing"
''
</code></pre><p>should now be expressed</p><pre><codeclass="programlisting nix">home.activation.doThing = config.lib.dag.entryAnywhere ''
verboseEcho "Doing the thing"
''
</code></pre><p>See the description of <aclass="link"href="options.xhtml#opt-home.activation">home.activation</a> for
more. The deprecated variable will continue to work for now but its
use may in the future trigger a warning message and eventually it
</div><divclass="section"><divclass="titlepage"><div><div><h2class="title"style="clear: both"><spanid="sec-release-24.05-state-version-changes"></span>State Version Changes </h2></div></div></div><p>The state version in this release includes the changes below. These
</div><divclass="chapter"><divclass="titlepage"><div><div><h2class="title"><spanid="sec-release-23.11"></span>Release 23.11 </h2></div></div></div><divclass="toc"><p><strong>Table of Contents</strong></p><dlclass="toc"><dt><spanclass="section"><ahref="release-notes.xhtml#sec-release-23.11-highlights">Highlights</a></span></dt><dt><spanclass="section"><ahref="release-notes.xhtml#sec-release-23.11-state-version-changes">State Version Changes</a></span></dt></dl></div><p>The 23.11 release branch became stable in November, 2023.</p><divclass="section"><divclass="titlepage"><div><div><h2class="title"style="clear: both"><spanid="sec-release-23.11-highlights"></span>Highlights </h2></div></div></div><p>This release has the following notable changes:</p><divclass="itemizedlist"><ulclass="itemizedlist "style="list-style-type: disc;"><liclass="listitem"><p>When using <aclass="link"href="options.xhtml#opt-programs.fish.enable">programs.fish.enable</a>, the setup code for
<aclass="link"href="https://github.com/bouk/babelfish"target="_top">babelfish</a>. This should result
in significantly faster shell startup times but could theoretically
break if you have very complex bash expressions in a session
variable. Please report any issues you experience.</p></li><liclass="listitem"><p>The <codeclass="literal">.release</code> file in the Home Manager source tree has been
supplanted by <codeclass="literal">release.json</code>, which contains more information about
the branch. If you have any external code reading this file, please
switch to consuming <codeclass="literal">release.json</code> instead. The <codeclass="literal">.release</code> file will
be removed in 24.05.</p></li><liclass="listitem"><p>Home Manager has migrated to using the upstream Nixpkgs
<codeclass="literal">lib.nixosOptionsDoc</code> processor for option documentation. If you
have any external Home Manager modules, their option descriptions
and literal examples should be translated to <aclass="link"href="https://nixos.org/manual/nixpkgs/unstable/#sec-contributing-markup"target="_top">Nixpkgs-flavoured
Markdown</a>.</p></li><liclass="listitem"><p>The <codeclass="literal">services.password-store-sync</code> module has been removed. Use
</div><divclass="section"><divclass="titlepage"><div><div><h2class="title"style="clear: both"><spanid="sec-release-23.11-state-version-changes"></span>State Version Changes </h2></div></div></div><p>The state version in this release includes the changes below. These
</div><divclass="chapter"><divclass="titlepage"><div><div><h2class="title"><spanid="sec-release-23.05"></span>Release 23.05 </h2></div></div></div><divclass="toc"><p><strong>Table of Contents</strong></p><dlclass="toc"><dt><spanclass="section"><ahref="release-notes.xhtml#sec-release-23.05-highlights">Highlights</a></span></dt><dt><spanclass="section"><ahref="release-notes.xhtml#sec-release-23.05-state-version-changes">State Version Changes</a></span></dt></dl></div><p>The 23.05 release branch became the stable branch in May, 2023.</p><divclass="section"><divclass="titlepage"><div><div><h2class="title"style="clear: both"><spanid="sec-release-23.05-highlights"></span>Highlights </h2></div></div></div><p>This release has the following notable changes:</p><divclass="itemizedlist"><ulclass="itemizedlist "style="list-style-type: disc;"><liclass="listitem"><p>Firefox add-ons are now managed per-profile. That is, if you are
currently having</p><pre><codeclass="programlisting nix">programs.firefox.extensions = [ foo bar ];
</code></pre><p>in your configuration then you must change it to</p><pre><codeclass="programlisting nix">programs.firefox.profiles.myprofile.extensions = [ foo bar ];
</code></pre></li><liclass="listitem"><p>The default configuration location has been changed from
<codeclass="literal">~/.config/nixpkgs/home.nix</code> to <codeclass="literal">~/.config/home-manager/home.nix</code>.</p><p>Similarly, if you are using a Nix flake based setup then the default
flake file location has changed from <codeclass="literal">~/.config/nixpkgs/flake.nix</code>
to <codeclass="literal">~/.config/home-manager/flake.nix</code>.</p><p>The old location will continue to work but using it will trigger a
warning message. We changed the default configuration location to
avoid confusion about which files belong to Home Manager and which
belong to Nixpkgs.</p></li><liclass="listitem"><p>The <codeclass="literal">home-manager</code> tool now offers an <codeclass="literal">init</code> command. This command
can be used to generate an initial Home Manager configuration, and
optionally also activate it. The recommended installation method for
a standalone Home Manager setup with Nix flakes uses this new
command. The standard installation method remains the same but uses
the new command internally. See <aclass="link"href="index.xhtml#sec-flakes-standalone"title="Standalone setup">sec-flakes-standalone</a> for
</div><divclass="section"><divclass="titlepage"><div><div><h2class="title"style="clear: both"><spanid="sec-release-23.05-state-version-changes"></span>State Version Changes </h2></div></div></div><p>The state version in this release includes the changes below. These
"23.05" or later.</p><divclass="itemizedlist"><ulclass="itemizedlist "style="list-style-type: disc;"><liclass="listitem"><p>The options</p><divclass="itemizedlist"><ulclass="itemizedlist "style="list-style-type: circle;"><liclass="listitem"><p><aclass="link"href="options.xhtml#opt-xsession.windowManager.i3.config.window.titlebar">xsession.windowManager.i3.config.window.titlebar</a></p></li><liclass="listitem"><p><aclass="link"href="options.xhtml#opt-xsession.windowManager.i3.config.floating.titlebar">xsession.windowManager.i3.config.floating.titlebar</a></p></li><liclass="listitem"><p><aclass="link"href="options.xhtml#opt-wayland.windowManager.sway.config.window.titlebar">wayland.windowManager.sway.config.window.titlebar</a></p></li><liclass="listitem"><p><aclass="link"href="options.xhtml#opt-wayland.windowManager.sway.config.floating.titlebar">wayland.windowManager.sway.config.floating.titlebar</a></p></li></ul></div><p>now default to <codeclass="literal">true</code> which is consistent with the default values
</div><divclass="chapter"><divclass="titlepage"><div><div><h2class="title"><spanid="sec-release-22.11"></span>Release 22.11 </h2></div></div></div><divclass="toc"><p><strong>Table of Contents</strong></p><dlclass="toc"><dt><spanclass="section"><ahref="release-notes.xhtml#sec-release-22.11-highlights">Highlights</a></span></dt><dt><spanclass="section"><ahref="release-notes.xhtml#sec-release-22.11-state-version-changes">State Version Changes</a></span></dt></dl></div><p>The 22.11 release branch became the stable branch in November, 2022.</p><divclass="section"><divclass="titlepage"><div><div><h2class="title"style="clear: both"><spanid="sec-release-22.11-highlights"></span>Highlights </h2></div></div></div><p>This release has the following notable changes:</p><divclass="itemizedlist"><ulclass="itemizedlist "style="list-style-type: disc;"><liclass="listitem"><p>The <aclass="link"href="options.xhtml#opt-home.stateVersion">home.stateVersion</a> option no longer has a default
value. It used to default to “18.09”, which was the Home Manager
version that introduced the option. If your configuration does not
explicitly set this option then you need to add</p><pre><codeclass="programlisting nix">home.stateVersion = "18.09";
</code></pre><p>to your configuration.</p></li><liclass="listitem"><p>The Flake function <codeclass="literal">homeManagerConfiguration</code> has been simplified.
Specifically, the arguments</p><divclass="itemizedlist"><ulclass="itemizedlist "style="list-style-type: circle;"><liclass="listitem"><p><codeclass="literal">configuration</code>,</p></li><liclass="listitem"><p><codeclass="literal">username</code>,</p></li><liclass="listitem"><p><codeclass="literal">homeDirectory</code>,</p></li><liclass="listitem"><p><codeclass="literal">stateVersion</code>,</p></li><liclass="listitem"><p><codeclass="literal">extraModules</code>, and</p></li><liclass="listitem"><p><codeclass="literal">system</code></p></li></ul></div><p>have been removed. Instead use the new <codeclass="literal">modules</code> argument, which
accepts a list of NixOS modules.</p><p>Further, the <codeclass="literal">pkgs</code> argument is now mandatory and should be set to
<codeclass="literal">nixpkgs.legacyPackages.${system}</code> where <codeclass="literal">nixpkgs</code> is the Nixpkgs
input of your choice.</p><p>For example, if your Flake currently contains</p><pre><codeclass="programlisting nix">homeManagerConfiguration {
configuration = import ./home.nix;
system = "x86_64-linux";
username = "jdoe";
homeDirectory = "/home/jdoe";
stateVersion = "22.05";
extraModules = [ ./some-extra-module.nix ];
}
</code></pre><p>then you can change it to</p><pre><codeclass="programlisting nix">homeManagerConfiguration {
some other file or simply place them in your <codeclass="literal">home.nix</code>.</p></li><liclass="listitem"><p>The <codeclass="literal">services.picom</code> module has been refactored to use structural
settings.</p><p>As a result <codeclass="literal">services.picom.extraOptions</code> has been removed in favor
<aclass="link"href="options.xhtml#opt-services.picom.settings">services.picom.settings</a> instead.</p></li><liclass="listitem"><p>The <codeclass="literal">services.compton</code> module has been removed. It was deprecated in
</div><divclass="section"><divclass="titlepage"><div><div><h2class="title"style="clear: both"><spanid="sec-release-22.11-state-version-changes"></span>State Version Changes </h2></div></div></div><p>The state version in this release includes the changes below. These
"22.11" or later.</p><divclass="itemizedlist"><ulclass="itemizedlist "style="list-style-type: disc;"><liclass="listitem"><p>The <aclass="link"href="options.xhtml#opt-services.mpd.musicDirectory">services.mpd.musicDirectory</a> option now defaults to
the value of <aclass="link"href="options.xhtml#opt-xdg.userDirs.music">xdg.userDirs.music</a> if
<aclass="link"href="options.xhtml#opt-xdg.userDirs.enable">xdg.userDirs.enable</a> is enabled. Otherwise it is
undefined and must be specified in the user configuration.</p></li><liclass="listitem"><p>The activation script now resets <codeclass="literal">PATH</code> before running. Before, the
user’s <codeclass="literal">PATH</code> environment variable would be used in the script and
this made it possible for commands in the activation script to run
arbitrary commands accessible to the user. We now restrict the
activation script to commands that are explicitly specified.</p><p>There is no official way to restore the old behavior. We attempt to
make the activation script as reproducible as possible and honoring
the user’s <codeclass="literal">PATH</code> reduces reproducibility.</p><p>If you need to run a command in an activation script block then
refer to the command by its absolute command path, such as
</div><divclass="chapter"><divclass="titlepage"><div><div><h2class="title"><spanid="sec-release-22.05"></span>Release 22.05 </h2></div></div></div><divclass="toc"><p><strong>Table of Contents</strong></p><dlclass="toc"><dt><spanclass="section"><ahref="release-notes.xhtml#sec-release-22.05-highlights">Highlights</a></span></dt><dt><spanclass="section"><ahref="release-notes.xhtml#sec-release-22.05-state-version-changes">State Version Changes</a></span></dt></dl></div><p>The 22.05 release branch became the stable branch in May, 2022.</p><divclass="section"><divclass="titlepage"><div><div><h2class="title"style="clear: both"><spanid="sec-release-22.05-highlights"></span>Highlights </h2></div></div></div><p>This release has the following notable changes:</p><divclass="itemizedlist"><ulclass="itemizedlist "style="list-style-type: disc;"><liclass="listitem"><p>The <codeclass="literal">programs.waybar.settings.modules</code> option was removed. Waybar
</div><divclass="section"><divclass="titlepage"><div><div><h2class="title"style="clear: both"><spanid="sec-release-22.05-state-version-changes"></span>State Version Changes </h2></div></div></div><p>The state version in this release includes the changes below. These
"22.05" or later.</p><divclass="itemizedlist"><ulclass="itemizedlist "style="list-style-type: disc;"><liclass="listitem"><p>The <aclass="link"href="options.xhtml#opt-programs.waybar.settings">programs.waybar.settings</a> option now allows defining
modules directly under <aclass="link"href="options.xhtml#opt-programs.waybar.settings">programs.waybar.settings</a>.
</div><divclass="chapter"><divclass="titlepage"><div><div><h2class="title"><spanid="sec-release-21.11"></span>Release 21.11 </h2></div></div></div><divclass="toc"><p><strong>Table of Contents</strong></p><dlclass="toc"><dt><spanclass="section"><ahref="release-notes.xhtml#sec-release-21.11-highlights">Highlights</a></span></dt><dt><spanclass="section"><ahref="release-notes.xhtml#sec-release-21.11-state-version-changes">State Version Changes</a></span></dt></dl></div><p>The 21.11 release branch became the stable branch in November, 2021.</p><divclass="section"><divclass="titlepage"><div><div><h2class="title"style="clear: both"><spanid="sec-release-21.11-highlights"></span>Highlights </h2></div></div></div><p>This release has the following notable changes:</p><divclass="itemizedlist"><ulclass="itemizedlist "style="list-style-type: disc;"><liclass="listitem"><p>All Home Manager modules are now loaded on all platforms. With this
change you will get a more descriptive error message if you attempt
to enable a module that is incompatible with the host platform.</p><p>Previously, modules that were platform specific would only be loaded
on that particular platform. For example, a module defining a
<aclass="link"href="https://systemd.io/"target="_top">systemd</a> service would only be loaded when the
host platform was Linux. This reduced evaluation times, simplified
the generated documentation, and made it impossible to accidentally
use modules that do not support the host platform.</p><p>While the above benefits are quite nice, avoiding module loads also
brings a few problems. For example, the <aclass="link"href="https://nix-community.github.io/home-manager/"target="_top">public
documentation</a> will
only show the options available for Linux hosts and the
documentation cannot make references to options within modules that
are unavailable on some hosts. Finally, users who wish to use the
same configuration file for different platforms cannot do so, even
if the platform incompatible options are unused.</p><p>Ultimately, the benefits of loading all modules won and the behavior
has now changed. For associated discussion see
<aclass="link"href="https://github.com/nix-community/home-manager/issues/1906"target="_top">issue#1906</a>.</p></li><liclass="listitem"><p>Rofi version 1.7.0 removed many options that were used by the module
and replaced them with custom themes, which are more flexible and
powerful.</p><p>You can replicate your old configuration by moving those options to
</div><divclass="section"><divclass="titlepage"><div><div><h2class="title"style="clear: both"><spanid="sec-release-21.11-state-version-changes"></span>State Version Changes </h2></div></div></div><p>The state version in this release includes the changes below. These
"21.11" or later.</p><divclass="itemizedlist"><ulclass="itemizedlist "style="list-style-type: disc;"><liclass="listitem"><p>The <aclass="link"href="options.xhtml#opt-home.keyboard">home.keyboard</a> option now defaults to <codeclass="literal">null</code>, meaning
example, <codeclass="literal">setxkbmap</code> won’t be run in X sessions.</p></li><liclass="listitem"><p>The <aclass="link"href="options.xhtml#opt-programs.pet.settings">programs.pet.settings</a> option no longer place its
value inside a <codeclass="literal">General</code> attribute. For example,</p><pre><codeclass="programlisting nix">programs.pet.settings.editor = "nvim";
</div><divclass="chapter"><divclass="titlepage"><div><div><h2class="title"><spanid="sec-release-21.05"></span>Release 21.05 </h2></div></div></div><divclass="toc"><p><strong>Table of Contents</strong></p><dlclass="toc"><dt><spanclass="section"><ahref="release-notes.xhtml#sec-release-21.05-highlights">Highlights</a></span></dt><dt><spanclass="section"><ahref="release-notes.xhtml#sec-release-21.05-state-version-changes">State Version Changes</a></span></dt></dl></div><p>The 21.05 release branch became the stable branch in May, 2021.</p><divclass="section"><divclass="titlepage"><div><div><h2class="title"style="clear: both"><spanid="sec-release-21.05-highlights"></span>Highlights </h2></div></div></div><p>This release has the following notable changes:</p><divclass="itemizedlist"><ulclass="itemizedlist "style="list-style-type: disc;"><liclass="listitem"><p>The ‘opt-programs.broot.verbs` option is now a list rather than an
</code></pre></li><liclass="listitem"><p>The <aclass="link"href="options.xhtml#opt-programs.mpv.package">programs.mpv.package</a> option has been changed to
<codeclass="literal">programs.mpv.finalPackage</code> instead.</p></li><liclass="listitem"><p>The <aclass="link"href="options.xhtml#opt-programs.rofi.extraConfig">programs.rofi.extraConfig</a> option is now an attribute
</code></pre></li><liclass="listitem"><p>The <aclass="link"href="options.xhtml#opt-programs.rofi.theme">programs.rofi.theme</a> option now supports defining a
for the available additional options in each program.</p></li><liclass="listitem"><p>Specifying <codeclass="literal">programs.neomutt.binds.map</code> or
<codeclass="literal">programs.neomutt.macros.map</code> as a single string is now deprecated
in favor of specfiying it as a list of strings.</p></li><liclass="listitem"><p>The <codeclass="literal">programs.neovim.configure</code> is deprecated in favor of other
<codeclass="literal">programs.neovim</code> options; please use the other options at your
<aclass="link"href="https://no-color.org/"target="_top">https://no-color.org/</a>.</p></li><liclass="listitem"><p>Qt module now supports <aclass="link"href="options.xhtml#opt-qt.style.name">qt.style.name</a> to specify a theme
name and <aclass="link"href="options.xhtml#opt-qt.style.package">qt.style.package</a> to specify a theme package. If
you have set <aclass="link"href="options.xhtml#opt-qt.platformTheme">qt.platformTheme</a> to <codeclass="literal">gnome</code>, a
<aclass="link"href="options.xhtml#opt-qt.style.package">qt.style.package</a> compatible with both Qt and Gtk is now
required to be set. For instance:</p><pre><codeclass="programlisting nix">qt = {
platformTheme = "gnome";
style = {
name = "adwaita-dark";
package = pkgs.adwaita-qt;
};
};
</code></pre></li><liclass="listitem"><p>The library type <codeclass="literal">fontType</code> now has a <codeclass="literal">size</code> attribute in addition
to <codeclass="literal">name</code>. For example:</p><pre><codeclass="programlisting nix">font = {
</code></pre></li><liclass="listitem"><p>The <aclass="link"href="options.xhtml#opt-programs.htop.settings">programs.htop.settings</a> option is introduced to
</div><divclass="section"><divclass="titlepage"><div><div><h2class="title"style="clear: both"><spanid="sec-release-21.05-state-version-changes"></span>State Version Changes </h2></div></div></div><p>The state version in this release includes the changes below. These
changes are only active if the <codeclass="literal">home.stateVersion</code> option is set to
"21.05" or later.</p><divclass="itemizedlist"><ulclass="itemizedlist compact"style="list-style-type: disc;"><liclass="listitem"><p>The <codeclass="literal">newsboat</code> module now stores generated configuration in
</div><divclass="chapter"><divclass="titlepage"><div><div><h2class="title"><spanid="sec-release-20.09"></span>Release 20.09 </h2></div></div></div><divclass="toc"><p><strong>Table of Contents</strong></p><dlclass="toc"><dt><spanclass="section"><ahref="release-notes.xhtml#sec-release-20.09-highlights">Highlights</a></span></dt><dt><spanclass="section"><ahref="release-notes.xhtml#sec-release-20.09-state-version-changes">State Version Changes</a></span></dt></dl></div><p>The 20.09 release branch became the stable branch in late September,
2020.</p><divclass="section"><divclass="titlepage"><div><div><h2class="title"style="clear: both"><spanid="sec-release-20.09-highlights"></span>Highlights </h2></div></div></div><p>This release has the following notable changes:</p><divclass="itemizedlist"><ulclass="itemizedlist compact"style="list-style-type: disc;"><liclass="listitem"><p>Nothing has happened.</p></li></ul></div>
</div><divclass="section"><divclass="titlepage"><div><div><h2class="title"style="clear: both"><spanid="sec-release-20.09-state-version-changes"></span>State Version Changes </h2></div></div></div><p>The state version in this release includes the changes below. These
"20.09" or later.</p><divclass="itemizedlist"><ulclass="itemizedlist "style="list-style-type: disc;"><liclass="listitem"><p>The options <aclass="link"href="options.xhtml#opt-home.homeDirectory">home.homeDirectory</a> and
<aclass="link"href="options.xhtml#opt-home.username">home.username</a> no longer have default values and must
longer be affected by the <codeclass="literal">XDG_CACHE_HOME</code>, <codeclass="literal">XDG_CONFIG_HOME</code>, and
<codeclass="literal">XDG_DATA_HOME</code> environment variables. They now unconditionally
default to</p><divclass="itemizedlist"><ulclass="itemizedlist "style="list-style-type: circle;"><liclass="listitem"><p><codeclass="literal">"${config.home.homeDirectory}/.cache"</code>,</p></li><liclass="listitem"><p><codeclass="literal">"${config.home.homeDirectory}/.config"</code>, and</p></li><liclass="listitem"><p><codeclass="literal">"${config.home.homeDirectory}/.local/share"</code>.</p></li></ul></div><p>If you choose to switch to state version 20.09 then you must set
these options if you use non-default XDG base directory paths.</p><p>The initial configuration generated by</p><pre><codeclass="programlisting console">$ nix-shell '<home-manager>' -A install
</code></pre><p>will automatically include these options, when necessary.</p></li><liclass="listitem"><p>Git’s <codeclass="literal">smtpEncryption</code> option is now set to <codeclass="literal">tls</code> only if both
<aclass="link"href="options.xhtml#opt-accounts.email.accounts._name_.smtp.tls.enable">accounts.email.accounts.<spanclass="emphasis"><em>name</em></span>.smtp.tls.enable</a> and
<aclass="link"href="options.xhtml#opt-accounts.email.accounts._name_.smtp.tls.useStartTls">accounts.email.accounts.<spanclass="emphasis"><em>name</em></span>.smtp.tls.useStartTls</a> are
<aclass="link"href="options.xhtml#opt-accounts.email.accounts._name_.smtp.tls.enable">accounts.email.accounts.<spanclass="emphasis"><em>name</em></span>.smtp.tls.enable</a> is
<codeclass="literal">true</code>, <codeclass="literal">ssl</code> is used instead.</p></li><liclass="listitem"><p>The <codeclass="literal">nixpkgs</code> module no longer references <codeclass="literal"><nixpkgs></code>. Before it
would do so when building the <codeclass="literal">pkgs</code> module argument. Starting with
state version 20.09, the <codeclass="literal">pkgs</code> argument is instead built from the
same Nixpkgs that was used to initialize the Home Manager modules.
This is useful, for example, when using Home Manager within a Nix
Flake. If you want to keep using <codeclass="literal"><nixpkgs></code> with state version ≥
20.09 then add</p><pre><codeclass="programlisting nix">_module.args.pkgsPath = <nixpkgs>;
</code></pre><p>to your Home Manager configuration.</p></li><liclass="listitem"><p>The options <codeclass="literal">wayland.windowManager.sway.config.bars</code> and
<codeclass="literal">opt-xsession.windowManager.i3.config.bars</code> have been changed so
that most of the suboptions are now nullable and default to <codeclass="literal">null</code>.
The default for these two options has been changed to manually set
the old defaults for each suboption. The overall effect is that if
the <codeclass="literal">bars</code> options is not set, then the default remains the same. On
the other hand, something like:</p><pre><codeclass="programlisting nix">bars = [ {
command = "waybar";
} ];
</code></pre><p>will now create the config:</p><pre><codeclass="programlisting">bar {
</div><divclass="chapter"><divclass="titlepage"><div><div><h2class="title"><spanid="sec-release-20.03"></span>Release 20.03 </h2></div></div></div><divclass="toc"><p><strong>Table of Contents</strong></p><dlclass="toc"><dt><spanclass="section"><ahref="release-notes.xhtml#sec-release-20.03-highlights">Highlights</a></span></dt><dt><spanclass="section"><ahref="release-notes.xhtml#sec-release-20.03-state-version-changes">State Version Changes</a></span></dt></dl></div><p>The 20.03 release branch became the stable branch in April, 2020.</p><divclass="section"><divclass="titlepage"><div><div><h2class="title"style="clear: both"><spanid="sec-release-20.03-highlights"></span>Highlights </h2></div></div></div><p>This release has the following notable changes:</p><divclass="itemizedlist"><ulclass="itemizedlist "style="list-style-type: disc;"><liclass="listitem"><p>Assigning a list to the <aclass="link"href="options.xhtml#opt-home.file">home.file</a>,
</code></pre><p>Support for the list form will be removed in Home Manager version
20.09.</p></li><liclass="listitem"><p>The <codeclass="literal">lib</code> function attribute given to modules is now enriched with
an attribute <codeclass="literal">hm</code> containing extra library functions specific for
Home Manager. More specifically, <codeclass="literal">lib.hm</code> is now the same as
<codeclass="literal">config.lib</code> and should be the preferred choice since it is more
robust.</p><p>Therefore, if your configuration makes use of, for example,
<codeclass="literal">config.lib.dag</code> to create activation script blocks, it is
recommended to change to <codeclass="literal">lib.hm.dag</code>.</p><p>Note, in the unlikely case that you are</p><divclass="itemizedlist"><ulclass="itemizedlist "style="list-style-type: circle;"><liclass="listitem"><p>using Home Manager’s NixOS or nix-darwin module,</p></li><liclass="listitem"><p>have made your own Home Manager module containing an top-level
option named <codeclass="literal">config</code> or <codeclass="literal">options</code>, and</p></li><liclass="listitem"><p>assign to this option in your system configuration inside a
plain attribute set, i.e., without a function argument,</p></li></ul></div><p>then you must update your configuration to perform the option
assignment inside a <codeclass="literal">config</code> attribute. For example, instead of</p><pre><codeclass="programlisting nix">home-manager.users.jane = { config = "foo"; };
compatible fork called picom.</p></li><liclass="listitem"><p>The list form of the <aclass="link"href="options.xhtml#opt-programs.ssh.matchBlocks">programs.ssh.matchBlocks</a> option has
</div><divclass="section"><divclass="titlepage"><div><div><h2class="title"style="clear: both"><spanid="sec-release-20.03-state-version-changes"></span>State Version Changes </h2></div></div></div><p>The state version in this release includes the changes below. These
"20.03" or later.</p><divclass="itemizedlist"><ulclass="itemizedlist "style="list-style-type: disc;"><liclass="listitem"><p>The <aclass="link"href="options.xhtml#opt-programs.zsh.history.path">programs.zsh.history.path</a> option is no longer
</div><divclass="chapter"><divclass="titlepage"><div><div><h2class="title"><spanid="sec-release-19.09"></span>Release 19.09 </h2></div></div></div><divclass="toc"><p><strong>Table of Contents</strong></p><dlclass="toc"><dt><spanclass="section"><ahref="release-notes.xhtml#sec-release-19.09-highlights">Highlights</a></span></dt><dt><spanclass="section"><ahref="release-notes.xhtml#sec-release-19.09-state-version-changes">State Version Changes</a></span></dt></dl></div><p>The 19.09 release branch became the stable branch in October, 2019.</p><divclass="section"><divclass="titlepage"><div><div><h2class="title"style="clear: both"><spanid="sec-release-19.09-highlights"></span>Highlights </h2></div></div></div><p>This release has the following notable changes:</p><divclass="itemizedlist"><ulclass="itemizedlist "style="list-style-type: disc;"><liclass="listitem"><p>The <codeclass="literal">programs.firefox.enableGoogleTalk</code> and
<codeclass="literal">programs.firefox.enableIcedTea</code> options are now deprecated and will
only work if Firefox ESR 52.x is used.</p></li><liclass="listitem"><p>The <codeclass="literal">home-manager</code> tool now provides an <codeclass="literal">uninstall</code> sub-command that
can be used to uninstall Home Manager, if used in the standalone
mode. That is, not as a NixOS module.</p></li></ul></div>
</div><divclass="section"><divclass="titlepage"><div><div><h2class="title"style="clear: both"><spanid="sec-release-19.09-state-version-changes"></span>State Version Changes </h2></div></div></div><p>The state version in this release includes the changes below. These
"19.09" or later.</p><divclass="itemizedlist"><ulclass="itemizedlist "style="list-style-type: disc;"><liclass="listitem"><p>The <aclass="link"href="options.xhtml#opt-programs.firefox.package">programs.firefox.package</a> option now expects a
wrapped Firefox package and defaults to <codeclass="literal">pkgs.firefox</code>.</p></li><liclass="listitem"><p>The options <aclass="link"href="options.xhtml#opt-home.keyboard.layout">home.keyboard.layout</a> and
<aclass="link"href="options.xhtml#opt-home.keyboard.variant">home.keyboard.variant</a> now default to <codeclass="literal">null</code>, which
</div><divclass="chapter"><divclass="titlepage"><div><div><h2class="title"><spanid="sec-release-19.03"></span>Release 19.03 </h2></div></div></div><divclass="toc"><p><strong>Table of Contents</strong></p><dlclass="toc"><dt><spanclass="section"><ahref="release-notes.xhtml#sec-release-19.03-highlights">Highlights</a></span></dt><dt><spanclass="section"><ahref="release-notes.xhtml#sec-release-19.03-state-version-changes">State Version Changes</a></span></dt></dl></div><p>The 19.03 release branch became the stable branch in April, 2019.</p><divclass="section"><divclass="titlepage"><div><div><h2class="title"style="clear: both"><spanid="sec-release-19.03-highlights"></span>Highlights </h2></div></div></div><p>This release has the following notable changes:</p><divclass="itemizedlist"><ulclass="itemizedlist "style="list-style-type: disc;"><liclass="listitem"><p>The <aclass="link"href="options.xhtml#opt-home.file._name_.source">home.file.<spanclass="emphasis"><em>name</em></span>.source</a> option now allows source
files to be hidden, that is, having a name starting with the <codeclass="literal">.</code>
character. It also allows the source file name to contain characters
not typically allowed for Nix store paths. For example, your
configuration can now contain things such as</p><pre><codeclass="programlisting nix">home.file."my file".source = ./. + "/file with spaces!";
</code></pre></li><liclass="listitem"><p>The type used for the systemd unit options under
</div><divclass="section"><divclass="titlepage"><div><div><h2class="title"style="clear: both"><spanid="sec-release-19.03-state-version-changes"></span>State Version Changes </h2></div></div></div><p>The state version in this release includes the changes below. These
changes are only active if the <aclass="link"href="options.xhtml#opt-home.stateVersion">home.stateVersion</a> option is
set to “19.03” or later.</p><divclass="itemizedlist"><ulclass="itemizedlist compact"style="list-style-type: disc;"><liclass="listitem"><p>There is now an option <aclass="link"href="options.xhtml#opt-programs.beets.enable">programs.beets.enable</a> that
</div><divclass="chapter"><divclass="titlepage"><div><div><h2class="title"><spanid="sec-release-18.09"></span>Release 18.09 </h2></div></div></div><p>The 18.09 release branch became the stable branch in September, 2018.</p>