{ config, pkgs, hostname, ... }: {
  # 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;
  };

  # Configure keymap in X11
  services.xserver = {
    enable = true;
    layout = "us";
    xkbVariant = "";
    autorun = true;
    videoDrivers = [ "nvidia" ];
  };

  services.xserver = {
    # https://nixos.org/manual/nixos/stable/index.html#chap-gnome
    # Enable the GNOME Desktop Environment.
    desktopManager.gnome.enable = true;
    displayManager.gdm = {
      enable = true;
      settings = {
        "/apps/gdm/simple-greeter/".banner_message_enable = "true";
        "/apps/gdm/simple-greeter/".banner_message_text = ''
          --
          Welcome to ${hostname}

          You are accessing a U.S. Government (USG) Information 
          System (IS) that is provided for USG-authorized use only.

          By using this IS (which includes any device attached to 
          this IS), you consent to the following conditions:
          
          - The USG routinely intercepts and monitors communications 
            on this IS for purposes including, but not limited 
            to, renetration testing, COMSEC monitoring, network 
            operations and defense, personnel misconduct (PM), law 
            enforcement (LE),  and counterintelligence (CI) 
            investigations.
          
          - At any time, the USG may inspect and seize data stored 
            on this IS.
          
          - Communications using, or data stored on, this IS are not 
            private, are subject to routine monitoring, interception, 
            and search, and may be disclosed or used for any 
            USG-authorized purpose.
          
          - This IS includes security measures (e.g., authentication 
            and access controls) to protect USG interests--not for 
            your personal benefit or privacy.
          
          - Notwithstanding the above, using this IS does not 
            constitute consent to PM, LE or CI investigative 
            searching or monitoring of the content of privileged 
            communications, or work product, elated to personal 
            representation or services by attorneys, psychotherapists, 
            or clergy, and their assistants. Such communications 
            and work product are private and confidential. See User 
            Agreement for details. 

          --
        '';
      };
    };
  };

  # Set Gnome settings:
  services.gnome = { 
    games.enable = false; 
    core-utilities.enable = true;
    gnome-remote-desktop.enable = true;
  };

  # Set the firewall ports for gnome-remote-desktop:
  networking.firewall.interfaces.tailscale0.allowedTCPPorts = [ 3389 ];


  # https://nixos.wiki/wiki/GNOME
  # Remove unwanted packages
  environment.gnome.excludePackages = (with pkgs; [
    gnome.cheese
    gnome.gnome-music
    gnome.epiphany
    gnome.geary
    gnome.totem
    gnome.gnome-characters
    gnome-tour
    gnome-photos
    gnome.yelp
    gnome.gnome-font-viewer
    gnome-connections
    gnome.gnome-contacts
    gnome.gnome-logs
    gnome.gnome-maps
    gnome.simple-scan
  ]);

  environment.systemPackages = with pkgs; [
    # Gnome Extensions
    gnomeExtensions.tiling-assistant
    gnomeExtensions.dash-to-dock
    gnomeExtensions.blur-my-shell
    gnomeExtensions.vitals
    gnomeExtensions.user-themes
    gnomeExtensions.caffeine
    gnomeExtensions.hibernate-status-button
    gnomeExtensions.night-theme-switcher
    gnomeExtensions.gamemode

    # Gnome relevant packages
    gnome3.gnome-tweaks
    papirus-icon-theme
    dconf2nix # https://github.com/gvolpe/dconf2nix
  ];

  imports = [ 
    # Gnome Themes
    ./themes/gruvbox.nix
    ./themes/tokyo-night.nix
    ./themes/nordic.nix
    ./themes/vimix.nix
    ./themes/fluent.nix
    # You may need to edit which theme you're using in dconf.nix if you remove themes
   ];
}