# Release 20.09 (“Nightingale”, 2020.09/??)

## Highlights

In addition to numerous new and upgraded packages, this release has the following highlights:

- Support is planned until the end of April 2021, handing over to 21.03.

- GNOME desktop environment was upgraded to 3.36, see its release notes.

- PHP now defaults to PHP 7.4, updated from 7.3.

- Two new options, authorizedKeysCommand and authorizedKeysCommandUser, have been added to the `openssh` module. If you have `AuthorizedKeysCommand` in your services.openssh.extraConfig you should make use of these new options instead.

## New Services

The following new services were added since the last release:

## Backward Incompatibilities

When upgrading from a previous release, please be aware of the following incompatible changes:

- Grafana is now built without support for phantomjs by default. Phantomjs support has been deprecated in Grafana and the `phantomjs` project is currently unmaintained. It can still be enabled by providing `phantomJsSupport = true` to the package instanciation:

      {
        services.grafana.package = pkgs.grafana.overrideAttrs (oldAttrs: rec {
          phantomJsSupport = false;
        });
      }

- The supybot module now uses `/var/lib/supybot` as its default stateDir path if `stateVersion` is 20.09 or higher. It also enables number of systemd sandboxing options which may possibly interfere with some plugins. If this is the case you can disable the options through attributes in `systemd.services.supybot.serviceConfig`.

- The `security.duosec.skey` option, which stored a secret in the nix store, has been replaced by a new security.duosec.secretKeyFile option for better security.

  `security.duosec.ikey` has been renamed to security.duosec.integrationKey.

- The initrd SSH support now uses OpenSSH rather than Dropbear to allow the use of Ed25519 keys and other OpenSSH-specific functionality. Host keys must now be in the OpenSSH format, and at least one pre-generated key must be specified.

  If you used the `boot.initrd.network.ssh.host*Key` options, you'll get an error explaining how to convert your host keys and migrate to the new `boot.initrd.network.ssh.hostKeys` option. Otherwise, if you don't have any host keys set, you'll need to generate some; see the `hostKeys` option documentation for instructions.

- Since this release there's an easy way to customize your PHP install to get a much smaller base PHP with only wanted extensions enabled. See the following snippet installing a smaller PHP with the extensions `imagick`, `opcache` and `pdo_mysql` loaded:

      environment.systemPackages = [
      (pkgs.php.buildEnv { extensions = pp: with pp; [
          imagick
          opcache
          pdo_mysql
        ]; })
      ];

  The default `php` attribute hasn't lost any extensions - the `opcache` extension was added there.

  All upstream PHP extensions are available under `php.extensions.<name?>`.

  The updated `php` attribute is now easily customizable to your liking by using extensions instead of writing config files or changing configure flags.

  Therefore we have removed the following configure flags:

  ### PHP `config` flags that we don't read anymore:

  - `config.php.argon2`

  - `config.php.bcmath`

  - `config.php.bz2`

  - `config.php.calendar`

  - `config.php.curl`

  - `config.php.exif`

  - `config.php.ftp`

  - `config.php.gd`

  - `config.php.gettext`

  - `config.php.gmp`

  - `config.php.imap`

  - `config.php.intl`

  - `config.php.ldap`

  - `config.php.libxml2`

  - `config.php.libzip`

  - `config.php.mbstring`

  - `config.php.mysqli`

  - `config.php.mysqlnd`

  - `config.php.openssl`

  - `config.php.pcntl`

  - `config.php.pdo_mysql`

  - `config.php.pdo_odbc`

  - `config.php.pdo_pgsql`

  - `config.php.phpdbg`

  - `config.php.postgresql`

  - `config.php.readline`

  - `config.php.soap`

  - `config.php.sockets`

  - `config.php.sodium`

  - `config.php.sqlite`

  - `config.php.tidy`

  - `config.php.xmlrpc`

  - `config.php.xsl`

  - `config.php.zip`

  - `config.php.zlib`

- Gollum received a major update to version 5.x and you may have to change some links in your wiki when migrating from gollum 4.x. More information can be found here.

- Deluge 2.x was added and is used as default for new NixOS installations where stateVersion is >= 20.09. If you are upgrading from a previous NixOS version, you can set `service.deluge.package = pkgs.deluge-2_x` to upgrade to Deluge 2.x and migrate the state to the new format. Be aware that backwards state migrations are not supported by Deluge.

- The NixOS options `nesting.clone` and `nesting.children` have been deleted, and replaced with named configurations.

  Replace a `nesting.clone` entry with:

      {
      specialisation.example-sub-configuration = {
        configuration = {
          ...
        };
      };

  Replace a `nesting.children` entry with:

      {
      specialisation.example-sub-configuration = {
        inheritParentConfig = false;
        configuration = {
          ...
        };
      };

  To switch to a specialised configuration at runtime you need to run:

      # sudo /run/current-system/specialisation/example-sub-configuration/bin/switch-to-configuration test

  Before you would have used:

      # sudo /run/current-system/fine-tune/child-1/bin/switch-to-configuration test

## Other Notable Changes

- The `notmuch` package move its emacs-related binaries and emacs lisp files to a separate output. They're not part of the default `out` output anymore - if you relied on the `notmuch-emacs-mua` binary or the emacs lisp files, access them via the `notmuch.emacs` output.