2017-08-31 05:16:51 +02:00
{ config , lib , pkgs , . . . }:
with lib ;
let
# Remove packages of ys from xs, based on their names
removePackagesByName = xs : ys :
let
pkgName = drv : ( builtins . parseDrvName drv . name ) . name ;
ysNames = map pkgName ys ;
in
filter ( x : ! ( builtins . elem ( pkgName x ) ysNames ) ) xs ;
2018-01-04 17:04:57 +01:00
addToXDGDirs = p : ''
if [ - d " ${ p } / s h a r e / g s e t t i n g s - s c h e m a s / ${ p . name } " ] ; then
export XDG_DATA_DIRS = $ XDG_DATA_DIRS'' $ { XDG_DATA_DIRS : + : } $ { p } /share/gsettings-schemas / $ { p . name }
fi
if [ - d " ${ p } / l i b / g i r e p o s i t o r y - 1 . 0 " ] ; then
export GI_TYPELIB_PATH = $ GI_TYPELIB_PATH'' $ { GI_TYPELIB_PATH : + : } $ { p } /lib/girepository-1.0
export LD_LIBRARY_PATH = $ LD_LIBRARY_PATH'' $ { LD_LIBRARY_PATH : + : } $ { p } /lib
fi
'' ;
2017-08-31 05:16:51 +02:00
xcfg = config . services . xserver ;
cfg = xcfg . desktopManager . mate ;
in
{
options = {
2017-12-25 02:12:31 +01:00
services . xserver . desktopManager . mate = {
enable = mkOption {
type = types . bool ;
default = false ;
description = " E n a b l e t h e M A T E d e s k t o p e n v i r o n m e n t " ;
} ;
debug = mkEnableOption " m a t e - s e s s i o n d e b u g m e s s a g e s " ;
2017-08-31 05:16:51 +02:00
} ;
environment . mate . excludePackages = mkOption {
default = [ ] ;
example = literalExample " [ p k g s . m a t e . m a t e - t e r m i n a l p k g s . m a t e . p l u m a ] " ;
type = types . listOf types . package ;
description = " W h i c h M A T E p a c k a g e s t o e x c l u d e f r o m t h e d e f a u l t e n v i r o n m e n t " ;
} ;
} ;
config = mkIf ( xcfg . enable && cfg . enable ) {
services . xserver . desktopManager . session = singleton {
name = " m a t e " ;
bgSupport = true ;
start = ''
# Set GTK_DATA_PREFIX so that GTK+ can find the themes
export GTK_DATA_PREFIX = $ { config . system . path }
# Find theme engines
export GTK_PATH = $ { config . system . path } /lib/gtk-3.0 : $ { config . system . path } /lib/gtk-2.0
2017-12-24 22:32:08 +01:00
export XDG_MENU_PREFIX = mate-
2017-08-31 05:16:51 +02:00
# Find the mouse
export XCURSOR_PATH = ~/.icons : $ { config . system . path } /share/icons
2018-01-08 17:49:23 +01:00
# Let caja find extensions
export CAJA_EXTENSION_DIRS = $ CAJA_EXTENSION_DIRS'' $ { CAJA_EXTENSION_DIRS : + : } $ { config . system . path } /lib/caja/extensions-2.0
# Let caja extensions find gsettings schemas
$ { concatMapStrings ( p : ''
if [ - d " ${ p } / l i b / c a j a / e x t e n s i o n s - 2 . 0 " ] ; then
$ { addToXDGDirs p }
fi
'' )
config . environment . systemPackages
}
2018-01-04 17:12:49 +01:00
# Let mate-panel find applets
export MATE_PANEL_APPLETS_DIR = $ MATE_PANEL_APPLETS_DIR'' $ { MATE_PANEL_APPLETS_DIR : + : } $ { config . system . path } /share/mate-panel/applets
export MATE_PANEL_EXTRA_MODULES = $ MATE_PANEL_EXTRA_MODULES'' $ { MATE_PANEL_EXTRA_MODULES : + : } $ { config . system . path } /lib/mate-panel/applets
2018-01-04 17:04:57 +01:00
# Add mate-control-center paths to some XDG variables because its schemas are needed by mate-settings-daemon, and mate-settings-daemon is a dependency for mate-control-center (that is, they are mutually recursive)
$ { addToXDGDirs pkgs . mate . mate-control-center }
2017-08-31 05:16:51 +02:00
# Update user dirs as described in http://freedesktop.org/wiki/Software/xdg-user-dirs/
$ { pkgs . xdg-user-dirs } /bin/xdg-user-dirs-update
2017-12-25 02:12:31 +01:00
$ { pkgs . mate . mate-session-manager } /bin/mate-session $ { optionalString cfg . debug " - - d e b u g " } &
2017-08-31 05:16:51 +02:00
waitPID = $ !
'' ;
} ;
2017-09-01 22:27:24 +02:00
environment . systemPackages =
2017-08-31 05:16:51 +02:00
pkgs . mate . basePackages ++
( removePackagesByName
pkgs . mate . extraPackages
config . environment . mate . excludePackages ) ;
services . dbus . packages = [
pkgs . gnome3 . dconf
2018-02-25 03:23:58 +01:00
pkgs . at-spi2-core
2017-08-31 05:16:51 +02:00
] ;
services . gnome3 . gnome-keyring . enable = true ;
2017-10-04 13:23:46 +02:00
services . upower . enable = config . powerManagement . enable ;
2017-08-31 05:16:51 +02:00
2018-04-01 18:27:55 +02:00
security . pam . services . " m a t e - s c r e e n s a v e r " . unixAuth = true ;
2017-08-31 18:25:44 +02:00
environment . pathsToLink = [ " / s h a r e " ] ;
2017-08-31 05:16:51 +02:00
} ;
}