{ lib, config, pkgs, ... }: let cfg = config.my.desktop.gnome; in { options.my.desktop.gnome = { enable = lib.mkEnableOption "Enable Gnome and apply customization module"; keyboardLayout = lib.mkOption { default = "it"; type = lib.types.str; description = config.services.xserver.xkb.layout.description; }; disableXTerm = lib.mkOption { default = true; type = lib.types.bool; description = '' Disable the default terminal. Xterm. If disable don't forget to install one terminal! ''; }; # extraExtension = lib.mkOption { # default = [ ]; # description = '' # Extra extensions to add without polluting the main module # ''; # }; }; config = lib.mkIf cfg.enable { services = { xserver = { enable = true; xkb.layout = cfg.keyboardLayout; displayManager.gdm.enable = true; desktopManager.gnome.enable = true; desktopManager.xterm.enable = !cfg.disableXTerm; excludePackages = lib.mkIf cfg.disableXTerm [ pkgs.xterm ]; }; libinput.enable = true; }; environment = { systemPackages = with pkgs; [ dconf dconf2nix gnome-extension-manager gnome.dconf-editor gnome.gnome-tweaks ]; # Remove standard Gnome Packages gnome.excludePackages = (with pkgs; [ gedit # text editor gnome-photos gnome-tour gnome-connections gnome-photos ]) ++ (with pkgs.gnome; [ atomix # puzzle game cheese # webcam tool epiphany # web browser evince # document viewer geary # email reader gnome-calendar gnome-characters gnome-clocks gnome-contacts gnome-font-viewer gnome-maps gnome-music gnome-terminal gnome-weather hitori # sudoku game iagno # go game tali # poker game totem # video player yelp # help viewer ]); }; # gnome-extensions # home.packages = with pkgs; # lib.mkIf cfg.enableExtension # [ # gnomeExtensions.blur-my-shell # gnomeExtensions.caffeine # gnomeExtensions.dash-to-dock # gnomeExtensions.gsconnect # gnomeExtensions.gtile # gnomeExtensions.just-perfection # gnomeExtensions.pano # gnomeExtensions.quick-settings-tweaker # gnomeExtensions.rounded-window-corners # gnomeExtensions.tailscale-status # gnomeExtensions.vitals # ] ++ cfg.extraExtension; }; }