{ config, pkgs, ... }:
{
  services.xserver.enable = true;
  services.xserver.displayManager.gdm.enable = true;
  services.xserver.displayManager.gdm.wayland = true;
  services.xserver.desktopManager.gnome.enable = true;
  #services.printing.enable = true; # CUPS
  programs.xwayland.enable = true;
  xdg.portal.enable = true;

  services.udev.packages = [
    (pkgs.gnome-settings-daemon or pkgs.gnome.gnome-settings-daemon)
  ];

  programs.gnome-terminal.enable = false;

  services.tumbler.enable = true; # TODO: needed when we have ffmpegthumbnailer?
  services.gnome.sushi.enable = true;
  services.gnome.gnome-online-accounts.enable = true;

  services.gnome.gnome-browser-connector.enable  = true;

  environment.systemPackages = with pkgs; [
    firefox
    pavucontrol
    lxterminal # TODO: remove?
    ghostty
    (pkgs.gnome-tweaks or pkgs.gnome.gnome-tweaks)
    # TODO: shadow gnome-terminal
    ffmpegthumbnailer
    libheif # HEIF thumbnails
    gnomeExtensions.appindicator

    loupe

    desktop-file-utils # update-desktop-database
  ];

  # an attempt to make nautilus discover new files, but it proved to be a freebsd-linux incompatiblity
  # inotify is a linux thing, and freebsd instead features kqueue.
  # nfs likely doesn't support such events anyway, predating inotify.
  #kernel.sysctl = {
  #  "fs.inotify.max_user_watches" = "100000";
  #};
  # possible future fix:
  # https://en.wikipedia.org/wiki/File_Alteration_Monitor
  # or https://github.com/fsnotify/fsnotify

  environment.gnome.excludePackages = (with pkgs; [
    gnome-photos
    gnome-tour
    (pkgs.gedit or pkgs.gnome.gedit) # text editor (24.05 vs 23.11)
    papers # Document Viewer (new)
    (pkgs.eog or pkgs.gnome.eog)
    #pkgs.cheese # webcam tool
    #pkgs.baobab # Disk Usage Analyser
    (pkgs.simple-scan or pkgs.gnome.simple-scan) # scanning utility
    (pkgs.yelp or pkgs.gnome.yelp) # Help
    (pkgs.evince or pkgs.gnome.evince) # Document Viewer
    (pkgs.gnome-music or pkgs.gnome.gnome-music)
    (pkgs.gnome-terminal or pkgs.gnome.gnome-terminal)
    (pkgs.epiphany or pkgs.gnome.epiphany) # web browser
    (pkgs.geary or pkgs.gnome.geary) # email reader
    (pkgs.totem or pkgs.gnome.totem) # video player
    (pkgs.tali or pkgs.gnome.tali) # poker game
    (pkgs.iagno or pkgs.gnome.iagno) # go game
    (pkgs.hitori or pkgs.gnome.hitori) # sudoku game
    (pkgs.atomix or pkgs.gnome.atomix) # puzzle game
  ]);
}
