at 16.09-beta 2.5 kB view raw
1{ config, lib, pkgs, ... }: 2 3with lib; 4 5let 6 7 xcfg = config.services.xserver; 8 cfg = xcfg.desktopManager; 9 10 # If desktop manager `d' isn't capable of setting a background and 11 # the xserver is enabled, the `feh' program is used as a fallback. 12 needBGCond = d: ! (d ? bgSupport && d.bgSupport) && xcfg.enable; 13 14in 15 16{ 17 # Note: the order in which desktop manager modules are imported here 18 # determines the default: later modules (if enabled) are preferred. 19 # E.g., if KDE is enabled, it supersedes xterm. 20 imports = [ 21 ./none.nix ./xterm.nix ./xfce.nix ./kde4.nix ./kde5.nix 22 ./enlightenment.nix ./gnome3.nix ./kodi.nix 23 ]; 24 25 options = { 26 27 services.xserver.desktopManager = { 28 29 session = mkOption { 30 internal = true; 31 default = []; 32 example = singleton 33 { name = "kde"; 34 bgSupport = true; 35 start = "..."; 36 }; 37 description = '' 38 Internal option used to add some common line to desktop manager 39 scripts before forwarding the value to the 40 <varname>displayManager</varname>. 41 ''; 42 apply = list: { 43 list = map (d: d // { 44 manage = "desktop"; 45 start = d.start 46 + optionalString (needBGCond d) '' 47 if test -e $HOME/.background-image; then 48 ${pkgs.feh}/bin/feh --bg-scale $HOME/.background-image 49 fi 50 ''; 51 }) list; 52 needBGPackages = [] != filter needBGCond list; 53 }; 54 }; 55 56 default = mkOption { 57 type = types.str; 58 default = ""; 59 example = "none"; 60 description = "Default desktop manager loaded if none have been chosen."; 61 apply = defaultDM: 62 if defaultDM == "" && cfg.session.list != [] then 63 (head cfg.session.list).name 64 else if any (w: w.name == defaultDM) cfg.session.list then 65 defaultDM 66 else 67 throw '' 68 Default desktop manager (${defaultDM}) not found. 69 Probably you want to change 70 services.xserver.desktopManager.default = "${defaultDM}"; 71 to one of 72 ${concatMapStringsSep "\n " (w: "services.xserver.desktopManager.default = \"${w.name}\";") cfg.session.list} 73 ''; 74 }; 75 76 }; 77 78 }; 79 80 config = { 81 services.xserver.displayManager.session = cfg.session.list; 82 environment.systemPackages = 83 mkIf cfg.session.needBGPackages [ pkgs.feh ]; 84 }; 85}