nixpkgs-suyu/modules/services/x11/desktop-managers/kde4.nix
Eelco Dolstra 6e809242e9 * Ensure that the "kde" PAM module exists whn KDE is enabled.
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
2011-10-26 21:47:03 +00:00

159 lines
5.2 KiB
Nix
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{ 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"; } ];
};
}