{ config, pkgs, ... }:
{
  # Don't install all programs of the GNOME desktop.
  # https://nixos.wiki/wiki/GNOME#Excluding_some_GNOME_applications_from_the_default_install
  environment.gnome.excludePackages = (with pkgs; [
    baobab # Disk usage analyzer
    gnome-connections # Remote desktop client (VNC, RDP)
    gnome.gnome-logs # Systemd journal log viewer
    gnome-photos
    gnome-tour # Introduction to GNOME
    gnome-console # Terminal emulator. TODO Can the color scheme be configured with dconf?
    gnome.cheese # Webcam viewer
    gnome.gnome-music # Music player
    gnome.epiphany # Web browser
    gnome.geary # Email
    #gnome.gnome-characters # Emoji keyboard
    #gnome.gnome-contacts # Address book
    gnome.gnome-font-viewer # View and install fonts
    gnome.gnome-system-monitor # Resource monitor / task manager
    gnome.totem # Video player
  ]);

  # GNOME Calendar comes preinstalled. https://nixos.wiki/wiki/GNOME/Calendar

  # Enable the X11 windowing system.
  services.xserver.enable = true;
  # Exclude xterm.
  services.xserver.excludePackages = [ pkgs.xterm ];

  # Enable the GNOME Desktop Environment.
  services.xserver.displayManager.gdm.enable = true;
  # Toggles, weather the Wayland or X11 GNOME session is started.
  services.xserver.displayManager.gdm.wayland = false;
  services.xserver.desktopManager.gnome.enable = true;

  # Configure keymap in X11.
  services.xserver = {
    layout = "de";
    xkbVariant = "nodeadkeys";
  };

  # Enable sound with pipewire.
  sound.enable = true;
  hardware.pulseaudio.enable = false;
  security.rtkit.enable = true;
  services.pipewire = {
    enable = true;
    alsa.enable = true;
    alsa.support32Bit = true;
    pulse.enable = true;
    # If you want to use JACK applications, uncomment this.
    #jack.enable = true;

    # Use the example session manager (no others are packaged yet so this is enabled by default,
    # no need to redefine it in your config for now)
    #media-session.enable = true;
  };

  # Enable touchpad support (enabled default in most desktopManager).
  # services.xserver.libinput.enable = true;
}
