{ 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
    ./gnome-config.nix
    ./gnome-extensions.nix
    ./gnome-wallpaper.nix
    ./gnome-profile-image.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;
  services.xserver.desktopManager.gnome.enable = true;
  # Toggles, weather the Wayland or X11 GNOME session is started.
  services.xserver.displayManager.gdm.wayland = 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-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?
    cheese # Webcam viewer
    gnome-music # Music player
    epiphany # Web browser
    geary # Email
    simple-scan # Scanning
    file-roller # Archive manager: Compress and decompress
    gnome-calendar # Calendar
    gnome-weather # Weather forcast
    gnome-clocks # Clock and timer
    gnome-characters # Emoji keyboard/picker
    gnome-contacts # Address book
    gnome-maps # Map and navigation
    gnome-font-viewer # View and install fonts
    gnome-system-monitor # Resource monitor / task manager
    gnome-disk-utility # Partition and format disks. Mount disk images (.ISO)
    gnome-calculator
    totem # Video player
    yelp # GNOME help
  ]);

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