at 15.09-beta 2.2 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 ./e19.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 "Default desktop manager ($(defaultDM)) not found."; 68 }; 69 70 }; 71 72 }; 73 74 config = { 75 services.xserver.displayManager.session = cfg.session.list; 76 environment.systemPackages = 77 mkIf cfg.session.needBGPackages [ pkgs.feh ]; 78 }; 79}