# Release 20.09 {#sec-release-20.09}

The 20.09 release branch became the stable branch in late September,
2020.

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

This release has the following notable changes:

-   Nothing has happened.

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

-   The options [home.homeDirectory](#opt-home.homeDirectory) and
    [home.username](#opt-home.username) no longer have default values and must
    therefore be provided in your configuration. Previously their values
    would default to the content of the environment variables `HOME` and
    `USER`, respectively.

    Further, the options [xdg.cacheHome](#opt-xdg.cacheHome),
    [xdg.dataHome](#opt-xdg.dataHome) will no
    longer be affected by the `XDG_CACHE_HOME`, `XDG_CONFIG_HOME`, and
    `XDG_DATA_HOME` environment variables. They now unconditionally
    default to

    -   `"${config.home.homeDirectory}/.cache"`,

    -   `"${config.home.homeDirectory}/.config"`, and

    -   `"${config.home.homeDirectory}/.local/share"`.

    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.

    The initial configuration generated by

    ``` console
    $ nix-shell '<home-manager>' -A install
    ```

    will automatically include these options, when necessary.

-   Git's `smtpEncryption` option is now set to `tls` only if both
    [accounts.email.accounts._name_.smtp.tls.enable](#opt-accounts.email.accounts._name_.smtp.tls.enable) and
    [accounts.email.accounts._name_.smtp.tls.useStartTls](#opt-accounts.email.accounts._name_.smtp.tls.useStartTls) are
    `true`. If only
    [accounts.email.accounts._name_.smtp.tls.enable](#opt-accounts.email.accounts._name_.smtp.tls.enable) is
    `true`, `ssl` is used instead.

-   The `nixpkgs` module no longer references `<nixpkgs>`. Before it
    would do so when building the `pkgs` module argument. Starting with
    state version 20.09, the `pkgs` 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 `<nixpkgs>` with state version ≥
    20.09 then add

    ``` nix
    _module.args.pkgsPath = <nixpkgs>;
    ```

    to your Home Manager configuration.

-   The options `wayland.windowManager.sway.config.bars` and
    `opt-xsession.windowManager.i3.config.bars` have been changed so
    that most of the suboptions are now nullable and default to `null`.
    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 `bars` options is not set, then the default remains the same. On
    the other hand, something like:

    ``` nix
    bars = [ {
      command = "waybar";
    } ];
    ```

    will now create the config:

        bar {
          swaybar_command waybar
        }

    instead of

        bar {

          font pango:monospace 8
          mode dock
          hidden_state hide
          position bottom
          status_command /nix/store/h7s6i9q1z5fxrlyyw5ls8vqxhf5bcs5a-i3status-2.13/bin/i3status
          swaybar_command waybar
          workspace_buttons yes
          strip_workspace_numbers no
          tray_output primary
          colors {
            background #000000
            statusline #ffffff
            separator #666666
            focused_workspace #4c7899 #285577 #ffffff
            active_workspace #333333 #5f676a #ffffff
            inactive_workspace #333333 #222222 #888888
            urgent_workspace #2f343a #900000 #ffffff
            binding_mode #2f343a #900000 #ffffff
          }

        }
