GNOME Flashback provides a desktop environment based on the classic GNOME 2 architecture. You can enable the default GNOME Flashback session, which uses the Metacity window manager, with:
```nix
{
services.desktopManager.gnome.flashback.enableMetacity = true;
}
```
It is also possible to create custom sessions that replace Metacity with a different window manager using [](#opt-services.desktopManager.gnome.flashback.customSessions).
The following example uses `xmonad` window manager:
```nix
{
services.desktopManager.gnome.flashback.customSessions = [
{
wmName = "xmonad";
wmLabel = "XMonad";
wmCommand = "${pkgs.haskellPackages.xmonad}/bin/xmonad";
enableGnomePanel = false;
}
];
}
```
## Icons and GTK Themes {#sec-gnome-icons-and-gtk-themes}
Icon themes and GTK themes don’t require any special option to install in NixOS.
You can add them to [](#opt-environment.systemPackages) and switch to them with GNOME Tweaks.
If you’d like to do this manually in dconf, change the values of the following keys:
```
/org/gnome/desktop/interface/gtk-theme
/org/gnome/desktop/interface/icon-theme
```
in `dconf-editor`
## Shell Extensions {#sec-gnome-shell-extensions}
Most Shell extensions are packaged under the `gnomeExtensions` attribute.
Some packages that include Shell extensions, like `gpaste`, don’t have their extension decoupled under this attribute.
You can install them like any other package:
```nix
{
environment.systemPackages = [
gnomeExtensions.dash-to-dock
gnomeExtensions.gsconnect
gnomeExtensions.mpris-indicator-button
];
}
```
Unfortunately, we lack a way for these to be managed in a completely declarative way.
So you have to enable them manually with an Extensions application.
It is possible to use a [GSettings override](#sec-gnome-gsettings-overrides) for this on `org.gnome.shell.enabled-extensions`, but that will only influence the default value.
## GSettings Overrides {#sec-gnome-gsettings-overrides}
Majority of software building on the GNOME platform use GLib’s [GSettings](https://developer.gnome.org/gio/unstable/GSettings.html) system to manage runtime configuration. For our purposes, the system consists of XML schemas describing the individual configuration options, stored in the package, and a settings backend, where the values of the settings are stored. On NixOS, like on most Linux distributions, dconf database is used as the backend.