at master 4.0 kB view raw
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}