{ config, pkgs, ... }:
{
  # GNOME desktop environment.
  # If the theme or other settings are broken after switching to GNOME from e.g. KDE, resetting settings can help:
  #   dconf reset -f / && reboot
  # See also: kde.nix

  imports = [
    ./audio.nix
  ];

  # 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;

  # 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
    snapshot # Camera
    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.simple-scan # Scanning
    gnome.file-roller # Archive manager: Compress and decompress
    gnome.gnome-calendar # Calendar
    gnome.gnome-weather # Weather forcast
    gnome.gnome-clocks # Clock and timer
    gnome.gnome-characters # Emoji keyboard/picker
    gnome.gnome-contacts # Address book
    gnome.gnome-maps # Map and navigation
    gnome.gnome-font-viewer # View and install fonts
    gnome.gnome-system-monitor # Resource monitor / task manager
    gnome.gnome-disk-utility # Partition and format disks. Mount disk images (.ISO)
    gnome.gnome-calculator
    gnome.totem # Video player
    gnome.yelp # GNOME help
  ]);

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