6e809242e9
Previously, this was only enabled in the KDM module, so if you were using a different display manager than KDM, stuff like getting out of the screensaver didn't work correctly. svn path=/nixos/trunk/; revision=30049
160 lines
5.2 KiB
Nix
160 lines
5.2 KiB
Nix
{ config, pkgs, ... }:
|
||
|
||
with pkgs.lib;
|
||
|
||
let
|
||
|
||
xcfg = config.services.xserver;
|
||
cfg = xcfg.desktopManager.kde4;
|
||
xorg = pkgs.xorg;
|
||
|
||
isKDE47 = pkgs.kde4 ? kde_wallpapers;
|
||
|
||
in
|
||
|
||
{
|
||
options = {
|
||
|
||
services.xserver.desktopManager.kde4.enable = mkOption {
|
||
default = false;
|
||
example = true;
|
||
description = "Enable the KDE 4 desktop environment.";
|
||
};
|
||
|
||
environment.kdePackages = mkOption {
|
||
default = [];
|
||
example = "[ pkgs.kde4.kdesdk ]";
|
||
type = types.list types.package;
|
||
description = "This option is obsolete. Please use <option>environment.systemPackages</option> instead.";
|
||
};
|
||
|
||
};
|
||
|
||
|
||
config = mkIf (xcfg.enable && cfg.enable) {
|
||
|
||
# If KDE 4 is enabled, make it the default desktop manager (unless
|
||
# overriden by the user's configuration).
|
||
# !!! doesn't work yet ("Multiple definitions. Only one is allowed
|
||
# for this option.")
|
||
# services.xserver.desktopManager.default = mkOverrideTemplate 900 "kde4";
|
||
|
||
services.xserver.desktopManager.session = singleton
|
||
{ name = "kde4";
|
||
bgSupport = true;
|
||
start =
|
||
''
|
||
# The KDE icon cache is supposed to update itself
|
||
# automatically, but it uses the timestamp on the icon
|
||
# theme directory as a trigger. Since in Nix the
|
||
# timestamp is always the same, this doesn't work. So as
|
||
# a workaround, nuke the icon cache on login. This isn't
|
||
# perfect, since it may require logging out after
|
||
# installing new applications to update the cache.
|
||
# See http://lists-archives.org/kde-devel/26175-what-when-will-icon-cache-refresh.html
|
||
rm -fv $HOME/.kde/cache-*/icon-cache.kcache
|
||
|
||
# Qt writes a weird ‘libraryPath’ line to
|
||
# ~/.config/Trolltech.conf that causes the KDE plugin
|
||
# paths of previous KDE invocations to be searched.
|
||
# Obviously using mismatching KDE libraries is potentially
|
||
# disastrous, so here we nuke references to the Nix store
|
||
# in Trolltech.conf. A better solution would be to stop
|
||
# Qt from doing this wackiness in the first place.
|
||
if [ -e $HOME/.config/Trolltech.conf ]; then
|
||
sed -e '/nix\\store\|nix\/store/ d' -i $HOME/.config/Trolltech.conf
|
||
fi
|
||
|
||
${optionalString (!isKDE47) ''
|
||
export DBUS_FATAL_WARNINGS=0
|
||
''}
|
||
|
||
# Start KDE.
|
||
exec ${pkgs.kde4.kdebase_workspace}/bin/startkde
|
||
'';
|
||
};
|
||
|
||
security.setuidOwners = singleton
|
||
{ program = "kcheckpass";
|
||
source = "${pkgs.kde4.kdebase_workspace}/lib/kde4/libexec/kcheckpass";
|
||
owner = "root";
|
||
group = "root";
|
||
setuid = true;
|
||
};
|
||
|
||
environment.systemPackages =
|
||
(if !isKDE47 then
|
||
# KDE <= 4.6
|
||
[ # temporary workarounds
|
||
pkgs.shared_desktop_ontologies
|
||
pkgs.strigi
|
||
|
||
pkgs.kde4.kdelibs
|
||
pkgs.kde4.kdebase
|
||
pkgs.kde4.kdebase_runtime
|
||
pkgs.kde4.kdebase_workspace
|
||
pkgs.kde4.oxygen_icons
|
||
pkgs.kde4.qt4 # needed for qdbus
|
||
pkgs.shared_mime_info
|
||
pkgs.gst_all.gstreamer
|
||
pkgs.gst_all.gstPluginsBase
|
||
pkgs.gst_all.gstPluginsGood
|
||
pkgs.gst_all.gstFfmpeg # for mp3 playback
|
||
xorg.xmessage # so that startkde can show error messages
|
||
xorg.xset # used by startkde, non-essential
|
||
] ++ optional (pkgs ? phonon_backend_gstreamer) pkgs.phonon_backend_gstreamer
|
||
else
|
||
# KDE >= 4.7
|
||
[ pkgs.kde4.kdelibs
|
||
|
||
pkgs.kde4.kde_baseapps # Splitted kdebase
|
||
pkgs.kde4.kde_workspace
|
||
pkgs.kde4.kde_runtime
|
||
pkgs.kde4.konsole
|
||
pkgs.kde4.kate
|
||
|
||
pkgs.kde4.kde_wallpapers # contains kdm's default background
|
||
pkgs.kde4.oxygen_icons
|
||
pkgs.virtuoso # to enable Nepomuk to find Virtuoso
|
||
|
||
# Starts KDE's Polkit authentication agent.
|
||
pkgs.kde4.polkit_kde_agent
|
||
|
||
# Phonon backends.
|
||
pkgs.phonon_backend_gstreamer
|
||
pkgs.gst_all.gstPluginsBase
|
||
pkgs.gst_all.gstPluginsGood
|
||
pkgs.gst_all.gstPluginsUgly
|
||
pkgs.gst_all.gstPluginsBad
|
||
pkgs.gst_all.gstFfmpeg # for mp3 playback
|
||
pkgs.gst_all.gstreamer # needed?
|
||
|
||
# Miscellaneous runtime dependencies.
|
||
pkgs.kde4.qt4 # needed for qdbus
|
||
pkgs.shared_mime_info
|
||
xorg.xmessage # so that startkde can show error messages
|
||
xorg.xset # used by startkde, non-essential
|
||
xorg.xauth # used by kdesu
|
||
pkgs.shared_desktop_ontologies # used by nepomuk
|
||
pkgs.strigi # used by nepomuk
|
||
]
|
||
) ++ config.environment.kdePackages;
|
||
|
||
environment.pathsToLink = [ "/share" ];
|
||
|
||
environment.etc = singleton
|
||
{ source = "${pkgs.xkeyboard_config}/etc/X11/xkb";
|
||
target = "X11/xkb";
|
||
};
|
||
|
||
# Enable helpful DBus services.
|
||
services.hal = mkIf (!isKDE47) { enable = true; };
|
||
services.udisks = mkIf isKDE47 { enable = true; };
|
||
services.upower = mkIf (isKDE47 && config.powerManagement.enable) { enable = true; };
|
||
|
||
security.pam.services = [ { name = "kde"; } ];
|
||
|
||
};
|
||
|
||
}
|