1{ config, lib, pkgs, utils, ... }: 2 3with lib; 4 5let 6 7 xcfg = config.services.xserver; 8 cfg = xcfg.desktopManager.mate; 9 10in 11 12{ 13 options = { 14 15 services.xserver.desktopManager.mate = { 16 enable = mkOption { 17 type = types.bool; 18 default = false; 19 description = lib.mdDoc "Enable the MATE desktop environment"; 20 }; 21 22 debug = mkEnableOption (lib.mdDoc "mate-session debug messages"); 23 }; 24 25 environment.mate.excludePackages = mkOption { 26 default = []; 27 example = literalExpression "[ pkgs.mate.mate-terminal pkgs.mate.pluma ]"; 28 type = types.listOf types.package; 29 description = lib.mdDoc "Which MATE packages to exclude from the default environment"; 30 }; 31 32 }; 33 34 config = mkIf cfg.enable { 35 36 services.xserver.displayManager.sessionPackages = [ 37 pkgs.mate.mate-session-manager 38 ]; 39 40 # Let caja find extensions 41 environment.sessionVariables.CAJA_EXTENSION_DIRS = [ "${config.system.path}/lib/caja/extensions-2.0" ]; 42 43 # Let mate-panel find applets 44 environment.sessionVariables."MATE_PANEL_APPLETS_DIR" = "${config.system.path}/share/mate-panel/applets"; 45 environment.sessionVariables."MATE_PANEL_EXTRA_MODULES" = "${config.system.path}/lib/mate-panel/applets"; 46 47 # Debugging 48 environment.sessionVariables.MATE_SESSION_DEBUG = mkIf cfg.debug "1"; 49 50 environment.systemPackages = utils.removePackagesByName 51 (pkgs.mate.basePackages ++ 52 pkgs.mate.extraPackages ++ 53 [ 54 pkgs.desktop-file-utils 55 pkgs.glib 56 pkgs.gtk3.out 57 pkgs.shared-mime-info 58 pkgs.xdg-user-dirs # Update user dirs as described in https://freedesktop.org/wiki/Software/xdg-user-dirs/ 59 pkgs.yelp # for 'Contents' in 'Help' menus 60 ]) 61 config.environment.mate.excludePackages; 62 63 programs.dconf.enable = true; 64 # Shell integration for VTE terminals 65 programs.bash.vteIntegration = mkDefault true; 66 programs.zsh.vteIntegration = mkDefault true; 67 68 # Mate uses this for printing 69 programs.system-config-printer.enable = (mkIf config.services.printing.enable (mkDefault true)); 70 71 services.gnome.at-spi2-core.enable = true; 72 services.gnome.gnome-keyring.enable = true; 73 services.udev.packages = [ pkgs.mate.mate-settings-daemon ]; 74 services.gvfs.enable = true; 75 services.upower.enable = config.powerManagement.enable; 76 services.xserver.libinput.enable = mkDefault true; 77 78 security.pam.services.mate-screensaver.unixAuth = true; 79 80 environment.pathsToLink = [ "/share" ]; 81 }; 82 83}