# Release 24.05 {#sec-release-24.05}

This is the current unstable branch and the information in this section
is therefore not final.

## Highlights {#sec-release-24.05-highlights}

This release has the following notable changes:

-   The `.release` file in the Home Manager project root has been
    removed. Please use the `release.json` file instead.

- The {command}`home-manager uninstall` command has been reworked to,
  hopefully, be more robust. The new implementation makes use of a new
  Boolean configuration option [uninstall](#opt-uninstall) that can
  also be used in a pure Nix Flake setup.

  Specifically, if you are using a Flake only installation, then you
  can clean up a Home Manager installation by adding

  ``` nix
  uninstall = true;
  ```

  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.

  Please be very careful when enabling this option since activating
  the built configuration will not only remove the managed files but
  _all_ Home Manager state from your user environment. This includes
  removing all your historic Home Manager generations!

- The use of `$DRY_RUN_CMD` and `$DRY_RUN_NULL` in activation script
  blocks is now deprecated. Instead use the new shell function
  {command}`run`. In most cases it is sufficient to replace
  `$DRY_RUN_CMD` by {command}`run`. For example, if your configuration
  currently contains

  ```nix
  home.activation.reportChanges = config.lib.dag.entryAnywhere ''
    if [[ -v oldGenPath ]]; then
      $DRY_RUN_CMD nix store diff-closures $oldGenPath $newGenPath
    fi
  '';
  ```

  then you are now encouraged to change to

  ```nix
  home.activation.reportChanges = config.lib.dag.entryAnywhere ''
    if [[ -v oldGenPath ]]; then
      run nix store diff-closures $oldGenPath $newGenPath
    fi
  '';
  ```

  See the description of [home.activation](#opt-home.activation) 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.

- Similarly, the use of `$VERBOSE_ECHO` in activation script blocks is
  deprecated. Instead use the new shell function
  {command}`verboseEcho`. That is,

  ```nix
  home.activation.doThing = config.lib.dag.entryAnywhere ''
    $VERBOSE_ECHO "Doing the thing"
  ''
  ```

  should now be expressed

  ```nix
  home.activation.doThing = config.lib.dag.entryAnywhere ''
    verboseEcho "Doing the thing"
  ''
  ```

  See the description of [home.activation](#opt-home.activation) 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
  may be removed entirely.

## State Version Changes {#sec-release-24.05-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
\"24.05\" or later.

-   Nothing, yet.
