1{
2 config,
3 lib,
4 pkgs,
5 utils,
6 ...
7}:
8
9with lib;
10
11let
12
13 xcfg = config.services.xserver;
14 cfg = xcfg.desktopManager.mate;
15
16in
17
18{
19 options = {
20
21 services.xserver.desktopManager.mate = {
22 enable = mkOption {
23 type = types.bool;
24 default = false;
25 description = "Enable the MATE desktop environment";
26 };
27
28 debug = mkEnableOption "mate-session debug messages";
29
30 extraPanelApplets = mkOption {
31 default = [ ];
32 example = literalExpression "with pkgs.mate; [ mate-applets ]";
33 type = types.listOf types.package;
34 description = "Extra applets to add to mate-panel.";
35 };
36
37 extraCajaExtensions = mkOption {
38 default = [ ];
39 example = lib.literalExpression "with pkgs.mate; [ caja-extensions ]";
40 type = types.listOf types.package;
41 description = "Extra extensions to add to caja.";
42 };
43
44 enableWaylandSession = mkEnableOption "MATE Wayland session";
45 };
46
47 environment.mate.excludePackages = mkOption {
48 default = [ ];
49 example = literalExpression "[ pkgs.mate.mate-terminal pkgs.mate.pluma ]";
50 type = types.listOf types.package;
51 description = "Which MATE packages to exclude from the default environment";
52 };
53
54 };
55
56 config = mkMerge [
57 (mkIf (cfg.enable || cfg.enableWaylandSession) {
58 services.displayManager.sessionPackages = [
59 pkgs.mate.mate-session-manager
60 ];
61
62 environment.extraInit = lib.optionalString config.services.gnome.gcr-ssh-agent.enable ''
63 # Hack: https://bugzilla.redhat.com/show_bug.cgi?id=2250704 still
64 # applies to sessions not managed by systemd.
65 if [ -z "$SSH_AUTH_SOCK" ] && [ -n "$XDG_RUNTIME_DIR" ]; then
66 export SSH_AUTH_SOCK="$XDG_RUNTIME_DIR/gcr/ssh"
67 fi
68 '';
69
70 # Debugging
71 environment.sessionVariables.MATE_SESSION_DEBUG = mkIf cfg.debug "1";
72
73 environment.systemPackages = utils.removePackagesByName (
74 pkgs.mate.basePackages
75 ++ pkgs.mate.extraPackages
76 ++ [
77 (pkgs.mate.caja-with-extensions.override {
78 extensions = cfg.extraCajaExtensions;
79 })
80 (pkgs.mate.mate-panel-with-applets.override {
81 applets = cfg.extraPanelApplets;
82 })
83 pkgs.desktop-file-utils
84 pkgs.glib
85 pkgs.gtk3.out
86 pkgs.shared-mime-info
87 pkgs.xdg-user-dirs # Update user dirs as described in https://freedesktop.org/wiki/Software/xdg-user-dirs/
88 pkgs.yelp # for 'Contents' in 'Help' menus
89 ]
90 ) config.environment.mate.excludePackages;
91
92 programs.dconf.enable = true;
93 # Shell integration for VTE terminals
94 programs.bash.vteIntegration = mkDefault true;
95 programs.zsh.vteIntegration = mkDefault true;
96
97 # Mate uses this for printing
98 programs.system-config-printer.enable = (mkIf config.services.printing.enable (mkDefault true));
99
100 services.gnome.at-spi2-core.enable = true;
101 services.gnome.glib-networking.enable = true;
102 services.gnome.gnome-keyring.enable = true;
103 services.gnome.gcr-ssh-agent.enable = mkDefault true;
104 services.udev.packages = [ pkgs.mate.mate-settings-daemon ];
105 services.gvfs.enable = true;
106 services.upower.enable = config.powerManagement.enable;
107 services.libinput.enable = mkDefault true;
108
109 security.pam.services.mate-screensaver.unixAuth = true;
110
111 xdg.portal.configPackages = mkDefault [ pkgs.mate.mate-desktop ];
112
113 environment.pathsToLink = [ "/share" ];
114 })
115 (mkIf cfg.enableWaylandSession {
116 programs.wayfire.enable = true;
117
118 environment.sessionVariables.NIX_GSETTINGS_OVERRIDES_DIR = "${pkgs.mate.mate-gsettings-overrides}/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas";
119
120 environment.systemPackages = [ pkgs.mate.mate-wayland-session ];
121 services.displayManager.sessionPackages = [ pkgs.mate.mate-wayland-session ];
122 })
123 ];
124}