{ config, pkgs, lib, ... }: with lib; let cfg = config.gnome-system-custom; # Import gvariant for dconf types mkTuple = lib.gvariant.mkTuple; mkUint32 = lib.gvariant.mkUint32; mkEmptyArray = lib.gvariant.mkEmptyArray; in { options.gnome-system-custom = { enableDisplayManager = mkOption { type = types.bool; default = true; description = "Enable GDM display manager"; }; }; config = { # GNOME Desktop Environment services.xserver.enable = true; services.displayManager.gdm.enable = mkIf cfg.enableDisplayManager true; services.desktopManager.gnome.enable = true; # Keyboard layout services.xserver.xkb = { layout = "us"; options = ""; }; # Exclude unwanted GNOME default packages environment.gnome.excludePackages = with pkgs; [ gnome-tour gnome-console # terminal (using Ghostty instead) gnome-text-editor # text editor (using Neovim instead) gnome-connections # remote desktop client gnome-font-viewer # font viewer seahorse # passwords and keys baobab # disk usage analyzer gnome-disk-utility # disks gnome-logs # logs viewer gnome-system-monitor # system monitor decibels # audio player epiphany # GNOME web browser file-roller # archive manager geary # GNOME email client gnome-music gnome-photos gnome-maps gnome-weather gnome-contacts gnome-clocks gnome-calculator gnome-calendar gnome-characters simple-scan snapshot # camera totem # video player yelp # help viewer nautilus # file manager (using Thunar instead) ]; # XDG portal for proper desktop integration xdg.portal = { enable = true; extraPortals = with pkgs; [ xdg-desktop-portal-gnome xdg-desktop-portal-gtk ]; }; # Touchpad configuration services.libinput = { enable = true; touchpad = { naturalScrolling = true; tapping = false; }; }; # Input method configuration for GNOME i18n.inputMethod = { enable = true; type = "ibus"; ibus.engines = with pkgs.ibus-engines; [ libpinyin ]; }; # GNOME dconf settings programs.dconf.profiles.user.databases = [{ settings = { "org/gnome/settings-daemon/plugins/power" = { sleep-inactive-ac-type = "nothing"; }; "org/gnome/desktop/a11y/applications" = { screen-keyboard-enabled = false; }; "org/gnome/desktop/peripherals/mouse" = { accel-profile = "flat"; }; }; }]; # System packages for GNOME environment.systemPackages = with pkgs; [ hicolor-icon-theme # Fallback icon theme ]; }; }