1{ config, lib, pkgs, ... }:
2
3with lib;
4
5let
6
7 xcfg = config.services.xserver;
8 cfg = xcfg.desktopManager.kde5;
9 xorg = pkgs.xorg;
10
11 phononBackends = {
12 gstreamer = [
13 pkgs.phonon_backend_gstreamer
14 pkgs.gst_all.gstreamer
15 pkgs.gst_all.gstPluginsBase
16 pkgs.gst_all.gstPluginsGood
17 pkgs.gst_all.gstPluginsUgly
18 pkgs.gst_all.gstPluginsBad
19 pkgs.gst_all.gstFfmpeg # for mp3 playback
20 pkgs.phonon_qt5_backend_gstreamer
21 pkgs.gst_all_1.gstreamer
22 pkgs.gst_all_1.gst-plugins-base
23 pkgs.gst_all_1.gst-plugins-good
24 pkgs.gst_all_1.gst-plugins-ugly
25 pkgs.gst_all_1.gst-plugins-bad
26 pkgs.gst_all_1.gst-libav # for mp3 playback
27 ];
28
29 vlc = [
30 pkgs.phonon_qt5_backend_vlc
31 pkgs.phonon_backend_vlc
32 ];
33 };
34
35 phononBackendPackages = flip concatMap cfg.phononBackends
36 (name: attrByPath [name] (throw "unknown phonon backend `${name}'") phononBackends);
37
38 kf5 = pkgs.kf5_stable;
39
40 plasma5 = pkgs.plasma5_stable.override { inherit kf5; };
41
42 kdeApps = pkgs.kdeApps_stable.override { inherit kf5; };
43
44in
45
46{
47 options = {
48
49 services.xserver.desktopManager.kde5 = {
50 enable = mkOption {
51 type = types.bool;
52 default = false;
53 description = "Enable the Plasma 5 (KDE 5) desktop environment.";
54 };
55
56 phononBackends = mkOption {
57 type = types.listOf types.str;
58 default = ["gstreamer"];
59 example = ["gstreamer" "vlc"];
60 description = ''
61 Phonon backends to use in KDE. Only the VLC and GStreamer backends are
62 available. The GStreamer backend is preferred by upstream.
63 '';
64 };
65
66 };
67
68 };
69
70
71 config = mkIf (xcfg.enable && cfg.enable) {
72
73 warnings = optional config.services.xserver.desktopManager.kde4.enable
74 "KDE 4 should not be enabled at the same time as KDE 5";
75
76 services.xserver.desktopManager.session = singleton {
77 name = "kde5";
78 bgSupport = true;
79 start = ''exec ${plasma5.plasma-workspace}/bin/startkde;'';
80 };
81
82 security.setuidOwners = singleton {
83 program = "kcheckpass";
84 source = "${plasma5.plasma-workspace}/lib/libexec/kcheckpass";
85 owner = "root";
86 group = "root";
87 setuid = true;
88 };
89
90 environment.systemPackages =
91 filter isDerivation (builtins.attrValues plasma5)
92 ++ filter isDerivation (builtins.attrValues kf5)
93 ++ [
94 pkgs.qt4 # qtconfig is the only way to set Qt 4 theme
95
96 kdeApps.kde-baseapps
97 kdeApps.kde-base-artwork
98 kdeApps.kmix
99 kdeApps.konsole
100 kdeApps.oxygen-icons
101
102 kdeApps.kde-runtime
103
104 pkgs.hicolor_icon_theme
105
106 pkgs.orion # GTK theme, nearly identical to Breeze
107 ] ++ phononBackendPackages;
108
109 environment.pathsToLink = [ "/share" ];
110
111 environment.etc = singleton {
112 source = "${pkgs.xkeyboard_config}/etc/X11/xkb";
113 target = "X11/xkb";
114 };
115
116 environment.profileRelativeEnvVars =
117 mkIf (lib.elem "gstreamer" cfg.phononBackends)
118 {
119 GST_PLUGIN_SYSTEM_PATH = [ "/lib/gstreamer-0.10" ];
120 GST_PLUGIN_SYSTEM_PATH_1_0 = [ "/lib/gstreamer-1.0" ];
121 };
122
123 fonts.fonts = [ plasma5.oxygen-fonts ];
124
125 programs.ssh.askPassword = "${plasma5.ksshaskpass}/bin/ksshaskpass";
126
127 # Enable helpful DBus services.
128 services.udisks2.enable = true;
129 services.upower.enable = config.powerManagement.enable;
130
131 # Extra UDEV rules used by Solid
132 services.udev.packages = [ pkgs.media-player-info ];
133
134 security.pam.services.kde = { allowNullPassword = true; };
135
136 };
137
138}