at v192 3.6 kB view raw
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}